@smartbit4all/ng-client 4.0.2 → 4.0.4

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.
Files changed (118) hide show
  1. package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +5 -5
  2. package/esm2022/lib/component-factory-service/component-factory-service.service.mjs +4 -4
  3. package/esm2022/lib/session/api/api/session.service.mjs +4 -4
  4. package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +4 -4
  5. package/esm2022/lib/session/smart-error-catching.interceptor.mjs +4 -4
  6. package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +4 -4
  7. package/esm2022/lib/session/smart-session.module.mjs +5 -5
  8. package/esm2022/lib/session/smart-session.service.mjs +4 -4
  9. package/esm2022/lib/session/smart-timer/smart-session-timer.component.mjs +4 -4
  10. package/esm2022/lib/session/smart-timer/smart-session-timer.service.mjs +4 -4
  11. package/esm2022/lib/shared/shared.module.mjs +5 -5
  12. package/esm2022/lib/shared/smart-tooltip.directive.mjs +4 -4
  13. package/esm2022/lib/shared/smarttable.date-pipe.mjs +10 -10
  14. package/esm2022/lib/smart-client/smart-authentication.service.mjs +4 -4
  15. package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +4 -4
  16. package/esm2022/lib/smart-client/smart.component.mjs +4 -4
  17. package/esm2022/lib/smart-client/smart.service.mjs +4 -4
  18. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +4 -4
  19. package/esm2022/lib/smart-component-layout/api/api.module.mjs +5 -5
  20. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +4 -4
  21. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +5 -5
  22. package/esm2022/lib/smart-dialog/smartdialog.component.mjs +4 -4
  23. package/esm2022/lib/smart-dialog/smartdialog.module.mjs +5 -5
  24. package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +4 -4
  25. package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +5 -5
  26. package/esm2022/lib/smart-expandable-section/smart-expandable-section.service.mjs +4 -4
  27. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +4 -4
  28. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +4 -4
  29. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +4 -4
  30. package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +4 -4
  31. package/esm2022/lib/smart-filter/smart-filter/smart-filter.service.mjs +4 -4
  32. package/esm2022/lib/smart-filter/smart-filter.module.mjs +5 -5
  33. package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +4 -4
  34. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +4 -4
  35. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +4 -4
  36. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +4 -4
  37. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +5 -5
  38. package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +4 -4
  39. package/esm2022/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +4 -4
  40. package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +4 -4
  41. package/esm2022/lib/smart-form/api/api/default.service.mjs +4 -4
  42. package/esm2022/lib/smart-form/api/api.module.mjs +5 -5
  43. package/esm2022/lib/smart-form/highlightMacthingString-pipe.mjs +4 -4
  44. package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +4 -4
  45. package/esm2022/lib/smart-form/services/smartform.service.mjs +4 -4
  46. package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +4 -4
  47. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +4 -4
  48. package/esm2022/lib/smart-form/smartform.component.mjs +4 -4
  49. package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +4 -4
  50. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +4 -4
  51. package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +4 -4
  52. package/esm2022/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +4 -4
  53. package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +4 -4
  54. package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +5 -5
  55. package/esm2022/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +4 -4
  56. package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +4 -4
  57. package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +4 -4
  58. package/esm2022/lib/smart-grid/smart-grid.component.mjs +4 -4
  59. package/esm2022/lib/smart-grid/smart-grid.module.mjs +5 -5
  60. package/esm2022/lib/smart-grid/smart-grid.service.mjs +4 -4
  61. package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +4 -4
  62. package/esm2022/lib/smart-icon/smart-icon.module.mjs +5 -5
  63. package/esm2022/lib/smart-icon/smart-icon.service.mjs +4 -4
  64. package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +4 -4
  65. package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +5 -5
  66. package/esm2022/lib/smart-navbar/smart-navbar.service.mjs +4 -4
  67. package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +5 -5
  68. package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +4 -4
  69. package/esm2022/lib/smart-ng-client.module.mjs +5 -5
  70. package/esm2022/lib/smart-ng-client.service.mjs +4 -4
  71. package/esm2022/lib/smart-tab-group/smart-tab-group.component.mjs +4 -4
  72. package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +5 -5
  73. package/esm2022/lib/smart-tab-group/smart-tab-group.service.mjs +4 -4
  74. package/esm2022/lib/smart-tab-group/tab-content/tab-content.component.mjs +4 -4
  75. package/esm2022/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +4 -4
  76. package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +4 -4
  77. package/esm2022/lib/smart-table/components/loading/loading.component.mjs +4 -4
  78. package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +6 -6
  79. package/esm2022/lib/smart-table/smarttable.component.mjs +4 -4
  80. package/esm2022/lib/smart-table/smarttable.module.mjs +5 -5
  81. package/esm2022/lib/smart-table/smarttable.service.mjs +4 -4
  82. package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +4 -4
  83. package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +4 -4
  84. package/esm2022/lib/smart-table/tables/table.mjs +4 -4
  85. package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +4 -4
  86. package/esm2022/lib/smart-tree/smarttree.component.mjs +4 -4
  87. package/esm2022/lib/smart-tree/smarttree.module.mjs +5 -5
  88. package/esm2022/lib/smart-tree/smarttree.service.mjs +4 -4
  89. package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +4 -4
  90. package/esm2022/lib/view-context/api/api/view.service.mjs +4 -4
  91. package/esm2022/lib/view-context/api/api.module.mjs +5 -5
  92. package/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +4 -4
  93. package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +4 -4
  94. package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +4 -4
  95. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +4 -4
  96. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +4 -4
  97. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +4 -4
  98. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +4 -4
  99. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +4 -4
  100. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +4 -4
  101. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +4 -4
  102. package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +4 -4
  103. package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +4 -4
  104. package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +4 -4
  105. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +4 -4
  106. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +4 -4
  107. package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +4 -4
  108. package/esm2022/lib/view-context/smart-view-context.module.mjs +5 -5
  109. package/esm2022/lib/view-context/smart-view-context.service.mjs +7 -7
  110. package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +4 -4
  111. package/esm2022/lib/view-context/value-api/api/value.service.mjs +4 -4
  112. package/esm2022/lib/view-context/value-api/api.module.mjs +5 -5
  113. package/fesm2022/smartbit4all-ng-client.mjs +362 -362
  114. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  115. package/lib/smart-table/directives/mat-context-menu-trigger-for.directive.d.ts +2 -2
  116. package/package.json +9 -9
  117. package/smartbit4all-ng-client-4.0.4.tgz +0 -0
  118. package/smartbit4all-ng-client-4.0.2.tgz +0 -0
@@ -631,10 +631,10 @@ export class SmartFormService {
631
631
  widget.label = await this.getTranslationOfKey(widget.originalLabel);
632
632
  }));
633
633
  }
634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
635
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartFormService }); }
634
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
635
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService }); }
636
636
  }
637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartFormService, decorators: [{
637
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService, decorators: [{
638
638
  type: Injectable
639
639
  }] });
640
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBdUIsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBSy9GLE1BQU0sT0FBTyxnQkFBZ0I7SUFEN0I7UUFFbUIsYUFBUSxHQUFXLFdBQVcsQ0FBQztRQUVoRCxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBeWpCQyxvQkFBZSxHQUFHLElBQUksTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDaEUsNkJBQXdCLEdBQUcsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzRCwwQkFBcUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxnQ0FBMkIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QywrQkFBMEIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCx3QkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxzQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxtQkFBYyxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0tBa0x6RDtJQTd1QkMsdUJBQXVCLENBQUMsR0FBVztRQUNqQyxPQUFP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QUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztvQkFDN0MsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUMvQyxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFlBQVksQ0FBQztvQkFDbkQsTUFBTSxDQUFDLFNBQVMsRUFDaEIsQ0FBQztvQkFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBVSxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQTBCO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0MsQ0FBQztZQUNELFNBQVM7WUFDVCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0FydkJVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbkRlZmluaXRpb24sIFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bSwgU21hcnRGb3JtV2lkZ2V0VHlwZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybVdpZGdldCwgU21hcnRJdGVtLCBTbWFydEl0ZW1zLCBTbWFydFNlbGVjdCB9IGZyb20gJy4uL3NtYXJ0Zm9ybS5mb3JtLW1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRGb3JtLCBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50LCBTbWFydFZhbGlkYXRvciwgVmFsdWUgfSBmcm9tICcuLi9zbWFydGZvcm0ubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU21hcnRGb3JtU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbXB0eUtleTogc3RyaW5nID0gJ2UjbSVwQHQqeSc7XHJcblxyXG4gIGdyb3VwOiBhbnkgPSB7fTtcclxuXHJcbiAgZm9ybUdyb3VwPzogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgc21hcnRGb3JtPzogU21hcnRGb3JtO1xyXG5cclxuICBnZXRTbWFydEZvcm1XaWRnZXRCeUtleShrZXk6IHN0cmluZyk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh0aGlzLnNtYXJ0Rm9ybT8ud2lkZ2V0cyEsIGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybShcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10gfCBTbWFydEl0ZW1zPGFueT5bXSxcclxuICAgIGtleXM6IHN0cmluZ1tdXHJcbiAgKTogc3RyaW5nW10ge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGtleXMucHVzaCh3LmtleSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1RfTVVMVElQTEUgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGtleXMgPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3LnZhbHVlTGlzdCwga2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgY2hpbGRyZW5LZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIFtdKTtcclxuICAgICAgICAgIGNoaWxkcmVuS2V5cyA9IGNoaWxkcmVuS2V5c1xyXG4gICAgICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5ICE9PSB3LmtleSlcclxuICAgICAgICAgICAgLmZsYXRNYXAoKGtleTogc3RyaW5nKSA9PiBgJHt3LmtleX0uJHtrZXl9YCk7XHJcblxyXG4gICAgICAgICAga2V5cy5wdXNoKC4uLmNoaWxkcmVuS2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGtleTogc3RyaW5nXHJcbiAgKTogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHdpZGdldEZvdW5kQnlLZXk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGZvciAobGV0IHcgb2Ygd2lkZ2V0cykge1xyXG4gICAgICBpZiAody5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHJldHVybiB3O1xyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgdy52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldEZvdW5kQnlLZXkgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3LnZhbHVlTGlzdCwga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0Rm91bmRCeUtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Rm91bmRCeUtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5ID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgdmFsdWU6IGFueTtcclxuXHJcbiAgICBzcGxpdHRlZEtleS5mb3JFYWNoKChrOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gbW9kZWxba107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IG51bGwgfHxcclxuICAgICAgICAgICghdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2tdICE9PSAnYm9vbGVhbicpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2tdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XHJcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgdHlwZW9mIGVsZW1lbnRbcHJvcGVydHldID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIGVsZW1lbnRbcHJvcGVydHldID09PSBudWxsIHx8XHJcbiAgICAgICAgIWVsZW1lbnRbcHJvcGVydHldIHx8XHJcbiAgICAgICAgIWVsZW1lbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbm5lclByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudFtwcm9wZXJ0eV0pO1xyXG4gICAgICBpbm5lclByb3BlcnRpZXMgPSBpbm5lclByb3BlcnRpZXMubWFwKFxyXG4gICAgICAgIChpbm5lclByb3BlcnR5OiBzdHJpbmcpID0+IGAke3Byb3BlcnR5fS4ke2lubmVyUHJvcGVydHl9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcHJvcGVydGllcy5wdXNoKC4uLmlubmVyUHJvcGVydGllcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVzRnJvbU1vZGVsKHdpZGdldHM/OiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBzbWFydEZvcm0gPSB0aGlzLnNtYXJ0Rm9ybSE7XHJcbiAgICBjb25zdCBkYXRhID0gc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsPy5kYXRhO1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXdpZGdldHMpIHtcclxuICAgICAgd2lkZ2V0cyA9IHNtYXJ0Rm9ybS53aWRnZXRzO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3aWRnZXRzLCBbXSk7XHJcblxyXG4gICAgbGV0IHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZGF0YSkpIHtcclxuICAgICAgaWYgKGtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHdpZGdldHMsIGtleSk7XHJcbiAgICAgICAgaWYgKHdpZGdldCkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRPR0dMRSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC5zaG93TGFiZWwgPT09IHVuZGVmaW5lZCAmJiBzbWFydEZvcm0uc2hvd0xhYmVsKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnNob3dMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNvcHlGcm9tVmFsdWVTZXRUb1ZhbHVlc0xpc3Qod2lkZ2V0LCBzbWFydEZvcm0uY29tcG9uZW50TW9kZWwudmFsdWVTZXRzKTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1ggJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEluIGNhc2Ugb2YgQ2hlY2tCb3gyXHJcbiAgICAgICAgICBsZXQgc3BsaXR0ZWRLZXlzID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICBzcGxpdHRlZEtleXMuc3BsaWNlKHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxLCAxKTtcclxuICAgICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHdpZGdldHMsIHNwbGl0dGVkS2V5cy5qb2luKCcuJykpO1xyXG4gICAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgICAgICB0aGlzLmNvcHlGcm9tVmFsdWVTZXRUb1ZhbHVlc0xpc3Qod2lkZ2V0LCBzbWFydEZvcm0uY29tcG9uZW50TW9kZWwudmFsdWVTZXRzKTtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC52YWx1ZUxpc3QpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFZhbHVlRGVlcGx5KGRhdGEsIGAke3dpZGdldD8ua2V5fS4ke2l0ZW0ua2V5fWApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29weUZyb21WYWx1ZVNldFRvVmFsdWVzTGlzdCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+LCB2YWx1ZVNldHM6IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1ggfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh3aWRnZXQuc2VsZWN0aW9uICYmIHZhbHVlU2V0cykge1xyXG4gICAgICAgIGxldCB2YWx1ZVNldCA9IHZhbHVlU2V0c1t3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZV07XHJcbiAgICAgICAgaWYgKCF2YWx1ZVNldCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCd2YWx1ZVNldCBub3QgZm91bmQnLCB3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB2YWx1ZVNldERhdGEgPSB2YWx1ZVNldC52YWx1ZVNldERhdGE7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzID0gdmFsdWVTZXREYXRhLnZhbHVlcztcclxuICAgICAgICAgIGxldCBkaXNwbGF5UHJvcGVydHkgPVxyXG4gICAgICAgICAgICAod2lkZ2V0IGFzIFNtYXJ0U2VsZWN0PGFueT4pLnNlbGVjdGlvbj8uZGlzcGxheVByb3BlcnR5ID8/ICdkaXNwbGF5VmFsdWUnO1xyXG4gICAgICAgICAgLy8gY2hlY2sgaXMgZGlzcGxheVByb3BlcnR5IGV4aXN0cywgZmFsbGJhY2sgZm9yIGNvbW1vbiBkaXNwbGF5IHByb3BlcnRpZXNcclxuICAgICAgICAgIGlmICghdGhpcy5jaGVja1Byb3BlcnR5KHZhbHVlcywgZGlzcGxheVByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICBkaXNwbGF5UHJvcGVydHkgPSAnbmFtZSc7IC8vIEdlbmVyaWNWYWx1ZS5uYW1lXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja1Byb3BlcnR5KHZhbHVlcywgZGlzcGxheVByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eSA9ICdkaXNwbGF5VmFsdWUnOyAvLyBWYWx1ZS5kaXNwbGF5VmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bS5QUk9QRVJUWSAmJlxyXG4gICAgICAgICAgICAhd2lkZ2V0LnNlbGVjdGlvbi5tYXBwaW5nLmxlbmd0aFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0eSA9IHZhbHVlU2V0RGF0YS5rZXlQcm9wZXJ0eSA/PyAnb2JqZWN0VXJpJztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICBrZXlQcm9wZXJ0eSA9ICd1cmknOyAvLyBHZW5lcmljVmFsdWUudXJpXHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICAgIGtleVByb3BlcnR5ID0gJ29iamVjdFVyaSc7IC8vIFZhbHVlLm9iamVjdFVyaVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVtkaXNwbGF5UHJvcGVydHldLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQsIHdpZGdldC5zZWxlY3Rpb24uZW1wdHlMYWJlbCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bS5PQkpFQ1QgJiZcclxuICAgICAgICAgICAgIXdpZGdldC5zZWxlY3Rpb24ubWFwcGluZy5sZW5ndGhcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGAke2luZGV4fWAsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVbZGlzcGxheVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Byb3BlcnR5KHZhbHVlczogb2JqZWN0W10sIHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWVzPy5sZW5ndGgpIHtcclxuICAgICAgLy8gbm8gc2FtcGxlIGRhdGEsIGFzc3VtZSBleGlzdGFuY2VcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcGVydHkgaW4gdmFsdWVzWzBdO1xyXG4gIH1cclxuXHJcbiAgdG9Gb3JtR3JvdXAoKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh0aGlzLnNtYXJ0Rm9ybSEud2lkZ2V0cyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzID0gdGhpcy5ncm91cDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAodGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzICYmIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5zZXRWYWxpZGF0b3JzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtQ29udHJvbHMod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSB8IFNtYXJ0SXRlbTxhbnk+W10sIHBhcmVudEtleT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChgJHt3aWRnZXQua2V5fWAsIHdpZGdldC52YWx1ZSwgd2lkZ2V0LmlzRGlzYWJsZWQsIHdpZGdldC52YWxpZGF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWAsXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCAvLyBUT0RPIHJlYWxseSB3ZSBkb24ndCBwYXNzIHdpZGdldC5pc0Rpc2FibGVkP1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LiR7a2V5fWAsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzTXVsdGlwbGUgPyB3aWRnZXQudmFsdWUuZGF0YVtrZXldIDogd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVswXSxcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICBgJHtwYXJlbnRLZXl9LiR7d2lkZ2V0LmtleX1gLFxyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlLFxyXG4gICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldC52YWx1ZUxpc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0LCB3aWRnZXQua2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkYXRvckluTGlzdCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yLCBsaXN0PzogU21hcnRWYWxpZGF0b3JbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGxpc3QgIT09IHVuZGVmaW5lZCAmJiBsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdC5zb21lKCh2KSA9PiB2ID09PSB2YWxpZGF0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBpc0Rpc2FibGVkPzogYm9vbGVhbixcclxuICAgIHZhbGlkYXRvcnM/OiBTbWFydFZhbGlkYXRvcltdXHJcbiAgKTogVW50eXBlZEZvcm1Db250cm9sIHtcclxuICAgIGxldCBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gdGhpcy5ncm91cFtrZXldO1xyXG4gICAgaWYgKCFmb3JtQ29udHJvbCkge1xyXG4gICAgICBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgICAgdGhpcy5ncm91cFtrZXldID0gZm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSB8fCAnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB2YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IudmFsaWRhdG9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdLCBncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXQudmFsdWVMaXN0LCBncm91cCk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dID0gW1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdGFrZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgLy9NYXAgY2hlY2tib3gga2V5IC0gYm9vbGVhbiB2YWx1ZSB0byBzdHJpbmcga2V5IGFycmF5XHJcbiAgICAgICAgICBsZXQgdmFsdWVLZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YWtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlS2V5cy5mb3JFYWNoKCh2YWx1ZUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVt2YWx1ZUtleV07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhLnB1c2godmFsdWVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBbZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uJHtrZXl9YF0udmFsdWVdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlID0gZ3JvdXAuY29udHJvbHNbd2lkZ2V0LmtleV0udmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9TbWFydEZvcm0oZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBTbWFydEZvcm0ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtKSB7XHJcbiAgICAgIHRoaXMuY29weVZhbHVlRnJvbUZvcm1Ub1dpZGdldEJlYW5zKHRoaXMuc21hcnRGb3JtLndpZGdldHMsIGdyb3VwKTtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsPy5kYXRhO1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuZ2V0UHJvcGVydHlOYW1lc0RlZXBseShkYXRhKSkge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLmNvbnRyb2xzW2tleV0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZURlZXBseShkYXRhLCBrZXksIGdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRGb3JtITtcclxuICB9XHJcblxyXG4gIGdldE1vZGVsKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogYW55IHtcclxuICAgIGlmICghdGhpcy5zbWFydEZvcm0/LmNvbXBvbmVudE1vZGVsKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBvcmlnaW5hbE1vZGVsID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YTtcclxuICAgIGxldCBjb3B5T2ZNb2RlbCA9IHsgLi4ub3JpZ2luYWxNb2RlbCB9O1xyXG5cclxuICAgIC8vIGNvcHlPZk1vZGVsIHNob3VsZCBiZSB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IGNvcHlPZk1vZGVsO1xyXG4gICAgLy8gY29weSB2YWx1ZSBmcm9tIEZvcm1Hcm91cCBpbnRvIG1vZGVsXHJcbiAgICB0aGlzLnRvU21hcnRGb3JtKGdyb3VwKTtcclxuXHJcbiAgICBsZXQgbmV3TW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IG9yaWdpbmFsTW9kZWw7XHJcblxyXG4gICAgcmV0dXJuIG5ld01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGNvbnN0cmFpbnRzOiBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50W11cclxuICApIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICBsZXQgd2lkZ2V0Q29uc3RyYWludHMgPSBjb25zdHJhaW50cz8uZmlsdGVyKFxyXG4gICAgICAgIC8vKGNvbnN0cmFpbnQ6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQuZGF0YU5hbWUgPT09IHdpZGdldC5rZXlcclxuICAgICAgICAoY29uc3RyYWludCkgPT4gdGhpcy5hbnRQYXRoTWF0Y2hlcihjb25zdHJhaW50LmRhdGFOYW1lLCB3aWRnZXQua2V5KVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdpZGdldENvbnN0cmFpbnRzICYmIHdpZGdldENvbnN0cmFpbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldENvbnN0cmFpbnRzLmZvckVhY2goKGNvbnN0cmFpbnQpID0+IHtcclxuICAgICAgICAgIGlmIChjb25zdHJhaW50LnZpc2libGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LmlzVmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZGdldC5pc1Zpc2libGUgPSBjb25zdHJhaW50LnZpc2libGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSB3aWRnZXQudmFsaWRhdG9ycyA/PyBbXTtcclxuICAgICAgICAgICAgbGV0IHJlcXVpcmVkSW5kZXggPSB2YWxpZGF0b3JzLmZpbmRJbmRleCgodikgPT4gdi52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBsZXQgd2FzTWFuZGF0b3J5ID0gcmVxdWlyZWRJbmRleCA+PSAwO1xyXG4gICAgICAgICAgICBsZXQgdG9iZU1hbmRhdG9yeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5tYW5kYXRvcnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIC8vIG5vdCBzcGVjaWZpZWQgb24gc2VydmVyLCB1c2UgY2xpZW50IHN0YXRlXHJcbiAgICAgICAgICAgICAgLy8gaWYgd2lkZ2V0IGlzIG5vdCB2aXNpYmxlLCBjbGllbnQgc2hvdWxkIGRlZmF1bHQgdG8gbm90IG1hbmRhdG9yeVxyXG4gICAgICAgICAgICAgIHRvYmVNYW5kYXRvcnkgPSB3aWRnZXQuaXNWaXNpYmxlICYmIHdhc01hbmRhdG9yeTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0b2JlTWFuZGF0b3J5ID0gY29uc3RyYWludC5tYW5kYXRvcnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF3YXNNYW5kYXRvcnkgJiYgdG9iZU1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgICAgIC8vIGFkZCByZXF1aXJlZCB2YWxpZGF0b3JcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycyA9IFtcclxuICAgICAgICAgICAgICAgIC4uLnZhbGlkYXRvcnMsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgaXNDdXN0b206IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAncmVxdWlyZWQnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSBlbXB0eSBpdGVtXHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eUl0ZW1Gcm9tVmFsdWVMaXN0KHdpZGdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHdhc01hbmRhdG9yeSAmJiAhdG9iZU1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSByZXF1aXJlZCB2YWxpZGF0b3JcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycz8uc3BsaWNlKHJlcXVpcmVkSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIC8vIGFkZCBlbXB0eSBpdGVtXHJcbiAgICAgICAgICAgICAgbGV0IGVtcHR5TGFiZWwgPSAnJztcclxuICAgICAgICAgICAgICBpZiAoJ3NlbGVjdGlvbicgaW4gd2lkZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlbXB0eUxhYmVsID0gd2lkZ2V0LnNlbGVjdGlvbj8uZW1wdHlMYWJlbCA/PyAnJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQsIGVtcHR5TGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGlmICh3aWRnZXQuaXNEaXNhYmxlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCA9ICFjb25zdHJhaW50LmVuYWJsZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCAmJlxyXG4gICAgICAgIHdpZGdldC52YWx1ZUxpc3QubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYXBwbHlDb21wb25lbnRDb25zdHJhaW50cyh3aWRnZXQudmFsdWVMaXN0LCBjb25zdHJhaW50cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleFJlZ2V4Q2hhcnMgPSBuZXcgUmVnRXhwKC9bXFwuXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwrXFxeXFwkXFxcXFxcfF0vZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleEFzdGVyaXNrSW5UaGVNaWRkbGUgPSBuZXcgUmVnRXhwKC8oW15cXCpdKVxcKihbXlxcKl0pL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlRW5kID0gbmV3IFJlZ0V4cCgvKFteXFwqXSlcXCokL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlQmVnaW5uaW5nID0gbmV3IFJlZ0V4cCgvXlxcKihbXlxcKl0pL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza09ubHkgPSBuZXcgUmVnRXhwKC9eXFwqJC9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4RG91YmxlQXN0ZXJpc2tXaXRoRG90ID0gbmV3IFJlZ0V4cCgvXFwqXFwqXFxcXFxcLi9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4RG91YmxlQXN0ZXJpc2sgPSBuZXcgUmVnRXhwKC9cXCpcXCovZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleFF1ZXN0aW9uTWFyayA9IG5ldyBSZWdFeHAoL1xcPy9nKTtcclxuICBwcml2YXRlIHJlZ2V4QnlQYXR0ZXJuOiBNYXA8c3RyaW5nLCBSZWdFeHA+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhbnRQYXRoTWF0Y2hlcihwYXR0ZXJuPzogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXBhdHRlcm4gfHwgIXBhdGgpIHtcclxuICAgICAgLy8gZW1wdHkgcGF0dGVybiBvciBwYXRoIC0+IG5vdCBldmFsdWF0ZWQsIHRydWUgb3IgZmFsc2U/XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGxldCByZWdleCA9IHRoaXMucmVnZXhCeVBhdHRlcm4uZ2V0KHBhdHRlcm4pO1xyXG4gICAgaWYgKHJlZ2V4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gZXNjYXBlIHJlZ2V4IGNoYXJhY3RlcnMgZXhjZXB0IGZvciA/LCAqLCAqKlxyXG4gICAgICBsZXQgcmVnZXhQYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhSZWdleENoYXJzLCAnXFxcXCQmJyk7XHJcblxyXG4gICAgICAvLyByZXBsYWNlIGFudC1zdHlsZSB3aWxkY2FyZHMgd2l0aCByZWdleCBlcXVpdmFsZW50c1xyXG5cclxuICAgICAgLy8gcmVwbGFjZSAqIHdpdGggYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgJy4nXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlTWlkZGxlLCAnJDFbXi5dKiQyJyk7IC8vIG5vdCogKiBub3QqXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlRW5kLCAnJDFbXi5dKicpOyAvLyBub3QqICogRU9MXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlQmVnaW5uaW5nLCAnW14uXSokMScpOyAvLyBCT0wgKiBub3QqXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza09ubHksICdbXi5dKicpOyAvLyBCT0wgKiBFT0xcclxuXHJcbiAgICAgIC8vIHJlcGxhY2UgKiogd2l0aCBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nICcuJ1xyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4RG91YmxlQXN0ZXJpc2tXaXRoRG90LCAnLionKTsgLy8gKiouXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhEb3VibGVBc3RlcmlzaywgJy4qJyk7IC8vICoqXHJcblxyXG4gICAgICAvLyByZXBsYWNlID8gd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgbWF0Y2hlclxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4UXVlc3Rpb25NYXJrLCAnLicpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGEgUmVnRXhwIG9iamVjdFxyXG4gICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgcmVnZXhQYXR0ZXJuICsgJyQnKTtcclxuICAgICAgdGhpcy5yZWdleEJ5UGF0dGVybi5zZXQocGF0dGVybiwgcmVnZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRlc3QgdGhlIHBhdGggYWdhaW5zdCB0aGUgZ2VuZXJhdGVkIHJlZ2V4XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdChwYXRoKTtcclxuICB9XHJcblxyXG4gIGFwcGx5Q29uc3RyYWludHMod2lkZ2V0cz86IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10pOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cyAmJlxyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybSEuY29tcG9uZW50TW9kZWw/LmNvbnN0cmFpbnRzLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICghd2lkZ2V0cykge1xyXG4gICAgICAgIHdpZGdldHMgPSB0aGlzLnNtYXJ0Rm9ybSEud2lkZ2V0cztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMod2lkZ2V0cywgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+LCBlbXB0eUxhYmVsPzogc3RyaW5nKSB7XHJcbiAgICBpZiAod2lkZ2V0LnR5cGUgPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QpIHtcclxuICAgICAgY29uc3QgY29udGFpbnNFbXB0eUtleSA9IHdpZGdldC52YWx1ZUxpc3Quc29tZSgodikgPT4gdi5rZXkgPT09IHRoaXMuZW1wdHlLZXkpO1xyXG4gICAgICBpZiAoIWNvbnRhaW5zRW1wdHlLZXkpIHtcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0Py51bnNoaWZ0KHtcclxuICAgICAgICAgIGtleTogdGhpcy5lbXB0eUtleSxcclxuICAgICAgICAgIGxhYmVsOiBlbXB0eUxhYmVsID8/ICcnLFxyXG4gICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgdmFsdWU6ICcnLCAvLyB0aGlzIHNob3VsZCBiZSB1bmRlZmluZWQsIGJ1dCBGb3JtQ29udHJvbCBjYW5ub3QgYmUgbnVsbCwgZnJvbSB2MTQgaXQgd2lsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVFbXB0eUl0ZW1Gcm9tVmFsdWVMaXN0KHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pIHtcclxuICAgIGlmICgndmFsdWVMaXN0JyBpbiB3aWRnZXQpIHtcclxuICAgICAgaWYgKHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBmaXJzdEl0ZW0gPSB3aWRnZXQudmFsdWVMaXN0WzBdO1xyXG4gICAgICAgIGlmIChmaXJzdEl0ZW0/LmtleSA9PT0gdGhpcy5lbXB0eUtleSkge1xyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5zaGlmdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsdGVyV2lkZ2V0c0J5VmlzaWJpbGl0eSh3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSB7XHJcbiAgICByZXR1cm4gd2lkZ2V0cy5maWx0ZXIoKHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pID0+XHJcbiAgICAgIHdpZGdldC5pc1Zpc2libGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB3aWRnZXQuaXNWaXNpYmxlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRUcmFuc2xhdGlvbk9mS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNtYXJ0Rm9ybSEudHJhbnNsYXRlU2VydmljZSEuZ2V0KGtleSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB0cmFuc2xhdGVXaWRnZXRzKHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIpIHtcclxuICAgICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsTGFiZWwpIHtcclxuICAgICAgICAgICAgd2lkZ2V0Lm9yaWdpbmFsTGFiZWwgPSBgJHt3aWRnZXQubGFiZWx9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICBMYWJlbFxyXG4gICAgICAgICAgd2lkZ2V0LmxhYmVsID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KHdpZGdldC5vcmlnaW5hbExhYmVsKTtcclxuXHJcbiAgICAgICAgICAvLyBQbGFjZWhvbGRlclxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTlVNQkVSIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJJQ0hfVEVYVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfQk9YKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQucGxhY2Vob2xkZXJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbFBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIgPSBgJHt3aWRnZXQucGxhY2Vob2xkZXJ9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXQucGxhY2Vob2xkZXIgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFZhbGlkYXRvcnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNWRyAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMubWFwKGFzeW5jICh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPSBgJHt2YWxpZGF0b3IuZXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3IuZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJbmRpY2F0b3JcclxuICAgICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiYgd2lkZ2V0LmluZGljYXRvcikge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzID1cclxuICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzLm1hcCgobGFiZWw6IHN0cmluZykgPT4gbGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleShcclxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yIS5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscyFbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUkFESU9fQlVUVE9OKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXQudmFsdWVMaXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRzKHdpZGdldC52YWx1ZUxpc3QhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdHJhbnNsYXRlV2lkZ2V0SXRlbXMod2lkZ2V0czogU21hcnRJdGVtczxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEl0ZW1zPGFueT4pID0+IHtcclxuICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbExhYmVsKSB7XHJcbiAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgTGFiZWxcclxuICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
640
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBdUIsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBSy9GLE1BQU0sT0FBTyxnQkFBZ0I7SUFEN0I7UUFFbUIsYUFBUSxHQUFXLFdBQVcsQ0FBQztRQUVoRCxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBeWpCQyxvQkFBZSxHQUFHLElBQUksTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDaEUsNkJBQXdCLEdBQUcsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzRCwwQkFBcUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxnQ0FBMkIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QywrQkFBMEIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCx3QkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxzQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxtQkFBYyxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0tBa0x6RDtJQTd1QkMsdUJBQXVCLENBQUMsR0FBVztRQUNqQyxPQUFP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QUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztvQkFDN0MsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUMvQyxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFlBQVksQ0FBQztvQkFDbkQsTUFBTSxDQUFDLFNBQVMsRUFDaEIsQ0FBQztvQkFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBVSxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQTBCO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0MsQ0FBQztZQUNELFNBQVM7WUFDVCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0FydkJVLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbkRlZmluaXRpb24sIFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bSwgU21hcnRGb3JtV2lkZ2V0VHlwZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybVdpZGdldCwgU21hcnRJdGVtLCBTbWFydEl0ZW1zLCBTbWFydFNlbGVjdCB9IGZyb20gJy4uL3NtYXJ0Zm9ybS5mb3JtLW1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRGb3JtLCBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50LCBTbWFydFZhbGlkYXRvciwgVmFsdWUgfSBmcm9tICcuLi9zbWFydGZvcm0ubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU21hcnRGb3JtU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbXB0eUtleTogc3RyaW5nID0gJ2UjbSVwQHQqeSc7XHJcblxyXG4gIGdyb3VwOiBhbnkgPSB7fTtcclxuXHJcbiAgZm9ybUdyb3VwPzogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgc21hcnRGb3JtPzogU21hcnRGb3JtO1xyXG5cclxuICBnZXRTbWFydEZvcm1XaWRnZXRCeUtleShrZXk6IHN0cmluZyk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh0aGlzLnNtYXJ0Rm9ybT8ud2lkZ2V0cyEsIGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybShcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10gfCBTbWFydEl0ZW1zPGFueT5bXSxcclxuICAgIGtleXM6IHN0cmluZ1tdXHJcbiAgKTogc3RyaW5nW10ge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGtleXMucHVzaCh3LmtleSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1RfTVVMVElQTEUgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGtleXMgPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3LnZhbHVlTGlzdCwga2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgY2hpbGRyZW5LZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIFtdKTtcclxuICAgICAgICAgIGNoaWxkcmVuS2V5cyA9IGNoaWxkcmVuS2V5c1xyXG4gICAgICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5ICE9PSB3LmtleSlcclxuICAgICAgICAgICAgLmZsYXRNYXAoKGtleTogc3RyaW5nKSA9PiBgJHt3LmtleX0uJHtrZXl9YCk7XHJcblxyXG4gICAgICAgICAga2V5cy5wdXNoKC4uLmNoaWxkcmVuS2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGtleTogc3RyaW5nXHJcbiAgKTogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHdpZGdldEZvdW5kQnlLZXk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGZvciAobGV0IHcgb2Ygd2lkZ2V0cykge1xyXG4gICAgICBpZiAody5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHJldHVybiB3O1xyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgdy52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldEZvdW5kQnlLZXkgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3LnZhbHVlTGlzdCwga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0Rm91bmRCeUtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Rm91bmRCeUtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5ID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgdmFsdWU6IGFueTtcclxuXHJcbiAgICBzcGxpdHRlZEtleS5mb3JFYWNoKChrOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gbW9kZWxba107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IG51bGwgfHxcclxuICAgICAgICAgICghdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2tdICE9PSAnYm9vbGVhbicpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2tdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XHJcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgdHlwZW9mIGVsZW1lbnRbcHJvcGVydHldID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIGVsZW1lbnRbcHJvcGVydHldID09PSBudWxsIHx8XHJcbiAgICAgICAgIWVsZW1lbnRbcHJvcGVydHldIHx8XHJcbiAgICAgICAgIWVsZW1lbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbm5lclByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudFtwcm9wZXJ0eV0pO1xyXG4gICAgICBpbm5lclByb3BlcnRpZXMgPSBpbm5lclByb3BlcnRpZXMubWFwKFxyXG4gICAgICAgIChpbm5lclByb3BlcnR5OiBzdHJpbmcpID0+IGAke3Byb3BlcnR5fS4ke2lubmVyUHJvcGVydHl9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcHJvcGVydGllcy5wdXNoKC4uLmlubmVyUHJvcGVydGllcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVzRnJvbU1vZGVsKHdpZGdldHM/OiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBzbWFydEZvcm0gPSB0aGlzLnNtYXJ0Rm9ybSE7XHJcbiAgICBjb25zdCBkYXRhID0gc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsPy5kYXRhO1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXdpZGdldHMpIHtcclxuICAgICAgd2lkZ2V0cyA9IHNtYXJ0Rm9ybS53aWRnZXRzO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3aWRnZXRzLCBbXSk7XHJcblxyXG4gICAgbGV0IHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZGF0YSkpIHtcclxuICAgICAgaWYgKGtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHdpZGdldHMsIGtleSk7XHJcbiAgICAgICAgaWYgKHdpZGdldCkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRPR0dMRSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC5zaG93TGFiZWwgPT09IHVuZGVmaW5lZCAmJiBzbWFydEZvcm0uc2hvd0xhYmVsKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnNob3dMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNvcHlGcm9tVmFsdWVTZXRUb1ZhbHVlc0xpc3Qod2lkZ2V0LCBzbWFydEZvcm0uY29tcG9uZW50TW9kZWwudmFsdWVTZXRzKTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1ggJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEluIGNhc2Ugb2YgQ2hlY2tCb3gyXHJcbiAgICAgICAgICBsZXQgc3BsaXR0ZWRLZXlzID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICBzcGxpdHRlZEtleXMuc3BsaWNlKHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxLCAxKTtcclxuICAgICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHdpZGdldHMsIHNwbGl0dGVkS2V5cy5qb2luKCcuJykpO1xyXG4gICAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgICAgICB0aGlzLmNvcHlGcm9tVmFsdWVTZXRUb1ZhbHVlc0xpc3Qod2lkZ2V0LCBzbWFydEZvcm0uY29tcG9uZW50TW9kZWwudmFsdWVTZXRzKTtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC52YWx1ZUxpc3QpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFZhbHVlRGVlcGx5KGRhdGEsIGAke3dpZGdldD8ua2V5fS4ke2l0ZW0ua2V5fWApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29weUZyb21WYWx1ZVNldFRvVmFsdWVzTGlzdCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+LCB2YWx1ZVNldHM6IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1ggfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh3aWRnZXQuc2VsZWN0aW9uICYmIHZhbHVlU2V0cykge1xyXG4gICAgICAgIGxldCB2YWx1ZVNldCA9IHZhbHVlU2V0c1t3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZV07XHJcbiAgICAgICAgaWYgKCF2YWx1ZVNldCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCd2YWx1ZVNldCBub3QgZm91bmQnLCB3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB2YWx1ZVNldERhdGEgPSB2YWx1ZVNldC52YWx1ZVNldERhdGE7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzID0gdmFsdWVTZXREYXRhLnZhbHVlcztcclxuICAgICAgICAgIGxldCBkaXNwbGF5UHJvcGVydHkgPVxyXG4gICAgICAgICAgICAod2lkZ2V0IGFzIFNtYXJ0U2VsZWN0PGFueT4pLnNlbGVjdGlvbj8uZGlzcGxheVByb3BlcnR5ID8/ICdkaXNwbGF5VmFsdWUnO1xyXG4gICAgICAgICAgLy8gY2hlY2sgaXMgZGlzcGxheVByb3BlcnR5IGV4aXN0cywgZmFsbGJhY2sgZm9yIGNvbW1vbiBkaXNwbGF5IHByb3BlcnRpZXNcclxuICAgICAgICAgIGlmICghdGhpcy5jaGVja1Byb3BlcnR5KHZhbHVlcywgZGlzcGxheVByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICBkaXNwbGF5UHJvcGVydHkgPSAnbmFtZSc7IC8vIEdlbmVyaWNWYWx1ZS5uYW1lXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja1Byb3BlcnR5KHZhbHVlcywgZGlzcGxheVByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eSA9ICdkaXNwbGF5VmFsdWUnOyAvLyBWYWx1ZS5kaXNwbGF5VmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bS5QUk9QRVJUWSAmJlxyXG4gICAgICAgICAgICAhd2lkZ2V0LnNlbGVjdGlvbi5tYXBwaW5nLmxlbmd0aFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0eSA9IHZhbHVlU2V0RGF0YS5rZXlQcm9wZXJ0eSA/PyAnb2JqZWN0VXJpJztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICBrZXlQcm9wZXJ0eSA9ICd1cmknOyAvLyBHZW5lcmljVmFsdWUudXJpXHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICAgIGtleVByb3BlcnR5ID0gJ29iamVjdFVyaSc7IC8vIFZhbHVlLm9iamVjdFVyaVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVtkaXNwbGF5UHJvcGVydHldLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQsIHdpZGdldC5zZWxlY3Rpb24uZW1wdHlMYWJlbCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bS5PQkpFQ1QgJiZcclxuICAgICAgICAgICAgIXdpZGdldC5zZWxlY3Rpb24ubWFwcGluZy5sZW5ndGhcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGAke2luZGV4fWAsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVbZGlzcGxheVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Byb3BlcnR5KHZhbHVlczogb2JqZWN0W10sIHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWVzPy5sZW5ndGgpIHtcclxuICAgICAgLy8gbm8gc2FtcGxlIGRhdGEsIGFzc3VtZSBleGlzdGFuY2VcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcGVydHkgaW4gdmFsdWVzWzBdO1xyXG4gIH1cclxuXHJcbiAgdG9Gb3JtR3JvdXAoKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh0aGlzLnNtYXJ0Rm9ybSEud2lkZ2V0cyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzID0gdGhpcy5ncm91cDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAodGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzICYmIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5zZXRWYWxpZGF0b3JzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtQ29udHJvbHMod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSB8IFNtYXJ0SXRlbTxhbnk+W10sIHBhcmVudEtleT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChgJHt3aWRnZXQua2V5fWAsIHdpZGdldC52YWx1ZSwgd2lkZ2V0LmlzRGlzYWJsZWQsIHdpZGdldC52YWxpZGF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWAsXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCAvLyBUT0RPIHJlYWxseSB3ZSBkb24ndCBwYXNzIHdpZGdldC5pc0Rpc2FibGVkP1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LiR7a2V5fWAsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzTXVsdGlwbGUgPyB3aWRnZXQudmFsdWUuZGF0YVtrZXldIDogd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVswXSxcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICBgJHtwYXJlbnRLZXl9LiR7d2lkZ2V0LmtleX1gLFxyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlLFxyXG4gICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldC52YWx1ZUxpc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0LCB3aWRnZXQua2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkYXRvckluTGlzdCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yLCBsaXN0PzogU21hcnRWYWxpZGF0b3JbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGxpc3QgIT09IHVuZGVmaW5lZCAmJiBsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdC5zb21lKCh2KSA9PiB2ID09PSB2YWxpZGF0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBpc0Rpc2FibGVkPzogYm9vbGVhbixcclxuICAgIHZhbGlkYXRvcnM/OiBTbWFydFZhbGlkYXRvcltdXHJcbiAgKTogVW50eXBlZEZvcm1Db250cm9sIHtcclxuICAgIGxldCBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gdGhpcy5ncm91cFtrZXldO1xyXG4gICAgaWYgKCFmb3JtQ29udHJvbCkge1xyXG4gICAgICBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgICAgdGhpcy5ncm91cFtrZXldID0gZm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSB8fCAnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB2YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IudmFsaWRhdG9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdLCBncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXQudmFsdWVMaXN0LCBncm91cCk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dID0gW1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdGFrZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgLy9NYXAgY2hlY2tib3gga2V5IC0gYm9vbGVhbiB2YWx1ZSB0byBzdHJpbmcga2V5IGFycmF5XHJcbiAgICAgICAgICBsZXQgdmFsdWVLZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YWtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlS2V5cy5mb3JFYWNoKCh2YWx1ZUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVt2YWx1ZUtleV07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhLnB1c2godmFsdWVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBbZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uJHtrZXl9YF0udmFsdWVdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlID0gZ3JvdXAuY29udHJvbHNbd2lkZ2V0LmtleV0udmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9TbWFydEZvcm0oZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBTbWFydEZvcm0ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtKSB7XHJcbiAgICAgIHRoaXMuY29weVZhbHVlRnJvbUZvcm1Ub1dpZGdldEJlYW5zKHRoaXMuc21hcnRGb3JtLndpZGdldHMsIGdyb3VwKTtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsPy5kYXRhO1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuZ2V0UHJvcGVydHlOYW1lc0RlZXBseShkYXRhKSkge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLmNvbnRyb2xzW2tleV0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZURlZXBseShkYXRhLCBrZXksIGdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRGb3JtITtcclxuICB9XHJcblxyXG4gIGdldE1vZGVsKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogYW55IHtcclxuICAgIGlmICghdGhpcy5zbWFydEZvcm0/LmNvbXBvbmVudE1vZGVsKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBvcmlnaW5hbE1vZGVsID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YTtcclxuICAgIGxldCBjb3B5T2ZNb2RlbCA9IHsgLi4ub3JpZ2luYWxNb2RlbCB9O1xyXG5cclxuICAgIC8vIGNvcHlPZk1vZGVsIHNob3VsZCBiZSB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IGNvcHlPZk1vZGVsO1xyXG4gICAgLy8gY29weSB2YWx1ZSBmcm9tIEZvcm1Hcm91cCBpbnRvIG1vZGVsXHJcbiAgICB0aGlzLnRvU21hcnRGb3JtKGdyb3VwKTtcclxuXHJcbiAgICBsZXQgbmV3TW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IG9yaWdpbmFsTW9kZWw7XHJcblxyXG4gICAgcmV0dXJuIG5ld01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGNvbnN0cmFpbnRzOiBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50W11cclxuICApIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICBsZXQgd2lkZ2V0Q29uc3RyYWludHMgPSBjb25zdHJhaW50cz8uZmlsdGVyKFxyXG4gICAgICAgIC8vKGNvbnN0cmFpbnQ6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQuZGF0YU5hbWUgPT09IHdpZGdldC5rZXlcclxuICAgICAgICAoY29uc3RyYWludCkgPT4gdGhpcy5hbnRQYXRoTWF0Y2hlcihjb25zdHJhaW50LmRhdGFOYW1lLCB3aWRnZXQua2V5KVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdpZGdldENvbnN0cmFpbnRzICYmIHdpZGdldENvbnN0cmFpbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldENvbnN0cmFpbnRzLmZvckVhY2goKGNvbnN0cmFpbnQpID0+IHtcclxuICAgICAgICAgIGlmIChjb25zdHJhaW50LnZpc2libGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LmlzVmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZGdldC5pc1Zpc2libGUgPSBjb25zdHJhaW50LnZpc2libGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSB3aWRnZXQudmFsaWRhdG9ycyA/PyBbXTtcclxuICAgICAgICAgICAgbGV0IHJlcXVpcmVkSW5kZXggPSB2YWxpZGF0b3JzLmZpbmRJbmRleCgodikgPT4gdi52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBsZXQgd2FzTWFuZGF0b3J5ID0gcmVxdWlyZWRJbmRleCA+PSAwO1xyXG4gICAgICAgICAgICBsZXQgdG9iZU1hbmRhdG9yeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5tYW5kYXRvcnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIC8vIG5vdCBzcGVjaWZpZWQgb24gc2VydmVyLCB1c2UgY2xpZW50IHN0YXRlXHJcbiAgICAgICAgICAgICAgLy8gaWYgd2lkZ2V0IGlzIG5vdCB2aXNpYmxlLCBjbGllbnQgc2hvdWxkIGRlZmF1bHQgdG8gbm90IG1hbmRhdG9yeVxyXG4gICAgICAgICAgICAgIHRvYmVNYW5kYXRvcnkgPSB3aWRnZXQuaXNWaXNpYmxlICYmIHdhc01hbmRhdG9yeTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0b2JlTWFuZGF0b3J5ID0gY29uc3RyYWludC5tYW5kYXRvcnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF3YXNNYW5kYXRvcnkgJiYgdG9iZU1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgICAgIC8vIGFkZCByZXF1aXJlZCB2YWxpZGF0b3JcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycyA9IFtcclxuICAgICAgICAgICAgICAgIC4uLnZhbGlkYXRvcnMsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgaXNDdXN0b206IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAncmVxdWlyZWQnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSBlbXB0eSBpdGVtXHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eUl0ZW1Gcm9tVmFsdWVMaXN0KHdpZGdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHdhc01hbmRhdG9yeSAmJiAhdG9iZU1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSByZXF1aXJlZCB2YWxpZGF0b3JcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycz8uc3BsaWNlKHJlcXVpcmVkSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIC8vIGFkZCBlbXB0eSBpdGVtXHJcbiAgICAgICAgICAgICAgbGV0IGVtcHR5TGFiZWwgPSAnJztcclxuICAgICAgICAgICAgICBpZiAoJ3NlbGVjdGlvbicgaW4gd2lkZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlbXB0eUxhYmVsID0gd2lkZ2V0LnNlbGVjdGlvbj8uZW1wdHlMYWJlbCA/PyAnJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQsIGVtcHR5TGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGlmICh3aWRnZXQuaXNEaXNhYmxlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCA9ICFjb25zdHJhaW50LmVuYWJsZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCAmJlxyXG4gICAgICAgIHdpZGdldC52YWx1ZUxpc3QubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYXBwbHlDb21wb25lbnRDb25zdHJhaW50cyh3aWRnZXQudmFsdWVMaXN0LCBjb25zdHJhaW50cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleFJlZ2V4Q2hhcnMgPSBuZXcgUmVnRXhwKC9bXFwuXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwrXFxeXFwkXFxcXFxcfF0vZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleEFzdGVyaXNrSW5UaGVNaWRkbGUgPSBuZXcgUmVnRXhwKC8oW15cXCpdKVxcKihbXlxcKl0pL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlRW5kID0gbmV3IFJlZ0V4cCgvKFteXFwqXSlcXCokL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlQmVnaW5uaW5nID0gbmV3IFJlZ0V4cCgvXlxcKihbXlxcKl0pL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza09ubHkgPSBuZXcgUmVnRXhwKC9eXFwqJC9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4RG91YmxlQXN0ZXJpc2tXaXRoRG90ID0gbmV3IFJlZ0V4cCgvXFwqXFwqXFxcXFxcLi9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4RG91YmxlQXN0ZXJpc2sgPSBuZXcgUmVnRXhwKC9cXCpcXCovZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleFF1ZXN0aW9uTWFyayA9IG5ldyBSZWdFeHAoL1xcPy9nKTtcclxuICBwcml2YXRlIHJlZ2V4QnlQYXR0ZXJuOiBNYXA8c3RyaW5nLCBSZWdFeHA+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhbnRQYXRoTWF0Y2hlcihwYXR0ZXJuPzogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXBhdHRlcm4gfHwgIXBhdGgpIHtcclxuICAgICAgLy8gZW1wdHkgcGF0dGVybiBvciBwYXRoIC0+IG5vdCBldmFsdWF0ZWQsIHRydWUgb3IgZmFsc2U/XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGxldCByZWdleCA9IHRoaXMucmVnZXhCeVBhdHRlcm4uZ2V0KHBhdHRlcm4pO1xyXG4gICAgaWYgKHJlZ2V4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gZXNjYXBlIHJlZ2V4IGNoYXJhY3RlcnMgZXhjZXB0IGZvciA/LCAqLCAqKlxyXG4gICAgICBsZXQgcmVnZXhQYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhSZWdleENoYXJzLCAnXFxcXCQmJyk7XHJcblxyXG4gICAgICAvLyByZXBsYWNlIGFudC1zdHlsZSB3aWxkY2FyZHMgd2l0aCByZWdleCBlcXVpdmFsZW50c1xyXG5cclxuICAgICAgLy8gcmVwbGFjZSAqIHdpdGggYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgJy4nXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlTWlkZGxlLCAnJDFbXi5dKiQyJyk7IC8vIG5vdCogKiBub3QqXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlRW5kLCAnJDFbXi5dKicpOyAvLyBub3QqICogRU9MXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlQmVnaW5uaW5nLCAnW14uXSokMScpOyAvLyBCT0wgKiBub3QqXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza09ubHksICdbXi5dKicpOyAvLyBCT0wgKiBFT0xcclxuXHJcbiAgICAgIC8vIHJlcGxhY2UgKiogd2l0aCBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nICcuJ1xyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4RG91YmxlQXN0ZXJpc2tXaXRoRG90LCAnLionKTsgLy8gKiouXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhEb3VibGVBc3RlcmlzaywgJy4qJyk7IC8vICoqXHJcblxyXG4gICAgICAvLyByZXBsYWNlID8gd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgbWF0Y2hlclxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4UXVlc3Rpb25NYXJrLCAnLicpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGEgUmVnRXhwIG9iamVjdFxyXG4gICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgcmVnZXhQYXR0ZXJuICsgJyQnKTtcclxuICAgICAgdGhpcy5yZWdleEJ5UGF0dGVybi5zZXQocGF0dGVybiwgcmVnZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRlc3QgdGhlIHBhdGggYWdhaW5zdCB0aGUgZ2VuZXJhdGVkIHJlZ2V4XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdChwYXRoKTtcclxuICB9XHJcblxyXG4gIGFwcGx5Q29uc3RyYWludHMod2lkZ2V0cz86IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10pOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cyAmJlxyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybSEuY29tcG9uZW50TW9kZWw/LmNvbnN0cmFpbnRzLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICghd2lkZ2V0cykge1xyXG4gICAgICAgIHdpZGdldHMgPSB0aGlzLnNtYXJ0Rm9ybSEud2lkZ2V0cztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMod2lkZ2V0cywgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+LCBlbXB0eUxhYmVsPzogc3RyaW5nKSB7XHJcbiAgICBpZiAod2lkZ2V0LnR5cGUgPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QpIHtcclxuICAgICAgY29uc3QgY29udGFpbnNFbXB0eUtleSA9IHdpZGdldC52YWx1ZUxpc3Quc29tZSgodikgPT4gdi5rZXkgPT09IHRoaXMuZW1wdHlLZXkpO1xyXG4gICAgICBpZiAoIWNvbnRhaW5zRW1wdHlLZXkpIHtcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0Py51bnNoaWZ0KHtcclxuICAgICAgICAgIGtleTogdGhpcy5lbXB0eUtleSxcclxuICAgICAgICAgIGxhYmVsOiBlbXB0eUxhYmVsID8/ICcnLFxyXG4gICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgdmFsdWU6ICcnLCAvLyB0aGlzIHNob3VsZCBiZSB1bmRlZmluZWQsIGJ1dCBGb3JtQ29udHJvbCBjYW5ub3QgYmUgbnVsbCwgZnJvbSB2MTQgaXQgd2lsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVFbXB0eUl0ZW1Gcm9tVmFsdWVMaXN0KHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pIHtcclxuICAgIGlmICgndmFsdWVMaXN0JyBpbiB3aWRnZXQpIHtcclxuICAgICAgaWYgKHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBmaXJzdEl0ZW0gPSB3aWRnZXQudmFsdWVMaXN0WzBdO1xyXG4gICAgICAgIGlmIChmaXJzdEl0ZW0/LmtleSA9PT0gdGhpcy5lbXB0eUtleSkge1xyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5zaGlmdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsdGVyV2lkZ2V0c0J5VmlzaWJpbGl0eSh3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSB7XHJcbiAgICByZXR1cm4gd2lkZ2V0cy5maWx0ZXIoKHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pID0+XHJcbiAgICAgIHdpZGdldC5pc1Zpc2libGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB3aWRnZXQuaXNWaXNpYmxlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRUcmFuc2xhdGlvbk9mS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNtYXJ0Rm9ybSEudHJhbnNsYXRlU2VydmljZSEuZ2V0KGtleSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB0cmFuc2xhdGVXaWRnZXRzKHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIpIHtcclxuICAgICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsTGFiZWwpIHtcclxuICAgICAgICAgICAgd2lkZ2V0Lm9yaWdpbmFsTGFiZWwgPSBgJHt3aWRnZXQubGFiZWx9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICBMYWJlbFxyXG4gICAgICAgICAgd2lkZ2V0LmxhYmVsID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KHdpZGdldC5vcmlnaW5hbExhYmVsKTtcclxuXHJcbiAgICAgICAgICAvLyBQbGFjZWhvbGRlclxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTlVNQkVSIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJJQ0hfVEVYVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfQk9YKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQucGxhY2Vob2xkZXJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbFBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIgPSBgJHt3aWRnZXQucGxhY2Vob2xkZXJ9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXQucGxhY2Vob2xkZXIgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFZhbGlkYXRvcnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNWRyAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMubWFwKGFzeW5jICh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPSBgJHt2YWxpZGF0b3IuZXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3IuZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJbmRpY2F0b3JcclxuICAgICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiYgd2lkZ2V0LmluZGljYXRvcikge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzID1cclxuICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzLm1hcCgobGFiZWw6IHN0cmluZykgPT4gbGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleShcclxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yIS5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscyFbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUkFESU9fQlVUVE9OKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXQudmFsdWVMaXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRzKHdpZGdldC52YWx1ZUxpc3QhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdHJhbnNsYXRlV2lkZ2V0SXRlbXMod2lkZ2V0czogU21hcnRJdGVtczxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEl0ZW1zPGFueT4pID0+IHtcclxuICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbExhYmVsKSB7XHJcbiAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgTGFiZWxcclxuICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
@@ -5,11 +5,11 @@ export class LargeFileSnackBarComponent {
5
5
  constructor() { }
6
6
  ngOnInit() {
7
7
  }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LargeFileSnackBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: LargeFileSnackBarComponent, selector: "lib-large-file-snack-bar", ngImport: i0, template: "<span class=\"largeFileSnakBarContainer\" matSnackBarLabel\r\n >A kiv\u00E1lasztott f\u00E1jl(ok) m\u00E9rete t\u00FAl nagy.</span\r\n>\r\n", styles: ["::ng-deep .mat-mdc-snack-bar-container{background-color:var(--warn-color)!important;text-align:center;border-radius:2rem}.largeFileSnakBarContainer{color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.MatSnackBarLabel, selector: "[matSnackBarLabel]" }] }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LargeFileSnackBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: LargeFileSnackBarComponent, selector: "lib-large-file-snack-bar", ngImport: i0, template: "<span class=\"largeFileSnakBarContainer\" matSnackBarLabel\r\n >A kiv\u00E1lasztott f\u00E1jl(ok) m\u00E9rete t\u00FAl nagy.</span\r\n>\r\n", styles: ["::ng-deep .mat-mdc-snack-bar-container{background-color:var(--warn-color)!important;text-align:center;border-radius:2rem}.largeFileSnakBarContainer{color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.MatSnackBarLabel, selector: "[matSnackBarLabel]" }] }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LargeFileSnackBarComponent, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LargeFileSnackBarComponent, decorators: [{
12
12
  type: Component,
13
13
  args: [{ selector: 'lib-large-file-snack-bar', template: "<span class=\"largeFileSnakBarContainer\" matSnackBarLabel\r\n >A kiv\u00E1lasztott f\u00E1jl(ok) m\u00E9rete t\u00FAl nagy.</span\r\n>\r\n", styles: ["::ng-deep .mat-mdc-snack-bar-container{background-color:var(--warn-color)!important;text-align:center;border-radius:2rem}.largeFileSnakBarContainer{color:#fff}\n"] }]
14
14
  }], ctorParameters: () => [] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFyZ2UtZmlsZS1zbmFjay1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9sYXJnZS1maWxlLXNuYWNrLWJhci9sYXJnZS1maWxlLXNuYWNrLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL2xhcmdlLWZpbGUtc25hY2stYmFyL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQU9sRCxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDLGdCQUFnQixDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDOzhHQUxVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGdFQ1B2QyxnSkFHQTs7MkZESWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1sYXJnZS1maWxlLXNuYWNrLWJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sYXJnZS1maWxlLXNuYWNrLWJhci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExhcmdlRmlsZVNuYWNrQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8c3BhbiBjbGFzcz1cImxhcmdlRmlsZVNuYWtCYXJDb250YWluZXJcIiBtYXRTbmFja0JhckxhYmVsXHJcbiAgICA+QSBraXbDoWxhc3p0b3R0IGbDoWpsKG9rKSBtw6lyZXRlIHTDumwgbmFneS48L3NwYW5cclxuPlxyXG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFyZ2UtZmlsZS1zbmFjay1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9sYXJnZS1maWxlLXNuYWNrLWJhci9sYXJnZS1maWxlLXNuYWNrLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL2xhcmdlLWZpbGUtc25hY2stYmFyL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQU9sRCxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDLGdCQUFnQixDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDOytHQUxVLDBCQUEwQjttR0FBMUIsMEJBQTBCLGdFQ1B2QyxnSkFHQTs7NEZESWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1sYXJnZS1maWxlLXNuYWNrLWJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sYXJnZS1maWxlLXNuYWNrLWJhci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExhcmdlRmlsZVNuYWNrQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8c3BhbiBjbGFzcz1cImxhcmdlRmlsZVNuYWtCYXJDb250YWluZXJcIiBtYXRTbmFja0JhckxhYmVsXHJcbiAgICA+QSBraXbDoWxhc3p0b3R0IGbDoWpsKG9rKSBtw6lyZXRlIHTDumwgbmFneS48L3NwYW5cclxuPlxyXG4iXX0=
@@ -53,10 +53,10 @@ export class SmartfileuploaderComponent {
53
53
  uploadFile() {
54
54
  this.uploadCallback(this.files);
55
55
  }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartfileuploaderComponent, deps: [{ token: i1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
57
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: SmartfileuploaderComponent, selector: "smartfileuploader", inputs: { uploadCallback: "uploadCallback", fileFormats: "fileFormats", maxSizeMb: "maxSizeMb", i18n: "i18n", useIconButton: "useIconButton", isMultiple: "isMultiple" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"fileContainer\">\r\n <div class=\"fileInnerContainer\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary\"> {{ i18n!.addFile }} </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <mat-label class=\"fileNameLabel\"> {{ file.name }} </mat-label>\r\n <button mat-icon-button (click)=\"remove(i)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <button class=\"uploadButton\" mat-raised-button color=\"primary\" (click)=\"uploadFile()\">\r\n {{ i18n!.upload ?? 'Felt\u00F6lt\u00E9s' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".container{width:calc(100% - 2em);height:max-content;margin:1em;border-radius:5px;border:2px dashed var(--light-gray-60)}.fileContainer,.uploadedFilesContainer{background-color:var(--primary-lighter-color)}.fileInnerContainer{min-height:250px}.uploadedFilesContainer{border-top:1px solid var(--light-gray-60);display:flex;flex-direction:column}.fileContainer{position:relative;height:250px}.uploadedFile{padding:1em;display:flex;flex-direction:row;color:var(--primary-color)}.fileNameLabel{flex:1;margin-top:auto;margin-bottom:auto}.label{font-size:small}.subLabel{font-size:smaller}.file{position:absolute;left:0;top:0;opacity:0;width:100%;height:100%;z-index:120;cursor:pointer}.addFileButton{z-index:150;cursor:pointer}.addCircle{font-size:50px;width:50px;height:50px;margin:0 auto}.fileUploadContentContainer{position:absolute;top:50%;left:0;transform:translateY(-50%);width:100%;display:flex;flex-direction:column;text-align:center}.fileUploadContentContainer .secondary{margin-bottom:1em}.inputLabel{flex:1}.uploadButton{margin-left:auto;margin-right:auto;margin-bottom:.5em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }] }); }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartfileuploaderComponent, deps: [{ token: i1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
57
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartfileuploaderComponent, selector: "smartfileuploader", inputs: { uploadCallback: "uploadCallback", fileFormats: "fileFormats", maxSizeMb: "maxSizeMb", i18n: "i18n", useIconButton: "useIconButton", isMultiple: "isMultiple" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"fileContainer\">\r\n <div class=\"fileInnerContainer\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary\"> {{ i18n!.addFile }} </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <mat-label class=\"fileNameLabel\"> {{ file.name }} </mat-label>\r\n <button mat-icon-button (click)=\"remove(i)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <button class=\"uploadButton\" mat-raised-button color=\"primary\" (click)=\"uploadFile()\">\r\n {{ i18n!.upload ?? 'Felt\u00F6lt\u00E9s' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".container{width:calc(100% - 2em);height:max-content;margin:1em;border-radius:5px;border:2px dashed var(--light-gray-60)}.fileContainer,.uploadedFilesContainer{background-color:var(--primary-lighter-color)}.fileInnerContainer{min-height:250px}.uploadedFilesContainer{border-top:1px solid var(--light-gray-60);display:flex;flex-direction:column}.fileContainer{position:relative;height:250px}.uploadedFile{padding:1em;display:flex;flex-direction:row;color:var(--primary-color)}.fileNameLabel{flex:1;margin-top:auto;margin-bottom:auto}.label{font-size:small}.subLabel{font-size:smaller}.file{position:absolute;left:0;top:0;opacity:0;width:100%;height:100%;z-index:120;cursor:pointer}.addFileButton{z-index:150;cursor:pointer}.addCircle{font-size:50px;width:50px;height:50px;margin:0 auto}.fileUploadContentContainer{position:absolute;top:50%;left:0;transform:translateY(-50%);width:100%;display:flex;flex-direction:column;text-align:center}.fileUploadContentContainer .secondary{margin-bottom:1em}.inputLabel{flex:1}.uploadButton{margin-left:auto;margin-right:auto;margin-bottom:.5em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }] }); }
58
58
  }
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartfileuploaderComponent, decorators: [{
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartfileuploaderComponent, decorators: [{
60
60
  type: Component,
61
61
  args: [{ selector: 'smartfileuploader', template: "<div class=\"container\">\r\n <div class=\"fileContainer\">\r\n <div class=\"fileInnerContainer\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary\"> {{ i18n!.addFile }} </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <mat-label class=\"fileNameLabel\"> {{ file.name }} </mat-label>\r\n <button mat-icon-button (click)=\"remove(i)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <button class=\"uploadButton\" mat-raised-button color=\"primary\" (click)=\"uploadFile()\">\r\n {{ i18n!.upload ?? 'Felt\u00F6lt\u00E9s' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".container{width:calc(100% - 2em);height:max-content;margin:1em;border-radius:5px;border:2px dashed var(--light-gray-60)}.fileContainer,.uploadedFilesContainer{background-color:var(--primary-lighter-color)}.fileInnerContainer{min-height:250px}.uploadedFilesContainer{border-top:1px solid var(--light-gray-60);display:flex;flex-direction:column}.fileContainer{position:relative;height:250px}.uploadedFile{padding:1em;display:flex;flex-direction:row;color:var(--primary-color)}.fileNameLabel{flex:1;margin-top:auto;margin-bottom:auto}.label{font-size:small}.subLabel{font-size:smaller}.file{position:absolute;left:0;top:0;opacity:0;width:100%;height:100%;z-index:120;cursor:pointer}.addFileButton{z-index:150;cursor:pointer}.addCircle{font-size:50px;width:50px;height:50px;margin:0 auto}.fileUploadContentContainer{position:absolute;top:50%;left:0;transform:translateY(-50%);width:100%;display:flex;flex-direction:column;text-align:center}.fileUploadContentContainer .secondary{margin-bottom:1em}.inputLabel{flex:1}.uploadButton{margin-left:auto;margin-right:auto;margin-bottom:.5em}\n"] }]
62
62
  }], ctorParameters: () => [{ type: i1.MatSnackBar }], propDecorators: { fileInput: [{
@@ -75,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
75
75
  }], isMultiple: [{
76
76
  type: Input
77
77
  }] } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxldXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7Ozs7OztBQVFuRyxNQUFNLE9BQU8sMEJBQTBCO0lBV3JDLFlBQW9CLFNBQXNCO1FBQXRCLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFSMUMsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUVULGdCQUFXLEdBQWMsRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBWSxFQUFFLENBQUM7UUFFeEIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsZUFBVSxHQUFhLElBQUksQ0FBQztJQUVRLENBQUM7SUFFOUMsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRztnQkFDVixPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxZQUFZLEVBQUUsdUJBQXVCO2dCQUNyQyxPQUFPLEVBQUUsWUFBWTtnQkFDckIsT0FBTyxFQUFFLHlCQUF5QjtnQkFDbEMsTUFBTSxFQUFFLFdBQVc7YUFDcEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwRCxJQUFJLFFBQVEsR0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBVSxHQUFHLE9BQU8sRUFBRSxDQUFDO29CQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixFQUFFO3dCQUMzRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUk7cUJBQ25CLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3JDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBbkRVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLDJVQ1Z2QyxpdURBd0NBOzsyRkQ5QmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLG1CQUFtQjtnRkFLTCxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBR2IsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgTGFyZ2VGaWxlU25hY2tCYXJDb21wb25lbnQgfSBmcm9tICcuL2xhcmdlLWZpbGUtc25hY2stYmFyL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsZVVwbG9hZGVySTE4biB9IGZyb20gJy4vc21hcnRmaWxldXBsb2FkZXIubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydGZpbGV1cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydGZpbGV1cGxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgZmlsZXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgdXBsb2FkQ2FsbGJhY2shOiAoZmlsZXM6IGFueVtdKSA9PiB2b2lkO1xyXG4gIEBJbnB1dCgpIGZpbGVGb3JtYXRzPzogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBtYXhTaXplTWI/OiBudW1iZXIgPSAyNTtcclxuICBASW5wdXQoKSBpMThuPzogU21hcnRGaWxlVXBsb2FkZXJJMThuO1xyXG4gIEBJbnB1dCgpIHVzZUljb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGU/OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pMThuIHx8IHRoaXMuaTE4biA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaTE4biA9IHtcclxuICAgICAgICBhZGRGaWxlOiAnZG9rdW1lbnR1bSBob3p6w6FhZMOhc2EnLFxyXG4gICAgICAgIGJyb3dzZU9yRHJhZzogJ3RhbGzDs3rDoXMgdmFneSBiZWjDunrDoXMnLFxyXG4gICAgICAgIG1heFNpemU6ICdtYXguIDI1IE1CJyxcclxuICAgICAgICBmb3JtYXRzOiAnUERGLCBkb2N4LCB4bHMgZm9ybcOhdHVtJyxcclxuICAgICAgICB1cGxvYWQ6ICdGZWx0w7ZsdMOpcycsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuZmlsZXMgJiYgZXZlbnQudGFyZ2V0LmZpbGVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgZmlsZUxpc3Q6IEZpbGVbXSA9IFsuLi5ldmVudC50YXJnZXQuZmlsZXNdO1xyXG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZU1iISAqIDEwMDAwMDApIHtcclxuICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KExhcmdlRmlsZVNuYWNrQmFyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiA1ICogMTAwMCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZXMgPSBbLi4udGhpcy5maWxlcywgZmlsZV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gW2ZpbGVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRDYWxsYmFjayh0aGlzLmZpbGVzKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmaWxlQ29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZUlubmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNmaWxlSW5wdXRcclxuICAgICAgICBpZD1cImFkZEZpbGVcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsZUlucHV0XCJcclxuICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJnZXRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIGNsYXNzPVwiZmlsZVwiXHJcbiAgICAgICAgYWNjZXB0PVwie3sgZmlsZUZvcm1hdHM/LmpvaW4oJywgJykgfX1cIlxyXG4gICAgICAgIFtzaXplXT1cIm1heFNpemVNYlwiXHJcbiAgICAgICAgW211bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgICAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZVVwbG9hZENvbnRlbnRDb250YWluZXJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwidXNlSWNvbkJ1dHRvblwiIGNsYXNzPVwiYWRkRmlsZUJ1dHRvblwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYWRkQ2lyY2xlXCI+YWRkX2NpcmNsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF1c2VJY29uQnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJhZGRGaWxlQnV0dG9uXCI+XHJcbiAgICAgICAgICB7eyBpMThuIS5hZGRGaWxlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cInVzZUljb25CdXR0b25cIiBjbGFzcz1cImxhYmVsIHByaW1hcnlcIj4ge3sgaTE4biEuYWRkRmlsZSB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibGFiZWwgc2Vjb25kYXJ5XCI+IHt7IGkxOG4hLmJyb3dzZU9yRHJhZyB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic3ViTGFiZWwgcHJpbWFyeVwiPiB7eyBpMThuIS5tYXhTaXplIH19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzdWJMYWJlbCBwcmltYXJ5XCI+IHt7IGkxOG4hLmZvcm1hdHMgfX0gPC9tYXQtbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cImZpbGVzLmxlbmd0aFwiIGNsYXNzPVwidXBsb2FkZWRGaWxlc0NvbnRhaW5lclwiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidXBsb2FkZWRGaWxlXCI+XHJcbiAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmaWxlTmFtZUxhYmVsXCI+IHt7IGZpbGUubmFtZSB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZShpKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidXBsb2FkQnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInVwbG9hZEZpbGUoKVwiPlxyXG4gICAgICB7eyBpMThuIS51cGxvYWQgPz8gJ0ZlbHTDtmx0w6lzJyB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxldXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7Ozs7OztBQVFuRyxNQUFNLE9BQU8sMEJBQTBCO0lBV3JDLFlBQW9CLFNBQXNCO1FBQXRCLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFSMUMsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUVULGdCQUFXLEdBQWMsRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBWSxFQUFFLENBQUM7UUFFeEIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsZUFBVSxHQUFhLElBQUksQ0FBQztJQUVRLENBQUM7SUFFOUMsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRztnQkFDVixPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxZQUFZLEVBQUUsdUJBQXVCO2dCQUNyQyxPQUFPLEVBQUUsWUFBWTtnQkFDckIsT0FBTyxFQUFFLHlCQUF5QjtnQkFDbEMsTUFBTSxFQUFFLFdBQVc7YUFDcEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwRCxJQUFJLFFBQVEsR0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBVSxHQUFHLE9BQU8sRUFBRSxDQUFDO29CQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixFQUFFO3dCQUMzRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUk7cUJBQ25CLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3JDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7K0dBbkRVLDBCQUEwQjttR0FBMUIsMEJBQTBCLDJVQ1Z2QyxpdURBd0NBOzs0RkQ5QmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLG1CQUFtQjtnRkFLTCxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBR2IsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgTGFyZ2VGaWxlU25hY2tCYXJDb21wb25lbnQgfSBmcm9tICcuL2xhcmdlLWZpbGUtc25hY2stYmFyL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsZVVwbG9hZGVySTE4biB9IGZyb20gJy4vc21hcnRmaWxldXBsb2FkZXIubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydGZpbGV1cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydGZpbGV1cGxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgZmlsZXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgdXBsb2FkQ2FsbGJhY2shOiAoZmlsZXM6IGFueVtdKSA9PiB2b2lkO1xyXG4gIEBJbnB1dCgpIGZpbGVGb3JtYXRzPzogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBtYXhTaXplTWI/OiBudW1iZXIgPSAyNTtcclxuICBASW5wdXQoKSBpMThuPzogU21hcnRGaWxlVXBsb2FkZXJJMThuO1xyXG4gIEBJbnB1dCgpIHVzZUljb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGU/OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pMThuIHx8IHRoaXMuaTE4biA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaTE4biA9IHtcclxuICAgICAgICBhZGRGaWxlOiAnZG9rdW1lbnR1bSBob3p6w6FhZMOhc2EnLFxyXG4gICAgICAgIGJyb3dzZU9yRHJhZzogJ3RhbGzDs3rDoXMgdmFneSBiZWjDunrDoXMnLFxyXG4gICAgICAgIG1heFNpemU6ICdtYXguIDI1IE1CJyxcclxuICAgICAgICBmb3JtYXRzOiAnUERGLCBkb2N4LCB4bHMgZm9ybcOhdHVtJyxcclxuICAgICAgICB1cGxvYWQ6ICdGZWx0w7ZsdMOpcycsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuZmlsZXMgJiYgZXZlbnQudGFyZ2V0LmZpbGVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgZmlsZUxpc3Q6IEZpbGVbXSA9IFsuLi5ldmVudC50YXJnZXQuZmlsZXNdO1xyXG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZU1iISAqIDEwMDAwMDApIHtcclxuICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KExhcmdlRmlsZVNuYWNrQmFyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiA1ICogMTAwMCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZXMgPSBbLi4udGhpcy5maWxlcywgZmlsZV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gW2ZpbGVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRDYWxsYmFjayh0aGlzLmZpbGVzKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmaWxlQ29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZUlubmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNmaWxlSW5wdXRcclxuICAgICAgICBpZD1cImFkZEZpbGVcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsZUlucHV0XCJcclxuICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJnZXRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIGNsYXNzPVwiZmlsZVwiXHJcbiAgICAgICAgYWNjZXB0PVwie3sgZmlsZUZvcm1hdHM/LmpvaW4oJywgJykgfX1cIlxyXG4gICAgICAgIFtzaXplXT1cIm1heFNpemVNYlwiXHJcbiAgICAgICAgW211bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgICAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZVVwbG9hZENvbnRlbnRDb250YWluZXJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwidXNlSWNvbkJ1dHRvblwiIGNsYXNzPVwiYWRkRmlsZUJ1dHRvblwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYWRkQ2lyY2xlXCI+YWRkX2NpcmNsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF1c2VJY29uQnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJhZGRGaWxlQnV0dG9uXCI+XHJcbiAgICAgICAgICB7eyBpMThuIS5hZGRGaWxlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cInVzZUljb25CdXR0b25cIiBjbGFzcz1cImxhYmVsIHByaW1hcnlcIj4ge3sgaTE4biEuYWRkRmlsZSB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibGFiZWwgc2Vjb25kYXJ5XCI+IHt7IGkxOG4hLmJyb3dzZU9yRHJhZyB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic3ViTGFiZWwgcHJpbWFyeVwiPiB7eyBpMThuIS5tYXhTaXplIH19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzdWJMYWJlbCBwcmltYXJ5XCI+IHt7IGkxOG4hLmZvcm1hdHMgfX0gPC9tYXQtbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cImZpbGVzLmxlbmd0aFwiIGNsYXNzPVwidXBsb2FkZWRGaWxlc0NvbnRhaW5lclwiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidXBsb2FkZWRGaWxlXCI+XHJcbiAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmaWxlTmFtZUxhYmVsXCI+IHt7IGZpbGUubmFtZSB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZShpKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidXBsb2FkQnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInVwbG9hZEZpbGUoKVwiPlxyXG4gICAgICB7eyBpMThuIS51cGxvYWQgPz8gJ0ZlbHTDtmx0w6lzJyB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=