@eo-sdk/client 10.0.0-beta.2 → 10.0.0-beta.3

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 (168) hide show
  1. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts +7 -3
  2. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  3. package/app/eo-framework/app-shell/app-shell.module.d.ts +2 -1
  4. package/app/eo-framework/app-shell/app-shell.module.d.ts.map +1 -1
  5. package/app/eo-framework/form-elements/checkbox/checkbox.component.d.ts.map +1 -1
  6. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts +3 -1
  7. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts.map +1 -1
  8. package/app/eo-framework/form-elements/date/date.component.d.ts +2 -0
  9. package/app/eo-framework/form-elements/date/date.component.d.ts.map +1 -1
  10. package/app/eo-framework/form-elements/date/year-range/year-range.directive.d.ts.map +1 -0
  11. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +3 -1
  12. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
  13. package/app/eo-framework/form-elements/form-elements.module.d.ts +37 -39
  14. package/app/eo-framework/form-elements/form-elements.module.d.ts.map +1 -1
  15. package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts.map +1 -1
  16. package/app/eo-framework/form-elements/index.d.ts +1 -3
  17. package/app/eo-framework/form-elements/index.d.ts.map +1 -1
  18. package/app/eo-framework/form-elements/reference/reference.component.d.ts.map +1 -1
  19. package/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.d.ts +3 -2
  20. package/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.d.ts.map +1 -1
  21. package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts +1 -5
  22. package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts.map +1 -1
  23. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts +4 -7
  24. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts.map +1 -1
  25. package/app/eo-framework/grid/grid.module.d.ts +4 -3
  26. package/app/eo-framework/grid/grid.module.d.ts.map +1 -1
  27. package/app/eo-framework/inbox-details/inbox-details.component.d.ts +2 -7
  28. package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
  29. package/app/eo-framework/index.d.ts +0 -1
  30. package/app/eo-framework/index.d.ts.map +1 -1
  31. package/app/eo-framework/object-details/object-details.component.d.ts +2 -7
  32. package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
  33. package/app/eo-framework/object-details/object-history/object-history.component.d.ts.map +1 -1
  34. package/app/eo-framework/object-form/object-form/object-form.component.d.ts +6 -59
  35. package/app/eo-framework/object-form/object-form/object-form.component.d.ts.map +1 -1
  36. package/app/eo-framework/object-form/object-form-helper.service.d.ts +86 -2
  37. package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
  38. package/app/eo-framework/object-state-details/object-state-details.component.d.ts +3 -11
  39. package/app/eo-framework/object-state-details/object-state-details.component.d.ts.map +1 -1
  40. package/app/eo-framework/plugins/plugin.component.d.ts +0 -2
  41. package/app/eo-framework/plugins/plugin.component.d.ts.map +1 -1
  42. package/app/eo-framework/prepare-details/prepare-details.component.d.ts.map +1 -1
  43. package/app/eo-framework/process/details/process-details.component.d.ts +2 -7
  44. package/app/eo-framework/process/details/process-details.component.d.ts.map +1 -1
  45. package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts +2 -7
  46. package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts.map +1 -1
  47. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts +2 -1
  48. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts.map +1 -1
  49. package/assets/_default/i18n/de.json +2 -0
  50. package/assets/_default/i18n/en.json +4 -2
  51. package/esm2020/app/eo-client/about-state/about-state.component.mjs +5 -5
  52. package/esm2020/app/eo-client/dashboard/dashboard.component.mjs +3 -3
  53. package/esm2020/app/eo-client/favorite-state/favorite-state.component.mjs +1 -1
  54. package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +3 -3
  55. package/esm2020/app/eo-client/login/login.component.mjs +1 -1
  56. package/esm2020/app/eo-client/notifications-state/notifications-state.component.mjs +1 -1
  57. package/esm2020/app/eo-client/object-state/object-state/object-state.component.mjs +3 -3
  58. package/esm2020/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +1 -1
  59. package/esm2020/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +3 -3
  60. package/esm2020/app/eo-client/settings/settings.component.mjs +3 -3
  61. package/esm2020/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +1 -1
  62. package/esm2020/app/eo-client/version-state/version-state.component.mjs +1 -1
  63. package/esm2020/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.mjs +3 -3
  64. package/esm2020/app/eo-framework/actions/actions/delete-action/delete/delete.component.mjs +1 -1
  65. package/esm2020/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +1 -1
  66. package/esm2020/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.mjs +1 -1
  67. package/esm2020/app/eo-framework/app-shell/app-bar/app-add/app-add-dialog/app-add-dialog.component.mjs +2 -2
  68. package/esm2020/app/eo-framework/app-shell/app-bar/app-add/app-add.component.mjs +1 -1
  69. package/esm2020/app/eo-framework/app-shell/app-bar/app-process/app-process.component.mjs +1 -1
  70. package/esm2020/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +32 -20
  71. package/esm2020/app/eo-framework/app-shell/app-shell.module.mjs +8 -4
  72. package/esm2020/app/eo-framework/form-elements/checkbox/checkbox.component.mjs +1 -4
  73. package/esm2020/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +9 -3
  74. package/esm2020/app/eo-framework/form-elements/date/date.component.mjs +9 -24
  75. package/esm2020/app/eo-framework/form-elements/date/year-range/year-range.directive.mjs +44 -0
  76. package/esm2020/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +2 -2
  77. package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +9 -3
  78. package/esm2020/app/eo-framework/form-elements/form-elements.module.mjs +3 -13
  79. package/esm2020/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +7 -7
  80. package/esm2020/app/eo-framework/form-elements/id-reference/reference-finder-entry/reference-finder-entry.component.mjs +2 -2
  81. package/esm2020/app/eo-framework/form-elements/index.mjs +2 -4
  82. package/esm2020/app/eo-framework/form-elements/number-range/number-range.component.mjs +1 -1
  83. package/esm2020/app/eo-framework/form-elements/organization/organization.component.mjs +2 -2
  84. package/esm2020/app/eo-framework/form-elements/reference/reference.component.mjs +5 -5
  85. package/esm2020/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.mjs +7 -2
  86. package/esm2020/app/eo-framework/grid/extensions/filter/text/text-filter.component.mjs +9 -17
  87. package/esm2020/app/eo-framework/grid/filters/codesystem-filter.component.mjs +2 -2
  88. package/esm2020/app/eo-framework/grid/filters/datetime-filter.component.mjs +9 -27
  89. package/esm2020/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +2 -2
  90. package/esm2020/app/eo-framework/grid/filters/organization-filter.component.mjs +2 -2
  91. package/esm2020/app/eo-framework/grid/grid.component.mjs +2 -2
  92. package/esm2020/app/eo-framework/grid/grid.module.mjs +5 -8
  93. package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +8 -15
  94. package/esm2020/app/eo-framework/index.mjs +1 -2
  95. package/esm2020/app/eo-framework/media/media.component.mjs +2 -2
  96. package/esm2020/app/eo-framework/object-details/edit-icon/edit-icon.component.mjs +1 -1
  97. package/esm2020/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +1 -1
  98. package/esm2020/app/eo-framework/object-details/object-details.component.mjs +10 -15
  99. package/esm2020/app/eo-framework/object-details/object-history/object-history.component.mjs +1 -2
  100. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +4 -4
  101. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +1 -1
  102. package/esm2020/app/eo-framework/object-form/object-form/object-form.component.mjs +18 -494
  103. package/esm2020/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +1 -1
  104. package/esm2020/app/eo-framework/object-form/object-form-helper.service.mjs +506 -7
  105. package/esm2020/app/eo-framework/object-state-details/object-state-details.component.mjs +19 -27
  106. package/esm2020/app/eo-framework/plugins/plugin.component.mjs +5 -7
  107. package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +3 -4
  108. package/esm2020/app/eo-framework/process/details/process-details.component.mjs +10 -16
  109. package/esm2020/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +7 -16
  110. package/esm2020/app/eo-framework/result-list/result-list.component.mjs +1 -1
  111. package/esm2020/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +6 -3
  112. package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +3 -3
  113. package/esm2020/projects/eo-sdk/core/lib/util/utils.mjs +6 -1
  114. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +5 -0
  115. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  116. package/fesm2015/eo-sdk-client.mjs +3736 -4528
  117. package/fesm2015/eo-sdk-client.mjs.map +1 -1
  118. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +5 -0
  119. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  120. package/fesm2020/eo-sdk-client.mjs +3739 -4531
  121. package/fesm2020/eo-sdk-client.mjs.map +1 -1
  122. package/package.json +4 -4
  123. package/projects/eo-sdk/core/lib/util/utils.d.ts +1 -0
  124. package/projects/eo-sdk/core/lib/util/utils.d.ts.map +1 -1
  125. package/scss/_eo-variables.scss +68 -40
  126. package/scss/_form.scss +6 -0
  127. package/scss/_main.scss +1 -1
  128. package/scss/_theme-dark.scss +22 -0
  129. package/scss/_yuuvis-components.scss +12 -2
  130. package/styles.css +51 -24
  131. package/styles.scss +5 -10
  132. package/app/eo-framework/form-elements/datetime/datepicker/datepicker.component.d.ts +0 -67
  133. package/app/eo-framework/form-elements/datetime/datepicker/datepicker.component.d.ts.map +0 -1
  134. package/app/eo-framework/form-elements/datetime/datepicker/datepicker.interface.d.ts +0 -21
  135. package/app/eo-framework/form-elements/datetime/datepicker/datepicker.interface.d.ts.map +0 -1
  136. package/app/eo-framework/form-elements/datetime/datepicker/service/datepicker.service.d.ts +0 -33
  137. package/app/eo-framework/form-elements/datetime/datepicker/service/datepicker.service.d.ts.map +0 -1
  138. package/app/eo-framework/form-elements/datetime/datetime.component.d.ts +0 -51
  139. package/app/eo-framework/form-elements/datetime/datetime.component.d.ts.map +0 -1
  140. package/app/eo-framework/form-elements/datetime/year-range/year-range.directive.d.ts.map +0 -1
  141. package/app/eo-framework/tab-container/index.d.ts +0 -6
  142. package/app/eo-framework/tab-container/index.d.ts.map +0 -1
  143. package/app/eo-framework/tab-container/tab-container.component.d.ts +0 -62
  144. package/app/eo-framework/tab-container/tab-container.component.d.ts.map +0 -1
  145. package/app/eo-framework/tab-container/tab-container.module.d.ts +0 -18
  146. package/app/eo-framework/tab-container/tab-container.module.d.ts.map +0 -1
  147. package/app/eo-framework/tab-container/tab-panel/tab-panel.component.d.ts +0 -13
  148. package/app/eo-framework/tab-container/tab-panel/tab-panel.component.d.ts.map +0 -1
  149. package/app/eo-framework/tab-container/tab-view/tab-view.component.d.ts +0 -19
  150. package/app/eo-framework/tab-container/tab-view/tab-view.component.d.ts.map +0 -1
  151. package/app/eo-framework/tab-container/tab-view-nav/tab-view-nav.component.d.ts +0 -11
  152. package/app/eo-framework/tab-container/tab-view-nav/tab-view-nav.component.d.ts.map +0 -1
  153. package/esm2020/app/eo-framework/form-elements/datetime/datepicker/datepicker.component.mjs +0 -239
  154. package/esm2020/app/eo-framework/form-elements/datetime/datepicker/datepicker.interface.mjs +0 -2
  155. package/esm2020/app/eo-framework/form-elements/datetime/datepicker/service/datepicker.service.mjs +0 -109
  156. package/esm2020/app/eo-framework/form-elements/datetime/datetime.component.mjs +0 -142
  157. package/esm2020/app/eo-framework/form-elements/datetime/year-range/year-range.directive.mjs +0 -44
  158. package/esm2020/app/eo-framework/tab-container/index.mjs +0 -6
  159. package/esm2020/app/eo-framework/tab-container/tab-container.component.mjs +0 -184
  160. package/esm2020/app/eo-framework/tab-container/tab-container.module.mjs +0 -47
  161. package/esm2020/app/eo-framework/tab-container/tab-panel/tab-panel.component.mjs +0 -26
  162. package/esm2020/app/eo-framework/tab-container/tab-view/tab-view.component.mjs +0 -61
  163. package/esm2020/app/eo-framework/tab-container/tab-view-nav/tab-view-nav.component.mjs +0 -25
  164. package/scss/_eo-inverted.scss +0 -73
  165. package/scss/_eo-pink-theme.scss +0 -73
  166. package/scss/_eo-theme.scss +0 -81
  167. package/scss/_eo-vars.scss +0 -3
  168. /package/app/eo-framework/form-elements/{datetime → date}/year-range/year-range.directive.d.ts +0 -0
@@ -1,6 +1,5 @@
1
1
  import { Component, Input, Output, EventEmitter, HostBinding, ViewChild } from '@angular/core';
2
2
  import { takeUntil } from 'rxjs/operators';
3
- import * as _ from 'lodash';
4
3
  import { PreparedItem, Utils } from '@eo-sdk/core';
5
4
  import { UnsubscribeOnDestroy } from '../util/unsubscribe/unsubscribe.component';
6
5
  import * as i0 from "@angular/core";
@@ -335,7 +334,7 @@ export class PrepareDetailsComponent extends UnsubscribeOnDestroy {
335
334
  tagFilterOptions.push({ label: tag, filter: (node) => node.data.tags.includes(tag), value: true });
336
335
  });
337
336
  });
338
- return _.uniqBy(tagFilterOptions, 'label');
337
+ return Utils.uniqBy(tagFilterOptions, 'label');
339
338
  }
340
339
  /**
341
340
  * Initialize a specific prepare phase.
@@ -511,7 +510,7 @@ export class PrepareDetailsComponent extends UnsubscribeOnDestroy {
511
510
  }
512
511
  }
513
512
  PrepareDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: PrepareDetailsComponent, deps: [{ token: i1.PrepareService }, { token: i2.Router }, { token: i3.PendingChangesService }, { token: i1.TranslateService }, { token: i1.NotificationsService }, { token: i1.SystemService }, { token: i4.SelectionService }, { token: i1.BackendService }, { token: i1.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Component });
514
- PrepareDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: PrepareDetailsComponent, selector: "eo-prepare-details", inputs: { preparedItem: "preparedItem", emptyState: "emptyState", applySelection: "applySelection" }, outputs: { onItemChanged: "onItemChanged", onCommit: "onCommit", onItemRemove: "onItemRemove" }, host: { properties: { "attr.data-type": "this.dataType" } }, viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true }, { propertyName: "objectForm", first: true, predicate: ["form"], descendants: true }, { propertyName: "confirmDeleteButton", first: true, predicate: ["confirmDelete"], descendants: true }, { propertyName: "confirmContentDeleteButton", first: true, predicate: ["confirmContentDelete"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.prepare.template.abort</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"preparePhase.data.previewFile; else nopreview\" [cacheLayout]=\"'prepare.details.phase.type'\">\n <eo-split-area [size]=\"30\">\n\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</div>\n </div>\n </div>\n </div>\n </eo-split-area>\n <eo-split-area [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </eo-split-area>\n </eo-split>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"chooseTemplate; else attach\" [cacheLayout]=\"'prepare.details.phase.content'\">\n <eo-split-area [size]=\"40\">\n\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n\n </eo-split-area>\n <eo-split-area [size]=\"60\">\n\n <!-- preview of selected template -->\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\n\n </eo-split-area>\n </eo-split>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"preparePhase.data.previewFile; else justform\" [cacheLayout]=\"'prepare.details.phase.indexdata'\">\n <eo-split-area [size]=\"50\">\n\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n\n </eo-split-area>\n <eo-split-area [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </eo-split-area>\n </eo-split>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n\n </div>\n\n </div>\n\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\"\n [(visible)]=\"showDeleteDialog\" [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n<div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\"\n [(visible)]=\"showContentDeleteDialog\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n<div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ? preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .eo-body eo-split-area{border-top:1px solid rgba(var(--color-black-rgb),.08);box-sizing:border-box}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{position:absolute;inset:0;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:white!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i6.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "styleClass", "active", "iconTitle"] }, { kind: "component", type: i12.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i13.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "focusOnShow", "align", "isFormTable", "showPreview", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i14.MediaComponent, selector: "eo-media", inputs: ["undockDisabled", "enableCloseBtn", "useVersion", "attachments", "searchTerm", "previewUri", "previewFile", "dmsObject"] }, { kind: "component", type: i15.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options"] }, { kind: "component", type: i19.SplitComponent, selector: "eo-split", inputs: ["direction", "switchable", "width", "height", "gutterSize", "gutterColor", "disabled", "visibleTransition", "applyCacheLayout", "cacheLayout"], outputs: ["dragStart", "dragProgress", "dragEnd", "visibleTransitionEnd"] }, { kind: "component", type: i20.SplitAreaComponent, selector: "eo-split-area", inputs: ["cache", "height", "order", "size", "minSizePixel", "visible"] }, { kind: "component", type: i21.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i22.PrepareContentExistsInfoComponent, selector: "eo-prepare-content-exists-info", inputs: ["content"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
513
+ PrepareDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: PrepareDetailsComponent, selector: "eo-prepare-details", inputs: { preparedItem: "preparedItem", emptyState: "emptyState", applySelection: "applySelection" }, outputs: { onItemChanged: "onItemChanged", onCommit: "onCommit", onItemRemove: "onItemRemove" }, host: { properties: { "attr.data-type": "this.dataType" } }, viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true }, { propertyName: "objectForm", first: true, predicate: ["form"], descendants: true }, { propertyName: "confirmDeleteButton", first: true, predicate: ["confirmDelete"], descendants: true }, { propertyName: "confirmContentDeleteButton", first: true, predicate: ["confirmContentDelete"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.prepare.template.abort</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"preparePhase.data.previewFile; else nopreview\" [cacheLayout]=\"'prepare.details.phase.type'\">\n <eo-split-area [size]=\"30\">\n\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</div>\n </div>\n </div>\n </div>\n </eo-split-area>\n <eo-split-area [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </eo-split-area>\n </eo-split>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"chooseTemplate; else attach\" [cacheLayout]=\"'prepare.details.phase.content'\">\n <eo-split-area [size]=\"40\">\n\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n\n </eo-split-area>\n <eo-split-area [size]=\"60\">\n\n <!-- preview of selected template -->\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\n\n </eo-split-area>\n </eo-split>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"preparePhase.data.previewFile; else justform\" [cacheLayout]=\"'prepare.details.phase.indexdata'\">\n <eo-split-area [size]=\"50\">\n\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n\n </eo-split-area>\n <eo-split-area [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </eo-split-area>\n </eo-split>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n\n </div>\n\n </div>\n\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\"\n [(visible)]=\"showDeleteDialog\" [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n<div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\"\n [(visible)]=\"showContentDeleteDialog\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n<div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ? preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .eo-body eo-split-area{border-top:1px solid rgba(var(--color-black-rgb),.08);box-sizing:border-box}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{position:absolute;inset:0;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:white!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i6.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "styleClass", "active", "iconTitle"] }, { kind: "component", type: i12.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i13.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i14.MediaComponent, selector: "eo-media", inputs: ["undockDisabled", "enableCloseBtn", "useVersion", "attachments", "searchTerm", "previewUri", "previewFile", "dmsObject"] }, { kind: "component", type: i15.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options", "filterParams"] }, { kind: "component", type: i19.SplitComponent, selector: "eo-split", inputs: ["direction", "switchable", "width", "height", "gutterSize", "gutterColor", "disabled", "visibleTransition", "applyCacheLayout", "cacheLayout"], outputs: ["dragStart", "dragProgress", "dragEnd", "visibleTransitionEnd"] }, { kind: "component", type: i20.SplitAreaComponent, selector: "eo-split-area", inputs: ["cache", "height", "order", "size", "minSizePixel", "visible"] }, { kind: "component", type: i21.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i22.PrepareContentExistsInfoComponent, selector: "eo-prepare-content-exists-info", inputs: ["content"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
515
514
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: PrepareDetailsComponent, decorators: [{
516
515
  type: Component,
517
516
  args: [{ selector: 'eo-prepare-details', template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.prepare.template.abort</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"preparePhase.data.previewFile; else nopreview\" [cacheLayout]=\"'prepare.details.phase.type'\">\n <eo-split-area [size]=\"30\">\n\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</div>\n </div>\n </div>\n </div>\n </eo-split-area>\n <eo-split-area [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </eo-split-area>\n </eo-split>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"chooseTemplate; else attach\" [cacheLayout]=\"'prepare.details.phase.content'\">\n <eo-split-area [size]=\"40\">\n\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n\n </eo-split-area>\n <eo-split-area [size]=\"60\">\n\n <!-- preview of selected template -->\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\n\n </eo-split-area>\n </eo-split>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\n *ngIf=\"preparePhase.data.previewFile; else justform\" [cacheLayout]=\"'prepare.details.phase.indexdata'\">\n <eo-split-area [size]=\"50\">\n\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n\n </eo-split-area>\n <eo-split-area [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </eo-split-area>\n </eo-split>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n\n </div>\n\n </div>\n\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\"\n [(visible)]=\"showDeleteDialog\" [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n<div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\"\n [(visible)]=\"showContentDeleteDialog\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n<div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ? preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .eo-body eo-split-area{border-top:1px solid rgba(var(--color-black-rgb),.08);box-sizing:border-box}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{position:absolute;inset:0;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:white!important}\n"] }]
@@ -544,4 +543,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
544
543
  type: HostBinding,
545
544
  args: ['attr.data-type']
546
545
  }] } });
547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3ByZXBhcmUtZGV0YWlscy9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvcHJlcGFyZS1kZXRhaWxzL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFakgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFFTCxZQUFZLEVBTVosS0FBSyxFQUdOLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQi9FLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUF3Qi9ELElBQ0ksWUFBWSxDQUFDLElBQWtCO1FBQ2pDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxJ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QUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgVmlld0NoaWxkLCBFbGVtZW50UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29sRGVmLCBHcmlkT3B0aW9uc30gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgUHJlcGFyZWRJdGVtLFxuICBQcmVwYXJlZEl0ZW1UZW1wbGF0ZSxcbiAgUHJlcGFyZWRJdGVtVHlwZSxcbiAgUHJlcGFyZVNlcnZpY2UsXG4gIFN5c3RlbVNlcnZpY2UsXG4gIE9iamVjdFR5cGUsXG4gIFV0aWxzLFxuICBMb2dnZXIsXG4gIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBCYWNrZW5kU2VydmljZSwgQ2FwYWJpbGl0aWVzU2VydmljZVxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50fSBmcm9tICcuLi9vYmplY3QtZm9ybS9mb3JtLXN0YXR1cy1jaGFuZ2VkLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQge09iamVjdEZvcm1Db21wb25lbnR9IGZyb20gJy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtL29iamVjdC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQge1NlbGVjdGlvbkNvbmZpZywgU2VsZWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7VW5zdWJzY3JpYmVPbkRlc3Ryb3l9IGZyb20gJy4uL3V0aWwvdW5zdWJzY3JpYmUvdW5zdWJzY3JpYmUuY29tcG9uZW50JztcbmltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi4vb2JqZWN0LWZvcm0vaW5kZXgnO1xuaW1wb3J0IHtQcmV2aWV3RmlsZX0gZnJvbSAnLi4vbWVkaWEvbWVkaWEuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBQcmVwYXJlUGhhc2Uge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBwcmV2aWV3SW5kZXg/OiBudW1iZXIsXG4gICAgcHJldmlld0ZpbGU/OiBQcmV2aWV3RmlsZSxcbiAgICBmaWxlPzogYm9vbGVhbixcbiAgICB3aXRob3V0RmlsZT86IGJvb2xlYW4sXG4gICAgdGVtcGxhdGVzPzogYW55W11cbiAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tcHJlcGFyZS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByZXBhcmVEZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgVW5zdWJzY3JpYmVPbkRlc3Ryb3kgaW1wbGVtZW50cyBPbkluaXQge1xuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XG5cbiAgLy8gSUQgc2V0IGJ5IHBlbmRpbmdDaGFuZ2VzIHNlcnZpY2Ugd2hlbiBlZGl0aW5nIGluZGV4ZGF0YVxuICAvLyBVc2VkIHRvIGZpbmlzaCB0aGUgcGVuZGluZyB0YXNrIHdoZW4gZWRpdGluZyBpcyBkb25lXG4gIHByaXZhdGUgcGVuZGluZ1Rhc2tJZDogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkVHlwZU9iamVjdDtcblxuICAvLyBoaWRkZW4gZmlsZSBpbnB1dCB0byB0cmlnZ2VyIGZpbGUgdXBsb2Fkc1xuICBAVmlld0NoaWxkKCdmaWxlJykgZmlsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZm9ybScpIG9iamVjdEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm1EZWxldGUnKSBjb25maXJtRGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb25maXJtQ29udGVudERlbGV0ZScpIGNvbmZpcm1Db250ZW50RGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIC8vIHByZXBhcmF0aW9uIGlzIGRpdmlkZWQgaW50byBzZXZlcmFsIHBoYXNlc1xuICAvLyBzZWxlY3QgYW4gb2JqZWN0IHR5cGVcbiAgUEhBU0VfVFlQRSA9ICd0eXBlJztcbiAgLy8gYWRkIGNvbnRlbnRcbiAgUEhBU0VfQ09OVEVOVCA9ICdjb250ZW50JztcbiAgLy8gc2V0IGluZGV4ZGF0YVxuICBQSEFTRV9JTkRFWERBVEEgPSAnaW5kZXhkYXRhJztcblxuICBfcHJlcGFyZWRJdGVtOiBQcmVwYXJlZEl0ZW07XG5cbiAgQElucHV0KCdwcmVwYXJlZEl0ZW0nKVxuICBzZXQgcHJlcGFyZWRJdGVtKGl0ZW06IFByZXBhcmVkSXRlbSkge1xuICAgIGNvbnN0IG9iamVjdFRvU3RyaW5naWZpZWRWYWx1ZUFycmF5ID0gKG9iaikgPT4gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMob2JqIHx8IHt9KS5zb3J0KCkubWFwKGtleSA9PiBvYmpba2V5XSkpO1xuICAgIGNvbnN0IGlzUHJvY2Vzc2luZ0FsbG93ZWQgPSBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheSh0aGlzLl9wcmVwYXJlZEl0ZW0pICE9PSBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheShpdGVtKTtcbiAgICB0aGlzLl9wcmVwYXJlZEl0ZW0gPSBpdGVtO1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbSAmJiB0aGlzLnByZXBhcmVkSXRlbS5pZCAmJiBpc1Byb2Nlc3NpbmdBbGxvd2VkKSB7XG4gICAgICB0aGlzLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcHJlcGFyZWRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9wcmVwYXJlZEl0ZW07XG4gIH1cblxuXG4gIEBJbnB1dCgpIGVtcHR5U3RhdGUgPSB7aWNvbjogJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXJyb3Iuc3ZnJywgdGV4dDogJycsIGNsYXNzTmFtZTogJ2RldGFpbHMtZXJyb3InfTtcblxuICBwcmVwYXJlUGhhc2U6IFByZXBhcmVQaGFzZTtcbiAgc2VsZWN0ZWRUZW1wbGF0ZTogUHJlcGFyZWRJdGVtVGVtcGxhdGU7XG4gIHNlbGVjdGVkVGVtcGxhdGVGaWxlOiBQcmV2aWV3RmlsZTtcbiAgZm9ybU9wdGlvbnM6IE9iamVjdEZvcm1PcHRpb25zO1xuICBmb3JtU3RhdGU6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQ7XG4gIGNob29zZVRlbXBsYXRlOiBib29sZWFuO1xuICB1cGxvYWRJblByb2dyZXNzOiBib29sZWFuO1xuICBjb21taXR0aW5nOiBib29sZWFuO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIHRhZ0ZpbHRlck9wdGlvbnM6IGFueTtcbiAgX3Nob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gIGRlbGV0ZWRDb250ZW50SW5kZXg6IG51bWJlcjtcblxuICAvLyB0aXRsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGRldGFpbHMgaGVhZGVyXG4gIGhlYWRlciA9IHtcbiAgICB0aXRsZTogbnVsbCxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgbGFiZWw6IG51bGwsXG4gICAgICBsaW5rOiBudWxsXG4gICAgfSxcbiAgICBzdWJ0aXRsZTogbnVsbFxuICB9O1xuXG4gIGNvbERlZnM6IENvbERlZltdID0gW3tcbiAgICBoZWFkZXJOYW1lOiAnJyxcbiAgICBmaWVsZDogJ3RpdGxlJyxcbiAgICBjZWxsUmVuZGVyZXI6IHRoaXMuY2VsbFJlbmRlcmVyLFxuICAgIGZpbHRlcjogZmFsc2VcbiAgfV07XG5cbiAgQElucHV0KCkgYXBwbHlTZWxlY3Rpb246IFNlbGVjdGlvbkNvbmZpZztcblxuICBAT3V0cHV0KCkgb25JdGVtQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcGFyZWRJdGVtPigpO1xuICBAT3V0cHV0KCkgb25Db21taXQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uSXRlbVJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcGFyZWRJdGVtPigpO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXR5cGUnKVxuICBnZXQgZGF0YVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZWRJdGVtICYmIHRoaXMucHJlcGFyZWRJdGVtLnNlbGVjdGVkdHlwZSA/IHRoaXMucHJlcGFyZWRJdGVtLnNlbGVjdGVkdHlwZS5uYW1lIDogJ25vbmUnO1xuICB9XG5cbiAgc2V0IHNob3dEZWxldGVEaWFsb2codmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0RlbGV0ZURpYWxvZyA9IHZhbDtcblxuICAgIGlmICh0aGlzLl9zaG93RGVsZXRlRGlhbG9nKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29uZmlybURlbGV0ZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93RGVsZXRlRGlhbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93RGVsZXRlRGlhbG9nO1xuICB9XG5cbiAgc2V0IHNob3dDb250ZW50RGVsZXRlRGlhbG9nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nID0gdmFsO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29uZmlybUNvbnRlbnREZWxldGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0NvbnRlbnREZWxldGVEaWFsb2coKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwcmVwYXJlU2VydmljZTogUHJlcGFyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FwYWJpbGl0ZXM6IENhcGFiaWxpdGllc1NlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY2VsbFJlbmRlcmVyKHBhcmFtcykge1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7cGFyYW1zLmRhdGEudGl0bGUgfHwgJyd9JHtwYXJhbXMuZGF0YS5jb250ZW50ID8gJzxzcGFuIGNsYXNzPVwidGl0bGVcIj4nICsgJyAoJyArIHBhcmFtcy5kYXRhLmNvbnRlbnQubWltZWdyb3VwICsgJyknICsgJzwvc3Bhbj4nIDogJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7cGFyYW1zLmRhdGEuZGVzY3JpcHRpb24gfHwgJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzXCI+XG4gICAgICAgICAgICAgICAgJHtwYXJhbXMuZGF0YS50YWdzLm1hcCh0YWcgPT4gYDxzcGFuIGNsYXNzPVwiY2hpcFwiPiR7dGFnfTwvc3Bhbj5gKS5qb2luKCcnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmb3JtIHN0YXR1cyBjaGFuZ2VzLFxuICAgIC8vIHBlbmRpbmcgdGFzayB3aWxsIG9ubHkgYmUgc3RhcnRlZCBvbmNlIHVudGlsIGl0IHdhcyBmaW5pc2hlZFxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWQgfHwgJyAnKSkge1xuICAgICAgdGhpcy5wZW5kaW5nVGFza0lkID0gdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFBlbmRpbmcoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcy5maW5pc2hUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCk7XG4gIH1cblxuICBwcmVwYXJlRm9ybUNvbnRlbnQoZm9ybURhdGE/KSB7XG4gICAgY29uc3QgZGF0YSA9IGZvcm1EYXRhIHx8IHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0LmRhdGE7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IHtcbiAgICAgIGZvcm1Nb2RlbDogdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QuZm9ybSxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQpIHtcbiAgICAgIHRoaXMuZm9ybU9wdGlvbnMuY29udGV4dCA9IHtcbiAgICAgICAgaWQ6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC5pZCxcbiAgICAgICAgdGl0bGU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50aXRsZSxcbiAgICAgICAgdHlwZU5hbWU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIGEgcHJlcGFyZWQgaXRlbS4gVGhpcyB3aWxsIGNhdXNlIHRoZSB0ZW1wb3JhcnkgcHJlcGFyZWQgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBhIHJlYWwgRE1TLU9iamVjdC5cbiAgICogQHBhcmFtIG9wZW5Mb2NhdGlvbkFmdGVyQ29tbWl0IC0gd2hlbiBzZXQgdG8gdHJ1ZSwgYXBwbGljYXRpb24gd2lsbCBuYXZpZ2F0ZSB0byB0aGUgb2JqZWN0cyBsb2NhdGlvblxuICAgKi9cbiAgY29tbWl0KG9wZW5Mb2NhdGlvbkFmdGVyQ29tbWl0PzogYm9vbGVhbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybVN0YXRlICYmICF0aGlzLmZvcm1TdGF0ZS5pbnZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5vYmplY3RGb3JtLmdldEZvcm1EYXRhKCk7XG4gICAgICAgIHRoaXMuY29tbWl0dGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgICAgICAuY29tbWl0UHJlcGFyZWRJdGVtKHRoaXMucHJlcGFyZWRJdGVtLmlkLCB0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKS5uYW1lLCBmb3JtRGF0YSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db21taXQuZW1pdChyZXMpO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgICAgICAgICBpZiAob3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvb2JqZWN0JywgcmVzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgVXRpbHMudGhyb3coZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3Qge2tleSwgY2F1c2UsIHVuaXF1ZWZpZWxkc30gPSBlcnJvci5lcnJvcjtcbiAgICAgICAgICAgIGlmIChrZXkgJiYga2V5ID09PSAnRE1TX01FVEFEQVRBX1VOSVFVRV9WSU9MQVRJT05fRVJST1InKSB7XG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVuaXF1ZS52YWxpZGF0aW9uLmVycm9yLmhpbnQnLCB7ZmllbGQ6IHVuaXF1ZWZpZWxkcy50b1N0cmluZygpfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXVzZSkge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBjYXVzZS5tZXNzYWdlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRm9ybUNvbnRlbnQoZm9ybURhdGEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IudGl0bGUnKSxcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY3JlYXRlZC5lcnJvci5tZXNzYWdlJylcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB0aGlzLm9uSXRlbVJlbW92ZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMuX3Nob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW1Db250ZW50KGl0ZW06IFByZXBhcmVkSXRlbSwgZGVsZXRlZENvbnRlbnRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZS5kZWxldGVQcmVwYXJlZEl0ZW1Db250ZW50KGl0ZW0uaWQsIGRlbGV0ZWRDb250ZW50SW5kZXgpXG4gICAgLnN1YnNjcmliZSgodXBkYXRlZEl0ZW06IFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSB1cGRhdGVkSXRlbTtcbiAgICAgIHRoaXMuc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZpbGVOYW1lcyhpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICByZXR1cm4gKGl0ZW0uY29udGVudHMgfHwgW10pLm1hcChjID0+IGMucGF0aCkuam9pbignLCAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYSB0YXJnZXQgb2JqZWN0IHR5cGUgZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0uXG4gICAqIEBwYXJhbSB0eXBlIC0gdGhlIG9iamVjdCB0eXBlcyBuYW1lIHRvIGJlIHNldCBhcyB0YXJnZXRcbiAgICovXG4gIHNlbGVjdE9iamVjdFR5cGUodHlwZTogUHJlcGFyZWRJdGVtVHlwZSkge1xuICAgIHRoaXMucHJlcGFyZWRJdGVtLnR5cGVzXG4gICAgICAuZm9yRWFjaCgodCkgPT4gdC5zZWxlY3RlZCA9ICh0Lm5hbWUgPT09IHR5cGUubmFtZSkpO1xuXG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLnVwZGF0ZUNoaWxkVHlwZSh0eXBlLm5hbWUsIHRoaXMucHJlcGFyZWRJdGVtLmlkKVxuICAgICAgLnN1YnNjcmliZSh1cGRhdGVkUHJlcGFyZWRJdGVtID0+IHtcbiAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSB1cGRhdGVkUHJlcGFyZWRJdGVtO1xuICAgICAgICB0aGlzLm9uSXRlbUNoYW5nZWQuZW1pdCh1cGRhdGVkUHJlcGFyZWRJdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHRlbXBsYXRlIHRvIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0uXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHRoZSB0ZW1wbGF0ZSB0byBiZSBhZGRlZFxuICAgKi9cbiAgYWRkVGVtcGxhdGUodGVtcGxhdGU6IFByZXBhcmVkSXRlbVRlbXBsYXRlKSB7XG5cbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAuYWRkVGVtcGxhdGUodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIHRlbXBsYXRlLmlkKVxuICAgICAgLnN1YnNjcmliZSgodXBkYXRlZFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRQcmVwYXJlZEl0ZW07XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHVwZGF0ZWRQcmVwYXJlZEl0ZW0pO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJlcGFyZS50ZW1wbGF0ZS5lcnJvci50aXRsZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLnRlbXBsYXRlLmVycm9yLm1lc3NhZ2UnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHRlbXBsYXRlLiBXaWxsIHNob3cgcHJldmlldyBmb3IgdGhlIHNlbGVjdGVkIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0gdGVtcGxhdGUgLSB0aGUgdGVtcGxhdGUgdG8gYmUgc2VsZWN0ZWRcbiAgICovXG4gIHNlbGVjdFRlbXBsYXRlKHRlbXBsYXRlOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZUZpbGUgPSAhKHRlbXBsYXRlICYmIHRlbXBsYXRlLmNvbnRlbnQpID8gbnVsbCA6IHtcbiAgICAgIHVyaTogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRUZW1wbGF0ZVByZXZpZXdVcmkodGhpcy5zZWxlY3RlZFRlbXBsYXRlLmlkKSxcbiAgICAgIHVyaVBkZjogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRUZW1wbGF0ZVByZXZpZXdVcmkodGhpcy5zZWxlY3RlZFRlbXBsYXRlLmlkLCAnUERGJyksXG4gICAgICBtaW1ldHlwZTogdGVtcGxhdGUuY29udGVudC5taW1ldHlwZSxcbiAgICAgIG1pbWVncm91cDogdGVtcGxhdGUuY29udGVudC5taW1lZ3JvdXAsXG4gICAgICBzaXplOiB0ZW1wbGF0ZS5jb250ZW50LnNpemVcbiAgICB9O1xuICB9XG5cbiAgc2V0UHJldmlld1VyaShpbmRleDogbnVtYmVyKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnByZXBhcmVQaGFzZS5kYXRhLCB0aGlzLmdldFByZXZpZXdEYXRhKGluZGV4KSk7XG4gIH1cblxuICAvLyBza2lwIGNvbnRlbnQgc2VsZWN0aW9uIGZvciB0aGUgY3VycmVudCBwcmVwYXJlZCBpdGVtXG4gIC8vIGFuZCBjb250aW51ZSBzZXR0aW5nIGluZGV4ZGF0YVxuICBub0ZpbGUoKSB7XG4gICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgfVxuXG4gIC8vIHRyaWdnZXIgZmlsZSB1cGxvYWRcbiAgdXBsb2FkKCkge1xuICAgIC8vIGFmdGVyIHRoZSB1c2VyIHNlbGVjdGVkIGEgZmlsZSBmaWxlQ2hhbmdlTGlzdGVuZXIoKSB3aWxsIGNvbnRpbnVlXG4gICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8vIG9uQ2hhbmdlIGxpc3RlbmVyIG9uIGhpZGRlbiBmaWxlIGlucHV0XG4gIGZpbGVDaGFuZ2VMaXN0ZW5lcihldmVudCkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudFswXTtcbiAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC51cGxvYWRDb250ZW50KHRoaXMucHJlcGFyZWRJdGVtLmlkLCBmaWxlKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAvLyB1cGxvYWQgc3VjY2VlZGVkIHNvIHdlIGNhbiBnbyBvbiB0byB0aGUgbmV4dCBwcmVwYXJlIHBoYXNlXG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gbmV3IFByZXBhcmVkSXRlbShyZXMpO1xuICAgICAgICB0aGlzLm9uSXRlbUNoYW5nZWQuZW1pdCh0aGlzLnByZXBhcmVkSXRlbSk7XG4gICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgfSwgVXRpbHMudGhyb3coZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IuY2F1c2UpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBlcnJvci5lcnJvci5jYXVzZS5tZXNzYWdlc1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBlcnJvci5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IudGl0bGUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51cGxvYWQuZ2xvYmFsLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IuZGVzY3JpcHRpb24nKVxuICAgICAgKSk7XG4gIH1cblxuICBvbkZvcm1TdGF0dXNDaGFuZ2VkKGV2dCkge1xuICAgIHRoaXMuZm9ybVN0YXRlID0gZXZ0O1xuXG4gICAgaWYgKHRoaXMuZm9ybVN0YXRlLmRpcnR5KSB7XG4gICAgICB0aGlzLnN0YXJ0UGVuZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3MoKSB7XG4gICAgLy8gdG9kbzogcmVzZXQgc3R1ZmZcbiAgICB0aGlzLmZvcm1TdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5nZXRQcmVwYXJlUGhhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHByZXBhcmUgcGhhc2UgdG8gYmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24gdGhlIGNvbmRpdGlvbnNcbiAgICogb2YgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgZ2V0UHJlcGFyZVBoYXNlKCkge1xuICAgIGlmICghdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCkpIHtcbiAgICAgIC8vIFN0ZXAgIzEgc2VsZWN0IGFuIG9iamVjdCB0eXBlIGlmIG5vdCB5ZXQgc2V0XG4gICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5oYXNDb250ZW50KCkpIHtcbiAgICAgIC8vIFN0ZXAgIzIgYWRkIGNvbnRlbnQgaWYgbm90IHlldCBjb250YWluZWRcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0NPTlRFTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwICMzIGVkaXQgaW5kZXhkYXRhIGFuZCBzYXZlXG4gICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVtcGxhdGUoc2VsZWN0ZWRUeXBlT2JqZWN0KSB7XG4gICAgY29uc3QgdHlwZTogT2JqZWN0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHNlbGVjdGVkVHlwZU9iamVjdC5uYW1lKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC5nZXRUZW1wbGF0ZXMoc2VsZWN0ZWRUeXBlT2JqZWN0Lm5hbWUpXG4gICAgICAuc3Vic2NyaWJlKCh0ZW1wbGF0ZXM6IFByZXBhcmVkSXRlbVRlbXBsYXRlW10pID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVJlcXVpcmVkID0gdGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUuY29udGVudHN0YXRlID09PSAnUkVRVUlSRUQnO1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIGZpbGU6IHR5cGUubWF4RmlsZXMgPiAwLFxuICAgICAgICAgIHdpdGhvdXRGaWxlOiAhKHR5cGUubWluRmlsZXMgPiAwKSAmJiAhZmlsZVJlcXVpcmVkLFxuICAgICAgICAgIHRlbXBsYXRlczogdGVtcGxhdGVzIHx8IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgb2JqZWN0IHR5cGUgZG9lcyBub3Qgc3VwcG9ydCBmaWxlIHVwbG9hZCBvciB0ZW1wbGF0ZSBjb250ZW50c1xuICAgICAgICAvLyB3ZSBza2lwIGNvbnRlbnQgcGhhc2UgYW5kIG1vdmUgb24gdG8gaW5kZXhkYXRhIHBoYXNlXG4gICAgICAgIGlmICghZGF0YS5maWxlKSB7XG4gICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByZXBhcmVQaGFzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfQ09OVEVOVCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc2V0dXBUaXRsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFnRmlsdGVyT3B0aW9ucyA9IHRoaXMuY3JlYXRlVGFnRmlsdGVyT3B0aW9ucyh0ZW1wbGF0ZXMpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zID0ge1xuICAgICAgICAgIGNvbnRleHQ6IHtjb3VudDogdGhpcy5wcmVwYXJlUGhhc2UuZGF0YS50ZW1wbGF0ZXMubGVuZ3RofSxcbiAgICAgICAgICByb3dEYXRhOiB0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ3RpdGxlJykpLFxuICAgICAgICAgIGNvbHVtbkRlZnM6IHRoaXMuY29sRGVmcyxcbiAgICAgICAgICByb3dIZWlnaHQ6IDgwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBjcmVhdGVUYWdGaWx0ZXJPcHRpb25zKHRlbXBsYXRlczogUHJlcGFyZWRJdGVtVGVtcGxhdGVbXSkge1xuICAgIGxldCB0YWdGaWx0ZXJPcHRpb25zID0gW107XG4gICAgdGVtcGxhdGVzLmZvckVhY2godGVtcGxhdGUgPT4ge1xuICAgICAgdGVtcGxhdGUudGFncy5mb3JFYWNoKHRhZyA9PiB7XG4gICAgICAgIHRhZ0ZpbHRlck9wdGlvbnMucHVzaCh7bGFiZWw6IHRhZywgZmlsdGVyOiAobm9kZSkgPT4gbm9kZS5kYXRhLnRhZ3MuaW5jbHVkZXModGFnKSwgdmFsdWU6IHRydWV9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBfLnVuaXFCeSh0YWdGaWx0ZXJPcHRpb25zLCAnbGFiZWwnKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBzcGVjaWZpYyBwcmVwYXJlIHBoYXNlLlxuICAgKiBAcGFyYW0gcGhhc2UgLSBwaGFzZSB0byBpbml0IChQSEFTRV9UWVBFLCBQSEFTRV9DT05URU5ULCBQSEFTRV9JTkRFWERBVEEpXG4gICAqL1xuICBwcml2YXRlIGluaXRQcmVwYXJlUGhhc2UocGhhc2U6IHN0cmluZykge1xuICAgIHRoaXMucHJlcGFyZVBoYXNlID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkVHlwZU9iamVjdCA9IHRoaXMucHJlcGFyZWRJdGVtLmdldFNlbGVjdGVkVHlwZU9iamVjdCgpO1xuXG4gICAgc3dpdGNoIChwaGFzZSkge1xuICAgICAgLy8gaW5pdCBwcmVwYXJlIHBoYXNlIGZvciBzZWxlY3RpbmcgdGhlIHRhcmdldCBvYmplY3QgdHlwZVxuICAgICAgY2FzZSB0aGlzLlBIQVNFX1RZUEU6IHtcblxuICAgICAgICB0aGlzLnByZXBhcmVQaGFzZSA9IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLlBIQVNFX1RZUEUsXG4gICAgICAgICAgZGF0YTogdGhpcy5nZXRQcmV2aWV3RGF0YSgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2V0dXBUaXRsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gaW5pdCBwcmVwYXJlIHBoYXNlIGZvciBzZXR0aW5nIHVwIGNvbnRlbnRcbiAgICAgIGNhc2UgdGhpcy5QSEFTRV9DT05URU5UOiB7XG5cbiAgICAgICAgdGhpcy5jaG9vc2VUZW1wbGF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGUgPSBudWxsO1xuXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBwcmVwYXJlZEl0ZW0gYWxyZWFkeSBjb250YWlucyBhIGZpbGUgb3IgdGVtcGxhdGVcbiAgICAgICAgaWYgKHRoaXMucHJlcGFyZWRJdGVtLmhhc0NvbnRlbnQoKSkge1xuICAgICAgICAgIGlmICghdGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNlbGVjdGVkIHR5cGUgaXMgbm90IGFsbG93ZWQsIHdlJ2xsIGdvIGJhY2sgdG8gdGhlIHR5cGUgc2VsZWN0IHN0YXRlIC4uLlxuICAgICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfVFlQRSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIC4uLiBvdGhlcndpc2Ugd2UgZ28gb24gc2V0dGluZyBpbmRleGRhdGFcbiAgICAgICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgaWYgKHRoaXMucHJlcGFyZWRJdGVtLnN0YXRlLmNvbnRlbnRzdGF0ZSA9PT0gJ05PQ09OVEVOVEFMTE9XRUQnKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbXBsYXRlKHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBpbml0IHByZXBhcmUgcGhhc2UgZm9yIGFkZGluZyBpbmRleGRhdGFcbiAgICAgIGNhc2UgdGhpcy5QSEFTRV9JTkRFWERBVEE6IHtcblxuICAgICAgICB0aGlzLmNob29zZVRlbXBsYXRlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS50eXBlc2VsZWN0ZWRhbGxvd2VkKSB7XG4gICAgICAgICAgLy8gaWYgdGhlIHNlbGVjdGVkIHR5cGUgaXMgbm90IGFsbG93ZWQsIHdlJ2xsIGdvIGJhY2sgdG8gdGhlIHR5cGUgc2VsZWN0IHN0YXRlIC4uLlxuICAgICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgdGhpcy5wcmVwYXJlRm9ybUNvbnRlbnQoKTtcblxuICAgICAgICAgIHRoaXMucHJlcGFyZVBoYXNlID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5QSEFTRV9JTkRFWERBVEEsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmdldFByZXZpZXdEYXRhKClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc2V0dXBUaXRsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJldmlld0RhdGEoaW5kZXg/OiBudW1iZXIpOiBhbnkge1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbSAmJiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50cyAmJiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50cy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gaW5kZXggfHwgMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXZpZXdJbmRleDogaW5kZXgsXG4gICAgICAgIHByZXZpZXdGaWxlOiB7XG4gICAgICAgICAgdXJpOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXZpZXdVcmkodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIGluZGV4KSxcbiAgICAgICAgICB1cmlQZGY6IHRoaXMucHJlcGFyZVNlcnZpY2UuZ2V0UHJldmlld1VyaSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgaW5kZXgsICdQREYnKSxcbiAgICAgICAgICBtaW1ldHlwZTogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLm1pbWV0eXBlLFxuICAgICAgICAgIG1pbWVncm91cDogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLm1pbWVncm91cCxcbiAgICAgICAgICBwYXRoOiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50c1tpbmRleF0ucGF0aCxcbiAgICAgICAgICBzaXplOiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50c1tpbmRleF0uc2l6ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7cHJldmlld0ZpbGU6IG51bGx9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHVwIHRpdGxlIGZvciB0aGUgY3VycmVudCBwcmVwYXJlZCBpdGVtIGJhc2VkIG9uIHRoZVxuICAgKiBjdXJyZW50IHByZXBhcmUgcGhhc2UuIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcHJlcGFyZSBwaGFzZSBpcyBpZGVudGlmaWVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cFRpdGxlKCkge1xuXG4gICAgdGhpcy50cmFuc2xhdGUuZ2V0KFtcbiAgICAgICdlby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnN5c3Jvb3QnLFxuICAgICAgJ2VvLnByZXBhcmUubG9jYXRpb24udGl0bGUucHJlZml4JyxcbiAgICAgICdlby5wcmVwYXJlLmRldGFpbHMudHlwZS50aXRsZScsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUuc3VidGl0bGUnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy5jb250ZW50LnN1YnRpdGxlJyxcbiAgICAgICdlby5wcmVwYXJlLmRldGFpbHMuaW5kZXhkYXRhLnN1YnRpdGxlJ1xuICAgIF0pLnN1YnNjcmliZSh0ID0+IHtcblxuICAgICAgbGV0IGhlYWRlciA9IHtcbiAgICAgICAgdGl0bGU6IG51bGwsXG4gICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgbGFiZWw6IG51bGwsXG4gICAgICAgICAgbGluazogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBzdWJ0aXRsZTogbnVsbFxuICAgICAgfTtcbiAgICAgIHN3aXRjaCAodGhpcy5wcmVwYXJlUGhhc2UubmFtZSkge1xuICAgICAgICBjYXNlIHRoaXMuUEhBU0VfVFlQRToge1xuICAgICAgICAgIGhlYWRlci50aXRsZSA9IHRbJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnRpdGxlJ107XG4gICAgICAgICAgaGVhZGVyLnN1YnRpdGxlID0gdFsnZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUuc3VidGl0bGUnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHRoaXMuUEhBU0VfQ09OVEVOVDoge1xuICAgICAgICAgIGNvbnN0IHR5cGVPYmplY3QgPSB0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKTtcbiAgICAgICAgICBoZWFkZXIudGl0bGUgPSB0eXBlT2JqZWN0ID8gdHlwZU9iamVjdC5sYWJlbCA6ICcnO1xuICAgICAgICAgIGhlYWRlci5zdWJ0aXRsZSA9IHRbJ2VvLnByZXBhcmUuZGV0YWlscy5jb250ZW50LnN1YnRpdGxlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB0aGlzLlBIQVNFX0lOREVYREFUQToge1xuICAgICAgICAgIGNvbnN0IHR5cGVPYmplY3QgPSB0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKTtcbiAgICAgICAgICBoZWFkZXIudGl0bGUgPSB0eXBlT2JqZWN0ID8gdHlwZU9iamVjdC5sYWJlbCA6ICcnO1xuICAgICAgICAgIGhlYWRlci5zdWJ0aXRsZSA9IHRbJ2VvLnByZXBhcmUuZGV0YWlscy5pbmRleGRhdGEuc3VidGl0bGUnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdXAgbG9jYXRpb24gaW5mb1xuICAgICAgaWYgKHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlID09PSAnc3lzcm9vdCcpIHtcbiAgICAgICAgaGVhZGVyLmxvY2F0aW9uID0ge1xuICAgICAgICAgIGxhYmVsOiB0Wydlby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnN5c3Jvb3QnXSxcbiAgICAgICAgICBsaW5rOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJlbnRUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUodGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnR5cGUpO1xuICAgICAgICBoZWFkZXIubG9jYXRpb24gPSB7XG4gICAgICAgICAgbGFiZWw6IGAgJHtwYXJlbnRUeXBlLmxhYmVsfTogJHt0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudGl0bGV9YCxcbiAgICAgICAgICBsaW5rOiBgL29iamVjdC8ke3RoaXMucHJlcGFyZWRJdGVtLnBhcmVudC5pZH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmhlYWRlciA9IGhlYWRlcjtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dUZW1wbGF0ZVNlbGVjdG9yKHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNob29zZVRlbXBsYXRlID0gc2hvdztcbiAgICB0aGlzLnNlbGVjdFRlbXBsYXRlKHRoaXMucHJlcGFyZVBoYXNlLmRhdGEudGVtcGxhdGVzWzBdKTtcbiAgfVxuXG4gIGRvd25sb2FkKCkge1xuICAgIGlmICh0aGlzLnByZXBhcmVQaGFzZSkge1xuICAgICAgY29uc3QgZmlsZSA9IHRoaXMucHJlcGFyZVBoYXNlLm5hbWUgPT09ICdjb250ZW50JyA/IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZUZpbGUgOiB0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgdGhpcy5iYWNrZW5kLmRvd25sb2FkKGZpbGUudXJpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXNUZW1wbGF0ZUNhcGFiaWxpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FwYWJpbGl0ZXMuaGFzQ2FwYWJpbGl0eSgndGVtcGxhdGUnKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SWRGbihpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJbmRleEZuKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYXBwbHlTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGlvblxuICAgICAgICAuZmluZCh0aGlzLmFwcGx5U2VsZWN0aW9uLmluKS5mb2N1cyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkJClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnR5cGVzKSB7XG4gICAgICAgICAgICByZXMudHlwZXMgPSByZXMudHlwZXMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicHJlcGFyZURldGFpbHNfX3dyYXBwZXJcIiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIG1haW5TcGlubmVyXCI+XG4gIDxzZWN0aW9uIGNsYXNzPVwicHJlcGFyZURldGFpbHNcIiAqbmdJZj1cInByZXBhcmVkSXRlbSAmJiBwcmVwYXJlUGhhc2U7IGVsc2Ugbm9JdGVtXCJcbiAgICBbbmdDbGFzc109XCJ7bXVsdGlmaWxlOiBwcmVwYXJlZEl0ZW0uY29udGVudGNvdW50ID4gMSwgY29tbWl0dGluZzogY29tbWl0dGluZ31cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZFwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWluZm9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPnt7aGVhZGVyLnRpdGxlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1zdWItdGl0bGUgaC1sb2NhdGlvblwiICpuZ0lmPVwiIWhlYWRlci5sb2NhdGlvbi5saW5rOyBlbHNlIGxpbmtlZFwiPnt7aGVhZGVyLmxvY2F0aW9uLmxhYmVsfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtc3VidGl0bGVcIj57e2hlYWRlci5zdWJ0aXRsZX19PC9kaXY+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsaW5rZWQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1zdWItdGl0bGUgaC1zdWJ0aXRsZS1kZXRhaWxlZFwiPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmVvLnByZXBhcmUubG9jYXRpb24udGl0bGUucHJlZml4PC9zcGFuPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiaGVhZGVyLmxvY2F0aW9uLmxpbmtcIj57e2hlYWRlci5sb2NhdGlvbi5sYWJlbH19PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnRuIGJ0bi1kb3dubG9hZFwiXG4gICAgICAgICAgKm5nSWY9XCJwcmVwYXJlUGhhc2UubmFtZSA9PT0gJ2NvbnRlbnQnID8gc2VsZWN0ZWRUZW1wbGF0ZUZpbGUgOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiXG4gICAgICAgICAgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY29udGVudC1kb3dubG9hZC5zdmcnXCJcbiAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uYWN0aW9uLmRvd25sb2FkLmRtcy5vYmplY3QuY29udGVudC5sYWJlbCcgfCB0cmFuc2xhdGUpXCIgKGNsaWNrKT1cImRvd25sb2FkKClcIj48L2VvLWljb24+XG4gICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnRuIGJ0bi1kZWxldGVcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY190cmFzaC5zdmcnXCJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0RlbGV0ZURpYWxvZyA9IHRydWU7XCI+PC9lby1pY29uPlxuICAgICAgICA8IS0tIGJ1dHRvbnMgd2hpbGUgY2hvb3NpbmcgYSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNob29zZVRlbXBsYXRlXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi10cGwtYWJvcnRcIiAoY2xpY2spPVwic2hvd1RlbXBsYXRlU2VsZWN0b3IoZmFsc2UpXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnRlbXBsYXRlLmFib3J0PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLXRwbC1hcHBseVwiIChjbGljayk9XCJhZGRUZW1wbGF0ZShzZWxlY3RlZFRlbXBsYXRlKVwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRUZW1wbGF0ZVwiXG4gICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS50ZW1wbGF0ZS5zZWxlY3Q8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXBhcmVQaGFzZS5uYW1lID09PSAnaW5kZXhkYXRhJ1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbW1pdCgpXCIgY2xhc3M9XCJidG4taWR4LXNhdmVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie3ByaW1hcnk6IHByZXBhcmVkSXRlbS5zdGF0ZS5wYXJlbnRpc3Jvb3QgJiYgcHJlcGFyZWRJdGVtLmNvbnRlbnRjb3VudCA+IDF9XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtU3RhdGU/LmludmFsaWQgfHwgY29tbWl0dGluZ1wiIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnNhdmU8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbW1pdCh0cnVlKVwiIFtkaXNhYmxlZF09XCJmb3JtU3RhdGU/LmludmFsaWQgfHwgY29tbWl0dGluZ1wiIGNsYXNzPVwicHJpbWFyeSBidG4taWR4LXNhdmVvcGVuXCJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwicHJlcGFyZWRJdGVtPy5zdGF0ZS5wYXJlbnRpc3Jvb3QgJiYgcHJlcGFyZWRJdGVtPy5jb250ZW50Y291bnQgPiAxXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnNhdmVvcGVuPC9idXR0b24+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIiBbbmdTd2l0Y2hdPVwicHJlcGFyZVBoYXNlLm5hbWVcIiAqbmdJZj1cIiFjb21taXR0aW5nOyBlbHNlIHNwaW5uZXJcIj5cblxuICAgICAgPCEtLSBQSEFTRSBUWVBFIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIHR5cGVcIiAqbmdTd2l0Y2hDYXNlPVwiJ3R5cGUnXCI+XG5cbiAgICAgICAgPCEtLSB3aXRoIHByZXZpZXcgLS0+XG4gICAgICAgIDxlby1zcGxpdCBbZ3V0dGVyU2l6ZV09XCIxNlwiIFtndXR0ZXJDb2xvcl09XCInI2ZmZidcIiBbdmlzaWJsZVRyYW5zaXRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZTsgZWxzZSBub3ByZXZpZXdcIiBbY2FjaGVMYXlvdXRdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS50eXBlJ1wiPlxuICAgICAgICAgIDxlby1zcGxpdC1hcmVhIFtzaXplXT1cIjMwXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpbGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3QgZW1wdHlcIiAqbmdJZj1cInByZXBhcmVkSXRlbS50eXBlcy5sZW5ndGggPT0gMFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBlby5wcmVwYXJlLmRldGFpbHMudHlwZS5lbXB0eTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0IGVtcHR5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCAmJiBwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBwcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlLmxhYmVsLCBmaWxlbmFtZTogZ2V0RmlsZU5hbWVzKHByZXBhcmVkSXRlbSl9XCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUubm90YWxsb3dlZDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3R5cGUuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuY29udGVudHMudGl0bGU8L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIHByZXBhcmVkSXRlbS5jb250ZW50czsgdHJhY2tCeTogdHJhY2tCeUluZGV4Rm47IGluZGV4IGFzIGlkeDtcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXggPT0gaWR4fVwiIChjbGljayk9XCJzZXRQcmV2aWV3VXJpKGlkeClcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y29udGVudC5wYXRofX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlLWNvbnRlbnRcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY190cmFzaC5zdmcnXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93Q29udGVudERlbGV0ZURpYWxvZyA9IHRydWU7IGRlbGV0ZWRDb250ZW50SW5kZXggPSBpZHg7XCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbnRlbnQuZXhpc3RzY291bnQgPiAwXCIgY2xhc3M9XCJhdHRlbnRpb25cIiB0aXRsZT1cInt7J2VvLnByZXBhcmUuY29udGVudC5leGlzdHNjb3VudC5tZXNzYWdlJ3x0cmFuc2xhdGU6ICh7Y291bnQ6IGNvbnRlbnQuZXhpc3RzY291bnR9KX19XCI+ITwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZW8tc3BsaXQtYXJlYT5cbiAgICAgICAgICA8ZW8tc3BsaXQtYXJlYSBbc2l6ZV09XCI3MFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLW1lZGlhLXdyYXBcIj5cbiAgICAgICAgICAgICAgPGVvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbyBbY29udGVudF09XCJwcmVwYXJlZEl0ZW0uY29udGVudHNbcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0luZGV4XVwiPlxuICAgICAgICAgICAgICA8L2VvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbz5cbiAgICAgICAgICAgICAgPGVvLW1lZGlhIFtwcmV2aWV3RmlsZV09XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2VvLXNwbGl0LWFyZWE+XG4gICAgICAgIDwvZW8tc3BsaXQ+XG5cbiAgICAgICAgPCEtLSB3aXRob3V0IHByZXZpZXcgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9wcmV2aWV3PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpbGVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHByZXBhcmVkSXRlbS50eXBlczsgdHJhY2tCeTogdHJhY2tCeUlkRm5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGUtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25JZF09XCJ0eXBlLmljb24uaWRcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3R5cGUuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQSEFTRSBDT05URU5UIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIGNvbnRlbnRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NvbnRlbnQnXCI+XG5cbiAgICAgICAgPCEtLSBwYW5lbCBmb3Igc2VsZWN0aW5nIGEgdGVtcGxhdGUgdG8gYmUgdXNlZCBhcyBpdGVtcyBjb250ZW50IC0tPlxuICAgICAgICA8ZW8tc3BsaXQgW2d1dHRlclNpemVdPVwiMTZcIiBbZ3V0dGVyQ29sb3JdPVwiJyNmZmYnXCIgW3Zpc2libGVUcmFuc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICpuZ0lmPVwiY2hvb3NlVGVtcGxhdGU7IGVsc2UgYXR0YWNoXCIgW2NhY2hlTGF5b3V0XT1cIidwcmVwYXJlLmRldGFpbHMucGhhc2UuY29udGVudCdcIj5cbiAgICAgICAgICA8ZW8tc3BsaXQtYXJlYSBbc2l6ZV09XCI0MFwiPlxuXG4gICAgICAgICAgICA8IS0tIGxpc3Qgb2YgYXZhaWxhYmxlIHRlbXBsYXRlcyAtLT5cbiAgICAgICAgICAgIDxlby1saXN0LWNvbnRhaW5lciAjZW9MaXN0IFtsb2FkaW5nXT1cImZhbHNlXCIgY2xhc3M9XCJ0ZW1wbGF0ZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiZW8taGVhZGVyLWljb25cIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY190ZW1wbGF0ZS5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlci10aXRsZVwiIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnRlbXBsYXRlLmxpc3QudGl0bGU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyLWFjdGlvbnNcIj5cblxuICAgICAgICAgICAgICAgICAgPGVvLW92ZXJsYXkgI29GaWx0ZXIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZmlsdGVyLnN2ZydcIiBbaWNvbkNsYXNzXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3ZlcmxheS1maWx0ZXJcIiBbdGl0bGVdPVwiJ2VvLmxpc3QuZmlsdGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChhY3RpdmUpPVwib0ZpbHRlci5vbkFjdGl2ZUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZW8tY3VzdG9tLWZpbHRlciAjY0ZpbHRlciAoY2hhbmdlKT1cImNGaWx0ZXIudXBkYXRlR3JpZChlb0xpc3QuZW9HcmlkU3ViamVjdCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGFjdGl2ZSk9XCJvRmlsdGVyLm9uQWN0aXZlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGVvLXRleHQtZmlsdGVyIFt0aXRsZV09XCInZW8ucHJlcGFyZS50ZW1wbGF0ZS5maWx0ZXIudGV4dC50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdGNoRmllbGRzXT1cIlsndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAndGFncyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZW8ucHJlcGFyZS50ZW1wbGF0ZS5maWx0ZXIudGV4dC50aXRsZSdcIj48L2VvLXRleHQtZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxlby1zZXQtZmlsdGVyIFtvcGVyYXRvcl09XCInT1InXCIgW3RpdGxlXT1cIidlby5wcmVwYXJlLnRlbXBsYXRlLmZpbHRlci5zZXQudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFnRmlsdGVyT3B0aW9ucz8ubGVuZ3RoXCIgW29wdGlvbnNdPVwidGFnRmlsdGVyT3B0aW9uc1wiPjwvZW8tc2V0LWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9lby1jdXN0b20tZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgPC9lby1vdmVybGF5PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8tYm9keVwiPlxuICAgICAgICAgICAgICAgIDxlby1ncmlkICNlb0dyaWQgKm5nSWY9XCJncmlkT3B0aW9ucz8ucm93RGF0YVwiIFtncmlkT3B0aW9uc109XCJncmlkT3B0aW9uc1wiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJ0cnVlXCIgW3Nob3dGb290ZXJdPVwiZmFsc2VcIiBbc2VsZWN0aW9uTGltaXRdPVwiMVwiXG4gICAgICAgICAgICAgICAgICAoZW9HcmlkU2VsZWN0aW9uQ2hhbmdlZCk9XCJzZWxlY3RUZW1wbGF0ZSgkZXZlbnRbMF0pXCI+XG4gICAgICAgICAgICAgICAgPC9lby1ncmlkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZW8tbGlzdC1jb250YWluZXI+XG5cbiAgICAgICAgICA8L2VvLXNwbGl0LWFyZWE+XG4gICAgICAgICAgPGVvLXNwbGl0LWFyZWEgW3NpemVdPVwiNjBcIj5cblxuICAgICAgICAgICAgPCEtLSBwcmV2aWV3IG9mIHNlbGVjdGVkIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgPGVvLW1lZGlhIFtwcmV2aWV3RmlsZV09XCJzZWxlY3RlZFRlbXBsYXRlRmlsZVwiPjwvZW8tbWVkaWE+XG5cbiAgICAgICAgICA8L2VvLXNwbGl0LWFyZWE+XG4gICAgICAgIDwvZW8tc3BsaXQ+XG5cbiAgICAgICAgPCEtLSBhZGQgY29udGVudCBnZW5lcmFsIG92ZXJ2aWV3ICh1cGxvYWQsIHRlbXBsYXRlLCBub25lKSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhdHRhY2g+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mb1wiICpuZ0lmPVwiIXVwbG9hZEluUHJvZ3Jlc3NcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LmluZm88L2Rpdj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiAjZmlsZSAoY2hhbmdlKT1cImZpbGVDaGFuZ2VMaXN0ZW5lcigkZXZlbnQudGFyZ2V0LmZpbGVzKVwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnRzXCIgKm5nSWY9XCIhdXBsb2FkSW5Qcm9ncmVzczsgZWxzZSB1cGxvYWRzcGlubmVyXCI+XG5cbiAgICAgICAgICAgIDwhLS0gdXBsb2FkIGEgZmlsZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50IGF0dC1maWxlXCIgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS5maWxlXCIgKGNsaWNrKT1cInVwbG9hZCgpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19maWxlX3VwbG9hZC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudXBsb2FkLnRpdGxlPC9oMz5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC51cGxvYWQuZGVzYzwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIHNlbGVjdCBhIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQgYXR0LXRtcGxcIiAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5sZW5ndGggPiAwICYmIGhhc1RlbXBsYXRlQ2FwYWJpbGl0eSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dUZW1wbGF0ZVNlbGVjdG9yKHRydWUpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19wcmVwYXJlX2FkZC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudGVtcGxhdGUudGl0bGU8L2gzPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnRlbXBsYXRlLmRlc2M8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBubyBmaWxlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQgYXR0LW5vbmVcIiAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLndpdGhvdXRGaWxlXCIgKGNsaWNrKT1cIm5vRmlsZSgpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19uby1maWxlLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC5ub2ZpbGUudGl0bGU8L2gzPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50Lm5vZmlsZS5kZXNjPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gdXBsb2FkIHByb2dyZXNzIGluZGljYXRvciAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN1cGxvYWRzcGlubmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidsYXJnZSdcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBIQVNFIElOREVYREFUQSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaGFzZSBpbmRleGRhdGFcIiAqbmdTd2l0Y2hDYXNlPVwiJ2luZGV4ZGF0YSdcIj5cblxuICAgICAgICA8IS0tIGZvcm0gYW5kIHByZXZpZXcgLS0+XG4gICAgICAgIDxlby1zcGxpdCBbZ3V0dGVyU2l6ZV09XCIxNlwiIFtndXR0ZXJDb2xvcl09XCInI2ZmZidcIiBbdmlzaWJsZVRyYW5zaXRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZTsgZWxzZSBqdXN0Zm9ybVwiIFtjYWNoZUxheW91dF09XCIncHJlcGFyZS5kZXRhaWxzLnBoYXNlLmluZGV4ZGF0YSdcIj5cbiAgICAgICAgICA8ZW8tc3BsaXQtYXJlYSBbc2l6ZV09XCI1MFwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuXG4gICAgICAgICAgICAgIDwhLS0gaW5kZXhkYXRhIGZvcm0gLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJqdXN0Zm9ybVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gbGlzdCBvZiBjb250ZW50cyAoaW4gY2FzZSBvZiBidWxrIHVwbG9hZCkgdGhhdCBjYW4gYmUgcHJldmlld2VkIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1zZWxlY3RcIj5cblxuICAgICAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnRzLnRpdGxlPC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBwcmVwYXJlZEl0ZW0uY29udGVudHM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleEZuOyBpbmRleCBhcyBpZHhcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXggPT09IGlkeH1cIiAoY2xpY2spPVwic2V0UHJldmlld1VyaShpZHgpXCI+XG4gICAgICAgICAgICAgICAgICB7e2NvbnRlbnQucGF0aH19IDxzcGFuICpuZ0lmPVwiY29udGVudC5leGlzdHNjb3VudCA+IDBcIiBjbGFzcz1cImF0dGVudGlvblwiIHRpdGxlPVwie3snZW8ucHJlcGFyZS5jb250ZW50LmV4aXN0c2NvdW50Lm1lc3NhZ2UnfHRyYW5zbGF0ZTogKHtjb3VudDogY29udGVudC5leGlzdHNjb3VudH0pfX1cIj4hPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9lby1zcGxpdC1hcmVhPlxuICAgICAgICAgIDxlby1zcGxpdC1hcmVhIFtzaXplXT1cIjUwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8tbWVkaWEtd3JhcFwiPlxuICAgICAgICAgICAgICA8ZW8tcHJlcGFyZS1jb250ZW50LWV4aXN0cy1pbmZvIFtjb250ZW50XT1cInByZXBhcmVkSXRlbS5jb250ZW50c1twcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXhdXCI+XG4gICAgICAgICAgICAgIDwvZW8tcHJlcGFyZS1jb250ZW50LWV4aXN0cy1pbmZvPlxuICAgICAgICAgICAgICA8ZW8tbWVkaWEgW3ByZXZpZXdGaWxlXT1cInByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlXCI+PC9lby1tZWRpYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZW8tc3BsaXQtYXJlYT5cbiAgICAgICAgPC9lby1zcGxpdD5cblxuICAgICAgICA8IS0tIGp1c3QgdGhlIGZvcm0gLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjanVzdGZvcm0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyIHNpdHVhdGlvbi1jcmVhdGVcIiAqbmdJZj1cImZvcm1PcHRpb25zXCI+XG4gICAgICAgICAgICA8ZW8tb2JqZWN0LWZvcm0gI2Zvcm0gW2Zvcm1PcHRpb25zXT1cImZvcm1PcHRpb25zXCIgKHN0YXR1c0NoYW5nZWQpPVwib25Gb3JtU3RhdHVzQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gIDwvc2VjdGlvbj5cblxuICA8bmctdGVtcGxhdGUgI3NwaW5uZXI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIj5cbiAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNtYWluU3Bpbm5lcj5cbiAgPGRpdiBjbGFzcz1cInByZXBhcmVEZXRhaWxzX19tYWluLXNwaW5uZXJcIj5cbiAgICA8ZW8tbG9hZGluZy1zcGlubmVyIHNpemU9XCJtZWRpdW1cIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjbm9JdGVtPlxuICA8ZW8tZXJyb3ItbWVzc2FnZSBbZW1wdHlTdGF0ZV09XCJ7aWNvbjogZW1wdHlTdGF0ZS5pY29uLCB0ZXh0OiBlbXB0eVN0YXRlLnRleHQsIGNsYXNzTmFtZTogZW1wdHlTdGF0ZS5jbGFzc05hbWV9XCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmVycm9yXCI+PC9uZy1jb250ZW50PlxuICA8L2VvLWVycm9yLW1lc3NhZ2U+XG48L25nLXRlbXBsYXRlPlxuXG48ZW8tZGlhbG9nIFt0aXRsZV09XCInZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgWyh2aXNpYmxlKV09XCJzaG93RGVsZXRlRGlhbG9nXCIgW2ZvY3VzT25TaG93XT1cImZhbHNlXCIgW21pbldpZHRoXT1cIjQwMFwiIFtzdHlsZUNsYXNzXT1cIidwcmVwYXJlLWRlbGV0ZV9fZGlhbG9nJ1wiPlxuXG48ZGl2Pnt7J2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLm1lc3NhZ2UnIHwgdHJhbnNsYXRlfX08L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgcHJlcGFyZS1kZWxldGUtLWFjdGlvbi1idXR0b25zIGZsZXgtcm93XCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNob3dEZWxldGVEaWFsb2cgPSBmYWxzZVwiXG4gICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cuY2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2NvbmZpcm1EZWxldGUgKGNsaWNrKT1cInJlbW92ZUl0ZW0ocHJlcGFyZWRJdGVtKVwiIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIlxuICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLm9rPC9idXR0b24+XG4gIDwvZGl2PlxuPC9lby1kaWFsb2c+XG5cbjxlby1kaWFsb2cgW3RpdGxlXT1cIidlby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmNvbnRlbnQuZGlhbG9nLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gIFsodmlzaWJsZSldPVwic2hvd0NvbnRlbnREZWxldGVEaWFsb2dcIiBbbWluV2lkdGhdPVwiNDAwXCIgW3N0eWxlQ2xhc3NdPVwiJ3ByZXBhcmUtZGVsZXRlX19kaWFsb2cnXCI+XG5cbjxkaXY+e3snZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5jb250ZW50LmRpYWxvZy5tZXNzYWdlJyB8IHRyYW5zbGF0ZTogKHtjb250ZW50UGF0aDogcHJlcGFyZWRJdGVtPy5jb250ZW50cyA/IHByZXBhcmVkSXRlbT8uY29udGVudHNbZGVsZXRlZENvbnRlbnRJbmRleF0/LnBhdGggOiAnJ30pfX08L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgcHJlcGFyZS1kZWxldGUtLWFjdGlvbi1idXR0b25zIGZsZXgtcm93XCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2VcIlxuICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLmNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNjb25maXJtQ29udGVudERlbGV0ZSAoY2xpY2spPVwicmVtb3ZlSXRlbUNvbnRlbnQocHJlcGFyZWRJdGVtLCBkZWxldGVkQ29udGVudEluZGV4KVwiIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIlxuICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLm9rPC9idXR0b24+XG4gIDwvZGl2PlxuPC9lby1kaWFsb2c+XG4iXX0=
546
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3ByZXBhcmUtZGV0YWlscy9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvcHJlcGFyZS1kZXRhaWxzL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFakgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sRUFFTCxZQUFZLEVBTVosS0FBSyxFQUdOLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQi9FLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUF3Qi9ELElBQ0ksWUFBWSxDQUFDLElBQWtCO1FBQ2pDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsYUFBYSxH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IHtDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgVmlld0NoaWxkLCBFbGVtZW50UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29sRGVmLCBHcmlkT3B0aW9uc30gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHtcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgUHJlcGFyZWRJdGVtLFxuICBQcmVwYXJlZEl0ZW1UZW1wbGF0ZSxcbiAgUHJlcGFyZWRJdGVtVHlwZSxcbiAgUHJlcGFyZVNlcnZpY2UsXG4gIFN5c3RlbVNlcnZpY2UsXG4gIE9iamVjdFR5cGUsXG4gIFV0aWxzLFxuICBMb2dnZXIsXG4gIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBCYWNrZW5kU2VydmljZSwgQ2FwYWJpbGl0aWVzU2VydmljZVxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50fSBmcm9tICcuLi9vYmplY3QtZm9ybS9mb3JtLXN0YXR1cy1jaGFuZ2VkLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQge09iamVjdEZvcm1Db21wb25lbnR9IGZyb20gJy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtL29iamVjdC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQge1NlbGVjdGlvbkNvbmZpZywgU2VsZWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7VW5zdWJzY3JpYmVPbkRlc3Ryb3l9IGZyb20gJy4uL3V0aWwvdW5zdWJzY3JpYmUvdW5zdWJzY3JpYmUuY29tcG9uZW50JztcbmltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi4vb2JqZWN0LWZvcm0vaW5kZXgnO1xuaW1wb3J0IHtQcmV2aWV3RmlsZX0gZnJvbSAnLi4vbWVkaWEvbWVkaWEuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBQcmVwYXJlUGhhc2Uge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBwcmV2aWV3SW5kZXg/OiBudW1iZXIsXG4gICAgcHJldmlld0ZpbGU/OiBQcmV2aWV3RmlsZSxcbiAgICBmaWxlPzogYm9vbGVhbixcbiAgICB3aXRob3V0RmlsZT86IGJvb2xlYW4sXG4gICAgdGVtcGxhdGVzPzogYW55W11cbiAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tcHJlcGFyZS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByZXBhcmVEZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgVW5zdWJzY3JpYmVPbkRlc3Ryb3kgaW1wbGVtZW50cyBPbkluaXQge1xuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XG5cbiAgLy8gSUQgc2V0IGJ5IHBlbmRpbmdDaGFuZ2VzIHNlcnZpY2Ugd2hlbiBlZGl0aW5nIGluZGV4ZGF0YVxuICAvLyBVc2VkIHRvIGZpbmlzaCB0aGUgcGVuZGluZyB0YXNrIHdoZW4gZWRpdGluZyBpcyBkb25lXG4gIHByaXZhdGUgcGVuZGluZ1Rhc2tJZDogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkVHlwZU9iamVjdDtcblxuICAvLyBoaWRkZW4gZmlsZSBpbnB1dCB0byB0cmlnZ2VyIGZpbGUgdXBsb2Fkc1xuICBAVmlld0NoaWxkKCdmaWxlJykgZmlsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZm9ybScpIG9iamVjdEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm1EZWxldGUnKSBjb25maXJtRGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb25maXJtQ29udGVudERlbGV0ZScpIGNvbmZpcm1Db250ZW50RGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIC8vIHByZXBhcmF0aW9uIGlzIGRpdmlkZWQgaW50byBzZXZlcmFsIHBoYXNlc1xuICAvLyBzZWxlY3QgYW4gb2JqZWN0IHR5cGVcbiAgUEhBU0VfVFlQRSA9ICd0eXBlJztcbiAgLy8gYWRkIGNvbnRlbnRcbiAgUEhBU0VfQ09OVEVOVCA9ICdjb250ZW50JztcbiAgLy8gc2V0IGluZGV4ZGF0YVxuICBQSEFTRV9JTkRFWERBVEEgPSAnaW5kZXhkYXRhJztcblxuICBfcHJlcGFyZWRJdGVtOiBQcmVwYXJlZEl0ZW07XG5cbiAgQElucHV0KCdwcmVwYXJlZEl0ZW0nKVxuICBzZXQgcHJlcGFyZWRJdGVtKGl0ZW06IFByZXBhcmVkSXRlbSkge1xuICAgIGNvbnN0IG9iamVjdFRvU3RyaW5naWZpZWRWYWx1ZUFycmF5ID0gKG9iaikgPT4gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMob2JqIHx8IHt9KS5zb3J0KCkubWFwKGtleSA9PiBvYmpba2V5XSkpO1xuICAgIGNvbnN0IGlzUHJvY2Vzc2luZ0FsbG93ZWQgPSBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheSh0aGlzLl9wcmVwYXJlZEl0ZW0pICE9PSBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheShpdGVtKTtcbiAgICB0aGlzLl9wcmVwYXJlZEl0ZW0gPSBpdGVtO1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbSAmJiB0aGlzLnByZXBhcmVkSXRlbS5pZCAmJiBpc1Byb2Nlc3NpbmdBbGxvd2VkKSB7XG4gICAgICB0aGlzLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcHJlcGFyZWRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9wcmVwYXJlZEl0ZW07XG4gIH1cblxuXG4gIEBJbnB1dCgpIGVtcHR5U3RhdGUgPSB7aWNvbjogJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXJyb3Iuc3ZnJywgdGV4dDogJycsIGNsYXNzTmFtZTogJ2RldGFpbHMtZXJyb3InfTtcblxuICBwcmVwYXJlUGhhc2U6IFByZXBhcmVQaGFzZTtcbiAgc2VsZWN0ZWRUZW1wbGF0ZTogUHJlcGFyZWRJdGVtVGVtcGxhdGU7XG4gIHNlbGVjdGVkVGVtcGxhdGVGaWxlOiBQcmV2aWV3RmlsZTtcbiAgZm9ybU9wdGlvbnM6IE9iamVjdEZvcm1PcHRpb25zO1xuICBmb3JtU3RhdGU6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQ7XG4gIGNob29zZVRlbXBsYXRlOiBib29sZWFuO1xuICB1cGxvYWRJblByb2dyZXNzOiBib29sZWFuO1xuICBjb21taXR0aW5nOiBib29sZWFuO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIHRhZ0ZpbHRlck9wdGlvbnM6IGFueTtcbiAgX3Nob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gIGRlbGV0ZWRDb250ZW50SW5kZXg6IG51bWJlcjtcblxuICAvLyB0aXRsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGRldGFpbHMgaGVhZGVyXG4gIGhlYWRlciA9IHtcbiAgICB0aXRsZTogbnVsbCxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgbGFiZWw6IG51bGwsXG4gICAgICBsaW5rOiBudWxsXG4gICAgfSxcbiAgICBzdWJ0aXRsZTogbnVsbFxuICB9O1xuXG4gIGNvbERlZnM6IENvbERlZltdID0gW3tcbiAgICBoZWFkZXJOYW1lOiAnJyxcbiAgICBmaWVsZDogJ3RpdGxlJyxcbiAgICBjZWxsUmVuZGVyZXI6IHRoaXMuY2VsbFJlbmRlcmVyLFxuICAgIGZpbHRlcjogZmFsc2VcbiAgfV07XG5cbiAgQElucHV0KCkgYXBwbHlTZWxlY3Rpb246IFNlbGVjdGlvbkNvbmZpZztcblxuICBAT3V0cHV0KCkgb25JdGVtQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcGFyZWRJdGVtPigpO1xuICBAT3V0cHV0KCkgb25Db21taXQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uSXRlbVJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcGFyZWRJdGVtPigpO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXR5cGUnKVxuICBnZXQgZGF0YVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZWRJdGVtICYmIHRoaXMucHJlcGFyZWRJdGVtLnNlbGVjdGVkdHlwZSA/IHRoaXMucHJlcGFyZWRJdGVtLnNlbGVjdGVkdHlwZS5uYW1lIDogJ25vbmUnO1xuICB9XG5cbiAgc2V0IHNob3dEZWxldGVEaWFsb2codmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0RlbGV0ZURpYWxvZyA9IHZhbDtcblxuICAgIGlmICh0aGlzLl9zaG93RGVsZXRlRGlhbG9nKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29uZmlybURlbGV0ZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93RGVsZXRlRGlhbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93RGVsZXRlRGlhbG9nO1xuICB9XG5cbiAgc2V0IHNob3dDb250ZW50RGVsZXRlRGlhbG9nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nID0gdmFsO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29uZmlybUNvbnRlbnREZWxldGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0NvbnRlbnREZWxldGVEaWFsb2coKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwcmVwYXJlU2VydmljZTogUHJlcGFyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FwYWJpbGl0ZXM6IENhcGFiaWxpdGllc1NlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY2VsbFJlbmRlcmVyKHBhcmFtcykge1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7cGFyYW1zLmRhdGEudGl0bGUgfHwgJyd9JHtwYXJhbXMuZGF0YS5jb250ZW50ID8gJzxzcGFuIGNsYXNzPVwidGl0bGVcIj4nICsgJyAoJyArIHBhcmFtcy5kYXRhLmNvbnRlbnQubWltZWdyb3VwICsgJyknICsgJzwvc3Bhbj4nIDogJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7cGFyYW1zLmRhdGEuZGVzY3JpcHRpb24gfHwgJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzXCI+XG4gICAgICAgICAgICAgICAgJHtwYXJhbXMuZGF0YS50YWdzLm1hcCh0YWcgPT4gYDxzcGFuIGNsYXNzPVwiY2hpcFwiPiR7dGFnfTwvc3Bhbj5gKS5qb2luKCcnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmb3JtIHN0YXR1cyBjaGFuZ2VzLFxuICAgIC8vIHBlbmRpbmcgdGFzayB3aWxsIG9ubHkgYmUgc3RhcnRlZCBvbmNlIHVudGlsIGl0IHdhcyBmaW5pc2hlZFxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWQgfHwgJyAnKSkge1xuICAgICAgdGhpcy5wZW5kaW5nVGFza0lkID0gdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFBlbmRpbmcoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcy5maW5pc2hUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCk7XG4gIH1cblxuICBwcmVwYXJlRm9ybUNvbnRlbnQoZm9ybURhdGE/KSB7XG4gICAgY29uc3QgZGF0YSA9IGZvcm1EYXRhIHx8IHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0LmRhdGE7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IHtcbiAgICAgIGZvcm1Nb2RlbDogdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QuZm9ybSxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQpIHtcbiAgICAgIHRoaXMuZm9ybU9wdGlvbnMuY29udGV4dCA9IHtcbiAgICAgICAgaWQ6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC5pZCxcbiAgICAgICAgdGl0bGU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50aXRsZSxcbiAgICAgICAgdHlwZU5hbWU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIGEgcHJlcGFyZWQgaXRlbS4gVGhpcyB3aWxsIGNhdXNlIHRoZSB0ZW1wb3JhcnkgcHJlcGFyZWQgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBhIHJlYWwgRE1TLU9iamVjdC5cbiAgICogQHBhcmFtIG9wZW5Mb2NhdGlvbkFmdGVyQ29tbWl0IC0gd2hlbiBzZXQgdG8gdHJ1ZSwgYXBwbGljYXRpb24gd2lsbCBuYXZpZ2F0ZSB0byB0aGUgb2JqZWN0cyBsb2NhdGlvblxuICAgKi9cbiAgY29tbWl0KG9wZW5Mb2NhdGlvbkFmdGVyQ29tbWl0PzogYm9vbGVhbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybVN0YXRlICYmICF0aGlzLmZvcm1TdGF0ZS5pbnZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5vYmplY3RGb3JtLmdldEZvcm1EYXRhKCk7XG4gICAgICAgIHRoaXMuY29tbWl0dGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgICAgICAuY29tbWl0UHJlcGFyZWRJdGVtKHRoaXMucHJlcGFyZWRJdGVtLmlkLCB0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKS5uYW1lLCBmb3JtRGF0YSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db21taXQuZW1pdChyZXMpO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgICAgICAgICBpZiAob3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvb2JqZWN0JywgcmVzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgVXRpbHMudGhyb3coZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3Qge2tleSwgY2F1c2UsIHVuaXF1ZWZpZWxkc30gPSBlcnJvci5lcnJvcjtcbiAgICAgICAgICAgIGlmIChrZXkgJiYga2V5ID09PSAnRE1TX01FVEFEQVRBX1VOSVFVRV9WSU9MQVRJT05fRVJST1InKSB7XG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVuaXF1ZS52YWxpZGF0aW9uLmVycm9yLmhpbnQnLCB7ZmllbGQ6IHVuaXF1ZWZpZWxkcy50b1N0cmluZygpfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXVzZSkge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBjYXVzZS5tZXNzYWdlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRm9ybUNvbnRlbnQoZm9ybURhdGEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IudGl0bGUnKSxcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY3JlYXRlZC5lcnJvci5tZXNzYWdlJylcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB0aGlzLm9uSXRlbVJlbW92ZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMuX3Nob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW1Db250ZW50KGl0ZW06IFByZXBhcmVkSXRlbSwgZGVsZXRlZENvbnRlbnRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZS5kZWxldGVQcmVwYXJlZEl0ZW1Db250ZW50KGl0ZW0uaWQsIGRlbGV0ZWRDb250ZW50SW5kZXgpXG4gICAgICAuc3Vic2NyaWJlKCh1cGRhdGVkSXRlbTogUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZEl0ZW07XG4gICAgICAgIHRoaXMuc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0RmlsZU5hbWVzKGl0ZW06IFByZXBhcmVkSXRlbSkge1xuICAgIHJldHVybiAoaXRlbS5jb250ZW50cyB8fCBbXSkubWFwKGMgPT4gYy5wYXRoKS5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHRhcmdldCBvYmplY3QgdHlwZSBmb3IgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICogQHBhcmFtIHR5cGUgLSB0aGUgb2JqZWN0IHR5cGVzIG5hbWUgdG8gYmUgc2V0IGFzIHRhcmdldFxuICAgKi9cbiAgc2VsZWN0T2JqZWN0VHlwZSh0eXBlOiBQcmVwYXJlZEl0ZW1UeXBlKSB7XG4gICAgdGhpcy5wcmVwYXJlZEl0ZW0udHlwZXNcbiAgICAgIC5mb3JFYWNoKCh0KSA9PiB0LnNlbGVjdGVkID0gKHQubmFtZSA9PT0gdHlwZS5uYW1lKSk7XG5cbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2hpbGRUeXBlKHR5cGUubmFtZSwgdGhpcy5wcmVwYXJlZEl0ZW0uaWQpXG4gICAgICAuc3Vic2NyaWJlKHVwZGF0ZWRQcmVwYXJlZEl0ZW0gPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRQcmVwYXJlZEl0ZW07XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHVwZGF0ZWRQcmVwYXJlZEl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGVtcGxhdGUgdG8gdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICogQHBhcmFtIHRlbXBsYXRlIC0gdGhlIHRlbXBsYXRlIHRvIGJlIGFkZGVkXG4gICAqL1xuICBhZGRUZW1wbGF0ZSh0ZW1wbGF0ZTogUHJlcGFyZWRJdGVtVGVtcGxhdGUpIHtcblxuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC5hZGRUZW1wbGF0ZSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgdGVtcGxhdGUuaWQpXG4gICAgICAuc3Vic2NyaWJlKCh1cGRhdGVkUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZFByZXBhcmVkSXRlbTtcbiAgICAgICAgdGhpcy5vbkl0ZW1DaGFuZ2VkLmVtaXQodXBkYXRlZFByZXBhcmVkSXRlbSk7XG4gICAgICB9LCBVdGlscy50aHJvdyhudWxsLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLnRlbXBsYXRlLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUudGVtcGxhdGUuZXJyb3IubWVzc2FnZScpKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGEgdGVtcGxhdGUuIFdpbGwgc2hvdyBwcmV2aWV3IGZvciB0aGUgc2VsZWN0ZWQgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHRoZSB0ZW1wbGF0ZSB0byBiZSBzZWxlY3RlZFxuICAgKi9cbiAgc2VsZWN0VGVtcGxhdGUodGVtcGxhdGU6IFByZXBhcmVkSXRlbVRlbXBsYXRlKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlRmlsZSA9ICEodGVtcGxhdGUgJiYgdGVtcGxhdGUuY29udGVudCkgPyBudWxsIDoge1xuICAgICAgdXJpOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFRlbXBsYXRlUHJldmlld1VyaSh0aGlzLnNlbGVjdGVkVGVtcGxhdGUuaWQpLFxuICAgICAgdXJpUGRmOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFRlbXBsYXRlUHJldmlld1VyaSh0aGlzLnNlbGVjdGVkVGVtcGxhdGUuaWQsICdQREYnKSxcbiAgICAgIG1pbWV0eXBlOiB0ZW1wbGF0ZS5jb250ZW50Lm1pbWV0eXBlLFxuICAgICAgbWltZWdyb3VwOiB0ZW1wbGF0ZS5jb250ZW50Lm1pbWVncm91cCxcbiAgICAgIHNpemU6IHRlbXBsYXRlLmNvbnRlbnQuc2l6ZVxuICAgIH07XG4gIH1cblxuICBzZXRQcmV2aWV3VXJpKGluZGV4OiBudW1iZXIpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucHJlcGFyZVBoYXNlLmRhdGEsIHRoaXMuZ2V0UHJldmlld0RhdGEoaW5kZXgpKTtcbiAgfVxuXG4gIC8vIHNraXAgY29udGVudCBzZWxlY3Rpb24gZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW1cbiAgLy8gYW5kIGNvbnRpbnVlIHNldHRpbmcgaW5kZXhkYXRhXG4gIG5vRmlsZSgpIHtcbiAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICB9XG5cbiAgLy8gdHJpZ2dlciBmaWxlIHVwbG9hZFxuICB1cGxvYWQoKSB7XG4gICAgLy8gYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0ZWQgYSBmaWxlIGZpbGVDaGFuZ2VMaXN0ZW5lcigpIHdpbGwgY29udGludWVcbiAgICB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgLy8gb25DaGFuZ2UgbGlzdGVuZXIgb24gaGlkZGVuIGZpbGUgaW5wdXRcbiAgZmlsZUNoYW5nZUxpc3RlbmVyKGV2ZW50KSB7XG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50WzBdO1xuICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLnVwbG9hZENvbnRlbnQodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIGZpbGUpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIC8vIHVwbG9hZCBzdWNjZWVkZWQgc28gd2UgY2FuIGdvIG9uIHRvIHRoZSBuZXh0IHByZXBhcmUgcGhhc2VcbiAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSBuZXcgUHJlcGFyZWRJdGVtKHJlcyk7XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHRoaXMucHJlcGFyZWRJdGVtKTtcbiAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB9LCBVdGlscy50aHJvdyhlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5jYXVzZSkge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIGVycm9yLmVycm9yLmNhdXNlLm1lc3NhZ2VzWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5lcnJvcikge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY3JlYXRlZC5lcnJvci50aXRsZScpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IudGl0bGUnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8udXBsb2FkLmdsb2JhbC5lcnJvci5kZXNjcmlwdGlvbicpXG4gICAgICApKTtcbiAgfVxuXG4gIG9uRm9ybVN0YXR1c0NoYW5nZWQoZXZ0KSB7XG4gICAgdGhpcy5mb3JtU3RhdGUgPSBldnQ7XG5cbiAgICBpZiAodGhpcy5mb3JtU3RhdGUuZGlydHkpIHtcbiAgICAgIHRoaXMuc3RhcnRQZW5kaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2VzcygpIHtcbiAgICAvLyB0b2RvOiByZXNldCBzdHVmZlxuICAgIHRoaXMuZm9ybVN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmZvcm1PcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLmdldFByZXBhcmVQaGFzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcHJlcGFyZSBwaGFzZSB0byBiZSBpbml0aWFsaXplZCBiYXNlZCBvbiB0aGUgY29uZGl0aW9uc1xuICAgKiBvZiB0aGUgY3VycmVudCBwcmVwYXJlZCBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQcmVwYXJlUGhhc2UoKSB7XG4gICAgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKSkge1xuICAgICAgLy8gU3RlcCAjMSBzZWxlY3QgYW4gb2JqZWN0IHR5cGUgaWYgbm90IHlldCBzZXRcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLmhhc0NvbnRlbnQoKSkge1xuICAgICAgLy8gU3RlcCAjMiBhZGQgY29udGVudCBpZiBub3QgeWV0IGNvbnRhaW5lZFxuICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfQ09OVEVOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgIzMgZWRpdCBpbmRleGRhdGEgYW5kIHNhdmVcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUZW1wbGF0ZShzZWxlY3RlZFR5cGVPYmplY3QpIHtcbiAgICBjb25zdCB0eXBlOiBPYmplY3RUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoc2VsZWN0ZWRUeXBlT2JqZWN0Lm5hbWUpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLmdldFRlbXBsYXRlcyhzZWxlY3RlZFR5cGVPYmplY3QubmFtZSlcbiAgICAgIC5zdWJzY3JpYmUoKHRlbXBsYXRlczogUHJlcGFyZWRJdGVtVGVtcGxhdGVbXSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUmVxdWlyZWQgPSB0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS5jb250ZW50c3RhdGUgPT09ICdSRVFVSVJFRCc7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgZmlsZTogdHlwZS5tYXhGaWxlcyA+IDAsXG4gICAgICAgICAgd2l0aG91dEZpbGU6ICEodHlwZS5taW5GaWxlcyA+IDApICYmICFmaWxlUmVxdWlyZWQsXG4gICAgICAgICAgdGVtcGxhdGVzOiB0ZW1wbGF0ZXMgfHwgW11cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBvYmplY3QgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgdXBsb2FkIG9yIHRlbXBsYXRlIGNvbnRlbnRzXG4gICAgICAgIC8vIHdlIHNraXAgY29udGVudCBwaGFzZSBhbmQgbW92ZSBvbiB0byBpbmRleGRhdGEgcGhhc2VcbiAgICAgICAgaWYgKCFkYXRhLmZpbGUpIHtcbiAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJlcGFyZVBoYXNlID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5QSEFTRV9DT05URU5ULFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zZXR1cFRpdGxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWdGaWx0ZXJPcHRpb25zID0gdGhpcy5jcmVhdGVUYWdGaWx0ZXJPcHRpb25zKHRlbXBsYXRlcyk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSB7XG4gICAgICAgICAgY29udGV4dDoge2NvdW50OiB0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5sZW5ndGh9LFxuICAgICAgICAgIHJvd0RhdGE6IHRoaXMucHJlcGFyZVBoYXNlLmRhdGEudGVtcGxhdGVzLnNvcnQoVXRpbHMuc29ydFZhbHVlcygndGl0bGUnKSksXG4gICAgICAgICAgY29sdW1uRGVmczogdGhpcy5jb2xEZWZzLFxuICAgICAgICAgIHJvd0hlaWdodDogODBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVRhZ0ZpbHRlck9wdGlvbnModGVtcGxhdGVzOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZVtdKSB7XG4gICAgbGV0IHRhZ0ZpbHRlck9wdGlvbnMgPSBbXTtcbiAgICB0ZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XG4gICAgICB0ZW1wbGF0ZS50YWdzLmZvckVhY2godGFnID0+IHtcbiAgICAgICAgdGFnRmlsdGVyT3B0aW9ucy5wdXNoKHtsYWJlbDogdGFnLCBmaWx0ZXI6IChub2RlKSA9PiBub2RlLmRhdGEudGFncy5pbmNsdWRlcyh0YWcpLCB2YWx1ZTogdHJ1ZX0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFV0aWxzLnVuaXFCeSh0YWdGaWx0ZXJPcHRpb25zLCAnbGFiZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgc3BlY2lmaWMgcHJlcGFyZSBwaGFzZS5cbiAgICogQHBhcmFtIHBoYXNlIC0gcGhhc2UgdG8gaW5pdCAoUEhBU0VfVFlQRSwgUEhBU0VfQ09OVEVOVCwgUEhBU0VfSU5ERVhEQVRBKVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UHJlcGFyZVBoYXNlKHBoYXNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByZXBhcmVQaGFzZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QgPSB0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKTtcblxuICAgIHN3aXRjaCAocGhhc2UpIHtcbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3Igc2VsZWN0aW5nIHRoZSB0YXJnZXQgb2JqZWN0IHR5cGVcbiAgICAgIGNhc2UgdGhpcy5QSEFTRV9UWVBFOiB7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGhhc2UgPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy5QSEFTRV9UWVBFLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0UHJldmlld0RhdGEoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldHVwVGl0bGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3Igc2V0dGluZyB1cCBjb250ZW50XG4gICAgICBjYXNlIHRoaXMuUEhBU0VfQ09OVEVOVDoge1xuXG4gICAgICAgIHRoaXMuY2hvb3NlVGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gbnVsbDtcblxuICAgICAgICAvLyBjaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgcHJlcGFyZWRJdGVtIGFscmVhZHkgY29udGFpbnMgYSBmaWxlIG9yIHRlbXBsYXRlXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5oYXNDb250ZW50KCkpIHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLnN0YXRlLnR5cGVzZWxlY3RlZGFsbG93ZWQpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3RlZCB0eXBlIGlzIG5vdCBhbGxvd2VkLCB3ZSdsbCBnbyBiYWNrIHRvIHRoZSB0eXBlIHNlbGVjdCBzdGF0ZSAuLi5cbiAgICAgICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAuLi4gb3RoZXJ3aXNlIHdlIGdvIG9uIHNldHRpbmcgaW5kZXhkYXRhXG4gICAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS5jb250ZW50c3RhdGUgPT09ICdOT0NPTlRFTlRBTExPV0VEJykge1xuICAgICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW1wbGF0ZSh0aGlzLnNlbGVjdGVkVHlwZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gaW5pdCBwcmVwYXJlIHBoYXNlIGZvciBhZGRpbmcgaW5kZXhkYXRhXG4gICAgICBjYXNlIHRoaXMuUEhBU0VfSU5ERVhEQVRBOiB7XG5cbiAgICAgICAgdGhpcy5jaG9vc2VUZW1wbGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCkge1xuICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3RlZCB0eXBlIGlzIG5vdCBhbGxvd2VkLCB3ZSdsbCBnbyBiYWNrIHRvIHRoZSB0eXBlIHNlbGVjdCBzdGF0ZSAuLi5cbiAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIHRoaXMucHJlcGFyZUZvcm1Db250ZW50KCk7XG5cbiAgICAgICAgICB0aGlzLnByZXBhcmVQaGFzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfSU5ERVhEQVRBLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5nZXRQcmV2aWV3RGF0YSgpXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnNldHVwVGl0bGUoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFByZXZpZXdEYXRhKGluZGV4PzogbnVtYmVyKTogYW55IHtcbiAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0gJiYgdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHMgJiYgdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHMubGVuZ3RoKSB7XG4gICAgICBpbmRleCA9IGluZGV4IHx8IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2aWV3SW5kZXg6IGluZGV4LFxuICAgICAgICBwcmV2aWV3RmlsZToge1xuICAgICAgICAgIHVyaTogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmV2aWV3VXJpKHRoaXMucHJlcGFyZWRJdGVtLmlkLCBpbmRleCksXG4gICAgICAgICAgdXJpUGRmOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXZpZXdVcmkodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIGluZGV4LCAnUERGJyksXG4gICAgICAgICAgbWltZXR5cGU6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5taW1ldHlwZSxcbiAgICAgICAgICBtaW1lZ3JvdXA6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5taW1lZ3JvdXAsXG4gICAgICAgICAgcGF0aDogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLnBhdGgsXG4gICAgICAgICAgc2l6ZTogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLnNpemVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge3ByZXZpZXdGaWxlOiBudWxsfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCB0aXRsZSBmb3IgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbSBiYXNlZCBvbiB0aGVcbiAgICogY3VycmVudCBwcmVwYXJlIHBoYXNlLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIHByZXBhcmUgcGhhc2UgaXMgaWRlbnRpZmllZC5cbiAgICovXG4gIHByaXZhdGUgc2V0dXBUaXRsZSgpIHtcblxuICAgIHRoaXMudHJhbnNsYXRlLmdldChbXG4gICAgICAnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5zeXNyb290JyxcbiAgICAgICdlby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnByZWZpeCcsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUudGl0bGUnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnN1YnRpdGxlJyxcbiAgICAgICdlby5wcmVwYXJlLmRldGFpbHMuY29udGVudC5zdWJ0aXRsZScsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLmluZGV4ZGF0YS5zdWJ0aXRsZSdcbiAgICBdKS5zdWJzY3JpYmUodCA9PiB7XG5cbiAgICAgIGxldCBoZWFkZXIgPSB7XG4gICAgICAgIHRpdGxlOiBudWxsLFxuICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgICAgIGxpbms6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgc3VidGl0bGU6IG51bGxcbiAgICAgIH07XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlcGFyZVBoYXNlLm5hbWUpIHtcbiAgICAgICAgY2FzZSB0aGlzLlBIQVNFX1RZUEU6IHtcbiAgICAgICAgICBoZWFkZXIudGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMudHlwZS50aXRsZSddO1xuICAgICAgICAgIGhlYWRlci5zdWJ0aXRsZSA9IHRbJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnN1YnRpdGxlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB0aGlzLlBIQVNFX0NPTlRFTlQ6IHtcbiAgICAgICAgICBjb25zdCB0eXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdHlwZU9iamVjdCA/IHR5cGVPYmplY3QubGFiZWwgOiAnJztcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMuY29udGVudC5zdWJ0aXRsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdGhpcy5QSEFTRV9JTkRFWERBVEE6IHtcbiAgICAgICAgICBjb25zdCB0eXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdHlwZU9iamVjdCA/IHR5cGVPYmplY3QubGFiZWwgOiAnJztcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMuaW5kZXhkYXRhLnN1YnRpdGxlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHVwIGxvY2F0aW9uIGluZm9cbiAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudHlwZSA9PT0gJ3N5c3Jvb3QnKSB7XG4gICAgICAgIGhlYWRlci5sb2NhdGlvbiA9IHtcbiAgICAgICAgICBsYWJlbDogdFsnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5zeXNyb290J10sXG4gICAgICAgICAgbGluazogbnVsbFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlKTtcbiAgICAgICAgaGVhZGVyLmxvY2F0aW9uID0ge1xuICAgICAgICAgIGxhYmVsOiBgICR7cGFyZW50VHlwZS5sYWJlbH06ICR7dGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnRpdGxlfWAsXG4gICAgICAgICAgbGluazogYC9vYmplY3QvJHt0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQuaWR9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXIgPSBoZWFkZXI7XG4gICAgfSk7XG4gIH1cblxuICBzaG93VGVtcGxhdGVTZWxlY3RvcihzaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5jaG9vc2VUZW1wbGF0ZSA9IHNob3c7XG4gICAgdGhpcy5zZWxlY3RUZW1wbGF0ZSh0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlc1swXSk7XG4gIH1cblxuICBkb3dubG9hZCgpIHtcbiAgICBpZiAodGhpcy5wcmVwYXJlUGhhc2UpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLnByZXBhcmVQaGFzZS5uYW1lID09PSAnY29udGVudCcgPyB0aGlzLnNlbGVjdGVkVGVtcGxhdGVGaWxlIDogdGhpcy5wcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZTtcbiAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHRoaXMuYmFja2VuZC5kb3dubG9hZChmaWxlLnVyaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzVGVtcGxhdGVDYXBhYmlsaXR5KCkge1xuICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdGVzLmhhc0NhcGFiaWxpdHkoJ3RlbXBsYXRlJyk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUlkRm4oaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SW5kZXhGbihpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmFwcGx5U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgLmZpbmQodGhpcy5hcHBseVNlbGVjdGlvbi5pbikuZm9jdXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBQcmVwYXJlZEl0ZW0pID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy50eXBlcykge1xuICAgICAgICAgICAgcmVzLnR5cGVzID0gcmVzLnR5cGVzLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInByZXBhcmVEZXRhaWxzX193cmFwcGVyXCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBtYWluU3Bpbm5lclwiPlxuICA8c2VjdGlvbiBjbGFzcz1cInByZXBhcmVEZXRhaWxzXCIgKm5nSWY9XCJwcmVwYXJlZEl0ZW0gJiYgcHJlcGFyZVBoYXNlOyBlbHNlIG5vSXRlbVwiXG4gICAgW25nQ2xhc3NdPVwie211bHRpZmlsZTogcHJlcGFyZWRJdGVtLmNvbnRlbnRjb3VudCA+IDEsIGNvbW1pdHRpbmc6IGNvbW1pdHRpbmd9XCI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWhlYWRcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1pbmZvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj57e2hlYWRlci50aXRsZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtbG9jYXRpb25cIiAqbmdJZj1cIiFoZWFkZXIubG9jYXRpb24ubGluazsgZWxzZSBsaW5rZWRcIj57e2hlYWRlci5sb2NhdGlvbi5sYWJlbH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXN1Yi10aXRsZSBoLXN1YnRpdGxlXCI+e3toZWFkZXIuc3VidGl0bGV9fTwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGlua2VkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtc3VidGl0bGUtZGV0YWlsZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnByZWZpeDwvc3Bhbj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cImhlYWRlci5sb2NhdGlvbi5saW5rXCI+e3toZWFkZXIubG9jYXRpb24ubGFiZWx9fTwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZG93bmxvYWRcIlxuICAgICAgICAgICpuZ0lmPVwicHJlcGFyZVBoYXNlLm5hbWUgPT09ICdjb250ZW50JyA/IHNlbGVjdGVkVGVtcGxhdGVGaWxlIDogcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGVcIlxuICAgICAgICAgIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NvbnRlbnQtZG93bmxvYWQuc3ZnJ1wiXG4gICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLmFjdGlvbi5kb3dubG9hZC5kbXMub2JqZWN0LmNvbnRlbnQubGFiZWwnIHwgdHJhbnNsYXRlKVwiIChjbGljayk9XCJkb3dubG9hZCgpXCI+PC9lby1pY29uPlxuICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdHJhc2guc3ZnJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVEaWFsb2cgPSB0cnVlO1wiPjwvZW8taWNvbj5cbiAgICAgICAgPCEtLSBidXR0b25zIHdoaWxlIGNob29zaW5nIGEgdGVtcGxhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaG9vc2VUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tdHBsLWFib3J0XCIgKGNsaWNrKT1cInNob3dUZW1wbGF0ZVNlbGVjdG9yKGZhbHNlKVwiXG4gICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS50ZW1wbGF0ZS5hYm9ydDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi10cGwtYXBwbHlcIiAoY2xpY2spPVwiYWRkVGVtcGxhdGUoc2VsZWN0ZWRUZW1wbGF0ZSlcIiBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkVGVtcGxhdGVcIlxuICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUudGVtcGxhdGUuc2VsZWN0PC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVwYXJlUGhhc2UubmFtZSA9PT0gJ2luZGV4ZGF0YSdcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb21taXQoKVwiIGNsYXNzPVwiYnRuLWlkeC1zYXZlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntwcmltYXJ5OiBwcmVwYXJlZEl0ZW0uc3RhdGUucGFyZW50aXNyb290ICYmIHByZXBhcmVkSXRlbS5jb250ZW50Y291bnQgPiAxfVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybVN0YXRlPy5pbnZhbGlkIHx8IGNvbW1pdHRpbmdcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5zYXZlPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb21taXQodHJ1ZSlcIiBbZGlzYWJsZWRdPVwiZm9ybVN0YXRlPy5pbnZhbGlkIHx8IGNvbW1pdHRpbmdcIiBjbGFzcz1cInByaW1hcnkgYnRuLWlkeC1zYXZlb3BlblwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cInByZXBhcmVkSXRlbT8uc3RhdGUucGFyZW50aXNyb290ICYmIHByZXBhcmVkSXRlbT8uY29udGVudGNvdW50ID4gMVwiXG4gICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5zYXZlb3BlbjwvYnV0dG9uPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5XCIgW25nU3dpdGNoXT1cInByZXBhcmVQaGFzZS5uYW1lXCIgKm5nSWY9XCIhY29tbWl0dGluZzsgZWxzZSBzcGlubmVyXCI+XG5cbiAgICAgIDwhLS0gUEhBU0UgVFlQRSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaGFzZSB0eXBlXCIgKm5nU3dpdGNoQ2FzZT1cIid0eXBlJ1wiPlxuXG4gICAgICAgIDwhLS0gd2l0aCBwcmV2aWV3IC0tPlxuICAgICAgICA8ZW8tc3BsaXQgW2d1dHRlclNpemVdPVwiMTZcIiBbZ3V0dGVyQ29sb3JdPVwiJyNmZmYnXCIgW3Zpc2libGVUcmFuc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGU7IGVsc2Ugbm9wcmV2aWV3XCIgW2NhY2hlTGF5b3V0XT1cIidwcmVwYXJlLmRldGFpbHMucGhhc2UudHlwZSdcIj5cbiAgICAgICAgICA8ZW8tc3BsaXQtYXJlYSBbc2l6ZV09XCIzMFwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0IGVtcHR5XCIgKm5nSWY9XCJwcmVwYXJlZEl0ZW0udHlwZXMubGVuZ3RoID09IDBcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUuZW1wdHk8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlLXNlbGVjdCBlbXB0eVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJlcGFyZWRJdGVtLnN0YXRlLnR5cGVzZWxlY3RlZGFsbG93ZWQgJiYgcHJlcGFyZWRJdGVtLnN0YXRlLnR5cGVzZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7dHlwZTogcHJlcGFyZWRJdGVtLnNlbGVjdGVkdHlwZS5sYWJlbCwgZmlsZW5hbWU6IGdldEZpbGVOYW1lcyhwcmVwYXJlZEl0ZW0pfVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy50eXBlLm5vdGFsbG93ZWQ8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcHJlcGFyZWRJdGVtLnR5cGVzOyB0cmFja0J5OiB0cmFja0J5SWRGblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGUtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvbklkXT1cInR5cGUuaWNvbi5pZFwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0eXBlLmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnRzLnRpdGxlPC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBwcmVwYXJlZEl0ZW0uY29udGVudHM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleEZuOyBpbmRleCBhcyBpZHg7XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0luZGV4ID09IGlkeH1cIiAoY2xpY2spPVwic2V0UHJldmlld1VyaShpZHgpXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e2NvbnRlbnQucGF0aH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidG4gYnRuLWRlbGV0ZS1jb250ZW50XCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdHJhc2guc3ZnJ1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSB0cnVlOyBkZWxldGVkQ29udGVudEluZGV4ID0gaWR4O1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb250ZW50LmV4aXN0c2NvdW50ID4gMFwiIGNsYXNzPVwiYXR0ZW50aW9uXCIgdGl0bGU9XCJ7eydlby5wcmVwYXJlLmNvbnRlbnQuZXhpc3RzY291bnQubWVzc2FnZSd8dHJhbnNsYXRlOiAoe2NvdW50OiBjb250ZW50LmV4aXN0c2NvdW50fSl9fVwiPiE8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2VvLXNwbGl0LWFyZWE+XG4gICAgICAgICAgPGVvLXNwbGl0LWFyZWEgW3NpemVdPVwiNzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1tZWRpYS13cmFwXCI+XG4gICAgICAgICAgICAgIDxlby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8gW2NvbnRlbnRdPVwicHJlcGFyZWRJdGVtLmNvbnRlbnRzW3ByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdJbmRleF1cIj5cbiAgICAgICAgICAgICAgPC9lby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8+XG4gICAgICAgICAgICAgIDxlby1tZWRpYSBbcHJldmlld0ZpbGVdPVwicHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGVcIj48L2VvLW1lZGlhPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9lby1zcGxpdC1hcmVhPlxuICAgICAgICA8L2VvLXNwbGl0PlxuXG4gICAgICAgIDwhLS0gd2l0aG91dCBwcmV2aWV3IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcHJldmlldz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0eXBlLmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUEhBU0UgQ09OVEVOVCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaGFzZSBjb250ZW50XCIgKm5nU3dpdGNoQ2FzZT1cIidjb250ZW50J1wiPlxuXG4gICAgICAgIDwhLS0gcGFuZWwgZm9yIHNlbGVjdGluZyBhIHRlbXBsYXRlIHRvIGJlIHVzZWQgYXMgaXRlbXMgY29udGVudCAtLT5cbiAgICAgICAgPGVvLXNwbGl0IFtndXR0ZXJTaXplXT1cIjE2XCIgW2d1dHRlckNvbG9yXT1cIicjZmZmJ1wiIFt2aXNpYmxlVHJhbnNpdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAqbmdJZj1cImNob29zZVRlbXBsYXRlOyBlbHNlIGF0dGFjaFwiIFtjYWNoZUxheW91dF09XCIncHJlcGFyZS5kZXRhaWxzLnBoYXNlLmNvbnRlbnQnXCI+XG4gICAgICAgICAgPGVvLXNwbGl0LWFyZWEgW3NpemVdPVwiNDBcIj5cblxuICAgICAgICAgICAgPCEtLSBsaXN0IG9mIGF2YWlsYWJsZSB0ZW1wbGF0ZXMgLS0+XG4gICAgICAgICAgICA8ZW8tbGlzdC1jb250YWluZXIgI2VvTGlzdCBbbG9hZGluZ109XCJmYWxzZVwiIGNsYXNzPVwidGVtcGxhdGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImVvLWhlYWRlci1pY29uXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdGVtcGxhdGUuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItdGl0bGVcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS50ZW1wbGF0ZS5saXN0LnRpdGxlPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlci1hY3Rpb25zXCI+XG5cbiAgICAgICAgICAgICAgICAgIDxlby1vdmVybGF5ICNvRmlsdGVyIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2ZpbHRlci5zdmcnXCIgW2ljb25DbGFzc109XCIncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm92ZXJsYXktZmlsdGVyXCIgW3RpdGxlXT1cIidlby5saXN0LmZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoYWN0aXZlKT1cIm9GaWx0ZXIub25BY3RpdmVDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGVvLWN1c3RvbS1maWx0ZXIgI2NGaWx0ZXIgKGNoYW5nZSk9XCJjRmlsdGVyLnVwZGF0ZUdyaWQoZW9MaXN0LmVvR3JpZFN1YmplY3QsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChhY3RpdmUpPVwib0ZpbHRlci5vbkFjdGl2ZUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxlby10ZXh0LWZpbHRlciBbdGl0bGVdPVwiJ2VvLnByZXBhcmUudGVtcGxhdGUuZmlsdGVyLnRleHQudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRjaEZpZWxkc109XCJbJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJywgJ3RhZ3MnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2VvLnByZXBhcmUudGVtcGxhdGUuZmlsdGVyLnRleHQudGl0bGUnXCI+PC9lby10ZXh0LWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8tc2V0LWZpbHRlciBbb3BlcmF0b3JdPVwiJ09SJ1wiIFt0aXRsZV09XCInZW8ucHJlcGFyZS50ZW1wbGF0ZS5maWx0ZXIuc2V0LnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhZ0ZpbHRlck9wdGlvbnM/Lmxlbmd0aFwiIFtvcHRpb25zXT1cInRhZ0ZpbHRlck9wdGlvbnNcIj48L2VvLXNldC1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZW8tY3VzdG9tLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgIDwvZW8tb3ZlcmxheT5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZW8tZ3JpZCAjZW9HcmlkICpuZ0lmPVwiZ3JpZE9wdGlvbnM/LnJvd0RhdGFcIiBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnNcIiBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFtzaG93Rm9vdGVyXT1cImZhbHNlXCIgW3NlbGVjdGlvbkxpbWl0XT1cIjFcIlxuICAgICAgICAgICAgICAgICAgKGVvR3JpZFNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0VGVtcGxhdGUoJGV2ZW50WzBdKVwiPlxuICAgICAgICAgICAgICAgIDwvZW8tZ3JpZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2VvLWxpc3QtY29udGFpbmVyPlxuXG4gICAgICAgICAgPC9lby1zcGxpdC1hcmVhPlxuICAgICAgICAgIDxlby1zcGxpdC1hcmVhIFtzaXplXT1cIjYwXCI+XG5cbiAgICAgICAgICAgIDwhLS0gcHJldmlldyBvZiBzZWxlY3RlZCB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgIDxlby1tZWRpYSBbcHJldmlld0ZpbGVdPVwic2VsZWN0ZWRUZW1wbGF0ZUZpbGVcIj48L2VvLW1lZGlhPlxuXG4gICAgICAgICAgPC9lby1zcGxpdC1hcmVhPlxuICAgICAgICA8L2VvLXNwbGl0PlxuXG4gICAgICAgIDwhLS0gYWRkIGNvbnRlbnQgZ2VuZXJhbCBvdmVydmlldyAodXBsb2FkLCB0ZW1wbGF0ZSwgbm9uZSkgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjYXR0YWNoPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIiAqbmdJZj1cIiF1cGxvYWRJblByb2dyZXNzXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC5pbmZvPC9kaXY+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGUgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlTGlzdGVuZXIoJGV2ZW50LnRhcmdldC5maWxlcylcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50c1wiICpuZ0lmPVwiIXVwbG9hZEluUHJvZ3Jlc3M7IGVsc2UgdXBsb2Fkc3Bpbm5lclwiPlxuXG4gICAgICAgICAgICA8IS0tIHVwbG9hZCBhIGZpbGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudCBhdHQtZmlsZVwiICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEuZmlsZVwiIChjbGljayk9XCJ1cGxvYWQoKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZmlsZV91cGxvYWQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnVwbG9hZC50aXRsZTwvaDM+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudXBsb2FkLmRlc2M8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBzZWxlY3QgYSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50IGF0dC10bXBsXCIgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS50ZW1wbGF0ZXMubGVuZ3RoID4gMCAmJiBoYXNUZW1wbGF0ZUNhcGFiaWxpdHkoKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGVtcGxhdGVTZWxlY3Rvcih0cnVlKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfcHJlcGFyZV9hZGQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnRlbXBsYXRlLnRpdGxlPC9oMz5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC50ZW1wbGF0ZS5kZXNjPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gbm8gZmlsZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50IGF0dC1ub25lXCIgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS53aXRob3V0RmlsZVwiIChjbGljayk9XCJub0ZpbGUoKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfbm8tZmlsZS5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQubm9maWxlLnRpdGxlPC9oMz5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC5ub2ZpbGUuZGVzYzwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIHVwbG9hZCBwcm9ncmVzcyBpbmRpY2F0b3IgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBsb2Fkc3Bpbm5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWluZGljYXRvclwiPlxuICAgICAgICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBbc2l6ZV09XCInbGFyZ2UnXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQSEFTRSBJTkRFWERBVEEgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicGhhc2UgaW5kZXhkYXRhXCIgKm5nU3dpdGNoQ2FzZT1cIidpbmRleGRhdGEnXCI+XG5cbiAgICAgICAgPCEtLSBmb3JtIGFuZCBwcmV2aWV3IC0tPlxuICAgICAgICA8ZW8tc3BsaXQgW2d1dHRlclNpemVdPVwiMTZcIiBbZ3V0dGVyQ29sb3JdPVwiJyNmZmYnXCIgW3Zpc2libGVUcmFuc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGU7IGVsc2UganVzdGZvcm1cIiBbY2FjaGVMYXlvdXRdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS5pbmRleGRhdGEnXCI+XG4gICAgICAgICAgPGVvLXNwbGl0LWFyZWEgW3NpemVdPVwiNTBcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmlsZXNcIj5cblxuICAgICAgICAgICAgICA8IS0tIGluZGV4ZGF0YSBmb3JtIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwianVzdGZvcm1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIGxpc3Qgb2YgY29udGVudHMgKGluIGNhc2Ugb2YgYnVsayB1cGxvYWQpIHRoYXQgY2FuIGJlIHByZXZpZXdlZCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtc2VsZWN0XCI+XG5cbiAgICAgICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5jb250ZW50cy50aXRsZTwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbnRlbnQgb2YgcHJlcGFyZWRJdGVtLmNvbnRlbnRzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhGbjsgaW5kZXggYXMgaWR4XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0luZGV4ID09PSBpZHh9XCIgKGNsaWNrKT1cInNldFByZXZpZXdVcmkoaWR4KVwiPlxuICAgICAgICAgICAgICAgICAge3tjb250ZW50LnBhdGh9fSA8c3BhbiAqbmdJZj1cImNvbnRlbnQuZXhpc3RzY291bnQgPiAwXCIgY2xhc3M9XCJhdHRlbnRpb25cIiB0aXRsZT1cInt7J2VvLnByZXBhcmUuY29udGVudC5leGlzdHNjb3VudC5tZXNzYWdlJ3x0cmFuc2xhdGU6ICh7Y291bnQ6IGNvbnRlbnQuZXhpc3RzY291bnR9KX19XCI+ITwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZW8tc3BsaXQtYXJlYT5cbiAgICAgICAgICA8ZW8tc3BsaXQtYXJlYSBbc2l6ZV09XCI1MFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLW1lZGlhLXdyYXBcIj5cbiAgICAgICAgICAgICAgPGVvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbyBbY29udGVudF09XCJwcmVwYXJlZEl0ZW0uY29udGVudHNbcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0luZGV4XVwiPlxuICAgICAgICAgICAgICA8L2VvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbz5cbiAgICAgICAgICAgICAgPGVvLW1lZGlhIFtwcmV2aWV3RmlsZV09XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2VvLXNwbGl0LWFyZWE+XG4gICAgICAgIDwvZW8tc3BsaXQ+XG5cbiAgICAgICAgPCEtLSBqdXN0IHRoZSBmb3JtIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2p1c3Rmb3JtPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBzaXR1YXRpb24tY3JlYXRlXCIgKm5nSWY9XCJmb3JtT3B0aW9uc1wiPlxuICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtICNmb3JtIFtmb3JtT3B0aW9uc109XCJmb3JtT3B0aW9uc1wiIChzdGF0dXNDaGFuZ2VkKT1cIm9uRm9ybVN0YXR1c0NoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICA8L3NlY3Rpb24+XG5cbiAgPG5nLXRlbXBsYXRlICNzcGlubmVyPlxuICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5XCI+XG4gICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIHNpemU9XCJtZWRpdW1cIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbWFpblNwaW5uZXI+XG4gIDxkaXYgY2xhc3M9XCJwcmVwYXJlRGV0YWlsc19fbWFpbi1zcGlubmVyXCI+XG4gICAgPGVvLWxvYWRpbmctc3Bpbm5lciBzaXplPVwibWVkaXVtXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bmctdGVtcGxhdGUgI25vSXRlbT5cbiAgPGVvLWVycm9yLW1lc3NhZ2UgW2VtcHR5U3RhdGVdPVwie2ljb246IGVtcHR5U3RhdGUuaWNvbiwgdGV4dDogZW1wdHlTdGF0ZS50ZXh0LCBjbGFzc05hbWU6IGVtcHR5U3RhdGUuY2xhc3NOYW1lfVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5lcnJvclwiPjwvbmctY29udGVudD5cbiAgPC9lby1lcnJvci1tZXNzYWdlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGVvLWRpYWxvZyBbdGl0bGVdPVwiJ2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gIFsodmlzaWJsZSldPVwic2hvd0RlbGV0ZURpYWxvZ1wiIFtmb2N1c09uU2hvd109XCJmYWxzZVwiIFttaW5XaWR0aF09XCI0MDBcIiBbc3R5bGVDbGFzc109XCIncHJlcGFyZS1kZWxldGVfX2RpYWxvZydcIj5cblxuPGRpdj57eydlby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5tZXNzYWdlJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zIHByZXBhcmUtZGVsZXRlLS1hY3Rpb24tYnV0dG9ucyBmbGV4LXJvd1wiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGNhbmNlbFwiIChjbGljayk9XCJzaG93RGVsZXRlRGlhbG9nID0gZmFsc2VcIlxuICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLmNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNjb25maXJtRGVsZXRlIChjbGljayk9XCJyZW1vdmVJdGVtKHByZXBhcmVkSXRlbSlcIiBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCJcbiAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5vazwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZW8tZGlhbG9nPlxuXG48ZW8tZGlhbG9nIFt0aXRsZV09XCInZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5jb250ZW50LmRpYWxvZy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICBbKHZpc2libGUpXT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nXCIgW21pbldpZHRoXT1cIjQwMFwiIFtzdHlsZUNsYXNzXT1cIidwcmVwYXJlLWRlbGV0ZV9fZGlhbG9nJ1wiPlxuXG48ZGl2Pnt7J2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuY29udGVudC5kaWFsb2cubWVzc2FnZScgfCB0cmFuc2xhdGU6ICh7Y29udGVudFBhdGg6IHByZXBhcmVkSXRlbT8uY29udGVudHMgPyBwcmVwYXJlZEl0ZW0/LmNvbnRlbnRzW2RlbGV0ZWRDb250ZW50SW5kZXhdPy5wYXRoIDogJyd9KX19PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zIHByZXBhcmUtZGVsZXRlLS1hY3Rpb24tYnV0dG9ucyBmbGV4LXJvd1wiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGNhbmNlbFwiIChjbGljayk9XCJzaG93Q29udGVudERlbGV0ZURpYWxvZyA9IGZhbHNlXCJcbiAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5jYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY29uZmlybUNvbnRlbnREZWxldGUgKGNsaWNrKT1cInJlbW92ZUl0ZW1Db250ZW50KHByZXBhcmVkSXRlbSwgZGVsZXRlZENvbnRlbnRJbmRleClcIiBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCJcbiAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5vazwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZW8tZGlhbG9nPlxuIl19