UNPKG

@git-validator/eslint-config

Version:
381 lines 46.9 kB
import gitValidatorPlugin from "@git-validator/eslint-plugin"; import confusingKeys from "confusing-browser-globals"; 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 unicornPlugin from "eslint-plugin-unicorn"; import globals from "globals"; // 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', 'no-this-before-super': 'error', 'no-throw-literal': 'error', // 'no-trailing-spaces': 'error', 'no-undef': 'error', 'no-undef-init': 'error', // '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', { 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'], 'import/export': 'error', 'import/first': 'error', 'import/no-absolute-path': ['error', { esmodule: true, commonjs: true, amd: false }], 'import/no-duplicates': 'error', 'import/no-named-default': 'error', 'import/no-webpack-loader-syntax': 'error', '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/process-exit-as-throw': 'error', 'promise/param-names': 'error' }; export default { files: ["**/*.{js,cjs,mjs,jsx}"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true, }, }, globals: { // TODO Optimize it. Node code should not use browser's objects. ...Object.fromEntries(Object.entries(globals.browser).filter(([k]) => !confusingKeys.includes(k))), }, }, linterOptions: { // noInlineConfig: true, // too strict reportUnusedDisableDirectives: true, }, plugins: { fp: fpPlugin, n: nPlugin, import: importPlugin, promise: promisePlugin, react: reactPlugin, "react-hooks": reactHooksPlugin, unicorn: unicornPlugin, "simple-import-sort": simpleImportSortPlugin, "@git-validator": gitValidatorPlugin, }, /** * @type {Record<string, unknown>} */ rules: { // 1. standard config rules ...standardConfigRules, // 2. code style for a better readability "arrow-body-style": ["error", "as-needed"], "import/newline-after-import": ["error", { count: 1 }], "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 "func-name-matching": "error", "init-declarations": "error", "max-params": ["error", { max: 4 }], "no-duplicate-imports": "error", "no-implicit-coercion": [ "error", { disallowTemplateShorthand: true, allow: ["!!"] }, ], // forbid code like `const num = +str`; "no-invalid-this": "error", "no-multi-assign": "error", "no-plusplus": "error", "no-shadow": ["error", { ignoreOnInitialization: true }], "no-unused-private-class-members": "error", "prefer-exponentiation-operator": "error", "prefer-object-has-own": "error", // fp "fp/no-arguments": "error", "fp/no-delete": "error", // import "import/extensions": ["error", "always", { ignorePackages: true }], "import/no-commonjs": [ "error", { allowRequire: false, allowConditionalRequire: false, allowPrimitiveModules: false, }, ], "import/no-dynamic-require": "error", "import/no-mutable-exports": "error", // forbid code like `export let count = 3` "import/no-relative-packages": "error", // forbid to import module from other monorepo packages by relative paths "import/no-self-import": "error", // n "n/no-sync": "error", "n/prefer-global/process": ["error", "never"], "n/prefer-global/buffer": ["error", "never"], // react "react/jsx-key": "error", "react/jsx-no-duplicate-props": "error", "react/jsx-no-undef": "error", // react-hooks "react-hooks/exhaustive-deps": "error", "react-hooks/rules-of-hooks": "error", // unicorn // 'unicorn/no-null': 'error', // null can be useful when interact with json. "unicorn/consistent-destructuring": "error", "unicorn/error-message": "error", "unicorn/filename-case": [ "error", { cases: { kebabCase: true, pascalCase: true } }, ], // TODO remove the options when https://github.com/sindresorhus/eslint-plugin-unicorn/pull/2297 merged "unicorn/import-style": [ "error", { styles: { "node:path": { default: true, }, "node:util": { named: true, }, }, }, ], "unicorn/new-for-builtins": "error", "unicorn/no-abusive-eslint-disable": "error", "unicorn/no-array-callback-reference": "error", "unicorn/no-for-loop": "error", "unicorn/no-instanceof-array": "error", "unicorn/no-new-array": "error", "unicorn/no-new-buffer": "error", "unicorn/no-typeof-undefined": "error", "unicorn/no-unreadable-iife": "error", "unicorn/prefer-array-flat-map": "error", "unicorn/prefer-module": "error", "unicorn/prefer-number-properties": "error", "unicorn/prefer-string-slice": "error", "unicorn/throw-new-error": "error", "@git-validator/ban-ts-comment": "error", "@git-validator/import-regex": "error", "@git-validator/new-parens": "error", "@git-validator/no-dynamic-import": "error", "@git-validator/no-for-in": "error", "@git-validator/no-instanceof-builtin": "error", "@git-validator/no-legacy-getter-setter": "error", "@git-validator/prefer-global-this": "error", "@git-validator/prefer-shortest-relative-path": "error", }, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2pzLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGtCQUFrQixNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sUUFBUSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sWUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sYUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sV0FBVyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxzQkFBc0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLGFBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFFOUIsMEZBQTBGO0FBQzFGLGtCQUFrQjtBQUNsQixNQUFNLG1CQUFtQixHQUFHO0lBQzFCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLGtCQUFrQixFQUFFLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztJQUUzQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEYsK0NBQStDO0lBQy9DLHVCQUF1QixFQUFFLENBQUMsT0FBTyxFQUFFO1lBQ2pDLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUM7SUFDRiw2REFBNkQ7SUFDN0Qsd0NBQXdDO0lBQ3hDLCtEQUErRDtJQUMvRCxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDbkIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ25CLFVBQVUsRUFBRSxPQUFPO1lBQ25CLGFB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QUU7U0FDakQ7UUFDRCxzR0FBc0c7UUFDdEcsc0JBQXNCLEVBQUU7WUFDdEIsT0FBTztZQUNQO2dCQUNFLE1BQU0sRUFBRTtvQkFDTixXQUFXLEVBQUU7d0JBQ1gsT0FBTyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLEtBQUssRUFBRSxJQUFJO3FCQUNaO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELDBCQUEwQixFQUFFLE9BQU87UUFDbkMsbUNBQW1DLEVBQUUsT0FBTztRQUM1QyxxQ0FBcUMsRUFBRSxPQUFPO1FBQzlDLHFCQUFxQixFQUFFLE9BQU87UUFDOUIsNkJBQTZCLEVBQUUsT0FBTztRQUN0QyxzQkFBc0IsRUFBRSxPQUFPO1FBQy9CLHVCQUF1QixFQUFFLE9BQU87UUFDaEMsNkJBQTZCLEVBQUUsT0FBTztRQUN0Qyw0QkFBNEIsRUFBRSxPQUFPO1FBQ3JDLCtCQUErQixFQUFFLE9BQU87UUFDeEMsdUJBQXVCLEVBQUUsT0FBTztRQUNoQyxrQ0FBa0MsRUFBRSxPQUFPO1FBQzNDLDZCQUE2QixFQUFFLE9BQU87UUFDdEMseUJBQXlCLEVBQUUsT0FBTztRQUVsQywrQkFBK0IsRUFBRSxPQUFPO1FBQ3hDLDZCQUE2QixFQUFFLE9BQU87UUFDdEMsMkJBQTJCLEVBQUUsT0FBTztRQUNwQyxrQ0FBa0MsRUFBRSxPQUFPO1FBQzNDLDBCQUEwQixFQUFFLE9BQU87UUFDbkMsc0NBQXNDLEVBQUUsT0FBTztRQUMvQyx3Q0FBd0MsRUFBRSxPQUFPO1FBQ2pELG1DQUFtQyxFQUFFLE9BQU87UUFDNUMsOENBQThDLEVBQUUsT0FBTztLQUN4RDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2l0VmFsaWRhdG9yUGx1Z2luIGZyb20gXCJAZ2l0LXZhbGlkYXRvci9lc2xpbnQtcGx1Z2luXCI7XG5pbXBvcnQgY29uZnVzaW5nS2V5cyBmcm9tIFwiY29uZnVzaW5nLWJyb3dzZXItZ2xvYmFsc1wiO1xuaW1wb3J0IGZwUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLWZwXCI7XG5pbXBvcnQgaW1wb3J0UGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiO1xuaW1wb3J0IG5QbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tblwiO1xuaW1wb3J0IHByb21pc2VQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tcHJvbWlzZVwiO1xuaW1wb3J0IHJlYWN0UGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXJlYWN0XCI7XG5pbXBvcnQgcmVhY3RIb29rc1BsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rc1wiO1xuaW1wb3J0IHNpbXBsZUltcG9ydFNvcnRQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tc2ltcGxlLWltcG9ydC1zb3J0XCI7XG5pbXBvcnQgdW5pY29yblBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi11bmljb3JuXCI7XG5pbXBvcnQgZ2xvYmFscyBmcm9tIFwiZ2xvYmFsc1wiO1xuXG4vLyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc3RhbmRhcmQvZXNsaW50LWNvbmZpZy1zdGFuZGFyZC9ibG9iL21hc3Rlci9zcmMvaW5kZXgudHNcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3Qgc3RhbmRhcmRDb25maWdSdWxlcyA9IHtcbiAgJ25vLXZhcic6ICdlcnJvcicsXG4gICdvYmplY3Qtc2hvcnRoYW5kJzogWydlcnJvcicsICdwcm9wZXJ0aWVzJ10sXG5cbiAgJ2FjY2Vzc29yLXBhaXJzJzogWydlcnJvcicsIHsgc2V0V2l0aG91dEdldDogdHJ1ZSwgZW5mb3JjZUZvckNsYXNzTWVtYmVyczogdHJ1ZSB9XSxcbiAgLy8gJ2FycmF5LWJyYWNrZXQtc3BhY2luZyc6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgJ2FycmF5LWNhbGxiYWNrLXJldHVybic6IFsnZXJyb3InLCB7XG4gICAgYWxsb3dJbXBsaWNpdDogZmFsc2UsXG4gICAgY2hlY2tGb3JFYWNoOiBmYWxzZVxuICB9XSxcbiAgLy8gJ2Fycm93LXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IHRydWUsIGFmdGVyOiB0cnVlIH1dLFxuICAvLyAnYmxvY2stc3BhY2luZyc6IFsnZXJyb3InLCAnYWx3YXlzJ10sXG4gIC8vICdicmFjZS1zdHlsZSc6IFsnZXJyb3InLCAnMXRicycsIHsgYWxsb3dTaW5nbGVMaW5lOiB0cnVlIH1dLFxuICBjYW1lbGNhc2U6IFsnZXJyb3InLCB7XG4gICAgYWxsb3c6IFsnXlVOU0FGRV8nXSxcbiAgICBwcm9wZXJ0aWVzOiAnbmV2ZXInLFxuICAgIGlnbm9yZUdsb2JhbHM6IHRydWVcbiAgfV0sXG4gIC8vICdjb21tYS1kYW5nbGUnOiBbJ2Vycm9yJywge1xuICAvLyAgIGFycmF5czogJ25ldmVyJyxcbiAgLy8gICBvYmplY3RzOiAnbmV2ZXInLFxuICAvLyAgIGltcG9ydHM6ICduZXZlcicsXG4gIC8vICAgZXhwb3J0czogJ25ldmVyJyxcbiAgLy8gICBmdW5jdGlvbnM6ICduZXZlcidcbiAgLy8gfV0sXG4gIC8vICdjb21tYS1zcGFjaW5nJzogWydlcnJvcicsIHsgYmVmb3JlOiBmYWxzZSwgYWZ0ZXI6IHRydWUgfV0sXG4gIC8vICdjb21tYS1zdHlsZSc6IFsnZXJyb3InLCAnbGFzdCddLFxuICAvLyAnY29tcHV0ZWQtcHJvcGVydHktc3BhY2luZyc6IFsnZXJyb3InLCAnbmV2ZXInLCB7IGVuZm9yY2VGb3JDbGFzc01lbWJlcnM6IHRydWUgfV0sXG4gICdjb25zdHJ1Y3Rvci1zdXBlcic6ICdlcnJvcicsXG4gIC8vIGN1cmx5OiBbJ2Vycm9yJywgJ211bHRpLWxpbmUnXSxcbiAgJ2RlZmF1bHQtY2FzZS1sYXN0JzogJ2Vycm9yJyxcbiAgLy8gJ2RvdC1sb2NhdGlvbic6IFsnZXJyb3InLCAncHJvcGVydHknXSxcbiAgLy8gJ2RvdC1ub3RhdGlvbic6IFsnZXJyb3InLCB7IGFsbG93S2V5d29yZHM6IHRydWUgfV0sIC8vIFRPRE86IFRoaXMgc2hvdWxkIGJlIGVuYWJsZWQuIERpc2FibGUgaXQgYXMgaXQgY29uZmxpY3RzIHdpdGggdHMgd2hlbiBlbmFibGluZyB0cy1jaGVja1xuICAvLyAnZW9sLWxhc3QnOiAnZXJyb3InLFxuICBlcWVxZXE6IFsnZXJyb3InLCAnYWx3YXlzJywgeyBudWxsOiAnaWdub3JlJyB9XSxcbiAgLy8gJ2Z1bmMtY2FsbC1zcGFjaW5nJzogWydlcnJvcicsICduZXZlciddLFxuICAvLyAnZ2VuZXJhdG9yLXN0YXItc3BhY2luZyc6IFsnZXJyb3InLCB7IGJlZm9yZTogdHJ1ZSwgYWZ0ZXI6IHRydWUgfV0sXG4gIC8vIGluZGVudDogWydlcnJvcicsIDIsIHtcbiAgLy8gICBTd2l0Y2hDYXNlOiAxLFxuICAvLyAgIFZhcmlhYmxlRGVjbGFyYXRvcjogMSxcbiAgLy8gICBvdXRlcklJRkVCb2R5OiAxLFxuICAvLyAgIE1lbWJlckV4cHJlc3Npb246IDEsXG4gIC8vICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogeyBwYXJhbWV0ZXJzOiAxLCBib2R5OiAxIH0sXG4gIC8vICAgRnVuY3Rpb25FeHByZXNzaW9uOiB7IHBhcmFtZXRlcnM6IDEsIGJvZHk6IDEgfSxcbiAgLy8gICBDYWxsRXhwcmVzc2lvbjogeyBhcmd1bWVudHM6IDEgfSxcbiAgLy8gICBBcnJheUV4cHJlc3Npb246IDEsXG4gIC8vICAgT2JqZWN0RXhwcmVzc2lvbjogMSxcbiAgLy8gICBJbXBvcnREZWNsYXJhdGlvbjogMSxcbiAgLy8gICBmbGF0VGVybmFyeUV4cHJlc3Npb25zOiBmYWxzZSxcbiAgLy8gICBpZ25vcmVDb21tZW50czogZmFsc2UsXG4gIC8vICAgaWdub3JlZE5vZGVzOiBbXG4gIC8vICAgICAnVGVtcGxhdGVMaXRlcmFsIConLFxuICAvLyAgICAgJ0pTWEVsZW1lbnQnLFxuICAvLyAgICAgJ0pTWEVsZW1lbnQgPiAqJyxcbiAgLy8gICAgICdKU1hBdHRyaWJ1dGUnLFxuICAvLyAgICAgJ0pTWElkZW50aWZpZXInLFxuICAvLyAgICAgJ0pTWE5hbWVzcGFjZWROYW1lJyxcbiAgLy8gICAgICdKU1hNZW1iZXJFeHByZXNzaW9uJyxcbiAgLy8gICAgICdKU1hTcHJlYWRBdHRyaWJ1dGUnLFxuICAvLyAgICAgJ0pTWEV4cHJlc3Npb25Db250YWluZXInLFxuICAvLyAgICAgJ0pTWE9wZW5pbmdFbGVtZW50JyxcbiAgLy8gICAgICdKU1hDbG9zaW5nRWxlbWVudCcsXG4gIC8vICAgICAnSlNYRnJhZ21lbnQnLFxuICAvLyAgICAgJ0pTWE9wZW5pbmdGcmFnbWVudCcsXG4gIC8vICAgICAnSlNYQ2xvc2luZ0ZyYWdtZW50JyxcbiAgLy8gICAgICdKU1hUZXh0JyxcbiAgLy8gICAgICdKU1hFbXB0eUV4cHJlc3Npb24nLFxuICAvLyAgICAgJ0pTWFNwcmVhZENoaWxkJ1xuICAvLyAgIF0sXG4gIC8vICAgb2Zmc2V0VGVybmFyeUV4cHJlc3Npb25zOiB0cnVlXG4gIC8vIH1dLFxuICAvLyAna2V5LXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmVDb2xvbjogZmFsc2UsIGFmdGVyQ29sb246IHRydWUgfV0sXG4gIC8vICdrZXl3b3JkLXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IHRydWUsIGFmdGVyOiB0cnVlIH1dLFxuICAnbGluZXMtYmV0d2Vlbi1jbGFzcy1tZW1iZXJzJzogWydlcnJvcicsICdhbHdheXMnLCB7IGV4Y2VwdEFmdGVyU2luZ2xlTGluZTogdHJ1ZSB9XSxcbiAgLy8gJ211bHRpbGluZS10ZXJuYXJ5JzogWydlcnJvcicsICdhbHdheXMtbXVsdGlsaW5lJ10sXG4gICduZXctY2FwJzogWydlcnJvcicsIHsgbmV3SXNDYXA6IHRydWUsIGNhcElzTmV3OiBmYWxzZSwgcHJvcGVydGllczogdHJ1ZSB9XSxcbiAgLy8gJ25ldy1wYXJlbnMnOiAnZXJyb3InLFxuICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAnbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvcic6ICdlcnJvcicsXG4gICduby1jYWxsZXInOiAnZXJyb3InLFxuICAnbm8tY2FzZS1kZWNsYXJhdGlvbnMnOiAnZXJyb3InLFxuICAnbm8tY2xhc3MtYXNzaWduJzogJ2Vycm9yJyxcbiAgJ25vLWNvbXBhcmUtbmVnLXplcm8nOiAnZXJyb3InLFxuICAnbm8tY29uZC1hc3NpZ24nOiAnZXJyb3InLFxuICAnbm8tY29uc3QtYXNzaWduJzogJ2Vycm9yJyxcbiAgJ25vLWNvbnN0YW50LWNvbmRpdGlvbic6IFsnZXJyb3InLCB7IGNoZWNrTG9vcHM6IGZhbHNlIH1dLFxuICAnbm8tY29udHJvbC1yZWdleCc6ICdlcnJvcicsXG4gICduby1kZWJ1Z2dlcic6ICdlcnJvcicsXG4gICduby1kZWxldGUtdmFyJzogJ2Vycm9yJyxcbiAgJ25vLWR1cGUtYXJncyc6ICdlcnJvcicsXG4gICduby1kdXBlLWNsYXNzLW1lbWJlcnMnOiAnZXJyb3InLFxuICAnbm8tZHVwZS1rZXlzJzogJ2Vycm9yJyxcbiAgJ25vLWR1cGxpY2F0ZS1jYXNlJzogJ2Vycm9yJyxcbiAgJ25vLXVzZWxlc3MtYmFja3JlZmVyZW5jZSc6ICdlcnJvcicsXG4gICduby1lbXB0eSc6IFsnZXJyb3InLCB7IGFsbG93RW1wdHlDYXRjaDogdHJ1ZSB9XSxcbiAgJ25vLWVtcHR5LWNoYXJhY3Rlci1jbGFzcyc6ICdlcnJvcicsXG4gICduby1lbXB0eS1wYXR0ZXJuJzogJ2Vycm9yJyxcbiAgJ25vLWV2YWwnOiAnZXJyb3InLFxuICAnbm8tZXgtYXNzaWduJzogJ2Vycm9yJyxcbiAgJ25vLWV4dGVuZC1uYXRpdmUnOiAnZXJyb3InLFxuICAnbm8tZXh0cmEtYmluZCc6ICdlcnJvcicsXG4gICduby1leHRyYS1ib29sZWFuLWNhc3QnOiAnZXJyb3InLFxuICAvLyAnbm8tZXh0cmEtcGFyZW5zJzogWydlcnJvcicsICdmdW5jdGlvbnMnXSxcbiAgJ25vLWZhbGx0aHJvdWdoJzogJ2Vycm9yJyxcbiAgLy8gJ25vLWZsb2F0aW5nLWRlY2ltYWwnOiAnZXJyb3InLFxuICAnbm8tZnVuYy1hc3NpZ24nOiAnZXJyb3InLFxuICAnbm8tZ2xvYmFsLWFzc2lnbic6ICdlcnJvcicsXG4gICduby1pbXBsaWVkLWV2YWwnOiAnZXJyb3InLFxuICAnbm8taW1wb3J0LWFzc2lnbic6ICdlcnJvcicsXG4gICduby1pbnZhbGlkLXJlZ2V4cCc6ICdlcnJvcicsXG4gICduby1pcnJlZ3VsYXItd2hpdGVzcGFjZSc6ICdlcnJvcicsXG4gICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICduby1sYWJlbHMnOiBbJ2Vycm9yJywgeyBhbGxvd0xvb3A6IGZhbHNlLCBhbGxvd1N3aXRjaDogZmFsc2UgfV0sXG4gICduby1sb25lLWJsb2Nrcyc6ICdlcnJvcicsXG4gICduby1sb3NzLW9mLXByZWNpc2lvbic6ICdlcnJvcicsXG4gICduby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzcyc6ICdlcnJvcicsXG4gICduby1wcm90b3R5cGUtYnVpbHRpbnMnOiAnZXJyb3InLFxuICAnbm8tdXNlbGVzcy1jYXRjaCc6ICdlcnJvcicsXG4gIC8vICduby1taXhlZC1vcGVyYXRvcnMnOiBbJ2Vycm9yJywge1xuICAvLyAgIGdyb3VwczogW1xuICAvLyAgICAgWyc9PScsICchPScsICc9PT0nLCAnIT09JywgJz4nLCAnPj0nLCAnPCcsICc8PSddLFxuICAvLyAgICAgWycmJicsICd8fCddLFxuICAvLyAgICAgWydpbicsICdpbnN0YW5jZW9mJ11cbiAgLy8gICBdLFxuICAvLyAgIGFsbG93U2FtZVByZWNlZGVuY2U6IHRydWVcbiAgLy8gfV0sXG4gIC8vICduby1taXhlZC1zcGFjZXMtYW5kLXRhYnMnOiAnZXJyb3InLFxuICAvLyAnbm8tbXVsdGktc3BhY2VzJzogJ2Vycm9yJyxcbiAgJ25vLW11bHRpLXN0cic6ICdlcnJvcicsXG4gIC8vICduby1tdWx0aXBsZS1lbXB0eS1saW5lcyc6IFsnZXJyb3InLCB7IG1heDogMSwgbWF4Qk9GOiAwLCBtYXhFT0Y6IDAgfV0sXG4gICduby1uZXcnOiAnZXJyb3InLFxuICAnbm8tbmV3LWZ1bmMnOiAnZXJyb3InLFxuICAnbm8tbmV3LW9iamVjdCc6ICdlcnJvcicsXG4gICduby1uZXctc3ltYm9sJzogJ2Vycm9yJyxcbiAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICduby1vYmotY2FsbHMnOiAnZXJyb3InLFxuICAnbm8tb2N0YWwnOiAnZXJyb3InLFxuICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgJ25vLXJlZGVjbGFyZSc6IFsnZXJyb3InLCB7IGJ1aWx0aW5HbG9iYWxzOiBmYWxzZSB9XSxcbiAgJ25vLXJlZ2V4LXNwYWNlcyc6ICdlcnJvcicsXG4gICduby1yZXR1cm4tYXNzaWduJzogWydlcnJvcicsICdleGNlcHQtcGFyZW5zJ10sXG4gICduby1zZWxmLWFzc2lnbic6IFsnZXJyb3InLCB7IHByb3BzOiB0cnVlIH1dLFxuICAnbm8tc2VsZi1jb21wYXJlJzogJ2Vycm9yJyxcbiAgJ25vLXNlcXVlbmNlcyc6ICdlcnJvcicsXG4gICduby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyc6ICdlcnJvcicsXG4gICduby1zcGFyc2UtYXJyYXlzJzogJ2Vycm9yJyxcbiAgLy8gJ25vLXRhYnMnOiAnZXJyb3InLFxuICAnbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nJzogJ2Vycm9yJyxcbiAgJ25vLXRoaXMtYmVmb3JlLXN1cGVyJzogJ2Vycm9yJyxcbiAgJ25vLXRocm93LWxpdGVyYWwnOiAnZXJyb3InLFxuICAvLyAnbm8tdHJhaWxpbmctc3BhY2VzJzogJ2Vycm9yJyxcbiAgJ25vLXVuZGVmJzogJ2Vycm9yJyxcbiAgJ25vLXVuZGVmLWluaXQnOiAnZXJyb3InLFxuICAvLyAnbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUnOiAnZXJyb3InLFxuICAnbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbic6ICdlcnJvcicsXG4gICduby11bm5lZWRlZC10ZXJuYXJ5JzogWydlcnJvcicsIHsgZGVmYXVsdEFzc2lnbm1lbnQ6IGZhbHNlIH1dLFxuICAnbm8tdW5yZWFjaGFibGUnOiAnZXJyb3InLFxuICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICduby11bnNhZmUtZmluYWxseSc6ICdlcnJvcicsXG4gICduby11bnNhZmUtbmVnYXRpb24nOiAnZXJyb3InLFxuICAnbm8tdW51c2VkLWV4cHJlc3Npb25zJzogWydlcnJvcicsIHtcbiAgICBhbGxvd1Nob3J0Q2lyY3VpdDogdHJ1ZSxcbiAgICBhbGxvd1Rlcm5hcnk6IHRydWUsXG4gICAgYWxsb3dUYWdnZWRUZW1wbGF0ZXM6IHRydWVcbiAgfV0sXG4gICduby11bnVzZWQtdmFycyc6IFsnZXJyb3InLCB7XG4gICAgYXJnczogJ25vbmUnLFxuICAgIGNhdWdodEVycm9yczogJ25vbmUnLFxuICAgIGlnbm9yZVJlc3RTaWJsaW5nczogdHJ1ZSxcbiAgICB2YXJzOiAnYWxsJ1xuICB9XSxcbiAgJ25vLXVzZS1iZWZvcmUtZGVmaW5lJzogWydlcnJvcicsIHsgZnVuY3Rpb25zOiBmYWxzZSwgY2xhc3NlczogZmFsc2UsIHZhcmlhYmxlczogZmFsc2UgfV0sXG4gICduby11c2VsZXNzLWNhbGwnOiAnZXJyb3InLFxuICAnbm8tdXNlbGVzcy1jb21wdXRlZC1rZXknOiAnZXJyb3InLFxuICAnbm8tdXNlbGVzcy1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICduby11c2VsZXNzLWVzY2FwZSc6ICdlcnJvcicsXG4gICduby11c2VsZXNzLXJlbmFtZSc6ICdlcnJvcicsXG4gICduby11c2VsZXNzLXJldHVybic6ICdlcnJvcicsXG4gICduby12b2lkJzogJ2Vycm9yJyxcbiAgLy8gJ25vLXdoaXRlc3BhY2UtYmVmb3JlLXByb3BlcnR5JzogJ2Vycm9yJyxcbiAgJ25vLXdpdGgnOiAnZXJyb3InLFxuICAvLyAnb2JqZWN0LWN1cmx5LW5ld2xpbmUnOiBbJ2Vycm9yJywgeyBtdWx0aWxpbmU6IHRydWUsIGNvbnNpc3RlbnQ6IHRydWUgfV0sXG4gIC8vICdvYmplY3QtY3VybHktc3BhY2luZyc6IFsnZXJyb3InLCAnYWx3YXlzJ10sXG4gIC8vICdvYmplY3QtcHJvcGVydHktbmV3bGluZSc6IFsnZXJyb3InLCB7IGFsbG93TXVsdGlwbGVQcm9wZXJ0aWVzUGVyTGluZTogdHJ1ZSB9XSxcbiAgJ29uZS12YXInOiBbJ2Vycm9yJywgeyBpbml0aWFsaXplZDogJ25ldmVyJyB9XSxcbiAgLy8gJ29wZXJhdG9yLWxpbmVicmVhayc6IFsnZXJyb3InLCAnYWZ0ZXInLCB7IG92ZXJyaWRlczogeyAnPyc6ICdiZWZvcmUnLCAnOic6ICdiZWZvcmUnLCAnfD4nOiAnYmVmb3JlJyB9IH1dLFxuICAvLyAncGFkZGVkLWJsb2Nrcyc6IFsnZXJyb3InLCB7IGJsb2NrczogJ25ldmVyJywgc3dpdGNoZXM6ICduZXZlcicsIGNsYXNzZXM6ICduZXZlcicgfV0sXG4gICdwcmVmZXItY29uc3QnOiBbJ2Vycm9yJywgeyBkZXN0cnVjdHVyaW5nOiAnYWxsJyB9XSxcbiAgJ3ByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnMnOiAnZXJyb3InLFxuICAncHJlZmVyLXJlZ2V4LWxpdGVyYWxzJzogWydlcnJvcicsIHsgZGlzYWxsb3dSZWR1bmRhbnRXcmFwcGluZzogdHJ1ZSB9XSxcbiAgLy8gJ3F1b3RlLXByb3BzJzogWydlcnJvcicsICdhcy1uZWVkZWQnXSxcbiAgLy8gcXVvdGVzOiBbJ2Vycm9yJywgJ3NpbmdsZScsIHsgYXZvaWRFc2NhcGU6IHRydWUsIGFsbG93VGVtcGxhdGVMaXRlcmFsczogZmFsc2UgfV0sXG4gIC8vICdyZXN0LXNwcmVhZC1zcGFjaW5nJzogWydlcnJvcicsICduZXZlciddLFxuICAvLyBzZW1pOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG4gIC8vICdzZW1pLXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IGZhbHNlLCBhZnRlcjogdHJ1ZSB9XSxcbiAgLy8gJ3NwYWNlLWJlZm9yZS1ibG9ja3MnOiBbJ2Vycm9yJywgJ2Fsd2F5cyddLFxuICAvLyAnc3BhY2UtYmVmb3JlLWZ1bmN0aW9uLXBhcmVuJzogWydlcnJvcicsICdhbHdheXMnXSxcbiAgLy8gJ3NwYWNlLWluLXBhcmVucyc6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgLy8gJ3NwYWNlLWluZml4LW9wcyc6ICdlcnJvcicsXG4gIC8vICdzcGFjZS11bmFyeS1vcHMnOiBbJ2Vycm9yJywgeyB3b3JkczogdHJ1ZSwgbm9ud29yZHM6IGZhbHNlIH1dLFxuICAnc3BhY2VkLWNvbW1lbnQnOiBbJ2Vycm9yJywgJ2Fsd2F5cycsIHtcbiAgICBsaW5lOiB7IG1hcmtlcnM6IFsnKnBhY2thZ2UnLCAnIScsICcvJywgJywnLCAnPSddIH0sXG4gICAgYmxvY2s6IHsgYmFsYW5jZWQ6IHRydWUsIG1hcmtlcnM6IFsnKnBhY2thZ2UnLCAnIScsICcsJywgJzonLCAnOjonLCAnZmxvdy1pbmNsdWRlJ10sIGV4Y2VwdGlvbnM6IFsnKiddIH1cbiAgfV0sXG4gICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAvLyAndGVtcGxhdGUtY3VybHktc3BhY2luZyc6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgLy8gJ3RlbXBsYXRlLXRhZy1zcGFjaW5nJzogWydlcnJvcicsICduZXZlciddLFxuICAndW5pY29kZS1ib20nOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG4gICd1c2UtaXNuYW4nOiBbJ2Vycm9yJywge1xuICAgIGVuZm9yY2VGb3JTd2l0Y2hDYXNlOiB0cnVlLFxuICAgIGVuZm9yY2VGb3JJbmRleE9mOiB0cnVlXG4gIH1dLFxuICAndmFsaWQtdHlwZW9mJzogWydlcnJvcicsIHsgcmVxdWlyZVN0cmluZ0xpdGVyYWxzOiB0cnVlIH1dLFxuICAvLyAnd3JhcC1paWZlJzogWydlcnJvcicsICdhbnknLCB7IGZ1bmN0aW9uUHJvdG90eXBlTWV0aG9kczogdHJ1ZSB9XSxcbiAgLy8gJ3lpZWxkLXN0YXItc3BhY2luZyc6IFsnZXJyb3InLCAnYm90aCddLFxuICB5b2RhOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG5cbiAgJ2ltcG9ydC9leHBvcnQnOiAnZXJyb3InLFxuICAnaW1wb3J0L2ZpcnN0JzogJ2Vycm9yJyxcbiAgJ2ltcG9ydC9uby1hYnNvbHV0ZS1wYXRoJzogWydlcnJvcicsIHsgZXNtb2R1bGU6IHRydWUsIGNvbW1vbmpzOiB0cnVlLCBhbWQ6IGZhbHNlIH1dLFxuICAnaW1wb3J0L25vLWR1cGxpY2F0ZXMnOiAnZXJyb3InLFxuICAnaW1wb3J0L25vLW5hbWVkLWRlZmF1bHQnOiAnZXJyb3InLFxuICAnaW1wb3J0L25vLXdlYnBhY2stbG9hZGVyLXN5bnRheCc6ICdlcnJvcicsXG5cbiAgJ24vaGFuZGxlLWNhbGxiYWNrLWVycic6IFsnZXJyb3InLCAnXihlcnJ8ZXJyb3IpJCddLFxuICAnbi9uby1jYWxsYmFjay1saXRlcmFsJzogJ2Vycm9yJyxcbiAgJ24vbm8tZGVwcmVjYXRlZC1hcGknOiAnZXJyb3InLFxuICAnbi9uby1leHBvcnRzLWFzc2lnbic6ICdlcnJvcicsXG4gICduL25vLW5ldy1yZXF1aXJlJzogJ2Vycm9yJyxcbiAgJ24vbm8tcGF0aC1jb25jYXQnOiAnZXJyb3InLFxuICAnbi9wcm9jZXNzLWV4aXQtYXMtdGhyb3cnOiAnZXJyb3InLFxuXG4gICdwcm9taXNlL3BhcmFtLW5hbWVzJzogJ2Vycm9yJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaWxlczogW1wiKiovKi57anMsY2pzLG1qcyxqc3h9XCJdLFxuICBsYW5ndWFnZU9wdGlvbnM6IHtcbiAgICBwYXJzZXJPcHRpb25zOiB7XG4gICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAganN4OiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGdsb2JhbHM6IHtcbiAgICAgIC8vIFRPRE8gT3B0aW1pemUgaXQuIE5vZGUgY29kZSBzaG91bGQgbm90IHVzZSBicm93c2VyJ3Mgb2JqZWN0cy5cbiAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2xvYmFscy5icm93c2VyKS5maWx0ZXIoXG4gICAgICAgICAgKFtrXSkgPT4gIWNvbmZ1c2luZ0tleXMuaW5jbHVkZXMoayksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIH0sXG4gIH0sXG4gIGxpbnRlck9wdGlvbnM6IHtcbiAgICAvLyBub0lubGluZUNvbmZpZzogdHJ1ZSwgLy8gdG9vIHN0cmljdFxuICAgIHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzOiB0cnVlLFxuICB9LFxuICBwbHVnaW5zOiB7XG4gICAgZnA6IGZwUGx1Z2luLFxuICAgIG46IG5QbHVnaW4sXG4gICAgaW1wb3J0OiBpbXBvcnRQbHVnaW4sXG4gICAgcHJvbWlzZTogcHJvbWlzZVBsdWdpbixcbiAgICByZWFjdDogcmVhY3RQbHVnaW4sXG4gICAgXCJyZWFjdC1ob29rc1wiOiByZWFjdEhvb2tzUGx1Z2luLFxuICAgIHVuaWNvcm46IHVuaWNvcm5QbHVnaW4sXG4gICAgXCJzaW1wbGUtaW1wb3J0LXNvcnRcIjogc2ltcGxlSW1wb3J0U29ydFBsdWdpbixcbiAgICBcIkBnaXQtdmFsaWRhdG9yXCI6IGdpdFZhbGlkYXRvclBsdWdpbixcbiAgfSxcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn1cbiAgICovXG4gIHJ1bGVzOiB7XG4gICAgLy8gMS4gc3RhbmRhcmQgY29uZmlnIHJ1bGVzXG4gICAgLi4uc3RhbmRhcmRDb25maWdSdWxlcyxcblxuICAgIC8vIDIuIGNvZGUgc3R5bGUgZm9yIGEgYmV0dGVyIHJlYWRhYmlsaXR5XG4gICAgXCJhcnJvdy1ib2R5LXN0eWxlXCI6IFtcImVycm9yXCIsIFwiYXMtbmVlZGVkXCJdLFxuICAgIFwiaW1wb3J0L25ld2xpbmUtYWZ0ZXItaW1wb3J0XCI6IFtcImVycm9yXCIsIHsgY291bnQ6IDEgfV0sXG4gICAgXCJzaW1wbGUtaW1wb3J0LXNvcnQvaW1wb3J0c1wiOiBbXG4gICAgICBcImVycm9yXCIsXG4gICAgICB7IGdyb3VwczogW1tcIl5cXFxcdTAwMDBcIiwgXCJebm9kZTpcIiwgXCJeQD9cXFxcd1wiLCBcIl5cIiwgXCJeXFxcXC5cIl1dIH0sXG4gICAgXSxcbiAgICBcInNpbXBsZS1pbXBvcnQtc29ydC9leHBvcnRzXCI6IFwiZXJyb3JcIixcbiAgICBcInVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9lc2NhcGUtY2FzZVwiOiBcImVycm9yXCIsIC8vICdcXHVkODM0JyAtPiAnXFx1RDgzNCdcbiAgICAvLyBcInVuaWNvcm4vbnVtYmVyLWxpdGVyYWwtY2FzZVwiOiBcImVycm9yXCIsIC8vIDBYRkYgLT4gMHhGRiAvLyBjb25mbGljdCB3aXRoIHByZXR0aWVyXG5cbiAgICAvLyAzLiBiYW4gc29tZSBzeW50YXhlcyB0byByZWR1Y2UgbWlzdGFrZXNcbiAgICBcImZ1bmMtbmFtZS1tYXRjaGluZ1wiOiBcImVycm9yXCIsXG4gICAgXCJpbml0LWRlY2xhcmF0aW9uc1wiOiBcImVycm9yXCIsXG4gICAgXCJtYXgtcGFyYW1zXCI6IFtcImVycm9yXCIsIHsgbWF4OiA0IH1dLFxuICAgIFwibm8tZHVwbGljYXRlLWltcG9ydHNcIjogXCJlcnJvclwiLFxuICAgIFwibm8taW1wbGljaXQtY29lcmNpb25cIjogW1xuICAgICAgXCJlcnJvclwiLFxuICAgICAgeyBkaXNhbGxvd1RlbXBsYXRlU2hvcnRoYW5kOiB0cnVlLCBhbGxvdzogW1wiISFcIl0gfSxcbiAgICBdLCAvLyBmb3JiaWQgY29kZSBsaWtlIGBjb25zdCBudW0gPSArc3RyYDtcbiAgICBcIm5vLWludmFsaWQtdGhpc1wiOiBcImVycm9yXCIsXG4gICAgXCJuby1tdWx0aS1hc3NpZ25cIjogXCJlcnJvclwiLFxuICAgIFwibm8tcGx1c3BsdXNcIjogXCJlcnJvclwiLFxuICAgIFwibm8tc2hhZG93XCI6IFtcImVycm9yXCIsIHsgaWdub3JlT25Jbml0aWFsaXphdGlvbjogdHJ1ZSB9XSxcbiAgICBcIm5vLXVudXNlZC1wcml2YXRlLWNsYXNzLW1lbWJlcnNcIjogXCJlcnJvclwiLFxuICAgIFwicHJlZmVyLWV4cG9uZW50aWF0aW9uLW9wZXJhdG9yXCI6IFwiZXJyb3JcIixcbiAgICBcInByZWZlci1vYmplY3QtaGFzLW93blwiOiBcImVycm9yXCIsXG4gICAgLy8gZnBcbiAgICBcImZwL25vLWFyZ3VtZW50c1wiOiBcImVycm9yXCIsXG4gICAgXCJmcC9uby1kZWxldGVcIjogXCJlcnJvclwiLFxuICAgIC8vIGltcG9ydFxuICAgIFwiaW1wb3J0L2V4dGVuc2lvbnNcIjogW1wiZXJyb3JcIiwgXCJhbHdheXNcIiwgeyBpZ25vcmVQYWNrYWdlczogdHJ1ZSB9XSxcbiAgICBcImltcG9ydC9uby1jb21tb25qc1wiOiBbXG4gICAgICBcImVycm9yXCIsXG4gICAgICB7XG4gICAgICAgIGFsbG93UmVxdWlyZTogZmFsc2UsXG4gICAgICAgIGFsbG93Q29uZGl0aW9uYWxSZXF1aXJlOiBmYWxzZSxcbiAgICAgICAgYWxsb3dQcmltaXRpdmVNb2R1bGVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBcImltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcIjogXCJlcnJvclwiLFxuICAgIFwiaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1wiOiBcImVycm9yXCIsIC8vIGZvcmJpZCBjb2RlIGxpa2UgYGV4cG9ydCBsZXQgY291bnQgPSAzYFxuICAgIFwiaW1wb3J0L25vLXJlbGF0aXZlLXBhY2thZ2VzXCI6IFwiZXJyb3JcIiwgLy8gZm9yYmlkIHRvIGltcG9ydCBtb2R1bGUgZnJvbSBvdGhlciBtb25vcmVwbyBwYWNrYWdlcyBieSByZWxhdGl2ZSBwYXRoc1xuICAgIFwiaW1wb3J0L25vLXNlbGYtaW1wb3J0XCI6IFwiZXJyb3JcIixcbiAgICAvLyBuXG4gICAgXCJuL25vLXN5bmNcIjogXCJlcnJvclwiLFxuICAgIFwibi9wcmVmZXItZ2xvYmFsL3Byb2Nlc3NcIjogW1wiZXJyb3JcIiwgXCJuZXZlclwiXSxcbiAgICBcIm4vcHJlZmVyLWdsb2JhbC9idWZmZXJcIjogW1wiZXJyb3JcIiwgXCJuZXZlclwiXSxcbiAgICAvLyByZWFjdFxuICAgIFwicmVhY3QvanN4LWtleVwiOiBcImVycm9yXCIsXG4gICAgXCJyZWFjdC9qc3gtbm8tZHVwbGljYXRlLXByb3BzXCI6IFwiZXJyb3JcIixcbiAgICBcInJlYWN0L2pzeC1uby11bmRlZlwiOiBcImVycm9yXCIsXG4gICAgLy8gcmVhY3QtaG9va3NcbiAgICBcInJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1wiOiBcImVycm9yXCIsXG4gICAgXCJyZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1wiOiBcImVycm9yXCIsXG4gICAgLy8gdW5pY29yblxuICAgIC8vICd1bmljb3JuL25vLW51bGwnOiAnZXJyb3InLCAvLyBudWxsIGNhbiBiZSB1c2VmdWwgd2hlbiBpbnRlcmFjdCB3aXRoIGpzb24uXG4gICAgXCJ1bmljb3JuL2NvbnNpc3RlbnQtZGVzdHJ1Y3R1cmluZ1wiOiBcImVycm9yXCIsXG4gICAgXCJ1bmljb3JuL2Vycm9yLW1lc3NhZ2VcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9maWxlbmFtZS1jYXNlXCI6IFtcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgIHsgY2FzZXM6IHsga2ViYWJDYXNlOiB0cnVlLCBwYXNjYWxDYXNlOiB0cnVlIH0gfSxcbiAgICBdLFxuICAgIC8vIFRPRE8gcmVtb3ZlIHRoZSBvcHRpb25zIHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2xpbnQtcGx1Z2luLXVuaWNvcm4vcHVsbC8yMjk3IG1lcmdlZFxuICAgIFwidW5pY29ybi9pbXBvcnQtc3R5bGVcIjogW1xuICAgICAgXCJlcnJvclwiLFxuICAgICAge1xuICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICBcIm5vZGU6cGF0aFwiOiB7XG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJub2RlOnV0aWxcIjoge1xuICAgICAgICAgICAgbmFtZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBcInVuaWNvcm4vbmV3LWZvci1idWlsdGluc1wiOiBcImVycm9yXCIsXG4gICAgXCJ1bmljb3JuL25vLWFidXNpdmUtZXNsaW50LWRpc2FibGVcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9uby1hcnJheS1jYWxsYmFjay1yZWZlcmVuY2VcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9uby1mb3ItbG9vcFwiOiBcImVycm9yXCIsXG4gICAgXCJ1bmljb3JuL25vLWluc3RhbmNlb2YtYXJyYXlcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9uby1uZXctYXJyYXlcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9uby1uZXctYnVmZmVyXCI6IFwiZXJyb3JcIixcbiAgICBcInVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZFwiOiBcImVycm9yXCIsXG4gICAgXCJ1bmljb3JuL25vLXVucmVhZGFibGUtaWlmZVwiOiBcImVycm9yXCIsXG4gICAgXCJ1bmljb3JuL3ByZWZlci1hcnJheS1mbGF0LW1hcFwiOiBcImVycm9yXCIsXG4gICAgXCJ1bmljb3JuL3ByZWZlci1tb2R1bGVcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9wcmVmZXItbnVtYmVyLXByb3BlcnRpZXNcIjogXCJlcnJvclwiLFxuICAgIFwidW5pY29ybi9wcmVmZXItc3RyaW5nLXNsaWNlXCI6IFwiZXJyb3JcIixcbiAgICBcInVuaWNvcm4vdGhyb3ctbmV3LWVycm9yXCI6IFwiZXJyb3JcIixcblxuICAgIFwiQGdpdC12YWxpZGF0b3IvYmFuLXRzLWNvbW1lbnRcIjogXCJlcnJvclwiLFxuICAgIFwiQGdpdC12YWxpZGF0b3IvaW1wb3J0LXJlZ2V4XCI6IFwiZXJyb3JcIixcbiAgICBcIkBnaXQtdmFsaWRhdG9yL25ldy1wYXJlbnNcIjogXCJlcnJvclwiLFxuICAgIFwiQGdpdC12YWxpZGF0b3Ivbm8tZHluYW1pYy1pbXBvcnRcIjogXCJlcnJvclwiLFxuICAgIFwiQGdpdC12YWxpZGF0b3Ivbm8tZm9yLWluXCI6IFwiZXJyb3JcIixcbiAgICBcIkBnaXQtdmFsaWRhdG9yL25vLWluc3RhbmNlb2YtYnVpbHRpblwiOiBcImVycm9yXCIsXG4gICAgXCJAZ2l0LXZhbGlkYXRvci9uby1sZWdhY3ktZ2V0dGVyLXNldHRlclwiOiBcImVycm9yXCIsXG4gICAgXCJAZ2l0LXZhbGlkYXRvci9wcmVmZXItZ2xvYmFsLXRoaXNcIjogXCJlcnJvclwiLFxuICAgIFwiQGdpdC12YWxpZGF0b3IvcHJlZmVyLXNob3J0ZXN0LXJlbGF0aXZlLXBhdGhcIjogXCJlcnJvclwiLFxuICB9LFxufTtcbiJdfQ==