obsidian-integration-testing 2.0.6 → 2.1.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.
@@ -33,7 +33,7 @@ async function enablePluginWithErrorCapture({ app, pluginId }) {
33
33
  errorMessage = void 0;
34
34
  return result;
35
35
  } catch (error) {
36
- errorMessage = error instanceof Error ? error.message : String(error);
36
+ errorMessage = serializeError(error);
37
37
  throw error;
38
38
  }
39
39
  };
@@ -51,4 +51,4 @@ async function enablePluginWithErrorCapture({ app, pluginId }) {
51
51
  0 && (module.exports = {
52
52
  enablePluginWithErrorCapture
53
53
  });
54
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VuYWJsZS1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgaGVscGVyIGZvciBlbmFibGluZyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICogVXNlZCBieSBib3RoIHRoZSBnbG9iYWwgc2V0dXAgYW5kIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vbkFyZ3MgfSBmcm9tICcuL29ic2lkaWFuLWNsaS5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVQbHVnaW5QYXJhbXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLlxuICAgKi9cbiAgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgZW5hYmxpbmcgYSBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVBsdWdpblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgcGx1Z2luIGZhaWxlZCB0byBsb2FkLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBsb2FkZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBsdWdpbiBpcyBpbiB0aGUgZW5hYmxlZCBzZXQgYWZ0ZXIgdGhlIGVuYWJsZSBhdHRlbXB0LlxuICAgKi9cbiAgaXNFbmFibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBwbHVnaW4gaW5zaWRlIE9ic2lkaWFuIGFuZCBjYXB0dXJlcyBhbnkgbG9hZCBlcnJvci5cbiAqXG4gKiBNb25rZXktcGF0Y2hlcyBgYXBwLnBsdWdpbnMubG9hZFBsdWdpbmAgdG8gaW50ZXJjZXB0IGVycm9ycyBiZWZvcmVcbiAqIE9ic2lkaWFuJ3MgYGVuYWJsZVBsdWdpbmAgdHJ5LWNhdGNoIHN3YWxsb3dzIHRoZW0uIFRoZSBvcmlnaW5hbCBtZXRob2RcbiAqIGlzIGFsd2F5cyByZXN0b3JlZCBpbiBhIGBmaW5hbGx5YCBibG9jay5cbiAqXG4gKiBEZXNpZ25lZCB0byBiZSBwYXNzZWQgYXMgdGhlIGBmbmAgYXJndW1lbnQgdG8ge0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBjb21tb24gYXJncyBwbHVzIHRoZSBwbHVnaW4gSUQuXG4gKiBAcGFyYW0gYXJncy5hcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGFyZ3MucGx1Z2luSWQgLSBUaGUgSUQgb2YgdGhlIHBsdWdpbiB0byBlbmFibGUuXG4gKiBAcmV0dXJucyBUaGUgZW5hYmxlIHJlc3VsdCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIGVuYWJsZWQgc3RhdHVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSh7IGFwcCwgcGx1Z2luSWQgfTogQ29tbW9uQXJncyAmIEVuYWJsZVBsdWdpblBhcmFtcyk6IFByb21pc2U8RW5hYmxlUGx1Z2luUmVzdWx0PiB7XG4gIGlmICghYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5zZXRFbmFibGUodHJ1ZSk7XG4gIH1cblxuICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgLS0gSW50ZW50aW9uYWwgbW9ua2V5LXBhdGNoOyByZXN0b3JlZCBpbiBmaW5hbGx5LlxuICBjb25zdCBvcmlnTG9hZFBsdWdpbiA9IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW47XG4gIGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbiBsb2FkUGx1Z2luKGlkOiBzdHJpbmcsIGlzVXNlckVuYWJsZWQ/OiBib29sZWFuKTogUHJvbWlzZTxQbHVnaW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3JpZ0xvYWRQbHVnaW4uY2FsbCh0aGlzLCBpZCwgaXNVc2VyRW5hYmxlZCk7XG4gICAgICBlcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBJbnRlbnRpb25hbCByZXN0b3JlIG9mIG1vbmtleS1wYXRjaC5cbiAgICBhcHAucGx1Z2lucy5sb2FkUGx1Z2luID0gb3JpZ0xvYWRQbHVnaW47XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVycm9yTWVzc2FnZSxcbiAgICBpc0VuYWJsZWQ6IGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZClcbiAgfTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvREEsZUFBc0IsNkJBQTZCLEVBQUUsS0FBSyxTQUFTLEdBQWlFO0FBQ2xJLE1BQUksQ0FBQyxJQUFJLFFBQVEsVUFBVSxHQUFHO0FBQzVCLFVBQU0sSUFBSSxRQUFRLFVBQVUsSUFBSTtBQUFBLEVBQ2xDO0FBRUEsTUFBSTtBQUVKLFFBQU0saUJBQWlCLElBQUksUUFBUTtBQUNuQyxNQUFJLFFBQVEsYUFBYSxlQUFlLFdBQVcsSUFBWSxlQUEwQztBQUN2RyxRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sZUFBZSxLQUFLLE1BQU0sSUFBSSxhQUFhO0FBQ2hFLHFCQUFlO0FBQ2YsYUFBTztBQUFBLElBQ1QsU0FBUyxPQUFPO0FBQ2QscUJBQWUsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUNwRSxZQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFFQSxNQUFJO0FBQ0YsVUFBTSxJQUFJLFFBQVEsb0JBQW9CLFFBQVE7QUFBQSxFQUNoRCxVQUFFO0FBRUEsUUFBSSxRQUFRLGFBQWE7QUFBQSxFQUMzQjtBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxXQUFXLElBQUksUUFBUSxlQUFlLElBQUksUUFBUTtBQUFBLEVBQ3BEO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
54
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VuYWJsZS1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgaGVscGVyIGZvciBlbmFibGluZyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICogVXNlZCBieSBib3RoIHRoZSBnbG9iYWwgc2V0dXAgYW5kIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vbkFyZ3MgfSBmcm9tICcuL29ic2lkaWFuLWNsaS5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVQbHVnaW5QYXJhbXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLlxuICAgKi9cbiAgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgZW5hYmxpbmcgYSBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVBsdWdpblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgcGx1Z2luIGZhaWxlZCB0byBsb2FkLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBsb2FkZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBsdWdpbiBpcyBpbiB0aGUgZW5hYmxlZCBzZXQgYWZ0ZXIgdGhlIGVuYWJsZSBhdHRlbXB0LlxuICAgKi9cbiAgaXNFbmFibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEluamVjdGVkIGludG8gdGhlIElJRkUgc2NvcGUgYnkge0BsaW5rIGV2YWxJbk9ic2lkaWFufSBhdCBydW50aW1lLlxuICogTm90IGltcG9ydGFibGUgXHUyMDE0IGV4aXN0cyBvbmx5IGluc2lkZSB0aGUgZ2VuZXJhdGVkIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHNlcmlhbGl6ZS5cbiAqIEByZXR1cm5zIEEgZm9ybWF0dGVkIGVycm9yIHN0cmluZyB3aXRoIHN0YWNrIHRyYWNlIGFuZCBjYXVzZSBjaGFpbi5cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93bik6IHN0cmluZztcblxuLyoqXG4gKiBFbmFibGVzIGEgcGx1Z2luIGluc2lkZSBPYnNpZGlhbiBhbmQgY2FwdHVyZXMgYW55IGxvYWQgZXJyb3IuXG4gKlxuICogTW9ua2V5LXBhdGNoZXMgYGFwcC5wbHVnaW5zLmxvYWRQbHVnaW5gIHRvIGludGVyY2VwdCBlcnJvcnMgYmVmb3JlXG4gKiBPYnNpZGlhbidzIGBlbmFibGVQbHVnaW5gIHRyeS1jYXRjaCBzd2FsbG93cyB0aGVtLiBUaGUgb3JpZ2luYWwgbWV0aG9kXG4gKiBpcyBhbHdheXMgcmVzdG9yZWQgaW4gYSBgZmluYWxseWAgYmxvY2suXG4gKlxuICogRGVzaWduZWQgdG8gYmUgcGFzc2VkIGFzIHRoZSBgZm5gIGFyZ3VtZW50IHRvIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgY29tbW9uIGFyZ3MgcGx1cyB0aGUgcGx1Z2luIElELlxuICogQHBhcmFtIGFyZ3MuYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBhcmdzLnBsdWdpbklkIC0gVGhlIElEIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLlxuICogQHJldHVybnMgVGhlIGVuYWJsZSByZXN1bHQgd2l0aCBlcnJvciBtZXNzYWdlIGFuZCBlbmFibGVkIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmUoeyBhcHAsIHBsdWdpbklkIH06IENvbW1vbkFyZ3MgJiBFbmFibGVQbHVnaW5QYXJhbXMpOiBQcm9taXNlPEVuYWJsZVBsdWdpblJlc3VsdD4ge1xuICBpZiAoIWFwcC5wbHVnaW5zLmlzRW5hYmxlZCgpKSB7XG4gICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICB9XG5cbiAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIEludGVudGlvbmFsIG1vbmtleS1wYXRjaDsgcmVzdG9yZWQgaW4gZmluYWxseS5cbiAgY29uc3Qgb3JpZ0xvYWRQbHVnaW4gPSBhcHAucGx1Z2lucy5sb2FkUGx1Z2luO1xuICBhcHAucGx1Z2lucy5sb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24gbG9hZFBsdWdpbihpZDogc3RyaW5nLCBpc1VzZXJFbmFibGVkPzogYm9vbGVhbik6IFByb21pc2U8UGx1Z2luPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9yaWdMb2FkUGx1Z2luLmNhbGwodGhpcywgaWQsIGlzVXNlckVuYWJsZWQpO1xuICAgICAgZXJyb3JNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JNZXNzYWdlID0gc2VyaWFsaXplRXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gSW50ZW50aW9uYWwgcmVzdG9yZSBvZiBtb25rZXktcGF0Y2guXG4gICAgYXBwLnBsdWdpbnMubG9hZFBsdWdpbiA9IG9yaWdMb2FkUGx1Z2luO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlcnJvck1lc3NhZ2UsXG4gICAgaXNFbmFibGVkOiBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpXG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkRBLGVBQXNCLDZCQUE2QixFQUFFLEtBQUssU0FBUyxHQUFpRTtBQUNsSSxNQUFJLENBQUMsSUFBSSxRQUFRLFVBQVUsR0FBRztBQUM1QixVQUFNLElBQUksUUFBUSxVQUFVLElBQUk7QUFBQSxFQUNsQztBQUVBLE1BQUk7QUFFSixRQUFNLGlCQUFpQixJQUFJLFFBQVE7QUFDbkMsTUFBSSxRQUFRLGFBQWEsZUFBZSxXQUFXLElBQVksZUFBMEM7QUFDdkcsUUFBSTtBQUNGLFlBQU0sU0FBUyxNQUFNLGVBQWUsS0FBSyxNQUFNLElBQUksYUFBYTtBQUNoRSxxQkFBZTtBQUNmLGFBQU87QUFBQSxJQUNULFNBQVMsT0FBTztBQUNkLHFCQUFlLGVBQWUsS0FBSztBQUNuQyxZQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFFQSxNQUFJO0FBQ0YsVUFBTSxJQUFJLFFBQVEsb0JBQW9CLFFBQVE7QUFBQSxFQUNoRCxVQUFFO0FBRUEsUUFBSSxRQUFRLGFBQWE7QUFBQSxFQUMzQjtBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxXQUFXLElBQUksUUFBUSxlQUFlLElBQUksUUFBUTtBQUFBLEVBQ3BEO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -90,9 +90,13 @@ async function coreSetup(params) {
90
90
  if (tempVault) {
91
91
  await tempVault.dispose(transport);
92
92
  }
93
+ } catch (cleanupError) {
94
+ (0, import_log.log)(`[integration-setup] Vault cleanup error (non-fatal): ${String(cleanupError)}`);
95
+ }
96
+ try {
93
97
  await transport.dispose?.();
94
98
  } catch (cleanupError) {
95
- (0, import_log.log)(`[integration-setup] Cleanup error (non-fatal): ${String(cleanupError)}`);
99
+ (0, import_log.log)(`[integration-setup] Transport cleanup error (non-fatal): ${String(cleanupError)}`);
96
100
  }
97
101
  throw error;
98
102
  }
@@ -138,4 +142,4 @@ async function resolveDistPath(projectRoot) {
138
142
  coreSetup,
139
143
  coreTeardown
140
144
  });
141
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2dsb2JhbC1zZXR1cC1jb3JlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgbG9naWMgZm9yIGludGVncmF0aW9uIHRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93bi5cbiAqXG4gKiBWaXRlc3QgYW5kIEplc3QgYWRhcHRlcnMgZGVsZWdhdGUgdG8gdGhlc2UgZnVuY3Rpb25zLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBzdGF0LFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGxvYWRFbnZGaWxlIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSB9IGZyb20gJy4vZW5hYmxlLXBsdWdpbi5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkuY2pzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5janMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmNvbnN0IERJU1RfREVWID0gJ2Rpc3QvZGV2JztcbmNvbnN0IERJU1RfQlVJTEQgPSAnZGlzdC9idWlsZCc7XG5jb25zdCBNQUlOX0pTID0gJ21haW4uanMnO1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9ICcub2JzaWRpYW4nO1xuY29uc3QgUExVR0lOU19ESVIgPSAncGx1Z2lucyc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19KU09OID0gJ2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3JlU2V0dXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcmVTZXR1cFBhcmFtcyB7XG4gIC8qKiBUcmFuc3BvcnQgb3B0aW9ucy4gV2hlbiBvbWl0dGVkLCBkZWZhdWx0cyB0byB0aGUgQ0xJIHRyYW5zcG9ydC4gKi9cbiAgdHJhbnNwb3J0T3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgcmV0dXJuZWQgYnkge0BsaW5rIGNvcmVTZXR1cH0sIHVzZWQgYnkgZnJhbWV3b3JrIGFkYXB0ZXJzXG4gKiB0byBwYXNzIGNvbnRleHQgdG8gdGVzdCB3b3JrZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcmVTZXR1cFJlc3VsdCB7XG4gIC8qKiBUaGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLiAqL1xuICB0ZW1wVmF1bHQ6IFRlbXBWYXVsdDtcblxuICAvKiogVGhlIHRyYW5zcG9ydCBpbnN0YW5jZSB1c2VkIGR1cmluZyBzZXR1cC4gKi9cbiAgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKiogVGhlIHRyYW5zcG9ydCBvcHRpb25zIHRoYXQgd2VyZSByZXNvbHZlZC4gKi9cbiAgdHJhbnNwb3J0T3B0aW9uczogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZyYW1ld29yay1hZ25vc3RpYyBnbG9iYWwgc2V0dXAgbG9naWMuXG4gKlxuICogTG9hZHMgYC5lbnZgIGZyb20gdGhlIHByb2plY3Qgcm9vdCwgY3JlYXRlcyBhIHRyYW5zcG9ydCwgY29waWVzIHRoZSBidWlsdFxuICogcGx1Z2luIGludG8gYSB0ZW1wb3JhcnkgdmF1bHQsIHJlZ2lzdGVycyB0aGUgdmF1bHQgd2l0aCBPYnNpZGlhbiwgYW5kXG4gKiBlbmFibGVzIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNldHVwIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgc2V0dXAgcmVzdWx0IGNvbnRhaW5pbmcgdGhlIHRlbXAgdmF1bHQsIHRyYW5zcG9ydCwgYW5kIHJlc29sdmVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3JlU2V0dXAocGFyYW1zPzogQ29yZVNldHVwUGFyYW1zKTogUHJvbWlzZTxDb3JlU2V0dXBSZXN1bHQ+IHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBmaW5kUHJvamVjdFJvb3QoKTtcbiAgY29uc3QgZW52RmlsZVBhdGggPSBqb2luKHByb2plY3RSb290LCAnLmVudicpO1xuICBpZiAoZXhpc3RzU3luYyhlbnZGaWxlUGF0aCkpIHtcbiAgICBsb2FkRW52RmlsZShlbnZGaWxlUGF0aCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnRPcHRpb25zID0gcGFyYW1zPy50cmFuc3BvcnRPcHRpb25zO1xuICBsb2coJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gQ3JlYXRpbmcgdHJhbnNwb3J0Li4uJyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cF0gVHJhbnNwb3J0IGNyZWF0ZWQ6ICR7dHJhbnNwb3J0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG5cbiAgbGV0IHRlbXBWYXVsdDogVGVtcFZhdWx0IHwgdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIFByb2plY3Qgcm9vdDogJHtwcm9qZWN0Um9vdH1gKTtcbiAgICBjb25zdCBkaXN0UGF0aCA9IGF3YWl0IHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdCk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShqb2luKGRpc3RQYXRoLCAnbWFuaWZlc3QuanNvbicpLCAndXRmLTgnKSkgYXMgUGx1Z2luTWFuaWZlc3Q7XG4gICAgY29uc3QgcGx1Z2luSWQgPSBtYW5pZmVzdEpzb24uaWQ7XG5cbiAgICBpZiAodHJhbnNwb3J0LmlzTW9iaWxlICYmIG1hbmlmZXN0SnNvbi5pc0Rlc2t0b3BPbmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBpc0Rlc2t0b3BPbmx5OiB0cnVlIGluIG1hbmlmZXN0Lmpzb24uIE1vYmlsZSBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW5ub3QgcnVuIGZvciBkZXNrdG9wLW9ubHkgcGx1Z2lucy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG1haW5KcyA9IGpvaW4oZGlzdFBhdGgsIE1BSU5fSlMpO1xuICAgIGNvbnN0IGJ1aWxkU3RhdCA9IGF3YWl0IHN0YXQobWFpbkpzKTtcblxuICAgIGxvZyhgW2ludGVncmF0aW9uLXNldHVwXSBVc2luZyAke2Rpc3RQYXRofSAoJHtidWlsZFN0YXQubXRpbWUudG9JU09TdHJpbmcoKX0pLiBJZiBvdXRkYXRlZCwgcmVidWlsZC5gKTtcblxuICAgIHRlbXBWYXVsdCA9IG5ldyBUZW1wVmF1bHQoKTtcbiAgICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cF0gQ3JlYXRlZCB0ZW1wIHZhdWx0OiAke3RlbXBWYXVsdC5wYXRofWApO1xuICAgIGNvbnN0IHBsdWdpbkRpciA9IGpvaW4odGVtcFZhdWx0LnBhdGgsIE9CU0lESUFOX0NPTkZJR19ESVIsIFBMVUdJTlNfRElSLCBwbHVnaW5JZCk7XG4gICAgYXdhaXQgbWtkaXIocGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBjcChkaXN0UGF0aCwgcGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiksIEpTT04uc3RyaW5naWZ5KFtwbHVnaW5JZF0pKTtcblxuICAgIGxvZygnW2ludGVncmF0aW9uLXNldHVwXSBTeW5jaW5nIHZhdWx0IHRvIGRldmljZS4uLicpO1xuICAgIGF3YWl0IHRlbXBWYXVsdC5zeW5jVG9EZXZpY2UodHJhbnNwb3J0KTtcbiAgICBsb2coJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gUmVnaXN0ZXJpbmcgdmF1bHQuLi4nKTtcbiAgICBhd2FpdCB0ZW1wVmF1bHQucmVnaXN0ZXIodHJhbnNwb3J0KTtcbiAgICBsb2coJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gVmF1bHQgcmVnaXN0ZXJlZC4nKTtcblxuICAgIC8vIEVuYWJsZSB0aGUgcGx1Z2luIGFuZCB2ZXJpZnkgaXQgbG9hZGVkLiBPYnNpZGlhbidzIGVuYWJsZVBsdWdpbigpIHdyYXBzXG4gICAgLy8gTG9hZFBsdWdpbigpIGluIGEgdHJ5LWNhdGNoIHRoYXQgc3dhbGxvd3MgZXJyb3JzIGFuZCByZXR1cm5zIGZhbHNlLlxuICAgIC8vIFdlIG1vbmtleS1wYXRjaCBsb2FkUGx1Z2luKCkgdG8gY2FwdHVyZSB0aGUgZXJyb3IgYmVmb3JlIGl0J3Mgc3dhbGxvd2VkLlxuICAgIGxvZyhgW2ludGVncmF0aW9uLXNldHVwXSBFbmFibGluZyBwbHVnaW4gXCIke3BsdWdpbklkfVwiLi4uYCk7XG4gICAgY29uc3QgeyBlcnJvck1lc3NhZ2UgfSA9IGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICAgIGFyZ3M6IHsgcGx1Z2luSWQgfSxcbiAgICAgIGZuOiBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlLFxuICAgICAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrczogdHJ1ZSxcbiAgICAgIHRyYW5zcG9ydCxcbiAgICAgIHZhdWx0UGF0aDogdGVtcFZhdWx0LnBhdGhcbiAgICB9KTtcblxuICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIFwiJHtwbHVnaW5JZH1cIiBmYWlsZWQgdG8gbG9hZDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgZW5hYmxlZCBzdWNjZXNzZnVsbHkuYCk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nKCdbaW50ZWdyYXRpb24tc2V0dXBdIFNldHVwIGZhaWxlZCwgY2xlYW5pbmcgdXAuLi4nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRlbXBWYXVsdCkge1xuICAgICAgICBhd2FpdCB0ZW1wVmF1bHQuZGlzcG9zZSh0cmFuc3BvcnQpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdHJhbnNwb3J0LmRpc3Bvc2U/LigpO1xuICAgIH0gY2F0Y2ggKGNsZWFudXBFcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIENsZWFudXAgZXJyb3IgKG5vbi1mYXRhbCk6ICR7U3RyaW5nKGNsZWFudXBFcnJvcil9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHsgdGVtcFZhdWx0LCB0cmFuc3BvcnQsIHRyYW5zcG9ydE9wdGlvbnMgfTtcbn1cblxuLyoqXG4gKiBGcmFtZXdvcmstYWdub3N0aWMgZ2xvYmFsIHRlYXJkb3duIGxvZ2ljLlxuICpcbiAqIERpc3Bvc2VzIG9mIHRoZSB0ZW1wb3JhcnkgdmF1bHQgYW5kIHRyYW5zcG9ydCBjcmVhdGVkIGR1cmluZyBzZXR1cC5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIHJlc3VsdCBmcm9tIHtAbGluayBjb3JlU2V0dXB9LiBXaGVuIGB1bmRlZmluZWRgLCBkb2VzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3JlVGVhcmRvd24ocmVzdWx0PzogQ29yZVNldHVwUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJlc3VsdD8udGVtcFZhdWx0LmRpc3Bvc2UocmVzdWx0LnRyYW5zcG9ydCk7XG4gIGF3YWl0IHJlc3VsdD8udHJhbnNwb3J0LmRpc3Bvc2U/LigpO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBwcm9qZWN0IHJvb3QgYnkgd2Fsa2luZyB1cCBmcm9tIGBwcm9jZXNzLmN3ZCgpYCBsb29raW5nIGZvciBgcGFja2FnZS5qc29uYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290LlxuICovXG5mdW5jdGlvbiBmaW5kUHJvamVjdFJvb3QoKTogc3RyaW5nIHtcbiAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gTG9vcCB0ZXJtaW5hdGVzIGF0IGZpbGVzeXN0ZW0gcm9vdC5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKGRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gam9pbihkaXIsICcuLicpO1xuICAgIGlmIChwYXJlbnQgPT09IGRpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwcm9qZWN0IHJvb3QgKG5vIHBhY2thZ2UuanNvbiBmb3VuZCkuJyk7XG4gICAgfVxuICAgIGRpciA9IHBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkaXN0IHBhdGggdG8gdXNlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqXG4gKiBQaWNrcyB3aGljaGV2ZXIgb2YgYGRpc3QvZGV2YCBhbmQgYGRpc3QvYnVpbGRgIGhhcyBhIG5ld2VyIGBtYWluLmpzYC5cbiAqIElmIG9ubHkgb25lIGV4aXN0cywgdGhhdCBvbmUgaXMgdXNlZC4gVGhyb3dzIGlmIG5laXRoZXIgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBwcm9qZWN0Um9vdCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2hvc2VuIGRpc3QgZm9sZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGlzdFBhdGgocHJvamVjdFJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRldlBhdGggPSBqb2luKHByb2plY3RSb290LCBESVNUX0RFVik7XG4gIGNvbnN0IGJ1aWxkUGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsIERJU1RfQlVJTEQpO1xuICBjb25zdCBkZXZNYWluSnMgPSBqb2luKGRldlBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZE1haW5KcyA9IGpvaW4oYnVpbGRQYXRoLCBNQUlOX0pTKTtcbiAgY29uc3QgZGV2U3RhdCA9IGV4aXN0c1N5bmMoZGV2TWFpbkpzKSA/IGF3YWl0IHN0YXQoZGV2TWFpbkpzKSA6IG51bGw7XG4gIGNvbnN0IGJ1aWxkU3RhdCA9IGV4aXN0c1N5bmMoYnVpbGRNYWluSnMpID8gYXdhaXQgc3RhdChidWlsZE1haW5KcykgOiBudWxsO1xuXG4gIGlmIChkZXZTdGF0ICYmIGJ1aWxkU3RhdCkge1xuICAgIHJldHVybiBkZXZTdGF0Lm10aW1lID4gYnVpbGRTdGF0Lm10aW1lID8gZGV2UGF0aCA6IGJ1aWxkUGF0aDtcbiAgfVxuXG4gIGlmIChkZXZTdGF0KSB7XG4gICAgcmV0dXJuIGRldlBhdGg7XG4gIH1cblxuICBpZiAoYnVpbGRTdGF0KSB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignTm8gYnVpbGQgZm91bmQuIFJ1biBgbnBtIHJ1biBidWlsZGAgb3IgYG5wbSBydW4gZGV2YCBmaXJzdC4nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLHFCQUEyQjtBQUMzQixzQkFNTztBQUNQLHVCQUFxQjtBQUNyQiwwQkFBNEI7QUFLNUIsMkJBQTZDO0FBQzdDLGlCQUFvQjtBQUNwQiwwQkFBK0I7QUFDL0Isd0JBQTBCO0FBQzFCLCtCQUEyQztBQUUzQyxNQUFNLFdBQVc7QUFDakIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sVUFBVTtBQUNoQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSx5QkFBeUI7QUFtQy9CLGVBQXNCLFVBQVUsUUFBb0Q7QUFDbEYsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLGtCQUFjLHVCQUFLLGFBQWEsTUFBTTtBQUM1QyxVQUFJLDJCQUFXLFdBQVcsR0FBRztBQUMzQix5Q0FBWSxXQUFXO0FBQUEsRUFDekI7QUFFQSxRQUFNLG1CQUFtQixRQUFRO0FBQ2pDLHNCQUFJLDJDQUEyQztBQUMvQyxRQUFNLFlBQVksVUFBTSxxREFBMkIsZ0JBQWdCO0FBQ25FLHNCQUFJLDBDQUEwQyxVQUFVLFlBQVksSUFBSSxFQUFFO0FBRTFFLE1BQUk7QUFFSixNQUFJO0FBQ0Ysd0JBQUkscUNBQXFDLFdBQVcsRUFBRTtBQUN0RCxVQUFNLFdBQVcsTUFBTSxnQkFBZ0IsV0FBVztBQUNsRCxVQUFNLGVBQWUsS0FBSyxNQUFNLFVBQU0sOEJBQVMsdUJBQUssVUFBVSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3hGLFVBQU0sV0FBVyxhQUFhO0FBRTlCLFFBQUksVUFBVSxZQUFZLGFBQWEsZUFBZTtBQUNwRCxZQUFNLElBQUk7QUFBQSxRQUNSLFdBQVcsUUFBUTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUVBLFVBQU0sYUFBUyx1QkFBSyxVQUFVLE9BQU87QUFDckMsVUFBTSxZQUFZLFVBQU0sc0JBQUssTUFBTTtBQUVuQyx3QkFBSSw2QkFBNkIsUUFBUSxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUMsMEJBQTBCO0FBRXJHLGdCQUFZLElBQUksNEJBQVU7QUFDMUIsd0JBQUksMkNBQTJDLFVBQVUsSUFBSSxFQUFFO0FBQy9ELFVBQU0sZ0JBQVksdUJBQUssVUFBVSxNQUFNLHFCQUFxQixhQUFhLFFBQVE7QUFDakYsY0FBTSx1QkFBTSxXQUFXLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDMUMsY0FBTSxvQkFBRyxVQUFVLFdBQVcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxjQUFNLCtCQUFVLHVCQUFLLFVBQVUsTUFBTSxxQkFBcUIsc0JBQXNCLEdBQUcsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFN0csd0JBQUksZ0RBQWdEO0FBQ3BELFVBQU0sVUFBVSxhQUFhLFNBQVM7QUFDdEMsd0JBQUksMENBQTBDO0FBQzlDLFVBQU0sVUFBVSxTQUFTLFNBQVM7QUFDbEMsd0JBQUksdUNBQXVDO0FBSzNDLHdCQUFJLHdDQUF3QyxRQUFRLE1BQU07QUFDMUQsVUFBTSxFQUFFLGFBQWEsSUFBSSxVQUFNLG9DQUFlO0FBQUEsTUFDNUMsTUFBTSxFQUFFLFNBQVM7QUFBQSxNQUNqQixJQUFJO0FBQUEsTUFDSiwyQkFBMkI7QUFBQSxNQUMzQjtBQUFBLE1BQ0EsV0FBVyxVQUFVO0FBQUEsSUFDdkIsQ0FBQztBQUVELFFBQUksY0FBYztBQUNoQixZQUFNLElBQUksTUFBTSxXQUFXLFFBQVEscUJBQXFCLFlBQVksRUFBRTtBQUFBLElBQ3hFO0FBRUEsd0JBQUksK0JBQStCLFFBQVEseUJBQXlCO0FBQUEsRUFDdEUsU0FBUyxPQUFnQjtBQUN2Qix3QkFBSSxrREFBa0Q7QUFDdEQsUUFBSTtBQUNGLFVBQUksV0FBVztBQUNiLGNBQU0sVUFBVSxRQUFRLFNBQVM7QUFBQSxNQUNuQztBQUNBLFlBQU0sVUFBVSxVQUFVO0FBQUEsSUFDNUIsU0FBUyxjQUF1QjtBQUM5QiwwQkFBSSxrREFBa0QsT0FBTyxZQUFZLENBQUMsRUFBRTtBQUFBLElBQzlFO0FBQ0EsVUFBTTtBQUFBLEVBQ1I7QUFFQSxTQUFPLEVBQUUsV0FBVyxXQUFXLGlCQUFpQjtBQUNsRDtBQVNBLGVBQXNCLGFBQWEsUUFBeUM7QUFDMUUsUUFBTSxRQUFRLFVBQVUsUUFBUSxPQUFPLFNBQVM7QUFDaEQsUUFBTSxRQUFRLFVBQVUsVUFBVTtBQUNwQztBQU9BLFNBQVMsa0JBQTBCO0FBQ2pDLE1BQUksTUFBTSxRQUFRLElBQUk7QUFHdEIsU0FBTyxNQUFNO0FBQ1gsWUFBSSwrQkFBVyx1QkFBSyxLQUFLLGNBQWMsQ0FBQyxHQUFHO0FBQ3pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxhQUFTLHVCQUFLLEtBQUssSUFBSTtBQUM3QixRQUFJLFdBQVcsS0FBSztBQUNsQixZQUFNLElBQUksTUFBTSxzREFBc0Q7QUFBQSxJQUN4RTtBQUNBLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFXQSxlQUFlLGdCQUFnQixhQUFzQztBQUNuRSxRQUFNLGNBQVUsdUJBQUssYUFBYSxRQUFRO0FBQzFDLFFBQU0sZ0JBQVksdUJBQUssYUFBYSxVQUFVO0FBQzlDLFFBQU0sZ0JBQVksdUJBQUssU0FBUyxPQUFPO0FBQ3ZDLFFBQU0sa0JBQWMsdUJBQUssV0FBVyxPQUFPO0FBQzNDLFFBQU0sY0FBVSwyQkFBVyxTQUFTLElBQUksVUFBTSxzQkFBSyxTQUFTLElBQUk7QUFDaEUsUUFBTSxnQkFBWSwyQkFBVyxXQUFXLElBQUksVUFBTSxzQkFBSyxXQUFXLElBQUk7QUFFdEUsTUFBSSxXQUFXLFdBQVc7QUFDeEIsV0FBTyxRQUFRLFFBQVEsVUFBVSxRQUFRLFVBQVU7QUFBQSxFQUNyRDtBQUVBLE1BQUksU0FBUztBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxXQUFXO0FBQ2IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLElBQUksTUFBTSw2REFBNkQ7QUFDL0U7IiwKICAibmFtZXMiOiBbXQp9Cg==
145
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2dsb2JhbC1zZXR1cC1jb3JlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgbG9naWMgZm9yIGludGVncmF0aW9uIHRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93bi5cbiAqXG4gKiBWaXRlc3QgYW5kIEplc3QgYWRhcHRlcnMgZGVsZWdhdGUgdG8gdGhlc2UgZnVuY3Rpb25zLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBzdGF0LFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGxvYWRFbnZGaWxlIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSB9IGZyb20gJy4vZW5hYmxlLXBsdWdpbi5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkuY2pzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5janMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmNvbnN0IERJU1RfREVWID0gJ2Rpc3QvZGV2JztcbmNvbnN0IERJU1RfQlVJTEQgPSAnZGlzdC9idWlsZCc7XG5jb25zdCBNQUlOX0pTID0gJ21haW4uanMnO1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9ICcub2JzaWRpYW4nO1xuY29uc3QgUExVR0lOU19ESVIgPSAncGx1Z2lucyc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19KU09OID0gJ2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3JlU2V0dXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcmVTZXR1cFBhcmFtcyB7XG4gIC8qKiBUcmFuc3BvcnQgb3B0aW9ucy4gV2hlbiBvbWl0dGVkLCBkZWZhdWx0cyB0byB0aGUgQ0xJIHRyYW5zcG9ydC4gKi9cbiAgdHJhbnNwb3J0T3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgcmV0dXJuZWQgYnkge0BsaW5rIGNvcmVTZXR1cH0sIHVzZWQgYnkgZnJhbWV3b3JrIGFkYXB0ZXJzXG4gKiB0byBwYXNzIGNvbnRleHQgdG8gdGVzdCB3b3JrZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcmVTZXR1cFJlc3VsdCB7XG4gIC8qKiBUaGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLiAqL1xuICB0ZW1wVmF1bHQ6IFRlbXBWYXVsdDtcblxuICAvKiogVGhlIHRyYW5zcG9ydCBpbnN0YW5jZSB1c2VkIGR1cmluZyBzZXR1cC4gKi9cbiAgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKiogVGhlIHRyYW5zcG9ydCBvcHRpb25zIHRoYXQgd2VyZSByZXNvbHZlZC4gKi9cbiAgdHJhbnNwb3J0T3B0aW9uczogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZyYW1ld29yay1hZ25vc3RpYyBnbG9iYWwgc2V0dXAgbG9naWMuXG4gKlxuICogTG9hZHMgYC5lbnZgIGZyb20gdGhlIHByb2plY3Qgcm9vdCwgY3JlYXRlcyBhIHRyYW5zcG9ydCwgY29waWVzIHRoZSBidWlsdFxuICogcGx1Z2luIGludG8gYSB0ZW1wb3JhcnkgdmF1bHQsIHJlZ2lzdGVycyB0aGUgdmF1bHQgd2l0aCBPYnNpZGlhbiwgYW5kXG4gKiBlbmFibGVzIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNldHVwIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgc2V0dXAgcmVzdWx0IGNvbnRhaW5pbmcgdGhlIHRlbXAgdmF1bHQsIHRyYW5zcG9ydCwgYW5kIHJlc29sdmVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3JlU2V0dXAocGFyYW1zPzogQ29yZVNldHVwUGFyYW1zKTogUHJvbWlzZTxDb3JlU2V0dXBSZXN1bHQ+IHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBmaW5kUHJvamVjdFJvb3QoKTtcbiAgY29uc3QgZW52RmlsZVBhdGggPSBqb2luKHByb2plY3RSb290LCAnLmVudicpO1xuICBpZiAoZXhpc3RzU3luYyhlbnZGaWxlUGF0aCkpIHtcbiAgICBsb2FkRW52RmlsZShlbnZGaWxlUGF0aCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnRPcHRpb25zID0gcGFyYW1zPy50cmFuc3BvcnRPcHRpb25zO1xuICBsb2coJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gQ3JlYXRpbmcgdHJhbnNwb3J0Li4uJyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cF0gVHJhbnNwb3J0IGNyZWF0ZWQ6ICR7dHJhbnNwb3J0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG5cbiAgbGV0IHRlbXBWYXVsdDogVGVtcFZhdWx0IHwgdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIFByb2plY3Qgcm9vdDogJHtwcm9qZWN0Um9vdH1gKTtcbiAgICBjb25zdCBkaXN0UGF0aCA9IGF3YWl0IHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdCk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShqb2luKGRpc3RQYXRoLCAnbWFuaWZlc3QuanNvbicpLCAndXRmLTgnKSkgYXMgUGx1Z2luTWFuaWZlc3Q7XG4gICAgY29uc3QgcGx1Z2luSWQgPSBtYW5pZmVzdEpzb24uaWQ7XG5cbiAgICBpZiAodHJhbnNwb3J0LmlzTW9iaWxlICYmIG1hbmlmZXN0SnNvbi5pc0Rlc2t0b3BPbmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBpc0Rlc2t0b3BPbmx5OiB0cnVlIGluIG1hbmlmZXN0Lmpzb24uIE1vYmlsZSBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW5ub3QgcnVuIGZvciBkZXNrdG9wLW9ubHkgcGx1Z2lucy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG1haW5KcyA9IGpvaW4oZGlzdFBhdGgsIE1BSU5fSlMpO1xuICAgIGNvbnN0IGJ1aWxkU3RhdCA9IGF3YWl0IHN0YXQobWFpbkpzKTtcblxuICAgIGxvZyhgW2ludGVncmF0aW9uLXNldHVwXSBVc2luZyAke2Rpc3RQYXRofSAoJHtidWlsZFN0YXQubXRpbWUudG9JU09TdHJpbmcoKX0pLiBJZiBvdXRkYXRlZCwgcmVidWlsZC5gKTtcblxuICAgIHRlbXBWYXVsdCA9IG5ldyBUZW1wVmF1bHQoKTtcbiAgICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cF0gQ3JlYXRlZCB0ZW1wIHZhdWx0OiAke3RlbXBWYXVsdC5wYXRofWApO1xuICAgIGNvbnN0IHBsdWdpbkRpciA9IGpvaW4odGVtcFZhdWx0LnBhdGgsIE9CU0lESUFOX0NPTkZJR19ESVIsIFBMVUdJTlNfRElSLCBwbHVnaW5JZCk7XG4gICAgYXdhaXQgbWtkaXIocGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBjcChkaXN0UGF0aCwgcGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiksIEpTT04uc3RyaW5naWZ5KFtwbHVnaW5JZF0pKTtcblxuICAgIGxvZygnW2ludGVncmF0aW9uLXNldHVwXSBTeW5jaW5nIHZhdWx0IHRvIGRldmljZS4uLicpO1xuICAgIGF3YWl0IHRlbXBWYXVsdC5zeW5jVG9EZXZpY2UodHJhbnNwb3J0KTtcbiAgICBsb2coJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gUmVnaXN0ZXJpbmcgdmF1bHQuLi4nKTtcbiAgICBhd2FpdCB0ZW1wVmF1bHQucmVnaXN0ZXIodHJhbnNwb3J0KTtcbiAgICBsb2coJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gVmF1bHQgcmVnaXN0ZXJlZC4nKTtcblxuICAgIC8vIEVuYWJsZSB0aGUgcGx1Z2luIGFuZCB2ZXJpZnkgaXQgbG9hZGVkLiBPYnNpZGlhbidzIGVuYWJsZVBsdWdpbigpIHdyYXBzXG4gICAgLy8gTG9hZFBsdWdpbigpIGluIGEgdHJ5LWNhdGNoIHRoYXQgc3dhbGxvd3MgZXJyb3JzIGFuZCByZXR1cm5zIGZhbHNlLlxuICAgIC8vIFdlIG1vbmtleS1wYXRjaCBsb2FkUGx1Z2luKCkgdG8gY2FwdHVyZSB0aGUgZXJyb3IgYmVmb3JlIGl0J3Mgc3dhbGxvd2VkLlxuICAgIGxvZyhgW2ludGVncmF0aW9uLXNldHVwXSBFbmFibGluZyBwbHVnaW4gXCIke3BsdWdpbklkfVwiLi4uYCk7XG4gICAgY29uc3QgeyBlcnJvck1lc3NhZ2UgfSA9IGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICAgIGFyZ3M6IHsgcGx1Z2luSWQgfSxcbiAgICAgIGZuOiBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlLFxuICAgICAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrczogdHJ1ZSxcbiAgICAgIHRyYW5zcG9ydCxcbiAgICAgIHZhdWx0UGF0aDogdGVtcFZhdWx0LnBhdGhcbiAgICB9KTtcblxuICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIFwiJHtwbHVnaW5JZH1cIiBmYWlsZWQgdG8gbG9hZDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgZW5hYmxlZCBzdWNjZXNzZnVsbHkuYCk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nKCdbaW50ZWdyYXRpb24tc2V0dXBdIFNldHVwIGZhaWxlZCwgY2xlYW5pbmcgdXAuLi4nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRlbXBWYXVsdCkge1xuICAgICAgICBhd2FpdCB0ZW1wVmF1bHQuZGlzcG9zZSh0cmFuc3BvcnQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGNsZWFudXBFcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIFZhdWx0IGNsZWFudXAgZXJyb3IgKG5vbi1mYXRhbCk6ICR7U3RyaW5nKGNsZWFudXBFcnJvcil9YCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0cmFuc3BvcnQuZGlzcG9zZT8uKCk7XG4gICAgfSBjYXRjaCAoY2xlYW51cEVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cF0gVHJhbnNwb3J0IGNsZWFudXAgZXJyb3IgKG5vbi1mYXRhbCk6ICR7U3RyaW5nKGNsZWFudXBFcnJvcil9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHsgdGVtcFZhdWx0LCB0cmFuc3BvcnQsIHRyYW5zcG9ydE9wdGlvbnMgfTtcbn1cblxuLyoqXG4gKiBGcmFtZXdvcmstYWdub3N0aWMgZ2xvYmFsIHRlYXJkb3duIGxvZ2ljLlxuICpcbiAqIERpc3Bvc2VzIG9mIHRoZSB0ZW1wb3JhcnkgdmF1bHQgYW5kIHRyYW5zcG9ydCBjcmVhdGVkIGR1cmluZyBzZXR1cC5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIHJlc3VsdCBmcm9tIHtAbGluayBjb3JlU2V0dXB9LiBXaGVuIGB1bmRlZmluZWRgLCBkb2VzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3JlVGVhcmRvd24ocmVzdWx0PzogQ29yZVNldHVwUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJlc3VsdD8udGVtcFZhdWx0LmRpc3Bvc2UocmVzdWx0LnRyYW5zcG9ydCk7XG4gIGF3YWl0IHJlc3VsdD8udHJhbnNwb3J0LmRpc3Bvc2U/LigpO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBwcm9qZWN0IHJvb3QgYnkgd2Fsa2luZyB1cCBmcm9tIGBwcm9jZXNzLmN3ZCgpYCBsb29raW5nIGZvciBgcGFja2FnZS5qc29uYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290LlxuICovXG5mdW5jdGlvbiBmaW5kUHJvamVjdFJvb3QoKTogc3RyaW5nIHtcbiAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gTG9vcCB0ZXJtaW5hdGVzIGF0IGZpbGVzeXN0ZW0gcm9vdC5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKGRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gam9pbihkaXIsICcuLicpO1xuICAgIGlmIChwYXJlbnQgPT09IGRpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwcm9qZWN0IHJvb3QgKG5vIHBhY2thZ2UuanNvbiBmb3VuZCkuJyk7XG4gICAgfVxuICAgIGRpciA9IHBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkaXN0IHBhdGggdG8gdXNlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqXG4gKiBQaWNrcyB3aGljaGV2ZXIgb2YgYGRpc3QvZGV2YCBhbmQgYGRpc3QvYnVpbGRgIGhhcyBhIG5ld2VyIGBtYWluLmpzYC5cbiAqIElmIG9ubHkgb25lIGV4aXN0cywgdGhhdCBvbmUgaXMgdXNlZC4gVGhyb3dzIGlmIG5laXRoZXIgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBwcm9qZWN0Um9vdCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2hvc2VuIGRpc3QgZm9sZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGlzdFBhdGgocHJvamVjdFJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRldlBhdGggPSBqb2luKHByb2plY3RSb290LCBESVNUX0RFVik7XG4gIGNvbnN0IGJ1aWxkUGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsIERJU1RfQlVJTEQpO1xuICBjb25zdCBkZXZNYWluSnMgPSBqb2luKGRldlBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZE1haW5KcyA9IGpvaW4oYnVpbGRQYXRoLCBNQUlOX0pTKTtcbiAgY29uc3QgZGV2U3RhdCA9IGV4aXN0c1N5bmMoZGV2TWFpbkpzKSA/IGF3YWl0IHN0YXQoZGV2TWFpbkpzKSA6IG51bGw7XG4gIGNvbnN0IGJ1aWxkU3RhdCA9IGV4aXN0c1N5bmMoYnVpbGRNYWluSnMpID8gYXdhaXQgc3RhdChidWlsZE1haW5KcykgOiBudWxsO1xuXG4gIGlmIChkZXZTdGF0ICYmIGJ1aWxkU3RhdCkge1xuICAgIHJldHVybiBkZXZTdGF0Lm10aW1lID4gYnVpbGRTdGF0Lm10aW1lID8gZGV2UGF0aCA6IGJ1aWxkUGF0aDtcbiAgfVxuXG4gIGlmIChkZXZTdGF0KSB7XG4gICAgcmV0dXJuIGRldlBhdGg7XG4gIH1cblxuICBpZiAoYnVpbGRTdGF0KSB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignTm8gYnVpbGQgZm91bmQuIFJ1biBgbnBtIHJ1biBidWlsZGAgb3IgYG5wbSBydW4gZGV2YCBmaXJzdC4nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLHFCQUEyQjtBQUMzQixzQkFNTztBQUNQLHVCQUFxQjtBQUNyQiwwQkFBNEI7QUFLNUIsMkJBQTZDO0FBQzdDLGlCQUFvQjtBQUNwQiwwQkFBK0I7QUFDL0Isd0JBQTBCO0FBQzFCLCtCQUEyQztBQUUzQyxNQUFNLFdBQVc7QUFDakIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sVUFBVTtBQUNoQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSx5QkFBeUI7QUFtQy9CLGVBQXNCLFVBQVUsUUFBb0Q7QUFDbEYsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLGtCQUFjLHVCQUFLLGFBQWEsTUFBTTtBQUM1QyxVQUFJLDJCQUFXLFdBQVcsR0FBRztBQUMzQix5Q0FBWSxXQUFXO0FBQUEsRUFDekI7QUFFQSxRQUFNLG1CQUFtQixRQUFRO0FBQ2pDLHNCQUFJLDJDQUEyQztBQUMvQyxRQUFNLFlBQVksVUFBTSxxREFBMkIsZ0JB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
@@ -36,7 +36,9 @@ var import_node_process = __toESM(require("node:process"), 1);
36
36
  var import_context_provider = require("./context-provider.cjs");
37
37
  var import_function_expression = require("./function-expression.cjs");
38
38
  var import_json_with_functions = require("./json-with-functions.cjs");
39
+ var import_serialize_error = require("./serialize-error.cjs");
39
40
  var import_transport_factory = require("./transport-factory.cjs");
41
+ const EVAL_ERROR_MARKER = "__obsidianEvalError__";
40
42
  const NO_OUTPUT = "(no output)";
41
43
  async function evalInObsidian(params) {
42
44
  const { args = {}, contextId, fn, shouldSkipPreflightChecks = false, transport: transportOverride, vaultPath } = params;
@@ -65,20 +67,32 @@ async function evalInObsidian(params) {
65
67
  ${(0, import_function_expression.getFunctionExpressionString)(getObsidianModule)}
66
68
  return await getObsidianModule();
67
69
  })();
70
+ ${(0, import_function_expression.getFunctionExpressionString)(import_serialize_error.serializeError)}
68
71
  const args${randomSuffix} = ${(0, import_json_with_functions.jsonWithFunctions)(args)};
69
72
  const context${randomSuffix} = ${contextExpr};
70
73
  const fullArgs${randomSuffix} = Object.assign(args${randomSuffix}, { app, obsidianModule: obsidianModule${randomSuffix}, context: context${randomSuffix} });
71
- return JSON.stringify(await fn${randomSuffix}(fullArgs${randomSuffix}));
74
+ try {
75
+ return JSON.stringify(await fn${randomSuffix}(fullArgs${randomSuffix}));
76
+ } catch (evalError${randomSuffix}) {
77
+ return JSON.stringify({ ${EVAL_ERROR_MARKER}: serializeError(evalError${randomSuffix}) });
78
+ }
72
79
  })()`;
73
80
  const resultStr = await transport.evaluate(expression, { cwd });
74
81
  if (resultStr === NO_OUTPUT) {
75
82
  return void 0;
76
83
  }
84
+ let parsed;
77
85
  try {
78
- return JSON.parse(resultStr);
86
+ parsed = JSON.parse(resultStr);
79
87
  } catch {
80
88
  throw new Error(`evalInObsidian: Obsidian returned non-JSON output: ${resultStr}`);
81
89
  }
90
+ if (parsed !== null && typeof parsed === "object" && EVAL_ERROR_MARKER in parsed) {
91
+ const errorDetail = parsed[EVAL_ERROR_MARKER];
92
+ throw new Error(`evalInObsidian: Error inside Obsidian:
93
+ ${String(errorDetail)}`);
94
+ }
95
+ return parsed;
82
96
  }
83
97
  async function getObsidianModule() {
84
98
  const app = window.app;
@@ -122,4 +136,4 @@ function getObsidianModulePluginFn() {
122
136
  0 && (module.exports = {
123
137
  evalInObsidian
124
138
  });
125
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSBhIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UgdmlhIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3MsXG4gIENvbnRleHRJZFxufSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBnZXRUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24uY2pzJztcbmltcG9ydCB7IGpzb25XaXRoRnVuY3Rpb25zIH0gZnJvbSAnLi9qc29uLXdpdGgtZnVuY3Rpb25zLmNqcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcblxuaW50ZXJmYWNlIEV4cG9ydHNXaXRoRGVmYXVsdCB7XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJncyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4ge0BsaW5rIEFwcH0gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGBvYnNpZGlhbmAgbW9kdWxlLCByZXNvbHZlZCBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4gVmFsdWVzIG1heSBpbmNsdWRlIGZ1bmN0aW9ucyBcdTIwMTRcbiAgICogdGhleSBhcmUgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICAgKi9cbiAgYXJncz86IEFyZ3M7XG5cbiAgLyoqXG4gICAqIEEge0BsaW5rIENvbnRleHRJZH0gbGlua2luZyB0aGlzIGNhbGwgdG8gYSBwZXJzaXN0ZW50IHN0b3JlIG9uIGB3aW5kb3dgXG4gICAqIGluIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSB0eXBlZCBgY29udGV4dGAgb2JqZWN0XG4gICAqIHRoYXQgc3Vydml2ZXMgYWNyb3NzIGNhbGxzIHNoYXJpbmcgdGhlIHNhbWUgSUQuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgYGNvbnRleHRgIGlzIGEgZnJlc2ggZW1wdHkgb2JqZWN0IGVhY2ggY2FsbC5cbiAgICovXG4gIGNvbnRleHRJZD86IFRDb250ZXh0SWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpbiB0aGUgT2JzaWRpYW4gY29udGV4dC5cbiAgICovXG4gIGZuKGFyZ3M6IEFyZ3MgJiBDb21tb25BcmdzICYgQ29udGV4dEFyZ3M8VENvbnRleHRJZD4pOiBQcm9taXNhYmxlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIFNraXBzIHByZS1mbGlnaHQgY2hlY2tzICh2YXVsdCByZWdpc3RyYXRpb24sIENMSSBhdmFpbGFiaWxpdHkpLlxuICAgKiBVc2VkIGludGVybmFsbHkgYnkgdmF1bHQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyYW5zcG9ydCBmb3IgdGhpcyBjYWxsLiBXaGVuIG9taXR0ZWQsIHVzZXMgdGhlIHRyYW5zcG9ydFxuICAgKiBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlciAoc2V0IGJ5IHRoZSBmcmFtZXdvcmsgYWRhcHRlcidzIGdsb2JhbCBzZXR1cCkuXG4gICAqL1xuICB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIE9ic2lkaWFuIHZhdWx0LiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0IGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBhbiBhcmdzIG9iamVjdCB0aGF0IGluY2x1ZGVzIGBhcHBgLCBgb2JzaWRpYW5Nb2R1bGVgLFxuICogYGNvbnRleHRgLCBhbmQgYW55IGFkZGl0aW9uYWwgYGFyZ3NgIHBhc3NlZCBieSB0aGUgY2FsbGVyLlxuICogSXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBpbnZva2VkIGFzIGFuIElJRkUuXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZWxmLWNvbnRhaW5lZCBcdTIwMTQgY2xvc3VyZXMgb3ZlciBsb2NhbCB2YXJpYWJsZXMgd2lsbCBub3Qgd29yay5cbiAqIFBhc3MgYW55IG5lZWRlZCB2YWx1ZXMgYXMgYGFyZ3NgIFx1MjAxNCB0aGV5IGFyZSBKU09OLXNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZCBvbiB0aGUgT2JzaWRpYW4gc2lkZS5cbiAqXG4gKiBUaGUgcmVzdWx0IGlzIGBKU09OLnN0cmluZ2lmeWAnZCBvbiB0aGUgT2JzaWRpYW4gc2lkZSBhbmQgcGFyc2VkIGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZuYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWxJbk9ic2lkaWFuPEFyZ3MgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBwYXJhbXM6IEV2YWxJbk9ic2lkaWFuUGFyYW1zPEFyZ3MsIFJlc3VsdCwgVENvbnRleHRJZD5cbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgLS0gYGZuYCBjYW4gYmUgdW5ib3VuZC5cbiAgY29uc3QgeyBhcmdzID0ge30sIGNvbnRleHRJZCwgZm4sIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MgPSBmYWxzZSwgdHJhbnNwb3J0OiB0cmFuc3BvcnRPdmVycmlkZSwgdmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGN3ZCA9IHZhdWx0UGF0aCA/PyBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIENoZWNrOiBWYXVsdCBwYXRoIGV4aXN0cyBvbiBkaXNrLlxuICBpZiAodmF1bHRQYXRoICE9PSB1bmRlZmluZWQgJiYgIWV4aXN0c1N5bmModmF1bHRQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgcGF0aCBkb2VzIG5vdCBleGlzdDogJHt2YXVsdFBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuXG4gIGlmICghc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcykge1xuICAgIGF3YWl0IHRyYW5zcG9ydC5wcmVmbGlnaHRDaGVjayhjd2QpO1xuICB9XG5cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCBjb250ZXh0RXhwciA9IGNvbnRleHRJZFxuICAgID8gYCgod2luZG93Ll9fb2JzaWRpYW5Db250ZXh0c19fID8/PSB7fSlbXCIke1N0cmluZyhjb250ZXh0SWQpfVwiXSA/Pz0ge30pYFxuICAgIDogJ3t9JztcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGBcbihhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZuJHtyYW5kb21TdWZmaXh9ID0gJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZm4pfTtcbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGUke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghYXBwLndvcmtzcGFjZS5hcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHJlc29sdmUpKTtcbiAgICB9XG4gICAgaWYgKCFhcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgIH1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZSl9XG4gICAgcmV0dXJuIGF3YWl0IGdldE9ic2lkaWFuTW9kdWxlKCk7XG4gIH0pKCk7XG4gIGNvbnN0IGFyZ3Mke3JhbmRvbVN1ZmZpeH0gPSAke2pzb25XaXRoRnVuY3Rpb25zKGFyZ3MpfTtcbiAgY29uc3QgY29udGV4dCR7cmFuZG9tU3VmZml4fSA9ICR7Y29udGV4dEV4cHJ9O1xuICBjb25zdCBmdWxsQXJncyR7cmFuZG9tU3VmZml4fSA9IE9iamVjdC5hc3NpZ24oYXJncyR7cmFuZG9tU3VmZml4fSwgeyBhcHAsIG9ic2lkaWFuTW9kdWxlOiBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSwgY29udGV4dDogY29udGV4dCR7cmFuZG9tU3VmZml4fSB9KTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IGZuJHtyYW5kb21TdWZmaXh9KGZ1bGxBcmdzJHtyYW5kb21TdWZmaXh9KSk7XG59KSgpYDtcblxuICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gTk9fT1VUUFVUKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBSZXN1bHQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdFN0cikgYXMgUmVzdWx0O1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBPYnNpZGlhbiByZXR1cm5lZCBub24tSlNPTiBvdXRwdXQ6ICR7cmVzdWx0U3RyfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIHZpYSB0b1N0cmluZygpIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MsIG5vdCBpbiBOb2RlLiBDb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG4vKipcbiAqIEluamVjdGVkIGludG8gdGhlIE9ic2lkaWFuIHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBVc2VzIGEgY2FjaGVkIHZhbHVlIG9uIGBhcHBgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGluc3RhbGxzIGEgdGVtcG9yYXJ5XG4gKiBwbHVnaW4gdGhhdCBjYWxscyBgcmVxdWlyZSgnb2JzaWRpYW4nKWAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0LlxuICpcbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUgXHUyMDE0IGl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAqIGBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuYCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgc2NvcGVcbiAqICh0aGUgZ2VuZXJhdGVkIElJRkUgaGFuZGxlcyB0aGlzKS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9ic2lkaWFuTW9kdWxlKCk6IFByb21pc2U8dHlwZW9mIG9ic2lkaWFuPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBXZSBuZWVkIGdsb2JhbCBgYXBwYCB2YXJpYWJsZS5cbiAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgaW50ZXJmYWNlIE9ic2lkaWFuTW9kdWxlSG9sZGVyIHtcbiAgICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlSG9sZGVyID0gYXBwIGFzIFBhcnRpYWw8T2JzaWRpYW5Nb2R1bGVIb2xkZXI+O1xuICBpZiAob2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGUpIHtcbiAgICByZXR1cm4gb2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGU7XG4gIH1cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCB0ZW1wTW9kdWxlTmFtZSA9IGBnZXQtb2JzaWRpYW4tbW9kdWxlLSR7cmFuZG9tU3VmZml4fWA7XG4gIGNvbnN0IGRpciA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHt0ZW1wTW9kdWxlTmFtZX1gO1xuICBhcHAucGx1Z2lucy5tYW5pZmVzdHNbdGVtcE1vZHVsZU5hbWVdID0ge1xuICAgIGF1dGhvcjogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRpcixcbiAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgaXNEZXNrdG9wT25seTogZmFsc2UsXG4gICAgbWluQXBwVmVyc2lvbjogJycsXG4gICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgdmVyc2lvbjogJydcbiAgfTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoYCR7ZGlyfS9tYWluLmpzYCwgYCgke1N0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX0pKCk7YCk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGhpbiBgbG9hZFBsdWdpbmAuXG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xufVxuXG4vKipcbiAqIFRoZSBib2R5IG9mIHRoZSB0ZW1wb3JhcnkgcGx1Z2luIHRoYXQgZXh0cmFjdHMgdGhlIGBvYnNpZGlhbmAgbW9kdWxlLlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCB3cml0dGVuIHRvIGBtYWluLmpzYCBieSB7QGxpbmsgZ2V0T2JzaWRpYW5Nb2R1bGV9LlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5GbigpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG5cbiAgY29uc3QgcGx1Z2luUmVxdWlyZSA9IHJlcXVpcmU7XG4gIGNvbnN0IHBsdWdpbkV4cG9ydHMgPSBleHBvcnRzIGFzIEV4cG9ydHNXaXRoRGVmYXVsdDtcblxuICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IHBsdWdpblJlcXVpcmUoJ29ic2lkaWFuJykgYXMgdHlwZW9mIG9ic2lkaWFuO1xuICBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSA9IG9ic2lkaWFuTW9kdWxlO1xuICBwbHVnaW5FeHBvcnRzLmRlZmF1bHQgPSBvYnNpZGlhbk1vZHVsZS5QbHVnaW47XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFCQUEyQjtBQUMzQiwwQkFBb0I7QUFRcEIsOEJBQW9DO0FBQ3BDLGlDQUE0QztBQUM1QyxpQ0FBa0M7QUFDbEMsK0JBQXFDO0FBTXJDLE1BQU0sWUFBWTtBQWlGbEIsZUFBc0IsZUFDcEIsUUFDaUI7QUFFakIsUUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFdBQVcsSUFBSSw0QkFBNEIsT0FBTyxXQUFXLG1CQUFtQixVQUFVLElBQUk7QUFDakgsUUFBTSxNQUFNLGFBQWEsb0JBQUFBLFFBQVEsSUFBSTtBQUdyQyxNQUFJLGNBQWMsVUFBYSxLQUFDLDJCQUFXLFNBQVMsR0FBRztBQUNy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
139
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSBhIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UgdmlhIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3MsXG4gIENvbnRleHRJZFxufSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBnZXRUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24uY2pzJztcbmltcG9ydCB7IGpzb25XaXRoRnVuY3Rpb25zIH0gZnJvbSAnLi9qc29uLXdpdGgtZnVuY3Rpb25zLmNqcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVFcnJvciB9IGZyb20gJy4vc2VyaWFsaXplLWVycm9yLmNqcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcblxuY29uc3QgRVZBTF9FUlJPUl9NQVJLRVIgPSAnX19vYnNpZGlhbkV2YWxFcnJvcl9fJztcblxuaW50ZXJmYWNlIEV4cG9ydHNXaXRoRGVmYXVsdCB7XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJncyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4ge0BsaW5rIEFwcH0gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGBvYnNpZGlhbmAgbW9kdWxlLCByZXNvbHZlZCBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4gVmFsdWVzIG1heSBpbmNsdWRlIGZ1bmN0aW9ucyBcdTIwMTRcbiAgICogdGhleSBhcmUgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICAgKi9cbiAgYXJncz86IEFyZ3M7XG5cbiAgLyoqXG4gICAqIEEge0BsaW5rIENvbnRleHRJZH0gbGlua2luZyB0aGlzIGNhbGwgdG8gYSBwZXJzaXN0ZW50IHN0b3JlIG9uIGB3aW5kb3dgXG4gICAqIGluIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSB0eXBlZCBgY29udGV4dGAgb2JqZWN0XG4gICAqIHRoYXQgc3Vydml2ZXMgYWNyb3NzIGNhbGxzIHNoYXJpbmcgdGhlIHNhbWUgSUQuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgYGNvbnRleHRgIGlzIGEgZnJlc2ggZW1wdHkgb2JqZWN0IGVhY2ggY2FsbC5cbiAgICovXG4gIGNvbnRleHRJZD86IFRDb250ZXh0SWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpbiB0aGUgT2JzaWRpYW4gY29udGV4dC5cbiAgICovXG4gIGZuKGFyZ3M6IEFyZ3MgJiBDb21tb25BcmdzICYgQ29udGV4dEFyZ3M8VENvbnRleHRJZD4pOiBQcm9taXNhYmxlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIFNraXBzIHByZS1mbGlnaHQgY2hlY2tzICh2YXVsdCByZWdpc3RyYXRpb24sIENMSSBhdmFpbGFiaWxpdHkpLlxuICAgKiBVc2VkIGludGVybmFsbHkgYnkgdmF1bHQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyYW5zcG9ydCBmb3IgdGhpcyBjYWxsLiBXaGVuIG9taXR0ZWQsIHVzZXMgdGhlIHRyYW5zcG9ydFxuICAgKiBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlciAoc2V0IGJ5IHRoZSBmcmFtZXdvcmsgYWRhcHRlcidzIGdsb2JhbCBzZXR1cCkuXG4gICAqL1xuICB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIE9ic2lkaWFuIHZhdWx0LiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0IGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBhbiBhcmdzIG9iamVjdCB0aGF0IGluY2x1ZGVzIGBhcHBgLCBgb2JzaWRpYW5Nb2R1bGVgLFxuICogYGNvbnRleHRgLCBhbmQgYW55IGFkZGl0aW9uYWwgYGFyZ3NgIHBhc3NlZCBieSB0aGUgY2FsbGVyLlxuICogSXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBpbnZva2VkIGFzIGFuIElJRkUuXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZWxmLWNvbnRhaW5lZCBcdTIwMTQgY2xvc3VyZXMgb3ZlciBsb2NhbCB2YXJpYWJsZXMgd2lsbCBub3Qgd29yay5cbiAqIFBhc3MgYW55IG5lZWRlZCB2YWx1ZXMgYXMgYGFyZ3NgIFx1MjAxNCB0aGV5IGFyZSBKU09OLXNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZCBvbiB0aGUgT2JzaWRpYW4gc2lkZS5cbiAqXG4gKiBUaGUgcmVzdWx0IGlzIGBKU09OLnN0cmluZ2lmeWAnZCBvbiB0aGUgT2JzaWRpYW4gc2lkZSBhbmQgcGFyc2VkIGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZuYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWxJbk9ic2lkaWFuPEFyZ3MgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBwYXJhbXM6IEV2YWxJbk9ic2lkaWFuUGFyYW1zPEFyZ3MsIFJlc3VsdCwgVENvbnRleHRJZD5cbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgLS0gYGZuYCBjYW4gYmUgdW5ib3VuZC5cbiAgY29uc3QgeyBhcmdzID0ge30sIGNvbnRleHRJZCwgZm4sIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MgPSBmYWxzZSwgdHJhbnNwb3J0OiB0cmFuc3BvcnRPdmVycmlkZSwgdmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGN3ZCA9IHZhdWx0UGF0aCA/PyBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIENoZWNrOiBWYXVsdCBwYXRoIGV4aXN0cyBvbiBkaXNrLlxuICBpZiAodmF1bHRQYXRoICE9PSB1bmRlZmluZWQgJiYgIWV4aXN0c1N5bmModmF1bHRQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgcGF0aCBkb2VzIG5vdCBleGlzdDogJHt2YXVsdFBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuXG4gIGlmICghc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcykge1xuICAgIGF3YWl0IHRyYW5zcG9ydC5wcmVmbGlnaHRDaGVjayhjd2QpO1xuICB9XG5cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCBjb250ZXh0RXhwciA9IGNvbnRleHRJZFxuICAgID8gYCgod2luZG93Ll9fb2JzaWRpYW5Db250ZXh0c19fID8/PSB7fSlbXCIke1N0cmluZyhjb250ZXh0SWQpfVwiXSA/Pz0ge30pYFxuICAgIDogJ3t9JztcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGBcbihhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZuJHtyYW5kb21TdWZmaXh9ID0gJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZm4pfTtcbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGUke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghYXBwLndvcmtzcGFjZS5hcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHJlc29sdmUpKTtcbiAgICB9XG4gICAgaWYgKCFhcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgIH1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZSl9XG4gICAgcmV0dXJuIGF3YWl0IGdldE9ic2lkaWFuTW9kdWxlKCk7XG4gIH0pKCk7XG4gICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKHNlcmlhbGl6ZUVycm9yKX1cbiAgY29uc3QgYXJncyR7cmFuZG9tU3VmZml4fSA9ICR7anNvbldpdGhGdW5jdGlvbnMoYXJncyl9O1xuICBjb25zdCBjb250ZXh0JHtyYW5kb21TdWZmaXh9ID0gJHtjb250ZXh0RXhwcn07XG4gIGNvbnN0IGZ1bGxBcmdzJHtyYW5kb21TdWZmaXh9ID0gT2JqZWN0LmFzc2lnbihhcmdzJHtyYW5kb21TdWZmaXh9LCB7IGFwcCwgb2JzaWRpYW5Nb2R1bGU6IG9ic2lkaWFuTW9kdWxlJHtyYW5kb21TdWZmaXh9LCBjb250ZXh0OiBjb250ZXh0JHtyYW5kb21TdWZmaXh9IH0pO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCBmbiR7cmFuZG9tU3VmZml4fShmdWxsQXJncyR7cmFuZG9tU3VmZml4fSkpO1xuICB9IGNhdGNoIChldmFsRXJyb3Ike3JhbmRvbVN1ZmZpeH0pIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyAke0VWQUxfRVJST1JfTUFSS0VSfTogc2VyaWFsaXplRXJyb3IoZXZhbEVycm9yJHtyYW5kb21TdWZmaXh9KSB9KTtcbiAgfVxufSkoKWA7XG5cbiAgY29uc3QgcmVzdWx0U3RyID0gYXdhaXQgdHJhbnNwb3J0LmV2YWx1YXRlKGV4cHJlc3Npb24sIHsgY3dkIH0pO1xuXG4gIGlmIChyZXN1bHRTdHIgPT09IE5PX09VVFBVVCkge1xuICAgIHJldHVybiB1bmRlZmluZWQgYXMgUmVzdWx0O1xuICB9XG5cbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3VsdFN0cik7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IE9ic2lkaWFuIHJldHVybmVkIG5vbi1KU09OIG91dHB1dDogJHtyZXN1bHRTdHJ9YCk7XG4gIH1cblxuICBpZiAocGFyc2VkICE9PSBudWxsICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmIEVWQUxfRVJST1JfTUFSS0VSIGluIHBhcnNlZCkge1xuICAgIGNvbnN0IGVycm9yRGV0YWlsID0gKHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbRVZBTF9FUlJPUl9NQVJLRVJdO1xuICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IEVycm9yIGluc2lkZSBPYnNpZGlhbjpcXG4ke1N0cmluZyhlcnJvckRldGFpbCl9YCk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkIGFzIFJlc3VsdDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgdmlhIHRvU3RyaW5nKCkgYW5kIGV4ZWN1dGVkIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcywgbm90IGluIE5vZGUuIENvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMuICovXG5cbi8qKlxuICogSW5qZWN0ZWQgaW50byB0aGUgT2JzaWRpYW4gcHJvY2VzcyB0byByZXNvbHZlIHRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqIFVzZXMgYSBjYWNoZWQgdmFsdWUgb24gYGFwcGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgaW5zdGFsbHMgYSB0ZW1wb3JhcnlcbiAqIHBsdWdpbiB0aGF0IGNhbGxzIGByZXF1aXJlKCdvYnNpZGlhbicpYCBhbmQgY2FjaGVzIHRoZSByZXN1bHQuXG4gKlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZSBcdTIwMTQgaXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICogYGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm5gIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBzY29wZVxuICogKHRoZSBnZW5lcmF0ZWQgSUlGRSBoYW5kbGVzIHRoaXMpLlxuICpcbiAqIEByZXR1cm5zIFRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx0eXBlb2Ygb2JzaWRpYW4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gIGNvbnN0IHJhbmRvbVN1ZmZpeCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgY29uc3QgZGlyID0gYCR7YXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gIGFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgYXV0aG9yOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZGlyLFxuICAgIGlkOiB0ZW1wTW9kdWxlTmFtZSxcbiAgICBpc0Rlc2t0b3BPbmx5OiBmYWxzZSxcbiAgICBtaW5BcHBWZXJzaW9uOiAnJyxcbiAgICBuYW1lOiB0ZW1wTW9kdWxlTmFtZSxcbiAgICB2ZXJzaW9uOiAnJ1xuICB9O1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci53cml0ZShgJHtkaXJ9L21haW4uanNgLCBgKCR7U3RyaW5nKGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm4pfSkoKTtgKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMubG9hZFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aGluIGBsb2FkUGx1Z2luYC5cbiAgaWYgKG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlKSB7XG4gICAgcmV0dXJuIG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgb2JzaWRpYW4gbW9kdWxlJyk7XG59XG5cbi8qKlxuICogVGhlIGJvZHkgb2YgdGhlIHRlbXBvcmFyeSBwbHVnaW4gdGhhdCBleHRyYWN0cyB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBTZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIHdyaXR0ZW4gdG8gYG1haW4uanNgIGJ5IHtAbGluayBnZXRPYnNpZGlhbk1vZHVsZX0uXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlLlxuICovXG5mdW5jdGlvbiBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKCk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWRlcHJlY2F0ZWQgLS0gV2UgbmVlZCBnbG9iYWwgYGFwcGAgdmFyaWFibGUuXG4gIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gIGludGVyZmFjZSBPYnNpZGlhbk1vZHVsZUhvbGRlciB7XG4gICAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcbiAgfVxuICBjb25zdCBvYnNpZGlhbk1vZHVsZUhvbGRlciA9IGFwcCBhcyBQYXJ0aWFsPE9ic2lkaWFuTW9kdWxlSG9sZGVyPjtcblxuICBjb25zdCBwbHVnaW5SZXF1aXJlID0gcmVxdWlyZTtcbiAgY29uc3QgcGx1Z2luRXhwb3J0cyA9IGV4cG9ydHMgYXMgRXhwb3J0c1dpdGhEZWZhdWx0O1xuXG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlID0gcGx1Z2luUmVxdWlyZSgnb2JzaWRpYW4nKSBhcyB0eXBlb2Ygb2JzaWRpYW47XG4gIG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlID0gb2JzaWRpYW5Nb2R1bGU7XG4gIHBsdWdpbkV4cG9ydHMuZGVmYXVsdCA9IG9ic2lkaWFuTW9kdWxlLlBsdWdpbjtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0EscUJBQTJCO0FBQzNCLDBCQUFvQjtBQVFwQiw4QkFBb0M7QUFDcEMsaUNBQTRDO0FBQzVDLGlDQUFrQztBQUNsQyw2QkFBK0I7QUFDL0IsK0JBQXFDO0FBRXJDLE1BQU0sb0JBQW9CO0FBTTFCLE1BQU0sWUFBWTtBQWlGbEIsZUFBc0IsZUFDcEIsUUFDaUI7QUFFakIsUUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFdBQVcsSUFBSSw0QkFBNEIsT0FBTyxXQUFXLG1CQUFtQixVQUFVLElBQUk7QUFDakgsUUFBTSxNQUFNLGFBQWEsb0JBQUFBLFFBQVEsSUFBSTtBQUdyQyxNQUFJLGNBQWMsVUFBYSxLQUFDLDJCQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLFVBQU0sbURBQXFCLDZDQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFDOUIsVUFBTSxVQUFVLGVBQWUsR0FBRztBQUFBLEVBQ3BDO0FBRUEsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sZUFBZSxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsTUFBTSxXQUFXO0FBQzVELFFBQU0sY0FBYyxZQUNoQiwwQ0FBMEMs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
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var serialize_error_exports = {};
20
+ __export(serialize_error_exports, {
21
+ serializeError: () => serializeError
22
+ });
23
+ module.exports = __toCommonJS(serialize_error_exports);
24
+ const CAUSE_INDENT_SIZE = 2;
25
+ function serializeError(error, depth = 0) {
26
+ const indent = " ".repeat(depth * CAUSE_INDENT_SIZE);
27
+ if (!(error instanceof Error)) {
28
+ return `${indent}${String(error)}`;
29
+ }
30
+ const stackOrMessage = error.stack ?? `${error.name}: ${error.message}`;
31
+ let result = stackOrMessage.split("\n").map((line) => `${indent}${line}`).join("\n");
32
+ if (error.cause !== void 0) {
33
+ result += `
34
+ ${indent}[cause]:`;
35
+ result += `
36
+ ${serializeError(error.cause, depth + 1)}`;
37
+ }
38
+ return result;
39
+ }
40
+ // Annotate the CommonJS export names for ESM import in node:
41
+ 0 && (module.exports = {
42
+ serializeError
43
+ });
44
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZS1lcnJvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNlcmlhbGl6ZXMgYW4gZXJyb3IgaW50byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyB3aXRoIGZ1bGwgc3RhY2sgdHJhY2VcbiAqIGFuZCByZWN1cnNpdmUgY2F1c2UgY2hhaW4uIEVhY2ggbmVzdGVkIGNhdXNlIGlzIGluZGVudGVkIGZvciByZWFkYWJpbGl0eS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW5qZWN0ZWQgaW50byB0aGVcbiAqIE9ic2lkaWFuIHByb2Nlc3MgYnkge0BsaW5rIGV2YWxJbk9ic2lkaWFufSwgc28gaXQgbXVzdCBiZSBzZWxmLWNvbnRhaW5lZC5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gU2VyaWFsaXplZCB2aWEgdG9TdHJpbmcoKSBhbmQgZXhlY3V0ZWQgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBDb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG5jb25zdCBDQVVTRV9JTkRFTlRfU0laRSA9IDI7XG5cbi8qKlxuICogU2VyaWFsaXplcyBhbiBlcnJvciBpbnRvIGEgc3RyaW5nIHdpdGggaXRzIGZ1bGwgc3RhY2sgdHJhY2UgYW5kIHJlY3Vyc2l2ZVxuICogY2F1c2UgY2hhaW4uIE5lc3RlZCBjYXVzZXMgYXJlIGluZGVudGVkIGJ5IHtAbGluayBDQVVTRV9JTkRFTlRfU0laRX0gc3BhY2VzXG4gKiBwZXIgbGV2ZWwuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBkZXB0aCAtIFRoZSBjdXJyZW50IG5lc3RpbmcgZGVwdGggKHVzZWQgZm9yIGluZGVudGF0aW9uKS5cbiAqIEByZXR1cm5zIEEgZm9ybWF0dGVkIGVycm9yIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVycm9yKGVycm9yOiB1bmtub3duLCBkZXB0aCA9IDApOiBzdHJpbmcge1xuICBjb25zdCBpbmRlbnQgPSAnICcucmVwZWF0KGRlcHRoICogQ0FVU0VfSU5ERU5UX1NJWkUpO1xuXG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIGAke2luZGVudH0ke1N0cmluZyhlcnJvcil9YDtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrT3JNZXNzYWdlID0gZXJyb3Iuc3RhY2sgPz8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICBsZXQgcmVzdWx0ID0gc3RhY2tPck1lc3NhZ2Uuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gYCR7aW5kZW50fSR7bGluZX1gKS5qb2luKCdcXG4nKTtcblxuICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlc3VsdCArPSBgXFxuJHtpbmRlbnR9W2NhdXNlXTpgO1xuICAgIHJlc3VsdCArPSBgXFxuJHtzZXJpYWxpemVFcnJvcihlcnJvci5jYXVzZSwgZGVwdGggKyAxKX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxNQUFNLG9CQUFvQjtBQVduQixTQUFTLGVBQWUsT0FBZ0IsUUFBUSxHQUFXO0FBQ2hFLFFBQU0sU0FBUyxJQUFJLE9BQU8sUUFBUSxpQkFBaUI7QUFFbkQsTUFBSSxFQUFFLGlCQUFpQixRQUFRO0FBQzdCLFdBQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNsQztBQUVBLFFBQU0saUJBQWlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxLQUFLLE1BQU0sT0FBTztBQUNyRSxNQUFJLFNBQVMsZUFBZSxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFFbkYsTUFBSSxNQUFNLFVBQVUsUUFBVztBQUM3QixjQUFVO0FBQUEsRUFBSyxNQUFNO0FBQ3JCLGNBQVU7QUFBQSxFQUFLLGVBQWUsTUFBTSxPQUFPLFFBQVEsQ0FBQyxDQUFDO0FBQUEsRUFDdkQ7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Serializes an error into a human-readable string with full stack trace
5
+ * and recursive cause chain. Each nested cause is indented for readability.
6
+ *
7
+ * This function is serialized via `toString()` and injected into the
8
+ * Obsidian process by {@link evalInObsidian}, so it must be self-contained.
9
+ */
10
+ /**
11
+ * Serializes an error into a string with its full stack trace and recursive
12
+ * cause chain. Nested causes are indented by {@link CAUSE_INDENT_SIZE} spaces
13
+ * per level.
14
+ *
15
+ * @param error - The error to serialize.
16
+ * @param depth - The current nesting depth (used for indentation).
17
+ * @returns A formatted error string.
18
+ */
19
+ export declare function serializeError(error: unknown, depth?: number): string;
@@ -50,8 +50,11 @@ class TempVault {
50
50
  * When omitted, falls back to the transport configured via the context provider.
51
51
  */
52
52
  async dispose(transportOverride) {
53
- await (0, import_vault_registry.unregisterVault)(this.path, transportOverride);
54
- await retryRm(this.path);
53
+ try {
54
+ await (0, import_vault_registry.unregisterVault)(this.path, transportOverride);
55
+ } finally {
56
+ await retryRm(this.path);
57
+ }
55
58
  }
56
59
  /**
57
60
  * Writes files and folders into the vault directory.
@@ -153,4 +156,4 @@ async function retryRm(path) {
153
156
  0 && (module.exports = {
154
157
  TempVault
155
158
  });
156
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXAtdmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBNYW5hZ2VzIHRlbXBvcmFyeSB2YXVsdCBsaWZlY3ljbGUgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbmltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICByZWFkZGlyLFxuICByZWFkRmlsZSxcbiAgcm1cbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBnZXRUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmltcG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5LmNqcyc7XG5cbmNvbnN0IFJNX1JFVFJZX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTAwMDA7XG5cbi8qKlxuICogQSB0ZW1wb3JhcnkgT2JzaWRpYW4gdmF1bHQgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIENyZWF0ZXMgYSB0ZW1wIGRpcmVjdG9yeSBhbmQgcmVnaXN0ZXJzIGl0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlXG4gKiBzbyB0aGF0IHRoZSBPYnNpZGlhbiBDTEkgY2FuIHRhcmdldCBpdCB2aWEgYGN3ZGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wVmF1bHQge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGVtcCB2YXVsdC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBBbiBleHBsaWNpdCB2YXVsdCBwYXRoLiBJZiBvbWl0dGVkLCBhIHRlbXAgZGlyZWN0b3J5IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGF0aD86IHN0cmluZykge1xuICAgIHRoaXMucGF0aCA9IHBhdGggPz8gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgJ3RlbXAtdmF1bHQtJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIHRoZSB2YXVsdCBmcm9tIE9ic2lkaWFuIGFuZCBkZWxldGVzIHRoZSB0ZW1wIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHBhcmFtIHRyYW5zcG9ydE92ZXJyaWRlIC0gQW4gZXhwbGljaXQgdHJhbnNwb3J0IHRvIHVzZSB3aGVuIHVucmVnaXN0ZXJpbmcuXG4gICAqICAgV2hlbiBvbWl0dGVkLCBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcG9zZSh0cmFuc3BvcnRPdmVycmlkZT86IE9ic2lkaWFuVHJhbnNwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdW5yZWdpc3RlclZhdWx0KHRoaXMucGF0aCwgdHJhbnNwb3J0T3ZlcnJpZGUpO1xuICAgIGF3YWl0IHJldHJ5Um0odGhpcy5wYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgZmlsZXMgYW5kIGZvbGRlcnMgaW50byB0aGUgdmF1bHQgZGlyZWN0b3J5LlxuICAgKiBQYXJlbnQgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS5cbiAgICogUGF0aHMgZW5kaW5nIHdpdGggYC9gIGFyZSB0cmVhdGVkIGFzIGVtcHR5IGZvbGRlcnMgKGNvbnRlbnQgbXVzdCBiZSBlbXB0eSBzdHJpbmcpLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgLSBNYXAgb2YgZmlsZS9mb2xkZXIgcGF0aHMgdG8gY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZShmaWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhmaWxlcykpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbih0aGlzLnBhdGgsIGZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9sZGVyIHBhdGggXCIke2ZpbGVQYXRofVwiIG11c3QgaGF2ZSBlbXB0eSBjb250ZW50YCk7XG4gICAgICAgIH1cbiAgICAgICAgbWtkaXJTeW5jKGZ1bGxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1rZGlyU3luYyhkaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhpcyB2YXVsdCBpbiB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZSBzbyB0aGUgQ0xJIGNhbiB0YXJnZXQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2UuIFdoZW4gb21pdHRlZCxcbiAgICogICBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIodHJhbnNwb3J0T3ZlcnJpZGU/OiBPYnNpZGlhblRyYW5zcG9ydCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHJlZ2lzdGVyVmF1bHQodGhpcy5wYXRoLCB0cmFuc3BvcnRPdmVycmlkZSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgZGlzcG9zYWJsZSBzdXBwb3J0IGZvciBgYXdhaXQgdXNpbmdgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YXVsdCBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSB0aGF0IHJlcXVpcmVzIGEgcnVubmluZyB0cmFuc3BvcnQuICovXG5cbiAgLyoqXG4gICAqIFB1c2hlcyBhbGwgZmlsZXMgZnJvbSB0aGUgbG9jYWwgc3RhZ2luZyBkaXJlY3RvcnkgdG8gdGhlIHRhcmdldCBkZXZpY2VcbiAgICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0J3MgYHB1c2hGaWxlcygpYC5cbiAgICpcbiAgICogT24gZGVza3RvcCB0cmFuc3BvcnRzIHRoaXMgaXMgYSBuby1vcCAoZmlsZXMgYXJlIGFscmVhZHkgbG9jYWwpLlxuICAgKiBPbiBtb2JpbGUgdHJhbnNwb3J0cyAoQXBwaXVtKSB0aGlzIHB1c2hlcyBmaWxlcyB0byB0aGUgZGV2aWNlLlxuICAgKlxuICAgKiBDYWxsIHRoaXMgYWZ0ZXIge0BsaW5rIHBvcHVsYXRlfSBhbmQgYmVmb3JlIHtAbGluayByZWdpc3Rlcn0gd2hlbiB1c2luZ1xuICAgKiBhIG1vYmlsZSB0cmFuc3BvcnQuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2UuIFdoZW4gb21pdHRlZCxcbiAgICogICBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3luY1RvRGV2aWNlKHRyYW5zcG9ydE92ZXJyaWRlPzogT2JzaWRpYW5UcmFuc3BvcnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuICAgIGlmICghdHJhbnNwb3J0LnB1c2hGaWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5jb2xsZWN0RmlsZXModGhpcy5wYXRoKTtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHVzaEZpbGVzKHRoaXMucGF0aCwgZmlsZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHJlYWRzIGFsbCBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5IGludG8gYSBmbGF0IG1hcC5cbiAgICpcbiAgICogQHBhcmFtIGRpciAtIFRoZSBkaXJlY3RvcnkgdG8gcmVhZC5cbiAgICogQHJldHVybnMgQSBtYXAgb2YgcmVsYXRpdmUgZmlsZSBwYXRocyB0byBjb250ZW50IHN0cmluZ3MuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RGaWxlcyhkaXI6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKHRoaXMucGF0aCwgZnVsbFBhdGgpO1xuXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgYXdhaXQgdGhpcy5jb2xsZWN0RmlsZXMoZnVsbFBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtyZWxhdGl2ZVBhdGhdID0gYXdhaXQgcmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbn1cblxuLyoqXG4gKiBSZXRyaWVzIGBybWAgdW50aWwgaXQgc3VjY2VlZHMgb3IgdGltZXMgb3V0LlxuICogT2JzaWRpYW4gbWF5IGhvbGQgZmlsZSBsb2NrcyBicmllZmx5IGFmdGVyIGEgd2luZG93IGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gcmVtb3ZlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGlyZWN0b3J5IGlzIHJlbW92ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJldHJ5Um0ocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgUk1fUkVUUllfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvLyBGaW5hbCBhdHRlbXB0IFx1MjAxNCBsZXQgaXQgdGhyb3cuXG4gIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFJTztBQUNQLHNCQUlPO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUlPO0FBSVAsOEJBQW9DO0FBQ3BDLCtCQUFxQztBQUNyQyw0QkFHTztBQUVQLE1BQU0saUNBQWlDO0FBQ3ZDLE1BQU0sbUNBQW1DO0FBUWxDLE1BQU0sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVCxZQUFZLE1BQWU7QUFDaEMsU0FBSyxPQUFPLFlBQVEsZ0NBQVksMkJBQUssdUJBQU8sR0FBRyxhQUFhLENBQUM7QUFBQSxFQUMvRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxRQUFRLG1CQUFzRDtBQUN6RSxjQUFNLHVDQUFnQixLQUFLLE1BQU0saUJBQWlCO0FBQ2xELFVBQU0sUUFBUSxLQUFLLElBQUk7QUFBQSxFQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxTQUFTLE9BQXFDO0FBQ25ELGVBQVcsQ0FBQyxVQUFVLE9BQU8sS0FBSyxPQUFPLFFBQVEsS0FB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
159
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXAtdmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBNYW5hZ2VzIHRlbXBvcmFyeSB2YXVsdCBsaWZlY3ljbGUgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbmltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICByZWFkZGlyLFxuICByZWFkRmlsZSxcbiAgcm1cbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBnZXRUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmltcG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5LmNqcyc7XG5cbmNvbnN0IFJNX1JFVFJZX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTAwMDA7XG5cbi8qKlxuICogQSB0ZW1wb3JhcnkgT2JzaWRpYW4gdmF1bHQgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIENyZWF0ZXMgYSB0ZW1wIGRpcmVjdG9yeSBhbmQgcmVnaXN0ZXJzIGl0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlXG4gKiBzbyB0aGF0IHRoZSBPYnNpZGlhbiBDTEkgY2FuIHRhcmdldCBpdCB2aWEgYGN3ZGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wVmF1bHQge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGVtcCB2YXVsdC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBBbiBleHBsaWNpdCB2YXVsdCBwYXRoLiBJZiBvbWl0dGVkLCBhIHRlbXAgZGlyZWN0b3J5IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGF0aD86IHN0cmluZykge1xuICAgIHRoaXMucGF0aCA9IHBhdGggPz8gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgJ3RlbXAtdmF1bHQtJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIHRoZSB2YXVsdCBmcm9tIE9ic2lkaWFuIGFuZCBkZWxldGVzIHRoZSB0ZW1wIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHBhcmFtIHRyYW5zcG9ydE92ZXJyaWRlIC0gQW4gZXhwbGljaXQgdHJhbnNwb3J0IHRvIHVzZSB3aGVuIHVucmVnaXN0ZXJpbmcuXG4gICAqICAgV2hlbiBvbWl0dGVkLCBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcG9zZSh0cmFuc3BvcnRPdmVycmlkZT86IE9ic2lkaWFuVHJhbnNwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVucmVnaXN0ZXJWYXVsdCh0aGlzLnBhdGgsIHRyYW5zcG9ydE92ZXJyaWRlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcmV0cnlSbSh0aGlzLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgZmlsZXMgYW5kIGZvbGRlcnMgaW50byB0aGUgdmF1bHQgZGlyZWN0b3J5LlxuICAgKiBQYXJlbnQgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS5cbiAgICogUGF0aHMgZW5kaW5nIHdpdGggYC9gIGFyZSB0cmVhdGVkIGFzIGVtcHR5IGZvbGRlcnMgKGNvbnRlbnQgbXVzdCBiZSBlbXB0eSBzdHJpbmcpLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgLSBNYXAgb2YgZmlsZS9mb2xkZXIgcGF0aHMgdG8gY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZShmaWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhmaWxlcykpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbih0aGlzLnBhdGgsIGZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9sZGVyIHBhdGggXCIke2ZpbGVQYXRofVwiIG11c3QgaGF2ZSBlbXB0eSBjb250ZW50YCk7XG4gICAgICAgIH1cbiAgICAgICAgbWtkaXJTeW5jKGZ1bGxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1rZGlyU3luYyhkaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhpcyB2YXVsdCBpbiB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZSBzbyB0aGUgQ0xJIGNhbiB0YXJnZXQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2UuIFdoZW4gb21pdHRlZCxcbiAgICogICBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIodHJhbnNwb3J0T3ZlcnJpZGU/OiBPYnNpZGlhblRyYW5zcG9ydCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHJlZ2lzdGVyVmF1bHQodGhpcy5wYXRoLCB0cmFuc3BvcnRPdmVycmlkZSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgZGlzcG9zYWJsZSBzdXBwb3J0IGZvciBgYXdhaXQgdXNpbmdgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YXVsdCBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSB0aGF0IHJlcXVpcmVzIGEgcnVubmluZyB0cmFuc3BvcnQuICovXG5cbiAgLyoqXG4gICAqIFB1c2hlcyBhbGwgZmlsZXMgZnJvbSB0aGUgbG9jYWwgc3RhZ2luZyBkaXJlY3RvcnkgdG8gdGhlIHRhcmdldCBkZXZpY2VcbiAgICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0J3MgYHB1c2hGaWxlcygpYC5cbiAgICpcbiAgICogT24gZGVza3RvcCB0cmFuc3BvcnRzIHRoaXMgaXMgYSBuby1vcCAoZmlsZXMgYXJlIGFscmVhZHkgbG9jYWwpLlxuICAgKiBPbiBtb2JpbGUgdHJhbnNwb3J0cyAoQXBwaXVtKSB0aGlzIHB1c2hlcyBmaWxlcyB0byB0aGUgZGV2aWNlLlxuICAgKlxuICAgKiBDYWxsIHRoaXMgYWZ0ZXIge0BsaW5rIHBvcHVsYXRlfSBhbmQgYmVmb3JlIHtAbGluayByZWdpc3Rlcn0gd2hlbiB1c2luZ1xuICAgKiBhIG1vYmlsZSB0cmFuc3BvcnQuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2UuIFdoZW4gb21pdHRlZCxcbiAgICogICBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3luY1RvRGV2aWNlKHRyYW5zcG9ydE92ZXJyaWRlPzogT2JzaWRpYW5UcmFuc3BvcnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuICAgIGlmICghdHJhbnNwb3J0LnB1c2hGaWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5jb2xsZWN0RmlsZXModGhpcy5wYXRoKTtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHVzaEZpbGVzKHRoaXMucGF0aCwgZmlsZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHJlYWRzIGFsbCBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5IGludG8gYSBmbGF0IG1hcC5cbiAgICpcbiAgICogQHBhcmFtIGRpciAtIFRoZSBkaXJlY3RvcnkgdG8gcmVhZC5cbiAgICogQHJldHVybnMgQSBtYXAgb2YgcmVsYXRpdmUgZmlsZSBwYXRocyB0byBjb250ZW50IHN0cmluZ3MuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RGaWxlcyhkaXI6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKHRoaXMucGF0aCwgZnVsbFBhdGgpO1xuXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgYXdhaXQgdGhpcy5jb2xsZWN0RmlsZXMoZnVsbFBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtyZWxhdGl2ZVBhdGhdID0gYXdhaXQgcmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbn1cblxuLyoqXG4gKiBSZXRyaWVzIGBybWAgdW50aWwgaXQgc3VjY2VlZHMgb3IgdGltZXMgb3V0LlxuICogT2JzaWRpYW4gbWF5IGhvbGQgZmlsZSBsb2NrcyBicmllZmx5IGFmdGVyIGEgd2luZG93IGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gcmVtb3ZlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGlyZWN0b3J5IGlzIHJlbW92ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJldHJ5Um0ocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgUk1fUkVUUllfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvLyBGaW5hbCBhdHRlbXB0IFx1MjAxNCBsZXQgaXQgdGhyb3cuXG4gIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFJTztBQUNQLHNCQUlPO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUlPO0FBSVAsOEJBQW9DO0FBQ3BDLCtCQUFxQztBQUNyQyw0QkFHTztBQUVQLE1BQU0saUNBQWlDO0FBQ3ZDLE1BQU0sbUNBQW1DO0FBUWxDLE1BQU0sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVCxZQUFZLE1BQWU7QUFDaEMsU0FBSyxPQUFPLFlBQVEsZ0NBQVksMkJBQUssdUJBQU8sR0FBRyxhQUFhLENBQUM7QUFBQSxFQUMvRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxRQUFRLG1CQUFzRDtBQUN6RSxRQUFJO0FBQ0YsZ0JBQU0sdUNBQWdCLEtBQUssTUFBTSxpQkFBaUI7QUFBQSxJQUNwRCxVQUFFO0FBQ0EsWUFBTSxRQUFRLEtBQUssSUFBSTtBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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
@@ -187,8 +187,12 @@ class AppiumTransport {
187
187
  const obsidianContext = contexts.find((ctx) => typeof ctx === "string" && ctx.startsWith(WEBVIEW_CONTEXT_PREFIX));
188
188
  if (obsidianContext) {
189
189
  (0, import_log.log)(`[appium-transport] Found WebView context: ${obsidianContext}`);
190
- await this.browser.switchContext(obsidianContext);
191
- return;
190
+ try {
191
+ await this.browser.switchContext(obsidianContext);
192
+ return;
193
+ } catch (error) {
194
+ (0, import_log.log)(`[appium-transport] switchContext failed: ${String(error)}. Retrying...`);
195
+ }
192
196
  }
193
197
  (0, import_log.log)(`[appium-transport] WebView not ready, available contexts: ${JSON.stringify(contexts)}. Retrying...`);
194
198
  await delay(WEBVIEW_POLL_INTERVAL_IN_MILLISECONDS);
@@ -240,4 +244,4 @@ function extractVaultName(vaultPath) {
240
244
  0 && (module.exports = {
241
245
  AppiumTransport
242
246
  });
243
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1hcHBpdW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBcHBpdW0gdHJhbnNwb3J0IFx1MjAxNCBldmFsdWF0ZXMgZXhwcmVzc2lvbnMgaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSB2aWEgV2ViVmlld1xuICogSmF2YVNjcmlwdCBpbmplY3Rpb24uIE1hbmFnZXMgdmF1bHQgbGlmZWN5Y2xlIHZpYSBsb2NhbFN0b3JhZ2UgYW5kIGZpbGUgcHVzaC5cbiAqXG4gKiBDb25maWd1cmVkIHZpYSBgZW52aXJvbm1lbnRPcHRpb25zLm9ic2lkaWFuVHJhbnNwb3J0YCBpbiB2aXRlc3QgY29uZmlnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHZpdGVzdC5jb25maWcudHNcbiAqIGVudmlyb25tZW50T3B0aW9uczoge1xuICogICBvYnNpZGlhblRyYW5zcG9ydDoge1xuICogICAgIHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bScsXG4gKiAgICAgYXBwaXVtVXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJyxcbiAqICAgICBkZXZpY2VJZDogJ2VtdWxhdG9yLTU1NTQnLFxuICogICB9LFxuICogfVxuICogYGBgXG4gKlxuICogRm9yIEJyb3dzZXJTdGFjaywgc2V0IGBhcHBpdW1VcmxgIHRvIHRoZSBCcm93c2VyU3RhY2sgaHViIFVSTFxuICogXHUyMDE0IHRoZSB0cmFuc3BvcnQgaXRzZWxmIGlzIGh1Yi1hZ25vc3RpYy5cbiAqXG4gKiAjIyBIb3cgdmF1bHQgcmVnaXN0cmF0aW9uIHdvcmtzIG9uIG1vYmlsZVxuICpcbiAqIE9ic2lkaWFuIE1vYmlsZSBzdG9yZXMgaXRzIHZhdWx0IHJlZ2lzdHJ5IGluIHRoZSBXZWJWaWV3J3MgYGxvY2FsU3RvcmFnZWA6XG4gKlxuICogLSBgbW9iaWxlLWV4dGVybmFsLXZhdWx0c2AgXHUyMDE0IEpTT04gYXJyYXkgb2YgcmVnaXN0ZXJlZCB2YXVsdCBwYXRoc1xuICogLSBgbW9iaWxlLXNlbGVjdGVkLXZhdWx0YCBcdTIwMTQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmF1bHQgcGF0aFxuICogLSBgZW5hYmxlLXBsdWdpbi08dmF1bHRQYXRoPmAgXHUyMDE0IGBcInRydWVcImAgdG8gZW5hYmxlIHRoZSBwbHVnaW4gc3lzdGVtIGZvciB0aGUgdmF1bHRcbiAqXG4gKiBUbyByZWdpc3RlciBhIHZhdWx0IHByb2dyYW1tYXRpY2FsbHkgKHdpdGhvdXQgVUkgaW50ZXJhY3Rpb24pOlxuICpcbiAqIDEuIFB1c2ggdmF1bHQgZmlsZXMgdG8gdGhlIGRldmljZSAoZS5nLiBgL3NkY2FyZC9Eb2N1bWVudHMvPE5hbWU+Ly5vYnNpZGlhbi9hcHAuanNvbmApXG4gKiAyLiBTd2l0Y2ggdG8gYFdFQlZJRVdfbWQub2JzaWRpYW5gIGNvbnRleHRcbiAqIDMuIFNldCB0aGUgbG9jYWxTdG9yYWdlIGVudHJpZXNcbiAqIDQuIENhbGwgYGxvY2F0aW9uLnJlbG9hZCgpYCBcdTIwMTQgT2JzaWRpYW4gcmUtcmVhZHMgbG9jYWxTdG9yYWdlIGFuZCBvcGVucyB0aGUgdmF1bHRcbiAqXG4gKiBUaGlzIGF2b2lkcyB0aGUgb25ib2FyZGluZyBmbG93IGVudGlyZWx5LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlciB9IGZyb20gJ3dlYmRyaXZlcmlvJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQXBwaXVtIHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBpdW1UcmFuc3BvcnRDb25maWcge1xuICAvKipcbiAgICogQXBwIHBhY2thZ2UgKEFuZHJvaWQpIG9yIGJ1bmRsZSBJRCAoaU9TKS5cbiAgICogRGVmYXVsdHMgdG8gYCdtZC5vYnNpZGlhbidgLlxuICAgKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBcHBpdW0gYnJvd3Nlci9kcml2ZXIgaW5zdGFuY2UuXG4gICAqIENyZWF0ZWQgYnkgdGhlIGNvbnN1bWVyIHZpYSBlLmcuIFdlYkRyaXZlcklPJ3MgYHJlbW90ZSgpYC5cbiAgICovXG4gIGJyb3dzZXI6IEJyb3dzZXI7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybS4gRGV0ZXJtaW5lcyBXZWJWaWV3IGNvbnRleHQgbmFtaW5nIGFuZCBkZXZpY2UgZmlsZSBwYXRocy5cbiAgICovXG4gIHBsYXRmb3JtOiAnYW5kcm9pZCcgfCAnaW9zJztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIG9uIHRoZSBkZXZpY2Ugd2hlcmUgT2JzaWRpYW4gc3RvcmVzIHZhdWx0cy5cbiAgICpcbiAgICogRGVmYXVsdHM6XG4gICAqIC0gQW5kcm9pZDogYC9zZGNhcmQvRG9jdW1lbnRzL2BcbiAgICogLSBpT1M6IGBAbWQub2JzaWRpYW46ZG9jdW1lbnRzL2BcbiAgICovXG4gIHZhdWx0QmFzZVBhdGg/OiBzdHJpbmc7XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5jb25zdCBBUFBfU1RBVEVfRk9SRUdST1VORCA9IDQ7XG5jb25zdCBXRUJWSUVXX0NPTlRFWFRfUFJFRklYID0gJ1dFQlZJRVdfbWQub2JzaWRpYW4nO1xuY29uc3QgV0VCVklFV19QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IEFQUF9SRVNUQVJUX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBERUZBVUxUX0FQUF9JRCA9ICdtZC5vYnNpZGlhbic7XG5cbmNvbnN0IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhbmRyb2lkOiAnL3NkY2FyZC9Eb2N1bWVudHMvJyxcbiAgaW9zOiAnQG1kLm9ic2lkaWFuOmRvY3VtZW50cy8nXG59O1xuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIE9ic2lkaWFuIE1vYmlsZSB2aWEgQXBwaXVtIFdlYlZpZXcgSlMgaW5qZWN0aW9uLlxuICpcbiAqIEV2YWx1YXRlcyBleHByZXNzaW9ucyBieSBzd2l0Y2hpbmcgdG8gdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0IGFuZFxuICogY2FsbGluZyBgZXhlY3V0ZSgpYC4gTWFuYWdlcyB2YXVsdHMgYnkgd3JpdGluZyB0byB0aGUgV2ViVmlldydzIGBsb2NhbFN0b3JhZ2VgXG4gKiAod2hpY2ggT2JzaWRpYW4gdXNlcyBhcyBpdHMgdmF1bHQgcmVnaXN0cnkgb24gbW9iaWxlKSBhbmQgcHVzaGluZyBmaWxlcyB0byB0aGUgZGV2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgQXBwaXVtVHJhbnNwb3J0IGltcGxlbWVudHMgT2JzaWRpYW5UcmFuc3BvcnQge1xuICAvKiogKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyb3dzZXI6IEJyb3dzZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm06ICdhbmRyb2lkJyB8ICdpb3MnO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhdWx0QmFzZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBcHBpdW0gdHJhbnNwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQXBwaXVtIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBwaXVtVHJhbnNwb3J0Q29uZmlnKSB7XG4gICAgdGhpcy5icm93c2VyID0gY29uZmlnLmJyb3dzZXI7XG4gICAgdGhpcy5wbGF0Zm9ybSA9IGNvbmZpZy5wbGF0Zm9ybTtcbiAgICB0aGlzLmFwcElkID0gY29uZmlnLmFwcElkID8/IERFRkFVTFRfQVBQX0lEO1xuICAgIHRoaXMudmF1bHRCYXNlUGF0aCA9IGNvbmZpZy52YXVsdEJhc2VQYXRoID8/IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIW3RoaXMucGxhdGZvcm1dID8/ICcvc2RjYXJkL0RvY3VtZW50cy8nO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZHMgdGhlIEFwcGl1bSBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSdzIFdlYlZpZXcuXG4gICAqXG4gICAqIFN3aXRjaGVzIHRvIHRoZSBgV0VCVklFV19tZC5vYnNpZGlhbmAgY29udGV4dCwgZXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24sXG4gICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBfb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucyAoY3dkIGlzIG5vdCB1c2VkIG9uIG1vYmlsZSBcdTIwMTQgdmF1bHQgdGFyZ2V0aW5nIGlzIHZpYSBsb2NhbFN0b3JhZ2UpLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgX29wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmJyb3dzZXIuZXhlY3V0ZTxudWxsIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBbXT4oXG4gICAgICBgcmV0dXJuICgke2V4cHJlc3Npb259KWBcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5PX09VVFBVVDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIE9ic2lkaWFuIGFwcCBpcyBydW5uaW5nIGFuZCB0aGUgV2ViVmlldyBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBfdmF1bHRQYXRoIC0gTm90IHVzZWQgb24gbW9iaWxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKF92YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZygnW2FwcGl1bS10cmFuc3BvcnRdIFJ1bm5pbmcgcHJlZmxpZ2h0IGNoZWNrLi4uJyk7XG4gICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLmJyb3dzZXIucXVlcnlBcHBTdGF0ZSh0aGlzLmFwcElkKTtcbiAgICBsb2coYFthcHBpdW0tdHJhbnNwb3J0XSBBcHAgc3RhdGU6ICR7U3RyaW5nKHN0YXRlKX0gKG5lZWQgJHtTdHJpbmcoQVBQX1NUQVRFX0ZPUkVHUk9VTkQpfT1mb3JlZ3JvdW5kKWApO1xuICAgIGlmIChzdGF0ZSAhPT0gQVBQX1NUQVRFX0ZPUkVHUk9VTkQpIHtcbiAgICAgIGxvZyhgW2FwcGl1bS10cmFuc3BvcnRdIEFjdGl2YXRpbmcgYXBwICR7dGhpcy5hcHBJZH0uLi5gKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5hY3RpdmF0ZUFwcCh0aGlzLmFwcElkKTtcbiAgICAgIGF3YWl0IGRlbGF5KEFQUF9SRVNUQVJUX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVXZWJWaWV3Q29udGV4dCgpO1xuICAgIGxvZygnW2FwcGl1bS10cmFuc3BvcnRdIFByZWZsaWdodCBjaGVjayBwYXNzZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIHZhdWx0IGZpbGVzIHRvIHRoZSBkZXZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCAodXNlZCBhcyB0aGUgdmF1bHQgZGlyZWN0b3J5IG5hbWUgb24gZGV2aWNlKS5cbiAgICogQHBhcmFtIGZpbGVzIC0gTWFwIG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgdG8gY29udGVudCBzdHJpbmdzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1c2hGaWxlcyh2YXVsdFBhdGg6IHN0cmluZywgZmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZpY2VWYXVsdFBhdGggPSB0aGlzLmdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGgpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZGV2aWNlRmlsZVBhdGggPSBgJHtkZXZpY2VWYXVsdFBhdGh9LyR7ZmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpfWA7XG4gICAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gQnVmZmVyLmZyb20oY29udGVudCwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLnB1c2hGaWxlKGRldmljZUZpbGVQYXRoLCBiYXNlNjRDb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdmF1bHQgb24gbW9iaWxlIGJ5IHB1c2hpbmcgZmlsZXMgYW5kIGNvbmZpZ3VyaW5nIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogVGhlIHJlZ2lzdHJhdGlvbiBmbG93OlxuICAgKiAxLiBQdXNoIGEgbWluaW1hbCBgLm9ic2lkaWFuL2FwcC5qc29uYCB0byB0aGUgZGV2aWNlIHNvIE9ic2lkaWFuIHJlY29nbml6ZXMgdGhlIHZhdWx0XG4gICAqIDIuIFN3aXRjaCB0byB0aGUgV2ViVmlldyBjb250ZXh0XG4gICAqIDMuIEFkZCB0aGUgdmF1bHQgdG8gbG9jYWxTdG9yYWdlIChgbW9iaWxlLWV4dGVybmFsLXZhdWx0c2AsIGBtb2JpbGUtc2VsZWN0ZWQtdmF1bHRgLFxuICAgKiAgICBgZW5hYmxlLXBsdWdpbi08cGF0aD5gKVxuICAgKiA0LiBUcmlnZ2VyIGBsb2NhdGlvbi5yZWxvYWQoKWAgc28gT2JzaWRpYW4gcmUtcmVhZHMgbG9jYWxTdG9yYWdlIGFuZCBvcGVucyB0aGUgdmF1bHRcbiAgICogNS4gV2FpdCBmb3IgYGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHlgXG4gICAqXG4gICAqIEV4aXN0aW5nIHZhdWx0IHJlZ2lzdHJhdGlvbnMgaW4gbG9jYWxTdG9yYWdlIGFyZSBwcmVzZXJ2ZWQgKGFwcGVuZCwgbm90IG92ZXJ3cml0ZSkuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbYXBwaXVtLXRyYW5zcG9ydF0gUmVnaXN0ZXJpbmcgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGNvbnN0IGRldmljZVZhdWx0UGF0aCA9IHRoaXMuZ2V0RGV2aWNlVmF1bHRQYXRoKHZhdWx0UGF0aCk7XG5cbiAgICAvLyBQdXNoIGEgbWluaW1hbCAub2JzaWRpYW4gZGlyZWN0b3J5IHNvIE9ic2lkaWFuIHJlY29nbml6ZXMgaXQgYXMgYSB2YXVsdC5cbiAgICBjb25zdCBvYnNpZGlhbk1hcmtlciA9IGAke2RldmljZVZhdWx0UGF0aH0vLm9ic2lkaWFuL2FwcC5qc29uYDtcbiAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gQnVmZmVyLmZyb20oJ3t9JywgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5wdXNoRmlsZShvYnNpZGlhbk1hcmtlciwgYmFzZTY0Q29udGVudCk7XG5cbiAgICAvLyBTd2l0Y2ggdG8gV2ViVmlldyBhbmQgY29uZmlndXJlIGxvY2FsU3RvcmFnZS5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG5cbiAgICBhd2FpdCB0aGlzLmJyb3dzZXIuZXhlY3V0ZSgocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vYmlsZS1leHRlcm5hbC12YXVsdHMnKSA/PyAnW10nKSBhcyBzdHJpbmdbXTtcbiAgICAgIGlmICghZXhpc3RpbmcuaW5jbHVkZXMocGF0aCkpIHtcbiAgICAgICAgZXhpc3RpbmcucHVzaChwYXRoKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vYmlsZS1leHRlcm5hbC12YXVsdHMnLCBKU09OLnN0cmluZ2lmeShleGlzdGluZykpO1xuICAgICAgfVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vYmlsZS1zZWxlY3RlZC12YXVsdCcsIHBhdGgpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYGVuYWJsZS1wbHVnaW4tJHtwYXRofWAsICd0cnVlJyk7XG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9LCBkZXZpY2VWYXVsdFBhdGgpO1xuXG4gICAgLy8gV2FpdCBmb3IgcmVsb2FkICsgdmF1bHQgaW5pdGlhbGl6YXRpb24uXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTGF5b3V0UmVhZHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IG9uIG1vYmlsZSBieSByZW1vdmluZyBpdCBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogUHJlc2VydmVzIG90aGVyIHZhdWx0IHJlZ2lzdHJhdGlvbnMuIElmIHRoZSB1bnJlZ2lzdGVyZWQgdmF1bHQgd2FzIHNlbGVjdGVkLFxuICAgKiBzd2l0Y2hlcyB0byB0aGUgZmlyc3QgcmVtYWluaW5nIHZhdWx0IChvciBjbGVhcnMgdGhlIHNlbGVjdGlvbikuXG4gICAqXG4gICAqIE5vdGU6IFZhdWx0IGZpbGVzIG9uIHRoZSBkZXZpY2UgYXJlIG5vdCBkZWxldGVkLiBUaGUgdGVzdCBoYXJuZXNzIG9yIENJXG4gICAqIGVudmlyb25tZW50IHNob3VsZCBoYW5kbGUgZGV2aWNlIGNsZWFudXAuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZpY2VWYXVsdFBhdGggPSB0aGlzLmdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGgpO1xuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVXZWJWaWV3Q29udGV4dCgpO1xuXG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmV4ZWN1dGUoKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtb2JpbGUtZXh0ZXJuYWwtdmF1bHRzJykgPz8gJ1tdJykgYXMgc3RyaW5nW107XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGV4aXN0aW5nLmZpbHRlcigodikgPT4gdiAhPT0gcGF0aCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbW9iaWxlLWV4dGVybmFsLXZhdWx0cycsIEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkKSk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgZW5hYmxlLXBsdWdpbi0ke3BhdGh9YCk7XG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vYmlsZS1zZWxlY3RlZC12YXVsdCcpID09PSBwYXRoKSB7XG4gICAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vYmlsZS1zZWxlY3RlZC12YXVsdCcsIGZpbHRlcmVkWzBdID8/ICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnbW9iaWxlLXNlbGVjdGVkLXZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBkZXZpY2VWYXVsdFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaGVzIHRoZSBkcml2ZXIgdG8gdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0LlxuICAgKlxuICAgKiBQb2xscyB1bnRpbCB0aGUgY29udGV4dCBiZWNvbWVzIGF2YWlsYWJsZSAodGhlIGFwcCBtYXkgc3RpbGwgYmUgbG9hZGluZykuXG4gICAqIFVzZXMgdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0IHNwZWNpZmljYWxseSB0byBhdm9pZCBjb25uZWN0aW5nXG4gICAqIHRvIENocm9tZSBvciBvdGhlciBXZWJWaWV3cyBvbiB0aGUgZGV2aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVXZWJWaWV3Q29udGV4dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBXRUJWSUVXX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgbG9nKGBbYXBwaXVtLXRyYW5zcG9ydF0gV2FpdGluZyBmb3IgJHtXRUJWSUVXX0NPTlRFWFRfUFJFRklYfSBjb250ZXh0ICh0aW1lb3V0PSR7U3RyaW5nKFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuYnJvd3Nlci5nZXRDb250ZXh0cygpO1xuICAgICAgY29uc3Qgb2JzaWRpYW5Db250ZXh0ID0gY29udGV4dHMuZmluZCgoY3R4KTogY3R4IGlzIHN0cmluZyA9PiB0eXBlb2YgY3R4ID09PSAnc3RyaW5nJyAmJiBjdHguc3RhcnRzV2l0aChXRUJWSUVXX0NPTlRFWFRfUFJFRklYKSk7XG5cbiAgICAgIGlmIChvYnNpZGlhbkNvbnRleHQpIHtcbiAgICAgICAgbG9nKGBbYXBwaXVtLXRyYW5zcG9ydF0gRm91bmQgV2ViVmlldyBjb250ZXh0OiAke29ic2lkaWFuQ29udGV4dH1gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5icm93c2VyLnN3aXRjaENvbnRleHQob2JzaWRpYW5Db250ZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2coYFthcHBpdW0tdHJhbnNwb3J0XSBXZWJWaWV3IG5vdCByZWFkeSwgYXZhaWxhYmxlIGNvbnRleHRzOiAke0pTT04uc3RyaW5naWZ5KGNvbnRleHRzKX0uIFJldHJ5aW5nLi4uYCk7XG4gICAgICBhd2FpdCBkZWxheShXRUJWSUVXX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICR7V0VCVklFV19DT05URVhUX1BSRUZJWH0gY29udGV4dCBmb3VuZCB3aXRoaW4gJHtTdHJpbmcoV0VCVklFV19QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy4gSXMgdGhlIE9ic2lkaWFuIGFwcCBmdWxseSBsb2FkZWQ/YCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBob3N0LXNpZGUgdmF1bHQgcGF0aCB0byB0aGUgZGV2aWNlLXNpZGUgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIEFic29sdXRlIHBhdGggb24gdGhlIGhvc3QgbWFjaGluZS5cbiAgICogQHJldHVybnMgVGhlIGRldmljZS1zaWRlIHZhdWx0IHBhdGguXG4gICAqL1xuICBwcml2YXRlIGdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMudmF1bHRCYXNlUGF0aH0ke2V4dHJhY3RWYXVsdE5hbWUodmF1bHRQYXRoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGxzIHVudGlsIGBhcHAud29ya3NwYWNlLmxheW91dFJlYWR5YCBpcyBgdHJ1ZWAgaW4gdGhlIFdlYlZpZXcuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JMYXlvdXRSZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBMQVlPVVRfUkVBRFlfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICBsb2coYFthcHBpdW0tdHJhbnNwb3J0XSBXYWl0aW5nIGZvciBsYXlvdXQgcmVhZHkgKHRpbWVvdXQ9JHtTdHJpbmcoTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNSZWFkeSA9IGF3YWl0IHRoaXMuYnJvd3Nlci5leGVjdXRlPGJvb2xlYW4sIFtdPihcbiAgICAgICAgICAncmV0dXJuIHR5cGVvZiBhcHAgIT09IFwidW5kZWZpbmVkXCIgJiYgYXBwLndvcmtzcGFjZSAmJiBhcHAud29ya3NwYWNlLmxheW91dFJlYWR5ID09PSB0cnVlJ1xuICAgICAgICApO1xuICAgICAgICBpZiAoaXNSZWFkeSkge1xuICAgICAgICAgIGxvZygnW2FwcGl1bS10cmFuc3BvcnRdIExheW91dCBpcyByZWFkeS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBBcHAgbm90IHJlYWR5IHlldCAocGFnZSBtYXkgYmUgcmVsb2FkaW5nKS5cbiAgICAgIH1cblxuICAgICAgYXdhaXQgZGVsYXkoTEFZT1VUX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ic2lkaWFuIGxheW91dCBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBnaXZlbiBkZWxheS5cbiAqXG4gKiBAcGFyYW0gbXMgLSBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWxheShtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdmF1bHQgZGlyZWN0b3J5IG5hbWUgZnJvbSBhIGhvc3Qtc2lkZSB2YXVsdCBwYXRoLlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBBYnNvbHV0ZSBwYXRoIG9uIHRoZSBob3N0IG1hY2hpbmUuXG4gKiBAcmV0dXJucyBUaGUgbGFzdCBwYXRoIHNlZ21lbnQgKHZhdWx0IGRpcmVjdG9yeSBuYW1lKS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFZhdWx0TmFtZSh2YXVsdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YXVsdFBhdGgucmVwbGFjZSgvW1xcXFwvXSskLywgJycpO1xuICBjb25zdCBsYXN0U2VwID0gTWF0aC5tYXgobm9ybWFsaXplZC5sYXN0SW5kZXhPZignLycpLCBub3JtYWxpemVkLmxhc3RJbmRleE9mKCdcXFxcJykpO1xuICByZXR1cm4gbm9ybWFsaXplZC5zbGljZShsYXN0U2VwICsgMSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaURBLGlCQUFvQjtBQWlDcEIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sd0NBQXdDO0FBQzlDLE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0sNkNBQTZDO0FBQ25ELE1BQU0sNENBQTRDO0FBQ2xELE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0saUJBQWlCO0FBRXZCLE1BQU0sMEJBQWtEO0FBQUEsRUFDdEQsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUNQO0FBU08sTUFBTSxnQkFBNkM7QUFBQTtBQUFBLEVBRXhDLFdBQVc7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUErQjtBQUNoRCxTQUFLLFVBQVUsT0FBTztBQUN0QixTQUFLLFdBQVcsT0FBTztBQUN2QixT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
247
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1hcHBpdW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBcHBpdW0gdHJhbnNwb3J0IFx1MjAxNCBldmFsdWF0ZXMgZXhwcmVzc2lvbnMgaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSB2aWEgV2ViVmlld1xuICogSmF2YVNjcmlwdCBpbmplY3Rpb24uIE1hbmFnZXMgdmF1bHQgbGlmZWN5Y2xlIHZpYSBsb2NhbFN0b3JhZ2UgYW5kIGZpbGUgcHVzaC5cbiAqXG4gKiBDb25maWd1cmVkIHZpYSBgZW52aXJvbm1lbnRPcHRpb25zLm9ic2lkaWFuVHJhbnNwb3J0YCBpbiB2aXRlc3QgY29uZmlnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHZpdGVzdC5jb25maWcudHNcbiAqIGVudmlyb25tZW50T3B0aW9uczoge1xuICogICBvYnNpZGlhblRyYW5zcG9ydDoge1xuICogICAgIHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bScsXG4gKiAgICAgYXBwaXVtVXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJyxcbiAqICAgICBkZXZpY2VJZDogJ2VtdWxhdG9yLTU1NTQnLFxuICogICB9LFxuICogfVxuICogYGBgXG4gKlxuICogRm9yIEJyb3dzZXJTdGFjaywgc2V0IGBhcHBpdW1VcmxgIHRvIHRoZSBCcm93c2VyU3RhY2sgaHViIFVSTFxuICogXHUyMDE0IHRoZSB0cmFuc3BvcnQgaXRzZWxmIGlzIGh1Yi1hZ25vc3RpYy5cbiAqXG4gKiAjIyBIb3cgdmF1bHQgcmVnaXN0cmF0aW9uIHdvcmtzIG9uIG1vYmlsZVxuICpcbiAqIE9ic2lkaWFuIE1vYmlsZSBzdG9yZXMgaXRzIHZhdWx0IHJlZ2lzdHJ5IGluIHRoZSBXZWJWaWV3J3MgYGxvY2FsU3RvcmFnZWA6XG4gKlxuICogLSBgbW9iaWxlLWV4dGVybmFsLXZhdWx0c2AgXHUyMDE0IEpTT04gYXJyYXkgb2YgcmVnaXN0ZXJlZCB2YXVsdCBwYXRoc1xuICogLSBgbW9iaWxlLXNlbGVjdGVkLXZhdWx0YCBcdTIwMTQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmF1bHQgcGF0aFxuICogLSBgZW5hYmxlLXBsdWdpbi08dmF1bHRQYXRoPmAgXHUyMDE0IGBcInRydWVcImAgdG8gZW5hYmxlIHRoZSBwbHVnaW4gc3lzdGVtIGZvciB0aGUgdmF1bHRcbiAqXG4gKiBUbyByZWdpc3RlciBhIHZhdWx0IHByb2dyYW1tYXRpY2FsbHkgKHdpdGhvdXQgVUkgaW50ZXJhY3Rpb24pOlxuICpcbiAqIDEuIFB1c2ggdmF1bHQgZmlsZXMgdG8gdGhlIGRldmljZSAoZS5nLiBgL3NkY2FyZC9Eb2N1bWVudHMvPE5hbWU+Ly5vYnNpZGlhbi9hcHAuanNvbmApXG4gKiAyLiBTd2l0Y2ggdG8gYFdFQlZJRVdfbWQub2JzaWRpYW5gIGNvbnRleHRcbiAqIDMuIFNldCB0aGUgbG9jYWxTdG9yYWdlIGVudHJpZXNcbiAqIDQuIENhbGwgYGxvY2F0aW9uLnJlbG9hZCgpYCBcdTIwMTQgT2JzaWRpYW4gcmUtcmVhZHMgbG9jYWxTdG9yYWdlIGFuZCBvcGVucyB0aGUgdmF1bHRcbiAqXG4gKiBUaGlzIGF2b2lkcyB0aGUgb25ib2FyZGluZyBmbG93IGVudGlyZWx5LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlciB9IGZyb20gJ3dlYmRyaXZlcmlvJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQXBwaXVtIHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBpdW1UcmFuc3BvcnRDb25maWcge1xuICAvKipcbiAgICogQXBwIHBhY2thZ2UgKEFuZHJvaWQpIG9yIGJ1bmRsZSBJRCAoaU9TKS5cbiAgICogRGVmYXVsdHMgdG8gYCdtZC5vYnNpZGlhbidgLlxuICAgKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBcHBpdW0gYnJvd3Nlci9kcml2ZXIgaW5zdGFuY2UuXG4gICAqIENyZWF0ZWQgYnkgdGhlIGNvbnN1bWVyIHZpYSBlLmcuIFdlYkRyaXZlcklPJ3MgYHJlbW90ZSgpYC5cbiAgICovXG4gIGJyb3dzZXI6IEJyb3dzZXI7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybS4gRGV0ZXJtaW5lcyBXZWJWaWV3IGNvbnRleHQgbmFtaW5nIGFuZCBkZXZpY2UgZmlsZSBwYXRocy5cbiAgICovXG4gIHBsYXRmb3JtOiAnYW5kcm9pZCcgfCAnaW9zJztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIG9uIHRoZSBkZXZpY2Ugd2hlcmUgT2JzaWRpYW4gc3RvcmVzIHZhdWx0cy5cbiAgICpcbiAgICogRGVmYXVsdHM6XG4gICAqIC0gQW5kcm9pZDogYC9zZGNhcmQvRG9jdW1lbnRzL2BcbiAgICogLSBpT1M6IGBAbWQub2JzaWRpYW46ZG9jdW1lbnRzL2BcbiAgICovXG4gIHZhdWx0QmFzZVBhdGg/OiBzdHJpbmc7XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5jb25zdCBBUFBfU1RBVEVfRk9SRUdST1VORCA9IDQ7XG5jb25zdCBXRUJWSUVXX0NPTlRFWFRfUFJFRklYID0gJ1dFQlZJRVdfbWQub2JzaWRpYW4nO1xuY29uc3QgV0VCVklFV19QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IEFQUF9SRVNUQVJUX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBERUZBVUxUX0FQUF9JRCA9ICdtZC5vYnNpZGlhbic7XG5cbmNvbnN0IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhbmRyb2lkOiAnL3NkY2FyZC9Eb2N1bWVudHMvJyxcbiAgaW9zOiAnQG1kLm9ic2lkaWFuOmRvY3VtZW50cy8nXG59O1xuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIE9ic2lkaWFuIE1vYmlsZSB2aWEgQXBwaXVtIFdlYlZpZXcgSlMgaW5qZWN0aW9uLlxuICpcbiAqIEV2YWx1YXRlcyBleHByZXNzaW9ucyBieSBzd2l0Y2hpbmcgdG8gdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0IGFuZFxuICogY2FsbGluZyBgZXhlY3V0ZSgpYC4gTWFuYWdlcyB2YXVsdHMgYnkgd3JpdGluZyB0byB0aGUgV2ViVmlldydzIGBsb2NhbFN0b3JhZ2VgXG4gKiAod2hpY2ggT2JzaWRpYW4gdXNlcyBhcyBpdHMgdmF1bHQgcmVnaXN0cnkgb24gbW9iaWxlKSBhbmQgcHVzaGluZyBmaWxlcyB0byB0aGUgZGV2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgQXBwaXVtVHJhbnNwb3J0IGltcGxlbWVudHMgT2JzaWRpYW5UcmFuc3BvcnQge1xuICAvKiogKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyb3dzZXI6IEJyb3dzZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm06ICdhbmRyb2lkJyB8ICdpb3MnO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhdWx0QmFzZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBcHBpdW0gdHJhbnNwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQXBwaXVtIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBwaXVtVHJhbnNwb3J0Q29uZmlnKSB7XG4gICAgdGhpcy5icm93c2VyID0gY29uZmlnLmJyb3dzZXI7XG4gICAgdGhpcy5wbGF0Zm9ybSA9IGNvbmZpZy5wbGF0Zm9ybTtcbiAgICB0aGlzLmFwcElkID0gY29uZmlnLmFwcElkID8/IERFRkFVTFRfQVBQX0lEO1xuICAgIHRoaXMudmF1bHRCYXNlUGF0aCA9IGNvbmZpZy52YXVsdEJhc2VQYXRoID8/IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIW3RoaXMucGxhdGZvcm1dID8/ICcvc2RjYXJkL0RvY3VtZW50cy8nO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZHMgdGhlIEFwcGl1bSBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSdzIFdlYlZpZXcuXG4gICAqXG4gICAqIFN3aXRjaGVzIHRvIHRoZSBgV0VCVklFV19tZC5vYnNpZGlhbmAgY29udGV4dCwgZXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24sXG4gICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBfb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucyAoY3dkIGlzIG5vdCB1c2VkIG9uIG1vYmlsZSBcdTIwMTQgdmF1bHQgdGFyZ2V0aW5nIGlzIHZpYSBsb2NhbFN0b3JhZ2UpLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgX29wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmJyb3dzZXIuZXhlY3V0ZTxudWxsIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBbXT4oXG4gICAgICBgcmV0dXJuICgke2V4cHJlc3Npb259KWBcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5PX09VVFBVVDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIE9ic2lkaWFuIGFwcCBpcyBydW5uaW5nIGFuZCB0aGUgV2ViVmlldyBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBfdmF1bHRQYXRoIC0gTm90IHVzZWQgb24gbW9iaWxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKF92YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZygnW2FwcGl1bS10cmFuc3BvcnRdIFJ1bm5pbmcgcHJlZmxpZ2h0IGNoZWNrLi4uJyk7XG4gICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLmJyb3dzZXIucXVlcnlBcHBTdGF0ZSh0aGlzLmFwcElkKTtcbiAgICBsb2coYFthcHBpdW0tdHJhbnNwb3J0XSBBcHAgc3RhdGU6ICR7U3RyaW5nKHN0YXRlKX0gKG5lZWQgJHtTdHJpbmcoQVBQX1NUQVRFX0ZPUkVHUk9VTkQpfT1mb3JlZ3JvdW5kKWApO1xuICAgIGlmIChzdGF0ZSAhPT0gQVBQX1NUQVRFX0ZPUkVHUk9VTkQpIHtcbiAgICAgIGxvZyhgW2FwcGl1bS10cmFuc3BvcnRdIEFjdGl2YXRpbmcgYXBwICR7dGhpcy5hcHBJZH0uLi5gKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5hY3RpdmF0ZUFwcCh0aGlzLmFwcElkKTtcbiAgICAgIGF3YWl0IGRlbGF5KEFQUF9SRVNUQVJUX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVXZWJWaWV3Q29udGV4dCgpO1xuICAgIGxvZygnW2FwcGl1bS10cmFuc3BvcnRdIFByZWZsaWdodCBjaGVjayBwYXNzZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIHZhdWx0IGZpbGVzIHRvIHRoZSBkZXZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCAodXNlZCBhcyB0aGUgdmF1bHQgZGlyZWN0b3J5IG5hbWUgb24gZGV2aWNlKS5cbiAgICogQHBhcmFtIGZpbGVzIC0gTWFwIG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgdG8gY29udGVudCBzdHJpbmdzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1c2hGaWxlcyh2YXVsdFBhdGg6IHN0cmluZywgZmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZpY2VWYXVsdFBhdGggPSB0aGlzLmdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGgpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZGV2aWNlRmlsZVBhdGggPSBgJHtkZXZpY2VWYXVsdFBhdGh9LyR7ZmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpfWA7XG4gICAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gQnVmZmVyLmZyb20oY29udGVudCwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLnB1c2hGaWxlKGRldmljZUZpbGVQYXRoLCBiYXNlNjRDb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdmF1bHQgb24gbW9iaWxlIGJ5IHB1c2hpbmcgZmlsZXMgYW5kIGNvbmZpZ3VyaW5nIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogVGhlIHJlZ2lzdHJhdGlvbiBmbG93OlxuICAgKiAxLiBQdXNoIGEgbWluaW1hbCBgLm9ic2lkaWFuL2FwcC5qc29uYCB0byB0aGUgZGV2aWNlIHNvIE9ic2lkaWFuIHJlY29nbml6ZXMgdGhlIHZhdWx0XG4gICAqIDIuIFN3aXRjaCB0byB0aGUgV2ViVmlldyBjb250ZXh0XG4gICAqIDMuIEFkZCB0aGUgdmF1bHQgdG8gbG9jYWxTdG9yYWdlIChgbW9iaWxlLWV4dGVybmFsLXZhdWx0c2AsIGBtb2JpbGUtc2VsZWN0ZWQtdmF1bHRgLFxuICAgKiAgICBgZW5hYmxlLXBsdWdpbi08cGF0aD5gKVxuICAgKiA0LiBUcmlnZ2VyIGBsb2NhdGlvbi5yZWxvYWQoKWAgc28gT2JzaWRpYW4gcmUtcmVhZHMgbG9jYWxTdG9yYWdlIGFuZCBvcGVucyB0aGUgdmF1bHRcbiAgICogNS4gV2FpdCBmb3IgYGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHlgXG4gICAqXG4gICAqIEV4aXN0aW5nIHZhdWx0IHJlZ2lzdHJhdGlvbnMgaW4gbG9jYWxTdG9yYWdlIGFyZSBwcmVzZXJ2ZWQgKGFwcGVuZCwgbm90IG92ZXJ3cml0ZSkuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbYXBwaXVtLXRyYW5zcG9ydF0gUmVnaXN0ZXJpbmcgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGNvbnN0IGRldmljZVZhdWx0UGF0aCA9IHRoaXMuZ2V0RGV2aWNlVmF1bHRQYXRoKHZhdWx0UGF0aCk7XG5cbiAgICAvLyBQdXNoIGEgbWluaW1hbCAub2JzaWRpYW4gZGlyZWN0b3J5IHNvIE9ic2lkaWFuIHJlY29nbml6ZXMgaXQgYXMgYSB2YXVsdC5cbiAgICBjb25zdCBvYnNpZGlhbk1hcmtlciA9IGAke2RldmljZVZhdWx0UGF0aH0vLm9ic2lkaWFuL2FwcC5qc29uYDtcbiAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gQnVmZmVyLmZyb20oJ3t9JywgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5wdXNoRmlsZShvYnNpZGlhbk1hcmtlciwgYmFzZTY0Q29udGVudCk7XG5cbiAgICAvLyBTd2l0Y2ggdG8gV2ViVmlldyBhbmQgY29uZmlndXJlIGxvY2FsU3RvcmFnZS5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG5cbiAgICBhd2FpdCB0aGlzLmJyb3dzZXIuZXhlY3V0ZSgocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vYmlsZS1leHRlcm5hbC12YXVsdHMnKSA/PyAnW10nKSBhcyBzdHJpbmdbXTtcbiAgICAgIGlmICghZXhpc3RpbmcuaW5jbHVkZXMocGF0aCkpIHtcbiAgICAgICAgZXhpc3RpbmcucHVzaChwYXRoKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vYmlsZS1leHRlcm5hbC12YXVsdHMnLCBKU09OLnN0cmluZ2lmeShleGlzdGluZykpO1xuICAgICAgfVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vYmlsZS1zZWxlY3RlZC12YXVsdCcsIHBhdGgpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYGVuYWJsZS1wbHVnaW4tJHtwYXRofWAsICd0cnVlJyk7XG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9LCBkZXZpY2VWYXVsdFBhdGgpO1xuXG4gICAgLy8gV2FpdCBmb3IgcmVsb2FkICsgdmF1bHQgaW5pdGlhbGl6YXRpb24uXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTGF5b3V0UmVhZHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IG9uIG1vYmlsZSBieSByZW1vdmluZyBpdCBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogUHJlc2VydmVzIG90aGVyIHZhdWx0IHJlZ2lzdHJhdGlvbnMuIElmIHRoZSB1bnJlZ2lzdGVyZWQgdmF1bHQgd2FzIHNlbGVjdGVkLFxuICAgKiBzd2l0Y2hlcyB0byB0aGUgZmlyc3QgcmVtYWluaW5nIHZhdWx0IChvciBjbGVhcnMgdGhlIHNlbGVjdGlvbikuXG4gICAqXG4gICAqIE5vdGU6IFZhdWx0IGZpbGVzIG9uIHRoZSBkZXZpY2UgYXJlIG5vdCBkZWxldGVkLiBUaGUgdGVzdCBoYXJuZXNzIG9yIENJXG4gICAqIGVudmlyb25tZW50IHNob3VsZCBoYW5kbGUgZGV2aWNlIGNsZWFudXAuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZpY2VWYXVsdFBhdGggPSB0aGlzLmdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGgpO1xuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVXZWJWaWV3Q29udGV4dCgpO1xuXG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmV4ZWN1dGUoKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtb2JpbGUtZXh0ZXJuYWwtdmF1bHRzJykgPz8gJ1tdJykgYXMgc3RyaW5nW107XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGV4aXN0aW5nLmZpbHRlcigodikgPT4gdiAhPT0gcGF0aCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbW9iaWxlLWV4dGVybmFsLXZhdWx0cycsIEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkKSk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgZW5hYmxlLXBsdWdpbi0ke3BhdGh9YCk7XG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vYmlsZS1zZWxlY3RlZC12YXVsdCcpID09PSBwYXRoKSB7XG4gICAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vYmlsZS1zZWxlY3RlZC12YXVsdCcsIGZpbHRlcmVkWzBdID8/ICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnbW9iaWxlLXNlbGVjdGVkLXZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBkZXZpY2VWYXVsdFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaGVzIHRoZSBkcml2ZXIgdG8gdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0LlxuICAgKlxuICAgKiBQb2xscyB1bnRpbCB0aGUgY29udGV4dCBiZWNvbWVzIGF2YWlsYWJsZSAodGhlIGFwcCBtYXkgc3RpbGwgYmUgbG9hZGluZykuXG4gICAqIFVzZXMgdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0IHNwZWNpZmljYWxseSB0byBhdm9pZCBjb25uZWN0aW5nXG4gICAqIHRvIENocm9tZSBvciBvdGhlciBXZWJWaWV3cyBvbiB0aGUgZGV2aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVXZWJWaWV3Q29udGV4dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBXRUJWSUVXX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgbG9nKGBbYXBwaXVtLXRyYW5zcG9ydF0gV2FpdGluZyBmb3IgJHtXRUJWSUVXX0NPTlRFWFRfUFJFRklYfSBjb250ZXh0ICh0aW1lb3V0PSR7U3RyaW5nKFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuYnJvd3Nlci5nZXRDb250ZXh0cygpO1xuICAgICAgY29uc3Qgb2JzaWRpYW5Db250ZXh0ID0gY29udGV4dHMuZmluZCgoY3R4KTogY3R4IGlzIHN0cmluZyA9PiB0eXBlb2YgY3R4ID09PSAnc3RyaW5nJyAmJiBjdHguc3RhcnRzV2l0aChXRUJWSUVXX0NPTlRFWFRfUFJFRklYKSk7XG5cbiAgICAgIGlmIChvYnNpZGlhbkNvbnRleHQpIHtcbiAgICAgICAgbG9nKGBbYXBwaXVtLXRyYW5zcG9ydF0gRm91bmQgV2ViVmlldyBjb250ZXh0OiAke29ic2lkaWFuQ29udGV4dH1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmJyb3dzZXIuc3dpdGNoQ29udGV4dChvYnNpZGlhbkNvbnRleHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICBsb2coYFthcHBpdW0tdHJhbnNwb3J0XSBzd2l0Y2hDb250ZXh0IGZhaWxlZDogJHtTdHJpbmcoZXJyb3IpfS4gUmV0cnlpbmcuLi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2coYFthcHBpdW0tdHJhbnNwb3J0XSBXZWJWaWV3IG5vdCByZWFkeSwgYXZhaWxhYmxlIGNvbnRleHRzOiAke0pTT04uc3RyaW5naWZ5KGNvbnRleHRzKX0uIFJldHJ5aW5nLi4uYCk7XG4gICAgICBhd2FpdCBkZWxheShXRUJWSUVXX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICR7V0VCVklFV19DT05URVhUX1BSRUZJWH0gY29udGV4dCBmb3VuZCB3aXRoaW4gJHtTdHJpbmcoV0VCVklFV19QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy4gSXMgdGhlIE9ic2lkaWFuIGFwcCBmdWxseSBsb2FkZWQ/YCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBob3N0LXNpZGUgdmF1bHQgcGF0aCB0byB0aGUgZGV2aWNlLXNpZGUgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIEFic29sdXRlIHBhdGggb24gdGhlIGhvc3QgbWFjaGluZS5cbiAgICogQHJldHVybnMgVGhlIGRldmljZS1zaWRlIHZhdWx0IHBhdGguXG4gICAqL1xuICBwcml2YXRlIGdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMudmF1bHRCYXNlUGF0aH0ke2V4dHJhY3RWYXVsdE5hbWUodmF1bHRQYXRoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGxzIHVudGlsIGBhcHAud29ya3NwYWNlLmxheW91dFJlYWR5YCBpcyBgdHJ1ZWAgaW4gdGhlIFdlYlZpZXcuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JMYXlvdXRSZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBMQVlPVVRfUkVBRFlfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICBsb2coYFthcHBpdW0tdHJhbnNwb3J0XSBXYWl0aW5nIGZvciBsYXlvdXQgcmVhZHkgKHRpbWVvdXQ9JHtTdHJpbmcoTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNSZWFkeSA9IGF3YWl0IHRoaXMuYnJvd3Nlci5leGVjdXRlPGJvb2xlYW4sIFtdPihcbiAgICAgICAgICAncmV0dXJuIHR5cGVvZiBhcHAgIT09IFwidW5kZWZpbmVkXCIgJiYgYXBwLndvcmtzcGFjZSAmJiBhcHAud29ya3NwYWNlLmxheW91dFJlYWR5ID09PSB0cnVlJ1xuICAgICAgICApO1xuICAgICAgICBpZiAoaXNSZWFkeSkge1xuICAgICAgICAgIGxvZygnW2FwcGl1bS10cmFuc3BvcnRdIExheW91dCBpcyByZWFkeS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBBcHAgbm90IHJlYWR5IHlldCAocGFnZSBtYXkgYmUgcmVsb2FkaW5nKS5cbiAgICAgIH1cblxuICAgICAgYXdhaXQgZGVsYXkoTEFZT1VUX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ic2lkaWFuIGxheW91dCBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBnaXZlbiBkZWxheS5cbiAqXG4gKiBAcGFyYW0gbXMgLSBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWxheShtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdmF1bHQgZGlyZWN0b3J5IG5hbWUgZnJvbSBhIGhvc3Qtc2lkZSB2YXVsdCBwYXRoLlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBBYnNvbHV0ZSBwYXRoIG9uIHRoZSBob3N0IG1hY2hpbmUuXG4gKiBAcmV0dXJucyBUaGUgbGFzdCBwYXRoIHNlZ21lbnQgKHZhdWx0IGRpcmVjdG9yeSBuYW1lKS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFZhdWx0TmFtZSh2YXVsdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YXVsdFBhdGgucmVwbGFjZSgvW1xcXFwvXSskLywgJycpO1xuICBjb25zdCBsYXN0U2VwID0gTWF0aC5tYXgobm9ybWFsaXplZC5sYXN0SW5kZXhPZignLycpLCBub3JtYWxpemVkLmxhc3RJbmRleE9mKCdcXFxcJykpO1xuICByZXR1cm4gbm9ybWFsaXplZC5zbGljZShsYXN0U2VwICsgMSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaURBLGlCQUFvQjtBQWlDcEIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sd0NBQXdDO0FBQzlDLE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0sNkNBQTZDO0FBQ25ELE1BQU0sNENBQTRDO0FBQ2xELE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0saUJBQWlCO0FBRXZCLE1BQU0sMEJBQWtEO0FBQUEsRUFDdEQsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUNQO0FBU08sTUFBTSxnQkFBNkM7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LHNCQUFzQixDQUFDO0FBRS9ILFVBQUksaUJBQWlCO0FBQ25CLDRCQUFJLDZDQUE2QyxlQUFlLEVBQUU7QUFDbEUsWUFBSTtBQUNGLGdCQUFNLEtBQUssUUFBUSxjQUFjLGVBQWU7QUFDaEQ7QUFBQSxRQUNGLFNBQVMsT0FBZ0I7QUFDdkIsOEJBQUksNENBQTRDLE9BQU8sS0FBSyxDQUFDLGVBQWU7QUFBQSxRQUM5RTtBQUFBLE1BQ0Y7QUFFQSwwQkFBSSw2REFBNkQsS0FBSyxVQUFVLFFBQVEsQ0FBQyxlQUFlO0FBQ3hHLFlBQU0sTUFBTSxxQ0FBcUM7QUFBQSxJQUNuRDtBQUVBLFVBQU0sSUFBSSxNQUFNLE1BQU0sc0JBQXNCLHlCQUF5QixPQUFPLG9DQUFvQyxDQUFDLHVDQUF1QztBQUFBLEVBQzFKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRUSxtQkFBbUIsV0FBMkI7QUFDcEQsV0FBTyxHQUFHLEtBQUssYUFBYSxHQUFHLGlCQUFpQixTQUFTLENBQUM7QUFBQSxFQUM1RDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBYyxxQkFBb0M7QUFDaEQsVUFBTSxXQUFXLEtBQUssSUFBSSxJQUFJO0FBQzlCLHdCQUFJLHdEQUF3RCxPQUFPLHlDQUF5QyxDQUFDLFFBQVE7QUFFckgsV0FBTyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQzVCLFVBQUk7QUFDRixjQUFNLFVBQVUsTUFBTSxLQUFLLFFBQVE7QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFDQSxZQUFJLFNBQVM7QUFDWCw4QkFBSSxxQ0FBcUM7QUFDekM7QUFBQSxRQUNGO0FBQUEsTUFDRixRQUFRO0FBQUEsTUFFUjtBQUVBLFlBQU0sTUFBTSwwQ0FBMEM7QUFBQSxJQUN4RDtBQUVBLFVBQU0sSUFBSSxNQUFNLCtDQUErQyxPQUFPLHlDQUF5QyxDQUFDLElBQUk7QUFBQSxFQUN0SDtBQUNGO0FBUUEsU0FBUyxNQUFNLElBQTJCO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixlQUFXLFNBQVMsRUFBRTtBQUFBLEVBQ3hCLENBQUM7QUFDSDtBQVFBLFNBQVMsaUJBQWlCLFdBQTJCO0FBQ25ELFFBQU0sYUFBYSxVQUFVLFFBQVEsV0FBVyxFQUFFO0FBQ2xELFFBQU0sVUFBVSxLQUFLLElBQUksV0FBVyxZQUFZLEdBQUcsR0FBRyxXQUFXLFlBQVksSUFBSSxDQUFDO0FBQ2xGLFNBQU8sV0FBVyxNQUFNLFVBQVUsQ0FBQztBQUNyQzsiLAogICJuYW1lcyI6IFtdCn0K