This repository has been archived on 2025-07-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
eternos/frontend/style/.next/server/vendor-chunks/tailwind-merge.js
2025-02-02 16:08:03 +03:00

25 lines
208 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "vendor-chunks/tailwind-merge";
exports.ids = ["vendor-chunks/tailwind-merge"];
exports.modules = {
/***/ "(ssr)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs":
/*!*********************************************************!*\
!*** ./node_modules/tailwind-merge/dist/bundle-mjs.mjs ***!
\*********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createTailwindMerge: () => (/* binding */ createTailwindMerge),\n/* harmony export */ extendTailwindMerge: () => (/* binding */ extendTailwindMerge),\n/* harmony export */ fromTheme: () => (/* binding */ fromTheme),\n/* harmony export */ getDefaultConfig: () => (/* binding */ getDefaultConfig),\n/* harmony export */ mergeConfigs: () => (/* binding */ mergeConfigs),\n/* harmony export */ twJoin: () => (/* binding */ twJoin),\n/* harmony export */ twMerge: () => (/* binding */ twMerge),\n/* harmony export */ validators: () => (/* binding */ validators)\n/* harmony export */ });\nconst CLASS_PART_SEPARATOR = '-';\r\nconst createClassGroupUtils = config => {\r\n const classMap = createClassMap(config);\r\n const {\r\n conflictingClassGroups,\r\n conflictingClassGroupModifiers\r\n } = config;\r\n const getClassGroupId = className => {\r\n const classParts = className.split(CLASS_PART_SEPARATOR);\r\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\r\n if (classParts[0] === '' && classParts.length !== 1) {\r\n classParts.shift();\r\n }\r\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\r\n };\r\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\r\n const conflicts = conflictingClassGroups[classGroupId] || [];\r\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\r\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\r\n }\r\n return conflicts;\r\n };\r\n return {\r\n getClassGroupId,\r\n getConflictingClassGroupIds\r\n };\r\n};\r\nconst getGroupRecursive = (classParts, classPartObject) => {\r\n if (classParts.length === 0) {\r\n return classPartObject.classGroupId;\r\n }\r\n const currentClassPart = classParts[0];\r\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\r\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\r\n if (classGroupFromNextClassPart) {\r\n return classGroupFromNextClassPart;\r\n }\r\n if (classPartObject.validators.length === 0) {\r\n return undefined;\r\n }\r\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\r\n return classPartObject.validators.find(({\r\n validator\r\n }) => validator(classRest))?.classGroupId;\r\n};\r\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\r\nconst getGroupIdForArbitraryProperty = className => {\r\n if (arbitraryPropertyRegex.test(className)) {\r\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\r\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\r\n if (property) {\r\n // I use two dots here because one dot is used as prefix for class groups in plugins\r\n return 'arbitrary..' + property;\r\n }\r\n }\r\n};\r\n/**\r\n * Exported for testing only\r\n */\r\nconst createClassMap = config => {\r\n const {\r\n theme,\r\n prefix\r\n } = config;\r\n const classMap = {\r\n nextPart: new Map(),\r\n validators: []\r\n };\r\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\r\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\r\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\r\n });\r\n return classMap;\r\n};\r\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\r\n classGroup.forEach(classDefinition => {\r\n if (typeof classDefinition === 'string') {\r\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\r\n classPartObjectToEdit.classGroupId = classGroupId;\r\n return;\r\n }\r\n if (typeof classDefinition === 'function') {\r\n if (isThemeGetter(classDefinition)) {\r\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\r\n return;\r\n }\r\n classPartObject.validators.push({\r\n validator: classDefinition,\r\n classGroupId\r\n });\r\n return;\r\n }\r\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\r\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\r\n });\r\n });\r\n};\r\nconst getPart = (classPartObject, path) => {\r\n let currentClassPartObject = classPartObject;\r\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\r\n if (!currentClassPartObject.nextPart.has(pathPart)) {\r\n currentClassPartObject.nextPart.set(pathPart, {\r\n nextPart: new Map(),\r\n validators: []\r\n });\r\n }\r\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\r\n });\r\n return currentClassPartObject;\r\n};\r\nconst isThemeGetter = func => func.isThemeGetter;\r\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\r\n if (!prefix) {\r\n return classGroupEntries;\r\n }\r\n return classGroupEntries.map(([classGroupId, classGroup]) => {\r\n const prefixedClassGroup = classGroup.map(classDefinition => {\r\n if (typeof classDefinition === 'string') {\r\n return prefix + classDefinition;\r\n }\r\n if (typeof classDefinition === 'object') {\r\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\r\n }\r\n return classDefinition;\r\n });\r\n return [classGroupId, prefixedClassGroup];\r\n });\r\n};\r\n\r\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\r\nconst createLruCache = maxCacheSize => {\r\n if (maxCacheSize < 1) {\r\n return {\r\n get: () => undefined,\r\n set: () => {}\r\n };\r\n }\r\n let cacheSize = 0;\r\n let cache = new Map();\r\n let previousCache = new Map();\r\n const update = (key, value) => {\r\n cache.set(key, value);\r\n cacheSize++;\r\n if (cacheSize > maxCacheSize) {\r\n cacheSize = 0;\r\n previousCache = cache;\r\n cache = new Map();\r\n }\r\n };\r\n return {\r\n get(key) {\r\n let value = cache.get(key);\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n if ((value = previousCache.get(key)) !== undefined) {\r\n update(key, value);\r\n return value;\r\n }\r\n },\r\n set(key, value) {\r\n if (cache.has(key)) {\r\n cache.set(key, value);\r\n } else {\r\n update(key, value);\r\n }\r\n }\r\n };\r\n};\r\nconst IMPORTANT_MODIFIER = '!';\r\nconst createParseClassName = config => {\r\n const {\r\n separator,\r\n experimentalParseClassName\r\n } = config;\r\n const isSeparatorSingleCharacter = separator.length === 1;\r\n const firstSeparatorCharacter = separator[0];\r\n const separatorLength = separator.length;\r\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\r\n const parseClassName = className => {\r\n const modifiers = [];\r\n let bracketDepth = 0;\r\n let modifierStart = 0;\r\n let postfixModifierPosition;\r\n for (let index = 0; index < className.length; index++) {\r\n let currentCharacter = className[index];\r\n if (bracketDepth === 0) {\r\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\r\n modifiers.push(className.slice(modifierStart, index));\r\n modifierStart = index + separatorLength;\r\n continue;\r\n }\r\n if (currentCharacter === '/') {\r\n postfixModifierPosition = index;\r\n continue;\r\n }\r\n }\r\n if (currentCharacter === '[') {\r\n bracketDepth++;\r\n } else if (currentCharacter === ']') {\r\n bracketDepth--;\r\n }\r\n }\r\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\r\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\r\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\r\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\r\n return {\r\n modifiers,\r\n hasImportantModifier,\r\n baseClassName,\r\n maybePostfixModifierPosition\r\n };\r\n };\r\n if (experimentalParseClassName) {\r\n return className => experimentalParseClassName({\r\n className,\r\n parseClassName\r\n });\r\n }\r\n return parseClassName;\r\n};\r\n/**\r\n * Sorts modifiers according to following schema:\r\n * - Predefined modifiers are sorted alphabetically\r\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\r\n */\r\nconst sortModifiers = modifiers => {\r\n if (modifiers.length <= 1) {\r\n return modifiers;\r\n }\r\n const sortedModifiers = [];\r\n let unsortedModifiers = [];\r\n modifiers.forEach(modifier => {\r\n const isArbitraryVariant = modifier[0] === '[';\r\n if (isArbitraryVariant) {\r\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\r\n unsortedModifiers = [];\r\n } else {\r\n unsortedModifiers.push(modifier);\r\n }\r\n });\r\n sortedModifiers.push(...unsortedModifiers.sort());\r\n return sortedModifiers;\r\n};\r\nconst createConfigUtils = config => ({\r\n cache: createLruCache(config.cacheSize),\r\n parseClassName: createParseClassName(config),\r\n ...createClassGroupUtils(config)\r\n});\r\nconst SPLIT_CLASSES_REGEX = /\\s+/;\r\nconst mergeClassList = (classList, configUtils) => {\r\n const {\r\n parseClassName,\r\n getClassGroupId,\r\n getConflictingClassGroupIds\r\n } = configUtils;\r\n /**\r\n * Set of classGroupIds in following format:\r\n * `{importantModifier}{variantModifiers}{classGroupId}`\r\n * @example 'float'\r\n * @example 'hover:focus:bg-color'\r\n * @example 'md:!pr'\r\n */\r\n const classGroupsInConflict = [];\r\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\r\n let result = '';\r\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\r\n const originalClassName = classNames[index];\r\n const {\r\n modifiers,\r\n hasImportantModifier,\r\n baseClassName,\r\n maybePostfixModifierPosition\r\n } = parseClassName(originalClassName);\r\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\r\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\r\n if (!classGroupId) {\r\n if (!hasPostfixModifier) {\r\n // Not a Tailwind class\r\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\r\n continue;\r\n }\r\n classGroupId = getClassGroupId(baseClassName);\r\n if (!classGroupId) {\r\n // Not a Tailwind class\r\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\r\n continue;\r\n }\r\n hasPostfixModifier = false;\r\n }\r\n const variantModifier = sortModifiers(modifiers).join(':');\r\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\r\n const classId = modifierId + classGroupId;\r\n if (classGroupsInConflict.includes(classId)) {\r\n // Tailwind class omitted due to conflict\r\n continue;\r\n }\r\n classGroupsInConflict.push(classId);\r\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\r\n for (let i = 0; i < conflictGroups.length; ++i) {\r\n const group = conflictGroups[i];\r\n classGroupsInConflict.push(modifierId + group);\r\n }\r\n // Tailwind class not in conflict\r\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\r\n *\r\n * Specifically:\r\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\r\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\r\n *\r\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\r\n */\r\nfunction twJoin() {\r\n let index = 0;\r\n let argument;\r\n let resolvedValue;\r\n let string = '';\r\n while (index < arguments.length) {\r\n if (argument = arguments[index++]) {\r\n if (resolvedValue = toValue(argument)) {\r\n string && (string += ' ');\r\n string += resolvedValue;\r\n }\r\n }\r\n }\r\n return string;\r\n}\r\nconst toValue = mix => {\r\n if (typeof mix === 'string') {\r\n return mix;\r\n }\r\n let resolvedValue;\r\n let string = '';\r\n for (let k = 0; k < mix.length; k++) {\r\n if (mix[k]) {\r\n if (resolvedValue = toValue(mix[k])) {\r\n string && (string += ' ');\r\n string += resolvedValue;\r\n }\r\n }\r\n }\r\n return string;\r\n};\r\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\r\n let configUtils;\r\n let cacheGet;\r\n let cacheSet;\r\n let functionToCall = initTailwindMerge;\r\n function initTailwindMerge(classList) {\r\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\r\n configUtils = createConfigUtils(config);\r\n cacheGet = configUtils.cache.get;\r\n cacheSet = configUtils.cache.set;\r\n functionToCall = tailwindMerge;\r\n return tailwindMerge(classList);\r\n }\r\n function tailwindMerge(classList) {\r\n const cachedResult = cacheGet(classList);\r\n if (cachedResult) {\r\n return cachedResult;\r\n }\r\n const result = mergeClassList(classList, configUtils);\r\n cacheSet(classList, result);\r\n return result;\r\n }\r\n return function callTailwindMerge() {\r\n return functionToCall(twJoin.apply(null, arguments));\r\n };\r\n}\r\nconst fromTheme = key => {\r\n const themeGetter = theme => theme[key] || [];\r\n themeGetter.isThemeGetter = true;\r\n return themeGetter;\r\n};\r\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\r\nconst fractionRegex = /^\\d+\\/\\d+$/;\r\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\r\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\r\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\r\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\r\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\r\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\r\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\r\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\r\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\r\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\r\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\r\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\r\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\r\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\r\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\r\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\r\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\r\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\r\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\r\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\r\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\r\nconst isAny = () => true;\r\nconst getIsArbitraryValue = (value, label, testValue) => {\r\n const result = arbitraryValueRegex.exec(value);\r\n if (result) {\r\n if (result[1]) {\r\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\r\n }\r\n return testValue(result[2]);\r\n }\r\n return false;\r\n};\r\nconst isLengthOnly = value =>\r\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\r\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\r\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\r\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\r\nconst isNever = () => false;\r\nconst isShadow = value => shadowRegex.test(value);\r\nconst isImage = value => imageRegex.test(value);\r\nconst validators = /*#__PURE__*/Object.defineProperty({\r\n __proto__: null,\r\n isAny,\r\n isArbitraryImage,\r\n isArbitraryLength,\r\n isArbitraryNumber,\r\n isArbitraryPosition,\r\n isArbitraryShadow,\r\n isArbitrarySize,\r\n isArbitraryValue,\r\n isInteger,\r\n isLength,\r\n isNumber,\r\n isPercent,\r\n isTshirtSize\r\n}, Symbol.toStringTag, {\r\n value: 'Module'\r\n});\r\nconst getDefaultConfig = () => {\r\n const colors = fromTheme('colors');\r\n const spacing = fromTheme('spacing');\r\n const blur = fromTheme('blur');\r\n const brightness = fromTheme('brightness');\r\n const borderColor = fromTheme('borderColor');\r\n const borderRadius = fromTheme('borderRadius');\r\n const borderSpacing = fromTheme('borderSpacing');\r\n const borderWidth = fromTheme('borderWidth');\r\n const contrast = fromTheme('contrast');\r\n const grayscale = fromTheme('grayscale');\r\n const hueRotate = fromTheme('hueRotate');\r\n const invert = fromTheme('invert');\r\n const gap = fromTheme('gap');\r\n const gradientColorStops = fromTheme('gradientColorStops');\r\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\r\n const inset = fromTheme('inset');\r\n const margin = fromTheme('margin');\r\n const opacity = fromTheme('opacity');\r\n const padding = fromTheme('padding');\r\n const saturate = fromTheme('saturate');\r\n const scale = fromTheme('scale');\r\n const sepia = fromTheme('sepia');\r\n const skew = fromTheme('skew');\r\n const space = fromTheme('space');\r\n const translate = fromTheme('translate');\r\n const getOverscroll = () => ['auto', 'contain', 'none'];\r\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\r\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\r\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\r\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\r\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\r\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\r\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\r\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\r\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\r\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\r\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\r\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\r\n return {\r\n cacheSize: 500,\r\n separator: ':',\r\n theme: {\r\n colors: [isAny],\r\n spacing: [isLength, isArbitraryLength],\r\n blur: ['none', '', isTshirtSize, isArbitraryValue],\r\n brightness: getNumberAndArbitrary(),\r\n borderColor: [colors],\r\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\r\n borderSpacing: getSpacingWithArbitrary(),\r\n borderWidth: getLengthWithEmptyAndArbitrary(),\r\n contrast: getNumberAndArbitrary(),\r\n grayscale: getZeroAndEmpty(),\r\n hueRotate: getNumberAndArbitrary(),\r\n invert: getZeroAndEmpty(),\r\n gap: getSpacingWithArbitrary(),\r\n gradientColorStops: [colors],\r\n gradientColorStopPositions: [isPercent, isArbitraryLength],\r\n inset: getSpacingWithAutoAndArbitrary(),\r\n margin: getSpacingWithAutoAndArbitrary(),\r\n opacity: getNumberAndArbitrary(),\r\n padding: getSpacingWithArbitrary(),\r\n saturate: getNumberAndArbitrary(),\r\n scale: getNumberAndArbitrary(),\r\n sepia: getZeroAndEmpty(),\r\n skew: getNumberAndArbitrary(),\r\n space: getSpacingWithArbitrary(),\r\n translate: getSpacingWithArbitrary()\r\n },\r\n classGroups: {\r\n // Layout\r\n /**\r\n * Aspect Ratio\r\n * @see https://tailwindcss.com/docs/aspect-ratio\r\n */\r\n aspect: [{\r\n aspect: ['auto', 'square', 'video', isArbitraryValue]\r\n }],\r\n /**\r\n * Container\r\n * @see https://tailwindcss.com/docs/container\r\n */\r\n container: ['container'],\r\n /**\r\n * Columns\r\n * @see https://tailwindcss.com/docs/columns\r\n */\r\n columns: [{\r\n columns: [isTshirtSize]\r\n }],\r\n /**\r\n * Break After\r\n * @see https://tailwindcss.com/docs/break-after\r\n */\r\n 'break-after': [{\r\n 'break-after': getBreaks()\r\n }],\r\n /**\r\n * Break Before\r\n * @see https://tailwindcss.com/docs/break-before\r\n */\r\n 'break-before': [{\r\n 'break-before': getBreaks()\r\n }],\r\n /**\r\n * Break Inside\r\n * @see https://tailwindcss.com/docs/break-inside\r\n */\r\n 'break-inside': [{\r\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\r\n }],\r\n /**\r\n * Box Decoration Break\r\n * @see https://tailwindcss.com/docs/box-decoration-break\r\n */\r\n 'box-decoration': [{\r\n 'box-decoration': ['slice', 'clone']\r\n }],\r\n /**\r\n * Box Sizing\r\n * @see https://tailwindcss.com/docs/box-sizing\r\n */\r\n box: [{\r\n box: ['border', 'content']\r\n }],\r\n /**\r\n * Display\r\n * @see https://tailwindcss.com/docs/display\r\n */\r\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\r\n /**\r\n * Floats\r\n * @see https://tailwindcss.com/docs/float\r\n */\r\n float: [{\r\n float: ['right', 'left', 'none', 'start', 'end']\r\n }],\r\n /**\r\n * Clear\r\n * @see https://tailwindcss.com/docs/clear\r\n */\r\n clear: [{\r\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\r\n }],\r\n /**\r\n * Isolation\r\n * @see https://tailwindcss.com/docs/isolation\r\n */\r\n isolation: ['isolate', 'isolation-auto'],\r\n /**\r\n * Object Fit\r\n * @see https://tailwindcss.com/docs/object-fit\r\n */\r\n 'object-fit': [{\r\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\r\n }],\r\n /**\r\n * Object Position\r\n * @see https://tailwindcss.com/docs/object-position\r\n */\r\n 'object-position': [{\r\n object: [...getPositions(), isArbitraryValue]\r\n }],\r\n /**\r\n * Overflow\r\n * @see https://tailwindcss.com/docs/overflow\r\n */\r\n overflow: [{\r\n overflow: getOverflow()\r\n }],\r\n /**\r\n * Overflow X\r\n * @see https://tailwindcss.com/docs/overflow\r\n */\r\n 'overflow-x': [{\r\n 'overflow-x': getOverflow()\r\n }],\r\n /**\r\n * Overflow Y\r\n * @see https://tailwindcss.com/docs/overflow\r\n */\r\n 'overflow-y': [{\r\n 'overflow-y': getOverflow()\r\n }],\r\n /**\r\n * Overscroll Behavior\r\n * @see https://tailwindcss.com/docs/overscroll-behavior\r\n */\r\n overscroll: [{\r\n overscroll: getOverscroll()\r\n }],\r\n /**\r\n * Overscroll Behavior X\r\n * @see https://tailwindcss.com/docs/overscroll-behavior\r\n */\r\n 'overscroll-x': [{\r\n 'overscroll-x': getOverscroll()\r\n }],\r\n /**\r\n * Overscroll Behavior Y\r\n * @see https://tailwindcss.com/docs/overscroll-behavior\r\n */\r\n 'overscroll-y': [{\r\n 'overscroll-y': getOverscroll()\r\n }],\r\n /**\r\n * Position\r\n * @see https://tailwindcss.com/docs/position\r\n */\r\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\r\n /**\r\n * Top / Right / Bottom / Left\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n inset: [{\r\n inset: [inset]\r\n }],\r\n /**\r\n * Right / Left\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n 'inset-x': [{\r\n 'inset-x': [inset]\r\n }],\r\n /**\r\n * Top / Bottom\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n 'inset-y': [{\r\n 'inset-y': [inset]\r\n }],\r\n /**\r\n * Start\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n start: [{\r\n start: [inset]\r\n }],\r\n /**\r\n * End\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n end: [{\r\n end: [inset]\r\n }],\r\n /**\r\n * Top\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n top: [{\r\n top: [inset]\r\n }],\r\n /**\r\n * Right\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n right: [{\r\n right: [inset]\r\n }],\r\n /**\r\n * Bottom\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n bottom: [{\r\n bottom: [inset]\r\n }],\r\n /**\r\n * Left\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n left: [{\r\n left: [inset]\r\n }],\r\n /**\r\n * Visibility\r\n * @see https://tailwindcss.com/docs/visibility\r\n */\r\n visibility: ['visible', 'invisible', 'collapse'],\r\n /**\r\n * Z-Index\r\n * @see https://tailwindcss.com/docs/z-index\r\n */\r\n z: [{\r\n z: ['auto', isInteger, isArbitraryValue]\r\n }],\r\n // Flexbox and Grid\r\n /**\r\n * Flex Basis\r\n * @see https://tailwindcss.com/docs/flex-basis\r\n */\r\n basis: [{\r\n basis: getSpacingWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Flex Direction\r\n * @see https://tailwindcss.com/docs/flex-direction\r\n */\r\n 'flex-direction': [{\r\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\r\n }],\r\n /**\r\n * Flex Wrap\r\n * @see https://tailwindcss.com/docs/flex-wrap\r\n */\r\n 'flex-wrap': [{\r\n flex: ['wrap', 'wrap-reverse', 'nowrap']\r\n }],\r\n /**\r\n * Flex\r\n * @see https://tailwindcss.com/docs/flex\r\n */\r\n flex: [{\r\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\r\n }],\r\n /**\r\n * Flex Grow\r\n * @see https://tailwindcss.com/docs/flex-grow\r\n */\r\n grow: [{\r\n grow: getZeroAndEmpty()\r\n }],\r\n /**\r\n * Flex Shrink\r\n * @see https://tailwindcss.com/docs/flex-shrink\r\n */\r\n shrink: [{\r\n shrink: getZeroAndEmpty()\r\n }],\r\n /**\r\n * Order\r\n * @see https://tailwindcss.com/docs/order\r\n */\r\n order: [{\r\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Template Columns\r\n * @see https://tailwindcss.com/docs/grid-template-columns\r\n */\r\n 'grid-cols': [{\r\n 'grid-cols': [isAny]\r\n }],\r\n /**\r\n * Grid Column Start / End\r\n * @see https://tailwindcss.com/docs/grid-column\r\n */\r\n 'col-start-end': [{\r\n col: ['auto', {\r\n span: ['full', isInteger, isArbitraryValue]\r\n }, isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Column Start\r\n * @see https://tailwindcss.com/docs/grid-column\r\n */\r\n 'col-start': [{\r\n 'col-start': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Column End\r\n * @see https://tailwindcss.com/docs/grid-column\r\n */\r\n 'col-end': [{\r\n 'col-end': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Template Rows\r\n * @see https://tailwindcss.com/docs/grid-template-rows\r\n */\r\n 'grid-rows': [{\r\n 'grid-rows': [isAny]\r\n }],\r\n /**\r\n * Grid Row Start / End\r\n * @see https://tailwindcss.com/docs/grid-row\r\n */\r\n 'row-start-end': [{\r\n row: ['auto', {\r\n span: [isInteger, isArbitraryValue]\r\n }, isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Row Start\r\n * @see https://tailwindcss.com/docs/grid-row\r\n */\r\n 'row-start': [{\r\n 'row-start': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Row End\r\n * @see https://tailwindcss.com/docs/grid-row\r\n */\r\n 'row-end': [{\r\n 'row-end': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Auto Flow\r\n * @see https://tailwindcss.com/docs/grid-auto-flow\r\n */\r\n 'grid-flow': [{\r\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\r\n }],\r\n /**\r\n * Grid Auto Columns\r\n * @see https://tailwindcss.com/docs/grid-auto-columns\r\n */\r\n 'auto-cols': [{\r\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Auto Rows\r\n * @see https://tailwindcss.com/docs/grid-auto-rows\r\n */\r\n 'auto-rows': [{\r\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\r\n }],\r\n /**\r\n * Gap\r\n * @see https://tailwindcss.com/docs/gap\r\n */\r\n gap: [{\r\n gap: [gap]\r\n }],\r\n /**\r\n * Gap X\r\n * @see https://tailwindcss.com/docs/gap\r\n */\r\n 'gap-x': [{\r\n 'gap-x': [gap]\r\n }],\r\n /**\r\n * Gap Y\r\n * @see https://tailwindcss.com/docs/gap\r\n */\r\n 'gap-y': [{\r\n 'gap-y': [gap]\r\n }],\r\n /**\r\n * Justify Content\r\n * @see https://tailwindcss.com/docs/justify-content\r\n */\r\n 'justify-content': [{\r\n justify: ['normal', ...getAlign()]\r\n }],\r\n /**\r\n * Justify Items\r\n * @see https://tailwindcss.com/docs/justify-items\r\n */\r\n 'justify-items': [{\r\n 'justify-items': ['start', 'end', 'center', 'stretch']\r\n }],\r\n /**\r\n * Justify Self\r\n * @see https://tailwindcss.com/docs/justify-self\r\n */\r\n 'justify-self': [{\r\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\r\n }],\r\n /**\r\n * Align Content\r\n * @see https://tailwindcss.com/docs/align-content\r\n */\r\n 'align-content': [{\r\n content: ['normal', ...getAlign(), 'baseline']\r\n }],\r\n /**\r\n * Align Items\r\n * @see https://tailwindcss.com/docs/align-items\r\n */\r\n 'align-items': [{\r\n items: ['start', 'end', 'center', 'baseline', 'stretch']\r\n }],\r\n /**\r\n * Align Self\r\n * @see https://tailwindcss.com/docs/align-self\r\n */\r\n 'align-self': [{\r\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\r\n }],\r\n /**\r\n * Place Content\r\n * @see https://tailwindcss.com/docs/place-content\r\n */\r\n 'place-content': [{\r\n 'place-content': [...getAlign(), 'baseline']\r\n }],\r\n /**\r\n * Place Items\r\n * @see https://tailwindcss.com/docs/place-items\r\n */\r\n 'place-items': [{\r\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\r\n }],\r\n /**\r\n * Place Self\r\n * @see https://tailwindcss.com/docs/place-self\r\n */\r\n 'place-self': [{\r\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\r\n }],\r\n // Spacing\r\n /**\r\n * Padding\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n p: [{\r\n p: [padding]\r\n }],\r\n /**\r\n * Padding X\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n px: [{\r\n px: [padding]\r\n }],\r\n /**\r\n * Padding Y\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n py: [{\r\n py: [padding]\r\n }],\r\n /**\r\n * Padding Start\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n ps: [{\r\n ps: [padding]\r\n }],\r\n /**\r\n * Padding End\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pe: [{\r\n pe: [padding]\r\n }],\r\n /**\r\n * Padding Top\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pt: [{\r\n pt: [padding]\r\n }],\r\n /**\r\n * Padding Right\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pr: [{\r\n pr: [padding]\r\n }],\r\n /**\r\n * Padding Bottom\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pb: [{\r\n pb: [padding]\r\n }],\r\n /**\r\n * Padding Left\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pl: [{\r\n pl: [padding]\r\n }],\r\n /**\r\n * Margin\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n m: [{\r\n m: [margin]\r\n }],\r\n /**\r\n * Margin X\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mx: [{\r\n mx: [margin]\r\n }],\r\n /**\r\n * Margin Y\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n my: [{\r\n my: [margin]\r\n }],\r\n /**\r\n * Margin Start\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n ms: [{\r\n ms: [margin]\r\n }],\r\n /**\r\n * Margin End\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n me: [{\r\n me: [margin]\r\n }],\r\n /**\r\n * Margin Top\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mt: [{\r\n mt: [margin]\r\n }],\r\n /**\r\n * Margin Right\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mr: [{\r\n mr: [margin]\r\n }],\r\n /**\r\n * Margin Bottom\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mb: [{\r\n mb: [margin]\r\n }],\r\n /**\r\n * Margin Left\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n ml: [{\r\n ml: [margin]\r\n }],\r\n /**\r\n * Space Between X\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-x': [{\r\n 'space-x': [space]\r\n }],\r\n /**\r\n * Space Between X Reverse\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-x-reverse': ['space-x-reverse'],\r\n /**\r\n * Space Between Y\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-y': [{\r\n 'space-y': [space]\r\n }],\r\n /**\r\n * Space Between Y Reverse\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-y-reverse': ['space-y-reverse'],\r\n // Sizing\r\n /**\r\n * Width\r\n * @see https://tailwindcss.com/docs/width\r\n */\r\n w: [{\r\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\r\n }],\r\n /**\r\n * Min-Width\r\n * @see https://tailwindcss.com/docs/min-width\r\n */\r\n 'min-w': [{\r\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\r\n }],\r\n /**\r\n * Max-Width\r\n * @see https://tailwindcss.com/docs/max-width\r\n */\r\n 'max-w': [{\r\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\r\n screen: [isTshirtSize]\r\n }, isTshirtSize]\r\n }],\r\n /**\r\n * Height\r\n * @see https://tailwindcss.com/docs/height\r\n */\r\n h: [{\r\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\r\n }],\r\n /**\r\n * Min-Height\r\n * @see https://tailwindcss.com/docs/min-height\r\n */\r\n 'min-h': [{\r\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\r\n }],\r\n /**\r\n * Max-Height\r\n * @see https://tailwindcss.com/docs/max-height\r\n */\r\n 'max-h': [{\r\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\r\n }],\r\n /**\r\n * Size\r\n * @see https://tailwindcss.com/docs/size\r\n */\r\n size: [{\r\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\r\n }],\r\n // Typography\r\n /**\r\n * Font Size\r\n * @see https://tailwindcss.com/docs/font-size\r\n */\r\n 'font-size': [{\r\n text: ['base', isTshirtSize, isArbitraryLength]\r\n }],\r\n /**\r\n * Font Smoothing\r\n * @see https://tailwindcss.com/docs/font-smoothing\r\n */\r\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\r\n /**\r\n * Font Style\r\n * @see https://tailwindcss.com/docs/font-style\r\n */\r\n 'font-style': ['italic', 'not-italic'],\r\n /**\r\n * Font Weight\r\n * @see https://tailwindcss.com/docs/font-weight\r\n */\r\n 'font-weight': [{\r\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\r\n }],\r\n /**\r\n * Font Family\r\n * @see https://tailwindcss.com/docs/font-family\r\n */\r\n 'font-family': [{\r\n font: [isAny]\r\n }],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-normal': ['normal-nums'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-ordinal': ['ordinal'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-slashed-zero': ['slashed-zero'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\r\n /**\r\n * Letter Spacing\r\n * @see https://tailwindcss.com/docs/letter-spacing\r\n */\r\n tracking: [{\r\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\r\n }],\r\n /**\r\n * Line Clamp\r\n * @see https://tailwindcss.com/docs/line-clamp\r\n */\r\n 'line-clamp': [{\r\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\r\n }],\r\n /**\r\n * Line Height\r\n * @see https://tailwindcss.com/docs/line-height\r\n */\r\n leading: [{\r\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\r\n }],\r\n /**\r\n * List Style Image\r\n * @see https://tailwindcss.com/docs/list-style-image\r\n */\r\n 'list-image': [{\r\n 'list-image': ['none', isArbitraryValue]\r\n }],\r\n /**\r\n * List Style Type\r\n * @see https://tailwindcss.com/docs/list-style-type\r\n */\r\n 'list-style-type': [{\r\n list: ['none', 'disc', 'decimal', isArbitraryValue]\r\n }],\r\n /**\r\n * List Style Position\r\n * @see https://tailwindcss.com/docs/list-style-position\r\n */\r\n 'list-style-position': [{\r\n list: ['inside', 'outside']\r\n }],\r\n /**\r\n * Placeholder Color\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/placeholder-color\r\n */\r\n 'placeholder-color': [{\r\n placeholder: [colors]\r\n }],\r\n /**\r\n * Placeholder Opacity\r\n * @see https://tailwindcss.com/docs/placeholder-opacity\r\n */\r\n 'placeholder-opacity': [{\r\n 'placeholder-opacity': [opacity]\r\n }],\r\n /**\r\n * Text Alignment\r\n * @see https://tailwindcss.com/docs/text-align\r\n */\r\n 'text-alignment': [{\r\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\r\n }],\r\n /**\r\n * Text Color\r\n * @see https://tailwindcss.com/docs/text-color\r\n */\r\n 'text-color': [{\r\n text: [colors]\r\n }],\r\n /**\r\n * Text Opacity\r\n * @see https://tailwindcss.com/docs/text-opacity\r\n */\r\n 'text-opacity': [{\r\n 'text-opacity': [opacity]\r\n }],\r\n /**\r\n * Text Decoration\r\n * @see https://tailwindcss.com/docs/text-decoration\r\n */\r\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\r\n /**\r\n * Text Decoration Style\r\n * @see https://tailwindcss.com/docs/text-decoration-style\r\n */\r\n 'text-decoration-style': [{\r\n decoration: [...getLineStyles(), 'wavy']\r\n }],\r\n /**\r\n * Text Decoration Thickness\r\n * @see https://tailwindcss.com/docs/text-decoration-thickness\r\n */\r\n 'text-decoration-thickness': [{\r\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\r\n }],\r\n /**\r\n * Text Underline Offset\r\n * @see https://tailwindcss.com/docs/text-underline-offset\r\n */\r\n 'underline-offset': [{\r\n 'underline-offset': ['auto', isLength, isArbitraryValue]\r\n }],\r\n /**\r\n * Text Decoration Color\r\n * @see https://tailwindcss.com/docs/text-decoration-color\r\n */\r\n 'text-decoration-color': [{\r\n decoration: [colors]\r\n }],\r\n /**\r\n * Text Transform\r\n * @see https://tailwindcss.com/docs/text-transform\r\n */\r\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\r\n /**\r\n * Text Overflow\r\n * @see https://tailwindcss.com/docs/text-overflow\r\n */\r\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\r\n /**\r\n * Text Wrap\r\n * @see https://tailwindcss.com/docs/text-wrap\r\n */\r\n 'text-wrap': [{\r\n text: ['wrap', 'nowrap', 'balance', 'pretty']\r\n }],\r\n /**\r\n * Text Indent\r\n * @see https://tailwindcss.com/docs/text-indent\r\n */\r\n indent: [{\r\n indent: getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Vertical Alignment\r\n * @see https://tailwindcss.com/docs/vertical-align\r\n */\r\n 'vertical-align': [{\r\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\r\n }],\r\n /**\r\n * Whitespace\r\n * @see https://tailwindcss.com/docs/whitespace\r\n */\r\n whitespace: [{\r\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\r\n }],\r\n /**\r\n * Word Break\r\n * @see https://tailwindcss.com/docs/word-break\r\n */\r\n break: [{\r\n break: ['normal', 'words', 'all', 'keep']\r\n }],\r\n /**\r\n * Hyphens\r\n * @see https://tailwindcss.com/docs/hyphens\r\n */\r\n hyphens: [{\r\n hyphens: ['none', 'manual', 'auto']\r\n }],\r\n /**\r\n * Content\r\n * @see https://tailwindcss.com/docs/content\r\n */\r\n content: [{\r\n content: ['none', isArbitraryValue]\r\n }],\r\n // Backgrounds\r\n /**\r\n * Background Attachment\r\n * @see https://tailwindcss.com/docs/background-attachment\r\n */\r\n 'bg-attachment': [{\r\n bg: ['fixed', 'local', 'scroll']\r\n }],\r\n /**\r\n * Background Clip\r\n * @see https://tailwindcss.com/docs/background-clip\r\n */\r\n 'bg-clip': [{\r\n 'bg-clip': ['border', 'padding', 'content', 'text']\r\n }],\r\n /**\r\n * Background Opacity\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/background-opacity\r\n */\r\n 'bg-opacity': [{\r\n 'bg-opacity': [opacity]\r\n }],\r\n /**\r\n * Background Origin\r\n * @see https://tailwindcss.com/docs/background-origin\r\n */\r\n 'bg-origin': [{\r\n 'bg-origin': ['border', 'padding', 'content']\r\n }],\r\n /**\r\n * Background Position\r\n * @see https://tailwindcss.com/docs/background-position\r\n */\r\n 'bg-position': [{\r\n bg: [...getPositions(), isArbitraryPosition]\r\n }],\r\n /**\r\n * Background Repeat\r\n * @see https://tailwindcss.com/docs/background-repeat\r\n */\r\n 'bg-repeat': [{\r\n bg: ['no-repeat', {\r\n repeat: ['', 'x', 'y', 'round', 'space']\r\n }]\r\n }],\r\n /**\r\n * Background Size\r\n * @see https://tailwindcss.com/docs/background-size\r\n */\r\n 'bg-size': [{\r\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\r\n }],\r\n /**\r\n * Background Image\r\n * @see https://tailwindcss.com/docs/background-image\r\n */\r\n 'bg-image': [{\r\n bg: ['none', {\r\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\r\n }, isArbitraryImage]\r\n }],\r\n /**\r\n * Background Color\r\n * @see https://tailwindcss.com/docs/background-color\r\n */\r\n 'bg-color': [{\r\n bg: [colors]\r\n }],\r\n /**\r\n * Gradient Color Stops From Position\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-from-pos': [{\r\n from: [gradientColorStopPositions]\r\n }],\r\n /**\r\n * Gradient Color Stops Via Position\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-via-pos': [{\r\n via: [gradientColorStopPositions]\r\n }],\r\n /**\r\n * Gradient Color Stops To Position\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-to-pos': [{\r\n to: [gradientColorStopPositions]\r\n }],\r\n /**\r\n * Gradient Color Stops From\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-from': [{\r\n from: [gradientColorStops]\r\n }],\r\n /**\r\n * Gradient Color Stops Via\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-via': [{\r\n via: [gradientColorStops]\r\n }],\r\n /**\r\n * Gradient Color Stops To\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-to': [{\r\n to: [gradientColorStops]\r\n }],\r\n // Borders\r\n /**\r\n * Border Radius\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n rounded: [{\r\n rounded: [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Start\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-s': [{\r\n 'rounded-s': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius End\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-e': [{\r\n 'rounded-e': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Top\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-t': [{\r\n 'rounded-t': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Right\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-r': [{\r\n 'rounded-r': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Bottom\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-b': [{\r\n 'rounded-b': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Left\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-l': [{\r\n 'rounded-l': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Start Start\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-ss': [{\r\n 'rounded-ss': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Start End\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-se': [{\r\n 'rounded-se': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius End End\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-ee': [{\r\n 'rounded-ee': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius End Start\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-es': [{\r\n 'rounded-es': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Top Left\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-tl': [{\r\n 'rounded-tl': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Top Right\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-tr': [{\r\n 'rounded-tr': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Bottom Right\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-br': [{\r\n 'rounded-br': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Bottom Left\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-bl': [{\r\n 'rounded-bl': [borderRadius]\r\n }],\r\n /**\r\n * Border Width\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w': [{\r\n border: [borderWidth]\r\n }],\r\n /**\r\n * Border Width X\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-x': [{\r\n 'border-x': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Y\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-y': [{\r\n 'border-y': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Start\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-s': [{\r\n 'border-s': [borderWidth]\r\n }],\r\n /**\r\n * Border Width End\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-e': [{\r\n 'border-e': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Top\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-t': [{\r\n 'border-t': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Right\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-r': [{\r\n 'border-r': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Bottom\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-b': [{\r\n 'border-b': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Left\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-l': [{\r\n 'border-l': [borderWidth]\r\n }],\r\n /**\r\n * Border Opacity\r\n * @see https://tailwindcss.com/docs/border-opacity\r\n */\r\n 'border-opacity': [{\r\n 'border-opacity': [opacity]\r\n }],\r\n /**\r\n * Border Style\r\n * @see https://tailwindcss.com/docs/border-style\r\n */\r\n 'border-style': [{\r\n border: [...getLineStyles(), 'hidden']\r\n }],\r\n /**\r\n * Divide Width X\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-x': [{\r\n 'divide-x': [borderWidth]\r\n }],\r\n /**\r\n * Divide Width X Reverse\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-x-reverse': ['divide-x-reverse'],\r\n /**\r\n * Divide Width Y\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-y': [{\r\n 'divide-y': [borderWidth]\r\n }],\r\n /**\r\n * Divide Width Y Reverse\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-y-reverse': ['divide-y-reverse'],\r\n /**\r\n * Divide Opacity\r\n * @see https://tailwindcss.com/docs/divide-opacity\r\n */\r\n 'divide-opacity': [{\r\n 'divide-opacity': [opacity]\r\n }],\r\n /**\r\n * Divide Style\r\n * @see https://tailwindcss.com/docs/divide-style\r\n */\r\n 'divide-style': [{\r\n divide: getLineStyles()\r\n }],\r\n /**\r\n * Border Color\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color': [{\r\n border: [borderColor]\r\n }],\r\n /**\r\n * Border Color X\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-x': [{\r\n 'border-x': [borderColor]\r\n }],\r\n /**\r\n * Border Color Y\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-y': [{\r\n 'border-y': [borderColor]\r\n }],\r\n /**\r\n * Border Color S\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-s': [{\r\n 'border-s': [borderColor]\r\n }],\r\n /**\r\n * Border Color E\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-e': [{\r\n 'border-e': [borderColor]\r\n }],\r\n /**\r\n * Border Color Top\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-t': [{\r\n 'border-t': [borderColor]\r\n }],\r\n /**\r\n * Border Color Right\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-r': [{\r\n 'border-r': [borderColor]\r\n }],\r\n /**\r\n * Border Color Bottom\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-b': [{\r\n 'border-b': [borderColor]\r\n }],\r\n /**\r\n * Border Color Left\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-l': [{\r\n 'border-l': [borderColor]\r\n }],\r\n /**\r\n * Divide Color\r\n * @see https://tailwindcss.com/docs/divide-color\r\n */\r\n 'divide-color': [{\r\n divide: [borderColor]\r\n }],\r\n /**\r\n * Outline Style\r\n * @see https://tailwindcss.com/docs/outline-style\r\n */\r\n 'outline-style': [{\r\n outline: ['', ...getLineStyles()]\r\n }],\r\n /**\r\n * Outline Offset\r\n * @see https://tailwindcss.com/docs/outline-offset\r\n */\r\n 'outline-offset': [{\r\n 'outline-offset': [isLength, isArbitraryValue]\r\n }],\r\n /**\r\n * Outline Width\r\n * @see https://tailwindcss.com/docs/outline-width\r\n */\r\n 'outline-w': [{\r\n outline: [isLength, isArbitraryLength]\r\n }],\r\n /**\r\n * Outline Color\r\n * @see https://tailwindcss.com/docs/outline-color\r\n */\r\n 'outline-color': [{\r\n outline: [colors]\r\n }],\r\n /**\r\n * Ring Width\r\n * @see https://tailwindcss.com/docs/ring-width\r\n */\r\n 'ring-w': [{\r\n ring: getLengthWithEmptyAndArbitrary()\r\n }],\r\n /**\r\n * Ring Width Inset\r\n * @see https://tailwindcss.com/docs/ring-width\r\n */\r\n 'ring-w-inset': ['ring-inset'],\r\n /**\r\n * Ring Color\r\n * @see https://tailwindcss.com/docs/ring-color\r\n */\r\n 'ring-color': [{\r\n ring: [colors]\r\n }],\r\n /**\r\n * Ring Opacity\r\n * @see https://tailwindcss.com/docs/ring-opacity\r\n */\r\n 'ring-opacity': [{\r\n 'ring-opacity': [opacity]\r\n }],\r\n /**\r\n * Ring Offset Width\r\n * @see https://tailwindcss.com/docs/ring-offset-width\r\n */\r\n 'ring-offset-w': [{\r\n 'ring-offset': [isLength, isArbitraryLength]\r\n }],\r\n /**\r\n * Ring Offset Color\r\n * @see https://tailwindcss.com/docs/ring-offset-color\r\n */\r\n 'ring-offset-color': [{\r\n 'ring-offset': [colors]\r\n }],\r\n // Effects\r\n /**\r\n * Box Shadow\r\n * @see https://tailwindcss.com/docs/box-shadow\r\n */\r\n shadow: [{\r\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\r\n }],\r\n /**\r\n * Box Shadow Color\r\n * @see https://tailwindcss.com/docs/box-shadow-color\r\n */\r\n 'shadow-color': [{\r\n shadow: [isAny]\r\n }],\r\n /**\r\n * Opacity\r\n * @see https://tailwindcss.com/docs/opacity\r\n */\r\n opacity: [{\r\n opacity: [opacity]\r\n }],\r\n /**\r\n * Mix Blend Mode\r\n * @see https://tailwindcss.com/docs/mix-blend-mode\r\n */\r\n 'mix-blend': [{\r\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\r\n }],\r\n /**\r\n * Background Blend Mode\r\n * @see https://tailwindcss.com/docs/background-blend-mode\r\n */\r\n 'bg-blend': [{\r\n 'bg-blend': getBlendModes()\r\n }],\r\n // Filters\r\n /**\r\n * Filter\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/filter\r\n */\r\n filter: [{\r\n filter: ['', 'none']\r\n }],\r\n /**\r\n * Blur\r\n * @see https://tailwindcss.com/docs/blur\r\n */\r\n blur: [{\r\n blur: [blur]\r\n }],\r\n /**\r\n * Brightness\r\n * @see https://tailwindcss.com/docs/brightness\r\n */\r\n brightness: [{\r\n brightness: [brightness]\r\n }],\r\n /**\r\n * Contrast\r\n * @see https://tailwindcss.com/docs/contrast\r\n */\r\n contrast: [{\r\n contrast: [contrast]\r\n }],\r\n /**\r\n * Drop Shadow\r\n * @see https://tailwindcss.com/docs/drop-shadow\r\n */\r\n 'drop-shadow': [{\r\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\r\n }],\r\n /**\r\n * Grayscale\r\n * @see https://tailwindcss.com/docs/grayscale\r\n */\r\n grayscale: [{\r\n grayscale: [grayscale]\r\n }],\r\n /**\r\n * Hue Rotate\r\n * @see https://tailwindcss.com/docs/hue-rotate\r\n */\r\n 'hue-rotate': [{\r\n 'hue-rotate': [hueRotate]\r\n }],\r\n /**\r\n * Invert\r\n * @see https://tailwindcss.com/docs/invert\r\n */\r\n invert: [{\r\n invert: [invert]\r\n }],\r\n /**\r\n * Saturate\r\n * @see https://tailwindcss.com/docs/saturate\r\n */\r\n saturate: [{\r\n saturate: [saturate]\r\n }],\r\n /**\r\n * Sepia\r\n * @see https://tailwindcss.com/docs/sepia\r\n */\r\n sepia: [{\r\n sepia: [sepia]\r\n }],\r\n /**\r\n * Backdrop Filter\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/backdrop-filter\r\n */\r\n 'backdrop-filter': [{\r\n 'backdrop-filter': ['', 'none']\r\n }],\r\n /**\r\n * Backdrop Blur\r\n * @see https://tailwindcss.com/docs/backdrop-blur\r\n */\r\n 'backdrop-blur': [{\r\n 'backdrop-blur': [blur]\r\n }],\r\n /**\r\n * Backdrop Brightness\r\n * @see https://tailwindcss.com/docs/backdrop-brightness\r\n */\r\n 'backdrop-brightness': [{\r\n 'backdrop-brightness': [brightness]\r\n }],\r\n /**\r\n * Backdrop Contrast\r\n * @see https://tailwindcss.com/docs/backdrop-contrast\r\n */\r\n 'backdrop-contrast': [{\r\n 'backdrop-contrast': [contrast]\r\n }],\r\n /**\r\n * Backdrop Grayscale\r\n * @see https://tailwindcss.com/docs/backdrop-grayscale\r\n */\r\n 'backdrop-grayscale': [{\r\n 'backdrop-grayscale': [grayscale]\r\n }],\r\n /**\r\n * Backdrop Hue Rotate\r\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\r\n */\r\n 'backdrop-hue-rotate': [{\r\n 'backdrop-hue-rotate': [hueRotate]\r\n }],\r\n /**\r\n * Backdrop Invert\r\n * @see https://tailwindcss.com/docs/backdrop-invert\r\n */\r\n 'backdrop-invert': [{\r\n 'backdrop-invert': [invert]\r\n }],\r\n /**\r\n * Backdrop Opacity\r\n * @see https://tailwindcss.com/docs/backdrop-opacity\r\n */\r\n 'backdrop-opacity': [{\r\n 'backdrop-opacity': [opacity]\r\n }],\r\n /**\r\n * Backdrop Saturate\r\n * @see https://tailwindcss.com/docs/backdrop-saturate\r\n */\r\n 'backdrop-saturate': [{\r\n 'backdrop-saturate': [saturate]\r\n }],\r\n /**\r\n * Backdrop Sepia\r\n * @see https://tailwindcss.com/docs/backdrop-sepia\r\n */\r\n 'backdrop-sepia': [{\r\n 'backdrop-sepia': [sepia]\r\n }],\r\n // Tables\r\n /**\r\n * Border Collapse\r\n * @see https://tailwindcss.com/docs/border-collapse\r\n */\r\n 'border-collapse': [{\r\n border: ['collapse', 'separate']\r\n }],\r\n /**\r\n * Border Spacing\r\n * @see https://tailwindcss.com/docs/border-spacing\r\n */\r\n 'border-spacing': [{\r\n 'border-spacing': [borderSpacing]\r\n }],\r\n /**\r\n * Border Spacing X\r\n * @see https://tailwindcss.com/docs/border-spacing\r\n */\r\n 'border-spacing-x': [{\r\n 'border-spacing-x': [borderSpacing]\r\n }],\r\n /**\r\n * Border Spacing Y\r\n * @see https://tailwindcss.com/docs/border-spacing\r\n */\r\n 'border-spacing-y': [{\r\n 'border-spacing-y': [borderSpacing]\r\n }],\r\n /**\r\n * Table Layout\r\n * @see https://tailwindcss.com/docs/table-layout\r\n */\r\n 'table-layout': [{\r\n table: ['auto', 'fixed']\r\n }],\r\n /**\r\n * Caption Side\r\n * @see https://tailwindcss.com/docs/caption-side\r\n */\r\n caption: [{\r\n caption: ['top', 'bottom']\r\n }],\r\n // Transitions and Animation\r\n /**\r\n * Tranisition Property\r\n * @see https://tailwindcss.com/docs/transition-property\r\n */\r\n transition: [{\r\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\r\n }],\r\n /**\r\n * Transition Duration\r\n * @see https://tailwindcss.com/docs/transition-duration\r\n */\r\n duration: [{\r\n duration: getNumberAndArbitrary()\r\n }],\r\n /**\r\n * Transition Timing Function\r\n * @see https://tailwindcss.com/docs/transition-timing-function\r\n */\r\n ease: [{\r\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\r\n }],\r\n /**\r\n * Transition Delay\r\n * @see https://tailwindcss.com/docs/transition-delay\r\n */\r\n delay: [{\r\n delay: getNumberAndArbitrary()\r\n }],\r\n /**\r\n * Animation\r\n * @see https://tailwindcss.com/docs/animation\r\n */\r\n animate: [{\r\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\r\n }],\r\n // Transforms\r\n /**\r\n * Transform\r\n * @see https://tailwindcss.com/docs/transform\r\n */\r\n transform: [{\r\n transform: ['', 'gpu', 'none']\r\n }],\r\n /**\r\n * Scale\r\n * @see https://tailwindcss.com/docs/scale\r\n */\r\n scale: [{\r\n scale: [scale]\r\n }],\r\n /**\r\n * Scale X\r\n * @see https://tailwindcss.com/docs/scale\r\n */\r\n 'scale-x': [{\r\n 'scale-x': [scale]\r\n }],\r\n /**\r\n * Scale Y\r\n * @see https://tailwindcss.com/docs/scale\r\n */\r\n 'scale-y': [{\r\n 'scale-y': [scale]\r\n }],\r\n /**\r\n * Rotate\r\n * @see https://tailwindcss.com/docs/rotate\r\n */\r\n rotate: [{\r\n rotate: [isInteger, isArbitraryValue]\r\n }],\r\n /**\r\n * Translate X\r\n * @see https://tailwindcss.com/docs/translate\r\n */\r\n 'translate-x': [{\r\n 'translate-x': [translate]\r\n }],\r\n /**\r\n * Translate Y\r\n * @see https://tailwindcss.com/docs/translate\r\n */\r\n 'translate-y': [{\r\n 'translate-y': [translate]\r\n }],\r\n /**\r\n * Skew X\r\n * @see https://tailwindcss.com/docs/skew\r\n */\r\n 'skew-x': [{\r\n 'skew-x': [skew]\r\n }],\r\n /**\r\n * Skew Y\r\n * @see https://tailwindcss.com/docs/skew\r\n */\r\n 'skew-y': [{\r\n 'skew-y': [skew]\r\n }],\r\n /**\r\n * Transform Origin\r\n * @see https://tailwindcss.com/docs/transform-origin\r\n */\r\n 'transform-origin': [{\r\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\r\n }],\r\n // Interactivity\r\n /**\r\n * Accent Color\r\n * @see https://tailwindcss.com/docs/accent-color\r\n */\r\n accent: [{\r\n accent: ['auto', colors]\r\n }],\r\n /**\r\n * Appearance\r\n * @see https://tailwindcss.com/docs/appearance\r\n */\r\n appearance: [{\r\n appearance: ['none', 'auto']\r\n }],\r\n /**\r\n * Cursor\r\n * @see https://tailwindcss.com/docs/cursor\r\n */\r\n cursor: [{\r\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\r\n }],\r\n /**\r\n * Caret Color\r\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\r\n */\r\n 'caret-color': [{\r\n caret: [colors]\r\n }],\r\n /**\r\n * Pointer Events\r\n * @see https://tailwindcss.com/docs/pointer-events\r\n */\r\n 'pointer-events': [{\r\n 'pointer-events': ['none', 'auto']\r\n }],\r\n /**\r\n * Resize\r\n * @see https://tailwindcss.com/docs/resize\r\n */\r\n resize: [{\r\n resize: ['none', 'y', 'x', '']\r\n }],\r\n /**\r\n * Scroll Behavior\r\n * @see https://tailwindcss.com/docs/scroll-behavior\r\n */\r\n 'scroll-behavior': [{\r\n scroll: ['auto', 'smooth']\r\n }],\r\n /**\r\n * Scroll Margin\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-m': [{\r\n 'scroll-m': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin X\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mx': [{\r\n 'scroll-mx': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Y\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-my': [{\r\n 'scroll-my': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Start\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-ms': [{\r\n 'scroll-ms': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin End\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-me': [{\r\n 'scroll-me': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Top\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mt': [{\r\n 'scroll-mt': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Right\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mr': [{\r\n 'scroll-mr': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Bottom\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mb': [{\r\n 'scroll-mb': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Left\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-ml': [{\r\n 'scroll-ml': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-p': [{\r\n 'scroll-p': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding X\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-px': [{\r\n 'scroll-px': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Y\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-py': [{\r\n 'scroll-py': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Start\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-ps': [{\r\n 'scroll-ps': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding End\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pe': [{\r\n 'scroll-pe': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Top\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pt': [{\r\n 'scroll-pt': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Right\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pr': [{\r\n 'scroll-pr': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Bottom\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pb': [{\r\n 'scroll-pb': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Left\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pl': [{\r\n 'scroll-pl': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Snap Align\r\n * @see https://tailwindcss.com/docs/scroll-snap-align\r\n */\r\n 'snap-align': [{\r\n snap: ['start', 'end', 'center', 'align-none']\r\n }],\r\n /**\r\n * Scroll Snap Stop\r\n * @see https://tailwindcss.com/docs/scroll-snap-stop\r\n */\r\n 'snap-stop': [{\r\n snap: ['normal', 'always']\r\n }],\r\n /**\r\n * Scroll Snap Type\r\n * @see https://tailwindcss.com/docs/scroll-snap-type\r\n */\r\n 'snap-type': [{\r\n snap: ['none', 'x', 'y', 'both']\r\n }],\r\n /**\r\n * Scroll Snap Type Strictness\r\n * @see https://tailwindcss.com/docs/scroll-snap-type\r\n */\r\n 'snap-strictness': [{\r\n snap: ['mandatory', 'proximity']\r\n }],\r\n /**\r\n * Touch Action\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n touch: [{\r\n touch: ['auto', 'none', 'manipulation']\r\n }],\r\n /**\r\n * Touch Action X\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n 'touch-x': [{\r\n 'touch-pan': ['x', 'left', 'right']\r\n }],\r\n /**\r\n * Touch Action Y\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n 'touch-y': [{\r\n 'touch-pan': ['y', 'up', 'down']\r\n }],\r\n /**\r\n * Touch Action Pinch Zoom\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n 'touch-pz': ['touch-pinch-zoom'],\r\n /**\r\n * User Select\r\n * @see https://tailwindcss.com/docs/user-select\r\n */\r\n select: [{\r\n select: ['none', 'text', 'all', 'auto']\r\n }],\r\n /**\r\n * Will Change\r\n * @see https://tailwindcss.com/docs/will-change\r\n */\r\n 'will-change': [{\r\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\r\n }],\r\n // SVG\r\n /**\r\n * Fill\r\n * @see https://tailwindcss.com/docs/fill\r\n */\r\n fill: [{\r\n fill: [colors, 'none']\r\n }],\r\n /**\r\n * Stroke Width\r\n * @see https://tailwindcss.com/docs/stroke-width\r\n */\r\n 'stroke-w': [{\r\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\r\n }],\r\n /**\r\n * Stroke\r\n * @see https://tailwindcss.com/docs/stroke\r\n */\r\n stroke: [{\r\n stroke: [colors, 'none']\r\n }],\r\n // Accessibility\r\n /**\r\n * Screen Readers\r\n * @see https://tailwindcss.com/docs/screen-readers\r\n */\r\n sr: ['sr-only', 'not-sr-only'],\r\n /**\r\n * Forced Color Adjust\r\n * @see https://tailwindcss.com/docs/forced-color-adjust\r\n */\r\n 'forced-color-adjust': [{\r\n 'forced-color-adjust': ['auto', 'none']\r\n }]\r\n },\r\n conflictingClassGroups: {\r\n overflow: ['overflow-x', 'overflow-y'],\r\n overscroll: ['overscroll-x', 'overscroll-y'],\r\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\r\n 'inset-x': ['right', 'left'],\r\n 'inset-y': ['top', 'bottom'],\r\n flex: ['basis', 'grow', 'shrink'],\r\n gap: ['gap-x', 'gap-y'],\r\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\r\n px: ['pr', 'pl'],\r\n py: ['pt', 'pb'],\r\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\r\n mx: ['mr', 'ml'],\r\n my: ['mt', 'mb'],\r\n size: ['w', 'h'],\r\n 'font-size': ['leading'],\r\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\r\n 'fvn-ordinal': ['fvn-normal'],\r\n 'fvn-slashed-zero': ['fvn-normal'],\r\n 'fvn-figure': ['fvn-normal'],\r\n 'fvn-spacing': ['fvn-normal'],\r\n 'fvn-fraction': ['fvn-normal'],\r\n 'line-clamp': ['display', 'overflow'],\r\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\r\n 'rounded-s': ['rounded-ss', 'rounded-es'],\r\n 'rounded-e': ['rounded-se', 'rounded-ee'],\r\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\r\n 'rounded-r': ['rounded-tr', 'rounded-br'],\r\n 'rounded-b': ['rounded-br', 'rounded-bl'],\r\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\r\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\r\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\r\n 'border-w-x': ['border-w-r', 'border-w-l'],\r\n 'border-w-y': ['border-w-t', 'border-w-b'],\r\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\r\n 'border-color-x': ['border-color-r', 'border-color-l'],\r\n 'border-color-y': ['border-color-t', 'border-color-b'],\r\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\r\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\r\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\r\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\r\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\r\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\r\n touch: ['touch-x', 'touch-y', 'touch-pz'],\r\n 'touch-x': ['touch'],\r\n 'touch-y': ['touch'],\r\n 'touch-pz': ['touch']\r\n },\r\n conflictingClassGroupModifiers: {\r\n 'font-size': ['leading']\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\r\n * @param configExtension Partial config to merge into the `baseConfig`.\r\n */\r\nconst mergeConfigs = (baseConfig, {\r\n cacheSize,\r\n prefix,\r\n separator,\r\n experimentalParseClassName,\r\n extend = {},\r\n override = {}\r\n}) => {\r\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\r\n overrideProperty(baseConfig, 'prefix', prefix);\r\n overrideProperty(baseConfig, 'separator', separator);\r\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\r\n for (const configKey in override) {\r\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\r\n }\r\n for (const key in extend) {\r\n mergeConfigProperties(baseConfig[key], extend[key]);\r\n }\r\n return baseConfig;\r\n};\r\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\r\n if (overrideValue !== undefined) {\r\n baseObject[overrideKey] = overrideValue;\r\n }\r\n};\r\nconst overrideConfigProperties = (baseObject, overrideObject) => {\r\n if (overrideObject) {\r\n for (const key in overrideObject) {\r\n overrideProperty(baseObject, key, overrideObject[key]);\r\n }\r\n }\r\n};\r\nconst mergeConfigProperties = (baseObject, mergeObject) => {\r\n if (mergeObject) {\r\n for (const key in mergeObject) {\r\n const mergeValue = mergeObject[key];\r\n if (mergeValue !== undefined) {\r\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\r\n }\r\n }\r\n }\r\n};\r\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\r\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\r\n\r\n//# sourceMappingURL=bundle-mjs.mjs.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvdGFpbHdpbmQtbWVyZ2UvZGlzdC9idW5kbGUtbWpzLm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE9BQU8sbUJBQW1CLGtCQUFrQixhQUFhO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDJCQUEyQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQzRIO0FBQzVIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXktdjAtcHJvamVjdC8uL25vZGVfbW9kdWxlcy90YWlsd2luZC1tZXJnZS9kaXN0L2J1bmRsZS1tanMubWpzP2RkMDciXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQ0xBU1NfUEFSVF9TRVBBUkFUT1IgPSAnLSc7XHJcbmNvbnN0IGNyZWF0ZUNsYXNzR3JvdXBVdGlscyA9IGNvbmZpZyA9PiB7XHJcbiAgY29uc3QgY2xhc3NNYXAgPSBjcmVhdGVDbGFzc01hcChjb25maWcpO1xyXG4gIGNvbnN0IHtcclxuICAgIGNvbmZsaWN0aW5nQ2xhc3NHcm91cHMsXHJcbiAgICBjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnNcclxuICB9ID0gY29uZmlnO1xyXG4gIGNvbnN0IGdldENsYXNzR3JvdXBJZCA9IGNsYXNzTmFtZSA9PiB7XHJcbiAgICBjb25zdCBjbGFzc1BhcnRzID0gY2xhc3NOYW1lLnNwbGl0KENMQVNTX1BBUlRfU0VQQVJBVE9SKTtcclxuICAgIC8vIENsYXNzZXMgbGlrZSBgLWluc2V0LTFgIHByb2R1Y2UgYW4gZW1wdHkgc3RyaW5nIGFzIGZpcnN0IGNsYXNzUGFydC4gV2UgYXNzdW1lIHRoYXQgY2xhc3NlcyBmb3IgbmVnYXRpdmUgdmFsdWVzIGFyZSB1c2VkIGNvcnJlY3RseSBhbmQgcmVtb3ZlIGl0IGZyb20gY2xhc3NQYXJ0cy5cclxuICAgIGlmIChjbGFzc1BhcnRzWzBdID09PSAnJyAmJiBjbGFzc1BhcnRzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICBjbGFzc1BhcnRzLnNoaWZ0KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2V0R3JvdXBSZWN1cnNpdmUoY2xhc3NQYXJ0cywgY2xhc3NNYXApIHx8IGdldEdyb3VwSWRGb3JBcmJpdHJhcnlQcm9wZXJ0eShjbGFzc05hbWUpO1xyXG4gIH07XHJcbiAgY29uc3QgZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzID0gKGNsYXNzR3JvdXBJZCwgaGFzUG9zdGZpeE1vZGlmaWVyKSA9PiB7XHJcbiAgICBjb25zdCBjb25mbGljdHMgPSBjb25mbGljdGluZ0NsYXNzR3JvdXBzW2NsYXNzR3JvdXBJZF0gfHwgW107XHJcbiAgICBpZiAoaGFzUG9zdGZpeE1vZGlmaWVyICYmIGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyc1tjbGFzc0dyb3VwSWRdKSB7XHJcbiAgICAgIHJldHVybiBbLi4uY29uZmxpY3RzLCAuLi5jb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnNbY2xhc3NHcm91cElkXV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmxpY3RzO1xyXG4gIH07XHJcbiAgcmV0dXJuIHtcclxuICAgIGdldENsYXNzR3JvdXBJZCxcclxuICAgIGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkc1xyXG4gIH07XHJcbn07XHJcbmNvbnN0IGdldEdyb3VwUmVjdXJzaXZlID0gKGNsYXNzUGFydHMsIGNsYXNzUGFydE9iamVjdCkgPT4ge1xyXG4gIGlmIChjbGFzc1BhcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIGNsYXNzUGFydE9iamVjdC5jbGFzc0dyb3VwSWQ7XHJcbiAgfVxyXG4gIGNvbnN0IGN1cnJlbnRDbGFzc1BhcnQgPSBjbGFzc1BhcnRzWzBdO1xyXG4gIGNvbnN0IG5leHRDbGFzc1BhcnRPYmplY3QgPSBjbGFzc1BhcnRPYmplY3QubmV4dFBhcnQuZ2V0KGN1cnJlbnRDbGFzc1BhcnQpO1xyXG4gIGNvbnN0IGNsYXNzR3JvdXBGcm9tTmV4dENsYXNzUGFydCA9IG5leHRDbGFzc1BhcnRPYmplY3QgPyBnZXRHcm91cFJlY3Vyc2l2ZShjbGFzc1BhcnRzLnNsaWNlKDEpLCBuZXh0Q2xhc3NQYXJ0T2JqZWN0KSA6IHVuZGVmaW5lZDtcclxuICBpZiAoY2xhc3NHcm91cEZyb21OZXh0Q2xhc3NQYXJ0KSB7XHJcbiAgICByZXR1cm4gY2xhc3NHcm91cEZyb21OZXh0Q2xhc3NQYXJ0O1xyXG4gIH1cclxuICBpZiAoY2xhc3NQYXJ0T2JqZWN0LnZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBjb25zdCBjbGFzc1Jlc3QgPSBjbGFzc1BhcnRzLmpvaW4oQ0xBU1NfUEFSVF9TRVBBUkFUT1IpO1xyXG4gIHJldHVybiBjbGFzc1BhcnRPYmplY3QudmFsaWRhdG9ycy5maW5kKCh7XHJcbiAgICB2YWxpZGF0b3JcclxuICB9KSA9PiB2YWxpZGF0b3IoY2xhc3NSZXN0KSk/LmNsYXNzR3JvdXBJZDtcclxufTtcclxuY29uc3QgYXJiaXRyYXJ5UHJvcGVydHlSZWdleCA9IC9eXFxbKC4rKVxcXSQvO1xyXG5jb25zdCBnZXRHcm91cElkRm9yQXJiaXRyYXJ5UHJvcGVydHkgPSBjbGFzc05hbWUgPT4ge1xyXG4gIGlmIChhcmJpdHJhcnlQcm9wZXJ0eVJlZ2V4LnRlc3QoY2xhc3NOYW1lKSkge1xyXG4gICAgY29uc3QgYXJiaXRyYXJ5UHJvcGVydHlDbGFzc05hbWUgPSBhcmJpdHJhcnlQcm9wZXJ0eVJlZ2V4LmV4ZWMoY2xhc3NOYW1lKVsxXTtcclxuICAgIGNvbnN0IHByb3BlcnR5ID0gYXJiaXRyYXJ5UHJvcGVydHlDbGFzc05hbWU/LnN1YnN0cmluZygwLCBhcmJpdHJhcnlQcm9wZXJ0eUNsYXNzTmFtZS5pbmRleE9mKCc6JykpO1xyXG4gICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgIC8vIEkgdXNlIHR3byBkb3RzIGhlcmUgYmVjYXVzZSBvbmUgZG90IGlzIHVzZWQgYXMgcHJlZml4IGZvciBjbGFzcyBncm91cHMgaW4gcGx1Z2luc1xyXG4gICAgICByZXR1cm4gJ2FyYml0cmFyeS4uJyArIHByb3BlcnR5O1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuLyoqXHJcbiAqIEV4cG9ydGVkIGZvciB0ZXN0aW5nIG9ubHlcclxuICovXHJcbmNvbnN0IGNyZWF0ZUNsYXNzTWFwID0gY29uZmlnID0+IHtcclxuICBjb25zdCB7XHJcbiAgICB0aGVtZSxcclxuICAgIHByZWZpeFxyXG4gIH0gPSBjb25maWc7XHJcbiAgY29uc3QgY2xhc3NNYXAgPSB7XHJcbiAgICBuZXh0UGFydDogbmV3IE1hcCgpLFxyXG4gICAgdmFsaWRhdG9yczogW11cclxuICB9O1xyXG4gIGNvbnN0IHByZWZpeGVkQ2xhc3NHcm91cEVudHJpZXMgPSBnZXRQcmVmaXhlZENsYXNzR3JvdXBFbnRyaWVzKE9iamVjdC5lbnRyaWVzKGNvbmZpZy5jbGFzc0dyb3VwcyksIHByZWZpeCk7XHJcbiAgcHJlZml4ZWRDbGFzc0dyb3VwRW50cmllcy5mb3JFYWNoKChbY2xhc3NHcm91cElkLCBjbGFzc0dyb3VwXSkgPT4ge1xyXG4gICAgcHJvY2Vzc0NsYXNzZXNSZWN1cnNpdmVseShjbGFzc0dyb3VwLCBjbGFzc01hcCwgY2xhc3NHcm91cElkLCB0aGVtZSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGNsYXNzTWFwO1xyXG59O1xyXG5jb25zdCBwcm9jZXNzQ2xhc3Nlc1JlY3Vyc2l2ZWx5ID0gKGNsYXNzR3JvdXAsIGNsYXNzUGFydE9iamVjdCwgY2xhc3NHcm91cElkLCB0aGVtZSkgPT4ge1xyXG4gIGNsYXNzR3JvdXAuZm9yRWFjaChjbGFzc0RlZmluaXRpb24gPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBjbGFzc0RlZmluaXRpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGNvbnN0IGNsYXNzUGFydE9iamVjdFRvRWRpdCA9IGNsYXNzRGVmaW5pdGlvbiA9PT0gJycgPyBjbGFzc1BhcnRPYmplY3QgOiBnZXRQYXJ0KGNsYXNzUGFydE9iamVjdCwgY2xhc3NEZWZpbml0aW9uKTtcclxuICAgICAgY2xhc3NQYXJ0T2JqZWN0VG9FZGl0LmNsYXNzR3JvdXBJZCA9IGNsYXNzR3JvdXBJZDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBjbGFzc0RlZmluaXRpb24gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaWYgKGlzVGhlbWVHZXR0ZXIoY2xhc3NEZWZpbml0aW9uKSkge1xyXG4gICAgICAgIHByb2Nlc3NDbGFzc2VzUmVjdXJzaXZlbHkoY2xhc3NEZWZpbml0aW9uKHRoZW1lKSwgY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0dyb3VwSWQsIHRoZW1lKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY2xhc3NQYXJ0T2JqZWN0LnZhbGlkYXRvcnMucHVzaCh7XHJcbiAgICAgICAgdmFsaWRhdG9yOiBjbGFzc0RlZmluaXRpb24sXHJcbiAgICAgICAgY2xhc3NHcm91cElkXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZW50cmllcyhjbGFzc0RlZmluaXRpb24pLmZvckVhY2goKFtrZXksIGNsYXNzR3JvdXBdKSA9PiB7XHJcbiAgICAgIHByb2Nlc3NDbGFzc2VzUmVjdXJzaXZlbHkoY2xhc3NHcm91cCwgZ2V0UGFydChjbGFzc1BhcnRPYmplY3QsIGtleSksIGNsYXNzR3JvdXBJZCwgdGhlbWUpO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn07XHJcbmNvbnN0IGdldFBhcnQgPSAoY2xhc3NQYXJ0T2JqZWN0LCBwYXRoKSA9PiB7XHJcbiAgbGV0IGN1cnJlbnRDbGFzc1BhcnRPYmplY3QgPSBjbGFzc1BhcnRPYmplY3Q7XHJcbiAgcGF0aC5zcGxpdChDTEFTU19QQVJUX1NFUEFSQVRPUikuZm9yRWFjaChwYXRoUGFydCA9PiB7XHJcbiAgICBpZiAoIWN1cnJlbnRDbGFzc1BhcnRPYmplY3QubmV4dFBhcnQuaGFzKHBhdGhQYXJ0KSkge1xyXG4gICAgICBjdXJyZW50Q2xhc3NQYXJ0T2JqZWN0Lm5leHRQYXJ0LnNldChwYXRoUGFydCwge1xyXG4gICAgICAgIG5leHRQYXJ0OiBuZXcgTWFwKCksXHJcbiAgICAgICAgdmFsaWRhdG9yczogW11cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50Q2xhc3NQYXJ0T2JqZWN0ID0gY3VycmVudENsYXNzUGFydE9iamVjdC5uZXh0UGFydC5nZXQocGF0aFBhcnQpO1xyXG4gIH0pO1xyXG4gIHJldHVybiBjdXJyZW50Q2xhc3NQYXJ0T2JqZWN0O1xyXG59O1xyXG5jb25zdCBpc1RoZW1lR2V0dGVyID0gZnVuYyA9PiBmdW5jLmlzVGhlbWVHZXR0ZXI7XHJcbmNvbnN0IGdldFByZWZpeGVkQ2xhc3NHcm91cEVudHJpZXMgPSAoY2xhc3NHcm91cEVudHJpZXMsIHByZWZpeCkgPT4ge1xyXG4gIGlmICghcHJlZml4KSB7XHJcbiAgICByZXR1cm4gY2xhc3NHcm91cEVudHJpZXM7XHJcbiAgfVxyXG4gIHJldHVybiBjbGFzc0dyb3VwRW50cmllcy5tYXAoKFtjbGFzc0dyb3VwSWQsIGNsYXNzR3JvdXBdKSA9PiB7XHJcbiAgICBjb25zdCBwcmVmaXhlZENsYXNzR3JvdXAgPSBjbGFzc0dyb3VwLm1hcChjbGFzc0RlZmluaXRpb24gPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGNsYXNzRGVmaW5pdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gcHJlZml4ICsgY2xhc3NEZWZpbml0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NEZWZpbml0aW9uID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoY2xhc3NEZWZpbml0aW9uKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW3ByZWZpeCArIGtleSwgdmFsdWVdKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNsYXNzRGVmaW5pdGlvbjtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIFtjbGFzc0dyb3VwSWQsIHByZWZpeGVkQ2xhc3NHcm91cF07XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vLyBMUlUgY2FjaGUgaW5zcGlyZWQgZnJvbSBoYXNobHJ1IChodHRwczovL2dpdGh1Yi5jb20vZG9taW5pY3RhcnIvaGFzaGxydS9ibG9iL3YxLjAuNC9pbmRleC5qcykgYnV0IG9iamVjdCByZXBsYWNlZCB3aXRoIE1hcCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlXHJcbmNvbnN0IGNyZWF0ZUxydUNhY2hlID0gbWF4Q2FjaGVTaXplID0+IHtcclxuICBpZiAobWF4Q2FjaGVTaXplIDwgMSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZ2V0OiAoKSA9PiB1bmRlZmluZWQsXHJcbiAgICAgIHNldDogKCkgPT4ge31cclxuICAgIH07XHJcbiAgfVxyXG4gIGxldCBjYWNoZVNpemUgPSAwO1xyXG4gIGxldCBjYWNoZSA9IG5ldyBNYXAoKTtcclxuICBsZXQgcHJldmlvdXNDYWNoZSA9IG5ldyBNYXAoKTtcclxuICBjb25zdCB1cGRhdGUgPSAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgY2FjaGVTaXplKys7XHJcbiAgICBpZiAoY2FjaGVTaXplID4gbWF4Q2FjaGVTaXplKSB7XHJcbiAgICAgIGNhY2hlU2l6ZSA9IDA7XHJcbiAgICAgIHByZXZpb3VzQ2FjaGUgPSBjYWNoZTtcclxuICAgICAgY2FjaGUgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuICByZXR1cm4ge1xyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICBsZXQgdmFsdWUgPSBjYWNoZS5nZXQoa2V5KTtcclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCh2YWx1ZSA9IHByZXZpb3VzQ2FjaGUuZ2V0KGtleSkpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB1cGRhdGUoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVwZGF0ZShrZXksIHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcbmNvbnN0IElNUE9SVEFOVF9NT0RJRklFUiA9ICchJztcclxuY29uc3QgY3JlYXRlUGFyc2VDbGFzc05hbWUgPSBjb25maWcgPT4ge1xyXG4gIGNvbnN0IHtcclxuICAgIHNlcGFyYXRvcixcclxuICAgIGV4cGVyaW1lbnRhbFBhcnNlQ2xhc3NOYW1lXHJcbiAgfSA9IGNvbmZpZztcclxuICBjb25zdCBpc1NlcGFyYXRvclNpbmdsZUNoYXJhY3RlciA9IHNlcGFyYXRvci5sZW5ndGggPT09IDE7XHJcbiAgY29uc3QgZmlyc3RTZXBhcmF0b3JDaGFyYWN0ZXIgPSBzZXBhcmF0b3JbMF07XHJcbiAgY29uc3Qgc2VwYXJhdG9yTGVuZ3RoID0gc2VwYXJhdG9yLmxlbmd0aDtcclxuICAvLyBwYXJzZUNsYXNzTmFtZSBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzL2Jsb2IvdjMuMi4yL3NyYy91dGlsL3NwbGl0QXRUb3BMZXZlbE9ubHkuanNcclxuICBjb25zdCBwYXJzZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSA9PiB7XHJcbiAgICBjb25zdCBtb2RpZmllcnMgPSBbXTtcclxuICAgIGxldCBicmFja2V0RGVwdGggPSAwO1xyXG4gICAgbGV0IG1vZGlmaWVyU3RhcnQgPSAwO1xyXG4gICAgbGV0IHBvc3RmaXhNb2RpZmllclBvc2l0aW9uO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNsYXNzTmFtZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgbGV0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjbGFzc05hbWVbaW5kZXhdO1xyXG4gICAgICBpZiAoYnJhY2tldERlcHRoID09PSAwKSB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgPT09IGZpcnN0U2VwYXJhdG9yQ2hhcmFjdGVyICYmIChpc1NlcGFyYXRvclNpbmdsZUNoYXJhY3RlciB8fCBjbGFzc05hbWUuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VwYXJhdG9yTGVuZ3RoKSA9PT0gc2VwYXJhdG9yKSkge1xyXG4gICAgICAgICAgbW9kaWZpZXJzLnB1c2goY2xhc3NOYW1lLnNsaWNlKG1vZGlmaWVyU3RhcnQsIGluZGV4KSk7XHJcbiAgICAgICAgICBtb2RpZmllclN0YXJ0ID0gaW5kZXggKyBzZXBhcmF0b3JMZW5ndGg7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgPT09ICcvJykge1xyXG4gICAgICAgICAgcG9zdGZpeE1vZGlmaWVyUG9zaXRpb24gPSBpbmRleDtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlciA9PT0gJ1snKSB7XHJcbiAgICAgICAgYnJhY2tldERlcHRoKys7XHJcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudENoYXJhY3RlciA9PT0gJ10nKSB7XHJcbiAgICAgICAgYnJhY2tldERlcHRoLS07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGJhc2VDbGFzc05hbWVXaXRoSW1wb3J0YW50TW9kaWZpZXIgPSBtb2RpZmllcnMubGVuZ3RoID09PSAwID8gY2xhc3NOYW1lIDogY2xhc3NOYW1lLnN1YnN0cmluZyhtb2RpZmllclN0YXJ0KTtcclxuICAgIGNvbnN0IGhhc0ltcG9ydGFudE1vZGlmaWVyID0gYmFzZUNsYXNzTmFtZVdpdGhJbXBvcnRhbnRNb2RpZmllci5zdGFydHNXaXRoKElNUE9SVEFOVF9NT0RJRklFUik7XHJcbiAgICBjb25zdCBiYXNlQ2xhc3NOYW1lID0gaGFzSW1wb3J0YW50TW9kaWZpZXIgPyBiYXNlQ2xhc3NOYW1lV2l0aEltcG9ydGFudE1vZGlmaWVyLnN1YnN0cmluZygxKSA6IGJhc2VDbGFzc05hbWVXaXRoSW1wb3J0YW50TW9kaWZpZXI7XHJcbiAgICBjb25zdCBtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uID0gcG9zdGZpeE1vZGlmaWVyUG9zaXRpb24gJiYgcG9zdGZpeE1vZGlmaWVyUG9zaXRpb24gPiBtb2RpZmllclN0YXJ0ID8gcG9zdGZpeE1vZGlmaWVyUG9zaXRpb24gLSBtb2RpZmllclN0YXJ0IDogdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbW9kaWZpZXJzLFxyXG4gICAgICBoYXNJbXBvcnRhbnRNb2RpZmllcixcclxuICAgICAgYmFzZUNsYXNzTmFtZSxcclxuICAgICAgbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvblxyXG4gICAgfTtcclxuICB9O1xyXG4gIGlmIChleHBlcmltZW50YWxQYXJzZUNsYXNzTmFtZSkge1xyXG4gICAgcmV0dXJuIGNsYXNzTmFtZSA9PiBleHBlcmltZW50YWxQYXJzZUNsYXNzTmFtZSh7XHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgcGFyc2VDbGFzc05hbWVcclxuICAgIH0pO1xyXG4gIH1cclxuICByZXR1cm4gcGFyc2VDbGFzc05hbWU7XHJcbn07XHJcbi8qKlxyXG4gKiBTb3J0cyBtb2RpZmllcnMgYWNjb3JkaW5nIHRvIGZvbGxvd2luZyBzY2hlbWE6XHJcbiAqIC0gUHJlZGVmaW5lZCBtb2RpZmllcnMgYXJlIHNvcnRlZCBhbHBoYWJldGljYWxseVxyXG4gKiAtIFdoZW4gYW4gYXJiaXRyYXJ5IHZhcmlhbnQgYXBwZWFycywgaXQgbXVzdCBiZSBwcmVzZXJ2ZWQgd2hpY2ggbW9kaWZpZXJzIGFyZSBiZWZvcmUgYW5kIGFmdGVyIGl0XHJcbiAqL1xyXG5jb25zdCBzb3J0TW9kaWZpZXJzID0gbW9kaWZpZXJzID0+IHtcclxuICBpZiAobW9kaWZpZXJzLmxlbmd0aCA8PSAxKSB7XHJcbiAgICByZXR1cm4gbW9kaWZpZXJzO1xyXG4gIH1cclxuICBjb25zdCBzb3J0ZWRNb2RpZmllcnMgPSBbXTtcclxuICBsZXQgdW5zb3J0ZWRNb2RpZmllcnMgPSBbXTtcclxuICBtb2RpZmllcnMuZm9yRWFjaChtb2RpZmllciA9PiB7XHJcbiAgICBjb25zdCBpc0FyYml0cmFyeVZhcmlhbnQgPSBtb2RpZmllclswXSA9PT0gJ1snO1xyXG4gICAgaWYgKGlzQXJiaXRyYXJ5VmFyaWFudCkge1xyXG4gICAgICBzb3J0ZWRNb2RpZmllcnMucHVzaCguLi51bnNvcnRlZE1vZGlmaWVycy5zb3J0KCksIG1vZGlmaWVyKTtcclxuICAgICAgdW5zb3J0ZWRNb2RpZmllcnMgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVuc29ydGVkTW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHNvcnRlZE1vZGlmaWVycy5wdXNoKC4uLnVuc29ydGVkTW9kaWZpZXJzLnNvcnQoKSk7XHJcbiAgcmV0dXJuIHNvcnRlZE1vZGlmaWVycztcclxufTtcclxuY29uc3QgY3JlYXRlQ29uZmlnVXRpbHMgPSBjb25maWcgPT4gKHtcclxuICBjYWNoZTogY3JlYXRlTHJ1Q2FjaGUoY29uZmlnLmNhY2hlU2l6ZSksXHJcbiAgcGFyc2VDbGFzc05hbWU6IGNyZWF0ZVBhcnNlQ2xhc3NOYW1lKGNvbmZpZyksXHJcbiAgLi4uY3JlYXRlQ2xhc3NHcm91cFV0aWxzKGNvbmZpZylcclxufSk7XHJcbmNvbnN0IFNQTElUX0NMQVNTRVNfUkVHRVggPSAvXFxzKy87XHJcbmNvbnN0IG1lcmdlQ2xhc3NMaXN0ID0gKGNsYXNzTGlzdCwgY29uZmlnVXRpbHMpID0+IHtcclxuICBjb25zdCB7XHJcbiAgICBwYXJzZUNsYXNzTmFtZSxcclxuICAgIGdldENsYXNzR3JvdXBJZCxcclxuICAgIGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkc1xyXG4gIH0gPSBjb25maWdVdGlscztcclxuICAvKipcclxuICAgKiBTZXQgb2YgY2xhc3NHcm91cElkcyBpbiBmb2xsb3dpbmcgZm9ybWF0OlxyXG4gICAqIGB7aW1wb3J0YW50TW9kaWZpZXJ9e3ZhcmlhbnRNb2RpZmllcnN9e2NsYXNzR3JvdXBJZH1gXHJcbiAgICogQGV4YW1wbGUgJ2Zsb2F0J1xyXG4gICAqIEBleGFtcGxlICdob3Zlcjpmb2N1czpiZy1jb2xvcidcclxuICAgKiBAZXhhbXBsZSAnbWQ6IXByJ1xyXG4gICAqL1xyXG4gIGNvbnN0IGNsYXNzR3JvdXBzSW5Db25mbGljdCA9IFtdO1xyXG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc0xpc3QudHJpbSgpLnNwbGl0KFNQTElUX0NMQVNTRVNfUkVHRVgpO1xyXG4gIGxldCByZXN1bHQgPSAnJztcclxuICBmb3IgKGxldCBpbmRleCA9IGNsYXNzTmFtZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xyXG4gICAgY29uc3Qgb3JpZ2luYWxDbGFzc05hbWUgPSBjbGFzc05hbWVzW2luZGV4XTtcclxuICAgIGNvbnN0IHtcclxuICAgICAgbW9kaWZpZXJzLFxyXG4gICAgICBoYXNJbXBvcnRhbnRNb2RpZmllcixcclxuICAgICAgYmFzZUNsYXNzTmFtZSxcclxuICAgICAgbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvblxyXG4gICAgfSA9IHBhcnNlQ2xhc3NOYW1lKG9yaWdpbmFsQ2xhc3NOYW1lKTtcclxuICAgIGxldCBoYXNQb3N0Zml4TW9kaWZpZXIgPSBCb29sZWFuKG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb24pO1xyXG4gICAgbGV0IGNsYXNzR3JvdXBJZCA9IGdldENsYXNzR3JvdXBJZChoYXNQb3N0Zml4TW9kaWZpZXIgPyBiYXNlQ2xhc3NOYW1lLnN1YnN0cmluZygwLCBtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uKSA6IGJhc2VDbGFzc05hbWUpO1xyXG4gICAgaWYgKCFjbGFzc0dyb3VwSWQpIHtcclxuICAgICAgaWYgKCFoYXNQb3N0Zml4TW9kaWZpZXIpIHtcclxuICAgICAgICAvLyBOb3QgYSBUYWlsd2luZCBjbGFzc1xyXG4gICAgICAgIHJlc3VsdCA9IG9yaWdpbmFsQ2xhc3NOYW1lICsgKHJlc3VsdC5sZW5ndGggPiAwID8gJyAnICsgcmVzdWx0IDogcmVzdWx0KTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjbGFzc0dyb3VwSWQgPSBnZXRDbGFzc0dyb3VwSWQoYmFzZUNsYXNzTmFtZSk7XHJcbiAgICAgIGlmICghY2xhc3NHcm91cElkKSB7XHJcbiAgICAgICAgLy8gTm90IGEgVGFpbHdpbmQgY2xhc3NcclxuICAgICAgICByZXN1bHQgPSBvcmlnaW5hbENsYXNzTmFtZSArIChyZXN1bHQubGVuZ3RoID4gMCA/ICcgJyArIHJlc3VsdCA6IHJlc3VsdCk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaGFzUG9zdGZpeE1vZGlmaWVyID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YXJpYW50TW9kaWZpZXIgPSBzb3J0TW9kaWZpZXJzKG1vZGlmaWVycykuam9pbignOicpO1xyXG4gICAgY29uc3QgbW9kaWZpZXJJZCA9IGhhc0ltcG9ydGFudE1vZGlmaWVyID8gdmFyaWFudE1vZGlmaWVyICsgSU1QT1JUQU5UX01PRElGSUVSIDogdmFyaWFudE1vZGlmaWVyO1xyXG4gICAgY29uc3QgY2xhc3NJZCA9IG1vZGlmaWVySWQgKyBjbGFzc0dyb3VwSWQ7XHJcbiAgICBpZiAoY2xhc3NHcm91cHNJbkNvbmZsaWN0LmluY2x1ZGVzKGNsYXNzSWQpKSB7XHJcbiAgICAgIC8vIFRhaWx3aW5kIGNsYXNzIG9taXR0ZWQgZHVlIHRvIGNvbmZsaWN0XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgY2xhc3NHcm91cHNJbkNvbmZsaWN0LnB1c2goY2xhc3NJZCk7XHJcbiAgICBjb25zdCBjb25mbGljdEdyb3VwcyA9IGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkcyhjbGFzc0dyb3VwSWQsIGhhc1Bvc3RmaXhNb2RpZmllcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZsaWN0R3JvdXBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwID0gY29uZmxpY3RHcm91cHNbaV07XHJcbiAgICAgIGNsYXNzR3JvdXBzSW5Db25mbGljdC5wdXNoKG1vZGlmaWVySWQgKyBncm91cCk7XHJcbiAgICB9XHJcbiAgICAvLyBUYWlsd2luZCBjbGFzcyBub3QgaW4gY29uZmxpY3RcclxuICAgIHJlc3VsdCA9IG9yaWdpbmFsQ2xhc3NOYW1lICsgKHJlc3VsdC5sZW5ndGggPiAwID8gJyAnICsgcmVzdWx0IDogcmVzdWx0KTtcclxuICB9XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2x1a2VlZC9jbHN4IGFuZCBtb2RpZmllZCB0byBzdWl0IHRoZSBuZWVkcyBvZiB0YWlsd2luZC1tZXJnZSBiZXR0ZXIuXHJcbiAqXHJcbiAqIFNwZWNpZmljYWxseTpcclxuICogLSBSdW50aW1lIGNvZGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbHVrZWVkL2Nsc3gvYmxvYi92MS4yLjEvc3JjL2luZGV4LmpzXHJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlZWQvY2xzeC9ibG9iL3YxLjIuMS9jbHN4LmQudHNcclxuICpcclxuICogT3JpZ2luYWwgY29kZSBoYXMgTUlUIGxpY2Vuc2U6IENvcHlyaWdodCAoYykgTHVrZSBFZHdhcmRzIDxsdWtlLmVkd2FyZHMwNUBnbWFpbC5jb20+IChsdWtlZWQuY29tKVxyXG4gKi9cclxuZnVuY3Rpb24gdHdKb2luKCkge1xyXG4gIGxldCBpbmRleCA9IDA7XHJcbiAgbGV0IGFyZ3VtZW50O1xyXG4gIGxldCByZXNvbHZlZFZhbHVlO1xyXG4gIGxldCBzdHJpbmcgPSAnJztcclxuICB3aGlsZSAoaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICBpZiAoYXJndW1lbnQgPSBhcmd1bWVudHNbaW5kZXgrK10pIHtcclxuICAgICAgaWYgKHJlc29sdmVkVmFsdWUgPSB0b1ZhbHVlKGFyZ3VtZW50KSkge1xyXG4gICAgICAgIHN0cmluZyAmJiAoc3RyaW5nICs9ICcgJyk7XHJcbiAgICAgICAgc3RyaW5nICs9IHJlc29sdmVkVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHN0cmluZztcclxufVxyXG5jb25zdCB0b1ZhbHVlID0gbWl4ID0+IHtcclxuICBpZiAodHlwZW9mIG1peCA9PT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiBtaXg7XHJcbiAgfVxyXG4gIGxldCByZXNvbHZlZFZhbHVlO1xyXG4gIGxldCBzdHJpbmcgPSAnJztcclxuICBmb3IgKGxldCBrID0gMDsgayA8IG1peC5sZW5ndGg7IGsrKykge1xyXG4gICAgaWYgKG1peFtrXSkge1xyXG4gICAgICBpZiAocmVzb2x2ZWRWYWx1ZSA9IHRvVmFsdWUobWl4W2tdKSkge1xyXG4gICAgICAgIHN0cmluZyAmJiAoc3RyaW5nICs9ICcgJyk7XHJcbiAgICAgICAgc3RyaW5nICs9IHJlc29sdmVkVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHN0cmluZztcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlVGFpbHdpbmRNZXJnZShjcmVhdGVDb25maWdGaXJzdCwgLi4uY3JlYXRlQ29uZmlnUmVzdCkge1xyXG4gIGxldCBjb25maWdVdGlscztcclxuICBsZXQgY2FjaGVHZXQ7XHJcbiAgbGV0IGNhY2hlU2V0O1xyXG4gIGxldCBmdW5jdGlvblRvQ2FsbCA9IGluaXRUYWlsd2luZE1lcmdlO1xyXG4gIGZ1bmN0aW9uIGluaXRUYWlsd2luZE1lcmdlKGNsYXNzTGlzdCkge1xyXG4gICAgY29uc3QgY29uZmlnID0gY3JlYXRlQ29uZmlnUmVzdC5yZWR1Y2UoKHByZXZpb3VzQ29uZmlnLCBjcmVhdGVDb25maWdDdXJyZW50KSA9PiBjcmVhdGVDb25maWdDdXJyZW50KHByZXZpb3VzQ29uZmlnKSwgY3JlYXRlQ29uZmlnRmlyc3QoKSk7XHJcbiAgICBjb25maWdVdGlscyA9IGNyZWF0ZUNvbmZpZ1V0aWxzKGNvbmZpZyk7XHJcbiAgICBjYWNoZUdldCA9IGNvbmZpZ1V0aWxzLmNhY2hlLmdldDtcclxuICAgIGNhY2hlU2V0ID0gY29uZmlnVXRpbHMuY2FjaGUuc2V0O1xyXG4gICAgZnVuY3Rpb25Ub0NhbGwgPSB0YWlsd2luZE1lcmdlO1xyXG4gICAgcmV0dXJuIHRhaWx3aW5kTWVyZ2UoY2xhc3NMaXN0KTtcclxuICB9XHJcbiAgZnVuY3Rpb24gdGFpbHdpbmRNZXJnZShjbGFzc0xpc3QpIHtcclxuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlR2V0KGNsYXNzTGlzdCk7XHJcbiAgICBpZiAoY2FjaGVkUmVzdWx0KSB7XHJcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXN1bHQgPSBtZXJnZUNsYXNzTGlzdChjbGFzc0xpc3QsIGNvbmZpZ1V0aWxzKTtcclxuICAgIGNhY2hlU2V0KGNsYXNzTGlzdCwgcmVzdWx0KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIHJldHVybiBmdW5jdGlvbiBjYWxsVGFpbHdpbmRNZXJnZSgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvblRvQ2FsbCh0d0pvaW4uYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XHJcbiAgfTtcclxufVxyXG5jb25zdCBmcm9tVGhlbWUgPSBrZXkgPT4ge1xyXG4gIGNvbnN0IHRoZW1lR2V0dGVyID0gdGhlbWUgPT4gdGhlbWVba2V5XSB8fCBbXTtcclxuICB0aGVtZUdldHRlci5pc1RoZW1lR2V0dGVyID0gdHJ1ZTtcclxuICByZXR1cm4gdGhlbWVHZXR0ZXI7XHJcbn07XHJcbmNvbnN0IGFyYml0cmFyeVZhbHVlUmVnZXggPSAvXlxcWyg/OihbYS16LV0rKTopPyguKylcXF0kL2k7XHJcbmNvbnN0IGZyYWN0aW9uUmVnZXggPSAvXlxcZCtcXC9cXGQrJC87XHJcbmNvbnN0IHN0cmluZ0xlbmd0aHMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ3B4JywgJ2Z1bGwnLCAnc2NyZWVuJ10pO1xyXG5jb25zdCB0c2hpcnRVbml0UmVnZXggPSAvXihcXGQrKFxcLlxcZCspPyk/KHhzfHNtfG1kfGxnfHhsKSQvO1xyXG5jb25zdCBsZW5ndGhVbml0UmVnZXggPSAvXFxkKyglfHB4fHI/ZW18W3NkbF0/dihbaHdpYl18bWlufG1heCl8cHR8cGN8aW58Y218bW18Y2FwfGNofGV4fHI/bGh8Y3Eod3xofGl8YnxtaW58bWF4KSl8XFxiKGNhbGN8bWlufG1heHxjbGFtcClcXCguK1xcKXxeMCQvO1xyXG5jb25zdCBjb2xvckZ1bmN0aW9uUmVnZXggPSAvXihyZ2JhP3xoc2xhP3xod2J8KG9rKT8obGFifGxjaCkpXFwoLitcXCkkLztcclxuLy8gU2hhZG93IGFsd2F5cyBiZWdpbnMgd2l0aCB4IGFuZCB5IG9mZnNldCBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZSBvcHRpb25hbGx5IHByZXBlbmRlZCBieSBpbnNldFxyXG5jb25zdCBzaGFkb3dSZWdleCA9IC9eKGluc2V0Xyk/LT8oKFxcZCspP1xcLj8oXFxkKylbYS16XSt8MClfLT8oKFxcZCspP1xcLj8oXFxkKylbYS16XSt8MCkvO1xyXG5jb25zdCBpbWFnZVJlZ2V4ID0gL14odXJsfGltYWdlfGltYWdlLXNldHxjcm9zcy1mYWRlfGVsZW1lbnR8KHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsfGNvbmljKS1ncmFkaWVudClcXCguK1xcKSQvO1xyXG5jb25zdCBpc0xlbmd0aCA9IHZhbHVlID0+IGlzTnVtYmVyKHZhbHVlKSB8fCBzdHJpbmdMZW5ndGhzLmhhcyh2YWx1ZSkgfHwgZnJhY3Rpb25SZWdleC50ZXN0KHZhbHVlKTtcclxuY29uc3QgaXNBcmJpdHJhcnlMZW5ndGggPSB2YWx1ZSA9PiBnZXRJc0FyYml0cmFyeVZhbHVlKHZhbHVlLCAnbGVuZ3RoJywgaXNMZW5ndGhPbmx5KTtcclxuY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiBCb29sZWFuKHZhbHVlKSAmJiAhTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpO1xyXG5jb25zdCBpc0FyYml0cmFyeU51bWJlciA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsICdudW1iZXInLCBpc051bWJlcik7XHJcbmNvbnN0IGlzSW50ZWdlciA9IHZhbHVlID0+IEJvb2xlYW4odmFsdWUpICYmIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKHZhbHVlKSk7XHJcbmNvbnN0IGlzUGVyY2VudCA9IHZhbHVlID0+IHZhbHVlLmVuZHNXaXRoKCclJykgJiYgaXNOdW1iZXIodmFsdWUuc2xpY2UoMCwgLTEpKTtcclxuY29uc3QgaXNBcmJpdHJhcnlWYWx1ZSA9IHZhbHVlID0+IGFyYml0cmFyeVZhbHVlUmVnZXgudGVzdCh2YWx1ZSk7XHJcbmNvbnN0IGlzVHNoaXJ0U2l6ZSA9IHZhbHVlID0+IHRzaGlydFVuaXRSZWdleC50ZXN0KHZhbHVlKTtcclxuY29uc3Qgc2l6ZUxhYmVscyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnbGVuZ3RoJywgJ3NpemUnLCAncGVyY2VudGFnZSddKTtcclxuY29uc3QgaXNBcmJpdHJhcnlTaXplID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgc2l6ZUxhYmVscywgaXNOZXZlcik7XHJcbmNvbnN0IGlzQXJiaXRyYXJ5UG9zaXRpb24gPSB2YWx1ZSA9PiBnZXRJc0FyYml0cmFyeVZhbHVlKHZhbHVlLCAncG9zaXRpb24nLCBpc05ldmVyKTtcclxuY29uc3QgaW1hZ2VMYWJlbHMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2ltYWdlJywgJ3VybCddKTtcclxuY29uc3QgaXNBcmJpdHJhcnlJbWFnZSA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsIGltYWdlTGFiZWxzLCBpc0ltYWdlKTtcclxuY29uc3QgaXNBcmJpdHJhcnlTaGFkb3cgPSB2YWx1ZSA9PiBnZXRJc0FyYml0cmFyeVZhbHVlKHZhbHVlLCAnJywgaXNTaGFkb3cpO1xyXG5jb25zdCBpc0FueSA9ICgpID0+IHRydWU7XHJcbmNvbnN0IGdldElzQXJiaXRyYXJ5VmFsdWUgPSAodmFsdWUsIGxhYmVsLCB0ZXN0VmFsdWUpID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhcmJpdHJhcnlWYWx1ZVJlZ2V4LmV4ZWModmFsdWUpO1xyXG4gIGlmIChyZXN1bHQpIHtcclxuICAgIGlmIChyZXN1bHRbMV0pIHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgPyByZXN1bHRbMV0gPT09IGxhYmVsIDogbGFiZWwuaGFzKHJlc3VsdFsxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVzdFZhbHVlKHJlc3VsdFsyXSk7XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZTtcclxufTtcclxuY29uc3QgaXNMZW5ndGhPbmx5ID0gdmFsdWUgPT5cclxuLy8gYGNvbG9yRnVuY3Rpb25SZWdleGAgY2hlY2sgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgY29sb3IgZnVuY3Rpb25zIGNhbiBoYXZlIHBlcmNlbnRhZ2VzIGluIHRoZW0gd2hpY2ggd2hpY2ggd291bGQgYmUgaW5jb3JyZWN0bHkgY2xhc3NpZmllZCBhcyBsZW5ndGhzLlxyXG4vLyBGb3IgZXhhbXBsZSwgYGhzbCgwIDAlIDAlKWAgd291bGQgYmUgY2xhc3NpZmllZCBhcyBhIGxlbmd0aCB3aXRob3V0IHRoaXMgY2hlY2suXHJcbi8vIEkgY291bGQgYWxzbyB1c2UgbG9va2JlaGluZCBhc3NlcnRpb24gaW4gYGxlbmd0aFVuaXRSZWdleGAgYnV0IHRoYXQgaXNuJ3Qgc3VwcG9ydGVkIHdpZGVseSBlbm91Z2guXHJcbmxlbmd0aFVuaXRSZWdleC50ZXN0KHZhbHVlKSAmJiAhY29sb3JGdW5jdGlvblJlZ2V4LnRlc3QodmFsdWUpO1xyXG5jb25zdCBpc05ldmVyID0gKCkgPT4gZmFsc2U7XHJcbmNvbnN0IGlzU2hhZG93ID0gdmFsdWUgPT4gc2hhZG93UmVnZXgudGVzdCh2YWx1ZSk7XHJcbmNvbnN0IGlzSW1hZ2UgPSB2YWx1ZSA9PiBpbWFnZVJlZ2V4LnRlc3QodmFsdWUpO1xyXG5jb25zdCB2YWxpZGF0b3JzID0gLyojX19QVVJFX18qL09iamVjdC5kZWZpbmVQcm9wZXJ0eSh7XHJcbiAgX19wcm90b19fOiBudWxsLFxyXG4gIGlzQW55LFxyXG4gIGlzQXJiaXRyYXJ5SW1hZ2UsXHJcbiAgaXNBcmJpdHJhcnlMZW5ndGgsXHJcbiAgaXNBcmJpdHJhcnlOdW1iZXIsXHJcbiAgaXNBcmJpdHJhcnlQb3NpdGlvbixcclxuICBpc0FyYml0cmFyeVNoYWRvdyxcclxuICBpc0FyYml0cmFyeVNpemUsXHJcbiAgaXNBcmJpdHJhcnlWYWx1ZSxcclxuICBpc0ludGVnZXIsXHJcbiAgaXNMZW5ndGgsXHJcbiAgaXNOdW1iZXIsXHJcbiAgaXNQZXJjZW50LFxyXG4gIGlzVHNoaXJ0U2l6ZVxyXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcclxuICB2YWx1ZTogJ01vZHVsZSdcclxufSk7XHJcbmNvbnN0IGdldERlZmF1bHRDb25maWcgPSAoKSA9PiB7XHJcbiAgY29uc3QgY29sb3JzID0gZnJvbVRoZW1lKCdjb2xvcnMnKTtcclxuICBjb25zdCBzcGFjaW5nID0gZnJvbVRoZW1lKCdzcGFjaW5nJyk7XHJcbiAgY29uc3QgYmx1ciA9IGZyb21UaGVtZSgnYmx1cicpO1xyXG4gIGNvbnN0IGJyaWdodG5lc3MgPSBmcm9tVGhlbWUoJ2JyaWdodG5lc3MnKTtcclxuICBjb25zdCBib3JkZXJDb2xvciA9IGZyb21UaGVtZSgnYm9yZGVyQ29sb3InKTtcclxuICBjb25zdCBib3JkZXJSYWRpdXMgPSBmcm9tVGhlbWUoJ2JvcmRlclJhZGl1cycpO1xyXG4gIGNvbnN0IGJvcmRlclNwYWNpbmcgPSBmcm9tVGhlbWUoJ2JvcmRlclNwYWNpbmcnKTtcclxuICBjb25zdCBib3JkZXJXaWR0aCA9IGZyb21UaGVtZSgnYm9yZGVyV2lkdGgnKTtcclxuICBjb25zdCBjb250cmFzdCA9IGZyb21UaGVtZSgnY29udHJhc3QnKTtcclxuICBjb25zdCBncmF5c2NhbGUgPSBmcm9tVGhlbWUoJ2dyYXlzY2FsZScpO1xyXG4gIGNvbnN0IGh1ZVJvdGF0ZSA9IGZyb21UaGVtZSgnaHVlUm90YXRlJyk7XHJcbiAgY29uc3QgaW52ZXJ0ID0gZnJvbVRoZW1lKCdpbnZlcnQnKTtcclxuICBjb25zdCBnYXAgPSBmcm9tVGhlbWUoJ2dhcCcpO1xyXG4gIGNvbnN0IGdyYWRpZW50Q29sb3JTdG9wcyA9IGZyb21UaGVtZSgnZ3JhZGllbnRDb2xvclN0b3BzJyk7XHJcbiAgY29uc3QgZ3JhZGllbnRDb2xvclN0b3BQb3NpdGlvbnMgPSBmcm9tVGhlbWUoJ2dyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zJyk7XHJcbiAgY29uc3QgaW5zZXQgPSBmcm9tVGhlbWUoJ2luc2V0Jyk7XHJcbiAgY29uc3QgbWFyZ2luID0gZnJvbVRoZW1lKCdtYXJnaW4nKTtcclxuICBjb25zdCBvcGFjaXR5ID0gZnJvbVRoZW1lKCdvcGFjaXR5Jyk7XHJcbiAgY29uc3QgcGFkZGluZyA9IGZyb21UaGVtZSgncGFkZGluZycpO1xyXG4gIGNvbnN0IHNhdHVyYXRlID0gZnJvbVRoZW1lKCdzYXR1cmF0ZScpO1xyXG4gIGNvbnN0IHNjYWxlID0gZnJvbVRoZW1lKCdzY2FsZScpO1xyXG4gIGNvbnN0IHNlcGlhID0gZnJvbVRoZW1lKCdzZXBpYScpO1xyXG4gIGNvbnN0IHNrZXcgPSBmcm9tVGhlbWUoJ3NrZXcnKTtcclxuICBjb25zdCBzcGFjZSA9IGZyb21UaGVtZSgnc3BhY2UnKTtcclxuICBjb25zdCB0cmFuc2xhdGUgPSBmcm9tVGhlbWUoJ3RyYW5zbGF0ZScpO1xyXG4gIGNvbnN0IGdldE92ZXJzY3JvbGwgPSAoKSA9PiBbJ2F1dG8nLCAnY29udGFpbicsICdub25lJ107XHJcbiAgY29uc3QgZ2V0T3ZlcmZsb3cgPSAoKSA9PiBbJ2F1dG8nLCAnaGlkZGVuJywgJ2NsaXAnLCAndmlzaWJsZScsICdzY3JvbGwnXTtcclxuICBjb25zdCBnZXRTcGFjaW5nV2l0aEF1dG9BbmRBcmJpdHJhcnkgPSAoKSA9PiBbJ2F1dG8nLCBpc0FyYml0cmFyeVZhbHVlLCBzcGFjaW5nXTtcclxuICBjb25zdCBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSA9ICgpID0+IFtpc0FyYml0cmFyeVZhbHVlLCBzcGFjaW5nXTtcclxuICBjb25zdCBnZXRMZW5ndGhXaXRoRW1wdHlBbmRBcmJpdHJhcnkgPSAoKSA9PiBbJycsIGlzTGVuZ3RoLCBpc0FyYml0cmFyeUxlbmd0aF07XHJcbiAgY29uc3QgZ2V0TnVtYmVyV2l0aEF1dG9BbmRBcmJpdHJhcnkgPSAoKSA9PiBbJ2F1dG8nLCBpc051bWJlciwgaXNBcmJpdHJhcnlWYWx1ZV07XHJcbiAgY29uc3QgZ2V0UG9zaXRpb25zID0gKCkgPT4gWydib3R0b20nLCAnY2VudGVyJywgJ2xlZnQnLCAnbGVmdC1ib3R0b20nLCAnbGVmdC10b3AnLCAncmlnaHQnLCAncmlnaHQtYm90dG9tJywgJ3JpZ2h0LXRvcCcsICd0b3AnXTtcclxuICBjb25zdCBnZXRMaW5lU3R5bGVzID0gKCkgPT4gWydzb2xpZCcsICdkYXNoZWQnLCAnZG90dGVkJywgJ2RvdWJsZScsICdub25lJ107XHJcbiAgY29uc3QgZ2V0QmxlbmRNb2RlcyA9ICgpID0+IFsnbm9ybWFsJywgJ211bHRpcGx5JywgJ3NjcmVlbicsICdvdmVybGF5JywgJ2RhcmtlbicsICdsaWdodGVuJywgJ2NvbG9yLWRvZGdlJywgJ2NvbG9yLWJ1cm4nLCAnaGFyZC1saWdodCcsICdzb2Z0LWxpZ2h0JywgJ2RpZmZlcmVuY2UnLCAnZXhjbHVzaW9uJywgJ2h1ZScsICdzYXR1cmF0aW9uJywgJ2NvbG9yJywgJ2x1bWlub3NpdHknXTtcclxuICBjb25zdCBnZXRBbGlnbiA9ICgpID0+IFsnc3RhcnQnLCAnZW5kJywgJ2NlbnRlcicsICdiZXR3ZWVuJywgJ2Fyb3VuZCcsICdldmVubHknLCAnc3RyZXRjaCddO1xyXG4gIGNvbnN0IGdldFplcm9BbmRFbXB0eSA9ICgpID0+IFsnJywgJzAnLCBpc0FyYml0cmFyeVZhbHVlXTtcclxuICBjb25zdCBnZXRCcmVha3MgPSAoKSA9PiBbJ2F1dG8nLCAnYXZvaWQnLCAnYWxsJywgJ2F2b2lkLXBhZ2UnLCAncGFnZScsICdsZWZ0JywgJ3JpZ2h0JywgJ2NvbHVtbiddO1xyXG4gIGNvbnN0IGdldE51bWJlckFuZEFyYml0cmFyeSA9ICgpID0+IFtpc051bWJlciwgaXNBcmJpdHJhcnlWYWx1ZV07XHJcbiAgcmV0dXJuIHtcclxuICAgIGNhY2hlU2l6ZTogNTAwLFxyXG4gICAgc2VwYXJhdG9yOiAnOicsXHJcbiAgICB0aGVtZToge1xyXG4gICAgICBjb2xvcnM6IFtpc0FueV0sXHJcbiAgICAgIHNwYWNpbmc6IFtpc0xlbmd0aCwgaXNBcmJpdHJhcnlMZW5ndGhdLFxyXG4gICAgICBibHVyOiBbJ25vbmUnLCAnJywgaXNUc2hpcnRTaXplLCBpc0FyYml0cmFyeVZhbHVlXSxcclxuICAgICAgYnJpZ2h0bmVzczogZ2V0TnVtYmVyQW5kQXJiaXRyYXJ5KCksXHJcbiAgICAgIGJvcmRlckNvbG9yOiBbY29sb3JzXSxcclxuICAgICAgYm9yZGVyUmFkaXVzOiBbJ25vbmUnLCAnJywgJ2Z1bGwnLCBpc1RzaGlydFNpemUsIGlzQXJiaXRyYXJ5VmFsdWVdLFxyXG4gICAgICBib3JkZXJTcGFjaW5nOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpLFxyXG4gICAgICBib3JkZXJXaWR0aDogZ2V0TGVuZ3RoV2l0aEVtcHR5QW5kQXJiaXRyYXJ5KCksXHJcbiAgICAgIGNvbnRyYXN0OiBnZXROdW1iZXJBbmRBcmJpdHJhcnkoKSxcclxuICAgICAgZ3JheXNjYWxlOiBnZXRaZXJvQW5kRW1wdHkoKSxcclxuICAgICAgaHVlUm90YXRlOiBnZXROdW1iZXJBbmRBcmJpdHJhcnkoKSxcclxuICAgICAgaW52ZXJ0OiBnZXRaZXJvQW5kRW1wdHkoKSxcclxuICAgICAgZ2FwOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpLFxyXG4gICAgICBncmFkaWVudENvbG9yU3RvcHM6IFtjb2xvcnNdLFxyXG4gICAgICBncmFkaWVudENvbG9yU3RvcFBvc2l0aW9uczogW2lzUGVyY2VudCwgaXNBcmJpdHJhcnlMZW5ndGhdLFxyXG4gICAgICBpbnNldDogZ2V0U3BhY2luZ1dpdGhBdXRvQW5kQXJiaXRyYXJ5KCksXHJcbiAgICAgIG1hcmdpbjogZ2V0U3BhY2luZ1dpdGhBdXRvQW5kQXJiaXRyYXJ5KCksXHJcbiAgICAgIG9wYWNpdHk6IGdldE51bWJlckFuZEFyYml0cmFyeSgpLFxyXG4gICAgICBwYWRkaW5nOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpLFxyXG4gICAgICBzYXR1cmF0ZTogZ2V0TnVtYmVyQW5kQXJiaXRyYXJ5KCksXHJcbiAgICAgIHNjYWxlOiBnZXROdW1iZXJBbmRBcmJpdHJhcnkoKSxcclxuICAgICAgc2VwaWE6IGdldFplcm9BbmRFbXB0eSgpLFxyXG4gICAgICBza2V3OiBnZXROdW1iZXJBbmRBcmJpdHJhcnkoKSxcclxuICAgICAgc3BhY2U6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KCksXHJcbiAgICAgIHRyYW5zbGF0ZTogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgfSxcclxuICAgIGNsYXNzR3JvdXBzOiB7XHJcbiAgICAgIC8vIExheW91dFxyXG4gICAgICAvKipcclxuICAgICAgICogQXNwZWN0IFJhdGlvXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hc3BlY3QtcmF0aW9cclxuICAgICAgICovXHJcbiAgICAgIGFzcGVjdDogW3tcclxuICAgICAgICBhc3BlY3Q6IFsnYXV0bycsICdzcXVhcmUnLCAndmlkZW8nLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIENvbnRhaW5lclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY29udGFpbmVyXHJcbiAgICAgICAqL1xyXG4gICAgICBjb250YWluZXI6IFsnY29udGFpbmVyJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDb2x1bW5zXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb2x1bW5zXHJcbiAgICAgICAqL1xyXG4gICAgICBjb2x1bW5zOiBbe1xyXG4gICAgICAgIGNvbHVtbnM6IFtpc1RzaGlydFNpemVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQnJlYWsgQWZ0ZXJcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JyZWFrLWFmdGVyXHJcbiAgICAgICAqL1xyXG4gICAgICAnYnJlYWstYWZ0ZXInOiBbe1xyXG4gICAgICAgICdicmVhay1hZnRlcic6IGdldEJyZWFrcygpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQnJlYWsgQmVmb3JlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9icmVhay1iZWZvcmVcclxuICAgICAgICovXHJcbiAgICAgICdicmVhay1iZWZvcmUnOiBbe1xyXG4gICAgICAgICdicmVhay1iZWZvcmUnOiBnZXRCcmVha3MoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJyZWFrIEluc2lkZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJlYWstaW5zaWRlXHJcbiAgICAgICAqL1xyXG4gICAgICAnYnJlYWstaW5zaWRlJzogW3tcclxuICAgICAgICAnYnJlYWstaW5zaWRlJzogWydhdXRvJywgJ2F2b2lkJywgJ2F2b2lkLXBhZ2UnLCAnYXZvaWQtY29sdW1uJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3ggRGVjb3JhdGlvbiBCcmVha1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm94LWRlY29yYXRpb24tYnJlYWtcclxuICAgICAgICovXHJcbiAgICAgICdib3gtZGVjb3JhdGlvbic6IFt7XHJcbiAgICAgICAgJ2JveC1kZWNvcmF0aW9uJzogWydzbGljZScsICdjbG9uZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm94IFNpemluZ1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm94LXNpemluZ1xyXG4gICAgICAgKi9cclxuICAgICAgYm94OiBbe1xyXG4gICAgICAgIGJveDogWydib3JkZXInLCAnY29udGVudCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGlzcGxheVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGlzcGxheVxyXG4gICAgICAgKi9cclxuICAgICAgZGlzcGxheTogWydibG9jaycsICdpbmxpbmUtYmxvY2snLCAnaW5saW5lJywgJ2ZsZXgnLCAnaW5saW5lLWZsZXgnLCAndGFibGUnLCAnaW5saW5lLXRhYmxlJywgJ3RhYmxlLWNhcHRpb24nLCAndGFibGUtY2VsbCcsICd0YWJsZS1jb2x1bW4nLCAndGFibGUtY29sdW1uLWdyb3VwJywgJ3RhYmxlLWZvb3Rlci1ncm91cCcsICd0YWJsZS1oZWFkZXItZ3JvdXAnLCAndGFibGUtcm93LWdyb3VwJywgJ3RhYmxlLXJvdycsICdmbG93LXJvb3QnLCAnZ3JpZCcsICdpbmxpbmUtZ3JpZCcsICdjb250ZW50cycsICdsaXN0LWl0ZW0nLCAnaGlkZGVuJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGbG9hdHNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2Zsb2F0XHJcbiAgICAgICAqL1xyXG4gICAgICBmbG9hdDogW3tcclxuICAgICAgICBmbG9hdDogWydyaWdodCcsICdsZWZ0JywgJ25vbmUnLCAnc3RhcnQnLCAnZW5kJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDbGVhclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY2xlYXJcclxuICAgICAgICovXHJcbiAgICAgIGNsZWFyOiBbe1xyXG4gICAgICAgIGNsZWFyOiBbJ2xlZnQnLCAncmlnaHQnLCAnYm90aCcsICdub25lJywgJ3N0YXJ0JywgJ2VuZCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogSXNvbGF0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9pc29sYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGlzb2xhdGlvbjogWydpc29sYXRlJywgJ2lzb2xhdGlvbi1hdXRvJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPYmplY3QgRml0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vYmplY3QtZml0XHJcbiAgICAgICAqL1xyXG4gICAgICAnb2JqZWN0LWZpdCc6IFt7XHJcbiAgICAgICAgb2JqZWN0OiBbJ2NvbnRhaW4nLCAnY292ZXInLCAnZmlsbCcsICdub25lJywgJ3NjYWxlLWRvd24nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE9iamVjdCBQb3NpdGlvblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb2JqZWN0LXBvc2l0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICAnb2JqZWN0LXBvc2l0aW9uJzogW3tcclxuICAgICAgICBvYmplY3Q6IFsuLi5nZXRQb3NpdGlvbnMoKSwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdmVyZmxvd1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3ZlcmZsb3dcclxuICAgICAgICovXHJcbiAgICAgIG92ZXJmbG93OiBbe1xyXG4gICAgICAgIG92ZXJmbG93OiBnZXRPdmVyZmxvdygpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT3ZlcmZsb3cgWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3ZlcmZsb3dcclxuICAgICAgICovXHJcbiAgICAgICdvdmVyZmxvdy14JzogW3tcclxuICAgICAgICAnb3ZlcmZsb3cteCc6IGdldE92ZXJmbG93KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdmVyZmxvdyBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdmVyZmxvd1xyXG4gICAgICAgKi9cclxuICAgICAgJ292ZXJmbG93LXknOiBbe1xyXG4gICAgICAgICdvdmVyZmxvdy15JzogZ2V0T3ZlcmZsb3coKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE92ZXJzY3JvbGwgQmVoYXZpb3JcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL292ZXJzY3JvbGwtYmVoYXZpb3JcclxuICAgICAgICovXHJcbiAgICAgIG92ZXJzY3JvbGw6IFt7XHJcbiAgICAgICAgb3ZlcnNjcm9sbDogZ2V0T3ZlcnNjcm9sbCgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT3ZlcnNjcm9sbCBCZWhhdmlvciBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdmVyc2Nyb2xsLWJlaGF2aW9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnb3ZlcnNjcm9sbC14JzogW3tcclxuICAgICAgICAnb3ZlcnNjcm9sbC14JzogZ2V0T3ZlcnNjcm9sbCgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT3ZlcnNjcm9sbCBCZWhhdmlvciBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdmVyc2Nyb2xsLWJlaGF2aW9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnb3ZlcnNjcm9sbC15JzogW3tcclxuICAgICAgICAnb3ZlcnNjcm9sbC15JzogZ2V0T3ZlcnNjcm9sbCgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUG9zaXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Bvc2l0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBwb3NpdGlvbjogWydzdGF0aWMnLCAnZml4ZWQnLCAnYWJzb2x1dGUnLCAncmVsYXRpdmUnLCAnc3RpY2t5J10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUb3AgLyBSaWdodCAvIEJvdHRvbSAvIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxyXG4gICAgICAgKi9cclxuICAgICAgaW5zZXQ6IFt7XHJcbiAgICAgICAgaW5zZXQ6IFtpbnNldF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSaWdodCAvIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxyXG4gICAgICAgKi9cclxuICAgICAgJ2luc2V0LXgnOiBbe1xyXG4gICAgICAgICdpbnNldC14JzogW2luc2V0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRvcCAvIEJvdHRvbVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICAnaW5zZXQteSc6IFt7XHJcbiAgICAgICAgJ2luc2V0LXknOiBbaW5zZXRdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxyXG4gICAgICAgKi9cclxuICAgICAgc3RhcnQ6IFt7XHJcbiAgICAgICAgc3RhcnQ6IFtpbnNldF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxyXG4gICAgICAgKi9cclxuICAgICAgZW5kOiBbe1xyXG4gICAgICAgIGVuZDogW2luc2V0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICB0b3A6IFt7XHJcbiAgICAgICAgdG9wOiBbaW5zZXRdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxyXG4gICAgICAgKi9cclxuICAgICAgcmlnaHQ6IFt7XHJcbiAgICAgICAgcmlnaHQ6IFtpbnNldF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3R0b21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxyXG4gICAgICAgKi9cclxuICAgICAgYm90dG9tOiBbe1xyXG4gICAgICAgIGJvdHRvbTogW2luc2V0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxyXG4gICAgICAgKi9cclxuICAgICAgbGVmdDogW3tcclxuICAgICAgICBsZWZ0OiBbaW5zZXRdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVmlzaWJpbGl0eVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdmlzaWJpbGl0eVxyXG4gICAgICAgKi9cclxuICAgICAgdmlzaWJpbGl0eTogWyd2aXNpYmxlJywgJ2ludmlzaWJsZScsICdjb2xsYXBzZSddLFxyXG4gICAgICAvKipcclxuICAgICAgICogWi1JbmRleFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvei1pbmRleFxyXG4gICAgICAgKi9cclxuICAgICAgejogW3tcclxuICAgICAgICB6OiBbJ2F1dG8nLCBpc0ludGVnZXIsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvLyBGbGV4Ym94IGFuZCBHcmlkXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGbGV4IEJhc2lzXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mbGV4LWJhc2lzXHJcbiAgICAgICAqL1xyXG4gICAgICBiYXNpczogW3tcclxuICAgICAgICBiYXNpczogZ2V0U3BhY2luZ1dpdGhBdXRvQW5kQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGbGV4IERpcmVjdGlvblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmxleC1kaXJlY3Rpb25cclxuICAgICAgICovXHJcbiAgICAgICdmbGV4LWRpcmVjdGlvbic6IFt7XHJcbiAgICAgICAgZmxleDogWydyb3cnLCAncm93LXJldmVyc2UnLCAnY29sJywgJ2NvbC1yZXZlcnNlJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGbGV4IFdyYXBcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXgtd3JhcFxyXG4gICAgICAgKi9cclxuICAgICAgJ2ZsZXgtd3JhcCc6IFt7XHJcbiAgICAgICAgZmxleDogWyd3cmFwJywgJ3dyYXAtcmV2ZXJzZScsICdub3dyYXAnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZsZXhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXhcclxuICAgICAgICovXHJcbiAgICAgIGZsZXg6IFt7XHJcbiAgICAgICAgZmxleDogWycxJywgJ2F1dG8nLCAnaW5pdGlhbCcsICdub25lJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGbGV4IEdyb3dcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXgtZ3Jvd1xyXG4gICAgICAgKi9cclxuICAgICAgZ3JvdzogW3tcclxuICAgICAgICBncm93OiBnZXRaZXJvQW5kRW1wdHkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZsZXggU2hyaW5rXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mbGV4LXNocmlua1xyXG4gICAgICAgKi9cclxuICAgICAgc2hyaW5rOiBbe1xyXG4gICAgICAgIHNocmluazogZ2V0WmVyb0FuZEVtcHR5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPcmRlclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3JkZXJcclxuICAgICAgICovXHJcbiAgICAgIG9yZGVyOiBbe1xyXG4gICAgICAgIG9yZGVyOiBbJ2ZpcnN0JywgJ2xhc3QnLCAnbm9uZScsIGlzSW50ZWdlciwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIFRlbXBsYXRlIENvbHVtbnNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtdGVtcGxhdGUtY29sdW1uc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyaWQtY29scyc6IFt7XHJcbiAgICAgICAgJ2dyaWQtY29scyc6IFtpc0FueV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIENvbHVtbiBTdGFydCAvIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1jb2x1bW5cclxuICAgICAgICovXHJcbiAgICAgICdjb2wtc3RhcnQtZW5kJzogW3tcclxuICAgICAgICBjb2w6IFsnYXV0bycsIHtcclxuICAgICAgICAgIHNwYW46IFsnZnVsbCcsIGlzSW50ZWdlciwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgICB9LCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyaWQgQ29sdW1uIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLWNvbHVtblxyXG4gICAgICAgKi9cclxuICAgICAgJ2NvbC1zdGFydCc6IFt7XHJcbiAgICAgICAgJ2NvbC1zdGFydCc6IGdldE51bWJlcldpdGhBdXRvQW5kQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIENvbHVtbiBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtY29sdW1uXHJcbiAgICAgICAqL1xyXG4gICAgICAnY29sLWVuZCc6IFt7XHJcbiAgICAgICAgJ2NvbC1lbmQnOiBnZXROdW1iZXJXaXRoQXV0b0FuZEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JpZCBUZW1wbGF0ZSBSb3dzXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLXRlbXBsYXRlLXJvd3NcclxuICAgICAgICovXHJcbiAgICAgICdncmlkLXJvd3MnOiBbe1xyXG4gICAgICAgICdncmlkLXJvd3MnOiBbaXNBbnldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JpZCBSb3cgU3RhcnQgLyBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtcm93XHJcbiAgICAgICAqL1xyXG4gICAgICAncm93LXN0YXJ0LWVuZCc6IFt7XHJcbiAgICAgICAgcm93OiBbJ2F1dG8nLCB7XHJcbiAgICAgICAgICBzcGFuOiBbaXNJbnRlZ2VyLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICAgIH0sIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JpZCBSb3cgU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtcm93XHJcbiAgICAgICAqL1xyXG4gICAgICAncm93LXN0YXJ0JzogW3tcclxuICAgICAgICAncm93LXN0YXJ0JzogZ2V0TnVtYmVyV2l0aEF1dG9BbmRBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyaWQgUm93IEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1yb3dcclxuICAgICAgICovXHJcbiAgICAgICdyb3ctZW5kJzogW3tcclxuICAgICAgICAncm93LWVuZCc6IGdldE51bWJlcldpdGhBdXRvQW5kQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIEF1dG8gRmxvd1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1hdXRvLWZsb3dcclxuICAgICAgICovXHJcbiAgICAgICdncmlkLWZsb3cnOiBbe1xyXG4gICAgICAgICdncmlkLWZsb3cnOiBbJ3JvdycsICdjb2wnLCAnZGVuc2UnLCAncm93LWRlbnNlJywgJ2NvbC1kZW5zZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JpZCBBdXRvIENvbHVtbnNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtYXV0by1jb2x1bW5zXHJcbiAgICAgICAqL1xyXG4gICAgICAnYXV0by1jb2xzJzogW3tcclxuICAgICAgICAnYXV0by1jb2xzJzogWydhdXRvJywgJ21pbicsICdtYXgnLCAnZnInLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyaWQgQXV0byBSb3dzXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLWF1dG8tcm93c1xyXG4gICAgICAgKi9cclxuICAgICAgJ2F1dG8tcm93cyc6IFt7XHJcbiAgICAgICAgJ2F1dG8tcm93cyc6IFsnYXV0bycsICdtaW4nLCAnbWF4JywgJ2ZyJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHYXBcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dhcFxyXG4gICAgICAgKi9cclxuICAgICAgZ2FwOiBbe1xyXG4gICAgICAgIGdhcDogW2dhcF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHYXAgWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ2FwXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ2FwLXgnOiBbe1xyXG4gICAgICAgICdnYXAteCc6IFtnYXBdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR2FwIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dhcFxyXG4gICAgICAgKi9cclxuICAgICAgJ2dhcC15JzogW3tcclxuICAgICAgICAnZ2FwLXknOiBbZ2FwXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEp1c3RpZnkgQ29udGVudFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvanVzdGlmeS1jb250ZW50XHJcbiAgICAgICAqL1xyXG4gICAgICAnanVzdGlmeS1jb250ZW50JzogW3tcclxuICAgICAgICBqdXN0aWZ5OiBbJ25vcm1hbCcsIC4uLmdldEFsaWduKCldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogSnVzdGlmeSBJdGVtc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvanVzdGlmeS1pdGVtc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2p1c3RpZnktaXRlbXMnOiBbe1xyXG4gICAgICAgICdqdXN0aWZ5LWl0ZW1zJzogWydzdGFydCcsICdlbmQnLCAnY2VudGVyJywgJ3N0cmV0Y2gnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEp1c3RpZnkgU2VsZlxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvanVzdGlmeS1zZWxmXHJcbiAgICAgICAqL1xyXG4gICAgICAnanVzdGlmeS1zZWxmJzogW3tcclxuICAgICAgICAnanVzdGlmeS1zZWxmJzogWydhdXRvJywgJ3N0YXJ0JywgJ2VuZCcsICdjZW50ZXInLCAnc3RyZXRjaCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQWxpZ24gQ29udGVudFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYWxpZ24tY29udGVudFxyXG4gICAgICAgKi9cclxuICAgICAgJ2FsaWduLWNvbnRlbnQnOiBbe1xyXG4gICAgICAgIGNvbnRlbnQ6IFsnbm9ybWFsJywgLi4uZ2V0QWxpZ24oKSwgJ2Jhc2VsaW5lJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBbGlnbiBJdGVtc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYWxpZ24taXRlbXNcclxuICAgICAgICovXHJcbiAgICAgICdhbGlnbi1pdGVtcyc6IFt7XHJcbiAgICAgICAgaXRlbXM6IFsnc3RhcnQnLCAnZW5kJywgJ2NlbnRlcicsICdiYXNlbGluZScsICdzdHJldGNoJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBbGlnbiBTZWxmXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hbGlnbi1zZWxmXHJcbiAgICAgICAqL1xyXG4gICAgICAnYWxpZ24tc2VsZic6IFt7XHJcbiAgICAgICAgc2VsZjogWydhdXRvJywgJ3N0YXJ0JywgJ2VuZCcsICdjZW50ZXInLCAnc3RyZXRjaCcsICdiYXNlbGluZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGxhY2UgQ29udGVudFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGxhY2UtY29udGVudFxyXG4gICAgICAgKi9cclxuICAgICAgJ3BsYWNlLWNvbnRlbnQnOiBbe1xyXG4gICAgICAgICdwbGFjZS1jb250ZW50JzogWy4uLmdldEFsaWduKCksICdiYXNlbGluZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGxhY2UgSXRlbXNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BsYWNlLWl0ZW1zXHJcbiAgICAgICAqL1xyXG4gICAgICAncGxhY2UtaXRlbXMnOiBbe1xyXG4gICAgICAgICdwbGFjZS1pdGVtcyc6IFsnc3RhcnQnLCAnZW5kJywgJ2NlbnRlcicsICdiYXNlbGluZScsICdzdHJldGNoJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQbGFjZSBTZWxmXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wbGFjZS1zZWxmXHJcbiAgICAgICAqL1xyXG4gICAgICAncGxhY2Utc2VsZic6IFt7XHJcbiAgICAgICAgJ3BsYWNlLXNlbGYnOiBbJ2F1dG8nLCAnc3RhcnQnLCAnZW5kJywgJ2NlbnRlcicsICdzdHJldGNoJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIFNwYWNpbmdcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFBhZGRpbmdcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHA6IFt7XHJcbiAgICAgICAgcDogW3BhZGRpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGFkZGluZyBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICBweDogW3tcclxuICAgICAgICBweDogW3BhZGRpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGFkZGluZyBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICBweTogW3tcclxuICAgICAgICBweTogW3BhZGRpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGFkZGluZyBTdGFydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgcHM6IFt7XHJcbiAgICAgICAgcHM6IFtwYWRkaW5nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFBhZGRpbmcgRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICBwZTogW3tcclxuICAgICAgICBwZTogW3BhZGRpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGFkZGluZyBUb3BcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHB0OiBbe1xyXG4gICAgICAgIHB0OiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQYWRkaW5nIFJpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICBwcjogW3tcclxuICAgICAgICBwcjogW3BhZGRpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGFkZGluZyBCb3R0b21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHBiOiBbe1xyXG4gICAgICAgIHBiOiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQYWRkaW5nIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHBsOiBbe1xyXG4gICAgICAgIHBsOiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNYXJnaW5cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbTogW3tcclxuICAgICAgICBtOiBbbWFyZ2luXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1hcmdpbiBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgIG14OiBbe1xyXG4gICAgICAgIG14OiBbbWFyZ2luXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1hcmdpbiBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgIG15OiBbe1xyXG4gICAgICAgIG15OiBbbWFyZ2luXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1hcmdpbiBTdGFydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICBtczogW3tcclxuICAgICAgICBtczogW21hcmdpbl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNYXJnaW4gRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgIG1lOiBbe1xyXG4gICAgICAgIG1lOiBbbWFyZ2luXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1hcmdpbiBUb3BcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbXQ6IFt7XHJcbiAgICAgICAgbXQ6IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWFyZ2luIFJpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgIG1yOiBbe1xyXG4gICAgICAgIG1yOiBbbWFyZ2luXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1hcmdpbiBCb3R0b21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbWI6IFt7XHJcbiAgICAgICAgbWI6IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWFyZ2luIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbWw6IFt7XHJcbiAgICAgICAgbWw6IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU3BhY2UgQmV0d2VlbiBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zcGFjZVxyXG4gICAgICAgKi9cclxuICAgICAgJ3NwYWNlLXgnOiBbe1xyXG4gICAgICAgICdzcGFjZS14JzogW3NwYWNlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNwYWNlIEJldHdlZW4gWCBSZXZlcnNlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zcGFjZVxyXG4gICAgICAgKi9cclxuICAgICAgJ3NwYWNlLXgtcmV2ZXJzZSc6IFsnc3BhY2UteC1yZXZlcnNlJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTcGFjZSBCZXR3ZWVuIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NwYWNlXHJcbiAgICAgICAqL1xyXG4gICAgICAnc3BhY2UteSc6IFt7XHJcbiAgICAgICAgJ3NwYWNlLXknOiBbc3BhY2VdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU3BhY2UgQmV0d2VlbiBZIFJldmVyc2VcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NwYWNlXHJcbiAgICAgICAqL1xyXG4gICAgICAnc3BhY2UteS1yZXZlcnNlJzogWydzcGFjZS15LXJldmVyc2UnXSxcclxuICAgICAgLy8gU2l6aW5nXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBXaWR0aFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgIHc6IFt7XHJcbiAgICAgICAgdzogWydhdXRvJywgJ21pbicsICdtYXgnLCAnZml0JywgJ3N2dycsICdsdncnLCAnZHZ3JywgaXNBcmJpdHJhcnlWYWx1ZSwgc3BhY2luZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNaW4tV2lkdGhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21pbi13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ21pbi13JzogW3tcclxuICAgICAgICAnbWluLXcnOiBbaXNBcmJpdHJhcnlWYWx1ZSwgc3BhY2luZywgJ21pbicsICdtYXgnLCAnZml0J11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNYXgtV2lkdGhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21heC13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ21heC13JzogW3tcclxuICAgICAgICAnbWF4LXcnOiBbaXNBcmJpdHJhcnlWYWx1ZSwgc3BhY2luZywgJ25vbmUnLCAnZnVsbCcsICdtaW4nLCAnbWF4JywgJ2ZpdCcsICdwcm9zZScsIHtcclxuICAgICAgICAgIHNjcmVlbjogW2lzVHNoaXJ0U2l6ZV1cclxuICAgICAgICB9LCBpc1RzaGlydFNpemVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogSGVpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9oZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIGg6IFt7XHJcbiAgICAgICAgaDogW2lzQXJiaXRyYXJ5VmFsdWUsIHNwYWNpbmcsICdhdXRvJywgJ21pbicsICdtYXgnLCAnZml0JywgJ3N2aCcsICdsdmgnLCAnZHZoJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNaW4tSGVpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9taW4taGVpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICAnbWluLWgnOiBbe1xyXG4gICAgICAgICdtaW4taCc6IFtpc0FyYml0cmFyeVZhbHVlLCBzcGFjaW5nLCAnbWluJywgJ21heCcsICdmaXQnLCAnc3ZoJywgJ2x2aCcsICdkdmgnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1heC1IZWlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21heC1oZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgICdtYXgtaCc6IFt7XHJcbiAgICAgICAgJ21heC1oJzogW2lzQXJiaXRyYXJ5VmFsdWUsIHNwYWNpbmcsICdtaW4nLCAnbWF4JywgJ2ZpdCcsICdzdmgnLCAnbHZoJywgJ2R2aCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2l6ZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2l6ZVxyXG4gICAgICAgKi9cclxuICAgICAgc2l6ZTogW3tcclxuICAgICAgICBzaXplOiBbaXNBcmJpdHJhcnlWYWx1ZSwgc3BhY2luZywgJ2F1dG8nLCAnbWluJywgJ21heCcsICdmaXQnXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gVHlwb2dyYXBoeVxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBTaXplXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXNpemVcclxuICAgICAgICovXHJcbiAgICAgICdmb250LXNpemUnOiBbe1xyXG4gICAgICAgIHRleHQ6IFsnYmFzZScsIGlzVHNoaXJ0U2l6ZSwgaXNBcmJpdHJhcnlMZW5ndGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBTbW9vdGhpbmdcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtc21vb3RoaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnZm9udC1zbW9vdGhpbmcnOiBbJ2FudGlhbGlhc2VkJywgJ3N1YnBpeGVsLWFudGlhbGlhc2VkJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFN0eWxlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXN0eWxlXHJcbiAgICAgICAqL1xyXG4gICAgICAnZm9udC1zdHlsZSc6IFsnaXRhbGljJywgJ25vdC1pdGFsaWMnXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZvbnQgV2VpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXdlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgJ2ZvbnQtd2VpZ2h0JzogW3tcclxuICAgICAgICBmb250OiBbJ3RoaW4nLCAnZXh0cmFsaWdodCcsICdsaWdodCcsICdub3JtYWwnLCAnbWVkaXVtJywgJ3NlbWlib2xkJywgJ2JvbGQnLCAnZXh0cmFib2xkJywgJ2JsYWNrJywgaXNBcmJpdHJhcnlOdW1iZXJdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBGYW1pbHlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtZmFtaWx5XHJcbiAgICAgICAqL1xyXG4gICAgICAnZm9udC1mYW1pbHknOiBbe1xyXG4gICAgICAgIGZvbnQ6IFtpc0FueV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFZhcmlhbnQgTnVtZXJpY1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcclxuICAgICAgICovXHJcbiAgICAgICdmdm4tbm9ybWFsJzogWydub3JtYWwtbnVtcyddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBWYXJpYW50IE51bWVyaWNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtdmFyaWFudC1udW1lcmljXHJcbiAgICAgICAqL1xyXG4gICAgICAnZnZuLW9yZGluYWwnOiBbJ29yZGluYWwnXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZvbnQgVmFyaWFudCBOdW1lcmljXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXZhcmlhbnQtbnVtZXJpY1xyXG4gICAgICAgKi9cclxuICAgICAgJ2Z2bi1zbGFzaGVkLXplcm8nOiBbJ3NsYXNoZWQtemVybyddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBWYXJpYW50IE51bWVyaWNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtdmFyaWFudC1udW1lcmljXHJcbiAgICAgICAqL1xyXG4gICAgICAnZnZuLWZpZ3VyZSc6IFsnbGluaW5nLW51bXMnLCAnb2xkc3R5bGUtbnVtcyddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBWYXJpYW50IE51bWVyaWNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtdmFyaWFudC1udW1lcmljXHJcbiAgICAgICAqL1xyXG4gICAgICAnZnZuLXNwYWNpbmcnOiBbJ3Byb3BvcnRpb25hbC1udW1zJywgJ3RhYnVsYXItbnVtcyddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBWYXJpYW50IE51bWVyaWNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtdmFyaWFudC1udW1lcmljXHJcbiAgICAgICAqL1xyXG4gICAgICAnZnZuLWZyYWN0aW9uJzogWydkaWFnb25hbC1mcmFjdGlvbnMnLCAnc3RhY2tlZC1mcmFjdGlvbnMnXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIExldHRlciBTcGFjaW5nXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9sZXR0ZXItc3BhY2luZ1xyXG4gICAgICAgKi9cclxuICAgICAgdHJhY2tpbmc6IFt7XHJcbiAgICAgICAgdHJhY2tpbmc6IFsndGlnaHRlcicsICd0aWdodCcsICdub3JtYWwnLCAnd2lkZScsICd3aWRlcicsICd3aWRlc3QnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIExpbmUgQ2xhbXBcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2xpbmUtY2xhbXBcclxuICAgICAgICovXHJcbiAgICAgICdsaW5lLWNsYW1wJzogW3tcclxuICAgICAgICAnbGluZS1jbGFtcCc6IFsnbm9uZScsIGlzTnVtYmVyLCBpc0FyYml0cmFyeU51bWJlcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBMaW5lIEhlaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbGluZS1oZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIGxlYWRpbmc6IFt7XHJcbiAgICAgICAgbGVhZGluZzogWydub25lJywgJ3RpZ2h0JywgJ3NudWcnLCAnbm9ybWFsJywgJ3JlbGF4ZWQnLCAnbG9vc2UnLCBpc0xlbmd0aCwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBMaXN0IFN0eWxlIEltYWdlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9saXN0LXN0eWxlLWltYWdlXHJcbiAgICAgICAqL1xyXG4gICAgICAnbGlzdC1pbWFnZSc6IFt7XHJcbiAgICAgICAgJ2xpc3QtaW1hZ2UnOiBbJ25vbmUnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIExpc3QgU3R5bGUgVHlwZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbGlzdC1zdHlsZS10eXBlXHJcbiAgICAgICAqL1xyXG4gICAgICAnbGlzdC1zdHlsZS10eXBlJzogW3tcclxuICAgICAgICBsaXN0OiBbJ25vbmUnLCAnZGlzYycsICdkZWNpbWFsJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBMaXN0IFN0eWxlIFBvc2l0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9saXN0LXN0eWxlLXBvc2l0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICAnbGlzdC1zdHlsZS1wb3NpdGlvbic6IFt7XHJcbiAgICAgICAgbGlzdDogWydpbnNpZGUnLCAnb3V0c2lkZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGxhY2Vob2xkZXIgQ29sb3JcclxuICAgICAgICogQGRlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHYzLjAuMFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGxhY2Vob2xkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdwbGFjZWhvbGRlci1jb2xvcic6IFt7XHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFtjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGxhY2Vob2xkZXIgT3BhY2l0eVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGxhY2Vob2xkZXItb3BhY2l0eVxyXG4gICAgICAgKi9cclxuICAgICAgJ3BsYWNlaG9sZGVyLW9wYWNpdHknOiBbe1xyXG4gICAgICAgICdwbGFjZWhvbGRlci1vcGFjaXR5JzogW29wYWNpdHldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBBbGlnbm1lbnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtYWxpZ25cclxuICAgICAgICovXHJcbiAgICAgICd0ZXh0LWFsaWdubWVudCc6IFt7XHJcbiAgICAgICAgdGV4dDogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCcsICdqdXN0aWZ5JywgJ3N0YXJ0JywgJ2VuZCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtY29sb3InOiBbe1xyXG4gICAgICAgIHRleHQ6IFtjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBPcGFjaXR5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LW9wYWNpdHlcclxuICAgICAgICovXHJcbiAgICAgICd0ZXh0LW9wYWNpdHknOiBbe1xyXG4gICAgICAgICd0ZXh0LW9wYWNpdHknOiBbb3BhY2l0eV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUZXh0IERlY29yYXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtZGVjb3JhdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtZGVjb3JhdGlvbic6IFsndW5kZXJsaW5lJywgJ292ZXJsaW5lJywgJ2xpbmUtdGhyb3VnaCcsICduby11bmRlcmxpbmUnXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRleHQgRGVjb3JhdGlvbiBTdHlsZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1kZWNvcmF0aW9uLXN0eWxlXHJcbiAgICAgICAqL1xyXG4gICAgICAndGV4dC1kZWNvcmF0aW9uLXN0eWxlJzogW3tcclxuICAgICAgICBkZWNvcmF0aW9uOiBbLi4uZ2V0TGluZVN0eWxlcygpLCAnd2F2eSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBEZWNvcmF0aW9uIFRoaWNrbmVzc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzc1xyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtZGVjb3JhdGlvbi10aGlja25lc3MnOiBbe1xyXG4gICAgICAgIGRlY29yYXRpb246IFsnYXV0bycsICdmcm9tLWZvbnQnLCBpc0xlbmd0aCwgaXNBcmJpdHJhcnlMZW5ndGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBVbmRlcmxpbmUgT2Zmc2V0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LXVuZGVybGluZS1vZmZzZXRcclxuICAgICAgICovXHJcbiAgICAgICd1bmRlcmxpbmUtb2Zmc2V0JzogW3tcclxuICAgICAgICAndW5kZXJsaW5lLW9mZnNldCc6IFsnYXV0bycsIGlzTGVuZ3RoLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRleHQgRGVjb3JhdGlvbiBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1kZWNvcmF0aW9uLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAndGV4dC1kZWNvcmF0aW9uLWNvbG9yJzogW3tcclxuICAgICAgICBkZWNvcmF0aW9uOiBbY29sb3JzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRleHQgVHJhbnNmb3JtXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LXRyYW5zZm9ybVxyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtdHJhbnNmb3JtJzogWyd1cHBlcmNhc2UnLCAnbG93ZXJjYXNlJywgJ2NhcGl0YWxpemUnLCAnbm9ybWFsLWNhc2UnXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRleHQgT3ZlcmZsb3dcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtb3ZlcmZsb3dcclxuICAgICAgICovXHJcbiAgICAgICd0ZXh0LW92ZXJmbG93JzogWyd0cnVuY2F0ZScsICd0ZXh0LWVsbGlwc2lzJywgJ3RleHQtY2xpcCddLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBXcmFwXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LXdyYXBcclxuICAgICAgICovXHJcbiAgICAgICd0ZXh0LXdyYXAnOiBbe1xyXG4gICAgICAgIHRleHQ6IFsnd3JhcCcsICdub3dyYXAnLCAnYmFsYW5jZScsICdwcmV0dHknXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRleHQgSW5kZW50XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LWluZGVudFxyXG4gICAgICAgKi9cclxuICAgICAgaW5kZW50OiBbe1xyXG4gICAgICAgIGluZGVudDogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFZlcnRpY2FsIEFsaWdubWVudFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdmVydGljYWwtYWxpZ25cclxuICAgICAgICovXHJcbiAgICAgICd2ZXJ0aWNhbC1hbGlnbic6IFt7XHJcbiAgICAgICAgYWxpZ246IFsnYmFzZWxpbmUnLCAndG9wJywgJ21pZGRsZScsICdib3R0b20nLCAndGV4dC10b3AnLCAndGV4dC1ib3R0b20nLCAnc3ViJywgJ3N1cGVyJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBXaGl0ZXNwYWNlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy93aGl0ZXNwYWNlXHJcbiAgICAgICAqL1xyXG4gICAgICB3aGl0ZXNwYWNlOiBbe1xyXG4gICAgICAgIHdoaXRlc3BhY2U6IFsnbm9ybWFsJywgJ25vd3JhcCcsICdwcmUnLCAncHJlLWxpbmUnLCAncHJlLXdyYXAnLCAnYnJlYWstc3BhY2VzJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBXb3JkIEJyZWFrXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy93b3JkLWJyZWFrXHJcbiAgICAgICAqL1xyXG4gICAgICBicmVhazogW3tcclxuICAgICAgICBicmVhazogWydub3JtYWwnLCAnd29yZHMnLCAnYWxsJywgJ2tlZXAnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEh5cGhlbnNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2h5cGhlbnNcclxuICAgICAgICovXHJcbiAgICAgIGh5cGhlbnM6IFt7XHJcbiAgICAgICAgaHlwaGVuczogWydub25lJywgJ21hbnVhbCcsICdhdXRvJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDb250ZW50XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250ZW50XHJcbiAgICAgICAqL1xyXG4gICAgICBjb250ZW50OiBbe1xyXG4gICAgICAgIGNvbnRlbnQ6IFsnbm9uZScsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvLyBCYWNrZ3JvdW5kc1xyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2dyb3VuZCBBdHRhY2htZW50XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZ3JvdW5kLWF0dGFjaG1lbnRcclxuICAgICAgICovXHJcbiAgICAgICdiZy1hdHRhY2htZW50JzogW3tcclxuICAgICAgICBiZzogWydmaXhlZCcsICdsb2NhbCcsICdzY3JvbGwnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tncm91bmQgQ2xpcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1jbGlwXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctY2xpcCc6IFt7XHJcbiAgICAgICAgJ2JnLWNsaXAnOiBbJ2JvcmRlcicsICdwYWRkaW5nJywgJ2NvbnRlbnQnLCAndGV4dCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2dyb3VuZCBPcGFjaXR5XHJcbiAgICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2My4wLjBcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtb3BhY2l0eVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JnLW9wYWNpdHknOiBbe1xyXG4gICAgICAgICdiZy1vcGFjaXR5JzogW29wYWNpdHldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2dyb3VuZCBPcmlnaW5cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtb3JpZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctb3JpZ2luJzogW3tcclxuICAgICAgICAnYmctb3JpZ2luJzogWydib3JkZXInLCAncGFkZGluZycsICdjb250ZW50J11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIFBvc2l0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZ3JvdW5kLXBvc2l0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctcG9zaXRpb24nOiBbe1xyXG4gICAgICAgIGJnOiBbLi4uZ2V0UG9zaXRpb25zKCksIGlzQXJiaXRyYXJ5UG9zaXRpb25dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2dyb3VuZCBSZXBlYXRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtcmVwZWF0XHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctcmVwZWF0JzogW3tcclxuICAgICAgICBiZzogWyduby1yZXBlYXQnLCB7XHJcbiAgICAgICAgICByZXBlYXQ6IFsnJywgJ3gnLCAneScsICdyb3VuZCcsICdzcGFjZSddXHJcbiAgICAgICAgfV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIFNpemVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtc2l6ZVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JnLXNpemUnOiBbe1xyXG4gICAgICAgIGJnOiBbJ2F1dG8nLCAnY292ZXInLCAnY29udGFpbicsIGlzQXJiaXRyYXJ5U2l6ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIEltYWdlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZ3JvdW5kLWltYWdlXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctaW1hZ2UnOiBbe1xyXG4gICAgICAgIGJnOiBbJ25vbmUnLCB7XHJcbiAgICAgICAgICAnZ3JhZGllbnQtdG8nOiBbJ3QnLCAndHInLCAncicsICdicicsICdiJywgJ2JsJywgJ2wnLCAndGwnXVxyXG4gICAgICAgIH0sIGlzQXJiaXRyYXJ5SW1hZ2VdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2dyb3VuZCBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ2JnLWNvbG9yJzogW3tcclxuICAgICAgICBiZzogW2NvbG9yc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmFkaWVudCBDb2xvciBTdG9wcyBGcm9tIFBvc2l0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyYWRpZW50LWZyb20tcG9zJzogW3tcclxuICAgICAgICBmcm9tOiBbZ3JhZGllbnRDb2xvclN0b3BQb3NpdGlvbnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JhZGllbnQgQ29sb3IgU3RvcHMgVmlhIFBvc2l0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyYWRpZW50LXZpYS1wb3MnOiBbe1xyXG4gICAgICAgIHZpYTogW2dyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIFRvIFBvc2l0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyYWRpZW50LXRvLXBvcyc6IFt7XHJcbiAgICAgICAgdG86IFtncmFkaWVudENvbG9yU3RvcFBvc2l0aW9uc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmFkaWVudCBDb2xvciBTdG9wcyBGcm9tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyYWRpZW50LWZyb20nOiBbe1xyXG4gICAgICAgIGZyb206IFtncmFkaWVudENvbG9yU3RvcHNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JhZGllbnQgQ29sb3IgU3RvcHMgVmlhXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyYWRpZW50LXZpYSc6IFt7XHJcbiAgICAgICAgdmlhOiBbZ3JhZGllbnRDb2xvclN0b3BzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIFRvXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyYWRpZW50LXRvJzogW3tcclxuICAgICAgICB0bzogW2dyYWRpZW50Q29sb3JTdG9wc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIEJvcmRlcnNcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgIHJvdW5kZWQ6IFt7XHJcbiAgICAgICAgcm91bmRlZDogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXHJcbiAgICAgICAqL1xyXG4gICAgICAncm91bmRlZC1zJzogW3tcclxuICAgICAgICAncm91bmRlZC1zJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtZSc6IFt7XHJcbiAgICAgICAgJ3JvdW5kZWQtZSc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBUb3BcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLXQnOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLXQnOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLXInOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLXInOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgQm90dG9tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXHJcbiAgICAgICAqL1xyXG4gICAgICAncm91bmRlZC1iJzogW3tcclxuICAgICAgICAncm91bmRlZC1iJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLWwnOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLWwnOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgU3RhcnQgU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLXNzJzogW3tcclxuICAgICAgICAncm91bmRlZC1zcyc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBTdGFydCBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLXNlJzogW3tcclxuICAgICAgICAncm91bmRlZC1zZSc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBFbmQgRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXHJcbiAgICAgICAqL1xyXG4gICAgICAncm91bmRlZC1lZSc6IFt7XHJcbiAgICAgICAgJ3JvdW5kZWQtZWUnOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgRW5kIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXHJcbiAgICAgICAqL1xyXG4gICAgICAncm91bmRlZC1lcyc6IFt7XHJcbiAgICAgICAgJ3JvdW5kZWQtZXMnOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgVG9wIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLXRsJzogW3tcclxuICAgICAgICAncm91bmRlZC10bCc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBUb3AgUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLXRyJzogW3tcclxuICAgICAgICAncm91bmRlZC10cic6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBCb3R0b20gUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLWJyJzogW3tcclxuICAgICAgICAncm91bmRlZC1icic6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBCb3R0b20gTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtYmwnOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLWJsJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgV2lkdGhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci13JzogW3tcclxuICAgICAgICBib3JkZXI6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgV2lkdGggWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXcteCc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci14JzogW2JvcmRlcldpZHRoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBXaWR0aCBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItdy15JzogW3tcclxuICAgICAgICAnYm9yZGVyLXknOiBbYm9yZGVyV2lkdGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFdpZHRoIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItdy1zJzogW3tcclxuICAgICAgICAnYm9yZGVyLXMnOiBbYm9yZGVyV2lkdGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFdpZHRoIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXctZSc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1lJzogW2JvcmRlcldpZHRoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBXaWR0aCBUb3BcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci13LXQnOiBbe1xyXG4gICAgICAgICdib3JkZXItdCc6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgV2lkdGggUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci13LXInOiBbe1xyXG4gICAgICAgICdib3JkZXItcic6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgV2lkdGggQm90dG9tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItdy1iJzogW3tcclxuICAgICAgICAnYm9yZGVyLWInOiBbYm9yZGVyV2lkdGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFdpZHRoIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci13LWwnOiBbe1xyXG4gICAgICAgICdib3JkZXItbCc6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgT3BhY2l0eVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLW9wYWNpdHlcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItb3BhY2l0eSc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1vcGFjaXR5JzogW29wYWNpdHldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFN0eWxlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItc3R5bGVcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItc3R5bGUnOiBbe1xyXG4gICAgICAgIGJvcmRlcjogWy4uLmdldExpbmVTdHlsZXMoKSwgJ2hpZGRlbiddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGl2aWRlIFdpZHRoIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2RpdmlkZS13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2RpdmlkZS14JzogW3tcclxuICAgICAgICAnZGl2aWRlLXgnOiBbYm9yZGVyV2lkdGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGl2aWRlIFdpZHRoIFggUmV2ZXJzZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGl2aWRlLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnZGl2aWRlLXgtcmV2ZXJzZSc6IFsnZGl2aWRlLXgtcmV2ZXJzZSddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGl2aWRlIFdpZHRoIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2RpdmlkZS13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2RpdmlkZS15JzogW3tcclxuICAgICAgICAnZGl2aWRlLXknOiBbYm9yZGVyV2lkdGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGl2aWRlIFdpZHRoIFkgUmV2ZXJzZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGl2aWRlLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnZGl2aWRlLXktcmV2ZXJzZSc6IFsnZGl2aWRlLXktcmV2ZXJzZSddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGl2aWRlIE9wYWNpdHlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2RpdmlkZS1vcGFjaXR5XHJcbiAgICAgICAqL1xyXG4gICAgICAnZGl2aWRlLW9wYWNpdHknOiBbe1xyXG4gICAgICAgICdkaXZpZGUtb3BhY2l0eSc6IFtvcGFjaXR5XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIERpdmlkZSBTdHlsZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGl2aWRlLXN0eWxlXHJcbiAgICAgICAqL1xyXG4gICAgICAnZGl2aWRlLXN0eWxlJzogW3tcclxuICAgICAgICBkaXZpZGU6IGdldExpbmVTdHlsZXMoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLWNvbG9yJzogW3tcclxuICAgICAgICBib3JkZXI6IFtib3JkZXJDb2xvcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLWNvbG9yLXgnOiBbe1xyXG4gICAgICAgICdib3JkZXIteCc6IFtib3JkZXJDb2xvcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLWNvbG9yLXknOiBbe1xyXG4gICAgICAgICdib3JkZXIteSc6IFtib3JkZXJDb2xvcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgU1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLWNvbG9yLXMnOiBbe1xyXG4gICAgICAgICdib3JkZXItcyc6IFtib3JkZXJDb2xvcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgRVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLWNvbG9yLWUnOiBbe1xyXG4gICAgICAgICdib3JkZXItZSc6IFtib3JkZXJDb2xvcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgVG9wXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3ItdCc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci10JzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBSaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLWNvbG9yLXInOiBbe1xyXG4gICAgICAgICdib3JkZXItcic6IFtib3JkZXJDb2xvcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgQm90dG9tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3ItYic6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1iJzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBMZWZ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3ItbCc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1sJzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIERpdmlkZSBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGl2aWRlLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnZGl2aWRlLWNvbG9yJzogW3tcclxuICAgICAgICBkaXZpZGU6IFtib3JkZXJDb2xvcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdXRsaW5lIFN0eWxlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdXRsaW5lLXN0eWxlXHJcbiAgICAgICAqL1xyXG4gICAgICAnb3V0bGluZS1zdHlsZSc6IFt7XHJcbiAgICAgICAgb3V0bGluZTogWycnLCAuLi5nZXRMaW5lU3R5bGVzKCldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT3V0bGluZSBPZmZzZXRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL291dGxpbmUtb2Zmc2V0XHJcbiAgICAgICAqL1xyXG4gICAgICAnb3V0bGluZS1vZmZzZXQnOiBbe1xyXG4gICAgICAgICdvdXRsaW5lLW9mZnNldCc6IFtpc0xlbmd0aCwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdXRsaW5lIFdpZHRoXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdXRsaW5lLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnb3V0bGluZS13JzogW3tcclxuICAgICAgICBvdXRsaW5lOiBbaXNMZW5ndGgsIGlzQXJiaXRyYXJ5TGVuZ3RoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE91dGxpbmUgQ29sb3JcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL291dGxpbmUtY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdvdXRsaW5lLWNvbG9yJzogW3tcclxuICAgICAgICBvdXRsaW5lOiBbY29sb3JzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFJpbmcgV2lkdGhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Jpbmctd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdyaW5nLXcnOiBbe1xyXG4gICAgICAgIHJpbmc6IGdldExlbmd0aFdpdGhFbXB0eUFuZEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUmluZyBXaWR0aCBJbnNldFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcmluZy13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ3Jpbmctdy1pbnNldCc6IFsncmluZy1pbnNldCddLFxyXG4gICAgICAvKipcclxuICAgICAgICogUmluZyBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcmluZy1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ3JpbmctY29sb3InOiBbe1xyXG4gICAgICAgIHJpbmc6IFtjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUmluZyBPcGFjaXR5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9yaW5nLW9wYWNpdHlcclxuICAgICAgICovXHJcbiAgICAgICdyaW5nLW9wYWNpdHknOiBbe1xyXG4gICAgICAgICdyaW5nLW9wYWNpdHknOiBbb3BhY2l0eV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSaW5nIE9mZnNldCBXaWR0aFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcmluZy1vZmZzZXQtd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdyaW5nLW9mZnNldC13JzogW3tcclxuICAgICAgICAncmluZy1vZmZzZXQnOiBbaXNMZW5ndGgsIGlzQXJiaXRyYXJ5TGVuZ3RoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFJpbmcgT2Zmc2V0IENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9yaW5nLW9mZnNldC1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ3Jpbmctb2Zmc2V0LWNvbG9yJzogW3tcclxuICAgICAgICAncmluZy1vZmZzZXQnOiBbY29sb3JzXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gRWZmZWN0c1xyXG4gICAgICAvKipcclxuICAgICAgICogQm94IFNoYWRvd1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm94LXNoYWRvd1xyXG4gICAgICAgKi9cclxuICAgICAgc2hhZG93OiBbe1xyXG4gICAgICAgIHNoYWRvdzogWycnLCAnaW5uZXInLCAnbm9uZScsIGlzVHNoaXJ0U2l6ZSwgaXNBcmJpdHJhcnlTaGFkb3ddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm94IFNoYWRvdyBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm94LXNoYWRvdy1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ3NoYWRvdy1jb2xvcic6IFt7XHJcbiAgICAgICAgc2hhZG93OiBbaXNBbnldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT3BhY2l0eVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3BhY2l0eVxyXG4gICAgICAgKi9cclxuICAgICAgb3BhY2l0eTogW3tcclxuICAgICAgICBvcGFjaXR5OiBbb3BhY2l0eV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNaXggQmxlbmQgTW9kZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWl4LWJsZW5kLW1vZGVcclxuICAgICAgICovXHJcbiAgICAgICdtaXgtYmxlbmQnOiBbe1xyXG4gICAgICAgICdtaXgtYmxlbmQnOiBbLi4uZ2V0QmxlbmRNb2RlcygpLCAncGx1cy1saWdodGVyJywgJ3BsdXMtZGFya2VyJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIEJsZW5kIE1vZGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtYmxlbmQtbW9kZVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JnLWJsZW5kJzogW3tcclxuICAgICAgICAnYmctYmxlbmQnOiBnZXRCbGVuZE1vZGVzKClcclxuICAgICAgfV0sXHJcbiAgICAgIC8vIEZpbHRlcnNcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZpbHRlclxyXG4gICAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjMuMC4wXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9maWx0ZXJcclxuICAgICAgICovXHJcbiAgICAgIGZpbHRlcjogW3tcclxuICAgICAgICBmaWx0ZXI6IFsnJywgJ25vbmUnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJsdXJcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JsdXJcclxuICAgICAgICovXHJcbiAgICAgIGJsdXI6IFt7XHJcbiAgICAgICAgYmx1cjogW2JsdXJdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQnJpZ2h0bmVzc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJpZ2h0bmVzc1xyXG4gICAgICAgKi9cclxuICAgICAgYnJpZ2h0bmVzczogW3tcclxuICAgICAgICBicmlnaHRuZXNzOiBbYnJpZ2h0bmVzc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDb250cmFzdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY29udHJhc3RcclxuICAgICAgICovXHJcbiAgICAgIGNvbnRyYXN0OiBbe1xyXG4gICAgICAgIGNvbnRyYXN0OiBbY29udHJhc3RdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRHJvcCBTaGFkb3dcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2Ryb3Atc2hhZG93XHJcbiAgICAgICAqL1xyXG4gICAgICAnZHJvcC1zaGFkb3cnOiBbe1xyXG4gICAgICAgICdkcm9wLXNoYWRvdyc6IFsnJywgJ25vbmUnLCBpc1RzaGlydFNpemUsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JheXNjYWxlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmF5c2NhbGVcclxuICAgICAgICovXHJcbiAgICAgIGdyYXlzY2FsZTogW3tcclxuICAgICAgICBncmF5c2NhbGU6IFtncmF5c2NhbGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogSHVlIFJvdGF0ZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvaHVlLXJvdGF0ZVxyXG4gICAgICAgKi9cclxuICAgICAgJ2h1ZS1yb3RhdGUnOiBbe1xyXG4gICAgICAgICdodWUtcm90YXRlJzogW2h1ZVJvdGF0ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBJbnZlcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ludmVydFxyXG4gICAgICAgKi9cclxuICAgICAgaW52ZXJ0OiBbe1xyXG4gICAgICAgIGludmVydDogW2ludmVydF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTYXR1cmF0ZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2F0dXJhdGVcclxuICAgICAgICovXHJcbiAgICAgIHNhdHVyYXRlOiBbe1xyXG4gICAgICAgIHNhdHVyYXRlOiBbc2F0dXJhdGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2VwaWFcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NlcGlhXHJcbiAgICAgICAqL1xyXG4gICAgICBzZXBpYTogW3tcclxuICAgICAgICBzZXBpYTogW3NlcGlhXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIEZpbHRlclxyXG4gICAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjMuMC4wXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1maWx0ZXJcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1maWx0ZXInOiBbe1xyXG4gICAgICAgICdiYWNrZHJvcC1maWx0ZXInOiBbJycsICdub25lJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZHJvcCBCbHVyXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1ibHVyXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmFja2Ryb3AtYmx1cic6IFt7XHJcbiAgICAgICAgJ2JhY2tkcm9wLWJsdXInOiBbYmx1cl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZHJvcCBCcmlnaHRuZXNzXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1icmlnaHRuZXNzXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmFja2Ryb3AtYnJpZ2h0bmVzcyc6IFt7XHJcbiAgICAgICAgJ2JhY2tkcm9wLWJyaWdodG5lc3MnOiBbYnJpZ2h0bmVzc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZHJvcCBDb250cmFzdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3AtY29udHJhc3RcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1jb250cmFzdCc6IFt7XHJcbiAgICAgICAgJ2JhY2tkcm9wLWNvbnRyYXN0JzogW2NvbnRyYXN0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIEdyYXlzY2FsZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3AtZ3JheXNjYWxlXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmFja2Ryb3AtZ3JheXNjYWxlJzogW3tcclxuICAgICAgICAnYmFja2Ryb3AtZ3JheXNjYWxlJzogW2dyYXlzY2FsZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZHJvcCBIdWUgUm90YXRlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1odWUtcm90YXRlXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmFja2Ryb3AtaHVlLXJvdGF0ZSc6IFt7XHJcbiAgICAgICAgJ2JhY2tkcm9wLWh1ZS1yb3RhdGUnOiBbaHVlUm90YXRlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIEludmVydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3AtaW52ZXJ0XHJcbiAgICAgICAqL1xyXG4gICAgICAnYmFja2Ryb3AtaW52ZXJ0JzogW3tcclxuICAgICAgICAnYmFja2Ryb3AtaW52ZXJ0JzogW2ludmVydF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZHJvcCBPcGFjaXR5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1vcGFjaXR5XHJcbiAgICAgICAqL1xyXG4gICAgICAnYmFja2Ryb3Atb3BhY2l0eSc6IFt7XHJcbiAgICAgICAgJ2JhY2tkcm9wLW9wYWNpdHknOiBbb3BhY2l0eV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZHJvcCBTYXR1cmF0ZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3Atc2F0dXJhdGVcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1zYXR1cmF0ZSc6IFt7XHJcbiAgICAgICAgJ2JhY2tkcm9wLXNhdHVyYXRlJzogW3NhdHVyYXRlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIFNlcGlhXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1zZXBpYVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JhY2tkcm9wLXNlcGlhJzogW3tcclxuICAgICAgICAnYmFja2Ryb3Atc2VwaWEnOiBbc2VwaWFdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvLyBUYWJsZXNcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xsYXBzZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbGxhcHNlXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLWNvbGxhcHNlJzogW3tcclxuICAgICAgICBib3JkZXI6IFsnY29sbGFwc2UnLCAnc2VwYXJhdGUnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBTcGFjaW5nXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItc3BhY2luZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1zcGFjaW5nJzogW3tcclxuICAgICAgICAnYm9yZGVyLXNwYWNpbmcnOiBbYm9yZGVyU3BhY2luZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgU3BhY2luZyBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItc3BhY2luZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1zcGFjaW5nLXgnOiBbe1xyXG4gICAgICAgICdib3JkZXItc3BhY2luZy14JzogW2JvcmRlclNwYWNpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFNwYWNpbmcgWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXNwYWNpbmdcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItc3BhY2luZy15JzogW3tcclxuICAgICAgICAnYm9yZGVyLXNwYWNpbmcteSc6IFtib3JkZXJTcGFjaW5nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRhYmxlIExheW91dFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGFibGUtbGF5b3V0XHJcbiAgICAgICAqL1xyXG4gICAgICAndGFibGUtbGF5b3V0JzogW3tcclxuICAgICAgICB0YWJsZTogWydhdXRvJywgJ2ZpeGVkJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDYXB0aW9uIFNpZGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2NhcHRpb24tc2lkZVxyXG4gICAgICAgKi9cclxuICAgICAgY2FwdGlvbjogW3tcclxuICAgICAgICBjYXB0aW9uOiBbJ3RvcCcsICdib3R0b20nXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gVHJhbnNpdGlvbnMgYW5kIEFuaW1hdGlvblxyXG4gICAgICAvKipcclxuICAgICAgICogVHJhbmlzaXRpb24gUHJvcGVydHlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RyYW5zaXRpb24tcHJvcGVydHlcclxuICAgICAgICovXHJcbiAgICAgIHRyYW5zaXRpb246IFt7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogWydub25lJywgJ2FsbCcsICcnLCAnY29sb3JzJywgJ29wYWNpdHknLCAnc2hhZG93JywgJ3RyYW5zZm9ybScsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVHJhbnNpdGlvbiBEdXJhdGlvblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi1kdXJhdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgZHVyYXRpb246IFt7XHJcbiAgICAgICAgZHVyYXRpb246IGdldE51bWJlckFuZEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVHJhbnNpdGlvbiBUaW1pbmcgRnVuY3Rpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBlYXNlOiBbe1xyXG4gICAgICAgIGVhc2U6IFsnbGluZWFyJywgJ2luJywgJ291dCcsICdpbi1vdXQnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRyYW5zaXRpb24gRGVsYXlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RyYW5zaXRpb24tZGVsYXlcclxuICAgICAgICovXHJcbiAgICAgIGRlbGF5OiBbe1xyXG4gICAgICAgIGRlbGF5OiBnZXROdW1iZXJBbmRBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEFuaW1hdGlvblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBhbmltYXRlOiBbe1xyXG4gICAgICAgIGFuaW1hdGU6IFsnbm9uZScsICdzcGluJywgJ3BpbmcnLCAncHVsc2UnLCAnYm91bmNlJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIFRyYW5zZm9ybXNcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRyYW5zZm9ybVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNmb3JtXHJcbiAgICAgICAqL1xyXG4gICAgICB0cmFuc2Zvcm06IFt7XHJcbiAgICAgICAgdHJhbnNmb3JtOiBbJycsICdncHUnLCAnbm9uZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2NhbGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NjYWxlXHJcbiAgICAgICAqL1xyXG4gICAgICBzY2FsZTogW3tcclxuICAgICAgICBzY2FsZTogW3NjYWxlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjYWxlIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NjYWxlXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2NhbGUteCc6IFt7XHJcbiAgICAgICAgJ3NjYWxlLXgnOiBbc2NhbGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2NhbGUgWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2NhbGVcclxuICAgICAgICovXHJcbiAgICAgICdzY2FsZS15JzogW3tcclxuICAgICAgICAnc2NhbGUteSc6IFtzY2FsZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSb3RhdGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3JvdGF0ZVxyXG4gICAgICAgKi9cclxuICAgICAgcm90YXRlOiBbe1xyXG4gICAgICAgIHJvdGF0ZTogW2lzSW50ZWdlciwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUcmFuc2xhdGUgWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNsYXRlXHJcbiAgICAgICAqL1xyXG4gICAgICAndHJhbnNsYXRlLXgnOiBbe1xyXG4gICAgICAgICd0cmFuc2xhdGUteCc6IFt0cmFuc2xhdGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVHJhbnNsYXRlIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RyYW5zbGF0ZVxyXG4gICAgICAgKi9cclxuICAgICAgJ3RyYW5zbGF0ZS15JzogW3tcclxuICAgICAgICAndHJhbnNsYXRlLXknOiBbdHJhbnNsYXRlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNrZXcgWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2tld1xyXG4gICAgICAgKi9cclxuICAgICAgJ3NrZXcteCc6IFt7XHJcbiAgICAgICAgJ3NrZXcteCc6IFtza2V3XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNrZXcgWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2tld1xyXG4gICAgICAgKi9cclxuICAgICAgJ3NrZXcteSc6IFt7XHJcbiAgICAgICAgJ3NrZXcteSc6IFtza2V3XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRyYW5zZm9ybSBPcmlnaW5cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RyYW5zZm9ybS1vcmlnaW5cclxuICAgICAgICovXHJcbiAgICAgICd0cmFuc2Zvcm0tb3JpZ2luJzogW3tcclxuICAgICAgICBvcmlnaW46IFsnY2VudGVyJywgJ3RvcCcsICd0b3AtcmlnaHQnLCAncmlnaHQnLCAnYm90dG9tLXJpZ2h0JywgJ2JvdHRvbScsICdib3R0b20tbGVmdCcsICdsZWZ0JywgJ3RvcC1sZWZ0JywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIEludGVyYWN0aXZpdHlcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEFjY2VudCBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYWNjZW50LWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICBhY2NlbnQ6IFt7XHJcbiAgICAgICAgYWNjZW50OiBbJ2F1dG8nLCBjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQXBwZWFyYW5jZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYXBwZWFyYW5jZVxyXG4gICAgICAgKi9cclxuICAgICAgYXBwZWFyYW5jZTogW3tcclxuICAgICAgICBhcHBlYXJhbmNlOiBbJ25vbmUnLCAnYXV0byddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQ3Vyc29yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jdXJzb3JcclxuICAgICAgICovXHJcbiAgICAgIGN1cnNvcjogW3tcclxuICAgICAgICBjdXJzb3I6IFsnYXV0bycsICdkZWZhdWx0JywgJ3BvaW50ZXInLCAnd2FpdCcsICd0ZXh0JywgJ21vdmUnLCAnaGVscCcsICdub3QtYWxsb3dlZCcsICdub25lJywgJ2NvbnRleHQtbWVudScsICdwcm9ncmVzcycsICdjZWxsJywgJ2Nyb3NzaGFpcicsICd2ZXJ0aWNhbC10ZXh0JywgJ2FsaWFzJywgJ2NvcHknLCAnbm8tZHJvcCcsICdncmFiJywgJ2dyYWJiaW5nJywgJ2FsbC1zY3JvbGwnLCAnY29sLXJlc2l6ZScsICdyb3ctcmVzaXplJywgJ24tcmVzaXplJywgJ2UtcmVzaXplJywgJ3MtcmVzaXplJywgJ3ctcmVzaXplJywgJ25lLXJlc2l6ZScsICdudy1yZXNpemUnLCAnc2UtcmVzaXplJywgJ3N3LXJlc2l6ZScsICdldy1yZXNpemUnLCAnbnMtcmVzaXplJywgJ25lc3ctcmVzaXplJywgJ253c2UtcmVzaXplJywgJ3pvb20taW4nLCAnem9vbS1vdXQnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIENhcmV0IENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9qdXN0LWluLXRpbWUtbW9kZSNjYXJldC1jb2xvci11dGlsaXRpZXNcclxuICAgICAgICovXHJcbiAgICAgICdjYXJldC1jb2xvcic6IFt7XHJcbiAgICAgICAgY2FyZXQ6IFtjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUG9pbnRlciBFdmVudHNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BvaW50ZXItZXZlbnRzXHJcbiAgICAgICAqL1xyXG4gICAgICAncG9pbnRlci1ldmVudHMnOiBbe1xyXG4gICAgICAgICdwb2ludGVyLWV2ZW50cyc6IFsnbm9uZScsICdhdXRvJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSZXNpemVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Jlc2l6ZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzaXplOiBbe1xyXG4gICAgICAgIHJlc2l6ZTogWydub25lJywgJ3knLCAneCcsICcnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBCZWhhdmlvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLWJlaGF2aW9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLWJlaGF2aW9yJzogW3tcclxuICAgICAgICBzY3JvbGw6IFsnYXV0bycsICdzbW9vdGgnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW5cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtbSc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1tJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1teCc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1teCc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtbXknOiBbe1xyXG4gICAgICAgICdzY3JvbGwtbXknOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIE1hcmdpbiBTdGFydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1tcyc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1tcyc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1tZSc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1tZSc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luIFRvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1tdCc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1tdCc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luIFJpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLW1yJzogW3tcclxuICAgICAgICAnc2Nyb2xsLW1yJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gQm90dG9tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLW1iJzogW3tcclxuICAgICAgICAnc2Nyb2xsLW1iJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1tbCc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1tbCc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgUGFkZGluZ1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcCc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1wJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLXB4JzogW3tcclxuICAgICAgICAnc2Nyb2xsLXB4JzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLXB5JzogW3tcclxuICAgICAgICAnc2Nyb2xsLXB5JzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1wcyc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1wcyc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgUGFkZGluZyBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLXBlJzogW3tcclxuICAgICAgICAnc2Nyb2xsLXBlJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIFRvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcHQnOiBbe1xyXG4gICAgICAgICdzY3JvbGwtcHQnOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLXByJzogW3tcclxuICAgICAgICAnc2Nyb2xsLXByJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIEJvdHRvbVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcGInOiBbe1xyXG4gICAgICAgICdzY3JvbGwtcGInOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcGwnOiBbe1xyXG4gICAgICAgICdzY3JvbGwtcGwnOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFNuYXAgQWxpZ25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1zbmFwLWFsaWduXHJcbiAgICAgICAqL1xyXG4gICAgICAnc25hcC1hbGlnbic6IFt7XHJcbiAgICAgICAgc25hcDogWydzdGFydCcsICdlbmQnLCAnY2VudGVyJywgJ2FsaWduLW5vbmUnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBTbmFwIFN0b3BcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1zbmFwLXN0b3BcclxuICAgICAgICovXHJcbiAgICAgICdzbmFwLXN0b3AnOiBbe1xyXG4gICAgICAgIHNuYXA6IFsnbm9ybWFsJywgJ2Fsd2F5cyddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFNuYXAgVHlwZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXNuYXAtdHlwZVxyXG4gICAgICAgKi9cclxuICAgICAgJ3NuYXAtdHlwZSc6IFt7XHJcbiAgICAgICAgc25hcDogWydub25lJywgJ3gnLCAneScsICdib3RoJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgU25hcCBUeXBlIFN0cmljdG5lc3NcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1zbmFwLXR5cGVcclxuICAgICAgICovXHJcbiAgICAgICdzbmFwLXN0cmljdG5lc3MnOiBbe1xyXG4gICAgICAgIHNuYXA6IFsnbWFuZGF0b3J5JywgJ3Byb3hpbWl0eSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVG91Y2ggQWN0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3VjaC1hY3Rpb25cclxuICAgICAgICovXHJcbiAgICAgIHRvdWNoOiBbe1xyXG4gICAgICAgIHRvdWNoOiBbJ2F1dG8nLCAnbm9uZScsICdtYW5pcHVsYXRpb24nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRvdWNoIEFjdGlvbiBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3VjaC1hY3Rpb25cclxuICAgICAgICovXHJcbiAgICAgICd0b3VjaC14JzogW3tcclxuICAgICAgICAndG91Y2gtcGFuJzogWyd4JywgJ2xlZnQnLCAncmlnaHQnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRvdWNoIEFjdGlvbiBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3VjaC1hY3Rpb25cclxuICAgICAgICovXHJcbiAgICAgICd0b3VjaC15JzogW3tcclxuICAgICAgICAndG91Y2gtcGFuJzogWyd5JywgJ3VwJywgJ2Rvd24nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRvdWNoIEFjdGlvbiBQaW5jaCBab29tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3VjaC1hY3Rpb25cclxuICAgICAgICovXHJcbiAgICAgICd0b3VjaC1weic6IFsndG91Y2gtcGluY2gtem9vbSddLFxyXG4gICAgICAvKipcclxuICAgICAgICogVXNlciBTZWxlY3RcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3VzZXItc2VsZWN0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZWxlY3Q6IFt7XHJcbiAgICAgICAgc2VsZWN0OiBbJ25vbmUnLCAndGV4dCcsICdhbGwnLCAnYXV0byddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogV2lsbCBDaGFuZ2VcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3dpbGwtY2hhbmdlXHJcbiAgICAgICAqL1xyXG4gICAgICAnd2lsbC1jaGFuZ2UnOiBbe1xyXG4gICAgICAgICd3aWxsLWNoYW5nZSc6IFsnYXV0bycsICdzY3JvbGwnLCAnY29udGVudHMnLCAndHJhbnNmb3JtJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIFNWR1xyXG4gICAgICAvKipcclxuICAgICAgICogRmlsbFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmlsbFxyXG4gICAgICAgKi9cclxuICAgICAgZmlsbDogW3tcclxuICAgICAgICBmaWxsOiBbY29sb3JzLCAnbm9uZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU3Ryb2tlIFdpZHRoXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zdHJva2Utd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdzdHJva2Utdyc6IFt7XHJcbiAgICAgICAgc3Ryb2tlOiBbaXNMZW5ndGgsIGlzQXJiaXRyYXJ5TGVuZ3RoLCBpc0FyYml0cmFyeU51bWJlcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTdHJva2VcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3N0cm9rZVxyXG4gICAgICAgKi9cclxuICAgICAgc3Ryb2tlOiBbe1xyXG4gICAgICAgIHN0cm9rZTogW2NvbG9ycywgJ25vbmUnXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gQWNjZXNzaWJpbGl0eVxyXG4gICAgICAvKipcclxuICAgICAgICogU2NyZWVuIFJlYWRlcnNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NjcmVlbi1yZWFkZXJzXHJcbiAgICAgICAqL1xyXG4gICAgICBzcjogWydzci1vbmx5JywgJ25vdC1zci1vbmx5J10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb3JjZWQgQ29sb3IgQWRqdXN0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb3JjZWQtY29sb3ItYWRqdXN0XHJcbiAgICAgICAqL1xyXG4gICAgICAnZm9yY2VkLWNvbG9yLWFkanVzdCc6IFt7XHJcbiAgICAgICAgJ2ZvcmNlZC1jb2xvci1hZGp1c3QnOiBbJ2F1dG8nLCAnbm9uZSddXHJcbiAgICAgIH1dXHJcbiAgICB9LFxyXG4gICAgY29uZmxpY3RpbmdDbGFzc0dyb3Vwczoge1xyXG4gICAgICBvdmVyZmxvdzogWydvdmVyZmxvdy14JywgJ292ZXJmbG93LXknXSxcclxuICAgICAgb3ZlcnNjcm9sbDogWydvdmVyc2Nyb2xsLXgnLCAnb3ZlcnNjcm9sbC15J10sXHJcbiAgICAgIGluc2V0OiBbJ2luc2V0LXgnLCAnaW5zZXQteScsICdzdGFydCcsICdlbmQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10sXHJcbiAgICAgICdpbnNldC14JzogWydyaWdodCcsICdsZWZ0J10sXHJcbiAgICAgICdpbnNldC15JzogWyd0b3AnLCAnYm90dG9tJ10sXHJcbiAgICAgIGZsZXg6IFsnYmFzaXMnLCAnZ3JvdycsICdzaHJpbmsnXSxcclxuICAgICAgZ2FwOiBbJ2dhcC14JywgJ2dhcC15J10sXHJcbiAgICAgIHA6IFsncHgnLCAncHknLCAncHMnLCAncGUnLCAncHQnLCAncHInLCAncGInLCAncGwnXSxcclxuICAgICAgcHg6IFsncHInLCAncGwnXSxcclxuICAgICAgcHk6IFsncHQnLCAncGInXSxcclxuICAgICAgbTogWydteCcsICdteScsICdtcycsICdtZScsICdtdCcsICdtcicsICdtYicsICdtbCddLFxyXG4gICAgICBteDogWydtcicsICdtbCddLFxyXG4gICAgICBteTogWydtdCcsICdtYiddLFxyXG4gICAgICBzaXplOiBbJ3cnLCAnaCddLFxyXG4gICAgICAnZm9udC1zaXplJzogWydsZWFkaW5nJ10sXHJcbiAgICAgICdmdm4tbm9ybWFsJzogWydmdm4tb3JkaW5hbCcsICdmdm4tc2xhc2hlZC16ZXJvJywgJ2Z2bi1maWd1cmUnLCAnZnZuLXNwYWNpbmcnLCAnZnZuLWZyYWN0aW9uJ10sXHJcbiAgICAgICdmdm4tb3JkaW5hbCc6IFsnZnZuLW5vcm1hbCddLFxyXG4gICAgICAnZnZuLXNsYXNoZWQtemVybyc6IFsnZnZuLW5vcm1hbCddLFxyXG4gICAgICAnZnZuLWZpZ3VyZSc6IFsnZnZuLW5vcm1hbCddLFxyXG4gICAgICAnZnZuLXNwYWNpbmcnOiBbJ2Z2bi1ub3JtYWwnXSxcclxuICAgICAgJ2Z2bi1mcmFjdGlvbic6IFsnZnZuLW5vcm1hbCddLFxyXG4gICAgICAnbGluZS1jbGFtcCc6IFsnZGlzcGxheScsICdvdmVyZmxvdyddLFxyXG4gICAgICByb3VuZGVkOiBbJ3JvdW5kZWQtcycsICdyb3VuZGVkLWUnLCAncm91bmRlZC10JywgJ3JvdW5kZWQtcicsICdyb3VuZGVkLWInLCAncm91bmRlZC1sJywgJ3JvdW5kZWQtc3MnLCAncm91bmRlZC1zZScsICdyb3VuZGVkLWVlJywgJ3JvdW5kZWQtZXMnLCAncm91bmRlZC10bCcsICdyb3VuZGVkLXRyJywgJ3JvdW5kZWQtYnInLCAncm91bmRlZC1ibCddLFxyXG4gICAgICAncm91bmRlZC1zJzogWydyb3VuZGVkLXNzJywgJ3JvdW5kZWQtZXMnXSxcclxuICAgICAgJ3JvdW5kZWQtZSc6IFsncm91bmRlZC1zZScsICdyb3VuZGVkLWVlJ10sXHJcbiAgICAgICdyb3VuZGVkLXQnOiBbJ3JvdW5kZWQtdGwnLCAncm91bmRlZC10ciddLFxyXG4gICAgICAncm91bmRlZC1yJzogWydyb3VuZGVkLXRyJywgJ3JvdW5kZWQtYnInXSxcclxuICAgICAgJ3JvdW5kZWQtYic6IFsncm91bmRlZC1icicsICdyb3VuZGVkLWJsJ10sXHJcbiAgICAgICdyb3VuZGVkLWwnOiBbJ3JvdW5kZWQtdGwnLCAncm91bmRlZC1ibCddLFxyXG4gICAgICAnYm9yZGVyLXNwYWNpbmcnOiBbJ2JvcmRlci1zcGFjaW5nLXgnLCAnYm9yZGVyLXNwYWNpbmcteSddLFxyXG4gICAgICAnYm9yZGVyLXcnOiBbJ2JvcmRlci13LXMnLCAnYm9yZGVyLXctZScsICdib3JkZXItdy10JywgJ2JvcmRlci13LXInLCAnYm9yZGVyLXctYicsICdib3JkZXItdy1sJ10sXHJcbiAgICAgICdib3JkZXItdy14JzogWydib3JkZXItdy1yJywgJ2JvcmRlci13LWwnXSxcclxuICAgICAgJ2JvcmRlci13LXknOiBbJ2JvcmRlci13LXQnLCAnYm9yZGVyLXctYiddLFxyXG4gICAgICAnYm9yZGVyLWNvbG9yJzogWydib3JkZXItY29sb3ItcycsICdib3JkZXItY29sb3ItZScsICdib3JkZXItY29sb3ItdCcsICdib3JkZXItY29sb3ItcicsICdib3JkZXItY29sb3ItYicsICdib3JkZXItY29sb3ItbCddLFxyXG4gICAgICAnYm9yZGVyLWNvbG9yLXgnOiBbJ2JvcmRlci1jb2xvci1yJywgJ2JvcmRlci1jb2xvci1sJ10sXHJcbiAgICAgICdib3JkZXItY29sb3IteSc6IFsnYm9yZGVyLWNvbG9yLXQnLCAnYm9yZGVyLWNvbG9yLWInXSxcclxuICAgICAgJ3Njcm9sbC1tJzogWydzY3JvbGwtbXgnLCAnc2Nyb2xsLW15JywgJ3Njcm9sbC1tcycsICdzY3JvbGwtbWUnLCAnc2Nyb2xsLW10JywgJ3Njcm9sbC1tcicsICdzY3JvbGwtbWInLCAnc2Nyb2xsLW1sJ10sXHJcbiAgICAgICdzY3JvbGwtbXgnOiBbJ3Njcm9sbC1tcicsICdzY3JvbGwtbWwnXSxcclxuICAgICAgJ3Njcm9sbC1teSc6IFsnc2Nyb2xsLW10JywgJ3Njcm9sbC1tYiddLFxyXG4gICAgICAnc2Nyb2xsLXAnOiBbJ3Njcm9sbC1weCcsICdzY3JvbGwtcHknLCAnc2Nyb2xsLXBzJywgJ3Njcm9sbC1wZScsICdzY3JvbGwtcHQnLCAnc2Nyb2xsLXByJywgJ3Njcm9sbC1wYicsICdzY3JvbGwtcGwnXSxcclxuICAgICAgJ3Njcm9sbC1weCc6IFsnc2Nyb2xsLXByJywgJ3Njcm9sbC1wbCddLFxyXG4gICAgICAnc2Nyb2xsLXB5JzogWydzY3JvbGwtcHQnLCAnc2Nyb2xsLXBiJ10sXHJcbiAgICAgIHRvdWNoOiBbJ3RvdWNoLXgnLCAndG91Y2gteScsICd0b3VjaC1weiddLFxyXG4gICAgICAndG91Y2gteCc6IFsndG91Y2gnXSxcclxuICAgICAgJ3RvdWNoLXknOiBbJ3RvdWNoJ10sXHJcbiAgICAgICd0b3VjaC1weic6IFsndG91Y2gnXVxyXG4gICAgfSxcclxuICAgIGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczoge1xyXG4gICAgICAnZm9udC1zaXplJzogWydsZWFkaW5nJ11cclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBiYXNlQ29uZmlnIENvbmZpZyB3aGVyZSBvdGhlciBjb25maWcgd2lsbCBiZSBtZXJnZWQgaW50by4gVGhpcyBvYmplY3Qgd2lsbCBiZSBtdXRhdGVkLlxyXG4gKiBAcGFyYW0gY29uZmlnRXh0ZW5zaW9uIFBhcnRpYWwgY29uZmlnIHRvIG1lcmdlIGludG8gdGhlIGBiYXNlQ29uZmlnYC5cclxuICovXHJcbmNvbnN0IG1lcmdlQ29uZmlncyA9IChiYXNlQ29uZmlnLCB7XHJcbiAgY2FjaGVTaXplLFxyXG4gIHByZWZpeCxcclxuICBzZXBhcmF0b3IsXHJcbiAgZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWUsXHJcbiAgZXh0ZW5kID0ge30sXHJcbiAgb3ZlcnJpZGUgPSB7fVxyXG59KSA9PiB7XHJcbiAgb3ZlcnJpZGVQcm9wZXJ0eShiYXNlQ29uZmlnLCAnY2FjaGVTaXplJywgY2FjaGVTaXplKTtcclxuICBvdmVycmlkZVByb3BlcnR5KGJhc2VDb25maWcsICdwcmVmaXgnLCBwcmVmaXgpO1xyXG4gIG92ZXJyaWRlUHJvcGVydHkoYmFzZUNvbmZpZywgJ3NlcGFyYXRvcicsIHNlcGFyYXRvcik7XHJcbiAgb3ZlcnJpZGVQcm9wZXJ0eShiYXNlQ29uZmlnLCAnZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWUnLCBleHBlcmltZW50YWxQYXJzZUNsYXNzTmFtZSk7XHJcbiAgZm9yIChjb25zdCBjb25maWdLZXkgaW4gb3ZlcnJpZGUpIHtcclxuICAgIG92ZXJyaWRlQ29uZmlnUHJvcGVydGllcyhiYXNlQ29uZmlnW2NvbmZpZ0tleV0sIG92ZXJyaWRlW2NvbmZpZ0tleV0pO1xyXG4gIH1cclxuICBmb3IgKGNvbnN0IGtleSBpbiBleHRlbmQpIHtcclxuICAgIG1lcmdlQ29uZmlnUHJvcGVydGllcyhiYXNlQ29uZmlnW2tleV0sIGV4dGVuZFtrZXldKTtcclxuICB9XHJcbiAgcmV0dXJuIGJhc2VDb25maWc7XHJcbn07XHJcbmNvbnN0IG92ZXJyaWRlUHJvcGVydHkgPSAoYmFzZU9iamVjdCwgb3ZlcnJpZGVLZXksIG92ZXJyaWRlVmFsdWUpID0+IHtcclxuICBpZiAob3ZlcnJpZGVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICBiYXNlT2JqZWN0W292ZXJyaWRlS2V5XSA9IG92ZXJyaWRlVmFsdWU7XHJcbiAgfVxyXG59O1xyXG5jb25zdCBvdmVycmlkZUNvbmZpZ1Byb3BlcnRpZXMgPSAoYmFzZU9iamVjdCwgb3ZlcnJpZGVPYmplY3QpID0+IHtcclxuICBpZiAob3ZlcnJpZGVPYmplY3QpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG92ZXJyaWRlT2JqZWN0KSB7XHJcbiAgICAgIG92ZXJyaWRlUHJvcGVydHkoYmFzZU9iamVjdCwga2V5LCBvdmVycmlkZU9iamVjdFtrZXldKTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcbmNvbnN0IG1lcmdlQ29uZmlnUHJvcGVydGllcyA9IChiYXNlT2JqZWN0LCBtZXJnZU9iamVjdCkgPT4ge1xyXG4gIGlmIChtZXJnZU9iamVjdCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gbWVyZ2VPYmplY3QpIHtcclxuICAgICAgY29uc3QgbWVyZ2VWYWx1ZSA9IG1lcmdlT2JqZWN0W2tleV07XHJcbiAgICAgIGlmIChtZXJnZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBiYXNlT2JqZWN0W2tleV0gPSAoYmFzZU9iamVjdFtrZXldIHx8IFtdKS5jb25jYXQobWVyZ2VWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn07XHJcbmNvbnN0IGV4dGVuZFRhaWx3aW5kTWVyZ2UgPSAoY29uZmlnRXh0ZW5zaW9uLCAuLi5jcmVhdGVDb25maWcpID0+IHR5cGVvZiBjb25maWdFeHRlbnNpb24gPT09ICdmdW5jdGlvbicgPyBjcmVhdGVUYWlsd2luZE1lcmdlKGdldERlZmF1bHRDb25maWcsIGNvbmZpZ0V4dGVuc2lvbiwgLi4uY3JlYXRlQ29uZmlnKSA6IGNyZWF0ZVRhaWx3aW5kTWVyZ2UoKCkgPT4gbWVyZ2VDb25maWdzKGdldERlZmF1bHRDb25maWcoKSwgY29uZmlnRXh0ZW5zaW9uKSwgLi4uY3JlYXRlQ29uZmlnKTtcclxuY29uc3QgdHdNZXJnZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVUYWlsd2luZE1lcmdlKGdldERlZmF1bHRDb25maWcpO1xyXG5leHBvcnQgeyBjcmVhdGVUYWlsd2luZE1lcmdlLCBleHRlbmRUYWlsd2luZE1lcmdlLCBmcm9tVGhlbWUsIGdldERlZmF1bHRDb25maWcsIG1lcmdlQ29uZmlncywgdHdKb2luLCB0d01lcmdlLCB2YWxpZGF0b3JzIH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1bmRsZS1tanMubWpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs\n");
/***/ })
};
;