@angular/compiler-cli 11.1.0-next.5 → 11.1.2

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 (55) hide show
  1. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +2 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +1 -1
  3. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +15 -16
  4. package/ngcc/src/host/umd_host.js +2 -2
  5. package/ngcc/src/packages/build_marker.d.ts +1 -1
  6. package/ngcc/src/packages/build_marker.js +1 -1
  7. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +1 -1
  8. package/ngcc/src/rendering/esm_rendering_formatter.js +2 -2
  9. package/ngcc/src/rendering/source_maps.js +18 -19
  10. package/ngcc/src/writing/new_entry_point_file_writer.d.ts +14 -1
  11. package/ngcc/src/writing/new_entry_point_file_writer.js +43 -7
  12. package/package.json +2 -2
  13. package/src/ngtsc/annotations/src/component.d.ts +48 -3
  14. package/src/ngtsc/annotations/src/component.js +202 -118
  15. package/src/ngtsc/annotations/src/directive.js +13 -2
  16. package/src/ngtsc/core/api/src/public_options.d.ts +2 -2
  17. package/src/ngtsc/core/api/src/public_options.js +1 -1
  18. package/src/ngtsc/core/index.d.ts +1 -1
  19. package/src/ngtsc/core/index.js +5 -5
  20. package/src/ngtsc/core/src/compiler.d.ts +83 -7
  21. package/src/ngtsc/core/src/compiler.js +205 -51
  22. package/src/ngtsc/diagnostics/index.d.ts +1 -1
  23. package/src/ngtsc/diagnostics/index.js +4 -2
  24. package/src/ngtsc/diagnostics/src/error_code.d.ts +6 -1
  25. package/src/ngtsc/diagnostics/src/error_code.js +29 -2
  26. package/src/ngtsc/incremental/src/strategy.d.ts +7 -0
  27. package/src/ngtsc/incremental/src/strategy.js +7 -1
  28. package/src/ngtsc/program.js +47 -19
  29. package/src/ngtsc/resource/src/loader.d.ts +4 -0
  30. package/src/ngtsc/resource/src/loader.js +7 -1
  31. package/src/ngtsc/sourcemaps/index.d.ts +3 -2
  32. package/src/ngtsc/sourcemaps/index.js +12 -3
  33. package/src/ngtsc/sourcemaps/src/content_origin.d.ts +34 -0
  34. package/src/ngtsc/sourcemaps/src/content_origin.js +48 -0
  35. package/src/ngtsc/sourcemaps/src/raw_source_map.d.ts +19 -1
  36. package/src/ngtsc/sourcemaps/src/raw_source_map.js +1 -8
  37. package/src/ngtsc/sourcemaps/src/segment_marker.d.ts +1 -1
  38. package/src/ngtsc/sourcemaps/src/segment_marker.js +1 -1
  39. package/src/ngtsc/sourcemaps/src/source_file.d.ts +5 -9
  40. package/src/ngtsc/sourcemaps/src/source_file.js +3 -6
  41. package/src/ngtsc/sourcemaps/src/source_file_loader.d.ts +34 -14
  42. package/src/ngtsc/sourcemaps/src/source_file_loader.js +72 -19
  43. package/src/ngtsc/transform/src/api.d.ts +5 -0
  44. package/src/ngtsc/transform/src/api.js +1 -1
  45. package/src/ngtsc/transform/src/compilation.d.ts +1 -0
  46. package/src/ngtsc/transform/src/compilation.js +40 -17
  47. package/src/ngtsc/tsc_plugin.js +20 -3
  48. package/src/ngtsc/typecheck/api/checker.d.ts +6 -19
  49. package/src/ngtsc/typecheck/api/checker.js +1 -1
  50. package/src/ngtsc/typecheck/src/checker.d.ts +10 -20
  51. package/src/ngtsc/typecheck/src/checker.js +56 -119
  52. package/src/ngtsc/typecheck/src/context.d.ts +0 -9
  53. package/src/ngtsc/typecheck/src/context.js +1 -7
  54. package/src/transformers/patch_alias_reference_resolution.js +2 -2
  55. package/src/version.js +1 -1
@@ -116,6 +116,12 @@
116
116
  this.cache.set(resolvedUrl, result);
117
117
  return result;
118
118
  };
119
+ /**
120
+ * Invalidate the entire resource cache.
121
+ */
122
+ AdapterResourceLoader.prototype.invalidate = function () {
123
+ this.cache.clear();
124
+ };
119
125
  /**
120
126
  * Attempt to resolve `url` in the context of `fromFile`, while respecting the rootDirs
121
127
  * option from the tsconfig. First, normalize the file name.
@@ -227,4 +233,4 @@
227
233
  };
228
234
  }
229
235
  });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZXNvdXJjZS9zcmMvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFJakMsMkVBQW9FO0lBR3BFLElBQU0sb0JBQW9CLEdBQUcsZ0NBQWdDLENBQUM7SUFFOUQsSUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3hDLElBQU0sa0JBQWtCLEdBQUcsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUVuRDs7T0FFRztJQUNIO1FBT0UsK0JBQW9CLE9BQTBCLEVBQVUsT0FBMkI7WUFBL0QsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7WUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtZQU4zRSxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFDbEMsYUFBUSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1lBQzVDLHlCQUFvQixHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV4RSxlQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBRTZDLENBQUM7UUFFdkY7Ozs7Ozs7Ozs7O1dBV0c7UUFDSCx1Q0FBTyxHQUFQLFVBQVEsR0FBVyxFQUFFLFFBQWdCO1lBQ25DLElBQUksV0FBVyxHQUFnQixJQUFJLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFO2dCQUN2QyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDbEU7aUJBQU07Z0JBQ0wsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxD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QUFNO29CQUNMLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDckM7WUFDSCxDQUFDO1lBQ0QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM5RCxjQUFjLFFBQUUsT0FBTyxDQUFDLGNBQWMsMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNyRCxRQUFRLFFBQUUsT0FBTyxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN6QyxLQUFLLFFBQUUsT0FBTyxDQUFDLEtBQUssMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUNwQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtSZXNvdXJjZUxvYWRlcn0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbnMnO1xuaW1wb3J0IHtOZ0NvbXBpbGVyQWRhcHRlcn0gZnJvbSAnLi4vLi4vY29yZS9hcGknO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgam9pbiwgUGF0aFNlZ21lbnR9IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7UmVxdWlyZWREZWxlZ2F0aW9uc30gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmNvbnN0IENTU19QUkVQUk9DRVNTT1JfRVhUID0gLyhcXC5zY3NzfFxcLnNhc3N8XFwubGVzc3xcXC5zdHlsKSQvO1xuXG5jb25zdCBSRVNPVVJDRV9NQVJLRVIgPSAnLiRuZ3Jlc291cmNlJCc7XG5jb25zdCBSRVNPVVJDRV9NQVJLRVJfVFMgPSBSRVNPVVJDRV9NQVJLRVIgKyAnLnRzJztcblxuLyoqXG4gKiBgUmVzb3VyY2VMb2FkZXJgIHdoaWNoIGRlbGVnYXRlcyB0byBhbiBgTmdDb21waWxlckFkYXB0ZXJgJ3MgcmVzb3VyY2UgbG9hZGluZyBtZXRob2RzLlxuICovXG5leHBvcnQgY2xhc3MgQWRhcHRlclJlc291cmNlTG9hZGVyIGltcGxlbWVudHMgUmVzb3VyY2VMb2FkZXIge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBmZXRjaGluZyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuICBwcml2YXRlIGxvb2t1cFJlc29sdXRpb25Ib3N0ID0gY3JlYXRlTG9va3VwUmVzb2x1dGlvbkhvc3QodGhpcy5hZGFwdGVyKTtcblxuICBjYW5QcmVsb2FkID0gISF0aGlzLmFkYXB0ZXIucmVhZFJlc291cmNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWRhcHRlcjogTmdDb21waWxlckFkYXB0ZXIsIHByaXZhdGUgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zKSB7fVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSB1cmwgb2YgYSByZXNvdXJjZSByZWxhdGl2ZSB0byB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSByZWZlcmVuY2UgdG8gaXQuXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgaW4gdGhlIGBsb2FkKClgIGFuZCBgcHJlbG9hZCgpYCBtZXRob2RzLlxuICAgKlxuICAgKiBVc2VzIHRoZSBwcm92aWRlZCBDb21waWxlckhvc3QgaWYgaXQgc3VwcG9ydHMgbWFwcGluZyByZXNvdXJjZXMgdG8gZmlsZW5hbWVzLlxuICAgKiBPdGhlcndpc2UsIHVzZXMgYSBmYWxsYmFjayBtZWNoYW5pc20gdGhhdCBzZWFyY2hlcyB0aGUgbW9kdWxlIHJlc29sdXRpb24gY2FuZGlkYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHVybCBUaGUsIHBvc3NpYmx5IHJlbGF0aXZlLCB1cmwgb2YgdGhlIHJlc291cmNlLlxuICAgKiBAcGFyYW0gZnJvbUZpbGUgVGhlIHBhdGggdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgVVJMIG9mIHRoZSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgQSByZXNvbHZlZCB1cmwgb2YgcmVzb3VyY2UuXG4gICAqIEB0aHJvd3MgQW4gZXJyb3IgaWYgdGhlIHJlc291cmNlIGNhbm5vdCBiZSByZXNvbHZlZC5cbiAgICovXG4gIHJlc29sdmUodXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXNvbHZlZFVybDogc3RyaW5nfG51bGwgPSBudWxsO1xuICAgIGlmICh0aGlzLmFkYXB0ZXIucmVzb3VyY2VOYW1lVG9GaWxlTmFtZSkge1xuICAgICAgcmVzb2x2ZWRVcmwgPSB0aGlzLmFkYXB0ZXIucmVzb3VyY2VOYW1lVG9GaWxlTmFtZSh1cmwsIGZyb21GaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRVcmwgPSB0aGlzLmZhbGxiYWNrUmVzb2x2ZSh1cmwsIGZyb21GaWxlKTtcbiAgICB9XG4gICAgaWYgKHJlc29sdmVkVXJsID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhvc3RSZXNvdXJjZVJlc29sdmVyOiBjb3VsZCBub3QgcmVzb2x2ZSAke3VybH0gaW4gY29udGV4dCBvZiAke2Zyb21GaWxlfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVkVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZWxvYWQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSwgYXN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIE9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZCwgaXRzIHZhbHVlIGlzIGNhY2hlZCBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgc3luY2hyb25vdXNseSB2aWEgdGhlXG4gICAqIGBsb2FkKClgIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHJlc29sdmVkVXJsIFRoZSB1cmwgKHJlc29sdmVkIGJ5IGEgY2FsbCB0byBgcmVzb2x2ZSgpYCkgb2YgdGhlIHJlc291cmNlIHRvIHByZWxvYWQuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIG9uY2UgdGhlIHJlc291cmNlIGhhcyBiZWVuIGxvYWRlZCBvciBgdW5kZWZpbmVkYCBpZiB0aGVcbiAgICogZmlsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC5cbiAgICogQHRocm93cyBBbiBFcnJvciBpZiBwcmUtbG9hZGluZyBpcyBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJlbG9hZChyZXNvbHZlZFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPnx1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdIb3N0UmVzb3VyY2VMb2FkZXI6IHRoZSBDb21waWxlckhvc3QgcHJvdmlkZWQgZG9lcyBub3Qgc3VwcG9ydCBwcmUtbG9hZGluZyByZXNvdXJjZXMuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZldGNoaW5nLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoaW5nLmdldChyZXNvbHZlZFVybCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZShyZXNvbHZlZFVybCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmNhY2hlLnNldChyZXNvbHZlZFVybCwgcmVzdWx0KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZldGNoQ29tcGxldGlvbiA9IHJlc3VsdC50aGVuKHN0ciA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hpbmcuZGVsZXRlKHJlc29sdmVkVXJsKTtcbiAgICAgICAgdGhpcy5jYWNoZS5zZXQocmVzb2x2ZWRVcmwsIHN0cik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmV0Y2hpbmcuc2V0KHJlc29sdmVkVXJsLCBmZXRjaENvbXBsZXRpb24pO1xuICAgICAgcmV0dXJuIGZldGNoQ29tcGxldGlvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgcmVzb3VyY2UgYXQgdGhlIGdpdmVuIHVybCwgc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGNhY2hlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYHByZWxvYWQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlZFVybCBUaGUgdXJsIChyZXNvbHZlZCBieSBhIGNhbGwgdG8gYHJlc29sdmUoKWApIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICAgKiBAcmV0dXJucyBUaGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgbG9hZChyZXNvbHZlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jYWNoZS5oYXMocmVzb2x2ZWRVcmwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQocmVzb2x2ZWRVcmwpITtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFkYXB0ZXIucmVhZFJlc291cmNlID8gdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZShyZXNvbHZlZFVybCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIucmVhZEZpbGUocmVzb2x2ZWRVcmwpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIb3N0UmVzb3VyY2VMb2FkZXI6IGxvYWRlcigke3Jlc29sdmVkVXJsfSkgcmV0dXJuZWQgYSBQcm9taXNlYCk7XG4gICAgfVxuICAgIHRoaXMuY2FjaGUuc2V0KHJlc29sdmVkVXJsLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byByZXNvbHZlIGB1cmxgIGluIHRoZSBjb250ZXh0IG9mIGBmcm9tRmlsZWAsIHdoaWxlIHJlc3BlY3RpbmcgdGhlIHJvb3REaXJzXG4gICAqIG9wdGlvbiBmcm9tIHRoZSB0c2NvbmZpZy4gRmlyc3QsIG5vcm1hbGl6ZSB0aGUgZmlsZSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFja1Jlc29sdmUodXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gICAgbGV0IGNhbmRpZGF0ZUxvY2F0aW9uczogc3RyaW5nW107XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBub3QgcmVhbGx5IGFuIGFic29sdXRlIHBhdGgsIGJ1dCBpbnN0ZWFkIHRoZSBsZWFkaW5nICcvJyBtZWFucyB0aGF0IGl0J3NcbiAgICAgIC8vIHJvb3RlZCBpbiB0aGUgcHJvamVjdCByb290RGlycy4gU28gbG9vayBmb3IgaXQgYWNjb3JkaW5nIHRvIHRoZSByb290RGlycy5cbiAgICAgIGNhbmRpZGF0ZUxvY2F0aW9ucyA9IHRoaXMuZ2V0Um9vdGVkQ2FuZGlkYXRlTG9jYXRpb25zKHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBhIFwicmVsYXRpdmVcIiBwYXRoIGFuZCBjYW4gYmUgcmVzb2x2ZWQgYXMgc3VjaC4gVG8gbWFrZSB0aGlzIGVhc2llciBvbiB0aGVcbiAgICAgIC8vIGRvd25zdHJlYW0gcmVzb2x2ZXIsIHRoZSAnLi8nIHByZWZpeCBpcyBhZGRlZCBpZiBtaXNzaW5nIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHBhdGhzIGZyb21cbiAgICAgIC8vIGFic29sdXRlIG5vZGVfbW9kdWxlcyBwYXRocy5cbiAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICB1cmwgPSBgLi8ke3VybH1gO1xuICAgICAgfVxuICAgICAgY2FuZGlkYXRlTG9jYXRpb25zID0gdGhpcy5nZXRSZXNvbHZlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmwsIGZyb21GaWxlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVMb2NhdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjYW5kaWRhdGUpKSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICB9IGVsc2UgaWYgKENTU19QUkVQUk9DRVNTT1JfRVhULnRlc3QoY2FuZGlkYXRlKSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHN0eWxlVXJsIHBvaW50cyB0byAqLnNjc3MsIGJ1dCB0aGUgU2FzcyBjb21waWxlciB3YXMgcnVuIGJlZm9yZVxuICAgICAgICAgKiBBbmd1bGFyLCB0aGVuIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGdlbmVyYXRlZCBhcyAqLmNzcy4gU2ltcGx5IHRyeSB0aGUgcmVzb2x1dGlvblxuICAgICAgICAgKiBhZ2Fpbi5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGNzc0ZhbGxiYWNrVXJsID0gY2FuZGlkYXRlLnJlcGxhY2UoQ1NTX1BSRVBST0NFU1NPUl9FWFQsICcuY3NzJyk7XG4gICAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjc3NGYWxsYmFja1VybCkpIHtcbiAgICAgICAgICByZXR1cm4gY3NzRmFsbGJhY2tVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvb3RlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmw6IHN0cmluZyk6IEFic29sdXRlRnNQYXRoW10ge1xuICAgIC8vIFRoZSBwYXRoIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nLCBzbyBhZGQgYSAnLicgdG8gbWFrZSBpdCByZWxhdGl2ZS5cbiAgICBjb25zdCBzZWdtZW50OiBQYXRoU2VnbWVudCA9ICgnLicgKyB1cmwpIGFzIFBhdGhTZWdtZW50O1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucm9vdERpcnMubWFwKHJvb3REaXIgPT4gam9pbihyb290RGlyLCBzZWdtZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBwcm92aWRlcyB1dGlsaXRpZXMgdG8gcmVzb2x2ZSBtb2R1bGUgbmFtZXMsIGJ1dCBub3QgcmVzb3VyY2UgZmlsZXMgKHdoaWNoIGFyZW4ndFxuICAgKiBhIHBhcnQgb2YgdGhlIHRzLlByb2dyYW0pLiBIb3dldmVyLCBUeXBlU2NyaXB0J3MgbW9kdWxlIHJlc29sdXRpb24gY2FuIGJlIHVzZWQgY3JlYXRpdmVseVxuICAgKiB0byBsb2NhdGUgd2hlcmUgcmVzb3VyY2UgZmlsZXMgc2hvdWxkIGJlIGV4cGVjdGVkIHRvIGV4aXN0LiBTaW5jZSBtb2R1bGUgcmVzb2x1dGlvbiByZXR1cm5zXG4gICAqIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHRoYXQgd2VyZSBjb25zaWRlcmVkLCB0aGUgbG9hZGVyIGNhbiBlbnVtZXJhdGUgdGhlIHBvc3NpYmxlIGxvY2F0aW9uc1xuICAgKiBmb3IgdGhlIGZpbGUgYnkgc2V0dGluZyB1cCBhIG1vZHVsZSByZXNvbHV0aW9uIGZvciBpdCB0aGF0IHdpbGwgZmFpbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UmVzb2x2ZWRDYW5kaWRhdGVMb2NhdGlvbnModXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gYGZhaWxlZExvb2t1cExvY2F0aW9uc2AgaXMgaW4gdGhlIG5hbWUgb2YgdGhlIHR5cGUgdHMuUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zXG4gICAgLy8gYnV0IGlzIG1hcmtlZCBAaW50ZXJuYWwgaW4gVHlwZVNjcmlwdC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yODc3MC5cbiAgICB0eXBlIFJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyA9XG4gICAgICAgIHRzLlJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyZ7ZmFpbGVkTG9va3VwTG9jYXRpb25zOiBSZWFkb25seUFycmF5PHN0cmluZz59O1xuXG4gICAgLy8gY2xhbmctZm9ybWF0IG9mZlxuICAgIGNvbnN0IGZhaWxlZExvb2t1cCA9IHRzLnJlc29sdmVNb2R1bGVOYW1lKHVybCArIFJFU09VUkNFX01BUktFUiwgZnJvbUZpbGUsIHRoaXMub3B0aW9ucywgdGhpcy5sb29rdXBSZXNvbHV0aW9uSG9zdCkgYXMgUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zO1xuICAgIC8vIGNsYW5nLWZvcm1hdCBvblxuICAgIGlmIChmYWlsZWRMb29rdXAuZmFpbGVkTG9va3VwTG9jYXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIHRvIGZpbmQgZmFpbGVkTG9va3VwTG9jYXRpb25zIGR1cmluZyByZXNvbHV0aW9uIG9mIHJlc291cmNlICcke1xuICAgICAgICAgICAgICB1cmx9JyBpbiBjb250ZXh0IG9mICR7ZnJvbUZpbGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhaWxlZExvb2t1cC5mYWlsZWRMb29rdXBMb2NhdGlvbnNcbiAgICAgICAgLmZpbHRlcihjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLmVuZHNXaXRoKFJFU09VUkNFX01BUktFUl9UUykpXG4gICAgICAgIC5tYXAoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5zbGljZSgwLCAtUkVTT1VSQ0VfTUFSS0VSX1RTLmxlbmd0aCkpO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIGB0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdGAgZnJvbSBhIGNvbXBpbGVyIGFkYXB0ZXIgdGhhdCByZWNvZ25pemVzIHRoZSBzcGVjaWFsIHJlc291cmNlXG4gKiBtYXJrZXIgYW5kIGRvZXMgbm90IGdvIHRvIHRoZSBmaWxlc3lzdGVtIGZvciB0aGVzZSByZXF1ZXN0cywgYXMgdGhleSBhcmUga25vd24gbm90IHRvIGV4aXN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb29rdXBSZXNvbHV0aW9uSG9zdChhZGFwdGVyOiBOZ0NvbXBpbGVyQWRhcHRlcik6XG4gICAgUmVxdWlyZWREZWxlZ2F0aW9uczx0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdD4ge1xuICByZXR1cm4ge1xuICAgIGRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChkaXJlY3RvcnlOYW1lLmluY2x1ZGVzKFJFU09VUkNFX01BUktFUikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQncyBtb2R1bGUgcmVzb2x1dGlvbiBsb2dpYyBhc3N1bWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMgd2hlbiBubyBob3N0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBmaWxlRXhpc3RzKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhSRVNPVVJDRV9NQVJLRVIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZpbGVFeGlzdHMoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVhZEZpbGU6IGFkYXB0ZXIucmVhZEZpbGUuYmluZChhZGFwdGVyKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiBhZGFwdGVyLmdldEN1cnJlbnREaXJlY3RvcnkuYmluZChhZGFwdGVyKSxcbiAgICBnZXREaXJlY3RvcmllczogYWRhcHRlci5nZXREaXJlY3Rvcmllcz8uYmluZChhZGFwdGVyKSxcbiAgICByZWFscGF0aDogYWRhcHRlci5yZWFscGF0aD8uYmluZChhZGFwdGVyKSxcbiAgICB0cmFjZTogYWRhcHRlci50cmFjZT8uYmluZChhZGFwdGVyKSxcbiAgfTtcbn1cbiJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZXNvdXJjZS9zcmMvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFJakMsMkVBQW9FO0lBR3BFLElBQU0sb0JBQW9CLEdBQUcsZ0NBQWdDLENBQUM7SUFFOUQsSUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3hDLElBQU0sa0JBQWtCLEdBQUcsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUVuRDs7T0FFRztJQUNIO1FBT0UsK0JBQW9CLE9BQTBCLEVBQVUsT0FBMkI7WUFBL0QsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7WUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtZQU4zRSxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFDbEMsYUFBUSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1lBQzVDLHlCQUFvQixHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV4RSxlQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBRTZDLENBQUM7UUFFdkY7Ozs7Ozs7Ozs7O1dBV0c7UUFDSCx1Q0FBTyxHQUFQLFVBQVEsR0FBVyxFQUFFLFFBQWdCO1lBQ25DLElBQUksV0FBVyxHQUFnQixJQUFJLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFO2dCQUN2QyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDbEU7aUJBQU07Z0JBQ0wsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxD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O2dCQUN6QixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7b0JBQ3RDLE9BQU8sS0FBSyxDQUFDO2lCQUNkO3FCQUFNO29CQUNMLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDckM7WUFDSCxDQUFDO1lBQ0QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM5RCxjQUFjLFFBQUUsT0FBTyxDQUFDLGNBQWMsMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNyRCxRQUFRLFFBQUUsT0FBTyxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN6QyxLQUFLLFFBQUUsT0FBTyxDQUFDLEtBQUssMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUNwQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtSZXNvdXJjZUxvYWRlcn0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbnMnO1xuaW1wb3J0IHtOZ0NvbXBpbGVyQWRhcHRlcn0gZnJvbSAnLi4vLi4vY29yZS9hcGknO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgam9pbiwgUGF0aFNlZ21lbnR9IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7UmVxdWlyZWREZWxlZ2F0aW9uc30gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmNvbnN0IENTU19QUkVQUk9DRVNTT1JfRVhUID0gLyhcXC5zY3NzfFxcLnNhc3N8XFwubGVzc3xcXC5zdHlsKSQvO1xuXG5jb25zdCBSRVNPVVJDRV9NQVJLRVIgPSAnLiRuZ3Jlc291cmNlJCc7XG5jb25zdCBSRVNPVVJDRV9NQVJLRVJfVFMgPSBSRVNPVVJDRV9NQVJLRVIgKyAnLnRzJztcblxuLyoqXG4gKiBgUmVzb3VyY2VMb2FkZXJgIHdoaWNoIGRlbGVnYXRlcyB0byBhbiBgTmdDb21waWxlckFkYXB0ZXJgJ3MgcmVzb3VyY2UgbG9hZGluZyBtZXRob2RzLlxuICovXG5leHBvcnQgY2xhc3MgQWRhcHRlclJlc291cmNlTG9hZGVyIGltcGxlbWVudHMgUmVzb3VyY2VMb2FkZXIge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBmZXRjaGluZyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuICBwcml2YXRlIGxvb2t1cFJlc29sdXRpb25Ib3N0ID0gY3JlYXRlTG9va3VwUmVzb2x1dGlvbkhvc3QodGhpcy5hZGFwdGVyKTtcblxuICBjYW5QcmVsb2FkID0gISF0aGlzLmFkYXB0ZXIucmVhZFJlc291cmNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWRhcHRlcjogTmdDb21waWxlckFkYXB0ZXIsIHByaXZhdGUgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zKSB7fVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSB1cmwgb2YgYSByZXNvdXJjZSByZWxhdGl2ZSB0byB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSByZWZlcmVuY2UgdG8gaXQuXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgaW4gdGhlIGBsb2FkKClgIGFuZCBgcHJlbG9hZCgpYCBtZXRob2RzLlxuICAgKlxuICAgKiBVc2VzIHRoZSBwcm92aWRlZCBDb21waWxlckhvc3QgaWYgaXQgc3VwcG9ydHMgbWFwcGluZyByZXNvdXJjZXMgdG8gZmlsZW5hbWVzLlxuICAgKiBPdGhlcndpc2UsIHVzZXMgYSBmYWxsYmFjayBtZWNoYW5pc20gdGhhdCBzZWFyY2hlcyB0aGUgbW9kdWxlIHJlc29sdXRpb24gY2FuZGlkYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHVybCBUaGUsIHBvc3NpYmx5IHJlbGF0aXZlLCB1cmwgb2YgdGhlIHJlc291cmNlLlxuICAgKiBAcGFyYW0gZnJvbUZpbGUgVGhlIHBhdGggdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgVVJMIG9mIHRoZSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgQSByZXNvbHZlZCB1cmwgb2YgcmVzb3VyY2UuXG4gICAqIEB0aHJvd3MgQW4gZXJyb3IgaWYgdGhlIHJlc291cmNlIGNhbm5vdCBiZSByZXNvbHZlZC5cbiAgICovXG4gIHJlc29sdmUodXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXNvbHZlZFVybDogc3RyaW5nfG51bGwgPSBudWxsO1xuICAgIGlmICh0aGlzLmFkYXB0ZXIucmVzb3VyY2VOYW1lVG9GaWxlTmFtZSkge1xuICAgICAgcmVzb2x2ZWRVcmwgPSB0aGlzLmFkYXB0ZXIucmVzb3VyY2VOYW1lVG9GaWxlTmFtZSh1cmwsIGZyb21GaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRVcmwgPSB0aGlzLmZhbGxiYWNrUmVzb2x2ZSh1cmwsIGZyb21GaWxlKTtcbiAgICB9XG4gICAgaWYgKHJlc29sdmVkVXJsID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhvc3RSZXNvdXJjZVJlc29sdmVyOiBjb3VsZCBub3QgcmVzb2x2ZSAke3VybH0gaW4gY29udGV4dCBvZiAke2Zyb21GaWxlfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVkVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZWxvYWQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSwgYXN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIE9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZCwgaXRzIHZhbHVlIGlzIGNhY2hlZCBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgc3luY2hyb25vdXNseSB2aWEgdGhlXG4gICAqIGBsb2FkKClgIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHJlc29sdmVkVXJsIFRoZSB1cmwgKHJlc29sdmVkIGJ5IGEgY2FsbCB0byBgcmVzb2x2ZSgpYCkgb2YgdGhlIHJlc291cmNlIHRvIHByZWxvYWQuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIG9uY2UgdGhlIHJlc291cmNlIGhhcyBiZWVuIGxvYWRlZCBvciBgdW5kZWZpbmVkYCBpZiB0aGVcbiAgICogZmlsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC5cbiAgICogQHRocm93cyBBbiBFcnJvciBpZiBwcmUtbG9hZGluZyBpcyBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJlbG9hZChyZXNvbHZlZFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPnx1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdIb3N0UmVzb3VyY2VMb2FkZXI6IHRoZSBDb21waWxlckhvc3QgcHJvdmlkZWQgZG9lcyBub3Qgc3VwcG9ydCBwcmUtbG9hZGluZyByZXNvdXJjZXMuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZldGNoaW5nLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoaW5nLmdldChyZXNvbHZlZFVybCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZShyZXNvbHZlZFVybCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmNhY2hlLnNldChyZXNvbHZlZFVybCwgcmVzdWx0KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZldGNoQ29tcGxldGlvbiA9IHJlc3VsdC50aGVuKHN0ciA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hpbmcuZGVsZXRlKHJlc29sdmVkVXJsKTtcbiAgICAgICAgdGhpcy5jYWNoZS5zZXQocmVzb2x2ZWRVcmwsIHN0cik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmV0Y2hpbmcuc2V0KHJlc29sdmVkVXJsLCBmZXRjaENvbXBsZXRpb24pO1xuICAgICAgcmV0dXJuIGZldGNoQ29tcGxldGlvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgcmVzb3VyY2UgYXQgdGhlIGdpdmVuIHVybCwgc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGNhY2hlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYHByZWxvYWQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlZFVybCBUaGUgdXJsIChyZXNvbHZlZCBieSBhIGNhbGwgdG8gYHJlc29sdmUoKWApIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICAgKiBAcmV0dXJucyBUaGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgbG9hZChyZXNvbHZlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jYWNoZS5oYXMocmVzb2x2ZWRVcmwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQocmVzb2x2ZWRVcmwpITtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFkYXB0ZXIucmVhZFJlc291cmNlID8gdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZShyZXNvbHZlZFVybCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIucmVhZEZpbGUocmVzb2x2ZWRVcmwpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIb3N0UmVzb3VyY2VMb2FkZXI6IGxvYWRlcigke3Jlc29sdmVkVXJsfSkgcmV0dXJuZWQgYSBQcm9taXNlYCk7XG4gICAgfVxuICAgIHRoaXMuY2FjaGUuc2V0KHJlc29sdmVkVXJsLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogSW52YWxpZGF0ZSB0aGUgZW50aXJlIHJlc291cmNlIGNhY2hlLlxuICAgKi9cbiAgaW52YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byByZXNvbHZlIGB1cmxgIGluIHRoZSBjb250ZXh0IG9mIGBmcm9tRmlsZWAsIHdoaWxlIHJlc3BlY3RpbmcgdGhlIHJvb3REaXJzXG4gICAqIG9wdGlvbiBmcm9tIHRoZSB0c2NvbmZpZy4gRmlyc3QsIG5vcm1hbGl6ZSB0aGUgZmlsZSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFja1Jlc29sdmUodXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gICAgbGV0IGNhbmRpZGF0ZUxvY2F0aW9uczogc3RyaW5nW107XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBub3QgcmVhbGx5IGFuIGFic29sdXRlIHBhdGgsIGJ1dCBpbnN0ZWFkIHRoZSBsZWFkaW5nICcvJyBtZWFucyB0aGF0IGl0J3NcbiAgICAgIC8vIHJvb3RlZCBpbiB0aGUgcHJvamVjdCByb290RGlycy4gU28gbG9vayBmb3IgaXQgYWNjb3JkaW5nIHRvIHRoZSByb290RGlycy5cbiAgICAgIGNhbmRpZGF0ZUxvY2F0aW9ucyA9IHRoaXMuZ2V0Um9vdGVkQ2FuZGlkYXRlTG9jYXRpb25zKHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBhIFwicmVsYXRpdmVcIiBwYXRoIGFuZCBjYW4gYmUgcmVzb2x2ZWQgYXMgc3VjaC4gVG8gbWFrZSB0aGlzIGVhc2llciBvbiB0aGVcbiAgICAgIC8vIGRvd25zdHJlYW0gcmVzb2x2ZXIsIHRoZSAnLi8nIHByZWZpeCBpcyBhZGRlZCBpZiBtaXNzaW5nIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHBhdGhzIGZyb21cbiAgICAgIC8vIGFic29sdXRlIG5vZGVfbW9kdWxlcyBwYXRocy5cbiAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICB1cmwgPSBgLi8ke3VybH1gO1xuICAgICAgfVxuICAgICAgY2FuZGlkYXRlTG9jYXRpb25zID0gdGhpcy5nZXRSZXNvbHZlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmwsIGZyb21GaWxlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVMb2NhdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjYW5kaWRhdGUpKSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICB9IGVsc2UgaWYgKENTU19QUkVQUk9DRVNTT1JfRVhULnRlc3QoY2FuZGlkYXRlKSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHN0eWxlVXJsIHBvaW50cyB0byAqLnNjc3MsIGJ1dCB0aGUgU2FzcyBjb21waWxlciB3YXMgcnVuIGJlZm9yZVxuICAgICAgICAgKiBBbmd1bGFyLCB0aGVuIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGdlbmVyYXRlZCBhcyAqLmNzcy4gU2ltcGx5IHRyeSB0aGUgcmVzb2x1dGlvblxuICAgICAgICAgKiBhZ2Fpbi5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGNzc0ZhbGxiYWNrVXJsID0gY2FuZGlkYXRlLnJlcGxhY2UoQ1NTX1BSRVBST0NFU1NPUl9FWFQsICcuY3NzJyk7XG4gICAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjc3NGYWxsYmFja1VybCkpIHtcbiAgICAgICAgICByZXR1cm4gY3NzRmFsbGJhY2tVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvb3RlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmw6IHN0cmluZyk6IEFic29sdXRlRnNQYXRoW10ge1xuICAgIC8vIFRoZSBwYXRoIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nLCBzbyBhZGQgYSAnLicgdG8gbWFrZSBpdCByZWxhdGl2ZS5cbiAgICBjb25zdCBzZWdtZW50OiBQYXRoU2VnbWVudCA9ICgnLicgKyB1cmwpIGFzIFBhdGhTZWdtZW50O1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucm9vdERpcnMubWFwKHJvb3REaXIgPT4gam9pbihyb290RGlyLCBzZWdtZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBwcm92aWRlcyB1dGlsaXRpZXMgdG8gcmVzb2x2ZSBtb2R1bGUgbmFtZXMsIGJ1dCBub3QgcmVzb3VyY2UgZmlsZXMgKHdoaWNoIGFyZW4ndFxuICAgKiBhIHBhcnQgb2YgdGhlIHRzLlByb2dyYW0pLiBIb3dldmVyLCBUeXBlU2NyaXB0J3MgbW9kdWxlIHJlc29sdXRpb24gY2FuIGJlIHVzZWQgY3JlYXRpdmVseVxuICAgKiB0byBsb2NhdGUgd2hlcmUgcmVzb3VyY2UgZmlsZXMgc2hvdWxkIGJlIGV4cGVjdGVkIHRvIGV4aXN0LiBTaW5jZSBtb2R1bGUgcmVzb2x1dGlvbiByZXR1cm5zXG4gICAqIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHRoYXQgd2VyZSBjb25zaWRlcmVkLCB0aGUgbG9hZGVyIGNhbiBlbnVtZXJhdGUgdGhlIHBvc3NpYmxlIGxvY2F0aW9uc1xuICAgKiBmb3IgdGhlIGZpbGUgYnkgc2V0dGluZyB1cCBhIG1vZHVsZSByZXNvbHV0aW9uIGZvciBpdCB0aGF0IHdpbGwgZmFpbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UmVzb2x2ZWRDYW5kaWRhdGVMb2NhdGlvbnModXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gYGZhaWxlZExvb2t1cExvY2F0aW9uc2AgaXMgaW4gdGhlIG5hbWUgb2YgdGhlIHR5cGUgdHMuUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zXG4gICAgLy8gYnV0IGlzIG1hcmtlZCBAaW50ZXJuYWwgaW4gVHlwZVNjcmlwdC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yODc3MC5cbiAgICB0eXBlIFJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyA9XG4gICAgICAgIHRzLlJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyZ7ZmFpbGVkTG9va3VwTG9jYXRpb25zOiBSZWFkb25seUFycmF5PHN0cmluZz59O1xuXG4gICAgLy8gY2xhbmctZm9ybWF0IG9mZlxuICAgIGNvbnN0IGZhaWxlZExvb2t1cCA9IHRzLnJlc29sdmVNb2R1bGVOYW1lKHVybCArIFJFU09VUkNFX01BUktFUiwgZnJvbUZpbGUsIHRoaXMub3B0aW9ucywgdGhpcy5sb29rdXBSZXNvbHV0aW9uSG9zdCkgYXMgUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zO1xuICAgIC8vIGNsYW5nLWZvcm1hdCBvblxuICAgIGlmIChmYWlsZWRMb29rdXAuZmFpbGVkTG9va3VwTG9jYXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIHRvIGZpbmQgZmFpbGVkTG9va3VwTG9jYXRpb25zIGR1cmluZyByZXNvbHV0aW9uIG9mIHJlc291cmNlICcke1xuICAgICAgICAgICAgICB1cmx9JyBpbiBjb250ZXh0IG9mICR7ZnJvbUZpbGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhaWxlZExvb2t1cC5mYWlsZWRMb29rdXBMb2NhdGlvbnNcbiAgICAgICAgLmZpbHRlcihjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLmVuZHNXaXRoKFJFU09VUkNFX01BUktFUl9UUykpXG4gICAgICAgIC5tYXAoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5zbGljZSgwLCAtUkVTT1VSQ0VfTUFSS0VSX1RTLmxlbmd0aCkpO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIGB0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdGAgZnJvbSBhIGNvbXBpbGVyIGFkYXB0ZXIgdGhhdCByZWNvZ25pemVzIHRoZSBzcGVjaWFsIHJlc291cmNlXG4gKiBtYXJrZXIgYW5kIGRvZXMgbm90IGdvIHRvIHRoZSBmaWxlc3lzdGVtIGZvciB0aGVzZSByZXF1ZXN0cywgYXMgdGhleSBhcmUga25vd24gbm90IHRvIGV4aXN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb29rdXBSZXNvbHV0aW9uSG9zdChhZGFwdGVyOiBOZ0NvbXBpbGVyQWRhcHRlcik6XG4gICAgUmVxdWlyZWREZWxlZ2F0aW9uczx0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdD4ge1xuICByZXR1cm4ge1xuICAgIGRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChkaXJlY3RvcnlOYW1lLmluY2x1ZGVzKFJFU09VUkNFX01BUktFUikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQncyBtb2R1bGUgcmVzb2x1dGlvbiBsb2dpYyBhc3N1bWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMgd2hlbiBubyBob3N0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBmaWxlRXhpc3RzKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhSRVNPVVJDRV9NQVJLRVIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZpbGVFeGlzdHMoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVhZEZpbGU6IGFkYXB0ZXIucmVhZEZpbGUuYmluZChhZGFwdGVyKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiBhZGFwdGVyLmdldEN1cnJlbnREaXJlY3RvcnkuYmluZChhZGFwdGVyKSxcbiAgICBnZXREaXJlY3RvcmllczogYWRhcHRlci5nZXREaXJlY3Rvcmllcz8uYmluZChhZGFwdGVyKSxcbiAgICByZWFscGF0aDogYWRhcHRlci5yZWFscGF0aD8uYmluZChhZGFwdGVyKSxcbiAgICB0cmFjZTogYWRhcHRlci50cmFjZT8uYmluZChhZGFwdGVyKSxcbiAgfTtcbn1cbiJdfQ==
@@ -6,6 +6,7 @@
6
6
  * Use of this source code is governed by an MIT-style license that can be
7
7
  * found in the LICENSE file at https://angular.io/license
8
8
  */
9
- export { RawSourceMap } from './src/raw_source_map';
9
+ export { ContentOrigin } from './src/content_origin';
10
+ export { MapAndPath, RawSourceMap } from './src/raw_source_map';
10
11
  export { Mapping, SourceFile } from './src/source_file';
11
- export { MapAndPath, SourceFileLoader } from './src/source_file_loader';
12
+ export { SourceFileLoader } from './src/source_file_loader';
@@ -4,15 +4,24 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define("@angular/compiler-cli/src/ngtsc/sourcemaps", ["require", "exports", "@angular/compiler-cli/src/ngtsc/sourcemaps/src/source_file", "@angular/compiler-cli/src/ngtsc/sourcemaps/src/source_file_loader"], factory);
7
+ define("@angular/compiler-cli/src/ngtsc/sourcemaps", ["require", "exports", "@angular/compiler-cli/src/ngtsc/sourcemaps/src/content_origin", "@angular/compiler-cli/src/ngtsc/sourcemaps/src/source_file", "@angular/compiler-cli/src/ngtsc/sourcemaps/src/source_file_loader"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SourceFileLoader = exports.SourceFile = void 0;
12
+ exports.SourceFileLoader = exports.SourceFile = exports.ContentOrigin = void 0;
13
+ /**
14
+ * @license
15
+ * Copyright Google LLC All Rights Reserved.
16
+ *
17
+ * Use of this source code is governed by an MIT-style license that can be
18
+ * found in the LICENSE file at https://angular.io/license
19
+ */
20
+ var content_origin_1 = require("@angular/compiler-cli/src/ngtsc/sourcemaps/src/content_origin");
21
+ Object.defineProperty(exports, "ContentOrigin", { enumerable: true, get: function () { return content_origin_1.ContentOrigin; } });
13
22
  var source_file_1 = require("@angular/compiler-cli/src/ngtsc/sourcemaps/src/source_file");
14
23
  Object.defineProperty(exports, "SourceFile", { enumerable: true, get: function () { return source_file_1.SourceFile; } });
15
24
  var source_file_loader_1 = require("@angular/compiler-cli/src/ngtsc/sourcemaps/src/source_file_loader");
16
25
  Object.defineProperty(exports, "SourceFileLoader", { enumerable: true, get: function () { return source_file_loader_1.SourceFileLoader; } });
17
26
  });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBUUEsMEZBQXNEO0lBQXJDLHlHQUFBLFVBQVUsT0FBQTtJQUMzQix3R0FBc0U7SUFBbEQsc0hBQUEsZ0JBQWdCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmV4cG9ydCB7UmF3U291cmNlTWFwfSBmcm9tICcuL3NyYy9yYXdfc291cmNlX21hcCc7XG5leHBvcnQge01hcHBpbmcsIFNvdXJjZUZpbGV9IGZyb20gJy4vc3JjL3NvdXJjZV9maWxlJztcbmV4cG9ydCB7TWFwQW5kUGF0aCwgU291cmNlRmlsZUxvYWRlcn0gZnJvbSAnLi9zcmMvc291cmNlX2ZpbGVfbG9hZGVyJztcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsZ0dBQW1EO0lBQTNDLCtHQUFBLGFBQWEsT0FBQTtJQUVyQiwwRkFBc0Q7SUFBckMseUdBQUEsVUFBVSxPQUFBO0lBQzNCLHdHQUEwRDtJQUFsRCxzSEFBQSxnQkFBZ0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuZXhwb3J0IHtDb250ZW50T3JpZ2lufSBmcm9tICcuL3NyYy9jb250ZW50X29yaWdpbic7XG5leHBvcnQge01hcEFuZFBhdGgsIFJhd1NvdXJjZU1hcH0gZnJvbSAnLi9zcmMvcmF3X3NvdXJjZV9tYXAnO1xuZXhwb3J0IHtNYXBwaW5nLCBTb3VyY2VGaWxlfSBmcm9tICcuL3NyYy9zb3VyY2VfZmlsZSc7XG5leHBvcnQge1NvdXJjZUZpbGVMb2FkZXJ9IGZyb20gJy4vc3JjL3NvdXJjZV9maWxlX2xvYWRlcic7XG4iXX0=
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/sourcemaps/src/content_origin" />
9
+ /**
10
+ * From where the content for a source file or source-map came.
11
+ *
12
+ * - Source files can be linked to source-maps by:
13
+ * - providing the content inline via a base64 encoded data comment,
14
+ * - providing a URL to the file path in a comment,
15
+ * - the loader inferring the source-map path from the source file path.
16
+ * - Source-maps can link to source files by:
17
+ * - providing the content inline in the `sourcesContent` property
18
+ * - providing the path to the file in the `sources` property
19
+ */
20
+ export declare enum ContentOrigin {
21
+ /**
22
+ * The contents were provided programmatically when calling `loadSourceFile()`.
23
+ */
24
+ Provided = 0,
25
+ /**
26
+ * The contents were extracted directly form the contents of the referring file.
27
+ */
28
+ Inline = 1,
29
+ /**
30
+ * The contents were loaded from the file-system, after being explicitly referenced or inferred
31
+ * from the referring file.
32
+ */
33
+ FileSystem = 2
34
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ (function (factory) {
9
+ if (typeof module === "object" && typeof module.exports === "object") {
10
+ var v = factory(require, exports);
11
+ if (v !== undefined) module.exports = v;
12
+ }
13
+ else if (typeof define === "function" && define.amd) {
14
+ define("@angular/compiler-cli/src/ngtsc/sourcemaps/src/content_origin", ["require", "exports"], factory);
15
+ }
16
+ })(function (require, exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.ContentOrigin = void 0;
20
+ /**
21
+ * From where the content for a source file or source-map came.
22
+ *
23
+ * - Source files can be linked to source-maps by:
24
+ * - providing the content inline via a base64 encoded data comment,
25
+ * - providing a URL to the file path in a comment,
26
+ * - the loader inferring the source-map path from the source file path.
27
+ * - Source-maps can link to source files by:
28
+ * - providing the content inline in the `sourcesContent` property
29
+ * - providing the path to the file in the `sources` property
30
+ */
31
+ var ContentOrigin;
32
+ (function (ContentOrigin) {
33
+ /**
34
+ * The contents were provided programmatically when calling `loadSourceFile()`.
35
+ */
36
+ ContentOrigin[ContentOrigin["Provided"] = 0] = "Provided";
37
+ /**
38
+ * The contents were extracted directly form the contents of the referring file.
39
+ */
40
+ ContentOrigin[ContentOrigin["Inline"] = 1] = "Inline";
41
+ /**
42
+ * The contents were loaded from the file-system, after being explicitly referenced or inferred
43
+ * from the referring file.
44
+ */
45
+ ContentOrigin[ContentOrigin["FileSystem"] = 2] = "FileSystem";
46
+ })(ContentOrigin = exports.ContentOrigin || (exports.ContentOrigin = {}));
47
+ });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudF9vcmlnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvc3JjL2NvbnRlbnRfb3JpZ2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUFZLGFBY1g7SUFkRCxXQUFZLGFBQWE7UUFDdkI7O1dBRUc7UUFDSCx5REFBUSxDQUFBO1FBQ1I7O1dBRUc7UUFDSCxxREFBTSxDQUFBO1FBQ047OztXQUdHO1FBQ0gsNkRBQVUsQ0FBQTtJQUNaLENBQUMsRUFkVyxhQUFhLEdBQWIscUJBQWEsS0FBYixxQkFBYSxRQWN4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEZyb20gd2hlcmUgdGhlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUgb3Igc291cmNlLW1hcCBjYW1lLlxuICpcbiAqIC0gU291cmNlIGZpbGVzIGNhbiBiZSBsaW5rZWQgdG8gc291cmNlLW1hcHMgYnk6XG4gKiAgIC0gcHJvdmlkaW5nIHRoZSBjb250ZW50IGlubGluZSB2aWEgYSBiYXNlNjQgZW5jb2RlZCBkYXRhIGNvbW1lbnQsXG4gKiAgIC0gcHJvdmlkaW5nIGEgVVJMIHRvIHRoZSBmaWxlIHBhdGggaW4gYSBjb21tZW50LFxuICogICAtIHRoZSBsb2FkZXIgaW5mZXJyaW5nIHRoZSBzb3VyY2UtbWFwIHBhdGggZnJvbSB0aGUgc291cmNlIGZpbGUgcGF0aC5cbiAqIC0gU291cmNlLW1hcHMgY2FuIGxpbmsgdG8gc291cmNlIGZpbGVzIGJ5OlxuICogICAtIHByb3ZpZGluZyB0aGUgY29udGVudCBpbmxpbmUgaW4gdGhlIGBzb3VyY2VzQ29udGVudGAgcHJvcGVydHlcbiAqICAgLSBwcm92aWRpbmcgdGhlIHBhdGggdG8gdGhlIGZpbGUgaW4gdGhlIGBzb3VyY2VzYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZW51bSBDb250ZW50T3JpZ2luIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyB3ZXJlIHByb3ZpZGVkIHByb2dyYW1tYXRpY2FsbHkgd2hlbiBjYWxsaW5nIGBsb2FkU291cmNlRmlsZSgpYC5cbiAgICovXG4gIFByb3ZpZGVkLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIHdlcmUgZXh0cmFjdGVkIGRpcmVjdGx5IGZvcm0gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWZlcnJpbmcgZmlsZS5cbiAgICovXG4gIElubGluZSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyB3ZXJlIGxvYWRlZCBmcm9tIHRoZSBmaWxlLXN5c3RlbSwgYWZ0ZXIgYmVpbmcgZXhwbGljaXRseSByZWZlcmVuY2VkIG9yIGluZmVycmVkXG4gICAqIGZyb20gdGhlIHJlZmVycmluZyBmaWxlLlxuICAgKi9cbiAgRmlsZVN5c3RlbSxcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/sourcemaps/src/raw_source_map" />
1
2
  /**
2
3
  * @license
3
4
  * Copyright Google LLC All Rights Reserved.
@@ -5,7 +6,8 @@
5
6
  * Use of this source code is governed by an MIT-style license that can be
6
7
  * found in the LICENSE file at https://angular.io/license
7
8
  */
8
- /// <amd-module name="@angular/compiler-cli/src/ngtsc/sourcemaps/src/raw_source_map" />
9
+ import { AbsoluteFsPath } from '../../file_system';
10
+ import { ContentOrigin } from './content_origin';
9
11
  /**
10
12
  * This interface is the basic structure of the JSON in a raw source map that one might load from
11
13
  * disk.
@@ -19,3 +21,19 @@ export interface RawSourceMap {
19
21
  sourcesContent?: (string | null)[];
20
22
  mappings: string;
21
23
  }
24
+ /**
25
+ * The path and content of a source-map.
26
+ */
27
+ export interface MapAndPath {
28
+ /** The path to the source map if it was external or `null` if it was inline. */
29
+ mapPath: AbsoluteFsPath | null;
30
+ /** The raw source map itself. */
31
+ map: RawSourceMap;
32
+ }
33
+ /**
34
+ * Information about a loaded source-map.
35
+ */
36
+ export interface SourceMapInfo extends MapAndPath {
37
+ /** From where the content for this source-map came. */
38
+ origin: ContentOrigin;
39
+ }
@@ -1,10 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
1
  (function (factory) {
9
2
  if (typeof module === "object" && typeof module.exports === "object") {
10
3
  var v = factory(require, exports);
@@ -17,4 +10,4 @@
17
10
  "use strict";
18
11
  Object.defineProperty(exports, "__esModule", { value: true });
19
12
  });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3X3NvdXJjZV9tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvc3JjL3Jhd19zb3VyY2VfbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIGlzIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgdGhlIEpTT04gaW4gYSByYXcgc291cmNlIG1hcCB0aGF0IG9uZSBtaWdodCBsb2FkIGZyb21cbiAqIGRpc2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3U291cmNlTWFwIHtcbiAgdmVyc2lvbjogbnVtYmVyfHN0cmluZztcbiAgZmlsZT86IHN0cmluZztcbiAgc291cmNlUm9vdD86IHN0cmluZztcbiAgc291cmNlczogc3RyaW5nW107XG4gIG5hbWVzOiBzdHJpbmdbXTtcbiAgc291cmNlc0NvbnRlbnQ/OiAoc3RyaW5nfG51bGwpW107XG4gIG1hcHBpbmdzOiBzdHJpbmc7XG59XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3X3NvdXJjZV9tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvc3JjL3Jhd19zb3VyY2VfbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGh9IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7Q29udGVudE9yaWdpbn0gZnJvbSAnLi9jb250ZW50X29yaWdpbic7XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiB0aGUgSlNPTiBpbiBhIHJhdyBzb3VyY2UgbWFwIHRoYXQgb25lIG1pZ2h0IGxvYWQgZnJvbVxuICogZGlzay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXdTb3VyY2VNYXAge1xuICB2ZXJzaW9uOiBudW1iZXJ8c3RyaW5nO1xuICBmaWxlPzogc3RyaW5nO1xuICBzb3VyY2VSb290Pzogc3RyaW5nO1xuICBzb3VyY2VzOiBzdHJpbmdbXTtcbiAgbmFtZXM6IHN0cmluZ1tdO1xuICBzb3VyY2VzQ29udGVudD86IChzdHJpbmd8bnVsbClbXTtcbiAgbWFwcGluZ3M6IHN0cmluZztcbn1cblxuXG4vKipcbiAqIFRoZSBwYXRoIGFuZCBjb250ZW50IG9mIGEgc291cmNlLW1hcC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXBBbmRQYXRoIHtcbiAgLyoqIFRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgbWFwIGlmIGl0IHdhcyBleHRlcm5hbCBvciBgbnVsbGAgaWYgaXQgd2FzIGlubGluZS4gKi9cbiAgbWFwUGF0aDogQWJzb2x1dGVGc1BhdGh8bnVsbDtcbiAgLyoqIFRoZSByYXcgc291cmNlIG1hcCBpdHNlbGYuICovXG4gIG1hcDogUmF3U291cmNlTWFwO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGEgbG9hZGVkIHNvdXJjZS1tYXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlTWFwSW5mbyBleHRlbmRzIE1hcEFuZFBhdGgge1xuICAvKiogRnJvbSB3aGVyZSB0aGUgY29udGVudCBmb3IgdGhpcyBzb3VyY2UtbWFwIGNhbWUuICovXG4gIG9yaWdpbjogQ29udGVudE9yaWdpbjtcbn1cbiJdfQ==
@@ -9,7 +9,7 @@
9
9
  /**
10
10
  * A marker that indicates the start of a segment in a mapping.
11
11
  *
12
- * The end of a segment is indicated by the the first segment-marker of another mapping whose start
12
+ * The end of a segment is indicated by the first segment-marker of another mapping whose start
13
13
  * is greater or equal to this one.
14
14
  */
15
15
  export interface SegmentMarker {
@@ -52,4 +52,4 @@
52
52
  }
53
53
  exports.offsetSegment = offsetSegment;
54
54
  });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudF9tYXJrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvc3JjL3NlZ21lbnRfbWFya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQWdCSDs7Ozs7T0FLRztJQUNILFNBQWdCLGVBQWUsQ0FBQyxDQUFnQixFQUFFLENBQWdCO1FBQ2hFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFGRCwwQ0FFQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxTQUFnQixhQUFhLENBQ3pCLG9CQUE4QixFQUFFLE1BQXFCLEVBQUUsTUFBYztRQUN2RSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEIsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFDMUMsT0FBTyxJQUFJLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFO1lBQzNGLElBQUksRUFBRSxDQUFDO1NBQ1I7UUFDRCxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFO1lBQ3hELElBQUksRUFBRSxDQUFDO1NBQ1I7UUFDRCxJQUFNLE1BQU0sR0FBRyxRQUFRLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxFQUFDLElBQUksTUFBQSxFQUFFLE1BQU0sUUFBQSxFQUFFLFFBQVEsVUFBQSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQztJQUNuRCxDQUFDO0lBaEJELHNDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5cbi8qKlxuICogQSBtYXJrZXIgdGhhdCBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgc2VnbWVudCBpbiBhIG1hcHBpbmcuXG4gKlxuICogVGhlIGVuZCBvZiBhIHNlZ21lbnQgaXMgaW5kaWNhdGVkIGJ5IHRoZSB0aGUgZmlyc3Qgc2VnbWVudC1tYXJrZXIgb2YgYW5vdGhlciBtYXBwaW5nIHdob3NlIHN0YXJ0XG4gKiBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoaXMgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlZ21lbnRNYXJrZXIge1xuICByZWFkb25seSBsaW5lOiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbHVtbjogbnVtYmVyO1xuICByZWFkb25seSBwb3NpdGlvbjogbnVtYmVyO1xuICBuZXh0OiBTZWdtZW50TWFya2VyfHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wYXJlIHR3byBzZWdtZW50LW1hcmtlcnMsIGZvciB1c2UgaW4gYSBzZWFyY2ggb3Igc29ydGluZyBhbGdvcml0aG0uXG4gKlxuICogQHJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIgaWYgYGFgIGlzIGFmdGVyIGBiYCwgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYGJgIGlzIGFmdGVyIGBhYFxuICogYW5kIHplcm8gaWYgdGhleSBhcmUgYXQgdGhlIHNhbWUgcG9zaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlU2VnbWVudHMoYTogU2VnbWVudE1hcmtlciwgYjogU2VnbWVudE1hcmtlcik6IG51bWJlciB7XG4gIHJldHVybiBhLnBvc2l0aW9uIC0gYi5wb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBuZXcgc2VnbWVudC1tYXJrZXIgdGhhdCBpcyBvZmZzZXQgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSBzdGFydE9mTGluZVBvc2l0aW9ucyB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIGVhY2ggbGluZSBvZiBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICogd2hvc2Ugc2VnbWVudC1tYXJrZXIgd2UgYXJlIG9mZnNldHRpbmcuXG4gKiBAcGFyYW0gbWFya2VyIHRoZSBzZWdtZW50IHRvIG9mZnNldC5cbiAqIEBwYXJhbSBvZmZzZXQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXIgdG8gb2Zmc2V0IGJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2Zmc2V0U2VnbWVudChcbiAgICBzdGFydE9mTGluZVBvc2l0aW9uczogbnVtYmVyW10sIG1hcmtlcjogU2VnbWVudE1hcmtlciwgb2Zmc2V0OiBudW1iZXIpOiBTZWdtZW50TWFya2VyIHtcbiAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgIHJldHVybiBtYXJrZXI7XG4gIH1cblxuICBsZXQgbGluZSA9IG1hcmtlci5saW5lO1xuICBjb25zdCBwb3NpdGlvbiA9IG1hcmtlci5wb3NpdGlvbiArIG9mZnNldDtcbiAgd2hpbGUgKGxpbmUgPCBzdGFydE9mTGluZVBvc2l0aW9ucy5sZW5ndGggLSAxICYmIHN0YXJ0T2ZMaW5lUG9zaXRpb25zW2xpbmUgKyAxXSA8PSBwb3NpdGlvbikge1xuICAgIGxpbmUrKztcbiAgfVxuICB3aGlsZSAobGluZSA+IDAgJiYgc3RhcnRPZkxpbmVQb3NpdGlvbnNbbGluZV0gPiBwb3NpdGlvbikge1xuICAgIGxpbmUtLTtcbiAgfVxuICBjb25zdCBjb2x1bW4gPSBwb3NpdGlvbiAtIHN0YXJ0T2ZMaW5lUG9zaXRpb25zW2xpbmVdO1xuICByZXR1cm4ge2xpbmUsIGNvbHVtbiwgcG9zaXRpb24sIG5leHQ6IHVuZGVmaW5lZH07XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudF9tYXJrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvc3JjL3NlZ21lbnRfbWFya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQWdCSDs7Ozs7T0FLRztJQUNILFNBQWdCLGVBQWUsQ0FBQyxDQUFnQixFQUFFLENBQWdCO1FBQ2hFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFGRCwwQ0FFQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxTQUFnQixhQUFhLENBQ3pCLG9CQUE4QixFQUFFLE1BQXFCLEVBQUUsTUFBYztRQUN2RSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEIsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFDMUMsT0FBTyxJQUFJLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFO1lBQzNGLElBQUksRUFBRSxDQUFDO1NBQ1I7UUFDRCxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFO1lBQ3hELElBQUksRUFBRSxDQUFDO1NBQ1I7UUFDRCxJQUFNLE1BQU0sR0FBRyxRQUFRLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxFQUFDLElBQUksTUFBQSxFQUFFLE1BQU0sUUFBQSxFQUFFLFFBQVEsVUFBQSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQztJQUNuRCxDQUFDO0lBaEJELHNDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5cbi8qKlxuICogQSBtYXJrZXIgdGhhdCBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgc2VnbWVudCBpbiBhIG1hcHBpbmcuXG4gKlxuICogVGhlIGVuZCBvZiBhIHNlZ21lbnQgaXMgaW5kaWNhdGVkIGJ5IHRoZSBmaXJzdCBzZWdtZW50LW1hcmtlciBvZiBhbm90aGVyIG1hcHBpbmcgd2hvc2Ugc3RhcnRcbiAqIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhpcyBvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VnbWVudE1hcmtlciB7XG4gIHJlYWRvbmx5IGxpbmU6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29sdW1uOiBudW1iZXI7XG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBudW1iZXI7XG4gIG5leHQ6IFNlZ21lbnRNYXJrZXJ8dW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbXBhcmUgdHdvIHNlZ21lbnQtbWFya2VycywgZm9yIHVzZSBpbiBhIHNlYXJjaCBvciBzb3J0aW5nIGFsZ29yaXRobS5cbiAqXG4gKiBAcmV0dXJucyBhIHBvc2l0aXZlIG51bWJlciBpZiBgYWAgaXMgYWZ0ZXIgYGJgLCBhIG5lZ2F0aXZlIG51bWJlciBpZiBgYmAgaXMgYWZ0ZXIgYGFgXG4gKiBhbmQgemVybyBpZiB0aGV5IGFyZSBhdCB0aGUgc2FtZSBwb3NpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVTZWdtZW50cyhhOiBTZWdtZW50TWFya2VyLCBiOiBTZWdtZW50TWFya2VyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEucG9zaXRpb24gLSBiLnBvc2l0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybiBhIG5ldyBzZWdtZW50LW1hcmtlciB0aGF0IGlzIG9mZnNldCBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHN0YXJ0T2ZMaW5lUG9zaXRpb25zIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lIG9mIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlXG4gKiB3aG9zZSBzZWdtZW50LW1hcmtlciB3ZSBhcmUgb2Zmc2V0dGluZy5cbiAqIEBwYXJhbSBtYXJrZXIgdGhlIHNlZ21lbnQgdG8gb2Zmc2V0LlxuICogQHBhcmFtIG9mZnNldCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlciB0byBvZmZzZXQgYnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZmZzZXRTZWdtZW50KFxuICAgIHN0YXJ0T2ZMaW5lUG9zaXRpb25zOiBudW1iZXJbXSwgbWFya2VyOiBTZWdtZW50TWFya2VyLCBvZmZzZXQ6IG51bWJlcik6IFNlZ21lbnRNYXJrZXIge1xuICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgcmV0dXJuIG1hcmtlcjtcbiAgfVxuXG4gIGxldCBsaW5lID0gbWFya2VyLmxpbmU7XG4gIGNvbnN0IHBvc2l0aW9uID0gbWFya2VyLnBvc2l0aW9uICsgb2Zmc2V0O1xuICB3aGlsZSAobGluZSA8IHN0YXJ0T2ZMaW5lUG9zaXRpb25zLmxlbmd0aCAtIDEgJiYgc3RhcnRPZkxpbmVQb3NpdGlvbnNbbGluZSArIDFdIDw9IHBvc2l0aW9uKSB7XG4gICAgbGluZSsrO1xuICB9XG4gIHdoaWxlIChsaW5lID4gMCAmJiBzdGFydE9mTGluZVBvc2l0aW9uc1tsaW5lXSA+IHBvc2l0aW9uKSB7XG4gICAgbGluZS0tO1xuICB9XG4gIGNvbnN0IGNvbHVtbiA9IHBvc2l0aW9uIC0gc3RhcnRPZkxpbmVQb3NpdGlvbnNbbGluZV07XG4gIHJldHVybiB7bGluZSwgY29sdW1uLCBwb3NpdGlvbiwgbmV4dDogdW5kZWZpbmVkfTtcbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  /// <amd-module name="@angular/compiler-cli/src/ngtsc/sourcemaps/src/source_file" />
2
2
  import { AbsoluteFsPath, PathManipulation } from '../../file_system';
3
- import { RawSourceMap } from './raw_source_map';
3
+ import { RawSourceMap, SourceMapInfo } from './raw_source_map';
4
4
  import { SegmentMarker } from './segment_marker';
5
5
  export declare function removeSourceMapComments(contents: string): string;
6
6
  export declare class SourceFile {
@@ -8,10 +8,8 @@ export declare class SourceFile {
8
8
  readonly sourcePath: AbsoluteFsPath;
9
9
  /** The contents of this source file. */
10
10
  readonly contents: string;
11
- /** The raw source map (if any) associated with this source file. */
12
- readonly rawMap: RawSourceMap | null;
13
- /** Whether this source file's source map was inline or external. */
14
- readonly inline: boolean;
11
+ /** The raw source map (if any) referenced by this source file. */
12
+ readonly rawMap: SourceMapInfo | null;
15
13
  /** Any source files referenced by the raw source map associated with this source file. */
16
14
  readonly sources: (SourceFile | null)[];
17
15
  private fs;
@@ -29,10 +27,8 @@ export declare class SourceFile {
29
27
  sourcePath: AbsoluteFsPath,
30
28
  /** The contents of this source file. */
31
29
  contents: string,
32
- /** The raw source map (if any) associated with this source file. */
33
- rawMap: RawSourceMap | null,
34
- /** Whether this source file's source map was inline or external. */
35
- inline: boolean,
30
+ /** The raw source map (if any) referenced by this source file. */
31
+ rawMap: SourceMapInfo | null,
36
32
  /** Any source files referenced by the raw source map associated with this source file. */
37
33
  sources: (SourceFile | null)[], fs: PathManipulation);
38
34
  /**
@@ -31,16 +31,13 @@
31
31
  sourcePath,
32
32
  /** The contents of this source file. */
33
33
  contents,
34
- /** The raw source map (if any) associated with this source file. */
34
+ /** The raw source map (if any) referenced by this source file. */
35
35
  rawMap,
36
- /** Whether this source file's source map was inline or external. */
37
- inline,
38
36
  /** Any source files referenced by the raw source map associated with this source file. */
39
37
  sources, fs) {
40
38
  this.sourcePath = sourcePath;
41
39
  this.contents = contents;
42
40
  this.rawMap = rawMap;
43
- this.inline = inline;
44
41
  this.sources = sources;
45
42
  this.fs = fs;
46
43
  this.contents = removeSourceMapComments(contents);
@@ -139,7 +136,7 @@
139
136
  * source files with no transitive source maps.
140
137
  */
141
138
  SourceFile.prototype.flattenMappings = function () {
142
- var mappings = parseMappings(this.rawMap, this.sources, this.startOfLinePositions);
139
+ var mappings = parseMappings(this.rawMap && this.rawMap.map, this.sources, this.startOfLinePositions);
143
140
  ensureOriginalSegmentLinks(mappings);
144
141
  var flattenedMappings = [];
145
142
  for (var mappingIndex = 0; mappingIndex < mappings.length; mappingIndex++) {
@@ -519,4 +516,4 @@
519
516
  return Cache;
520
517
  }());
521
518
  });
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX2ZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvc3JjL3NvdXJjZV9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCx5REFBeUU7SUFDekUsbURBQW9GO0lBS3BGLGdHQUErRTtJQUUvRSxTQUFnQix1QkFBdUIsQ0FBQyxRQUFnQjtRQUN0RCxPQUFPLDBDQUFxQixDQUFDLG1DQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFGRCwwREFFQztJQUVEO1FBV0U7UUFDSSxvQ0FBb0M7UUFDM0IsVUFBMEI7UUFDbkMsd0NBQXdDO1FBQy9CLFFBQWdCO1FBQ3pCLG9FQUFvRTtRQUMzRCxNQUF5QjtRQUNsQyxvRUFBb0U7UUFDM0QsTUFBZTtRQUN4QiwwRkFBMEY7UUFDakYsT0FBNEIsRUFDN0IsRUFBb0I7WUFUbkIsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7WUFFMUIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtZQUVoQixXQUFNLEdBQU4sTUFBTSxDQUFtQjtZQUV6QixXQUFNLEdBQU4sTUFBTSxDQUFTO1lBRWYsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7WUFDN0IsT0FBRSxHQUFGLEVBQUUsQ0FBa0I7WUFFOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUVEOztXQUVHO1FBQ0gsNkNBQXdCLEdBQXhC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LENBQUMsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDSCxpQkFBQztJQUFELENBQUMsQUEzQkQsSUEyQkM7SUFFRDtRQUVFLGVBQW9CLFNBQW1DO1lBQW5DLGNBQVMsR0FBVCxTQUFTLENBQTBCO1lBRC9DLFFBQUcsR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztRQUNtQixDQUFDO1FBQzNELG1CQUFHLEdBQUgsVUFBSSxLQUFZO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0gsWUFBQztJQUFELENBQUMsQUFURCxJQVNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge3JlbW92ZUNvbW1lbnRzLCByZW1vdmVNYXBGaWxlQ29tbWVudHN9IGZyb20gJ2NvbnZlcnQtc291cmNlLW1hcCc7XG5pbXBvcnQge2RlY29kZSwgZW5jb2RlLCBTb3VyY2VNYXBNYXBwaW5ncywgU291cmNlTWFwU2VnbWVudH0gZnJvbSAnc291cmNlbWFwLWNvZGVjJztcblxuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgUGF0aE1hbmlwdWxhdGlvbn0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0nO1xuXG5pbXBvcnQge1Jhd1NvdXJjZU1hcH0gZnJvbSAnLi9yYXdfc291cmNlX21hcCc7XG5pbXBvcnQge2NvbXBhcmVTZWdtZW50cywgb2Zmc2V0U2VnbWVudCwgU2VnbWVudE1hcmtlcn0gZnJvbSAnLi9zZWdtZW50X21hcmtlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTb3VyY2VNYXBDb21tZW50cyhjb250ZW50czogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbW92ZU1hcEZpbGVDb21tZW50cyhyZW1vdmVDb21tZW50cyhjb250ZW50cykpLnJlcGxhY2UoL1xcblxcbiQvLCAnXFxuJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBTb3VyY2VGaWxlIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJzZWQgbWFwcGluZ3MgdGhhdCBoYXZlIGJlZW4gZmxhdHRlbmVkIHNvIHRoYXQgYW55IGludGVybWVkaWF0ZSBzb3VyY2UgbWFwcGluZ3MgaGF2ZSBiZWVuXG4gICAqIGZsYXR0ZW5lZC5cbiAgICpcbiAgICogVGhlIHJlc3VsdCBpcyB0aGF0IGFueSBzb3VyY2UgZmlsZSBtZW50aW9uZWQgaW4gdGhlIGZsYXR0ZW5lZCBtYXBwaW5ncyBoYXZlIG5vIHNvdXJjZSBtYXAgKGFyZVxuICAgKiBwdXJlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcykuXG4gICAqL1xuICByZWFkb25seSBmbGF0dGVuZWRNYXBwaW5nczogTWFwcGluZ1tdO1xuICByZWFkb25seSBzdGFydE9mTGluZVBvc2l0aW9uczogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICAvKiogVGhlIHBhdGggdG8gdGhpcyBzb3VyY2UgZmlsZS4gKi9cbiAgICAgIHJlYWRvbmx5IHNvdXJjZVBhdGg6IEFic29sdXRlRnNQYXRoLFxuICAgICAgLyoqIFRoZSBjb250ZW50cyBvZiB0aGlzIHNvdXJjZSBmaWxlLiAqL1xuICAgICAgcmVhZG9ubHkgY29udGVudHM6IHN0cmluZyxcbiAgICAgIC8qKiBUaGUgcmF3IHNvdXJjZSBtYXAgKGlmIGFueSkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cmNlIGZpbGUuICovXG4gICAgICByZWFkb25seSByYXdNYXA6IFJhd1NvdXJjZU1hcHxudWxsLFxuICAgICAgLyoqIFdoZXRoZXIgdGhpcyBzb3VyY2UgZmlsZSdzIHNvdXJjZSBtYXAgd2FzIGlubGluZSBvciBleHRlcm5hbC4gKi9cbiAgICAgIHJlYWRvbmx5IGlubGluZTogYm9vbGVhbixcbiAgICAgIC8qKiBBbnkgc291cmNlIGZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlIHJhdyBzb3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvdXJjZSBmaWxlLiAqL1xuICAgICAgcmVhZG9ubHkgc291cmNlczogKFNvdXJjZUZpbGV8bnVsbClbXSxcbiAgICAgIHByaXZhdGUgZnM6IFBhdGhNYW5pcHVsYXRpb24sXG4gICkge1xuICAgIHRoaXMuY29udGVudHMgPSByZW1vdmVTb3VyY2VNYXBDb21tZW50cyhjb250ZW50cyk7XG4gICAgdGhpcy5zdGFydE9mTGluZVBvc2l0aW9ucyA9IGNvbXB1dGVTdGFydE9mTGluZVBvc2l0aW9ucyh0aGlzLmNvbnRlbnRzKTtcbiAgICB0aGlzLmZsYXR0ZW5lZE1hcHBpbmdzID0gdGhpcy5mbGF0dGVuTWFwcGluZ3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHJhdyBzb3VyY2UgbWFwIGdlbmVyYXRlZCBmcm9tIHRoZSBmbGF0dGVuZWQgbWFwcGluZ3MuXG4gICAqL1xuICByZW5kZXJGbGF0dGVuZWRTb3VyY2VNYXAoKTogUmF3U291cmNlTWFwIHtcbiAgICBjb25zdCBzb3VyY2VzID0gbmV3IEluZGV4ZWRNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29uc3QgbmFtZXMgPSBuZXcgSW5kZXhlZFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgbWFwcGluZ3M6IFNvdXJjZU1hcE1hcHBpbmdzID0gW107XG4gICAgY29uc3Qgc291cmNlUGF0aERpciA9IHRoaXMuZnMuZGlybmFtZSh0aGlzLnNvdXJjZVBhdGgpO1xuICAgIC8vIENvbXB1dGluZyB0aGUgcmVsYXRpdmUgcGF0aCBjYW4gYmUgZXhwZW5zaXZlLCBhbmQgd2UgYXJlIGxpa2VseSB0byBoYXZlIHRoZSBzYW1lIHBhdGggZm9yXG4gICAgLy8gbWFueSAoaWYgbm90IGFsbCEpIG1hcHBpbmdzLlxuICAgIGNvbnN0IHJlbGF0aXZlU291cmNlUGF0aENhY2hlID1cbiAgICAgICAgbmV3IENhY2hlPHN0cmluZywgc3RyaW5nPihpbnB1dCA9PiB0aGlzLmZzLnJlbGF0aXZlKHNvdXJjZVBhdGhEaXIsIGlucHV0KSk7XG5cbiAgICBmb3IgKGNvbnN0IG1hcHBpbmcgb2YgdGhpcy5mbGF0dGVuZWRNYXBwaW5ncykge1xuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2VzLnNldChcbiAgICAgICAgICByZWxhdGl2ZVNvdXJjZVBhdGhDYWNoZS5nZXQobWFwcGluZy5vcmlnaW5hbFNvdXJjZS5zb3VyY2VQYXRoKSxcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsU291cmNlLmNvbnRlbnRzKTtcbiAgICAgIGNvbnN0IG1hcHBpbmdBcnJheTogU291cmNlTWFwU2VnbWVudCA9IFtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRTZWdtZW50LmNvbHVtbixcbiAgICAgICAgc291cmNlSW5kZXgsXG4gICAgICAgIG1hcHBpbmcub3JpZ2luYWxTZWdtZW50LmxpbmUsXG4gICAgICAgIG1hcHBpbmcub3JpZ2luYWxTZWdtZW50LmNvbHVtbixcbiAgICAgIF07XG4gICAgICBpZiAobWFwcGluZy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gbmFtZXMuYWRkKG1hcHBpbmcubmFtZSk7XG4gICAgICAgIG1hcHBpbmdBcnJheS5wdXNoKG5hbWVJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBhIG1hcHBpbmcgbGluZSBhcnJheSBmb3IgdGhpcyBtYXBwaW5nLlxuICAgICAgY29uc3QgbGluZSA9IG1hcHBpbmcuZ2VuZXJhdGVkU2VnbWVudC5saW5lO1xuICAgICAgd2hpbGUgKGxpbmUgPj0gbWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIG1hcHBpbmdzLnB1c2goW10pO1xuICAgICAgfVxuICAgICAgLy8gQWRkIHRoaXMgbWFwcGluZyB0byB0aGUgbGluZVxuICAgICAgbWFwcGluZ3NbbGluZV0ucHVzaChtYXBwaW5nQXJyYXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU1hcDogUmF3U291cmNlTWFwID0ge1xuICAgICAgdmVyc2lvbjogMyxcbiAgICAgIGZpbGU6IHRoaXMuZnMucmVsYXRpdmUoc291cmNlUGF0aERpciwgdGhpcy5zb3VyY2VQYXRoKSxcbiAgICAgIHNvdXJjZXM6IHNvdXJjZXMua2V5cyxcbiAgICAgIG5hbWVzOiBuYW1lcy52YWx1ZXMsXG4gICAgICBtYXBwaW5nczogZW5jb2RlKG1hcHBpbmdzKSxcbiAgICAgIHNvdXJjZXNDb250ZW50OiBzb3VyY2VzLnZhbHVlcyxcbiAgICB9O1xuICAgIHJldHVybiBzb3VyY2VNYXA7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgb3JpZ2luYWwgbWFwcGVkIGxvY2F0aW9uIGZvciB0aGUgZ2l2ZW4gYGxpbmVgIGFuZCBgY29sdW1uYCBpbiB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAqXG4gICAqIEZpcnN0IHdlIHNlYXJjaCBmb3IgYSBtYXBwaW5nIHdob3NlIGdlbmVyYXRlZCBzZWdtZW50IGlzIGF0IG9yIGRpcmVjdGx5IGJlZm9yZSB0aGUgZ2l2ZW5cbiAgICogbG9jYXRpb24uIFRoZW4gd2UgY29tcHV0ZSB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGdpdmVuIGxvY2F0aW9uIGFuZCB0aGUgbWF0Y2hpbmcgZ2VuZXJhdGVkXG4gICAqIHNlZ21lbnQuIEZpbmFsbHkgd2UgYXBwbHkgdGhpcyBvZmZzZXQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBzZWdtZW50IHRvIGdldCB0aGUgZGVzaXJlZFxuICAgKiBvcmlnaW5hbCBsb2NhdGlvbi5cbiAgICovXG4gIGdldE9yaWdpbmFsTG9jYXRpb24obGluZTogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6XG4gICAgICB7ZmlsZTogQWJzb2x1dGVGc1BhdGgsIGxpbmU6IG51bWJlciwgY29sdW1uOiBudW1iZXJ9fG51bGwge1xuICAgIGlmICh0aGlzLmZsYXR0ZW5lZE1hcHBpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uOiBudW1iZXI7XG4gICAgaWYgKGxpbmUgPCB0aGlzLnN0YXJ0T2ZMaW5lUG9zaXRpb25zLmxlbmd0aCkge1xuICAgICAgcG9zaXRpb24gPSB0aGlzLnN0YXJ0T2ZMaW5lUG9zaXRpb25zW2xpbmVdICsgY29sdW1uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgbGluZSBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgZmlsZSwgc28ganVzdCBhc3N1bWUgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAgICBwb3NpdGlvbiA9IHRoaXMuY29udGVudHMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uU2VnbWVudDogU2VnbWVudE1hcmtlciA9IHtsaW5lLCBjb2x1bW4sIHBvc2l0aW9uLCBuZXh0OiB1bmRlZmluZWR9O1xuXG4gICAgbGV0IG1hcHBpbmdJbmRleCA9XG4gICAgICAgIGZpbmRMYXN0TWFwcGluZ0luZGV4QmVmb3JlKHRoaXMuZmxhdHRlbmVkTWFwcGluZ3MsIGxvY2F0aW9uU2VnbWVudCwgZmFsc2UsIDApO1xuICAgIGlmIChtYXBwaW5nSW5kZXggPCAwKSB7XG4gICAgICBtYXBwaW5nSW5kZXggPSAwO1xuICAgIH1cbiAgICBjb25zdCB7b3JpZ2luYWxTZWdtZW50LCBvcmlnaW5hbFNvdXJjZSwgZ2VuZXJhdGVkU2VnbWVudH0gPVxuICAgICAgICB0aGlzLmZsYXR0ZW5lZE1hcHBpbmdzW21hcHBpbmdJbmRleF07XG4gICAgY29uc3Qgb2Zmc2V0ID0gbG9jYXRpb25TZWdtZW50LnBvc2l0aW9uIC0gZ2VuZXJhdGVkU2VnbWVudC5wb3NpdGlvbjtcbiAgICBjb25zdCBvZmZzZXRPcmlnaW5hbFNlZ21lbnQgPVxuICAgICAgICBvZmZzZXRTZWdtZW50KG9yaWdpbmFsU291cmNlLnN0YXJ0T2ZMaW5lUG9zaXRpb25zLCBvcmlnaW5hbFNlZ21lbnQsIG9mZnNldCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsZTogb3JpZ2luYWxTb3VyY2Uuc291cmNlUGF0aCxcbiAgICAgIGxpbmU6IG9mZnNldE9yaWdpbmFsU2VnbWVudC5saW5lLFxuICAgICAgY29sdW1uOiBvZmZzZXRPcmlnaW5hbFNlZ21lbnQuY29sdW1uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbiB0aGUgcGFyc2VkIG1hcHBpbmdzIGZvciB0aGlzIHNvdXJjZSBmaWxlLCBzbyB0aGF0IGFsbCB0aGUgbWFwcGluZ3MgYXJlIHRvIHB1cmUgb3JpZ2luYWxcbiAgICogc291cmNlIGZpbGVzIHdpdGggbm8gdHJhbnNpdGl2ZSBzb3VyY2UgbWFwcy5cbiAgICovXG4gIHByaXZhdGUgZmxhdHRlbk1hcHBpbmdzKCk6IE1hcHBpbmdbXSB7XG4gICAgY29uc3QgbWFwcGluZ3MgPSBwYXJzZU1hcHBpbmdzKHRoaXMucmF3TWFwLCB0aGlzLnNvdXJjZXMsIHRoaXMuc3RhcnRPZkxpbmVQb3NpdGlvbnMpO1xuICAgIGVuc3VyZU9yaWdpbmFsU2VnbWVudExpbmtzKG1hcHBpbmdzKTtcbiAgICBjb25zdCBmbGF0dGVuZWRNYXBwaW5nczogTWFwcGluZ1tdID0gW107XG4gICAgZm9yIChsZXQgbWFwcGluZ0luZGV4ID0gMDsgbWFwcGluZ0luZGV4IDwgbWFwcGluZ3MubGVuZ3RoOyBtYXBwaW5nSW5kZXgrKykge1xuICAgICAgY29uc3QgYVRvQm1hcHBpbmcgPSBtYXBwaW5nc1ttYXBwaW5nSW5kZXhdO1xuICAgICAgY29uc3QgYlNvdXJjZSA9IGFUb0JtYXBwaW5nLm9yaWdpbmFsU291cmNlO1xuICAgICAgaWYgKGJTb3VyY2UuZmxhdHRlbmVkTWFwcGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIFRoZSBiIHNvdXJjZSBmaWxlIGhhcyBubyBtYXBwaW5ncyBvZiBpdHMgb3duIChpLmUuIGl0IGlzIGEgcHVyZSBvcmlnaW5hbCBmaWxlKVxuICAgICAgICAvLyBzbyBqdXN0IHVzZSB0aGUgbWFwcGluZyBhcy1pcy5cbiAgICAgICAgZmxhdHRlbmVkTWFwcGluZ3MucHVzaChhVG9CbWFwcGluZyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgYGluY29taW5nU3RhcnRgIGFuZCBgaW5jb21pbmdFbmRgIGFyZSB0aGUgYFNlZ21lbnRNYXJrZXJgcyBpbiBgQmAgdGhhdCByZXByZXNlbnQgdGhlXG4gICAgICAvLyBzZWN0aW9uIG9mIGBCYCBzb3VyY2UgZmlsZSB0aGF0IGlzIGJlaW5nIG1hcHBlZCB0byBieSB0aGUgY3VycmVudCBgYVRvQm1hcHBpbmdgLlxuICAgICAgLy9cbiAgICAgIC8vIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgbWFwcGluZ3MgZnJvbSBBIHRvIEI6XG4gICAgICAvL1xuICAgICAgLy8gc3JjIEEgICBzcmMgQiAgICAgbWFwcGluZ1xuICAgICAgLy9cbiAgICAgIC8vICAgYSAtLS0tLSBhICAgICAgIFswLCAwXVxuICAgICAgLy8gICBiICAgICAgIGJcbiAgICAgIC8vICAgZiAtICAvLSBjICAgICAgIFs0LCAyXVxuICAgICAgLy8gICBnICBcXCAvICBkXG4gICAgICAvLyAgIGMgLS9cXCAgIGVcbiAgICAgIC8vICAgZCAgICBcXC0gZiAgICAgICBbMiwgNV1cbiAgICAgIC8vICAgZVxuICAgICAgLy9cbiAgICAgIC8vIEZvciBtYXBwaW5nIFswLDBdIHRoZSBpbmNvbWluZyBzdGFydCBhbmQgZW5kIGFyZSAwIGFuZCAyIChpLmUuIHRoZSByYW5nZSBhLCBiLCBjKVxuICAgICAgLy8gRm9yIG1hcHBpbmcgWzQsMl0gdGhlIGluY29taW5nIHN0YXJ0IGFuZCBlbmQgYXJlIDIgYW5kIDUgKGkuZS4gdGhlIHJhbmdlIGMsIGQsIGUsIGYpXG4gICAgICAvL1xuICAgICAgY29uc3QgaW5jb21pbmdTdGFydCA9IGFUb0JtYXBwaW5nLm9yaWdpbmFsU2VnbWVudDtcbiAgICAgIGNvbnN0IGluY29taW5nRW5kID0gaW5jb21pbmdTdGFydC5uZXh0O1xuXG4gICAgICAvLyBUaGUgYG91dGdvaW5nU3RhcnRJbmRleGAgYW5kIGBvdXRnb2luZ0VuZEluZGV4YCBhcmUgdGhlIGluZGljZXMgb2YgdGhlIHJhbmdlIG9mIG1hcHBpbmdzXG4gICAgICAvLyB0aGF0IGxlYXZlIGBiYCB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluIG1lcmdpbmcgd2l0aCB0aGUgYVRvQm1hcHBpbmcuXG4gICAgICAvLyBXZSBhY3R1YWxseSBjYXJlIGFib3V0IGFsbCB0aGUgbWFya2VycyBmcm9tIHRoZSBsYXN0IGJUb0NtYXBwaW5nIGRpcmVjdGx5IGJlZm9yZSB0aGVcbiAgICAgIC8vIGBpbmNvbWluZ1N0YXJ0YCB0byB0aGUgbGFzdCBiVG9DbWFwaW5nIGRpcmVjdGx5IGJlZm9yZSB0aGUgYGluY29taW5nRW5kYCwgaW5jbHVzaXZlLlxuICAgICAgLy9cbiAgICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSBjb25zaWRlciB0aGUgcmFuZ2UgMiB0byA1IGZyb20gYWJvdmUgKGkuZS4gYywgZCwgZSwgZikgd2l0aCB0aGVcbiAgICAgIC8vIGZvbGxvd2luZyBtYXBwaW5ncyBmcm9tIEIgdG8gQzpcbiAgICAgIC8vXG4gICAgICAvLyAgIHNyYyBCICAgc3JjIEMgICAgIG1hcHBpbmdcbiAgICAgIC8vICAgICBhXG4gICAgICAvLyAgICAgYiAtLS0tLSBiICAgICAgIFsxLCAwXVxuICAgICAgLy8gICAtIGMgICAgICAgY1xuICAgICAgLy8gIHwgIGQgICAgICAgZFxuICAgICAgLy8gIHwgIGUgLS0tLS0gMSAgICAgICBbNCwgM11cbiAgICAgIC8vICAgLSBmICBcXCAgICAyXG4gICAgICAvLyAgICAgICAgIFxcICAgM1xuICAgICAgLy8gICAgICAgICAgXFwtIGUgICAgICAgWzQsIDZdXG4gICAgICAvL1xuICAgICAgLy8gVGhlIHJhbmdlIHdpdGggYGluY29taW5nU3RhcnRgIGF0IDIgYW5kIGBpbmNvbWluZ0VuZGAgYXQgNSBoYXMgb3V0Z29pbmcgc3RhcnQgbWFwcGluZyBvZlxuICAgICAgLy8gWzEsMF0gYW5kIG91dGdvaW5nIGVuZCBtYXBwaW5nIG9mIFs0LCA2XSwgd2hpY2ggYWxzbyBpbmNsdWRlcyBbNCwgM10uXG4gICAgICAvL1xuICAgICAgbGV0IG91dGdvaW5nU3RhcnRJbmRleCA9XG4gICAgICAgICAgZmluZExhc3RNYXBwaW5nSW5kZXhCZWZvcmUoYlNvdXJjZS5mbGF0dGVuZWRNYXBwaW5ncywgaW5jb21pbmdTdGFydCwgZmFsc2UsIDApO1xuICAgICAgaWYgKG91dGdvaW5nU3RhcnRJbmRleCA8IDApIHtcbiAgICAgICAgb3V0Z29pbmdTdGFydEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG91dGdvaW5nRW5kSW5kZXggPSBpbmNvbWluZ0VuZCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICBmaW5kTGFzdE1hcHBpbmdJbmRleEJlZm9yZShcbiAgICAgICAgICAgICAgYlNvdXJjZS5mbGF0dGVuZWRNYXBwaW5ncywgaW5jb21pbmdFbmQsIHRydWUsIG91dGdvaW5nU3RhcnRJbmRleCkgOlxuICAgICAgICAgIGJTb3VyY2UuZmxhdHRlbmVkTWFwcGluZ3MubGVuZ3RoIC0gMTtcblxuICAgICAgZm9yIChsZXQgYlRvQ21hcHBpbmdJbmRleCA9IG91dGdvaW5nU3RhcnRJbmRleDsgYlRvQ21hcHBpbmdJbmRleCA8PSBvdXRnb2luZ0VuZEluZGV4O1xuICAgICAgICAgICBiVG9DbWFwcGluZ0luZGV4KyspIHtcbiAgICAgICAgY29uc3QgYlRvQ21hcHBpbmc6IE1hcHBpbmcgPSBiU291cmNlLmZsYXR0ZW5lZE1hcHBpbmdzW2JUb0NtYXBwaW5nSW5kZXhdO1xuICAgICAgICBmbGF0dGVuZWRNYXBwaW5ncy5wdXNoKG1lcmdlTWFwcGluZ3ModGhpcywgYVRvQm1hcHBpbmcsIGJUb0NtYXBwaW5nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWRNYXBwaW5ncztcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gbWFwcGluZ3MgVGhlIGNvbGxlY3Rpb24gb2YgbWFwcGluZ3Mgd2hvc2Ugc2VnbWVudC1tYXJrZXJzIHdlIGFyZSBzZWFyY2hpbmcuXG4gKiBAcGFyYW0gbWFya2VyIFRoZSBzZWdtZW50LW1hcmtlciB0byBtYXRjaCBhZ2FpbnN0IHRob3NlIG9mIHRoZSBnaXZlbiBgbWFwcGluZ3NgLlxuICogQHBhcmFtIGV4Y2x1c2l2ZSBJZiBleGNsdXNpdmUgdGhlbiB3ZSBtdXN0IGZpbmQgYSBtYXBwaW5nIHdpdGggYSBzZWdtZW50LW1hcmtlciB0aGF0IGlzXG4gKiBleGNsdXNpdmVseSBlYXJsaWVyIHRoYW4gdGhlIGdpdmVuIGBtYXJrZXJgLlxuICogSWYgbm90IGV4Y2x1c2l2ZSB0aGVuIHdlIGNhbiByZXR1cm4gdGhlIGhpZ2hlc3QgbWFwcGluZ3Mgd2l0aCBhbiBlcXVpdmFsZW50IHNlZ21lbnQtbWFya2VyIHRvIHRoZVxuICogZ2l2ZW4gYG1hcmtlcmAuXG4gKiBAcGFyYW0gbG93ZXJJbmRleCBJZiBwcm92aWRlZCwgdGhpcyBpcyB1c2VkIGFzIGEgaGludCB0aGF0IHRoZSBtYXJrZXIgd2UgYXJlIHNlYXJjaGluZyBmb3IgaGFzIGFuXG4gKiBpbmRleCB0aGF0IGlzIG5vIGxvd2VyIHRoYW4gdGhpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0TWFwcGluZ0luZGV4QmVmb3JlKFxuICAgIG1hcHBpbmdzOiBNYXBwaW5nW10sIG1hcmtlcjogU2VnbWVudE1hcmtlciwgZXhjbHVzaXZlOiBib29sZWFuLCBsb3dlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgdXBwZXJJbmRleCA9IG1hcHBpbmdzLmxlbmd0aCAtIDE7XG4gIGNvbnN0IHRlc3QgPSBleGNsdXNpdmUgPyAtMSA6IDA7XG5cbiAgaWYgKGNvbXBhcmVTZWdtZW50cyhtYXBwaW5nc1tsb3dlckluZGV4XS5nZW5lcmF0ZWRTZWdtZW50LCBtYXJrZXIpID4gdGVzdCkge1xuICAgIC8vIEV4aXQgZWFybHkgc2luY2UgdGhlIG1hcmtlciBpcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlIG9mIG1hcHBpbmdzLlxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGxldCBtYXRjaGluZ0luZGV4ID0gLTE7XG4gIHdoaWxlIChsb3dlckluZGV4IDw9IHVwcGVySW5kZXgpIHtcbiAgICBjb25zdCBpbmRleCA9ICh1cHBlckluZGV4ICsgbG93ZXJJbmRleCkgPj4gMTtcbiAgICBpZiAoY29tcGFyZVNlZ21lbnRzKG1hcHBpbmdzW2luZGV4XS5nZW5lcmF0ZWRTZWdtZW50LCBtYXJrZXIpIDw9IHRlc3QpIHtcbiAgICAgIG1hdGNoaW5nSW5kZXggPSBpbmRleDtcbiAgICAgIGxvd2VySW5kZXggPSBpbmRleCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwcGVySW5kZXggPSBpbmRleCAtIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaGluZ0luZGV4O1xufVxuXG4vKipcbiAqIEEgTWFwcGluZyBjb25zaXN0cyBvZiB0d28gc2VnbWVudCBtYXJrZXJzOiBvbmUgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UgYW5kIG9uZSBpbiB0aGUgb3JpZ2luYWxcbiAqIHNvdXJjZSwgd2hpY2ggaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGVhY2ggc2VnbWVudC4gVGhlIGVuZCBvZiBhIHNlZ21lbnQgaXMgaW5kaWNhdGVkIGJ5IHRoZSBmaXJzdFxuICogc2VnbWVudCBtYXJrZXIgb2YgYW5vdGhlciBtYXBwaW5nIHdob3NlIHN0YXJ0IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhpcyBvbmUuXG4gKlxuICogSXQgbWF5IGFsc28gaW5jbHVkZSBhIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWdtZW50IGJlaW5nIG1hcHBlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXBwaW5nIHtcbiAgcmVhZG9ubHkgZ2VuZXJhdGVkU2VnbWVudDogU2VnbWVudE1hcmtlcjtcbiAgcmVhZG9ubHkgb3JpZ2luYWxTb3VyY2U6IFNvdXJjZUZpbGU7XG4gIHJlYWRvbmx5IG9yaWdpbmFsU2VnbWVudDogU2VnbWVudE1hcmtlcjtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbn1cblxuXG5cbi8qKlxuICogTWVyZ2UgdHdvIG1hcHBpbmdzIHRoYXQgZ28gZnJvbSBBIHRvIEIgYW5kIEIgdG8gQywgdG8gcmVzdWx0IGluIGEgbWFwcGluZyB0aGF0IGdvZXMgZnJvbSBBIHRvIEMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU1hcHBpbmdzKGdlbmVyYXRlZFNvdXJjZTogU291cmNlRmlsZSwgYWI6IE1hcHBpbmcsIGJjOiBNYXBwaW5nKTogTWFwcGluZyB7XG4gIGNvbnN0IG5hbWUgPSBiYy5uYW1lIHx8IGFiLm5hbWU7XG5cbiAgLy8gV2UgbmVlZCB0byBtb2RpZnkgdGhlIHNlZ21lbnQtbWFya2VycyBvZiB0aGUgbmV3IG1hcHBpbmcgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHNoaWZ0cyB0aGF0XG4gIC8vIG9jY3VyIGR1ZSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBtYXBwaW5ncy5cbiAgLy8gRm9yIGV4YW1wbGU6XG5cbiAgLy8gKiBTaW1wbGUgbWFwIHdoZXJlIHRoZSBCLT5DIHN0YXJ0cyBhdCB0aGUgc2FtZSBwbGFjZSB0aGUgQS0+QiBlbmRzOlxuICAvL1xuICAvLyBgYGBcbiAgLy8gQTogMSAyIGIgYyBkXG4gIC8vICAgICAgICB8ICAgICAgICBBLT5CIFsyLDBdXG4gIC8vICAgICAgICB8ICAgICAgICAgICAgICB8XG4gIC8vIEI6ICAgICBiIGMgZCAgICBBLT5DIFsyLDFdXG4gIC8vICAgICAgICB8ICAgICAgICAgICAgICAgIHxcbiAgLy8gICAgICAgIHwgICAgICAgIEItPkMgWzAsMV1cbiAgLy8gQzogICBhIGIgYyBkIGVcbiAgLy8gYGBgXG5cbiAgLy8gKiBNb3JlIGNvbXBsaWNhdGVkIGNhc2Ugd2hlcmUgZGlmZnMgb2Ygc2VnbWVudC1tYXJrZXJzIGlzIG5lZWRlZDpcbiAgLy9cbiAgLy8gYGBgXG4gIC8vIEE6IGIgMSAyIGMgZFxuICAvLyAgICAgXFxcbiAgLy8gICAgICB8ICAgICAgICAgICAgQS0+QiAgWzAsMSpdICAgIFswLDEqXVxuICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwrM1xuICAvLyBCOiBhIGIgMSAyIGMgZCAgICBBLT5DICBbMCwxXSAgICAgWzMsMl1cbiAgLy8gICAgfCAgICAgIC8gICAgICAgICAgICAgICAgfCsxICAgICAgIHxcbiAgLy8gICAgfCAgICAgLyAgICAgICAgQi0+QyBbMCosMF0gICAgWzQqLDJdXG4gIC8vICAgIHwgICAgL1xuICAvLyBDOiBhIGIgYyBkIGVcbiAgLy8gYGBgXG4gIC8vXG4gIC8vIGBbMCwxXWAgbWFwcGluZyBmcm9tIEEtPkM6XG4gIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFwib3JpZ2luYWwgc2VnbWVudC1tYXJrZXJcIiBvZiBBLT5CICgxKikgYW5kIHRoZSBcImdlbmVyYXRlZFxuICAvLyBzZWdtZW50LW1hcmtlciBvZiBCLT5DICgwKik6IGAxIC0gMCA9ICsxYC5cbiAgLy8gU2luY2UgaXQgaXMgcG9zaXRpdmUgd2UgbXVzdCBpbmNyZW1lbnQgdGhlIFwib3JpZ2luYWwgc2VnbWVudC1tYXJrZXJcIiB3aXRoIGAxYCB0byBnaXZlIFswLDFdLlxuICAvL1xuICAvLyBgWzMsMl1gIG1hcHBpbmcgZnJvbSBBLT5DOlxuICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBcIm9yaWdpbmFsIHNlZ21lbnQtbWFya2VyXCIgb2YgQS0+QiAoMSopIGFuZCB0aGUgXCJnZW5lcmF0ZWRcbiAgLy8gc2VnbWVudC1tYXJrZXJcIiBvZiBCLT5DICg0Kik6IGAxIC0gNCA9IC0zYC5cbiAgLy8gU2luY2UgaXQgaXMgbmVnYXRpdmUgd2UgbXVzdCBpbmNyZW1lbnQgdGhlIFwiZ2VuZXJhdGVkIHNlZ21lbnQtbWFya2VyXCIgd2l0aCBgM2AgdG8gZ2l2ZSBbMywyXS5cblxuICBjb25zdCBkaWZmID0gY29tcGFyZVNlZ21lbnRzKGJjLmdlbmVyYXRlZFNlZ21lbnQsIGFiLm9yaWdpbmFsU2VnbWVudCk7XG4gIGlmIChkaWZmID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgZ2VuZXJhdGVkU2VnbWVudDpcbiAgICAgICAgICBvZmZzZXRTZWdtZW50KGdlbmVyYXRlZFNvdXJjZS5zdGFydE9mTGluZVBvc2l0aW9ucywgYWIuZ2VuZXJhdGVkU2VnbWVudCwgZGlmZiksXG4gICAgICBvcmlnaW5hbFNvdXJjZTogYmMub3JpZ2luYWxTb3VyY2UsXG4gICAgICBvcmlnaW5hbFNlZ21lbnQ6IGJjLm9yaWdpbmFsU2VnbWVudCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgZ2VuZXJhdGVkU2VnbWVudDogYWIuZ2VuZXJhdGVkU2VnbWVudCxcbiAgICAgIG9yaWdpbmFsU291cmNlOiBiYy5vcmlnaW5hbFNvdXJjZSxcbiAgICAgIG9yaWdpbmFsU2VnbWVudDpcbiAgICAgICAgICBvZmZzZXRTZWdtZW50KGJjLm9yaWdpbmFsU291cmNlLnN0YXJ0T2ZMaW5lUG9zaXRpb25zLCBiYy5vcmlnaW5hbFNlZ21lbnQsIC1kaWZmKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGByYXdNYXBwaW5nc2AgaW50byBhbiBhcnJheSBvZiBwYXJzZWQgbWFwcGluZ3MsIHdoaWNoIHJlZmVyZW5jZSBzb3VyY2UtZmlsZXMgcHJvdmlkZWRcbiAqIGluIHRoZSBgc291cmNlc2AgcGFyYW1ldGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNYXBwaW5ncyhcbiAgICByYXdNYXA6IFJhd1NvdXJjZU1hcHxudWxsLCBzb3VyY2VzOiAoU291cmNlRmlsZXxudWxsKVtdLFxuICAgIGdlbmVyYXRlZFNvdXJjZVN0YXJ0T2ZMaW5lUG9zaXRpb25zOiBudW1iZXJbXSk6IE1hcHBpbmdbXSB7XG4gIGlmIChyYXdNYXAgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCByYXdNYXBwaW5ncyA9IGRlY29kZShyYXdNYXAubWFwcGluZ3MpO1xuICBpZiAocmF3TWFwcGluZ3MgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBtYXBwaW5nczogTWFwcGluZ1tdID0gW107XG4gIGZvciAobGV0IGdlbmVyYXRlZExpbmUgPSAwOyBnZW5lcmF0ZWRMaW5lIDwgcmF3TWFwcGluZ3MubGVuZ3RoOyBnZW5lcmF0ZWRMaW5lKyspIHtcbiAgICBjb25zdCBnZW5lcmF0ZWRMaW5lTWFwcGluZ3MgPSByYXdNYXBwaW5nc1tnZW5lcmF0ZWRMaW5lXTtcbiAgICBmb3IgKGNvbnN0IHJhd01hcHBpbmcgb2YgZ2VuZXJhdGVkTGluZU1hcHBpbmdzKSB7XG4gICAgICBpZiAocmF3TWFwcGluZy5sZW5ndGggPj0gNCkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFNvdXJjZSA9IHNvdXJjZXNbcmF3TWFwcGluZ1sxXSFdO1xuICAgICAgICBpZiAob3JpZ2luYWxTb3VyY2UgPT09IG51bGwgfHwgb3JpZ2luYWxTb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgbWlzc2luZyBzbyBpZ25vcmUgdGhpcyBtYXBwaW5nXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1uID0gcmF3TWFwcGluZ1swXTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHJhd01hcHBpbmcubGVuZ3RoID09PSA1ID8gcmF3TWFwLm5hbWVzW3Jhd01hcHBpbmdbNF1dIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBsaW5lID0gcmF3TWFwcGluZ1syXSE7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHJhd01hcHBpbmdbM10hO1xuICAgICAgICBjb25zdCBnZW5lcmF0ZWRTZWdtZW50OiBTZWdtZW50TWFya2VyID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgICAgcG9zaXRpb246IGdlbmVyYXRlZFNvdXJjZVN0YXJ0T2ZMaW5lUG9zaXRpb25zW2dlbmVyYXRlZExpbmVdICsgZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTZWdtZW50OiBTZWdtZW50TWFya2VyID0ge1xuICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHBvc2l0aW9uOiBvcmlnaW5hbFNvdXJjZS5zdGFydE9mTGluZVBvc2l0aW9uc1tsaW5lXSArIGNvbHVtbixcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICAgIG1hcHBpbmdzLnB1c2goe25hbWUsIGdlbmVyYXRlZFNlZ21lbnQsIG9yaWdpbmFsU2VnbWVudCwgb3JpZ2luYWxTb3VyY2V9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmdzO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHNlZ21lbnQgbWFya2VycyBmcm9tIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMgaW4gZWFjaCBtYXBwaW5nIG9mIGFuIGFycmF5IG9mXG4gKiBgbWFwcGluZ3NgLlxuICpcbiAqIEBwYXJhbSBtYXBwaW5ncyBUaGUgbWFwcGluZ3Mgd2hvc2Ugb3JpZ2luYWwgc2VnbWVudHMgd2Ugd2FudCB0byBleHRyYWN0XG4gKiBAcmV0dXJucyBSZXR1cm4gYSBtYXAgZnJvbSBvcmlnaW5hbCBzb3VyY2UtZmlsZXMgKHJlZmVyZW5jZWQgaW4gdGhlIGBtYXBwaW5nc2ApIHRvIGFycmF5cyBvZlxuICogc2VnbWVudC1tYXJrZXJzIHNvcnRlZCBieSB0aGVpciBvcmRlciBpbiB0aGVpciBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPcmlnaW5hbFNlZ21lbnRzKG1hcHBpbmdzOiBNYXBwaW5nW10pOiBNYXA8U291cmNlRmlsZSwgU2VnbWVudE1hcmtlcltdPiB7XG4gIGNvbnN0IG9yaWdpbmFsU2VnbWVudHMgPSBuZXcgTWFwPFNvdXJjZUZpbGUsIFNlZ21lbnRNYXJrZXJbXT4oKTtcbiAgZm9yIChjb25zdCBtYXBwaW5nIG9mIG1hcHBpbmdzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxTb3VyY2UgPSBtYXBwaW5nLm9yaWdpbmFsU291cmNlO1xuICAgIGlmICghb3JpZ2luYWxTZWdtZW50cy5oYXMob3JpZ2luYWxTb3VyY2UpKSB7XG4gICAgICBvcmlnaW5hbFNlZ21lbnRzLnNldChvcmlnaW5hbFNvdXJjZSwgW10pO1xuICAgIH1cbiAgICBjb25zdCBzZWdtZW50cyA9IG9yaWdpbmFsU2VnbWVudHMuZ2V0KG9yaWdpbmFsU291cmNlKSE7XG4gICAgc2VnbWVudHMucHVzaChtYXBwaW5nLm9yaWdpbmFsU2VnbWVudCk7XG4gIH1cbiAgb3JpZ2luYWxTZWdtZW50cy5mb3JFYWNoKHNlZ21lbnRNYXJrZXJzID0+IHNlZ21lbnRNYXJrZXJzLnNvcnQoY29tcGFyZVNlZ21lbnRzKSk7XG4gIHJldHVybiBvcmlnaW5hbFNlZ21lbnRzO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgb3JpZ2luYWwgc2VnbWVudHMgb2YgZWFjaCBvZiB0aGUgZ2l2ZW4gYG1hcHBpbmdzYCB0byBpbmNsdWRlIGEgbGluayB0byB0aGUgbmV4dFxuICogc2VnbWVudCBpbiB0aGUgc291cmNlIGZpbGUuXG4gKlxuICogQHBhcmFtIG1hcHBpbmdzIHRoZSBtYXBwaW5ncyB3aG9zZSBzZWdtZW50cyBzaG91bGQgYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlT3JpZ2luYWxTZWdtZW50TGlua3MobWFwcGluZ3M6IE1hcHBpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZWdtZW50c0J5U291cmNlID0gZXh0cmFjdE9yaWdpbmFsU2VnbWVudHMobWFwcGluZ3MpO1xuICBzZWdtZW50c0J5U291cmNlLmZvckVhY2gobWFya2VycyA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgbWFya2Vyc1tpXS5uZXh0ID0gbWFya2Vyc1tpICsgMV07XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdGFydE9mTGluZVBvc2l0aW9ucyhzdHI6IHN0cmluZykge1xuICAvLyBUaGUgYDFgIGlzIHRvIGluZGljYXRlIGEgbmV3bGluZSBjaGFyYWN0ZXIgYmV0d2VlbiB0aGUgbGluZXMuXG4gIC8vIE5vdGUgdGhhdCBpbiB0aGUgYWN0dWFsIGNvbnRlbnRzIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIHRoYXQgaW5kaWNhdGVzIGFcbiAgLy8gbmV3bGluZVxuICAvLyAtIGUuZy4gXFxyXFxuIC0gYnV0IHRoYXQgaXMgbm90IGltcG9ydGFudCBoZXJlIHNpbmNlIHNlZ21lbnQtbWFya2VycyBhcmUgaW4gbGluZS9jb2x1bW4gcGFpcnMgYW5kXG4gIC8vIHNvIGRpZmZlcmVuY2VzIGluIGxlbmd0aCBkdWUgdG8gZXh0cmEgYFxccmAgY2hhcmFjdGVycyBkbyBub3QgYWZmZWN0IHRoZSBhbGdvcml0aG1zLlxuICBjb25zdCBORVdMSU5FX01BUktFUl9PRkZTRVQgPSAxO1xuICBjb25zdCBsaW5lTGVuZ3RocyA9IGNvbXB1dGVMaW5lTGVuZ3RocyhzdHIpO1xuICBjb25zdCBzdGFydFBvc2l0aW9ucyA9IFswXTsgIC8vIEZpcnN0IGxpbmUgc3RhcnRzIGF0IHBvc2l0aW9uIDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lTGVuZ3Rocy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBzdGFydFBvc2l0aW9ucy5wdXNoKHN0YXJ0UG9zaXRpb25zW2ldICsgbGluZUxlbmd0aHNbaV0gKyBORVdMSU5FX01BUktFUl9PRkZTRVQpO1xuICB9XG4gIHJldHVybiBzdGFydFBvc2l0aW9ucztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUxpbmVMZW5ndGhzKHN0cjogc3RyaW5nKTogbnVtYmVyW10ge1xuICByZXR1cm4gKHN0ci5zcGxpdCgvXFxuLykpLm1hcChzID0+IHMubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgbWFwcGluZ3MgYmV0d2VlbiBga2V5c2AgYW5kIGB2YWx1ZXNgIHN0b3JlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGtleXMgYXJlXG4gKiBmaXJzdCBzZWVuLlxuICpcbiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgYSBzdGFuZGFyZCBgTWFwYCBpcyB0aGF0IHdoZW4geW91IGFkZCBhIGtleS12YWx1ZSBwYWlyIHRoZSBpbmRleFxuICogb2YgdGhlIGBrZXlgIGlzIHJldHVybmVkLlxuICovXG5jbGFzcyBJbmRleGVkTWFwPEssIFY+IHtcbiAgcHJpdmF0ZSBtYXAgPSBuZXcgTWFwPEssIG51bWJlcj4oKTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2Yga2V5cyBhZGRlZCB0byB0aGlzIG1hcC5cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBndWFyYW50ZWVkIHRvIGJlIGluIHRoZSBvcmRlciBvZiB0aGUgZmlyc3QgdGltZSB0aGUga2V5IHdhcyBhZGRlZCB0byB0aGUgbWFwLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5czogS1tdID0gW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHZhbHVlcyBhZGRlZCB0byB0aGlzIG1hcC5cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBndWFyYW50ZWVkIHRvIGJlIGluIHRoZSBvcmRlciBvZiB0aGUgZmlyc3QgdGltZSB0aGUgYXNzb2NpYXRlZCBrZXkgd2FzIGFkZGVkIHRvXG4gICAqIHRoZSBtYXAuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM6IFZbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGUgdGhlIGB2YWx1ZWAgd2l0aCB0aGUgYGtleWAgYW5kIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGtleSBpbiB0aGUgY29sbGVjdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIGBrZXlgIGFscmVhZHkgZXhpc3RzIHRoZW4gdGhlIGB2YWx1ZWAgaXMgbm90IHNldCBhbmQgdGhlIGluZGV4IG9mIHRoYXQgYGtleWAgaXNcbiAgICogcmV0dXJuZWQ7IG90aGVyd2lzZSB0aGUgYGtleWAgYW5kIGB2YWx1ZWAgYXJlIHN0b3JlZCBhbmQgdGhlIGluZGV4IG9mIHRoZSBuZXcgYGtleWAgaXNcbiAgICogcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBhc3NvY2lhdGVkIHdpdGggdGhlIGB2YWx1ZWAuXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzb2NpYXRlZCB3aXRoIHRoZSBga2V5YC5cbiAgICogQHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBga2V5YCBpbiB0aGUgYGtleXNgIGFycmF5LlxuICAgKi9cbiAgc2V0KGtleTogSywgdmFsdWU6IFYpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm1hcC5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChrZXkpITtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKSAtIDE7XG4gICAgdGhpcy5rZXlzLnB1c2goa2V5KTtcbiAgICB0aGlzLm1hcC5zZXQoa2V5LCBpbmRleCk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIGB2YWx1ZXNgIHN0b3JlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGFkZGVkLlxuICpcbiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgYSBzdGFuZGFyZCBgU2V0YCBpcyB0aGF0IHdoZW4geW91IGFkZCBhIHZhbHVlIHRoZSBpbmRleCBvZiB0aGF0XG4gKiBpdGVtIGlzIHJldHVybmVkLlxuICovXG5jbGFzcyBJbmRleGVkU2V0PFY+IHtcbiAgcHJpdmF0ZSBtYXAgPSBuZXcgTWFwPFYsIG51bWJlcj4oKTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgdmFsdWVzIGFkZGVkIHRvIHRoaXMgc2V0LlxuICAgKiBUaGlzIGFycmF5IGlzIGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlIG9yZGVyIG9mIHRoZSBmaXJzdCB0aW1lIHRoZSB2YWx1ZSB3YXMgYWRkZWQgdG8gdGhlIHNldC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogVltdID0gW107XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgYHZhbHVlYCB0byB0aGUgYHZhbHVlc2AgYXJyYXksIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdDsgcmV0dXJuaW5nIHRoZSBpbmRleCBvZiB0aGVcbiAgICogYHZhbHVlYCBpbiB0aGUgYHZhbHVlc2AgYXJyYXkuXG4gICAqXG4gICAqIElmIHRoZSBgdmFsdWVgIGFscmVhZHkgZXhpc3RzIHRoZW4gdGhlIGluZGV4IG9mIHRoYXQgYHZhbHVlYCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHRoZSBuZXdcbiAgICogYHZhbHVlYCBpcyBzdG9yZWQgYW5kIHRoZSBuZXcgaW5kZXggcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYWRkIHRvIHRoZSBzZXQuXG4gICAqIEByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYHZhbHVlYCBpbiB0aGUgYHZhbHVlc2AgYXJyYXkuXG4gICAqL1xuICBhZGQodmFsdWU6IFYpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm1hcC5oYXModmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KHZhbHVlKSE7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZXMucHVzaCh2YWx1ZSkgLSAxO1xuICAgIHRoaXMubWFwLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxufVxuXG5jbGFzcyBDYWNoZTxJbnB1dCwgQ2FjaGVkPiB7XG4gIHByaXZhdGUgbWFwID0gbmV3IE1hcDxJbnB1dCwgQ2FjaGVkPigpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXB1dGVGbjogKGlucHV0OiBJbnB1dCkgPT4gQ2FjaGVkKSB7fVxuICBnZXQoaW5wdXQ6IElucHV0KTogQ2FjaGVkIHtcbiAgICBpZiAoIXRoaXMubWFwLmhhcyhpbnB1dCkpIHtcbiAgICAgIHRoaXMubWFwLnNldChpbnB1dCwgdGhpcy5jb21wdXRlRm4oaW5wdXQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChpbnB1dCkhO1xuICB9XG59XG4iXX0=
519
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX2ZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3NvdXJjZW1hcHMvc3JjL3NvdXJjZV9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCx5REFBeUU7SUFDekUsbURBQW9GO0lBS3BGLGdHQUErRTtJQUUvRSxTQUFnQix1QkFBdUIsQ0FBQyxRQUFnQjtRQUN0RCxPQUFPLDBDQUFxQixDQUFDLG1DQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFGRCwwREFFQztJQUVEO1FBV0U7UUFDSSxvQ0FBb0M7UUFDM0IsVUFBMEI7UUFDbkMsd0NBQXdDO1FBQy9CLFFBQWdCO1FBQ3pCLGtFQUFrRTtRQUN6RCxNQUEwQjtRQUNuQywwRkFBMEY7UUFDakYsT0FBNEIsRUFDN0IsRUFBb0I7WUFQbkIsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7WUFFMUIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtZQUVoQixXQUFNLEdBQU4sTUFBTSxDQUFvQjtZQUUxQixZQUFPLEdBQVAsT0FBTyxDQUFxQjtZQUM3QixPQUFFLEdBQUYsRUFBRSxDQUFrQjtZQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxvQkFBb0IsR0FBRywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsRCxDQUFDO1FBRUQ7O1dBRUc7UUFDSCw2Q0FBd0IsR0FBeEI7O1lBQUEsaUJBMkNDO1lBMUNDLElBQU0sT0FBTyxHQUFHLElBQUksVUFBVSxFQUFr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QU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNILGlCQUFDO0lBQUQsQ0FBQyxBQTNCRCxJQTJCQztJQUVEO1FBRUUsZUFBb0IsU0FBbUM7WUFBbkMsY0FBUyxHQUFULFNBQVMsQ0FBMEI7WUFEL0MsUUFBRyxHQUFHLElBQUksR0FBRyxFQUFpQixDQUFDO1FBQ21CLENBQUM7UUFDM0QsbUJBQUcsR0FBSCxVQUFJLEtBQVk7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDO1FBQzlCLENBQUM7UUFDSCxZQUFDO0lBQUQsQ0FBQyxBQVRELElBU0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7cmVtb3ZlQ29tbWVudHMsIHJlbW92ZU1hcEZpbGVDb21tZW50c30gZnJvbSAnY29udmVydC1zb3VyY2UtbWFwJztcbmltcG9ydCB7ZGVjb2RlLCBlbmNvZGUsIFNvdXJjZU1hcE1hcHBpbmdzLCBTb3VyY2VNYXBTZWdtZW50fSBmcm9tICdzb3VyY2VtYXAtY29kZWMnO1xuXG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBQYXRoTWFuaXB1bGF0aW9ufSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5cbmltcG9ydCB7UmF3U291cmNlTWFwLCBTb3VyY2VNYXBJbmZvfSBmcm9tICcuL3Jhd19zb3VyY2VfbWFwJztcbmltcG9ydCB7Y29tcGFyZVNlZ21lbnRzLCBvZmZzZXRTZWdtZW50LCBTZWdtZW50TWFya2VyfSBmcm9tICcuL3NlZ21lbnRfbWFya2VyJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNvdXJjZU1hcENvbW1lbnRzKGNvbnRlbnRzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVtb3ZlTWFwRmlsZUNvbW1lbnRzKHJlbW92ZUNvbW1lbnRzKGNvbnRlbnRzKSkucmVwbGFjZSgvXFxuXFxuJC8sICdcXG4nKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNvdXJjZUZpbGUge1xuICAvKipcbiAgICogVGhlIHBhcnNlZCBtYXBwaW5ncyB0aGF0IGhhdmUgYmVlbiBmbGF0dGVuZWQgc28gdGhhdCBhbnkgaW50ZXJtZWRpYXRlIHNvdXJjZSBtYXBwaW5ncyBoYXZlIGJlZW5cbiAgICogZmxhdHRlbmVkLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIHRoYXQgYW55IHNvdXJjZSBmaWxlIG1lbnRpb25lZCBpbiB0aGUgZmxhdHRlbmVkIG1hcHBpbmdzIGhhdmUgbm8gc291cmNlIG1hcCAoYXJlXG4gICAqIHB1cmUgb3JpZ2luYWwgc291cmNlIGZpbGVzKS5cbiAgICovXG4gIHJlYWRvbmx5IGZsYXR0ZW5lZE1hcHBpbmdzOiBNYXBwaW5nW107XG4gIHJlYWRvbmx5IHN0YXJ0T2ZMaW5lUG9zaXRpb25zOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIC8qKiBUaGUgcGF0aCB0byB0aGlzIHNvdXJjZSBmaWxlLiAqL1xuICAgICAgcmVhZG9ubHkgc291cmNlUGF0aDogQWJzb2x1dGVGc1BhdGgsXG4gICAgICAvKiogVGhlIGNvbnRlbnRzIG9mIHRoaXMgc291cmNlIGZpbGUuICovXG4gICAgICByZWFkb25seSBjb250ZW50czogc3RyaW5nLFxuICAgICAgLyoqIFRoZSByYXcgc291cmNlIG1hcCAoaWYgYW55KSByZWZlcmVuY2VkIGJ5IHRoaXMgc291cmNlIGZpbGUuICovXG4gICAgICByZWFkb25seSByYXdNYXA6IFNvdXJjZU1hcEluZm98bnVsbCxcbiAgICAgIC8qKiBBbnkgc291cmNlIGZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlIHJhdyBzb3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvdXJjZSBmaWxlLiAqL1xuICAgICAgcmVhZG9ubHkgc291cmNlczogKFNvdXJjZUZpbGV8bnVsbClbXSxcbiAgICAgIHByaXZhdGUgZnM6IFBhdGhNYW5pcHVsYXRpb24sXG4gICkge1xuICAgIHRoaXMuY29udGVudHMgPSByZW1vdmVTb3VyY2VNYXBDb21tZW50cyhjb250ZW50cyk7XG4gICAgdGhpcy5zdGFydE9mTGluZVBvc2l0aW9ucyA9IGNvbXB1dGVTdGFydE9mTGluZVBvc2l0aW9ucyh0aGlzLmNvbnRlbnRzKTtcbiAgICB0aGlzLmZsYXR0ZW5lZE1hcHBpbmdzID0gdGhpcy5mbGF0dGVuTWFwcGluZ3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHJhdyBzb3VyY2UgbWFwIGdlbmVyYXRlZCBmcm9tIHRoZSBmbGF0dGVuZWQgbWFwcGluZ3MuXG4gICAqL1xuICByZW5kZXJGbGF0dGVuZWRTb3VyY2VNYXAoKTogUmF3U291cmNlTWFwIHtcbiAgICBjb25zdCBzb3VyY2VzID0gbmV3IEluZGV4ZWRNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29uc3QgbmFtZXMgPSBuZXcgSW5kZXhlZFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgbWFwcGluZ3M6IFNvdXJjZU1hcE1hcHBpbmdzID0gW107XG4gICAgY29uc3Qgc291cmNlUGF0aERpciA9IHRoaXMuZnMuZGlybmFtZSh0aGlzLnNvdXJjZVBhdGgpO1xuICAgIC8vIENvbXB1dGluZyB0aGUgcmVsYXRpdmUgcGF0aCBjYW4gYmUgZXhwZW5zaXZlLCBhbmQgd2UgYXJlIGxpa2VseSB0byBoYXZlIHRoZSBzYW1lIHBhdGggZm9yXG4gICAgLy8gbWFueSAoaWYgbm90IGFsbCEpIG1hcHBpbmdzLlxuICAgIGNvbnN0IHJlbGF0aXZlU291cmNlUGF0aENhY2hlID1cbiAgICAgICAgbmV3IENhY2hlPHN0cmluZywgc3RyaW5nPihpbnB1dCA9PiB0aGlzLmZzLnJlbGF0aXZlKHNvdXJjZVBhdGhEaXIsIGlucHV0KSk7XG5cbiAgICBmb3IgKGNvbnN0IG1hcHBpbmcgb2YgdGhpcy5mbGF0dGVuZWRNYXBwaW5ncykge1xuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2VzLnNldChcbiAgICAgICAgICByZWxhdGl2ZVNvdXJjZVBhdGhDYWNoZS5nZXQobWFwcGluZy5vcmlnaW5hbFNvdXJjZS5zb3VyY2VQYXRoKSxcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsU291cmNlLmNvbnRlbnRzKTtcbiAgICAgIGNvbnN0IG1hcHBpbmdBcnJheTogU291cmNlTWFwU2VnbWVudCA9IFtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRTZWdtZW50LmNvbHVtbixcbiAgICAgICAgc291cmNlSW5kZXgsXG4gICAgICAgIG1hcHBpbmcub3JpZ2luYWxTZWdtZW50LmxpbmUsXG4gICAgICAgIG1hcHBpbmcub3JpZ2luYWxTZWdtZW50LmNvbHVtbixcbiAgICAgIF07XG4gICAgICBpZiAobWFwcGluZy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gbmFtZXMuYWRkKG1hcHBpbmcubmFtZSk7XG4gICAgICAgIG1hcHBpbmdBcnJheS5wdXNoKG5hbWVJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBhIG1hcHBpbmcgbGluZSBhcnJheSBmb3IgdGhpcyBtYXBwaW5nLlxuICAgICAgY29uc3QgbGluZSA9IG1hcHBpbmcuZ2VuZXJhdGVkU2VnbWVudC5saW5lO1xuICAgICAgd2hpbGUgKGxpbmUgPj0gbWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIG1hcHBpbmdzLnB1c2goW10pO1xuICAgICAgfVxuICAgICAgLy8gQWRkIHRoaXMgbWFwcGluZyB0byB0aGUgbGluZVxuICAgICAgbWFwcGluZ3NbbGluZV0ucHVzaChtYXBwaW5nQXJyYXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU1hcDogUmF3U291cmNlTWFwID0ge1xuICAgICAgdmVyc2lvbjogMyxcbiAgICAgIGZpbGU6IHRoaXMuZnMucmVsYXRpdmUoc291cmNlUGF0aERpciwgdGhpcy5zb3VyY2VQYXRoKSxcbiAgICAgIHNvdXJjZXM6IHNvdXJjZXMua2V5cyxcbiAgICAgIG5hbWVzOiBuYW1lcy52YWx1ZXMsXG4gICAgICBtYXBwaW5nczogZW5jb2RlKG1hcHBpbmdzKSxcbiAgICAgIHNvdXJjZXNDb250ZW50OiBzb3VyY2VzLnZhbHVlcyxcbiAgICB9O1xuICAgIHJldHVybiBzb3VyY2VNYXA7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgb3JpZ2luYWwgbWFwcGVkIGxvY2F0aW9uIGZvciB0aGUgZ2l2ZW4gYGxpbmVgIGFuZCBgY29sdW1uYCBpbiB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAqXG4gICAqIEZpcnN0IHdlIHNlYXJjaCBmb3IgYSBtYXBwaW5nIHdob3NlIGdlbmVyYXRlZCBzZWdtZW50IGlzIGF0IG9yIGRpcmVjdGx5IGJlZm9yZSB0aGUgZ2l2ZW5cbiAgICogbG9jYXRpb24uIFRoZW4gd2UgY29tcHV0ZSB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGdpdmVuIGxvY2F0aW9uIGFuZCB0aGUgbWF0Y2hpbmcgZ2VuZXJhdGVkXG4gICAqIHNlZ21lbnQuIEZpbmFsbHkgd2UgYXBwbHkgdGhpcyBvZmZzZXQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBzZWdtZW50IHRvIGdldCB0aGUgZGVzaXJlZFxuICAgKiBvcmlnaW5hbCBsb2NhdGlvbi5cbiAgICovXG4gIGdldE9yaWdpbmFsTG9jYXRpb24obGluZTogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6XG4gICAgICB7ZmlsZTogQWJzb2x1dGVGc1BhdGgsIGxpbmU6IG51bWJlciwgY29sdW1uOiBudW1iZXJ9fG51bGwge1xuICAgIGlmICh0aGlzLmZsYXR0ZW5lZE1hcHBpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uOiBudW1iZXI7XG4gICAgaWYgKGxpbmUgPCB0aGlzLnN0YXJ0T2ZMaW5lUG9zaXRpb25zLmxlbmd0aCkge1xuICAgICAgcG9zaXRpb24gPSB0aGlzLnN0YXJ0T2ZMaW5lUG9zaXRpb25zW2xpbmVdICsgY29sdW1uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgbGluZSBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgZmlsZSwgc28ganVzdCBhc3N1bWUgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAgICBwb3NpdGlvbiA9IHRoaXMuY29udGVudHMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uU2VnbWVudDogU2VnbWVudE1hcmtlciA9IHtsaW5lLCBjb2x1bW4sIHBvc2l0aW9uLCBuZXh0OiB1bmRlZmluZWR9O1xuXG4gICAgbGV0IG1hcHBpbmdJbmRleCA9XG4gICAgICAgIGZpbmRMYXN0TWFwcGluZ0luZGV4QmVmb3JlKHRoaXMuZmxhdHRlbmVkTWFwcGluZ3MsIGxvY2F0aW9uU2VnbWVudCwgZmFsc2UsIDApO1xuICAgIGlmIChtYXBwaW5nSW5kZXggPCAwKSB7XG4gICAgICBtYXBwaW5nSW5kZXggPSAwO1xuICAgIH1cbiAgICBjb25zdCB7b3JpZ2luYWxTZWdtZW50LCBvcmlnaW5hbFNvdXJjZSwgZ2VuZXJhdGVkU2VnbWVudH0gPVxuICAgICAgICB0aGlzLmZsYXR0ZW5lZE1hcHBpbmdzW21hcHBpbmdJbmRleF07XG4gICAgY29uc3Qgb2Zmc2V0ID0gbG9jYXRpb25TZWdtZW50LnBvc2l0aW9uIC0gZ2VuZXJhdGVkU2VnbWVudC5wb3NpdGlvbjtcbiAgICBjb25zdCBvZmZzZXRPcmlnaW5hbFNlZ21lbnQgPVxuICAgICAgICBvZmZzZXRTZWdtZW50KG9yaWdpbmFsU291cmNlLnN0YXJ0T2ZMaW5lUG9zaXRpb25zLCBvcmlnaW5hbFNlZ21lbnQsIG9mZnNldCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsZTogb3JpZ2luYWxTb3VyY2Uuc291cmNlUGF0aCxcbiAgICAgIGxpbmU6IG9mZnNldE9yaWdpbmFsU2VnbWVudC5saW5lLFxuICAgICAgY29sdW1uOiBvZmZzZXRPcmlnaW5hbFNlZ21lbnQuY29sdW1uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbiB0aGUgcGFyc2VkIG1hcHBpbmdzIGZvciB0aGlzIHNvdXJjZSBmaWxlLCBzbyB0aGF0IGFsbCB0aGUgbWFwcGluZ3MgYXJlIHRvIHB1cmUgb3JpZ2luYWxcbiAgICogc291cmNlIGZpbGVzIHdpdGggbm8gdHJhbnNpdGl2ZSBzb3VyY2UgbWFwcy5cbiAgICovXG4gIHByaXZhdGUgZmxhdHRlbk1hcHBpbmdzKCk6IE1hcHBpbmdbXSB7XG4gICAgY29uc3QgbWFwcGluZ3MgPVxuICAgICAgICBwYXJzZU1hcHBpbmdzKHRoaXMucmF3TWFwICYmIHRoaXMucmF3TWFwLm1hcCwgdGhpcy5zb3VyY2VzLCB0aGlzLnN0YXJ0T2ZMaW5lUG9zaXRpb25zKTtcbiAgICBlbnN1cmVPcmlnaW5hbFNlZ21lbnRMaW5rcyhtYXBwaW5ncyk7XG4gICAgY29uc3QgZmxhdHRlbmVkTWFwcGluZ3M6IE1hcHBpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IG1hcHBpbmdJbmRleCA9IDA7IG1hcHBpbmdJbmRleCA8IG1hcHBpbmdzLmxlbmd0aDsgbWFwcGluZ0luZGV4KyspIHtcbiAgICAgIGNvbnN0IGFUb0JtYXBwaW5nID0gbWFwcGluZ3NbbWFwcGluZ0luZGV4XTtcbiAgICAgIGNvbnN0IGJTb3VyY2UgPSBhVG9CbWFwcGluZy5vcmlnaW5hbFNvdXJjZTtcbiAgICAgIGlmIChiU291cmNlLmZsYXR0ZW5lZE1hcHBpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUaGUgYiBzb3VyY2UgZmlsZSBoYXMgbm8gbWFwcGluZ3Mgb2YgaXRzIG93biAoaS5lLiBpdCBpcyBhIHB1cmUgb3JpZ2luYWwgZmlsZSlcbiAgICAgICAgLy8gc28ganVzdCB1c2UgdGhlIG1hcHBpbmcgYXMtaXMuXG4gICAgICAgIGZsYXR0ZW5lZE1hcHBpbmdzLnB1c2goYVRvQm1hcHBpbmcpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGBpbmNvbWluZ1N0YXJ0YCBhbmQgYGluY29taW5nRW5kYCBhcmUgdGhlIGBTZWdtZW50TWFya2VyYHMgaW4gYEJgIHRoYXQgcmVwcmVzZW50IHRoZVxuICAgICAgLy8gc2VjdGlvbiBvZiBgQmAgc291cmNlIGZpbGUgdGhhdCBpcyBiZWluZyBtYXBwZWQgdG8gYnkgdGhlIGN1cnJlbnQgYGFUb0JtYXBwaW5nYC5cbiAgICAgIC8vXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIG1hcHBpbmdzIGZyb20gQSB0byBCOlxuICAgICAgLy9cbiAgICAgIC8vIHNyYyBBICAgc3JjIEIgICAgIG1hcHBpbmdcbiAgICAgIC8vXG4gICAgICAvLyAgIGEgLS0tLS0gYSAgICAgICBbMCwgMF1cbiAgICAgIC8vICAgYiAgICAgICBiXG4gICAgICAvLyAgIGYgLSAgLy0gYyAgICAgICBbNCwgMl1cbiAgICAgIC8vICAgZyAgXFwgLyAgZFxuICAgICAgLy8gICBjIC0vXFwgICBlXG4gICAgICAvLyAgIGQgICAgXFwtIGYgICAgICAgWzIsIDVdXG4gICAgICAvLyAgIGVcbiAgICAgIC8vXG4gICAgICAvLyBGb3IgbWFwcGluZyBbMCwwXSB0aGUgaW5jb21pbmcgc3RhcnQgYW5kIGVuZCBhcmUgMCBhbmQgMiAoaS5lLiB0aGUgcmFuZ2UgYSwgYiwgYylcbiAgICAgIC8vIEZvciBtYXBwaW5nIFs0LDJdIHRoZSBpbmNvbWluZyBzdGFydCBhbmQgZW5kIGFyZSAyIGFuZCA1IChpLmUuIHRoZSByYW5nZSBjLCBkLCBlLCBmKVxuICAgICAgLy9cbiAgICAgIGNvbnN0IGluY29taW5nU3RhcnQgPSBhVG9CbWFwcGluZy5vcmlnaW5hbFNlZ21lbnQ7XG4gICAgICBjb25zdCBpbmNvbWluZ0VuZCA9IGluY29taW5nU3RhcnQubmV4dDtcblxuICAgICAgLy8gVGhlIGBvdXRnb2luZ1N0YXJ0SW5kZXhgIGFuZCBgb3V0Z29pbmdFbmRJbmRleGAgYXJlIHRoZSBpbmRpY2VzIG9mIHRoZSByYW5nZSBvZiBtYXBwaW5nc1xuICAgICAgLy8gdGhhdCBsZWF2ZSBgYmAgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBtZXJnaW5nIHdpdGggdGhlIGFUb0JtYXBwaW5nLlxuICAgICAgLy8gV2UgYWN0dWFsbHkgY2FyZSBhYm91dCBhbGwgdGhlIG1hcmtlcnMgZnJvbSB0aGUgbGFzdCBiVG9DbWFwcGluZyBkaXJlY3RseSBiZWZvcmUgdGhlXG4gICAgICAvLyBgaW5jb21pbmdTdGFydGAgdG8gdGhlIGxhc3QgYlRvQ21hcGluZyBkaXJlY3RseSBiZWZvcmUgdGhlIGBpbmNvbWluZ0VuZGAsIGluY2x1c2l2ZS5cbiAgICAgIC8vXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgaWYgd2UgY29uc2lkZXIgdGhlIHJhbmdlIDIgdG8gNSBmcm9tIGFib3ZlIChpLmUuIGMsIGQsIGUsIGYpIHdpdGggdGhlXG4gICAgICAvLyBmb2xsb3dpbmcgbWFwcGluZ3MgZnJvbSBCIHRvIEM6XG4gICAgICAvL1xuICAgICAgLy8gICBzcmMgQiAgIHNyYyBDICAgICBtYXBwaW5nXG4gICAgICAvLyAgICAgYVxuICAgICAgLy8gICAgIGIgLS0tLS0gYiAgICAgICBbMSwgMF1cbiAgICAgIC8vICAgLSBjICAgICAgIGNcbiAgICAgIC8vICB8ICBkICAgICAgIGRcbiAgICAgIC8vICB8ICBlIC0tLS0tIDEgICAgICAgWzQsIDNdXG4gICAgICAvLyAgIC0gZiAgXFwgICAgMlxuICAgICAgLy8gICAgICAgICBcXCAgIDNcbiAgICAgIC8vICAgICAgICAgIFxcLSBlICAgICAgIFs0LCA2XVxuICAgICAgLy9cbiAgICAgIC8vIFRoZSByYW5nZSB3aXRoIGBpbmNvbWluZ1N0YXJ0YCBhdCAyIGFuZCBgaW5jb21pbmdFbmRgIGF0IDUgaGFzIG91dGdvaW5nIHN0YXJ0IG1hcHBpbmcgb2ZcbiAgICAgIC8vIFsxLDBdIGFuZCBvdXRnb2luZyBlbmQgbWFwcGluZyBvZiBbNCwgNl0sIHdoaWNoIGFsc28gaW5jbHVkZXMgWzQsIDNdLlxuICAgICAgLy9cbiAgICAgIGxldCBvdXRnb2luZ1N0YXJ0SW5kZXggPVxuICAgICAgICAgIGZpbmRMYXN0TWFwcGluZ0luZGV4QmVmb3JlKGJTb3VyY2UuZmxhdHRlbmVkTWFwcGluZ3MsIGluY29taW5nU3RhcnQsIGZhbHNlLCAwKTtcbiAgICAgIGlmIChvdXRnb2luZ1N0YXJ0SW5kZXggPCAwKSB7XG4gICAgICAgIG91dGdvaW5nU3RhcnRJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRnb2luZ0VuZEluZGV4ID0gaW5jb21pbmdFbmQgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgZmluZExhc3RNYXBwaW5nSW5kZXhCZWZvcmUoXG4gICAgICAgICAgICAgIGJTb3VyY2UuZmxhdHRlbmVkTWFwcGluZ3MsIGluY29taW5nRW5kLCB0cnVlLCBvdXRnb2luZ1N0YXJ0SW5kZXgpIDpcbiAgICAgICAgICBiU291cmNlLmZsYXR0ZW5lZE1hcHBpbmdzLmxlbmd0aCAtIDE7XG5cbiAgICAgIGZvciAobGV0IGJUb0NtYXBwaW5nSW5kZXggPSBvdXRnb2luZ1N0YXJ0SW5kZXg7IGJUb0NtYXBwaW5nSW5kZXggPD0gb3V0Z29pbmdFbmRJbmRleDtcbiAgICAgICAgICAgYlRvQ21hcHBpbmdJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGJUb0NtYXBwaW5nOiBNYXBwaW5nID0gYlNvdXJjZS5mbGF0dGVuZWRNYXBwaW5nc1tiVG9DbWFwcGluZ0luZGV4XTtcbiAgICAgICAgZmxhdHRlbmVkTWFwcGluZ3MucHVzaChtZXJnZU1hcHBpbmdzKHRoaXMsIGFUb0JtYXBwaW5nLCBiVG9DbWFwcGluZykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxhdHRlbmVkTWFwcGluZ3M7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIG1hcHBpbmdzIFRoZSBjb2xsZWN0aW9uIG9mIG1hcHBpbmdzIHdob3NlIHNlZ21lbnQtbWFya2VycyB3ZSBhcmUgc2VhcmNoaW5nLlxuICogQHBhcmFtIG1hcmtlciBUaGUgc2VnbWVudC1tYXJrZXIgdG8gbWF0Y2ggYWdhaW5zdCB0aG9zZSBvZiB0aGUgZ2l2ZW4gYG1hcHBpbmdzYC5cbiAqIEBwYXJhbSBleGNsdXNpdmUgSWYgZXhjbHVzaXZlIHRoZW4gd2UgbXVzdCBmaW5kIGEgbWFwcGluZyB3aXRoIGEgc2VnbWVudC1tYXJrZXIgdGhhdCBpc1xuICogZXhjbHVzaXZlbHkgZWFybGllciB0aGFuIHRoZSBnaXZlbiBgbWFya2VyYC5cbiAqIElmIG5vdCBleGNsdXNpdmUgdGhlbiB3ZSBjYW4gcmV0dXJuIHRoZSBoaWdoZXN0IG1hcHBpbmdzIHdpdGggYW4gZXF1aXZhbGVudCBzZWdtZW50LW1hcmtlciB0byB0aGVcbiAqIGdpdmVuIGBtYXJrZXJgLlxuICogQHBhcmFtIGxvd2VySW5kZXggSWYgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZCBhcyBhIGhpbnQgdGhhdCB0aGUgbWFya2VyIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGhhcyBhblxuICogaW5kZXggdGhhdCBpcyBubyBsb3dlciB0aGFuIHRoaXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdE1hcHBpbmdJbmRleEJlZm9yZShcbiAgICBtYXBwaW5nczogTWFwcGluZ1tdLCBtYXJrZXI6IFNlZ21lbnRNYXJrZXIsIGV4Y2x1c2l2ZTogYm9vbGVhbiwgbG93ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHVwcGVySW5kZXggPSBtYXBwaW5ncy5sZW5ndGggLSAxO1xuICBjb25zdCB0ZXN0ID0gZXhjbHVzaXZlID8gLTEgOiAwO1xuXG4gIGlmIChjb21wYXJlU2VnbWVudHMobWFwcGluZ3NbbG93ZXJJbmRleF0uZ2VuZXJhdGVkU2VnbWVudCwgbWFya2VyKSA+IHRlc3QpIHtcbiAgICAvLyBFeGl0IGVhcmx5IHNpbmNlIHRoZSBtYXJrZXIgaXMgb3V0c2lkZSB0aGUgYWxsb3dlZCByYW5nZSBvZiBtYXBwaW5ncy5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBsZXQgbWF0Y2hpbmdJbmRleCA9IC0xO1xuICB3aGlsZSAobG93ZXJJbmRleCA8PSB1cHBlckluZGV4KSB7XG4gICAgY29uc3QgaW5kZXggPSAodXBwZXJJbmRleCArIGxvd2VySW5kZXgpID4+IDE7XG4gICAgaWYgKGNvbXBhcmVTZWdtZW50cyhtYXBwaW5nc1tpbmRleF0uZ2VuZXJhdGVkU2VnbWVudCwgbWFya2VyKSA8PSB0ZXN0KSB7XG4gICAgICBtYXRjaGluZ0luZGV4ID0gaW5kZXg7XG4gICAgICBsb3dlckluZGV4ID0gaW5kZXggKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cHBlckluZGV4ID0gaW5kZXggLSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hpbmdJbmRleDtcbn1cblxuLyoqXG4gKiBBIE1hcHBpbmcgY29uc2lzdHMgb2YgdHdvIHNlZ21lbnQgbWFya2Vyczogb25lIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlIGFuZCBvbmUgaW4gdGhlIG9yaWdpbmFsXG4gKiBzb3VyY2UsIHdoaWNoIGluZGljYXRlIHRoZSBzdGFydCBvZiBlYWNoIHNlZ21lbnQuIFRoZSBlbmQgb2YgYSBzZWdtZW50IGlzIGluZGljYXRlZCBieSB0aGUgZmlyc3RcbiAqIHNlZ21lbnQgbWFya2VyIG9mIGFub3RoZXIgbWFwcGluZyB3aG9zZSBzdGFydCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoaXMgb25lLlxuICpcbiAqIEl0IG1heSBhbHNvIGluY2x1ZGUgYSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VnbWVudCBiZWluZyBtYXBwZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFwcGluZyB7XG4gIHJlYWRvbmx5IGdlbmVyYXRlZFNlZ21lbnQ6IFNlZ21lbnRNYXJrZXI7XG4gIHJlYWRvbmx5IG9yaWdpbmFsU291cmNlOiBTb3VyY2VGaWxlO1xuICByZWFkb25seSBvcmlnaW5hbFNlZ21lbnQ6IFNlZ21lbnRNYXJrZXI7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG59XG5cblxuXG4vKipcbiAqIE1lcmdlIHR3byBtYXBwaW5ncyB0aGF0IGdvIGZyb20gQSB0byBCIGFuZCBCIHRvIEMsIHRvIHJlc3VsdCBpbiBhIG1hcHBpbmcgdGhhdCBnb2VzIGZyb20gQSB0byBDLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VNYXBwaW5ncyhnZW5lcmF0ZWRTb3VyY2U6IFNvdXJjZUZpbGUsIGFiOiBNYXBwaW5nLCBiYzogTWFwcGluZyk6IE1hcHBpbmcge1xuICBjb25zdCBuYW1lID0gYmMubmFtZSB8fCBhYi5uYW1lO1xuXG4gIC8vIFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBzZWdtZW50LW1hcmtlcnMgb2YgdGhlIG5ldyBtYXBwaW5nIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBzaGlmdHMgdGhhdFxuICAvLyBvY2N1ciBkdWUgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gbWFwcGluZ3MuXG4gIC8vIEZvciBleGFtcGxlOlxuXG4gIC8vICogU2ltcGxlIG1hcCB3aGVyZSB0aGUgQi0+QyBzdGFydHMgYXQgdGhlIHNhbWUgcGxhY2UgdGhlIEEtPkIgZW5kczpcbiAgLy9cbiAgLy8gYGBgXG4gIC8vIEE6IDEgMiBiIGMgZFxuICAvLyAgICAgICAgfCAgICAgICAgQS0+QiBbMiwwXVxuICAvLyAgICAgICAgfCAgICAgICAgICAgICAgfFxuICAvLyBCOiAgICAgYiBjIGQgICAgQS0+QyBbMiwxXVxuICAvLyAgICAgICAgfCAgICAgICAgICAgICAgICB8XG4gIC8vICAgICAgICB8ICAgICAgICBCLT5DIFswLDFdXG4gIC8vIEM6ICAgYSBiIGMgZCBlXG4gIC8vIGBgYFxuXG4gIC8vICogTW9yZSBjb21wbGljYXRlZCBjYXNlIHdoZXJlIGRpZmZzIG9mIHNlZ21lbnQtbWFya2VycyBpcyBuZWVkZWQ6XG4gIC8vXG4gIC8vIGBgYFxuICAvLyBBOiBiIDEgMiBjIGRcbiAgLy8gICAgIFxcXG4gIC8vICAgICAgfCAgICAgICAgICAgIEEtPkIgIFswLDEqXSAgICBbMCwxKl1cbiAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8KzNcbiAgLy8gQjogYSBiIDEgMiBjIGQgICAgQS0+QyAgWzAsMV0gICAgIFszLDJdXG4gIC8vICAgIHwgICAgICAvICAgICAgICAgICAgICAgIHwrMSAgICAgICB8XG4gIC8vICAgIHwgICAgIC8gICAgICAgIEItPkMgWzAqLDBdICAgIFs0KiwyXVxuICAvLyAgICB8ICAgIC9cbiAgLy8gQzogYSBiIGMgZCBlXG4gIC8vIGBgYFxuICAvL1xuICAvLyBgWzAsMV1gIG1hcHBpbmcgZnJvbSBBLT5DOlxuICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBcIm9yaWdpbmFsIHNlZ21lbnQtbWFya2VyXCIgb2YgQS0+QiAoMSopIGFuZCB0aGUgXCJnZW5lcmF0ZWRcbiAgLy8gc2VnbWVudC1tYXJrZXIgb2YgQi0+QyAoMCopOiBgMSAtIDAgPSArMWAuXG4gIC8vIFNpbmNlIGl0IGlzIHBvc2l0aXZlIHdlIG11c3QgaW5jcmVtZW50IHRoZSBcIm9yaWdpbmFsIHNlZ21lbnQtbWFya2VyXCIgd2l0aCBgMWAgdG8gZ2l2ZSBbMCwxXS5cbiAgLy9cbiAgLy8gYFszLDJdYCBtYXBwaW5nIGZyb20gQS0+QzpcbiAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgXCJvcmlnaW5hbCBzZWdtZW50LW1hcmtlclwiIG9mIEEtPkIgKDEqKSBhbmQgdGhlIFwiZ2VuZXJhdGVkXG4gIC8vIHNlZ21lbnQtbWFya2VyXCIgb2YgQi0+QyAoNCopOiBgMSAtIDQgPSAtM2AuXG4gIC8vIFNpbmNlIGl0IGlzIG5lZ2F0aXZlIHdlIG11c3QgaW5jcmVtZW50IHRoZSBcImdlbmVyYXRlZCBzZWdtZW50LW1hcmtlclwiIHdpdGggYDNgIHRvIGdpdmUgWzMsMl0uXG5cbiAgY29uc3QgZGlmZiA9IGNvbXBhcmVTZWdtZW50cyhiYy5nZW5lcmF0ZWRTZWdtZW50LCBhYi5vcmlnaW5hbFNlZ21lbnQpO1xuICBpZiAoZGlmZiA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGdlbmVyYXRlZFNlZ21lbnQ6XG4gICAgICAgICAgb2Zmc2V0U2VnbWVudChnZW5lcmF0ZWRTb3VyY2Uuc3RhcnRPZkxpbmVQb3NpdGlvbnMsIGFiLmdlbmVyYXRlZFNlZ21lbnQsIGRpZmYpLFxuICAgICAgb3JpZ2luYWxTb3VyY2U6IGJjLm9yaWdpbmFsU291cmNlLFxuICAgICAgb3JpZ2luYWxTZWdtZW50OiBiYy5vcmlnaW5hbFNlZ21lbnQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGdlbmVyYXRlZFNlZ21lbnQ6IGFiLmdlbmVyYXRlZFNlZ21lbnQsXG4gICAgICBvcmlnaW5hbFNvdXJjZTogYmMub3JpZ2luYWxTb3VyY2UsXG4gICAgICBvcmlnaW5hbFNlZ21lbnQ6XG4gICAgICAgICAgb2Zmc2V0U2VnbWVudChiYy5vcmlnaW5hbFNvdXJjZS5zdGFydE9mTGluZVBvc2l0aW9ucywgYmMub3JpZ2luYWxTZWdtZW50LCAtZGlmZiksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBgcmF3TWFwcGluZ3NgIGludG8gYW4gYXJyYXkgb2YgcGFyc2VkIG1hcHBpbmdzLCB3aGljaCByZWZlcmVuY2Ugc291cmNlLWZpbGVzIHByb3ZpZGVkXG4gKiBpbiB0aGUgYHNvdXJjZXNgIHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWFwcGluZ3MoXG4gICAgcmF3TWFwOiBSYXdTb3VyY2VNYXB8bnVsbCwgc291cmNlczogKFNvdXJjZUZpbGV8bnVsbClbXSxcbiAgICBnZW5lcmF0ZWRTb3VyY2VTdGFydE9mTGluZVBvc2l0aW9uczogbnVtYmVyW10pOiBNYXBwaW5nW10ge1xuICBpZiAocmF3TWFwID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcmF3TWFwcGluZ3MgPSBkZWNvZGUocmF3TWFwLm1hcHBpbmdzKTtcbiAgaWYgKHJhd01hcHBpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbWFwcGluZ3M6IE1hcHBpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBnZW5lcmF0ZWRMaW5lID0gMDsgZ2VuZXJhdGVkTGluZSA8IHJhd01hcHBpbmdzLmxlbmd0aDsgZ2VuZXJhdGVkTGluZSsrKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkTGluZU1hcHBpbmdzID0gcmF3TWFwcGluZ3NbZ2VuZXJhdGVkTGluZV07XG4gICAgZm9yIChjb25zdCByYXdNYXBwaW5nIG9mIGdlbmVyYXRlZExpbmVNYXBwaW5ncykge1xuICAgICAgaWYgKHJhd01hcHBpbmcubGVuZ3RoID49IDQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2VzW3Jhd01hcHBpbmdbMV0hXTtcbiAgICAgICAgaWYgKG9yaWdpbmFsU291cmNlID09PSBudWxsIHx8IG9yaWdpbmFsU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgc291cmNlIGlzIG1pc3Npbmcgc28gaWdub3JlIHRoaXMgbWFwcGluZ1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbiA9IHJhd01hcHBpbmdbMF07XG4gICAgICAgIGNvbnN0IG5hbWUgPSByYXdNYXBwaW5nLmxlbmd0aCA9PT0gNSA/IHJhd01hcC5uYW1lc1tyYXdNYXBwaW5nWzRdXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbGluZSA9IHJhd01hcHBpbmdbMl0hO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSByYXdNYXBwaW5nWzNdITtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkU2VnbWVudDogU2VnbWVudE1hcmtlciA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRMaW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICAgIHBvc2l0aW9uOiBnZW5lcmF0ZWRTb3VyY2VTdGFydE9mTGluZVBvc2l0aW9uc1tnZW5lcmF0ZWRMaW5lXSArIGdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2VnbWVudDogU2VnbWVudE1hcmtlciA9IHtcbiAgICAgICAgICBsaW5lLFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBwb3NpdGlvbjogb3JpZ2luYWxTb3VyY2Uuc3RhcnRPZkxpbmVQb3NpdGlvbnNbbGluZV0gKyBjb2x1bW4sXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgICBtYXBwaW5ncy5wdXNoKHtuYW1lLCBnZW5lcmF0ZWRTZWdtZW50LCBvcmlnaW5hbFNlZ21lbnQsIG9yaWdpbmFsU291cmNlfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXBwaW5ncztcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBzZWdtZW50IG1hcmtlcnMgZnJvbSB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzIGluIGVhY2ggbWFwcGluZyBvZiBhbiBhcnJheSBvZlxuICogYG1hcHBpbmdzYC5cbiAqXG4gKiBAcGFyYW0gbWFwcGluZ3MgVGhlIG1hcHBpbmdzIHdob3NlIG9yaWdpbmFsIHNlZ21lbnRzIHdlIHdhbnQgdG8gZXh0cmFjdFxuICogQHJldHVybnMgUmV0dXJuIGEgbWFwIGZyb20gb3JpZ2luYWwgc291cmNlLWZpbGVzIChyZWZlcmVuY2VkIGluIHRoZSBgbWFwcGluZ3NgKSB0byBhcnJheXMgb2ZcbiAqIHNlZ21lbnQtbWFya2VycyBzb3J0ZWQgYnkgdGhlaXIgb3JkZXIgaW4gdGhlaXIgc291cmNlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0T3JpZ2luYWxTZWdtZW50cyhtYXBwaW5nczogTWFwcGluZ1tdKTogTWFwPFNvdXJjZUZpbGUsIFNlZ21lbnRNYXJrZXJbXT4ge1xuICBjb25zdCBvcmlnaW5hbFNlZ21lbnRzID0gbmV3IE1hcDxTb3VyY2VGaWxlLCBTZWdtZW50TWFya2VyW10+KCk7XG4gIGZvciAoY29uc3QgbWFwcGluZyBvZiBtYXBwaW5ncykge1xuICAgIGNvbnN0IG9yaWdpbmFsU291cmNlID0gbWFwcGluZy5vcmlnaW5hbFNvdXJjZTtcbiAgICBpZiAoIW9yaWdpbmFsU2VnbWVudHMuaGFzKG9yaWdpbmFsU291cmNlKSkge1xuICAgICAgb3JpZ2luYWxTZWdtZW50cy5zZXQob3JpZ2luYWxTb3VyY2UsIFtdKTtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudHMgPSBvcmlnaW5hbFNlZ21lbnRzLmdldChvcmlnaW5hbFNvdXJjZSkhO1xuICAgIHNlZ21lbnRzLnB1c2gobWFwcGluZy5vcmlnaW5hbFNlZ21lbnQpO1xuICB9XG4gIG9yaWdpbmFsU2VnbWVudHMuZm9yRWFjaChzZWdtZW50TWFya2VycyA9PiBzZWdtZW50TWFya2Vycy5zb3J0KGNvbXBhcmVTZWdtZW50cykpO1xuICByZXR1cm4gb3JpZ2luYWxTZWdtZW50cztcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIG9yaWdpbmFsIHNlZ21lbnRzIG9mIGVhY2ggb2YgdGhlIGdpdmVuIGBtYXBwaW5nc2AgdG8gaW5jbHVkZSBhIGxpbmsgdG8gdGhlIG5leHRcbiAqIHNlZ21lbnQgaW4gdGhlIHNvdXJjZSBmaWxlLlxuICpcbiAqIEBwYXJhbSBtYXBwaW5ncyB0aGUgbWFwcGluZ3Mgd2hvc2Ugc2VnbWVudHMgc2hvdWxkIGJlIHVwZGF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU9yaWdpbmFsU2VnbWVudExpbmtzKG1hcHBpbmdzOiBNYXBwaW5nW10pOiB2b2lkIHtcbiAgY29uc3Qgc2VnbWVudHNCeVNvdXJjZSA9IGV4dHJhY3RPcmlnaW5hbFNlZ21lbnRzKG1hcHBpbmdzKTtcbiAgc2VnbWVudHNCeVNvdXJjZS5mb3JFYWNoKG1hcmtlcnMgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIG1hcmtlcnNbaV0ubmV4dCA9IG1hcmtlcnNbaSArIDFdO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3RhcnRPZkxpbmVQb3NpdGlvbnMoc3RyOiBzdHJpbmcpIHtcbiAgLy8gVGhlIGAxYCBpcyB0byBpbmRpY2F0ZSBhIG5ld2xpbmUgY2hhcmFjdGVyIGJldHdlZW4gdGhlIGxpbmVzLlxuICAvLyBOb3RlIHRoYXQgaW4gdGhlIGFjdHVhbCBjb250ZW50cyB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciB0aGF0IGluZGljYXRlcyBhXG4gIC8vIG5ld2xpbmVcbiAgLy8gLSBlLmcuIFxcclxcbiAtIGJ1dCB0aGF0IGlzIG5vdCBpbXBvcnRhbnQgaGVyZSBzaW5jZSBzZWdtZW50LW1hcmtlcnMgYXJlIGluIGxpbmUvY29sdW1uIHBhaXJzIGFuZFxuICAvLyBzbyBkaWZmZXJlbmNlcyBpbiBsZW5ndGggZHVlIHRvIGV4dHJhIGBcXHJgIGNoYXJhY3RlcnMgZG8gbm90IGFmZmVjdCB0aGUgYWxnb3JpdGhtcy5cbiAgY29uc3QgTkVXTElORV9NQVJLRVJfT0ZGU0VUID0gMTtcbiAgY29uc3QgbGluZUxlbmd0aHMgPSBjb21wdXRlTGluZUxlbmd0aHMoc3RyKTtcbiAgY29uc3Qgc3RhcnRQb3NpdGlvbnMgPSBbMF07ICAvLyBGaXJzdCBsaW5lIHN0YXJ0cyBhdCBwb3NpdGlvbiAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUxlbmd0aHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgc3RhcnRQb3NpdGlvbnMucHVzaChzdGFydFBvc2l0aW9uc1tpXSArIGxpbmVMZW5ndGhzW2ldICsgTkVXTElORV9NQVJLRVJfT0ZGU0VUKTtcbiAgfVxuICByZXR1cm4gc3RhcnRQb3NpdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVMaW5lTGVuZ3RocyhzdHI6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgcmV0dXJuIChzdHIuc3BsaXQoL1xcbi8pKS5tYXAocyA9PiBzLmxlbmd0aCk7XG59XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIG1hcHBpbmdzIGJldHdlZW4gYGtleXNgIGFuZCBgdmFsdWVzYCBzdG9yZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBrZXlzIGFyZVxuICogZmlyc3Qgc2Vlbi5cbiAqXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIGEgc3RhbmRhcmQgYE1hcGAgaXMgdGhhdCB3aGVuIHlvdSBhZGQgYSBrZXktdmFsdWUgcGFpciB0aGUgaW5kZXhcbiAqIG9mIHRoZSBga2V5YCBpcyByZXR1cm5lZC5cbiAqL1xuY2xhc3MgSW5kZXhlZE1hcDxLLCBWPiB7XG4gIHByaXZhdGUgbWFwID0gbmV3IE1hcDxLLCBudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGtleXMgYWRkZWQgdG8gdGhpcyBtYXAuXG4gICAqXG4gICAqIFRoaXMgYXJyYXkgaXMgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUgb3JkZXIgb2YgdGhlIGZpcnN0IHRpbWUgdGhlIGtleSB3YXMgYWRkZWQgdG8gdGhlIG1hcC5cbiAgICovXG4gIHJlYWRvbmx5IGtleXM6IEtbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgYWRkZWQgdG8gdGhpcyBtYXAuXG4gICAqXG4gICAqIFRoaXMgYXJyYXkgaXMgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUgb3JkZXIgb2YgdGhlIGZpcnN0IHRpbWUgdGhlIGFzc29jaWF0ZWQga2V5IHdhcyBhZGRlZCB0b1xuICAgKiB0aGUgbWFwLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBWW10gPSBbXTtcblxuICAvKipcbiAgICogQXNzb2NpYXRlIHRoZSBgdmFsdWVgIHdpdGggdGhlIGBrZXlgIGFuZCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBrZXkgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIElmIHRoZSBga2V5YCBhbHJlYWR5IGV4aXN0cyB0aGVuIHRoZSBgdmFsdWVgIGlzIG5vdCBzZXQgYW5kIHRoZSBpbmRleCBvZiB0aGF0IGBrZXlgIGlzXG4gICAqIHJldHVybmVkOyBvdGhlcndpc2UgdGhlIGBrZXlgIGFuZCBgdmFsdWVgIGFyZSBzdG9yZWQgYW5kIHRoZSBpbmRleCBvZiB0aGUgbmV3IGBrZXlgIGlzXG4gICAqIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gYXNzb2NpYXRlZCB3aXRoIHRoZSBgdmFsdWVgLlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGtleWAuXG4gICAqIEByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYGtleWAgaW4gdGhlIGBrZXlzYCBhcnJheS5cbiAgICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoa2V5KSE7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZXMucHVzaCh2YWx1ZSkgLSAxO1xuICAgIHRoaXMua2V5cy5wdXNoKGtleSk7XG4gICAgdGhpcy5tYXAuc2V0KGtleSwgaW5kZXgpO1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxufVxuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBgdmFsdWVzYCBzdG9yZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBhZGRlZC5cbiAqXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIGEgc3RhbmRhcmQgYFNldGAgaXMgdGhhdCB3aGVuIHlvdSBhZGQgYSB2YWx1ZSB0aGUgaW5kZXggb2YgdGhhdFxuICogaXRlbSBpcyByZXR1cm5lZC5cbiAqL1xuY2xhc3MgSW5kZXhlZFNldDxWPiB7XG4gIHByaXZhdGUgbWFwID0gbmV3IE1hcDxWLCBudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHZhbHVlcyBhZGRlZCB0byB0aGlzIHNldC5cbiAgICogVGhpcyBhcnJheSBpcyBndWFyYW50ZWVkIHRvIGJlIGluIHRoZSBvcmRlciBvZiB0aGUgZmlyc3QgdGltZSB0aGUgdmFsdWUgd2FzIGFkZGVkIHRvIHRoZSBzZXQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM6IFZbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGB2YWx1ZWAgdG8gdGhlIGB2YWx1ZXNgIGFycmF5LCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Q7IHJldHVybmluZyB0aGUgaW5kZXggb2YgdGhlXG4gICAqIGB2YWx1ZWAgaW4gdGhlIGB2YWx1ZXNgIGFycmF5LlxuICAgKlxuICAgKiBJZiB0aGUgYHZhbHVlYCBhbHJlYWR5IGV4aXN0cyB0aGVuIHRoZSBpbmRleCBvZiB0aGF0IGB2YWx1ZWAgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgbmV3XG4gICAqIGB2YWx1ZWAgaXMgc3RvcmVkIGFuZCB0aGUgbmV3IGluZGV4IHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFkZCB0byB0aGUgc2V0LlxuICAgKiBAcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGB2YWx1ZWAgaW4gdGhlIGB2YWx1ZXNgIGFycmF5LlxuICAgKi9cbiAgYWRkKHZhbHVlOiBWKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFwLmdldCh2YWx1ZSkhO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWVzLnB1c2godmFsdWUpIC0gMTtcbiAgICB0aGlzLm1hcC5zZXQodmFsdWUsIGluZGV4KTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbn1cblxuY2xhc3MgQ2FjaGU8SW5wdXQsIENhY2hlZD4ge1xuICBwcml2YXRlIG1hcCA9IG5ldyBNYXA8SW5wdXQsIENhY2hlZD4oKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb21wdXRlRm46IChpbnB1dDogSW5wdXQpID0+IENhY2hlZCkge31cbiAgZ2V0KGlucHV0OiBJbnB1dCk6IENhY2hlZCB7XG4gICAgaWYgKCF0aGlzLm1hcC5oYXMoaW5wdXQpKSB7XG4gICAgICB0aGlzLm1hcC5zZXQoaW5wdXQsIHRoaXMuY29tcHV0ZUZuKGlucHV0KSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hcC5nZXQoaW5wdXQpITtcbiAgfVxufVxuIl19