@fenge/eslint-config
Version:
A super strict eslint config for linting js/ts/package.json.
544 lines • 73.5 kB
JavaScript
import * as fengePlugin from "@fenge/eslint-plugin";
import tsPlugin from "@typescript-eslint/eslint-plugin";
import confusingKeys from "confusing-browser-globals";
import checkFilePlugin from "eslint-plugin-check-file";
import esxPlugin from "eslint-plugin-es-x";
import * as esmPlugin from "eslint-plugin-esm";
import fpPlugin from "eslint-plugin-fp";
import importPlugin from "eslint-plugin-import";
import nPlugin from "eslint-plugin-n";
import promisePlugin from "eslint-plugin-promise";
import reactPlugin from "eslint-plugin-react";
import reactHooksPlugin from "eslint-plugin-react-hooks";
import simpleImportSortPlugin from "eslint-plugin-simple-import-sort";
import sonarjsPlugin from "eslint-plugin-sonarjs";
import unicornPlugin from "eslint-plugin-unicorn";
import globals from "globals";
export function getJsBase() {
// copied from https://github.com/standard/eslint-config-standard/blob/master/src/index.ts
// prettier-ignore
const standardConfigRules = {
'no-var': 'error',
'object-shorthand': ['error', 'properties'],
'accessor-pairs': ['error', { setWithoutGet: true, enforceForClassMembers: true }],
// 'array-bracket-spacing': ['error', 'never'],
'array-callback-return': ['error', {
allowImplicit: false,
checkForEach: false
}],
// 'arrow-spacing': ['error', { before: true, after: true }],
// 'block-spacing': ['error', 'always'],
// 'brace-style': ['error', '1tbs', { allowSingleLine: true }],
camelcase: ['error', {
allow: ['^UNSAFE_'],
properties: 'never',
ignoreGlobals: true
}],
// 'comma-dangle': ['error', {
// arrays: 'never',
// objects: 'never',
// imports: 'never',
// exports: 'never',
// functions: 'never'
// }],
// 'comma-spacing': ['error', { before: false, after: true }],
// 'comma-style': ['error', 'last'],
// 'computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }],
'constructor-super': 'error',
// curly: ['error', 'multi-line'],
'default-case-last': 'error',
// 'dot-location': ['error', 'property'],
// 'dot-notation': ['error', { allowKeywords: true }], // TODO: This should be enabled. Disable it as it conflicts with ts when enabling ts-check
// 'eol-last': 'error',
eqeqeq: ['error', 'always', { null: 'ignore' }],
// 'func-call-spacing': ['error', 'never'],
// 'generator-star-spacing': ['error', { before: true, after: true }],
// indent: ['error', 2, {
// SwitchCase: 1,
// VariableDeclarator: 1,
// outerIIFEBody: 1,
// MemberExpression: 1,
// FunctionDeclaration: { parameters: 1, body: 1 },
// FunctionExpression: { parameters: 1, body: 1 },
// CallExpression: { arguments: 1 },
// ArrayExpression: 1,
// ObjectExpression: 1,
// ImportDeclaration: 1,
// flatTernaryExpressions: false,
// ignoreComments: false,
// ignoredNodes: [
// 'TemplateLiteral *',
// 'JSXElement',
// 'JSXElement > *',
// 'JSXAttribute',
// 'JSXIdentifier',
// 'JSXNamespacedName',
// 'JSXMemberExpression',
// 'JSXSpreadAttribute',
// 'JSXExpressionContainer',
// 'JSXOpeningElement',
// 'JSXClosingElement',
// 'JSXFragment',
// 'JSXOpeningFragment',
// 'JSXClosingFragment',
// 'JSXText',
// 'JSXEmptyExpression',
// 'JSXSpreadChild'
// ],
// offsetTernaryExpressions: true
// }],
// 'key-spacing': ['error', { beforeColon: false, afterColon: true }],
// 'keyword-spacing': ['error', { before: true, after: true }],
// 'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }],
// 'multiline-ternary': ['error', 'always-multiline'],
'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }],
// 'new-parens': 'error',
'no-array-constructor': 'error',
'no-async-promise-executor': 'error',
'no-caller': 'error',
'no-case-declarations': 'error',
'no-class-assign': 'error',
'no-compare-neg-zero': 'error',
'no-cond-assign': 'error',
'no-const-assign': 'error',
'no-constant-condition': ['error', { checkLoops: false }],
'no-control-regex': 'error',
'no-debugger': 'error',
'no-delete-var': 'error',
'no-dupe-args': 'error',
'no-dupe-class-members': 'error',
'no-dupe-keys': 'error',
'no-duplicate-case': 'error',
'no-useless-backreference': 'error',
'no-empty': ['error', { allowEmptyCatch: true }],
'no-empty-character-class': 'error',
'no-empty-pattern': 'error',
'no-eval': 'error',
'no-ex-assign': 'error',
'no-extend-native': 'error',
'no-extra-bind': 'error',
'no-extra-boolean-cast': 'error',
// 'no-extra-parens': ['error', 'functions'],
'no-fallthrough': 'error',
// 'no-floating-decimal': 'error',
'no-func-assign': 'error',
'no-global-assign': 'error',
'no-implied-eval': 'error',
'no-import-assign': 'error',
'no-invalid-regexp': 'error',
'no-irregular-whitespace': 'error',
'no-iterator': 'error',
'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
'no-lone-blocks': 'error',
'no-loss-of-precision': 'error',
'no-misleading-character-class': 'error',
'no-prototype-builtins': 'error',
'no-useless-catch': 'error',
// 'no-mixed-operators': ['error', {
// groups: [
// ['==', '!=', '===', '!==', '>', '>=', '<', '<='],
// ['&&', '||'],
// ['in', 'instanceof']
// ],
// allowSamePrecedence: true
// }],
// 'no-mixed-spaces-and-tabs': 'error',
// 'no-multi-spaces': 'error',
'no-multi-str': 'error',
// 'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }],
'no-new': 'error',
'no-new-func': 'error',
// 'no-new-object': 'error',
// 'no-new-symbol': 'error',
'no-new-wrappers': 'error',
'no-obj-calls': 'error',
'no-octal': 'error',
'no-octal-escape': 'error',
'no-proto': 'error',
'no-redeclare': ['error', { builtinGlobals: false }],
'no-regex-spaces': 'error',
'no-return-assign': ['error', 'except-parens'],
'no-self-assign': ['error', { props: true }],
'no-self-compare': 'error',
'no-sequences': 'error',
'no-shadow-restricted-names': 'error',
'no-sparse-arrays': 'error',
// 'no-tabs': 'error',
// 'no-template-curly-in-string': 'error', // VSCode an WebStorm can detect it. Enabling this will decrease flexibility. For example, long content containing ${foo} is reasonable.
'no-this-before-super': 'error',
'no-throw-literal': 'error',
// 'no-trailing-spaces': 'error',
'no-undef': 'error',
// 'no-undef-init': 'error', // It conflict with `init-declarations`
// 'no-unexpected-multiline': 'error',
'no-unmodified-loop-condition': 'error',
'no-unneeded-ternary': ['error', { defaultAssignment: false }],
'no-unreachable': 'error',
'no-unreachable-loop': 'error',
'no-unsafe-finally': 'error',
'no-unsafe-negation': 'error',
'no-unused-expressions': ['error', {
enforceForJSX: true,
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true
}],
'no-unused-vars': ['error', {
args: 'none',
caughtErrors: 'none',
ignoreRestSiblings: true,
vars: 'all'
}],
'no-use-before-define': ['error', { functions: false, classes: false, variables: false }],
'no-useless-call': 'error',
'no-useless-computed-key': 'error',
'no-useless-constructor': 'error',
'no-useless-escape': 'error',
'no-useless-rename': 'error',
'no-useless-return': 'error',
'no-void': 'error',
// 'no-whitespace-before-property': 'error',
'no-with': 'error',
// 'object-curly-newline': ['error', { multiline: true, consistent: true }],
// 'object-curly-spacing': ['error', 'always'],
// 'object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
'one-var': ['error', { initialized: 'never' }],
// 'operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before', '|>': 'before' } }],
// 'padded-blocks': ['error', { blocks: 'never', switches: 'never', classes: 'never' }],
'prefer-const': ['error', { destructuring: 'all' }],
'prefer-promise-reject-errors': 'error',
'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
// 'quote-props': ['error', 'as-needed'],
// quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: false }],
// 'rest-spread-spacing': ['error', 'never'],
// semi: ['error', 'never'],
// 'semi-spacing': ['error', { before: false, after: true }],
// 'space-before-blocks': ['error', 'always'],
// 'space-before-function-paren': ['error', 'always'],
// 'space-in-parens': ['error', 'never'],
// 'space-infix-ops': 'error',
// 'space-unary-ops': ['error', { words: true, nonwords: false }],
// 'spaced-comment': ['error', 'always', {
// line: { markers: ['*package', '!', '/', ',', '='] },
// block: { balanced: true, markers: ['*package', '!', ',', ':', '::', 'flow-include'], exceptions: ['*'] }
// }],
'symbol-description': 'error',
// 'template-curly-spacing': ['error', 'never'],
// 'template-tag-spacing': ['error', 'never'],
'unicode-bom': ['error', 'never'],
'use-isnan': ['error', {
enforceForSwitchCase: true,
enforceForIndexOf: true
}],
'valid-typeof': ['error', { requireStringLiterals: true }],
// 'wrap-iife': ['error', 'any', { functionPrototypeMethods: true }],
// 'yield-star-spacing': ['error', 'both'],
yoda: ['error', 'never'],
};
return {
name: "fenge/javascript",
files: ["**/*.{js,cjs,mjs,jsx}"],
// https://eslint.org/docs/latest/use/configure/language-options
languageOptions: {
ecmaVersion: "latest",
sourceType: "module",
parserOptions: {
// TODO `ecmaVersion` and `sourceType` are no standard here. import/no-default-export required this
ecmaVersion: "latest",
sourceType: "module",
ecmaFeatures: {
jsx: true,
},
},
globals: {
...Object.fromEntries(Object.entries(globals.browser)
.filter(([k]) => !confusingKeys.includes(k))
.filter(([k]) => !["self", "global"].includes(k))),
},
},
plugins: {
"check-file": checkFilePlugin,
fp: fpPlugin,
n: nPlugin,
import: importPlugin,
promise: promisePlugin,
react: reactPlugin,
"react-hooks": reactHooksPlugin,
sonarjs: sonarjsPlugin,
unicorn: unicornPlugin,
"es-x": esxPlugin,
esm: esmPlugin,
"simple-import-sort": simpleImportSortPlugin,
"@fenge": fengePlugin,
"@typescript-eslint": { rules: tsPlugin.rules }, // TODO: Ugly. Submit a pr to typescript-plugin to fix it.
},
rules: {
// 1. standard config rules
...standardConfigRules,
// 2. code style for a better readability
"arrow-body-style": ["error", "as-needed"],
// Sort imports by prettier. Turn in off.
// "simple-import-sort/imports": [
// "error",
// { groups: [["^\\u0000", "^node:", "^@?\\w", "^", "^\\."]] },
// ],
"simple-import-sort/exports": "error",
"unicorn/prefer-node-protocol": "error",
"unicorn/escape-case": "error", // '\ud834' -> '\uD834'
// "unicorn/number-literal-case": "error", // 0XFF -> 0xFF // conflict with prettier
// 3. ban some syntaxes to reduce mistakes
"default-param-last": "error",
"for-direction": "error",
"func-name-matching": "error",
"func-names": "error", // always require a name for function declaration
"func-style": ["error", "declaration", { allowArrowFunctions: true }],
"getter-return": "error",
"init-declarations": "error",
"logical-assignment-operators": [
"error",
"always",
{ enforceForIfStatements: true },
],
"max-depth": ["error", { max: 5 }],
"max-params": ["error", { max: 4 }],
"no-bitwise": "error",
"no-console": "error",
"no-constant-binary-expression": "error",
"no-dupe-else-if": "error",
"no-duplicate-imports": "error",
"no-empty-static-block": "error",
"no-empty-function": "error",
"no-implicit-coercion": [
"error",
{ disallowTemplateShorthand: true, allow: ["!!"] },
], // forbid code like `const num = +str`;
"no-inner-declarations": "error", // TODO: change the rule value to `["error","functions",{blockScopedFunctions:"disallow"}]` when eslint is v9
"no-invalid-this": "error",
"no-lonely-if": "error",
"no-multi-assign": "error",
"no-new-native-nonconstructor": "error",
"no-nonoctal-decimal-escape": "error",
"no-object-constructor": "error",
"no-param-reassign": "error",
"no-plusplus": "error",
"no-setter-return": "error",
"no-shadow": ["error", { ignoreOnInitialization: true }],
"no-unsafe-optional-chaining": [
"error",
{ disallowArithmeticOperators: true },
],
"no-unused-labels": "error",
"no-unused-private-class-members": "error",
"require-await": "error",
"require-yield": "error",
"prefer-arrow-callback": "error",
"prefer-exponentiation-operator": "error",
"prefer-object-has-own": "error",
// "prefer-object-spread": "error",
"prefer-spread": "error",
"prefer-template": "error",
// check-file
"check-file/filename-blocklist": [
"error",
{
"**/*.mjs": "*.js",
"**/*.cjs": "*.js",
"**/*.mts": "*.ts",
"**/*.cts": "*.ts",
"**/*.spec.*": "*.test.*", // Node.js built-in support *.test.js. See https://nodejs.org/api/test.html#running-tests-from-the-command-line.
},
],
// es
"es-x/no-accessor-properties": "error",
"es-x/no-async-iteration": "error",
"es-x/no-generators": "error",
"es-x/no-hashbang": "error",
"es-x/no-legacy-object-prototype-accessor-methods": "error",
"es-x/no-top-level-await": "error",
// esm
"esm/existing-file-imports": "error",
"esm/no-declaration-file-imports": "error",
"esm/no-directory-imports": "error",
"esm/no-dynamic-imports": "error",
"esm/no-empty-exports": "error",
"esm/no-git-ignored-imports": "error",
"esm/no-phantom-dep-imports": "error",
"esm/no-relative-parent-imports": "error",
"esm/no-rename-exports": "error",
"esm/no-rename-imports": "error",
"esm/no-side-effect-imports": "error",
"esm/no-useless-path-segments": "error",
"esm/required-exports": "error",
"esm/top-side-effect-imports": "error",
// fp
"fp/no-arguments": "error",
"fp/no-delete": "error",
// import
"import/export": "error",
"import/first": "error",
// "import/newline-after-import": "error", // already handled by prettier's plugin `@ianvs/prettier-plugin-sort-imports`
"import/no-absolute-path": "error",
"import/no-commonjs": [
"error",
{
allowRequire: false,
allowConditionalRequire: false,
allowPrimitiveModules: false,
},
],
/**
* 1. The ESM specification didn’t say anything about interoperability with CommonJS. See: https://blog.andrewbran.ch/default-exports-in-commonjs-libraries/
* 2. Reexporting like `export * from 'foo'` will be difficult.
*/
"import/no-default-export": "error",
"import/no-duplicates": "error",
"import/no-dynamic-require": "error",
"import/no-empty-named-blocks": "error", // The feature of this rule is already handled by Prettier. But we still put it here.
"import/no-mutable-exports": "error", // forbid code like `export let count = 3`
"import/no-named-default": "error",
"import/no-relative-packages": "error", // forbid to import module from other monorepo packages by relative paths
"import/no-self-import": "error",
"import/no-webpack-loader-syntax": "error",
// n
"n/handle-callback-err": ["error", "^(err|error)$"],
"n/no-callback-literal": "error",
"n/no-deprecated-api": "error",
"n/no-exports-assign": "error",
"n/no-new-require": "error",
"n/no-path-concat": "error",
"n/no-process-exit": "error",
"n/no-unpublished-bin": "error",
"n/prefer-global/buffer": ["error", "never"],
"n/prefer-global/console": "error",
"n/prefer-global/process": ["error", "never"],
"n/prefer-global/text-decoder": "error",
"n/prefer-global/text-encoder": "error",
"n/prefer-global/url": "error",
"n/prefer-global/url-search-params": "error",
"n/process-exit-as-throw": "error",
// promise
"promise/no-return-wrap": "error",
"promise/param-names": "error",
"promise/prefer-catch": "error",
// react
// "react/hook-use-state": "error", // This rule will cause some warnings because we don't specify the version of react.
"react/jsx-filename-extension": [
"error",
{ allow: "as-needed", extensions: [".jsx", ".tsx"] },
],
"react/jsx-key": "error",
"react/jsx-no-duplicate-props": "error",
"react/jsx-no-undef": "error",
"react/jsx-no-useless-fragment": "error",
"react/jsx-props-no-spread-multi": "error",
"react/jsx-uses-vars": "error",
// react-hooks
"react-hooks/exhaustive-deps": "error",
"react-hooks/rules-of-hooks": "error",
// sonarjs
"sonarjs/no-collapsible-if": "error",
"sonarjs/no-all-duplicated-branches": "error",
"sonarjs/no-identical-conditions": "error",
"sonarjs/no-identical-expressions": "error",
"sonarjs/no-ignored-return": "error",
"sonarjs/no-inverted-boolean-check": "error",
"sonarjs/no-nested-switch": "error",
"sonarjs/no-useless-catch": "error",
"sonarjs/prefer-immediate-return": "error",
// unicorn
// 'unicorn/no-null': 'error', // null can be useful when interact with json.
"unicorn/consistent-assert": "error",
"unicorn/consistent-date-clone": "error",
"unicorn/consistent-destructuring": "error",
"unicorn/consistent-empty-array-spread": "error",
"unicorn/error-message": "error",
"unicorn/explicit-length-check": "error",
"unicorn/filename-case": [
"error",
{ cases: { kebabCase: true, pascalCase: true } },
],
"unicorn/import-style": [
"error",
{
styles: {
react: { named: true },
child_process: { default: true },
fs: { default: true },
"fs/promises": { default: true },
process: { default: true },
"util/types": { named: true },
"node:child_process": { default: true },
"node:fs": { default: true },
"node:fs/promises": { default: true },
"node:process": { default: true },
"node:util/types": { named: true },
},
},
],
"unicorn/new-for-builtins": "error",
"unicorn/no-abusive-eslint-disable": "error",
"unicorn/no-accessor-recursion": "error",
"unicorn/no-array-callback-reference": "error",
"unicorn/no-array-method-this-argument": "error",
"unicorn/no-await-in-promise-methods": "error",
"unicorn/no-for-loop": "error",
"unicorn/no-instanceof-builtins": "error",
"unicorn/no-lonely-if": "error",
"unicorn/no-named-default": "error",
"unicorn/no-negation-in-equality-check": "error",
"unicorn/no-new-array": "error",
"unicorn/no-new-buffer": "error",
"unicorn/no-process-exit": "error", // Prefer `n/no-process-exit`, but at the same time using this rule seems have no problem
"unicorn/no-single-promise-in-promise-methods": "error",
"unicorn/no-static-only-class": "error",
"unicorn/no-thenable": "error",
"unicorn/no-this-assignment": "error",
"unicorn/no-typeof-undefined": "error",
"unicorn/no-unreadable-array-destructuring": "error",
"unicorn/no-unreadable-iife": "error",
"unicorn/no-useless-fallback-in-spread": "error",
"unicorn/no-useless-spread": "error",
"unicorn/no-useless-switch-case": "error",
"unicorn/no-zero-fractions": "error",
"unicorn/prefer-array-flat-map": "error",
"unicorn/prefer-date-now": "error",
"unicorn/prefer-export-from": "error",
"unicorn/prefer-global-this": "error",
"unicorn/prefer-includes": "error",
"unicorn/prefer-logical-operator-over-ternary": "error",
"unicorn/prefer-math-min-max": "error",
"unicorn/prefer-module": "error",
"unicorn/prefer-negative-index": "error",
"unicorn/prefer-number-properties": "error",
"unicorn/prefer-object-from-entries": "error",
"unicorn/prefer-optional-catch-binding": "error",
"unicorn/prefer-regexp-test": "error",
"unicorn/prefer-string-replace-all": "error",
"unicorn/prefer-string-slice": "error",
"unicorn/prefer-ternary": "error",
"unicorn/require-array-join-separator": "error",
"unicorn/require-number-to-fixed-digits-argument": "error",
"unicorn/text-encoding-identifier-case": "error",
"unicorn/throw-new-error": "error",
"@fenge/call-arguments-length": "error",
"@fenge/no-instanceof-builtin": "error",
"@fenge/no-nested-class": "error",
"@fenge/no-nested-function": "error",
"@fenge/no-restricted-loops": "error",
"@fenge/no-top-level-arrow-function": "error",
"@fenge/no-unnecessary-template-string": "error",
"@typescript-eslint/ban-ts-comment": [
"error",
{
"ts-expect-error": true,
"ts-ignore": true,
"ts-nocheck": true,
},
],
"@typescript-eslint/no-this-alias": "error",
"@typescript-eslint/no-useless-empty-export": "error",
"@typescript-eslint/prefer-for-of": "error",
},
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25maWcvanMvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sUUFBUSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hELE9BQU8sYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sZUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxRQUFRLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxZQUFZLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxhQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxXQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLHNCQUFzQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sYUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sYUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUU5QixNQUFNLFVBQVUsU0FBUztJQUN2QiwwRkFBMEY7SUFDMUYsa0JBQWtCO0lBQ2xCLE1BQU0sbUJBQW1CLEdBQUc7UUFDMUIsUUFBUSxFQUFFLE9BQU87UUFDakIsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBRTNDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsRiwrQ0FBK0M7UUFDL0MsdUJBQXVCLEVB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LE9BQU87WUFDaEQsNEJBQTRCLEVBQUUsT0FBTztZQUNyQyxtQ0FBbUMsRUFBRSxPQUFPO1lBQzVDLDZCQUE2QixFQUFFLE9BQU87WUFDdEMsd0JBQXdCLEVBQUUsT0FBTztZQUNqQyxzQ0FBc0MsRUFBRSxPQUFPO1lBQy9DLGlEQUFpRCxFQUFFLE9BQU87WUFDMUQsdUNBQXVDLEVBQUUsT0FBTztZQUNoRCx5QkFBeUIsRUFBRSxPQUFPO1lBRWxDLDhCQUE4QixFQUFFLE9BQU87WUFDdkMsOEJBQThCLEVBQUUsT0FBTztZQUN2Qyx3QkFBd0IsRUFBRSxPQUFPO1lBQ2pDLDJCQUEyQixFQUFFLE9BQU87WUFDcEMsNEJBQTRCLEVBQUUsT0FBTztZQUNyQyxvQ0FBb0MsRUFBRSxPQUFPO1lBQzdDLHVDQUF1QyxFQUFFLE9BQU87WUFFaEQsbUNBQW1DLEVBQUU7Z0JBQ25DLE9BQU87Z0JBQ1A7b0JBQ0UsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLFlBQVksRUFBRSxJQUFJO2lCQUNuQjthQUNGO1lBQ0Qsa0NBQWtDLEVBQUUsT0FBTztZQUMzQyw0Q0FBNEMsRUFBRSxPQUFPO1lBQ3JELGtDQUFrQyxFQUFFLE9BQU87U0FDNUM7S0FDTyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZlbmdlUGx1Z2luIGZyb20gXCJAZmVuZ2UvZXNsaW50LXBsdWdpblwiO1xuaW1wb3J0IHRzUGx1Z2luIGZyb20gXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpblwiO1xuaW1wb3J0IGNvbmZ1c2luZ0tleXMgZnJvbSBcImNvbmZ1c2luZy1icm93c2VyLWdsb2JhbHNcIjtcbmltcG9ydCBjaGVja0ZpbGVQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tY2hlY2stZmlsZVwiO1xuaW1wb3J0IGVzeFBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1lcy14XCI7XG5pbXBvcnQgKiBhcyBlc21QbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tZXNtXCI7XG5pbXBvcnQgZnBQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tZnBcIjtcbmltcG9ydCBpbXBvcnRQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4taW1wb3J0XCI7XG5pbXBvcnQgblBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1uXCI7XG5pbXBvcnQgcHJvbWlzZVBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1wcm9taXNlXCI7XG5pbXBvcnQgcmVhY3RQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tcmVhY3RcIjtcbmltcG9ydCByZWFjdEhvb2tzUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXJlYWN0LWhvb2tzXCI7XG5pbXBvcnQgc2ltcGxlSW1wb3J0U29ydFBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1zaW1wbGUtaW1wb3J0LXNvcnRcIjtcbmltcG9ydCBzb25hcmpzUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXNvbmFyanNcIjtcbmltcG9ydCB1bmljb3JuUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXVuaWNvcm5cIjtcbmltcG9ydCBnbG9iYWxzIGZyb20gXCJnbG9iYWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKc0Jhc2UoKSB7XG4gIC8vIGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGFuZGFyZC9lc2xpbnQtY29uZmlnLXN0YW5kYXJkL2Jsb2IvbWFzdGVyL3NyYy9pbmRleC50c1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgY29uc3Qgc3RhbmRhcmRDb25maWdSdWxlcyA9IHtcbiAgICAnbm8tdmFyJzogJ2Vycm9yJyxcbiAgICAnb2JqZWN0LXNob3J0aGFuZCc6IFsnZXJyb3InLCAncHJvcGVydGllcyddLFxuXG4gICAgJ2FjY2Vzc29yLXBhaXJzJzogWydlcnJvcicsIHsgc2V0V2l0aG91dEdldDogdHJ1ZSwgZW5mb3JjZUZvckNsYXNzTWVtYmVyczogdHJ1ZSB9XSxcbiAgICAvLyAnYXJyYXktYnJhY2tldC1zcGFjaW5nJzogWydlcnJvcicsICduZXZlciddLFxuICAgICdhcnJheS1jYWxsYmFjay1yZXR1cm4nOiBbJ2Vycm9yJywge1xuICAgICAgYWxsb3dJbXBsaWNpdDogZmFsc2UsXG4gICAgICBjaGVja0ZvckVhY2g6IGZhbHNlXG4gICAgfV0sXG4gICAgLy8gJ2Fycm93LXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IHRydWUsIGFmdGVyOiB0cnVlIH1dLFxuICAgIC8vICdibG9jay1zcGFjaW5nJzogWydlcnJvcicsICdhbHdheXMnXSxcbiAgICAvLyAnYnJhY2Utc3R5bGUnOiBbJ2Vycm9yJywgJzF0YnMnLCB7IGFsbG93U2luZ2xlTGluZTogdHJ1ZSB9XSxcbiAgICBjYW1lbGNhc2U6IFsnZXJyb3InLCB7XG4gICAgICBhbGxvdzogWydeVU5TQUZFXyddLFxuICAgICAgcHJvcGVydGllczogJ25ldmVyJyxcbiAgICAgIGlnbm9yZUdsb2JhbHM6IHRydWVcbiAgICB9XSxcbiAgICAvLyAnY29tbWEtZGFuZ2xlJzogWydlcnJvcicsIHtcbiAgICAvLyAgIGFycmF5czogJ25ldmVyJyxcbiAgICAvLyAgIG9iamVjdHM6ICduZXZlcicsXG4gICAgLy8gICBpbXBvcnRzOiAnbmV2ZXInLFxuICAgIC8vICAgZXhwb3J0czogJ25ldmVyJyxcbiAgICAvLyAgIGZ1bmN0aW9uczogJ25ldmVyJ1xuICAgIC8vIH1dLFxuICAgIC8vICdjb21tYS1zcGFjaW5nJzogWydlcnJvcicsIHsgYmVmb3JlOiBmYWxzZSwgYWZ0ZXI6IHRydWUgfV0sXG4gICAgLy8gJ2NvbW1hLXN0eWxlJzogWydlcnJvcicsICdsYXN0J10sXG4gICAgLy8gJ2NvbXB1dGVkLXByb3BlcnR5LXNwYWNpbmcnOiBbJ2Vycm9yJywgJ25ldmVyJywgeyBlbmZvcmNlRm9yQ2xhc3NNZW1iZXJzOiB0cnVlIH1dLFxuICAgICdjb25zdHJ1Y3Rvci1zdXBlcic6ICdlcnJvcicsXG4gICAgLy8gY3VybHk6IFsnZXJyb3InLCAnbXVsdGktbGluZSddLFxuICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgLy8gJ2RvdC1sb2NhdGlvbic6IFsnZXJyb3InLCAncHJvcGVydHknXSxcbiAgICAvLyAnZG90LW5vdGF0aW9uJzogWydlcnJvcicsIHsgYWxsb3dLZXl3b3JkczogdHJ1ZSB9XSwgLy8gVE9ETzogVGhpcyBzaG91bGQgYmUgZW5hYmxlZC4gRGlzYWJsZSBpdCBhcyBpdCBjb25mbGljdHMgd2l0aCB0cyB3aGVuIGVuYWJsaW5nIHRzLWNoZWNrXG4gICAgLy8gJ2VvbC1sYXN0JzogJ2Vycm9yJyxcbiAgICBlcWVxZXE6IFsnZXJyb3InLCAnYWx3YXlzJywgeyBudWxsOiAnaWdub3JlJyB9XSxcbiAgICAvLyAnZnVuYy1jYWxsLXNwYWNpbmcnOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG4gICAgLy8gJ2dlbmVyYXRvci1zdGFyLXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IHRydWUsIGFmdGVyOiB0cnVlIH1dLFxuICAgIC8vIGluZGVudDogWydlcnJvcicsIDIsIHtcbiAgICAvLyAgIFN3aXRjaENhc2U6IDEsXG4gICAgLy8gICBWYXJpYWJsZURlY2xhcmF0b3I6IDEsXG4gICAgLy8gICBvdXRlcklJRkVCb2R5OiAxLFxuICAgIC8vICAgTWVtYmVyRXhwcmVzc2lvbjogMSxcbiAgICAvLyAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IHsgcGFyYW1ldGVyczogMSwgYm9keTogMSB9LFxuICAgIC8vICAgRnVuY3Rpb25FeHByZXNzaW9uOiB7IHBhcmFtZXRlcnM6IDEsIGJvZHk6IDEgfSxcbiAgICAvLyAgIENhbGxFeHByZXNzaW9uOiB7IGFyZ3VtZW50czogMSB9LFxuICAgIC8vICAgQXJyYXlFeHByZXNzaW9uOiAxLFxuICAgIC8vICAgT2JqZWN0RXhwcmVzc2lvbjogMSxcbiAgICAvLyAgIEltcG9ydERlY2xhcmF0aW9uOiAxLFxuICAgIC8vICAgZmxhdFRlcm5hcnlFeHByZXNzaW9uczogZmFsc2UsXG4gICAgLy8gICBpZ25vcmVDb21tZW50czogZmFsc2UsXG4gICAgLy8gICBpZ25vcmVkTm9kZXM6IFtcbiAgICAvLyAgICAgJ1RlbXBsYXRlTGl0ZXJhbCAqJyxcbiAgICAvLyAgICAgJ0pTWEVsZW1lbnQnLFxuICAgIC8vICAgICAnSlNYRWxlbWVudCA+IConLFxuICAgIC8vICAgICAnSlNYQXR0cmlidXRlJyxcbiAgICAvLyAgICAgJ0pTWElkZW50aWZpZXInLFxuICAgIC8vICAgICAnSlNYTmFtZXNwYWNlZE5hbWUnLFxuICAgIC8vICAgICAnSlNYTWVtYmVyRXhwcmVzc2lvbicsXG4gICAgLy8gICAgICdKU1hTcHJlYWRBdHRyaWJ1dGUnLFxuICAgIC8vICAgICAnSlNYRXhwcmVzc2lvbkNvbnRhaW5lcicsXG4gICAgLy8gICAgICdKU1hPcGVuaW5nRWxlbWVudCcsXG4gICAgLy8gICAgICdKU1hDbG9zaW5nRWxlbWVudCcsXG4gICAgLy8gICAgICdKU1hGcmFnbWVudCcsXG4gICAgLy8gICAgICdKU1hPcGVuaW5nRnJhZ21lbnQnLFxuICAgIC8vICAgICAnSlNYQ2xvc2luZ0ZyYWdtZW50JyxcbiAgICAvLyAgICAgJ0pTWFRleHQnLFxuICAgIC8vICAgICAnSlNYRW1wdHlFeHByZXNzaW9uJyxcbiAgICAvLyAgICAgJ0pTWFNwcmVhZENoaWxkJ1xuICAgIC8vICAgXSxcbiAgICAvLyAgIG9mZnNldFRlcm5hcnlFeHByZXNzaW9uczogdHJ1ZVxuICAgIC8vIH1dLFxuICAgIC8vICdrZXktc3BhY2luZyc6IFsnZXJyb3InLCB7IGJlZm9yZUNvbG9uOiBmYWxzZSwgYWZ0ZXJDb2xvbjogdHJ1ZSB9XSxcbiAgICAvLyAna2V5d29yZC1zcGFjaW5nJzogWydlcnJvcicsIHsgYmVmb3JlOiB0cnVlLCBhZnRlcjogdHJ1ZSB9XSxcbiAgICAvLyAnbGluZXMtYmV0d2Vlbi1jbGFzcy1tZW1iZXJzJzogWydlcnJvcicsICdhbHdheXMnLCB7IGV4Y2VwdEFmdGVyU2luZ2xlTGluZTogdHJ1ZSB9XSxcbiAgICAvLyAnbXVsdGlsaW5lLXRlcm5hcnknOiBbJ2Vycm9yJywgJ2Fsd2F5cy1tdWx0aWxpbmUnXSxcbiAgICAnbmV3LWNhcCc6IFsnZXJyb3InLCB7IG5ld0lzQ2FwOiB0cnVlLCBjYXBJc05ldzogZmFsc2UsIHByb3BlcnRpZXM6IHRydWUgfV0sXG4gICAgLy8gJ25ldy1wYXJlbnMnOiAnZXJyb3InLFxuICAgICduby1hcnJheS1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICAgJ25vLWFzeW5jLXByb21pc2UtZXhlY3V0b3InOiAnZXJyb3InLFxuICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICduby1jYXNlLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgJ25vLWNsYXNzLWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWNvbXBhcmUtbmVnLXplcm8nOiAnZXJyb3InLFxuICAgICduby1jb25kLWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWNvbnN0LWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWNvbnN0YW50LWNvbmRpdGlvbic6IFsnZXJyb3InLCB7IGNoZWNrTG9vcHM6IGZhbHNlIH1dLFxuICAgICduby1jb250cm9sLXJlZ2V4JzogJ2Vycm9yJyxcbiAgICAnbm8tZGVidWdnZXInOiAnZXJyb3InLFxuICAgICduby1kZWxldGUtdmFyJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwZS1hcmdzJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwZS1jbGFzcy1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwZS1rZXlzJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwbGljYXRlLWNhc2UnOiAnZXJyb3InLFxuICAgICduby11c2VsZXNzLWJhY2tyZWZlcmVuY2UnOiAnZXJyb3InLFxuICAgICduby1lbXB0eSc6IFsnZXJyb3InLCB7IGFsbG93RW1wdHlDYXRjaDogdHJ1ZSB9XSxcbiAgICAnbm8tZW1wdHktY2hhcmFjdGVyLWNsYXNzJzogJ2Vycm9yJyxcbiAgICAnbm8tZW1wdHktcGF0dGVybic6ICdlcnJvcicsXG4gICAgJ25vLWV2YWwnOiAnZXJyb3InLFxuICAgICduby1leC1hc3NpZ24nOiAnZXJyb3InLFxuICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAnbm8tZXh0cmEtYmluZCc6ICdlcnJvcicsXG4gICAgJ25vLWV4dHJhLWJvb2xlYW4tY2FzdCc6ICdlcnJvcicsXG4gICAgLy8gJ25vLWV4dHJhLXBhcmVucyc6IFsnZXJyb3InLCAnZnVuY3Rpb25zJ10sXG4gICAgJ25vLWZhbGx0aHJvdWdoJzogJ2Vycm9yJyxcbiAgICAvLyAnbm8tZmxvYXRpbmctZGVjaW1hbCc6ICdlcnJvcicsXG4gICAgJ25vLWZ1bmMtYXNzaWduJzogJ2Vycm9yJyxcbiAgICAnbm8tZ2xvYmFsLWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWltcGxpZWQtZXZhbCc6ICdlcnJvcicsXG4gICAgJ25vLWltcG9ydC1hc3NpZ24nOiAnZXJyb3InLFxuICAgICduby1pbnZhbGlkLXJlZ2V4cCc6ICdlcnJvcicsXG4gICAgJ25vLWlycmVndWxhci13aGl0ZXNwYWNlJzogJ2Vycm9yJyxcbiAgICAnbm8taXRlcmF0b3InOiAnZXJyb3InLFxuICAgICduby1sYWJlbHMnOiBbJ2Vycm9yJywgeyBhbGxvd0xvb3A6IGZhbHNlLCBhbGxvd1N3aXRjaDogZmFsc2UgfV0sXG4gICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAnbm8tbG9zcy1vZi1wcmVjaXNpb24nOiAnZXJyb3InLFxuICAgICduby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzcyc6ICdlcnJvcicsXG4gICAgJ25vLXByb3RvdHlwZS1idWlsdGlucyc6ICdlcnJvcicsXG4gICAgJ25vLXVzZWxlc3MtY2F0Y2gnOiAnZXJyb3InLFxuICAgIC8vICduby1taXhlZC1vcGVyYXRvcnMnOiBbJ2Vycm9yJywge1xuICAgIC8vICAgZ3JvdXBzOiBbXG4gICAgLy8gICAgIFsnPT0nLCAnIT0nLCAnPT09JywgJyE9PScsICc+JywgJz49JywgJzwnLCAnPD0nXSxcbiAgICAvLyAgICAgWycmJicsICd8fCddLFxuICAgIC8vICAgICBbJ2luJywgJ2luc3RhbmNlb2YnXVxuICAgIC8vICAgXSxcbiAgICAvLyAgIGFsbG93U2FtZVByZWNlZGVuY2U6IHRydWVcbiAgICAvLyB9XSxcbiAgICAvLyAnbm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzJzogJ2Vycm9yJyxcbiAgICAvLyAnbm8tbXVsdGktc3BhY2VzJzogJ2Vycm9yJyxcbiAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAvLyAnbm8tbXVsdGlwbGUtZW1wdHktbGluZXMnOiBbJ2Vycm9yJywgeyBtYXg6IDEsIG1heEJPRjogMCwgbWF4RU9GOiAwIH1dLFxuICAgICduby1uZXcnOiAnZXJyb3InLFxuICAgICduby1uZXctZnVuYyc6ICdlcnJvcicsXG4gICAgLy8gJ25vLW5ldy1vYmplY3QnOiAnZXJyb3InLFxuICAgIC8vICduby1uZXctc3ltYm9sJzogJ2Vycm9yJyxcbiAgICAnbm8tbmV3LXdyYXBwZXJzJzogJ2Vycm9yJyxcbiAgICAnbm8tb2JqLWNhbGxzJzogJ2Vycm9