tnx-shared 5.1.445 → 5.1.447

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.
@@ -623,6 +623,16 @@ export class CommonService {
623
623
  const d = new Date(year, month, 0);
624
624
  return d.getDate();
625
625
  }
626
+ getDatasourceRangeYear(rangeYear = 5) {
627
+ const dataSourceYear = [];
628
+ let i = 1;
629
+ const currentYear = new Date().getFullYear();
630
+ for (let year = currentYear - rangeYear; year <= currentYear; year++) {
631
+ dataSourceYear.push({ id: year, ten: year }, { id: currentYear + i, ten: currentYear + i });
632
+ i++;
633
+ }
634
+ return dataSourceYear.sort((a, b) => b.id - a.id);
635
+ }
626
636
  getCurrentYear() {
627
637
  return new Date().getFullYear();
628
638
  }
@@ -1111,4 +1121,4 @@ CommonService.decorators = [
1111
1121
  CommonService.ctorParameters = () => [
1112
1122
  { type: ModuleConfigService }
1113
1123
  ];
1114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsic2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFHN0IsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFckQscUJBQXFCO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2QixJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDaEIseURBQU0sQ0FBQTtJQUNOLDJEQUFPLENBQUE7SUFDUCxxREFBSSxDQUFBO0lBQ0osaUVBQVUsQ0FBQTtBQUNkLENBQUMsRUFMSSxlQUFlLEtBQWYsZUFBZSxRQUtuQjtBQUtELE1BQU0sT0FBTyxhQUFhO0lBa0N0QixZQUFvQixvQkFBeUM7UUFBekMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQWpDN0QsZUFBVSxH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QWZRLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnZmFzdC1zYWZlLXN0cmluZ2lmeSc7XHJcbmltcG9ydCBtb21lbnRfIGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9kaWFsb2cnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuXHJcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEZpbHRlciwgU29ydCwgU3RyaW5nQ29tcGFyZU9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi9hdXRoZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XHJcblxyXG4vLyBmaXggZm9yIGJ1aWxkIHByb2RcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbmVudW0gTWVudU9yaWVudGF0aW9uIHtcclxuICAgIFNUQVRJQyxcclxuICAgIE9WRVJMQVksXHJcbiAgICBTTElNLFxyXG4gICAgSE9SSVpPTlRBTCxcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XHJcbiAgICBsYXlvdXRNb2RlOiBNZW51T3JpZW50YXRpb24gPSBNZW51T3JpZW50YXRpb24uU1RBVElDO1xyXG5cclxuICAgIGRhcmtNZW51ID0gZmFsc2U7XHJcblxyXG4gICAgcHJvZmlsZU1vZGUgPSAndG9wJztcclxuXHJcbiAgICByb3RhdGVNZW51QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAgIHRvcGJhck1lbnVBY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgb3ZlcmxheU1lbnVBY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIG1lbnVDbGljazogYm9vbGVhbjtcclxuXHJcbiAgICB0b3BiYXJJdGVtQ2xpY2s6IGJvb2xlYW47XHJcblxyXG4gICAgYWN0aXZlVG9wYmFySXRlbTogYW55O1xyXG5cclxuICAgIHJlc2V0TWVudTogYm9vbGVhbjtcclxuXHJcbiAgICBjdXJyZW50QWN0aXZlSXRlbTogYW55O1xyXG5cclxuICAgIG1lbnVIb3ZlckFjdGl2ZTogYm9vbGVhbjtcclxuICAgIHRlc3Q6IGJvb2xlYW47XHJcblxyXG4gICAgdG5QcmVmaXhMb2cgPSAnLS0tLS0tLS0tPlROX0xPR19DT05TT0xFLS0tLS0tLT4nO1xyXG5cclxuICAgIFNUT1JBR0VfS0VZID0gJ0NMSVBCT0FSRF9DT05URU5UJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ3VpZCgpIHtcclxuICAgICAgICByZXR1cm4gdXVpZHY0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZG9tU3RyaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmd1aWQoKTtcclxuICAgIH1cclxuXHJcbiAgICByYW5kb21TdHJpbmdXaXRoTm90RGVsaW1pdGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmd1aWQoKS5yZXBsYWNlKCctJywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0cmluZ0Zvcm1hdChpbnB1dFN0cmluZzogc3RyaW5nLCAuLi5hcmdzKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gaW5wdXRTdHJpbmcucmVwbGFjZShgeyR7aW5kZXh9fWAsIGFyZ3NbaW5kZXhdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbnB1dFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBodG1sRW5jb2RlKHN0cikge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmcoc3RyKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyZxdW90OycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEzhuqV5IHbhu4EgZ2nDoSB0cuG7iyB0aGVvIHBhdGggJydcclxuICAgIGdldFZhbHVlQnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHBhdGhzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG9iaiA9IG9ialtwYXRoc1tpXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgb2JqID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHtzZWFyY2g6IHtrZXkgOiAnbmFtbmgnfX0gLiA9PiBzZWFyY2gua2V5XHJcbiAgICBzZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmaWVsZHMgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG9iajtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGZpZWxkcy5sZW5ndGg7IGkgPCBuICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaV07XHJcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdFtmaWVsZF0gPT09ICd1bmRlZmluZWQnIHx8ICFfLmlzT2JqZWN0KHJlc3VsdFtmaWVsZF0pXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbZmllbGRdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbZmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZERheXMoZGF0ZTogRGF0ZSwgZGF5czogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgY2xvbmVkLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkYXlzKTtcclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhvdXJzKGRhdGU6IERhdGUsIGhvdXJzOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICBjbG9uZWQuc2V0VGltZShjbG9uZWQuZ2V0VGltZSgpICsgKGhvdXJzICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFdvcmtEYXlzKGRhdGUsIGRheXMpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICB3aGlsZSAoZGF5cyA+IDApIHtcclxuICAgICAgICAgICAgY2xvbmVkLnNldERhdGUoY2xvbmVkLmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgICAgICBpZiAoY2xvbmVkLmdldERheSgpICE9PSAwICYmIGNsb25lZC5nZXREYXkoKSAhPT0gNikge1xyXG4gICAgICAgICAgICAgICAgZGF5cyAtPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VG9DU1YoZGF0YXM6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcclxuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXHJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjLmhlYWRlciArICcsJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBkYXRhcy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyByb3dTdHJpbmcgKz0gKHR5cGVvZiBkW2MuZmllbGRdKS50b1N0cmluZygpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoZG0ubmFtZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGNvbFZhbC50b1N0cmluZygpKSArICcsJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXBsYWNlU3BlY2lhbENoYXJhY3Rlcih2YWw6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB2YWwucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFRvQ1NWMihkYXRhczogYW55W10sIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGMuaGVhZGVyICsgJywnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGRhdGFzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHJvd1N0cmluZyArPSAodHlwZW9mIGRbYy5maWVsZF0pLnRvU3RyaW5nKCkgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRbYy5maWVsZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjLmRhdGFNYXBwaW5nLmZvckVhY2goKGRtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3RlcihkbS5uYW1lLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoY29sVmFsLnRvU3RyaW5nKCkpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcclxuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb0NTVkdyb3VwKGRhdGFzOiBhbnksIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGNvbHVtbnNbaV0uaGVhZGVyICsgJywnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBkYXRhcy5mb3JFYWNoKChzdWJEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChzdWJEYXRhLmdyb3VwTmFtZSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChoZWFkZXJTdHJpbmcpO1xyXG5cclxuICAgICAgICAgICAgc3ViRGF0YS5kYXRhLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3RlcihkbS5uYW1lLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3Rlcihjb2xWYWwudG9TdHJpbmcoKSkgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goJ1xcbicpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XHJcbiAgICAgICAgbGV0IGNzdiA9ICcnO1xyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcclxuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0VG9TZWxlY3RJdGVtKFxyXG4gICAgICAgIGRhdGE6IGFueSxcclxuICAgICAgICB2YWx1ZUZpZWxkOiBzdHJpbmcsXHJcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnJyxcclxuICAgICAgICB0ZXh0RmllbGQyOiBzdHJpbmcgPSAnJyxcclxuICAgICAgICBwcmVmaXhUZXh0RmllbGQyID0gJycsXHJcbiAgICAgICAgYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZSxcclxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XHJcbiAgICAgICAgaWYgKCF0ZXh0RmllbGQgfHwgdGV4dEZpZWxkID09PSAnJykge1xyXG4gICAgICAgICAgICB0ZXh0RmllbGQgPSB2YWx1ZUZpZWxkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGVtcEFycjogU2VsZWN0SXRlbVtdID0gW107XHJcblxyXG4gICAgICAgIGlmIChhbGxvd051bGwpIHtcclxuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHsgbGFiZWw6ICcnLCB2YWx1ZTogJycgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xyXG4gICAgICAgICAgICB0ZW1wQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkMixcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhUZXh0RmllbGQyLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3ZhbHVlRmllbGRdLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRlbXBBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFiZWwoXHJcbiAgICAgICAgaXRlbTogYW55LFxyXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nLFxyXG4gICAgICAgIHRleHRGaWVsZDI6IHN0cmluZyxcclxuICAgICAgICBwcmVmaXhUZXh0RmllbGQyOiBzdHJpbmcsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAodGV4dEZpZWxkMikge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7aXRlbVt0ZXh0RmllbGRdfSAtICR7cHJlZml4VGV4dEZpZWxkMn0gJHtpdGVtW3RleHRGaWVsZDJdfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbVt0ZXh0RmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0VG9TZWxlY3RJdGVtTWFzdGVyRGF0YShcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJyxcclxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyA9ICduYW1lJyxcclxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvU2VsZWN0SXRlbShkYXRhLCB2YWx1ZUZpZWxkLCB0ZXh0RmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYWNlSWQgPSAoKSA9PiBzZXNzaW9uU3RvcmFnZT8uZ2V0SXRlbSgndHJhY2VJZCcpID8/ICcnO1xyXG5cclxuICAgIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIGxldCB0cmFjZUlkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIHNlc3Npb25TdG9yYWdlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0cmFjZUlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndHJhY2VJZCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDw7MgbOG7l2kg4bufIHVybDogJHtlcnJvci51cmx9LCBzdGF0dXNDb2RlOiAke2Vycm9yLnN0YXR1c30gPT09PT4gVHJhY2VJZCBjaG8gZWxhc3RpYzogJHt0cmFjZUlkfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9yY2VJZjQwMSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaXNGb3JjZUxvZ291dElmNDAxO1xyXG4gICAgICAgICAgICBpZiAoZm9yY2VJZjQwMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX2F1dGhlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aGVuU2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfbm90aWZpZXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdI4buHIHRo4buRbmcgc+G6vSB04buxIMSRxINuZyB4deG6pXQgc2F1IDVzIMSR4buDIGPhuq1wIG5o4bqtcCBwaGnDqm4gYuG6o24gbeG7m2knLCAnVGjDtG5nIGLDoW8nKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzbGVlcCBiZWZvcmUgbG9nb3V0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoPFJlc3BvbnNlUmVzdWx0PntcclxuICAgICAgICAgICAgbWVzc2FnZTogJ0PDsyBs4buXaSB44bqjeSByYS4gSMOjeSBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dCEhIScsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICB0b3RhbFJlY29yZDogMCxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICBlcnJvckNoZWNrRXhpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGVycm9yQ29udHJvbElkOiBudWxsLFxyXG4gICAgICAgICAgICBlcnJvckZvcm1JZDogbnVsbCxcclxuICAgICAgICAgICAgdHJhY2VJZDogdHJhY2VJZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblRvcGJhckl0ZW1DbGljayhldmVudCwgaXRlbSkge1xyXG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9PT0gaXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXV0b09wZW5Ub3BiYXJJdGVtKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaXNIb3Jpem9udGFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5IT1JJWk9OVEFMO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2xpbSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uU0xJTTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlT3ZlcmxheU1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTGF5b3V0Q2xpY2soKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvcGJhckl0ZW1DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZW51Q2xpY2spIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkgfHwgdGhpcy5pc1NsaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldE1lbnUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5TWVudUFjdGl2ZSB8fCB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubWVudUhvdmVyQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub3BiYXJNZW51QnV0dG9uQ2xpY2soZXZ0KSB7XHJcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9ICF0aGlzLnRvcGJhck1lbnVBY3RpdmU7XHJcblxyXG4gICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5hdXRvT3BlblRvcGJhckl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93VG9wYmFyTWVudSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudG9wYmFyTWVudUFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRvT3BlblRvcGJhckl0ZW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25NZW51QnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXRoaXMucm90YXRlTWVudUJ1dHRvbjtcclxuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVkpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9ICF0aGlzLm92ZXJsYXlNZW51QWN0aXZlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9ICF0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUxlZnRNZW51KHNob3cpIHtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9ICFzaG93O1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVDbGljayA9IHNob3c7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhc2hvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUgPSBzaG93O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gc2hvdztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9ICFzaG93O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXNob3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25NZW51Q2xpY2soJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzZXRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNUYWJsZXQoKSB7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICByZXR1cm4gd2lkdGggPD0gMTAyNCAmJiB3aWR0aCA+IDY0MDtcclxuICAgIH1cclxuXHJcbiAgICBpc0Rlc2t0b3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNDtcclxuICAgIH1cclxuXHJcbiAgICBpc01vYmlsZSgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNjQwO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT3ZlcmxheSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lU2VydmljZUNvZGVBbmRTdWZmaXgoc2VydmljZUNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zdWZmaXhTZXJ2aWNlQ29kZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7c2VydmljZUNvZGV9JHt0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LnN1ZmZpeFNlcnZpY2VDb2RlfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VydmljZUNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsYXkobXM6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBCZWdpbiBkaXNhYmxlIGVkaXRvciB0YWIgKi9cclxuICAgIHNldEF1dG9mb2N1c0ZpcnN0Q29udHJvbChpZEVsZW1lbnQpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgdmlld1JlZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICh2aWV3UmVmICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdmlld1JlZi5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LnR5cGUgIT0gJ3JhZGlvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXhhdGVhcmEgPSB2aWV3UmVmLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXhhdGVhcmEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4YXRlYXJhLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHtcclxuICAgICAgICAvLyAgICAga2V5ICAgIDogOSxcclxuICAgICAgICAvLyAgICAgaGFuZGxlcjogZnVuY3Rpb24gKGFyZzEsIGFyZzIpIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG5leHQgPSBKUXVlcnkoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgncC1lZGl0b3InKS5wYXJlbnQoKS5uZXh0KCkuZmluZCgnOnRhYmJhYmxlLCA6Zm9jdXNhYmxlJykuZmlyc3QoKTtcclxuICAgICAgICAvLyAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbmV4dC5mb2N1cygpO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUYWJEaXNhYmxlZEhhbmRsZXIoZXZlbnQpIHtcclxuICAgICAgICAvLyB0aGlzLmRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCk7XHJcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLnB1c2godGhpcy5nZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZVRhYlRvb2xiYXJFZGl0b3IoKSB7XHJcbiAgICAgICAgLy8galF1ZXJ5KFwiLnFsLXRvb2xiYXJcIikuZmluZChcIjpidXR0b25cIikuYXR0cihcInRhYmluZGV4XCIsIFwiLTFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEVuZCBkaXNhYmxlIGVkaXRvciB0YWIgKi9cclxuXHJcbiAgICBwcm9jZXNzRGF0ZUlucHV0KGlucHV0VmFsdWUsIHNob3dUaW1lOiBib29sZWFuLCB0aW1lT25seSA9IGZhbHNlKTogRGF0ZSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyU3RyaW5nKGlucHV0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihpbnB1dFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgaE5vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcclxuICAgICAgICAgICAgY29uc3QgbU5vdyA9IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpO1xyXG4gICAgICAgICAgICBjb25zdCBzTm93ID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDk5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDEyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9ICdERE1NWVlZWWhobW0nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoaW5wdXRWYWx1ZSwgZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMjAxOVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gK2lucHV0VmFsdWUuc3Vic3RyKDQsIDQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDExOVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gKygnMjAnICsgaW5wdXRWYWx1ZS5zdWJzdHIoNCwgMikudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRDdXJyZW50WWVhcigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChudW1iZXIgPiAtMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdGhpcy5hZGREYXlzKG5ldyBEYXRlKCksIG51bWJlcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWUucmVwbGFjZSgvLS9nLCAnLycpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lICYmICF0aW1lT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZVRpbWUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZIGhoOm1tJyxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGVUaW1lICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZVRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2lucHV0VmFsdWV9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVkgaGg6bW0nKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZJyxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIGQuZ2V0RGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRZZWFyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50TW9udGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRNb250aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldER5bmFtaWNGb3JtSWQoc2VydmljZSwgZW50aXR5LCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYCR7c2VydmljZX1fJHtlbnRpdHl9XyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZWZhdWx0RHluYW1pY0Zvcm1JZChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYERFRkFVTFRfJHthY3Rpb259YC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb25lT2JqZWN0KG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFByb3BlcnR5KHByb3AsIHZhbCwgbW9kZWwpIHtcclxuICAgICAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmVPYmplY3QobW9kZWwpO1xyXG4gICAgICAgIGlmIChjbG9uZSkge1xyXG4gICAgICAgICAgICBjbG9uZVtwcm9wXSA9IHZhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFuZGFyZGl6ZWRKc29uKGlucHV0SnNvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBpbnB1dEpzb24ucmVwbGFjZSgvT2JqZWN0SWRcXCgoLio/KVxcKS9nbSwgJyQxJyk7XHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvSVNPRGF0ZVxcKCguKj8pXFwpL2dtLCAnJDEnKTtcclxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9OdW1iZXJMb25nXFwoKC4qPylcXCkvZ20sICckMScpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB0cmlnZ2VyUmVzaXplV2luZG93KCkge1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xyXG4gICAgfVxyXG5cclxuICAgIGF1dG9BbGlnbkRpYWxvZyhkaWFsb2c6IERpYWxvZykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyUmVzaXplV2luZG93KCksIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JqSGFzTnVsbChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKG9ialtrZXldICE9IG51bGwgJiYgb2JqW2tleV0gIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXJyYXlIYXNDaGFuZ2VkKG9sZEFycmF5LCBuZXdBcnJheSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBpLCBpdGVtLCBqLCBsZW47XHJcbiAgICAgICAgaWYgKCghb2xkQXJyYXkgJiYgbmV3QXJyYXkpIHx8IChvbGRBcnJheSAmJiAhbmV3QXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZEFycmF5KSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3QXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IGogPSAwLCBsZW4gPSBuZXdBcnJheS5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcclxuICAgICAgICAgICAgaXRlbSA9IG5ld0FycmF5W2ldO1xyXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoaXRlbSkgIT09IEpTT04uc3RyaW5naWZ5KG9sZEFycmF5W2ldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeVBhcnNlRXh0cmFjdERhdGUoZGF0ZVZhbHVlLCBmb3JtYXQpIHtcclxuICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoZGF0ZVZhbHVlLCBmb3JtYXQpO1xyXG4gICAgICAgIGlmIChkYXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlRnJvbVRhc2soa2V5VmFsdWUsIGN1cnJlbnRWaWV3LCBzdGVwTWV0YWRhdGEpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICBpZiAoY3VycmVudFZpZXcua2V5VmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZpZXcua2V5VmFsdWVzKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ID09PSBrZXlWYWx1ZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGVwTWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyRXh0ZW5kRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgICAgICBzdGVwTWV0YWRhdGEuZmluZCgoeCkgPT4geC5rZXkgPT09ICdleHRlbmREYXRhJykudmFsdWUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IGFyckV4dGVuZERhdGEuZmluZChcclxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSAmJiB4LmtleS50b0xvd2VyQ2FzZSgpID09PSBrZXlWYWx1ZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdXBwZXJGaXJzdExldHRlcihpbnB1dCkge1xyXG4gICAgICAgIGlmIChpbnB1dCA9PSAnJyB8fCBpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IHdvcmRzID0gaW5wdXQuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgd29yZHMuZm9yRWFjaCgod29yZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAod29yZC50cmltKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGlmICh3b3JkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyaW5nKDEpICsgJyAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmQudG9VcHBlckNhc2UoKSArICcgJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcGxhY2VBbGwoaW5wdXRTdHIsIHNlYXJjaCwgcmVwbGFjZW1lbnQpIHtcclxuICAgICAgICBpZiAoaW5wdXRTdHIgPT09IG51bGwgfHwgaW5wdXRTdHIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnB1dFN0ci5zcGxpdChzZWFyY2gpLmpvaW4ocmVwbGFjZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSW1hZ2UoZmlsZU5hbWUpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9cXC4oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaS50ZXN0KGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUlmcmFtZSh1cmwpIHtcclxuICAgICAgICBjb25zdCBpZnJhbWUgPSBgPGlmcmFtZSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiB3aWR0aD1cIjBcIiBoZWlnaHQ9XCIwXCIgc3JjPVwiJHt1cmx9XCI+PC9pZnJhbWU+YDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaWZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0ludGVnZXJTdHJpbmcoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXN0cikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChzdHIuaW5kZXhPZignMCcpID09IDApIHtcclxuICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0ciA9PSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbiA9IE1hdGguZmxvb3IoTnVtYmVyKHN0cikpO1xyXG4gICAgICAgIHJldHVybiBuICE9PSBJbmZpbml0eSAmJiBTdHJpbmcobikgPT09IHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBbnlNYXNrKCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLWRpYWxvZy1tYXNrXCJdJylcclxuICAgICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3N+PVwidWktc2lkZWJhci1tYXNrXCJdJylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhZmVTdHJpbmdpZnkoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzdHJpbmdpZnkuc3RhYmxlU3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVTdHJpbmcodmFsdWUxLCB2YWx1ZTIpIHtcclxuICAgICAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVEYXRlKGRhdGUxLCBkYXRlMikge1xyXG4gICAgICAgIGlmICghZGF0ZTEgfHwgIWRhdGUyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRlMSA9IHRoaXMucGFyc2VEYXRlKGRhdGUxKTtcclxuICAgICAgICBkYXRlMiA9IHRoaXMucGFyc2VEYXRlKGRhdGUyKTtcclxuICAgICAgICBpZiAoZGF0ZTEuZ2V0VGltZSgpIDwgZGF0ZTIuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZGF0ZTEuZ2V0VGltZSgpID09IGRhdGUyLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaWZmRGF0ZShkYXRlMTogYW55LCBkYXRlMjogYW55KTogbnVtYmVyIHtcclxuICAgICAgICAvLyBkMSA8IGQyIHRow6wgYuG6sW5nID0gLTFcclxuICAgICAgICBjb25zdCBkMSA9IG1vbWVudChkYXRlMSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgY29uc3QgZDIgPSBtb21lbnQoZGF0ZTIpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgIGlmIChkMSA9PSBkMikge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGQxID4gZDIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wYXJlV2l0aE5vdyhkYXRlMSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZShkYXRlMSwgY3VycmVudERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0ZVN0ciBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGVTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGVTdHIgfHwgZGF0ZVN0ciA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhc3luY0ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9yZGVyQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIF8uc29ydEJ5KG9iaiwgcHJvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBCeShvYmo6IGFueVtdLCBwcm9wOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gXy5ncm91cEJ5KG9iaiwgcHJvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzdGluY3QoYXJyYXk6IG51bWJlcltdKSB7XHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZsYWdzW2FycmF5W2ldXSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmxhZ3NbYXJyYXlbaV1dID0gdHJ1ZTtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0QXJyYXkoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXN0aW5jdEZpZWxkKGFycmF5OiBhbnlbXSwgZmllbGQpIHtcclxuICAgICAgICBjb25zdCBmbGFncyA9IFtdLCBvdXRwdXQgPSBbXSwgbCA9IGFycmF5Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpXVtmaWVsZF07XHJcbiAgICAgICAgICAgIGlmIChmbGFnc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZsYWdzW3ZhbHVlXSA9IHRydWU7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuXHJcbiAgICBhZGREaXN0aW5jdChzb3VyY2U6IGFueVtdLCBkZXN0OiBhbnlbXSkge1xyXG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRlc3Quc29tZShwID0+IHAgPT0gcykpIHtcclxuICAgICAgICAgICAgICAgIGRlc3QucHVzaChzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEjDoG0gZHV54buHdCBt4bqjbmcsIGzhuqV5IHJhIHBo4bqnbiB04butIHRo4buPYSBtw6NuIFtmdW5jXSB2w6AgeMOzYSBwaOG6p24gdOG7rSDEkcOzIMSRaSBraOG7j2kgbeG6o25nXHJcbiAgICAvLyAgICAgIGNhbGxCYWNrOiBvcHRpb25hbCBwaOG7pWMgduG7pSBuaHUgY+G6p3Uga2jDoWMga2hpIGR1eeG7h3QgxJHhur9uIGl0ZW0gdGjhu49hIG3Do25cclxuICAgIGdldEFuZFJlbW92ZShzb3VyY2U6IGFueVtdLCBmdW5jOiBGdW5jdGlvbiwgY2FsbEJhY2s/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChjYWxsQmFjayA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNhbGxCYWNrID0gaSA9PiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZnVuYyhzb3VyY2VbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsQmFjayhzb3VyY2VbaV0pO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc291cmNlW2ldKTtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVNZW51KCkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYnVmZmVyVmlld1tpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGd1aWRFbXB0eSgpIHtcclxuICAgICAgICByZXR1cm4gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBraeG7g20gdHJhIHhlbSBjaHXhu5dpIGPDsyBwaOG6o2kgbeG7mXQgZ3VpZCBraMOhYyB24bubaSBj4bqjIGd1aWRFbXB0eVxyXG4gICAgICogQGRhdGUgOC8xMS8yMDIyIC0gMTE6NTE6MzEgQU1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ3VpZFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVmFsaWRHdWlkKGd1aWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBndWlkICE9IG51bGwgJiYgZ3VpZCAhPT0gJycgJiYgZ3VpZCAhPT0gdGhpcy5ndWlkRW1wdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VmFsKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdW5kZWZpbmVkIHx8IHZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lU3BhbjogVHLhuqMgduG7gSB0cnVlIG7hur91IGhhaSBraG/huqNuZyB0aOG7nWkgZ2lhbiAoc3RhcnQsIGVuZClcclxuICAgICAqIHbDoCAoY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kKSBnaWFvIG5oYXUuIEtow7RuZyB0w61uaFxyXG4gICAgICogY2jhu4kgZ2lhbyBt4buZdCDEkeG6p3UgbcO6dC5cclxuICAgICAqL1xyXG4gICAgaGFzSW50ZXJzZWN0aW9uKHN0YXJ0LCBlbmQsIGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCkge1xyXG4gICAgICAgIHJldHVybiAoc3RhcnQgPCBjb21wYXJlU3RhcnQgJiYgY29tcGFyZVN0YXJ0IDwgZW5kKVxyXG4gICAgICAgICAgICB8fCAoc3RhcnQgPCBjb21wYXJlRW5kICYmIGNvbXBhcmVFbmQgPCBlbmQpXHJcbiAgICAgICAgICAgIHx8IChjb21wYXJlU3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGNvbXBhcmVFbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0ludGVyc2VjdGlvbkRhdGUoc3RhcnQsIGVuZCwgY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kLCBkYXRlRm9ybWF0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICghZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKHN0YXJ0KSA8IG5ldyBEYXRlKGNvbXBhcmVFbmQpICYmIG5ldyBEYXRlKGVuZCkgPiBuZXcgRGF0ZShjb21wYXJlU3RhcnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydCA8IGNvbXBhcmVFbmQgJiYgZW5kID4gY29tcGFyZVN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRJbk1pbnV0ZShzdHJEYXRlMSwgc3RyRGF0ZTIsIHJvdW5kID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICghc3RyRGF0ZTEgfHwgIXN0ckRhdGUyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZDEgPSBuZXcgRGF0ZShzdHJEYXRlMSk7XHJcbiAgICAgICAgY29uc3QgZDIgPSBuZXcgRGF0ZShzdHJEYXRlMik7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXQgPSAoZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpKSAvIDEwMDAgLyA2MDtcclxuICAgICAgICBpZiAocm91bmQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5yb3VuZChvZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kVGVtcGxhdGVGcm9tTGlzdCgkbGlzdDogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+LCB0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiAkbGlzdFxyXG4gICAgICAgICAgICA/ICRsaXN0LmZpbmQoKHRlbXBsYXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5fZGVmICYmIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG9sZCB2ZXJzaW9uLCBub3QgaXZ5XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlc1t0ZW1wbGF0ZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lciAmJiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpcyBpdnkgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5sb2NhbE5hbWVzWzBdID09IHRlbXBsYXRlTmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTYW1lQXJyYXkoYXJyYXkxOiBhbnlbXSwgYXJyYXkyOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChhcnJheTEubGVuZ3RoICE9IGFycmF5Mi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkxKSB7XHJcbiAgICAgICAgICAgIGlmICghYXJyYXkyLnNvbWUocSA9PiBxID09IGl0ZW0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZFBhZ2UoKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VtcHR5QXJyYXlPck51bGwoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFycmF5ICE9PSB1bmRlZmluZWQgJiYgYXJyYXkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGxvZ2ljLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc10sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ0NvbXBhcmVPcHRpb246IFN0cmluZ0NvbXBhcmVPcHRpb24gPSBTdHJpbmdDb21wYXJlT3B0aW9uLk5vcm1hbCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxyXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGQsXHJcbiAgICAgICAgICAgIHN0cmluZ0NvbXBhcmVPcHRpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQ2xpcGJvYXJkU3RvcmFnZSgpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5QnlTdG9yYWdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSwgdmFsKTtcclxuICAgICAgICB0aGlzLmNvcHlNZXNzYWdlKHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFzdGVCeVN0b3JhZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlNZXNzYWdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICBzZWxCb3guc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgICAgc2VsQm94LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcbiAgICAgICAgc2VsQm94LnZhbHVlID0gdmFsO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsQm94KTtcclxuICAgICAgICBzZWxCb3guZm9jdXMoKTtcclxuICAgICAgICBzZWxCb3guc2VsZWN0KCk7XHJcbiAgICAgICAgc2VsQm94LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5KTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2VsQm94KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdCaW5kaW5nRmlsdGVyKGNvbHVtbjogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHNvdXJjZUZpZWxkOiBzdHJpbmcsIHN1YkZpZWxkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxyXG4gICAgICAgICAgICBvcGVyYXRvcixcclxuICAgICAgICAgICAgc291cmNlRmllbGQsXHJcbiAgICAgICAgICAgIHN1YkZpZWxkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTb3J0KHsgZmllbGQsIGRpciB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dFcnJvcihlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBNcnIgU3RhcnI6ICR7dGhpcy50blByZWZpeExvZ31gKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nSW5mbyhtc2cpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmluZm8oYE1yciBTdGFycjogJHt0aGlzLnRuUHJlZml4TG9nfWApO1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhtc2cpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ0luZm9TaW1wbGUobXNnKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7bXNnfWApO1xyXG4gICAgfTtcclxuXHJcbiAgICBtYXRjaFJ1bGVTaG9ydChzdHIsIHJ1bGUpIHtcclxuICAgICAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyBydWxlLnNwbGl0KCcqJykubWFwKGVzY2FwZVJlZ2V4KS5qb2luKCcuKicpICsgJyQnKS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXhwbGFuYXRpb24gY29kZVxyXG4gICAgbWF0Y2hSdWxlRXhwbChzdHIsIHJ1bGUpIHtcclxuICAgICAgICAvLyBmb3IgdGhpcyBzb2x1dGlvbiB0byB3b3JrIG9uIGFueSBzdHJpbmcsIG5vIG1hdHRlciB3aGF0IGNoYXJhY3RlcnMgaXQgaGFzXHJcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XHJcblxyXG4gICAgICAgIC8vIFwiLlwiICA9PiBGaW5kIGEgc2luZ2xlIGNoYXJhY3RlciwgZXhjZXB0IG5ld2xpbmUgb3IgbGluZSB0ZXJtaW5hdG9yXHJcbiAgICAgICAgLy8gXCIuKlwiID0+IE1hdGNoZXMgYW55IHN0cmluZyB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzXHJcbiAgICAgICAgcnVsZSA9IHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJyk7XHJcblxyXG4gICAgICAgIC8vIFwiXlwiICA9PiBNYXRjaGVzIGFueSBzdHJpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgaXRcclxuICAgICAgICAvLyBcIiRcIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhhdCBpbiBmcm9udCBhdCB0aGUgZW5kIG9mIGl0XHJcbiAgICAgICAgcnVsZSA9ICdeJyArIHJ1bGUgKyAnJCc7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIG1hdGNoaW5nIHN0cmluZ1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChydWxlKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXNwb25zZVJlc3VsdEZyb21FeGNlcHRpb24oZXJyOiBhbnkpOiBSZXNwb25zZVJlc3VsdCB7XHJcbiAgICAgICAgcmV0dXJuIDxhbnk+e1xyXG4gICAgICAgICAgICBlcnJvcjogJ0VYQ0VQVElPTicsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEnLFxyXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICBlcnJvckRldGFpbDogZXJyLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaXNTdHJpbmcodmFsKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB2YWwgPT09IHZhbC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRpbWUodGltZVNwYW46IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGltZVNwYW4pIHJldHVybiB0aW1lU3BhbjtcclxuICAgICAgICBjb25zdCBhcnJUaW1lSW5mbyA9IHRpbWVTcGFuLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgcmV0dXJuIGAke2FyclRpbWVJbmZvWzBdfToke2FyclRpbWVJbmZvWzFdfWA7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwZW5kU3RyaW5nV2l0aFNwYWNlKG9yaWdpbmFsOiBzdHJpbmcsIGFwcGVuZDogc3RyaW5nLCBjb25uZWN0b3I/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gYCR7b3JpZ2luYWx9YCArIChhcHBlbmQgJiYgYXBwZW5kICE9PSAnJyA/IChgICR7Y29ubmVjdG9yID8gY29ubmVjdG9yIDogJyd9IGApICsgYXBwZW5kIDogJycpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
1124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsic2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFHN0IsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFckQscUJBQXFCO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2QixJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDaEIseURBQU0sQ0FBQTtJQUNOLDJEQUFPLENBQUE7SUFDUCxxREFBSSxDQUFBO0lBQ0osaUVBQVUsQ0FBQTtBQUNkLENBQUMsRUFMSSxlQUFlLEtBQWYsZUFBZSxRQUtuQjtBQUtELE1BQU0sT0FBTyxhQUFhO0lBa0N0QixZQUFvQixvQkFBeUM7UUFBekMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQWpDN0QsZUFBVSxH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RyxLQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWdCO1FBQ3BCLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDL0IsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxTQUFrQjtRQUN0RSxPQUFPLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekcsQ0FBQzs7OztZQW55Q0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFmUSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gJ2Zhc3Qtc2FmZS1zdHJpbmdpZnknO1xyXG5pbXBvcnQgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZGlhbG9nJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICd1bmRlcnNjb3JlJztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcblxyXG5pbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4vYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5cclxuLy8gZml4IGZvciBidWlsZCBwcm9kXHJcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XHJcblxyXG5lbnVtIE1lbnVPcmllbnRhdGlvbiB7XHJcbiAgICBTVEFUSUMsXHJcbiAgICBPVkVSTEFZLFxyXG4gICAgU0xJTSxcclxuICAgIEhPUklaT05UQUwsXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1vblNlcnZpY2Uge1xyXG4gICAgbGF5b3V0TW9kZTogTWVudU9yaWVudGF0aW9uID0gTWVudU9yaWVudGF0aW9uLlNUQVRJQztcclxuXHJcbiAgICBkYXJrTWVudSA9IGZhbHNlO1xyXG5cclxuICAgIHByb2ZpbGVNb2RlID0gJ3RvcCc7XHJcblxyXG4gICAgcm90YXRlTWVudUJ1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgICB0b3BiYXJNZW51QWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIG92ZXJsYXlNZW51QWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIHN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgc3RhdGljTWVudU1vYmlsZUFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBtZW51Q2xpY2s6IGJvb2xlYW47XHJcblxyXG4gICAgdG9wYmFySXRlbUNsaWNrOiBib29sZWFuO1xyXG5cclxuICAgIGFjdGl2ZVRvcGJhckl0ZW06IGFueTtcclxuXHJcbiAgICByZXNldE1lbnU6IGJvb2xlYW47XHJcblxyXG4gICAgY3VycmVudEFjdGl2ZUl0ZW06IGFueTtcclxuXHJcbiAgICBtZW51SG92ZXJBY3RpdmU6IGJvb2xlYW47XHJcbiAgICB0ZXN0OiBib29sZWFuO1xyXG5cclxuICAgIHRuUHJlZml4TG9nID0gJy0tLS0tLS0tLT5UTl9MT0dfQ09OU09MRS0tLS0tLS0+JztcclxuXHJcbiAgICBTVE9SQUdFX0tFWSA9ICdDTElQQk9BUkRfQ09OVEVOVCc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIGd1aWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHV1aWR2NCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJhbmRvbVN0cmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZG9tU3RyaW5nV2l0aE5vdERlbGltaXRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCkucmVwbGFjZSgnLScsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdGb3JtYXQoaW5wdXRTdHJpbmc6IHN0cmluZywgLi4uYXJncykge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLnJlcGxhY2UoYHske2luZGV4fX1gLCBhcmdzW2luZGV4XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaHRtbEVuY29kZShzdHIpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKHN0cilcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmcXVvdDsnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBM4bqleSB24buBIGdpw6EgdHLhu4sgdGhlbyBwYXRoICcnXHJcbiAgICBnZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpbcGF0aHNbaV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIG9iaiA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICAvLyB7c2VhcmNoOiB7a2V5IDogJ25hbW5oJ319IC4gPT4gc2VhcmNoLmtleVxyXG4gICAgc2V0VmFsdWVCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgZmllbGRzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBvYmo7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSBmaWVsZHMubGVuZ3RoOyBpIDwgbiAmJiByZXN1bHQgIT09IHVuZGVmaW5lZDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZF0gPSBkYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGRdID09PSAndW5kZWZpbmVkJyB8fCAhXy5pc09iamVjdChyZXN1bHRbZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W2ZpZWxkXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGREYXlzKGRhdGU6IERhdGUsIGRheXM6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgIGNsb25lZC5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRIb3VycyhkYXRlOiBEYXRlLCBob3VyczogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgY2xvbmVkLnNldFRpbWUoY2xvbmVkLmdldFRpbWUoKSArIChob3VycyAqIDYwICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRXb3JrRGF5cyhkYXRlLCBkYXlzKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgd2hpbGUgKGRheXMgPiAwKSB7XHJcbiAgICAgICAgICAgIGNsb25lZC5zZXREYXRlKGNsb25lZC5nZXREYXRlKCkgKyAxKTtcclxuICAgICAgICAgICAgaWYgKGNsb25lZC5nZXREYXkoKSAhPT0gMCAmJiBjbG9uZWQuZ2V0RGF5KCkgIT09IDYpIHtcclxuICAgICAgICAgICAgICAgIGRheXMgLT0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFRvQ1NWKGRhdGFzOiBhbnlbXSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XHJcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gYy5oZWFkZXIgKyAnLCc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcm93U3RyaW5nICs9ICh0eXBlb2YgZFtjLmZpZWxkXSkudG9TdHJpbmcoKSArICcsJztcclxuICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGRtLm5hbWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3Rlcihjb2xWYWwudG9TdHJpbmcoKSkgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XHJcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xyXG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdmFsLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb0NTVjIoZGF0YXM6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcclxuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXHJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjLmhlYWRlciArICcsJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBkYXRhcy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyByb3dTdHJpbmcgKz0gKHR5cGVvZiBkW2MuZmllbGRdKS50b1N0cmluZygpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoZG0ubmFtZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGNvbFZhbC50b1N0cmluZygpKSArICcsJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VG9DU1ZHcm91cChkYXRhczogYW55LCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcclxuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjb2x1bW5zW2ldLmhlYWRlciArICcsJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoc3ViRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goc3ViRGF0YS5ncm91cE5hbWUpO1xyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goaGVhZGVyU3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHN1YkRhdGEuZGF0YS5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoZG0ubmFtZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoY29sVmFsLnRvU3RyaW5nKCkpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKCdcXG4nKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xyXG4gICAgICAgIGxldCBjc3YgPSAnJztcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU2VsZWN0SXRlbShcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgdmFsdWVGaWVsZDogc3RyaW5nLFxyXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nID0gJycsXHJcbiAgICAgICAgdGV4dEZpZWxkMjogc3RyaW5nID0gJycsXHJcbiAgICAgICAgcHJlZml4VGV4dEZpZWxkMiA9ICcnLFxyXG4gICAgICAgIGFsbG93TnVsbDogYm9vbGVhbiA9IHRydWUsXHJcbiAgICApOiBTZWxlY3RJdGVtW10ge1xyXG4gICAgICAgIGlmICghdGV4dEZpZWxkIHx8IHRleHRGaWVsZCA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGV4dEZpZWxkID0gdmFsdWVGaWVsZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXBBcnI6IFNlbGVjdEl0ZW1bXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsb3dOdWxsKSB7XHJcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7IGxhYmVsOiAnJywgdmFsdWU6ICcnIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcclxuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZDIsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4VGV4dEZpZWxkMixcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVt2YWx1ZUZpZWxkXSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZW1wQXJyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhYmVsKFxyXG4gICAgICAgIGl0ZW06IGFueSxcclxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyxcclxuICAgICAgICB0ZXh0RmllbGQyOiBzdHJpbmcsXHJcbiAgICAgICAgcHJlZml4VGV4dEZpZWxkMjogc3RyaW5nLFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKHRleHRGaWVsZDIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2l0ZW1bdGV4dEZpZWxkXX0gLSAke3ByZWZpeFRleHRGaWVsZDJ9ICR7aXRlbVt0ZXh0RmllbGQyXX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGV4dEZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU2VsZWN0SXRlbU1hc3RlckRhdGEoXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyA9ICdpZCcsXHJcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnbmFtZScsXHJcbiAgICApOiBTZWxlY3RJdGVtW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb1NlbGVjdEl0ZW0oZGF0YSwgdmFsdWVGaWVsZCwgdGV4dEZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFjZUlkID0gKCkgPT4gc2Vzc2lvblN0b3JhZ2U/LmdldEl0ZW0oJ3RyYWNlSWQnKSA/PyAnJztcclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBsZXQgdHJhY2VJZDogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiBzZXNzaW9uU3RvcmFnZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdHJhY2VJZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RyYWNlSWQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ8OzIGzhu5dpIOG7nyB1cmw6ICR7ZXJyb3IudXJsfSwgc3RhdHVzQ29kZTogJHtlcnJvci5zdGF0dXN9ID09PT0+IFRyYWNlSWQgY2hvIGVsYXN0aWM6ICR7dHJhY2VJZH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcmNlSWY0MDEgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmlzRm9yY2VMb2dvdXRJZjQwMTtcclxuICAgICAgICAgICAgaWYgKGZvcmNlSWY0MDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9hdXRoZW5TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEF1dGhlblNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX25vdGlmaWVyU2VydmljZSA9IGluamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnSOG7hyB0aOG7kW5nIHPhur0gdOG7sSDEkcSDbmcgeHXhuqV0IHNhdSA1cyDEkeG7gyBj4bqtcCBuaOG6rXAgcGhpw6puIGLhuqNuIG3hu5tpJywgJ1Row7RuZyBiw6FvJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc2xlZXAgYmVmb3JlIGxvZ291dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDxSZXNwb25zZVJlc3VsdD57XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEuIEjDo3kgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QhISEnLFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgdG90YWxSZWNvcmQ6IDAsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgZXJyb3JDaGVja0V4aXN0OiBudWxsLFxyXG4gICAgICAgICAgICBlcnJvckNvbnRyb2xJZDogbnVsbCxcclxuICAgICAgICAgICAgZXJyb3JGb3JtSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHRyYWNlSWQ6IHRyYWNlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub3BiYXJJdGVtQ2xpY2soZXZlbnQsIGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGF1dG9PcGVuVG9wYmFySXRlbSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSG9yaXpvbnRhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uSE9SSVpPTlRBTDtcclxuICAgIH1cclxuXHJcbiAgICBpc1NsaW0oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLlNMSU07XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU92ZXJsYXlNZW51KCkge1xyXG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkxheW91dENsaWNrKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50b3BiYXJJdGVtQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWVudUNsaWNrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMuaXNTbGltKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRNZW51ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgfHwgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1lbnVIb3ZlckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9wYmFyTWVudUJ1dHRvbkNsaWNrKGV2dCkge1xyXG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSAhdGhpcy50b3BiYXJNZW51QWN0aXZlO1xyXG5cclxuICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1RvcGJhck1lbnUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvcGJhck1lbnVBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudUJ1dHRvbkNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICF0aGlzLnJvdGF0ZU1lbnVCdXR0b247XHJcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhdGhpcy5vdmVybGF5TWVudUFjdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUgPSAhdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gIXRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVMZWZ0TWVudShzaG93KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSAhc2hvdztcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSBzaG93O1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWSkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gIXNob3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlID0gc2hvdztcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9IHNob3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhc2hvdztcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICFzaG93O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudUNsaWNrKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2V0TWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVGFibGV0KCkge1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAgICAgcmV0dXJuIHdpZHRoIDw9IDEwMjQgJiYgd2lkdGggPiA2NDA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNEZXNrdG9wKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDEwMjQ7XHJcbiAgICB9XHJcblxyXG4gICAgaXNNb2JpbGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDY0MDtcclxuICAgIH1cclxuXHJcbiAgICBpc092ZXJsYXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZVNlcnZpY2VDb2RlQW5kU3VmZml4KHNlcnZpY2VDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuc3VmZml4U2VydmljZUNvZGVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3NlcnZpY2VDb2RlfSR7dGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zdWZmaXhTZXJ2aWNlQ29kZX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGF5KG1zOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQmVnaW4gZGlzYWJsZSBlZGl0b3IgdGFiICovXHJcbiAgICBzZXRBdXRvZm9jdXNGaXJzdENvbnRyb2woaWRFbGVtZW50KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAodmlld1JlZiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHZpZXdSZWYucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC50eXBlICE9ICdyYWRpbycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4YXRlYXJhID0gdmlld1JlZi5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4YXRlYXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleGF0ZWFyYS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFiRGlzYWJsZWRIYW5kbGVyKCkge1xyXG4gICAgICAgIC8vIHJldHVybiB7XHJcbiAgICAgICAgLy8gICAgIGtleSAgICA6IDksXHJcbiAgICAgICAgLy8gICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBuZXh0ID0gSlF1ZXJ5KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJ3AtZWRpdG9yJykucGFyZW50KCkubmV4dCgpLmZpbmQoJzp0YWJiYWJsZSwgOmZvY3VzYWJsZScpLmZpcnN0KCk7XHJcbiAgICAgICAgLy8gICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIG5leHQuZm9jdXMoKTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vIH07XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGFiRGlzYWJsZWRIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICAgICAgLy8gdGhpcy5kaXNhYmxlVGFiVG9vbGJhckVkaXRvcigpO1xyXG4gICAgICAgIC8vIGV2ZW50LmVkaXRvci5rZXlib2FyZC5iaW5kaW5nc1s5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgIC8vIGV2ZW50LmVkaXRvci5rZXlib2FyZC5iaW5kaW5nc1s5XS5wdXNoKHRoaXMuZ2V0VGFiRGlzYWJsZWRIYW5kbGVyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCkge1xyXG4gICAgICAgIC8vIGpRdWVyeShcIi5xbC10b29sYmFyXCIpLmZpbmQoXCI6YnV0dG9uXCIpLmF0dHIoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFbmQgZGlzYWJsZSBlZGl0b3IgdGFiICovXHJcblxyXG4gICAgcHJvY2Vzc0RhdGVJbnB1dChpbnB1dFZhbHVlLCBzaG93VGltZTogYm9vbGVhbiwgdGltZU9ubHkgPSBmYWxzZSk6IERhdGUge1xyXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzSW50ZWdlclN0cmluZyhpbnB1dFZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIoaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhOb3cgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1Ob3cgPSBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICAgICAgY29uc3Qgc05vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChudW1iZXIgPiA5OSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSAxMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSAnRERNTVlZWVloaG1tJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gbW9tZW50KGlucHV0VmFsdWUsIGZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXkudG9EYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMTIwMTlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICtpbnB1dFZhbHVlLnN1YnN0cig0LCA0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDYpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMTlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICsoJzIwJyArIGlucHV0VmFsdWUuc3Vic3RyKDQsIDIpLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDFcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Q3VycmVudFllYXIoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobnVtYmVyID4gLTEwMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuYWRkRGF5cyhuZXcgRGF0ZSgpLCBudW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSAmJiAhdGltZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGVUaW1lID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWSBoaDptbScsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlVGltZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGVUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtpbnB1dFZhbHVlfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZIGhoOm1tJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWScsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDApO1xyXG4gICAgICAgIHJldHVybiBkLmdldERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhc291cmNlUmFuZ2VZZWFyKHJhbmdlWWVhciA9IDUpIHtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlWWVhciA9IFtdO1xyXG4gICAgICAgIGxldCBpID0gMTtcclxuICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBmb3IgKGxldCB5ZWFyID0gY3VycmVudFllYXIgLSByYW5nZVllYXI7IHllYXIgPD0gY3VycmVudFllYXI7IHllYXIrKykge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgeyBpZDogeWVhciwgdGVuOiB5ZWFyIH0sXHJcbiAgICAgICAgICAgICAgICB7IGlkOiBjdXJyZW50WWVhciArIGksIHRlbjogY3VycmVudFllYXIgKyBpIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YVNvdXJjZVllYXIuc29ydCgoYSwgYikgPT4gYi5pZCAtIGEuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRZZWFyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50TW9udGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRNb250aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldER5bmFtaWNGb3JtSWQoc2VydmljZSwgZW50aXR5LCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYCR7c2VydmljZX1fJHtlbnRpdHl9XyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZWZhdWx0RHluYW1pY0Zvcm1JZChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYERFRkFVTFRfJHthY3Rpb259YC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb25lT2JqZWN0KG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFByb3BlcnR5KHByb3AsIHZhbCwgbW9kZWwpIHtcclxuICAgICAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmVPYmplY3QobW9kZWwpO1xyXG4gICAgICAgIGlmIChjbG9uZSkge1xyXG4gICAgICAgICAgICBjbG9uZVtwcm9wXSA9IHZhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFuZGFyZGl6ZWRKc29uKGlucHV0SnNvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBpbnB1dEpzb24ucmVwbGFjZSgvT2JqZWN0SWRcXCgoLio/KVxcKS9nbSwgJyQxJyk7XHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvSVNPRGF0ZVxcKCguKj8pXFwpL2dtLCAnJDEnKTtcclxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9OdW1iZXJMb25nXFwoKC4qPylcXCkvZ20sICckMScpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB0cmlnZ2VyUmVzaXplV2luZG93KCkge1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xyXG4gICAgfVxyXG5cclxuICAgIGF1dG9BbGlnbkRpYWxvZyhkaWFsb2c6IERpYWxvZykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyUmVzaXplV2luZG93KCksIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JqSGFzTnVsbChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKG9ialtrZXldICE9IG51bGwgJiYgb2JqW2tleV0gIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXJyYXlIYXNDaGFuZ2VkKG9sZEFycmF5LCBuZXdBcnJheSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBpLCBpdGVtLCBqLCBsZW47XHJcbiAgICAgICAgaWYgKCghb2xkQXJyYXkgJiYgbmV3QXJyYXkpIHx8IChvbGRBcnJheSAmJiAhbmV3QXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZEFycmF5KSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3QXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IGogPSAwLCBsZW4gPSBuZXdBcnJheS5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcclxuICAgICAgICAgICAgaXRlbSA9IG5ld0FycmF5W2ldO1xyXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoaXRlbSkgIT09IEpTT04uc3RyaW5naWZ5KG9sZEFycmF5W2ldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeVBhcnNlRXh0cmFjdERhdGUoZGF0ZVZhbHVlLCBmb3JtYXQpIHtcclxuICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoZGF0ZVZhbHVlLCBmb3JtYXQpO1xyXG4gICAgICAgIGlmIChkYXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlRnJvbVRhc2soa2V5VmFsdWUsIGN1cnJlbnRWaWV3LCBzdGVwTWV0YWRhdGEpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICBpZiAoY3VycmVudFZpZXcua2V5VmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZpZXcua2V5VmFsdWVzKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ID09PSBrZXlWYWx1ZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGVwTWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyRXh0ZW5kRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgICAgICBzdGVwTWV0YWRhdGEuZmluZCgoeCkgPT4geC5rZXkgPT09ICdleHRlbmREYXRhJykudmFsdWUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IGFyckV4dGVuZERhdGEuZmluZChcclxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSAmJiB4LmtleS50b0xvd2VyQ2FzZSgpID09PSBrZXlWYWx1ZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdXBwZXJGaXJzdExldHRlcihpbnB1dCkge1xyXG4gICAgICAgIGlmIChpbnB1dCA9PSAnJyB8fCBpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IHdvcmRzID0gaW5wdXQuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgd29yZHMuZm9yRWFjaCgod29yZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAod29yZC50cmltKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGlmICh3b3JkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyaW5nKDEpICsgJyAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmQudG9VcHBlckNhc2UoKSArICcgJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcGxhY2VBbGwoaW5wdXRTdHIsIHNlYXJjaCwgcmVwbGFjZW1lbnQpIHtcclxuICAgICAgICBpZiAoaW5wdXRTdHIgPT09IG51bGwgfHwgaW5wdXRTdHIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnB1dFN0ci5zcGxpdChzZWFyY2gpLmpvaW4ocmVwbGFjZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSW1hZ2UoZmlsZU5hbWUpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9cXC4oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaS50ZXN0KGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUlmcmFtZSh1cmwpIHtcclxuICAgICAgICBjb25zdCBpZnJhbWUgPSBgPGlmcmFtZSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiB3aWR0aD1cIjBcIiBoZWlnaHQ9XCIwXCIgc3JjPVwiJHt1cmx9XCI+PC9pZnJhbWU+YDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaWZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0ludGVnZXJTdHJpbmcoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXN0cikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChzdHIuaW5kZXhPZignMCcpID09IDApIHtcclxuICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0ciA9PSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbiA9IE1hdGguZmxvb3IoTnVtYmVyKHN0cikpO1xyXG4gICAgICAgIHJldHVybiBuICE9PSBJbmZpbml0eSAmJiBTdHJpbmcobikgPT09IHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBbnlNYXNrKCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLWRpYWxvZy1tYXNrXCJdJylcclxuICAgICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3N+PVwidWktc2lkZWJhci1tYXNrXCJdJylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhZmVTdHJpbmdpZnkoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzdHJpbmdpZnkuc3RhYmxlU3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVTdHJpbmcodmFsdWUxLCB2YWx1ZTIpIHtcclxuICAgICAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVEYXRlKGRhdGUxLCBkYXRlMikge1xyXG4gICAgICAgIGlmICghZGF0ZTEgfHwgIWRhdGUyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRlMSA9IHRoaXMucGFyc2VEYXRlKGRhdGUxKTtcclxuICAgICAgICBkYXRlMiA9IHRoaXMucGFyc2VEYXRlKGRhdGUyKTtcclxuICAgICAgICBpZiAoZGF0ZTEuZ2V0VGltZSgpIDwgZGF0ZTIuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZGF0ZTEuZ2V0VGltZSgpID09IGRhdGUyLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaWZmRGF0ZShkYXRlMTogYW55LCBkYXRlMjogYW55KTogbnVtYmVyIHtcclxuICAgICAgICAvLyBkMSA8IGQyIHRow6wgYuG6sW5nID0gLTFcclxuICAgICAgICBjb25zdCBkMSA9IG1vbWVudChkYXRlMSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgY29uc3QgZDIgPSBtb21lbnQoZGF0ZTIpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgIGlmIChkMSA9PSBkMikge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGQxID4gZDIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wYXJlV2l0aE5vdyhkYXRlMSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZShkYXRlMSwgY3VycmVudERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0ZVN0ciBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGVTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGVTdHIgfHwgZGF0ZVN0ciA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhc3luY0ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9yZGVyQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIF8uc29ydEJ5KG9iaiwgcHJvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBCeShvYmo6IGFueVtdLCBwcm9wOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gXy5ncm91cEJ5KG9iaiwgcHJvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzdGluY3QoYXJyYXk6IG51bWJlcltdKSB7XHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZsYWdzW2FycmF5W2ldXSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmxhZ3NbYXJyYXlbaV1dID0gdHJ1ZTtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0QXJyYXkoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXN0aW5jdEZpZWxkKGFycmF5OiBhbnlbXSwgZmllbGQpIHtcclxuICAgICAgICBjb25zdCBmbGFncyA9IFtdLCBvdXRwdXQgPSBbXSwgbCA9IGFycmF5Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpXVtmaWVsZF07XHJcbiAgICAgICAgICAgIGlmIChmbGFnc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZsYWdzW3ZhbHVlXSA9IHRydWU7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuXHJcbiAgICBhZGREaXN0aW5jdChzb3VyY2U6IGFueVtdLCBkZXN0OiBhbnlbXSkge1xyXG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRlc3Quc29tZShwID0+IHAgPT0gcykpIHtcclxuICAgICAgICAgICAgICAgIGRlc3QucHVzaChzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEjDoG0gZHV54buHdCBt4bqjbmcsIGzhuqV5IHJhIHBo4bqnbiB04butIHRo4buPYSBtw6NuIFtmdW5jXSB2w6AgeMOzYSBwaOG6p24gdOG7rSDEkcOzIMSRaSBraOG7j2kgbeG6o25nXHJcbiAgICAvLyAgICAgIGNhbGxCYWNrOiBvcHRpb25hbCBwaOG7pWMgduG7pSBuaHUgY+G6p3Uga2jDoWMga2hpIGR1eeG7h3QgxJHhur9uIGl0ZW0gdGjhu49hIG3Do25cclxuICAgIGdldEFuZFJlbW92ZShzb3VyY2U6IGFueVtdLCBmdW5jOiBGdW5jdGlvbiwgY2FsbEJhY2s/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChjYWxsQmFjayA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNhbGxCYWNrID0gaSA9PiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZnVuYyhzb3VyY2VbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsQmFjayhzb3VyY2VbaV0pO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc291cmNlW2ldKTtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVNZW51KCkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYnVmZmVyVmlld1tpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGd1aWRFbXB0eSgpIHtcclxuICAgICAgICByZXR1cm4gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBraeG7g20gdHJhIHhlbSBjaHXhu5dpIGPDsyBwaOG6o2kgbeG7mXQgZ3VpZCBraMOhYyB24bubaSBj4bqjIGd1aWRFbXB0eVxyXG4gICAgICogQGRhdGUgOC8xMS8yMDIyIC0gMTE6NTE6MzEgQU1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ3VpZFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVmFsaWRHdWlkKGd1aWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBndWlkICE9IG51bGwgJiYgZ3VpZCAhPT0gJycgJiYgZ3VpZCAhPT0gdGhpcy5ndWlkRW1wdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VmFsKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdW5kZWZpbmVkIHx8IHZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lU3BhbjogVHLhuqMgduG7gSB0cnVlIG7hur91IGhhaSBraG/huqNuZyB0aOG7nWkgZ2lhbiAoc3RhcnQsIGVuZClcclxuICAgICAqIHbDoCAoY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kKSBnaWFvIG5oYXUuIEtow7RuZyB0w61uaFxyXG4gICAgICogY2jhu4kgZ2lhbyBt4buZdCDEkeG6p3UgbcO6dC5cclxuICAgICAqL1xyXG4gICAgaGFzSW50ZXJzZWN0aW9uKHN0YXJ0LCBlbmQsIGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCkge1xyXG4gICAgICAgIHJldHVybiAoc3RhcnQgPCBjb21wYXJlU3RhcnQgJiYgY29tcGFyZVN0YXJ0IDwgZW5kKVxyXG4gICAgICAgICAgICB8fCAoc3RhcnQgPCBjb21wYXJlRW5kICYmIGNvbXBhcmVFbmQgPCBlbmQpXHJcbiAgICAgICAgICAgIHx8IChjb21wYXJlU3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGNvbXBhcmVFbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0ludGVyc2VjdGlvbkRhdGUoc3RhcnQsIGVuZCwgY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kLCBkYXRlRm9ybWF0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICghZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKHN0YXJ0KSA8IG5ldyBEYXRlKGNvbXBhcmVFbmQpICYmIG5ldyBEYXRlKGVuZCkgPiBuZXcgRGF0ZShjb21wYXJlU3RhcnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydCA8IGNvbXBhcmVFbmQgJiYgZW5kID4gY29tcGFyZVN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRJbk1pbnV0ZShzdHJEYXRlMSwgc3RyRGF0ZTIsIHJvdW5kID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICghc3RyRGF0ZTEgfHwgIXN0ckRhdGUyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZDEgPSBuZXcgRGF0ZShzdHJEYXRlMSk7XHJcbiAgICAgICAgY29uc3QgZDIgPSBuZXcgRGF0ZShzdHJEYXRlMik7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXQgPSAoZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpKSAvIDEwMDAgLyA2MDtcclxuICAgICAgICBpZiAocm91bmQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5yb3VuZChvZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kVGVtcGxhdGVGcm9tTGlzdCgkbGlzdDogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+LCB0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiAkbGlzdFxyXG4gICAgICAgICAgICA/ICRsaXN0LmZpbmQoKHRlbXBsYXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5fZGVmICYmIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG9sZCB2ZXJzaW9uLCBub3QgaXZ5XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlc1t0ZW1wbGF0ZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lciAmJiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpcyBpdnkgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5sb2NhbE5hbWVzWzBdID09IHRlbXBsYXRlTmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTYW1lQXJyYXkoYXJyYXkxOiBhbnlbXSwgYXJyYXkyOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChhcnJheTEubGVuZ3RoICE9IGFycmF5Mi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkxKSB7XHJcbiAgICAgICAgICAgIGlmICghYXJyYXkyLnNvbWUocSA9PiBxID09IGl0ZW0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZFBhZ2UoKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VtcHR5QXJyYXlPck51bGwoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFycmF5ICE9PSB1bmRlZmluZWQgJiYgYXJyYXkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGxvZ2ljLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc10sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ0NvbXBhcmVPcHRpb246IFN0cmluZ0NvbXBhcmVPcHRpb24gPSBTdHJpbmdDb21wYXJlT3B0aW9uLk5vcm1hbCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxyXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGQsXHJcbiAgICAgICAgICAgIHN0cmluZ0NvbXBhcmVPcHRpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQ2xpcGJvYXJkU3RvcmFnZSgpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5QnlTdG9yYWdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSwgdmFsKTtcclxuICAgICAgICB0aGlzLmNvcHlNZXNzYWdlKHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFzdGVCeVN0b3JhZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlNZXNzYWdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICBzZWxCb3guc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgICAgc2VsQm94LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcbiAgICAgICAgc2VsQm94LnZhbHVlID0gdmFsO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsQm94KTtcclxuICAgICAgICBzZWxCb3guZm9jdXMoKTtcclxuICAgICAgICBzZWxCb3guc2VsZWN0KCk7XHJcbiAgICAgICAgc2VsQm94LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5KTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2VsQm94KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdCaW5kaW5nRmlsdGVyKGNvbHVtbjogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHNvdXJjZUZpZWxkOiBzdHJpbmcsIHN1YkZpZWxkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxyXG4gICAgICAgICAgICBvcGVyYXRvcixcclxuICAgICAgICAgICAgc291cmNlRmllbGQsXHJcbiAgICAgICAgICAgIHN1YkZpZWxkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTb3J0KHsgZmllbGQsIGRpciB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dFcnJvcihlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBNcnIgU3RhcnI6ICR7dGhpcy50blByZWZpeExvZ31gKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nSW5mbyhtc2cpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmluZm8oYE1yciBTdGFycjogJHt0aGlzLnRuUHJlZml4TG9nfWApO1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhtc2cpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ0luZm9TaW1wbGUobXNnKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7bXNnfWApO1xyXG4gICAgfTtcclxuXHJcbiAgICBtYXRjaFJ1bGVTaG9ydChzdHIsIHJ1bGUpIHtcclxuICAgICAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyBydWxlLnNwbGl0KCcqJykubWFwKGVzY2FwZVJlZ2V4KS5qb2luKCcuKicpICsgJyQnKS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXhwbGFuYXRpb24gY29kZVxyXG4gICAgbWF0Y2hSdWxlRXhwbChzdHIsIHJ1bGUpIHtcclxuICAgICAgICAvLyBmb3IgdGhpcyBzb2x1dGlvbiB0byB3b3JrIG9uIGFueSBzdHJpbmcsIG5vIG1hdHRlciB3aGF0IGNoYXJhY3RlcnMgaXQgaGFzXHJcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XHJcblxyXG4gICAgICAgIC8vIFwiLlwiICA9PiBGaW5kIGEgc2luZ2xlIGNoYXJhY3RlciwgZXhjZXB0IG5ld2xpbmUgb3IgbGluZSB0ZXJtaW5hdG9yXHJcbiAgICAgICAgLy8gXCIuKlwiID0+IE1hdGNoZXMgYW55IHN0cmluZyB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzXHJcbiAgICAgICAgcnVsZSA9IHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJyk7XHJcblxyXG4gICAgICAgIC8vIFwiXlwiICA9PiBNYXRjaGVzIGFueSBzdHJpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgaXRcclxuICAgICAgICAvLyBcIiRcIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhhdCBpbiBmcm9udCBhdCB0aGUgZW5kIG9mIGl0XHJcbiAgICAgICAgcnVsZSA9ICdeJyArIHJ1bGUgKyAnJCc7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIG1hdGNoaW5nIHN0cmluZ1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChydWxlKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXNwb25zZVJlc3VsdEZyb21FeGNlcHRpb24oZXJyOiBhbnkpOiBSZXNwb25zZVJlc3VsdCB7XHJcbiAgICAgICAgcmV0dXJuIDxhbnk+e1xyXG4gICAgICAgICAgICBlcnJvcjogJ0VYQ0VQVElPTicsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEnLFxyXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICBlcnJvckRldGFpbDogZXJyLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaXNTdHJpbmcodmFsKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB2YWwgPT09IHZhbC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRpbWUodGltZVNwYW46IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGltZVNwYW4pIHJldHVybiB0aW1lU3BhbjtcclxuICAgICAgICBjb25zdCBhcnJUaW1lSW5mbyA9IHRpbWVTcGFuLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgcmV0dXJuIGAke2FyclRpbWVJbmZvWzBdfToke2FyclRpbWVJbmZvWzFdfWA7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwZW5kU3RyaW5nV2l0aFNwYWNlKG9yaWdpbmFsOiBzdHJpbmcsIGFwcGVuZDogc3RyaW5nLCBjb25uZWN0b3I/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gYCR7b3JpZ2luYWx9YCArIChhcHBlbmQgJiYgYXBwZW5kICE9PSAnJyA/IChgICR7Y29ubmVjdG9yID8gY29ubmVjdG9yIDogJyd9IGApICsgYXBwZW5kIDogJycpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==