@angular-devkit/build-angular 17.0.0-rc.0 → 17.0.0-rc.1

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 (233) hide show
  1. package/package.json +6 -6
  2. package/plugins/karma.js +0 -1
  3. package/src/builders/app-shell/index.js +2 -1
  4. package/src/builders/app-shell/render-worker.js +0 -1
  5. package/src/builders/app-shell/schema.js +0 -1
  6. package/src/builders/application/build-action.js +0 -1
  7. package/src/builders/application/execute-build.js +16 -10
  8. package/src/builders/application/execute-post-bundle.js +1 -2
  9. package/src/builders/application/i18n.js +0 -1
  10. package/src/builders/application/index.js +8 -2
  11. package/src/builders/application/options.js +0 -1
  12. package/src/builders/application/schema.d.ts +4 -2
  13. package/src/builders/application/schema.js +0 -1
  14. package/src/builders/application/schema.json +2 -2
  15. package/src/builders/browser/index.js +0 -1
  16. package/src/builders/browser/schema.js +0 -1
  17. package/src/builders/browser-esbuild/builder-status-warnings.js +0 -1
  18. package/src/builders/browser-esbuild/index.js +0 -1
  19. package/src/builders/browser-esbuild/schema.js +0 -1
  20. package/src/builders/dev-server/builder.js +0 -1
  21. package/src/builders/dev-server/index.js +0 -1
  22. package/src/builders/dev-server/load-proxy-config.js +0 -1
  23. package/src/builders/dev-server/options.js +0 -1
  24. package/src/builders/dev-server/schema.js +0 -1
  25. package/src/builders/dev-server/vite-server.d.ts +5 -2
  26. package/src/builders/dev-server/vite-server.js +53 -36
  27. package/src/builders/dev-server/webpack-server.js +0 -1
  28. package/src/builders/extract-i18n/application-extraction.js +0 -1
  29. package/src/builders/extract-i18n/builder.js +0 -1
  30. package/src/builders/extract-i18n/empty-loader.js +0 -1
  31. package/src/builders/extract-i18n/index.js +0 -1
  32. package/src/builders/extract-i18n/ivy-extract-loader.js +0 -1
  33. package/src/builders/extract-i18n/options.js +0 -1
  34. package/src/builders/extract-i18n/schema.js +0 -1
  35. package/src/builders/extract-i18n/webpack-extraction.js +0 -1
  36. package/src/builders/jest/index.js +0 -1
  37. package/src/builders/jest/options.js +0 -1
  38. package/src/builders/jest/schema.js +0 -1
  39. package/src/builders/jest/test-files.js +0 -1
  40. package/src/builders/karma/find-tests-plugin.js +0 -1
  41. package/src/builders/karma/index.js +0 -1
  42. package/src/builders/karma/schema.js +0 -1
  43. package/src/builders/ng-packagr/index.js +0 -1
  44. package/src/builders/ng-packagr/schema.js +0 -1
  45. package/src/builders/prerender/index.js +2 -1
  46. package/src/builders/prerender/render-worker.js +0 -1
  47. package/src/builders/prerender/routes-extractor-worker.js +1 -2
  48. package/src/builders/prerender/schema.d.ts +4 -2
  49. package/src/builders/prerender/schema.js +0 -1
  50. package/src/builders/prerender/schema.json +2 -2
  51. package/src/builders/protractor/index.js +0 -1
  52. package/src/builders/protractor/schema.js +0 -1
  53. package/src/builders/server/index.js +0 -1
  54. package/src/builders/server/platform-server-exports-loader.js +0 -1
  55. package/src/builders/server/schema.js +0 -1
  56. package/src/builders/ssr-dev-server/index.js +0 -1
  57. package/src/builders/ssr-dev-server/schema.js +0 -1
  58. package/src/builders/ssr-dev-server/utils.js +0 -1
  59. package/src/index.js +0 -1
  60. package/src/tools/babel/plugins/adjust-static-class-members.js +0 -1
  61. package/src/tools/babel/plugins/adjust-typescript-enums.js +0 -1
  62. package/src/tools/babel/plugins/elide-angular-metadata.js +0 -1
  63. package/src/tools/babel/plugins/pure-toplevel-functions.js +0 -1
  64. package/src/tools/babel/presets/application.js +0 -1
  65. package/src/tools/babel/webpack-loader.js +0 -1
  66. package/src/tools/esbuild/angular/angular-host.js +0 -1
  67. package/src/tools/esbuild/angular/compilation/angular-compilation.d.ts +2 -1
  68. package/src/tools/esbuild/angular/compilation/angular-compilation.js +32 -6
  69. package/src/tools/esbuild/angular/compilation/aot-compilation.js +0 -1
  70. package/src/tools/esbuild/angular/compilation/factory.js +0 -1
  71. package/src/tools/esbuild/angular/compilation/index.js +0 -1
  72. package/src/tools/esbuild/angular/compilation/jit-compilation.js +0 -1
  73. package/src/tools/esbuild/angular/compilation/noop-compilation.d.ts +1 -1
  74. package/src/tools/esbuild/angular/compilation/noop-compilation.js +0 -1
  75. package/src/tools/esbuild/angular/compilation/parallel-compilation.js +0 -1
  76. package/src/tools/esbuild/angular/compilation/parallel-worker.js +0 -1
  77. package/src/tools/esbuild/angular/compilation-state.js +0 -1
  78. package/src/tools/esbuild/angular/compiler-plugin.js +13 -6
  79. package/src/tools/esbuild/angular/component-stylesheets.d.ts +2 -3
  80. package/src/tools/esbuild/angular/component-stylesheets.js +45 -32
  81. package/src/tools/esbuild/angular/diagnostics.d.ts +2 -2
  82. package/src/tools/esbuild/angular/diagnostics.js +9 -11
  83. package/src/tools/esbuild/angular/file-reference-tracker.js +0 -1
  84. package/src/tools/esbuild/angular/jit-plugin-callbacks.js +0 -1
  85. package/src/tools/esbuild/angular/jit-resource-transformer.js +0 -1
  86. package/src/tools/esbuild/angular/source-file-cache.d.ts +1 -1
  87. package/src/tools/esbuild/angular/source-file-cache.js +0 -1
  88. package/src/tools/esbuild/angular/uri.js +0 -1
  89. package/src/tools/esbuild/angular/web-worker-transformer.js +0 -1
  90. package/src/tools/esbuild/application-code-bundle.d.ts +1 -0
  91. package/src/tools/esbuild/application-code-bundle.js +192 -179
  92. package/src/tools/esbuild/budget-stats.js +0 -1
  93. package/src/tools/esbuild/bundler-context.d.ts +12 -1
  94. package/src/tools/esbuild/bundler-context.js +105 -10
  95. package/src/tools/esbuild/bundler-execution-result.d.ts +15 -0
  96. package/src/tools/esbuild/bundler-execution-result.js +11 -1
  97. package/src/tools/esbuild/commonjs-checker.js +3 -1
  98. package/src/tools/esbuild/compiler-plugin-options.js +0 -1
  99. package/src/tools/esbuild/global-scripts.js +0 -1
  100. package/src/tools/esbuild/global-styles.js +0 -1
  101. package/src/tools/esbuild/i18n-inliner-worker.js +0 -1
  102. package/src/tools/esbuild/i18n-inliner.js +2 -1
  103. package/src/tools/esbuild/i18n-locale-plugin.js +0 -1
  104. package/src/tools/esbuild/index-html-generator.js +0 -1
  105. package/src/tools/esbuild/javascript-transfomer-plugin.d.ts +19 -0
  106. package/src/tools/esbuild/javascript-transfomer-plugin.js +51 -0
  107. package/src/tools/esbuild/javascript-transformer-worker.js +0 -1
  108. package/src/tools/esbuild/javascript-transformer.d.ts +1 -1
  109. package/src/tools/esbuild/javascript-transformer.js +5 -1
  110. package/src/tools/esbuild/license-extractor.js +0 -1
  111. package/src/tools/esbuild/load-result-cache.d.ts +2 -0
  112. package/src/tools/esbuild/load-result-cache.js +3 -1
  113. package/src/tools/esbuild/profiling.js +0 -1
  114. package/src/tools/esbuild/rxjs-esm-resolution-plugin.js +0 -1
  115. package/src/tools/esbuild/sourcemap-ignorelist-plugin.js +0 -1
  116. package/src/tools/esbuild/stylesheets/bundle-options.js +0 -1
  117. package/src/tools/esbuild/stylesheets/css-language.js +0 -1
  118. package/src/tools/esbuild/stylesheets/css-resource-plugin.js +25 -7
  119. package/src/tools/esbuild/stylesheets/less-language.js +0 -1
  120. package/src/tools/esbuild/stylesheets/sass-language.js +6 -20
  121. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js +0 -1
  122. package/src/tools/esbuild/utils.d.ts +1 -0
  123. package/src/tools/esbuild/utils.js +20 -2
  124. package/src/tools/esbuild/virtual-module-plugin.d.ts +3 -0
  125. package/src/tools/esbuild/virtual-module-plugin.js +3 -3
  126. package/src/tools/esbuild/watcher.js +0 -1
  127. package/src/tools/sass/lexer.js +0 -1
  128. package/src/tools/sass/rebasing-importer.d.ts +3 -8
  129. package/src/tools/sass/rebasing-importer.js +3 -52
  130. package/src/tools/sass/sass-service-legacy.js +0 -1
  131. package/src/tools/sass/sass-service.d.ts +1 -17
  132. package/src/tools/sass/sass-service.js +4 -6
  133. package/src/tools/sass/worker-legacy.js +0 -1
  134. package/src/tools/sass/worker.js +8 -2
  135. package/src/tools/vite/i18n-locale-plugin.js +0 -1
  136. package/src/tools/webpack/configs/common.js +0 -1
  137. package/src/tools/webpack/configs/dev-server.js +0 -1
  138. package/src/tools/webpack/configs/index.js +0 -1
  139. package/src/tools/webpack/configs/styles.js +6 -12
  140. package/src/tools/webpack/plugins/any-component-style-budget-checker.js +0 -1
  141. package/src/tools/webpack/plugins/builder-watch-plugin.js +0 -1
  142. package/src/tools/webpack/plugins/common-js-usage-warn-plugin.js +0 -1
  143. package/src/tools/webpack/plugins/css-optimizer-plugin.js +0 -1
  144. package/src/tools/webpack/plugins/dedupe-module-resolve-plugin.js +0 -1
  145. package/src/tools/webpack/plugins/devtools-ignore-plugin.js +0 -1
  146. package/src/tools/webpack/plugins/esbuild-executor.js +0 -1
  147. package/src/tools/webpack/plugins/hmr/hmr-accept.js +0 -1
  148. package/src/tools/webpack/plugins/hmr/hmr-loader.js +0 -1
  149. package/src/tools/webpack/plugins/index-html-webpack-plugin.js +0 -1
  150. package/src/tools/webpack/plugins/index.js +0 -1
  151. package/src/tools/webpack/plugins/javascript-optimizer-plugin.js +2 -1
  152. package/src/tools/webpack/plugins/javascript-optimizer-worker.js +0 -1
  153. package/src/tools/webpack/plugins/json-stats-plugin.js +0 -1
  154. package/src/tools/webpack/plugins/karma/karma.js +0 -1
  155. package/src/tools/webpack/plugins/named-chunks-plugin.js +0 -1
  156. package/src/tools/webpack/plugins/occurrences-plugin.js +0 -1
  157. package/src/tools/webpack/plugins/postcss-cli-resources.js +0 -1
  158. package/src/tools/webpack/plugins/progress-plugin.js +0 -1
  159. package/src/tools/webpack/plugins/remove-hash-plugin.js +0 -1
  160. package/src/tools/webpack/plugins/scripts-webpack-plugin.js +0 -1
  161. package/src/tools/webpack/plugins/service-worker-plugin.js +0 -1
  162. package/src/tools/webpack/plugins/styles-webpack-plugin.js +0 -1
  163. package/src/tools/webpack/plugins/suppress-entry-chunks-webpack-plugin.js +0 -1
  164. package/src/tools/webpack/plugins/transfer-size-plugin.js +0 -1
  165. package/src/tools/webpack/plugins/typescript.js +0 -1
  166. package/src/tools/webpack/plugins/watch-files-logs-plugin.js +0 -1
  167. package/src/tools/webpack/utils/async-chunks.js +0 -1
  168. package/src/tools/webpack/utils/helpers.js +0 -1
  169. package/src/tools/webpack/utils/stats.js +0 -1
  170. package/src/transforms.js +0 -1
  171. package/src/utils/action-executor.js +5 -2
  172. package/src/utils/build-options.js +0 -1
  173. package/src/utils/bundle-calculator.js +0 -1
  174. package/src/utils/bundle-inline-options.js +0 -1
  175. package/src/utils/check-port.js +0 -1
  176. package/src/utils/color.js +0 -1
  177. package/src/utils/copy-assets.js +0 -1
  178. package/src/utils/default-progress.js +0 -1
  179. package/src/utils/delete-output-dir.js +0 -1
  180. package/src/utils/environment-options.js +0 -1
  181. package/src/utils/error.js +0 -1
  182. package/src/utils/i18n-inlining.js +0 -1
  183. package/src/utils/i18n-options.js +0 -1
  184. package/src/utils/index-file/augment-index-html.js +0 -1
  185. package/src/utils/index-file/html-rewriting-stream.js +0 -1
  186. package/src/utils/index-file/index-html-generator.js +0 -1
  187. package/src/utils/index-file/inline-critical-css.js +0 -1
  188. package/src/utils/index-file/inline-fonts.js +0 -1
  189. package/src/utils/index-file/style-nonce.js +0 -1
  190. package/src/utils/index.js +0 -1
  191. package/src/utils/load-esm.js +0 -1
  192. package/src/utils/load-translations.js +0 -1
  193. package/src/utils/normalize-asset-patterns.js +0 -1
  194. package/src/utils/normalize-builder-schema.js +0 -1
  195. package/src/utils/normalize-cache.js +0 -1
  196. package/src/utils/normalize-file-replacements.js +0 -1
  197. package/src/utils/normalize-optimization.js +0 -1
  198. package/src/utils/normalize-polyfills.js +0 -1
  199. package/src/utils/normalize-source-maps.js +0 -1
  200. package/src/utils/output-paths.js +0 -1
  201. package/src/utils/package-chunk-sort.js +0 -1
  202. package/src/utils/package-version.js +0 -1
  203. package/src/utils/process-bundle.js +0 -1
  204. package/src/utils/purge-cache.js +0 -1
  205. package/src/utils/read-tsconfig.js +0 -1
  206. package/src/utils/routes-extractor/extractor.d.ts +1 -1
  207. package/src/utils/routes-extractor/extractor.js +2 -3
  208. package/src/utils/run-module-as-observable-fork.js +0 -1
  209. package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js +0 -1
  210. package/src/utils/server-rendering/esm-in-memory-loader/node-18-utils.js +0 -1
  211. package/src/utils/server-rendering/esm-in-memory-loader/register-hooks.js +0 -1
  212. package/src/utils/server-rendering/main-bundle-exports.d.ts +4 -2
  213. package/src/utils/server-rendering/main-bundle-exports.js +0 -1
  214. package/src/utils/server-rendering/prerender-server.d.ts +21 -0
  215. package/src/utils/server-rendering/prerender-server.js +102 -0
  216. package/src/utils/server-rendering/prerender.d.ts +2 -1
  217. package/src/utils/server-rendering/prerender.js +49 -19
  218. package/src/utils/server-rendering/render-page.d.ts +2 -2
  219. package/src/utils/server-rendering/render-page.js +2 -2
  220. package/src/utils/server-rendering/render-worker.d.ts +2 -0
  221. package/src/utils/server-rendering/render-worker.js +9 -3
  222. package/src/utils/server-rendering/routes-extractor-worker.d.ts +2 -0
  223. package/src/utils/server-rendering/routes-extractor-worker.js +4 -4
  224. package/src/utils/service-worker.js +0 -1
  225. package/src/utils/spinner.js +0 -1
  226. package/src/utils/strip-bom.js +0 -1
  227. package/src/utils/supported-browsers.js +0 -1
  228. package/src/utils/tailwind.js +0 -1
  229. package/src/utils/tty.js +0 -1
  230. package/src/utils/url.js +0 -1
  231. package/src/utils/version.js +0 -1
  232. package/src/utils/webpack-browser-config.js +0 -1
  233. package/src/utils/webpack-diagnostics.js +0 -1
@@ -33,7 +33,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
33
33
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
34
  };
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getSupportedNodeTargets = exports.transformSupportedBrowsersToTargets = exports.getFullOutputPath = exports.createOutputFileFromData = exports.createOutputFileFromText = exports.emitFilesToDisk = exports.writeResultFiles = exports.getFeatureSupport = exports.logMessages = exports.withNoProgress = exports.withSpinner = exports.calculateEstimatedTransferSizes = exports.logBuildStats = void 0;
36
+ exports.getSupportedNodeTargets = exports.transformSupportedBrowsersToTargets = exports.getFullOutputPath = exports.convertOutputFile = exports.createOutputFileFromData = exports.createOutputFileFromText = exports.emitFilesToDisk = exports.writeResultFiles = exports.getFeatureSupport = exports.logMessages = exports.withNoProgress = exports.withSpinner = exports.calculateEstimatedTransferSizes = exports.logBuildStats = void 0;
37
37
  const esbuild_1 = require("esbuild");
38
38
  const node_crypto_1 = require("node:crypto");
39
39
  const node_fs_1 = require("node:fs");
@@ -252,6 +252,25 @@ function createOutputFileFromData(path, data, type) {
252
252
  };
253
253
  }
254
254
  exports.createOutputFileFromData = createOutputFileFromData;
255
+ function convertOutputFile(file, type) {
256
+ const { path, contents, hash } = file;
257
+ return {
258
+ contents,
259
+ hash,
260
+ path,
261
+ type,
262
+ get text() {
263
+ return Buffer.from(this.contents.buffer, this.contents.byteOffset, this.contents.byteLength).toString('utf-8');
264
+ },
265
+ get fullOutputPath() {
266
+ return getFullOutputPath(this);
267
+ },
268
+ clone() {
269
+ return convertOutputFile(this, this.type);
270
+ },
271
+ };
272
+ }
273
+ exports.convertOutputFile = convertOutputFile;
255
274
  function getFullOutputPath(file) {
256
275
  switch (file.type) {
257
276
  case bundler_context_1.BuildOutputFileType.Browser:
@@ -321,4 +340,3 @@ function getSupportedNodeTargets() {
321
340
  return SUPPORTED_NODE_VERSIONS.split('||').map((v) => 'node' + (0, semver_1.coerce)(v)?.version);
322
341
  }
323
342
  exports.getSupportedNodeTargets = getSupportedNodeTargets;
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy90b29scy9lc2J1aWxkL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0gscUNBQTZGO0FBQzdGLDZDQUF5QztBQUN6QyxxQ0FBbUQ7QUFDbkQsZ0VBQWtDO0FBQ2xDLHVEQUF1QztBQUN2Qyx5Q0FBc0M7QUFDdEMseUNBQTJDO0FBQzNDLG1DQUFnQztBQUVoQyxpREFBOEM7QUFDOUMsa0RBQThFO0FBQzlFLHVEQUE0RjtBQUc1RixNQUFNLGFBQWEsR0FBRyxJQUFBLHFCQUFTLEVBQUMsMEJBQWMsQ0FBQyxDQUFDO0FBRWhELFNBQWdCLGFBQWEsQ0FDM0IsT0FBdUIsRUFDdkIsUUFBa0IsRUFDbEIsT0FBdUMsRUFDdkMsY0FBb0QsRUFDcEQsc0JBQTRDO0lBRTVDLE1BQU0sS0FBSyxHQUFrQixFQUFFLENBQUM7SUFDaEMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzdELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkQsU0FBUztTQUNWO1FBQ0Qsb0NBQW9DO1FBQ3BDLDhEQUE4RDtRQUM5RCxJQUFLLE1BQWMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNuQyxTQUFTO1NBQ1Y7UUFFRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztRQUNuQyxJQUFJLElBQUksS0FBSyxT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QzdDLGlHQUFpRztRQUNqRyxPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBQSxlQUFNLEVBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckYsQ0FBQztBQVBELDBEQU9DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IEJ1aWxkZXJDb250ZXh0IH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2FyY2hpdGVjdCc7XG5pbXBvcnQgeyBCdWlsZE9wdGlvbnMsIE1ldGFmaWxlLCBPdXRwdXRGaWxlLCBQYXJ0aWFsTWVzc2FnZSwgZm9ybWF0TWVzc2FnZXMgfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBjb25zdGFudHMgYXMgZnNDb25zdGFudHMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBmcyBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoLCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IGJyb3RsaUNvbXByZXNzIH0gZnJvbSAnbm9kZTp6bGliJztcbmltcG9ydCB7IGNvZXJjZSB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBCdWRnZXRDYWxjdWxhdG9yUmVzdWx0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYnVuZGxlLWNhbGN1bGF0b3InO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uLy4uL3V0aWxzL3NwaW5uZXInO1xuaW1wb3J0IHsgQnVuZGxlU3RhdHMsIGdlbmVyYXRlQnVpbGRTdGF0c1RhYmxlIH0gZnJvbSAnLi4vd2VicGFjay91dGlscy9zdGF0cyc7XG5pbXBvcnQgeyBCdWlsZE91dHB1dEZpbGUsIEJ1aWxkT3V0cHV0RmlsZVR5cGUsIEluaXRpYWxGaWxlUmVjb3JkIH0gZnJvbSAnLi9idW5kbGVyLWNvbnRleHQnO1xuaW1wb3J0IHsgQnVpbGRPdXRwdXRBc3NldCB9IGZyb20gJy4vYnVuZGxlci1leGVjdXRpb24tcmVzdWx0JztcblxuY29uc3QgY29tcHJlc3NBc3luYyA9IHByb21pc2lmeShicm90bGlDb21wcmVzcyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dCdWlsZFN0YXRzKFxuICBjb250ZXh0OiBCdWlsZGVyQ29udGV4dCxcbiAgbWV0YWZpbGU6IE1ldGFmaWxlLFxuICBpbml0aWFsOiBNYXA8c3RyaW5nLCBJbml0aWFsRmlsZVJlY29yZD4sXG4gIGJ1ZGdldEZhaWx1cmVzOiBCdWRnZXRDYWxjdWxhdG9yUmVzdWx0W10gfCB1bmRlZmluZWQsXG4gIGVzdGltYXRlZFRyYW5zZmVyU2l6ZXM/OiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHN0YXRzOiBCdW5kbGVTdGF0c1tdID0gW107XG4gIGZvciAoY29uc3QgW2ZpbGUsIG91dHB1dF0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWZpbGUub3V0cHV0cykpIHtcbiAgICAvLyBPbmx5IGRpc3BsYXkgSmF2YVNjcmlwdCBhbmQgQ1NTIGZpbGVzXG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKCcuanMnKSAmJiAhZmlsZS5lbmRzV2l0aCgnLmNzcycpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gU2tpcCBpbnRlcm5hbCBjb21wb25lbnQgcmVzb3VyY2VzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoKG91dHB1dCBhcyBhbnkpWyduZy1jb21wb25lbnQnXSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IG5hbWUgPSBpbml0aWFsLmdldChmaWxlKT8ubmFtZTtcbiAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkICYmIG91dHB1dC5lbnRyeVBvaW50KSB7XG4gICAgICBuYW1lID0gcGF0aFxuICAgICAgICAuYmFzZW5hbWUob3V0cHV0LmVudHJ5UG9pbnQpXG4gICAgICAgIC5yZXBsYWNlKC9cXC5bY21dP1tqdF1zJC8sICcnKVxuICAgICAgICAucmVwbGFjZSgvW1xcXFwvLl0vZywgJy0nKTtcbiAgICB9XG5cbiAgICBzdGF0cy5wdXNoKHtcbiAgICAgIGluaXRpYWw6IGluaXRpYWwuaGFzKGZpbGUpLFxuICAgICAgc3RhdHM6IFtmaWxlLCBuYW1lID8/ICctJywgb3V0cHV0LmJ5dGVzLCBlc3RpbWF0ZWRUcmFuc2ZlclNpemVzPy5nZXQoZmlsZSkgPz8gJy0nXSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHRhYmxlVGV4dCA9IGdlbmVyYXRlQnVpbGRTdGF0c1RhYmxlKFxuICAgIHN0YXRzLFxuICAgIHRydWUsXG4gICAgdHJ1ZSxcbiAgICAhIWVzdGltYXRlZFRyYW5zZmVyU2l6ZXMsXG4gICAgYnVkZ2V0RmFpbHVyZXMsXG4gICk7XG5cbiAgY29udGV4dC5sb2dnZXIuaW5mbygnXFxuJyArIHRhYmxlVGV4dCArICdcXG4nKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUVzdGltYXRlZFRyYW5zZmVyU2l6ZXMoXG4gIG91dHB1dEZpbGVzOiBPdXRwdXRGaWxlW10sXG4pOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+IHtcbiAgY29uc3Qgc2l6ZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBwZW5kaW5nQ29tcHJlc3Npb24gPSBbXTtcblxuICBmb3IgKGNvbnN0IG91dHB1dEZpbGUgb2Ygb3V0cHV0RmlsZXMpIHtcbiAgICAvLyBPbmx5IGNhbGN1bGF0ZSBKYXZhU2NyaXB0IGFuZCBDU1MgZmlsZXNcbiAgICBpZiAoIW91dHB1dEZpbGUucGF0aC5lbmRzV2l0aCgnLmpzJykgJiYgIW91dHB1dEZpbGUucGF0aC5lbmRzV2l0aCgnLmNzcycpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGNvbXByZXNzaW5nIHNtYWxsIGZpbGVzIHdoaWNoIG1heSBlbmQgYmVpbmcgbGFyZ2VyIG9uY2UgY29tcHJlc3NlZCBhbmQgd2lsbCBtb3N0IGxpa2VseSBub3QgYmVcbiAgICAvLyBjb21wcmVzc2VkIGluIGFjdHVhbCB0cmFuc2l0LlxuICAgIGlmIChvdXRwdXRGaWxlLmNvbnRlbnRzLmJ5dGVMZW5ndGggPCAxMDI0KSB7XG4gICAgICBzaXplcy5zZXQob3V0cHV0RmlsZS5wYXRoLCBvdXRwdXRGaWxlLmNvbnRlbnRzLmJ5dGVMZW5ndGgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGVuZGluZ0NvbXByZXNzaW9uLnB1c2goXG4gICAgICBjb21wcmVzc0FzeW5jKG91dHB1dEZpbGUuY29udGVudHMpLnRoZW4oKHJlc3VsdCkgPT5cbiAgICAgICAgc2l6ZXMuc2V0KG91dHB1dEZpbGUucGF0aCwgcmVzdWx0LmJ5dGVMZW5ndGgpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocGVuZGluZ0NvbXByZXNzaW9uKTtcblxuICByZXR1cm4gc2l6ZXM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU3Bpbm5lcjxUPih0ZXh0OiBzdHJpbmcsIGFjdGlvbjogKCkgPT4gVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IG5ldyBTcGlubmVyKHRleHQpO1xuICBzcGlubmVyLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYWN0aW9uKCk7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhOb1Byb2dyZXNzPFQ+KHRleHQ6IHN0cmluZywgYWN0aW9uOiAoKSA9PiBUIHwgUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2dNZXNzYWdlcyhcbiAgY29udGV4dDogQnVpbGRlckNvbnRleHQsXG4gIHsgZXJyb3JzLCB3YXJuaW5ncyB9OiB7IGVycm9ycz86IFBhcnRpYWxNZXNzYWdlW107IHdhcm5pbmdzPzogUGFydGlhbE1lc3NhZ2VbXSB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh3YXJuaW5ncz8ubGVuZ3RoKSB7XG4gICAgY29uc3Qgd2FybmluZ01lc3NhZ2VzID0gYXdhaXQgZm9ybWF0TWVzc2FnZXMod2FybmluZ3MsIHsga2luZDogJ3dhcm5pbmcnLCBjb2xvcjogdHJ1ZSB9KTtcbiAgICBjb250ZXh0LmxvZ2dlci53YXJuKHdhcm5pbmdNZXNzYWdlcy5qb2luKCdcXG4nKSk7XG4gIH1cblxuICBpZiAoZXJyb3JzPy5sZW5ndGgpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gYXdhaXQgZm9ybWF0TWVzc2FnZXMoZXJyb3JzLCB7IGtpbmQ6ICdlcnJvcicsIGNvbG9yOiB0cnVlIH0pO1xuICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKGVycm9yTWVzc2FnZXMuam9pbignXFxuJykpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgc3ludGF4IGZlYXR1cmUgb2JqZWN0IG1hcCBmb3IgQW5ndWxhciBhcHBsaWNhdGlvbnMgYmFzZWQgb24gYSBsaXN0IG9mIHRhcmdldHMuXG4gKiBBIGZ1bGwgc2V0IG9mIGZlYXR1cmUgbmFtZXMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNzdXBwb3J0ZWRcbiAqIEBwYXJhbSB0YXJnZXQgQW4gYXJyYXkgb2YgYnJvd3Nlci9lbmdpbmUgdGFyZ2V0cyBpbiB0aGUgZm9ybWF0IGFjY2VwdGVkIGJ5IHRoZSBlc2J1aWxkIGB0YXJnZXRgIG9wdGlvbi5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIGVzYnVpbGQgYnVpbGQgYHN1cHBvcnRlZGAgb3B0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVhdHVyZVN1cHBvcnQodGFyZ2V0OiBzdHJpbmdbXSk6IEJ1aWxkT3B0aW9uc1snc3VwcG9ydGVkJ10ge1xuICBjb25zdCBzdXBwb3J0ZWQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge1xuICAgIC8vIE5hdGl2ZSBhc3luYy9hd2FpdCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggWm9uZS5qcy4gRGlzYWJsaW5nIHN1cHBvcnQgaGVyZSB3aWxsIGNhdXNlXG4gICAgLy8gZXNidWlsZCB0byBkb3dubGV2ZWwgYXN5bmMvYXdhaXQsIGFzeW5jIGdlbmVyYXRvcnMsIGFuZCBmb3IgYXdhaXQuLi5vZiB0byBhIFpvbmUuanMgc3VwcG9ydGVkIGZvcm0uXG4gICAgJ2FzeW5jLWF3YWl0JzogZmFsc2UsXG4gICAgLy8gVjggY3VycmVudGx5IGhhcyBhIHBlcmZvcm1hbmNlIGRlZmVjdCBpbnZvbHZpbmcgb2JqZWN0IHNwcmVhZCBvcGVyYXRpb25zIHRoYXQgY2FuIGNhdXNlIHNpZ25maWNhbnRcbiAgICAvLyBkZWdyYWRhdGlvbiBpbiBydW50aW1lIHBlcmZvcm1hbmNlLiBCeSBub3Qgc3VwcG9ydGluZyB0aGUgbGFuZ3VhZ2UgZmVhdHVyZSBoZXJlLCBhIGRvd25sZXZlbCBmb3JtXG4gICAgLy8gd2lsbCBiZSB1c2VkIGluc3RlYWQgd2hpY2ggcHJvdmlkZXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgcGVyZm9ybWFuY2UgaXNzdWUuXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTE1MzZcbiAgICAnb2JqZWN0LXJlc3Qtc3ByZWFkJzogZmFsc2UsXG4gIH07XG5cbiAgLy8gRGV0ZWN0IFNhZmFyaSBicm93c2VyIHZlcnNpb25zIHRoYXQgaGF2ZSBhIGNsYXNzIGZpZWxkIGJlaGF2aW9yIGJ1Z1xuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXItY2xpL2lzc3Vlcy8yNDM1NSNpc3N1ZWNvbW1lbnQtMTMzMzQ3NzAzM1xuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2NvbW1pdC9lODc4OGEzNGIzZDVmNWI0ZWRkN2ZmNjQ1MGI4MDkzNmJmZjM5NmYyXG4gIGxldCBzYWZhcmlDbGFzc0ZpZWxkU2NvcGVCdWcgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBicm93c2VyIG9mIHRhcmdldCkge1xuICAgIGxldCBtYWpvclZlcnNpb247XG4gICAgaWYgKGJyb3dzZXIuc3RhcnRzV2l0aCgnaW9zJykpIHtcbiAgICAgIG1ham9yVmVyc2lvbiA9IE51bWJlcihicm93c2VyLnNsaWNlKDMsIDUpKTtcbiAgICB9IGVsc2UgaWYgKGJyb3dzZXIuc3RhcnRzV2l0aCgnc2FmYXJpJykpIHtcbiAgICAgIG1ham9yVmVyc2lvbiA9IE51bWJlcihicm93c2VyLnNsaWNlKDYsIDgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFRlY2huaWNhbGx5LCAxNC4wIGlzIG5vdCBicm9rZW4gYnV0IHJhdGhlciBkb2VzIG5vdCBoYXZlIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZSBiZWhhdmlvclxuICAgIC8vIGlzIGlkZW50aWNhbCBzaW5jZSBpdCB3b3VsZCBiZSBzZXQgdG8gZmFsc2UgYnkgZXNidWlsZCBpZiBwcmVzZW50IGFzIGEgdGFyZ2V0LlxuICAgIGlmIChtYWpvclZlcnNpb24gPT09IDE0IHx8IG1ham9yVmVyc2lvbiA9PT0gMTUpIHtcbiAgICAgIHNhZmFyaUNsYXNzRmllbGRTY29wZUJ1ZyA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLy8gSWYgY2xhc3MgZmllbGQgc3VwcG9ydCBjYW5ub3QgYmUgdXNlZCBzZXQgdG8gZmFsc2U7IG90aGVyd2lzZSBsZWF2ZSB1bmRlZmluZWQgdG8gYWxsb3dcbiAgLy8gZXNidWlsZCB0byB1c2UgYHRhcmdldGAgdG8gZGV0ZXJtaW5lIHN1cHBvcnQuXG4gIGlmIChzYWZhcmlDbGFzc0ZpZWxkU2NvcGVCdWcpIHtcbiAgICBzdXBwb3J0ZWRbJ2NsYXNzLWZpZWxkJ10gPSBmYWxzZTtcbiAgICBzdXBwb3J0ZWRbJ2NsYXNzLXN0YXRpYy1maWVsZCddID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc3VwcG9ydGVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVSZXN1bHRGaWxlcyhcbiAgb3V0cHV0RmlsZXM6IEJ1aWxkT3V0cHV0RmlsZVtdLFxuICBhc3NldEZpbGVzOiBCdWlsZE91dHB1dEFzc2V0W10gfCB1bmRlZmluZWQsXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbikge1xuICBjb25zdCBkaXJlY3RvcnlFeGlzdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZW5zdXJlRGlyZWN0b3J5RXhpc3RzID0gYXN5bmMgKGJhc2VQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoYmFzZVBhdGggJiYgIWRpcmVjdG9yeUV4aXN0cy5oYXMoYmFzZVBhdGgpKSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmpvaW4ob3V0cHV0UGF0aCwgYmFzZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGRpcmVjdG9yeUV4aXN0cy5hZGQoYmFzZVBhdGgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBXcml0ZXMgdGhlIG91dHB1dCBmaWxlIHRvIGRpc2sgYW5kIGVuc3VyZXMgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3JpZXMgYXJlIHByZXNlbnRcbiAgYXdhaXQgZW1pdEZpbGVzVG9EaXNrKG91dHB1dEZpbGVzLCBhc3luYyAoZmlsZTogQnVpbGRPdXRwdXRGaWxlKSA9PiB7XG4gICAgY29uc3QgZnVsbE91dHB1dFBhdGggPSBmaWxlLmZ1bGxPdXRwdXRQYXRoO1xuICAgIC8vIEVuc3VyZSBvdXRwdXQgc3ViZGlyZWN0b3JpZXMgZXhpc3RcbiAgICBjb25zdCBiYXNlUGF0aCA9IHBhdGguZGlybmFtZShmdWxsT3V0cHV0UGF0aCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5RXhpc3RzKGJhc2VQYXRoKTtcblxuICAgIC8vIFdyaXRlIGZpbGUgY29udGVudHNcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKG91dHB1dFBhdGgsIGZ1bGxPdXRwdXRQYXRoKSwgZmlsZS5jb250ZW50cyk7XG4gIH0pO1xuXG4gIGlmIChhc3NldEZpbGVzPy5sZW5ndGgpIHtcbiAgICBhd2FpdCBlbWl0RmlsZXNUb0Rpc2soYXNzZXRGaWxlcywgYXN5bmMgKHsgc291cmNlLCBkZXN0aW5hdGlvbiB9KSA9PiB7XG4gICAgICAvLyBFbnN1cmUgb3V0cHV0IHN1YmRpcmVjdG9yaWVzIGV4aXN0XG4gICAgICBjb25zdCBkZXN0UGF0aCA9IGpvaW4oJ2Jyb3dzZXInLCBkZXN0aW5hdGlvbik7XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IHBhdGguZGlybmFtZShkZXN0UGF0aCk7XG4gICAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnlFeGlzdHMoYmFzZVBhdGgpO1xuXG4gICAgICAvLyBDb3B5IGZpbGUgY29udGVudHNcbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKHNvdXJjZSwgcGF0aC5qb2luKG91dHB1dFBhdGgsIGRlc3RQYXRoKSwgZnNDb25zdGFudHMuQ09QWUZJTEVfRklDTE9ORSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgTUFYX0NPTkNVUlJFTlRfV1JJVEVTID0gNjQ7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW1pdEZpbGVzVG9EaXNrPFQgPSBCdWlsZE91dHB1dEFzc2V0IHwgQnVpbGRPdXRwdXRGaWxlPihcbiAgZmlsZXM6IFRbXSxcbiAgd3JpdGVGaWxlQ2FsbGJhY2s6IChmaWxlOiBUKSA9PiBQcm9taXNlPHZvaWQ+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFdyaXRlIGZpbGVzIGluIGdyb3VwcyBvZiBNQVhfQ09OQ1VSUkVOVF9XUklURVMgdG8gYXZvaWQgdG9vIG1hbnkgb3BlbiBmaWxlc1xuICBmb3IgKGxldCBmaWxlSW5kZXggPSAwOyBmaWxlSW5kZXggPCBmaWxlcy5sZW5ndGg7ICkge1xuICAgIGNvbnN0IGdyb3VwTWF4ID0gTWF0aC5taW4oZmlsZUluZGV4ICsgTUFYX0NPTkNVUlJFTlRfV1JJVEVTLCBmaWxlcy5sZW5ndGgpO1xuXG4gICAgY29uc3QgYWN0aW9ucyA9IFtdO1xuICAgIHdoaWxlIChmaWxlSW5kZXggPCBncm91cE1heCkge1xuICAgICAgYWN0aW9ucy5wdXNoKHdyaXRlRmlsZUNhbGxiYWNrKGZpbGVzW2ZpbGVJbmRleCsrXSkpO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXRGaWxlRnJvbVRleHQoXG4gIHBhdGg6IHN0cmluZyxcbiAgdGV4dDogc3RyaW5nLFxuICB0eXBlOiBCdWlsZE91dHB1dEZpbGVUeXBlLFxuKTogQnVpbGRPdXRwdXRGaWxlIHtcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIHRleHQsXG4gICAgdHlwZSxcbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUodGhpcy50ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIH0sXG4gICAgZ2V0IGNvbnRlbnRzKCkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMudGV4dCwgJ3V0Zi04Jyk7XG4gICAgfSxcbiAgICBnZXQgZnVsbE91dHB1dFBhdGgoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBnZXRGdWxsT3V0cHV0UGF0aCh0aGlzKTtcbiAgICB9LFxuICAgIGNsb25lKCk6IEJ1aWxkT3V0cHV0RmlsZSB7XG4gICAgICByZXR1cm4gY3JlYXRlT3V0cHV0RmlsZUZyb21UZXh0KHRoaXMucGF0aCwgdGhpcy50ZXh0LCB0aGlzLnR5cGUpO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXRGaWxlRnJvbURhdGEoXG4gIHBhdGg6IHN0cmluZyxcbiAgZGF0YTogVWludDhBcnJheSxcbiAgdHlwZTogQnVpbGRPdXRwdXRGaWxlVHlwZSxcbik6IEJ1aWxkT3V0cHV0RmlsZSB7XG4gIHJldHVybiB7XG4gICAgcGF0aCxcbiAgICB0eXBlLFxuICAgIGdldCB0ZXh0KCkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCkudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfSxcbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUodGhpcy50ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIH0sXG4gICAgZ2V0IGNvbnRlbnRzKCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICBnZXQgZnVsbE91dHB1dFBhdGgoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBnZXRGdWxsT3V0cHV0UGF0aCh0aGlzKTtcbiAgICB9LFxuICAgIGNsb25lKCk6IEJ1aWxkT3V0cHV0RmlsZSB7XG4gICAgICByZXR1cm4gY3JlYXRlT3V0cHV0RmlsZUZyb21EYXRhKHRoaXMucGF0aCwgdGhpcy5jb250ZW50cywgdGhpcy50eXBlKTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVsbE91dHB1dFBhdGgoZmlsZTogQnVpbGRPdXRwdXRGaWxlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChmaWxlLnR5cGUpIHtcbiAgICBjYXNlIEJ1aWxkT3V0cHV0RmlsZVR5cGUuQnJvd3NlcjpcbiAgICBjYXNlIEJ1aWxkT3V0cHV0RmlsZVR5cGUuTWVkaWE6XG4gICAgICByZXR1cm4gam9pbignYnJvd3NlcicsIGZpbGUucGF0aCk7XG4gICAgY2FzZSBCdWlsZE91dHB1dEZpbGVUeXBlLlNlcnZlcjpcbiAgICAgIHJldHVybiBqb2luKCdzZXJ2ZXInLCBmaWxlLnBhdGgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmlsZS5wYXRoO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGJyb3dzZXJsaXN0cyByZXN1bHQgdG8gZXNidWlsZCB0YXJnZXQuXG4gKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyN0YXJnZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVN1cHBvcnRlZEJyb3dzZXJzVG9UYXJnZXRzKHN1cHBvcnRlZEJyb3dzZXJzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgdHJhbnNmb3JtZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gaHR0cHM6Ly9lc2J1aWxkLmdpdGh1Yi5pby9hcGkvI3RhcmdldFxuICBjb25zdCBlc0J1aWxkU3VwcG9ydGVkQnJvd3NlcnMgPSBuZXcgU2V0KFtcbiAgICAnY2hyb21lJyxcbiAgICAnZWRnZScsXG4gICAgJ2ZpcmVmb3gnLFxuICAgICdpZScsXG4gICAgJ2lvcycsXG4gICAgJ25vZGUnLFxuICAgICdvcGVyYScsXG4gICAgJ3NhZmFyaScsXG4gIF0pO1xuXG4gIGZvciAoY29uc3QgYnJvd3NlciBvZiBzdXBwb3J0ZWRCcm93c2Vycykge1xuICAgIGxldCBbYnJvd3Nlck5hbWUsIHZlcnNpb25dID0gYnJvd3Nlci50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XG5cbiAgICAvLyBicm93c2Vyc2xpc3QgdXNlcyB0aGUgbmFtZSBgaW9zX3NhZmAgZm9yIGlPUyBTYWZhcmkgd2hlcmVhcyBlc2J1aWxkIHVzZXMgYGlvc2BcbiAgICBpZiAoYnJvd3Nlck5hbWUgPT09ICdpb3Nfc2FmJykge1xuICAgICAgYnJvd3Nlck5hbWUgPSAnaW9zJztcbiAgICB9XG5cbiAgICAvLyBicm93c2Vyc2xpc3QgdXNlcyByYW5nZXMgYDE1LjItMTUuM2AgdmVyc2lvbnMgYnV0IG9ubHkgdGhlIGxvd2VzdCBpcyByZXF1aXJlZFxuICAgIC8vIHRvIHBlcmZvcm0gbWluaW11bSBzdXBwb3J0ZWQgZmVhdHVyZSBjaGVja3MuIGVzYnVpbGQgYWxzbyBleHBlY3RzIGEgc2luZ2xlIHZlcnNpb24uXG4gICAgW3ZlcnNpb25dID0gdmVyc2lvbi5zcGxpdCgnLScpO1xuXG4gICAgaWYgKGVzQnVpbGRTdXBwb3J0ZWRCcm93c2Vycy5oYXMoYnJvd3Nlck5hbWUpKSB7XG4gICAgICBpZiAoYnJvd3Nlck5hbWUgPT09ICdzYWZhcmknICYmIHZlcnNpb24gPT09ICd0cCcpIHtcbiAgICAgICAgLy8gZXNidWlsZCBvbmx5IHN1cHBvcnRzIG51bWVyaWMgdmVyc2lvbnMgc28gYFRQYCBpcyBjb252ZXJ0ZWQgdG8gYSBoaWdoIG51bWJlciAoOTk5KSBzaW5jZVxuICAgICAgICAvLyBhIFRlY2hub2xvZ3kgUHJldmlldyAoVFApIG9mIFNhZmFyaSBpcyBhc3N1bWVkIHRvIHN1cHBvcnQgYWxsIGN1cnJlbnRseSBrbm93biBmZWF0dXJlcy5cbiAgICAgICAgdmVyc2lvbiA9ICc5OTknO1xuICAgICAgfSBlbHNlIGlmICghdmVyc2lvbi5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIC8vIEEgbG9uZSBtYWpvciB2ZXJzaW9uIGlzIGNvbnNpZGVyZWQgYnkgZXNidWlsZCB0byBpbmNsdWRlIGFsbCBtaW5vciB2ZXJzaW9ucy4gSG93ZXZlcixcbiAgICAgICAgLy8gYnJvd3NlcnNsaXN0IGRvZXMgbm90IGFuZCBpcyBhbHNvIGluY29uc2lzdGVudCBpbiBpdHMgYC4wYCB2ZXJzaW9uIG5hbWluZy4gRm9yIGV4YW1wbGUsXG4gICAgICAgIC8vIFNhZmFyaSAxNS4wIGlzIG5hbWVkIGBzYWZhcmkgMTVgIGJ1dCBTYWZhcmkgMTYuMCBpcyBuYW1lZCBgc2FmYXJpIDE2LjBgLlxuICAgICAgICB2ZXJzaW9uICs9ICcuMCc7XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkLnB1c2goYnJvd3Nlck5hbWUgKyB2ZXJzaW9uKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtZWQ7XG59XG5cbmNvbnN0IFNVUFBPUlRFRF9OT0RFX1ZFUlNJT05TID0gJzAuMC4wLUVOR0lORVMtTk9ERSc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHN1cHBvcnRlZCBOb2RlLmpzIHZlcnNpb25zIHRvIGVzYnVpbGQgdGFyZ2V0LlxuICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jdGFyZ2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdXBwb3J0ZWROb2RlVGFyZ2V0cygpOiBzdHJpbmdbXSB7XG4gIGlmIChTVVBQT1JURURfTk9ERV9WRVJTSU9OUy5jaGFyQXQoMCkgPT09ICcwJykge1xuICAgIC8vIFVubGlrZSBgcGtnX25wbWAsIGB0c19saWJyYXJ5YCB3aGljaCBpcyB1c2VkIHRvIHJ1biB1bml0IHRlc3RzIGRvZXMgbm90IHN1cHBvcnQgc3Vic3RpdHV0aW9ucy5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gU1VQUE9SVEVEX05PREVfVkVSU0lPTlMuc3BsaXQoJ3x8JykubWFwKCh2KSA9PiAnbm9kZScgKyBjb2VyY2Uodik/LnZlcnNpb24pO1xufVxuIl19
@@ -6,6 +6,7 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  import type { OnLoadArgs, Plugin, PluginBuild } from 'esbuild';
9
+ import { LoadResultCache } from './load-result-cache';
9
10
  /**
10
11
  * Options for the createVirtualModulePlugin
11
12
  * @see createVirtualModulePlugin
@@ -21,6 +22,8 @@ export interface VirtualModulePluginOptions {
21
22
  loadContent: (args: OnLoadArgs, build: PluginBuild) => ReturnType<Parameters<PluginBuild['onLoad']>[1]>;
22
23
  /** Restrict to only entry points. Defaults to `true`. */
23
24
  entryPointOnly?: boolean;
25
+ /** Load results cache. */
26
+ cache?: LoadResultCache;
24
27
  }
25
28
  /**
26
29
  * Creates an esbuild plugin that generated virtual modules.
@@ -8,13 +8,14 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.createVirtualModulePlugin = void 0;
11
+ const load_result_cache_1 = require("./load-result-cache");
11
12
  /**
12
13
  * Creates an esbuild plugin that generated virtual modules.
13
14
  *
14
15
  * @returns An esbuild plugin.
15
16
  */
16
17
  function createVirtualModulePlugin(options) {
17
- const { namespace, external, transformPath: pathTransformer, loadContent, entryPointOnly = true, } = options;
18
+ const { namespace, external, transformPath: pathTransformer, loadContent, cache, entryPointOnly = true, } = options;
18
19
  return {
19
20
  name: namespace.replace(/[/:]/g, '-'),
20
21
  setup(build) {
@@ -35,9 +36,8 @@ function createVirtualModulePlugin(options) {
35
36
  };
36
37
  });
37
38
  }
38
- build.onLoad({ filter: /./, namespace }, (args) => loadContent(args, build));
39
+ build.onLoad({ filter: /./, namespace }, (0, load_result_cache_1.createCachedLoad)(cache, (args) => loadContent(args, build)));
39
40
  },
40
41
  };
41
42
  }
42
43
  exports.createVirtualModulePlugin = createVirtualModulePlugin;
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1tb2R1bGUtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdG9vbHMvZXNidWlsZC92aXJ0dWFsLW1vZHVsZS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBd0JIOzs7O0dBSUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxPQUFtQztJQUMzRSxNQUFNLEVBQ0osU0FBUyxFQUNULFFBQVEsRUFDUixhQUFhLEVBQUUsZUFBZSxFQUM5QixXQUFXLEVBQ1gsY0FBYyxHQUFHLElBQUksR0FDdEIsR0FBRyxPQUFPLENBQUM7SUFFWixPQUFPO1FBQ0wsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztRQUNyQyxLQUFLLENBQUMsS0FBSztZQUNULEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO2dCQUMxRSxJQUFJLGNBQWMsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFO29CQUM1QyxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFFRCxPQUFPO29CQUNMLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJO29CQUNyQyxTQUFTO2lCQUNWLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxFQUFFO2dCQUNaLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO29CQUN2RCxPQUFPO3dCQUNMLElBQUk7d0JBQ0osUUFBUSxFQUFFLElBQUk7cUJBQ2YsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFuQ0QsOERBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0eXBlIHsgT25Mb2FkQXJncywgUGx1Z2luLCBQbHVnaW5CdWlsZCB9IGZyb20gJ2VzYnVpbGQnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBjcmVhdGVWaXJ0dWFsTW9kdWxlUGx1Z2luXG4gKiBAc2VlIGNyZWF0ZVZpcnR1YWxNb2R1bGVQbHVnaW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsTW9kdWxlUGx1Z2luT3B0aW9ucyB7XG4gIC8qKiBOYW1lc3BhY2UuIEV4YW1wbGU6IGBhbmd1bGFyOnBvbHlmaWxsc2AuICovXG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICAvKiogSWYgdGhlIGdlbmVyYXRlZCBtb2R1bGUgc2hvdWxkIGJlIG1hcmtlZCBhcyBleHRlcm5hbC4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xuICAvKiogTWV0aG9kIHRvIHRyYW5zZm9ybSB0aGUgb25SZXNvbHZlIHBhdGguICovXG4gIHRyYW5zZm9ybVBhdGg/OiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIC8qKiBNZXRob2QgdG8gcHJvdmlkZSB0aGUgbW9kdWxlIGNvbnRlbnQuICovXG4gIGxvYWRDb250ZW50OiAoXG4gICAgYXJnczogT25Mb2FkQXJncyxcbiAgICBidWlsZDogUGx1Z2luQnVpbGQsXG4gICkgPT4gUmV0dXJuVHlwZTxQYXJhbWV0ZXJzPFBsdWdpbkJ1aWxkWydvbkxvYWQnXT5bMV0+O1xuICAvKiogUmVzdHJpY3QgdG8gb25seSBlbnRyeSBwb2ludHMuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgZW50cnlQb2ludE9ubHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCBnZW5lcmF0ZWQgdmlydHVhbCBtb2R1bGVzLlxuICpcbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgcGx1Z2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmlydHVhbE1vZHVsZVBsdWdpbihvcHRpb25zOiBWaXJ0dWFsTW9kdWxlUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gIGNvbnN0IHtcbiAgICBuYW1lc3BhY2UsXG4gICAgZXh0ZXJuYWwsXG4gICAgdHJhbnNmb3JtUGF0aDogcGF0aFRyYW5zZm9ybWVyLFxuICAgIGxvYWRDb250ZW50LFxuICAgIGVudHJ5UG9pbnRPbmx5ID0gdHJ1ZSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lc3BhY2UucmVwbGFjZSgvWy86XS9nLCAnLScpLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlKSB9LCAoeyBraW5kLCBwYXRoIH0pID0+IHtcbiAgICAgICAgaWYgKGVudHJ5UG9pbnRPbmx5ICYmIGtpbmQgIT09ICdlbnRyeS1wb2ludCcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGF0aDogcGF0aFRyYW5zZm9ybWVyPy4ocGF0aCkgPz8gcGF0aCxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgaWYgKGV4dGVybmFsKSB7XG4gICAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4vLCBuYW1lc3BhY2UgfSwgKHsgcGF0aCB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvLi8sIG5hbWVzcGFjZSB9LCAoYXJncykgPT4gbG9hZENvbnRlbnQoYXJncywgYnVpbGQpKTtcbiAgICB9LFxuICB9O1xufVxuIl19
@@ -102,4 +102,3 @@ function createWatcher(options) {
102
102
  };
103
103
  }
104
104
  exports.createWatcher = createWatcher;
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3Rvb2xzL2VzYnVpbGQvd2F0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCx1Q0FBcUM7QUFFckMsTUFBYSxZQUFZO0lBQ2QsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDMUIsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDN0IsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFckMsYUFBYTtRQUNYLE1BQU0sT0FBTyxHQUFHO1lBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM3QixRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ25DLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDbEMsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQWRELG9DQWNDO0FBUUQsU0FBZ0IsYUFBYSxDQUFDLE9BSTdCO0lBQ0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQkFBUyxDQUFDO1FBQzVCLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTztRQUM1QixRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVE7UUFDM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPO1FBQ3pCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGFBQWEsRUFBRSxJQUFJO0tBQ3BCLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUF1QyxFQUFFLENBQUM7SUFDekQsSUFBSSxjQUF3QyxDQUFD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eXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IEZTV2F0Y2hlciB9IGZyb20gJ2Nob2tpZGFyJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZWRGaWxlcyB7XG4gIHJlYWRvbmx5IGFkZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG1vZGlmaWVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHJlbW92ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICB0b0RlYnVnU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29udGVudCA9IHtcbiAgICAgIGFkZGVkOiBBcnJheS5mcm9tKHRoaXMuYWRkZWQpLFxuICAgICAgbW9kaWZpZWQ6IEFycmF5LmZyb20odGhpcy5tb2RpZmllZCksXG4gICAgICByZW1vdmVkOiBBcnJheS5mcm9tKHRoaXMucmVtb3ZlZCksXG4gICAgfTtcblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjb250ZW50LCBudWxsLCAyKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkV2F0Y2hlciBleHRlbmRzIEFzeW5jSXRlcmFibGVJdGVyYXRvcjxDaGFuZ2VkRmlsZXM+IHtcbiAgYWRkKHBhdGhzOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQ7XG4gIHJlbW92ZShwYXRoczogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkO1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2F0Y2hlcihvcHRpb25zPzoge1xuICBwb2xsaW5nPzogYm9vbGVhbjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gIGlnbm9yZWQ/OiBzdHJpbmdbXTtcbn0pOiBCdWlsZFdhdGNoZXIge1xuICBjb25zdCB3YXRjaGVyID0gbmV3IEZTV2F0Y2hlcih7XG4gICAgdXNlUG9sbGluZzogb3B0aW9ucz8ucG9sbGluZyxcbiAgICBpbnRlcnZhbDogb3B0aW9ucz8uaW50ZXJ2YWwsXG4gICAgaWdub3JlZDogb3B0aW9ucz8uaWdub3JlZCxcbiAgICBkaXNhYmxlR2xvYmJpbmc6IHRydWUsXG4gICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3QgbmV4dFF1ZXVlOiAoKHZhbHVlPzogQ2hhbmdlZEZpbGVzKSA9PiB2b2lkKVtdID0gW107XG4gIGxldCBjdXJyZW50Q2hhbmdlczogQ2hhbmdlZEZpbGVzIHwgdW5kZWZpbmVkO1xuICBsZXQgbmV4dFdhaXRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuICB3YXRjaGVyLm9uKCdhbGwnLCAoZXZlbnQsIHBhdGgpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlICdhZGQnOlxuICAgICAgICBjdXJyZW50Q2hhbmdlcyA/Pz0gbmV3IENoYW5nZWRGaWxlcygpO1xuICAgICAgICBjdXJyZW50Q2hhbmdlcy5hZGRlZC5hZGQocGF0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2hhbmdlJzpcbiAgICAgICAgY3VycmVudENoYW5nZXMgPz89IG5ldyBDaGFuZ2VkRmlsZXMoKTtcbiAgICAgICAgY3VycmVudENoYW5nZXMubW9kaWZpZWQuYWRkKHBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VubGluayc6XG4gICAgICAgIGN1cnJlbnRDaGFuZ2VzID8/PSBuZXcgQ2hhbmdlZEZpbGVzKCk7XG4gICAgICAgIGN1cnJlbnRDaGFuZ2VzLnJlbW92ZWQuYWRkKHBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXYWl0IDI1MG1zIGZyb20gbmV4dCBjaGFuZ2UgdG8gYmV0dGVyIGNhcHR1cmUgZ3JvdXBzIG9mIGZpbGUgc2F2ZSBvcGVyYXRpb25zLlxuICAgIGlmICghbmV4dFdhaXRUaW1lb3V0KSB7XG4gICAgICBuZXh0V2FpdFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbmV4dFdhaXRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBuZXh0ID0gbmV4dFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjdXJyZW50Q2hhbmdlcztcbiAgICAgICAgICBjdXJyZW50Q2hhbmdlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjUwKTtcbiAgICAgIG5leHRXYWl0VGltZW91dD8udW5yZWYoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBhc3luYyBuZXh0KCkge1xuICAgICAgaWYgKGN1cnJlbnRDaGFuZ2VzICYmIG5leHRRdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geyB2YWx1ZTogY3VycmVudENoYW5nZXMgfTtcbiAgICAgICAgY3VycmVudENoYW5nZXMgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIG5leHRRdWV1ZS5wdXNoKCh2YWx1ZSkgPT4gcmVzb2x2ZSh2YWx1ZSA/IHsgdmFsdWUgfSA6IHsgZG9uZTogdHJ1ZSwgdmFsdWUgfSkpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFkZChwYXRocykge1xuICAgICAgd2F0Y2hlci5hZGQocGF0aHMpO1xuICAgIH0sXG5cbiAgICByZW1vdmUocGF0aHMpIHtcbiAgICAgIHdhdGNoZXIudW53YXRjaChwYXRocyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICBpZiAobmV4dFdhaXRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KG5leHRXYWl0VGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxldCBuZXh0O1xuICAgICAgICB3aGlsZSAoKG5leHQgPSBuZXh0UXVldWUuc2hpZnQoKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -245,4 +245,3 @@ function* find(contents, prefix) {
245
245
  }
246
246
  }
247
247
  }
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV4ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy90b29scy9zYXNzL2xleGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILG9EQUFvRDtBQUVwRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUNoQywwREFBMEQ7SUFDMUQsUUFBUSxJQUFJLEVBQUU7UUFDWixLQUFLLE1BQU0sQ0FBQyxDQUFDLE1BQU07UUFDbkIsS0FBSyxNQUFNLENBQUMsQ0FBQyxRQUFRO1FBQ3JCLEtBQUssTUFBTSxDQUFDLENBQUMsWUFBWTtRQUN6QixLQUFLLE1BQU0sQ0FBQyxDQUFDLFlBQVk7UUFDekIsS0FBSyxNQUFNLEVBQUUsa0JBQWtCO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2Q7WUFDRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFFBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FDdkIsUUFBZ0I7SUFFaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDYixPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsd0VBQXdFO0lBQ3hFLE9BQU8sQ0FBQyxH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RSxFQUFFO29CQUNkLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTTt3QkFDYixPQUFPO29CQUNULEtBQUssTUFBTSxDQUFDLENBQUMsWUFBWTtvQkFDekIsS0FBSyxNQUFNLENBQUMsQ0FBQyxZQUFZO29CQUN6QixLQUFLLE1BQU0sRUFBRSxrQkFBa0I7d0JBQzdCLFVBQVU7d0JBQ1YsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDaEIsTUFBTTtvQkFDUixLQUFLLE1BQU0sRUFBRSx3QkFBd0I7d0JBQ25DLDREQUE0RDt3QkFDNUQsUUFBUSxJQUFJLEVBQUUsRUFBRTs0QkFDZCxLQUFLLENBQUMsQ0FBQztnQ0FDTCxPQUFPOzRCQUNULEtBQUssTUFBTSxDQUFDLENBQUMsWUFBWTs0QkFDekIsS0FBSyxNQUFNLENBQUMsQ0FBQyxZQUFZOzRCQUN6QixLQUFLLE1BQU0sRUFBRSxrQkFBa0I7Z0NBQzdCLDRCQUE0QjtnQ0FDNUIsTUFBTTs0QkFDUjtnQ0FDRSxnQ0FBZ0M7Z0NBQ2hDLEdBQUcsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDL0MsTUFBTTt5QkFDVDt3QkFDRCxNQUFNO29CQUNSLEtBQUssTUFBTTt3QkFDVCxpRUFBaUU7d0JBQ2pFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQzt3QkFDbEIsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDaEIsTUFBTSxHQUFHLENBQUM7d0JBQ1YsTUFBTTtvQkFDUjt3QkFDRSxHQUFHLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQy9DLE1BQU07aUJBQ1Q7YUFDRjtZQUVELElBQUksRUFBRSxDQUFDO1lBQ1AsU0FBUztTQUNWO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRPRE86IENvbWJpbmUgZXZlcnl0aGluZyBpbnRvIGEgc2luZ2xlIHBhc3MgbGV4ZXJcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgdW5pY29kZSBjb2RlIHBvaW50IGlzIGEgQ1NTIHdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICogQHBhcmFtIGNvZGUgVGhlIHVuaWNvZGUgY29kZSBwb2ludCB0byB0ZXN0LlxuICogQHJldHVybnMgdHJ1ZSwgaWYgdGhlIGNvZGUgcG9pbnQgaXMgQ1NTIHdoaXRlc3BhY2U7IGZhbHNlLCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgLy8gQmFzZWQgb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jd2hpdGVzcGFjZVxuICBzd2l0Y2ggKGNvZGUpIHtcbiAgICBjYXNlIDB4MDAwOTogLy8gdGFiXG4gICAgY2FzZSAweDAwMjA6IC8vIHNwYWNlXG4gICAgY2FzZSAweDAwMGE6IC8vIGxpbmUgZmVlZFxuICAgIGNhc2UgMHgwMDBjOiAvLyBmb3JtIGZlZWRcbiAgICBjYXNlIDB4MDAwZDogLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogU2NhbnMgYSBDU1Mgb3IgU2FzcyBmaWxlIGFuZCBsb2NhdGVzIGFsbCB2YWxpZCB1cmwgZnVuY3Rpb24gdmFsdWVzIGFzIGRlZmluZWQgYnkgdGhlXG4gKiBzeW50YXggc3BlY2lmaWNhdGlvbi5cbiAqIEBwYXJhbSBjb250ZW50cyBBIHN0cmluZyBjb250YWluaW5nIGEgQ1NTIG9yIFNhc3MgZmlsZSB0byBzY2FuLlxuICogQHJldHVybnMgQW4gaXRlcmFibGUgdGhhdCB5aWVsZHMgZWFjaCBDU1MgdXJsIGZ1bmN0aW9uIHZhbHVlIGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGZpbmRVcmxzKFxuICBjb250ZW50czogc3RyaW5nLFxuKTogSXRlcmFibGU8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9PiB7XG4gIGxldCBwb3MgPSAwO1xuICBsZXQgd2lkdGggPSAxO1xuICBsZXQgY3VycmVudCA9IC0xO1xuICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgIHBvcyArPSB3aWR0aDtcbiAgICBjdXJyZW50ID0gY29udGVudHMuY29kZVBvaW50QXQocG9zKSA/PyAtMTtcbiAgICB3aWR0aCA9IGN1cnJlbnQgPiAweGZmZmYgPyAyIDogMTtcblxuICAgIHJldHVybiBjdXJyZW50O1xuICB9O1xuXG4gIC8vIEJhc2VkIG9uIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2NvbnN1bWUtaWRlbnQtbGlrZS10b2tlblxuICB3aGlsZSAoKHBvcyA9IGNvbnRlbnRzLmluZGV4T2YoJ3VybCgnLCBwb3MpKSAhPT0gLTEpIHtcbiAgICAvLyBTZXQgdG8gcG9zaXRpb24gb2YgdGhlIChcbiAgICBwb3MgKz0gMztcbiAgICB3aWR0aCA9IDE7XG5cbiAgICAvLyBDb25zdW1lIGFsbCBsZWFkaW5nIHdoaXRlc3BhY2VcbiAgICB3aGlsZSAoaXNXaGl0ZXNwYWNlKG5leHQoKSkpIHtcbiAgICAgIC8qIGVtcHR5ICovXG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBVUkwgc3RhdGVcbiAgICBjb25zdCB1cmwgPSB7IHN0YXJ0OiBwb3MsIGVuZDogLTEsIHZhbHVlOiAnJyB9O1xuICAgIGxldCBjb21wbGV0ZSA9IGZhbHNlO1xuXG4gICAgLy8gSWYgXCIgb3IgJywgdGhlbiBjb25zdW1lIHRoZSB2YWx1ZSBhcyBhIHN0cmluZ1xuICAgIGlmIChjdXJyZW50ID09PSAweDAwMjIgfHwgY3VycmVudCA9PT0gMHgwMDI3KSB7XG4gICAgICBjb25zdCBlbmRpbmcgPSBjdXJyZW50O1xuICAgICAgLy8gQmFzZWQgb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jY29uc3VtZS1zdHJpbmctdG9rZW5cbiAgICAgIHdoaWxlICghY29tcGxldGUpIHtcbiAgICAgICAgc3dpdGNoIChuZXh0KCkpIHtcbiAgICAgICAgICBjYXNlIC0xOiAvLyBFT0ZcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlIDB4MDAwYTogLy8gbGluZSBmZWVkXG4gICAgICAgICAgY2FzZSAweDAwMGM6IC8vIGZvcm0gZmVlZFxuICAgICAgICAgIGNhc2UgMHgwMDBkOiAvLyBjYXJyaWFnZSByZXR1cm5cbiAgICAgICAgICAgIC8vIEludmFsaWRcbiAgICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgwMDVjOiAvLyBcXCAtLSBjaGFyYWN0ZXIgZXNjYXBlXG4gICAgICAgICAgICAvLyBJZiBub3QgRU9GIG9yIG5ld2xpbmUsIGFkZCB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBlc2NhcGVcbiAgICAgICAgICAgIHN3aXRjaCAobmV4dCgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBjYXNlIDB4MDAwYTogLy8gbGluZSBmZWVkXG4gICAgICAgICAgICAgIGNhc2UgMHgwMDBjOiAvLyBmb3JtIGZlZWRcbiAgICAgICAgICAgICAgY2FzZSAweDAwMGQ6IC8vIGNhcnJpYWdlIHJldHVyblxuICAgICAgICAgICAgICAgIC8vIFNraXAgd2hlbiBpbnNpZGUgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgaGV4IGVzY2FwZSBjb2Rlc1xuICAgICAgICAgICAgICAgIHVybC52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgZW5kaW5nOlxuICAgICAgICAgICAgLy8gRnVsbCBzdHJpbmcgcG9zaXRpb24gc2hvdWxkIGluY2x1ZGUgdGhlIHF1b3RlcyBmb3IgcmVwbGFjZW1lbnRcbiAgICAgICAgICAgIHVybC5lbmQgPSBwb3MgKyAxO1xuICAgICAgICAgICAgY29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgeWllbGQgdXJsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHVybC52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjdXJyZW50KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEJhc2VkIG9uIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2NvbnN1bWUtdXJsLXRva2VuXG4gICAgd2hpbGUgKCFjb21wbGV0ZSkge1xuICAgICAgc3dpdGNoIChjdXJyZW50KSB7XG4gICAgICAgIGNhc2UgLTE6IC8vIEVPRlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAweDAwMjI6IC8vIFwiXG4gICAgICAgIGNhc2UgMHgwMDI3OiAvLyAnXG4gICAgICAgIGNhc2UgMHgwMDI4OiAvLyAoXG4gICAgICAgICAgLy8gSW52YWxpZFxuICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDAwMjk6IC8vIClcbiAgICAgICAgICAvLyBVUkwgaXMgdmFsaWQgYW5kIGNvbXBsZXRlXG4gICAgICAgICAgdXJsLmVuZCA9IHBvcztcbiAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwMDVjOiAvLyBcXCAtLSBjaGFyYWN0ZXIgZXNjYXBlXG4gICAgICAgICAgLy8gSWYgbm90IEVPRiBvciBuZXdsaW5lLCBhZGQgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgZXNjYXBlXG4gICAgICAgICAgc3dpdGNoIChuZXh0KCkpIHtcbiAgICAgICAgICAgIGNhc2UgLTE6IC8vIEVPRlxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIDB4MDAwYTogLy8gbGluZSBmZWVkXG4gICAgICAgICAgICBjYXNlIDB4MDAwYzogLy8gZm9ybSBmZWVkXG4gICAgICAgICAgICBjYXNlIDB4MDAwZDogLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgICAgICAgICAgIC8vIEludmFsaWRcbiAgICAgICAgICAgICAgY29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBoZXggZXNjYXBlIGNvZGVzXG4gICAgICAgICAgICAgIHVybC52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjdXJyZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudCkpIHtcbiAgICAgICAgICAgIHdoaWxlIChpc1doaXRlc3BhY2UobmV4dCgpKSkge1xuICAgICAgICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVW5lc2NhcGVkIHdoaXRlc3BhY2UgaXMgb25seSB2YWxpZCBiZWZvcmUgdGhlIGNsb3NpbmcgKVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IDB4MDAyOSkge1xuICAgICAgICAgICAgICAvLyBVUkwgaXMgdmFsaWRcbiAgICAgICAgICAgICAgdXJsLmVuZCA9IHBvcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIHVybCB2YWx1ZVxuICAgICAgICAgICAgdXJsLnZhbHVlICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9XG5cbiAgICAvLyBBbiBlbmQgcG9zaXRpb24gaW5kaWNhdGVzIGEgVVJMIHdhcyBmb3VuZFxuICAgIGlmICh1cmwuZW5kICE9PSAtMSkge1xuICAgICAgeWllbGQgdXJsO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNjYW5zIGEgQ1NTIG9yIFNhc3MgZmlsZSBhbmQgbG9jYXRlcyBhbGwgdmFsaWQgaW1wb3J0L3VzZSBkaXJlY3RpdmUgdmFsdWVzIGFzIGRlZmluZWQgYnkgdGhlXG4gKiBzeW50YXggc3BlY2lmaWNhdGlvbi5cbiAqIEBwYXJhbSBjb250ZW50cyBBIHN0cmluZyBjb250YWluaW5nIGEgQ1NTIG9yIFNhc3MgZmlsZSB0byBzY2FuLlxuICogQHJldHVybnMgQW4gaXRlcmFibGUgdGhhdCB5aWVsZHMgZWFjaCBDU1MgZGlyZWN0aXZlIHZhbHVlIGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGZpbmRJbXBvcnRzKFxuICBjb250ZW50czogc3RyaW5nLFxuKTogSXRlcmFibGU8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgc3BlY2lmaWVyOiBzdHJpbmcgfT4ge1xuICB5aWVsZCogZmluZChjb250ZW50cywgJ0BpbXBvcnQgJyk7XG4gIHlpZWxkKiBmaW5kKGNvbnRlbnRzLCAnQHVzZSAnKTtcbn1cblxuLyoqXG4gKiBTY2FucyBhIENTUyBvciBTYXNzIGZpbGUgYW5kIGxvY2F0ZXMgYWxsIHZhbGlkIGZ1bmN0aW9uL2RpcmVjdGl2ZSB2YWx1ZXMgYXMgZGVmaW5lZCBieSB0aGVcbiAqIHN5bnRheCBzcGVjaWZpY2F0aW9uLlxuICogQHBhcmFtIGNvbnRlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBDU1Mgb3IgU2FzcyBmaWxlIHRvIHNjYW4uXG4gKiBAcGFyYW0gcHJlZml4IFRoZSBwcmVmaXggdG8gc3RhcnQgYSB2YWxpZCBzZWdtZW50LlxuICogQHJldHVybnMgQW4gaXRlcmFibGUgdGhhdCB5aWVsZHMgZWFjaCBDU1MgdXJsIGZ1bmN0aW9uIHZhbHVlIGZvdW5kLlxuICovXG5mdW5jdGlvbiogZmluZChcbiAgY29udGVudHM6IHN0cmluZyxcbiAgcHJlZml4OiBzdHJpbmcsXG4pOiBJdGVyYWJsZTx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBzcGVjaWZpZXI6IHN0cmluZyB9PiB7XG4gIGxldCBwb3MgPSAwO1xuICBsZXQgd2lkdGggPSAxO1xuICBsZXQgY3VycmVudCA9IC0xO1xuICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgIHBvcyArPSB3aWR0aDtcbiAgICBjdXJyZW50ID0gY29udGVudHMuY29kZVBvaW50QXQocG9zKSA/PyAtMTtcbiAgICB3aWR0aCA9IGN1cnJlbnQgPiAweGZmZmYgPyAyIDogMTtcblxuICAgIHJldHVybiBjdXJyZW50O1xuICB9O1xuXG4gIC8vIEJhc2VkIG9uIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2NvbnN1bWUtaWRlbnQtbGlrZS10b2tlblxuICB3aGlsZSAoKHBvcyA9IGNvbnRlbnRzLmluZGV4T2YocHJlZml4LCBwb3MpKSAhPT0gLTEpIHtcbiAgICAvLyBTZXQgdG8gcG9zaXRpb24gb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHByZWZpeFxuICAgIHBvcyArPSBwcmVmaXgubGVuZ3RoIC0gMTtcbiAgICB3aWR0aCA9IDE7XG5cbiAgICAvLyBDb25zdW1lIGFsbCBsZWFkaW5nIHdoaXRlc3BhY2VcbiAgICB3aGlsZSAoaXNXaGl0ZXNwYWNlKG5leHQoKSkpIHtcbiAgICAgIC8qIGVtcHR5ICovXG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBVUkwgc3RhdGVcbiAgICBjb25zdCB1cmwgPSB7IHN0YXJ0OiBwb3MsIGVuZDogLTEsIHNwZWNpZmllcjogJycgfTtcbiAgICBsZXQgY29tcGxldGUgPSBmYWxzZTtcblxuICAgIC8vIElmIFwiIG9yICcsIHRoZW4gY29uc3VtZSB0aGUgdmFsdWUgYXMgYSBzdHJpbmdcbiAgICBpZiAoY3VycmVudCA9PT0gMHgwMDIyIHx8IGN1cnJlbnQgPT09IDB4MDAyNykge1xuICAgICAgY29uc3QgZW5kaW5nID0gY3VycmVudDtcbiAgICAgIC8vIEJhc2VkIG9uIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2NvbnN1bWUtc3RyaW5nLXRva2VuXG4gICAgICB3aGlsZSAoIWNvbXBsZXRlKSB7XG4gICAgICAgIHN3aXRjaCAobmV4dCgpKSB7XG4gICAgICAgICAgY2FzZSAtMTogLy8gRU9GXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgY2FzZSAweDAwMGE6IC8vIGxpbmUgZmVlZFxuICAgICAgICAgIGNhc2UgMHgwMDBjOiAvLyBmb3JtIGZlZWRcbiAgICAgICAgICBjYXNlIDB4MDAwZDogLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgICAgICAgICAvLyBJbnZhbGlkXG4gICAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MDA1YzogLy8gXFwgLS0gY2hhcmFjdGVyIGVzY2FwZVxuICAgICAgICAgICAgLy8gSWYgbm90IEVPRiBvciBuZXdsaW5lLCBhZGQgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgZXNjYXBlXG4gICAgICAgICAgICBzd2l0Y2ggKG5leHQoKSkge1xuICAgICAgICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgY2FzZSAweDAwMGE6IC8vIGxpbmUgZmVlZFxuICAgICAgICAgICAgICBjYXNlIDB4MDAwYzogLy8gZm9ybSBmZWVkXG4gICAgICAgICAgICAgIGNhc2UgMHgwMDBkOiAvLyBjYXJyaWFnZSByZXR1cm5cbiAgICAgICAgICAgICAgICAvLyBTa2lwIHdoZW4gaW5zaWRlIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIGhleCBlc2NhcGUgY29kZXNcbiAgICAgICAgICAgICAgICB1cmwuc3BlY2lmaWVyICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBlbmRpbmc6XG4gICAgICAgICAgICAvLyBGdWxsIHN0cmluZyBwb3NpdGlvbiBzaG91bGQgaW5jbHVkZSB0aGUgcXVvdGVzIGZvciByZXBsYWNlbWVudFxuICAgICAgICAgICAgdXJsLmVuZCA9IHBvcyArIDE7XG4gICAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICB5aWVsZCB1cmw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdXJsLnNwZWNpZmllciArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjdXJyZW50KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -6,7 +6,7 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  import { RawSourceMap } from '@ampproject/remapping';
9
- import type { Importer, ImporterResult } from 'sass';
9
+ import type { CanonicalizeContext, Importer, ImporterResult } from 'sass';
10
10
  /**
11
11
  * A preprocessed cache entry for the files and directories within a previously searched
12
12
  * directory when performing Sass import resolution.
@@ -76,13 +76,8 @@ export declare class RelativeUrlRebasingImporter extends UrlRebasingImporter {
76
76
  */
77
77
  export declare class ModuleUrlRebasingImporter extends RelativeUrlRebasingImporter {
78
78
  private finder;
79
- constructor(entryDirectory: string, directoryCache: Map<string, DirectoryEntry>, rebaseSourceMaps: Map<string, RawSourceMap> | undefined, finder: (specifier: string, options: {
80
- fromImport: boolean;
81
- resolveDir?: string;
82
- }) => URL | null);
83
- canonicalize(url: string, options: {
84
- fromImport: boolean;
85
- }): URL | null;
79
+ constructor(entryDirectory: string, directoryCache: Map<string, DirectoryEntry>, rebaseSourceMaps: Map<string, RawSourceMap> | undefined, finder: (specifier: string, options: CanonicalizeContext) => URL | null);
80
+ canonicalize(url: string, options: CanonicalizeContext): URL | null;
86
81
  }
87
82
  /**
88
83
  * Provides the Sass importer logic to resolve load paths located stylesheet imports via both import and
@@ -16,38 +16,6 @@ const node_fs_1 = require("node:fs");
16
16
  const node_path_1 = require("node:path");
17
17
  const node_url_1 = require("node:url");
18
18
  const lexer_1 = require("./lexer");
19
- /**
20
- * A prefix that is added to import and use directive specifiers that should be resolved
21
- * as modules and that will contain added resolve directory information.
22
- *
23
- * This functionality is used to workaround the Sass limitation that it does not provide the
24
- * importer file to custom resolution plugins.
25
- */
26
- const MODULE_RESOLUTION_PREFIX = '__NG_PACKAGE__';
27
- function packModuleSpecifier(specifier, resolveDir) {
28
- const packed = MODULE_RESOLUTION_PREFIX +
29
- ';' +
30
- // Encode the resolve directory to prevent unsupported characters from being present when
31
- // Sass processes the URL. This is important on Windows which can contain drive letters
32
- // and colons which would otherwise be interpreted as a URL scheme.
33
- encodeURIComponent(resolveDir) +
34
- ';' +
35
- // Escape characters instead of encoding to provide more friendly not found error messages.
36
- // Unescaping is automatically handled by Sass.
37
- // https://developer.mozilla.org/en-US/docs/Web/CSS/url#syntax
38
- specifier.replace(/[()\s'"]/g, '\\$&');
39
- return packed;
40
- }
41
- function unpackModuleSpecifier(specifier) {
42
- if (!specifier.startsWith(`${MODULE_RESOLUTION_PREFIX};`)) {
43
- return { specifier };
44
- }
45
- const values = specifier.split(';', 3);
46
- return {
47
- specifier: values[2],
48
- resolveDir: decodeURIComponent(values[1]),
49
- };
50
- }
51
19
  /**
52
20
  * A Sass Importer base class that provides the load logic to rebase all `url()` functions
53
21
  * within a stylesheet. The rebasing will ensure that the URLs in the output of the Sass compiler
@@ -78,8 +46,8 @@ class UrlRebasingImporter {
78
46
  // Rebase any URLs that are found
79
47
  let updatedContents;
80
48
  for (const { start, end, value } of (0, lexer_1.findUrls)(contents)) {
81
- // Skip if value is empty or a Sass variable
82
- if (value.length === 0 || value.startsWith('$')) {
49
+ // Skip if value is empty, a Sass variable, or Webpack-specific prefix
50
+ if (value.length === 0 || value[0] === '$' || value[0] === '~' || value[0] === '^') {
83
51
  continue;
84
52
  }
85
53
  // Skip if root-relative, absolute or protocol relative url
@@ -93,21 +61,6 @@ class UrlRebasingImporter {
93
61
  updatedContents ??= new magic_string_1.default(contents);
94
62
  updatedContents.update(start, end, rebasedUrl);
95
63
  }
96
- // Add resolution directory information to module specifiers to facilitate resolution
97
- for (const { start, end, specifier } of (0, lexer_1.findImports)(contents)) {
98
- // Currently only provide directory information for known/common packages:
99
- // * `@material/`
100
- // * `@angular/`
101
- //
102
- // Comprehensive pre-resolution support may be added in the future. This is complicated by CSS/Sass not
103
- // requiring a `./` or `../` prefix to signify relative paths. A bare specifier could be either relative
104
- // or a module specifier. To differentiate, a relative resolution would need to be attempted first.
105
- if (!specifier.startsWith('@angular/') && !specifier.startsWith('@material/')) {
106
- continue;
107
- }
108
- updatedContents ??= new magic_string_1.default(contents);
109
- updatedContents.update(start, end, `"${packModuleSpecifier(specifier, stylesheetDirectory)}"`);
110
- }
111
64
  if (updatedContents) {
112
65
  contents = updatedContents.toString();
113
66
  if (this.rebaseSourceMaps) {
@@ -303,8 +256,7 @@ class ModuleUrlRebasingImporter extends RelativeUrlRebasingImporter {
303
256
  if (url.startsWith('file://')) {
304
257
  return super.canonicalize(url, options);
305
258
  }
306
- const { specifier, resolveDir } = unpackModuleSpecifier(url);
307
- let result = this.finder(specifier, { ...options, resolveDir });
259
+ let result = this.finder(url, options);
308
260
  result &&= super.canonicalize(result.href, options);
309
261
  return result;
310
262
  }
@@ -348,4 +300,3 @@ function sassBindWorkaround(importer) {
348
300
  return importer;
349
301
  }
350
302
  exports.sassBindWorkaround = sassBindWorkaround;
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmViYXNpbmctaW1wb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy90b29scy9zYXNzL3JlYmFzaW5nLWltcG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7OztBQUdILGdFQUF1QztBQUN2QyxxQ0FBb0Q7QUFDcEQseUNBQXVFO0FBQ3ZFLHVDQUF3RDtBQUV4RCxtQ0FBZ0Q7QUFXaEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUVsRCxTQUFTLG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsVUFBa0I7SUFDaEUsTUFBTSxNQUFNLEdBQ1Ysd0JBQXdCO1FBQ3hCLEdBQUc7UUFDSCx5RkFBeUY7UUFDekYsdUZBQXVGO1FBQ3ZGLG1FQUFtRTtRQUNuRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7UUFDOUIsR0FBRztRQUNILDJGQUEyRjtRQUMzRiwrQ0FBK0M7UUFDL0MsOERBQThEO1FBQzlELFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXpDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLFNBQWlCO0lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsd0JBQXdCLEdBQUcsQ0FBQyxFQUFFO1FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztLQUN0QjtJQUVELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZDLE9BQU87UUFDTCxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwQixVQUFVLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWUsbUJBQW1CO0lBT3RCO0lBQ0E7SUFQVjs7OztPQUlHO0lBQ0gsWUFDVSxjQUFzQixFQUN0QixnQkFBNEM7UUFENUMsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE0QjtJQUNuRCxDQUFDO0lBSUosSUFBSSxDQUFDLFlBQWlCO1FBQ3BCLE1BQU0sY0FBYyxHQUFHLElBQUEsd0JBQWEsRUFBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxNQUFNLG1CQUFtQixHQUFHLElBQUEsbUJBQU8sRUFBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLFFBQVEsR0FBRyxJQUFBLHNCQUFZLEVBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXJELGlDQUFpQztRQUNqQyxJQUFJLGVBQWUsQ0FBQztRQUNwQixLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUEsZ0JBQVEsRUFBQyxRQUFRLENBQUMsRUFBRTtZQUN0RCw0Q0FBNEM7WUFDNUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQyxTQUFTO2FBQ1Y7WUFFRCwyREFBMkQ7WUFDM0QsSUFBSSxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JELFNBQVM7YUFDVjtZQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsb0JBQVEsRUFBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUEsZ0JBQUksRUFBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXBGLGtEQUFrRDtZQUNsRCw4REFBOEQ7WUFDOUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFdkYsZUFBZSxLQUFLLElBQUksc0JBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDaEQ7UUFFRCxxRkFBcUY7UUFDckYsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFBLG1CQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUU7WUFDN0QsMEVBQTBFO1lBQzFFLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsRUFBRTtZQUNGLHVHQUF1RztZQUN2Ryx3R0FBd0c7WUFDeEcsbUdBQW1HO1lBQ25HLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDN0UsU0FBUzthQUNWO1lBRUQsZUFBZSxLQUFLLElBQUksc0JBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxlQUFlLENBQUMsTUFBTSxDQUNwQixLQUFLLEVBQ0wsR0FBRyxFQUNILElBQUksbUJBQW1CLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FDM0QsQ0FBQztTQUNIO1FBRUQsSUFBSSxlQUFlLEVBQUU7WUFDbkIsUUFBUSxHQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekIsK0RBQStEO2dCQUMvRCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO29CQUN0QyxLQUFLLEVBQUUsVUFBVTtvQkFDakIsY0FBYyxFQUFFLElBQUk7b0JBQ3BCLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSTtpQkFDMUIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFtQixDQUFDLENBQUM7YUFDbkU7U0FDRjtRQUVELElBQUksTUFBMEIsQ0FBQztRQUMvQixRQUFRLElBQUEsbUJBQU8sRUFBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM3QyxLQUFLLE1BQU07Z0JBQ1QsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDZixNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBQ3BCLE1BQU07WUFDUjtnQkFDRSxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNoQixNQUFNO1NBQ1Q7UUFFRCxPQUFPO1lBQ0wsUUFBUTtZQUNSLE1BQU07WUFDTixZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsbUJBQW1CO0lBR3hEO0lBRlYsWUFDRSxjQUFzQixFQUNkLGlCQUFpQixJQUFJLEdBQUcsRUFBMEIsRUFDMUQsZ0JBQTRDO1FBRTVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUhoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBb0M7SUFJNUQsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXLEVBQUUsT0FBZ0M7UUFDeEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssYUFBYSxDQUFDLEdBQVcsRUFBRSxVQUFtQixFQUFFLGNBQXVCO1FBQzdFLElBQUksY0FBYyxDQUFDO1FBQ25CLElBQUk7WUFDRixjQUFjLEdBQUcsSUFBQSx3QkFBYSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBQUMsTUFBTTtZQUNOLHlEQUF5RDtZQUN6RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBQSxtQkFBTyxFQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUEsbUJBQU8sRUFBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxNQUFNLGlCQUFpQixHQUNyQixTQUFTLEtBQUssT0FBTyxJQUFJLFNBQVMsS0FBSyxPQUFPLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQztRQUN6RSw2RUFBNkU7UUFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBQSxvQkFBUSxFQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRTVDLElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQzthQUM5RDtZQUNELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDNUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUM7U0FDbkQ7YUFBTTtZQUNMLElBQUksVUFBVSxFQUFFO2dCQUNkLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUM7Z0JBQ2hELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUM7Z0JBQ2hELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7Z0JBQy9DLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDO2dCQUN0RCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQztnQkFDdEQsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7YUFDdEQ7WUFDRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDMUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUN6QyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUNoRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUNoRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksYUFBYSxDQUFDO1FBQ2xCLElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTlCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksYUFBYSxFQUFFO1lBQ2pCLCtGQUErRjtZQUMvRiwyQkFBMkI7WUFDM0IsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFDN0MsYUFBYSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ25GLFlBQVksR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRixpQkFBaUIsR0FBRyxjQUFjLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZGO2FBQU07WUFDTCw4RkFBOEY7WUFDOUYseUNBQXlDO1lBQ3pDLElBQUksT0FBTyxDQUFDO1lBQ1osSUFBSTtnQkFDRixPQUFPLEdBQUcsSUFBQSxxQkFBVyxFQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1lBQUMsTUFBTTtnQkFDTixPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUNuQixZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLEdBQUcsRUFBVSxFQUFFLENBQUM7WUFDN0UsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUU7Z0JBQzNCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMzQztnQkFFRCx5RUFBeUU7Z0JBQ3pFLElBQUksY0FBYyxJQUFJLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksV0FBVyxFQUFFO29CQUNsRixpQkFBaUIsR0FBRyxJQUFJLENBQUM7aUJBQzFCO2dCQUVELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ25CLFNBQVM7aUJBQ1Y7Z0JBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVwQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvQjtnQkFFRCxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3JDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNoQzthQUNGO1lBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsNEVBQTRFO1FBQzVFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDbkIsT0FBTyxJQUFBLHdCQUFhLEVBQUMsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixzREFBc0Q7WUFDdEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzlEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssVUFBVSxDQUFDLEtBQWU7UUFDaEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixZQUFZO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELDJDQUEyQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLHNFQUFzRTtZQUN0RSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsT0FBTyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDL0UsNkRBQTZEO1lBQzdELDRFQUE0RTtZQUM1RSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7YUFDL0M7WUFFRCwwREFBMEQ7WUFDMUQsc0hBQXNIO1lBQ3RILE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO1FBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBbEtELGtFQWtLQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLHlCQUEwQixTQUFRLDJCQUEyQjtJQUs5RDtJQUpWLFlBQ0UsY0FBc0IsRUFDdEIsY0FBMkMsRUFDM0MsZ0JBQXVELEVBQy9DLE1BR087UUFFZixLQUFLLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBTGhELFdBQU0sR0FBTixNQUFNLENBR0M7SUFHakIsQ0FBQztJQUVRLFlBQVksQ0FBQyxHQUFXLEVBQUUsT0FBZ0M7UUFDakUsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekM7UUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNoRSxNQUFNLEtBQUssS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXpCRCw4REF5QkM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSwyQkFBMkI7SUFLakU7SUFKVixZQUNFLGNBQXNCLEVBQ3RCLGNBQTJDLEVBQzNDLGdCQUF1RCxFQUMvQyxTQUEyQjtRQUVuQyxLQUFLLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmhELGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBR3JDLENBQUM7SUFFUSxZQUFZLENBQUMsR0FBVyxFQUFFLE9BQWdDO1FBQ2pFLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM3QixPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNyQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFBLHdCQUFhLEVBQUMsSUFBQSxnQkFBSSxFQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ25CLE1BQU07YUFDUDtTQUNGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBekJELG9FQXlCQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQXFCLFFBQVc7SUFDaEUsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RCxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFMRCxnREFLQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBSYXdTb3VyY2VNYXAgfSBmcm9tICdAYW1wcHJvamVjdC9yZW1hcHBpbmcnO1xuaW1wb3J0IE1hZ2ljU3RyaW5nIGZyb20gJ21hZ2ljLXN0cmluZyc7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB0eXBlIHsgSW1wb3J0ZXIsIEltcG9ydGVyUmVzdWx0LCBTeW50YXggfSBmcm9tICdzYXNzJztcbmltcG9ydCB7IGZpbmRJbXBvcnRzLCBmaW5kVXJscyB9IGZyb20gJy4vbGV4ZXInO1xuXG4vKipcbiAqIEEgcHJlcHJvY2Vzc2VkIGNhY2hlIGVudHJ5IGZvciB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGhpbiBhIHByZXZpb3VzbHkgc2VhcmNoZWRcbiAqIGRpcmVjdG9yeSB3aGVuIHBlcmZvcm1pbmcgU2FzcyBpbXBvcnQgcmVzb2x1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RvcnlFbnRyeSB7XG4gIGZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgZGlyZWN0b3JpZXM6IFNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgcHJlZml4IHRoYXQgaXMgYWRkZWQgdG8gaW1wb3J0IGFuZCB1c2UgZGlyZWN0aXZlIHNwZWNpZmllcnMgdGhhdCBzaG91bGQgYmUgcmVzb2x2ZWRcbiAqIGFzIG1vZHVsZXMgYW5kIHRoYXQgd2lsbCBjb250YWluIGFkZGVkIHJlc29sdmUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1c2VkIHRvIHdvcmthcm91bmQgdGhlIFNhc3MgbGltaXRhdGlvbiB0aGF0IGl0IGRvZXMgbm90IHByb3ZpZGUgdGhlXG4gKiBpbXBvcnRlciBmaWxlIHRvIGN1c3RvbSByZXNvbHV0aW9uIHBsdWdpbnMuXG4gKi9cbmNvbnN0IE1PRFVMRV9SRVNPTFVUSU9OX1BSRUZJWCA9ICdfX05HX1BBQ0tBR0VfXyc7XG5cbmZ1bmN0aW9uIHBhY2tNb2R1bGVTcGVjaWZpZXIoc3BlY2lmaWVyOiBzdHJpbmcsIHJlc29sdmVEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhY2tlZCA9XG4gICAgTU9EVUxFX1JFU09MVVRJT05fUFJFRklYICtcbiAgICAnOycgK1xuICAgIC8vIEVuY29kZSB0aGUgcmVzb2x2ZSBkaXJlY3RvcnkgdG8gcHJldmVudCB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIGZyb20gYmVpbmcgcHJlc2VudCB3aGVuXG4gICAgLy8gU2FzcyBwcm9jZXNzZXMgdGhlIFVSTC4gVGhpcyBpcyBpbXBvcnRhbnQgb24gV2luZG93cyB3aGljaCBjYW4gY29udGFpbiBkcml2ZSBsZXR0ZXJzXG4gICAgLy8gYW5kIGNvbG9ucyB3aGljaCB3b3VsZCBvdGhlcndpc2UgYmUgaW50ZXJwcmV0ZWQgYXMgYSBVUkwgc2NoZW1lLlxuICAgIGVuY29kZVVSSUNvbXBvbmVudChyZXNvbHZlRGlyKSArXG4gICAgJzsnICtcbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIGVuY29kaW5nIHRvIHByb3ZpZGUgbW9yZSBmcmllbmRseSBub3QgZm91bmQgZXJyb3IgbWVzc2FnZXMuXG4gICAgLy8gVW5lc2NhcGluZyBpcyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgYnkgU2Fzcy5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdXJsI3N5bnRheFxuICAgIHNwZWNpZmllci5yZXBsYWNlKC9bKClcXHMnXCJdL2csICdcXFxcJCYnKTtcblxuICByZXR1cm4gcGFja2VkO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tNb2R1bGVTcGVjaWZpZXIoc3BlY2lmaWVyOiBzdHJpbmcpOiB7IHNwZWNpZmllcjogc3RyaW5nOyByZXNvbHZlRGlyPzogc3RyaW5nIH0ge1xuICBpZiAoIXNwZWNpZmllci5zdGFydHNXaXRoKGAke01PRFVMRV9SRVNPTFVUSU9OX1BSRUZJWH07YCkpIHtcbiAgICByZXR1cm4geyBzcGVjaWZpZXIgfTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IHNwZWNpZmllci5zcGxpdCgnOycsIDMpO1xuXG4gIHJldHVybiB7XG4gICAgc3BlY2lmaWVyOiB2YWx1ZXNbMl0sXG4gICAgcmVzb2x2ZURpcjogZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlc1sxXSksXG4gIH07XG59XG5cbi8qKlxuICogQSBTYXNzIEltcG9ydGVyIGJhc2UgY2xhc3MgdGhhdCBwcm92aWRlcyB0aGUgbG9hZCBsb2dpYyB0byByZWJhc2UgYWxsIGB1cmwoKWAgZnVuY3Rpb25zXG4gKiB3aXRoaW4gYSBzdHlsZXNoZWV0LiBUaGUgcmViYXNpbmcgd2lsbCBlbnN1cmUgdGhhdCB0aGUgVVJMcyBpbiB0aGUgb3V0cHV0IG9mIHRoZSBTYXNzIGNvbXBpbGVyXG4gKiByZWZsZWN0IHRoZSBmaW5hbCBmaWxlc3lzdGVtIGxvY2F0aW9uIG9mIHRoZSBvdXRwdXQgQ1NTIGZpbGUuXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgY29yZSBvZiB0aGUgcmViYXNpbmcgZnVuY3Rpb25hbGl0eS4gVG8gZW5zdXJlIHRoYXQgZWFjaCBmaWxlIGlzIHByb2Nlc3NlZFxuICogYnkgdGhpcyBpbXBvcnRlcidzIGxvYWQgaW1wbGVtZW50YXRpb24sIHRoZSBTYXNzIGNvbXBpbGVyIHJlcXVpcmVzIHRoZSBpbXBvcnRlcidzIGNhbm9uaWNhbGl6ZVxuICogZnVuY3Rpb24gdG8gcmV0dXJuIGEgbm9uLW51bGwgdmFsdWUgd2l0aCB0aGUgcmVzb2x2ZWQgbG9jYXRpb24gb2YgdGhlIHJlcXVlc3RlZCBzdHlsZXNoZWV0LlxuICogQ29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgY2xhc3MgbXVzdCBwcm92aWRlIHRoaXMgY2Fub25pY2FsaXplIGZ1bmN0aW9uYWxpdHkgZm9yIHJlYmFzaW5nXG4gKiB0byBiZSBlZmZlY3RpdmUuXG4gKi9cbmFic3RyYWN0IGNsYXNzIFVybFJlYmFzaW5nSW1wb3J0ZXIgaW1wbGVtZW50cyBJbXBvcnRlcjwnc3luYyc+IHtcbiAgLyoqXG4gICAqIEBwYXJhbSBlbnRyeURpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IG9mIHRoZSBlbnRyeSBzdHlsZXNoZWV0IHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgU2FzcyBjb21waWxlci5cbiAgICogQHBhcmFtIHJlYmFzZVNvdXJjZU1hcHMgV2hlbiBwcm92aWRlZCwgcmViYXNlZCBmaWxlcyB3aWxsIGhhdmUgYW4gaW50ZXJtZWRpYXRlIHNvdXJjZW1hcCBhZGRlZCB0byB0aGUgTWFwXG4gICAqIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZmluYWwgc291cmNlbWFwIHRoYXQgY29udGFpbnMgb3JpZ2luYWwgc291cmNlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZW50cnlEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYmFzZVNvdXJjZU1hcHM/OiBNYXA8c3RyaW5nLCBSYXdTb3VyY2VNYXA+LFxuICApIHt9XG5cbiAgYWJzdHJhY3QgY2Fub25pY2FsaXplKHVybDogc3RyaW5nLCBvcHRpb25zOiB7IGZyb21JbXBvcnQ6IGJvb2xlYW4gfSk6IFVSTCB8IG51bGw7XG5cbiAgbG9hZChjYW5vbmljYWxVcmw6IFVSTCk6IEltcG9ydGVyUmVzdWx0IHwgbnVsbCB7XG4gICAgY29uc3Qgc3R5bGVzaGVldFBhdGggPSBmaWxlVVJMVG9QYXRoKGNhbm9uaWNhbFVybCk7XG4gICAgY29uc3Qgc3R5bGVzaGVldERpcmVjdG9yeSA9IGRpcm5hbWUoc3R5bGVzaGVldFBhdGgpO1xuICAgIGxldCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhzdHlsZXNoZWV0UGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICAvLyBSZWJhc2UgYW55IFVSTHMgdGhhdCBhcmUgZm91bmRcbiAgICBsZXQgdXBkYXRlZENvbnRlbnRzO1xuICAgIGZvciAoY29uc3QgeyBzdGFydCwgZW5kLCB2YWx1ZSB9IG9mIGZpbmRVcmxzKGNvbnRlbnRzKSkge1xuICAgICAgLy8gU2tpcCBpZiB2YWx1ZSBpcyBlbXB0eSBvciBhIFNhc3MgdmFyaWFibGVcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGlmIHJvb3QtcmVsYXRpdmUsIGFic29sdXRlIG9yIHByb3RvY29sIHJlbGF0aXZlIHVybFxuICAgICAgaWYgKC9eKCg/Olxcdys6KT9cXC9cXC98ZGF0YTp8Y2hyb21lOnwjfFxcLykvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWJhc2VkUGF0aCA9IHJlbGF0aXZlKHRoaXMuZW50cnlEaXJlY3RvcnksIGpvaW4oc3R5bGVzaGVldERpcmVjdG9yeSwgdmFsdWUpKTtcblxuICAgICAgLy8gTm9ybWFsaXplIHBhdGggc2VwYXJhdG9ycyBhbmQgZXNjYXBlIGNoYXJhY3RlcnNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy91cmwjc3ludGF4XG4gICAgICBjb25zdCByZWJhc2VkVXJsID0gJy4vJyArIHJlYmFzZWRQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKS5yZXBsYWNlKC9bKClcXHMnXCJdL2csICdcXFxcJCYnKTtcblxuICAgICAgdXBkYXRlZENvbnRlbnRzID8/PSBuZXcgTWFnaWNTdHJpbmcoY29udGVudHMpO1xuICAgICAgdXBkYXRlZENvbnRlbnRzLnVwZGF0ZShzdGFydCwgZW5kLCByZWJhc2VkVXJsKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzb2x1dGlvbiBkaXJlY3RvcnkgaW5mb3JtYXRpb24gdG8gbW9kdWxlIHNwZWNpZmllcnMgdG8gZmFjaWxpdGF0ZSByZXNvbHV0aW9uXG4gICAgZm9yIChjb25zdCB7IHN0YXJ0LCBlbmQsIHNwZWNpZmllciB9IG9mIGZpbmRJbXBvcnRzKGNvbnRlbnRzKSkge1xuICAgICAgLy8gQ3VycmVudGx5IG9ubHkgcHJvdmlkZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gZm9yIGtub3duL2NvbW1vbiBwYWNrYWdlczpcbiAgICAgIC8vICogYEBtYXRlcmlhbC9gXG4gICAgICAvLyAqIGBAYW5ndWxhci9gXG4gICAgICAvL1xuICAgICAgLy8gQ29tcHJlaGVuc2l2ZSBwcmUtcmVzb2x1dGlvbiBzdXBwb3J0IG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBUaGlzIGlzIGNvbXBsaWNhdGVkIGJ5IENTUy9TYXNzIG5vdFxuICAgICAgLy8gcmVxdWlyaW5nIGEgYC4vYCBvciBgLi4vYCBwcmVmaXggdG8gc2lnbmlmeSByZWxhdGl2ZSBwYXRocy4gQSBiYXJlIHNwZWNpZmllciBjb3VsZCBiZSBlaXRoZXIgcmVsYXRpdmVcbiAgICAgIC8vIG9yIGEgbW9kdWxlIHNwZWNpZmllci4gVG8gZGlmZmVyZW50aWF0ZSwgYSByZWxhdGl2ZSByZXNvbHV0aW9uIHdvdWxkIG5lZWQgdG8gYmUgYXR0ZW1wdGVkIGZpcnN0LlxuICAgICAgaWYgKCFzcGVjaWZpZXIuc3RhcnRzV2l0aCgnQGFuZ3VsYXIvJykgJiYgIXNwZWNpZmllci5zdGFydHNXaXRoKCdAbWF0ZXJpYWwvJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZWRDb250ZW50cyA/Pz0gbmV3IE1hZ2ljU3RyaW5nKGNvbnRlbnRzKTtcbiAgICAgIHVwZGF0ZWRDb250ZW50cy51cGRhdGUoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIGBcIiR7cGFja01vZHVsZVNwZWNpZmllcihzcGVjaWZpZXIsIHN0eWxlc2hlZXREaXJlY3RvcnkpfVwiYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZWRDb250ZW50cykge1xuICAgICAgY29udGVudHMgPSB1cGRhdGVkQ29udGVudHMudG9TdHJpbmcoKTtcbiAgICAgIGlmICh0aGlzLnJlYmFzZVNvdXJjZU1hcHMpIHtcbiAgICAgICAgLy8gR2VuZXJhdGUgYW4gaW50ZXJtZWRpYXRlIHNvdXJjZSBtYXAgZm9yIHRoZSByZWJhc2luZyBjaGFuZ2VzXG4gICAgICAgIGNvbnN0IG1hcCA9IHVwZGF0ZWRDb250ZW50cy5nZW5lcmF0ZU1hcCh7XG4gICAgICAgICAgaGlyZXM6ICdib3VuZGFyeScsXG4gICAgICAgICAgaW5jbHVkZUNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgc291cmNlOiBjYW5vbmljYWxVcmwuaHJlZixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmViYXNlU291cmNlTWFwcy5zZXQoY2Fub25pY2FsVXJsLmhyZWYsIG1hcCBhcyBSYXdTb3VyY2VNYXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzeW50YXg6IFN5bnRheCB8IHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKGV4dG5hbWUoc3R5bGVzaGVldFBhdGgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJy5jc3MnOlxuICAgICAgICBzeW50YXggPSAnY3NzJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcuc2Fzcyc6XG4gICAgICAgIHN5bnRheCA9ICdpbmRlbnRlZCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc3ludGF4ID0gJ3Njc3MnO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudHMsXG4gICAgICBzeW50YXgsXG4gICAgICBzb3VyY2VNYXBVcmw6IGNhbm9uaWNhbFVybCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIFNhc3MgaW1wb3J0ZXIgbG9naWMgdG8gcmVzb2x2ZSByZWxhdGl2ZSBzdHlsZXNoZWV0IGltcG9ydHMgdmlhIGJvdGggaW1wb3J0IGFuZCB1c2UgcnVsZXNcbiAqIGFuZCBhbHNvIHJlYmFzZSBhbnkgYHVybCgpYCBmdW5jdGlvbiB1c2FnZSB3aXRoaW4gdGhvc2Ugc3R5bGVzaGVldHMuIFRoZSByZWJhc2luZyB3aWxsIGVuc3VyZSB0aGF0XG4gKiB0aGUgVVJMcyBpbiB0aGUgb3V0cHV0IG9mIHRoZSBTYXNzIGNvbXBpbGVyIHJlZmxlY3QgdGhlIGZpbmFsIGZpbGVzeXN0ZW0gbG9jYXRpb24gb2YgdGhlIG91dHB1dCBDU1MgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGF0aXZlVXJsUmViYXNpbmdJbXBvcnRlciBleHRlbmRzIFVybFJlYmFzaW5nSW1wb3J0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBlbnRyeURpcmVjdG9yeTogc3RyaW5nLFxuICAgIHByaXZhdGUgZGlyZWN0b3J5Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgRGlyZWN0b3J5RW50cnk+KCksXG4gICAgcmViYXNlU291cmNlTWFwcz86IE1hcDxzdHJpbmcsIFJhd1NvdXJjZU1hcD4sXG4gICkge1xuICAgIHN1cGVyKGVudHJ5RGlyZWN0b3J5LCByZWJhc2VTb3VyY2VNYXBzKTtcbiAgfVxuXG4gIGNhbm9uaWNhbGl6ZSh1cmw6IHN0cmluZywgb3B0aW9uczogeyBmcm9tSW1wb3J0OiBib29sZWFuIH0pOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlSW1wb3J0KHVybCwgb3B0aW9ucy5mcm9tSW1wb3J0LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIGEgcHJvdmlkZWQgVVJMIHRvIGEgc3R5bGVzaGVldCBmaWxlIHVzaW5nIHRoZSBTYXNzIGNvbXBpbGVyJ3MgcmVzb2x1dGlvbiBhbGdvcml0aG0uXG4gICAqIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNzL2RhcnQtc2Fzcy9ibG9iLzQ0ZDZiYjZhYzcyZmU2YjkzZjViZmVjMzcxYTFmZmZiMThlNmI3NmQvbGliL3NyYy9pbXBvcnRlci91dGlscy5kYXJ0XG4gICAqIEBwYXJhbSB1cmwgVGhlIGZpbGUgcHJvdG9jb2wgVVJMIHRvIHJlc29sdmUuXG4gICAqIEBwYXJhbSBmcm9tSW1wb3J0IElmIHRydWUsIFVSTCB3YXMgZnJvbSBhbiBpbXBvcnQgcnVsZTsgb3RoZXJ3aXNlIGZyb20gYSB1c2UgcnVsZS5cbiAgICogQHBhcmFtIGNoZWNrRGlyZWN0b3J5IElmIHRydWUsIHRyeSBjaGVja2luZyBmb3IgYSBkaXJlY3Rvcnkgd2l0aCB0aGUgYmFzZSBuYW1lIGNvbnRhaW5pbmcgYW4gaW5kZXggZmlsZS5cbiAgICogQHJldHVybnMgQSBmdWxsIHJlc29sdmVkIFVSTCBvZiB0aGUgc3R5bGVzaGVldCBmaWxlIG9yIGBudWxsYCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVJbXBvcnQodXJsOiBzdHJpbmcsIGZyb21JbXBvcnQ6IGJvb2xlYW4sIGNoZWNrRGlyZWN0b3J5OiBib29sZWFuKTogVVJMIHwgbnVsbCB7XG4gICAgbGV0IHN0eWxlc2hlZXRQYXRoO1xuICAgIHRyeSB7XG4gICAgICBzdHlsZXNoZWV0UGF0aCA9IGZpbGVVUkxUb1BhdGgodXJsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE9ubHkgZmlsZSBwcm90b2NvbCBVUkxzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBvcnRlclxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gZGlybmFtZShzdHlsZXNoZWV0UGF0aCk7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShzdHlsZXNoZWV0UGF0aCk7XG4gICAgY29uc3QgaGFzU3R5bGVFeHRlbnNpb24gPVxuICAgICAgZXh0ZW5zaW9uID09PSAnLnNjc3MnIHx8IGV4dGVuc2lvbiA9PT0gJy5zYXNzJyB8fCBleHRlbnNpb24gPT09ICcuY3NzJztcbiAgICAvLyBSZW1vdmUgdGhlIHN0eWxlIGV4dGVuc2lvbiBpZiBwcmVzZW50IHRvIGFsbG93IGFkZGluZyB0aGUgYC5pbXBvcnRgIHN1ZmZpeFxuICAgIGNvbnN0IGZpbGVuYW1lID0gYmFzZW5hbWUoc3R5bGVzaGVldFBhdGgsIGhhc1N0eWxlRXh0ZW5zaW9uID8gZXh0ZW5zaW9uIDogdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IGltcG9ydFBvdGVudGlhbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBkZWZhdWx0UG90ZW50aWFscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgaWYgKGhhc1N0eWxlRXh0ZW5zaW9uKSB7XG4gICAgICBpZiAoZnJvbUltcG9ydCkge1xuICAgICAgICBpbXBvcnRQb3RlbnRpYWxzLmFkZChmaWxlbmFtZSArICcuaW1wb3J0JyArIGV4dGVuc2lvbik7XG4gICAgICAgIGltcG9ydFBvdGVudGlhbHMuYWRkKCdfJyArIGZpbGVuYW1lICsgJy5pbXBvcnQnICsgZXh0ZW5zaW9uKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHRQb3RlbnRpYWxzLmFkZChmaWxlbmFtZSArIGV4dGVuc2lvbik7XG4gICAgICBkZWZhdWx0UG90ZW50aWFscy5hZGQoJ18nICsgZmlsZW5hbWUgKyBleHRlbnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZnJvbUltcG9ydCkge1xuICAgICAgICBpbXBvcnRQb3RlbnRpYWxzLmFkZChmaWxlbmFtZSArICcuaW1wb3J0LnNjc3MnKTtcbiAgICAgICAgaW1wb3J0UG90ZW50aWFscy5hZGQoZmlsZW5hbWUgKyAnLmltcG9ydC5zYXNzJyk7XG4gICAgICAgIGltcG9ydFBvdGVudGlhbHMuYWRkKGZpbGVuYW1lICsgJy5pbXBvcnQuY3NzJyk7XG4gICAgICAgIGltcG9ydFBvdGVudGlhbHMuYWRkKCdfJyArIGZpbGVuYW1lICsgJy5pbXBvcnQuc2NzcycpO1xuICAgICAgICBpbXBvcnRQb3RlbnRpYWxzLmFkZCgnXycgKyBmaWxlbmFtZSArICcuaW1wb3J0LnNhc3MnKTtcbiAgICAgICAgaW1wb3J0UG90ZW50aWFscy5hZGQoJ18nICsgZmlsZW5hbWUgKyAnLmltcG9ydC5jc3MnKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHRQb3RlbnRpYWxzLmFkZChmaWxlbmFtZSArICcuc2NzcycpO1xuICAgICAgZGVmYXVsdFBvdGVudGlhbHMuYWRkKGZpbGVuYW1lICsgJy5zYXNzJyk7XG4gICAgICBkZWZhdWx0UG90ZW50aWFscy5hZGQoZmlsZW5hbWUgKyAnLmNzcycpO1xuICAgICAgZGVmYXVsdFBvdGVudGlhbHMuYWRkKCdfJyArIGZpbGVuYW1lICsgJy5zY3NzJyk7XG4gICAgICBkZWZhdWx0UG90ZW50aWFscy5hZGQoJ18nICsgZmlsZW5hbWUgKyAnLnNhc3MnKTtcbiAgICAgIGRlZmF1bHRQb3RlbnRpYWxzLmFkZCgnXycgKyBmaWxlbmFtZSArICcuY3NzJyk7XG4gICAgfVxuXG4gICAgbGV0IGZvdW5kRGVmYXVsdHM7XG4gICAgbGV0IGZvdW5kSW1wb3J0cztcbiAgICBsZXQgaGFzUG90ZW50aWFsSW5kZXggPSBmYWxzZTtcblxuICAgIGxldCBjYWNoZWRFbnRyaWVzID0gdGhpcy5kaXJlY3RvcnlDYWNoZS5nZXQoZGlyZWN0b3J5KTtcbiAgICBpZiAoY2FjaGVkRW50cmllcykge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcmVwcm9jZXNzZWQgY2FjaGUgb2YgdGhlIGRpcmVjdG9yeSwgcGVyZm9ybSBhbiBpbnRlcnNlY3Rpb24gb2YgdGhlIHBvdGVudGlhbHNcbiAgICAgIC8vIGFuZCB0aGUgZGlyZWN0b3J5IGZpbGVzLlxuICAgICAgY29uc3QgeyBmaWxlcywgZGlyZWN0b3JpZXMgfSA9IGNhY2hlZEVudHJpZXM7XG4gICAgICBmb3VuZERlZmF1bHRzID0gWy4uLmRlZmF1bHRQb3RlbnRpYWxzXS5maWx0ZXIoKHBvdGVudGlhbCkgPT4gZmlsZXMuaGFzKHBvdGVudGlhbCkpO1xuICAgICAgZm91bmRJbXBvcnRzID0gWy4uLmltcG9ydFBvdGVudGlhbHNdLmZpbHRlcigocG90ZW50aWFsKSA9PiBmaWxlcy5oYXMocG90ZW50aWFsKSk7XG4gICAgICBoYXNQb3RlbnRpYWxJbmRleCA9IGNoZWNrRGlyZWN0b3J5ICYmICFoYXNTdHlsZUV4dGVuc2lvbiAmJiBkaXJlY3Rvcmllcy5oYXMoZmlsZW5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyBwcmVwcm9jZXNzZWQgY2FjaGUgZXhpc3RzLCBnZXQgdGhlIGVudHJpZXMgZnJvbSB0aGUgZmlsZSBzeXN0ZW0gYW5kLCB3aGlsZSBzZWFyY2hpbmcsXG4gICAgICAvLyBnZW5lcmF0ZSB0aGUgY2FjaGUgZm9yIGxhdGVyIHJlcXVlc3RzLlxuICAgICAgbGV0IGVudHJpZXM7XG4gICAgICB0cnkge1xuICAgICAgICBlbnRyaWVzID0gcmVhZGRpclN5bmMoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGZvdW5kRGVmYXVsdHMgPSBbXTtcbiAgICAgIGZvdW5kSW1wb3J0cyA9IFtdO1xuICAgICAgY2FjaGVkRW50cmllcyA9IHsgZmlsZXM6IG5ldyBTZXQ8c3RyaW5nPigpLCBkaXJlY3RvcmllczogbmV3IFNldDxzdHJpbmc+KCkgfTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBpc0RpcmVjdG9yeSA9IGVudHJ5LmlzRGlyZWN0b3J5KCk7XG4gICAgICAgIGlmIChpc0RpcmVjdG9yeSkge1xuICAgICAgICAgIGNhY2hlZEVudHJpZXMuZGlyZWN0b3JpZXMuYWRkKGVudHJ5Lm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVjb3JkIGlmIHRoZSBuYW1lIHNob3VsZCBiZSBjaGVja2VkIGFzIGEgZGlyZWN0b3J5IHdpdGggYW4gaW5kZXggZmlsZVxuICAgICAgICBpZiAoY2hlY2tEaXJlY3RvcnkgJiYgIWhhc1N0eWxlRXh0ZW5zaW9uICYmIGVudHJ5Lm5hbWUgPT09IGZpbGVuYW1lICYmIGlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgaGFzUG90ZW50aWFsSW5kZXggPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FjaGVkRW50cmllcy5maWxlcy5hZGQoZW50cnkubmFtZSk7XG5cbiAgICAgICAgaWYgKGltcG9ydFBvdGVudGlhbHMuaGFzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICAgICAgZm91bmRJbXBvcnRzLnB1c2goZW50cnkubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmYXVsdFBvdGVudGlhbHMuaGFzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICAgICAgZm91bmREZWZhdWx0cy5wdXNoKGVudHJ5Lm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlyZWN0b3J5Q2FjaGUuc2V0KGRpcmVjdG9yeSwgY2FjaGVkRW50cmllcyk7XG4gICAgfVxuXG4gICAgLy8gYGZvdW5kSW1wb3J0c2Agd2lsbCBvbmx5IGNvbnRhaW4gZWxlbWVudHMgaWYgYG9wdGlvbnMuZnJvbUltcG9ydGAgaXMgdHJ1ZVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2hlY2tGb3VuZChmb3VuZEltcG9ydHMpID8/IHRoaXMuY2hlY2tGb3VuZChmb3VuZERlZmF1bHRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFRvRmlsZVVSTChqb2luKGRpcmVjdG9yeSwgcmVzdWx0KSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1BvdGVudGlhbEluZGV4KSB7XG4gICAgICAvLyBDaGVjayBmb3IgaW5kZXggZmlsZXMgdXNpbmcgZmlsZW5hbWUgYXMgYSBkaXJlY3RvcnlcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVJbXBvcnQodXJsICsgJy9pbmRleCcsIGZyb21JbXBvcnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgYW4gYXJyYXkgb2YgcG90ZW50aWFsIHN0eWxlc2hlZXQgZmlsZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgdmFsaWRcbiAgICogc3R5bGVzaGVldCBmaWxlLiBNb3JlIHRoYW4gb25lIGRpc2NvdmVyZWQgZmlsZSBtYXkgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIEBwYXJhbSBmb3VuZCBBbiBhcnJheSBvZiBkaXNjb3ZlcmVkIHN0eWxlc2hlZXQgZmlsZXMuXG4gICAqIEByZXR1cm5zIEEgZnVsbHkgcmVzb2x2ZWQgcGF0aCBmb3IgYSBzdHlsZXNoZWV0IGZpbGUgb3IgYG51bGxgIGlmIG5vdCBmb3VuZC5cbiAgICogQHRocm93cyBJZiB0aGVyZSBhcmUgYW1iaWd1b3VzIGZpbGVzIGRpc2NvdmVyZWQuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrRm91bmQoZm91bmQ6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKGZvdW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gTm90IGZvdW5kXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBNb3JlIHRoYW4gb25lIGZvdW5kIGZpbGUgbWF5IGJlIGFuIGVycm9yXG4gICAgaWYgKGZvdW5kLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIFByZXNlbmNlIG9mIENTUyBmaWxlcyBhbG9uZ3NpZGUgYSBTYXNzIGZpbGUgZG9lcyBub3QgY2F1c2UgYW4gZXJyb3JcbiAgICAgIGNvbnN0IGZvdW5kV2l0aG91dENzcyA9IGZvdW5kLmZpbHRlcigoZWxlbWVudCkgPT4gZXh0bmFtZShlbGVtZW50KSAhPT0gJy5jc3MnKTtcbiAgICAgIC8vIElmIHRoZSBsZW5ndGggaXMgemVybyB0aGVuIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBjc3MgZmlsZXNcbiAgICAgIC8vIElmIHRoZSBsZW5ndGggaXMgbW9yZSB0aGFuIG9uZSB0aGFuIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBzYXNzL3Njc3MgZmlsZXNcbiAgICAgIGlmIChmb3VuZFdpdGhvdXRDc3MubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQW1iaWd1b3VzIGltcG9ydCBkZXRlY3RlZC4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmV0dXJuIHRoZSBub24tQ1NTIGZpbGUgKHNhc3Mvc2NzcyBmaWxlcyBoYXZlIHByaW9yaXR5KVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Nhc3MvZGFydC1zYXNzL2Jsb2IvNDRkNmJiNmFjNzJmZTZiOTNmNWJmZWMzNzFhMWZmZmIxOGU2Yjc2ZC9saWIvc3JjL2ltcG9ydGVyL3V0aWxzLmRhcnQjTDQ0LUw0N1xuICAgICAgcmV0dXJuIGZvdW5kV2l0aG91dENzc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmRbMF07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgU2FzcyBpbXBvcnRlciBsb2dpYyB0byByZXNvbHZlIG1vZHVsZSAobnBtIHBhY2thZ2UpIHN0eWxlc2hlZXQgaW1wb3J0cyB2aWEgYm90aCBpbXBvcnQgYW5kXG4gKiB1c2UgcnVsZXMgYW5kIGFsc28gcmViYXNlIGFueSBgdXJsKClgIGZ1bmN0aW9uIHVzYWdlIHdpdGhpbiB0aG9zZSBzdHlsZXNoZWV0cy4gVGhlIHJlYmFzaW5nIHdpbGwgZW5zdXJlIHRoYXRcbiAqIHRoZSBVUkxzIGluIHRoZSBvdXRwdXQgb2YgdGhlIFNhc3MgY29tcGlsZXIgcmVmbGVjdCB0aGUgZmluYWwgZmlsZXN5c3RlbSBsb2NhdGlvbiBvZiB0aGUgb3V0cHV0IENTUyBmaWxlLlxuICovXG5leHBvcnQgY2xhc3MgTW9kdWxlVXJsUmViYXNpbmdJbXBvcnRlciBleHRlbmRzIFJlbGF0aXZlVXJsUmViYXNpbmdJbXBvcnRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGVudHJ5RGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgZGlyZWN0b3J5Q2FjaGU6IE1hcDxzdHJpbmcsIERpcmVjdG9yeUVudHJ5PixcbiAgICByZWJhc2VTb3VyY2VNYXBzOiBNYXA8c3RyaW5nLCBSYXdTb3VyY2VNYXA+IHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgZmluZGVyOiAoXG4gICAgICBzcGVjaWZpZXI6IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IHsgZnJvbUltcG9ydDogYm9vbGVhbjsgcmVzb2x2ZURpcj86IHN0cmluZyB9LFxuICAgICkgPT4gVVJMIHwgbnVsbCxcbiAgKSB7XG4gICAgc3VwZXIoZW50cnlEaXJlY3RvcnksIGRpcmVjdG9yeUNhY2hlLCByZWJhc2VTb3VyY2VNYXBzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNhbm9uaWNhbGl6ZSh1cmw6IHN0cmluZywgb3B0aW9uczogeyBmcm9tSW1wb3J0OiBib29sZWFuIH0pOiBVUkwgfCBudWxsIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmNhbm9uaWNhbGl6ZSh1cmwsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3BlY2lmaWVyLCByZXNvbHZlRGlyIH0gPSB1bnBhY2tNb2R1bGVTcGVjaWZpZXIodXJsKTtcblxuICAgIGxldCByZXN1bHQgPSB0aGlzLmZpbmRlcihzcGVjaWZpZXIsIHsgLi4ub3B0aW9ucywgcmVzb2x2ZURpciB9KTtcbiAgICByZXN1bHQgJiY9IHN1cGVyLmNhbm9uaWNhbGl6ZShyZXN1bHQuaHJlZiwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIFNhc3MgaW1wb3J0ZXIgbG9naWMgdG8gcmVzb2x2ZSBsb2FkIHBhdGhzIGxvY2F0ZWQgc3R5bGVzaGVldCBpbXBvcnRzIHZpYSBib3RoIGltcG9ydCBhbmRcbiAqIHVzZSBydWxlcyBhbmQgYWxzbyByZWJhc2UgYW55IGB1cmwoKWAgZnVuY3Rpb24gdXNhZ2Ugd2l0aGluIHRob3NlIHN0eWxlc2hlZXRzLiBUaGUgcmViYXNpbmcgd2lsbCBlbnN1cmUgdGhhdFxuICogdGhlIFVSTHMgaW4gdGhlIG91dHB1dCBvZiB0aGUgU2FzcyBjb21waWxlciByZWZsZWN0IHRoZSBmaW5hbCBmaWxlc3lzdGVtIGxvY2F0aW9uIG9mIHRoZSBvdXRwdXQgQ1NTIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2FkUGF0aHNVcmxSZWJhc2luZ0ltcG9ydGVyIGV4dGVuZHMgUmVsYXRpdmVVcmxSZWJhc2luZ0ltcG9ydGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgZW50cnlEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBkaXJlY3RvcnlDYWNoZTogTWFwPHN0cmluZywgRGlyZWN0b3J5RW50cnk+LFxuICAgIHJlYmFzZVNvdXJjZU1hcHM6IE1hcDxzdHJpbmcsIFJhd1NvdXJjZU1hcD4gfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSBsb2FkUGF0aHM6IEl0ZXJhYmxlPHN0cmluZz4sXG4gICkge1xuICAgIHN1cGVyKGVudHJ5RGlyZWN0b3J5LCBkaXJlY3RvcnlDYWNoZSwgcmViYXNlU291cmNlTWFwcyk7XG4gIH1cblxuICBvdmVycmlkZSBjYW5vbmljYWxpemUodXJsOiBzdHJpbmcsIG9wdGlvbnM6IHsgZnJvbUltcG9ydDogYm9vbGVhbiB9KTogVVJMIHwgbnVsbCB7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgIHJldHVybiBzdXBlci5jYW5vbmljYWxpemUodXJsLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGxvYWRQYXRoIG9mIHRoaXMubG9hZFBhdGhzKSB7XG4gICAgICByZXN1bHQgPSBzdXBlci5jYW5vbmljYWxpemUocGF0aFRvRmlsZVVSTChqb2luKGxvYWRQYXRoLCB1cmwpKS5ocmVmLCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIFdvcmthcm91bmQgZm9yIFNhc3Mgbm90IGNhbGxpbmcgaW5zdGFuY2UgbWV0aG9kcyB3aXRoIGB0aGlzYC5cbiAqIFRoZSBgY2Fub25pY2FsaXplYCBhbmQgYGxvYWRgIG1ldGhvZHMgd2lsbCBiZSBib3VuZCB0byB0aGUgY2xhc3MgaW5zdGFuY2UuXG4gKiBAcGFyYW0gaW1wb3J0ZXIgQSBTYXNzIGltcG9ydGVyIHRvIGJpbmQuXG4gKiBAcmV0dXJucyBUaGUgYm91bmQgU2FzcyBpbXBvcnRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhc3NCaW5kV29ya2Fyb3VuZDxUIGV4dGVuZHMgSW1wb3J0ZXI+KGltcG9ydGVyOiBUKTogVCB7XG4gIGltcG9ydGVyLmNhbm9uaWNhbGl6ZSA9IGltcG9ydGVyLmNhbm9uaWNhbGl6ZS5iaW5kKGltcG9ydGVyKTtcbiAgaW1wb3J0ZXIubG9hZCA9IGltcG9ydGVyLmxvYWQuYmluZChpbXBvcnRlcik7XG5cbiAgcmV0dXJuIGltcG9ydGVyO1xufVxuIl19
@@ -171,4 +171,3 @@ class SassLegacyWorkerImplementation {
171
171
  }
172
172
  }
173
173
  exports.SassLegacyWorkerImplementation = SassLegacyWorkerImplementation;
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Fzcy1zZXJ2aWNlLWxlZ2FjeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3Rvb2xzL3Nhc3Mvc2Fzcy1zZXJ2aWNlLWxlZ2FjeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCwrQkFBNEI7QUFVNUIsbURBQXdEO0FBQ3hELHlFQUE2RDtBQUU3RDs7R0FFRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsZ0NBQVUsQ0FBQztBQTBCdEM7Ozs7O0dBS0c7QUFDSCxNQUFhLDhCQUE4QjtJQUN4QixPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUNoQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDNUMsVUFBVSxHQUFHLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVELFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDZCxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRTVCOzs7T0FHRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsT0FBeUIsRUFBRSxRQUF3QjtRQUN4RCx3R0FBd0c7UUFDeEcsNkZBQTZGO1FBQzdGLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXhFLDhGQUE4RjtRQUM5RixJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxD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LElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsV0FBVztZQUNYLFFBQVE7WUFDUixTQUFTLEVBQUUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztTQUN4RSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbE1ELHdFQWtNQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBMZWdhY3lBc3luY0ltcG9ydGVyIGFzIEFzeW5jSW1wb3J0ZXIsXG4gIExlZ2FjeVJlc3VsdCBhcyBDb21waWxlUmVzdWx0LFxuICBMZWdhY3lFeGNlcHRpb24gYXMgRXhjZXB0aW9uLFxuICBMZWdhY3lJbXBvcnRlclJlc3VsdCBhcyBJbXBvcnRlclJlc3VsdCxcbiAgTGVnYWN5SW1wb3J0ZXJUaGlzIGFzIEltcG9ydGVyVGhpcyxcbiAgTGVnYWN5T3B0aW9ucyBhcyBPcHRpb25zLFxuICBMZWdhY3lTeW5jSW1wb3J0ZXIgYXMgU3luY0ltcG9ydGVyLFxufSBmcm9tICdzYXNzJztcbmltcG9ydCB7IE1lc3NhZ2VDaGFubmVsLCBXb3JrZXIgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7XG5pbXBvcnQgeyBtYXhXb3JrZXJzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52aXJvbm1lbnQtb3B0aW9ucyc7XG5cbi8qKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIFdvcmtlcnMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgdG8gZXhlY3V0ZSByZW5kZXIgcmVxdWVzdHMuXG4gKi9cbmNvbnN0IE1BWF9SRU5ERVJfV09SS0VSUyA9IG1heFdvcmtlcnM7XG5cbi8qKlxuICogVGhlIGNhbGxiYWNrIHR5cGUgZm9yIHRoZSBgZGFydC1zYXNzYCBhc3luY2hyb25vdXMgcmVuZGVyIGZ1bmN0aW9uLlxuICovXG50eXBlIFJlbmRlckNhbGxiYWNrID0gKGVycm9yPzogRXhjZXB0aW9uLCByZXN1bHQ/OiBDb21waWxlUmVzdWx0KSA9PiB2b2lkO1xuXG4vKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljIHJlbmRlciByZXF1ZXN0LlxuICovXG5pbnRlcmZhY2UgUmVuZGVyUmVxdWVzdCB7XG4gIGlkOiBudW1iZXI7XG4gIHdvcmtlckluZGV4OiBudW1iZXI7XG4gIGNhbGxiYWNrOiBSZW5kZXJDYWxsYmFjaztcbiAgaW1wb3J0ZXJzPzogKFN5bmNJbXBvcnRlciB8IEFzeW5jSW1wb3J0ZXIpW107XG59XG5cbi8qKlxuICogQSByZXNwb25zZSBmcm9tIHRoZSBTYXNzIHJlbmRlciBXb3JrZXIgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uXG4gKi9cbmludGVyZmFjZSBSZW5kZXJSZXNwb25zZU1lc3NhZ2Uge1xuICBpZDogbnVtYmVyO1xuICBlcnJvcj86IEV4Y2VwdGlvbjtcbiAgcmVzdWx0PzogQ29tcGlsZVJlc3VsdDtcbn1cblxuLyoqXG4gKiBBIFNhc3MgcmVuZGVyZXIgaW1wbGVtZW50YXRpb24gdGhhdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCBieSBXZWJwYWNrJ3NcbiAqIGBzYXNzLWxvYWRlcmAuIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgV29ya2VyIHRocmVhZCB0byBwZXJmb3JtIHRoZSBTYXNzIHJlbmRlcmluZ1xuICogd2l0aCB0aGUgYGRhcnQtc2Fzc2AgcGFja2FnZS4gIFRoZSBgZGFydC1zYXNzYCBzeW5jaHJvbm91cyByZW5kZXIgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW5cbiAqIHRoZSB3b3JrZXIgd2hpY2ggY2FuIGJlIHVwIHRvIHR3byB0aW1lcyBmYXN0ZXIgdGhhbiB0aGUgYXN5bmNocm9ub3VzIHZhcmlhbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYXNzTGVnYWN5V29ya2VySW1wbGVtZW50YXRpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlcnM6IFdvcmtlcltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmxlV29ya2VyczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0cyA9IG5ldyBNYXA8bnVtYmVyLCBSZW5kZXJSZXF1ZXN0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlclBhdGggPSBqb2luKF9fZGlybmFtZSwgJy4vd29ya2VyLWxlZ2FjeS5qcycpO1xuICBwcml2YXRlIGlkQ291bnRlciA9IDE7XG4gIHByaXZhdGUgbmV4dFdvcmtlckluZGV4ID0gMDtcblxuICAvKipcbiAgICogUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFNhc3MgaW1wbGVtZW50YXRpb24uXG4gICAqIFRoaXMgbWltaWNzIGVub3VnaCBvZiB0aGUgYGRhcnQtc2Fzc2AgdmFsdWUgdG8gYmUgdXNlZCB3aXRoIHRoZSBgc2Fzcy1sb2FkZXJgLlxuICAgKi9cbiAgZ2V0IGluZm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2RhcnQtc2Fzc1xcdHdvcmtlcic7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN5bmNocm9ub3VzIHJlbmRlciBmdW5jdGlvbiBpcyBub3QgdXNlZCBieSB0aGUgYHNhc3MtbG9hZGVyYC5cbiAgICovXG4gIHJlbmRlclN5bmMoKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignU2FzcyByZW5kZXJTeW5jIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgcmVxdWVzdCBhIFNhc3Mgc3R5bGVzaGVldCB0byBiZSByZW5kZXJlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgYGRhcnQtc2Fzc2Agb3B0aW9ucyB0byB1c2Ugd2hlbiByZW5kZXJpbmcgdGhlIHN0eWxlc2hlZXQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSByZW5kZXJpbmcgaXMgY29tcGxldGUuXG4gICAqL1xuICByZW5kZXIob3B0aW9uczogT3B0aW9uczwnYXN5bmMnPiwgY2FsbGJhY2s6IFJlbmRlckNhbGxiYWNrKTogdm9pZCB7XG4gICAgLy8gVGhlIGBmdW5jdGlvbnNgLCBgbG9nZ2VyYCBhbmQgYGltcG9ydGVyYCBvcHRpb25zIGFyZSBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB0aGF0IGNhbm5vdCBiZSB0cmFuc2ZlcnJlZC5cbiAgICAvLyBJZiBhbnkgYWRkaXRpb25hbCBmdW5jdGlvbiBvcHRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCB0aGV5IG11c3QgYmUgZXhjbHVkZWQgYXMgd2VsbC5cbiAgICBjb25zdCB7IGZ1bmN0aW9ucywgaW1wb3J0ZXIsIGxvZ2dlciwgLi4uc2VyaWFsaXphYmxlT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICAgIC8vIFRoZSBDTEkncyBjb25maWd1cmF0aW9uIGRvZXMgbm90IHVzZSBvciBleHBvc2UgdGhlIGFiaWxpdHkgdG8gZGVmaW5lZCBjdXN0b20gU2FzcyBmdW5jdGlvbnNcbiAgICBpZiAoZnVuY3Rpb25zICYmIE9iamVjdC5rZXlzKGZ1bmN0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTYXNzIGN1c3RvbSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgbGV0IHdvcmtlckluZGV4ID0gdGhpcy5hdmFpbGFibGVXb3JrZXJzLnBvcCgpO1xuICAgIGlmICh3b3JrZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy53b3JrZXJzLmxlbmd0aCA8IE1BWF9SRU5ERVJfV09SS0VSUykge1xuICAgICAgICB3b3JrZXJJbmRleCA9IHRoaXMud29ya2Vycy5sZW5ndGg7XG4gICAgICAgIHRoaXMud29ya2Vycy5wdXNoKHRoaXMuY3JlYXRlV29ya2VyKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29ya2VySW5kZXggPSB0aGlzLm5leHRXb3JrZXJJbmRleCsrO1xuICAgICAgICBpZiAodGhpcy5uZXh0V29ya2VySW5kZXggPj0gdGhpcy53b3JrZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubmV4dFdvcmtlckluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZVJlcXVlc3Qod29ya2VySW5kZXgsIGNhbGxiYWNrLCBpbXBvcnRlcik7XG4gICAgdGhpcy5yZXF1ZXN0cy5zZXQocmVxdWVzdC5pZCwgcmVxdWVzdCk7XG5cbiAgICB0aGlzLndvcmtlcnNbd29ya2VySW5kZXhdLnBvc3RNZXNzYWdlKHtcbiAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgaGFzSW1wb3J0ZXI6ICEhaW1wb3J0ZXIsXG4gICAgICBvcHRpb25zOiBzZXJpYWxpemFibGVPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNodXRkb3duIHRoZSBTYXNzIHJlbmRlciB3b3JrZXIuXG4gICAqIEV4ZWN1dGluZyB0aGlzIG1ldGhvZCB3aWxsIHN0b3AgYW55IHBlbmRpbmcgcmVuZGVyIHJlcXVlc3RzLlxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB3b3JrZXIgb2YgdGhpcy53b3JrZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2b2lkIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0cy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVXb3JrZXIoKTogV29ya2VyIHtcbiAgICBjb25zdCB7IHBvcnQxOiBtYWluSW1wb3J0ZXJQb3J0LCBwb3J0Mjogd29ya2VySW1wb3J0ZXJQb3J0IH0gPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBjb25zdCBpbXBvcnRlclNpZ25hbCA9IG5ldyBJbnQzMkFycmF5KG5ldyBTaGFyZWRBcnJheUJ1ZmZlcig0KSk7XG5cbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKHRoaXMud29ya2VyUGF0aCwge1xuICAgICAgd29ya2VyRGF0YTogeyB3b3JrZXJJbXBvcnRlclBvcnQsIGltcG9ydGVyU2lnbmFsIH0sXG4gICAgICB0cmFuc2Zlckxpc3Q6IFt3b3JrZXJJbXBvcnRlclBvcnRdLFxuICAgIH0pO1xuXG4gICAgd29ya2VyLm9uKCdtZXNzYWdlJywgKHJlc3BvbnNlOiBSZW5kZXJSZXNwb25zZU1lc3NhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3RzLmdldChyZXNwb25zZS5pZCk7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3RzLmRlbGV0ZShyZXNwb25zZS5pZCk7XG4gICAgICB0aGlzLmF2YWlsYWJsZVdvcmtlcnMucHVzaChyZXF1ZXN0LndvcmtlckluZGV4KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdCkge1xuICAgICAgICAvLyBUaGUgcmVzdWx0cyBhcmUgZXhwZWN0ZWQgdG8gYmUgTm9kZS5qcyBgQnVmZmVyYCBvYmplY3RzIGJ1dCB3aWxsIGVhY2ggYmUgdHJhbnNmZXJyZWQgYXNcbiAgICAgICAgLy8gYSBVaW50OEFycmF5IHRoYXQgZG9lcyBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgYHRvU3RyaW5nYCBiZWhhdmlvciBvZiBhIGBCdWZmZXJgLlxuICAgICAgICBjb25zdCB7IGNzcywgbWFwLCBzdGF0cyB9ID0gcmVzcG9uc2UucmVzdWx0O1xuICAgICAgICBjb25zdCByZXN1bHQ6IENvbXBpbGVSZXN1bHQgPSB7XG4gICAgICAgICAgLy8gVGhpcyBgQnVmZmVyLmZyb21gIG92ZXJyaWRlIHdpbGwgdXNlIHRoZSBtZW1vcnkgZGlyZWN0bHkgYW5kIGF2b2lkIG1ha2luZyBhIGNvcHlcbiAgICAgICAgICBjc3M6IEJ1ZmZlci5mcm9tKGNzcy5idWZmZXIsIGNzcy5ieXRlT2Zmc2V0LCBjc3MuYnl0ZUxlbmd0aCksXG4gICAgICAgICAgc3RhdHMsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICAvLyBUaGlzIGBCdWZmZXIuZnJvbWAgb3ZlcnJpZGUgd2lsbCB1c2UgdGhlIG1lbW9yeSBkaXJlY3RseSBhbmQgYXZvaWQgbWFraW5nIGEgY29weVxuICAgICAgICAgIHJlc3VsdC5tYXAgPSBCdWZmZXIuZnJvbShtYXAuYnVmZmVyLCBtYXAuYnl0ZU9mZnNldCwgbWFwLmJ5dGVMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2sodW5kZWZpbmVkLCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhyZXNwb25zZS5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBtYWluSW1wb3J0ZXJQb3J0Lm9uKFxuICAgICAgJ21lc3NhZ2UnLFxuICAgICAgKHtcbiAgICAgICAgaWQsXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJldixcbiAgICAgICAgZnJvbUltcG9ydCxcbiAgICAgIH06IHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIHByZXY6IHN0cmluZztcbiAgICAgICAgZnJvbUltcG9ydDogYm9vbGVhbjtcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFyZXF1ZXN0Py5pbXBvcnRlcnMpIHtcbiAgICAgICAgICBtYWluSW1wb3J0ZXJQb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICAgIEF0b21pY3Muc3RvcmUoaW1wb3J0ZXJTaWduYWwsIDAsIDEpO1xuICAgICAgICAgIEF0b21pY3Mubm90aWZ5KGltcG9ydGVyU2lnbmFsLCAwKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ltcG9ydGVycyhyZXF1ZXN0LmltcG9ydGVycywgdXJsLCBwcmV2LCBmcm9tSW1wb3J0KVxuICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIG1haW5JbXBvcnRlclBvcnQucG9zdE1lc3NhZ2UocmVzdWx0KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIG1haW5JbXBvcnRlclBvcnQucG9zdE1lc3NhZ2UoZXJyb3IpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgQXRvbWljcy5zdG9yZShpbXBvcnRlclNpZ25hbCwgMCwgMSk7XG4gICAgICAgICAgICBBdG9taWNzLm5vdGlmeShpbXBvcnRlclNpZ25hbCwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBtYWluSW1wb3J0ZXJQb3J0LnVucmVmKCk7XG5cbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzSW1wb3J0ZXJzKFxuICAgIGltcG9ydGVyczogSXRlcmFibGU8U3luY0ltcG9ydGVyIHwgQXN5bmNJbXBvcnRlcj4sXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcHJldjogc3RyaW5nLFxuICAgIGZyb21JbXBvcnQ6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8SW1wb3J0ZXJSZXN1bHQ+IHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGltcG9ydGVyIG9mIGltcG9ydGVycykge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2U8SW1wb3J0ZXJSZXN1bHQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIEltcG9ydGVycyBjYW4gYmUgYm90aCBzeW5jIGFuZCBhc3luY1xuICAgICAgICBjb25zdCBpbm5lclJlc3VsdCA9IChpbXBvcnRlciBhcyBBc3luY0ltcG9ydGVyKS5jYWxsKFxuICAgICAgICAgIHsgZnJvbUltcG9ydCB9IGFzIEltcG9ydGVyVGhpcyxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJldixcbiAgICAgICAgICByZXNvbHZlLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5uZXJSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc29sdmUoaW5uZXJSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXF1ZXN0KFxuICAgIHdvcmtlckluZGV4OiBudW1iZXIsXG4gICAgY2FsbGJhY2s6IFJlbmRlckNhbGxiYWNrLFxuICAgIGltcG9ydGVyOiBTeW5jSW1wb3J0ZXIgfCBBc3luY0ltcG9ydGVyIHwgKFN5bmNJbXBvcnRlciB8IEFzeW5jSW1wb3J0ZXIpW10gfCB1bmRlZmluZWQsXG4gICk6IFJlbmRlclJlcXVlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZENvdW50ZXIrKyxcbiAgICAgIHdvcmtlckluZGV4LFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBpbXBvcnRlcnM6ICFpbXBvcnRlciB8fCBBcnJheS5pc0FycmF5KGltcG9ydGVyKSA/IGltcG9ydGVyIDogW2ltcG9ydGVyXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -5,22 +5,7 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { CompileResult, FileImporter, StringOptionsWithImporter, StringOptionsWithoutImporter } from 'sass';
9
- type FileImporterOptions = Parameters<FileImporter['findFileUrl']>[1];
10
- export interface FileImporterWithRequestContextOptions extends FileImporterOptions {
11
- /**
12
- * This is a custom option and is required as SASS does not provide context from which the file is being resolved.
13
- * This breaks Yarn PNP as transitive deps cannot be resolved from the workspace root.
14
- *
15
- * Workaround until https://github.com/sass/sass/issues/3247 is addressed.
16
- */
17
- previousResolvedModules?: Set<string>;
18
- /**
19
- * The base directory to use when resolving the request.
20
- * This value is only set if using the rebasing importers.
21
- */
22
- resolveDir?: string;
23
- }
8
+ import { CompileResult, StringOptionsWithImporter, StringOptionsWithoutImporter } from 'sass';
24
9
  /**
25
10
  * A Sass renderer implementation that provides an interface that can be used by Webpack's
26
11
  * `sass-loader`. The implementation uses a Worker thread to perform the Sass rendering
@@ -62,4 +47,3 @@ export declare class SassWorkerImplementation {
62
47
  private createRequest;
63
48
  private isImporter;
64
49
  }
65
- export {};
@@ -164,13 +164,12 @@ class SassWorkerImplementation {
164
164
  }
165
165
  this.processImporters(request.importers, url, {
166
166
  ...options,
167
- previousResolvedModules: request.previousResolvedModules,
167
+ // URL is not serializable so in the worker we convert to string and here back to URL.
168
+ containingUrl: options.containingUrl
169
+ ? (0, node_url_1.pathToFileURL)(options.containingUrl)
170
+ : null,
168
171
  })
169
172
  .then((result) => {
170
- if (result) {
171
- request.previousResolvedModules ??= new Set();
172
- request.previousResolvedModules.add((0, node_path_1.dirname)(result));
173
- }
174
173
  mainImporterPort.postMessage(result);
175
174
  })
176
175
  .catch((error) => {
@@ -212,4 +211,3 @@ class SassWorkerImplementation {
212
211
  }
213
212
  }
214
213
  exports.SassWorkerImplementation = SassWorkerImplementation;
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Fzcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdG9vbHMvc2Fzcy9zYXNzLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgseUNBQTBDO0FBQzFDLHVDQUF3RDtBQUN4RCw2REFBNkQ7QUFXN0QseUVBQTZEO0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxnQ0FBVSxDQUFDO0FBNkR0Qzs7Ozs7R0FLRztBQUNILE1BQWEsd0JBQXdCO0lBUWY7SUFQSCxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUNoQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDNUMsVUFBVSxHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDckQsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFNUIsWUFBb0IsU0FBUyxLQUFLO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFHLENBQUM7SUFFdEM7OztPQUdHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUNoQixNQUFjLEVBQ2QsT0FBbUY7UUFFbkYsd0dBQXdHO1FBQ3hHLDZGQUE2RjtRQUM3RixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFOUUsOEZBQThGO1FBQzlGLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDN0Q7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNwRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUMsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO2dCQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGtCQUFrQixFQUFFO29CQUM1QyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDTCxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNyQyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0JBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO3FCQUMxQjtpQkFDRjthQUNGO1lBRUQsTUFBTSxRQUFRLEdBQW1CLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNqRCxJQUFJLEtBQUssRUFBRTtvQkFDVCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQXlCLENBQUM7b0JBQ2xELElBQUksR0FBRyxFQUFFO3dCQUNQLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUEsd0JBQWEsRUFBQyxHQUFHLENBQUMsQ0FBQztxQkFDckM7b0JBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUVkLE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDWCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFFaEMsT0FBTztpQkFDUjtnQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDO1lBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXZDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUNwQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2QsTUFBTTtnQkFDTixXQUFXLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNO2dCQUNoQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU07Z0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxFQUFFO29CQUNQLEdBQUcsbUJBQW1CO29CQUN0QixzRkFBc0Y7b0JBQ3RGLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUEsd0JBQWEsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDMUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pDLElBQUk7Z0JBQ0YsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDekI7WUFBQyxNQUFNLEdBQUU7U0FDWDtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLG9DQUFjLEVBQUUsQ0FBQztRQUNwRixNQUFNLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSw0QkFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDekMsVUFBVSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFO1lBQ2xELFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDO1NBQ25DLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBK0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVoRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQzdDLEtBQUssTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUM3RCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQzNCLEdBQUcsT0FBTzt3QkFDVixJQUFJLEVBQUUsSUFBSSxJQUFJOzRCQUNaLEdBQUcsSUFBSTs0QkFDUCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBQSx3QkFBYSxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUzt5QkFDcEQ7cUJBQ0YsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7WUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO29CQUMxQixHQUFHLFFBQVEsQ0FBQyxNQUFNO29CQUNsQixzRkFBc0Y7b0JBQ3RGLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsd0JBQWEsRUFBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEUsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILGdCQUFnQixDQUFDLEVBQUUsQ0FDakIsU0FBUyxFQUNULENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBNkQsRUFBRSxFQUFFO1lBQ2xGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFO2dCQUN2QixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRWxDLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDNUMsR0FBRyxPQUFPO2dCQUNWLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyx1QkFBdUI7YUFDekQsQ0FBQztpQkFDQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixJQUFJLE1BQU0sRUFBRTtvQkFDVixPQUFPLENBQUMsdUJBQXVCLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDOUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDdEQ7Z0JBRUQsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FDRixDQUFDO1FBRUYsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFekIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDNUIsU0FBOEIsRUFDOUIsR0FBVyxFQUNYLE9BQThDO1FBRTlDLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDN0IsV0FBVztnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7YUFDdkQ7WUFFRCx1Q0FBdUM7WUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4RCxJQUFJLE1BQU0sRUFBRTtnQkFDVixPQUFPLElBQUEsd0JBQWEsRUFBQyxNQUFNLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sYUFBYSxDQUNuQixXQUFtQixFQUNuQixRQUF3QixFQUN4QixNQUEwQixFQUMxQixTQUFrQztRQUVsQyxPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsV0FBVztZQUNYLFFBQVE7WUFDUixNQUFNO1lBQ04sU0FBUztTQUNWLENBQUM7SUFDSixDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWdCO1FBQ2pDLE9BQU8sY0FBYyxJQUFJLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQXJPRCw0REFxT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgTWVzc2FnZUNoYW5uZWwsIFdvcmtlciB9IGZyb20gJ25vZGU6d29ya2VyX3RocmVhZHMnO1xuaW1wb3J0IHtcbiAgQ29tcGlsZVJlc3VsdCxcbiAgRXhjZXB0aW9uLFxuICBGaWxlSW1wb3J0ZXIsXG4gIEltcG9ydGVyLFxuICBMb2dnZXIsXG4gIFNvdXJjZVNwYW4sXG4gIFN0cmluZ09wdGlvbnNXaXRoSW1wb3J0ZXIsXG4gIFN0cmluZ09wdGlvbnNXaXRob3V0SW1wb3J0ZXIsXG59IGZyb20gJ3Nhc3MnO1xuaW1wb3J0IHsgbWF4V29ya2VycyB9IGZyb20gJy4uLy4uL3V0aWxzL2Vudmlyb25tZW50LW9wdGlvbnMnO1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBXb3JrZXJzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIGV4ZWN1dGUgcmVuZGVyIHJlcXVlc3RzLlxuICovXG5jb25zdCBNQVhfUkVOREVSX1dPUktFUlMgPSBtYXhXb3JrZXJzO1xuXG4vKipcbiAqIFRoZSBjYWxsYmFjayB0eXBlIGZvciB0aGUgYGRhcnQtc2Fzc2AgYXN5bmNocm9ub3VzIHJlbmRlciBmdW5jdGlvbi5cbiAqL1xudHlwZSBSZW5kZXJDYWxsYmFjayA9IChlcnJvcj86IEV4Y2VwdGlvbiwgcmVzdWx0PzogQ29tcGlsZVJlc3VsdCkgPT4gdm9pZDtcblxudHlwZSBGaWxlSW1wb3J0ZXJPcHRpb25zID0gUGFyYW1ldGVyczxGaWxlSW1wb3J0ZXJbJ2ZpbmRGaWxlVXJsJ10+WzFdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVJbXBvcnRlcldpdGhSZXF1ZXN0Q29udGV4dE9wdGlvbnMgZXh0ZW5kcyBGaWxlSW1wb3J0ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBjdXN0b20gb3B0aW9uIGFuZCBpcyByZXF1aXJlZCBhcyBTQVNTIGRvZXMgbm90IHByb3ZpZGUgY29udGV4dCBmcm9tIHdoaWNoIHRoZSBmaWxlIGlzIGJlaW5nIHJlc29sdmVkLlxuICAgKiBUaGlzIGJyZWFrcyBZYXJuIFBOUCBhcyB0cmFuc2l0aXZlIGRlcHMgY2Fubm90IGJlIHJlc29sdmVkIGZyb20gdGhlIHdvcmtzcGFjZSByb290LlxuICAgKlxuICAgKiBXb3JrYXJvdW5kIHVudGlsIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNzL3Nhc3MvaXNzdWVzLzMyNDcgaXMgYWRkcmVzc2VkLlxuICAgKi9cbiAgcHJldmlvdXNSZXNvbHZlZE1vZHVsZXM/OiBTZXQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIGJhc2UgZGlyZWN0b3J5IHRvIHVzZSB3aGVuIHJlc29sdmluZyB0aGUgcmVxdWVzdC5cbiAgICogVGhpcyB2YWx1ZSBpcyBvbmx5IHNldCBpZiB1c2luZyB0aGUgcmViYXNpbmcgaW1wb3J0ZXJzLlxuICAgKi9cbiAgcmVzb2x2ZURpcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBmb3IgYSBzcGVjaWZpYyByZW5kZXIgcmVxdWVzdC5cbiAqL1xuaW50ZXJmYWNlIFJlbmRlclJlcXVlc3Qge1xuICBpZDogbnVtYmVyO1xuICB3b3JrZXJJbmRleDogbnVtYmVyO1xuICBjYWxsYmFjazogUmVuZGVyQ2FsbGJhY2s7XG4gIGxvZ2dlcj86IExvZ2dlcjtcbiAgaW1wb3J0ZXJzPzogSW1wb3J0ZXJzW107XG4gIHByZXZpb3VzUmVzb2x2ZWRNb2R1bGVzPzogU2V0PHN0cmluZz47XG59XG5cbi8qKlxuICogQWxsIGF2YWlsYWJsZSBpbXBvcnRlciB0eXBlcy5cbiAqL1xudHlwZSBJbXBvcnRlcnMgPVxuICB8IEltcG9ydGVyPCdzeW5jJz5cbiAgfCBJbXBvcnRlcjwnYXN5bmMnPlxuICB8IEZpbGVJbXBvcnRlcjwnc3luYyc+XG4gIHwgRmlsZUltcG9ydGVyPCdhc3luYyc+O1xuXG4vKipcbiAqIEEgcmVzcG9uc2UgZnJvbSB0aGUgU2FzcyByZW5kZXIgV29ya2VyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLlxuICovXG5pbnRlcmZhY2UgUmVuZGVyUmVzcG9uc2VNZXNzYWdlIHtcbiAgaWQ6IG51bWJlcjtcbiAgZXJyb3I/OiBFeGNlcHRpb247XG4gIHJlc3VsdD86IE9taXQ8Q29tcGlsZVJlc3VsdCwgJ2xvYWRlZFVybHMnPiAmIHsgbG9hZGVkVXJsczogc3RyaW5nW10gfTtcbiAgd2FybmluZ3M/OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGRlcHJlY2F0aW9uOiBib29sZWFuO1xuICAgIHN0YWNrPzogc3RyaW5nO1xuICAgIHNwYW4/OiBPbWl0PFNvdXJjZVNwYW4sICd1cmwnPiAmIHsgdXJsPzogc3RyaW5nIH07XG4gIH1bXTtcbn1cblxuLyoqXG4gKiBBIFNhc3MgcmVuZGVyZXIgaW1wbGVtZW50YXRpb24gdGhhdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCBieSBXZWJwYWNrJ3NcbiAqIGBzYXNzLWxvYWRlcmAuIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgV29ya2VyIHRocmVhZCB0byBwZXJmb3JtIHRoZSBTYXNzIHJlbmRlcmluZ1xuICogd2l0aCB0aGUgYGRhcnQtc2Fzc2AgcGFja2FnZS4gIFRoZSBgZGFydC1zYXNzYCBzeW5jaHJvbm91cyByZW5kZXIgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW5cbiAqIHRoZSB3b3JrZXIgd2hpY2ggY2FuIGJlIHVwIHRvIHR3byB0aW1lcyBmYXN0ZXIgdGhhbiB0aGUgYXN5bmNocm9ub3VzIHZhcmlhbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYXNzV29ya2VySW1wbGVtZW50YXRpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlcnM6IFdvcmtlcltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmxlV29ya2VyczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0cyA9IG5ldyBNYXA8bnVtYmVyLCBSZW5kZXJSZXF1ZXN0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlclBhdGggPSBqb2luKF9fZGlybmFtZSwgJy4vd29ya2VyLmpzJyk7XG4gIHByaXZhdGUgaWRDb3VudGVyID0gMTtcbiAgcHJpdmF0ZSBuZXh0V29ya2VySW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmViYXNlID0gZmFsc2UpIHt9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTYXNzIGltcGxlbWVudGF0aW9uLlxuICAgKiBUaGlzIG1pbWljcyBlbm91Z2ggb2YgdGhlIGBkYXJ0LXNhc3NgIHZhbHVlIHRvIGJlIHVzZWQgd2l0aCB0aGUgYHNhc3MtbG9hZGVyYC5cbiAgICovXG4gIGdldCBpbmZvKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdkYXJ0LXNhc3NcXHR3b3JrZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzeW5jaHJvbm91cyByZW5kZXIgZnVuY3Rpb24gaXMgbm90IHVzZWQgYnkgdGhlIGBzYXNzLWxvYWRlcmAuXG4gICAqL1xuICBjb21waWxlU3RyaW5nKCk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nhc3MgY29tcGlsZVN0cmluZyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jaHJvbm91c2x5IHJlcXVlc3QgYSBTYXNzIHN0eWxlc2hlZXQgdG8gYmUgcmVuZGVyZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgY29udGVudHMgdG8gY29tcGlsZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGBkYXJ0LXNhc3NgIG9wdGlvbnMgdG8gdXNlIHdoZW4gcmVuZGVyaW5nIHRoZSBzdHlsZXNoZWV0LlxuICAgKi9cbiAgY29tcGlsZVN0cmluZ0FzeW5jKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFN0cmluZ09wdGlvbnNXaXRoSW1wb3J0ZXI8J2FzeW5jJz4gfCBTdHJpbmdPcHRpb25zV2l0aG91dEltcG9ydGVyPCdhc3luYyc+LFxuICApOiBQcm9taXNlPENvbXBpbGVSZXN1bHQ+IHtcbiAgICAvLyBUaGUgYGZ1bmN0aW9uc2AsIGBsb2dnZXJgIGFuZCBgaW1wb3J0ZXJgIG9wdGlvbnMgYXJlIEphdmFTY3JpcHQgZnVuY3Rpb25zIHRoYXQgY2Fubm90IGJlIHRyYW5zZmVycmVkLlxuICAgIC8vIElmIGFueSBhZGRpdGlvbmFsIGZ1bmN0aW9uIG9wdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBmdXR1cmUsIHRoZXkgbXVzdCBiZSBleGNsdWRlZCBhcyB3ZWxsLlxuICAgIGNvbnN0IHsgZnVuY3Rpb25zLCBpbXBvcnRlcnMsIHVybCwgbG9nZ2VyLCAuLi5zZXJpYWxpemFibGVPcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gVGhlIENMSSdzIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgdXNlIG9yIGV4cG9zZSB0aGUgYWJpbGl0eSB0byBkZWZpbmVkIGN1c3RvbSBTYXNzIGZ1bmN0aW9uc1xuICAgIGlmIChmdW5jdGlvbnMgJiYgT2JqZWN0LmtleXMoZnVuY3Rpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nhc3MgY3VzdG9tIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q29tcGlsZVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHdvcmtlckluZGV4ID0gdGhpcy5hdmFpbGFibGVXb3JrZXJzLnBvcCgpO1xuICAgICAgaWYgKHdvcmtlckluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMud29ya2Vycy5sZW5ndGggPCBNQVhfUkVOREVSX1dPUktFUlMpIHtcbiAgICAgICAgICB3b3JrZXJJbmRleCA9IHRoaXMud29ya2Vycy5sZW5ndGg7XG4gICAgICAgICAgdGhpcy53b3JrZXJzLnB1c2godGhpcy5jcmVhdGVXb3JrZXIoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd29ya2VySW5kZXggPSB0aGlzLm5leHRXb3JrZXJJbmRleCsrO1xuICAgICAgICAgIGlmICh0aGlzLm5leHRXb3JrZXJJbmRleCA+PSB0aGlzLndvcmtlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRXb3JrZXJJbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrOiBSZW5kZXJDYWxsYmFjayA9IChlcnJvciwgcmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHVybCA9IGVycm9yLnNwYW4/LnVybCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgZXJyb3Iuc3Bhbi51cmwgPSBwYXRoVG9GaWxlVVJMKHVybCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTm8gcmVzdWx0LicpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZVJlcXVlc3Qod29ya2VySW5kZXgsIGNhbGxiYWNrLCBsb2dnZXIsIGltcG9ydGVycyk7XG4gICAgICB0aGlzLnJlcXVlc3RzLnNldChyZXF1ZXN0LmlkLCByZXF1ZXN0KTtcblxuICAgICAgdGhpcy53b3JrZXJzW3dvcmtlckluZGV4XS5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGhhc0ltcG9ydGVyOiAhIWltcG9ydGVycz8ubGVuZ3RoLFxuICAgICAgICBoYXNMb2dnZXI6ICEhbG9nZ2VyLFxuICAgICAgICByZWJhc2U6IHRoaXMucmViYXNlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgLi4uc2VyaWFsaXphYmxlT3B0aW9ucyxcbiAgICAgICAgICAvLyBVUkwgaXMgbm90IHNlcmlhbGl6YWJsZSBzbyB0byBjb252ZXJ0IHRvIHN0cmluZyBoZXJlIGFuZCBiYWNrIHRvIFVSTCBpbiB0aGUgd29ya2VyLlxuICAgICAgICAgIHVybDogdXJsID8gZmlsZVVSTFRvUGF0aCh1cmwpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2h1dGRvd24gdGhlIFNhc3MgcmVuZGVyIHdvcmtlci5cbiAgICogRXhlY3V0aW5nIHRoaXMgbWV0aG9kIHdpbGwgc3RvcCBhbnkgcGVuZGluZyByZW5kZXIgcmVxdWVzdHMuXG4gICAqL1xuICBjbG9zZSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiB0aGlzLndvcmtlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZvaWQgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgICB0aGlzLnJlcXVlc3RzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtlcigpOiBXb3JrZXIge1xuICAgIGNvbnN0IHsgcG9ydDE6IG1haW5JbXBvcnRlclBvcnQsIHBvcnQyOiB3b3JrZXJJbXBvcnRlclBvcnQgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNvbnN0IGltcG9ydGVyU2lnbmFsID0gbmV3IEludDMyQXJyYXkobmV3IFNoYXJlZEFycmF5QnVmZmVyKDQpKTtcblxuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIodGhpcy53b3JrZXJQYXRoLCB7XG4gICAgICB3b3JrZXJEYXRhOiB7IHdvcmtlckltcG9ydGVyUG9ydCwgaW1wb3J0ZXJTaWduYWwgfSxcbiAgICAgIHRyYW5zZmVyTGlzdDogW3dvcmtlckltcG9ydGVyUG9ydF0sXG4gICAgfSk7XG5cbiAgICB3b3JrZXIub24oJ21lc3NhZ2UnLCAocmVzcG9uc2U6IFJlbmRlclJlc3BvbnNlTWVzc2FnZSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHMuZ2V0KHJlc3BvbnNlLmlkKTtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdHMuZGVsZXRlKHJlc3BvbnNlLmlkKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlV29ya2Vycy5wdXNoKHJlcXVlc3Qud29ya2VySW5kZXgpO1xuXG4gICAgICBpZiAocmVzcG9uc2Uud2FybmluZ3MgJiYgcmVxdWVzdC5sb2dnZXI/Lndhcm4pIHtcbiAgICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UsIHNwYW4sIC4uLm9wdGlvbnMgfSBvZiByZXNwb25zZS53YXJuaW5ncykge1xuICAgICAgICAgIHJlcXVlc3QubG9nZ2VyLndhcm4obWVzc2FnZSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHNwYW46IHNwYW4gJiYge1xuICAgICAgICAgICAgICAuLi5zcGFuLFxuICAgICAgICAgICAgICB1cmw6IHNwYW4udXJsID8gcGF0aFRvRmlsZVVSTChzcGFuLnVybCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQpIHtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayh1bmRlZmluZWQsIHtcbiAgICAgICAgICAuLi5yZXNwb25zZS5yZXN1bHQsXG4gICAgICAgICAgLy8gVVJMIGlzIG5vdCBzZXJpYWxpemFibGUgc28gaW4gdGhlIHdvcmtlciB3ZSBjb252ZXJ0IHRvIHN0cmluZyBhbmQgaGVyZSBiYWNrIHRvIFVSTC5cbiAgICAgICAgICBsb2FkZWRVcmxzOiByZXNwb25zZS5yZXN1bHQubG9hZGVkVXJscy5tYXAoKHApID0+IHBhdGhUb0ZpbGVVUkwocCkpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2socmVzcG9uc2UuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbWFpbkltcG9ydGVyUG9ydC5vbihcbiAgICAgICdtZXNzYWdlJyxcbiAgICAgICh7IGlkLCB1cmwsIG9wdGlvbnMgfTogeyBpZDogbnVtYmVyOyB1cmw6IHN0cmluZzsgb3B0aW9uczogRmlsZUltcG9ydGVyT3B0aW9ucyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3RzLmdldChpZCk7XG4gICAgICAgIGlmICghcmVxdWVzdD8uaW1wb3J0ZXJzKSB7XG4gICAgICAgICAgbWFpbkltcG9ydGVyUG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgICBBdG9taWNzLnN0b3JlKGltcG9ydGVyU2lnbmFsLCAwLCAxKTtcbiAgICAgICAgICBBdG9taWNzLm5vdGlmeShpbXBvcnRlclNpZ25hbCwgMCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbXBvcnRlcnMocmVxdWVzdC5pbXBvcnRlcnMsIHVybCwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcHJldmlvdXNSZXNvbHZlZE1vZHVsZXM6IHJlcXVlc3QucHJldmlvdXNSZXNvbHZlZE1vZHVsZXMsXG4gICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICByZXF1ZXN0LnByZXZpb3VzUmVzb2x2ZWRNb2R1bGVzID8/PSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgIHJlcXVlc3QucHJldmlvdXNSZXNvbHZlZE1vZHVsZXMuYWRkKGRpcm5hbWUocmVzdWx0KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1haW5JbXBvcnRlclBvcnQucG9zdE1lc3NhZ2UocmVzdWx0KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIG1haW5JbXBvcnRlclBvcnQucG9zdE1lc3NhZ2UoZXJyb3IpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgQXRvbWljcy5zdG9yZShpbXBvcnRlclNpZ25hbCwgMCwgMSk7XG4gICAgICAgICAgICBBdG9taWNzLm5vdGlmeShpbXBvcnRlclNpZ25hbCwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBtYWluSW1wb3J0ZXJQb3J0LnVucmVmKCk7XG5cbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzSW1wb3J0ZXJzKFxuICAgIGltcG9ydGVyczogSXRlcmFibGU8SW1wb3J0ZXJzPixcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBGaWxlSW1wb3J0ZXJXaXRoUmVxdWVzdENvbnRleHRPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBmb3IgKGNvbnN0IGltcG9ydGVyIG9mIGltcG9ydGVycykge1xuICAgICAgaWYgKHRoaXMuaXNJbXBvcnRlcihpbXBvcnRlcikpIHtcbiAgICAgICAgLy8gSW1wb3J0ZXJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IEZpbGUgSW1wb3J0ZXJzIGFyZSBzdXBwb3J0ZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbGUgaW1wb3J0ZXIgKENhbiBiZSBzeW5jIG9yIGF5bmMpLlxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW1wb3J0ZXIuZmluZEZpbGVVcmwodXJsLCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZpbGVVUkxUb1BhdGgocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVxdWVzdChcbiAgICB3b3JrZXJJbmRleDogbnVtYmVyLFxuICAgIGNhbGxiYWNrOiBSZW5kZXJDYWxsYmFjayxcbiAgICBsb2dnZXI6IExvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICBpbXBvcnRlcnM6IEltcG9ydGVyc1tdIHwgdW5kZWZpbmVkLFxuICApOiBSZW5kZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWRDb3VudGVyKyssXG4gICAgICB3b3JrZXJJbmRleCxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgbG9nZ2VyLFxuICAgICAgaW1wb3J0ZXJzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzSW1wb3J0ZXIodmFsdWU6IEltcG9ydGVycyk6IHZhbHVlIGlzIEltcG9ydGVyIHtcbiAgICByZXR1cm4gJ2Nhbm9uaWNhbGl6ZScgaW4gdmFsdWUgJiYgJ2xvYWQnIGluIHZhbHVlO1xuICB9XG59XG4iXX0=
@@ -41,4 +41,3 @@ worker_threads_1.parentPort.on('message', ({ id, hasImporter, options }) => {
41
41
  worker_threads_1.parentPort?.postMessage({ id, error: { formatted, file, line, column, message, stack } });
42
42
  }
43
43
  });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLWxlZ2FjeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3Rvb2xzL3Nhc3Mvd29ya2VyLWxlZ2FjeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOztBQUVILCtCQUE0RTtBQUM1RSxtREFBMkY7QUFxQjNGLElBQUksQ0FBQywyQkFBVSxJQUFJLENBQUMsMkJBQVUsRUFBRTtJQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7Q0FDOUQ7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxHQUFHLDJCQUc5QyxDQUFDO0FBRUYsMkJBQVUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBd0IsRUFBRSxFQUFFO0lBQzlFLElBQUk7UUFDRixJQUFJLFdBQVcsRUFBRTtZQUNmLG1GQUFtRjtZQUNuRixvREFBb0Q7WUFDcEQsb0ZBQW9GO1lBQ3BGLDJFQUEyRTtZQUMzRSwyRUFBMkU7WUFDM0UsT0FBTyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJO2dCQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFbkMsT0FBTyxJQUFBLHFDQUFvQixFQUFDLGtCQUFrQixDQUFDLEVBQUUsT0FBeUIsQ0FBQztZQUM3RSxDQUFDLENBQUM7U0FDSDtRQUVELDRGQUE0RjtRQUM1RixNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsMkJBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4Qyw4REFBOEQ7S0FDL0Q7SUFBQyxPQUFPLEtBQVUsRUFBRTtRQUNuQiwrRkFBK0Y7UUFDL0YsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2hFLDJCQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzNGO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgSW1wb3J0ZXJSZXN1bHQsIExlZ2FjeU9wdGlvbnMgYXMgT3B0aW9ucywgcmVuZGVyU3luYyB9IGZyb20gJ3Nhc3MnO1xuaW1wb3J0IHsgTWVzc2FnZVBvcnQsIHBhcmVudFBvcnQsIHJlY2VpdmVNZXNzYWdlT25Qb3J0LCB3b3JrZXJEYXRhIH0gZnJvbSAnd29ya2VyX3RocmVhZHMnO1xuXG4vKipcbiAqIEEgcmVxdWVzdCB0byByZW5kZXIgYSBTYXNzIHN0eWxlc2hlZXQgdXNpbmcgdGhlIHN1cHBsaWVkIG9wdGlvbnMuXG4gKi9cbmludGVyZmFjZSBSZW5kZXJSZXF1ZXN0TWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIHJlcXVlc3QgaWRlbnRpZmllciB0aGF0IGxpbmtzIHRoZSByZW5kZXIgYWN0aW9uIHdpdGggYSBjYWxsYmFjayBhbmQgb3B0aW9uYWxcbiAgICogaW1wb3J0ZXIgb24gdGhlIG1haW4gdGhyZWFkLlxuICAgKi9cbiAgaWQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBTYXNzIG9wdGlvbnMgdG8gcHJvdmlkZSB0byB0aGUgYGRhcnQtc2Fzc2AgcmVuZGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgb3B0aW9uczogT3B0aW9uczwnc3luYyc+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSByZXF1ZXN0IGhhcyBhIGN1c3RvbSBpbXBvcnRlciBmdW5jdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuXG4gICAqL1xuICBoYXNJbXBvcnRlcjogYm9vbGVhbjtcbn1cblxuaWYgKCFwYXJlbnRQb3J0IHx8ICF3b3JrZXJEYXRhKSB7XG4gIHRocm93IG5ldyBFcnJvcignU2FzcyB3b3JrZXIgbXVzdCBiZSBleGVjdXRlZCBhcyBhIFdvcmtlci4nKTtcbn1cblxuLy8gVGhlIGltcG9ydGVyIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBwcm94eSBpbXBvcnQgcmVxdWVzdHMgdG8gdGhlIG1haW4gdGhyZWFkXG5jb25zdCB7IHdvcmtlckltcG9ydGVyUG9ydCwgaW1wb3J0ZXJTaWduYWwgfSA9IHdvcmtlckRhdGEgYXMge1xuICB3b3JrZXJJbXBvcnRlclBvcnQ6IE1lc3NhZ2VQb3J0O1xuICBpbXBvcnRlclNpZ25hbDogSW50MzJBcnJheTtcbn07XG5cbnBhcmVudFBvcnQub24oJ21lc3NhZ2UnLCAoeyBpZCwgaGFzSW1wb3J0ZXIsIG9wdGlvbnMgfTogUmVuZGVyUmVxdWVzdE1lc3NhZ2UpID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAoaGFzSW1wb3J0ZXIpIHtcbiAgICAgIC8vIFdoZW4gYSBjdXN0b20gaW1wb3J0ZXIgZnVuY3Rpb24gaXMgcHJlc2VudCwgdGhlIGltcG9ydGVyIHJlcXVlc3QgbXVzdCBiZSBwcm94aWVkXG4gICAgICAvLyBiYWNrIHRvIHRoZSBtYWluIHRocmVhZCB3aGVyZSBpdCBjYW4gYmUgZXhlY3V0ZWQuXG4gICAgICAvLyBUaGlzIHByb2Nlc3MgbXVzdCBiZSBzeW5jaHJvbm91cyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBkYXJ0LXNhc3MuIFRoZSBgQXRvbWljc2BcbiAgICAgIC8vIGZ1bmN0aW9ucyBjb21iaW5lZCB3aXRoIHRoZSBzaGFyZWQgbWVtb3J5IGBpbXBvcnRTaWduYWxgIGFuZCB0aGUgTm9kZS5qc1xuICAgICAgLy8gYHJlY2VpdmVNZXNzYWdlT25Qb3J0YCBmdW5jdGlvbiBhcmUgdXNlZCB0byBlbnN1cmUgc3luY2hyb25vdXMgYmVoYXZpb3IuXG4gICAgICBvcHRpb25zLmltcG9ydGVyID0gZnVuY3Rpb24gKHVybCwgcHJldikge1xuICAgICAgICBBdG9taWNzLnN0b3JlKGltcG9ydGVyU2lnbmFsLCAwLCAwKTtcbiAgICAgICAgY29uc3QgeyBmcm9tSW1wb3J0IH0gPSB0aGlzO1xuICAgICAgICB3b3JrZXJJbXBvcnRlclBvcnQucG9zdE1lc3NhZ2UoeyBpZCwgdXJsLCBwcmV2LCBmcm9tSW1wb3J0IH0pO1xuICAgICAgICBBdG9taWNzLndhaXQoaW1wb3J0ZXJTaWduYWwsIDAsIDApO1xuXG4gICAgICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydCh3b3JrZXJJbXBvcnRlclBvcnQpPy5tZXNzYWdlIGFzIEltcG9ydGVyUmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUaGUgc3luY2hyb25vdXMgU2FzcyByZW5kZXIgZnVuY3Rpb24gY2FuIGJlIHVwIHRvIHR3byB0aW1lcyBmYXN0ZXIgdGhhbiB0aGUgYXN5bmMgdmFyaWFudFxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclN5bmMob3B0aW9ucyk7XG5cbiAgICBwYXJlbnRQb3J0Py5wb3N0TWVzc2FnZSh7IGlkLCByZXN1bHQgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIC8vIE5lZWRlZCBiZWNhdXNlIFY4IHdpbGwgb25seSBzZXJpYWxpemUgdGhlIG1lc3NhZ2UgYW5kIHN0YWNrIHByb3BlcnRpZXMgb2YgYW4gRXJyb3IgaW5zdGFuY2UuXG4gICAgY29uc3QgeyBmb3JtYXR0ZWQsIGZpbGUsIGxpbmUsIGNvbHVtbiwgbWVzc2FnZSwgc3RhY2sgfSA9IGVycm9yO1xuICAgIHBhcmVudFBvcnQ/LnBvc3RNZXNzYWdlKHsgaWQsIGVycm9yOiB7IGZvcm1hdHRlZCwgZmlsZSwgbGluZSwgY29sdW1uLCBtZXNzYWdlLCBzdGFjayB9IH0pO1xuICB9XG59KTtcbiJdfQ==