|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VFile: () => (/* binding */ VFile)\n/* harmony export */ });\n/* harmony import */ var is_buffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-buffer */ \"(ssr)/./node_modules/is-buffer/index.js\");\n/* harmony import */ var vfile_message__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vfile-message */ \"(ssr)/./node_modules/vfile-message/lib/index.js\");\n/* harmony import */ var _minpath_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./minpath.js */ \"path\");\n/* harmony import */ var _minproc_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./minproc.js */ \"process\");\n/* harmony import */ var _minurl_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./minurl.js */ \"(ssr)/./node_modules/vfile/lib/minurl.shared.js\");\n/* harmony import */ var _minurl_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./minurl.js */ \"url\");\n/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {import('./minurl.shared.js').URL} URL\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */ /**\n * @typedef {Record<string, unknown> & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'} BufferEncoding\n * Encodings supported by the buffer class.\n *\n * This is a copy of the types from Node, copied to prevent Node globals from\n * being needed.\n * Copied from: <https://github.com/DefinitelyTyped/DefinitelyTyped/blob/90a4ec8/types/node/buffer.d.ts#L170>\n *\n * @typedef {Options | URL | Value | VFile} Compatible\n * Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n * Set multiple values.\n * @property {Value | null | undefined} [value]\n * Set `value`.\n * @property {string | null | undefined} [cwd]\n * Set `cwd`.\n * @property {Array<string> | null | undefined} [history]\n * Set `history`.\n * @property {URL | string | null | undefined} [path]\n * Set `path`.\n * @property {string | null | undefined} [basename]\n * Set `basename`.\n * @property {string | null | undefined} [stem]\n * Set `stem`.\n * @property {string | null | undefined} [extname]\n * Set `extname`.\n * @property {string | null | undefined} [dirname]\n * Set `dirname`.\n * @property {Data | null | undefined} [data]\n * Set `data`.\n *\n * @typedef Map\n * Raw source map.\n *\n * See:\n * <https://github.com/mozilla/source-map/blob/58819f0/source-map.d.ts#L15-L23>.\n * @property {number} version\n * Which version of the source map spec this map is following.\n * @property {Array<string>} sources\n * An array of URLs to the original source files.\n * @property {Array<string>} names\n * An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n * The URL root from which all sources are relative.\n * @property {Array<string> | undefined} [sourcesContent]\n * An array of contents of the original source files.\n * @property {string} mappings\n * A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n * The generated file this source map is associated with.\n *\n * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options\n * Configuration.\n *\n * A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record<string, unknown>} ReporterSettings\n * Configuration for reporters.\n */ /**\n * @template {ReporterSettings} Settings\n * Options type.\n * @callback Reporter\n * Type for a reporter.\n * @param {Array<VFile>} files\n * Files to report.\n * @param {Settings} options\n * Configuration.\n * @returns {string}\n * Report.\n */ \n\n\n\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n *\n * @type {Array<'basename' | 'dirname' | 'extname' | 'history' | 'path' | 'stem'>}\n */ const order = [\n \"history\",\n \"path\",\n \"basename\",\n \"stem\",\n \"extname\",\n \"dirname\"\n];\nclass VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Buffer` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */ constructor(value){\n /** @type {Options | VFile} */ let options;\n if (!value) {\n options = {};\n } else if (typeof value === \"string\" || buffer(value)) {\n options = {\n value\n };\n } else if ((0,_minurl_js__WEBPACK_IMPORTED_MODULE_1__.isUrl)(value)) {\n options = {\n path: value\n };\n } else {\n options = value;\n }\n /**\n * Place to store custom information (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */ this.data = {};\n /**\n * List of messages associated with the file.\n *\n * @type {Array<VFileMessage>}\n */ this.messages = [];\n /**\n * List of filepaths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array<string>}\n */ this.history = [];\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */ this.cwd = _minproc_js__WEBPACK_IMPORTED_MODULE_2__.cwd();\n /* eslint-disable no-unused-expressions */ /**\n * Raw value.\n *\n * @type {Value}\n */ this.value;\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */ this.stored;\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */ this.result;\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */ this.map;\n /* eslint-enable no-unused-expressions */ // Set path related properties in the correct order.\n let index = -1;\n while(++index < order.length){\n const prop = order[index];\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (prop in options && options[prop] !== undefined && options[prop] !== null) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[prop] = prop === \"history\" ? [\n ...options[prop]\n ] : options[prop];\n }\n }\n /** @type {string} */ let prop;\n // Set non-path related properties.\n for(prop in options){\n // @ts-expect-error: fine to set other things.\n if (!order.includes(prop)) {\n // @ts-expect-error: fine to set other things.\n this[prop] = options[prop];\n }\n }\n }\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n */ get path() {\n return this.history[this.history.length - 1];\n }\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {string | URL} path\n */ set path(path) {\n if ((0,_minurl_js__WEBPACK_IMPORTED_MODULE_1__.isUrl)(path)) {\n path = (0,_minurl_js__WEBPACK_IMPORTED_MODULE_3__.fileURLToPath)(path);\n }\n assertNonEmpty(path, \"path\");\n if (this.path !== path) {\n this.history.push(path);\n }\n }\n /**\n * Get the parent path (example: `'~'`).\n */ get dirname() {\n return typeof this.path === \"string\" ? _minpath_js__WEBPACK_IMPORTED_MODULE_4__.dirname(this.path) : undefined;\n }\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n */ set dirname(dirname) {\n assertPath(this.basename, \"dirname\");\n this.path = _minpath_js__WEBPACK_IMPORTED_MODULE_4__.join(dirname || \"\", this.basename);\n }\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n */ get basename() {\n return typeof this.path === \"string\" ? _minpath_js__WEBPACK_IMPORTED_MODULE_4__.basename(this.path) : undefined;\n }\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */ set basename(basename) {\n assertNonEmpty(basename, \"basename\");\n assertPart(basename, \"basename\");\n this.path = _minpath_js__WEBPACK_IMPORTED_MODULE_4__.join(this.dirname || \"\", basename);\n }\n /**\n * Get the extname (including dot) (example: `'.js'`).\n */ get extname() {\n return typeof this.path === \"string\" ? _minpath_js__WEBPACK_IMPORTED_MODULE_4__.extname(this.path) : undefined;\n }\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n */ set extname(extname) {\n assertPart(extname, \"extname\");\n assertPath(this.dirname, \"extname\");\n if (extname) {\n if (extname.charCodeAt(0) !== 46 /* `.` */ ) {\n throw new Error(\"`extname` must start with `.`\");\n }\n if (extname.includes(\".\", 1)) {\n throw new Error(\"`extname` cannot contain multiple dots\");\n }\n }\n this.path = _minpath_js__WEBPACK_IMPORTED_MODULE_4__.join(this.dirname, this.stem + (extname || \"\"));\n }\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n */ get stem() {\n return typeof this.path === \"string\" ? _minpath_js__WEBPACK_IMPORTED_MODULE_4__.basename(this.path, this.extname) : undefined;\n }\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */ set stem(stem) {\n assertNonEmpty(stem, \"stem\");\n assertPart(stem, \"stem\");\n this.path = _minpath_js__WEBPACK_IMPORTED_MODULE_4__.join(this.dirname || \"\", stem + (this.extname || \"\"));\n }\n /**\n * Serialize the file.\n *\n * @param {BufferEncoding | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Buffer`\n * (default: `'utf8'`).\n * @returns {string}\n * Serialized file.\n */ toString(encoding) {\n return (this.value || \"\").toString(encoding || undefined);\n }\n /**\n * Create a warning message associated with the file.\n *\n * Its `fatal` is set to `false` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */ message(reason, place, origin) {\n const message = new vfile_message__WEBPACK_IMPORTED_MODULE_5__.VFileMessage(reason, place, origin);\n if (this.path) {\n message.name = this.path + \":\" + message.name;\n message.file = this.path;\n }\n message.fatal = false;\n this.messages.push(message);\n return message;\n }\n /**\n * Create an info message associated with the file.\n *\n * Its `fatal` is set to `null` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */ info(reason, place, origin) {\n const message = this.message(reason, place, origin);\n message.fatal = null;\n return message;\n }\n /**\n * Create a fatal error associated with the file.\n *\n * Its `fatal` is set to `true` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * > 👉 **Note**: a fatal error means that a file is no longer processable.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Message.\n * @throws {VFileMessage}\n * Message.\n */ fail(reason, place, origin) {\n const message = this.message(reason, place, origin);\n message.fatal = true;\n throw message;\n }\n}\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {void}\n * Nothing.\n */ function assertPart(part, name) {\n if (part && part.includes(_minpath_js__WEBPACK_IMPORTED_MODULE_4__.sep)) {\n throw new Error(\"`\" + name + \"` cannot be a path: did not expect `\" + _minpath_js__WEBPACK_IMPORTED_MODULE_4__.sep + \"`\");\n }\n}\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */ function assertNonEmpty(part, name) {\n if (!part) {\n throw new Error(\"`\" + name + \"` cannot be empty\");\n }\n}\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */ function assertPath(path, name) {\n if (!path) {\n throw new Error(\"Setting `\" + name + \"` requires `path` to be set too\");\n }\n}\n/**\n * Assert `value` is a buffer.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Buffer}\n * Whether `value` is a Node.js buffer.\n */ function buffer(value) {\n return is_buffer__WEBPACK_IMPORTED_MODULE_0__(value);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvdmZpbGUvbGliL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7Ozs7OztDQU9DLEdBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2REMsR0FFRDs7Ozs7Ozs7Ozs7Q0FXQyxHQUVpQztBQUNRO0FBQ1Q7QUFDQTtBQUNXO0FBRTVDOzs7Ozs7Q0FNQyxHQUNELE1BQU1NLFFBQVE7SUFBQztJQUFXO0lBQVE7SUFBWTtJQUFRO0lBQVc7Q0FBVTtBQUVwRSxNQUFNQztJQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkMsR0FDREMsWUFBWUMsS0FBSyxDQUFFO1FBQ2pCLDRCQUE0QixHQUM1QixJQUFJQztRQUVKLElBQUksQ0FBQ0QsT0FBTztZQUNWQyxVQUFVLENBQUM7UUFDYixPQUFPLElBQUksT0FBT0QsVUFBVSxZQUFZRSxPQUFPRixRQUFRO1lBQ3JEQyxVQUFVO2dCQUFDRDtZQUFLO1FBQ2xCLE9BQU8sSUFBSUosaURBQUtBLENBQUNJLFFBQVE7WUFDdkJDLFVBQVU7Z0JBQUNSLE1BQU1PO1lBQUs7UUFDeEIsT0FBTztZQUNMQyxVQUFVRDtRQUNaO1FBRUE7Ozs7Ozs7S0FPQyxHQUNELElBQUksQ0FBQ0csSUFBSSxHQUFHLENBQUM7UUFFYjs7OztLQUlDLEdBQ0QsSUFBSSxDQUFDQyxRQUFRLEdBQUcsRUFBRTtRQUVsQjs7Ozs7O0tBTUMsR0FDRCxJQUFJLENBQUNDLE9BQU8sR0FBRyxFQUFFO1FBRWpCOzs7O0tBSUMsR0FDRCxJQUFJLENBQUNDLEdBQUcsR0FBR1osNENBQVE7UUFFbkIsd0NBQXdDLEdBQ3hDOzs7O0tBSUMsR0FDRCxJQUFJLENBQUNNLEtBQUs7UUFFVixxREFBcUQ7UUFDckQsZ0NBQWdDO1FBRWhDOzs7Ozs7S0FNQyxHQUNELElBQUksQ0FBQ08sTUFBTTtRQUVYOzs7Ozs7O0tBT0MsR0FDRCxJQUFJLENBQUNDLE1B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QUFNLEVBQUU7UUFDMUIsTUFBTUgsVUFBVSxJQUFJLENBQUNBLE9BQU8sQ0FBQ0MsUUFBUUMsT0FBT0M7UUFFNUNILFFBQVFNLEtBQUssR0FBRztRQUVoQixPQUFPTjtJQUNUO0lBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkMsR0FDRFEsS0FBS1AsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRTtRQUMxQixNQUFNSCxVQUFVLElBQUksQ0FBQ0EsT0FBTyxDQUFDQyxRQUFRQyxPQUFPQztRQUU1Q0gsUUFBUU0sS0FBSyxHQUFHO1FBRWhCLE1BQU1OO0lBQ1I7QUFDRjtBQUVBOzs7Ozs7Ozs7Q0FTQyxHQUNELFNBQVNQLFdBQVdnQixJQUFJLEVBQUVMLElBQUk7SUFDNUIsSUFBSUssUUFBUUEsS0FBS3ZCLFFBQVEsQ0FBQ3JCLDRDQUFRLEdBQUc7UUFDbkMsTUFBTSxJQUFJK0IsTUFDUixNQUFNUSxPQUFPLHlDQUF5Q3ZDLDRDQUFRLEdBQUc7SUFFckU7QUFDRjtBQUVBOzs7Ozs7Ozs7Q0FTQyxHQUNELFNBQVNzQixlQUFlc0IsSUFBSSxFQUFFTCxJQUFJO0lBQ2hDLElBQUksQ0FBQ0ssTUFBTTtRQUNULE1BQU0sSUFBSWIsTUFBTSxNQUFNUSxPQUFPO0lBQy9CO0FBQ0Y7QUFFQTs7Ozs7Ozs7O0NBU0MsR0FDRCxTQUFTZCxXQUFXekIsSUFBSSxFQUFFdUMsSUFBSTtJQUM1QixJQUFJLENBQUN2QyxNQUFNO1FBQ1QsTUFBTSxJQUFJK0IsTUFBTSxjQUFjUSxPQUFPO0lBQ3ZDO0FBQ0Y7QUFFQTs7Ozs7OztDQU9DLEdBQ0QsU0FBUzlCLE9BQU9GLEtBQUs7SUFDbkIsT0FBT1Qsc0NBQVVBLENBQUNTO0FBQ3BCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvdmZpbGUvbGliL2luZGV4LmpzP2RhMzYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLk5vZGV9IE5vZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9zaXRpb259IFBvc2l0aW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9taW51cmwuc2hhcmVkLmpzJykuVVJMfSBVUkxcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuRGF0YX0gRGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vaW5kZXguanMnKS5WYWx1ZX0gVmFsdWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHt0eXBlOiBzdHJpbmcsIHBvc2l0aW9uPzogUG9zaXRpb24gfCB1bmRlZmluZWR9fSBOb2RlTGlrZVxuICpcbiAqIEB0eXBlZGVmIHsnYXNjaWknIHwgJ3V0ZjgnIHwgJ3V0Zi04JyB8ICd1dGYxNmxlJyB8ICd1Y3MyJyB8ICd1Y3MtMicgfCAnYmFzZTY0JyB8ICdiYXNlNjR1cmwnIHwgJ2xhdGluMScgfCAnYmluYXJ5JyB8ICdoZXgnfSBCdWZmZXJFbmNvZGluZ1xuICogICBFbmNvZGluZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBidWZmZXIgY2xhc3MuXG4gKlxuICogICBUaGlzIGlzIGEgY29weSBvZiB0aGUgdHlwZXMgZnJvbSBOb2RlLCBjb3BpZWQgdG8gcHJldmVudCBOb2RlIGdsb2JhbHMgZnJvbVxuICogICBiZWluZyBuZWVkZWQuXG4gKiAgIENvcGllZCBmcm9tOiA8aHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvYmxvYi85MGE0ZWM4L3R5cGVzL25vZGUvYnVmZmVyLmQudHMjTDE3MD5cbiAqXG4gKiBAdHlwZWRlZiB7T3B0aW9ucyB8IFVSTCB8IFZhbHVlIHwgVkZpbGV9IENvbXBhdGlibGVcbiAqICAgVGhpbmdzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gKlxuICogQHR5cGVkZWYgVkZpbGVDb3JlT3B0aW9uc1xuICogICBTZXQgbXVsdGlwbGUgdmFsdWVzLlxuICogQHByb3BlcnR5IHtWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV1cbiAqICAgU2V0IGB2YWx1ZWAuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtjd2RdXG4gKiAgIFNldCBgY3dkYC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPiB8IG51bGwgfCB1bmRlZmluZWR9IFtoaXN0b3J5XVxuICogICBTZXQgYGhpc3RvcnlgLlxuICogQHByb3BlcnR5IHtVUkwgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGF0aF1cbiAqICAgU2V0IGBwYXRoYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2Jhc2VuYW1lXVxuICogICBTZXQgYGJhc2VuYW1lYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3N0ZW1dXG4gKiAgIFNldCBgc3RlbWAuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtleHRuYW1lXVxuICogICBTZXQgYGV4dG5hbWVgLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbZGlybmFtZV1cbiAqICAgU2V0IGBkaXJuYW1lYC5cbiAqIEBwcm9wZXJ0eSB7RGF0YSB8IG51bGwgfCB1bmRlZmluZWR9IFtkYXRhXVxuICogICBTZXQgYGRhdGFgLlxuICpcbiAqIEB0eXBlZGVmIE1hcFxuICogICBSYXcgc291cmNlIG1hcC5cbiAqXG4gKiAgIFNlZTpcbiAqICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvYmxvYi81ODgxOWYwL3NvdXJjZS1tYXAuZC50cyNMMTUtTDIzPi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJzaW9uXG4gKiAgIFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHNvdXJjZXNcbiAqICAgQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSBuYW1lc1xuICogICBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IFtzb3VyY2VSb290XVxuICogICBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz4gfCB1bmRlZmluZWR9IFtzb3VyY2VzQ29udGVudF1cbiAqICAgQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtYXBwaW5nc1xuICogICBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZVxuICogICBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHVua25vd259ICYgVkZpbGVDb3JlT3B0aW9uc30gT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICpcbiAqICAgQSBidW5jaCBvZiBrZXlzIHRoYXQgd2lsbCBiZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZS5cbiAqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IFJlcG9ydGVyU2V0dGluZ3NcbiAqICAgQ29uZmlndXJhdGlvbiBmb3IgcmVwb3J0ZXJzLlxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtSZXBvcnRlclNldHRpbmdzfSBTZXR0aW5nc1xuICogICBPcHRpb25zIHR5cGUuXG4gKiBAY2FsbGJhY2sgUmVwb3J0ZXJcbiAqICAgVHlwZSBmb3IgYSByZXBvcnRlci5cbiAqIEBwYXJhbSB7QXJyYXk8VkZpbGU+fSBmaWxlc1xuICogICBGaWxlcyB0byByZXBvcnQuXG4gKiBAcGFyYW0ge1NldHRpbmdzfSBvcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBSZXBvcnQuXG4gKi9cblxuaW1wb3J0IGJ1ZmZlckxpa2UgZnJvbSAnaXMtYnVmZmVyJ1xuaW1wb3J0IHtWRmlsZU1lc3NhZ2V9IGZyb20gJ3ZmaWxlLW1lc3NhZ2UnXG5pbXBvcnQge3BhdGh9IGZyb20gJy4vbWlucGF0aC5qcydcbmltcG9ydCB7cHJvY30gZnJvbSAnLi9taW5wcm9jLmpzJ1xuaW1wb3J0IHt1cmxUb1BhdGgsIGlzVXJsfSBmcm9tICcuL21pbnVybC5qcydcblxuLyoqXG4gKiBPcmRlciBvZiBzZXR0aW5nIChsZWFzdCBzcGVjaWZpYyB0byBtb3N0KSwgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugb3RoZXJ3aXNlXG4gKiBge3N0ZW06ICdhJywgcGF0aDogJ34vYi5qcyd9YCB3b3VsZCB0aHJvdywgYXMgYSBwYXRoIGlzIG5lZWRlZCBiZWZvcmUgYVxuICogc3RlbSBjYW4gYmUgc2V0LlxuICpcbiAqIEB0eXBlIHtBcnJheTwnYmFzZW5hbWUnIHwgJ2Rpcm5hbWUnIHwgJ2V4dG5hbWUnIHwgJ2hpc3RvcnknIHwgJ3BhdGgnIHwgJ3N0ZW0nPn1cbiAqL1xuY29uc3Qgb3JkZXIgPSBbJ2hpc3RvcnknLCAncGF0aCcsICdiYXNlbmFtZScsICdzdGVtJywgJ2V4dG5hbWUnLCAnZGlybmFtZSddXG5cbmV4cG9ydCBjbGFzcyBWRmlsZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdmlydHVhbCBmaWxlLlxuICAgKlxuICAgKiBgb3B0aW9uc2AgaXMgdHJlYXRlZCBhczpcbiAgICpcbiAgICogKiAgIGBzdHJpbmdgIG9yIGBCdWZmZXJgIOKAlCBge3ZhbHVlOiBvcHRpb25zfWBcbiAgICogKiAgIGBVUkxgIOKAlCBge3BhdGg6IG9wdGlvbnN9YFxuICAgKiAqICAgYFZGaWxlYCDigJQgc2hhbGxvdyBjb3BpZXMgaXRzIGRhdGEgb3ZlciB0byB0aGUgbmV3IGZpbGVcbiAgICogKiAgIGBvYmplY3RgIOKAlCBhbGwgZmllbGRzIGFyZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZVxuICAgKlxuICAgKiBQYXRoIHJlbGF0ZWQgZmllbGRzIGFyZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAobGVhc3Qgc3BlY2lmaWMgdG9cbiAgICogbW9zdCBzcGVjaWZpYyk6IGBoaXN0b3J5YCwgYHBhdGhgLCBgYmFzZW5hbWVgLCBgc3RlbWAsIGBleHRuYW1lYCxcbiAgICogYGRpcm5hbWVgLlxuICAgKlxuICAgKiBZb3UgY2Fubm90IHNldCBgZGlybmFtZWAgb3IgYGV4dG5hbWVgIHdpdGhvdXQgc2V0dGluZyBlaXRoZXIgYGhpc3RvcnlgLFxuICAgKiBgcGF0aGAsIGBiYXNlbmFtZWAsIG9yIGBzdGVtYCB0b28uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV1cbiAgICogICBGaWxlIHZhbHVlLlxuICAgKiBAcmV0dXJuc1xuICAgKiAgIE5ldyBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgLyoqIEB0eXBlIHtPcHRpb25zIHwgVkZpbGV9ICovXG4gICAgbGV0IG9wdGlvbnNcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBidWZmZXIodmFsdWUpKSB7XG4gICAgICBvcHRpb25zID0ge3ZhbHVlfVxuICAgIH0gZWxzZSBpZiAoaXNVcmwodmFsdWUpKSB7XG4gICAgICBvcHRpb25zID0ge3BhdGg6IHZhbHVlfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gdmFsdWVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZSB0byBzdG9yZSBjdXN0b20gaW5mb3JtYXRpb24gKGRlZmF1bHQ6IGB7fWApLlxuICAgICAqXG4gICAgICogSXTigJlzIE9LIHRvIHN0b3JlIGN1c3RvbSBkYXRhIGRpcmVjdGx5IG9uIHRoZSBmaWxlIGJ1dCBtb3ZpbmcgaXQgdG9cbiAgICAgKiBgZGF0YWAgaXMgcmVjb21tZW5kZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmRhdGEgPSB7fVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8VkZpbGVNZXNzYWdlPn1cbiAgICAgKi9cbiAgICB0aGlzLm1lc3NhZ2VzID0gW11cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZmlsZXBhdGhzIHRoZSBmaWxlIG1vdmVkIGJldHdlZW4uXG4gICAgICpcbiAgICAgKiBUaGUgZmlyc3QgaXMgdGhlIG9yaWdpbmFsIHBhdGggYW5kIHRoZSBsYXN0IGlzIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn1cbiAgICAgKi9cbiAgICB0aGlzLmhpc3RvcnkgPSBbXVxuXG4gICAgLyoqXG4gICAgICogQmFzZSBvZiBgcGF0aGAgKGRlZmF1bHQ6IGBwcm9jZXNzLmN3ZCgpYCBvciBgJy8nYCBpbiBicm93c2VycykuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3dkID0gcHJvYy5jd2QoKVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgLyoqXG4gICAgICogUmF3IHZhbHVlLlxuICAgICAqXG4gICAgICogQHR5cGUge1ZhbHVlfVxuICAgICAqL1xuICAgIHRoaXMudmFsdWVcblxuICAgIC8vIFRoZSBiZWxvdyBhcmUgbm9uLXN0YW5kYXJkLCB0aGV5IGFyZSDigJx3ZWxsLWtub3du4oCdLlxuICAgIC8vIEFzIGluLCB1c2VkIGluIHNldmVyYWwgdG9vbHMuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGEgZmlsZSB3YXMgc2F2ZWQgdG8gZGlzay5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCBieSB2ZmlsZSByZXBvcnRlcnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnN0b3JlZFxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tLCBub24tc3RyaW5nLCBjb21waWxlZCwgcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgYnkgdW5pZmllZCB0byBzdG9yZSBub24tc3RyaW5nIHJlc3VsdHMuXG4gICAgICogT25lIGV4YW1wbGUgaXMgd2hlbiB0dXJuaW5nIG1hcmtkb3duIGludG8gUmVhY3Qgbm9kZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7dW5rbm93bn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3VsdFxuXG4gICAgLyoqXG4gICAgICogU291cmNlIG1hcC5cbiAgICAgKlxuICAgICAqIFRoaXMgdHlwZSBpcyBlcXVpdmFsZW50IHRvIHRoZSBgUmF3U291cmNlTWFwYCB0eXBlIGZyb20gdGhlIGBzb3VyY2UtbWFwYFxuICAgICAqIG1vZHVsZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXAgfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMubWFwXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cblxuICAgIC8vIFNldCBwYXRoIHJlbGF0ZWQgcHJvcGVydGllcyBpbiB0aGUgY29ycmVjdCBvcmRlci5cbiAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBvcmRlci5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBvcmRlcltpbmRleF1cblxuICAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVzZSBgaW5gIGluc3RlYWQgb2YgYGhhc093blByb3BlcnR5YCB0byBhY2NlcHRcbiAgICAgIC8vIGB2ZmlsZWBzIHRvby5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcCBpbiBvcHRpb25zICYmXG4gICAgICAgIG9wdGlvbnNbcHJvcF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBvcHRpb25zW3Byb3BdICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc27igJl0IHVuZGVyc3RhbmQgYmFzaWMgcmVhbGl0eS5cbiAgICAgICAgdGhpc1twcm9wXSA9IHByb3AgPT09ICdoaXN0b3J5JyA/IFsuLi5vcHRpb25zW3Byb3BdXSA6IG9wdGlvbnNbcHJvcF1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgcHJvcFxuXG4gICAgLy8gU2V0IG5vbi1wYXRoIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAgICBmb3IgKHByb3AgaW4gb3B0aW9ucykge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogZmluZSB0byBzZXQgb3RoZXIgdGhpbmdzLlxuICAgICAgaWYgKCFvcmRlci5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBmaW5lIHRvIHNldCBvdGhlciB0aGluZ3MuXG4gICAgICAgIHRoaXNbcHJvcF0gPSBvcHRpb25zW3Byb3BdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCBwYXRoIChleGFtcGxlOiBgJ34vaW5kZXgubWluLmpzJ2ApLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMV1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZ1bGwgcGF0aCAoZXhhbXBsZTogYCd+L2luZGV4Lm1pbi5qcydgKS5cbiAgICpcbiAgICogQ2Fubm90IGJlIG51bGxpZmllZC5cbiAgICogWW91IGNhbiBzZXQgYSBmaWxlIFVSTCAoYSBgVVJMYCBvYmplY3Qgd2l0aCBhIGBmaWxlOmAgcHJvdG9jb2wpIHdoaWNoIHdpbGxcbiAgICogYmUgdHVybmVkIGludG8gYSBwYXRoIHdpdGggYHVybC5maWxlVVJMVG9QYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVUkx9IHBhdGhcbiAgICovXG4gIHNldCBwYXRoKHBhdGgpIHtcbiAgICBpZiAoaXNVcmwocGF0aCkpIHtcbiAgICAgIHBhdGggPSB1cmxUb1BhdGgocGF0aClcbiAgICB9XG5cbiAgICBhc3NlcnROb25FbXB0eShwYXRoLCAncGF0aCcpXG5cbiAgICBpZiAodGhpcy5wYXRoICE9PSBwYXRoKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChwYXRoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuXG4gICAqL1xuICBnZXQgZGlybmFtZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gJ3N0cmluZycgPyBwYXRoLmRpcm5hbWUodGhpcy5wYXRoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS5cbiAgICpcbiAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZeKAmXMgbm8gYHBhdGhgIHlldC5cbiAgICovXG4gIHNldCBkaXJuYW1lKGRpcm5hbWUpIHtcbiAgICBhc3NlcnRQYXRoKHRoaXMuYmFzZW5hbWUsICdkaXJuYW1lJylcbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4oZGlybmFtZSB8fCAnJywgdGhpcy5iYXNlbmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2VuYW1lIChpbmNsdWRpbmcgZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluLmpzJ2ApLlxuICAgKi9cbiAgZ2V0IGJhc2VuYW1lKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAnc3RyaW5nJyA/IHBhdGguYmFzZW5hbWUodGhpcy5wYXRoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBiYXNlbmFtZSAoaW5jbHVkaW5nIGV4dG5hbWUpIChgJ2luZGV4Lm1pbi5qcydgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS5cbiAgICovXG4gIHNldCBiYXNlbmFtZShiYXNlbmFtZSkge1xuICAgIGFzc2VydE5vbkVtcHR5KGJhc2VuYW1lLCAnYmFzZW5hbWUnKVxuICAgIGFzc2VydFBhcnQoYmFzZW5hbWUsICdiYXNlbmFtZScpXG4gICAgdGhpcy5wYXRoID0gcGF0aC5qb2luKHRoaXMuZGlybmFtZSB8fCAnJywgYmFzZW5hbWUpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuXG4gICAqL1xuICBnZXQgZXh0bmFtZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gJ3N0cmluZycgPyBwYXRoLmV4dG5hbWUodGhpcy5wYXRoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXh0bmFtZSAoaW5jbHVkaW5nIGRvdCkgKGV4YW1wbGU6IGAnLmpzJ2ApLlxuICAgKlxuICAgKiBDYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKGAnLydgIG9uIHVuaXgsIG1hY09TLCBhbmQgYnJvd3NlcnMsIGAnXFwnYFxuICAgKiBvbiB3aW5kb3dzKS5cbiAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZeKAmXMgbm8gYHBhdGhgIHlldC5cbiAgICovXG4gIHNldCBleHRuYW1lKGV4dG5hbWUpIHtcbiAgICBhc3NlcnRQYXJ0KGV4dG5hbWUsICdleHRuYW1lJylcbiAgICBhc3NlcnRQYXRoKHRoaXMuZGlybmFtZSwgJ2V4dG5hbWUnKVxuXG4gICAgaWYgKGV4dG5hbWUpIHtcbiAgICAgIGlmIChleHRuYW1lLmNoYXJDb2RlQXQoMCkgIT09IDQ2IC8qIGAuYCAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gJylcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dG5hbWUuaW5jbHVkZXMoJy4nLCAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJuYW1lLCB0aGlzLnN0ZW0gKyAoZXh0bmFtZSB8fCAnJykpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVtIChiYXNlbmFtZSB3L28gZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluJ2ApLlxuICAgKi9cbiAgZ2V0IHN0ZW0oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnXG4gICAgICA/IHBhdGguYmFzZW5hbWUodGhpcy5wYXRoLCB0aGlzLmV4dG5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS5cbiAgICovXG4gIHNldCBzdGVtKHN0ZW0pIHtcbiAgICBhc3NlcnROb25FbXB0eShzdGVtLCAnc3RlbScpXG4gICAgYXNzZXJ0UGFydChzdGVtLCAnc3RlbScpXG4gICAgdGhpcy5wYXRoID0gcGF0aC5qb2luKHRoaXMuZGlybmFtZSB8fCAnJywgc3RlbSArICh0aGlzLmV4dG5hbWUgfHwgJycpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0aGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJFbmNvZGluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmNvZGluZz0ndXRmOCddXG4gICAqICAgQ2hhcmFjdGVyIGVuY29kaW5nIHRvIHVuZGVyc3RhbmQgYHZhbHVlYCBhcyB3aGVuIGl04oCZcyBhIGBCdWZmZXJgXG4gICAqICAgKGRlZmF1bHQ6IGAndXRmOCdgKS5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogICBTZXJpYWxpemVkIGZpbGUuXG4gICAqL1xuICB0b1N0cmluZyhlbmNvZGluZykge1xuICAgIHJldHVybiAodGhpcy52YWx1ZSB8fCAnJykudG9TdHJpbmcoZW5jb2RpbmcgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHdhcm5pbmcgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIEl0cyBgZmF0YWxgIGlzIHNldCB0byBgZmFsc2VgIGFuZCBgZmlsZWAgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC5cbiAgICogSXRzIGFkZGVkIHRvIGBmaWxlLm1lc3NhZ2VzYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBFcnJvciB8IFZGaWxlTWVzc2FnZX0gcmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCB1c2VzIHRoZSBzdGFjayBhbmQgbWVzc2FnZSBvZiB0aGUgZXJyb3IgaWYgZ2l2ZW4uXG4gICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgUG9zaXRpb24gfCBQb2ludCB8IG51bGwgfCB1bmRlZmluZWR9IFtwbGFjZV1cbiAgICogICBQbGFjZSBpbiBmaWxlIHdoZXJlIHRoZSBtZXNzYWdlIG9jY3VycmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOlxuICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLlxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKiAgIE1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlKHJlYXNvbiwgcGxhY2UsIG9yaWdpbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgVkZpbGVNZXNzYWdlKHJlYXNvbiwgcGxhY2UsIG9yaWdpbilcblxuICAgIGlmICh0aGlzLnBhdGgpIHtcbiAgICAgIG1lc3NhZ2UubmFtZSA9IHRoaXMucGF0aCArICc6JyArIG1lc3NhZ2UubmFtZVxuICAgICAgbWVzc2FnZS5maWxlID0gdGhpcy5wYXRoXG4gICAgfVxuXG4gICAgbWVzc2FnZS5mYXRhbCA9IGZhbHNlXG5cbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcblxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluZm8gbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIEl0cyBgZmF0YWxgIGlzIHNldCB0byBgbnVsbGAgYW5kIGBmaWxlYCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLlxuICAgKiBJdHMgYWRkZWQgdG8gYGZpbGUubWVzc2FnZXNgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVycm9yIHwgVkZpbGVNZXNzYWdlfSByZWFzb25cbiAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHVzZXMgdGhlIHN0YWNrIGFuZCBtZXNzYWdlIG9mIHRoZSBlcnJvciBpZiBnaXZlbi5cbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBQb3NpdGlvbiB8IFBvaW50IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3BsYWNlXVxuICAgKiAgIFBsYWNlIGluIGZpbGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6XG4gICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuXG4gICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9XG4gICAqICAgTWVzc2FnZS5cbiAgICovXG4gIGluZm8ocmVhc29uLCBwbGFjZSwgb3JpZ2luKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZShyZWFzb24sIHBsYWNlLCBvcmlnaW4pXG5cbiAgICBtZXNzYWdlLmZhdGFsID0gbnVsbFxuXG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmYXRhbCBlcnJvciBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIEl0cyBgZmF0YWxgIGlzIHNldCB0byBgdHJ1ZWAgYW5kIGBmaWxlYCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLlxuICAgKiBJdHMgYWRkZWQgdG8gYGZpbGUubWVzc2FnZXNgLlxuICAgKlxuICAgKiA+IPCfkYkgKipOb3RlKio6IGEgZmF0YWwgZXJyb3IgbWVhbnMgdGhhdCBhIGZpbGUgaXMgbm8gbG9uZ2VyIHByb2Nlc3NhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVycm9yIHwgVkZpbGVNZXNzYWdlfSByZWFzb25cbiAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHVzZXMgdGhlIHN0YWNrIGFuZCBtZXNzYWdlIG9mIHRoZSBlcnJvciBpZiBnaXZlbi5cbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBQb3NpdGlvbiB8IFBvaW50IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3BsYWNlXVxuICAgKiAgIFBsYWNlIGluIGZpbGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6XG4gICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuXG4gICAqIEByZXR1cm5zIHtuZXZlcn1cbiAgICogICBNZXNzYWdlLlxuICAgKiBAdGhyb3dzIHtWRmlsZU1lc3NhZ2V9XG4gICAqICAgTWVzc2FnZS5cbiAgICovXG4gIGZhaWwocmVhc29uLCBwbGFjZSwgb3JpZ2luKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZShyZWFzb24sIHBsYWNlLCBvcmlnaW4pXG5cbiAgICBtZXNzYWdlLmZhdGFsID0gdHJ1ZVxuXG4gICAgdGhyb3cgbWVzc2FnZVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBhIHBhdGggKGFzIGluLCBkb2VzIG5vdCBjb250YWluIGBwYXRoLnNlcGApLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFydFxuICogICBGaWxlIHBhdGggcGFydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgIFBhcnQgbmFtZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBhc3NlcnRQYXJ0KHBhcnQsIG5hbWUpIHtcbiAgaWYgKHBhcnQgJiYgcGFydC5pbmNsdWRlcyhwYXRoLnNlcCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnYCcgKyBuYW1lICsgJ2AgY2Fubm90IGJlIGEgcGF0aDogZGlkIG5vdCBleHBlY3QgYCcgKyBwYXRoLnNlcCArICdgJ1xuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IGBwYXJ0YCBpcyBub3QgZW1wdHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHBhcnRcbiAqICAgVGhpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogICBQYXJ0IG5hbWUuXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBwYXJ0IGlzIHN0cmluZ31cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9uRW1wdHkocGFydCwgbmFtZSkge1xuICBpZiAoIXBhcnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2AnICsgbmFtZSArICdgIGNhbm5vdCBiZSBlbXB0eScpXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgYHBhdGhgIGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gcGF0aFxuICogICBQYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqICAgRGVwZW5kZW5jeSBuYW1lLlxuICogQHJldHVybnMge2Fzc2VydHMgcGF0aCBpcyBzdHJpbmd9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aCwgbmFtZSkge1xuICBpZiAoIXBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmcgYCcgKyBuYW1lICsgJ2AgcmVxdWlyZXMgYHBhdGhgIHRvIGJlIHNldCB0b28nKVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogICB0aGluZy5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBCdWZmZXJ9XG4gKiAgIFdoZXRoZXIgYHZhbHVlYCBpcyBhIE5vZGUuanMgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBidWZmZXIodmFsdWUpIHtcbiAgcmV0dXJuIGJ1ZmZlckxpa2UodmFsdWUpXG59XG4iXSwibmFtZXMiOlsiYnVmZmVyTGlrZSIsIlZGaWxlTWVzc2FnZSIsInBhdGgiLCJwcm9jIiwidXJsVG9QYXRoIiwiaXNVcmwiLCJvcmRlciIsIlZGaWxlIiwiY29uc3RydWN0b3IiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJidWZmZXIiLCJkYXRhIiwibWVzc2FnZXMiLCJoaXN0b3J5IiwiY3dkIiwic3RvcmVkIiwicmVzdWx0IiwibWFwIiwiaW5kZXgiLCJsZW5ndGgiLCJwcm9wIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJhc3NlcnROb25FbXB0eSIsInB1c2giLCJkaXJuYW1lIiwiYXNzZXJ0UGF0aCIsImJhc2VuYW1lIiwiam9pbiIsImFzc2VydFBhcnQiLCJleHRuYW1lIiwiY2hhckNvZGVBdCIsIkVycm9yIiwic3RlbSIsInRvU3RyaW5nIiwiZW5jb2RpbmciLCJtZXNzYWdlIiwicmVhc29uIiwicGxhY2UiLCJvcmlnaW4iLCJuYW1lIiwiZmlsZSIsImZhdGFsIiwiaW5mbyIsImZhaWwiLCJwYXJ0Iiwic2VwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/vfile/lib/index.js\n");
|