obsidian-integration-testing 5.2.0 → 5.4.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.
@@ -48,4 +48,4 @@ ${sanitizedDetail}`);
48
48
  export {
49
49
  evalInObsidian
50
50
  };
51
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvclxufSBmcm9tICdvYnNpZGlhbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZXNwYWNlIC0tIFdlIG5lZWQgdG8gcmVmZXJlbmNlIGBvYnNpZGlhbmAgbW9kdWxlLlxuaW1wb3J0IHR5cGUgKiBhcyBvYnNpZGlhbiBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRlTmFtZXNwYWNlQ2FsbFBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5tanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0Lm1qcyc7XG5cbmltcG9ydCB7XG4gIGdldFRyYW5zcG9ydE9wdGlvbnMsXG4gIGdldFZhdWx0UGF0aFxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIubWpzJztcbmltcG9ydCB7IGdlbmVyYXRlTmFtZXNwYWNlQ2FsbCB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5tanMnO1xuaW1wb3J0IHsgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkIH0gZnJvbSAnLi9uYW1lc3BhY2UtYm9vdHN0cmFwLm1qcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcblxuaW50ZXJmYWNlIEV2YWxFcnJvckVudmVsb3BlIHtcbiAgdHlwZTogJ2Vycm9yJztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIGVudmVsb3BlIHJldHVybmVkIGJ5IHRoZSByZWdpc3RlcmVkIGBldmFsV3JhcHBlcmAgZnJvbSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKlxuICogLSBgRXZhbEVycm9yRW52ZWxvcGVgIFx1MjAxNCBgZm5gIHRocmV3OyBgdmFsdWVgIGlzIHRoZSBzZXJpYWxpemVkIGVycm9yLlxuICogLSBgRXZhbFVuZGVmaW5lZEVudmVsb3BlYCBcdTIwMTQgYGZuYCByZXR1cm5lZCBgdW5kZWZpbmVkYC5cbiAqIC0gYEV2YWxWYWx1ZUVudmVsb3BlYCBcdTIwMTQgYGZuYCByZXR1cm5lZCBhIEpTT04tc2VyaWFsaXphYmxlIHZhbHVlLlxuICovXG50eXBlIEV2YWxSZXN1bHRFbnZlbG9wZSA9XG4gIHwgRXZhbEVycm9yRW52ZWxvcGVcbiAgfCBFdmFsVW5kZWZpbmVkRW52ZWxvcGVcbiAgfCBFdmFsVmFsdWVFbnZlbG9wZTtcblxuaW50ZXJmYWNlIEV2YWxVbmRlZmluZWRFbnZlbG9wZSB7XG4gIHR5cGU6ICd1bmRlZmluZWQnO1xufVxuXG5pbnRlcmZhY2UgRXZhbFZhbHVlRW52ZWxvcGUge1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuY29uc3QgTk9fT1VUUFVUID0gJyhubyBvdXRwdXQpJztcblxuLyoqXG4gKiBDb21tb24gYXJndW1lbnRzIGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgdG8gZXZlcnkge0BsaW5rIGV2YWxJbk9ic2lkaWFufSBjYWxsYmFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tb25BcmdzIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB7QGxpbmsgQXBwfSBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgYG9ic2lkaWFuYCBtb2R1bGUsIHJlc29sdmVkIGF0IHJ1bnRpbWUgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICAgKi9cbiAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcblxuICAvKipcbiAgICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciB7QGxpbmsgRWRpdG9yfSB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvblxuICAgKiBrZXlib2FyZCBpbnB1dC5cbiAgICpcbiAgICogQSB0cnVzdGVkIGV2ZW50IChpbmplY3RlZCB2aWEgRWxlY3Ryb24ncyBgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnRgKVxuICAgKiBiZWhhdmVzIGxpa2UgYSByZWFsIGtleXByZXNzOiBpdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggQ29kZU1pcnJvcidzIHJlYWwgaW5wdXQgcGlwZWxpbmUsIHNvIHRoZSB0eXBlZFxuICAgKiB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yIGdlbnVpbmVseSBob2xkcyBmb2N1cyoqLlxuICAgKiBUaGlzIG1ha2VzIFwidGhlIHVzZXIgdHlwZWQgaW50byB0aGUgZWRpdG9yXCIgYSBmYWl0aGZ1bCBlbmQtdG8tZW5kIGNoZWNrLFxuICAgKiB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgICh1bnRydXN0ZWQgXHUyMDE0IGlnbm9yZWQgYnlcbiAgICogQ29kZU1pcnJvcikgb3IgYGV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JylgIChtdXRhdGVzIHRoZSBzZWxlY3Rpb24gZXZlblxuICAgKiB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQsIG1hc2tpbmcgZm9jdXMgYnVncyBhcyBmYWxzZSBwb3NpdGl2ZXMpLlxuICAgKlxuICAgKiBBZnRlciBpbmplY3RpbmcgdGhlIGtleXN0cm9rZXMgaXQgcG9sbHMgdW50aWwgdGhlIGRvY3VtZW50IHJlZmxlY3RzIHRoZVxuICAgKiBpbnB1dCwgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcyAodGhlIGV4cGVjdGVkIG91dGNvbWUgd2hlbiB0aGUgZWRpdG9yXG4gICAqIGlzIHJlYWQtb25seSBhbmQgcmVqZWN0cyB0aGUgaW5wdXQsIG9yIHdoZW4gZm9jdXMgd2FzIHN0b2xlbikuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXlzdHJva2VzIGhhdmUgc2V0dGxlZC5cbiAgICovXG4gIHR5cGVJbnRvRWRpdG9yKHRoaXM6IHZvaWQsIHBhcmFtczogVHlwZUludG9FZGl0b3JQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBBcmdzO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gdGhlIE9ic2lkaWFuIGNvbnRleHQuXG4gICAqL1xuICBmbihhcmdzOiBBcmdzICYgQ29tbW9uQXJncyAmIENvbnRleHRBcmdzPFRDb250ZXh0SWQ+KTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIgKHNldCBieSB0aGUgZnJhbWV3b3JrIGFkYXB0ZXIncyBnbG9iYWwgc2V0dXApLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiB2YXVsdC4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcGxhaW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJncy50eXBlSW50b0VkaXRvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUludG9FZGl0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVkaXRvciB0byB0eXBlIGludG8uIEl0IGlzIGZvY3VzZWQgKHdpdGggdGhlIGNhcmV0IG1vdmVkIHRvIHRoZSBlbmQgb2ZcbiAgICogdGhlIGRvY3VtZW50KSBiZWZvcmUgdGhlIGtleXN0cm9rZXMgYXJlIGluamVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIHR5cGUsIG9uZSB0cnVzdGVkIGNoYXJhY3RlciBldmVudCBwZXIgY29kZSBwb2ludC5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gYXJncyBvYmplY3QgdGhhdCBpbmNsdWRlcyBgYXBwYCwgYG9ic2lkaWFuTW9kdWxlYCxcbiAqIGBjb250ZXh0YCwgYW5kIGFueSBhZGRpdGlvbmFsIGBhcmdzYCBwYXNzZWQgYnkgdGhlIGNhbGxlci5cbiAqIEl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW52b2tlZCBhcyBhbiBJSUZFLlxuICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgc2VsZi1jb250YWluZWQgXHUyMDE0IGNsb3N1cmVzIG92ZXIgbG9jYWwgdmFyaWFibGVzIHdpbGwgbm90IHdvcmsuXG4gKiBQYXNzIGFueSBuZWVkZWQgdmFsdWVzIGFzIGBhcmdzYCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcGFyYW1zOiBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+XG4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIGBmbmAgY2FuIGJlIHVuYm91bmQuXG4gIGNvbnN0IHsgYXJncyA9IHt9LCBjb250ZXh0SWQsIGZuLCBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzID0gZmFsc2UsIHRyYW5zcG9ydDogdHJhbnNwb3J0T3ZlcnJpZGUsIHZhdWx0UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjd2QgPSB2YXVsdFBhdGggPz8gZ2V0VmF1bHRQYXRoKCkgPz8gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBDaGVjazogVmF1bHQgcGF0aCBleGlzdHMgb24gZGlzay5cbiAgaWYgKHZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmICFleGlzdHNTeW5jKHZhdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dmF1bHRQYXRofWApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcblxuICBpZiAoIXNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MpIHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHJlZmxpZ2h0Q2hlY2soY3dkKTtcbiAgfVxuXG4gIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0cmFuc3BvcnQsIGN3ZCk7XG5cbiAgY29uc3QgbmFtZXNwYWNlQ2FsbFBhcmFtczogR2VuZXJhdGVOYW1lc3BhY2VDYWxsUGFyYW1zID0ge1xuICAgIGFyZ3MsXG4gICAgZm4sXG4gICAgLi4uKGNvbnRleHRJZCAhPT0gdW5kZWZpbmVkICYmIHsgY29udGV4dElkOiBTdHJpbmcoY29udGV4dElkKSB9KVxuICB9O1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwobmFtZXNwYWNlQ2FsbFBhcmFtcyk7XG5cbiAgY29uc3QgcmVzdWx0U3RyID0gYXdhaXQgdHJhbnNwb3J0LmV2YWx1YXRlKGV4cHJlc3Npb24sIHsgY3dkIH0pO1xuXG4gIGlmIChyZXN1bHRTdHIgPT09ICcnIHx8IHJlc3VsdFN0ciA9PT0gTk9fT1VUUFVUKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBSZXN1bHQ7XG4gIH1cblxuICBsZXQgZW52ZWxvcGU6IEV2YWxSZXN1bHRFbnZlbG9wZTtcbiAgdHJ5IHtcbiAgICBlbnZlbG9wZSA9IEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBFdmFsUmVzdWx0RW52ZWxvcGU7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IE9ic2lkaWFuIHJldHVybmVkIG5vbi1KU09OIG91dHB1dDogJHtyZXN1bHRTdHJ9YCk7XG4gIH1cblxuICBpZiAoJ3R5cGUnIGluIGVudmVsb3BlKSB7XG4gICAgaWYgKGVudmVsb3BlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIFJld3JpdGUgYmFyZS1vcmlnaW4gbG9jYWxob3N0IHN0YWNrIGZyYW1lcyBsaWtlIFwiKGh0dHA6Ly9sb2NhbGhvc3QvOjkxNTozMilcIlxuICAgICAgLy8gU28gVml0ZXN0J3Mgc291cmNlLW1hcCByZXNvbHZlciB3b24ndCBleHRyYWN0IFwiL1wiIGFzIHRoZSBmaWxlIHBhdGggYW5kIGNyYXNoXG4gICAgICAvLyBXaXRoIEVJU0RJUiB3aGVuIGl0IHRyaWVzIHRvIHJlYWRGaWxlU3luYyBvbiB0aGUgcm9vdCBkaXJlY3RvcnkuXG4gICAgICBjb25zdCBzYW5pdGl6ZWREZXRhaWwgPSBlbnZlbG9wZS52YWx1ZVxuICAgICAgICAucmVwbGFjZSgvXFwoaHR0cHM/OlxcL1xcL2xvY2FsaG9zdFxcLzooPzxsaW5lPlxcZCkvZywgJyhvYnNpZGlhbi13ZWJ2aWV3OiQ8bGluZT4nKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IEVycm9yIGluc2lkZSBPYnNpZGlhbjpcXG4ke3Nhbml0aXplZERldGFpbH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBlbnZlbG9wZS52YWx1ZSBhcyBSZXN1bHQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFjQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLGFBQWE7QUFTcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLDRCQUE0QjtBQTJCckMsTUFBTSxZQUFZO0FBdUhsQixlQUFzQixlQUNwQixRQUNpQjtBQUVqQixRQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxJQUFJLDRCQUE0QixPQUFPLFdBQVcsbUJBQW1CLFVBQVUsSUFBSTtBQUNqSCxRQUFNLE1BQU0sYUFBYSxhQUFhLEtBQUssUUFBUSxJQUFJO0FBR3ZELE1BQUksY0FBYyxVQUFhLENBQUMsV0FBVyxTQUFTLEdBQUc7QUFDckQsVUFBTSxJQUFJLE1BQU0sOEJBQThCLFNBQVMsRUFBRTtBQUFBLEVBQzNEO0FBRUEsUUFBTSxZQUFZLHFCQUFxQixNQUFNLHFCQUFxQixvQkFBb0IsQ0FBQztBQUV2RixNQUFJLENBQUMsMkJBQTJCO0FBQzlCLFVBQU0sVUFBVSxlQUFlLEdBQUc7QUFBQSxFQUNwQztBQUVBLFFBQU0sNEJBQTRCLFdBQVcsR0FBRztBQUVoRCxRQUFNLHNCQUFtRDtBQUFBLElBQ3ZEO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBSSxjQUFjLFVBQWEsRUFBRSxXQUFXLE9BQU8sU0FBUyxFQUFFO0FBQUEsRUFDaEU7QUFFQSxRQUFNLGFBQWEsc0JBQXNCLG1CQUFtQjtBQUU1RCxRQUFNLFlBQVksTUFBTSxVQUFVLFNBQVMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUU5RCxNQUFJLGNBQWMsTUFBTSxjQUFjLFdBQVc7QUFDL0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNGLGVBQVcsS0FBSyxNQUFNLFNBQVM7QUFBQSxFQUNqQyxRQUFRO0FBQ04sVUFBTSxJQUFJLE1BQU0sc0RBQXNELFNBQVMsRUFBRTtBQUFBLEVBQ25GO0FBRUEsTUFBSSxVQUFVLFVBQVU7QUFDdEIsUUFBSSxTQUFTLFNBQVMsU0FBUztBQUk3QixZQUFNLGtCQUFrQixTQUFTLE1BQzlCLFFBQVEseUNBQXlDLDJCQUEyQjtBQUMvRSxZQUFNLElBQUksTUFBTTtBQUFBLEVBQTJDLGVBQWUsRUFBRTtBQUFBLElBQzlFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFNBQVM7QUFDbEI7IiwKICAibmFtZXMiOiBbXQp9Cg==
51
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvclxufSBmcm9tICdvYnNpZGlhbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZXNwYWNlIC0tIFdlIG5lZWQgdG8gcmVmZXJlbmNlIGBvYnNpZGlhbmAgbW9kdWxlLlxuaW1wb3J0IHR5cGUgKiBhcyBvYnNpZGlhbiBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRlTmFtZXNwYWNlQ2FsbFBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5tanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0Lm1qcyc7XG5cbmltcG9ydCB7XG4gIGdldFRyYW5zcG9ydE9wdGlvbnMsXG4gIGdldFZhdWx0UGF0aFxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIubWpzJztcbmltcG9ydCB7IGdlbmVyYXRlTmFtZXNwYWNlQ2FsbCB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5tanMnO1xuaW1wb3J0IHsgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkIH0gZnJvbSAnLi9uYW1lc3BhY2UtYm9vdHN0cmFwLm1qcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcblxuaW50ZXJmYWNlIEV2YWxFcnJvckVudmVsb3BlIHtcbiAgdHlwZTogJ2Vycm9yJztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIGVudmVsb3BlIHJldHVybmVkIGJ5IHRoZSByZWdpc3RlcmVkIGBldmFsV3JhcHBlcmAgZnJvbSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKlxuICogLSBgRXZhbEVycm9yRW52ZWxvcGVgIFx1MjAxNCBgZm5gIHRocmV3OyBgdmFsdWVgIGlzIHRoZSBzZXJpYWxpemVkIGVycm9yLlxuICogLSBgRXZhbFVuZGVmaW5lZEVudmVsb3BlYCBcdTIwMTQgYGZuYCByZXR1cm5lZCBgdW5kZWZpbmVkYC5cbiAqIC0gYEV2YWxWYWx1ZUVudmVsb3BlYCBcdTIwMTQgYGZuYCByZXR1cm5lZCBhIEpTT04tc2VyaWFsaXphYmxlIHZhbHVlLlxuICovXG50eXBlIEV2YWxSZXN1bHRFbnZlbG9wZSA9XG4gIHwgRXZhbEVycm9yRW52ZWxvcGVcbiAgfCBFdmFsVW5kZWZpbmVkRW52ZWxvcGVcbiAgfCBFdmFsVmFsdWVFbnZlbG9wZTtcblxuaW50ZXJmYWNlIEV2YWxVbmRlZmluZWRFbnZlbG9wZSB7XG4gIHR5cGU6ICd1bmRlZmluZWQnO1xufVxuXG5pbnRlcmZhY2UgRXZhbFZhbHVlRW52ZWxvcGUge1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuY29uc3QgTk9fT1VUUFVUID0gJyhubyBvdXRwdXQpJztcblxuLyoqXG4gKiBDb21tb24gYXJndW1lbnRzIGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgdG8gZXZlcnkge0BsaW5rIGV2YWxJbk9ic2lkaWFufSBjYWxsYmFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tb25BcmdzIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB7QGxpbmsgQXBwfSBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKipcbiAgICogRWxlY3Ryb24gcG9pbnRlciBpbnB1dCwgdGhlbiBwb2xscyB1bnRpbCB0aGUgZWxlbWVudCBhY3R1YWxseSBtYXRjaGVzXG4gICAqIGA6aG92ZXJgLlxuICAgKlxuICAgKiBCZWNhdXNlIHRoZSBtb3ZlIGlzIHRydXN0ZWQgKHNlZSB7QGxpbmsgQ29tbW9uQXJncy5tb3ZlTW91c2V9KSwgdGhlIHJlYWxcbiAgICogYDpob3ZlcmAgc3RhdGUgdGFrZXMgZWZmZWN0IGluIHRoZSBDU1MgZW5naW5lIFx1MjAxNCByZWFsIHRoZW1lIGB2YXIoKWAgdmFsdWVzXG4gICAqIGFuZCByZWFsIGNvbXBvc2l0aW5nIFx1MjAxNCBpbnN0ZWFkIG9mIGEgaGFuZC1zaW11bGF0ZWQgY2FzY2FkZS4gSXQgcG9sbHMgdGhlXG4gICAqIGxpdmUgYGVsZW1lbnQubWF0Y2hlcygnOmhvdmVyJylgIHN0YXRlIChub3QgYSBmaXhlZCBkZWxheSksIHNvIGl0IGlzIHJvYnVzdFxuICAgKiB1bmRlciBzaGFyZWQtaW5zdGFuY2UgbG9hZC4gSXQgdGFyZ2V0cyB0aGUgc2luZ2xlIHNoYXJlZCB3aW5kb3cnc1xuICAgKiAqKmdsb2JhbCoqIHBvaW50ZXIsIHNvIG9ubHkgb25lIGVsZW1lbnQgaXMgaG92ZXJlZCBhdCBhIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBob3Zlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG1hdGNoZXMgYDpob3ZlcmAuXG4gICAqL1xuICBob3ZlckVsZW1lbnQodGhpczogdm9pZCwgcGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgZ2l2ZW4gd2ViLWNvbnRlbnRzIGNvb3JkaW5hdGVzIHVzaW5nIGFcbiAgICogKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLlxuICAgKlxuICAgKiBBIHRydXN0ZWQgbW92ZSAoaW5qZWN0ZWQgdmlhIEVsZWN0cm9uJ3MgYHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50YClcbiAgICogdXBkYXRlcyB0aGUgcmVhbCBwb2ludGVyIHN0YXRlIGluIHRoZSBDU1MgZW5naW5lLCBzbyBgOmhvdmVyYCBydWxlc1xuICAgKiBnZW51aW5lbHkgYXBwbHkgXHUyMDE0IHVubGlrZSBgZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VvdmVyJykpYCxcbiAgICogd2hpY2ggaXMgdW50cnVzdGVkIGFuZCBuZXZlciBzZXRzIGA6aG92ZXJgLiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGEgdGltZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogaXQgcGVyZm9ybXMgYSBzaW5nbGUgbW92ZSBhbmQgZG9lcyAqKm5vdCoqXG4gICAqIHdhaXQgZm9yIGFueSBzdGF0ZSB0byBzZXR0bGUgKGNhbGxlcnMgcG9sbCB0aGVpciBvd24gcmVhZGluZXNzIHNpZ25hbCkuXG4gICAqIFByZWZlciB7QGxpbmsgQ29tbW9uQXJncy5ob3ZlckVsZW1lbnR9IC8ge0BsaW5rIENvbW1vbkFyZ3MudW5ob3ZlckVsZW1lbnR9XG4gICAqIGZvciBlbGVtZW50LXJlbGF0aXZlIG1vdmVzOyB1c2UgYG1vdmVNb3VzZWAgZGlyZWN0bHkgd2hlbiBhblxuICAgKiBlbGVtZW50LXJlbGF0aXZlIHRhcmdldCBkb2VzIG5vdCBmaXQgKGUuZy4gYW4gZWxlbWVudCBzcGFubmluZyB0aGUgZnVsbFxuICAgKiB2aWV3cG9ydCB3aWR0aCkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgd2ViLWNvbnRlbnRzIERJUCBjb29yZGluYXRlcyB0byBtb3ZlIHRvLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIG1vdmUgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gICAqL1xuICBtb3ZlTW91c2UodGhpczogdm9pZCwgcGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgYG9ic2lkaWFuYCBtb2R1bGUsIHJlc29sdmVkIGF0IHJ1bnRpbWUgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICAgKi9cbiAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcblxuICAvKipcbiAgICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciB7QGxpbmsgRWRpdG9yfSB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvblxuICAgKiBrZXlib2FyZCBpbnB1dC5cbiAgICpcbiAgICogQSB0cnVzdGVkIGV2ZW50IChpbmplY3RlZCB2aWEgRWxlY3Ryb24ncyBgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnRgKVxuICAgKiBiZWhhdmVzIGxpa2UgYSByZWFsIGtleXByZXNzOiBpdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggQ29kZU1pcnJvcidzIHJlYWwgaW5wdXQgcGlwZWxpbmUsIHNvIHRoZSB0eXBlZFxuICAgKiB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yIGdlbnVpbmVseSBob2xkcyBmb2N1cyoqLlxuICAgKiBUaGlzIG1ha2VzIFwidGhlIHVzZXIgdHlwZWQgaW50byB0aGUgZWRpdG9yXCIgYSBmYWl0aGZ1bCBlbmQtdG8tZW5kIGNoZWNrLFxuICAgKiB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgICh1bnRydXN0ZWQgXHUyMDE0IGlnbm9yZWQgYnlcbiAgICogQ29kZU1pcnJvcikgb3IgYGV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JylgIChtdXRhdGVzIHRoZSBzZWxlY3Rpb24gZXZlblxuICAgKiB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQsIG1hc2tpbmcgZm9jdXMgYnVncyBhcyBmYWxzZSBwb3NpdGl2ZXMpLlxuICAgKlxuICAgKiBBZnRlciBpbmplY3RpbmcgdGhlIGtleXN0cm9rZXMgaXQgcG9sbHMgdW50aWwgdGhlIGRvY3VtZW50IHJlZmxlY3RzIHRoZVxuICAgKiBpbnB1dCwgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcyAodGhlIGV4cGVjdGVkIG91dGNvbWUgd2hlbiB0aGUgZWRpdG9yXG4gICAqIGlzIHJlYWQtb25seSBhbmQgcmVqZWN0cyB0aGUgaW5wdXQsIG9yIHdoZW4gZm9jdXMgd2FzIHN0b2xlbikuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXlzdHJva2VzIGhhdmUgc2V0dGxlZC5cbiAgICovXG4gIHR5cGVJbnRvRWRpdG9yKHRoaXM6IHZvaWQsIHBhcmFtczogVHlwZUludG9FZGl0b3JQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSBhbiBlbGVtZW50J3MgYm91bmRpbmcgYm94XG4gICAqIHVzaW5nIGEgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLCB0aGVuIHBvbGxzIHVudGlsIHRoZSBlbGVtZW50IG5vXG4gICAqIGxvbmdlciBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKlxuICAgKiBUaGUgaW52ZXJzZSBvZiB7QGxpbmsgQ29tbW9uQXJncy5ob3ZlckVsZW1lbnR9LiBJdCB0YXJnZXRzIHRoZSBzaW5nbGVcbiAgICogc2hhcmVkIHdpbmRvdydzICoqZ2xvYmFsKiogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGFcbiAgICogdGltZS4gV2hlbiBhbiBlbGVtZW50IHNwYW5zIHRoZSBmdWxsIHZpZXdwb3J0IChubyBwb2ludCBvdXRzaWRlIGl0cyBib3ggaXNcbiAgICogcmVhY2hhYmxlKSwgdXNlIHtAbGluayBDb21tb25BcmdzLm1vdmVNb3VzZX0gZGlyZWN0bHkgdG8gbW92ZSB0aGUgcG9pbnRlclxuICAgKiB0byBhIGtub3duIGVtcHR5IGNvb3JkaW5hdGUgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIHBvaW50ZXIgYXdheSBmcm9tLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXNcbiAgICogICBgOmhvdmVyYC5cbiAgICovXG4gIHVuaG92ZXJFbGVtZW50KHRoaXM6IHZvaWQsIHBhcmFtczogVW5ob3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBQb2xscyBhIHByZWRpY2F0ZSB1bnRpbCBpdCBiZWNvbWVzIHRydXRoeSwgb3IgcmVqZWN0cyBvbmNlIGEgYm91bmRlZFxuICAgKiB0aW1lb3V0IGVsYXBzZXMuXG4gICAqXG4gICAqIEludGVncmF0aW9uLXRlc3QgYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFja3Mgcm91dGluZWx5IG5lZWQgdG8gd2FpdCBmb3IgYW5cbiAgICogYXN5bmNocm9ub3VzIGVmZmVjdCB0byBzZXR0bGUgKGEgdmlldyB0byBvcGVuLCBhIERPTSBub2RlIHRvIGFwcGVhciwgYVxuICAgKiBzZXR0aW5nIHRvIGFwcGx5KS4gQmVjYXVzZSB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZFxuICAgKiBjYW5ub3QgaW1wb3J0IG1vZHVsZXMsIGl0IGNhbid0IHJldXNlIGBvYnNpZGlhbi1kZXYtdXRpbHNgJ1xuICAgKiBgcmV0cnlXaXRoVGltZW91dGAgLyBgcnVuV2l0aFRpbWVvdXRgLiBUaGlzIGhlbHBlciBpcyB0aGUgc2hhcmVkLFxuICAgKiBpbmplY3RlZCByZXBsYWNlbWVudCBmb3IgdGhlIHBlci1jbG9zdXJlIHBvbGwgbG9vcHMgY29uc3VtZXJzIHdvdWxkXG4gICAqIG90aGVyd2lzZSBoYW5kLXJvbGwuXG4gICAqXG4gICAqIFRoZSBgcHJlZGljYXRlYCBtYXkgYmUgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIFx1MjAxNCBpdCBpcyBhd2FpdGVkIG9uIGV2ZXJ5XG4gICAqIHBvbGwuIEl0IGlzIGNoZWNrZWQgaW1tZWRpYXRlbHksIHRoZW4gcmUtY2hlY2tlZCBldmVyeVxuICAgKiBgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kc2AgdW50aWwgaXQgcmV0dXJucyB0cnV0aHkgb3IgYHRpbWVvdXRJbk1pbGxpc2Vjb25kc2BcbiAgICogZWxhcHNlcywgYXQgd2hpY2ggcG9pbnQgdGhlIHJldHVybmVkIHtAbGluayBQcm9taXNlfSByZWplY3RzICh0aGUgZXJyb3JcbiAgICogaW5jbHVkZXMgYG1lc3NhZ2VgIHdoZW4gcHJvdmlkZWQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHByZWRpY2F0ZSB0byBwb2xsIHBsdXMgb3B0aW9uYWwgdGltZW91dCwgaW50ZXJ2YWwsIGFuZFxuICAgKiAgIHRpbWVvdXQgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcmVkaWNhdGUgaXMgdHJ1dGh5LlxuICAgKi9cbiAgd2FpdFVudGlsKHRoaXM6IHZvaWQsIHBhcmFtczogV2FpdFVudGlsUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZXZhbEluT2JzaWRpYW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2YWxJbk9ic2lkaWFuUGFyYW1zPEFyZ3MgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+IHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLiBWYWx1ZXMgbWF5IGluY2x1ZGUgZnVuY3Rpb25zIFx1MjAxNFxuICAgKiB0aGV5IGFyZSBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAuXG4gICAqL1xuICByZWFkb25seSBhcmdzPzogQXJncztcblxuICAvKipcbiAgICogQSB7QGxpbmsgQ29udGV4dElkfSBsaW5raW5nIHRoaXMgY2FsbCB0byBhIHBlcnNpc3RlbnQgc3RvcmUgb24gYHdpbmRvd2BcbiAgICogaW4gdGhlIE9ic2lkaWFuIHByb2Nlc3MuIFRoZSBjYWxsYmFjayByZWNlaXZlcyBhIHR5cGVkIGBjb250ZXh0YCBvYmplY3RcbiAgICogdGhhdCBzdXJ2aXZlcyBhY3Jvc3MgY2FsbHMgc2hhcmluZyB0aGUgc2FtZSBJRC5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCBgY29udGV4dGAgaXMgYSBmcmVzaCBlbXB0eSBvYmplY3QgZWFjaCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dElkPzogVENvbnRleHRJZDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGluIHRoZSBPYnNpZGlhbiBjb250ZXh0LlxuICAgKi9cbiAgZm4oYXJnczogQXJncyAmIENvbW1vbkFyZ3MgJiBDb250ZXh0QXJnczxUQ29udGV4dElkPik6IFByb21pc2FibGU8UmVzdWx0PjtcblxuICAvKipcbiAgICogU2tpcHMgcHJlLWZsaWdodCBjaGVja3MgKHZhdWx0IHJlZ2lzdHJhdGlvbiwgQ0xJIGF2YWlsYWJpbGl0eSkuXG4gICAqIFVzZWQgaW50ZXJuYWxseSBieSB2YXVsdCByZWdpc3RyYXRpb24gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdHJhbnNwb3J0IGZvciB0aGlzIGNhbGwuIFdoZW4gb21pdHRlZCwgdXNlcyB0aGUgdHJhbnNwb3J0XG4gICAqIGNvbmZpZ3VyZWQgdmlhIHRoZSBjb250ZXh0IHByb3ZpZGVyIChzZXQgYnkgdGhlIGZyYW1ld29yayBhZGFwdGVyJ3MgZ2xvYmFsIHNldHVwKS5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zcG9ydD86IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gdmF1bHQuIERlZmF1bHRzIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3MuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlckVsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gaG92ZXIuIFRoZSBwb2ludGVyIGlzIG1vdmVkIHRvIGl0cyBjZW50ZXIuIFRoaXMgaXMgYSBsaXZlXG4gICAqIHJlbmRlcmVyIERPTSBub2RlIFx1MjAxNCB0aGUgY2FsbGJhY2sgcnVucyBpbi1yZW5kZXJlciwgc28gbm8gY3Jvc3MtcHJvY2Vzc1xuICAgKiBzZXJpYWxpemF0aW9uIGlzIG5lZWRlZCAoc2FtZSBhcyB7QGxpbmsgVHlwZUludG9FZGl0b3JQYXJhbXMuZWRpdG9yfSkuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJncy5tb3ZlTW91c2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25BcmdzLnR5cGVJbnRvRWRpdG9yfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlSW50b0VkaXRvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIHRvIHR5cGUgaW50by4gSXQgaXMgZm9jdXNlZCAod2l0aCB0aGUgY2FyZXQgbW92ZWQgdG8gdGhlIGVuZCBvZlxuICAgKiB0aGUgZG9jdW1lbnQpIGJlZm9yZSB0aGUga2V5c3Ryb2tlcyBhcmUgaW5qZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I6IEVkaXRvcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gdHlwZSwgb25lIHRydXN0ZWQgY2hhcmFjdGVyIGV2ZW50IHBlciBjb2RlIHBvaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25BcmdzLnVuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gYSBwb2ludFxuICAgKiBqdXN0IG91dHNpZGUgaXRzIGJvdW5kaW5nIGJveC4gVGhpcyBpcyBhIGxpdmUgcmVuZGVyZXIgRE9NIG5vZGUgXHUyMDE0IHRoZVxuICAgKiBjYWxsYmFjayBydW5zIGluLXJlbmRlcmVyLCBzbyBubyBjcm9zcy1wcm9jZXNzIHNlcmlhbGl6YXRpb24gaXMgbmVlZGVkXG4gICAqIChzYW1lIGFzIHtAbGluayBUeXBlSW50b0VkaXRvclBhcmFtcy5lZGl0b3J9KS5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25BcmdzLndhaXRVbnRpbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdFVudGlsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xsaW5nIGludGVydmFsIGJldHdlZW4gcHJlZGljYXRlIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwYFxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZGV0YWlsIGFwcGVuZGVkIHRvIHRoZSB0aW1lb3V0IGVycm9yIG1lc3NhZ2UsIGRlc2NyaWJpbmcgd2hhdFxuICAgKiB3YXMgYmVpbmcgd2FpdGVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25kaXRpb24gdG8gd2FpdCBmb3IuIFBvbGxlZCBpbW1lZGlhdGVseSwgdGhlbiBvbiBldmVyeSBpbnRlcnZhbCB1bnRpbFxuICAgKiBpdCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLiBNYXkgYmUgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIFx1MjAxNCBpdCBpc1xuICAgKiBhd2FpdGVkIG9uIGVhY2ggcG9sbC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgYXdhaXRlZCBjb25kaXRpb24gaGFzIGJlZW4gbWV0LlxuICAgKi9cbiAgcHJlZGljYXRlKHRoaXM6IHZvaWQpOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGltZSB0byB3YWl0IGJlZm9yZSByZWplY3RpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA1MDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0IGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBhbiBhcmdzIG9iamVjdCB0aGF0IGluY2x1ZGVzIGBhcHBgLCBgb2JzaWRpYW5Nb2R1bGVgLFxuICogYGNvbnRleHRgLCBhbmQgYW55IGFkZGl0aW9uYWwgYGFyZ3NgIHBhc3NlZCBieSB0aGUgY2FsbGVyLlxuICogSXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBpbnZva2VkIGFzIGFuIElJRkUuXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZWxmLWNvbnRhaW5lZCBcdTIwMTQgY2xvc3VyZXMgb3ZlciBsb2NhbCB2YXJpYWJsZXMgd2lsbCBub3Qgd29yay5cbiAqIFBhc3MgYW55IG5lZWRlZCB2YWx1ZXMgYXMgYGFyZ3NgIFx1MjAxNCB0aGV5IGFyZSBKU09OLXNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZCBvbiB0aGUgT2JzaWRpYW4gc2lkZS5cbiAqXG4gKiBUaGUgcmVzdWx0IGlzIGBKU09OLnN0cmluZ2lmeWAnZCBvbiB0aGUgT2JzaWRpYW4gc2lkZSBhbmQgcGFyc2VkIGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZuYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWxJbk9ic2lkaWFuPEFyZ3MgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBwYXJhbXM6IEV2YWxJbk9ic2lkaWFuUGFyYW1zPEFyZ3MsIFJlc3VsdCwgVENvbnRleHRJZD5cbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgLS0gYGZuYCBjYW4gYmUgdW5ib3VuZC5cbiAgY29uc3QgeyBhcmdzID0ge30sIGNvbnRleHRJZCwgZm4sIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MgPSBmYWxzZSwgdHJhbnNwb3J0OiB0cmFuc3BvcnRPdmVycmlkZSwgdmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGN3ZCA9IHZhdWx0UGF0aCA/PyBnZXRWYXVsdFBhdGgoKSA/PyBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIENoZWNrOiBWYXVsdCBwYXRoIGV4aXN0cyBvbiBkaXNrLlxuICBpZiAodmF1bHRQYXRoICE9PSB1bmRlZmluZWQgJiYgIWV4aXN0c1N5bmModmF1bHRQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgcGF0aCBkb2VzIG5vdCBleGlzdDogJHt2YXVsdFBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuXG4gIGlmICghc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcykge1xuICAgIGF3YWl0IHRyYW5zcG9ydC5wcmVmbGlnaHRDaGVjayhjd2QpO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRyYW5zcG9ydCwgY3dkKTtcblxuICBjb25zdCBuYW1lc3BhY2VDYWxsUGFyYW1zOiBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgPSB7XG4gICAgYXJncyxcbiAgICBmbixcbiAgICAuLi4oY29udGV4dElkICE9PSB1bmRlZmluZWQgJiYgeyBjb250ZXh0SWQ6IFN0cmluZyhjb250ZXh0SWQpIH0pXG4gIH07XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IGdlbmVyYXRlTmFtZXNwYWNlQ2FsbChuYW1lc3BhY2VDYWxsUGFyYW1zKTtcblxuICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gJycgfHwgcmVzdWx0U3RyID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBlbnZlbG9wZTogRXZhbFJlc3VsdEVudmVsb3BlO1xuICB0cnkge1xuICAgIGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpIGFzIEV2YWxSZXN1bHRFbnZlbG9wZTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogT2JzaWRpYW4gcmV0dXJuZWQgbm9uLUpTT04gb3V0cHV0OiAke3Jlc3VsdFN0cn1gKTtcbiAgfVxuXG4gIGlmICgndHlwZScgaW4gZW52ZWxvcGUpIHtcbiAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gUmV3cml0ZSBiYXJlLW9yaWdpbiBsb2NhbGhvc3Qgc3RhY2sgZnJhbWVzIGxpa2UgXCIoaHR0cDovL2xvY2FsaG9zdC86OTE1OjMyKVwiXG4gICAgICAvLyBTbyBWaXRlc3QncyBzb3VyY2UtbWFwIHJlc29sdmVyIHdvbid0IGV4dHJhY3QgXCIvXCIgYXMgdGhlIGZpbGUgcGF0aCBhbmQgY3Jhc2hcbiAgICAgIC8vIFdpdGggRUlTRElSIHdoZW4gaXQgdHJpZXMgdG8gcmVhZEZpbGVTeW5jIG9uIHRoZSByb290IGRpcmVjdG9yeS5cbiAgICAgIGNvbnN0IHNhbml0aXplZERldGFpbCA9IGVudmVsb3BlLnZhbHVlXG4gICAgICAgIC5yZXBsYWNlKC9cXChodHRwcz86XFwvXFwvbG9jYWxob3N0XFwvOig/PGxpbmU+XFxkKS9nLCAnKG9ic2lkaWFuLXdlYnZpZXc6JDxsaW5lPicpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogRXJyb3IgaW5zaWRlIE9ic2lkaWFuOlxcbiR7c2FuaXRpemVkRGV0YWlsfWApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQgYXMgUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGVudmVsb3BlLnZhbHVlIGFzIFJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQWNBLFNBQVMsa0JBQWtCO0FBQzNCLE9BQU8sYUFBYTtBQVNwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsNEJBQTRCO0FBMkJyQyxNQUFNLFlBQVk7QUFpUmxCLGVBQXNCLGVBQ3BCLFFBQ2lCO0FBRWpCLFFBQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxXQUFXLElBQUksNEJBQTRCLE9BQU8sV0FBVyxtQkFBbUIsVUFBVSxJQUFJO0FBQ2pILFFBQU0sTUFBTSxhQUFhLGFBQWEsS0FBSyxRQUFRLElBQUk7QUFHdkQsTUFBSSxjQUFjLFVBQWEsQ0FBQyxXQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLE1BQU0scUJBQXFCLG9CQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFDOUIsVUFBTSxVQUFVLGVBQWUsR0FBRztBQUFBLEVBQ3BDO0FBRUEsUUFBTSw0QkFBNEIsV0FBVyxHQUFHO0FBRWhELFFBQU0sc0JBQW1EO0FBQUEsSUFDdkQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFJLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxTQUFTLEVBQUU7QUFBQSxFQUNoRTtBQUVBLFFBQU0sYUFBYSxzQkFBc0IsbUJBQW1CO0FBRTVELFFBQU0sWUFBWSxNQUFNLFVBQVUsU0FBUyxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBRTlELE1BQUksY0FBYyxNQUFNLGNBQWMsV0FBVztBQUMvQyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUk7QUFDSixNQUFJO0FBQ0YsZUFBVyxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQ2pDLFFBQVE7QUFDTixVQUFNLElBQUksTUFBTSxzREFBc0QsU0FBUyxFQUFFO0FBQUEsRUFDbkY7QUFFQSxNQUFJLFVBQVUsVUFBVTtBQUN0QixRQUFJLFNBQVMsU0FBUyxTQUFTO0FBSTdCLFlBQU0sa0JBQWtCLFNBQVMsTUFDOUIsUUFBUSx5Q0FBeUMsMkJBQTJCO0FBQy9FLFlBQU0sSUFBSSxNQUFNO0FBQUEsRUFBMkMsZUFBZSxFQUFFO0FBQUEsSUFDOUU7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sU0FBUztBQUNsQjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -8,7 +8,7 @@ export { connectToCdp } from './connect-to-cdp.mjs';
8
8
  export { ContextId } from './context-id.mjs';
9
9
  export type { TransportOptionsResolver, VaultPathResolver } from './context-provider.mjs';
10
10
  export { setTransportOptionsResolver, setVaultPathResolver } from './context-provider.mjs';
11
- export type { EvalInObsidianParams, TypeIntoEditorParams } from './eval-in-obsidian.mjs';
11
+ export type { EvalInObsidianParams, HoverElementParams, MoveMouseParams, TypeIntoEditorParams, UnhoverElementParams, WaitUntilParams } from './eval-in-obsidian.mjs';
12
12
  export { evalInObsidian } from './eval-in-obsidian.mjs';
13
13
  export type { PopulateFileContent, PopulateFilesParams } from './temp-vault.mjs';
14
14
  export { TempVault } from './temp-vault.mjs';
@@ -26,4 +26,4 @@ export {
26
26
  setVaultPathResolver,
27
27
  unregisterVault
28
28
  };
29
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBDZHBDb25uZWN0aW9uLFxuICBDb25uZWN0VG9DZHBPcHRpb25zXG59IGZyb20gJy4vY29ubmVjdC10by1jZHAubWpzJztcbmV4cG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAubWpzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIsXG4gIFZhdWx0UGF0aFJlc29sdmVyXG59IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5tanMnO1xuZXhwb3J0IHtcbiAgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBzZXRWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUG9wdWxhdGVGaWxlQ29udGVudCxcbiAgUG9wdWxhdGVGaWxlc1BhcmFtc1xufSBmcm9tICcuL3RlbXAtdmF1bHQubWpzJztcbmV4cG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBpdW1TZXNzaW9uSW5mbyxcbiAgQXBwaXVtVHJhbnNwb3J0Q29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuZXhwb3J0IHsgQXBwaXVtVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIERlc2t0b3BDZHBUcmFuc3BvcnRDb25maWcsXG4gIE93bmVkSW5zdGFuY2VBc2FyLFxuICBPd25lZEluc3RhbmNlQ29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAubWpzJztcbmV4cG9ydCB7IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcbiJdLAogICJtYXBwaW5ncyI6ICJBQVVBLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsaUJBQWlCO0FBSzFCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyxzQkFBc0I7QUFLL0IsU0FBUyxpQkFBaUI7QUFLMUIsU0FBUyx1QkFBdUI7QUFNaEMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxrQ0FBa0M7QUFVM0M7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7IiwKICAibmFtZXMiOiBbXQp9Cg==
29
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBDZHBDb25uZWN0aW9uLFxuICBDb25uZWN0VG9DZHBPcHRpb25zXG59IGZyb20gJy4vY29ubmVjdC10by1jZHAubWpzJztcbmV4cG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAubWpzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIsXG4gIFZhdWx0UGF0aFJlc29sdmVyXG59IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5tanMnO1xuZXhwb3J0IHtcbiAgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBzZXRWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBUeXBlSW50b0VkaXRvclBhcmFtcyxcbiAgVW5ob3ZlckVsZW1lbnRQYXJhbXMsXG4gIFdhaXRVbnRpbFBhcmFtc1xufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXNcbn0gZnJvbSAnLi90ZW1wLXZhdWx0Lm1qcyc7XG5leHBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXBwaXVtU2Vzc2lvbkluZm8sXG4gIEFwcGl1bVRyYW5zcG9ydENvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnLFxuICBPd25lZEluc3RhbmNlQXNhcixcbiAgT3duZWRJbnN0YW5jZUNvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFVQSxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLGlCQUFpQjtBQUsxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQVNQLFNBQVMsc0JBQXNCO0FBSy9CLFNBQVMsaUJBQWlCO0FBSzFCLFNBQVMsdUJBQXVCO0FBTWhDLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsa0NBQWtDO0FBVTNDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = false ? "dev" : "5.1.2";
1
+ const LIBRARY_VERSION = false ? "dev" : "5.3.0";
2
2
  export {
3
3
  LIBRARY_VERSION
4
4
  };
@@ -18,6 +18,10 @@ async function ensureNamespaceBootstrapped(transport, cwd, timeoutInMilliseconds
18
18
  }
19
19
  function bootstrapNamespace(bootstrapParams) {
20
20
  const DESTROY_DELAY_IN_MILLISECONDS = 50;
21
+ const INPUT_POLL_INTERVAL_IN_MILLISECONDS = 50;
22
+ const INPUT_TIMEOUT_IN_MILLISECONDS = 5e3;
23
+ const WAIT_UNTIL_POLL_INTERVAL_IN_MILLISECONDS = 50;
24
+ const WAIT_UNTIL_TIMEOUT_IN_MILLISECONDS = 5e3;
21
25
  const holder = window;
22
26
  const existingContexts = holder.__obsidianIntegrationTesting?.contexts ?? {};
23
27
  const existingObsidianModule = holder.__obsidianIntegrationTesting?.obsidianModule;
@@ -45,7 +49,7 @@ function bootstrapNamespace(bootstrapParams) {
45
49
  }
46
50
  const obsidianModule = await this.getObsidianModule();
47
51
  const context = params.contextId ? this.contexts[params.contextId] ??= {} : {};
48
- const fullArgs = { ...params.args, app: this.app, context, obsidianModule, typeIntoEditor };
52
+ const fullArgs = { ...params.args, app: this.app, context, hoverElement, moveMouse, obsidianModule, typeIntoEditor, unhoverElement, waitUntil };
49
53
  try {
50
54
  const result = await params.fn(fullArgs);
51
55
  if (result === void 0) {
@@ -118,8 +122,6 @@ ${this.serializeError(error.cause, depth + 1)}`;
118
122
  window.__obsidianIntegrationTesting = ns;
119
123
  async function typeIntoEditor(typeParams) {
120
124
  const FOCUS_SETTLE_DELAY_IN_MILLISECONDS = 300;
121
- const INPUT_POLL_INTERVAL_IN_MILLISECONDS = 50;
122
- const INPUT_TIMEOUT_IN_MILLISECONDS = 5e3;
123
125
  const { editor, text } = typeParams;
124
126
  const valueBeforeTyping = editor.getValue();
125
127
  editor.focus();
@@ -135,8 +137,55 @@ ${this.serializeError(error.cause, depth + 1)}`;
135
137
  await sleep(INPUT_POLL_INTERVAL_IN_MILLISECONDS);
136
138
  }
137
139
  }
140
+ async function hoverElement(hoverParams) {
141
+ const CENTER_DIVISOR = 2;
142
+ const { element } = hoverParams;
143
+ const rect = element.getBoundingClientRect();
144
+ moveMouseTo(Math.round(rect.left + rect.width / CENTER_DIVISOR), Math.round(rect.top + rect.height / CENTER_DIVISOR));
145
+ const startTime = Date.now();
146
+ while (!element.matches(":hover") && Date.now() - startTime < INPUT_TIMEOUT_IN_MILLISECONDS) {
147
+ await sleep(INPUT_POLL_INTERVAL_IN_MILLISECONDS);
148
+ }
149
+ }
150
+ function moveMouse(moveParams) {
151
+ moveMouseTo(Math.round(moveParams.x), Math.round(moveParams.y));
152
+ return Promise.resolve();
153
+ }
154
+ function moveMouseTo(x, y) {
155
+ const webContents = window.electron.remote.getCurrentWebContents();
156
+ webContents.sendInputEvent({ type: "mouseMove", x, y });
157
+ }
158
+ async function unhoverElement(unhoverParams) {
159
+ const CENTER_DIVISOR = 2;
160
+ const OUTSIDE_OFFSET_IN_PIXELS = 1;
161
+ const { element } = unhoverParams;
162
+ const rect = element.getBoundingClientRect();
163
+ const x = rect.left >= OUTSIDE_OFFSET_IN_PIXELS ? rect.left - OUTSIDE_OFFSET_IN_PIXELS : rect.right + OUTSIDE_OFFSET_IN_PIXELS;
164
+ const y = rect.top + rect.height / CENTER_DIVISOR;
165
+ moveMouseTo(Math.round(x), Math.round(y));
166
+ const startTime = Date.now();
167
+ while (element.matches(":hover") && Date.now() - startTime < INPUT_TIMEOUT_IN_MILLISECONDS) {
168
+ await sleep(INPUT_POLL_INTERVAL_IN_MILLISECONDS);
169
+ }
170
+ }
171
+ async function waitUntil(waitParams) {
172
+ const {
173
+ intervalInMilliseconds = WAIT_UNTIL_POLL_INTERVAL_IN_MILLISECONDS,
174
+ message,
175
+ predicate,
176
+ timeoutInMilliseconds = WAIT_UNTIL_TIMEOUT_IN_MILLISECONDS
177
+ } = waitParams;
178
+ const startTime = Date.now();
179
+ while (!await predicate()) {
180
+ if (Date.now() - startTime >= timeoutInMilliseconds) {
181
+ const suffix = message === void 0 ? "" : `: ${message}`;
182
+ throw new Error(`waitUntil timed out after ${String(timeoutInMilliseconds)} milliseconds${suffix}`);
183
+ }
184
+ await sleep(intervalInMilliseconds);
185
+ }
186
+ }
138
187
  }
139
188
  export {
140
189
  ensureNamespaceBootstrapped
141
190
  };
142
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbWVzcGFjZS1ib290c3RyYXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCb290c3RyYXBzIHRoZSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIG5hbWVzcGFjZSBpbiB0aGVcbiAqIE9ic2lkaWFuIHByb2Nlc3MuIEV4dHJhY3RlZCB0byBpdHMgb3duIG1vZHVsZSB0byBhdm9pZCBkZXBlbmRlbmN5IGN5Y2xlc1xuICogYmV0d2VlbiBgZXZhbC1pbi1vYnNpZGlhbi50c2AgYW5kIHRoZSB0cmFuc3BvcnQgbW9kdWxlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRWRpdG9yXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5tanMnO1xuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVGdW5jdGlvbkNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwubWpzJztcbmltcG9ydCB7IExJQlJBUllfVkVSU0lPTiB9IGZyb20gJy4vbGlicmFyeS5tanMnO1xuXG5pbnRlcmZhY2UgQm9vdHN0cmFwTmFtZXNwYWNlUGFyYW1zIHtcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhlIGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AgbmFtZXNwYWNlIGlzIGJvb3RzdHJhcHBlZFxuICogaW4gdGhlIE9ic2lkaWFuIHByb2Nlc3Mgd2l0aCB0aGUgY3VycmVudCBsaWJyYXJ5IHZlcnNpb24uXG4gKlxuICogUGVyZm9ybXMgYSBsaWdodHdlaWdodCB2ZXJzaW9uIGNoZWNrIHZpYSB0aGUgdHJhbnNwb3J0LiBJZiB0aGUgbmFtZXNwYWNlXG4gKiBkb2Vzbid0IGV4aXN0IG9yIGhhcyBhIGRpZmZlcmVudCB2ZXJzaW9uLCBzZW5kcyB0aGUgZnVsbCBib290c3RyYXAgZXhwcmVzc2lvblxuICogdG8gcmVnaXN0ZXIgYWxsIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9ydCAtIFRoZSB0cmFuc3BvcnQgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeSAodmF1bHQgcGF0aCkuXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gT3B0aW9uYWwgcGVyLWV2YWwgdGltZW91dC4gRm9yd2FyZGVkIHRvIGJvdGhcbiAqICAgdGhlIHZlcnNpb24gY2hlY2sgYW5kIHRoZSBib290c3RyYXAgZXZhbCBzbyBhIGh1bmcgYG9ic2lkaWFuIGV2YWxgIHJlamVjdHNcbiAqICAgaW5zdGVhZCBvZiBibG9ja2luZyB0aGUgY2FsbGVyIGluZGVmaW5pdGVseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0cmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0LCBjd2Q6IHN0cmluZywgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGV2YWxPcHRpb25zOiBUcmFuc3BvcnRFdmFsT3B0aW9ucyA9IHtcbiAgICBjd2QsXG4gICAgLi4uKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gIH07XG4gIGNvbnN0IHZlcnNpb25Kc29uID0gSlNPTi5zdHJpbmdpZnkoTElCUkFSWV9WRVJTSU9OKTtcbiAgY29uc3QgY2hlY2tSZXN1bHQgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoXG4gICAgYEpTT04uc3RyaW5naWZ5KHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy52ZXJzaW9uID09PSAke3ZlcnNpb25Kc29ufSlgLFxuICAgIGV2YWxPcHRpb25zXG4gICk7XG5cbiAgaWYgKGNoZWNrUmVzdWx0ID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBib290c3RyYXBFeHByID0gZ2VuZXJhdGVGdW5jdGlvbkNhbGwoYm9vdHN0cmFwTmFtZXNwYWNlLCB7IHZlcnNpb246IExJQlJBUllfVkVSU0lPTiB9KTtcbiAgYXdhaXQgdHJhbnNwb3J0LmV2YWx1YXRlKGJvb3RzdHJhcEV4cHIsIGV2YWxPcHRpb25zKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgdmlhIHRvU3RyaW5nKCkgYW5kIGV4ZWN1dGVkIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcywgbm90IGluIE5vZGUuIENvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMuICovXG5cbi8qKlxuICogQm9vdHN0cmFwcyB0aGUgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBuYW1lc3BhY2Ugd2l0aCBhbGxcbiAqIGhlbHBlciBmdW5jdGlvbnMuIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgc2VudCB0byBPYnNpZGlhbiBvbmNlXG4gKiBwZXIgbGlicmFyeSB2ZXJzaW9uLlxuICpcbiAqIFByZXNlcnZlcyBgY29udGV4dHNgIGFjcm9zcyB2ZXJzaW9uIHVwZ3JhZGVzIHNvIGxpdmUge0BsaW5rIENvbnRleHRJZH1cbiAqIHJlZmVyZW5jZXMgc3Vydml2ZS5cbiAqXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlIFx1MjAxNCBpdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAuXG4gKlxuICogQHBhcmFtIGJvb3RzdHJhcFBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGluY2x1ZGluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBib290c3RyYXBOYW1lc3BhY2UoYm9vdHN0cmFwUGFyYW1zOiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFBhcmFtczxCb290c3RyYXBOYW1lc3BhY2VQYXJhbXM+KTogdm9pZCB7XG4gIGludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICAgIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZVN0YXRlO1xuICB9XG5cbiAgaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZVN0YXRlIHtcbiAgICBjb250ZXh0czogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIG9ic2lkaWFuTW9kdWxlPzogdW5rbm93bjtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gIH1cblxuICBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlIGV4dGVuZHMgSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlU3RhdGUge1xuICAgIHJlYWRvbmx5IGFwcDogQXBwO1xuICAgIGRlc3Ryb3lDdXJyZW50V2luZG93KCk6IFByb21pc2U8dm9pZD47XG4gICAgZW5zdXJlTGF5b3V0UmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBldmFsV3JhcHBlcihuc1BhcmFtczogRXZhbFdyYXBwZXJQYXJhbXMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx1bmtub3duPjtcbiAgICBpcGNTZW5kU3luYyhuc1BhcmFtczogSXBjU2VuZFN5bmNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHBvbGxWYXVsdEJhc2VQYXRoKCk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93biwgZGVwdGg/OiBudW1iZXIpOiBzdHJpbmc7XG4gICAgc2V0TG9jYWxTdG9yYWdlSXRlbShuc1BhcmFtczogU2V0TG9jYWxTdG9yYWdlSXRlbVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIH1cblxuICBpbnRlcmZhY2UgRXZhbFdyYXBwZXJQYXJhbXMge1xuICAgIHJlYWRvbmx5IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlYWRvbmx5IGNvbnRleHRJZD86IHN0cmluZztcbiAgICBmbihmbkFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdW5rbm93bjtcbiAgfVxuXG4gIGludGVyZmFjZSBGaWxlU3lzdGVtQWRhcHRlckxpa2Uge1xuICAgIGdldEJhc2VQYXRoKCk6IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBJcGNTZW5kU3luY1BhcmFtcyB7XG4gICAgcmVhZG9ubHkgYXJnczogdW5rbm93bltdO1xuICAgIHJlYWRvbmx5IGNoYW5uZWw6IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBTZXRMb2NhbFN0b3JhZ2VJdGVtUGFyYW1zIHtcbiAgICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuICB9XG5cbiAgaW50ZXJmYWNlIFR5cGVJbnRvRWRpdG9yTnNQYXJhbXMge1xuICAgIHJlYWRvbmx5IGVkaXRvcjogRWRpdG9yO1xuICAgIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBFbGVjdHJvbldlYkNvbnRlbnRzV2l0aFNlbmRJbnB1dEV2ZW50IHtcbiAgICBzZW5kSW5wdXRFdmVudChpbnB1dEV2ZW50OiBTZW5kSW5wdXRFdmVudEtleWJvYXJkSW5wdXQpOiB2b2lkO1xuICB9XG5cbiAgaW50ZXJmYWNlIFNlbmRJbnB1dEV2ZW50S2V5Ym9hcmRJbnB1dCB7XG4gICAga2V5Q29kZTogc3RyaW5nO1xuICAgIHR5cGU6ICdjaGFyJyB8ICdrZXlEb3duJyB8ICdrZXlVcCc7XG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgKGluIG1zKSBiZWZvcmUgaW52b2tpbmcgYGVsZWN0cm9uV2luZG93LmRlc3Ryb3koKWAgc28gdGhlIGV2YWwgdGhhdFxuICAgKiB0cmlnZ2VyZWQgdGhlIGNhbGwgaGFzIHRpbWUgdG8gcmV0dXJuIGl0cyByZXN1bHQgdG8gdGhlIGNhbGxlci4gV2l0aG91dFxuICAgKiBpdCB0aGUgcmVuZGVyZXIgZGllcyBiZWZvcmUgdGhlIElQQyByZXBseSBzaGlwcywgdGhlIGNhbGxlciB3YWl0cyBmb3IgdGhlXG4gICAqIGZ1bGwgZXZhbCB0aW1lb3V0LCBhbmQgc3RhbGUgYEJyb3dzZXJXaW5kb3dgIGVudHJpZXMgcGlsZSB1cC5cbiAgICovXG4gIGNvbnN0IERFU1RST1lfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gNTA7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIEFwcHJvdmVkIGRvdWJsZSBjYXN0OiBgX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AgaXMgb3VyIGludGVybmFsIFdpbmRvdyBhdWdtZW50YXRpb24sIGludGVudGlvbmFsbHkga2VwdCBsb2NhbCAobm90IGRlY2xhcmVkIGdsb2JhbGx5KSB0byBhdm9pZCBsZWFraW5nIGludG8gY29uc3VtZXIgdHlwZXMuXG4gIGNvbnN0IGhvbGRlciA9IHdpbmRvdyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPjtcbiAgY29uc3QgZXhpc3RpbmdDb250ZXh0cyA9IGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy5jb250ZXh0cyA/PyB7fTtcbiAgY29uc3QgZXhpc3RpbmdPYnNpZGlhbk1vZHVsZSA9IGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy5vYnNpZGlhbk1vZHVsZTtcblxuICBjb25zdCBuczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlID0ge1xuICAgIGdldCBhcHAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWRlcHJlY2F0ZWQgLS0gYGFwcGAgZ2V0dGVyIHJlYWRzIGB3aW5kb3cuYXBwYCB3aGljaCBpcyBzZXQgYnkgT2JzaWRpYW4uXG4gICAgICByZXR1cm4gd2luZG93LmFwcDtcbiAgICB9LFxuXG4gICAgY29udGV4dHM6IGV4aXN0aW5nQ29udGV4dHMsXG5cbiAgICBhc3luYyBkZXN0cm95Q3VycmVudFdpbmRvdyh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTGF5b3V0UmVhZHkoKTtcbiAgICAgIGF3YWl0IHNsZWVwKDApO1xuICAgICAgY29uc3QgZWxlY3Ryb25XaW5kb3cgPSB3aW5kb3cuZWxlY3Ryb25XaW5kb3c7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZWN0cm9uV2luZG93LmRlc3Ryb3koKTtcbiAgICAgIH0sIERFU1RST1lfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlTGF5b3V0UmVhZHkodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBldmFsV3JhcHBlcih0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBpZiAoIXRoaXMuYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAucGx1Z2lucy5zZXRFbmFibGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IGF3YWl0IHRoaXMuZ2V0T2JzaWRpYW5Nb2R1bGUoKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBwYXJhbXMuY29udGV4dElkXG4gICAgICAgID8gKHRoaXMuY29udGV4dHNbcGFyYW1zLmNvbnRleHRJZF0gPz89IHt9KVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgZnVsbEFyZ3MgPSB7IC4uLnBhcmFtcy5hcmdzLCBhcHA6IHRoaXMuYXBwLCBjb250ZXh0LCBvYnNpZGlhbk1vZHVsZSwgdHlwZUludG9FZGl0b3IgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhcmFtcy5mbihmdWxsQXJncyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICd1bmRlZmluZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiByZXN1bHQgfSk7XG4gICAgICB9IGNhdGNoIChldmFsRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ2Vycm9yJywgdmFsdWU6IHRoaXMuc2VyaWFsaXplRXJyb3IoZXZhbEVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T2JzaWRpYW5Nb2R1bGUodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICBpZiAodGhpcy5vYnNpZGlhbk1vZHVsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vYnNpZGlhbk1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICAgICAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgICAgIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgICAgIGNvbnN0IGRpciA9IGAke3RoaXMuYXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gICAgICB0aGlzLmFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgICAgIGF1dGhvcjogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgZGlyLFxuICAgICAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIGlzRGVza3RvcE9ubHk6IGZhbHNlLFxuICAgICAgICBtaW5BcHBWZXJzaW9uOiAnJyxcbiAgICAgICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIHZlcnNpb246ICcnXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuXG4gICAgICBjb25zdCBwbHVnaW5GbkJvZHkgPSAnY29uc3Qgcj1yZXF1aXJlLGU9ZXhwb3J0cztjb25zdCBtPXIoXFwnb2JzaWRpYW5cXCcpO3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLm9ic2lkaWFuTW9kdWxlPW07ZS5kZWZhdWx0PW0uUGx1Z2luOyc7XG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGAke2Rpcn0vbWFpbi5qc2AsIHBsdWdpbkZuQm9keSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnBsdWdpbnMubG9hZFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gICAgICBhd2FpdCB0aGlzLmFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG5cbiAgICAgIGlmICh0aGlzLm9ic2lkaWFuTW9kdWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ic2lkaWFuTW9kdWxlO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xuICAgIH0sXG5cbiAgICBhc3luYyBpcGNTZW5kU3luYyh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKHBhcmFtcy5jaGFubmVsLCAuLi5wYXJhbXMuYXJncyk7XG4gICAgfSxcblxuICAgIG9ic2lkaWFuTW9kdWxlOiBleGlzdGluZ09ic2lkaWFuTW9kdWxlLFxuXG4gICAgYXN5bmMgcG9sbFZhdWx0QmFzZVBhdGgodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTGF5b3V0UmVhZHkoKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIERhdGFBZGFwdGVyIGlzIGFjdHVhbGx5IEZpbGVTeXN0ZW1BZGFwdGVyIGF0IHJ1bnRpbWUgb24gZGVza3RvcC5cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgodGhpcy5hcHAudmF1bHQuYWRhcHRlciBhcyB1bmtub3duIGFzIEZpbGVTeXN0ZW1BZGFwdGVyTGlrZSkuZ2V0QmFzZVBhdGgoKSk7XG4gICAgfSxcblxuICAgIHNlcmlhbGl6ZUVycm9yKHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSwgZXJyb3I6IHVua25vd24sIGRlcHRoID0gMCk6IHN0cmluZyB7XG4gICAgICBjb25zdCBDQVVTRV9JTkRFTlRfU0laRSA9IDI7XG4gICAgICBjb25zdCBpbmRlbnQgPSAnICcucmVwZWF0KGRlcHRoICogQ0FVU0VfSU5ERU5UX1NJWkUpO1xuXG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICByZXR1cm4gYCR7aW5kZW50fSR7U3RyaW5nKGVycm9yKX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFja09yTWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIGxldCByZXN1bHQgPSBzdGFja09yTWVzc2FnZS5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBgJHtpbmRlbnR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuXG4gICAgICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcbiR7aW5kZW50fVtjYXVzZV06YDtcbiAgICAgICAgcmVzdWx0ICs9IGBcXG4ke3RoaXMuc2VyaWFsaXplRXJyb3IoZXJyb3IuY2F1c2UsIGRlcHRoICsgMSl9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2V0TG9jYWxTdG9yYWdlSXRlbSh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0ocGFyYW1zLmtleSwgcGFyYW1zLnZhbHVlKTtcbiAgICB9LFxuXG4gICAgdmVyc2lvbjogYm9vdHN0cmFwUGFyYW1zLnZlcnNpb25cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IGBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBpcyBvdXIgaW50ZXJuYWwgV2luZG93IGF1Z21lbnRhdGlvbiwgaW50ZW50aW9uYWxseSBrZXB0IGxvY2FsIChub3QgZGVjbGFyZWQgZ2xvYmFsbHkpIHRvIGF2b2lkIGxlYWtpbmcgaW50byBjb25zdW1lciB0eXBlcy5cbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPikuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZyA9IG5zO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHR5cGVJbnRvRWRpdG9yKHR5cGVQYXJhbXM6IFR5cGVJbnRvRWRpdG9yTnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBGT0NVU19TRVRUTEVfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gMzAwO1xuICAgIGNvbnN0IElOUFVUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTA7XG4gICAgY29uc3QgSU5QVVRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4gICAgY29uc3QgeyBlZGl0b3IsIHRleHQgfSA9IHR5cGVQYXJhbXM7XG4gICAgY29uc3QgdmFsdWVCZWZvcmVUeXBpbmcgPSBlZGl0b3IuZ2V0VmFsdWUoKTtcblxuICAgIC8vIEZvY3VzIHRoZSBlZGl0b3IgYW5kIHBsYWNlIHRoZSBjYXJldCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC5cbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICBjb25zdCBsYXN0TGluZSA9IGVkaXRvci5sYXN0TGluZSgpO1xuICAgIGVkaXRvci5zZXRDdXJzb3IobGFzdExpbmUsIGVkaXRvci5nZXRMaW5lKGxhc3RMaW5lKS5sZW5ndGgpO1xuXG4gICAgLy8gTGV0IGFueSBmb2N1cyB0cmFwIChhIGBzZXRUaW1lb3V0KDApYCByZS1mb2N1cykgZmlyZSBiZWZvcmUgdHlwaW5nLCBzbyBzdG9sZW4gZm9jdXMgaXMgZGV0ZWN0ZWQuXG4gICAgYXdhaXQgc2xlZXAoRk9DVVNfU0VUVExFX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IG9ic2lkaWFuLXR5cGluZ3MnIGBFbGVjdHJvbldlYkNvbnRlbnRzYCBvbWl0cyB0aGUgc3RhYmxlIGBzZW5kSW5wdXRFdmVudGAsIHdoaWNoIGlzIHdoYXQgaW5qZWN0cyBhIHRydXN0ZWQgKHJlYWwpIGtleXByZXNzLlxuICAgIGNvbnN0IHdlYkNvbnRlbnRzID0gd2luZG93LmVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKSBhcyB1bmtub3duIGFzIEVsZWN0cm9uV2ViQ29udGVudHNXaXRoU2VuZElucHV0RXZlbnQ7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIHRleHQpIHtcbiAgICAgIHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50KHsga2V5Q29kZTogY2hhciwgdHlwZTogJ2NoYXInIH0pO1xuICAgIH1cblxuICAgIC8vIFBvbGwgdW50aWwgdGhlIGRvY3VtZW50IHJlZmxlY3RzIHRoZSBpbnB1dCBvciB0aGUgdGltZW91dCBlbGFwc2VzLCBpbnN0ZWFkIG9mIGEgZml4ZWQgc2V0dGxlLlxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKGVkaXRvci5nZXRWYWx1ZSgpID09PSB2YWx1ZUJlZm9yZVR5cGluZyAmJiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgSU5QVVRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpIHtcbiAgICAgIGF3YWl0IHNsZWVwKElOUFVUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQW1CQSxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLHVCQUF1QjtBQW9CaEMsZUFBc0IsNEJBQTRCLFdBQThCLEtBQWEsdUJBQStDO0FBQzFJLFFBQU0sY0FBb0M7QUFBQSxJQUN4QztBQUFBLElBQ0EsR0FBSSwwQkFBMEIsVUFBYSxFQUFFLHNCQUFzQjtBQUFBLEVBQ3JFO0FBQ0EsUUFBTSxjQUFjLEtBQUssVUFBVSxlQUFlO0FBQ2xELFFBQU0sY0FBYyxNQUFNLFVB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
191
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbWVzcGFjZS1ib290c3RyYXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCb290c3RyYXBzIHRoZSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIG5hbWVzcGFjZSBpbiB0aGVcbiAqIE9ic2lkaWFuIHByb2Nlc3MuIEV4dHJhY3RlZCB0byBpdHMgb3duIG1vZHVsZSB0byBhdm9pZCBkZXBlbmRlbmN5IGN5Y2xlc1xuICogYmV0d2VlbiBgZXZhbC1pbi1vYnNpZGlhbi50c2AgYW5kIHRoZSB0cmFuc3BvcnQgbW9kdWxlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUge1xuICBIb3ZlckVsZW1lbnRQYXJhbXMsXG4gIE1vdmVNb3VzZVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zLFxuICBXYWl0VW50aWxQYXJhbXNcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLm1qcyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRlRnVuY3Rpb25DYWxsUGFyYW1zIH0gZnJvbSAnLi9nZW5lcmF0ZS1mdW5jdGlvbi1jYWxsLm1qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBnZW5lcmF0ZUZ1bmN0aW9uQ2FsbCB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5tanMnO1xuaW1wb3J0IHsgTElCUkFSWV9WRVJTSU9OIH0gZnJvbSAnLi9saWJyYXJ5Lm1qcyc7XG5cbmludGVyZmFjZSBCb290c3RyYXBOYW1lc3BhY2VQYXJhbXMge1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBuYW1lc3BhY2UgaXMgYm9vdHN0cmFwcGVkXG4gKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2VzcyB3aXRoIHRoZSBjdXJyZW50IGxpYnJhcnkgdmVyc2lvbi5cbiAqXG4gKiBQZXJmb3JtcyBhIGxpZ2h0d2VpZ2h0IHZlcnNpb24gY2hlY2sgdmlhIHRoZSB0cmFuc3BvcnQuIElmIHRoZSBuYW1lc3BhY2VcbiAqIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGEgZGlmZmVyZW50IHZlcnNpb24sIHNlbmRzIHRoZSBmdWxsIGJvb3RzdHJhcCBleHByZXNzaW9uXG4gKiB0byByZWdpc3RlciBhbGwgaGVscGVyIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIHRyYW5zcG9ydCB0byB1c2UgZm9yIGV2YWx1YXRpb24uXG4gKiBAcGFyYW0gY3dkIC0gVGhlIHdvcmtpbmcgZGlyZWN0b3J5ICh2YXVsdCBwYXRoKS5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBPcHRpb25hbCBwZXItZXZhbCB0aW1lb3V0LiBGb3J3YXJkZWQgdG8gYm90aFxuICogICB0aGUgdmVyc2lvbiBjaGVjayBhbmQgdGhlIGJvb3RzdHJhcCBldmFsIHNvIGEgaHVuZyBgb2JzaWRpYW4gZXZhbGAgcmVqZWN0c1xuICogICBpbnN0ZWFkIG9mIGJsb2NraW5nIHRoZSBjYWxsZXIgaW5kZWZpbml0ZWx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQsIGN3ZDogc3RyaW5nLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXZhbE9wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zID0ge1xuICAgIGN3ZCxcbiAgICAuLi4odGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSlcbiAgfTtcbiAgY29uc3QgdmVyc2lvbkpzb24gPSBKU09OLnN0cmluZ2lmeShMSUJSQVJZX1ZFUlNJT04pO1xuICBjb25zdCBjaGVja1Jlc3VsdCA9IGF3YWl0IHRyYW5zcG9ydC5ldmFsdWF0ZShcbiAgICBgSlNPTi5zdHJpbmdpZnkod2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LnZlcnNpb24gPT09ICR7dmVyc2lvbkpzb259KWAsXG4gICAgZXZhbE9wdGlvbnNcbiAgKTtcblxuICBpZiAoY2hlY2tSZXN1bHQgPT09ICd0cnVlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGJvb3RzdHJhcEV4cHIgPSBnZW5lcmF0ZUZ1bmN0aW9uQ2FsbChib290c3RyYXBOYW1lc3BhY2UsIHsgdmVyc2lvbjogTElCUkFSWV9WRVJTSU9OIH0pO1xuICBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoYm9vdHN0cmFwRXhwciwgZXZhbE9wdGlvbnMpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gU2VyaWFsaXplZCB2aWEgdG9TdHJpbmcoKSBhbmQgZXhlY3V0ZWQgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLCBub3QgaW4gTm9kZS4gQ292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cy4gKi9cblxuLyoqXG4gKiBCb290c3RyYXBzIHRoZSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIG5hbWVzcGFjZSB3aXRoIGFsbFxuICogaGVscGVyIGZ1bmN0aW9ucy4gU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBzZW50IHRvIE9ic2lkaWFuIG9uY2VcbiAqIHBlciBsaWJyYXJ5IHZlcnNpb24uXG4gKlxuICogUHJlc2VydmVzIGBjb250ZXh0c2AgYWNyb3NzIHZlcnNpb24gdXBncmFkZXMgc28gbGl2ZSB7QGxpbmsgQ29udGV4dElkfVxuICogcmVmZXJlbmNlcyBzdXJ2aXZlLlxuICpcbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUgXHUyMDE0IGl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAqXG4gKiBAcGFyYW0gYm9vdHN0cmFwUGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgaW5jbHVkaW5nIHRoZSBsaWJyYXJ5IHZlcnNpb24uXG4gKi9cbmZ1bmN0aW9uIGJvb3RzdHJhcE5hbWVzcGFjZShib290c3RyYXBQYXJhbXM6IEdlbmVyYXRlRnVuY3Rpb25DYWxsUGFyYW1zPEJvb3RzdHJhcE5hbWVzcGFjZVBhcmFtcz4pOiB2b2lkIHtcbiAgaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gICAgX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZzogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlU3RhdGU7XG4gIH1cblxuICBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlU3RhdGUge1xuICAgIGNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gICAgb2JzaWRpYW5Nb2R1bGU/OiB1bmtub3duO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UgZXh0ZW5kcyBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2VTdGF0ZSB7XG4gICAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gICAgZGVzdHJveUN1cnJlbnRXaW5kb3coKTogUHJvbWlzZTx2b2lkPjtcbiAgICBlbnN1cmVMYXlvdXRSZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGV2YWxXcmFwcGVyKG5zUGFyYW1zOiBFdmFsV3JhcHBlclBhcmFtcyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBnZXRPYnNpZGlhbk1vZHVsZSgpOiBQcm9taXNlPHVua25vd24+O1xuICAgIGlwY1NlbmRTeW5jKG5zUGFyYW1zOiBJcGNTZW5kU3luY1BhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gICAgcG9sbFZhdWx0QmFzZVBhdGgoKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHNlcmlhbGl6ZUVycm9yKGVycm9yOiB1bmtub3duLCBkZXB0aD86IG51bWJlcik6IHN0cmluZztcbiAgICBzZXRMb2NhbFN0b3JhZ2VJdGVtKG5zUGFyYW1zOiBTZXRMb2NhbFN0b3JhZ2VJdGVtUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgfVxuXG4gIGludGVyZmFjZSBFdmFsV3JhcHBlclBhcmFtcyB7XG4gICAgcmVhZG9ubHkgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVhZG9ubHkgY29udGV4dElkPzogc3RyaW5nO1xuICAgIGZuKGZuQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB1bmtub3duO1xuICB9XG5cbiAgaW50ZXJmYWNlIEZpbGVTeXN0ZW1BZGFwdGVyTGlrZSB7XG4gICAgZ2V0QmFzZVBhdGgoKTogc3RyaW5nO1xuICB9XG5cbiAgaW50ZXJmYWNlIElwY1NlbmRTeW5jUGFyYW1zIHtcbiAgICByZWFkb25seSBhcmdzOiB1bmtub3duW107XG4gICAgcmVhZG9ubHkgY2hhbm5lbDogc3RyaW5nO1xuICB9XG5cbiAgaW50ZXJmYWNlIFNldExvY2FsU3RvcmFnZUl0ZW1QYXJhbXMge1xuICAgIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG4gIH1cblxuICBpbnRlcmZhY2UgRWxlY3Ryb25XZWJDb250ZW50c1dpdGhTZW5kSW5wdXRFdmVudCB7XG4gICAgc2VuZElucHV0RXZlbnQoaW5wdXRFdmVudDogU2VuZElucHV0RXZlbnRLZXlib2FyZElucHV0IHwgU2VuZElucHV0RXZlbnRNb3VzZUlucHV0KTogdm9pZDtcbiAgfVxuXG4gIGludGVyZmFjZSBTZW5kSW5wdXRFdmVudEtleWJvYXJkSW5wdXQge1xuICAgIGtleUNvZGU6IHN0cmluZztcbiAgICB0eXBlOiAnY2hhcicgfCAna2V5RG93bicgfCAna2V5VXAnO1xuICB9XG5cbiAgaW50ZXJmYWNlIFNlbmRJbnB1dEV2ZW50TW91c2VJbnB1dCB7XG4gICAgdHlwZTogJ21vdXNlTW92ZSc7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSAoaW4gbXMpIGJlZm9yZSBpbnZva2luZyBgZWxlY3Ryb25XaW5kb3cuZGVzdHJveSgpYCBzbyB0aGUgZXZhbCB0aGF0XG4gICAqIHRyaWdnZXJlZCB0aGUgY2FsbCBoYXMgdGltZSB0byByZXR1cm4gaXRzIHJlc3VsdCB0byB0aGUgY2FsbGVyLiBXaXRob3V0XG4gICAqIGl0IHRoZSByZW5kZXJlciBkaWVzIGJlZm9yZSB0aGUgSVBDIHJlcGx5IHNoaXBzLCB0aGUgY2FsbGVyIHdhaXRzIGZvciB0aGVcbiAgICogZnVsbCBldmFsIHRpbWVvdXQsIGFuZCBzdGFsZSBgQnJvd3NlcldpbmRvd2AgZW50cmllcyBwaWxlIHVwLlxuICAgKi9cbiAgY29uc3QgREVTVFJPWV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSA1MDtcblxuICAvKipcbiAgICogSW50ZXJ2YWwgKGluIG1zKSBiZXR3ZWVuIHBvbGxzIHdoaWxlIHdhaXRpbmcgZm9yIGEgdHJ1c3RlZCBpbnB1dCBldmVudCB0b1xuICAgKiB0YWtlIGVmZmVjdCAodGhlIGVkaXRvciBkb2N1bWVudCB1cGRhdGVzLCBvciBhbiBlbGVtZW50J3MgYDpob3ZlcmAgc3RhdGVcbiAgICogZmxpcHMpLiBTaGFyZWQgYnkgZXZlcnkgdHJ1c3RlZC1pbnB1dCBoZWxwZXIuXG4gICAqL1xuICBjb25zdCBJTlBVVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHRpbWUgKGluIG1zKSB0byB3YWl0IGZvciBhIHRydXN0ZWQgaW5wdXQgZXZlbnQgdG8gdGFrZSBlZmZlY3RcbiAgICogYmVmb3JlIGdpdmluZyB1cCAodGhlIGV4cGVjdGVkIG91dGNvbWUgd2hlbiB0aGUgaW5wdXQgaXMgcmVqZWN0ZWQgXHUyMDE0IGUuZy4gYVxuICAgKiByZWFkLW9ubHkgZWRpdG9yLCBvciBhIHBvaW50ZXIgbW92ZSB0aGF0IG5ldmVyIGxhbmRzIG9uIHRoZSBlbGVtZW50KS5cbiAgICovXG4gIGNvbnN0IElOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcblxuICAvKipcbiAgICogRGVmYXVsdCBpbnRlcnZhbCAoaW4gbXMpIGJldHdlZW4ge0BsaW5rIHdhaXRVbnRpbH0gcHJlZGljYXRlIGNoZWNrcyB3aGVuIHRoZVxuICAgKiBjYWxsZXIgZG9lcyBub3Qgb3ZlcnJpZGUgaXQuXG4gICAqL1xuICBjb25zdCBXQUlUX1VOVElMX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTA7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgbWF4aW11bSB0aW1lIChpbiBtcykge0BsaW5rIHdhaXRVbnRpbH0gd2FpdHMgZm9yIGl0cyBwcmVkaWNhdGUgdG9cbiAgICogYmVjb21lIHRydXRoeSBiZWZvcmUgcmVqZWN0aW5nLCB3aGVuIHRoZSBjYWxsZXIgZG9lcyBub3Qgb3ZlcnJpZGUgaXQuXG4gICAqL1xuICBjb25zdCBXQUlUX1VOVElMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IGBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBpcyBvdXIgaW50ZXJuYWwgV2luZG93IGF1Z21lbnRhdGlvbiwgaW50ZW50aW9uYWxseSBrZXB0IGxvY2FsIChub3QgZGVjbGFyZWQgZ2xvYmFsbHkpIHRvIGF2b2lkIGxlYWtpbmcgaW50byBjb25zdW1lciB0eXBlcy5cbiAgY29uc3QgaG9sZGVyID0gd2luZG93IGFzIHVua25vd24gYXMgUGFydGlhbDxJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXI+O1xuICBjb25zdCBleGlzdGluZ0NvbnRleHRzID0gaG9sZGVyLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LmNvbnRleHRzID8/IHt9O1xuICBjb25zdCBleGlzdGluZ09ic2lkaWFuTW9kdWxlID0gaG9sZGVyLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/Lm9ic2lkaWFuTW9kdWxlO1xuXG4gIGNvbnN0IG5zOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UgPSB7XG4gICAgZ2V0IGFwcCgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBgYXBwYCBnZXR0ZXIgcmVhZHMgYHdpbmRvdy5hcHBgIHdoaWNoIGlzIHNldCBieSBPYnNpZGlhbi5cbiAgICAgIHJldHVybiB3aW5kb3cuYXBwO1xuICAgIH0sXG5cbiAgICBjb250ZXh0czogZXhpc3RpbmdDb250ZXh0cyxcblxuICAgIGFzeW5jIGRlc3Ryb3lDdXJyZW50V2luZG93KHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgYXdhaXQgc2xlZXAoMCk7XG4gICAgICBjb25zdCBlbGVjdHJvbldpbmRvdyA9IHdpbmRvdy5lbGVjdHJvbldpbmRvdztcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlY3Ryb25XaW5kb3cuZGVzdHJveSgpO1xuICAgICAgfSwgREVTVFJPWV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVMYXlvdXRSZWFkeSh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGV2YWxXcmFwcGVyKHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSwgcGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGlmICghdGhpcy5hcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9ic2lkaWFuTW9kdWxlID0gYXdhaXQgdGhpcy5nZXRPYnNpZGlhbk1vZHVsZSgpO1xuICAgICAgY29uc3QgY29udGV4dCA9IHBhcmFtcy5jb250ZXh0SWRcbiAgICAgICAgPyAodGhpcy5jb250ZXh0c1twYXJhbXMuY29udGV4dElkXSA/Pz0ge30pXG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBmdWxsQXJncyA9IHsgLi4ucGFyYW1zLmFyZ3MsIGFwcDogdGhpcy5hcHAsIGNvbnRleHQsIGhvdmVyRWxlbWVudCwgbW92ZU1vdXNlLCBvYnNpZGlhbk1vZHVsZSwgdHlwZUludG9FZGl0b3IsIHVuaG92ZXJFbGVtZW50LCB3YWl0VW50aWwgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhcmFtcy5mbihmdWxsQXJncyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICd1bmRlZmluZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiByZXN1bHQgfSk7XG4gICAgICB9IGNhdGNoIChldmFsRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ2Vycm9yJywgdmFsdWU6IHRoaXMuc2VyaWFsaXplRXJyb3IoZXZhbEVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T2JzaWRpYW5Nb2R1bGUodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICBpZiAodGhpcy5vYnNpZGlhbk1vZHVsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vYnNpZGlhbk1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICAgICAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgICAgIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgICAgIGNvbnN0IGRpciA9IGAke3RoaXMuYXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gICAgICB0aGlzLmFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgICAgIGF1dGhvcjogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgZGlyLFxuICAgICAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIGlzRGVza3RvcE9ubHk6IGZhbHNlLFxuICAgICAgICBtaW5BcHBWZXJzaW9uOiAnJyxcbiAgICAgICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIHZlcnNpb246ICcnXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuXG4gICAgICBjb25zdCBwbHVnaW5GbkJvZHkgPSAnY29uc3Qgcj1yZXF1aXJlLGU9ZXhwb3J0cztjb25zdCBtPXIoXFwnb2JzaWRpYW5cXCcpO3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLm9ic2lkaWFuTW9kdWxlPW07ZS5kZWZhdWx0PW0uUGx1Z2luOyc7XG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGAke2Rpcn0vbWFpbi5qc2AsIHBsdWdpbkZuQm9keSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnBsdWdpbnMubG9hZFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gICAgICBhd2FpdCB0aGlzLmFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG5cbiAgICAgIGlmICh0aGlzLm9ic2lkaWFuTW9kdWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ic2lkaWFuTW9kdWxlO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xuICAgIH0sXG5cbiAgICBhc3luYyBpcGNTZW5kU3luYyh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKHBhcmFtcy5jaGFubmVsLCAuLi5wYXJhbXMuYXJncyk7XG4gICAgfSxcblxuICAgIG9ic2lkaWFuTW9kdWxlOiBleGlzdGluZ09ic2lkaWFuTW9kdWxlLFxuXG4gICAgYXN5bmMgcG9sbFZhdWx0QmFzZVBhdGgodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTGF5b3V0UmVhZHkoKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIERhdGFBZGFwdGVyIGlzIGFjdHVhbGx5IEZpbGVTeXN0ZW1BZGFwdGVyIGF0IHJ1bnRpbWUgb24gZGVza3RvcC5cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgodGhpcy5hcHAudmF1bHQuYWRhcHRlciBhcyB1bmtub3duIGFzIEZpbGVTeXN0ZW1BZGFwdGVyTGlrZSkuZ2V0QmFzZVBhdGgoKSk7XG4gICAgfSxcblxuICAgIHNlcmlhbGl6ZUVycm9yKHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSwgZXJyb3I6IHVua25vd24sIGRlcHRoID0gMCk6IHN0cmluZyB7XG4gICAgICBjb25zdCBDQVVTRV9JTkRFTlRfU0laRSA9IDI7XG4gICAgICBjb25zdCBpbmRlbnQgPSAnICcucmVwZWF0KGRlcHRoICogQ0FVU0VfSU5ERU5UX1NJWkUpO1xuXG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICByZXR1cm4gYCR7aW5kZW50fSR7U3RyaW5nKGVycm9yKX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFja09yTWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIGxldCByZXN1bHQgPSBzdGFja09yTWVzc2FnZS5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBgJHtpbmRlbnR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuXG4gICAgICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcbiR7aW5kZW50fVtjYXVzZV06YDtcbiAgICAgICAgcmVzdWx0ICs9IGBcXG4ke3RoaXMuc2VyaWFsaXplRXJyb3IoZXJyb3IuY2F1c2UsIGRlcHRoICsgMSl9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2V0TG9jYWxTdG9yYWdlSXRlbSh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0ocGFyYW1zLmtleSwgcGFyYW1zLnZhbHVlKTtcbiAgICB9LFxuXG4gICAgdmVyc2lvbjogYm9vdHN0cmFwUGFyYW1zLnZlcnNpb25cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IGBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBpcyBvdXIgaW50ZXJuYWwgV2luZG93IGF1Z21lbnRhdGlvbiwgaW50ZW50aW9uYWxseSBrZXB0IGxvY2FsIChub3QgZGVjbGFyZWQgZ2xvYmFsbHkpIHRvIGF2b2lkIGxlYWtpbmcgaW50byBjb25zdW1lciB0eXBlcy5cbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPikuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZyA9IG5zO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHR5cGVJbnRvRWRpdG9yKHR5cGVQYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgRk9DVVNfU0VUVExFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDMwMDtcblxuICAgIGNvbnN0IHsgZWRpdG9yLCB0ZXh0IH0gPSB0eXBlUGFyYW1zO1xuICAgIGNvbnN0IHZhbHVlQmVmb3JlVHlwaW5nID0gZWRpdG9yLmdldFZhbHVlKCk7XG5cbiAgICAvLyBGb2N1cyB0aGUgZWRpdG9yIGFuZCBwbGFjZSB0aGUgY2FyZXQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuXG4gICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgY29uc3QgbGFzdExpbmUgPSBlZGl0b3IubGFzdExpbmUoKTtcbiAgICBlZGl0b3Iuc2V0Q3Vyc29yKGxhc3RMaW5lLCBlZGl0b3IuZ2V0TGluZShsYXN0TGluZSkubGVuZ3RoKTtcblxuICAgIC8vIExldCBhbnkgZm9jdXMgdHJhcCAoYSBgc2V0VGltZW91dCgwKWAgcmUtZm9jdXMpIGZpcmUgYmVmb3JlIHR5cGluZywgc28gc3RvbGVuIGZvY3VzIGlzIGRldGVjdGVkLlxuICAgIGF3YWl0IHNsZWVwKEZPQ1VTX1NFVFRMRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIEFwcHJvdmVkIGRvdWJsZSBjYXN0OiBvYnNpZGlhbi10eXBpbmdzJyBgRWxlY3Ryb25XZWJDb250ZW50c2Agb21pdHMgdGhlIHN0YWJsZSBgc2VuZElucHV0RXZlbnRgLCB3aGljaCBpcyB3aGF0IGluamVjdHMgYSB0cnVzdGVkIChyZWFsKSBrZXlwcmVzcy5cbiAgICBjb25zdCB3ZWJDb250ZW50cyA9IHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkgYXMgdW5rbm93biBhcyBFbGVjdHJvbldlYkNvbnRlbnRzV2l0aFNlbmRJbnB1dEV2ZW50O1xuICAgIGZvciAoY29uc3QgY2hhciBvZiB0ZXh0KSB7XG4gICAgICB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudCh7IGtleUNvZGU6IGNoYXIsIHR5cGU6ICdjaGFyJyB9KTtcbiAgICB9XG5cbiAgICAvLyBQb2xsIHVudGlsIHRoZSBkb2N1bWVudCByZWZsZWN0cyB0aGUgaW5wdXQgb3IgdGhlIHRpbWVvdXQgZWxhcHNlcywgaW5zdGVhZCBvZiBhIGZpeGVkIHNldHRsZS5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHdoaWxlIChlZGl0b3IuZ2V0VmFsdWUoKSA9PT0gdmFsdWVCZWZvcmVUeXBpbmcgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IElOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSB7XG4gICAgICBhd2FpdCBzbGVlcChJTlBVVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaG92ZXJFbGVtZW50KGhvdmVyUGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBDRU5URVJfRElWSVNPUiA9IDI7XG5cbiAgICBjb25zdCB7IGVsZW1lbnQgfSA9IGhvdmVyUGFyYW1zO1xuXG4gICAgLy8gVmlld3BvcnQgY29vcmRzIGVxdWFsIHdlYi1jb250ZW50cyBESVAgY29vcmRzIGZvciB0aGUgZnVsbC13aW5kb3cgYEJyb3dzZXJXaW5kb3dgLlxuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIG1vdmVNb3VzZVRvKE1hdGgucm91bmQocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIENFTlRFUl9ESVZJU09SKSwgTWF0aC5yb3VuZChyZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gQ0VOVEVSX0RJVklTT1IpKTtcblxuICAgIC8vIFBvbGwgdW50aWwgdGhlIHJlYWwgYDpob3ZlcmAgc3RhdGUgaGFzIGFjdHVhbGx5IHRha2VuLCBpbnN0ZWFkIG9mIGEgZml4ZWQgc2V0dGxlLlxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKCFlbGVtZW50Lm1hdGNoZXMoJzpob3ZlcicpICYmIERhdGUubm93KCkgLSBzdGFydFRpbWUgPCBJTlBVVF9USU1FT1VUX0lOX01JTExJU0VDT05EUykge1xuICAgICAgYXdhaXQgc2xlZXAoSU5QVVRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdmVNb3VzZShtb3ZlUGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBtb3ZlTW91c2VUbyhNYXRoLnJvdW5kKG1vdmVQYXJhbXMueCksIE1hdGgucm91bmQobW92ZVBhcmFtcy55KSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZU1vdXNlVG8oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IG9ic2lkaWFuLXR5cGluZ3MnIGBFbGVjdHJvbldlYkNvbnRlbnRzYCBvbWl0cyB0aGUgc3RhYmxlIGBzZW5kSW5wdXRFdmVudGAsIHdoaWNoIGlzIHdoYXQgaW5qZWN0cyBhIHRydXN0ZWQgKHJlYWwpIHBvaW50ZXIgbW92ZS5cbiAgICBjb25zdCB3ZWJDb250ZW50cyA9IHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkgYXMgdW5rbm93biBhcyBFbGVjdHJvbldlYkNvbnRlbnRzV2l0aFNlbmRJbnB1dEV2ZW50O1xuICAgIHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50KHsgdHlwZTogJ21vdXNlTW92ZScsIHgsIHkgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB1bmhvdmVyRWxlbWVudCh1bmhvdmVyUGFyYW1zOiBVbmhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IENFTlRFUl9ESVZJU09SID0gMjtcbiAgICBjb25zdCBPVVRTSURFX09GRlNFVF9JTl9QSVhFTFMgPSAxO1xuXG4gICAgY29uc3QgeyBlbGVtZW50IH0gPSB1bmhvdmVyUGFyYW1zO1xuXG4gICAgLy8gTW92ZSB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSB0aGUgZWxlbWVudCdzIGJveC5cbiAgICAvLyBXaGVuIGZsdXNoIGFnYWluc3QgdGhlIHZpZXdwb3J0J3MgbGVmdCBlZGdlLCB1c2UganVzdCBwYXN0IHRoZSByaWdodCBlZGdlLlxuICAgIC8vIEEgZnVsbC12aWV3cG9ydC13aWR0aCBlbGVtZW50IHNob3VsZCB1c2UgYG1vdmVNb3VzZWAgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB4ID0gcmVjdC5sZWZ0ID49IE9VVFNJREVfT0ZGU0VUX0lOX1BJWEVMUyA/IHJlY3QubGVmdCAtIE9VVFNJREVfT0ZGU0VUX0lOX1BJWEVMUyA6IHJlY3QucmlnaHQgKyBPVVRTSURFX09GRlNFVF9JTl9QSVhFTFM7XG4gICAgY29uc3QgeSA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyBDRU5URVJfRElWSVNPUjtcbiAgICBtb3ZlTW91c2VUbyhNYXRoLnJvdW5kKHgpLCBNYXRoLnJvdW5kKHkpKTtcblxuICAgIC8vIFBvbGwgdW50aWwgdGhlIHJlYWwgYDpob3ZlcmAgc3RhdGUgaGFzIGFjdHVhbGx5IGNsZWFyZWQsIGluc3RlYWQgb2YgYSBmaXhlZCBzZXR0bGUuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB3aGlsZSAoZWxlbWVudC5tYXRjaGVzKCc6aG92ZXInKSAmJiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgSU5QVVRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpIHtcbiAgICAgIGF3YWl0IHNsZWVwKElOUFVUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB3YWl0VW50aWwod2FpdFBhcmFtczogV2FpdFVudGlsUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge1xuICAgICAgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IFdBSVRfVU5USUxfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBtZXNzYWdlLFxuICAgICAgcHJlZGljYXRlLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzID0gV0FJVF9VTlRJTF9USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICAgIH0gPSB3YWl0UGFyYW1zO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB3aGlsZSAoIShhd2FpdCBwcmVkaWNhdGUoKSkpIHtcbiAgICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IHRpbWVvdXRJbk1pbGxpc2Vjb25kcykge1xuICAgICAgICBjb25zdCBzdWZmaXggPSBtZXNzYWdlID09PSB1bmRlZmluZWQgPyAnJyA6IGA6ICR7bWVzc2FnZX1gO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdhaXRVbnRpbCB0aW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcodGltZW91dEluTWlsbGlzZWNvbmRzKX0gbWlsbGlzZWNvbmRzJHtzdWZmaXh9YCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcChpbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICB9XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQXVCQSxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLHVCQUF1QjtBQW9CaEMsZUFBc0IsNEJBQTRCLFdBQThCLEtBQWEsdUJBQStDO0FBQzFJLFFBQU0sY0FBb0M7QUFBQSxJQUN4QztBQUFBLElBQ0EsR0FBSSwwQkFBMEIsVUFBYSxFQUFFLHNCQUFzQjtBQUFBLEVBQ3JFO0FBQ0EsUUFBTSxjQUFjLEtBQUssVUFBVSxlQUFlO0FBQ2xELFFBQU0sY0FBYyxNQUFNLFVBQVU7QUFBQSxJQUNsQyxtRUFBbUUsV0FBVztBQUFBLElBQzlFO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdCLFFBQVE7QUFDMUI7QUFBQSxFQUNGO0FBRUEsUUFBTSxnQkFBZ0IscUJBQXFCLG9CQUFvQixFQUFFLFNBQVMsZ0JBQWdCLENBQUM7QUFDM0YsUUFBTSxVQUFVLFNBQVMsZUFBZSxXQUFXO0FBQ3JEO0FBZ0JBLFNBQVMsbUJBQW1CLGlCQUE2RTtBQWdFdkcsUUFBTSxnQ0FBZ0M7QUFPdEMsUUFBTSxzQ0FBc0M7QUFPNUMsUUFBTSxnQ0FBZ0M7QUFNdEMsUUFBTSwyQ0FBMkM7QUFNakQsUUFBTSxxQ0FBcUM7QUFHM0MsUUFBTSxTQUFTO0FBQ2YsUUFBTSxtQkFBbUIsT0FBTyw4QkFBOEIsWUFBWSxDQUFDO0FBQzNFLFFBQU0seUJBQXlCLE9B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
@@ -231,6 +231,19 @@ export declare class DesktopCdpTransport implements ObsidianTransport {
231
231
  * @returns The list of page targets.
232
232
  */
233
233
  private getPageTargets;
234
+ /**
235
+ * Opens a vault in an already-running Obsidian instance via the `vault-open`
236
+ * Electron IPC (evaluated through CDP on an existing target), then polls until
237
+ * the new vault's window target appears, is layout-ready, and its trust dialog
238
+ * (if any) has been dismissed.
239
+ *
240
+ * Shared by the attach-mode {@link registerVault} and the owned-mode
241
+ * "instance already launched" path, so opening an additional vault never
242
+ * relaunches the process (which would surface the vault picker).
243
+ *
244
+ * @param vaultPath - The absolute path to the vault folder.
245
+ */
246
+ private openVaultInRunningInstance;
234
247
  /**
235
248
  * Probes a target to discover which vault path it has open.
236
249
  *
@@ -259,6 +272,14 @@ export declare class DesktopCdpTransport implements ObsidianTransport {
259
272
  * @returns The CDP response.
260
273
  */
261
274
  private sendCommand;
275
+ /**
276
+ * Polls a killed owned instance's CDP endpoint until it stops responding,
277
+ * confirming the process has exited and released Electron's single-instance
278
+ * lock on the shared user-data dir before a fresh instance is launched into it.
279
+ *
280
+ * @param cdpUrl - The CDP URL of the instance that was just killed.
281
+ */
282
+ private waitForInstanceExit;
262
283
  /**
263
284
  * Waits for the vault's `app.workspace` to reach layout-ready state.
264
285
  *