@nlabs/lex 1.59.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.storybook/main.ts +3 -47
  2. package/README.md +13 -19
  3. package/__mocks__/build.js +3 -3
  4. package/config.json +3 -1
  5. package/examples/lex.config.js +3 -7
  6. package/lib/LexConfig.d.ts +2 -6
  7. package/lib/LexConfig.js +2 -2
  8. package/lib/commands/ai/ai.js +3 -3
  9. package/lib/commands/build/build.d.ts +5 -3
  10. package/lib/commands/build/build.js +66 -156
  11. package/lib/commands/config/config.js +9 -7
  12. package/lib/commands/dev/dev.d.ts +0 -2
  13. package/lib/commands/dev/dev.js +24 -115
  14. package/lib/commands/init/init.js +4 -9
  15. package/lib/commands/migrate/migrate.js +2 -2
  16. package/lib/commands/serverless-dev/serverless-dev.js +2 -2
  17. package/lib/commands/versions/versions.d.ts +1 -1
  18. package/lib/commands/versions/versions.js +4 -4
  19. package/lib/lex.js +10 -11
  20. package/lib/types.d.ts +1 -1
  21. package/lib/types.js +1 -1
  22. package/lib/utils/app.d.ts +0 -2
  23. package/lib/utils/app.js +2 -29
  24. package/lib/utils/{webpack/LexSvgSpritemapPlugin.d.ts → assets/LexSvgSpritemap.d.ts} +6 -8
  25. package/lib/utils/assets/LexSvgSpritemap.js +219 -0
  26. package/lib/utils/file.d.ts +0 -4
  27. package/lib/utils/file.js +4 -100
  28. package/lib/utils/staticSite.d.ts +15 -0
  29. package/lib/utils/staticSite.js +80 -0
  30. package/lib/utils/vite/assets.d.ts +19 -0
  31. package/lib/utils/vite/assets.js +249 -0
  32. package/lib/utils/vite/config.d.ts +12 -0
  33. package/lib/utils/vite/config.js +279 -0
  34. package/package.json +27 -45
  35. package/postcss.config.js +1 -2
  36. package/tsconfig.lint.json +0 -1
  37. package/tsconfig.test.json +0 -1
  38. package/lib/utils/webpack/LexSvgSpritemapPlugin.js +0 -255
  39. package/scripts/test-webpack.js +0 -453
  40. package/webpack.config.d.ts +0 -2
  41. package/webpack.config.js +0 -960
package/lib/lex.js CHANGED
@@ -38,16 +38,16 @@ const require = createRequire(import.meta.url);
38
38
  require('module').Module._initPaths();
39
39
  const packagePath = fileURLToPath(new URL('../package.json', import.meta.url));
40
40
  const packageJson = JSON.parse(readFileSync(packagePath, 'utf8'));
41
- program.command('build').option('--assist', 'Enable AI assistance for fixing build errors.', false).option('--analyze', 'Enable AI analysis for build optimization suggestions or invoke webpack-bundle-analyzer plugin.', false).addOption(new Option('--bundler <n>', 'Bundler to use ("webpack" or "swc"). Default: "swc".').choices([
42
- 'webpack',
41
+ program.command('build').option('--assist', 'Enable AI assistance for fixing build errors.', false).option('--analyze', 'Generate a Vite bundle report and AI optimization suggestions.', false).addOption(new Option('--bundler <name>', 'Bundler to use. Defaults to Vite for web and SWC otherwise.').choices([
42
+ 'vite',
43
43
  'swc'
44
- ]).default('swc')).option('--config <path>', 'Custom Webpack configuration file path (ie. webpack.config.js).').option('--configName <value...>', 'Name of the configuration to use.').option('--defineProcessEnvNodeEnv <value>', 'Sets process.env.NODE_ENV to the specified value. (Currently an alias for `--node-env`)').option('--devtool <value>', 'A developer tool to enhance debugging (false | eval | [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map).').option('--disableInterpret', 'Disable interpret for loading the config file.', false).option('--entry <value...>', 'A module that is loaded upon startup. Only the last one is exported.').option('--env <value>', 'Environment passed to the configuration when it is a function.').option('--failOnWarnings', 'Stop webpack-cli process with non-zero exit code on warnings from webpack', false).addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
44
+ ])).option('--entry <value...>', 'A module that is loaded upon startup. Only the last one is exported.').addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
45
45
  'cjs',
46
46
  'esm'
47
- ]).default('esm')).option('--json <value>', 'Prints result as JSON or store it in a file.').option('--lexConfig <path>', 'Lex configuration file path (lex.config.js).').option('--merge', 'Merge two or more configurations using "webpack-merge".', false).addOption(new Option('--mode <type>', 'Webpack mode ("production" or "development"). Default: "development".').choices([
47
+ ]).default('esm')).option('--lexConfig <path>', 'Lex configuration file path (lex.config.js).').addOption(new Option('--mode <type>', 'Build mode. Default: "production".').choices([
48
48
  'development',
49
49
  'production'
50
- ]).default('development')).option('--name <value>', 'Name of the configuration. Used when loading multiple configurations.').option('--noDevtool', 'Negative "devtool" option.', false).option('--noStats', 'Negative "stats" option.', false).option('--noTarget', 'Negative "target" option.', false).option('--noWatch', 'Negative "watch" option.', false).option('--noWatchOptionsStdin', 'Negative "watch-options-stdin" option.', false).option('--nodeEnv <value>', 'Sets process.env.NODE_ENV to the specified value.').option('--outputPath <value>', 'The output directory as **absolute path** (required).').option('--quiet', 'No Lex notifications printed in the console.', false).option('--remove', 'Removes all files from the output directory before compiling.', false).option('--sourcePath <path>', 'Source path').option('--stats <value>', 'Stats options object or preset name.').option('--static', 'Creates static HTML files when building app.', false).option('--target <value>', 'Environment to build for. Environment to build for. An array of environments to build for all of them when possible.').option('--translations', 'Process translation files and output flattened JSON.', false).option('--typescript', 'Transpile as Typescript.', false).option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{NODE_ENV: \'production\'}").').option('--watch', 'Watch for changes.', false).option('--watchOptionsStdin', 'Stop watching when stdin stream has ended.', false).action((cmd)=>build(cmd, process.exit).then(()=>{}));
50
+ ]).default('production')).option('--outputPath <value>', 'The output directory as **absolute path** (required).').option('--quiet', 'No Lex notifications printed in the console.', false).option('--remove', 'Removes all files from the output directory before compiling.', false).option('--sourcePath <path>', 'Source path').option('--static', 'Creates static HTML files when building app.', false).option('--translations', 'Process translation files and output flattened JSON.', false).option('--typescript', 'Transpile as Typescript.', false).option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{NODE_ENV: \'production\'}").').option('--watch', 'Watch for changes.', false).action((cmd)=>build(cmd, process.exit).then(()=>{}));
51
51
  program.command('clean').option('--quiet', 'No Lex notifications printed in the console.').option('--snapshots', 'Remove all "__snapshots__" directories.').action((cmd)=>clean(cmd, process.exit).then(()=>{}));
52
52
  program.command('config <type>').option('--quiet', 'No Lex notifications printed in the console.').option('--json <path>', 'Save output to json file.').action((type, cmd)=>config(type, cmd, process.exit).then(()=>{}));
53
53
  program.command('compile').option('--config <path>', 'Transpiler configuration file path (ie. tsconfig.json).').option('--environment <n>', 'Target environment. "node" or "web". Default: "node".').addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
@@ -55,10 +55,9 @@ program.command('compile').option('--config <path>', 'Transpiler configuration f
55
55
  'esm'
56
56
  ]).default('esm')).option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--outputPath <path>', 'Output path').option('--remove', 'Removes all files from the output directory before compiling.').option('--sourcePath <path>', 'Source path').option('--typescript', 'Transpile as Typescript.').option('--quiet', 'No Lex notifications printed in the console.').option('--watch', 'Watches for changes and compiles.').action((cmd)=>compile(cmd, process.exit).then(()=>{}));
57
57
  program.command('create <type>').option('--outputFile <path>', 'Output filename.').option('--outputName <n>', 'Output name.').option('--quiet', 'No Lex notifications printed in the console.').option('--typescript', 'Create Typescript version.').action((type, cmd)=>create(type, cmd, process.exit).then(()=>{}));
58
- program.command('dev').option('--bundleAnalyzer', 'Run bundle analyzer.').option('--config <path>', 'Custom Webpack configuration file path (ie. webpack.config.js).').addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
59
- 'cjs',
60
- 'esm'
61
- ]).default('esm')).option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open dev server in a new browser window.').option('--outputPath <path>', 'Output path').option('--port <number>', `Port number for the development server (default: ${DEFAULT_DEV_PORT}).`).option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before compiling.').option('--sourcePath <path>', 'Source path').option('--translations', 'Process translation files and output flattened JSON.', false).option('--typescript', 'Transpile as Typescript.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{NODE_ENV: \'development\'}").').option('--watch', 'Watch for changes.').action((cmd)=>dev(cmd, process.exit).then(()=>{}));
58
+ program.command('dev').option('--bundleAnalyzer', 'Run bundle analyzer.').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open dev server in a new browser window.').option('--outputPath <path>', 'Output path').option('--port <number>', `Port number for the development server (default: ${DEFAULT_DEV_PORT}).`).option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before compiling.').option('--sourcePath <path>', 'Source path').option('--translations', 'Process translation files and output flattened JSON.', false).option('--typescript', 'Transpile as Typescript.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{NODE_ENV: \'development\'}").').option('--watch', 'Watch for changes.').action((cmd)=>dev(cmd).then((status)=>{
59
+ if (status !== 0) process.exitCode = status;
60
+ }));
62
61
  program.command('init <appName> [packageName]').option('--install', 'Install dependencies.').addOption(new Option('--package-manager <manager>', 'Which package manager to use. Default: npm').choices([
63
62
  'npm',
64
63
  'yarn'
@@ -82,7 +81,7 @@ program.command('publish').addOption(new Option('--bump <type>', 'Increments the
82
81
  'yarn'
83
82
  ]).default('npm')).option('--private', 'Publishes the module as restricted.').option('--quiet', 'No Lex notifications printed in the console.').option('--tag <tag>', 'Registers the published package with the given tag.').action((cmd)=>publish(cmd, process.exit).then(()=>{}));
84
83
  program.command('serverless-dev').option('--config <path>', 'Custom configuration file path (default: lex.config.mjs).').option('--host <host>', 'Host to bind the server to (default: localhost).').option('--httpPort <port>', 'HTTP server port (default: 3100).').option('--httpsPort <port>', 'HTTPS server port (default: 3101).').option('--wsPort <port>', 'WebSocket server port (default: 3102).').option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before starting.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <json>', 'Environment variables to set in process.env.').option('--debug', 'Enable GraphQL debug logging to see queries, variables, and operations.').option('--printOutput', 'Print GraphQL response output including status, headers, and body.').action((cmd)=>serverlessDev(cmd, process.exit).then(()=>{}));
85
- program.command('storybook').option('--config <path>', 'Custom Storybook configuration directory path (ie. .storybook).').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open Storybook in a new browser window.').option('--port <number>', 'Port number for the Storybook server.').option('--quiet', 'No Lex notifications printed in the console.').option('--static', 'Build a static Storybook site instead of starting dev server.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{STORYBOOK_THEME: \'dark\'}").').option('--verbose', 'Show detailed webpack progress output.').action((cmd)=>storybook(cmd, process.exit).then(()=>{}));
84
+ program.command('storybook').option('--config <path>', 'Custom Storybook configuration directory path (ie. .storybook).').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open Storybook in a new browser window.').option('--port <number>', 'Port number for the Storybook server.').option('--quiet', 'No Lex notifications printed in the console.').option('--static', 'Build a static Storybook site instead of starting dev server.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{STORYBOOK_THEME: \'dark\'}").').option('--verbose', 'Show detailed Storybook build progress output.').action((cmd)=>storybook(cmd, process.exit).then(()=>{}));
86
85
  program.command('test [files...]').option('--analyze', 'Use AI to analyze test coverage and suggest improvements.', false).option('--debugTests', 'Use AI to debug test failures and suggest fixes.', false).option('--generate', 'Use AI to generate test cases for untested code.', false).option('--bail', 'Exit the test suite immediately upon the first failing test suite.').option('--changedFilesWithAncestor', 'Runs tests related to the current changes and the changes made in the last commit.').option('--changedSince', 'Runs tests related the changes since the provided branch.').option('--ci', 'When this option is provided, Vitest will assume it is running in a CI environment.').option('--clearCache', 'Clear Vitest cache.').option('--collectCoverageFrom <glob>', 'A glob pattern relative to matching the files that coverage info needs to be collected from.').option('--colors', 'Forces test results output highlighting even if stdout is not a TTY.').option('--config <path>', 'Custom Vitest configuration file path (ie. vitest.config.mjs).').option('--debug', 'Print debugging info about your Vitest config.').option('--detectOpenHandles', 'Attempt to collect and print open handles preventing Vitest from exiting cleanly').option('--e2e', 'Run Playwright end-to-end tests matching "*.e2e.ts[x]".').option('--e2eConfig <path>', 'Custom Playwright configuration file path (ie. playwright.config.ts).').option('--environment <n>', 'Target environment. "node" or "web". Default: "node".').option('--env', 'The test environment used for all tests. This can point to any file or node module. Examples: happy-dom, jsdom, node or path/to/my-environment.js.').option('--errorOnDeprecated', 'Make calling deprecated APIs throw helpful error messages.').option('--expand', 'Use this flag to show full diffs and errors instead of a patch.').option('--forceExit', 'Force Vitest to exit after all tests have completed running.').option('--json', 'Prints the test results in JSON.').option('--lastCommit', 'Run all tests affected by file changes in the last commit made.').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--listTests', 'Lists all tests as JSON that Vitest will run given the arguments, and exits.').option('--logHeapUsage', 'Logs the heap usage after every test.').option('--maxWorkers <num>', 'Specifies the maximum number of workers the worker-pool will spawn for running tests. ').option('--noStackTrace', 'Disables stack trace in test results output.').option('--notify', 'Activates notifications for test results.').option('--onlyChanged', 'un based on which files have changed in the current repository. ').option('--outputFile <filename>', 'Write test results to a file when the --json option is also specified.').option('--passWithNoTests', 'Allows the test suite to pass when no files are found.').option('--quiet', 'No Lex notifications printed in the console.').option('--runInBand', 'Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests.').option('--setup <path>', 'Vitest setup file path.').option('--showConfig', 'Print your Vitest config and then exits.').option('--silent', 'Prevent tests from printing messages through the console.').option('--testLocationInResults', 'Adds a location field to test results.').option('--testNamePattern <regex>', 'Run only tests with a name that matches the regex. ').option('--testPathPattern <regex>', 'A regexp pattern string that is matched against all tests paths before executing the test.').option('--typescript', 'Transpile as Typescript.').option('--unit', 'Run Vitest unit tests matching "*.test.ts[x]".').option('--update', 'Update snapshots. Runs "vitest --update"').option('--useStderr', 'Divert all output to stderr.').option('--verbose', 'Display individual test results with the test suite hierarchy.').option('--watch <path>', 'Watch files for changes and rerun tests related to changed files.').option('--watchAll', 'Watch files for changes and rerun all tests when something changes.').action((files, options, cmd)=>test(options, cmd.args, files, process.exit).then(()=>{}));
87
86
  program.command('update').option('--interactive', 'Choose which packages to update.').addOption(new Option('--package-manager <manager>', 'Which package manager to use. Default: npm').choices([
88
87
  'npm',
@@ -102,4 +101,4 @@ program.command('ai').option('--context', 'Include project context in the AI pro
102
101
  program.command('versions').option('--json', 'Print the version as a JSON object.').action((cmd)=>versions(cmd, process.exit).then(()=>{}));
103
102
  program.version(packageJson.version).parse(process.argv);
104
103
 
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXYsIERFRkFVTFRfREVWX1BPUlR9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGVwbG95fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGVwbG95L3NlcnZlcmxlc3MtZGVwbG95LmpzJztcbmltcG9ydCB7cHVibGlzaH0gZnJvbSAnLi9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2guanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGV2fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGV2L3NlcnZlcmxlc3MtZGV2LmpzJztcbmltcG9ydCB7c3Rvcnlib29rfSBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5pbXBvcnQge3VwZGF0ZX0gZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuaW1wb3J0IHt2ZXJzaW9uc30gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG5cbnByb2Nlc3MuZW52LkxFWF9ST09UID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5jb25zdCBsZXhOb2RlTW9kdWxlcyA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCAnLi4vbm9kZV9tb2R1bGVzJyk7XG5pZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRIKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IGxleE5vZGVNb2R1bGVzO1xufSBlbHNlIGlmKCFwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQoJzonKS5pbmNsdWRlcyhsZXhOb2RlTW9kdWxlcykpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9QQVRIICs9IGA6JHtsZXhOb2RlTW9kdWxlc31gO1xufVxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG5yZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnRW5hYmxlIEFJIGFuYWx5c2lzIGZvciBidWlsZCBvcHRpbWl6YXRpb24gc3VnZ2VzdGlvbnMgb3IgaW52b2tlIHdlYnBhY2stYnVuZGxlLWFuYWx5emVyIHBsdWdpbi4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG4+JywgJ0J1bmRsZXIgdG8gdXNlIChcIndlYnBhY2tcIiBvciBcInN3Y1wiKS4gRGVmYXVsdDogXCJzd2NcIi4nKS5jaG9pY2VzKFsnd2VicGFjaycsICdzd2MnXSkuZGVmYXVsdCgnc3djJykpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gV2VicGFjayBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHdlYnBhY2suY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWNvbmZpZ05hbWUgPHZhbHVlLi4uPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZS4nKVxuICAub3B0aW9uKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAoQ3VycmVudGx5IGFuIGFsaWFzIGZvciBgLS1ub2RlLWVudmApJylcbiAgLm9wdGlvbignLS1kZXZ0b29sIDx2YWx1ZT4nLCAnQSBkZXZlbG9wZXIgdG9vbCB0byBlbmhhbmNlIGRlYnVnZ2luZyAoZmFsc2UgfCBldmFsIHwgW2lubGluZS18aGlkZGVuLXxldmFsLV1bbm9zb3VyY2VzLV1bY2hlYXAtW21vZHVsZS1dXXNvdXJjZS1tYXApLicpXG4gIC5vcHRpb24oJy0tZGlzYWJsZUludGVycHJldCcsICdEaXNhYmxlIGludGVycHJldCBmb3IgbG9hZGluZyB0aGUgY29uZmlnIGZpbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW50cnkgPHZhbHVlLi4uPicsICdBIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCB1cG9uIHN0YXJ0dXAuIE9ubHkgdGhlIGxhc3Qgb25lIGlzIGV4cG9ydGVkLicpXG4gIC5vcHRpb24oJy0tZW52IDx2YWx1ZT4nLCAnRW52aXJvbm1lbnQgcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIHdoZW4gaXQgaXMgYSBmdW5jdGlvbi4nKVxuICAub3B0aW9uKCctLWZhaWxPbldhcm5pbmdzJywgJ1N0b3Agd2VicGFjay1jbGkgcHJvY2VzcyB3aXRoIG5vbi16ZXJvIGV4aXQgY29kZSBvbiB3YXJuaW5ncyBmcm9tIHdlYnBhY2snLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWpzb24gPHZhbHVlPicsICdQcmludHMgcmVzdWx0IGFzIEpTT04gb3Igc3RvcmUgaXQgaW4gYSBmaWxlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tbWVyZ2UnLCAnTWVyZ2UgdHdvIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgdXNpbmcgXCJ3ZWJwYWNrLW1lcmdlXCIuJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdXZWJwYWNrIG1vZGUgKFwicHJvZHVjdGlvblwiIG9yIFwiZGV2ZWxvcG1lbnRcIikuIERlZmF1bHQ6IFwiZGV2ZWxvcG1lbnRcIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdkZXZlbG9wbWVudCcpKVxuICAub3B0aW9uKCctLW5hbWUgPHZhbHVlPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uLiBVc2VkIHdoZW4gbG9hZGluZyBtdWx0aXBsZSBjb25maWd1cmF0aW9ucy4nKVxuICAub3B0aW9uKCctLW5vRGV2dG9vbCcsICdOZWdhdGl2ZSBcImRldnRvb2xcIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9TdGF0cycsICdOZWdhdGl2ZSBcInN0YXRzXCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vVGFyZ2V0JywgJ05lZ2F0aXZlIFwidGFyZ2V0XCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vV2F0Y2gnLCAnTmVnYXRpdmUgXCJ3YXRjaFwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1dhdGNoT3B0aW9uc1N0ZGluJywgJ05lZ2F0aXZlIFwid2F0Y2gtb3B0aW9ucy1zdGRpblwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ1RoZSBvdXRwdXQgZGlyZWN0b3J5IGFzICoqYWJzb2x1dGUgcGF0aCoqIChyZXF1aXJlZCkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRzIDx2YWx1ZT4nLCAnU3RhdHMgb3B0aW9ucyBvYmplY3Qgb3IgcHJlc2V0IG5hbWUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQ3JlYXRlcyBzdGF0aWMgSFRNTCBmaWxlcyB3aGVuIGJ1aWxkaW5nIGFwcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdFbnZpcm9ubWVudCB0byBidWlsZCBmb3IuIEVudmlyb25tZW50IHRvIGJ1aWxkIGZvci4gQW4gYXJyYXkgb2YgZW52aXJvbm1lbnRzIHRvIGJ1aWxkIGZvciBhbGwgb2YgdGhlbSB3aGVuIHBvc3NpYmxlLicpXG4gIC5vcHRpb24oJy0tdHJhbnNsYXRpb25zJywgJ1Byb2Nlc3MgdHJhbnNsYXRpb24gZmlsZXMgYW5kIG91dHB1dCBmbGF0dGVuZWQgSlNPTi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicsIGZhbHNlKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ3Byb2R1Y3Rpb25cXCd9XCIpLicpXG4gIC5vcHRpb24oJy0td2F0Y2gnLCAnV2F0Y2ggZm9yIGNoYW5nZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0td2F0Y2hPcHRpb25zU3RkaW4nLCAnU3RvcCB3YXRjaGluZyB3aGVuIHN0ZGluIHN0cmVhbSBoYXMgZW5kZWQuJywgZmFsc2UpXG4gIC5hY3Rpb24oKGNtZCkgPT4gYnVpbGQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjbGVhbicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNuYXBzaG90cycsICdSZW1vdmUgYWxsIFwiX19zbmFwc2hvdHNfX1wiIGRpcmVjdG9yaWVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY2xlYW4oY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjb25maWcgPHR5cGU+JylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tanNvbiA8cGF0aD4nLCAnU2F2ZSBvdXRwdXQgdG8ganNvbiBmaWxlLicpXG4gIC5hY3Rpb24oKHR5cGUsIGNtZCkgPT4gY29uZmlnKHR5cGUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29tcGlsZScpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdUcmFuc3BpbGVyIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gdHNjb25maWcuanNvbikuJylcbiAgLm9wdGlvbignLS1lbnZpcm9ubWVudCA8bj4nLCAnVGFyZ2V0IGVudmlyb25tZW50LiBcIm5vZGVcIiBvciBcIndlYlwiLiBEZWZhdWx0OiBcIm5vZGVcIi4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDx2YWx1ZT4nLCAnVGhpcyBzZXRzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIERlZmF1bHQ6IFwiZXNtXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnZXNtJykpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoZXMgZm9yIGNoYW5nZXMgYW5kIGNvbXBpbGVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY29tcGlsZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NyZWF0ZSA8dHlwZT4nKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ091dHB1dCBmaWxlbmFtZS4nKVxuICAub3B0aW9uKCctLW91dHB1dE5hbWUgPG4+JywgJ091dHB1dCBuYW1lLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnQ3JlYXRlIFR5cGVzY3JpcHQgdmVyc2lvbi4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNyZWF0ZSh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2RldicpXG4gIC5vcHRpb24oJy0tYnVuZGxlQW5hbHl6ZXInLCAnUnVuIGJ1bmRsZSBhbmFseXplci4nKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIFdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB3ZWJwYWNrLmNvbmZpZy5qcykuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gZGV2IHNlcnZlciBpbiBhIG5ldyBicm93c2VyIHdpbmRvdy4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHBhdGg+JywgJ091dHB1dCBwYXRoJylcbiAgLm9wdGlvbignLS1wb3J0IDxudW1iZXI+JywgYFBvcnQgbnVtYmVyIGZvciB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIChkZWZhdWx0OiAke0RFRkFVTFRfREVWX1BPUlR9KS5gKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgY29tcGlsaW5nLicpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXVzZVB1YmxpY0lwJywgJ0ZvcmNlIHJlZnJlc2ggdGhlIGNhY2hlZCBwdWJsaWMgSVAgYWRkcmVzcy4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ2RldmVsb3BtZW50XFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gZGV2KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnaW5pdCA8YXBwTmFtZT4gW3BhY2thZ2VOYW1lXScpXG4gIC5vcHRpb24oJy0taW5zdGFsbCcsICdJbnN0YWxsIGRlcGVuZGVuY2llcy4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVXNlIGEgVHlwZXNjcmlwdCBiYXNlZCBhcHAuJylcbiAgLmFjdGlvbigoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCkgPT4gaW5pdChhcHBOYW1lLCBwYWNrYWdlTmFtZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW5rZWQnKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW5rZWQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW50JylcbiAgLm9wdGlvbignLS1jYWNoZScsICdPbmx5IGNoZWNrIGNoYW5nZWQgZmlsZXMuIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNhY2hlTG9jYXRpb24gPHBhdGg+JywgJ1BhdGggdG8gdGhlIGNhY2hlIGZpbGUgb3IgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tY29sb3InLCAnRm9yY2UgZW5hYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdVc2UgdGhpcyBjb25maWd1cmF0aW9uLCBvdmVycmlkaW5nIC5lc2xpbnRyYy4qIGNvbmZpZyBvcHRpb25zIGlmIHByZXNlbnQuIElmIG5vdCBzcGVjaWZpZWQgYW5kIG5vIGxvY2FsIGNvbmZpZyBleGlzdHMsIExleCB3aWxsIHVzZSBpdHMgZGVmYXVsdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdPdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudkluZm8nLCAnT3V0cHV0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW52IDxuPicsICdTcGVjaWZ5IGVudmlyb25tZW50cy4nKVxuICAub3B0aW9uKCctLWZpeCcsICdBcHBseSBBSSBmaXhlcyBhZnRlciBidWlsdC1pbiBFU0xpbnQgZml4ZXMgKHNhbWUgYXMgLS1maXgpLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeERyeVJ1bicsICdBdXRvbWF0aWNhbGx5IGZpeCBwcm9ibGVtcyB3aXRob3V0IHNhdmluZyB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZSBzeXN0ZW0uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZml4VHlwZSA8dHlwZT4nLCAnU3BlY2lmeSB0aGUgdHlwZXMgb2YgZml4ZXMgdG8gYXBwbHkgKHByb2JsZW0sIHN1Z2dlc3Rpb24sIGxheW91dCkuJylcbiAgLm9wdGlvbignLS1mb3JtYXQgPG4+JywgJ1VzZSBhIHNwZWNpZmljIG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IHN0eWxpc2guJylcbiAgLm9wdGlvbignLS1nbG9iYWwgPHZhcmlhYmxlcz4nLCAnRGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXRoIDxwYXRoPicsICdTcGVjaWZ5IHBhdGggb2YgaWdub3JlIGZpbGUuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXR0ZXJuIDxwYXR0ZXJuPicsICdQYXR0ZXJuIG9mIGZpbGVzIHRvIGlnbm9yZSAoaW4gYWRkaXRpb24gdG8gdGhvc2UgaW4gLmVzbGludGlnbm9yZSkuJylcbiAgLm9wdGlvbignLS1pbml0JywgJ1J1biBjb25maWcgaW5pdGlhbGl6YXRpb24gd2l6YXJkLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1tYXhXYXJuaW5ncyA8bnVtPicsICdOdW1iZXIgb2Ygd2FybmluZ3MgdG8gdHJpZ2dlciBub256ZXJvIGV4aXQgY29kZS4gRGVmYXVsdDogLTEuJylcbiAgLm9wdGlvbignLS1ub0NvbG9yJywgJ0ZvcmNlIGRpc2FibGluZyBvZiBjb2xvci4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0VzbGludHJjJywgJ0Rpc2FibGUgdXNlIG9mIGNvbmZpZ3VyYXRpb24gZnJvbSAuZXNsaW50cmMuKi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lnbm9yZScsICdEaXNhYmxlIHVzZSBvZiBpZ25vcmUgZmlsZXMgYW5kIHBhdHRlcm5zLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vSW5saW5lQ29uZmlnJywgJ1ByZXZlbnQgY29tbWVudHMgZnJvbSBjaGFuZ2luZyBjb25maWcgb3IgcnVsZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tb3V0cHV0RmlsZSA8cGF0aD4nLCAnU3BlY2lmeSBmaWxlIHRvIHdyaXRlIHJlcG9ydCB0by4nKVxuICAub3B0aW9uKCctLXBhcnNlciA8bj4nLCAnU3BlY2lmeSB0aGUgcGFyc2VyIHRvIGJlIHVzZWQuJylcbiAgLm9wdGlvbignLS1wYXJzZXJPcHRpb25zIDxvcHRpb25zPicsICdTcGVjaWZ5IHBhcnNlciBvcHRpb25zLicpXG4gIC5vcHRpb24oJy0tcGx1Z2luIDxwbHVnaW5zPicsICdTcGVjaWZ5IHBsdWdpbnMuJylcbiAgLm9wdGlvbignLS1wcmludENvbmZpZyA8cGF0aD4nLCAnUHJpbnQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnaXZlbiBmaWxlLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZW1vdmUtY29tbWVudHMnLCAnUmVtb3ZlIGFsbCBjb21tZW50cyBleGNlcHQgVE9ET3MgYW5kIGNvcHlyaWdodCBub3RpY2VzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzJywgJ0FkZHMgcmVwb3J0ZWQgZXJyb3JzIGZvciB1bnVzZWQgZXNsaW50LWRpc2FibGUgZGlyZWN0aXZlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXNvbHZlUGx1Z2luc1JlbGF0aXZlVG8gPHBhdGg+JywgJ0EgZm9sZGVyIHdoZXJlIHBsdWdpbnMgc2hvdWxkIGJlIHJlc29sdmVkIGZyb20uJylcbiAgLm9wdGlvbignLS1ydWxlIDxwYXRoPicsICdTcGVjaWZ5IHJ1bGVzLicpXG4gIC5vcHRpb24oJy0tcnVsZXNkaXIgPHBhdGg+JywgJ1VzZSBhZGRpdGlvbmFsIHJ1bGVzIGZyb20gdGhpcyBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1zdGRpbicsICdMaW50IGNvZGUgcHJvdmlkZWQgb24gPFNURElOPiAtIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXN0ZGluRmlsZW5hbWUgPG4+JywgJ1NwZWNpZnkgZmlsZW5hbWUgdG8gcHJvY2VzcyBTVERJTiBhcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGxpbnQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdtaWdyYXRlJylcbiAgLm9wdGlvbignLXEsIC0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAuYWN0aW9uKChjbWQpID0+IG1pZ3JhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdzZXJ2ZXJsZXNzLWRlcGxveScpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1lbnRyeSA8cGF0aD4nLCAnTGFtYmRhIGVudHJ5IGZpbGUgdG8gYnVuZGxlLicpXG4gIC5vcHRpb24oJy0tY29weU5vZGVNb2R1bGUgPHZhbHVlLi4uPicsICdSdW50aW1lIG5vZGVfbW9kdWxlcyBwYWNrYWdlcyB0byBjb3B5IGludG8gdGhlIHBhY2thZ2UgYWZ0ZXIgYnVuZGxpbmcuJylcbiAgLm9wdGlvbignLS1leHRlcm5hbCA8dmFsdWUuLi4+JywgJ1BhY2thZ2VzIG9yIHBhY2thZ2UgcGF0dGVybnMgdG8ga2VlcCBleHRlcm5hbCBmcm9tIHRoZSBidW5kbGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ0phdmFTY3JpcHQgb3V0cHV0IGZvcm1hdC4gRGVmYXVsdDogXCJjanNcIi4nKS5jaG9pY2VzKFsnY2pzJywgJ2VzbSddKS5kZWZhdWx0KCdjanMnKSlcbiAgLm9wdGlvbignLS1tYWluRmllbGRzIDx2YWx1ZT4nLCAnUGFja2FnZSBmaWVsZHMgZXNidWlsZCBzaG91bGQgcHJlZmVyLiBEZWZhdWx0OiBcIm1vZHVsZSxtYWluXCIuJylcbiAgLm9wdGlvbignLS1taW5pZnknLCAnTWluaWZ5IHRoZSBidW5kbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9kZU1vZHVsZXNQYXRoIDxwYXRoPicsICdQYXRoIHRvIHJ1bnRpbWUgbm9kZV9tb2R1bGVzIGNvcGllZCBieSAtLWNvcHlOb2RlTW9kdWxlLiBEZWZhdWx0OiBcIi4vbm9kZV9tb2R1bGVzXCIuJylcbiAgLm9wdGlvbignLS1vdXRmaWxlIDxwYXRoPicsICdCdW5kbGVkIG91dHB1dCBmaWxlIHBhdGggaW5zaWRlIHRoZSBwYWNrYWdlIGRpcmVjdG9yeS4nKVxuICAub3B0aW9uKCctLW91dHB1dCA8cGF0aD4nLCAnWmlwIG91dHB1dCBwYXRoLiBEZWZhdWx0OiBcIi4vbGFtYmRhLXBhY2thZ2UuemlwXCIuJylcbiAgLm9wdGlvbignLS1wYWNrYWdlRGlyIDxwYXRoPicsICdUZW1wb3JhcnkgcGFja2FnZSBkaXJlY3RvcnkuIERlZmF1bHQ6IFwiLi8ubGV4L2xhbWJkYS1wYWNrYWdlXCIuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tc291cmNlbWFwJywgJ0dlbmVyYXRlIGEgc291cmNlbWFwLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXRhcmdldCA8dmFsdWU+JywgJ2VzYnVpbGQgcnVudGltZSB0YXJnZXQuIERlZmF1bHQ6IFwibm9kZTI0XCIuJylcbiAgLmFjdGlvbigoY21kKSA9PiBzZXJ2ZXJsZXNzRGVwbG95KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgncHVibGlzaCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1idW1wIDx0eXBlPicsICdJbmNyZW1lbnRzIHRoZSB2ZXJzaW9uLiBUeXBlcyBpbmNsdWRlOiBtYWpvciwgbWlub3IsIHBhdGNoLCBiZXRhLCBhbHBoYSwgcmMuIERlZmF1bHQ6IFwicGF0Y2hcIi4nKS5jaG9pY2VzKFsnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnLCAnYmV0YScsICdhbHBoYScsICdyYyddKS5kZWZhdWx0KCdwYXRjaCcpKVxuICAub3B0aW9uKCctLW5ld1ZlcnNpb24gPHZlcnNpb25OdW1iZXI+JywgJ1B1Ymxpc2ggYXMgYSBzcGVjaWZpYyB2ZXJzaW9uLicpXG4gIC5vcHRpb24oJy0tb3RwIDxjb2RlPicsICdQcm92aWRlIGEgdHdvLWZhY3RvciBjb2RlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1wcml2YXRlJywgJ1B1Ymxpc2hlcyB0aGUgbW9kdWxlIGFzIHJlc3RyaWN0ZWQuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tdGFnIDx0YWc+JywgJ1JlZ2lzdGVycyB0aGUgcHVibGlzaGVkIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gdGFnLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gcHVibGlzaChjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3NlcnZlcmxlc3MtZGV2JylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoZGVmYXVsdDogbGV4LmNvbmZpZy5tanMpLicpXG4gIC5vcHRpb24oJy0taG9zdCA8aG9zdD4nLCAnSG9zdCB0byBiaW5kIHRoZSBzZXJ2ZXIgdG8gKGRlZmF1bHQ6IGxvY2FsaG9zdCkuJylcbiAgLm9wdGlvbignLS1odHRwUG9ydCA8cG9ydD4nLCAnSFRUUCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMCkuJylcbiAgLm9wdGlvbignLS1odHRwc1BvcnQgPHBvcnQ+JywgJ0hUVFBTIHNlcnZlciBwb3J0IChkZWZhdWx0OiAzMTAxKS4nKVxuICAub3B0aW9uKCctLXdzUG9ydCA8cG9ydD4nLCAnV2ViU29ja2V0IHNlcnZlciBwb3J0IChkZWZhdWx0OiAzMTAyKS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgc3RhcnRpbmcuJylcbiAgLm9wdGlvbignLS11c2VQdWJsaWNJcCcsICdGb3JjZSByZWZyZXNoIHRoZSBjYWNoZWQgcHVibGljIElQIGFkZHJlc3MuJylcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPGpzb24+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gcHJvY2Vzcy5lbnYuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdFbmFibGUgR3JhcGhRTCBkZWJ1ZyBsb2dnaW5nIHRvIHNlZSBxdWVyaWVzLCB2YXJpYWJsZXMsIGFuZCBvcGVyYXRpb25zLicpXG4gIC5vcHRpb24oJy0tcHJpbnRPdXRwdXQnLCAnUHJpbnQgR3JhcGhRTCByZXNwb25zZSBvdXRwdXQgaW5jbHVkaW5nIHN0YXR1cywgaGVhZGVycywgYW5kIGJvZHkuJylcbiAgLmFjdGlvbigoY21kKSA9PiBzZXJ2ZXJsZXNzRGV2KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc3Rvcnlib29rJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBTdG9yeWJvb2sgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgcGF0aCAoaWUuIC5zdG9yeWJvb2spLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vcGVuJywgJ0F1dG9tYXRpY2FsbHkgb3BlbiBTdG9yeWJvb2sgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1wb3J0IDxudW1iZXI+JywgJ1BvcnQgbnVtYmVyIGZvciB0aGUgU3Rvcnlib29rIHNlcnZlci4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQnVpbGQgYSBzdGF0aWMgU3Rvcnlib29rIHNpdGUgaW5zdGVhZCBvZiBzdGFydGluZyBkZXYgc2VydmVyLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxuPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIFwicHJvY2Vzcy5lbnZcIi4gKGllLiBcIntTVE9SWUJPT0tfVEhFTUU6IFxcJ2RhcmtcXCd9XCIpLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IGRldGFpbGVkIHdlYnBhY2sgcHJvZ3Jlc3Mgb3V0cHV0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc3Rvcnlib29rKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndGVzdCBbZmlsZXMuLi5dJylcbiAgLm9wdGlvbignLS1hbmFseXplJywgJ1VzZSBBSSB0byBhbmFseXplIHRlc3QgY292ZXJhZ2UgYW5kIHN1Z2dlc3QgaW1wcm92ZW1lbnRzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWRlYnVnVGVzdHMnLCAnVXNlIEFJIHRvIGRlYnVnIHRlc3QgZmFpbHVyZXMgYW5kIHN1Z2dlc3QgZml4ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZ2VuZXJhdGUnLCAnVXNlIEFJIHRvIGdlbmVyYXRlIHRlc3QgY2FzZXMgZm9yIHVudGVzdGVkIGNvZGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tYmFpbCcsICdFeGl0IHRoZSB0ZXN0IHN1aXRlIGltbWVkaWF0ZWx5IHVwb24gdGhlIGZpcnN0IGZhaWxpbmcgdGVzdCBzdWl0ZS4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRGaWxlc1dpdGhBbmNlc3RvcicsICdSdW5zIHRlc3RzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbmdlcyBhbmQgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgbGFzdCBjb21taXQuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkU2luY2UnLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBwcm92aWRlZCBicmFuY2guJylcbiAgLm9wdGlvbignLS1jaScsICdXaGVuIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBWaXRlc3Qgd2lsbCBhc3N1bWUgaXQgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50LicpXG4gIC5vcHRpb24oJy0tY2xlYXJDYWNoZScsICdDbGVhciBWaXRlc3QgY2FjaGUuJylcbiAgLm9wdGlvbignLS1jb2xsZWN0Q292ZXJhZ2VGcm9tIDxnbG9iPicsICdBIGdsb2IgcGF0dGVybiByZWxhdGl2ZSB0byBtYXRjaGluZyB0aGUgZmlsZXMgdGhhdCBjb3ZlcmFnZSBpbmZvIG5lZWRzIHRvIGJlIGNvbGxlY3RlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tY29sb3JzJywgJ0ZvcmNlcyB0ZXN0IHJlc3VsdHMgb3V0cHV0IGhpZ2hsaWdodGluZyBldmVuIGlmIHN0ZG91dCBpcyBub3QgYSBUVFkuJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBWaXRlc3QgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB2aXRlc3QuY29uZmlnLm1qcykuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdQcmludCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCB5b3VyIFZpdGVzdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZXRlY3RPcGVuSGFuZGxlcycsICdBdHRlbXB0IHRvIGNvbGxlY3QgYW5kIHByaW50IG9wZW4gaGFuZGxlcyBwcmV2ZW50aW5nIFZpdGVzdCBmcm9tIGV4aXRpbmcgY2xlYW5seScpXG4gIC5vcHRpb24oJy0tZTJlJywgJ1J1biBQbGF5d3JpZ2h0IGVuZC10by1lbmQgdGVzdHMgbWF0Y2hpbmcgXCIqLmUyZS50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tZTJlQ29uZmlnIDxwYXRoPicsICdDdXN0b20gUGxheXdyaWdodCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHBsYXl3cmlnaHQuY29uZmlnLnRzKS4nKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBoYXBweS1kb20sIGpzZG9tLCBub2RlIG9yIHBhdGgvdG8vbXktZW52aXJvbm1lbnQuanMuJylcbiAgLm9wdGlvbignLS1lcnJvck9uRGVwcmVjYXRlZCcsICdNYWtlIGNhbGxpbmcgZGVwcmVjYXRlZCBBUElzIHRocm93IGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMuJylcbiAgLm9wdGlvbignLS1leHBhbmQnLCAnVXNlIHRoaXMgZmxhZyB0byBzaG93IGZ1bGwgZGlmZnMgYW5kIGVycm9ycyBpbnN0ZWFkIG9mIGEgcGF0Y2guJylcbiAgLm9wdGlvbignLS1mb3JjZUV4aXQnLCAnRm9yY2UgVml0ZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBWaXRlc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ1ZpdGVzdCBzZXR1cCBmaWxlIHBhdGguJylcbiAgLm9wdGlvbignLS1zaG93Q29uZmlnJywgJ1ByaW50IHlvdXIgVml0ZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11bml0JywgJ1J1biBWaXRlc3QgdW5pdCB0ZXN0cyBtYXRjaGluZyBcIioudGVzdC50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tdXBkYXRlJywgJ1VwZGF0ZSBzbmFwc2hvdHMuIFJ1bnMgXCJ2aXRlc3QgLS11cGRhdGVcIicpXG4gIC5vcHRpb24oJy0tdXNlU3RkZXJyJywgJ0RpdmVydCBhbGwgb3V0cHV0IHRvIHN0ZGVyci4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnRGlzcGxheSBpbmRpdmlkdWFsIHRlc3QgcmVzdWx0cyB3aXRoIHRoZSB0ZXN0IHN1aXRlIGhpZXJhcmNoeS4nKVxuICAub3B0aW9uKCctLXdhdGNoIDxwYXRoPicsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gdGVzdHMgcmVsYXRlZCB0byBjaGFuZ2VkIGZpbGVzLicpXG4gIC5vcHRpb24oJy0td2F0Y2hBbGwnLCAnV2F0Y2ggZmlsZXMgZm9yIGNoYW5nZXMgYW5kIHJlcnVuIGFsbCB0ZXN0cyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGZpbGVzLCBvcHRpb25zLCBjbWQpID0+IHRlc3Qob3B0aW9ucywgY21kLmFyZ3MsIGZpbGVzLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGRhdGUnKVxuICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ0Nob29zZSB3aGljaCBwYWNrYWdlcyB0byB1cGRhdGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZWdpc3RyeScsICdBZGQgYSBjdXN0b20gcmVnaXN0cnkgdXJsLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBkYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndXBncmFkZScpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBncmFkZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2FpJylcbiAgLm9wdGlvbignLS1jb250ZXh0JywgJ0luY2x1ZGUgcHJvamVjdCBjb250ZXh0IGluIHRoZSBBSSBwcm9tcHQuJywgdHJ1ZSlcbiAgLm9wdGlvbignLS1maWxlIDxwYXRoPicsICdTcGVjaWZpYyBmaWxlIHRvIG9wZXJhdGUgb24uJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgdG8gdXNlLiBEZWZhdWx0OiBncHQtNG8uJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHRleHQ+JywgJ1RoZSBwcm9tcHQgdG8gc2VuZCB0byB0aGUgQUkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YXNrIDx0YXNrPicsICdUeXBlIG9mIEFJIHRhc2sgdG8gcGVyZm9ybS4nKS5jaG9pY2VzKFsnZ2VuZXJhdGUnLCAnZXhwbGFpbicsICd0ZXN0JywgJ29wdGltaXplJywgJ2hlbHAnXSkuZGVmYXVsdCgnaGVscCcpKVxuICAuYWN0aW9uKChjbWQpID0+IGFpRnVuY3Rpb24oY21kKS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndmVyc2lvbnMnKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHZlcnNpb24gYXMgYSBKU09OIG9iamVjdC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHZlcnNpb25zKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXSwibmFtZXMiOlsiT3B0aW9uIiwicHJvZ3JhbSIsInJlYWRGaWxlU3luYyIsImNyZWF0ZVJlcXVpcmUiLCJkaXJuYW1lIiwicmVzb2x2ZSIsImZpbGVVUkxUb1BhdGgiLCJhaUZ1bmN0aW9uIiwiYnVpbGQiLCJjbGVhbiIsImNvbXBpbGUiLCJjb25maWciLCJjcmVhdGUiLCJkZXYiLCJERUZBVUxUX0RFVl9QT1JUIiwiaW5pdCIsImxpbmtlZCIsImxpbnQiLCJtaWdyYXRlIiwic2VydmVybGVzc0RlcGxveSIsInB1Ymxpc2giLCJzZXJ2ZXJsZXNzRGV2Iiwic3Rvcnlib29rIiwidGVzdCIsInVwZGF0ZSIsInVwZ3JhZGUiLCJ2ZXJzaW9ucyIsInByb2Nlc3MiLCJlbnYiLCJMRVhfUk9PVCIsInVybCIsImxleE5vZGVNb2R1bGVzIiwiTk9ERV9QQVRIIiwic3BsaXQiLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwicGFja2FnZVBhdGgiLCJVUkwiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsImNvbW1hbmQiLCJvcHRpb24iLCJhZGRPcHRpb24iLCJjaG9pY2VzIiwiZGVmYXVsdCIsImFjdGlvbiIsImNtZCIsImV4aXQiLCJ0aGVuIiwidHlwZSIsImFwcE5hbWUiLCJwYWNrYWdlTmFtZSIsInJlcXVpcmVkT3B0aW9uIiwiZmlsZXMiLCJvcHRpb25zIiwiYXJncyIsInZlcnNpb24iLCJhcmd2Il0sIm1hcHBpbmdzIjoiO0FBQ0E7OztDQUdDLEdBQ0QsU0FBUUEsTUFBTSxFQUFFQyxPQUFPLFFBQU8sWUFBWTtBQUMxQyxTQUFRQyxZQUFZLFFBQU8sS0FBSztBQUNoQyxTQUFRQyxhQUFhLFFBQU8sU0FBUztBQUNyQyxTQUFRQyxPQUFPLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLGFBQWEsUUFBTyxNQUFNO0FBRWxDLFNBQVFDLFVBQVUsUUFBTyxzQkFBc0I7QUFDL0MsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsTUFBTSxRQUFPLDhCQUE4QjtBQUNuRCxTQUFRQyxNQUFNLFFBQU8sOEJBQThCO0FBQ25ELFNBQVFDLEdBQUcsRUFBRUMsZ0JBQWdCLFFBQU8sd0JBQXdCO0FBQzVELFNBQVFDLElBQUksUUFBTywwQkFBMEI7QUFDN0MsU0FBUUMsTUFBTSxRQUFPLDBCQUEwQjtBQUMvQyxTQUFRQyxJQUFJLFFBQU8sMEJBQTBCO0FBQzdDLFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsZ0JBQWdCLFFBQU8sb0RBQW9EO0FBQ25GLFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsYUFBYSxRQUFPLDhDQUE4QztBQUMxRSxTQUFRQyxTQUFTLFFBQU8sb0NBQW9DO0FB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
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXYsIERFRkFVTFRfREVWX1BPUlR9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGVwbG95fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGVwbG95L3NlcnZlcmxlc3MtZGVwbG95LmpzJztcbmltcG9ydCB7cHVibGlzaH0gZnJvbSAnLi9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2guanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGV2fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGV2L3NlcnZlcmxlc3MtZGV2LmpzJztcbmltcG9ydCB7c3Rvcnlib29rfSBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5pbXBvcnQge3VwZGF0ZX0gZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuaW1wb3J0IHt2ZXJzaW9uc30gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG5cbnByb2Nlc3MuZW52LkxFWF9ST09UID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5jb25zdCBsZXhOb2RlTW9kdWxlcyA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCAnLi4vbm9kZV9tb2R1bGVzJyk7XG5pZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRIKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IGxleE5vZGVNb2R1bGVzO1xufSBlbHNlIGlmKCFwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQoJzonKS5pbmNsdWRlcyhsZXhOb2RlTW9kdWxlcykpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9QQVRIICs9IGA6JHtsZXhOb2RlTW9kdWxlc31gO1xufVxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG5yZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnR2VuZXJhdGUgYSBWaXRlIGJ1bmRsZSByZXBvcnQgYW5kIEFJIG9wdGltaXphdGlvbiBzdWdnZXN0aW9ucy4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG5hbWU+JywgJ0J1bmRsZXIgdG8gdXNlLiBEZWZhdWx0cyB0byBWaXRlIGZvciB3ZWIgYW5kIFNXQyBvdGhlcndpc2UuJykuY2hvaWNlcyhbJ3ZpdGUnLCAnc3djJ10pKVxuICAub3B0aW9uKCctLWVudHJ5IDx2YWx1ZS4uLj4nLCAnQSBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgdXBvbiBzdGFydHVwLiBPbmx5IHRoZSBsYXN0IG9uZSBpcyBleHBvcnRlZC4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDx2YWx1ZT4nLCAnVGhpcyBzZXRzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIERlZmF1bHQ6IFwiZXNtXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnZXNtJykpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdCdWlsZCBtb2RlLiBEZWZhdWx0OiBcInByb2R1Y3Rpb25cIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdwcm9kdWN0aW9uJykpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ1RoZSBvdXRwdXQgZGlyZWN0b3J5IGFzICoqYWJzb2x1dGUgcGF0aCoqIChyZXF1aXJlZCkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRpYycsICdDcmVhdGVzIHN0YXRpYyBIVE1MIGZpbGVzIHdoZW4gYnVpbGRpbmcgYXBwLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdwcm9kdWN0aW9uXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicsIGZhbHNlKVxuICAuYWN0aW9uKChjbWQpID0+IGJ1aWxkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY2xlYW4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zbmFwc2hvdHMnLCAnUmVtb3ZlIGFsbCBcIl9fc25hcHNob3RzX19cIiBkaXJlY3Rvcmllcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNsZWFuKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29uZmlnIDx0eXBlPicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLWpzb24gPHBhdGg+JywgJ1NhdmUgb3V0cHV0IHRvIGpzb24gZmlsZS4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNvbmZpZyh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NvbXBpbGUnKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVHJhbnNwaWxlciBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHRzY29uZmlnLmpzb24pLicpXG4gIC5vcHRpb24oJy0tZW52aXJvbm1lbnQgPG4+JywgJ1RhcmdldCBlbnZpcm9ubWVudC4gXCJub2RlXCIgb3IgXCJ3ZWJcIi4gRGVmYXVsdDogXCJub2RlXCIuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8cGF0aD4nLCAnT3V0cHV0IHBhdGgnKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJylcbiAgLm9wdGlvbignLS1zb3VyY2VQYXRoIDxwYXRoPicsICdTb3VyY2UgcGF0aCcpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaGVzIGZvciBjaGFuZ2VzIGFuZCBjb21waWxlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNvbXBpbGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjcmVhdGUgPHR5cGU+JylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxwYXRoPicsICdPdXRwdXQgZmlsZW5hbWUuJylcbiAgLm9wdGlvbignLS1vdXRwdXROYW1lIDxuPicsICdPdXRwdXQgbmFtZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ0NyZWF0ZSBUeXBlc2NyaXB0IHZlcnNpb24uJylcbiAgLmFjdGlvbigodHlwZSwgY21kKSA9PiBjcmVhdGUodHlwZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdkZXYnKVxuICAub3B0aW9uKCctLWJ1bmRsZUFuYWx5emVyJywgJ1J1biBidW5kbGUgYW5hbHl6ZXIuJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW9wZW4nLCAnQXV0b21hdGljYWxseSBvcGVuIGRldiBzZXJ2ZXIgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsIGBQb3J0IG51bWJlciBmb3IgdGhlIGRldmVsb3BtZW50IHNlcnZlciAoZGVmYXVsdDogJHtERUZBVUxUX0RFVl9QT1JUfSkuYClcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10cmFuc2xhdGlvbnMnLCAnUHJvY2VzcyB0cmFuc2xhdGlvbiBmaWxlcyBhbmQgb3V0cHV0IGZsYXR0ZW5lZCBKU09OLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11c2VQdWJsaWNJcCcsICdGb3JjZSByZWZyZXNoIHRoZSBjYWNoZWQgcHVibGljIElQIGFkZHJlc3MuJylcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdkZXZlbG9wbWVudFxcJ31cIikuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaCBmb3IgY2hhbmdlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGRldihjbWQpLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgIGlmKHN0YXR1cyAhPT0gMCkgcHJvY2Vzcy5leGl0Q29kZSA9IHN0YXR1cztcbiAgfSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2luaXQgPGFwcE5hbWU+IFtwYWNrYWdlTmFtZV0nKVxuICAub3B0aW9uKCctLWluc3RhbGwnLCAnSW5zdGFsbCBkZXBlbmRlbmNpZXMuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1VzZSBhIFR5cGVzY3JpcHQgYmFzZWQgYXBwLicpXG4gIC5hY3Rpb24oKGFwcE5hbWUsIHBhY2thZ2VOYW1lLCBjbWQpID0+IGluaXQoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGlua2VkJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gbGlua2VkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGludCcpXG4gIC5vcHRpb24oJy0tY2FjaGUnLCAnT25seSBjaGVjayBjaGFuZ2VkIGZpbGVzLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1jYWNoZUxvY2F0aW9uIDxwYXRoPicsICdQYXRoIHRvIHRoZSBjYWNoZSBmaWxlIG9yIGRpcmVjdG9yeS4nKVxuICAub3B0aW9uKCctLWNvbG9yJywgJ0ZvcmNlIGVuYWJsaW5nIG9mIGNvbG9yLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVXNlIHRoaXMgY29uZmlndXJhdGlvbiwgb3ZlcnJpZGluZyAuZXNsaW50cmMuKiBjb25maWcgb3B0aW9ucyBpZiBwcmVzZW50LiBJZiBub3Qgc3BlY2lmaWVkIGFuZCBubyBsb2NhbCBjb25maWcgZXhpc3RzLCBMZXggd2lsbCB1c2UgaXRzIGRlZmF1bHQgY29uZmlnLicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnT3V0cHV0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1lbnZJbmZvJywgJ091dHB1dCBleGVjdXRpb24gZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudiA8bj4nLCAnU3BlY2lmeSBlbnZpcm9ubWVudHMuJylcbiAgLm9wdGlvbignLS1maXgnLCAnQXBwbHkgQUkgZml4ZXMgYWZ0ZXIgYnVpbHQtaW4gRVNMaW50IGZpeGVzIChzYW1lIGFzIC0tZml4KS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1maXhEcnlSdW4nLCAnQXV0b21hdGljYWxseSBmaXggcHJvYmxlbXMgd2l0aG91dCBzYXZpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGUgc3lzdGVtLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeFR5cGUgPHR5cGU+JywgJ1NwZWNpZnkgdGhlIHR5cGVzIG9mIGZpeGVzIHRvIGFwcGx5IChwcm9ibGVtLCBzdWdnZXN0aW9uLCBsYXlvdXQpLicpXG4gIC5vcHRpb24oJy0tZm9ybWF0IDxuPicsICdVc2UgYSBzcGVjaWZpYyBvdXRwdXQgZm9ybWF0LiBEZWZhdWx0OiBzdHlsaXNoLicpXG4gIC5vcHRpb24oJy0tZ2xvYmFsIDx2YXJpYWJsZXM+JywgJ0RlZmluZSBnbG9iYWwgdmFyaWFibGVzLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0aCA8cGF0aD4nLCAnU3BlY2lmeSBwYXRoIG9mIGlnbm9yZSBmaWxlLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0dGVybiA8cGF0dGVybj4nLCAnUGF0dGVybiBvZiBmaWxlcyB0byBpZ25vcmUgKGluIGFkZGl0aW9uIHRvIHRob3NlIGluIC5lc2xpbnRpZ25vcmUpLicpXG4gIC5vcHRpb24oJy0taW5pdCcsICdSdW4gY29uZmlnIGluaXRpYWxpemF0aW9uIHdpemFyZC4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbWF4V2FybmluZ3MgPG51bT4nLCAnTnVtYmVyIG9mIHdhcm5pbmdzIHRvIHRyaWdnZXIgbm9uemVybyBleGl0IGNvZGUuIERlZmF1bHQ6IC0xLicpXG4gIC5vcHRpb24oJy0tbm9Db2xvcicsICdGb3JjZSBkaXNhYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9Fc2xpbnRyYycsICdEaXNhYmxlIHVzZSBvZiBjb25maWd1cmF0aW9uIGZyb20gLmVzbGludHJjLiouJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9JZ25vcmUnLCAnRGlzYWJsZSB1c2Ugb2YgaWdub3JlIGZpbGVzIGFuZCBwYXR0ZXJucy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lubGluZUNvbmZpZycsICdQcmV2ZW50IGNvbW1lbnRzIGZyb20gY2hhbmdpbmcgY29uZmlnIG9yIHJ1bGVzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ1NwZWNpZnkgZmlsZSB0byB3cml0ZSByZXBvcnQgdG8uJylcbiAgLm9wdGlvbignLS1wYXJzZXIgPG4+JywgJ1NwZWNpZnkgdGhlIHBhcnNlciB0byBiZSB1c2VkLicpXG4gIC5vcHRpb24oJy0tcGFyc2VyT3B0aW9ucyA8b3B0aW9ucz4nLCAnU3BlY2lmeSBwYXJzZXIgb3B0aW9ucy4nKVxuICAub3B0aW9uKCctLXBsdWdpbiA8cGx1Z2lucz4nLCAnU3BlY2lmeSBwbHVnaW5zLicpXG4gIC5vcHRpb24oJy0tcHJpbnRDb25maWcgPHBhdGg+JywgJ1ByaW50IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gZmlsZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVtb3ZlLWNvbW1lbnRzJywgJ1JlbW92ZSBhbGwgY29tbWVudHMgZXhjZXB0IFRPRE9zIGFuZCBjb3B5cmlnaHQgbm90aWNlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXBvcnRVbnVzZWREaXNhYmxlRGlyZWN0aXZlcycsICdBZGRzIHJlcG9ydGVkIGVycm9ycyBmb3IgdW51c2VkIGVzbGludC1kaXNhYmxlIGRpcmVjdGl2ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvIDxwYXRoPicsICdBIGZvbGRlciB3aGVyZSBwbHVnaW5zIHNob3VsZCBiZSByZXNvbHZlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tcnVsZSA8cGF0aD4nLCAnU3BlY2lmeSBydWxlcy4nKVxuICAub3B0aW9uKCctLXJ1bGVzZGlyIDxwYXRoPicsICdVc2UgYWRkaXRpb25hbCBydWxlcyBmcm9tIHRoaXMgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tc3RkaW4nLCAnTGludCBjb2RlIHByb3ZpZGVkIG9uIDxTVERJTj4gLSBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1zdGRpbkZpbGVuYW1lIDxuPicsICdTcGVjaWZ5IGZpbGVuYW1lIHRvIHByb2Nlc3MgU1RESU4gYXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW50KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbWlncmF0ZScpXG4gIC5vcHRpb24oJy1xLCAtLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBtaWdyYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc2VydmVybGVzcy1kZXBsb3knKVxuICAucmVxdWlyZWRPcHRpb24oJy0tZW50cnkgPHBhdGg+JywgJ0xhbWJkYSBlbnRyeSBmaWxlIHRvIGJ1bmRsZS4nKVxuICAub3B0aW9uKCctLWNvcHlOb2RlTW9kdWxlIDx2YWx1ZS4uLj4nLCAnUnVudGltZSBub2RlX21vZHVsZXMgcGFja2FnZXMgdG8gY29weSBpbnRvIHRoZSBwYWNrYWdlIGFmdGVyIGJ1bmRsaW5nLicpXG4gIC5vcHRpb24oJy0tZXh0ZXJuYWwgPHZhbHVlLi4uPicsICdQYWNrYWdlcyBvciBwYWNrYWdlIHBhdHRlcm5zIHRvIGtlZXAgZXh0ZXJuYWwgZnJvbSB0aGUgYnVuZGxlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPHZhbHVlPicsICdKYXZhU2NyaXB0IG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IFwiY2pzXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnY2pzJykpXG4gIC5vcHRpb24oJy0tbWFpbkZpZWxkcyA8dmFsdWU+JywgJ1BhY2thZ2UgZmllbGRzIGVzYnVpbGQgc2hvdWxkIHByZWZlci4gRGVmYXVsdDogXCJtb2R1bGUsbWFpblwiLicpXG4gIC5vcHRpb24oJy0tbWluaWZ5JywgJ01pbmlmeSB0aGUgYnVuZGxlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vZGVNb2R1bGVzUGF0aCA8cGF0aD4nLCAnUGF0aCB0byBydW50aW1lIG5vZGVfbW9kdWxlcyBjb3BpZWQgYnkgLS1jb3B5Tm9kZU1vZHVsZS4gRGVmYXVsdDogXCIuL25vZGVfbW9kdWxlc1wiLicpXG4gIC5vcHRpb24oJy0tb3V0ZmlsZSA8cGF0aD4nLCAnQnVuZGxlZCBvdXRwdXQgZmlsZSBwYXRoIGluc2lkZSB0aGUgcGFja2FnZSBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1vdXRwdXQgPHBhdGg+JywgJ1ppcCBvdXRwdXQgcGF0aC4gRGVmYXVsdDogXCIuL2xhbWJkYS1wYWNrYWdlLnppcFwiLicpXG4gIC5vcHRpb24oJy0tcGFja2FnZURpciA8cGF0aD4nLCAnVGVtcG9yYXJ5IHBhY2thZ2UgZGlyZWN0b3J5LiBEZWZhdWx0OiBcIi4vLmxleC9sYW1iZGEtcGFja2FnZVwiLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNvdXJjZW1hcCcsICdHZW5lcmF0ZSBhIHNvdXJjZW1hcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdlc2J1aWxkIHJ1bnRpbWUgdGFyZ2V0LiBEZWZhdWx0OiBcIm5vZGUyNFwiLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzc0RlcGxveShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3B1Ymxpc2gnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYnVtcCA8dHlwZT4nLCAnSW5jcmVtZW50cyB0aGUgdmVyc2lvbi4gVHlwZXMgaW5jbHVkZTogbWFqb3IsIG1pbm9yLCBwYXRjaCwgYmV0YSwgYWxwaGEsIHJjLiBEZWZhdWx0OiBcInBhdGNoXCIuJykuY2hvaWNlcyhbJ21ham9yJywgJ21pbm9yJywgJ3BhdGNoJywgJ2JldGEnLCAnYWxwaGEnLCAncmMnXSkuZGVmYXVsdCgncGF0Y2gnKSlcbiAgLm9wdGlvbignLS1uZXdWZXJzaW9uIDx2ZXJzaW9uTnVtYmVyPicsICdQdWJsaXNoIGFzIGEgc3BlY2lmaWMgdmVyc2lvbi4nKVxuICAub3B0aW9uKCctLW90cCA8Y29kZT4nLCAnUHJvdmlkZSBhIHR3by1mYWN0b3IgY29kZS4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcHJpdmF0ZScsICdQdWJsaXNoZXMgdGhlIG1vZHVsZSBhcyByZXN0cmljdGVkLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRhZyA8dGFnPicsICdSZWdpc3RlcnMgdGhlIHB1Ymxpc2hlZCBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIHRhZy4nKVxuICAuYWN0aW9uKChjbWQpID0+IHB1Ymxpc2goY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdzZXJ2ZXJsZXNzLWRldicpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGRlZmF1bHQ6IGxleC5jb25maWcubWpzKS4nKVxuICAub3B0aW9uKCctLWhvc3QgPGhvc3Q+JywgJ0hvc3QgdG8gYmluZCB0aGUgc2VydmVyIHRvIChkZWZhdWx0OiBsb2NhbGhvc3QpLicpXG4gIC5vcHRpb24oJy0taHR0cFBvcnQgPHBvcnQ+JywgJ0hUVFAgc2VydmVyIHBvcnQgKGRlZmF1bHQ6IDMxMDApLicpXG4gIC5vcHRpb24oJy0taHR0cHNQb3J0IDxwb3J0PicsICdIVFRQUyBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMSkuJylcbiAgLm9wdGlvbignLS13c1BvcnQgPHBvcnQ+JywgJ1dlYlNvY2tldCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMikuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIHN0YXJ0aW5nLicpXG4gIC5vcHRpb24oJy0tdXNlUHVibGljSXAnLCAnRm9yY2UgcmVmcmVzaCB0aGUgY2FjaGVkIHB1YmxpYyBJUCBhZGRyZXNzLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxqc29uPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHByb2Nlc3MuZW52LicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnRW5hYmxlIEdyYXBoUUwgZGVidWcgbG9nZ2luZyB0byBzZWUgcXVlcmllcywgdmFyaWFibGVzLCBhbmQgb3BlcmF0aW9ucy4nKVxuICAub3B0aW9uKCctLXByaW50T3V0cHV0JywgJ1ByaW50IEdyYXBoUUwgcmVzcG9uc2Ugb3V0cHV0IGluY2x1ZGluZyBzdGF0dXMsIGhlYWRlcnMsIGFuZCBib2R5LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzc0RldihjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3N0b3J5Ym9vaycpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHBhdGggKGllLiAuc3Rvcnlib29rKS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gU3Rvcnlib29rIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LicpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsICdQb3J0IG51bWJlciBmb3IgdGhlIFN0b3J5Ym9vayBzZXJ2ZXIuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tc3RhdGljJywgJ0J1aWxkIGEgc3RhdGljIFN0b3J5Ym9vayBzaXRlIGluc3RlYWQgb2Ygc3RhcnRpbmcgZGV2IHNlcnZlci4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7U1RPUllCT09LX1RIRU1FOiBcXCdkYXJrXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyBkZXRhaWxlZCBTdG9yeWJvb2sgYnVpbGQgcHJvZ3Jlc3Mgb3V0cHV0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc3Rvcnlib29rKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndGVzdCBbZmlsZXMuLi5dJylcbiAgLm9wdGlvbignLS1hbmFseXplJywgJ1VzZSBBSSB0byBhbmFseXplIHRlc3QgY292ZXJhZ2UgYW5kIHN1Z2dlc3QgaW1wcm92ZW1lbnRzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWRlYnVnVGVzdHMnLCAnVXNlIEFJIHRvIGRlYnVnIHRlc3QgZmFpbHVyZXMgYW5kIHN1Z2dlc3QgZml4ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZ2VuZXJhdGUnLCAnVXNlIEFJIHRvIGdlbmVyYXRlIHRlc3QgY2FzZXMgZm9yIHVudGVzdGVkIGNvZGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tYmFpbCcsICdFeGl0IHRoZSB0ZXN0IHN1aXRlIGltbWVkaWF0ZWx5IHVwb24gdGhlIGZpcnN0IGZhaWxpbmcgdGVzdCBzdWl0ZS4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRGaWxlc1dpdGhBbmNlc3RvcicsICdSdW5zIHRlc3RzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbmdlcyBhbmQgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgbGFzdCBjb21taXQuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkU2luY2UnLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBwcm92aWRlZCBicmFuY2guJylcbiAgLm9wdGlvbignLS1jaScsICdXaGVuIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBWaXRlc3Qgd2lsbCBhc3N1bWUgaXQgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50LicpXG4gIC5vcHRpb24oJy0tY2xlYXJDYWNoZScsICdDbGVhciBWaXRlc3QgY2FjaGUuJylcbiAgLm9wdGlvbignLS1jb2xsZWN0Q292ZXJhZ2VGcm9tIDxnbG9iPicsICdBIGdsb2IgcGF0dGVybiByZWxhdGl2ZSB0byBtYXRjaGluZyB0aGUgZmlsZXMgdGhhdCBjb3ZlcmFnZSBpbmZvIG5lZWRzIHRvIGJlIGNvbGxlY3RlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tY29sb3JzJywgJ0ZvcmNlcyB0ZXN0IHJlc3VsdHMgb3V0cHV0IGhpZ2hsaWdodGluZyBldmVuIGlmIHN0ZG91dCBpcyBub3QgYSBUVFkuJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBWaXRlc3QgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB2aXRlc3QuY29uZmlnLm1qcykuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdQcmludCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCB5b3VyIFZpdGVzdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZXRlY3RPcGVuSGFuZGxlcycsICdBdHRlbXB0IHRvIGNvbGxlY3QgYW5kIHByaW50IG9wZW4gaGFuZGxlcyBwcmV2ZW50aW5nIFZpdGVzdCBmcm9tIGV4aXRpbmcgY2xlYW5seScpXG4gIC5vcHRpb24oJy0tZTJlJywgJ1J1biBQbGF5d3JpZ2h0IGVuZC10by1lbmQgdGVzdHMgbWF0Y2hpbmcgXCIqLmUyZS50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tZTJlQ29uZmlnIDxwYXRoPicsICdDdXN0b20gUGxheXdyaWdodCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHBsYXl3cmlnaHQuY29uZmlnLnRzKS4nKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBoYXBweS1kb20sIGpzZG9tLCBub2RlIG9yIHBhdGgvdG8vbXktZW52aXJvbm1lbnQuanMuJylcbiAgLm9wdGlvbignLS1lcnJvck9uRGVwcmVjYXRlZCcsICdNYWtlIGNhbGxpbmcgZGVwcmVjYXRlZCBBUElzIHRocm93IGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMuJylcbiAgLm9wdGlvbignLS1leHBhbmQnLCAnVXNlIHRoaXMgZmxhZyB0byBzaG93IGZ1bGwgZGlmZnMgYW5kIGVycm9ycyBpbnN0ZWFkIG9mIGEgcGF0Y2guJylcbiAgLm9wdGlvbignLS1mb3JjZUV4aXQnLCAnRm9yY2UgVml0ZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBWaXRlc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ1ZpdGVzdCBzZXR1cCBmaWxlIHBhdGguJylcbiAgLm9wdGlvbignLS1zaG93Q29uZmlnJywgJ1ByaW50IHlvdXIgVml0ZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11bml0JywgJ1J1biBWaXRlc3QgdW5pdCB0ZXN0cyBtYXRjaGluZyBcIioudGVzdC50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tdXBkYXRlJywgJ1VwZGF0ZSBzbmFwc2hvdHMuIFJ1bnMgXCJ2aXRlc3QgLS11cGRhdGVcIicpXG4gIC5vcHRpb24oJy0tdXNlU3RkZXJyJywgJ0RpdmVydCBhbGwgb3V0cHV0IHRvIHN0ZGVyci4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnRGlzcGxheSBpbmRpdmlkdWFsIHRlc3QgcmVzdWx0cyB3aXRoIHRoZSB0ZXN0IHN1aXRlIGhpZXJhcmNoeS4nKVxuICAub3B0aW9uKCctLXdhdGNoIDxwYXRoPicsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gdGVzdHMgcmVsYXRlZCB0byBjaGFuZ2VkIGZpbGVzLicpXG4gIC5vcHRpb24oJy0td2F0Y2hBbGwnLCAnV2F0Y2ggZmlsZXMgZm9yIGNoYW5nZXMgYW5kIHJlcnVuIGFsbCB0ZXN0cyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGZpbGVzLCBvcHRpb25zLCBjbWQpID0+IHRlc3Qob3B0aW9ucywgY21kLmFyZ3MsIGZpbGVzLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGRhdGUnKVxuICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ0Nob29zZSB3aGljaCBwYWNrYWdlcyB0byB1cGRhdGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZWdpc3RyeScsICdBZGQgYSBjdXN0b20gcmVnaXN0cnkgdXJsLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBkYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndXBncmFkZScpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBncmFkZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2FpJylcbiAgLm9wdGlvbignLS1jb250ZXh0JywgJ0luY2x1ZGUgcHJvamVjdCBjb250ZXh0IGluIHRoZSBBSSBwcm9tcHQuJywgdHJ1ZSlcbiAgLm9wdGlvbignLS1maWxlIDxwYXRoPicsICdTcGVjaWZpYyBmaWxlIHRvIG9wZXJhdGUgb24uJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgdG8gdXNlLiBEZWZhdWx0OiBncHQtNG8uJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHRleHQ+JywgJ1RoZSBwcm9tcHQgdG8gc2VuZCB0byB0aGUgQUkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YXNrIDx0YXNrPicsICdUeXBlIG9mIEFJIHRhc2sgdG8gcGVyZm9ybS4nKS5jaG9pY2VzKFsnZ2VuZXJhdGUnLCAnZXhwbGFpbicsICd0ZXN0JywgJ29wdGltaXplJywgJ2hlbHAnXSkuZGVmYXVsdCgnaGVscCcpKVxuICAuYWN0aW9uKChjbWQpID0+IGFpRnVuY3Rpb24oY21kKS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndmVyc2lvbnMnKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHZlcnNpb24gYXMgYSBKU09OIG9iamVjdC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHZlcnNpb25zKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXSwibmFtZXMiOlsiT3B0aW9uIiwicHJvZ3JhbSIsInJlYWRGaWxlU3luYyIsImNyZWF0ZVJlcXVpcmUiLCJkaXJuYW1lIiwicmVzb2x2ZSIsImZpbGVVUkxUb1BhdGgiLCJhaUZ1bmN0aW9uIiwiYnVpbGQiLCJjbGVhbiIsImNvbXBpbGUiLCJjb25maWciLCJjcmVhdGUiLCJkZXYiLCJERUZBVUxUX0RFVl9QT1JUIiwiaW5pdCIsImxpbmtlZCIsImxpbnQiLCJtaWdyYXRlIiwic2VydmVybGVzc0RlcGxveSIsInB1Ymxpc2giLCJzZXJ2ZXJsZXNzRGV2Iiwic3Rvcnlib29rIiwidGVzdCIsInVwZGF0ZSIsInVwZ3JhZGUiLCJ2ZXJzaW9ucyIsInByb2Nlc3MiLCJlbnYiLCJMRVhfUk9PVCIsInVybCIsImxleE5vZGVNb2R1bGVzIiwiTk9ERV9QQVRIIiwic3BsaXQiLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwicGFja2FnZVBhdGgiLCJVUkwiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsImNvbW1hbmQiLCJvcHRpb24iLCJhZGRPcHRpb24iLCJjaG9pY2VzIiwiZGVmYXVsdCIsImFjdGlvbiIsImNtZCIsImV4aXQiLCJ0aGVuIiwidHlwZSIsInN0YXR1cyIsImV4aXRDb2RlIiwiYXBwTmFtZSIsInBhY2thZ2VOYW1lIiwicmVxdWlyZWRPcHRpb24iLCJmaWxlcyIsIm9wdGlvbnMiLCJh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
package/lib/types.d.ts CHANGED
@@ -2,4 +2,4 @@
2
2
  * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */
5
- export type { AIConfig, Config, VitestConfig, LexConfigType, SWCOptions, WebpackConfig } from './LexConfig.js';
5
+ export type { AIConfig, Config, VitestConfig, LexConfigType, SWCOptions, ViteConfig } from './LexConfig.js';
package/lib/types.js CHANGED
@@ -4,4 +4,4 @@
4
4
  */ // Re-export all types from LexConfig
5
5
  export { };
6
6
 
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG4vLyBSZS1leHBvcnQgYWxsIHR5cGVzIGZyb20gTGV4Q29uZmlnXG5leHBvcnQgdHlwZSB7XG4gIEFJQ29uZmlnLFxuICBDb25maWcsXG4gIFZpdGVzdENvbmZpZyxcbiAgTGV4Q29uZmlnVHlwZSxcbiAgU1dDT3B0aW9ucyxcbiAgV2VicGFja0NvbmZpZ1xufSBmcm9tICcuL0xleENvbmZpZy5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQscUNBQXFDO0FBQ3JDLFdBT3dCIn0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG4vLyBSZS1leHBvcnQgYWxsIHR5cGVzIGZyb20gTGV4Q29uZmlnXG5leHBvcnQgdHlwZSB7XG4gIEFJQ29uZmlnLFxuICBDb25maWcsXG4gIFZpdGVzdENvbmZpZyxcbiAgTGV4Q29uZmlnVHlwZSxcbiAgU1dDT3B0aW9ucyxcbiAgVml0ZUNvbmZpZ1xufSBmcm9tICcuL0xleENvbmZpZy5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQscUNBQXFDO0FBQ3JDLFdBT3dCIn0=
@@ -25,8 +25,6 @@ export interface Spinner {
25
25
  text?: string;
26
26
  }
27
27
  export declare const createSpinner: (quiet?: boolean) => Spinner;
28
- export declare const createProgressBar: (percentage: number) => string;
29
- export declare const handleWebpackProgress: (output: string, spinner: Spinner, quiet: boolean, emoji: string, action: string) => void;
30
28
  export declare const copyFiles: (files: string[], typeName: string, spinner: Spinner, config: LexConfigType) => Promise<void>;
31
29
  export declare const copyConfiguredFiles: (spinner: Spinner, config: LexConfigType, quiet: boolean) => Promise<void>;
32
30
  export declare const copyFileSync: (source: string, target: string) => void;
package/lib/utils/app.js CHANGED
@@ -2,7 +2,6 @@
2
2
  * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */ import boxen from 'boxen';
5
- import chalk from 'chalk';
6
5
  import { copyFile, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'fs';
7
6
  import { sync as globSync } from 'glob';
8
7
  import isEmpty from 'lodash/isEmpty.js';
@@ -58,32 +57,6 @@ export const createSpinner = (quiet = false)=>{
58
57
  color: 'yellow'
59
58
  });
60
59
  };
61
- export const createProgressBar = (percentage)=>{
62
- const width = 20;
63
- const filled = Math.round(percentage / 100 * width);
64
- const empty = width - filled;
65
- const filledBar = chalk.cyan('█').repeat(filled);
66
- const emptyBar = chalk.gray('░').repeat(empty);
67
- return filledBar + emptyBar;
68
- };
69
- export const handleWebpackProgress = (output, spinner, quiet, emoji, action)=>{
70
- if (quiet) {
71
- return;
72
- }
73
- const progressMatch = output.match(/\[webpack\.Progress\] (\d+)%/);
74
- if (progressMatch) {
75
- const progress = parseInt(progressMatch[1]);
76
- const progressBar = createProgressBar(progress);
77
- spinner.text = `${emoji} ${action}: ${progressBar} ${progress}%`;
78
- } else if (output.includes('[webpack.Progress]')) {
79
- const generalProgressMatch = output.match(/(\d+)%/);
80
- if (generalProgressMatch) {
81
- const progress = parseInt(generalProgressMatch[1]);
82
- const progressBar = createProgressBar(progress);
83
- spinner.text = `${emoji} ${action}: ${progressBar} ${progress}%`;
84
- }
85
- }
86
- };
87
60
  export const copyFiles = async (files, typeName, spinner, config)=>{
88
61
  const { outputFullPath, sourceFullPath } = config;
89
62
  const items = files.map((fileName)=>({
@@ -210,7 +183,7 @@ export const removeConflictModules = (moduleList)=>{
210
183
  ...moduleList
211
184
  };
212
185
  Object.keys(updatedList).forEach((moduleName)=>{
213
- const regex = new RegExp('^(?!@types/).*?(vitest|webpack).*$', 'gi');
186
+ const regex = new RegExp('^(?!@types/).*?(vite|vitest).*$', 'gi');
214
187
  if (regex.test(moduleName)) {
215
188
  delete updatedList[moduleName];
216
189
  }
@@ -298,4 +271,4 @@ export const updateTemplateName = (filePath, replace, replaceCaps)=>{
298
271
  writeFileSync(filePath, data, 'utf8');
299
272
  };
300
273
 
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcHAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2NvcHlGaWxlLCBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5LmpzJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7YmFzZW5hbWUgYXMgcGF0aEJhc2VuYW1lLCBqb2luIGFzIHBhdGhKb2luLCByZWxhdGl2ZSBhcyBwYXRoUmVsYXRpdmUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtyaW1yYWZTeW5jfSBmcm9tICdyaW1yYWYnO1xuXG5pbXBvcnQge2xvZ30gZnJvbSAnLi9sb2cuanMnO1xuXG5pbXBvcnQgdHlwZSB7TGV4Q29uZmlnVHlwZX0gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEZpbGVuYW1lc1Byb3BzIHtcbiAgcmVhZG9ubHkgY2FsbGJhY2s/OiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaWxlbmFtZXNSZXN1bHQge1xuICBuYW1lQ2Fwczogc3RyaW5nO1xuICB0ZW1wbGF0ZUV4dDogc3RyaW5nO1xuICB0ZW1wbGF0ZVBhdGg6IHN0cmluZztcbiAgdGVtcGxhdGVSZWFjdDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmlsZW5hbWVzID0gKHByb3BzOiBHZXRGaWxlbmFtZXNQcm9wcyk6IEZpbGVuYW1lc1Jlc3VsdCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHtjYWxsYmFjaywgY2xpTmFtZSwgbmFtZSwgcXVpZXQsIHR5cGUsIHVzZVR5cGVzY3JpcHR9ID0gcHJvcHM7XG5cbiAgbGV0IG5hbWVDYXBzID0gJyc7XG4gIGNvbnN0IGl0ZW1UeXBlczogc3RyaW5nW10gPSBbJ3N0b3JlcycsICd2aWV3cyddO1xuXG4gIGlmKCFuYW1lKSB7XG4gICAgaWYodHlwZSAmJiBpdGVtVHlwZXMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHt0eXBlfSBuYW1lIGlzIHJlcXVpcmVkLiBQbGVhc2UgdXNlICdsZXggLWgnIGZvciBvcHRpb25zLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrPy4oMSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuYW1lQ2FwcyA9IGAke25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnN1YnN0cigxKX1gO1xuICB9XG5cbiAgbG9nKGAke2NsaU5hbWV9IGFkZGluZyAke25hbWV9ICR7dHlwZX0uLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBsZXQgdGVtcGxhdGVQYXRoOiBzdHJpbmc7XG4gIGxldCB0ZW1wbGF0ZUV4dDogc3RyaW5nO1xuICBsZXQgdGVtcGxhdGVSZWFjdDogc3RyaW5nO1xuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICB0ZW1wbGF0ZVBhdGggPSAnLi4vLi4vdGVtcGxhdGVzL3R5cGVzY3JpcHQnO1xuICAgIHRlbXBsYXRlRXh0ID0gJy50cyc7XG4gICAgdGVtcGxhdGVSZWFjdCA9ICcudHN4JztcbiAgfSBlbHNlIHtcbiAgICB0ZW1wbGF0ZVBhdGggPSAnLi4vLi4vdGVtcGxhdGVzL2Zsb3cnO1xuICAgIHRlbXBsYXRlRXh0ID0gJy5qcyc7XG4gICAgdGVtcGxhdGVSZWFjdCA9ICcuanMnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lQ2FwcyxcbiAgICB0ZW1wbGF0ZUV4dCxcbiAgICB0ZW1wbGF0ZVBhdGgsXG4gICAgdGVtcGxhdGVSZWFjdFxuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGlubmVyIHtcbiAgZmFpbDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN0YXJ0OiAodGV4dD86IHN0cmluZykgPT4gdm9pZDtcbiAgc3VjY2VlZDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTcGlubmVyID0gKHF1aWV0ID0gZmFsc2UpOiBTcGlubmVyID0+IHtcbiAgaWYocXVpZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmFpbDogKCkgPT4ge30sXG4gICAgICBzdGFydDogKCkgPT4ge30sXG4gICAgICBzdWNjZWVkOiAoKSA9PiB7fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gb3JhKHtjb2xvcjogJ3llbGxvdyd9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQcm9ncmVzc0JhciA9IChwZXJjZW50YWdlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB3aWR0aCA9IDIwO1xuICBjb25zdCBmaWxsZWQgPSBNYXRoLnJvdW5kKChwZXJjZW50YWdlIC8gMTAwKSAqIHdpZHRoKTtcbiAgY29uc3QgZW1wdHkgPSB3aWR0aCAtIGZpbGxlZDtcblxuICBjb25zdCBmaWxsZWRCYXIgPSBjaGFsay5jeWFuKCfilognKS5yZXBlYXQoZmlsbGVkKTtcbiAgY29uc3QgZW1wdHlCYXIgPSBjaGFsay5ncmF5KCfilpEnKS5yZXBlYXQoZW1wdHkpO1xuXG4gIHJldHVybiBmaWxsZWRCYXIgKyBlbXB0eUJhcjtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVXZWJwYWNrUHJvZ3Jlc3MgPSAoXG4gIG91dHB1dDogc3RyaW5nLFxuICBzcGlubmVyOiBTcGlubmVyLFxuICBxdWlldDogYm9vbGVhbixcbiAgZW1vamk6IHN0cmluZyxcbiAgYWN0aW9uOiBzdHJpbmdcbik6IHZvaWQgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb2dyZXNzTWF0Y2ggPSBvdXRwdXQubWF0Y2goL1xcW3dlYnBhY2tcXC5Qcm9ncmVzc1xcXSAoXFxkKyklLyk7XG4gIGlmKHByb2dyZXNzTWF0Y2gpIHtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHBhcnNlSW50KHByb2dyZXNzTWF0Y2hbMV0pO1xuICAgIGNvbnN0IHByb2dyZXNzQmFyID0gY3JlYXRlUHJvZ3Jlc3NCYXIocHJvZ3Jlc3MpO1xuICAgIHNwaW5uZXIudGV4dCA9IGAke2Vtb2ppfSAke2FjdGlvbn06ICR7cHJvZ3Jlc3NCYXJ9ICR7cHJvZ3Jlc3N9JWA7XG4gIH0gZWxzZSBpZihvdXRwdXQuaW5jbHVkZXMoJ1t3ZWJwYWNrLlByb2dyZXNzXScpKSB7XG4gICAgY29uc3QgZ2VuZXJhbFByb2dyZXNzTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSUvKTtcbiAgICBpZihnZW5lcmFsUHJvZ3Jlc3NNYXRjaCkge1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBwYXJzZUludChnZW5lcmFsUHJvZ3Jlc3NNYXRjaFsxXSk7XG4gICAgICBjb25zdCBwcm9ncmVzc0JhciA9IGNyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzKTtcbiAgICAgIHNwaW5uZXIudGV4dCA9IGAke2Vtb2ppfSAke2FjdGlvbn06ICR7cHJvZ3Jlc3NCYXJ9ICR7cHJvZ3Jlc3N9JWA7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZpbGVzID0gYXN5bmMgKGZpbGVzOiBzdHJpbmdbXSwgdHlwZU5hbWU6IHN0cmluZywgc3Bpbm5lcjogU3Bpbm5lciwgY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiB7XG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICBjb25zdCBpdGVtcyA9IGZpbGVzLm1hcCgoZmlsZU5hbWU6IHN0cmluZykgPT4gKHtcbiAgICBmcm9tOiBmaWxlTmFtZSxcbiAgICB0bzogcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGggfHwgcHJvY2Vzcy5jd2QoKSwgcGF0aFJlbGF0aXZlKHNvdXJjZUZ1bGxQYXRoIHx8IHByb2Nlc3MuY3dkKCksIGZpbGVOYW1lKSlcbiAgfSkpO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydChgQ29weWluZyAke3R5cGVOYW1lfSBmaWxlcy4uLmApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGl0ZW1zLm1hcCgoe2Zyb20sIHRvfSkgPT4gbmV3IFByb21pc2UoXG4gICAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG1rZGlyU3luYyhwYXRoUmVzb2x2ZSh0bywgJy4uJyksIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuIGNvcHlGaWxlKGZyb20sIHRvLCAoY29weUVycm9yKSA9PiB7XG4gICAgICAgICAgaWYoY29weUVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICkpKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBjb3BpZWQgJHtmaWxlcy5sZW5ndGh9ICR7dHlwZU5hbWV9IGZpbGVzIWApO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKGBDb3B5aW5nIG9mICR7dHlwZU5hbWV9IGZpbGVzIGZhaWxlZC5gKTtcbiAgICBsb2coYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7XG4gICAgbG9nKFN0cmluZyhlcnJvciksICdlcnJvcicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29weUNvbmZpZ3VyZWRGaWxlcyA9IGFzeW5jIChzcGlubmVyOiBTcGlubmVyLCBjb25maWc6IExleENvbmZpZ1R5cGUsIHF1aWV0OiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IHtjb3B5RmlsZXM6IGNvcHlGaWxlc0NvbmZpZywgb3V0cHV0RnVsbFBhdGgsIHNvdXJjZUZ1bGxQYXRoLCBzb3VyY2VQYXRofSA9IGNvbmZpZztcbiAgaWYoIWNvcHlGaWxlc0NvbmZpZyB8fCBjb3B5RmlsZXNDb25maWcubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KCdDb3B5aW5nIGNvbmZpZ3VyZWQgZmlsZXMuLi4nKTtcbiAgICBsZXQgdG90YWxDb3BpZWQgPSAwO1xuXG4gICAgY29uc3QgYmFzZURpciA9IHNvdXJjZUZ1bGxQYXRoIHx8IChzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgc291cmNlUGF0aCkgOiBwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBhbGxDb3B5UHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IHBhdHRlcm4gb2YgY29weUZpbGVzQ29uZmlnKSB7XG4gICAgICBjb25zdCByZXNvbHZlZFBhdHRlcm4gPSBwYXRoUmVzb2x2ZShiYXNlRGlyLCBwYXR0ZXJuKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nRmlsZXMgPSBnbG9iU3luYyhyZXNvbHZlZFBhdHRlcm4sIHtcbiAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgIG5vZGlyOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgaWYobWF0Y2hpbmdGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgICAgbG9nKGBXYXJuaW5nOiBObyBmaWxlcyBmb3VuZCBtYXRjaGluZyBwYXR0ZXJuOiAke3BhdHRlcm59YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvcHlQcm9taXNlcyA9IG1hdGNoaW5nRmlsZXMubWFwKChzb3VyY2VGaWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGhSZWxhdGl2ZShiYXNlRGlyLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXRGdWxsUGF0aCB8fCBwcm9jZXNzLmN3ZCgpLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aFJlc29sdmUoZGVzdFBhdGgsICcuLicpO1xuICAgICAgICBta2RpclN5bmMoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29weUZpbGUoc291cmNlRmlsZSwgZGVzdFBhdGgsIChjb3B5RXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmKGNvcHlFcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoY29weUVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGFsbENvcHlQcm9taXNlcy5wdXNoKC4uLmNvcHlQcm9taXNlcyk7XG4gICAgICB0b3RhbENvcGllZCArPSBtYXRjaGluZ0ZpbGVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChhbGxDb3B5UHJvbWlzZXMpO1xuXG4gICAgaWYodG90YWxDb3BpZWQgPiAwKSB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBjb3BpZWQgJHt0b3RhbENvcGllZH0gY29uZmlndXJlZCBmaWxlcyFgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBjb25maWd1cmVkIGZpbGVzIHRvIGNvcHknKTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXMnKTtcbiAgICBsb2coYEVycm9yIGNvcHlpbmcgY29uZmlndXJlZCBmaWxlczogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGaWxlU3luYyA9IChzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpID0+IHtcbiAgbGV0IHRhcmdldEZpbGU6IHN0cmluZyA9IHRhcmdldDtcblxuICBpZihleGlzdHNTeW5jKHRhcmdldCkpIHtcbiAgICBpZihsc3RhdFN5bmModGFyZ2V0KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0YXJnZXRGaWxlID0gcGF0aEpvaW4odGFyZ2V0LCBwYXRoQmFzZW5hbWUoc291cmNlKSk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVGaWxlU3luYyh0YXJnZXRGaWxlLCByZWFkRmlsZVN5bmMoc291cmNlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCB0YXJnZXRGb2xkZXI6IHN0cmluZyA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHRhcmdldEZvbGRlcikpIHtcbiAgICBta2RpclN5bmModGFyZ2V0Rm9sZGVyKTtcbiAgfVxuXG4gIGlmKGxzdGF0U3luYyhzb3VyY2UpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKHNvdXJjZSk7XG4gICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBjdXJTb3VyY2U6IHN0cmluZyA9IHBhdGhKb2luKHNvdXJjZSwgZmlsZSk7XG5cbiAgICAgIGlmKGxzdGF0U3luYyhjdXJTb3VyY2UpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMoY3VyU291cmNlLCB0YXJnZXRGb2xkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUZpbGVTeW5jKGN1clNvdXJjZSwgdGFyZ2V0Rm9sZGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhY2thZ2VKc29uID0gKHBhY2thZ2VQYXRoPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG4gIGNvbnN0IHBhY2thZ2VEYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZm9ybWF0UGF0aCkudG9TdHJpbmcoKTtcblxuICByZXR1cm4gSlNPTi5wYXJzZShwYWNrYWdlRGF0YSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZXNCeUV4dCA9IChleHQ6IHN0cmluZywgY29uZmlnOiBMZXhDb25maWdUeXBlKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCB7c291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICByZXR1cm4gZ2xvYlN5bmMoYCoqLyoqJHtleHR9YCwge1xuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIGN3ZDogc291cmNlRnVsbFBhdGgsXG4gICAgbm9kaXI6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlQ29uZmxpY3RNb2R1bGVzID0gKG1vZHVsZUxpc3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gIGNvbnN0IHVwZGF0ZWRMaXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsuLi5tb2R1bGVMaXN0fTtcblxuICBPYmplY3Qua2V5cyh1cGRhdGVkTGlzdCkuZm9yRWFjaCgobW9kdWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oPyFAdHlwZXMvKS4qPyh2aXRlc3R8d2VicGFjaykuKiQnLCAnZ2knKTtcbiAgICBpZihyZWdleC50ZXN0KG1vZHVsZU5hbWUpKSB7XG4gICAgICBkZWxldGUgdXBkYXRlZExpc3RbbW9kdWxlTmFtZV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdXBkYXRlZExpc3Q7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsZXMgPSAoZmlsZU5hbWU6IHN0cmluZywgaXNSZWxhdGl2ZTogYm9vbGVhbiA9IGZhbHNlKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBpc1JlbGF0aXZlID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG5cbiAgdHJ5IHtcbiAgICByaW1yYWZTeW5jKGZpbGVQYXRoKTtcbiAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZU1vZHVsZXMgPSAoKSA9PiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4vbm9kZV9tb2R1bGVzJywgdHJ1ZSk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4veWFybi5sb2NrJywgdHJ1ZSk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4vcGFja2FnZS1sb2NrLmpzb24nLCB0cnVlKTtcblxuICAgIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHNldFBhY2thZ2VKc29uID0gKGpzb246IHVua25vd24sIHBhY2thZ2VQYXRoPzogc3RyaW5nKSA9PiB7XG4gIGlmKCFqc29uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0UGF0aDogc3RyaW5nID0gcGFja2FnZVBhdGggfHwgYCR7cHJvY2Vzcy5jd2QoKX0vcGFja2FnZS5qc29uYDtcblxuICB3cml0ZUZpbGVTeW5jKGZvcm1hdFBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkTW9kdWxlVHlwZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbGlua2VkTW9kdWxlcyA9IChzdGFydFBhdGg/OiBzdHJpbmcpOiBMaW5rZWRNb2R1bGVUeXBlW10gPT4ge1xuICBjb25zdCB3b3JraW5nUGF0aDogc3RyaW5nID0gc3RhcnRQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gIGxldCBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcblxuICBpZih3b3JraW5nUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcHJlZml4ID0gYEAke3dvcmtpbmdQYXRoLnNwbGl0KCdAJykucG9wKCl9YDtcbiAgICBtb2R1bGVQYXRoID0gd29ya2luZ1BhdGg7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlUGF0aCA9IHBhdGhKb2luKHdvcmtpbmdQYXRoLCAnbm9kZV9tb2R1bGVzJyk7XG4gIH1cblxuICBjb25zdCBmb3VuZFBhdGhzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqJywge1xuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIGN3ZDogbW9kdWxlUGF0aCxcbiAgICBub2RpcjogZmFsc2VcbiAgfSk7XG5cbiAgcmV0dXJuIGZvdW5kUGF0aHMucmVkdWNlKChsaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10sIGZvdW5kUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRzID0gbHN0YXRTeW5jKGZvdW5kUGF0aCk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29uc3QgZGVlcExpc3Q6IExpbmtlZE1vZHVsZVR5cGVbXSA9IGxpbmtlZE1vZHVsZXMoZm91bmRQYXRoKTtcbiAgICAgICAgbGlzdC5wdXNoKC4uLmRlZXBMaXN0KTtcbiAgICAgIH0gZWxzZSBpZihzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzOiBzdHJpbmdbXSA9IChbcHJlZml4LCBwYXRoQmFzZW5hbWUoZm91bmRQYXRoKV0pLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiAhaXNFbXB0eShpdGVtKSk7XG4gICAgICAgIGxpc3QucHVzaCh7bmFtZTogYCR7bW9kdWxlTmFtZXMuam9pbignLycpfWAsIHBhdGg6IGZvdW5kUGF0aH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuICB9LCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tMaW5rZWRNb2R1bGVzID0gKCkgPT4ge1xuICBjb25zdCBsaW5rZWQgPSBsaW5rZWRNb2R1bGVzKCk7XG5cbiAgaWYobGlua2VkLmxlbmd0aCkge1xuICAgIGNvbnN0IG1zZ01vZHVsZTogc3RyaW5nID0gbGlua2VkLmxlbmd0aCA+IDEgPyAnTW9kdWxlcycgOiAnTW9kdWxlJztcbiAgICBjb25zdCBsaW5rZWRNc2c6IHN0cmluZyA9IGxpbmtlZC5yZWR1Y2UoXG4gICAgICAobXNnOiBzdHJpbmcsIGxpbmtlZE1vZHVsZTogTGlua2VkTW9kdWxlVHlwZSkgPT5cbiAgICAgICAgYCR7bXNnfVxcbiAqICR7bGlua2VkTW9kdWxlLm5hbWV9YCxcbiAgICAgIGBMaW5rZWQgJHttc2dNb2R1bGV9OmBcbiAgICApO1xuXG4gICAgbG9nKGJveGVuKGxpbmtlZE1zZywge2RpbUJvcmRlcjogdHJ1ZSwgcGFkZGluZzogMX0pLCAnd2FybicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGVtcGxhdGVOYW1lID0gKGZpbGVQYXRoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZywgcmVwbGFjZUNhcHM6IHN0cmluZykgPT4ge1xuICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9zYW1wbGUvZywgcmVwbGFjZSk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1NhbXBsZS9nLCByZXBsYWNlQ2Fwcyk7XG4gIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGRhdGEsICd1dGY4Jyk7XG59O1xuIl0sIm5hbWVzIjpbImJveGVuIiwiY2hhbGsiLCJjb3B5RmlsZSIsImV4aXN0c1N5bmMiLCJsc3RhdFN5bmMiLCJta2RpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJpc0VtcHR5Iiwib3JhIiwiYmFzZW5hbWUiLCJwYXRoQmFzZW5hbWUiLCJqb2luIiwicGF0aEpvaW4iLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsInJpbXJhZlN5bmMiLCJsb2ciLCJnZXRGaWxlbmFtZXMiLCJwcm9wcyIsImNhbGxiYWNrIiwiY2xpTmFtZSIsIm5hbWUiLCJxdWlldCIsInR5cGUiLCJ1c2VUeXBlc2NyaXB0IiwibmFtZUNhcHMiLCJpdGVtVHlwZXMiLCJpbmNsdWRlcyIsInVuZGVmaW5lZCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic3Vic3RyIiwidGVtcGxhdGVQYXRoIiwidGVtcGxhdGVFeHQiLCJ0ZW1wbGF0ZVJlYWN0IiwiY3JlYXRlU3Bpbm5lciIsImZhaWwiLCJzdGFydCIsInN1Y2NlZWQiLCJjb2xvciIsImNyZWF0ZVByb2dyZXNzQmFyIiwicGVyY2VudGFnZSIsIndpZHRoIiwiZmlsbGVkIiwiTWF0aCIsInJvdW5kIiwiZW1wdHkiLCJmaWxsZWRCYXIiLCJjeWFuIiwicmVwZWF0IiwiZW1wdHlCYXIiLCJncmF5IiwiaGFuZGxlV2VicGFja1Byb2dyZXNzIiwib3V0cHV0Iiwic3Bpbm5lciIsImVtb2ppIiwiYWN0aW9uIiwicHJvZ3Jlc3NNYXRjaCIsIm1hdGNoIiwicHJvZ3Jlc3MiLCJwYXJzZUludCIsInByb2dyZXNzQmFyIiwidGV4dCIsImdlbmVyYWxQcm9ncmVzc01hdGNoIiwiY29weUZpbGVzIiwiZmlsZXMiLCJ0eXBlTmFtZSIsImNvbmZpZyIsIm91dHB1dEZ1bGxQYXRoIiwic291cmNlRnVsbFBhdGgiLCJpdGVtcyIsIm1hcCIsImZpbGVOYW1lIiwiZnJvbSIsInRvIiwicHJvY2VzcyIsImN3ZCIsIlByb21pc2UiLCJhbGwiLCJyZWplY3QiLCJyZWN1cnNpdmUiLCJjb3B5RXJyb3IiLCJsZW5ndGgiLCJlcnJvciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY29weUZpbGVzQ29uZmlnIiwic291cmNlUGF0aCIsInRvdGFsQ29waWVkIiwiYmFzZURpciIsImFsbENvcHlQcm9taXNlcyIsInBhdHRlcm4iLCJyZXNvbHZlZFBhdHRlcm4iLCJtYXRjaGluZ0ZpbGVzIiwiYWJzb2x1dGUiLCJub2RpciIsImNvcHlQcm9taXNlcyIsInNvdXJjZUZpbGUiLCJyZWxhdGl2ZVBhdGgiLCJkZXN0UGF0aCIsImRlc3REaXIiLCJwdXNoIiwiY29weUZpbGVTeW5jIiwic291cmNlIiwidGFyZ2V0IiwidGFyZ2V0RmlsZSIsImlzRGlyZWN0b3J5IiwiY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMiLCJ0YXJnZXRGb2xkZXIiLCJmb3JFYWNoIiwiZmlsZSIsImN1clNvdXJjZSIsImdldFBhY2thZ2VKc29uIiwicGFja2FnZVBhdGgiLCJmb3JtYXRQYXRoIiwicGFja2FnZURhdGEiLCJ0b1N0cmluZyIsIkpTT04iLCJwYXJzZSIsImdldEZpbGVzQnlFeHQiLCJleHQiLCJyZW1vdmVDb25mbGljdE1vZHVsZXMiLCJtb2R1bGVMaXN0IiwidXBkYXRlZExpc3QiLCJPYmplY3QiLCJrZXlzIiwibW9kdWxlTmFtZSIsInJlZ2V4IiwiUmVnRXhwIiwidGVzdCIsInJlbW92ZUZpbGVzIiwiaXNSZWxhdGl2ZSIsImZpbGVQYXRoIiwicmVtb3ZlTW9kdWxlcyIsInNldFBhY2thZ2VKc29uIiwianNvbiIsInN0cmluZ2lmeSIsImxpbmtlZE1vZHVsZXMiLCJzdGFydFBhdGgiLCJ3b3JraW5nUGF0aCIsIm1vZHVsZVBhdGgiLCJwcmVmaXgiLCJzcGxpdCIsInBvcCIsImZvdW5kUGF0aHMiLCJyZWR1Y2UiLCJsaXN0IiwiZm91bmRQYXRoIiwic3RhdHMiLCJkZWVwTGlzdCIsImlzU3ltYm9saWNMaW5rIiwibW9kdWxlTmFtZXMiLCJmaWx0ZXIiLCJpdGVtIiwicGF0aCIsImNoZWNrTGlua2VkTW9kdWxlcyIsImxpbmtlZCIsIm1zZ01vZHVsZSIsImxpbmtlZE1zZyIsIm1zZyIsImxpbmtlZE1vZHVsZSIsImRpbUJvcmRlciIsInBhZGRpbmciLCJ1cGRhdGVUZW1wbGF0ZU5hbWUiLCJyZXBsYWNlIiwicmVwbGFjZUNhcHMiLCJkYXRhIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLFNBQVFDLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsV0FB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
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcHAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJztcbmltcG9ydCB7Y29weUZpbGUsIGV4aXN0c1N5bmMsIGxzdGF0U3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHkuanMnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHtiYXNlbmFtZSBhcyBwYXRoQmFzZW5hbWUsIGpvaW4gYXMgcGF0aEpvaW4sIHJlbGF0aXZlIGFzIHBhdGhSZWxhdGl2ZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3JpbXJhZlN5bmN9IGZyb20gJ3JpbXJhZic7XG5cbmltcG9ydCB7bG9nfSBmcm9tICcuL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtMZXhDb25maWdUeXBlfSBmcm9tICcuLi9MZXhDb25maWcuanMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZW5hbWVzUHJvcHMge1xuICByZWFkb25seSBjYWxsYmFjaz86IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZpbGVuYW1lc1Jlc3VsdCB7XG4gIG5hbWVDYXBzOiBzdHJpbmc7XG4gIHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlbmFtZXMgPSAocHJvcHM6IEdldEZpbGVuYW1lc1Byb3BzKTogRmlsZW5hbWVzUmVzdWx0IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qge2NhbGxiYWNrLCBjbGlOYW1lLCBuYW1lLCBxdWlldCwgdHlwZSwgdXNlVHlwZXNjcmlwdH0gPSBwcm9wcztcblxuICBsZXQgbmFtZUNhcHMgPSAnJztcbiAgY29uc3QgaXRlbVR5cGVzOiBzdHJpbmdbXSA9IFsnc3RvcmVzJywgJ3ZpZXdzJ107XG5cbiAgaWYoIW5hbWUpIHtcbiAgICBpZih0eXBlICYmIGl0ZW1UeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke3R5cGV9IG5hbWUgaXMgcmVxdWlyZWQuIFBsZWFzZSB1c2UgJ2xleCAtaCcgZm9yIG9wdGlvbnMuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2s/LigxKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5hbWVDYXBzID0gYCR7bmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke25hbWUuc3Vic3RyKDEpfWA7XG4gIH1cblxuICBsb2coYCR7Y2xpTmFtZX0gYWRkaW5nICR7bmFtZX0gJHt0eXBlfS4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGxldCB0ZW1wbGF0ZVBhdGg6IHN0cmluZztcbiAgbGV0IHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIGxldCB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIHRlbXBsYXRlUGF0aCA9ICcuLi8uLi90ZW1wbGF0ZXMvdHlwZXNjcmlwdCc7XG4gICAgdGVtcGxhdGVFeHQgPSAnLnRzJztcbiAgICB0ZW1wbGF0ZVJlYWN0ID0gJy50c3gnO1xuICB9IGVsc2Uge1xuICAgIHRlbXBsYXRlUGF0aCA9ICcuLi8uLi90ZW1wbGF0ZXMvZmxvdyc7XG4gICAgdGVtcGxhdGVFeHQgPSAnLmpzJztcbiAgICB0ZW1wbGF0ZVJlYWN0ID0gJy5qcyc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWVDYXBzLFxuICAgIHRlbXBsYXRlRXh0LFxuICAgIHRlbXBsYXRlUGF0aCxcbiAgICB0ZW1wbGF0ZVJlYWN0XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwaW5uZXIge1xuICBmYWlsOiAodGV4dD86IHN0cmluZykgPT4gdm9pZDtcbiAgc3RhcnQ6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuICBzdWNjZWVkOiAodGV4dD86IHN0cmluZykgPT4gdm9pZDtcbiAgdGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNwaW5uZXIgPSAocXVpZXQgPSBmYWxzZSk6IFNwaW5uZXIgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybiB7XG4gICAgICBmYWlsOiAoKSA9PiB7fSxcbiAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcbiAgICAgIHN1Y2NlZWQ6ICgpID0+IHt9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBvcmEoe2NvbG9yOiAneWVsbG93J30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGaWxlcyA9IGFzeW5jIChmaWxlczogc3RyaW5nW10sIHR5cGVOYW1lOiBzdHJpbmcsIHNwaW5uZXI6IFNwaW5uZXIsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSkgPT4ge1xuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHNvdXJjZUZ1bGxQYXRofSA9IGNvbmZpZztcbiAgY29uc3QgaXRlbXMgPSBmaWxlcy5tYXAoKGZpbGVOYW1lOiBzdHJpbmcpID0+ICh7XG4gICAgZnJvbTogZmlsZU5hbWUsXG4gICAgdG86IHBhdGhSZXNvbHZlKG91dHB1dEZ1bGxQYXRoIHx8IHByb2Nlc3MuY3dkKCksIHBhdGhSZWxhdGl2ZShzb3VyY2VGdWxsUGF0aCB8fCBwcm9jZXNzLmN3ZCgpLCBmaWxlTmFtZSkpXG4gIH0pKTtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoYENvcHlpbmcgJHt0eXBlTmFtZX0gZmlsZXMuLi5gKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChpdGVtcy5tYXAoKHtmcm9tLCB0b30pID0+IG5ldyBQcm9taXNlKFxuICAgICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBta2RpclN5bmMocGF0aFJlc29sdmUodG8sICcuLicpLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBjb3B5RmlsZShmcm9tLCB0bywgKGNvcHlFcnJvcikgPT4ge1xuICAgICAgICAgIGlmKGNvcHlFcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApKSk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgY29waWVkICR7ZmlsZXMubGVuZ3RofSAke3R5cGVOYW1lfSBmaWxlcyFgKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbChgQ29weWluZyBvZiAke3R5cGVOYW1lfSBmaWxlcyBmYWlsZWQuYCk7XG4gICAgbG9nKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICAgIGxvZyhTdHJpbmcoZXJyb3IpLCAnZXJyb3InKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlDb25maWd1cmVkRmlsZXMgPSBhc3luYyAoc3Bpbm5lcjogU3Bpbm5lciwgY29uZmlnOiBMZXhDb25maWdUeXBlLCBxdWlldDogYm9vbGVhbikgPT4ge1xuICBjb25zdCB7Y29weUZpbGVzOiBjb3B5RmlsZXNDb25maWcsIG91dHB1dEZ1bGxQYXRoLCBzb3VyY2VGdWxsUGF0aCwgc291cmNlUGF0aH0gPSBjb25maWc7XG4gIGlmKCFjb3B5RmlsZXNDb25maWcgfHwgY29weUZpbGVzQ29uZmlnLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQ29weWluZyBjb25maWd1cmVkIGZpbGVzLi4uJyk7XG4gICAgbGV0IHRvdGFsQ29waWVkID0gMDtcblxuICAgIGNvbnN0IGJhc2VEaXIgPSBzb3VyY2VGdWxsUGF0aCB8fCAoc291cmNlUGF0aCA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIHNvdXJjZVBhdGgpIDogcHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3QgYWxsQ29weVByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuICAgIGZvcihjb25zdCBwYXR0ZXJuIG9mIGNvcHlGaWxlc0NvbmZpZykge1xuICAgICAgY29uc3QgcmVzb2x2ZWRQYXR0ZXJuID0gcGF0aFJlc29sdmUoYmFzZURpciwgcGF0dGVybik7XG4gICAgICBjb25zdCBtYXRjaGluZ0ZpbGVzID0gZ2xvYlN5bmMocmVzb2x2ZWRQYXR0ZXJuLCB7XG4gICAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgICBub2RpcjogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmKG1hdGNoaW5nRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICAgIGxvZyhgV2FybmluZzogTm8gZmlsZXMgZm91bmQgbWF0Y2hpbmcgcGF0dGVybjogJHtwYXR0ZXJufWAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb3B5UHJvbWlzZXMgPSBtYXRjaGluZ0ZpbGVzLm1hcCgoc291cmNlRmlsZSkgPT4ge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoUmVsYXRpdmUoYmFzZURpciwgc291cmNlRmlsZSk7XG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGggfHwgcHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTtcbiAgICAgICAgY29uc3QgZGVzdERpciA9IHBhdGhSZXNvbHZlKGRlc3RQYXRoLCAnLi4nKTtcbiAgICAgICAgbWtkaXJTeW5jKGRlc3REaXIsIHtyZWN1cnNpdmU6IHRydWV9KTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvcHlGaWxlKHNvdXJjZUZpbGUsIGRlc3RQYXRoLCAoY29weUVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZihjb3B5RXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGNvcHlFcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBhbGxDb3B5UHJvbWlzZXMucHVzaCguLi5jb3B5UHJvbWlzZXMpO1xuICAgICAgdG90YWxDb3BpZWQgKz0gbWF0Y2hpbmdGaWxlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoYWxsQ29weVByb21pc2VzKTtcblxuICAgIGlmKHRvdGFsQ29waWVkID4gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgY29waWVkICR7dG90YWxDb3BpZWR9IGNvbmZpZ3VyZWQgZmlsZXMhYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnTm8gY29uZmlndXJlZCBmaWxlcyB0byBjb3B5Jyk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzJyk7XG4gICAgbG9nKGBFcnJvciBjb3B5aW5nIGNvbmZpZ3VyZWQgZmlsZXM6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKSA9PiB7XG4gIGxldCB0YXJnZXRGaWxlOiBzdHJpbmcgPSB0YXJnZXQ7XG5cbiAgaWYoZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgaWYobHN0YXRTeW5jKHRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGFyZ2V0RmlsZSA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZVN5bmModGFyZ2V0RmlsZSwgcmVhZEZpbGVTeW5jKHNvdXJjZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgdGFyZ2V0Rm9sZGVyOiBzdHJpbmcgPSBwYXRoSm9pbih0YXJnZXQsIHBhdGhCYXNlbmFtZShzb3VyY2UpKTtcblxuICBpZighZXhpc3RzU3luYyh0YXJnZXRGb2xkZXIpKSB7XG4gICAgbWtkaXJTeW5jKHRhcmdldEZvbGRlcik7XG4gIH1cblxuICBpZihsc3RhdFN5bmMoc291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZXMgPSByZWFkZGlyU3luYyhzb3VyY2UpO1xuICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgY3VyU291cmNlOiBzdHJpbmcgPSBwYXRoSm9pbihzb3VyY2UsIGZpbGUpO1xuXG4gICAgICBpZihsc3RhdFN5bmMoY3VyU291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKGN1clNvdXJjZSwgdGFyZ2V0Rm9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHlGaWxlU3luYyhjdXJTb3VyY2UsIHRhcmdldEZvbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlSnNvbiA9IChwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBjb25zdCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBwYWNrYWdlUGF0aCB8fCBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuICBjb25zdCBwYWNrYWdlRGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZvcm1hdFBhdGgpLnRvU3RyaW5nKCk7XG5cbiAgcmV0dXJuIEpTT04ucGFyc2UocGFja2FnZURhdGEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzQnlFeHQgPSAoZXh0OiBzdHJpbmcsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qge3NvdXJjZUZ1bGxQYXRofSA9IGNvbmZpZztcbiAgcmV0dXJuIGdsb2JTeW5jKGAqKi8qKiR7ZXh0fWAsIHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IHNvdXJjZUZ1bGxQYXRoLFxuICAgIG5vZGlyOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUNvbmZsaWN0TW9kdWxlcyA9IChtb2R1bGVMaXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICBjb25zdCB1cGRhdGVkTGlzdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7Li4ubW9kdWxlTGlzdH07XG5cbiAgT2JqZWN0LmtleXModXBkYXRlZExpc3QpLmZvckVhY2goKG1vZHVsZU5hbWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKCdeKD8hQHR5cGVzLykuKj8odml0ZXx2aXRlc3QpLiokJywgJ2dpJyk7XG4gICAgaWYocmVnZXgudGVzdChtb2R1bGVOYW1lKSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRMaXN0W21vZHVsZU5hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbGVzID0gKGZpbGVOYW1lOiBzdHJpbmcsIGlzUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gaXNSZWxhdGl2ZSA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIGZpbGVOYW1lKSA6IGZpbGVOYW1lO1xuXG4gIHRyeSB7XG4gICAgcmltcmFmU3luYyhmaWxlUGF0aCk7XG4gICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVNb2R1bGVzID0gKCkgPT4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL25vZGVfbW9kdWxlcycsIHRydWUpO1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL3lhcm4ubG9jaycsIHRydWUpO1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL3BhY2thZ2UtbG9jay5qc29uJywgdHJ1ZSk7XG5cbiAgICByZXNvbHZlKG51bGwpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRQYWNrYWdlSnNvbiA9IChqc29uOiB1bmtub3duLCBwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBpZighanNvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG5cbiAgd3JpdGVGaWxlU3luYyhmb3JtYXRQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZE1vZHVsZVR5cGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGxpbmtlZE1vZHVsZXMgPSAoc3RhcnRQYXRoPzogc3RyaW5nKTogTGlua2VkTW9kdWxlVHlwZVtdID0+IHtcbiAgY29uc3Qgd29ya2luZ1BhdGg6IHN0cmluZyA9IHN0YXJ0UGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICBsZXQgbW9kdWxlUGF0aDogc3RyaW5nO1xuICBsZXQgcHJlZml4OiBzdHJpbmc7XG5cbiAgaWYod29ya2luZ1BhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgIHByZWZpeCA9IGBAJHt3b3JraW5nUGF0aC5zcGxpdCgnQCcpLnBvcCgpfWA7XG4gICAgbW9kdWxlUGF0aCA9IHdvcmtpbmdQYXRoO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZVBhdGggPSBwYXRoSm9pbih3b3JraW5nUGF0aCwgJ25vZGVfbW9kdWxlcycpO1xuICB9XG5cbiAgY29uc3QgZm91bmRQYXRoczogc3RyaW5nW10gPSBnbG9iU3luYygnKicsIHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IG1vZHVsZVBhdGgsXG4gICAgbm9kaXI6IGZhbHNlXG4gIH0pO1xuXG4gIHJldHVybiBmb3VuZFBhdGhzLnJlZHVjZSgobGlzdDogTGlua2VkTW9kdWxlVHlwZVtdLCBmb3VuZFBhdGg6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IGxzdGF0U3luYyhmb3VuZFBhdGgpO1xuXG4gICAgICBpZihzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvbnN0IGRlZXBMaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10gPSBsaW5rZWRNb2R1bGVzKGZvdW5kUGF0aCk7XG4gICAgICAgIGxpc3QucHVzaCguLi5kZWVwTGlzdCk7XG4gICAgICB9IGVsc2UgaWYoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICBjb25zdCBtb2R1bGVOYW1lczogc3RyaW5nW10gPSAoW3ByZWZpeCwgcGF0aEJhc2VuYW1lKGZvdW5kUGF0aCldKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gIWlzRW1wdHkoaXRlbSkpO1xuICAgICAgICBsaXN0LnB1c2goe25hbWU6IGAke21vZHVsZU5hbWVzLmpvaW4oJy8nKX1gLCBwYXRoOiBmb3VuZFBhdGh9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cbiAgfSwgW10pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrTGlua2VkTW9kdWxlcyA9ICgpID0+IHtcbiAgY29uc3QgbGlua2VkID0gbGlua2VkTW9kdWxlcygpO1xuXG4gIGlmKGxpbmtlZC5sZW5ndGgpIHtcbiAgICBjb25zdCBtc2dNb2R1bGU6IHN0cmluZyA9IGxpbmtlZC5sZW5ndGggPiAxID8gJ01vZHVsZXMnIDogJ01vZHVsZSc7XG4gICAgY29uc3QgbGlua2VkTXNnOiBzdHJpbmcgPSBsaW5rZWQucmVkdWNlKFxuICAgICAgKG1zZzogc3RyaW5nLCBsaW5rZWRNb2R1bGU6IExpbmtlZE1vZHVsZVR5cGUpID0+XG4gICAgICAgIGAke21zZ31cXG4gKiAke2xpbmtlZE1vZHVsZS5uYW1lfWAsXG4gICAgICBgTGlua2VkICR7bXNnTW9kdWxlfTpgXG4gICAgKTtcblxuICAgIGxvZyhib3hlbihsaW5rZWRNc2csIHtkaW1Cb3JkZXI6IHRydWUsIHBhZGRpbmc6IDF9KSwgJ3dhcm4nKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVRlbXBsYXRlTmFtZSA9IChmaWxlUGF0aDogc3RyaW5nLCByZXBsYWNlOiBzdHJpbmcsIHJlcGxhY2VDYXBzOiBzdHJpbmcpID0+IHtcbiAgbGV0IGRhdGE6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgZGF0YSA9IGRhdGEucmVwbGFjZSgvc2FtcGxlL2csIHJlcGxhY2UpO1xuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9TYW1wbGUvZywgcmVwbGFjZUNhcHMpO1xuICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBkYXRhLCAndXRmOCcpO1xufTtcbiJdLCJuYW1lcyI6WyJib3hlbiIsImNvcHlGaWxlIiwiZXhpc3RzU3luYyIsImxzdGF0U3luYyIsIm1rZGlyU3luYyIsInJlYWRkaXJTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsInN5bmMiLCJnbG9iU3luYyIsImlzRW1wdHkiLCJvcmEiLCJiYXNlbmFtZSIsInBhdGhCYXNlbmFtZSIsImpvaW4iLCJwYXRoSm9pbiIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwicmltcmFmU3luYyIsImxvZyIsImdldEZpbGVuYW1lcyIsInByb3BzIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwibmFtZSIsInF1aWV0IiwidHlwZSIsInVzZVR5cGVzY3JpcHQiLCJuYW1lQ2FwcyIsIml0ZW1UeXBlcyIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzdWJzdHIiLCJ0ZW1wbGF0ZVBhdGgiLCJ0ZW1wbGF0ZUV4dCIsInRlbXBsYXRlUmVhY3QiLCJjcmVhdGVTcGlubmVyIiwiZmFpbCIsInN0YXJ0Iiwic3VjY2VlZCIsImNvbG9yIiwiY29weUZpbGVzIiwiZmlsZXMiLCJ0eXBlTmFtZSIsInNwaW5uZXIiLCJjb25maWciLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwiaXRlbXMiLCJtYXAiLCJmaWxlTmFtZSIsImZyb20iLCJ0byIsInByb2Nlc3MiLCJjd2QiLCJQcm9taXNlIiwiYWxsIiwicmVqZWN0IiwicmVjdXJzaXZlIiwiY29weUVycm9yIiwibGVuZ3RoIiwiZXJyb3IiLCJtZXNzYWdlIiwiU3RyaW5nIiwiY29weUNvbmZpZ3VyZWRGaWxlcyIsImNvcHlGaWxlc0NvbmZpZyIsInNvdXJjZVBhdGgiLCJ0b3RhbENvcGllZCIsImJhc2VEaXIiLCJhbGxDb3B5UHJvbWlzZXMiLCJwYXR0ZXJuIiwicmVzb2x2ZWRQYXR0ZXJuIiwibWF0Y2hpbmdGaWxlcyIsImFic29sdXRlIiwibm9kaXIiLCJjb3B5UHJvbWlzZXMiLCJzb3VyY2VGaWxlIiwicmVsYXRpdmVQYXRoIiwiZGVzdFBhdGgiLCJkZXN0RGlyIiwicHVzaCIsImNvcHlGaWxlU3luYyIsInNvdXJjZSIsInRhcmdldCIsInRhcmdldEZpbGUiLCJpc0RpcmVjdG9yeSIsImNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jIiwidGFyZ2V0Rm9sZGVyIiwiZm9yRWFjaCIsImZpbGUiLCJjdXJTb3VyY2UiLCJnZXRQYWNrYWdlSnNvbiIsInBhY2thZ2VQYXRoIiwiZm9ybWF0UGF0aCIsInBhY2thZ2VEYXRhIiwidG9TdHJpbmciLCJKU09OIiwicGFyc2UiLCJnZXRGaWxlc0J5RXh0IiwiZXh0IiwicmVtb3ZlQ29uZmxpY3RNb2R1bGVzIiwibW9kdWxlTGlzdCIsInVwZGF0ZWRMaXN0IiwiT2JqZWN0Iiwia2V5cyIsIm1vZHVsZU5hbWUiLCJyZWdleCIsIlJlZ0V4cCIsInRlc3QiLCJyZW1vdmVGaWxlcyIsImlzUmVsYXRpdmUiLCJmaWxlUGF0aCIsInJlbW92ZU1vZHVsZXMiLCJzZXRQYWNrYWdlSnNvbiIsImpzb24iLCJzdHJpbmdpZnkiLCJsaW5rZWRNb2R1bGVzIiwic3RhcnRQYXRoIiwid29ya2luZ1BhdGgiLCJtb2R1bGVQYXRoIiwicHJlZml4Iiwic3BsaXQiLCJwb3AiLCJmb3VuZFBhdGhzIiwicmVkdWNlIiwibGlzdCIsImZvdW5kUGF0aCIsInN0YXRzIiwiZGVlcExpc3QiLCJpc1N5bWJvbGljTGluayIsIm1vZHVsZU5hbWVzIiwiZmlsdGVyIiwiaXRlbSIsInBhdGgiLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJsaW5rZWQiLCJtc2dNb2R1bGUiLCJsaW5rZWRNc2ciLCJtc2ciLCJsaW5rZWRNb2R1bGUiLCJkaW1Cb3JkZXIiLCJwYWRkaW5nIiwidXBkYXRlVGVtcGxhdGVOYW1lIiwicmVwbGFjZSIsInJlcGxhY2VDYXBzIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLFNBQVFDLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQ3hHLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLE9BQU9DLGFBQWEsb0JBQW9CO0FBQ3hDLE9BQU9DLFNBQVMsTUFBTTtBQUN0QixTQUFRQyxZQUFZQyxZQUFZLEVBQUVDLFFBQVFDLFFBQVEsRUFBRUMsWUFBWUMsWUFBWSxFQUFFQyxXQUFXQyxXQUFXLFFBQU8sT0FBTztBQUNsSCxTQUFRQyxVQUFVLFFBQU8sU0FBUztBQUVsQyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQXFCN0IsT0FBTyxNQUFNQyxlQUFlLENBQUNDO0lBQzNCLE1BQU0sRUFBQ0MsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLGFBQWEsRUFBQyxHQUFHTjtJQUU5RCxJQUFJTyxXQUFXO0lBQ2YsTUFBTUMsWUFBc0I7UUFBQztRQUFVO0tBQVE7SUFFL0MsSUFBRyxDQUFDTCxNQUFNO1FBQ1IsSUFBR0UsUUFBUUcsVUFBVUMsUUFBUSxDQUFDSixPQUFPO1lBQ25DUCxJQUFJLENBQUMsRUFBRSxFQUFFSSxRQUFRLFFBQVEsRUFBRUcsS0FBSyxtREFBbUQsQ0FBQyxFQUFFLFNBQVNEO1lBQy9GSCxX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
@@ -1,20 +1,18 @@
1
- import webpack from 'webpack';
2
1
  type IdentifierPrefix = false | string | ((filePath: string) => string);
3
- export interface LexSvgSpritemapPluginOptions {
2
+ export interface LexSvgSpritemapOptions {
4
3
  readonly allowDuplicates?: boolean;
5
4
  readonly filename?: string;
6
5
  readonly optimize?: boolean;
7
6
  readonly prefix?: IdentifierPrefix;
8
7
  }
9
- export declare class LexSvgSpritemapPlugin {
8
+ export declare class LexSvgSpritemap {
10
9
  readonly patterns: string[];
11
- readonly options: Required<LexSvgSpritemapPluginOptions>;
12
- constructor(patterns: string | string[], options?: LexSvgSpritemapPluginOptions);
10
+ readonly options: Required<LexSvgSpritemapOptions>;
11
+ constructor(patterns: string | string[], options?: LexSvgSpritemapOptions);
13
12
  buildSpritemap(): {
14
13
  content: string | null;
15
14
  filePaths: string[];
16
- warnings: webpack.WebpackError[];
15
+ warnings: Error[];
17
16
  };
18
- apply(compiler: webpack.Compiler): void;
19
17
  }
20
- export default LexSvgSpritemapPlugin;
18
+ export default LexSvgSpritemap;