ng-zenduit 1.0.39 → 1.0.41

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyc0NvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvZmlsdGVyc0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREFURVBJQ0tFUl9QT1NJVElPTiB9IGZyb20gJy4uL2RhdGVwaWNrZXIvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tIFwiLi9kYXRlUmFuZ2VcIjtcbmltcG9ydCB7IE51bWJlclJhbmdlIH0gZnJvbSBcIi4vbnVtYmVyUmFuZ2VcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcnNDb25maWcge1xuICAgIGl0ZW1zOiBGaWx0ZXJzQ29uZmlnSXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcnNDb25maWdJdGVtIHtcbiAgICAvKipcbiAgICAgKiBTZWN0aW9uIHRpdGxlXG4gICAgICovXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEtleSBmb3IgcmVzdWx0IHN0b3JlXG4gICAgICovXG4gICAga2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIHR5cGVcbiAgICAgKi9cbiAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIgfCBcInNlbGVjdFwiIHwgXCJkYXRlUmFuZ2VcIiB8IFwibnVtYmVyUmFuZ2VcIiB8IFwidG9nZ2xlXCIgfCBcImRhdGVcIiB8IFwicmFkaW9cIiB8IFwiZGl2aWRlclwiIHwgXCJ0ZXh0XCIgfCBcImR1cmF0aW9uXCIgfCBcImRpc3RhbmNlXCI7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRpbWUgZm9yIGRhdGUgcGlja2Vycy4gQnkgZGVmYXVsdCBpcyB0cnVlXG4gICAgICovXG4gICAgc2hvd1RpbWU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGF0YSBzb3VyY2UgZm9yIHR5cGUgTXVsdGlzZWxlY3RcbiAgICAgKi9cbiAgICBkYXRhU291cmNlPzogRGF0YVNvdXJjZVtdO1xuXG4gICAgZmlsdGVyZWREYXRhU291cmNlPzogRGF0YVNvdXJjZVtdO1xuXG4gICAgLyoqXG4gICAgICogRGF0ZSByYW5nZSBmb3IgdHlwZSBEYXRlUmFuZ2VcbiAgICAgKi9cbiAgICBkYXRlUmFuZ2U/OiBEYXRlUmFuZ2U7XG5cbiAgICAvKipcbiAgICAgKiBEYXRlIHJlc3VsdCBmb3IgdHlwZSBEYXRlXG4gICAgICovXG4gICAgZGF0ZT86IERhdGU7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgcmFuZ2UgZm9yIHR5cGUgTnVtYmVyUmFuZ2VcbiAgICAgKi9cbiAgICBudW1iZXJSYW5nZT86IE51bWJlclJhbmdlO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9uIGZvciBSYWRpb1xuICAgICAqIFNlbGVjdGVkIGFkZGVkIGhlcmUgZm9yIHJlc2V0IEZpbHRlci5cbiAgICAgKi9cbiAgICByYWRpb09wdGlvbnM/OiBBcnJheTx7IGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc2VsZWN0ZWQ/OiBib29sZWFuLCBkaXNhYmxlZD86IGJvb2xlYW4sIGltYWdlVXJsPzogc3RyaW5nIH0+O1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0ZWQgUmFkaW8gYnV0dG9uIHJlc3VsdFxuICAgICAqL1xuICAgIHNlbGVjdGVkUmFkaW8/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUvRGlzYWJsZWQgc3RhdGUgZm9yIHRoZSB0eXBlIFRvZ2dsZVxuICAgICAqL1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogTWVudSBpcyBleHBhbmRlZFxuICAgICAqL1xuICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIElzIHNlbGVjdGVkIGFsbFxuICAgICAqL1xuICAgIGlzU2VsZWN0ZWRBbGw/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBtZW51IGNvbGxhcHNlXG4gICAgICovXG4gICAgZGlzYWJsZUNvbGxhcHNlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3NcbiAgICAgKi9cbiAgICBjb25maWc/OiB7XG4gICAgICAgIC8vIERhdGUgcGlja2VyIHBvc2l0aW9uXG4gICAgICAgIHlQb3NpdGlvbj86IERBVEVQSUNLRVJfUE9TSVRJT05cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBwcmVkZWZpbmVkIGRhdGUtcmFuZ2Ugb3B0aW9ucy4gQnkgZGVmYXVsdCBpcyBmYWxzZVxuICAgICAqL1xuICAgIHNob3dEYXRlUmFuZ2VPcHRpb25zPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgY3VzdG9tIGRhdGUtcmFuZ2Ugb3B0aW9ucyB0byByZXBsYWNlIGRlZmF1bHQgb3B0aW9uc1xuICAgICAqL1xuICAgIGRhdGVSYW5nZU9wdGlvbnM/OiB7IG5hbWU6IHN0cmluZywgZGF0ZVJhbmdlOiBEYXRlUmFuZ2UgfVtdO1xuXG4gICAgLyoqXG4gICAgICogSXMgbGF6eSBsb2FkaW5nIG1vZGUgYWN0aXZhdGVkIGZvciBkYXRhIHNvdXJjZXNcbiAgICAgKi9cbiAgICBpc0xhenlMb2FkaW5nPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIGxhenkgbG9hZGluZyBoYW5kbGVyXG4gICAgICovXG4gICAgbGF6eUxvYWRlcj86IChzZWFyY2g6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpID0+IFByb21pc2U8RGF0YVNvdXJjZVtdPjtcblxuICAgIC8qKlxuICAgICAqIGlzIGRhdGEgaXMgbG9hZGluZyBub3dcbiAgICAgKi9cbiAgICBpc0xvYWRpbmdOb3c/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIGJ1dHRvbiAnTG9hZCBtb3JlJyB3aWxsIGJlIGRpc3BsYXllZFxuICAgICAqL1xuICAgIGNhbkxvYWRNb3JlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhU291cmNlIHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyB8IG51bWJlcixcbiAgICBjaGVja2VkPzogYm9vbGVhbixcbiAgICBpbWFnZVVybD86IHN0cmluZyxcbiAgICBpc09wZW4/OiBib29sZWFuLFxuICAgIGNoaWxkcmVuPzogc3RyaW5nW10sXG4gICAgaW5kZXg/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNlbGVjdEl0ZW0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGluZGV4OiBudW1iZXJcbn0iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyc0NvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvZmlsdGVyc0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREFURVBJQ0tFUl9QT1NJVElPTiB9IGZyb20gJy4uL2RhdGVwaWNrZXIvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tIFwiLi9kYXRlUmFuZ2VcIjtcbmltcG9ydCB7IE51bWJlclJhbmdlIH0gZnJvbSBcIi4vbnVtYmVyUmFuZ2VcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcnNDb25maWcge1xuICAgIGl0ZW1zOiBGaWx0ZXJzQ29uZmlnSXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcnNDb25maWdJdGVtIHtcbiAgICAvKipcbiAgICAgKiBTZWN0aW9uIHRpdGxlXG4gICAgICovXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEtleSBmb3IgcmVzdWx0IHN0b3JlXG4gICAgICovXG4gICAga2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIHR5cGVcbiAgICAgKi9cbiAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIgfCBcInNlbGVjdFwiIHwgXCJkYXRlUmFuZ2VcIiB8IFwibnVtYmVyUmFuZ2VcIiB8IFwidG9nZ2xlXCIgfCBcImRhdGVcIiB8IFwicmFkaW9cIiB8IFwiZGl2aWRlclwiIHwgXCJ0ZXh0XCIgfCBcImR1cmF0aW9uXCIgfCBcImRpc3RhbmNlXCI7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRpbWUgZm9yIGRhdGUgcGlja2Vycy4gQnkgZGVmYXVsdCBpcyB0cnVlXG4gICAgICovXG4gICAgc2hvd1RpbWU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGF0YSBzb3VyY2UgZm9yIHR5cGUgTXVsdGlzZWxlY3RcbiAgICAgKi9cbiAgICBkYXRhU291cmNlPzogRGF0YVNvdXJjZVtdO1xuXG4gICAgZmlsdGVyZWREYXRhU291cmNlPzogRGF0YVNvdXJjZVtdO1xuXG4gICAgLyoqXG4gICAgICogRGF0ZSByYW5nZSBmb3IgdHlwZSBEYXRlUmFuZ2VcbiAgICAgKi9cbiAgICBkYXRlUmFuZ2U/OiBEYXRlUmFuZ2U7XG5cbiAgICAvKipcbiAgICAgKiBEYXRlIHJlc3VsdCBmb3IgdHlwZSBEYXRlXG4gICAgICovXG4gICAgZGF0ZT86IERhdGU7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgcmFuZ2UgZm9yIHR5cGUgTnVtYmVyUmFuZ2VcbiAgICAgKi9cbiAgICBudW1iZXJSYW5nZT86IE51bWJlclJhbmdlO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9uIGZvciBSYWRpb1xuICAgICAqIFNlbGVjdGVkIGFkZGVkIGhlcmUgZm9yIHJlc2V0IEZpbHRlci5cbiAgICAgKi9cbiAgICByYWRpb09wdGlvbnM/OiBBcnJheTx7IGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc2VsZWN0ZWQ/OiBib29sZWFuLCBkaXNhYmxlZD86IGJvb2xlYW4sIGltYWdlVXJsPzogc3RyaW5nIH0+O1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0ZWQgUmFkaW8gYnV0dG9uIHJlc3VsdFxuICAgICAqL1xuICAgIHNlbGVjdGVkUmFkaW8/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUvRGlzYWJsZWQgc3RhdGUgZm9yIHRoZSB0eXBlIFRvZ2dsZVxuICAgICAqL1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogTWVudSBpcyBleHBhbmRlZFxuICAgICAqL1xuICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIElzIHNlbGVjdGVkIGFsbFxuICAgICAqL1xuICAgIGlzU2VsZWN0ZWRBbGw/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBtZW51IGNvbGxhcHNlXG4gICAgICovXG4gICAgZGlzYWJsZUNvbGxhcHNlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3NcbiAgICAgKi9cbiAgICBjb25maWc/OiB7XG4gICAgICAgIC8vIERhdGUgcGlja2VyIHBvc2l0aW9uXG4gICAgICAgIHlQb3NpdGlvbj86IERBVEVQSUNLRVJfUE9TSVRJT05cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBwcmVkZWZpbmVkIGRhdGUtcmFuZ2Ugb3B0aW9ucy4gQnkgZGVmYXVsdCBpcyBmYWxzZVxuICAgICAqL1xuICAgIHNob3dEYXRlUmFuZ2VPcHRpb25zPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgY3VzdG9tIGRhdGUtcmFuZ2Ugb3B0aW9ucyB0byByZXBsYWNlIGRlZmF1bHQgb3B0aW9uc1xuICAgICAqL1xuICAgIGRhdGVSYW5nZU9wdGlvbnM/OiB7IG5hbWU6IHN0cmluZywgZGF0ZVJhbmdlOiBEYXRlUmFuZ2UgfVtdO1xuXG4gICAgLyoqXG4gICAgICogSXMgbGF6eSBsb2FkaW5nIG1vZGUgYWN0aXZhdGVkIGZvciBkYXRhIHNvdXJjZXNcbiAgICAgKi9cbiAgICBpc0xhenlMb2FkaW5nPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIGxhenkgbG9hZGluZyBoYW5kbGVyXG4gICAgICovXG4gICAgbGF6eUxvYWRlcj86IChzZWFyY2g6IHsgdGV4dD86IHN0cmluZywgaWRzPzogc3RyaW5nW10gfSwgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpID0+IFByb21pc2U8RGF0YVNvdXJjZVtdPjtcblxuICAgIC8qKlxuICAgICAqIGlzIGRhdGEgaXMgbG9hZGluZyBub3dcbiAgICAgKi9cbiAgICBpc0xvYWRpbmdOb3c/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIGJ1dHRvbiAnTG9hZCBtb3JlJyB3aWxsIGJlIGRpc3BsYXllZFxuICAgICAqL1xuICAgIGNhbkxvYWRNb3JlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhU291cmNlIHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyB8IG51bWJlcixcbiAgICBjaGVja2VkPzogYm9vbGVhbixcbiAgICBpbWFnZVVybD86IHN0cmluZyxcbiAgICBpc09wZW4/OiBib29sZWFuLFxuICAgIGNoaWxkcmVuPzogc3RyaW5nW10sXG4gICAgaW5kZXg/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNlbGVjdEl0ZW0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGluZGV4OiBudW1iZXJcbn0iXX0=
@@ -249,7 +249,7 @@ export class ZenduFilterComponent {
249
249
  }
250
250
  // load first 10 records for the the first time
251
251
  const limit = (item.filteredDataSource.length == 0) ? 10 : 100;
252
- const newItems = await item.lazyLoader(this.searchText || "", item.filteredDataSource.length, limit);
252
+ const newItems = await item.lazyLoader({ text: this.searchText || "" }, item.filteredDataSource.length, limit);
253
253
  item.canLoadMore = (newItems.length == limit);
254
254
  // the filteredDataSource contains the items that is visilible to user at the current moment
255
255
  item.filteredDataSource = item.filteredDataSource.concat(newItems);
@@ -670,4 +670,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
670
670
  type: HostListener,
671
671
  args: ['window:keydown', ['$event']]
672
672
  }] } });
673
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEksT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUVuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRL0QsTUFBTSxPQUFPLG9CQUFvQjtJQXdEN0I7UUF0RFMsV0FBTSxHQUFrQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUl0QyxhQUFRLEdBQUcsT0FBTyxDQUFDO1FBRW5CLGtCQUFhLEdBQXdCLE9BQU8sQ0FBQztRQUU1QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFM0MsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVqQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFZeEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQUk3QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBSW5CLGlCQUFZLEdBQWEsRUFBRSxDQUFBO1FBRTNCLHVCQUFrQixHQUFHLG1CQUFtQixDQUFDO1FBRXpDLDZCQUF3QixHQUE4QixFQUFFLENBQUM7SUFNaEQsQ0FBQztJQUVWLFdBQVcsQ0FBQyxPQUFZO1FBQzNCLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUUvQyxjQUFjO1lBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQzFGO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNyRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBRTVDLDBCQUEwQjtvQkFDMUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFO3dCQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7cUJBQzdEO2lCQUNKO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztpQkFDekI7Z0JBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO29CQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDeEI7YUFDSjtZQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVuQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVqRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM3QjtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtZQUNyRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUdELGVBQWUsQ0FBQyxLQUFpQjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakMseUJBQXlCO1lBQ3pCLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkQsT0FBTztTQUNWO1FBRUQsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVaLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBR0Qsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxLQUFpQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakMsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDdkcsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUdELGVBQWUsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFO1lBRTNKLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakMsT0FBTzthQUNWO1lBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7Z0JBQ3ZHLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sZUFBZSxDQUFDLElBQXVCO1FBQzFDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7Z0JBQ2pELE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDOUM7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtnQkFDakMsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyx1QkFBdUIsQ0FDM0IsS0FHRztRQUVILE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUIsT0FBTyxPQUFPLENBQ1YsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzFELE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQzNFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyw4QkFBOEI7UUFDOUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQW1CLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzVFLE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUM7SUFFTSxXQUFXLENBQUMsSUFBdUI7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQXVCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFBO1lBQ25FLE9BQU8sWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbEM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEU7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQ2xDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUQ7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQzdCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRU0saUJBQWlCO1FBRXBCLHVCQUF1QjtRQUN2QixvRkFBb0Y7UUFDcEYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLGlCQUEwQjtRQUM1RCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUN4QyxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUU7Z0JBQzFCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUM5QixVQUFVLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQzthQUMvRDtTQUNKO1FBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLFdBQVc7UUFDZixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFcEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUN4QyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO2dCQUNuQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUU7b0JBQzFCLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRTt3QkFDekIsMENBQTBDO3dCQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjt5QkFDSSxJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7d0JBQzNDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ2xCO2lCQUNKO3FCQUNJO29CQUNELFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDOUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDaEYsT0FBTyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDOUUsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxVQUFVLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO3dCQUN0QyxPQUFPLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjtpQkFDSjthQUNKO2lCQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Z0JBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNyRixVQUFVLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO2lCQUN0QzthQUNKO2lCQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7Z0JBQzFDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUN2RixVQUFVLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO2lCQUN0QzthQUNKO1NBQ0o7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMxRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUF1QixFQUFFLGlCQUEwQjtRQUNyRSxJQUFJO1lBQ0EsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xCLE1BQU0seUJBQXlCLENBQUE7YUFDbEM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO2FBQ2hDO1lBRUQsK0NBQStDO1lBQy9DLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDL0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFckcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7WUFFOUMsNEZBQTRGO1lBQzVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBR25FLDZDQUE2QztZQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekUsSUFBSSxpQkFBaUIsRUFBRTtnQkFDbkIsaUNBQWlDO2dCQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUYsbURBQW1EO2dCQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDMUU7aUJBQ0k7Z0JBQ0QsMENBQTBDO2dCQUMxQyxLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtvQkFDeEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDbkQ7YUFDSjtTQUNKO1FBQ0QsT0FBTyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO2dCQUNPO1lBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBRU0sVUFBVSxDQUFDLElBQXVCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUs7b0JBQzFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRTtvQkFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzlCO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2hCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDO1FBQ2pELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFFbkMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dCQUUvQixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2xDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUM5QjthQUNKO1lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDL0M7WUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMvQztZQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7YUFDMUI7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUN4QjtZQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRTt3QkFDN0IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7cUJBQ3BCO3lCQUFNO3dCQUNILENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO3FCQUNyQjtnQkFDTCxDQUFDLENBQUMsQ0FBQTthQUNMO1NBQ0o7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDbEMsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNmLEtBQUssYUFBYTtvQkFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7d0JBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBRW5ELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTs0QkFDcEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7eUJBQzFFO3FCQUNKO29CQUNELE1BQU07Z0JBQ1YsS0FBSyxXQUFXO29CQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUNoRixNQUFNO2dCQUNWLEtBQUssYUFBYTtvQkFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUMxRCxNQUFNO2dCQUNWLEtBQUssUUFBUTtvQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xELE1BQU07Z0JBQ1YsS0FBSyxNQUFNO29CQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0MsTUFBTTtnQkFDVixLQUFLLE9BQU87b0JBQ1IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0RCxNQUFNO2FBQ2I7U0FDSjtJQUNMLENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sS0FBSztRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDWCxRQUFRLEdBQUcsSUFBSSxDQUFBO2FBQ2xCO1NBQ0o7UUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNWLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQyxPQUFPO1NBQ1Y7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQyx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsMkNBQTJDO1FBQzNDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRTtnQkFDN0IsOEJBQThCO2dCQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVsRCx5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBYSxFQUFFLENBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRztTQUNKO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDcEIsK0VBQStFO2dCQUMvRSxxRUFBcUU7Z0JBQ3JFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3BFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUN6QjthQUNKO2lCQUFNO2dCQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1NBQ0o7UUFFRCxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsSUFBSSxZQUFZLEVBQUU7WUFDZCxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN2RDtJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVsQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2xDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDZixLQUFLLGFBQWE7b0JBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO3dCQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVTs2QkFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzs2QkFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUVwQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7NEJBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO3lCQUNqQztxQkFDSjtvQkFDRCxNQUFNO2dCQUNWLEtBQUssV0FBVztvQkFDWixJQUNJLElBQUksQ0FBQyxTQUFTO3dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSzt3QkFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQ3BCO3dCQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztxQkFDckM7b0JBQ0QsTUFBTTtnQkFDVixLQUFLLGFBQWE7b0JBQ2QsSUFDSSxJQUFJLENBQUMsV0FBVzt3QkFDaEIsT0FBTyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksS0FBSyxRQUFRO3dCQUMzQyxPQUFPLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLFFBQVEsRUFDM0M7d0JBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO3FCQUN2QztvQkFDRCxNQUFNO2dCQUNWLEtBQUssUUFBUTtvQkFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO29CQUN6QyxNQUFNO2dCQUNWLEtBQUssTUFBTTtvQkFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7d0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO3FCQUNoQztvQkFDRCxNQUFNO2dCQUNWLEtBQUssT0FBTztvQkFDUixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDakUsTUFBTTthQUNiO1NBQ0o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sSUFBSTtRQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWEsRUFBRSxJQUF1QjtRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQWdCLEVBQUUsVUFBNkI7UUFFL0QsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO1lBQzFCLDJDQUEyQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksU0FBUyxFQUFFO2dCQUNYLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNwQztpQkFDSTtnQkFDRCxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNwQztZQUNELG9CQUFvQjtZQUNwQixVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hFO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3hCLE9BQU87YUFDVjtZQUNELFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25DLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO29CQUNwQixPQUFNO2lCQUNUO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO3FCQUN2QztpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU0sTUFBTTtRQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFTSxlQUFlLENBQUMsSUFBdUI7UUFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUM3QixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFO2dCQUNySSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO2dCQUN0RyxPQUFPLEtBQUssQ0FBQzthQUNoQjtTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0csSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztnQkFDM0YsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVNLGVBQWU7UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQTRCLENBQUM7UUFDdEUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFFeEMsNkJBQTZCO1FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLGtCQUFrQixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUMxRTthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxJQUFJLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7U0FDM0I7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztTQUM1QjtRQUVELDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDekUsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUMxRTthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQztTQUN4QzthQUFNO1lBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUM3RSxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDM0QsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQy9FLE9BQU8sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMzRCxDQUFDO0lBRU0sMEJBQTBCO1FBQzdCLE9BQU87WUFDSDtnQkFDSSxJQUFJLEVBQUUsT0FBTztnQkFDYixTQUFTLEVBQUU7b0JBQ1AsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3ZDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO2lCQUN0QzthQUNKO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFNBQVMsRUFBRTtvQkFDUCxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUMzRCxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO2lCQUMxRDthQUNKO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFNBQVMsRUFBRTtvQkFDUCxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtvQkFDeEMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7aUJBQ3ZDO2FBQ0o7WUFDRDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsU0FBUyxFQUFFO29CQUNQLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQzVELEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7aUJBQzNEO2FBQ0o7WUFDRDtnQkFDSSxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsU0FBUyxFQUFFO29CQUNQLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUN6QyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRTtpQkFDeEM7YUFDSjtZQUNEO2dCQUNJLElBQUksRUFBRSxZQUFZO2dCQUNsQixTQUFTLEVBQUU7b0JBQ1AsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRTtvQkFDOUQsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRTtpQkFDN0Q7YUFDSjtTQUNKLENBQUE7SUFDTCxDQUFDO0lBRU0sMEJBQTBCLENBQUMsSUFBSSxFQUFFLE1BQU07UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRU0sMEJBQTBCLENBQUMsSUFBSTtRQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUN2RCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBSTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekU7SUFDTCxDQUFDOztrSEF4dEJRLG9CQUFvQjtzR0FBcEIsb0JBQW9CLG00QkNkakMsK2pkQStPQTs0RkRqT2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLFlBQVk7MEVBTWIsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFFRSxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUUsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQTBCcUMsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVNLGlCQUFpQjtzQkFBL0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQStDN0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVCNUMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVekMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVekMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtQnhDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlLCBGaWx0ZXJzQ29uZmlnLCBGaWx0ZXJzQ29uZmlnSXRlbSwgTXVsdGlTZWxlY3RJdGVtIH0gZnJvbSAnLi9maWx0ZXJzQ29uZmlnJztcbmltcG9ydCB1bmlxQnkgZnJvbSAnbG9kYXNoLnVuaXFieSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xuaW1wb3J0IHsgWmVuZHVTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtYm94L3plbmR1LXNlYXJjaC1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IERBVEVQSUNLRVJfUE9TSVRJT04gfSBmcm9tICcuLi9kYXRlcGlja2VyL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSBcIi4vZGF0ZVJhbmdlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnemVuLWZpbHRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vemVuZHUtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29uZmlnOiBGaWx0ZXJzQ29uZmlnID0geyBpdGVtczogW10gfTtcblxuICAgIEBJbnB1dCgpIGZpbHRlcjogb2JqZWN0O1xuXG4gICAgQElucHV0KCkgcG9zaXRpb24gPSAncmlnaHQnO1xuXG4gICAgQElucHV0KCkgcmVzZXRCZWhhdmlvcjogXCJzZXRfYWxsXCIgfCBcImNsZWFyXCIgPSAnY2xlYXInO1xuXG4gICAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuXG4gICAgQElucHV0KCkgaXNWaXNpYmxlID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgaXNWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQElucHV0KCkgY3VzdG9tVHJpZ2dlciA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaW1hZ2VVcmw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBzaG93T3B0aW9uczogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGN1c3RvbU9wdGlvbnM6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHdyYXBwZXJCb2R5Q2xhc3M6IHN0cmluZztcblxuICAgIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgICBwdWJsaWMgaXNBcHBsaWVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGxhc3RBcHBsaWVkRmlsdGVyOiBhbnkgPSB7fTtcblxuICAgIHByaXZhdGUgcmVzZXRlZEZpbHRlcjogYW55O1xuXG4gICAgcHVibGljIG1lbnVMZWZ0ID0gXCIwcHhcIjtcblxuICAgIHB1YmxpYyBtZW51UmlnaHQgPSBcIjBweFwiO1xuXG4gICAgcHVibGljIG1lbnVUb3AgPSBcIjBweFwiO1xuXG4gICAgcHVibGljIG1lbnVCb3R0b20gPSBcIjBweFwiO1xuXG4gICAgcHVibGljIHNob3dOb0ZpbHRlclJlc3VsdDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW11cblxuICAgIHB1YmxpYyBkYXRlcGlja2VyUG9zaXRpb24gPSBEQVRFUElDS0VSX1BPU0lUSU9OO1xuXG4gICAgcHVibGljIHNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoQm94JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaEJveDogWmVuZHVTZWFyY2hCb3hDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdtYWluQ29tcG9uZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIF9jb21wb25lbnRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmNvbmZpZyAmJiBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUpIHtcblxuICAgICAgICAgICAgLy8gaW5pdCB2YWx1ZXNcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhU291cmNlID0gaXRlbS5kYXRhU291cmNlID8gdGhpcy5leHRyYWN0VW5pcXVlRGF0YVNvdXJjZShpdGVtLmRhdGFTb3VyY2UpIDogW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdkYXRlUmFuZ2UnICYmICFpdGVtLmRhdGVSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGluaXQgZGF0ZSByYW5nZSBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnNob3dEYXRlUmFuZ2VPcHRpb25zICYmICFpdGVtLmRhdGVSYW5nZU9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlUmFuZ2VPcHRpb25zID0gdGhpcy5nZXREZWZhdWx0RGF0ZVJhbmdlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdudW1iZXJSYW5nZScgJiYgIWl0ZW0ubnVtYmVyUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5udW1iZXJSYW5nZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS5zaG93VGltZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2hvd1RpbWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuXG4gICAgICAgICAgICB0aGlzLnJlc2V0ZWRGaWx0ZXIgPSB0aGlzLmdldEZpbHRlck9iamVjdCgpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLmdldEZpbHRlck9iamVjdCgpO1xuICAgICAgICAgICAgdGhpcy5sYXN0QXBwbGllZEZpbHRlciA9IFV0aWwuY2xvbmUodGhpcy5maWx0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlsdGVyICYmIGNoYW5nZXMuZmlsdGVyLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0QXBwbGllZEZpbHRlciA9IFV0aWwuY2xvbmUoY2hhbmdlcy5maWx0ZXIuY3VycmVudFZhbHVlKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVBcHBsaWVkU3RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmlzVmlzaWJsZSAmJiBjaGFuZ2VzLmlzVmlzaWJsZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBvdXRzaWRlSGFuZGxpbmcoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgLy8gZWxlbWVudCBub3QgaW4gdGhlIERPTVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGlkZSB0aGUgbWVudSBmb3Igb3V0c2lkZSBjbGlja1xuICAgICAgICB0aGlzLmhpZGUoKTtcblxuICAgICAgICAvLyByZXN0b3JlIHZhbHVlc1xuICAgICAgICB0aGlzLnJlc3RvcmVQcmV2aW91c0FwcGxpZWQoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICB3aW5kb3dTaXplSGFuZGxpbmcoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gICAgd2luZG93U2Nyb2xsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzp3aGVlbCcsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlTW91c2VTY3JvbGwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSAmJiAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYnV0dG9uLXN0cm9rZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHRoaXMucmVzdG9yZVByZXZpb3VzQXBwbGllZCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBvbldpbmRvd0tleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnUGFnZVVwJyB8fCBldmVudC5rZXkgPT09ICdQYWdlRG93bicgfHwgZXZlbnQua2V5ID09PSAnSG9tZScgfHwgZXZlbnQua2V5ID09PSAnRW5kJykge1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpICYmICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tc3Ryb2tlZCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVQcmV2aW91c0FwcGxpZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c1NlYXJjaEJveCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hCb3guZG9Gb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc01lbnVJc1Zpc2libGUoaXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0uaXNMYXp5TG9hZGluZykge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaXNMb2FkaW5nTm93IHx8IGl0ZW0uY2FuTG9hZE1vcmUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZmlsdGVyZWREYXRhU291cmNlPy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgJiYgdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdFVuaXF1ZURhdGFTb3VyY2UoXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICAgICAgbmFtZTogc3RyaW5nIHwgbnVtYmVyXG4gICAgICAgIH1bXVxuICAgICk6IE11bHRpU2VsZWN0SXRlbVtdIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhcnJheS5maWx0ZXIoZWwgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICAgICAgICAgICAgdHlwZW9mIGVsLmlkID09PSAnbnVtYmVyJyA/IHR5cGVvZiBlbC5pZCAhPT0gdW5kZWZpbmVkIDogZWwuaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGVsLm5hbWUgPT09ICdudW1iZXInID8gdHlwZW9mIGVsLm5hbWUgIT09IHVuZGVmaW5lZCA6IGVsLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB1bmlxSXRlbXMgPSB1bmlxQnkoaXRlbXMsIChlbCkgPT4gZWwuaWQpO1xuICAgICAgICAvLyBhZGQgaW5kZXggdG8gZWFjaCB1bmlxSXRlbXNcbiAgICAgICAgdW5pcUl0ZW1zLmZvckVhY2goKGVsOiBNdWx0aVNlbGVjdEl0ZW0sIGluZGV4OiBudW1iZXIpID0+IGVsLmluZGV4ID0gaW5kZXgpO1xuICAgICAgICByZXR1cm4gdW5pcUl0ZW1zXG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0QWxsKGl0ZW06IEZpbHRlcnNDb25maWdJdGVtKSB7XG4gICAgICAgIGl0ZW0uZGF0YVNvdXJjZS5mb3JFYWNoKGQgPT4gZC5jaGVja2VkID0gaXRlbS5pc1NlbGVjdGVkQWxsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNJdGVtQWN0aXZlKGl0ZW06IEZpbHRlcnNDb25maWdJdGVtKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IGl0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoZWwgPT4gZWwuY2hlY2tlZCk7XG4gICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWRBbGwgPSBjaGVja2VkSXRlbXMubGVuZ3RoID09PSBpdGVtLmRhdGFTb3VyY2UubGVuZ3RoXG4gICAgICAgICAgICByZXR1cm4gY2hlY2tlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5yYWRpb09wdGlvbnMuc29tZShybyA9PiByby5zZWxlY3RlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnbnVtYmVyUmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLm51bWJlclJhbmdlLmZyb20gfHwgaXRlbS5udW1iZXJSYW5nZS50byk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnZGF0ZVJhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXRlbS5kYXRlUmFuZ2Uuc3RhcnQgfHwgaXRlbS5kYXRlUmFuZ2UuZW5kKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXRlbS5kYXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2hUZXh0Q2hhbmdlZCgpIHtcblxuICAgICAgICAvLyBydW4gdGhlIGxhenkgbG9hZGluZ1xuICAgICAgICAvLyB0aGUgZmlsdGVySXRlbXMgY2FsbGVkIGZyb20gb25DaGFuZ2VzLCBzbyBjYWxsIGxhenkgbG9hZGluZyBvbmx5IG9uIHNlYXJjaCBjaGFuZ2VcbiAgICAgICAgdGhpcy5yZXNldExhenlMb2FkaW5nU291cmNlcyhmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzZXRMYXp5TG9hZGluZ1NvdXJjZXMoc2hvd1NlbGVjdGVkT25Ub3A6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb25maWdJdGVtIG9mIHRoaXMuY29uZmlnLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnSXRlbS5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnSXRlbS5jYW5Mb2FkTW9yZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnSXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0cy5wdXNoKHRoaXMubG9hZE1vcmUoY29uZmlnSXRlbSwgc2hvd1NlbGVjdGVkT25Ub3ApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlcXVlc3RzKTtcblxuICAgICAgICAvLyBmaWx0ZXIgbm9uLWxhenkgbG9hZGluZyBpdGVtc1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJJdGVtcygpIHtcbiAgICAgICAgbGV0IGhhc0RhdGEgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZ0l0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdJdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnSXRlbS5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdJdGVtLmlzTG9hZGluZ05vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBhcyBkYXRhIGF2YWlsYWJsZSBpbiBsb2FkaW5nIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25maWdJdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWdJdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IGNvbmZpZ0l0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlcGFyZWROYW1lID0gdHlwZW9mIGVsLm5hbWUgPT09ICdudW1iZXInID8gZWwubmFtZS50b1N0cmluZygpIDogZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVwYXJlZE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdJdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWdJdGVtLnR5cGUgPT09ICdkYXRlUmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAmJiAhQm9vbGVhbihjb25maWdJdGVtLmRhdGVSYW5nZS5zdGFydCB8fCBjb25maWdJdGVtLmRhdGVSYW5nZS5lbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWdJdGVtLnR5cGUgPT09ICdudW1iZXJSYW5nZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICYmICFCb29sZWFuKGNvbmZpZ0l0ZW0ubnVtYmVyUmFuZ2UuZnJvbSB8fCBjb25maWdJdGVtLm51bWJlclJhbmdlLnRvKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWdJdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd05vRmlsdGVyUmVzdWx0ID0gdGhpcy5zZWFyY2hUZXh0ICYmICFoYXNEYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkTW9yZShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSwgc2hvd1NlbGVjdGVkT25Ub3A6IGJvb2xlYW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGl0ZW0uaXNMb2FkaW5nTm93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghaXRlbS5sYXp5TG9hZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgYGxvYWRlciBpcyBub3QgYXZhaWxhYmxlYFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uZmlsdGVyZWREYXRhU291cmNlID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvYWQgZmlyc3QgMTAgcmVjb3JkcyBmb3IgdGhlIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICBjb25zdCBsaW1pdCA9IChpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5sZW5ndGggPT0gMCkgPyAxMCA6IDEwMDtcbiAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gYXdhaXQgaXRlbS5sYXp5TG9hZGVyKHRoaXMuc2VhcmNoVGV4dCB8fCBcIlwiLCBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5sZW5ndGgsIGxpbWl0KTtcblxuICAgICAgICAgICAgaXRlbS5jYW5Mb2FkTW9yZSA9IChuZXdJdGVtcy5sZW5ndGggPT0gbGltaXQpO1xuXG4gICAgICAgICAgICAvLyB0aGUgZmlsdGVyZWREYXRhU291cmNlIGNvbnRhaW5zIHRoZSBpdGVtcyB0aGF0IGlzIHZpc2lsaWJsZSB0byB1c2VyIGF0IHRoZSBjdXJyZW50IG1vbWVudFxuICAgICAgICAgICAgaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgPSBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5jb25jYXQobmV3SXRlbXMpO1xuXG5cbiAgICAgICAgICAgIC8vIHRoZSBkYXRhU291cmNlIGNvbnRhaW5zIHRoZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZElkcyA9IGl0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoaSA9PiBpLmNoZWNrZWQpLm1hcChpID0+IGkuaWQpO1xuXG4gICAgICAgICAgICBpZiAoc2hvd1NlbGVjdGVkT25Ub3ApIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGNoZWNrZWQgaXRlbXMgZmlyc3RcbiAgICAgICAgICAgICAgICBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IGl0ZW0uZmlsdGVyZWREYXRhU291cmNlLmZpbHRlcihpID0+ICFjaGVja2VkSWRzLmluY2x1ZGVzKGkuaWQpKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgYWxsIGNoZWNrZWQgaXRlbXMgdG8gdGhlIHRvcCAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkSXRlbXMgPSBpdGVtLmRhdGFTb3VyY2UuZmlsdGVyKGkgPT4gaS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IGNoZWNrZWRJdGVtcy5jb25jYXQoaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBjaGVja2VkIGJhc2VkIG9uIHRoZSBkYXRhU291cmNlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZHNJdGVtIG9mIGl0ZW0uZmlsdGVyZWREYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzSXRlbS5jaGVja2VkID0gY2hlY2tlZElkcy5pbmNsdWRlcyhkc0l0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpdGVtLmlzTG9hZGluZ05vdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUl0ZW0oaXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pIHtcbiAgICAgICAgaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkO1xuXG4gICAgICAgIGlmIChpdGVtLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2FuTG9hZE1vcmUgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgICAgICFpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vcmUoaXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRGaWx0ZXJzKCkge1xuICAgICAgICBsZXQgc2VsZWN0QWxsID0gdGhpcy5yZXNldEJlaGF2aW9yID09PSBcInNldF9hbGxcIjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZU9wdGlvbnMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWRBbGwgPSBzZWxlY3RBbGw7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRzSXRlbSBvZiBpdGVtLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZHNJdGVtLmNoZWNrZWQgPSBzZWxlY3RBbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5kYXRlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5udW1iZXJSYW5nZSkge1xuICAgICAgICAgICAgICAgIGl0ZW0ubnVtYmVyUmFuZ2UgPSB7IGZyb206IG51bGwsIHRvOiBudWxsIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmRhdGUpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnJhZGlvT3B0aW9ucy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5pZCA9PT0gaXRlbS5zZWxlY3RlZFJhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlzZWxlY3QnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5kYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmxhc3RBcHBsaWVkRmlsdGVyW2l0ZW0ua2V5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBkYXRhSXRlbSBvZiBpdGVtLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhSXRlbS5jaGVja2VkID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmluY2x1ZGVzKGRhdGFJdGVtLmlkKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZVJhbmdlID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV0gfHwgeyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlclJhbmdlJzpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5udW1iZXJSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZFJhZGlvID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcbiAgICAgICAgdGhpcy5yZXNldGVkRmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblxuICAgICAgICB0aGlzLnJlc2V0TGF6eUxvYWRpbmdTb3VyY2VzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHkoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaXRlcmF0b3Igb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1GbGFnID0gdGhpcy5vbkNoZWNrVmFsaWRpdHkoaXRlcmF0b3IpO1xuICAgICAgICAgICAgaWYgKCFpdGVtRmxhZykge1xuICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IFtdLCA1MDAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0QXBwbGllZEZpbHRlciA9IFV0aWwuY2xvbmUodGhpcy5maWx0ZXIpO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgYXBwbHkgc3RhdGVcbiAgICAgICAgdGhpcy51cGRhdGVBcHBsaWVkU3RhdGUoKTtcblxuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUFwcGxpZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5pc0FwcGxpZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gc2hvd2luZyBjaGVja2VkIGl0ZW1zIG9uIHRvcCBvZiB0aGUgbGlzdFxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICAvLyByZXNvcnQgZmlyc3QgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGFTb3VyY2Uuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IGJhc2VkIG9uIGNoZWNrZWQgaXRlbXMgYWdhaW5cbiAgICAgICAgICAgICAgICBpdGVtLmRhdGFTb3VyY2Uuc29ydCgoYTogRGF0YVNvdXJjZSwgYjogRGF0YVNvdXJjZSkgPT4gTnVtYmVyKGIuY2hlY2tlZCB8fCAwKSAtIE51bWJlcihhLmNoZWNrZWQgfHwgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNldGVkRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIHdhcyByZXNldCwgc28gY29tcGFyZSB0aGUgcmVzZXQgZmlsdGVyIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IGZpbHRlclxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdXNlciBjbGljayBvbiBSZXNldCBhbmQgVGhlbiBBcHBseSwgZmlsdGVyIG11c3QgdW5oaWdobGlnaHRlZFxuICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnJlc2V0ZWRGaWx0ZXIpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FwcGxpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0FwcGxpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3Rpb24tbWVudS1ib2R5Jyk7XG4gICAgICAgIGlmICh0aGlzLndyYXBwZXJCb2R5Q2xhc3MpIHtcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMud3JhcHBlckJvZHlDbGFzc31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcHBlckNsYXNzKSB7XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3Muc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnYXV0bycgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlck9iamVjdCgpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY29uZmlnLml0ZW1zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpc2VsZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGF0YVNvdXJjZSAmJiBpdGVtLmRhdGFTb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkSWRzID0gaXRlbS5kYXRhU291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpID0+IGkuY2hlY2tlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGkgPT4gaS5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2VkSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcltpdGVtLmtleV0gPSBjaGVja2VkSWRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZVJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZS5zdGFydCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlUmFuZ2UuZW5kXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlclJhbmdlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5udW1iZXJSYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm51bWJlclJhbmdlPy5mcm9tID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm51bWJlclJhbmdlPy50byA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJbaXRlbS5rZXldID0gaXRlbS5udW1iZXJSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJbaXRlbS5rZXldID0gaXRlbS5lbmFibGVkIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcltpdGVtLmtleV0gPSBpdGVtLnJhZGlvT3B0aW9ucy5maW5kKHJvID0+IHJvLnNlbGVjdGVkKT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcblxuICAgICAgICB0aGlzLmlzVmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmFkaW9DaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIGl0ZW06IEZpbHRlcnNDb25maWdJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0ucmFkaW9PcHRpb25zLmZvckVhY2gob3B0ID0+IG9wdC5zZWxlY3RlZCA9IG9wdC5pZCA9PT0gdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0NoYW5nZWQoaXRlbTogRGF0YVNvdXJjZSwgY29uZmlnSXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pOiB2b2lkIHtcblxuICAgICAgICBpZiAoY29uZmlnSXRlbS5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB0aGUgY2hlY2sgaXRlbXMgaW4gdGhlIGRhdGEgc291cmNlXG4gICAgICAgICAgICBjb25zdCBleGlzdEl0ZW0gPSBjb25maWdJdGVtLmRhdGFTb3VyY2UuZmluZChpID0+IGkuaWQgPT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RJdGVtLmNoZWNrZWQgPSBpdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25maWdJdGVtLmRhdGFTb3VyY2UucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGtlZXAgb25seSBjaGVja2VkXG4gICAgICAgICAgICBjb25maWdJdGVtLmRhdGFTb3VyY2UgPSBjb25maWdJdGVtLmRhdGFTb3VyY2UuZmlsdGVyKGQgPT4gZC5jaGVja2VkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnSXRlbS5kYXRhU291cmNlLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PSBkYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5pbmNsdWRlcyg8c3RyaW5nPmRhdGEuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0NoYW5nZWQoZGF0YSwgY29uZmlnSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gIXRoaXMuaXNWaXNpYmxlO1xuICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0TGF6eUxvYWRpbmdTb3VyY2VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tWYWxpZGl0eShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSkge1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnbnVtYmVyUmFuZ2UnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0ubnVtYmVyUmFuZ2UuZnJvbSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGl0ZW0ubnVtYmVyUmFuZ2UudG8gPT09ICdudW1iZXInICYmIGl0ZW0ubnVtYmVyUmFuZ2UuZnJvbSA+IGl0ZW0ubnVtYmVyUmFuZ2UudG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZS5wdXNoKGBJbnZhbGlkIE51bWJlciByYW5nZTogVGhlIE1pbiBudW1iZXIgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgTWF4IG51bWJlci5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmRhdGVSYW5nZS5zdGFydCAmJiBpdGVtLmRhdGVSYW5nZS5lbmQgJiYgbmV3IERhdGUoaXRlbS5kYXRlUmFuZ2Uuc3RhcnQpID4gbmV3IERhdGUoaXRlbS5kYXRlUmFuZ2UuZW5kKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlLnB1c2goYEludmFsaWQgRGF0ZSByYW5nZTogVGhlIFN0YXJ0IGRhdGUgY2Fubm90IGJlIGFmdGVyIHRoZSBFbmQgZGF0ZS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUGxhY2VtZW50KCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcmVjdC5yaWdodDtcbiAgICAgICAgY29uc3QgdG9wID0gcmVjdC50b3A7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcDtcblxuICAgICAgICAvL1VwZGF0ZSBsZWZ0LXJpZ2h0IHBvc2l0aW9uIFxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcImF1dG9cIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxQb3NpdGlvbiA9IHRoaXMuZ2V0SG9yaXpvbnRhbFBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1lbnVSaWdodCA9IGhvcml6b250YWxQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyBgJHt3aW5kb3cuaW5uZXJXaWR0aCAtIHJpZ2h0fXB4YCA6IFwidW5zZXRcIjtcbiAgICAgICAgICAgIHRoaXMubWVudUxlZnQgPSBob3Jpem9udGFsUG9zaXRpb24gPT09IFwicmlnaHRcIiA/IGAke2xlZnR9cHhgIDogXCJ1bnNldFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9zaXRpb24uaW5jbHVkZXMoXCJsZWZ0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVSaWdodCA9IGAke3dpbmRvdy5pbm5lcldpZHRoIC0gcmlnaHR9cHhgO1xuICAgICAgICAgICAgdGhpcy5tZW51TGVmdCA9IFwidW5zZXRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVudUxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgICAgIHRoaXMubWVudVJpZ2h0ID0gXCJ1bnNldFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9VcGRhdGUgdG9wLWJvdHRvbSBwb3NpdGlvbiBcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24uaW5jbHVkZXMoXCJhdXRvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFBvc2l0aW9uID0gdGhpcy5nZXRWZXJ0aWNhbFBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1lbnVUb3AgPSB2ZXJ0aWNhbFBvc2l0aW9uID09PSBcImJvdHRvbVwiID8gYCR7dG9wICsgNDJ9cHhgIDogXCJ1bnNldFwiO1xuICAgICAgICAgICAgdGhpcy5tZW51Qm90dG9tID0gdmVydGljYWxQb3NpdGlvbiA9PT0gXCJ0b3BcIiA/IGAke2JvdHRvbX1weGAgOiBcInVuc2V0XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcInRvcFwiKSkge1xuICAgICAgICAgICAgdGhpcy5tZW51VG9wID0gXCJ1bnNldFwiO1xuICAgICAgICAgICAgdGhpcy5tZW51Qm90dG9tID0gYCR7Ym90dG9tICsgMTB9cHhgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW51VG9wID0gYCR7dG9wICsgNTV9cHhgO1xuICAgICAgICAgICAgdGhpcy5tZW51Qm90dG9tID0gXCJ1bnNldFwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWZXJ0aWNhbFBvc2l0aW9uKCk6IFwiYm90dG9tXCIgfCBcInRvcFwiIHtcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5fY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgcmV0dXJuIHRvcCA+IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgPyBcInRvcFwiIDogXCJib3R0b21cIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvcml6b250YWxQb3NpdGlvbigpOiBcInJpZ2h0XCIgfCBcImxlZnRcIiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgcmV0dXJuIGxlZnQgPiB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgPyBcImxlZnRcIiA6IFwicmlnaHRcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdERhdGVSYW5nZU9wdGlvbnMoKTogeyBuYW1lOiBzdHJpbmcsIGRhdGVSYW5nZTogRGF0ZVJhbmdlIH1bXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1RvZGF5JyxcbiAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIikudG9EYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbW9tZW50KCkuZW5kT2YoXCJkYXlcIikudG9EYXRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdZZXN0ZXJkYXknLFxuICAgICAgICAgICAgICAgIGRhdGVSYW5nZToge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheXMnKS5zdGFydE9mKFwiZGF5XCIpLnRvRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykuZW5kT2YoXCJkYXlcIikudG9EYXRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUaGlzIFdlZWsnLFxuICAgICAgICAgICAgICAgIGRhdGVSYW5nZToge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbW9tZW50KCkuc3RhcnRPZignd2VlaycpLnRvRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG1vbWVudCgpLmVuZE9mKFwid2Vla1wiKS50b0RhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0xhc3QgV2VlaycsXG4gICAgICAgICAgICAgICAgZGF0ZVJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpLnN0YXJ0T2YoJ3dlZWsnKS50b0RhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpLmVuZE9mKCd3ZWVrJykudG9EYXRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUaGlzIE1vbnRoJyxcbiAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG1vbWVudCgpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbW9tZW50KCkuZW5kT2YoXCJtb250aFwiKS50b0RhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0xhc3QgTW9udGgnLFxuICAgICAgICAgICAgICAgIGRhdGVSYW5nZToge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbW9tZW50KCkuc3VidHJhY3QoMSwgJ21vbnRoJykuc3RhcnRPZignbW9udGgnKS50b0RhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBtb21lbnQoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5lbmRPZignbW9udGgnKS50b0RhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVEYXRlUmFuZ2VPcHRpb25DbGljayhpdGVtLCBvcHRpb24pIHtcbiAgICAgICAgaXRlbS5kYXRlUmFuZ2UgPSBvcHRpb24uZGF0ZVJhbmdlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPSBvcHRpb24ubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlQ3VzdG9tRGF0ZVJhbmdlQ2xpY2soaXRlbSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPSBcIkN1c3RvbVwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVFbmREYXRlQ2hhbmdlKGl0ZW0pIHtcbiAgICAgICAgaWYgKCFpdGVtLnNob3dUaW1lKSB7XG4gICAgICAgICAgICBpdGVtLmRhdGVSYW5nZS5lbmQgPSBtb21lbnQoaXRlbS5kYXRlUmFuZ2UuZW5kKS5lbmRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVycy1jb21wb25lbnRcIlxuICAgICAjbWFpbkNvbXBvbmVudFxuICAgICBjbGljay1vdXQ9XCJpc1Zpc2libGUgJiYgaGlkZSgpXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVRyaWdnZXJcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZmlsdGVyIHt7aXNBcHBsaWVkID8gJ2FwcGxpZWQnIDogJyd9fVwiPlxuICAgICAgICAgICAgPHplbi1pY29uIFtzcmNdPVwiaW1hZ2VVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW1hZ2VVcmxcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmaWx0ZXItaWNvbiBtYXRlcmlhbC1pY29uc1wiXG4gICAgICAgICAgICAgICAqbmdJZj1cIiFpbWFnZVVybFwiPmZpbHRlcl9saXN0PC9pPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiY3VzdG9tVHJpZ2dlclwiPjwvbmctY29udGVudD5cblxuICAgIDxkaXYgW2hpZGRlbl09XCIhaXNWaXNpYmxlXCJcbiAgICAgICAgIGNsYXNzPVwiYWN0aW9uLW1lbnUgbWVudS1jb250ZW50XCJcbiAgICAgICAgIFtjbGFzcy5jdXN0b21UcmlnZ2VyXT1cImN1c3RvbVRyaWdnZXJcIlxuICAgICAgICAgW25nU3R5bGVdPVwieyAnbGVmdCc6IG1lbnVMZWZ0LCAncmlnaHQnOiBtZW51UmlnaHQsICd0b3AnOiBtZW51VG9wLCAnYm90dG9tJzogbWVudUJvdHRvbSAgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUtaGVhZGVyXCI+XG4gICAgICAgICAgICA8emVuLXNlYXJjaC1ib3ggWyh0ZXh0KV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2VhcmNoQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRleHRDaGFuZ2UpPVwic2VhcmNoVGV4dENoYW5nZWQoKVwiPjwvemVuLXNlYXJjaC1ib3g+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1ib2R5IGl0ZW1zLXdyYXBwZXJcIlxuICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7e3dyYXBwZXJCb2R5Q2xhc3N9fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tc2dcIj57e2l0ZW0gfCB0cmFuc2xhdGUgfX08L2xpPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29uZmlnLml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTWVudUlzVmlzaWJsZShpdGVtKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRGl2aWRlciBiZXR3ZWVuIHR3byBmaWx0ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkaXZpZGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmaWx0ZXItZGl2aWRlclwiPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBCb29sZWFuIHRvZ2dsZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ3RvZ2dsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW0gdG9nZ2xlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2l0ZW0udGl0bGUgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHplbi10b2dnbGUtc2xpZGUgWyhlbmFibGVkKV09XCJpdGVtLmVuYWJsZWRcIj48L3plbi10b2dnbGUtc2xpZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24taXRlbSBleHBhbmRlci1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSAhPSAndG9nZ2xlJyAmJiBpdGVtLnR5cGUgIT0gJ2RpdmlkZXInICYmICFpdGVtLmRpc2FibGVDb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNJdGVtQWN0aXZlKGl0ZW0pLCAnZXhwYW5kZWQnOiBpdGVtLmV4cGFuZGVkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBleHBhbmQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGl0ZW0uZXhwYW5kZWR9XCI+ZXhwYW5kX21vcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0udGl0bGUgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHBhbmRlZCB8fCBpdGVtLmRpc2FibGVDb2xsYXBzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiaXRlbS50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNdWx0aXNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbXVsdGlzZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGF6eSBsb2FkaW5nIG1vZGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmlzTGF6eUxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRzSXRlbSBvZiBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW0tY2hlY2tib3ggZHMtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggWyhjaGVja2VkKV09XCJkc0l0ZW0uY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZHNJdGVtLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cImNoZWNrQ2hhbmdlZChkc0l0ZW0sIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJkc0l0ZW0ubmFtZT8udG9TdHJpbmcoKSB8IHRyYW5zbGF0ZVwiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jYW5Mb2FkTW9yZSAmJiAhaXRlbS5pc0xvYWRpbmdOb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoaXRlbSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydMb2FkIE1vcmUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uaXNMb2FkaW5nTm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb2FkZXItbW9yZS1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1zcGlubmVyIHNpemU9XCJzbWFsbFwiPjwvemVuLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmlzTGF6eUxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBkcy1pdGVtIHNlbGVjdC1hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94ICpuZ0lmPVwiaXRlbS5kYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoY2hlY2tlZCldPVwiaXRlbS5pc1NlbGVjdGVkQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzSXRlbUFjdGl2ZShpdGVtKSAmJiAhaXRlbS5pc1NlbGVjdGVkQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IEFsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25TZWxlY3RBbGwoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkc0l0ZW0gb2YgaXRlbS5maWx0ZXJlZERhdGFTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pdGVtLWNoZWNrYm94IGRzLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94IFsoY2hlY2tlZCldPVwiZHNJdGVtLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ltYWdlVXJsXT1cImRzSXRlbS5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJjaGVja0NoYW5nZWQoZHNJdGVtLCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZHNJdGVtLm5hbWU/LnRvU3RyaW5nKCkgfCB0cmFuc2xhdGVcIj48L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGF0ZSByYW5nZSBwaWNrZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVSYW5nZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgT3B0aW9ucyBkYXRlIHJhbmdlIHZpZXcgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpdGVtLmRhdGVSYW5nZU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tcmFkaW8gZHMtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09IG9wdGlvbi5uYW1lfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLXJhZGlvIFt2YWx1ZV09XCJvcHRpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5uYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09IG9wdGlvbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaW9DaGFuZ2UpPVwiaGFuZGxlRGF0ZVJhbmdlT3B0aW9uQ2xpY2soaXRlbSwgb3B0aW9uKVwiPjwvemVuLXJhZGlvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tcmFkaW8gZHMtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zW2l0ZW0ua2V5XSA9PT0gJ0N1c3RvbSd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1yYWRpbyBbdmFsdWVdPVwiJ0N1c3RvbSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDdXN0b20nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID09PSAnQ3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaW9DaGFuZ2UpPVwiaGFuZGxlQ3VzdG9tRGF0ZVJhbmdlQ2xpY2soaXRlbSlcIj48L3plbi1yYWRpbz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09ICdDdXN0b20nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snRnJvbScgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1kYXRlcGlja2VyIGNsYXNzPVwid2lkdGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGRhdGUpXT1cIml0ZW0uZGF0ZVJhbmdlLnN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJpdGVtLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwiaXRlbS5jb25maWc/LnlQb3NpdGlvbiA/PyBkYXRlcGlja2VyUG9zaXRpb24uQVVUT1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50Q29udGFpbmVyXT1cIm1haW5Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHMtaXRlbSBmaWx0ZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj57eydUbycgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1kYXRlcGlja2VyIGNsYXNzPVwid2lkdGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGRhdGUpXT1cIml0ZW0uZGF0ZVJhbmdlLmVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeVBvc2l0aW9uXT1cIml0ZW0uY29uZmlnPy55UG9zaXRpb24gPz8gZGF0ZXBpY2tlclBvc2l0aW9uLkFVVE9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUNoYW5nZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50Q29udGFpbmVyXT1cIm1haW5Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEZWZhdWx0IGRhdGUgcmFuZ2UgdmlldyAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcy1pdGVtIGZpbHRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snRnJvbScgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJpdGVtLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lQb3NpdGlvbl09XCJpdGVtLmNvbmZpZz8ueVBvc2l0aW9uID8/IGRhdGVwaWNrZXJQb3NpdGlvbi5BVVRPXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmVudENvbnRhaW5lcl09XCJtYWluQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj57eydUbycgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwiaXRlbS5jb25maWc/LnlQb3NpdGlvbiA/PyBkYXRlcGlja2VyUG9zaXRpb24uQVVUT1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZUVuZERhdGVDaGFuZ2UoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50Q29udGFpbmVyXT1cIm1haW5Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3plbi1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEYXRlIHBpY2tlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxibFwiPnt7J0RhdGUnIHwgdHJhbnNsYXRlfX06PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGRhdGUpXT1cIml0ZW0uZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cIml0ZW0uc2hvd1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJlbnRDb250YWluZXJdPVwibWFpbkNvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE51bWJlciByYW5nZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyUmFuZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXJvdyBudW1iZXItcmFuZ2Utcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snTWluJyB8IHRyYW5zbGF0ZX19OjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibWF0ZXJpYWwtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5udW1iZXJSYW5nZS5mcm9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snTWF4JyB8IHRyYW5zbGF0ZX19OjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibWF0ZXJpYWwtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5udW1iZXJSYW5nZS50b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSYWRpbyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpdGVtLnJhZGlvT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taXRlbS1yYWRpbyBkcy1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IG9wdGlvbi5zZWxlY3RlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tcmFkaW8gW3ZhbHVlXT1cIm9wdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubmFtZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ltYWdlVXJsXT1cIm9wdGlvbi5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJvcHRpb24uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaW9DaGFuZ2UpPVwicmFkaW9DaGFuZ2VkKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+PC96ZW4tcmFkaW8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd05vRmlsdGVyUmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm8taXRlbVwiPnt7J05vIFJlc3VsdHMgRm91bmQnIHwgdHJhbnNsYXRlfX0uLjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWZvb3RlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIHt7J1Jlc2V0JyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFwcGx5KClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1mbGF0IGZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICB7eydBcHBseScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
673
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEksT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUVuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRL0QsTUFBTSxPQUFPLG9CQUFvQjtJQXdEN0I7UUF0RFMsV0FBTSxHQUFrQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUl0QyxhQUFRLEdBQUcsT0FBTyxDQUFDO1FBRW5CLGtCQUFhLEdBQXdCLE9BQU8sQ0FBQztRQUU1QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFM0MsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVqQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFZeEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQUk3QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFF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O2dCQUVFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFFRSxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBMEJxQyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRU0saUJBQWlCO3NCQUEvRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBK0M3QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBdUI1QyxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVV6QyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVV6QyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1CeEMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFTb3VyY2UsIEZpbHRlcnNDb25maWcsIEZpbHRlcnNDb25maWdJdGVtLCBNdWx0aVNlbGVjdEl0ZW0gfSBmcm9tICcuL2ZpbHRlcnNDb25maWcnO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gudW5pcWJ5JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBaZW5kdVNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1ib3gvemVuZHUtc2VhcmNoLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgREFURVBJQ0tFUl9QT1NJVElPTiB9IGZyb20gJy4uL2RhdGVwaWNrZXIvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tIFwiLi9kYXRlUmFuZ2VcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd6ZW4tZmlsdGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vemVuZHUtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi96ZW5kdS1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBaZW5kdUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgICBASW5wdXQoKSBjb25maWc6IEZpbHRlcnNDb25maWcgPSB7IGl0ZW1zOiBbXSB9O1xuXG4gICAgQElucHV0KCkgZmlsdGVyOiBvYmplY3Q7XG5cbiAgICBASW5wdXQoKSBwb3NpdGlvbiA9ICdyaWdodCc7XG5cbiAgICBASW5wdXQoKSByZXNldEJlaGF2aW9yOiBcInNldF9hbGxcIiB8IFwiY2xlYXJcIiA9ICdjbGVhcic7XG5cbiAgICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG5cbiAgICBASW5wdXQoKSBpc1Zpc2libGUgPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBpc1Zpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBASW5wdXQoKSBjdXN0b21UcmlnZ2VyID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBpbWFnZVVybDogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHNob3dPcHRpb25zOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgY3VzdG9tT3B0aW9uczogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgd3JhcHBlckJvZHlDbGFzczogc3RyaW5nO1xuXG4gICAgcHVibGljIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHB1YmxpYyBpc0FwcGxpZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgbGFzdEFwcGxpZWRGaWx0ZXI6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSByZXNldGVkRmlsdGVyOiBhbnk7XG5cbiAgICBwdWJsaWMgbWVudUxlZnQgPSBcIjBweFwiO1xuXG4gICAgcHVibGljIG1lbnVSaWdodCA9IFwiMHB4XCI7XG5cbiAgICBwdWJsaWMgbWVudVRvcCA9IFwiMHB4XCI7XG5cbiAgICBwdWJsaWMgbWVudUJvdHRvbSA9IFwiMHB4XCI7XG5cbiAgICBwdWJsaWMgc2hvd05vRmlsdGVyUmVzdWx0OiBib29sZWFuO1xuXG4gICAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nW10gPSBbXVxuXG4gICAgcHVibGljIGRhdGVwaWNrZXJQb3NpdGlvbiA9IERBVEVQSUNLRVJfUE9TSVRJT047XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hCb3gnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoQm94OiBaZW5kdVNlYXJjaEJveENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ21haW5Db21wb25lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgX2NvbXBvbmVudEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnICYmIGNoYW5nZXMuY29uZmlnLmN1cnJlbnRWYWx1ZSkge1xuXG4gICAgICAgICAgICAvLyBpbml0IHZhbHVlc1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY29uZmlnLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ211bHRpc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGFTb3VyY2UgPSBpdGVtLmRhdGFTb3VyY2UgPyB0aGlzLmV4dHJhY3RVbmlxdWVEYXRhU291cmNlKGl0ZW0uZGF0YVNvdXJjZSkgOiBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGVSYW5nZScgJiYgIWl0ZW0uZGF0ZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZVJhbmdlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaW5pdCBkYXRlIHJhbmdlIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2hvd0RhdGVSYW5nZU9wdGlvbnMgJiYgIWl0ZW0uZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZU9wdGlvbnMgPSB0aGlzLmdldERlZmF1bHREYXRlUmFuZ2VPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ251bWJlclJhbmdlJyAmJiAhaXRlbS5udW1iZXJSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLm51bWJlclJhbmdlID0ge307XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnNob3dUaW1lICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zaG93VGltZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG5cbiAgICAgICAgICAgIHRoaXMucmVzZXRlZEZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyT2JqZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyT2JqZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmxhc3RBcHBsaWVkRmlsdGVyID0gVXRpbC5jbG9uZSh0aGlzLmZpbHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5maWx0ZXIgJiYgY2hhbmdlcy5maWx0ZXIuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBcHBsaWVkRmlsdGVyID0gVXRpbC5jbG9uZShjaGFuZ2VzLmZpbHRlci5jdXJyZW50VmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFwcGxpZWRTdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaXNWaXNpYmxlICYmIGNoYW5nZXMuaXNWaXNpYmxlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIG91dHNpZGVIYW5kbGluZyhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICAvLyBlbGVtZW50IG5vdCBpbiB0aGUgRE9NXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoaWRlIHRoZSBtZW51IGZvciBvdXRzaWRlIGNsaWNrXG4gICAgICAgIHRoaXMuaGlkZSgpO1xuXG4gICAgICAgIC8vIHJlc3RvcmUgdmFsdWVzXG4gICAgICAgIHRoaXMucmVzdG9yZVByZXZpb3VzQXBwbGllZCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICAgIHdpbmRvd1NpemVIYW5kbGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgICB3aW5kb3dTY3JvbGwoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OndoZWVsJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVNb3VzZVNjcm9sbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpICYmICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tc3Ryb2tlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxuICAgIG9uV2luZG93S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdQYWdlVXAnIHx8IGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJyB8fCBldmVudC5rZXkgPT09ICdIb21lJyB8fCBldmVudC5rZXkgPT09ICdFbmQnKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkgJiYgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2J1dHRvbi1zdHJva2VkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZVByZXZpb3VzQXBwbGllZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzU2VhcmNoQm94KCkge1xuICAgICAgICB0aGlzLnNlYXJjaEJveC5kb0ZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTWVudUlzVmlzaWJsZShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSkge1xuICAgICAgICBpZiAoaXRlbS5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pc0xvYWRpbmdOb3cgfHwgaXRlbS5jYW5Mb2FkTW9yZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5maWx0ZXJlZERhdGFTb3VyY2U/Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSAmJiB0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgIGlmICghaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRyYWN0VW5pcXVlRGF0YVNvdXJjZShcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcgfCBudW1iZXJcbiAgICAgICAgfVtdXG4gICAgKTogTXVsdGlTZWxlY3RJdGVtW10ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGFycmF5LmZpbHRlcihlbCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgICAgICAgICAgICB0eXBlb2YgZWwuaWQgPT09ICdudW1iZXInID8gdHlwZW9mIGVsLmlkICE9PSB1bmRlZmluZWQgOiBlbC5pZCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZWwubmFtZSA9PT0gJ251bWJlcicgPyB0eXBlb2YgZWwubmFtZSAhPT0gdW5kZWZpbmVkIDogZWwubmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHVuaXFJdGVtcyA9IHVuaXFCeShpdGVtcywgKGVsKSA9PiBlbC5pZCk7XG4gICAgICAgIC8vIGFkZCBpbmRleCB0byBlYWNoIHVuaXFJdGVtc1xuICAgICAgICB1bmlxSXRlbXMuZm9yRWFjaCgoZWw6IE11bHRpU2VsZWN0SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gZWwuaW5kZXggPSBpbmRleCk7XG4gICAgICAgIHJldHVybiB1bmlxSXRlbXNcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3RBbGwoaXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pIHtcbiAgICAgICAgaXRlbS5kYXRhU291cmNlLmZvckVhY2goZCA9PiBkLmNoZWNrZWQgPSBpdGVtLmlzU2VsZWN0ZWRBbGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0l0ZW1BY3RpdmUoaXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ211bHRpc2VsZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEl0ZW1zID0gaXRlbS5kYXRhU291cmNlLmZpbHRlcihlbCA9PiBlbC5jaGVja2VkKTtcbiAgICAgICAgICAgIGl0ZW0uaXNTZWxlY3RlZEFsbCA9IGNoZWNrZWRJdGVtcy5sZW5ndGggPT09IGl0ZW0uZGF0YVNvdXJjZS5sZW5ndGhcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VkSXRlbXMubGVuZ3RoID4gMDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnJhZGlvT3B0aW9ucy5zb21lKHJvID0+IHJvLnNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdudW1iZXJSYW5nZScpIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGl0ZW0ubnVtYmVyUmFuZ2UuZnJvbSB8fCBpdGVtLm51bWJlclJhbmdlLnRvKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdkYXRlUmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLmRhdGVSYW5nZS5zdGFydCB8fCBpdGVtLmRhdGVSYW5nZS5lbmQpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLmRhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaFRleHRDaGFuZ2VkKCkge1xuXG4gICAgICAgIC8vIHJ1biB0aGUgbGF6eSBsb2FkaW5nXG4gICAgICAgIC8vIHRoZSBmaWx0ZXJJdGVtcyBjYWxsZWQgZnJvbSBvbkNoYW5nZXMsIHNvIGNhbGwgbGF6eSBsb2FkaW5nIG9ubHkgb24gc2VhcmNoIGNoYW5nZVxuICAgICAgICB0aGlzLnJlc2V0TGF6eUxvYWRpbmdTb3VyY2VzKGZhbHNlKTtcblxuICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldExhenlMb2FkaW5nU291cmNlcyhzaG93U2VsZWN0ZWRPblRvcDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByZXF1ZXN0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZ0l0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdJdGVtLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25maWdJdGVtLmNhbkxvYWRNb3JlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWdJdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RzLnB1c2godGhpcy5sb2FkTW9yZShjb25maWdJdGVtLCBzaG93U2VsZWN0ZWRPblRvcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVxdWVzdHMpO1xuXG4gICAgICAgIC8vIGZpbHRlciBub24tbGF6eSBsb2FkaW5nIGl0ZW1zXG4gICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckl0ZW1zKCkge1xuICAgICAgICBsZXQgaGFzRGF0YSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnSXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGNvbmZpZ0l0ZW0udHlwZSA9PT0gJ211bHRpc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdJdGVtLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ0l0ZW0uaXNMb2FkaW5nTm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIGRhdGEgYXZhaWxhYmxlIGluIGxvYWRpbmcgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlID0gY29uZmlnSXRlbS5kYXRhU291cmNlLmZpbHRlcihlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVwYXJlZE5hbWUgPSB0eXBlb2YgZWwubmFtZSA9PT0gJ251bWJlcicgPyBlbC5uYW1lLnRvU3RyaW5nKCkgOiBlbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXBhcmVkTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZ0l0ZW0udHlwZSA9PT0gJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICYmICFCb29sZWFuKGNvbmZpZ0l0ZW0uZGF0ZVJhbmdlLnN0YXJ0IHx8IGNvbmZpZ0l0ZW0uZGF0ZVJhbmdlLmVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnSXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZ0l0ZW0udHlwZSA9PT0gJ251bWJlclJhbmdlJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgJiYgIUJvb2xlYW4oY29uZmlnSXRlbS5udW1iZXJSYW5nZS5mcm9tIHx8IGNvbmZpZ0l0ZW0ubnVtYmVyUmFuZ2UudG8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93Tm9GaWx0ZXJSZXN1bHQgPSB0aGlzLnNlYXJjaFRleHQgJiYgIWhhc0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRNb3JlKGl0ZW06IEZpbHRlcnNDb25maWdJdGVtLCBzaG93U2VsZWN0ZWRPblRvcDogYm9vbGVhbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaXRlbS5pc0xvYWRpbmdOb3cgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFpdGVtLmxhenlMb2FkZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBgbG9hZGVyIGlzIG5vdCBhdmFpbGFibGVgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWl0ZW0uZmlsdGVyZWREYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9hZCBmaXJzdCAxMCByZWNvcmRzIGZvciB0aGUgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gKGl0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aCA9PSAwKSA/IDEwIDogMTAwO1xuICAgICAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBhd2FpdCBpdGVtLmxhenlMb2FkZXIoeyB0ZXh0OiB0aGlzLnNlYXJjaFRleHQgfHwgXCJcIiB9LCBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5sZW5ndGgsIGxpbWl0KTtcblxuICAgICAgICAgICAgaXRlbS5jYW5Mb2FkTW9yZSA9IChuZXdJdGVtcy5sZW5ndGggPT0gbGltaXQpO1xuXG4gICAgICAgICAgICAvLyB0aGUgZmlsdGVyZWREYXRhU291cmNlIGNvbnRhaW5zIHRoZSBpdGVtcyB0aGF0IGlzIHZpc2lsaWJsZSB0byB1c2VyIGF0IHRoZSBjdXJyZW50IG1vbWVudFxuICAgICAgICAgICAgaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgPSBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5jb25jYXQobmV3SXRlbXMpO1xuXG5cbiAgICAgICAgICAgIC8vIHRoZSBkYXRhU291cmNlIGNvbnRhaW5zIHRoZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZElkcyA9IGl0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoaSA9PiBpLmNoZWNrZWQpLm1hcChpID0+IGkuaWQpO1xuXG4gICAgICAgICAgICBpZiAoc2hvd1NlbGVjdGVkT25Ub3ApIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGNoZWNrZWQgaXRlbXMgZmlyc3RcbiAgICAgICAgICAgICAgICBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IGl0ZW0uZmlsdGVyZWREYXRhU291cmNlLmZpbHRlcihpID0+ICFjaGVja2VkSWRzLmluY2x1ZGVzKGkuaWQpKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgYWxsIGNoZWNrZWQgaXRlbXMgdG8gdGhlIHRvcCAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkSXRlbXMgPSBpdGVtLmRhdGFTb3VyY2UuZmlsdGVyKGkgPT4gaS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IGNoZWNrZWRJdGVtcy5jb25jYXQoaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBjaGVja2VkIGJhc2VkIG9uIHRoZSBkYXRhU291cmNlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZHNJdGVtIG9mIGl0ZW0uZmlsdGVyZWREYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzSXRlbS5jaGVja2VkID0gY2hlY2tlZElkcy5pbmNsdWRlcyhkc0l0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpdGVtLmlzTG9hZGluZ05vdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUl0ZW0oaXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pIHtcbiAgICAgICAgaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkO1xuXG4gICAgICAgIGlmIChpdGVtLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2FuTG9hZE1vcmUgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgICAgICFpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vcmUoaXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRGaWx0ZXJzKCkge1xuICAgICAgICBsZXQgc2VsZWN0QWxsID0gdGhpcy5yZXNldEJlaGF2aW9yID09PSBcInNldF9hbGxcIjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZU9wdGlvbnMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWRBbGwgPSBzZWxlY3RBbGw7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRzSXRlbSBvZiBpdGVtLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZHNJdGVtLmNoZWNrZWQgPSBzZWxlY3RBbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5kYXRlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5udW1iZXJSYW5nZSkge1xuICAgICAgICAgICAgICAgIGl0ZW0ubnVtYmVyUmFuZ2UgPSB7IGZyb206IG51bGwsIHRvOiBudWxsIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmRhdGUpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnJhZGlvT3B0aW9ucy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5pZCA9PT0gaXRlbS5zZWxlY3RlZFJhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlzZWxlY3QnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5kYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmxhc3RBcHBsaWVkRmlsdGVyW2l0ZW0ua2V5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBkYXRhSXRlbSBvZiBpdGVtLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhSXRlbS5jaGVja2VkID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmluY2x1ZGVzKGRhdGFJdGVtLmlkKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZVJhbmdlID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV0gfHwgeyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlclJhbmdlJzpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5udW1iZXJSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZFJhZGlvID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcbiAgICAgICAgdGhpcy5yZXNldGVkRmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblxuICAgICAgICB0aGlzLnJlc2V0TGF6eUxvYWRpbmdTb3VyY2VzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHkoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaXRlcmF0b3Igb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1GbGFnID0gdGhpcy5vbkNoZWNrVmFsaWRpdHkoaXRlcmF0b3IpO1xuICAgICAgICAgICAgaWYgKCFpdGVtRmxhZykge1xuICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IFtdLCA1MDAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0QXBwbGllZEZpbHRlciA9IFV0aWwuY2xvbmUodGhpcy5maWx0ZXIpO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgYXBwbHkgc3RhdGVcbiAgICAgICAgdGhpcy51cGRhdGVBcHBsaWVkU3RhdGUoKTtcblxuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUFwcGxpZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5pc0FwcGxpZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gc2hvd2luZyBjaGVja2VkIGl0ZW1zIG9uIHRvcCBvZiB0aGUgbGlzdFxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICAvLyByZXNvcnQgZmlyc3QgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGFTb3VyY2Uuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IGJhc2VkIG9uIGNoZWNrZWQgaXRlbXMgYWdhaW5cbiAgICAgICAgICAgICAgICBpdGVtLmRhdGFTb3VyY2Uuc29ydCgoYTogRGF0YVNvdXJjZSwgYjogRGF0YVNvdXJjZSkgPT4gTnVtYmVyKGIuY2hlY2tlZCB8fCAwKSAtIE51bWJlcihhLmNoZWNrZWQgfHwgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNldGVkRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIHdhcyByZXNldCwgc28gY29tcGFyZSB0aGUgcmVzZXQgZmlsdGVyIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IGZpbHRlclxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdXNlciBjbGljayBvbiBSZXNldCBhbmQgVGhlbiBBcHBseSwgZmlsdGVyIG11c3QgdW5oaWdobGlnaHRlZFxuICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnJlc2V0ZWRGaWx0ZXIpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FwcGxpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0FwcGxpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3Rpb24tbWVudS1ib2R5Jyk7XG4gICAgICAgIGlmICh0aGlzLndyYXBwZXJCb2R5Q2xhc3MpIHtcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMud3JhcHBlckJvZHlDbGFzc31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcHBlckNsYXNzKSB7XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3Muc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnYXV0bycgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlck9iamVjdCgpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY29uZmlnLml0ZW1zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpc2VsZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGF0YVNvdXJjZSAmJiBpdGVtLmRhdGFTb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkSWRzID0gaXRlbS5kYXRhU291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpID0+IGkuY2hlY2tlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGkgPT4gaS5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2VkSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcltpdGVtLmtleV0gPSBjaGVja2VkSWRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZVJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGVSYW5nZS5zdGFydCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlUmFuZ2UuZW5kXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlclJhbmdlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5udW1iZXJSYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm51bWJlclJhbmdlPy5mcm9tID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm51bWJlclJhbmdlPy50byA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJbaXRlbS5rZXldID0gaXRlbS5udW1iZXJSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJbaXRlbS5rZXldID0gaXRlbS5lbmFibGVkIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcltpdGVtLmtleV0gPSBpdGVtLnJhZGlvT3B0aW9ucy5maW5kKHJvID0+IHJvLnNlbGVjdGVkKT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcblxuICAgICAgICB0aGlzLmlzVmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmFkaW9DaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIGl0ZW06IEZpbHRlcnNDb25maWdJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0ucmFkaW9PcHRpb25zLmZvckVhY2gob3B0ID0+IG9wdC5zZWxlY3RlZCA9IG9wdC5pZCA9PT0gdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0NoYW5nZWQoaXRlbTogRGF0YVNvdXJjZSwgY29uZmlnSXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pOiB2b2lkIHtcblxuICAgICAgICBpZiAoY29uZmlnSXRlbS5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB0aGUgY2hlY2sgaXRlbXMgaW4gdGhlIGRhdGEgc291cmNlXG4gICAgICAgICAgICBjb25zdCBleGlzdEl0ZW0gPSBjb25maWdJdGVtLmRhdGFTb3VyY2UuZmluZChpID0+IGkuaWQgPT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RJdGVtLmNoZWNrZWQgPSBpdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25maWdJdGVtLmRhdGFTb3VyY2UucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGtlZXAgb25seSBjaGVja2VkXG4gICAgICAgICAgICBjb25maWdJdGVtLmRhdGFTb3VyY2UgPSBjb25maWdJdGVtLmRhdGFTb3VyY2UuZmlsdGVyKGQgPT4gZC5jaGVja2VkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnSXRlbS5kYXRhU291cmNlLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PSBkYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5pbmNsdWRlcyg8c3RyaW5nPmRhdGEuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0NoYW5nZWQoZGF0YSwgY29uZmlnSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gIXRoaXMuaXNWaXNpYmxlO1xuICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0TGF6eUxvYWRpbmdTb3VyY2VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tWYWxpZGl0eShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSkge1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnbnVtYmVyUmFuZ2UnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0ubnVtYmVyUmFuZ2UuZnJvbSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGl0ZW0ubnVtYmVyUmFuZ2UudG8gPT09ICdudW1iZXInICYmIGl0ZW0ubnVtYmVyUmFuZ2UuZnJvbSA+IGl0ZW0ubnVtYmVyUmFuZ2UudG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZS5wdXNoKGBJbnZhbGlkIE51bWJlciByYW5nZTogVGhlIE1pbiBudW1iZXIgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgTWF4IG51bWJlci5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmRhdGVSYW5nZS5zdGFydCAmJiBpdGVtLmRhdGVSYW5nZS5lbmQgJiYgbmV3IERhdGUoaXRlbS5kYXRlUmFuZ2Uuc3RhcnQpID4gbmV3IERhdGUoaXRlbS5kYXRlUmFuZ2UuZW5kKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlLnB1c2goYEludmFsaWQgRGF0ZSByYW5nZTogVGhlIFN0YXJ0IGRhdGUgY2Fubm90IGJlIGFmdGVyIHRoZSBFbmQgZGF0ZS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUGxhY2VtZW50KCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcmVjdC5yaWdodDtcbiAgICAgICAgY29uc3QgdG9wID0gcmVjdC50b3A7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcDtcblxuICAgICAgICAvL1VwZGF0ZSBsZWZ0LXJpZ2h0IHBvc2l0aW9uIFxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcImF1dG9cIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxQb3NpdGlvbiA9IHRoaXMuZ2V0SG9yaXpvbnRhbFBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1lbnVSaWdodCA9IGhvcml6b250YWxQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyBgJHt3aW5kb3cuaW5uZXJXaWR0aCAtIHJpZ2h0fXB4YCA6IFwidW5zZXRcIjtcbiAgICAgICAgICAgIHRoaXMubWVudUxlZnQgPSBob3Jpem9udGFsUG9zaXRpb24gPT09IFwicmlnaHRcIiA/IGAke2xlZnR9cHhgIDogXCJ1bnNldFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9zaXRpb24uaW5jbHVkZXMoXCJsZWZ0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVSaWdodCA9IGAke3dpbmRvdy5pbm5lcldpZHRoIC0gcmlnaHR9cHhgO1xuICAgICAgICAgICAgdGhpcy5tZW51TGVmdCA9IFwidW5zZXRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVudUxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgICAgIHRoaXMubWVudVJpZ2h0ID0gXCJ1bnNldFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9VcGRhdGUgdG9wLWJvdHRvbSBwb3NpdGlvbiBcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24uaW5jbHVkZXMoXCJhdXRvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFBvc2l0aW9uID0gdGhpcy5nZXRWZXJ0aWNhbFBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1lbnVUb3AgPSB2ZXJ0aWNhbFBvc2l0aW9uID09PSBcImJvdHRvbVwiID8gYCR7dG9wICsgNDJ9cHhgIDogXCJ1bnNldFwiO1xuICAgICAgICAgICAgdGhpcy5tZW51Qm90dG9tID0gdmVydGljYWxQb3NpdGlvbiA9PT0gXCJ0b3BcIiA/IGAke2JvdHRvbX1weGAgOiBcInVuc2V0XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcInRvcFwiKSkge1xuICAgICAgICAgICAgdGhpcy5tZW51VG9wID0gXCJ1bnNldFwiO1xuICAgICAgICAgICAgdGhpcy5tZW51Qm90dG9tID0gYCR7Ym90dG9tICsgMTB9cHhgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW51VG9wID0gYCR7dG9wICsgNTV9cHhgO1xuICAgICAgICAgICAgdGhpcy5tZW51Qm90dG9tID0gXCJ1bnNldFwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWZXJ0aWNhbFBvc2l0aW9uKCk6IFwiYm90dG9tXCIgfCBcInRvcFwiIHtcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5fY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgcmV0dXJuIHRvcCA+IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgPyBcInRvcFwiIDogXCJib3R0b21cIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvcml6b250YWxQb3NpdGlvbigpOiBcInJpZ2h0XCIgfCBcImxlZnRcIiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgcmV0dXJuIGxlZnQgPiB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgPyBcImxlZnRcIiA6IFwicmlnaHRcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdERhdGVSYW5nZU9wdGlvbnMoKTogeyBuYW1lOiBzdHJpbmcsIGRhdGVSYW5nZTogRGF0ZVJhbmdlIH1bXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1RvZGF5JyxcbiAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIikudG9EYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbW9tZW50KCkuZW5kT2YoXCJkYXlcIikudG9EYXRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdZZXN0ZXJkYXknLFxuICAgICAgICAgICAgICAgIGRhdGVSYW5nZToge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheXMnKS5zdGFydE9mKFwiZGF5XCIpLnRvRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykuZW5kT2YoXCJkYXlcIikudG9EYXRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUaGlzIFdlZWsnLFxuICAgICAgICAgICAgICAgIGRhdGVSYW5nZToge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbW9tZW50KCkuc3RhcnRPZignd2VlaycpLnRvRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG1vbWVudCgpLmVuZE9mKFwid2Vla1wiKS50b0RhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0xhc3QgV2VlaycsXG4gICAgICAgICAgICAgICAgZGF0ZVJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpLnN0YXJ0T2YoJ3dlZWsnKS50b0RhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpLmVuZE9mKCd3ZWVrJykudG9EYXRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUaGlzIE1vbnRoJyxcbiAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG1vbWVudCgpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbW9tZW50KCkuZW5kT2YoXCJtb250aFwiKS50b0RhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0xhc3QgTW9udGgnLFxuICAgICAgICAgICAgICAgIGRhdGVSYW5nZToge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbW9tZW50KCkuc3VidHJhY3QoMSwgJ21vbnRoJykuc3RhcnRPZignbW9udGgnKS50b0RhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBtb21lbnQoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5lbmRPZignbW9udGgnKS50b0RhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVEYXRlUmFuZ2VPcHRpb25DbGljayhpdGVtLCBvcHRpb24pIHtcbiAgICAgICAgaXRlbS5kYXRlUmFuZ2UgPSBvcHRpb24uZGF0ZVJhbmdlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPSBvcHRpb24ubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlQ3VzdG9tRGF0ZVJhbmdlQ2xpY2soaXRlbSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPSBcIkN1c3RvbVwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVFbmREYXRlQ2hhbmdlKGl0ZW0pIHtcbiAgICAgICAgaWYgKCFpdGVtLnNob3dUaW1lKSB7XG4gICAgICAgICAgICBpdGVtLmRhdGVSYW5nZS5lbmQgPSBtb21lbnQoaXRlbS5kYXRlUmFuZ2UuZW5kKS5lbmRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVycy1jb21wb25lbnRcIlxuICAgICAjbWFpbkNvbXBvbmVudFxuICAgICBjbGljay1vdXQ9XCJpc1Zpc2libGUgJiYgaGlkZSgpXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVRyaWdnZXJcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZmlsdGVyIHt7aXNBcHBsaWVkID8gJ2FwcGxpZWQnIDogJyd9fVwiPlxuICAgICAgICAgICAgPHplbi1pY29uIFtzcmNdPVwiaW1hZ2VVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW1hZ2VVcmxcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmaWx0ZXItaWNvbiBtYXRlcmlhbC1pY29uc1wiXG4gICAgICAgICAgICAgICAqbmdJZj1cIiFpbWFnZVVybFwiPmZpbHRlcl9saXN0PC9pPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiY3VzdG9tVHJpZ2dlclwiPjwvbmctY29udGVudD5cblxuICAgIDxkaXYgW2hpZGRlbl09XCIhaXNWaXNpYmxlXCJcbiAgICAgICAgIGNsYXNzPVwiYWN0aW9uLW1lbnUgbWVudS1jb250ZW50XCJcbiAgICAgICAgIFtjbGFzcy5jdXN0b21UcmlnZ2VyXT1cImN1c3RvbVRyaWdnZXJcIlxuICAgICAgICAgW25nU3R5bGVdPVwieyAnbGVmdCc6IG1lbnVMZWZ0LCAncmlnaHQnOiBtZW51UmlnaHQsICd0b3AnOiBtZW51VG9wLCAnYm90dG9tJzogbWVudUJvdHRvbSAgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUtaGVhZGVyXCI+XG4gICAgICAgICAgICA8emVuLXNlYXJjaC1ib3ggWyh0ZXh0KV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2VhcmNoQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRleHRDaGFuZ2UpPVwic2VhcmNoVGV4dENoYW5nZWQoKVwiPjwvemVuLXNlYXJjaC1ib3g+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1ib2R5IGl0ZW1zLXdyYXBwZXJcIlxuICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7e3dyYXBwZXJCb2R5Q2xhc3N9fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tc2dcIj57e2l0ZW0gfCB0cmFuc2xhdGUgfX08L2xpPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29uZmlnLml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTWVudUlzVmlzaWJsZShpdGVtKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRGl2aWRlciBiZXR3ZWVuIHR3byBmaWx0ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkaXZpZGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmaWx0ZXItZGl2aWRlclwiPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBCb29sZWFuIHRvZ2dsZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ3RvZ2dsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW0gdG9nZ2xlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2l0ZW0udGl0bGUgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHplbi10b2dnbGUtc2xpZGUgWyhlbmFibGVkKV09XCJpdGVtLmVuYWJsZWRcIj48L3plbi10b2dnbGUtc2xpZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24taXRlbSBleHBhbmRlci1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSAhPSAndG9nZ2xlJyAmJiBpdGVtLnR5cGUgIT0gJ2RpdmlkZXInICYmICFpdGVtLmRpc2FibGVDb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNJdGVtQWN0aXZlKGl0ZW0pLCAnZXhwYW5kZWQnOiBpdGVtLmV4cGFuZGVkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBleHBhbmQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGl0ZW0uZXhwYW5kZWR9XCI+ZXhwYW5kX21vcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0udGl0bGUgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHBhbmRlZCB8fCBpdGVtLmRpc2FibGVDb2xsYXBzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiaXRlbS50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNdWx0aXNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbXVsdGlzZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGF6eSBsb2FkaW5nIG1vZGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmlzTGF6eUxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRzSXRlbSBvZiBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW0tY2hlY2tib3ggZHMtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggWyhjaGVja2VkKV09XCJkc0l0ZW0uY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZHNJdGVtLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cImNoZWNrQ2hhbmdlZChkc0l0ZW0sIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJkc0l0ZW0ubmFtZT8udG9TdHJpbmcoKSB8IHRyYW5zbGF0ZVwiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jYW5Mb2FkTW9yZSAmJiAhaXRlbS5pc0xvYWRpbmdOb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoaXRlbSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydMb2FkIE1vcmUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uaXNMb2FkaW5nTm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb2FkZXItbW9yZS1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1zcGlubmVyIHNpemU9XCJzbWFsbFwiPjwvemVuLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmlzTGF6eUxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBkcy1pdGVtIHNlbGVjdC1hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94ICpuZ0lmPVwiaXRlbS5kYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoY2hlY2tlZCldPVwiaXRlbS5pc1NlbGVjdGVkQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzSXRlbUFjdGl2ZShpdGVtKSAmJiAhaXRlbS5pc1NlbGVjdGVkQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IEFsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25TZWxlY3RBbGwoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkc0l0ZW0gb2YgaXRlbS5maWx0ZXJlZERhdGFTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pdGVtLWNoZWNrYm94IGRzLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94IFsoY2hlY2tlZCldPVwiZHNJdGVtLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ltYWdlVXJsXT1cImRzSXRlbS5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJjaGVja0NoYW5nZWQoZHNJdGVtLCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZHNJdGVtLm5hbWU/LnRvU3RyaW5nKCkgfCB0cmFuc2xhdGVcIj48L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGF0ZSByYW5nZSBwaWNrZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVSYW5nZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgT3B0aW9ucyBkYXRlIHJhbmdlIHZpZXcgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpdGVtLmRhdGVSYW5nZU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tcmFkaW8gZHMtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09IG9wdGlvbi5uYW1lfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLXJhZGlvIFt2YWx1ZV09XCJvcHRpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5uYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09IG9wdGlvbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaW9DaGFuZ2UpPVwiaGFuZGxlRGF0ZVJhbmdlT3B0aW9uQ2xpY2soaXRlbSwgb3B0aW9uKVwiPjwvemVuLXJhZGlvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tcmFkaW8gZHMtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zW2l0ZW0ua2V5XSA9PT0gJ0N1c3RvbSd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1yYWRpbyBbdmFsdWVdPVwiJ0N1c3RvbSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDdXN0b20nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID09PSAnQ3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaW9DaGFuZ2UpPVwiaGFuZGxlQ3VzdG9tRGF0ZVJhbmdlQ2xpY2soaXRlbSlcIj48L3plbi1yYWRpbz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09ICdDdXN0b20nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snRnJvbScgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1kYXRlcGlja2VyIGNsYXNzPVwid2lkdGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGRhdGUpXT1cIml0ZW0uZGF0ZVJhbmdlLnN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJpdGVtLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwiaXRlbS5jb25maWc/LnlQb3NpdGlvbiA/PyBkYXRlcGlja2VyUG9zaXRpb24uQVVUT1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50Q29udGFpbmVyXT1cIm1haW5Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHMtaXRlbSBmaWx0ZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj57eydUbycgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1kYXRlcGlja2VyIGNsYXNzPVwid2lkdGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGRhdGUpXT1cIml0ZW0uZGF0ZVJhbmdlLmVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeVBvc2l0aW9uXT1cIml0ZW0uY29uZmlnPy55UG9zaXRpb24gPz8gZGF0ZXBpY2tlclBvc2l0aW9uLkFVVE9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUNoYW5nZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50Q29udGFpbmVyXT1cIm1haW5Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEZWZhdWx0IGRhdGUgcmFuZ2UgdmlldyAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcy1pdGVtIGZpbHRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snRnJvbScgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJpdGVtLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lQb3NpdGlvbl09XCJpdGVtLmNvbmZpZz8ueVBvc2l0aW9uID8/IGRhdGVwaWNrZXJQb3NpdGlvbi5BVVRPXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmVudENvbnRhaW5lcl09XCJtYWluQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj57eydUbycgfCB0cmFuc2xhdGV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwiaXRlbS5jb25maWc/LnlQb3NpdGlvbiA/PyBkYXRlcGlja2VyUG9zaXRpb24uQVVUT1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZUVuZERhdGVDaGFuZ2UoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50Q29udGFpbmVyXT1cIm1haW5Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3plbi1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEYXRlIHBpY2tlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxibFwiPnt7J0RhdGUnIHwgdHJhbnNsYXRlfX06PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGRhdGUpXT1cIml0ZW0uZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cIml0ZW0uc2hvd1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJlbnRDb250YWluZXJdPVwibWFpbkNvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE51bWJlciByYW5nZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyUmFuZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXJvdyBudW1iZXItcmFuZ2Utcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snTWluJyB8IHRyYW5zbGF0ZX19OjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibWF0ZXJpYWwtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5udW1iZXJSYW5nZS5mcm9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+e3snTWF4JyB8IHRyYW5zbGF0ZX19OjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibWF0ZXJpYWwtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5udW1iZXJSYW5nZS50b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSYWRpbyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpdGVtLnJhZGlvT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taXRlbS1yYWRpbyBkcy1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IG9wdGlvbi5zZWxlY3RlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tcmFkaW8gW3ZhbHVlXT1cIm9wdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubmFtZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ltYWdlVXJsXT1cIm9wdGlvbi5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJvcHRpb24uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaW9DaGFuZ2UpPVwicmFkaW9DaGFuZ2VkKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+PC96ZW4tcmFkaW8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd05vRmlsdGVyUmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm8taXRlbVwiPnt7J05vIFJlc3VsdHMgRm91bmQnIHwgdHJhbnNsYXRlfX0uLjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWZvb3RlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIHt7J1Jlc2V0JyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFwcGx5KClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1mbGF0IGZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICB7eydBcHBseScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -54,7 +54,7 @@ export class ZenduPaginationBarComponent {
54
54
  }
55
55
  }
56
56
  ZenduPaginationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
- ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: i1.ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "placeholder", "displayProp", "idProp", "hasSearch", "returnOption", "isMultiselect", "disabled", "customIcon", "customIconColor", "isTruncate", "enableAddNewOption", "newOptionText", "enableRemoveOption", "removeOptionText"], outputs: ["selectModelChange", "addNewOption", "removeOption"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
57
+ ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: i1.ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "placeholder", "displayProp", "idProp", "hasSearch", "returnOption", "isMultiselect", "disabled", "customIcon", "customIconColor", "isTruncate", "enableAddNewOption", "newOptionText", "enableRemoveOption", "removeOptionText", "isLazyLoading", "lazyLoader"], outputs: ["selectModelChange", "addNewOption", "removeOption"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'zen-pagination-bar', template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"] }]