obsidian-dev-utils 93.0.0 → 93.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,6 +27,7 @@ const COMMUNITY_PLUGINS_STATE_KEY = "communityPluginEntriesPromise";
27
27
  const COMMUNITY_PLUGINS_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json";
28
28
  const DATA_JSON_INDENT = 2;
29
29
  var ConfigureCommunityPluginResult = /* @__PURE__ */ ((ConfigureCommunityPluginResult2) => {
30
+ ConfigureCommunityPluginResult2["AppliedLive"] = "appliedLive";
30
31
  ConfigureCommunityPluginResult2["Skipped"] = "skipped";
31
32
  ConfigureCommunityPluginResult2["Success"] = "success";
32
33
  return ConfigureCommunityPluginResult2;
@@ -34,6 +35,13 @@ var ConfigureCommunityPluginResult = /* @__PURE__ */ ((ConfigureCommunityPluginR
34
35
  async function configureCommunityPlugin(params) {
35
36
  const { app, settings } = params;
36
37
  const pluginId = await resolveCommunityPluginId(params);
38
+ const settingsComponent = getSettingsComponent(app.plugins.plugins[pluginId]);
39
+ if (checkHasEditAndSave(settingsComponent)) {
40
+ await settingsComponent.editAndSave((pluginSettings) => {
41
+ Object.assign(pluginSettings, settings);
42
+ });
43
+ return "appliedLive" /* AppliedLive */;
44
+ }
37
45
  const dataPath = `${app.vault.configDir}/plugins/${pluginId}/data.json`;
38
46
  let data = {};
39
47
  if (await app.vault.adapter.exists(dataPath)) {
@@ -136,6 +144,9 @@ async function uninstallCommunityPlugin(params) {
136
144
  }
137
145
  await app.plugins.uninstallPlugin(pluginId);
138
146
  }
147
+ function checkHasEditAndSave(settingsComponent) {
148
+ return typeof settingsComponent === "object" && settingsComponent !== null && "editAndSave" in settingsComponent && typeof settingsComponent.editAndSave === "function";
149
+ }
139
150
  async function fetchCommunityPluginEntries() {
140
151
  const response = await requestUrl(COMMUNITY_PLUGINS_URL);
141
152
  return response.json;
@@ -154,6 +165,12 @@ async function getPluginManifest(repo, version) {
154
165
  const response = await requestUrl(`https://github.com/${repo}/releases/download/${version}/manifest.json`);
155
166
  return response.json;
156
167
  }
168
+ function getSettingsComponent(plugin) {
169
+ if (typeof plugin !== "object" || plugin === null || !("pluginSettingsComponent" in plugin)) {
170
+ return null;
171
+ }
172
+ return plugin.pluginSettingsComponent;
173
+ }
157
174
  async function resolveCommunityPluginId(reference) {
158
175
  if ("pluginId" in reference) {
159
176
  return reference.pluginId;
@@ -179,4 +196,4 @@ export {
179
196
  toggleInstallCommunityPlugin,
180
197
  uninstallCommunityPlugin
181
198
  };
182
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgXG4gKiBvciBgcGx1Z2luTmFtZWA7IGBzZXR0aW5nc2AgaXMgb3B0aW9uYWwgKG9taXQgZm9yIGEgcGx1Z2luIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbikuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgUGFydGlhbDxDb21tdW5pdHlQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBpZC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5SWRSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGRpc3BsYXkgbmFtZSAoYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHJlZ2lzdHJ5KS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiBPYnNpZGlhbidzIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gYXV0aG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSBhIGNvbW11bml0eS1wbHVnaW4gb3BlcmF0aW9uIHJ1bnMgYWdhaW5zdC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyB0byBtZXJnZSBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG9iamVjdCBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBwbHVnaW4ncyBleGlzdGluZyBgZGF0YS5qc29uYCAodGhlIGZpbGUgaXMgY3JlYXRlZCBpZlxuICAgKiBhYnNlbnQpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGU6IGB0cnVlYCBlbmFibGVzIHRoZSBwbHVnaW4sIGBmYWxzZWAgZGlzYWJsZXMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlOiBgdHJ1ZWAgaW5zdGFsbHMgdGhlIHBsdWdpbiwgYGZhbHNlYCB1bmluc3RhbGxzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnN0YWxsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBhIEdpdEh1YiByZWxlYXNlIHdlIHJlYWQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZywgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFnX25hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZID0gJ2NvbW11bml0eVBsdWdpbkVudHJpZXNQcm9taXNlJztcbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9IRUFEL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuY29uc3QgREFUQV9KU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuZXhwb3J0IGVudW0gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyB3ZXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcGx1Z2luJ3MgYGRhdGEuanNvbmAsIHNvIG5vdGhpbmcgd2FzIHdyaXR0ZW4uXG4gICAqL1xuICBTa2lwcGVkID0gJ3NraXBwZWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3Mgd2VyZSBtZXJnZWQgaW50byB0aGUgcGx1Z2luJ3MgYGRhdGEuanNvbmAsIHdoaWNoIHdhcyB3cml0dGVuLlxuICAgKi9cbiAgU3VjY2VzcyA9ICdzdWNjZXNzJ1xufVxuXG4vKipcbiAqIFdyaXRlcyBzZXR0aW5ncyBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLCBzaGFsbG93LW1lcmdpbmcgdGhlbSBvdmVyIGFueSBleGlzdGluZyBzZXR0aW5nc1xuICogKGNyZWF0aW5nIHRoZSBmaWxlIGlmIGFic2VudCkuIFdyaXRpbmcgc2V0dGluZ3MgQkVGT1JFIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBtYWtlcyBpdCBsb2FkIGFscmVhZHlcbiAqIGNvbmZpZ3VyZWQsIHdpdGggbm8gcmVsb2FkLiBBIG5vLW9wIHdyaXRlIGlzIHNraXBwZWQ6IHdoZW4gdGhlIG1lcmdlIGNoYW5nZXMgbm90aGluZywgdGhlIGZpbGUgaXMgbGVmdFxuICogdW50b3VjaGVkIGFuZCB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlNraXBwZWR9IGlzIHJldHVybmVkLCBzbyBhIGNhbGxlciBjYW4gYXZvaWRcbiAqIHJlbG9hZGluZyBhbiBhbHJlYWR5LWNvcnJlY3RseS1jb25maWd1cmVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3N9IGlmIHRoZVxuICogYGRhdGEuanNvbmAgY29udGVudCBjaGFuZ2VkIChhbmQgd2FzIHdyaXR0ZW4pLCBvciB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlNraXBwZWR9IGlmIHRoZVxuICogc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IHByZXNlbnQgKG5vdGhpbmcgd3JpdHRlbikuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQ+IHtcbiAgY29uc3QgeyBhcHAsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGNvbnN0IGRhdGFQYXRoID0gYCR7YXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3BsdWdpbklkfS9kYXRhLmpzb25gO1xuXG4gIGxldCBkYXRhOiBvYmplY3QgPSB7fTtcbiAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhkYXRhUGF0aCkpIHtcbiAgICBjb25zdCBwYXJzZWQ6IHVua25vd24gPSBKU09OLnBhcnNlKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnJlYWQoZGF0YVBhdGgpKTtcbiAgICBpZiAocGFyc2VkICE9PSBudWxsICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICBkYXRhID0gcGFyc2VkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlcmlhbGl6ZWRCZWZvcmUgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgT2JqZWN0LmFzc2lnbihkYXRhLCBzZXR0aW5ncyk7XG4gIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSA9PT0gc2VyaWFsaXplZEJlZm9yZSkge1xuICAgIHJldHVybiBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU2tpcHBlZDtcbiAgfVxuXG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBTdHJpbmcoSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgREFUQV9KU09OX0lOREVOVCkpO1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci53cml0ZShkYXRhUGF0aCwgYCR7c2VyaWFsaXplZH1cXG5gKTtcbiAgcmV0dXJuIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzO1xufVxuXG4vKipcbiAqIERpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZGlzYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgb2YgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gT2JzaWRpYW4ncyBwdWJsaWNcbiAqIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgaXMgZmV0Y2hlZCBvbmNlIGFuZCBjYWNoZWQgb24gdGhlIHNoYXJlZCBwbHVnaW4gc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHM7IGEgZmFpbGVkXG4gKiBmZXRjaCBpcyBub3QgY2FjaGVkLCBzbyBhIGxhdGVyIGNhbGwgcmV0cmllcy5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIGlkIHRvIGxvb2sgdXAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCByZXBvc2l0b3J5LCBvciBgbnVsbGAgaWYgdGhlXG4gKiBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBwbHVnaW5JZCk7XG4gIHJldHVybiBlbnRyeT8ucmVwbyA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uICh0aGUgcmVsZWFzZSBgdGFnX25hbWVgLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2ApIG9mIGFcbiAqIEdpdEh1YiByZXBvc2l0b3J5LlxuICpcbiAqIEBwYXJhbSByZXBvIC0gVGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L3JlbGVhc2VzL2xhdGVzdGApO1xuICBjb25zdCByZWxlYXNlID0gcmVzcG9uc2UuanNvbiBhcyBHaXRIdWJSZWxlYXNlO1xuICByZXR1cm4gcmVsZWFzZS50YWdfbmFtZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSB0aGUgb2ZmaWNpYWwgc3RvcmUgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhXG4gKiBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFJlc29sdmVzIHRoZSBwbHVnaW4ncyByZXBvc2l0b3J5IGZyb20gT2JzaWRpYW4nc1xuICogY29tbXVuaXR5IHJlZ2lzdHJ5LCByZWFkcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiBhbmQgaXRzIG1hbmlmZXN0LCBhbmQgaW5zdGFsbHMgaXQgdGhyb3VnaFxuICogT2JzaWRpYW4ncyBvd24gYGluc3RhbGxQbHVnaW5gIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKE9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMubWFuaWZlc3RzLCBwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXBvID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZCk7XG4gIGlmICghcmVwbykge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luICcke3BsdWdpbklkfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbyk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgZ2V0UGx1Z2luTWFuaWZlc3QocmVwbywgdmVyc2lvbik7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4ocmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiwgd3JpdGVzIGl0cyBzZXR0aW5ncywgVEhFTiBlbmFibGVzIGl0IFx1MjAxNCBpbiB0aGF0IG9yZGVyIFx1MjAxNCBzbyB0aGUgcGx1Z2luXG4gKiBsb2FkcyBhbHJlYWR5IGNvbmZpZ3VyZWQgKGEgcGx1Z2luIGVuYWJsZWQgYmVmb3JlIGl0IGlzIGNvbmZpZ3VyZWQgcnVucyBpdHMgYG9ubG9hZGAgd2l0aCBkZWZhdWx0XG4gKiBzZXR0aW5ncyBhbmQgZG9lcyBub3RoaW5nIHVzZWZ1bCkuIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkIGFuZCB0aGUgc2V0dGluZ3MgY2hhbmdlZCwgaXQgaXNcbiAqIGRpc2FibGVkIGFuZCByZS1lbmFibGVkIHNvIHRoZSBuZXcgc2V0dGluZ3MgdGFrZSBlZmZlY3QuIGBzZXR0aW5nc2AgaXMgb3B0aW9uYWw6IG9taXQgaXQgZm9yIGEgcGx1Z2luXG4gKiB0aGF0IG5lZWRzIG5vIGNvbmZpZ3VyYXRpb24uIENvbXBvc2VzIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwge0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0sXG4gKiB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufSBhbmQge0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkIGFuZCBlbmFibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBJbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIGNvbnN0IGRpZFNldHRpbmdzQ2hhbmdlID0gc2V0dGluZ3MgPyBhd2FpdCBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4oeyAuLi5wYXJhbXMsIHNldHRpbmdzIH0pID09PSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2VzcyA6IGZhbHNlO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIGlmIChkaWRTZXR0aW5nc0NoYW5nZSkge1xuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlYXJjaGVzIE9ic2lkaWFuJ3MgcHVibGljIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIGlkIGFuZCBkaXNwbGF5IG5hbWUgb2YgZXZlcnlcbiAqIHBsdWdpbiB3aG9zZSBpZCwgbmFtZSwgYXV0aG9yIG9yIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBxdWVyeSAoY2FzZS1pbnNlbnNpdGl2ZSkuIEFuIGVtcHR5IHF1ZXJ5XG4gKiBtYXRjaGVzIGV2ZXJ5IHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcXVlcnkgLSBUaGUgc2VhcmNoIHF1ZXJ5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBtYXRjaGluZyBwbHVnaW5zJyB7QGxpbmsgQ29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0fXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWFyY2hDb21tdW5pdHlQbHVnaW5zKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdFtdPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBlbnRyaWVzXG4gICAgLmZpbHRlcigoZW50cnkpID0+XG4gICAgICBlbnRyeS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5hdXRob3IudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICApXG4gICAgLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICBpZDogZW50cnkuaWQsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lXG4gICAgfSkpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIHRvIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBlbmFibGVDb21tdW5pdHlQbHVnaW59IC8ge0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LCBzbyBpdCBpcyBpZGVtcG90ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBtYXRjaGVzIHRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGUuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNFbmFibGVkKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogSW5zdGFsbHMgb3IgdW5pbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59IC8ge0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBtYXRjaGVzIHRoZSBkZXNpcmVkIGluc3RhbGxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgaW5zdGFsbGluZyBhbmQgdGhlIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGFyYW1zLmlzSW5zdGFsbGVkKSB7XG4gICAgYXdhaXQgaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHVuaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogVW5pbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gaWYgaXQgaXMgY3VycmVudGx5IGluc3RhbGxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXNcbiAqIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIHVuaW5zdGFsbGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIU9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMubWFuaWZlc3RzLCBwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMudW5pbnN0YWxsUGx1Z2luKHBsdWdpbklkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoQ09NTVVOSVRZX1BMVUdJTlNfVVJMKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgQ29tbXVuaXR5UGx1Z2luRW50cnlbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgY2FjaGUgPSBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8bnVsbCB8IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4+KENPTU1VTklUWV9QTFVHSU5TX1NUQVRFX0tFWSwgbnVsbCk7XG4gIGNhY2hlLnZhbHVlID8/PSBmZXRjaENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjYWNoZS52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYWNoZS52YWx1ZSA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luTWFuaWZlc3QocmVwbzogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPFBsdWdpbk1hbmlmZXN0PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9naXRodWIuY29tLyR7cmVwb30vcmVsZWFzZXMvZG93bmxvYWQvJHt2ZXJzaW9ufS9tYW5pZmVzdC5qc29uYCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIFBsdWdpbk1hbmlmZXN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocmVmZXJlbmNlOiBDb21tdW5pdHlQbHVnaW5SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoJ3BsdWdpbklkJyBpbiByZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlLnBsdWdpbklkO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlZmVyZW5jZS5wbHVnaW5OYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIG5hbWVkICcke3JlZmVyZW5jZS5wbHVnaW5OYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkEsU0FB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
199
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgXG4gKiBvciBgcGx1Z2luTmFtZWA7IGBzZXR0aW5nc2AgaXMgb3B0aW9uYWwgKG9taXQgZm9yIGEgcGx1Z2luIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbikuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgUGFydGlhbDxDb21tdW5pdHlQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBpZC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5SWRSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGRpc3BsYXkgbmFtZSAoYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHJlZ2lzdHJ5KS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiBPYnNpZGlhbidzIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gYXV0aG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSBhIGNvbW11bml0eS1wbHVnaW4gb3BlcmF0aW9uIHJ1bnMgYWdhaW5zdC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyB0byBtZXJnZSBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG9iamVjdCBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBwbHVnaW4ncyBleGlzdGluZyBgZGF0YS5qc29uYCAodGhlIGZpbGUgaXMgY3JlYXRlZCBpZlxuICAgKiBhYnNlbnQpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGU6IGB0cnVlYCBlbmFibGVzIHRoZSBwbHVnaW4sIGBmYWxzZWAgZGlzYWJsZXMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlOiBgdHJ1ZWAgaW5zdGFsbHMgdGhlIHBsdWdpbiwgYGZhbHNlYCB1bmluc3RhbGxzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnN0YWxsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIG9uZSBtZXRob2Qge0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0gbmVlZHMgZnJvbSBhIHBsdWdpbidzIHNldHRpbmdzIGNvbXBvbmVudCB0byBjb25maWd1cmVcbiAqIGl0IGxpdmUuIERlY2xhcmVkIHN0cnVjdHVyYWxseSByYXRoZXIgdGhhbiBpbXBvcnRpbmcgYFBsdWdpblNldHRpbmdzQ29tcG9uZW50YCwgc28gYSBwbHVnaW4gYnVpbHQgb25cbiAqIGFueSB2ZXJzaW9uIG9mIGl0IC0tIG9yIG9uIGl0cyBvd24gZXF1aXZhbGVudCAtLSBpcyBjb25maWd1cmFibGUgd2l0aG91dCBhIHNoYXJlZCBub21pbmFsIHR5cGUuXG4gKi9cbmludGVyZmFjZSBFZGl0YWJsZVNldHRpbmdzQ29tcG9uZW50IHtcbiAgZWRpdEFuZFNhdmUoc2V0dGluZ3NFZGl0b3I6IChzZXR0aW5nczogb2JqZWN0KSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVkgPSAnY29tbXVuaXR5UGx1Z2luRW50cmllc1Byb21pc2UnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL0hFQUQvY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBjb25maWd1cmVDb21tdW5pdHlQbHVnaW59LlxuICovXG5leHBvcnQgZW51bSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYXBwbGllZCB0aHJvdWdoIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQsIHdoaWNoIGJvdGggdXBkYXRlZFxuICAgKiB0aGVtIGluIG1lbW9yeSBhbmQgcGVyc2lzdGVkIHRoZW0uIFRoZSBwbHVnaW4gaXMgYWxyZWFkeSB1c2luZyB0aGVtLCBzbyBpdCBtdXN0IE5PVCBiZSByZWxvYWRlZC5cbiAgICovXG4gIEFwcGxpZWRMaXZlID0gJ2FwcGxpZWRMaXZlJyxcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc28gbm90aGluZyB3YXMgd3JpdHRlbi5cbiAgICovXG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyB3ZXJlIG1lcmdlZCBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgd2hpY2ggd2FzIHdyaXR0ZW4uXG4gICAqL1xuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnXG59XG5cbi8qKlxuICogQ29uZmlndXJlcyBhIGNvbW11bml0eSBwbHVnaW4sIHByZWZlcnJpbmcgdGhlIHJ1bm5pbmcgcGx1Z2luJ3Mgb3duIHNldHRpbmdzIGNvbXBvbmVudCBvdmVyIGl0c1xuICogYGRhdGEuanNvbmAuXG4gKlxuICogV2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZCBBTkQgZXhwb3NlcyBhIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAgd2l0aCBhbiBgZWRpdEFuZFNhdmVgIG1ldGhvZCwgdGhlXG4gKiBzZXR0aW5ncyBhcmUgc2hhbGxvdy1tZXJnZWQgdGhyb3VnaCBpdDogdGhleSB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseSBhbmQgYXJlIHBlcnNpc3RlZCwgc28gdGhlIHBsdWdpblxuICogbmVlZHMgbm8gcmVsb2FkIGFuZCB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LkFwcGxpZWRMaXZlfSBpcyByZXR1cm5lZC4gVGhpcyBpcyB3aGF0IGxldHMgYVxuICogcGx1Z2luJ3Mgb3duIHNjcmlwdCByZWNvbmZpZ3VyZSBpdCB3aXRob3V0IHRoZSBkaXNhYmxlL2VuYWJsZSBjeWNsZSB0aGF0IHdvdWxkIHRlYXIgZG93biB0aGUgdmVyeSBjb2RlXG4gKiBkb2luZyB0aGUgcmVjb25maWd1cmluZy4gTm90ZSB0aGF0IHRoaXMgcGF0aCBydW5zIHRoZSBwbHVnaW4ncyBzZXR0aW5nIHZhbGlkYXRvcnMsIHNvIGFuIGludmFsaWQgdmFsdWVcbiAqIGlzIHJlcGxhY2VkIGJ5IGl0cyBkZWZhdWx0IHJhdGhlciB0aGFuIHdyaXR0ZW4gdGhyb3VnaCB2ZXJiYXRpbS5cbiAqXG4gKiBPdGhlcndpc2UgdGhlIHNldHRpbmdzIGFyZSB3cml0dGVuIGludG8gdGhlIHBsdWdpbidzIGBkYXRhLmpzb25gLCBzaGFsbG93LW1lcmdlZCBvdmVyIGFueSBleGlzdGluZ1xuICogc2V0dGluZ3MgKGNyZWF0aW5nIHRoZSBmaWxlIGlmIGFic2VudCkuIFdyaXRpbmcgc2V0dGluZ3MgQkVGT1JFIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBtYWtlcyBpdCBsb2FkXG4gKiBhbHJlYWR5IGNvbmZpZ3VyZWQsIHdpdGggbm8gcmVsb2FkLiBBIG5vLW9wIHdyaXRlIGlzIHNraXBwZWQ6IHdoZW4gdGhlIG1lcmdlIGNoYW5nZXMgbm90aGluZywgdGhlIGZpbGVcbiAqIGlzIGxlZnQgdW50b3VjaGVkIGFuZCB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlNraXBwZWR9IGlzIHJldHVybmVkLCBzbyBhIGNhbGxlciBjYW4gYXZvaWRcbiAqIHJlbG9hZGluZyBhbiBhbHJlYWR5LWNvcnJlY3RseS1jb25maWd1cmVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LkFwcGxpZWRMaXZlfSBpZiB0aGVcbiAqIHJ1bm5pbmcgcGx1Z2luIGFwcGxpZWQgdGhlbSBpdHNlbGYgKG5vIHJlbG9hZCBuZWVkZWQpLCB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3N9IGlmXG4gKiB0aGUgYGRhdGEuanNvbmAgY29udGVudCBjaGFuZ2VkIChhbmQgd2FzIHdyaXR0ZW4pLCBvciB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlNraXBwZWR9IGlmXG4gKiB0aGUgc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IHByZXNlbnQgKG5vdGhpbmcgd3JpdHRlbikuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQ+IHtcbiAgY29uc3QgeyBhcHAsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG5cbiAgY29uc3Qgc2V0dGluZ3NDb21wb25lbnQgPSBnZXRTZXR0aW5nc0NvbXBvbmVudChhcHAucGx1Z2lucy5wbHVnaW5zW3BsdWdpbklkXSk7XG4gIGlmIChjaGVja0hhc0VkaXRBbmRTYXZlKHNldHRpbmdzQ29tcG9uZW50KSkge1xuICAgIGF3YWl0IHNldHRpbmdzQ29tcG9uZW50LmVkaXRBbmRTYXZlKChwbHVnaW5TZXR0aW5ncykgPT4ge1xuICAgICAgT2JqZWN0LmFzc2lnbihwbHVnaW5TZXR0aW5ncywgc2V0dGluZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQXBwbGllZExpdmU7XG4gIH1cblxuICBjb25zdCBkYXRhUGF0aCA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHtwbHVnaW5JZH0vZGF0YS5qc29uYDtcblxuICBsZXQgZGF0YTogb2JqZWN0ID0ge307XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoZGF0YVBhdGgpKSB7XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5yZWFkKGRhdGFQYXRoKSk7XG4gICAgaWYgKHBhcnNlZCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0Jykge1xuICAgICAgZGF0YSA9IHBhcnNlZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkQmVmb3JlID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIE9iamVjdC5hc3NpZ24oZGF0YSwgc2V0dGluZ3MpO1xuICBpZiAoSlNPTi5zdHJpbmdpZnkoZGF0YSkgPT09IHNlcmlhbGl6ZWRCZWZvcmUpIHtcbiAgICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlNraXBwZWQ7XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkID0gU3RyaW5nKEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIERBVEFfSlNPTl9JTkRFTlQpKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoZGF0YVBhdGgsIGAke3NlcmlhbGl6ZWR9XFxuYCk7XG4gIHJldHVybiBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2Vzcztcbn1cblxuLyoqXG4gKiBEaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gKHBlcnNpc3RpbmcgdGhlIGNoYW5nZSkgaWYgaXQgaXMgY3VycmVudGx5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGRpc2FibGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIERpc2FibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IERpc2FibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBub3QgYWxyZWFkeSBlbmFibGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhIG5vLW9wXG4gKiB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBlbmFibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5IG9mIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIE9ic2lkaWFuJ3MgcHVibGljXG4gKiBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgcmVnaXN0cnkuXG4gKlxuICogVGhlIHJlZ2lzdHJ5IGlzIGZldGNoZWQgb25jZSBhbmQgY2FjaGVkIG9uIHRoZSBzaGFyZWQgcGx1Z2luIHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzOyBhIGZhaWxlZFxuICogZmV0Y2ggaXMgbm90IGNhY2hlZCwgc28gYSBsYXRlciBjYWxsIHJldHJpZXMuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBpZCB0byBsb29rIHVwLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgcmVwb3NpdG9yeSwgb3IgYG51bGxgIGlmIHRoZVxuICogcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZDogc3RyaW5nKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IGVudHJ5ID0gZW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcGx1Z2luSWQpO1xuICByZXR1cm4gZW50cnk/LnJlcG8gPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiAodGhlIHJlbGVhc2UgYHRhZ19uYW1lYCwgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgKSBvZiBhXG4gKiBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqXG4gKiBAcGFyYW0gcmVwbyAtIFRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9yZWxlYXNlcy9sYXRlc3RgKTtcbiAgY29uc3QgcmVsZWFzZSA9IHJlc3BvbnNlLmpzb24gYXMgR2l0SHViUmVsZWFzZTtcbiAgcmV0dXJuIHJlbGVhc2UudGFnX25hbWU7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gdGhlIG9mZmljaWFsIHN0b3JlIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYVxuICogbm8tb3Agd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBSZXNvbHZlcyB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeSBmcm9tIE9ic2lkaWFuJ3NcbiAqIGNvbW11bml0eSByZWdpc3RyeSwgcmVhZHMgdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24gYW5kIGl0cyBtYW5pZmVzdCwgYW5kIGluc3RhbGxzIGl0IHRocm91Z2hcbiAqIE9ic2lkaWFuJ3Mgb3duIGBpbnN0YWxsUGx1Z2luYCBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLlxuICogQHRocm93cyBJZiB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChPYmplY3QuaGFzT3duKGFwcC5wbHVnaW5zLm1hbmlmZXN0cywgcGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGdldFBsdWdpbk1hbmlmZXN0KHJlcG8sIHZlcnNpb24pO1xuICBhd2FpdCBhcHAucGx1Z2lucy5pbnN0YWxsUGx1Z2luKHJlcG8sIHZlcnNpb24sIG1hbmlmZXN0KTtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4sIHdyaXRlcyBpdHMgc2V0dGluZ3MsIFRIRU4gZW5hYmxlcyBpdCBcdTIwMTQgaW4gdGhhdCBvcmRlciBcdTIwMTQgc28gdGhlIHBsdWdpblxuICogbG9hZHMgYWxyZWFkeSBjb25maWd1cmVkIChhIHBsdWdpbiBlbmFibGVkIGJlZm9yZSBpdCBpcyBjb25maWd1cmVkIHJ1bnMgaXRzIGBvbmxvYWRgIHdpdGggZGVmYXVsdFxuICogc2V0dGluZ3MgYW5kIGRvZXMgbm90aGluZyB1c2VmdWwpLiBJZiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZW5hYmxlZCBhbmQgdGhlIHNldHRpbmdzIGNoYW5nZWQsIGl0IGlzXG4gKiBkaXNhYmxlZCBhbmQgcmUtZW5hYmxlZCBzbyB0aGUgbmV3IHNldHRpbmdzIHRha2UgZWZmZWN0LiBgc2V0dGluZ3NgIGlzIG9wdGlvbmFsOiBvbWl0IGl0IGZvciBhIHBsdWdpblxuICogdGhhdCBuZWVkcyBubyBjb25maWd1cmF0aW9uLiBDb21wb3NlcyB7QGxpbmsgaW5zdGFsbENvbW11bml0eVBsdWdpbn0sIHtAbGluayBjb25maWd1cmVDb21tdW5pdHlQbHVnaW59LFxuICoge0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0gYW5kIHtAbGluayBkaXNhYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBJbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCwgY29uZmlndXJlZCBhbmQgZW5hYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCwgc2V0dGluZ3MgfSA9IHBhcmFtcztcbiAgYXdhaXQgaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICBjb25zdCBkaWRTZXR0aW5nc0NoYW5nZSA9IHNldHRpbmdzID8gYXdhaXQgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHsgLi4ucGFyYW1zLCBzZXR0aW5ncyB9KSA9PT0gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3MgOiBmYWxzZTtcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAoZGlkU2V0dGluZ3NDaGFuZ2UpIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBPYnNpZGlhbidzIHB1YmxpYyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeSwgcmV0dXJuaW5nIHRoZSBpZCBhbmQgZGlzcGxheSBuYW1lIG9mIGV2ZXJ5XG4gKiBwbHVnaW4gd2hvc2UgaWQsIG5hbWUsIGF1dGhvciBvciBkZXNjcmlwdGlvbiBjb250YWlucyB0aGUgcXVlcnkgKGNhc2UtaW5zZW5zaXRpdmUpLiBBbiBlbXB0eSBxdWVyeVxuICogbWF0Y2hlcyBldmVyeSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHNlYXJjaCBxdWVyeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbWF0Y2hpbmcgcGx1Z2lucycge0BsaW5rIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdH1zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoQ29tbXVuaXR5UGx1Z2lucyhxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHRbXT4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZW50cmllc1xuICAgIC5maWx0ZXIoKGVudHJ5KSA9PlxuICAgICAgZW50cnkuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkuYXV0aG9yLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgKVxuICAgIC5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgaWQ6IGVudHJ5LmlkLFxuICAgICAgbmFtZTogZW50cnkubmFtZVxuICAgIH0pKTtcbn1cblxuLyoqXG4gKiBFbmFibGVzIG9yIGRpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufSAvIHtAbGluayBkaXNhYmxlQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGFyYW1zLmlzRW5hYmxlZCkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIEluc3RhbGxzIG9yIHVuaW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIHRvIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSAvIHtAbGluayB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW59LCBzbyBpdCBpcyBpZGVtcG90ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGUuXG4gKiBAdGhyb3dzIElmIGluc3RhbGxpbmcgYW5kIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIFVuaW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIGlmIGl0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3Agd2hlbiB0aGUgcGx1Z2luIGlzXG4gKiBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyB1bmluc3RhbGxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKCFPYmplY3QuaGFzT3duKGFwcC5wbHVnaW5zLm1hbmlmZXN0cywgcGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbihwbHVnaW5JZCk7XG59XG5cbi8vIFdoZXRoZXIgYSBwbHVnaW4ncyBgcGx1Z2luU2V0dGluZ3NDb21wb25lbnRgIGNhbiBjb25maWd1cmUgaXRzZWxmIGluIHBsYWNlLiBTdHJ1Y3R1cmFsIHJhdGhlciB0aGFuIGFuXG4vLyBgaW5zdGFuY2VvZmA6IHRoZSBwbHVnaW4gd2FzIGxvYWRlZCBmcm9tIGl0cyBvd24gYnVuZGxlLCBzbyBldmVuIGEgcGx1Z2luIGJ1aWx0IG9uIHRoaXMgdmVyeSBsaWJyYXJ5XG4vLyBDYXJyaWVzIGl0cyBvd24gY29weSBvZiB0aGUgY2xhc3MgYW5kIHdvdWxkIGZhaWwgYW4gaWRlbnRpdHkgY2hlY2suXG5mdW5jdGlvbiBjaGVja0hhc0VkaXRBbmRTYXZlKHNldHRpbmdzQ29tcG9uZW50OiB1bmtub3duKTogc2V0dGluZ3NDb21wb25lbnQgaXMgRWRpdGFibGVTZXR0aW5nc0NvbXBvbmVudCB7XG4gIHJldHVybiB0eXBlb2Ygc2V0dGluZ3NDb21wb25lbnQgPT09ICdvYmplY3QnXG4gICAgJiYgc2V0dGluZ3NDb21wb25lbnQgIT09IG51bGxcbiAgICAmJiAnZWRpdEFuZFNhdmUnIGluIHNldHRpbmdzQ29tcG9uZW50XG4gICAgJiYgdHlwZW9mIHNldHRpbmdzQ29tcG9uZW50LmVkaXRBbmRTYXZlID09PSAnZnVuY3Rpb24nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChDT01NVU5JVFlfUExVR0lOU19VUkwpO1xuICByZXR1cm4gcmVzcG9uc2UuanNvbiBhcyBDb21tdW5pdHlQbHVnaW5FbnRyeVtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4ge1xuICBjb25zdCBjYWNoZSA9IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxudWxsIHwgUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPj4oQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZLCBudWxsKTtcbiAgY2FjaGUudmFsdWUgPz89IGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5pZmVzdChyZXBvOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8UGx1Z2luTWFuaWZlc3Q+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG59XG5cbi8vIFJlYWRzIGEgbG9hZGVkIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAsIG9yIGBudWxsYCB3aGVuIGl0IGhhcyBub25lLiBUYWtlcyBgdW5rbm93bmAgYmVjYXVzZVxuLy8gQSBwbHVnaW4gaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBleHBvc2Ugb25lLCBzbyB0aGVyZSBpcyBubyB0eXBlIHRvIG5hcnJvdyBmcm9tLlxuZnVuY3Rpb24gZ2V0U2V0dGluZ3NDb21wb25lbnQocGx1Z2luOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgcGx1Z2luICE9PSAnb2JqZWN0JyB8fCBwbHVnaW4gPT09IG51bGwgfHwgISgncGx1Z2luU2V0dGluZ3NDb21wb25lbnQnIGluIHBsdWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwbHVnaW4ucGx1Z2luU2V0dGluZ3NDb21wb25lbnQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChyZWZlcmVuY2U6IENvbW11bml0eVBsdWdpblJlZik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICgncGx1Z2luSWQnIGluIHJlZmVyZW5jZSkge1xuICAgIHJldHVybiByZWZlcmVuY2UucGx1Z2luSWQ7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gcmVmZXJlbmNlLnBsdWdpbk5hbWUpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbmFtZWQgJyR7cmVmZXJlbmNlLnBsdWdpbk5hbWV9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgfVxuICByZXR1cm4gZW50cnkuaWQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxTQUFTLGtCQUFrQjtBQUUzQixTQUFTLGdDQUFnQztBQXFMekMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxtQkFBbUI7QUFLbEIsSUFBSyxpQ0FBTCxrQkFBS0Esb0NBQUw7QUFLTCxFQUFBQSxnQ0FBQSxpQkFBYztBQUtkLEVBQUFBLGdDQUFBLGFBQVU7QUFLVixFQUFBQSxnQ0FBQSxhQUFVO0FBZkEsU0FBQUE7QUFBQSxHQUFBO0FBMENaLGVBQXNCLHlCQUF5QixRQUFpRjtBQUM5SCxRQUFNLEVBQUUsS0FBSyxTQUFTLElBQUk7QUFDMUIsUUFBTSxXQUFXLE1BQU0seUJBQXlCLE1BQU07QUFFdEQsUUFBTSxvQkFBb0IscUJBQXFCLElBQUksUUFBUSxRQUFRLFFBQVEsQ0FBQztBQUM1RSxNQUFJLG9CQUFvQixpQkFBaUIsR0FBRztBQUMxQyxVQUFNLGtCQUFrQixZQUFZLENBQUMsbUJBQW1CO0FBQ3RELGFBQU8sT0FBTyxnQkFBZ0IsUUFBUTtBQUFBLElBQ3hDLENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxHQUFHLElBQUksTUFBTSxTQUFTLFlBQVksUUFBUTtBQUUzRCxNQUFJLE9BQWUsQ0FBQztBQUNwQixNQUFJLE1BQU0sSUFBSSxNQUFNLFFBQVEsT0FBTyxRQUFRLEdBQUc7QUFDNUMsVUFBTSxTQUFrQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUN6RSxRQUFJLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVTtBQUNqRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLG1CQUFtQixLQUFLLFVBQVUs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QUFJLHNCQUFzQixPQUFPLGdCQUFnQjtBQUN6RyxTQUFPLFNBQVM7QUFDbEI7QUFJQSxTQUFTLHFCQUFxQixRQUEwQjtBQUN0RCxNQUFJLE9BQU8sV0FBVyxZQUFZLFdBQVcsUUFBUSxFQUFFLDZCQUE2QixTQUFTO0FBQzNGLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxPQUFPO0FBQ2hCO0FBRUEsZUFBZSx5QkFBeUIsV0FBZ0Q7QUFDdEYsTUFBSSxjQUFjLFdBQVc7QUFDM0IsV0FBTyxVQUFVO0FBQUEsRUFDbkI7QUFFQSxRQUFNLFVBQVUsTUFBTSwwQkFBMEI7QUFDaEQsUUFBTSxRQUFRLFFBQVEsS0FBSyxDQUFDLGNBQWMsVUFBVSxTQUFTLFVBQVUsVUFBVTtBQUNqRixNQUFJLENBQUMsT0FBTztBQUNWLFVBQU0sSUFBSSxNQUFNLGlCQUFpQixVQUFVLFVBQVUsNkRBQTZEO0FBQUEsRUFDcEg7QUFDQSxTQUFPLE1BQU07QUFDZjsiLAogICJuYW1lcyI6IFsiQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0Il0KfQo=
@@ -17,6 +17,7 @@ import { AsyncErrorHandlerComponent } from '../components/async-error-handler-co
17
17
  import { ConsoleDebugComponent } from '../components/console-debug-component.mjs';
18
18
  import { PluginContextComponent } from '../components/plugin-context-component.mjs';
19
19
  import { PluginNoticeComponent } from '../components/plugin-notice-component.mjs';
20
+ import { PluginSettingsComponentBase } from '../components/plugin-settings-component.mjs';
20
21
  import { ResourceLockComponent } from '../resource-lock.mjs';
21
22
  declare const PluginBase_base: import("type-fest").AbstractConstructor<import("../../async-events.mjs").AsyncEventSource<PluginEventMap> & import("../../async-events.mjs").AsyncEventTrigger<PluginEventMap>> & typeof Plugin;
22
23
  /**
@@ -101,6 +102,18 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
101
102
  * @param value - Plugin notice component.
102
103
  */
103
104
  protected set pluginNoticeComponent(value: PluginNoticeComponent);
105
+ /**
106
+ * Gets plugin settings component.
107
+ *
108
+ * @returns plugin settings component.
109
+ */
110
+ protected get pluginSettingsComponent(): PluginSettingsComponentBase<object>;
111
+ /**
112
+ * Sets plugin settings component.
113
+ *
114
+ * @param value - Plugin settings component.
115
+ */
116
+ protected set pluginSettingsComponent(value: PluginSettingsComponentBase<object>);
104
117
  /**
105
118
  * Gets the editor lock component, used to lock notes read-only during long operations. Owned by
106
119
  * the plugin, so its locks are released automatically when the plugin unloads.
@@ -114,13 +127,7 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
114
127
  * @param value - Editor lock component.
115
128
  */
116
129
  protected set resourceLockComponent(value: ResourceLockComponent);
117
- private _abortSignalComponent?;
118
- private _asyncErrorHandlerComponent?;
119
- private _commandHandlerComponent?;
120
- private _consoleDebugComponent?;
121
- private _pluginContextComponent?;
122
- private _pluginNoticeComponent?;
123
- private _resourceLockComponent?;
130
+ private readonly components;
124
131
  private readonly wrapperComponent;
125
132
  /**
126
133
  * Adds a child component.
@@ -186,6 +193,18 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
186
193
  * @returns A {@link Promise} that resolves when the subclass load logic is complete.
187
194
  */
188
195
  protected onloadImpl(): Promisable<void>;
196
+ /**
197
+ * Stores a universal component, unloading whichever component the key held before.
198
+ *
199
+ * Keyed by name rather than handed the previous value because `keyof this` excludes private
200
+ * members, so the components live in a single {@link PluginBaseComponents} bag whose keys ARE
201
+ * indexable.
202
+ *
203
+ * @typeParam TKey - The key of the component to store.
204
+ * @param key - The key of the component to store.
205
+ * @param value - The component to store.
206
+ */
207
+ private setComponent;
189
208
  }
190
209
  /**
191
210
  * Reloads the specified plugin by disabling and then re-enabling it.
@@ -38,9 +38,12 @@ import { MenuEventRegistrarComponent } from "../components/menu-event-registrar-
38
38
  import { NotebookNavigatorMenuEventRegistrarComponent } from "../components/notebook-navigator-menu-event-registrar-component.mjs";
39
39
  import { PluginContextComponent } from "../components/plugin-context-component.mjs";
40
40
  import { PluginNoticeComponent } from "../components/plugin-notice-component.mjs";
41
+ import { PluginSettingsComponentBase } from "../components/plugin-settings-component.mjs";
42
+ import { PluginDataHandler } from "../data-handler.mjs";
41
43
  import { initI18N } from "../i18n/i18n.mjs";
42
44
  import { defaultTranslationsMap } from "../i18n/locales/translations-map.mjs";
43
45
  import { ResourceLockComponent } from "../resource-lock.mjs";
46
+ import { PluginEventSourceImpl } from "./plugin-event-source.mjs";
44
47
  class PluginBase extends mixinAsyncEvents()(Plugin) {
45
48
  /**
46
49
  * Gets abort signal component.
@@ -48,7 +51,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
48
51
  * @returns abort signal component.
49
52
  */
50
53
  get abortSignalComponent() {
51
- return ensureNonNullable(this._abortSignalComponent);
54
+ return ensureNonNullable(this.components.abortSignalComponent);
52
55
  }
53
56
  /**
54
57
  * Sets abort signal component.
@@ -56,7 +59,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
56
59
  * @param value - Abort signal component.
57
60
  */
58
61
  set abortSignalComponent(value) {
59
- this._abortSignalComponent = value;
62
+ this.setComponent("abortSignalComponent", value);
60
63
  }
61
64
  /**
62
65
  * Gets async error handler component.
@@ -64,7 +67,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
64
67
  * @returns async error handler component.
65
68
  */
66
69
  get asyncErrorHandlerComponent() {
67
- return ensureNonNullable(this._asyncErrorHandlerComponent);
70
+ return ensureNonNullable(this.components.asyncErrorHandlerComponent);
68
71
  }
69
72
  /**
70
73
  * Sets async error handler component.
@@ -72,7 +75,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
72
75
  * @param value - Async error handler component.
73
76
  */
74
77
  set asyncErrorHandlerComponent(value) {
75
- this._asyncErrorHandlerComponent = value;
78
+ this.setComponent("asyncErrorHandlerComponent", value);
76
79
  }
77
80
  /**
78
81
  * Gets the shared command handler component. Register a plugin's commands on it via
@@ -83,7 +86,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
83
86
  * @returns The command handler component.
84
87
  */
85
88
  get commandHandlerComponent() {
86
- return ensureNonNullable(this._commandHandlerComponent);
89
+ return ensureNonNullable(this.components.commandHandlerComponent);
87
90
  }
88
91
  /**
89
92
  * Sets the command handler component.
@@ -91,7 +94,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
91
94
  * @param value - The command handler component.
92
95
  */
93
96
  set commandHandlerComponent(value) {
94
- this._commandHandlerComponent = value;
97
+ this.setComponent("commandHandlerComponent", value);
95
98
  }
96
99
  /**
97
100
  * Gets console debug component.
@@ -99,7 +102,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
99
102
  * @returns console debug component.
100
103
  */
101
104
  get consoleDebugComponent() {
102
- return ensureNonNullable(this._consoleDebugComponent);
105
+ return ensureNonNullable(this.components.consoleDebugComponent);
103
106
  }
104
107
  /**
105
108
  * Sets console debug component.
@@ -107,7 +110,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
107
110
  * @param value - Console debug component.
108
111
  */
109
112
  set consoleDebugComponent(value) {
110
- this._consoleDebugComponent = value;
113
+ this.setComponent("consoleDebugComponent", value);
111
114
  }
112
115
  /**
113
116
  * Gets plugin context component (plugin ID, debug controller, library styles).
@@ -115,7 +118,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
115
118
  * @returns plugin context component.
116
119
  */
117
120
  get pluginContextComponent() {
118
- return ensureNonNullable(this._pluginContextComponent);
121
+ return ensureNonNullable(this.components.pluginContextComponent);
119
122
  }
120
123
  /**
121
124
  * Sets plugin context component.
@@ -123,7 +126,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
123
126
  * @param value - Plugin context component.
124
127
  */
125
128
  set pluginContextComponent(value) {
126
- this._pluginContextComponent = value;
129
+ this.setComponent("pluginContextComponent", value);
127
130
  }
128
131
  /**
129
132
  * Gets plugin notice component.
@@ -131,7 +134,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
131
134
  * @returns plugin notice component.
132
135
  */
133
136
  get pluginNoticeComponent() {
134
- return ensureNonNullable(this._pluginNoticeComponent);
137
+ return ensureNonNullable(this.components.pluginNoticeComponent);
135
138
  }
136
139
  /**
137
140
  * Sets plugin notice component.
@@ -139,7 +142,23 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
139
142
  * @param value - Plugin notice component.
140
143
  */
141
144
  set pluginNoticeComponent(value) {
142
- this._pluginNoticeComponent = value;
145
+ this.setComponent("pluginNoticeComponent", value);
146
+ }
147
+ /**
148
+ * Gets plugin settings component.
149
+ *
150
+ * @returns plugin settings component.
151
+ */
152
+ get pluginSettingsComponent() {
153
+ return ensureNonNullable(this.components.pluginSettingsComponent);
154
+ }
155
+ /**
156
+ * Sets plugin settings component.
157
+ *
158
+ * @param value - Plugin settings component.
159
+ */
160
+ set pluginSettingsComponent(value) {
161
+ this.setComponent("pluginSettingsComponent", value);
143
162
  }
144
163
  /**
145
164
  * Gets the editor lock component, used to lock notes read-only during long operations. Owned by
@@ -148,7 +167,7 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
148
167
  * @returns Editor lock component.
149
168
  */
150
169
  get resourceLockComponent() {
151
- return ensureNonNullable(this._resourceLockComponent);
170
+ return ensureNonNullable(this.components.resourceLockComponent);
152
171
  }
153
172
  /**
154
173
  * Sets the editor lock component.
@@ -156,15 +175,9 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
156
175
  * @param value - Editor lock component.
157
176
  */
158
177
  set resourceLockComponent(value) {
159
- this._resourceLockComponent = value;
178
+ this.setComponent("resourceLockComponent", value);
160
179
  }
161
- _abortSignalComponent;
162
- _asyncErrorHandlerComponent;
163
- _commandHandlerComponent;
164
- _consoleDebugComponent;
165
- _pluginContextComponent;
166
- _pluginNoticeComponent;
167
- _resourceLockComponent;
180
+ components = {};
168
181
  wrapperComponent = new ComponentEx();
169
182
  /**
170
183
  * Adds a child component.
@@ -241,6 +254,13 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
241
254
  resourceLockComponent: this.resourceLockComponent
242
255
  })
243
256
  ]);
257
+ this.pluginSettingsComponent = this.addChild(
258
+ new PluginSettingsComponentBase({
259
+ dataHandler: new PluginDataHandler(this),
260
+ pluginEventSource: new PluginEventSourceImpl(this),
261
+ pluginSettingsClass: Object
262
+ })
263
+ );
244
264
  await this.onloadImpl();
245
265
  await this.wrapperComponent.loadWithPromises();
246
266
  } catch (error) {
@@ -292,6 +312,24 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
292
312
  onloadImpl() {
293
313
  return noopAsync();
294
314
  }
315
+ /**
316
+ * Stores a universal component, unloading whichever component the key held before.
317
+ *
318
+ * Keyed by name rather than handed the previous value because `keyof this` excludes private
319
+ * members, so the components live in a single {@link PluginBaseComponents} bag whose keys ARE
320
+ * indexable.
321
+ *
322
+ * @typeParam TKey - The key of the component to store.
323
+ * @param key - The key of the component to store.
324
+ * @param value - The component to store.
325
+ */
326
+ setComponent(key, value) {
327
+ const oldComponent = this.components[key];
328
+ if (oldComponent) {
329
+ this.removeChild(oldComponent);
330
+ }
331
+ this.components[key] = value;
332
+ }
295
333
  }
296
334
  async function reloadPlugin(plugin) {
297
335
  const plugins = plugin.app.plugins;
@@ -313,4 +351,4 @@ export {
313
351
  reloadPlugin,
314
352
  showErrorAndDisablePlugin
315
353
  };
316
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zTWFwIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luRXZlbnRNYXAsXG4gIFBsdWdpbkV2ZW50U291cmNlXG59IGZyb20gJy4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IG1peGluQXN5bmNFdmVudHMgfSBmcm9tICcuLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IGluaXRJMThOIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2xvY2FsZXMvdHJhbnNsYXRpb25zLW1hcC50cyc7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgYWJvcnRTaWduYWxDb21wb25lbnQodmFsdWU6IEFib3J0U2lnbmFsQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHZhbHVlOiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2FzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0gXHUyMDE0IHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29tbWFuZEhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBjb21tYW5kSGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29uc29sZURlYnVnQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29uc29sZURlYnVnQ29tcG9uZW50KHZhbHVlOiBDb25zb2xlRGVidWdDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb25zb2xlRGVidWdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcGx1Z2luQ29udGV4dENvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCh2YWx1ZTogUGx1Z2luQ29udGV4dENvbXBvbmVudCkge1xuICAgIHRoaXMuX3BsdWdpbkNvbnRleHRDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KCk6IFBsdWdpbk5vdGljZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX3BsdWdpbk5vdGljZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCh2YWx1ZTogUGx1Z2luTm90aWNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fcGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZWRpdG9yIGxvY2sgY29tcG9uZW50LCB1c2VkIHRvIGxvY2sgbm90ZXMgcmVhZC1vbmx5IGR1cmluZyBsb25nIG9wZXJhdGlvbnMuIE93bmVkIGJ5XG4gICAqIHRoZSBwbHVnaW4sIHNvIGl0cyBsb2NrcyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2Fkcy5cbiAgICpcbiAgICogQHJldHVybnMgRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCByZXNvdXJjZUxvY2tDb21wb25lbnQoKTogUmVzb3VyY2VMb2NrQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcmVzb3VyY2VMb2NrQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlZGl0b3IgbG9jayBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KHZhbHVlOiBSZXNvdXJjZUxvY2tDb21wb25lbnQpIHtcbiAgICB0aGlzLl9yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ/OiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudDtcblxuICBwcml2YXRlIF9jb21tYW5kSGFuZGxlckNvbXBvbmVudD86IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2NvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Db250ZXh0Q29tcG9uZW50PzogUGx1Z2luQ29udGV4dENvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfcmVzb3VyY2VMb2NrQ29tcG9uZW50PzogUmVzb3VyY2VMb2NrQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gYW4gaW50ZXJuYWwgd3JhcHBlciBjb21wb25lbnQsIHdoaWNoIHtAbGluayBvbmxvYWR9IGF0dGFjaGVzIGFuZCBsb2Fkc1xuICAgKiBiZWZvcmUgd2lyaW5nIGFueXRoaW5nIHVwLiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXMgbG9hZGVkIGltbWVkaWF0ZWx5LFxuICAgKiBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlckNvbXBvbmVudC5hZGRDaGlsZChjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIGlmIG5lZWRlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpYCBmaXJzdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlPy4oKTtcbiAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygnZXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkLlxuICAgKlxuICAgKiBPcmNoZXN0cmF0ZXMgbG9hZGluZzogcmVnaXN0ZXJzIHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cywgbGV0cyB0aGUgc3ViY2xhc3Mgd2lyZSBpdHMgb3duXG4gICAqIGNvbXBvbmVudHMgdmlhIHtAbGluayBvbmxvYWRJbXBsfSwgdGhlbiBhd2FpdHMgdGhlIGFzeW5jIHRhaWwgb2YgZXZlcnkgbG9hZC5cbiAgICogRWFjaCBjb21wb25lbnQgbG9hZHMgYXMgaXQgaXMgYWRkZWQsIGNoaWxkcmVuLWZpcnN0LlxuICAgKlxuICAgKiBEbyBOT1Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QuIE92ZXJyaWRlIHtAbGluayBvbmxvYWRJbXBsfSBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIHdyYXBwZXIgaXMgYXR0YWNoZWQgYW5kIGxvYWRlZCBiZWZvcmUgYW55dGhpbmcgaXMgd2lyZWQgdXAsIHNvIGV2ZXJ5IGBhZGRDaGlsZGAgYmVsb3dcbiAgICAgIC8vIExvYWRzIGl0cyBjaGlsZCBzdHJhaWdodCBhd2F5IHJhdGhlciB0aGFuIHF1ZXVpbmcgaXQuXG4gICAgICAvLyBUaGF0IGlzIHdoYXQgbGV0cyBhIGNvbW1hbmQgaGFuZGxlciByZWdpc3RlciBpdHMgbWVudSBldmVudHMgZnJvbSBgb25SZWdpc3RlcmVkYCwgd2hpY2hcbiAgICAgIC8vIGByZWdpc3RlckNvbW1hbmRIYW5kbGVyc2AgYXdhaXRzIGFuZCB3aGljaCBhIHJlZ2lzdHJhciByZWZ1c2VzIHdoaWxlIHVubG9hZGVkLlxuICAgICAgLy8gQXR0YWNoaW5nIGl0IHVwIGZyb250IGFsc28gcmVnaXN0ZXJzIHRoZSB3cmFwcGVyIGZvciB0ZWFyZG93biBiZWZvcmUgYW55dGhpbmcgY2FuIHRocm93LlxuICAgICAgLy8gVGhlIGxvYWQgaXMgZXhwbGljaXQgcmF0aGVyIHRoYW4gbGVmdCB0byBgYWRkQ2hpbGRgLCB3aGljaCBsb2FkcyB0aGUgY2hpbGQgb25seSB3aGVuIHRoZVxuICAgICAgLy8gUGx1Z2luIGl0c2VsZiBpcyBsb2FkZWQgXHUyMDE0IHRydWUgd2hlbiBPYnNpZGlhbiBjYWxscyBgbG9hZCgpYCwgYnV0IG5vdCB3aGVuIGEgY2FsbGVyIGludm9rZXNcbiAgICAgIC8vIGBvbmxvYWQoKWAgZGlyZWN0bHkuXG4gICAgICBzdXBlci5hZGRDaGlsZCh0aGlzLndyYXBwZXJDb21wb25lbnQpO1xuICAgICAgdGhpcy53cmFwcGVyQ29tcG9uZW50LmxvYWQoKTtcblxuICAgICAgYXdhaXQgaW5pdEkxOE4odGhpcy5jcmVhdGVUcmFuc2xhdGlvbnNNYXAoKSk7XG4gICAgICB0aGlzLnBsdWdpbkNvbnRleHRDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgUGx1Z2luQ29udGV4dENvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogdGhpcy5tYW5pZmVzdC5pZFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbk5vdGljZUNvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5OYW1lOiB0aGlzLm1hbmlmZXN0Lm5hbWVcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQodGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQpKTtcbiAgICAgIHRoaXMuYWJvcnRTaWduYWxDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBBYm9ydFNpZ25hbENvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IENvbnNvbGVEZWJ1Z0NvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IFJlc291cmNlTG9ja0NvbXBvbmVudCh0aGlzLmFwcCwgdGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgLy8gTm90ZWJvb2sgTmF2aWdhdG9yIGRyYXdzIGl0cyBvd24gZmlsZSB0cmVlIGFuZCBuZXZlciByYWlzZXMgT2JzaWRpYW4ncyBgZmlsZS1tZW51YCAvXG4gICAgICAvLyBgZmlsZXMtbWVudWAgZXZlbnRzLCBzbyBldmVyeSBwbHVnaW4ncyBjb250ZXh0LW1lbnUgaXRlbXMgd291bGQgdmFuaXNoIGZvciBhbnlvbmUgYnJvd3NpbmdcbiAgICAgIC8vIFRocm91Z2ggaXQuIFdpcmVkIGhlcmUgcmF0aGVyIHRoYW4gcGVyLXBsdWdpbjogdGhlIGJyaWRnZSBzdGF5cyBkb3JtYW50IHdoZW4gTm90ZWJvb2tcbiAgICAgIC8vIE5hdmlnYXRvciBpcyBub3QgaW5zdGFsbGVkLCBhbmQgYSBwbHVnaW4gd2l0aCBubyBmaWxlL2ZvbGRlciBoYW5kbGVycyBjb250cmlidXRlcyBub3RoaW5nLlxuICAgICAgY29uc3Qgbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgICAgIHN1Ym1lbnVJY29uOiB0aGlzLmdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KHtcbiAgICAgICAgICBhY3RpdmVGaWxlUHJvdmlkZXI6IG5ldyBBcHBBY3RpdmVGaWxlUHJvdmlkZXIodGhpcy5hcHApLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiBbbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnRdLFxuICAgICAgICAgIGNvbW1hbmRSZWdpc3RyYXI6IG5ldyBQbHVnaW5Db21tYW5kUmVnaXN0cmFyKHRoaXMpLFxuICAgICAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogdGhpcy5hZGRDaGlsZChuZXcgTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHRoaXMuYXBwKSksXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgLy8gQWx3YXlzIGF2YWlsYWJsZTsgdGhlIGNvbW1hbmQncyBvd24gYGNhbkV4ZWN1dGVgIGhpZGVzIGl0IHVubGVzcyB0aGUgYWN0aXZlIG5vdGUgaXMgbG9ja2VkLlxuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVycygoKSA9PiBbXG4gICAgICAgIG5ldyBVbmxvY2tBY3RpdmVOb3RlQ29tbWFuZEhhbmRsZXIoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgXSk7XG5cbiAgICAgIGF3YWl0IHRoaXMub25sb2FkSW1wbCgpO1xuXG4gICAgICAvLyBFdmVyeSBjaGlsZCBoYXMgYWxyZWFkeSBsb2FkZWQgYXMgaXQgd2FzIGFkZGVkOyB0aGlzIGF3YWl0cyB0aGVpciBhY2N1bXVsYXRlZCBhc3luYyB0YWlscyBhbmRcbiAgICAgIC8vIFJlcG9ydHMgYW55IGZhaWx1cmUgYXMgYSBzaW5nbGUgYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIGF3YWl0IHRoaXMud3JhcHBlckNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBFcnJvciBsb2FkaW5nIHBsdWdpbiAke3RoaXMubWFuaWZlc3QubmFtZX0gKCR7dGhpcy5tYW5pZmVzdC5pZH0pYCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLndyYXBwZXJDb21wb25lbnQucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgdHJhbnNsYXRpb25zIG1hcCB1c2VkIHRvIGluaXRpYWxpemUgaTE4biBkdXJpbmcge0BsaW5rIG9ubG9hZH0uXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHN1cHBseSBwbHVnaW4tc3BlY2lmaWMgdHJhbnNsYXRpb25zLiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBidWlsdC1pblxuICAgKiBgb2JzaWRpYW4tZGV2LXV0aWxzYCB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2xhdGlvbnMgbWFwLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVRyYW5zbGF0aW9uc01hcCgpOiBUcmFuc2xhdGlvbnNNYXAge1xuICAgIHJldHVybiBkZWZhdWx0VHJhbnNsYXRpb25zTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBpY29uIHNob3duIG9uIHRoZSBwbHVnaW4ncyBwYXJlbnQgZW50cnkgaW4gTm90ZWJvb2sgTmF2aWdhdG9yJ3MgY29udGV4dCBtZW51cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYnJhbmQgdGhhdCBlbnRyeTsgdGhlIGRlZmF1bHQgbGVhdmVzIGl0IHdpdGhvdXQgYW4gaWNvbi4gVGhlIGVudHJ5IGlzXG4gICAqIHRpdGxlZCB3aXRoIHRoZSBwbHVnaW4gbmFtZSBhbmQgaXMgYWRkZWQgYXV0b21hdGljYWxseSBcdTIwMTQgc2VlXG4gICAqIHtAbGluayBOb3RlYm9va05hdmlnYXRvck1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudH0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgJydgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKCk6IEljb25OYW1lIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGR1cmluZyB7QGxpbmsgb25sb2FkfSB0byB3aXJlIHBsdWdpbi1zcGVjaWZpYyBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBhZGQgY2hpbGQgY29tcG9uZW50cyB2aWEge0BsaW5rIGFkZENoaWxkfS4gVGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIGFyZVxuICAgKiBhdmFpbGFibGUgaGVyZS4gQ2hpbGRyZW4gYXJlIGxvYWRlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkIChjaGlsZHJlbi1maXJzdCkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3ViY2xhc3MgbG9hZCBsb2dpYyBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvbmxvYWRJbXBsKCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmMoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIHNwZWNpZmllZCBwbHVnaW4gYnkgZGlzYWJsaW5nIGFuZCB0aGVuIHJlLWVuYWJsaW5nIGl0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlbG9hZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIHJlbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkUGx1Z2luKHBsdWdpbjogUGx1Z2luKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW4uYXBwLnBsdWdpbnM7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICBhd2FpdCBwbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luSWQpO1xuICBhd2FpdCBwbHVnaW5zLmVuYWJsZVBsdWdpbihwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhcyBhIG5vdGljZSwgbG9ncyBpdCB0byB0aGUgY29uc29sZSwgYW5kIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGRpc2FibGUuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgYW5kIGxvZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0Vycm9yQW5kRGlzYWJsZVBsdWdpbihwbHVnaW46IFBsdWdpbiwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbk5vdGljZUNvbXBvbmVudCA9IG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgIGFwcDogcGx1Z2luLmFwcCxcbiAgICBwbHVnaW5OYW1lOiBwbHVnaW4ubWFuaWZlc3QubmFtZVxuICB9KTtcbiAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UobWVzc2FnZSk7XG4gIHByaW50RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgYXdhaXQgcGx1Z2luLmFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2lu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
354
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zTWFwIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luRXZlbnRNYXAsXG4gIFBsdWdpbkV2ZW50U291cmNlXG59IGZyb20gJy4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IG1peGluQXN5bmNFdmVudHMgfSBmcm9tICcuLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5EYXRhSGFuZGxlciB9IGZyb20gJy4uL2RhdGEtaGFuZGxlci50cyc7XG5pbXBvcnQgeyBpbml0STE4TiB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zTWFwIH0gZnJvbSAnLi4vaTE4bi9sb2NhbGVzL3RyYW5zbGF0aW9ucy1tYXAudHMnO1xuaW1wb3J0IHsgUmVzb3VyY2VMb2NrQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzb3VyY2UtbG9jay50cyc7XG5pbXBvcnQgeyBQbHVnaW5FdmVudFNvdXJjZUltcGwgfSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuXG4vKipcbiAqIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBvd25lZCBieSB7QGxpbmsgUGx1Z2luQmFzZX0sIGtleWVkIGJ5IHRoZSBuYW1lIG9mIHRoZSBhY2Nlc3NvciBleHBvc2luZ1xuICogZWFjaCBvbmUuIEV2ZXJ5IG1lbWJlciBpcyBvcHRpb25hbCBiZWNhdXNlIGEgY29tcG9uZW50IG9ubHkgZXhpc3RzIG9uY2Uge0BsaW5rIFBsdWdpbkJhc2Uub25sb2FkfVxuICogaGFzIGNyZWF0ZWQgaXQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5CYXNlQ29tcG9uZW50cyB7XG4gIGFib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG4gIGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50PzogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ7XG4gIGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50PzogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQ7XG4gIGNvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcbiAgcGx1Z2luQ29udGV4dENvbXBvbmVudD86IFBsdWdpbkNvbnRleHRDb21wb25lbnQ7XG4gIHBsdWdpbk5vdGljZUNvbXBvbmVudD86IFBsdWdpbk5vdGljZUNvbXBvbmVudDtcbiAgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ/OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0PjtcbiAgcmVzb3VyY2VMb2NrQ29tcG9uZW50PzogUmVzb3VyY2VMb2NrQ29tcG9uZW50O1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIE9ic2lkaWFuIHBsdWdpbnMgd2l0aCBhIGNvbXBvbmVudC1iYXNlZCBhcmNoaXRlY3R1cmUuXG4gKlxuICogUmVnaXN0ZXJzIHVuaXZlcnNhbCBjb21wb25lbnRzIGF1dG9tYXRpY2FsbHkuIFN1YmNsYXNzZXMgYWRkIG9yIHJlcGxhY2UgY29tcG9uZW50c1xuICogdmlhIHtAbGluayByZW1vdmVDaGlsZH0gLyB7QGxpbmsgYWRkQ2hpbGR9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luQmFzZSBleHRlbmRzIG1peGluQXN5bmNFdmVudHM8UGx1Z2luRXZlbnRNYXA+KCkoUGx1Z2luKSBpbXBsZW1lbnRzIFBsdWdpbkV2ZW50U291cmNlIHtcbiAgLyoqXG4gICAqIEdldHMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYWJvcnRTaWduYWxDb21wb25lbnQoKTogQWJvcnRTaWduYWxDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMuYWJvcnRTaWduYWxDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgYWJvcnRTaWduYWxDb21wb25lbnQodmFsdWU6IEFib3J0U2lnbmFsQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2Fib3J0U2lnbmFsQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBhc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCgpOiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuY29tcG9uZW50cy5hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHZhbHVlOiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdhc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzaGFyZWQgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC4gUmVnaXN0ZXIgYSBwbHVnaW4ncyBjb21tYW5kcyBvbiBpdCB2aWFcbiAgICoge0BsaW5rIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50LnJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzfSByYXRoZXIgdGhhbiBjb25zdHJ1Y3RpbmcgeW91ciBvd25cbiAgICoge0BsaW5rIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50fSBcdTIwMTQgdGhlIGFwcC1iYWNrZWQgYWN0aXZlLWZpbGUgcHJvdmlkZXIsIGNvbW1hbmQgcmVnaXN0cmFyLCBtZW51XG4gICAqIGV2ZW50IHJlZ2lzdHJhciwgYW5kIHBsdWdpbiBuYW1lIGFyZSBhbHJlYWR5IHdpcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgY29tbWFuZEhhbmRsZXJDb21wb25lbnQoKTogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMuY29tbWFuZEhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBjb21tYW5kSGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgnY29tbWFuZEhhbmRsZXJDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudCgpOiBDb25zb2xlRGVidWdDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMuY29uc29sZURlYnVnQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29uc29sZURlYnVnQ29tcG9uZW50KHZhbHVlOiBDb25zb2xlRGVidWdDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgnY29uc29sZURlYnVnQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgcGx1Z2luIGNvbnRleHQgY29tcG9uZW50IChwbHVnaW4gSUQsIGRlYnVnIGNvbnRyb2xsZXIsIGxpYnJhcnkgc3R5bGVzKS5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIGNvbnRleHQgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBwbHVnaW5Db250ZXh0Q29tcG9uZW50KCk6IFBsdWdpbkNvbnRleHRDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luQ29udGV4dENvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCh2YWx1ZTogUGx1Z2luQ29udGV4dENvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdwbHVnaW5Db250ZXh0Q29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgcGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBwbHVnaW5Ob3RpY2VDb21wb25lbnQoKTogUGx1Z2luTm90aWNlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLnBsdWdpbk5vdGljZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCh2YWx1ZTogUGx1Z2luTm90aWNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpbk5vdGljZUNvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBzZXR0aW5ncyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBzZXR0aW5ncyBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHBsdWdpblNldHRpbmdzQ29tcG9uZW50KCk6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHBsdWdpbiBzZXR0aW5ncyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFBsdWdpbiBzZXR0aW5ncyBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpblNldHRpbmdzQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0Pikge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdwbHVnaW5TZXR0aW5nc0NvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlZGl0b3IgbG9jayBjb21wb25lbnQsIHVzZWQgdG8gbG9jayBub3RlcyByZWFkLW9ubHkgZHVyaW5nIGxvbmcgb3BlcmF0aW9ucy4gT3duZWQgYnlcbiAgICogdGhlIHBsdWdpbiwgc28gaXRzIGxvY2tzIGFyZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHBsdWdpbiB1bmxvYWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBFZGl0b3IgbG9jayBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHJlc291cmNlTG9ja0NvbXBvbmVudCgpOiBSZXNvdXJjZUxvY2tDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucmVzb3VyY2VMb2NrQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlZGl0b3IgbG9jayBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KHZhbHVlOiBSZXNvdXJjZUxvY2tDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncmVzb3VyY2VMb2NrQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRzOiBQbHVnaW5CYXNlQ29tcG9uZW50cyA9IHt9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gYW4gaW50ZXJuYWwgd3JhcHBlciBjb21wb25lbnQsIHdoaWNoIHtAbGluayBvbmxvYWR9IGF0dGFjaGVzIGFuZCBsb2Fkc1xuICAgKiBiZWZvcmUgd2lyaW5nIGFueXRoaW5nIHVwLiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXMgbG9hZGVkIGltbWVkaWF0ZWx5LFxuICAgKiBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlckNvbXBvbmVudC5hZGRDaGlsZChjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIGlmIG5lZWRlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpYCBmaXJzdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlPy4oKTtcbiAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygnZXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkLlxuICAgKlxuICAgKiBPcmNoZXN0cmF0ZXMgbG9hZGluZzogcmVnaXN0ZXJzIHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cywgbGV0cyB0aGUgc3ViY2xhc3Mgd2lyZSBpdHMgb3duXG4gICAqIGNvbXBvbmVudHMgdmlhIHtAbGluayBvbmxvYWRJbXBsfSwgdGhlbiBhd2FpdHMgdGhlIGFzeW5jIHRhaWwgb2YgZXZlcnkgbG9hZC5cbiAgICogRWFjaCBjb21wb25lbnQgbG9hZHMgYXMgaXQgaXMgYWRkZWQsIGNoaWxkcmVuLWZpcnN0LlxuICAgKlxuICAgKiBEbyBOT1Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QuIE92ZXJyaWRlIHtAbGluayBvbmxvYWRJbXBsfSBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIHdyYXBwZXIgaXMgYXR0YWNoZWQgYW5kIGxvYWRlZCBiZWZvcmUgYW55dGhpbmcgaXMgd2lyZWQgdXAsIHNvIGV2ZXJ5IGBhZGRDaGlsZGAgYmVsb3dcbiAgICAgIC8vIExvYWRzIGl0cyBjaGlsZCBzdHJhaWdodCBhd2F5IHJhdGhlciB0aGFuIHF1ZXVpbmcgaXQuXG4gICAgICAvLyBUaGF0IGlzIHdoYXQgbGV0cyBhIGNvbW1hbmQgaGFuZGxlciByZWdpc3RlciBpdHMgbWVudSBldmVudHMgZnJvbSBgb25SZWdpc3RlcmVkYCwgd2hpY2hcbiAgICAgIC8vIGByZWdpc3RlckNvbW1hbmRIYW5kbGVyc2AgYXdhaXRzIGFuZCB3aGljaCBhIHJlZ2lzdHJhciByZWZ1c2VzIHdoaWxlIHVubG9hZGVkLlxuICAgICAgLy8gQXR0YWNoaW5nIGl0IHVwIGZyb250IGFsc28gcmVnaXN0ZXJzIHRoZSB3cmFwcGVyIGZvciB0ZWFyZG93biBiZWZvcmUgYW55dGhpbmcgY2FuIHRocm93LlxuICAgICAgLy8gVGhlIGxvYWQgaXMgZXhwbGljaXQgcmF0aGVyIHRoYW4gbGVmdCB0byBgYWRkQ2hpbGRgLCB3aGljaCBsb2FkcyB0aGUgY2hpbGQgb25seSB3aGVuIHRoZVxuICAgICAgLy8gUGx1Z2luIGl0c2VsZiBpcyBsb2FkZWQgXHUyMDE0IHRydWUgd2hlbiBPYnNpZGlhbiBjYWxscyBgbG9hZCgpYCwgYnV0IG5vdCB3aGVuIGEgY2FsbGVyIGludm9rZXNcbiAgICAgIC8vIGBvbmxvYWQoKWAgZGlyZWN0bHkuXG4gICAgICBzdXBlci5hZGRDaGlsZCh0aGlzLndyYXBwZXJDb21wb25lbnQpO1xuICAgICAgdGhpcy53cmFwcGVyQ29tcG9uZW50LmxvYWQoKTtcblxuICAgICAgYXdhaXQgaW5pdEkxOE4odGhpcy5jcmVhdGVUcmFuc2xhdGlvbnNNYXAoKSk7XG4gICAgICB0aGlzLnBsdWdpbkNvbnRleHRDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgUGx1Z2luQ29udGV4dENvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogdGhpcy5tYW5pZmVzdC5pZFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbk5vdGljZUNvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5OYW1lOiB0aGlzLm1hbmlmZXN0Lm5hbWVcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQodGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQpKTtcbiAgICAgIHRoaXMuYWJvcnRTaWduYWxDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBBYm9ydFNpZ25hbENvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IENvbnNvbGVEZWJ1Z0NvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IFJlc291cmNlTG9ja0NvbXBvbmVudCh0aGlzLmFwcCwgdGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgLy8gTm90ZWJvb2sgTmF2aWdhdG9yIGRyYXdzIGl0cyBvd24gZmlsZSB0cmVlIGFuZCBuZXZlciByYWlzZXMgT2JzaWRpYW4ncyBgZmlsZS1tZW51YCAvXG4gICAgICAvLyBgZmlsZXMtbWVudWAgZXZlbnRzLCBzbyBldmVyeSBwbHVnaW4ncyBjb250ZXh0LW1lbnUgaXRlbXMgd291bGQgdmFuaXNoIGZvciBhbnlvbmUgYnJvd3NpbmdcbiAgICAgIC8vIFRocm91Z2ggaXQuIFdpcmVkIGhlcmUgcmF0aGVyIHRoYW4gcGVyLXBsdWdpbjogdGhlIGJyaWRnZSBzdGF5cyBkb3JtYW50IHdoZW4gTm90ZWJvb2tcbiAgICAgIC8vIE5hdmlnYXRvciBpcyBub3QgaW5zdGFsbGVkLCBhbmQgYSBwbHVnaW4gd2l0aCBubyBmaWxlL2ZvbGRlciBoYW5kbGVycyBjb250cmlidXRlcyBub3RoaW5nLlxuICAgICAgY29uc3Qgbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgICAgIHN1Ym1lbnVJY29uOiB0aGlzLmdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KHtcbiAgICAgICAgICBhY3RpdmVGaWxlUHJvdmlkZXI6IG5ldyBBcHBBY3RpdmVGaWxlUHJvdmlkZXIodGhpcy5hcHApLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiBbbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnRdLFxuICAgICAgICAgIGNvbW1hbmRSZWdpc3RyYXI6IG5ldyBQbHVnaW5Db21tYW5kUmVnaXN0cmFyKHRoaXMpLFxuICAgICAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogdGhpcy5hZGRDaGlsZChuZXcgTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHRoaXMuYXBwKSksXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgLy8gQWx3YXlzIGF2YWlsYWJsZTsgdGhlIGNvbW1hbmQncyBvd24gYGNhbkV4ZWN1dGVgIGhpZGVzIGl0IHVubGVzcyB0aGUgYWN0aXZlIG5vdGUgaXMgbG9ja2VkLlxuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVycygoKSA9PiBbXG4gICAgICAgIG5ldyBVbmxvY2tBY3RpdmVOb3RlQ29tbWFuZEhhbmRsZXIoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgXSk7XG5cbiAgICAgIHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD4oe1xuICAgICAgICAgIGRhdGFIYW5kbGVyOiBuZXcgUGx1Z2luRGF0YUhhbmRsZXIodGhpcyksXG4gICAgICAgICAgcGx1Z2luRXZlbnRTb3VyY2U6IG5ldyBQbHVnaW5FdmVudFNvdXJjZUltcGwodGhpcyksXG4gICAgICAgICAgcGx1Z2luU2V0dGluZ3NDbGFzczogT2JqZWN0XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBhd2FpdCB0aGlzLm9ubG9hZEltcGwoKTtcblxuICAgICAgLy8gRXZlcnkgY2hpbGQgaGFzIGFscmVhZHkgbG9hZGVkIGFzIGl0IHdhcyBhZGRlZDsgdGhpcyBhd2FpdHMgdGhlaXIgYWNjdW11bGF0ZWQgYXN5bmMgdGFpbHMgYW5kXG4gICAgICAvLyBSZXBvcnRzIGFueSBmYWlsdXJlIGFzIGEgc2luZ2xlIGBBZ2dyZWdhdGVFcnJvcmAuXG4gICAgICBhd2FpdCB0aGlzLndyYXBwZXJDb21wb25lbnQubG9hZFdpdGhQcm9taXNlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcmludEVycm9yKG5ldyBFcnJvcihgRXJyb3IgbG9hZGluZyBwbHVnaW4gJHt0aGlzLm1hbmlmZXN0Lm5hbWV9ICgke3RoaXMubWFuaWZlc3QuaWR9KWAsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy53cmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIHRyYW5zbGF0aW9ucyBtYXAgdXNlZCB0byBpbml0aWFsaXplIGkxOG4gZHVyaW5nIHtAbGluayBvbmxvYWR9LlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBzdXBwbHkgcGx1Z2luLXNwZWNpZmljIHRyYW5zbGF0aW9ucy4gVGhlIGRlZmF1bHQgcmV0dXJucyB0aGUgYnVpbHQtaW5cbiAgICogYG9ic2lkaWFuLWRldi11dGlsc2AgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb25zIG1hcC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2xhdGlvbnNNYXAoKTogVHJhbnNsYXRpb25zTWFwIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgaWNvbiBzaG93biBvbiB0aGUgcGx1Z2luJ3MgcGFyZW50IGVudHJ5IGluIE5vdGVib29rIE5hdmlnYXRvcidzIGNvbnRleHQgbWVudXMuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGJyYW5kIHRoYXQgZW50cnk7IHRoZSBkZWZhdWx0IGxlYXZlcyBpdCB3aXRob3V0IGFuIGljb24uIFRoZSBlbnRyeSBpc1xuICAgKiB0aXRsZWQgd2l0aCB0aGUgcGx1Z2luIG5hbWUgYW5kIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgXHUyMDE0IHNlZVxuICAgKiB7QGxpbmsgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYCcnYCBmb3Igbm8gaWNvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBkdXJpbmcge0BsaW5rIG9ubG9hZH0gdG8gd2lyZSBwbHVnaW4tc3BlY2lmaWMgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYWRkIGNoaWxkIGNvbXBvbmVudHMgdmlhIHtAbGluayBhZGRDaGlsZH0uIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBhcmVcbiAgICogYXZhaWxhYmxlIGhlcmUuIENoaWxkcmVuIGFyZSBsb2FkZWQgc2VxdWVudGlhbGx5IGluIHRoZSBvcmRlciB0aGV5IGFyZSBhZGRlZCAoY2hpbGRyZW4tZmlyc3QpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN1YmNsYXNzIGxvYWQgbG9naWMgaXMgY29tcGxldGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25sb2FkSW1wbCgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmVzIGEgdW5pdmVyc2FsIGNvbXBvbmVudCwgdW5sb2FkaW5nIHdoaWNoZXZlciBjb21wb25lbnQgdGhlIGtleSBoZWxkIGJlZm9yZS5cbiAgICpcbiAgICogS2V5ZWQgYnkgbmFtZSByYXRoZXIgdGhhbiBoYW5kZWQgdGhlIHByZXZpb3VzIHZhbHVlIGJlY2F1c2UgYGtleW9mIHRoaXNgIGV4Y2x1ZGVzIHByaXZhdGVcbiAgICogbWVtYmVycywgc28gdGhlIGNvbXBvbmVudHMgbGl2ZSBpbiBhIHNpbmdsZSB7QGxpbmsgUGx1Z2luQmFzZUNvbXBvbmVudHN9IGJhZyB3aG9zZSBrZXlzIEFSRVxuICAgKiBpbmRleGFibGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVEtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICovXG4gIHByaXZhdGUgc2V0Q29tcG9uZW50PFRLZXkgZXh0ZW5kcyBrZXlvZiBQbHVnaW5CYXNlQ29tcG9uZW50cz4oa2V5OiBUS2V5LCB2YWx1ZTogTm9uTnVsbGFibGU8UGx1Z2luQmFzZUNvbXBvbmVudHNbVEtleV0+KTogdm9pZCB7XG4gICAgY29uc3Qgb2xkQ29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzW2tleV07XG4gICAgaWYgKG9sZENvbXBvbmVudCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZChvbGRDb21wb25lbnQpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudHNba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUmVsb2FkcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBieSBkaXNhYmxpbmcgYW5kIHRoZW4gcmUtZW5hYmxpbmcgaXQuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gcmVsb2FkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBwbHVnaW4gaXMgcmVsb2FkZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWxvYWRQbHVnaW4ocGx1Z2luOiBQbHVnaW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGx1Z2lucyA9IHBsdWdpbi5hcHAucGx1Z2lucztcbiAgY29uc3QgcGx1Z2luSWQgPSBwbHVnaW4ubWFuaWZlc3QuaWQ7XG4gIGF3YWl0IHBsdWdpbnMuZGlzYWJsZVBsdWdpbihwbHVnaW5JZCk7XG4gIGF3YWl0IHBsdWdpbnMuZW5hYmxlUGx1Z2luKHBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhbiBlcnJvciBtZXNzYWdlIGFzIGEgbm90aWNlLCBsb2dzIGl0IHRvIHRoZSBjb25zb2xlLCBhbmQgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gZGlzYWJsZS5cbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSBhbmQgbG9nLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93RXJyb3JBbmREaXNhYmxlUGx1Z2luKHBsdWdpbjogUGx1Z2luLCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGx1Z2luTm90aWNlQ29tcG9uZW50ID0gbmV3IFBsdWdpbk5vdGljZUNvbXBvbmVudCh7XG4gICAgYXBwOiBwbHVnaW4uYXBwLFxuICAgIHBsdWdpbk5hbWU6IHBsdWdpbi5tYW5pZmVzdC5uYW1lXG4gIH0pO1xuICBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShtZXNzYWdlKTtcbiAgcHJpbnRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xuICBhd2FpdCBwbHVnaW4uYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbihwbHVnaW4ubWFuaWZlc3QuaWQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLGNBQWM7QUFRdkIsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUywrQkFBK0I7QUFDeEMsU0FBUyxzQ0FBc0M7QUFDL0MsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyw0QkFBNEI7QUFDckMsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyxvREFBb0Q7QUFDN0QsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxnQkFBZ0I7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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "93.0.0",
3
+ "version": "93.2.0",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development.",
5
5
  "keywords": [
6
6
  "obsidian"