@alfresco/adf-content-services 8.1.0-14755969498 → 8.1.0-14794174089

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 (202) hide show
  1. package/esm2022/lib/agent/services/agent.service.mjs +4 -4
  2. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +4 -4
  3. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +4 -4
  4. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +4 -4
  5. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +4 -4
  6. package/esm2022/lib/aspect-list/aspect-list.component.mjs +4 -4
  7. package/esm2022/lib/aspect-list/aspect-list.module.mjs +5 -5
  8. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +4 -4
  9. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +4 -4
  10. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +4 -4
  11. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +4 -4
  12. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +4 -4
  13. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +5 -5
  14. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +4 -4
  15. package/esm2022/lib/category/categories-management/categories-management.component.mjs +4 -4
  16. package/esm2022/lib/category/category.module.mjs +5 -5
  17. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +4 -4
  18. package/esm2022/lib/category/services/category.service.mjs +4 -4
  19. package/esm2022/lib/common/services/card-view-content-update.service.mjs +4 -4
  20. package/esm2022/lib/common/services/content.service.mjs +4 -4
  21. package/esm2022/lib/common/services/discovery-api.service.mjs +4 -4
  22. package/esm2022/lib/common/services/favorites-api.service.mjs +4 -4
  23. package/esm2022/lib/common/services/nodes-api.service.mjs +4 -4
  24. package/esm2022/lib/common/services/people-content.service.mjs +4 -4
  25. package/esm2022/lib/common/services/rendition.service.mjs +4 -4
  26. package/esm2022/lib/common/services/saved-searches.service.mjs +4 -4
  27. package/esm2022/lib/common/services/sites.service.mjs +4 -4
  28. package/esm2022/lib/common/services/upload.service.mjs +4 -4
  29. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +4 -4
  30. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +4 -4
  31. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +4 -4
  32. package/esm2022/lib/content-metadata/content-metadata.module.mjs +5 -5
  33. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +4 -4
  34. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +4 -4
  35. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +4 -4
  36. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +4 -4
  37. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +4 -4
  38. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +4 -4
  39. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +4 -4
  40. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +4 -4
  41. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +4 -4
  42. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +4 -4
  43. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +5 -5
  44. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +4 -4
  45. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +4 -4
  46. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +4 -4
  47. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +4 -4
  48. package/esm2022/lib/content-node-share/content-node-share.module.mjs +5 -5
  49. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +4 -4
  50. package/esm2022/lib/content-type/content-type-dialog.component.mjs +4 -4
  51. package/esm2022/lib/content-type/content-type.service.mjs +4 -4
  52. package/esm2022/lib/content.module.mjs +5 -5
  53. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +4 -4
  54. package/esm2022/lib/dialogs/dialog.module.mjs +5 -5
  55. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +4 -4
  56. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +5 -5
  57. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +4 -4
  58. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +4 -4
  59. package/esm2022/lib/dialogs/library/library.dialog.mjs +4 -4
  60. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +4 -4
  61. package/esm2022/lib/directives/auto-focus.directive.mjs +4 -4
  62. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +4 -4
  63. package/esm2022/lib/directives/content-directive.module.mjs +5 -5
  64. package/esm2022/lib/directives/library-favorite.directive.mjs +4 -4
  65. package/esm2022/lib/directives/library-membership.directive.mjs +4 -4
  66. package/esm2022/lib/directives/node-counter.directive.mjs +7 -7
  67. package/esm2022/lib/directives/node-delete.directive.mjs +4 -4
  68. package/esm2022/lib/directives/node-download.directive.mjs +4 -4
  69. package/esm2022/lib/directives/node-favorite.directive.mjs +4 -4
  70. package/esm2022/lib/directives/node-lock.directive.mjs +4 -4
  71. package/esm2022/lib/directives/node-restore.directive.mjs +4 -4
  72. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +4 -4
  73. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +4 -4
  74. package/esm2022/lib/document-list/components/document-list.component.mjs +4 -4
  75. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +4 -4
  76. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +4 -4
  77. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +4 -4
  78. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +4 -4
  79. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +4 -4
  80. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +4 -4
  81. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +4 -4
  82. package/esm2022/lib/document-list/document-list.module.mjs +5 -5
  83. package/esm2022/lib/document-list/services/custom-resources.service.mjs +4 -4
  84. package/esm2022/lib/document-list/services/document-actions.service.mjs +4 -4
  85. package/esm2022/lib/document-list/services/document-list.service.mjs +4 -4
  86. package/esm2022/lib/document-list/services/folder-actions.service.mjs +4 -4
  87. package/esm2022/lib/document-list/services/lock.service.mjs +4 -4
  88. package/esm2022/lib/document-list/services/node-actions.service.mjs +4 -4
  89. package/esm2022/lib/group/services/group.service.mjs +4 -4
  90. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +4 -4
  91. package/esm2022/lib/material.module.mjs +5 -5
  92. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +4 -4
  93. package/esm2022/lib/mock/search.component.mock.mjs +4 -4
  94. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +4 -4
  95. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +5 -5
  96. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +4 -4
  97. package/esm2022/lib/node-comments/node-comments.component.mjs +4 -4
  98. package/esm2022/lib/node-comments/node-comments.module.mjs +5 -5
  99. package/esm2022/lib/node-comments/services/node-comments.service.mjs +4 -4
  100. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +4 -4
  101. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +4 -4
  102. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +4 -4
  103. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +4 -4
  104. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +4 -4
  105. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +4 -4
  106. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +4 -4
  107. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +4 -4
  108. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +4 -4
  109. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +4 -4
  110. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +4 -4
  111. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +4 -4
  112. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +4 -4
  113. package/esm2022/lib/permission-manager/permission-manager.module.mjs +5 -5
  114. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +4 -4
  115. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +4 -4
  116. package/esm2022/lib/pipes/content-pipe.module.mjs +5 -5
  117. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +4 -4
  118. package/esm2022/lib/prediction/services/prediction.service.mjs +4 -4
  119. package/esm2022/lib/search/components/empty-search-result.component.mjs +4 -4
  120. package/esm2022/lib/search/components/reset-search.directive.mjs +4 -4
  121. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +4 -4
  122. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +4 -4
  123. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +4 -4
  124. package/esm2022/lib/search/components/search-control.component.mjs +4 -4
  125. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +5 -5
  126. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +4 -4
  127. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +4 -4
  128. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +4 -4
  129. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +4 -4
  130. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +4 -4
  131. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +4 -4
  132. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +4 -4
  133. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +4 -4
  134. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +4 -4
  135. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +4 -4
  136. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +4 -4
  137. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +4 -4
  138. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +4 -4
  139. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +4 -4
  140. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +4 -4
  141. package/esm2022/lib/search/components/search-form/search-form.component.mjs +4 -4
  142. package/esm2022/lib/search/components/search-input/search-input.component.mjs +4 -4
  143. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +4 -4
  144. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +4 -4
  145. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +4 -4
  146. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +4 -4
  147. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +4 -4
  148. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +4 -4
  149. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +4 -4
  150. package/esm2022/lib/search/components/search-text/search-text.component.mjs +4 -4
  151. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +4 -4
  152. package/esm2022/lib/search/components/search.component.mjs +4 -4
  153. package/esm2022/lib/search/search.module.mjs +5 -5
  154. package/esm2022/lib/search/services/search-configuration.service.mjs +4 -4
  155. package/esm2022/lib/search/services/search-facet-filters.service.mjs +4 -4
  156. package/esm2022/lib/search/services/search-filter.service.mjs +4 -4
  157. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +4 -4
  158. package/esm2022/lib/search/services/search-query-builder.service.mjs +4 -4
  159. package/esm2022/lib/search/services/search.service.mjs +4 -4
  160. package/esm2022/lib/search-ai/services/search-ai.service.mjs +4 -4
  161. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +4 -4
  162. package/esm2022/lib/services/alfresco-api.service.mjs +4 -4
  163. package/esm2022/lib/tag/services/tag.service.mjs +4 -4
  164. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +4 -4
  165. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +4 -4
  166. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +4 -4
  167. package/esm2022/lib/tag/tag.module.mjs +5 -5
  168. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +4 -4
  169. package/esm2022/lib/testing/content.testing.module.mjs +5 -5
  170. package/esm2022/lib/tree/components/tree.component.mjs +4 -4
  171. package/esm2022/lib/tree/services/tree.service.mjs +4 -4
  172. package/esm2022/lib/tree/tree.module.mjs +5 -5
  173. package/esm2022/lib/tree-view/components/tree-view.component.mjs +4 -4
  174. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +4 -4
  175. package/esm2022/lib/tree-view/services/tree-view.service.mjs +4 -4
  176. package/esm2022/lib/tree-view/tree-view.module.mjs +5 -5
  177. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +4 -4
  178. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +4 -4
  179. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +4 -4
  180. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +4 -4
  181. package/esm2022/lib/upload/components/upload-button.component.mjs +4 -4
  182. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +4 -4
  183. package/esm2022/lib/upload/components/upload-version-button.component.mjs +4 -4
  184. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +4 -4
  185. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +4 -4
  186. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +4 -4
  187. package/esm2022/lib/upload/upload.module.mjs +5 -5
  188. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +4 -4
  189. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +5 -5
  190. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +4 -4
  191. package/esm2022/lib/version-manager/content-version.service.mjs +4 -4
  192. package/esm2022/lib/version-manager/version-comparison.component.mjs +4 -4
  193. package/esm2022/lib/version-manager/version-list.component.mjs +4 -4
  194. package/esm2022/lib/version-manager/version-manager.component.mjs +4 -4
  195. package/esm2022/lib/version-manager/version-manager.module.mjs +5 -5
  196. package/esm2022/lib/version-manager/version-upload.component.mjs +4 -4
  197. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +5 -5
  198. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +4 -4
  199. package/fesm2022/adf-content-services.mjs +629 -629
  200. package/fesm2022/adf-content-services.mjs.map +1 -1
  201. package/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.d.ts +1 -1
  202. package/package.json +3 -3
@@ -327,10 +327,10 @@ export class TagsCreatorComponent {
327
327
  this.tagNameControl.setValue('');
328
328
  this.tagNameControl.markAsUntouched();
329
329
  }
330
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TagsCreatorComponent, deps: [{ token: i1.TagService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
331
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">\n {{ tagNameErrorMessageKey | translate }}\n </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <ng-container *ngIf=\"tags?.length > 0\">\n <adf-dynamic-chip-list\n class=\"adf-tags-chips-container\"\n [chips]=\"tagsToDisplay\"\n [disableDelete]=\"disabledTagsRemoving\"\n (removedChip)=\"removeTag($event)\" />\n </ng-container>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"!tagNameControl.value || tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\"\n (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n />\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden;word-break:break-all}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i8.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i8.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: DynamicChipListComponent, selector: "adf-dynamic-chip-list", inputs: ["pagination", "chips", "showDelete", "disableDelete", "limitChipsDisplayed", "roundUpChips"], outputs: ["displayNext", "removedChip"] }], encapsulation: i0.ViewEncapsulation.None }); }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TagsCreatorComponent, deps: [{ token: i1.TagService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
331
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">\n {{ tagNameErrorMessageKey | translate }}\n </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <ng-container *ngIf=\"tags?.length > 0\">\n <adf-dynamic-chip-list\n class=\"adf-tags-chips-container\"\n [chips]=\"tagsToDisplay\"\n [disableDelete]=\"disabledTagsRemoving\"\n (removedChip)=\"removeTag($event)\" />\n </ng-container>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"!tagNameControl.value || tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\"\n (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n />\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden;word-break:break-all}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i8.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i8.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: DynamicChipListComponent, selector: "adf-dynamic-chip-list", inputs: ["pagination", "chips", "showDelete", "disableDelete", "limitChipsDisplayed", "roundUpChips"], outputs: ["displayNext", "removedChip"] }], encapsulation: i0.ViewEncapsulation.None }); }
332
332
  }
333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TagsCreatorComponent, decorators: [{
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TagsCreatorComponent, decorators: [{
334
334
  type: Component,
335
335
  args: [{ selector: 'adf-tags-creator', standalone: true, imports: [
336
336
  CommonModule,
@@ -368,4 +368,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
368
368
  type: HostBinding,
369
369
  args: ['class.adf-creator-with-existing-tags-panel']
370
370
  }] } });
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGFnL3RhZ3MtY3JlYXRvci90YWdzLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi90YWcvdGFncy1jcmVhdG9yL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQVEsd0JBQXdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RixPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFB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a0JBQWtCLDREQUNsQixlQUFlLDJGQUNmLGNBQWMsOEJBQ2QsZUFBZSw4QkFDZixhQUFhLDhCQUNiLGFBQWEsdVJBQ2Isd0JBQXdCLG1PQUN4Qix3QkFBd0I7OzJGQU1uQixvQkFBb0I7a0JBcEJoQyxTQUFTOytCQUNJLGtCQUFrQixjQUNoQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4Qix3QkFBd0I7cUJBQzNCLGlCQUdjLGlCQUFpQixDQUFDLElBQUk7aUhBU3JDLElBQUk7c0JBREgsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFTRixJQUFJO3NCQURQLEtBQUs7Z0JBb0JGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkF1Qk4saUNBQWlDO3NCQURoQyxNQUFNO2dCQU1QLFVBQVU7c0JBRFQsTUFBTTtnQkFpQ0MsZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxVQUFVO2dCQUdiLG1CQUFtQjtzQkFEMUIsU0FBUzt1QkFBQyxjQUFjO2dCQTZDckIsU0FBUztzQkFEWixXQUFXO3VCQUFDLDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ2hpcCwgRHluYW1pY0NoaXBMaXN0Q29tcG9uZW50LCBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFRhZ0VudHJ5LCBUYWdQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIGZpcnN0LCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0b0ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFnc0NyZWF0b3JNb2RlIH0gZnJvbSAnLi90YWdzLWNyZWF0b3ItbW9kZSc7XG5cbmludGVyZmFjZSBUYWdOYW1lQ29udHJvbEVycm9ycyB7XG4gICAgZHVwbGljYXRlZEV4aXN0aW5nVGFnPzogYm9vbGVhbjtcbiAgICBkdXBsaWNhdGVkQWRkZWRUYWc/OiBib29sZWFuO1xuICAgIGVtcHR5VGFnPzogYm9vbGVhbjtcbiAgICBzcGVjaWFsQ2hhcmFjdGVycz86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfVEFHU19TT1JUSU5HID0ge1xuICAgIG9yZGVyQnk6ICd0YWcnLFxuICAgIGRpcmVjdGlvbjogJ2FzYydcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGNyZWF0ZSBtdWx0aXBsZSB0YWdzLiBUaGF0IGNvbXBvbmVudCBjb250YWlucyBpbnB1dCBhbmQgdHdvIGxpc3RzLiBUb3AgbGlzdCBpcyBhbGwgY3JlYXRlZCB0YWdzLCBib3R0b20gbGlzdCBpcyBzZWFyY2hlZCB0YWdzIGJhc2VkIG9uIGlucHV0J3MgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXRhZ3MtY3JlYXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Gb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIER5bmFtaWNDaGlwTGlzdENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFncy1jcmVhdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWdzQ3JlYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBNb2RlIGZvciBjb21wb25lbnQuXG4gICAgICogSW4gQ3JlYXRlIG1vZGUgd2UgY2FuJ3Qgc2VsZWN0IGV4aXN0aW5nIHRhZ3MsIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGVtLlxuICAgICAqIEluIENyZWF0ZSBhbmQgQXNzaWduIG1vZGUgd2UgY2FuIGJvdGggLSBjcmVhdGUgdGFncyBhbmQgc2VsZWN0IGV4aXN0aW5nIHRhZ3MuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBtb2RlOiBUYWdzQ3JlYXRvck1vZGU7XG5cbiAgICAvKipcbiAgICAgKiBGYWxzZSBpZiB0YWdzIGNhbiBiZSByZW1vdmVkIGZyb20gdG9wIGxpc3QsIHRydWUgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWRUYWdzUmVtb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgdG9wIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFncyB0YWdzIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgZGVmYXVsdCB0YWdzIGZvciB0b3AgbGlzdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0YWdzKHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX3RhZ3MgPSBbLi4udGFnc107XG4gICAgICAgIHRoaXMudGFnc1RvRGlzcGxheSA9IHRoaXMudGFncy5tYXAoKHRhZykgPT4gKHsgaWQ6IHRhZywgbmFtZTogdGFnIH0pKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2V4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgIHRoaXMubG9hZFRhZ3ModGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIGdldCB0YWdzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjaWRlcyBpZiBpbnB1dCBmb3IgdGFncyBjcmVhdGlvbi9zZWFyY2hpbmcgc2hvdWxkIGJlIHZpc2libGUuIFdoZW4gaW5wdXQgaXMgaGlkZGVuIHRoZW4gcGFuZWwgb2YgZXhpc3RpbmcgdGFncyBpcyBoaWRkZW4gYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdOYW1lQ29udHJvbFZpc2libGUgdHJ1ZSBpZiBpbnB1dCBzaG91bGQgYmUgdmlzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRhZ05hbWVDb250cm9sVmlzaWJsZSh0YWdOYW1lQ29udHJvbFZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlID0gdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgICAgICBpZiAodGFnTmFtZUNvbnRyb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdOYW1lSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUYWdOYW1lSW5wdXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2xWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBib3R0b20gbGlzdCBpcyBzaG93aW5nIG9yIGhpZGluZy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGlzdGluZ1RhZ3NQYW5lbFZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRhZ3MgaW4gdG9wIGxpc3QgYXJlIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdGFnc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgICB0YWdzVG9EaXNwbGF5OiBDaGlwW10gPSBbXTtcblxuICAgIHJlYWRvbmx5IG5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMgPSBuZXcgTWFwPGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzLCBzdHJpbmc+KFtcbiAgICAgICAgWydkdXBsaWNhdGVkRXhpc3RpbmdUYWcnLCAnRVhJU1RJTkdfVEFHJ10sXG4gICAgICAgIFsnZHVwbGljYXRlZEFkZGVkVGFnJywgJ0FMUkVBRFlfQURERURfVEFHJ10sXG4gICAgICAgIFsnZW1wdHlUYWcnLCAnRU1QVFlfVEFHJ10sXG4gICAgICAgIFsnc3BlY2lhbENoYXJhY3RlcnMnLCAnU1BFQ0lBTF9DSEFSQUNURVJTJ11cbiAgICBdKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhpc3RpbmdUYWdzTGlzdExpbWl0ID0gMTU7XG5cbiAgICBwcml2YXRlIGV4YWN0VGFnU2V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfdGFnczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF90YWdOYW1lQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KFxuICAgICAgICAnJyxcbiAgICAgICAgW3RoaXMudmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZC5iaW5kKHRoaXMpLCB0aGlzLnZhbGlkYXRlRW1wdHlUYWcsIHRoaXMudmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVyc10sXG4gICAgICAgIHRoaXMudmFsaWRhdGVJZk5vdEV4aXN0aW5nVGFnLmJpbmQodGhpcylcbiAgICApO1xuICAgIHByaXZhdGUgX3RhZ05hbWVDb250cm9sVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2V4aXN0aW5nVGFnczogVGFnRW50cnlbXTtcbiAgICBwcml2YXRlIF9pbml0aWFsRXhpc3RpbmdUYWdzOiBUYWdFbnRyeVtdO1xuICAgIHByaXZhdGUgX3RhZ05hbWVFcnJvck1lc3NhZ2VLZXkgPSAnJztcbiAgICBwcml2YXRlIF9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3R5cGluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZXhpc3RpbmdFeGFjdFRhZzogVGFnRW50cnk7XG4gICAgcHJpdmF0ZSBfZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZCgndGFnc0xpc3QnKVxuICAgIHByaXZhdGUgdGFnc0xpc3RFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3RhZ05hbWVJbnB1dCcpXG4gICAgcHJpdmF0ZSB0YWdOYW1lSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobmFtZTogc3RyaW5nKSA9PiBuYW1lLnRyaW0oKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlTm90Q2hhbmdlZCA9IHByZXZpb3VzID09PSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVOb3RDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlTm90Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlKChuYW1lOiBzdHJpbmcpID0+IChuYW1lID8gdGltZXIoMzAwKSA6IEVNUFRZKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5vblRhZ05hbWVDb250cm9sVmFsdWVDaGFuZ2UobmFtZSkpO1xuXG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpKTtcblxuICAgICAgICB0aGlzLnNldFRhZ05hbWVDb250cm9sRXJyb3JNZXNzYWdlS2V5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQubmV4dCgpO1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtY3JlYXRvci13aXRoLWV4aXN0aW5nLXRhZ3MtcGFuZWwnKVxuICAgIGdldCBob3N0Q2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2woKTogRm9ybUNvbnRyb2w8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lQ29udHJvbDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRhZ3MgZW1wdHkgYW5kIG5vbiBlZGl0YWJsZSBzdGF0ZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBnZXQgc2hvd0VtcHR5VGFnTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFncz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnRhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzKCk6IFRhZ0VudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzO1xuICAgIH1cblxuICAgIGdldCB0YWdOYW1lRXJyb3JNZXNzYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lRXJyb3JNZXNzYWdlS2V5O1xuICAgIH1cblxuICAgIGdldCBzcGlubmVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwaW5uZXJWaXNpYmxlO1xuICAgIH1cblxuICAgIGdldCB0eXBpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBpbmc7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0YWdzIHRvIHRvcCBsaXN0IHVzaW5nIHZhbHVlIHdoaWNoIGlzIHNldCBpbiBpbnB1dC4gQWRkaW5nIHRhZyBpcyBub3QgYWxsb3dlZCB3aGVuIHZhbHVlIGluIGlucHV0IGlzIGludmFsaWRcbiAgICAgKiBvciBpZiB1c2VyIGlzIHN0aWxsIHR5cGluZyB3aGF0IG1lYW5zIHRoYXQgdmFsaWRhdGlvbiBmb3IgaW5wdXQgaXMgbm90IGNhbGxlZCB5ZXQuXG4gICAgICovXG4gICAgYWRkVGFnKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3R5cGluZyAmJiAhdGhpcy50YWdOYW1lQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ3MgPSBbLi4udGhpcy50YWdzLCB0aGlzLnRhZ05hbWVDb250cm9sLnZhbHVlLnRyaW0oKV07XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFnTmFtZUlucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0YWcgZnJvbSB0b3AgbGlzdC4gSW4gY2FzZSB0aGF0IHRhZyB3YXMgcGFydCBvZiBzZWFyY2ggcmVzdWx0IHRoZW4gdGhhdCB0YWcgaXMgbW92ZWQgdG8gYm90dG9tIGxpc3RcbiAgICAgKiAobGlzdCBvZiBleGlzdGluZyB0YWdzKSBhZnRlciByZW1vdmluZyBzbyB1c2VyIGNhbiByZXNlbGVjdCBpdCBhZ2FpbiBsYXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWcgdGFnJ3MgbmFtZSB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRvcCBsaXN0LlxuICAgICAqL1xuICAgIHJlbW92ZVRhZyh0YWc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLnRhZ3MsIHRhZyk7XG4gICAgICAgIHRoaXMudGFncyA9IFsuLi50aGlzLnRhZ3NdO1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy51cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWcpO1xuICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuY2hlY2tTY3JvbGxiYXJWaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMudGFnc0NoYW5nZS5lbWl0KHRoaXMudGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdXNlciBzZWxlY3RzIGFueSB0YWcgZnJvbSBsaXN0IG9mIGV4aXN0aW5nIHRhZ3MuIEl0IG1vdmVzIHRhZyBmcm9tIGV4aXN0aW5nIHRhZ3MgbGlzdCB0byB0b3AgbGlzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWxlY3RlZFRhZyBjaGFuZ2VzXG4gICAgICovXG4gICAgYWRkRXhpc3RpbmdUYWdUb1RhZ3NUb0Fzc2lnbihzZWxlY3RlZFRhZzogVGFnRW50cnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT25seUNyZWF0ZU1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy50YWdzLnB1c2goc2VsZWN0ZWRUYWcuZW50cnkudGFnKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbUFycmF5KHRoaXMuZXhpc3RpbmdUYWdzLCBzZWxlY3RlZFRhZyk7XG4gICAgICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHRoaXMudGFncyA9IFsuLi50aGlzLnRhZ3NdO1xuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBjb21wb25lbnQgaXMgaW4gQ3JlYXRlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYENyZWF0ZWAgbW9kZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNPbmx5Q3JlYXRlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gVGFnc0NyZWF0b3JNb2RlLkNSRUFURTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVGFnTmFtZUNvbnRyb2xWYWx1ZUNoYW5nZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMubG9hZFRhZ3MobmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFncyhuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgIXRoaXMudGFnTmFtZUNvbnRyb2wuaGFzRXJyb3IoJ3NwZWNpYWxDaGFyYWN0ZXJzJykpIHtcbiAgICAgICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICAgICAgICBleGFjdFJlc3VsdDogdGhpcy50YWdTZXJ2aWNlLmZpbmRUYWdCeU5hbWUobmFtZSksXG4gICAgICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQ6IHRoaXMudGFnU2VydmljZS5zZWFyY2hUYWdzKG5hbWUsIERFRkFVTFRfVEFHU19TT1JUSU5HLCBmYWxzZSwgMCwgdGhpcy5leGlzdGluZ1RhZ3NMaXN0TGltaXQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJCksXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLl90eXBpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoeyBleGFjdFJlc3VsdCwgc2VhcmNoZWRSZXN1bHQgfTogeyBleGFjdFJlc3VsdDogVGFnRW50cnk7IHNlYXJjaGVkUmVzdWx0OiBUYWdQYWdpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4YWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ0V4YWN0VGFnID0gZXhhY3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFeGFjdFRhZ0Zyb21TZWFyY2hlZFJlc3VsdChzZWFyY2hlZFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLnVuc2hpZnQoZXhhY3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzID0gc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlQWxyZWFkeUFkZGVkVGFncyh0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhhY3RUYWdTZXQkLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKCdUQUcuVEFHU19DUkVBVE9SLkVSUk9SUy5GRVRDSF9UQUdTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRXhhY3RUYWdGcm9tU2VhcmNoZWRSZXN1bHQoc2VhcmNoZWRSZXN1bHQ6IFRhZ1BhZ2luZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBleGFjdFRhZ0luZGV4ID0gc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLmZpbmRJbmRleCgocm93KSA9PiB0aGlzLmNvbXBhcmVUYWdzKHJvdy5lbnRyeS50YWcsIHRoaXMuZXhpc3RpbmdFeGFjdFRhZy5lbnRyeS50YWcpKTtcblxuICAgICAgICBpZiAoZXhhY3RUYWdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZWFyY2hlZFJlc3VsdC5saXN0LmVudHJpZXMuc3BsaWNlKGV4YWN0VGFnSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUlmTm90RXhpc3RpbmdUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBPYnNlcnZhYmxlPFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdFRhZ1NldCQucGlwZShcbiAgICAgICAgICAgIG1hcDx2b2lkLCBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGw+KCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYXJlVGFncyh0YWdOYW1lQ29udHJvbC52YWx1ZSwgdGhpcy5leGlzdGluZ0V4YWN0VGFnPy5lbnRyeT8udGFnKSA/IHsgZHVwbGljYXRlZEV4aXN0aW5nVGFnOiB0cnVlIH0gOiBudWxsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZCh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ3Muc29tZSgodGFnKSA9PiB0aGlzLmNvbXBhcmVUYWdzKHRhZywgdGFnTmFtZUNvbnRyb2wudmFsdWUpKSA/IHsgZHVwbGljYXRlZEFkZGVkVGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVRhZ3ModGFnTmFtZTE/OiBzdHJpbmcsIHRhZ05hbWUyPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lMT8udHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IHRhZ05hbWUyPy50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRW1wdHlUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGFnTmFtZUNvbnRyb2wudmFsdWUubGVuZ3RoICYmICF0YWdOYW1lQ29udHJvbC52YWx1ZS50cmltKCkgPyB7IGVtcHR5VGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVycyh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNwZWNpYWxTeW1ib2xzUmVnZXggPSAvW3t9KCleJzpcIlxcXFx8PD4vPy4qXS87XG4gICAgICAgIHJldHVybiB0YWdOYW1lQ29udHJvbC52YWx1ZS5sZW5ndGggJiYgc3BlY2lhbFN5bWJvbHNSZWdleC50ZXN0KHRhZ05hbWVDb250cm9sLnZhbHVlKSA/IHsgc3BlY2lhbENoYXJhY3RlcnM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUVycm9yTWVzc2FnZUtleSA9IHRoaXMudGFnTmFtZUNvbnRyb2wuaW52YWxpZFxuICAgICAgICAgICAgPyBgVEFHLlRBR1NfQ1JFQVRPUi5FUlJPUlMuJHt0aGlzLm5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMuZ2V0KFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy50YWdOYW1lQ29udHJvbC5lcnJvcnMpWzBdIGFzIGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzXG4gICAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90YWdzTGlzdFNjcm9sbGJhclZpc2libGUgPSB0aGlzLnRhZ3NMaXN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IHRoaXMudGFnc0xpc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVRhZ0Zyb21BcnJheTxUPih0YWdzOiBUW10sIHRhZzogVCkge1xuICAgICAgICB0YWdzLnNwbGljZSh0YWdzLmluZGV4T2YodGFnKSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWc6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbnRyeUZvclRhZ0FkZGVkVG9FeGlzdGluZ1RhZ3MgPSB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzPy5maW5kKCh0YWdFbnRyeSkgPT4gdGFnRW50cnkuZW50cnkudGFnID09PSB0YWcpO1xuICAgICAgICBpZiAoZW50cnlGb3JUYWdBZGRlZFRvRXhpc3RpbmdUYWdzKSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy51bnNoaWZ0KGVudHJ5Rm9yVGFnQWRkZWRUb0V4aXN0aW5nVGFncyk7XG4gICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0V4YWN0VGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZyAhPT0gdGhpcy5leGlzdGluZ0V4YWN0VGFnLmVudHJ5LnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLmV4aXN0aW5nVGFncywgdGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0RXhpc3RpbmdUYWdzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdUYWdzLnVuc2hpZnQodGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydEV4aXN0aW5nVGFncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0RXhpc3RpbmdUYWdzKCkge1xuICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy5zb3J0KCh0YWdFbnRyeTEsIHRhZ0VudHJ5MikgPT4gdGFnRW50cnkxLmVudHJ5LnRhZy5sb2NhbGVDb21wYXJlKHRhZ0VudHJ5Mi5lbnRyeS50YWcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4Y2x1ZGVBbHJlYWR5QWRkZWRUYWdzKHRhZ3M6IFRhZ0VudHJ5W10pIHtcbiAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gIXRoaXMudGFncy5pbmNsdWRlcyh0YWcuZW50cnkudGFnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRhZ05hbWVJbnB1dCgpIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi10YWdzLWNyZWF0aW9uXCI+XG4gICAgPGRpdiAqbmdJZj1cInRhZ05hbWVDb250cm9sVmlzaWJsZVwiIGNsYXNzPVwiYWRmLXRhZy1uYW1lLWZpZWxkXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3RhZ05hbWVJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdGFnLXNlYXJjaC1maWVsZFwiXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0YWdOYW1lQ29udHJvbFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYWRkVGFnKClcIlxuICAgICAgICAgICAgYWRmLWF1dG8tZm9jdXNcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RBRy5UQUdTX0NSRUFUT1IuVEFHX1NFQVJDSF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidGFnTmFtZUNvbnRyb2wuaW52YWxpZCAmJiB0YWdOYW1lQ29udHJvbC50b3VjaGVkXCI+XG4gICAgICAgICAgICB7eyB0YWdOYW1lRXJyb3JNZXNzYWdlS2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiYWRmLW5vLXRhZ3MtbWVzc2FnZVwiICpuZ0lmPVwic2hvd0VtcHR5VGFnTWVzc2FnZVwiPlxuICAgICAgICB7eyAnVEFHLlRBR1NfQ1JFQVRPUi5OT19UQUdTX0NSRUFURUQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFncy1saXN0XCIgW2NsYXNzLmFkZi10YWdzLWxpc3QtZml4ZWRdPVwiIXRhZ05hbWVDb250cm9sVmlzaWJsZVwiICN0YWdzTGlzdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhZ3M/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxhZGYtZHluYW1pYy1jaGlwLWxpc3RcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10YWdzLWNoaXBzLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2NoaXBzXT1cInRhZ3NUb0Rpc3BsYXlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlRGVsZXRlXT1cImRpc2FibGVkVGFnc1JlbW92aW5nXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZENoaXApPVwicmVtb3ZlVGFnKCRldmVudClcIiAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFkZi1leGlzdGluZy10YWdzLXBhbmVsXCIgKm5nSWY9XCJleGlzdGluZ1RhZ3NQYW5lbFZpc2libGVcIj5cbiAgICA8c3BhblxuICAgICAgICAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSB8fCBleGlzdGluZ1RhZ3NcIlxuICAgICAgICBjbGFzcz1cImFkZi1jcmVhdGUtdGFnLWxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZFRhZygpXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJhZGRUYWcoKVwiXG4gICAgICAgIFtoaWRkZW5dPVwiIXRhZ05hbWVDb250cm9sLnZhbHVlIHx8IHRhZ05hbWVDb250cm9sLmludmFsaWQgfHwgdHlwaW5nXCJcbiAgICA+XG4gICAgICAgIHt7ICdUQUcuVEFHU19DUkVBVE9SLkNSRUFURV9UQUcnIHwgdHJhbnNsYXRlIDogeyB0YWc6IHRhZ05hbWVDb250cm9sLnZhbHVlIH0gfX1cbiAgICA8L3NwYW4+XG4gICAgPHAgKm5nSWY9XCIhc3Bpbm5lclZpc2libGUgJiYgZXhpc3RpbmdUYWdzXCIgY2xhc3M9XCJhZGYtZXhpc3RpbmctdGFncy1sYWJlbFwiPlxuICAgICAgICB7eyAoaXNPbmx5Q3JlYXRlTW9kZSgpID8gJ1RBRy5UQUdTX0NSRUFUT1IuRVhJU1RJTkdfVEFHUycgOiAnVEFHLlRBR1NfQ1JFQVRPUi5FWElTVElOR19UQUdTX1NFTEVDVElPTicpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFncy1saXN0XCI+XG4gICAgICAgIDxtYXQtbGlzdCAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSAmJiBleGlzdGluZ1RhZ3NcIiBbZGlzYWJsZWRdPVwiaXNPbmx5Q3JlYXRlTW9kZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWxpc3QtaXRlbSAqbmdGb3I9XCJsZXQgdGFnUm93IG9mIGV4aXN0aW5nVGFnc1wiIGNsYXNzPVwiYWRmLXRhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRXhpc3RpbmdUYWdUb1RhZ3NUb0Fzc2lnbih0YWdSb3cpXCI+XG4gICAgICAgICAgICAgICAge3sgdGFnUm93LmVudHJ5LnRhZyB9fVxuICAgICAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgPHAgKm5nSWY9XCIhZXhpc3RpbmdUYWdzPy5sZW5ndGhcIj57eyAnVEFHLlRBR1NfQ1JFQVRPUi5OT19FWElTVElOR19UQUdTJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAqbmdJZj1cInNwaW5uZXJWaXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRhZ3MtY3JlYXRvci1zcGlubmVyXCJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCI1MFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUQUcuVEFHU19DUkVBVE9SLlRBR1NfTE9BRElORycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGFnL3RhZ3MtY3JlYXRvci90YWdzLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi90YWcvdGFncy1jcmVhdG9yL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQVEsd0JBQXdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RixPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFB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a0JBQWtCLDREQUNsQixlQUFlLDJGQUNmLGNBQWMsOEJBQ2QsZUFBZSw4QkFDZixhQUFhLDhCQUNiLGFBQWEsdVJBQ2Isd0JBQXdCLG1PQUN4Qix3QkFBd0I7OzRGQU1uQixvQkFBb0I7a0JBcEJoQyxTQUFTOytCQUNJLGtCQUFrQixjQUNoQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4Qix3QkFBd0I7cUJBQzNCLGlCQUdjLGlCQUFpQixDQUFDLElBQUk7aUhBU3JDLElBQUk7c0JBREgsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFTRixJQUFJO3NCQURQLEtBQUs7Z0JBb0JGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkF1Qk4saUNBQWlDO3NCQURoQyxNQUFNO2dCQU1QLFVBQVU7c0JBRFQsTUFBTTtnQkFpQ0MsZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxVQUFVO2dCQUdiLG1CQUFtQjtzQkFEMUIsU0FBUzt1QkFBQyxjQUFjO2dCQTZDckIsU0FBUztzQkFEWixXQUFXO3VCQUFDLDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ2hpcCwgRHluYW1pY0NoaXBMaXN0Q29tcG9uZW50LCBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFRhZ0VudHJ5LCBUYWdQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIGZpcnN0LCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0b0ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFnc0NyZWF0b3JNb2RlIH0gZnJvbSAnLi90YWdzLWNyZWF0b3ItbW9kZSc7XG5cbmludGVyZmFjZSBUYWdOYW1lQ29udHJvbEVycm9ycyB7XG4gICAgZHVwbGljYXRlZEV4aXN0aW5nVGFnPzogYm9vbGVhbjtcbiAgICBkdXBsaWNhdGVkQWRkZWRUYWc/OiBib29sZWFuO1xuICAgIGVtcHR5VGFnPzogYm9vbGVhbjtcbiAgICBzcGVjaWFsQ2hhcmFjdGVycz86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfVEFHU19TT1JUSU5HID0ge1xuICAgIG9yZGVyQnk6ICd0YWcnLFxuICAgIGRpcmVjdGlvbjogJ2FzYydcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGNyZWF0ZSBtdWx0aXBsZSB0YWdzLiBUaGF0IGNvbXBvbmVudCBjb250YWlucyBpbnB1dCBhbmQgdHdvIGxpc3RzLiBUb3AgbGlzdCBpcyBhbGwgY3JlYXRlZCB0YWdzLCBib3R0b20gbGlzdCBpcyBzZWFyY2hlZCB0YWdzIGJhc2VkIG9uIGlucHV0J3MgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXRhZ3MtY3JlYXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Gb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIER5bmFtaWNDaGlwTGlzdENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFncy1jcmVhdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWdzQ3JlYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBNb2RlIGZvciBjb21wb25lbnQuXG4gICAgICogSW4gQ3JlYXRlIG1vZGUgd2UgY2FuJ3Qgc2VsZWN0IGV4aXN0aW5nIHRhZ3MsIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGVtLlxuICAgICAqIEluIENyZWF0ZSBhbmQgQXNzaWduIG1vZGUgd2UgY2FuIGJvdGggLSBjcmVhdGUgdGFncyBhbmQgc2VsZWN0IGV4aXN0aW5nIHRhZ3MuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBtb2RlOiBUYWdzQ3JlYXRvck1vZGU7XG5cbiAgICAvKipcbiAgICAgKiBGYWxzZSBpZiB0YWdzIGNhbiBiZSByZW1vdmVkIGZyb20gdG9wIGxpc3QsIHRydWUgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWRUYWdzUmVtb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgdG9wIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFncyB0YWdzIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgZGVmYXVsdCB0YWdzIGZvciB0b3AgbGlzdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0YWdzKHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX3RhZ3MgPSBbLi4udGFnc107XG4gICAgICAgIHRoaXMudGFnc1RvRGlzcGxheSA9IHRoaXMudGFncy5tYXAoKHRhZykgPT4gKHsgaWQ6IHRhZywgbmFtZTogdGFnIH0pKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2V4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgIHRoaXMubG9hZFRhZ3ModGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIGdldCB0YWdzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjaWRlcyBpZiBpbnB1dCBmb3IgdGFncyBjcmVhdGlvbi9zZWFyY2hpbmcgc2hvdWxkIGJlIHZpc2libGUuIFdoZW4gaW5wdXQgaXMgaGlkZGVuIHRoZW4gcGFuZWwgb2YgZXhpc3RpbmcgdGFncyBpcyBoaWRkZW4gYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdOYW1lQ29udHJvbFZpc2libGUgdHJ1ZSBpZiBpbnB1dCBzaG91bGQgYmUgdmlzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRhZ05hbWVDb250cm9sVmlzaWJsZSh0YWdOYW1lQ29udHJvbFZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlID0gdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgICAgICBpZiAodGFnTmFtZUNvbnRyb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdOYW1lSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUYWdOYW1lSW5wdXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2xWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBib3R0b20gbGlzdCBpcyBzaG93aW5nIG9yIGhpZGluZy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGlzdGluZ1RhZ3NQYW5lbFZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRhZ3MgaW4gdG9wIGxpc3QgYXJlIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdGFnc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgICB0YWdzVG9EaXNwbGF5OiBDaGlwW10gPSBbXTtcblxuICAgIHJlYWRvbmx5IG5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMgPSBuZXcgTWFwPGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzLCBzdHJpbmc+KFtcbiAgICAgICAgWydkdXBsaWNhdGVkRXhpc3RpbmdUYWcnLCAnRVhJU1RJTkdfVEFHJ10sXG4gICAgICAgIFsnZHVwbGljYXRlZEFkZGVkVGFnJywgJ0FMUkVBRFlfQURERURfVEFHJ10sXG4gICAgICAgIFsnZW1wdHlUYWcnLCAnRU1QVFlfVEFHJ10sXG4gICAgICAgIFsnc3BlY2lhbENoYXJhY3RlcnMnLCAnU1BFQ0lBTF9DSEFSQUNURVJTJ11cbiAgICBdKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhpc3RpbmdUYWdzTGlzdExpbWl0ID0gMTU7XG5cbiAgICBwcml2YXRlIGV4YWN0VGFnU2V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfdGFnczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF90YWdOYW1lQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KFxuICAgICAgICAnJyxcbiAgICAgICAgW3RoaXMudmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZC5iaW5kKHRoaXMpLCB0aGlzLnZhbGlkYXRlRW1wdHlUYWcsIHRoaXMudmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVyc10sXG4gICAgICAgIHRoaXMudmFsaWRhdGVJZk5vdEV4aXN0aW5nVGFnLmJpbmQodGhpcylcbiAgICApO1xuICAgIHByaXZhdGUgX3RhZ05hbWVDb250cm9sVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2V4aXN0aW5nVGFnczogVGFnRW50cnlbXTtcbiAgICBwcml2YXRlIF9pbml0aWFsRXhpc3RpbmdUYWdzOiBUYWdFbnRyeVtdO1xuICAgIHByaXZhdGUgX3RhZ05hbWVFcnJvck1lc3NhZ2VLZXkgPSAnJztcbiAgICBwcml2YXRlIF9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3R5cGluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZXhpc3RpbmdFeGFjdFRhZzogVGFnRW50cnk7XG4gICAgcHJpdmF0ZSBfZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZCgndGFnc0xpc3QnKVxuICAgIHByaXZhdGUgdGFnc0xpc3RFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3RhZ05hbWVJbnB1dCcpXG4gICAgcHJpdmF0ZSB0YWdOYW1lSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobmFtZTogc3RyaW5nKSA9PiBuYW1lLnRyaW0oKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlTm90Q2hhbmdlZCA9IHByZXZpb3VzID09PSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVOb3RDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlTm90Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlKChuYW1lOiBzdHJpbmcpID0+IChuYW1lID8gdGltZXIoMzAwKSA6IEVNUFRZKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5vblRhZ05hbWVDb250cm9sVmFsdWVDaGFuZ2UobmFtZSkpO1xuXG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpKTtcblxuICAgICAgICB0aGlzLnNldFRhZ05hbWVDb250cm9sRXJyb3JNZXNzYWdlS2V5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQubmV4dCgpO1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtY3JlYXRvci13aXRoLWV4aXN0aW5nLXRhZ3MtcGFuZWwnKVxuICAgIGdldCBob3N0Q2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2woKTogRm9ybUNvbnRyb2w8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lQ29udHJvbDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRhZ3MgZW1wdHkgYW5kIG5vbiBlZGl0YWJsZSBzdGF0ZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBnZXQgc2hvd0VtcHR5VGFnTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFncz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnRhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzKCk6IFRhZ0VudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzO1xuICAgIH1cblxuICAgIGdldCB0YWdOYW1lRXJyb3JNZXNzYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lRXJyb3JNZXNzYWdlS2V5O1xuICAgIH1cblxuICAgIGdldCBzcGlubmVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwaW5uZXJWaXNpYmxlO1xuICAgIH1cblxuICAgIGdldCB0eXBpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBpbmc7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0YWdzIHRvIHRvcCBsaXN0IHVzaW5nIHZhbHVlIHdoaWNoIGlzIHNldCBpbiBpbnB1dC4gQWRkaW5nIHRhZyBpcyBub3QgYWxsb3dlZCB3aGVuIHZhbHVlIGluIGlucHV0IGlzIGludmFsaWRcbiAgICAgKiBvciBpZiB1c2VyIGlzIHN0aWxsIHR5cGluZyB3aGF0IG1lYW5zIHRoYXQgdmFsaWRhdGlvbiBmb3IgaW5wdXQgaXMgbm90IGNhbGxlZCB5ZXQuXG4gICAgICovXG4gICAgYWRkVGFnKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3R5cGluZyAmJiAhdGhpcy50YWdOYW1lQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ3MgPSBbLi4udGhpcy50YWdzLCB0aGlzLnRhZ05hbWVDb250cm9sLnZhbHVlLnRyaW0oKV07XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFnTmFtZUlucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0YWcgZnJvbSB0b3AgbGlzdC4gSW4gY2FzZSB0aGF0IHRhZyB3YXMgcGFydCBvZiBzZWFyY2ggcmVzdWx0IHRoZW4gdGhhdCB0YWcgaXMgbW92ZWQgdG8gYm90dG9tIGxpc3RcbiAgICAgKiAobGlzdCBvZiBleGlzdGluZyB0YWdzKSBhZnRlciByZW1vdmluZyBzbyB1c2VyIGNhbiByZXNlbGVjdCBpdCBhZ2FpbiBsYXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWcgdGFnJ3MgbmFtZSB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRvcCBsaXN0LlxuICAgICAqL1xuICAgIHJlbW92ZVRhZyh0YWc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLnRhZ3MsIHRhZyk7XG4gICAgICAgIHRoaXMudGFncyA9IFsuLi50aGlzLnRhZ3NdO1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy51cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWcpO1xuICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuY2hlY2tTY3JvbGxiYXJWaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMudGFnc0NoYW5nZS5lbWl0KHRoaXMudGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdXNlciBzZWxlY3RzIGFueSB0YWcgZnJvbSBsaXN0IG9mIGV4aXN0aW5nIHRhZ3MuIEl0IG1vdmVzIHRhZyBmcm9tIGV4aXN0aW5nIHRhZ3MgbGlzdCB0byB0b3AgbGlzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWxlY3RlZFRhZyBjaGFuZ2VzXG4gICAgICovXG4gICAgYWRkRXhpc3RpbmdUYWdUb1RhZ3NUb0Fzc2lnbihzZWxlY3RlZFRhZzogVGFnRW50cnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT25seUNyZWF0ZU1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy50YWdzLnB1c2goc2VsZWN0ZWRUYWcuZW50cnkudGFnKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbUFycmF5KHRoaXMuZXhpc3RpbmdUYWdzLCBzZWxlY3RlZFRhZyk7XG4gICAgICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHRoaXMudGFncyA9IFsuLi50aGlzLnRhZ3NdO1xuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBjb21wb25lbnQgaXMgaW4gQ3JlYXRlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYENyZWF0ZWAgbW9kZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNPbmx5Q3JlYXRlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gVGFnc0NyZWF0b3JNb2RlLkNSRUFURTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVGFnTmFtZUNvbnRyb2xWYWx1ZUNoYW5nZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMubG9hZFRhZ3MobmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFncyhuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgIXRoaXMudGFnTmFtZUNvbnRyb2wuaGFzRXJyb3IoJ3NwZWNpYWxDaGFyYWN0ZXJzJykpIHtcbiAgICAgICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICAgICAgICBleGFjdFJlc3VsdDogdGhpcy50YWdTZXJ2aWNlLmZpbmRUYWdCeU5hbWUobmFtZSksXG4gICAgICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQ6IHRoaXMudGFnU2VydmljZS5zZWFyY2hUYWdzKG5hbWUsIERFRkFVTFRfVEFHU19TT1JUSU5HLCBmYWxzZSwgMCwgdGhpcy5leGlzdGluZ1RhZ3NMaXN0TGltaXQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJCksXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLl90eXBpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoeyBleGFjdFJlc3VsdCwgc2VhcmNoZWRSZXN1bHQgfTogeyBleGFjdFJlc3VsdDogVGFnRW50cnk7IHNlYXJjaGVkUmVzdWx0OiBUYWdQYWdpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4YWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ0V4YWN0VGFnID0gZXhhY3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFeGFjdFRhZ0Zyb21TZWFyY2hlZFJlc3VsdChzZWFyY2hlZFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLnVuc2hpZnQoZXhhY3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzID0gc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlQWxyZWFkeUFkZGVkVGFncyh0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhhY3RUYWdTZXQkLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKCdUQUcuVEFHU19DUkVBVE9SLkVSUk9SUy5GRVRDSF9UQUdTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRXhhY3RUYWdGcm9tU2VhcmNoZWRSZXN1bHQoc2VhcmNoZWRSZXN1bHQ6IFRhZ1BhZ2luZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBleGFjdFRhZ0luZGV4ID0gc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLmZpbmRJbmRleCgocm93KSA9PiB0aGlzLmNvbXBhcmVUYWdzKHJvdy5lbnRyeS50YWcsIHRoaXMuZXhpc3RpbmdFeGFjdFRhZy5lbnRyeS50YWcpKTtcblxuICAgICAgICBpZiAoZXhhY3RUYWdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZWFyY2hlZFJlc3VsdC5saXN0LmVudHJpZXMuc3BsaWNlKGV4YWN0VGFnSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUlmTm90RXhpc3RpbmdUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBPYnNlcnZhYmxlPFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdFRhZ1NldCQucGlwZShcbiAgICAgICAgICAgIG1hcDx2b2lkLCBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGw+KCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYXJlVGFncyh0YWdOYW1lQ29udHJvbC52YWx1ZSwgdGhpcy5leGlzdGluZ0V4YWN0VGFnPy5lbnRyeT8udGFnKSA/IHsgZHVwbGljYXRlZEV4aXN0aW5nVGFnOiB0cnVlIH0gOiBudWxsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZCh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ3Muc29tZSgodGFnKSA9PiB0aGlzLmNvbXBhcmVUYWdzKHRhZywgdGFnTmFtZUNvbnRyb2wudmFsdWUpKSA/IHsgZHVwbGljYXRlZEFkZGVkVGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVRhZ3ModGFnTmFtZTE/OiBzdHJpbmcsIHRhZ05hbWUyPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lMT8udHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IHRhZ05hbWUyPy50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRW1wdHlUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGFnTmFtZUNvbnRyb2wudmFsdWUubGVuZ3RoICYmICF0YWdOYW1lQ29udHJvbC52YWx1ZS50cmltKCkgPyB7IGVtcHR5VGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVycyh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNwZWNpYWxTeW1ib2xzUmVnZXggPSAvW3t9KCleJzpcIlxcXFx8PD4vPy4qXS87XG4gICAgICAgIHJldHVybiB0YWdOYW1lQ29udHJvbC52YWx1ZS5sZW5ndGggJiYgc3BlY2lhbFN5bWJvbHNSZWdleC50ZXN0KHRhZ05hbWVDb250cm9sLnZhbHVlKSA/IHsgc3BlY2lhbENoYXJhY3RlcnM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUVycm9yTWVzc2FnZUtleSA9IHRoaXMudGFnTmFtZUNvbnRyb2wuaW52YWxpZFxuICAgICAgICAgICAgPyBgVEFHLlRBR1NfQ1JFQVRPUi5FUlJPUlMuJHt0aGlzLm5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMuZ2V0KFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy50YWdOYW1lQ29udHJvbC5lcnJvcnMpWzBdIGFzIGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzXG4gICAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90YWdzTGlzdFNjcm9sbGJhclZpc2libGUgPSB0aGlzLnRhZ3NMaXN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IHRoaXMudGFnc0xpc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVRhZ0Zyb21BcnJheTxUPih0YWdzOiBUW10sIHRhZzogVCkge1xuICAgICAgICB0YWdzLnNwbGljZSh0YWdzLmluZGV4T2YodGFnKSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWc6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbnRyeUZvclRhZ0FkZGVkVG9FeGlzdGluZ1RhZ3MgPSB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzPy5maW5kKCh0YWdFbnRyeSkgPT4gdGFnRW50cnkuZW50cnkudGFnID09PSB0YWcpO1xuICAgICAgICBpZiAoZW50cnlGb3JUYWdBZGRlZFRvRXhpc3RpbmdUYWdzKSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy51bnNoaWZ0KGVudHJ5Rm9yVGFnQWRkZWRUb0V4aXN0aW5nVGFncyk7XG4gICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0V4YWN0VGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZyAhPT0gdGhpcy5leGlzdGluZ0V4YWN0VGFnLmVudHJ5LnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLmV4aXN0aW5nVGFncywgdGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0RXhpc3RpbmdUYWdzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdUYWdzLnVuc2hpZnQodGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydEV4aXN0aW5nVGFncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0RXhpc3RpbmdUYWdzKCkge1xuICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy5zb3J0KCh0YWdFbnRyeTEsIHRhZ0VudHJ5MikgPT4gdGFnRW50cnkxLmVudHJ5LnRhZy5sb2NhbGVDb21wYXJlKHRhZ0VudHJ5Mi5lbnRyeS50YWcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4Y2x1ZGVBbHJlYWR5QWRkZWRUYWdzKHRhZ3M6IFRhZ0VudHJ5W10pIHtcbiAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gIXRoaXMudGFncy5pbmNsdWRlcyh0YWcuZW50cnkudGFnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRhZ05hbWVJbnB1dCgpIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi10YWdzLWNyZWF0aW9uXCI+XG4gICAgPGRpdiAqbmdJZj1cInRhZ05hbWVDb250cm9sVmlzaWJsZVwiIGNsYXNzPVwiYWRmLXRhZy1uYW1lLWZpZWxkXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3RhZ05hbWVJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdGFnLXNlYXJjaC1maWVsZFwiXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0YWdOYW1lQ29udHJvbFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYWRkVGFnKClcIlxuICAgICAgICAgICAgYWRmLWF1dG8tZm9jdXNcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RBRy5UQUdTX0NSRUFUT1IuVEFHX1NFQVJDSF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidGFnTmFtZUNvbnRyb2wuaW52YWxpZCAmJiB0YWdOYW1lQ29udHJvbC50b3VjaGVkXCI+XG4gICAgICAgICAgICB7eyB0YWdOYW1lRXJyb3JNZXNzYWdlS2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiYWRmLW5vLXRhZ3MtbWVzc2FnZVwiICpuZ0lmPVwic2hvd0VtcHR5VGFnTWVzc2FnZVwiPlxuICAgICAgICB7eyAnVEFHLlRBR1NfQ1JFQVRPUi5OT19UQUdTX0NSRUFURUQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFncy1saXN0XCIgW2NsYXNzLmFkZi10YWdzLWxpc3QtZml4ZWRdPVwiIXRhZ05hbWVDb250cm9sVmlzaWJsZVwiICN0YWdzTGlzdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhZ3M/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxhZGYtZHluYW1pYy1jaGlwLWxpc3RcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10YWdzLWNoaXBzLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2NoaXBzXT1cInRhZ3NUb0Rpc3BsYXlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlRGVsZXRlXT1cImRpc2FibGVkVGFnc1JlbW92aW5nXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZENoaXApPVwicmVtb3ZlVGFnKCRldmVudClcIiAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFkZi1leGlzdGluZy10YWdzLXBhbmVsXCIgKm5nSWY9XCJleGlzdGluZ1RhZ3NQYW5lbFZpc2libGVcIj5cbiAgICA8c3BhblxuICAgICAgICAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSB8fCBleGlzdGluZ1RhZ3NcIlxuICAgICAgICBjbGFzcz1cImFkZi1jcmVhdGUtdGFnLWxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZFRhZygpXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJhZGRUYWcoKVwiXG4gICAgICAgIFtoaWRkZW5dPVwiIXRhZ05hbWVDb250cm9sLnZhbHVlIHx8IHRhZ05hbWVDb250cm9sLmludmFsaWQgfHwgdHlwaW5nXCJcbiAgICA+XG4gICAgICAgIHt7ICdUQUcuVEFHU19DUkVBVE9SLkNSRUFURV9UQUcnIHwgdHJhbnNsYXRlIDogeyB0YWc6IHRhZ05hbWVDb250cm9sLnZhbHVlIH0gfX1cbiAgICA8L3NwYW4+XG4gICAgPHAgKm5nSWY9XCIhc3Bpbm5lclZpc2libGUgJiYgZXhpc3RpbmdUYWdzXCIgY2xhc3M9XCJhZGYtZXhpc3RpbmctdGFncy1sYWJlbFwiPlxuICAgICAgICB7eyAoaXNPbmx5Q3JlYXRlTW9kZSgpID8gJ1RBRy5UQUdTX0NSRUFUT1IuRVhJU1RJTkdfVEFHUycgOiAnVEFHLlRBR1NfQ1JFQVRPUi5FWElTVElOR19UQUdTX1NFTEVDVElPTicpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFncy1saXN0XCI+XG4gICAgICAgIDxtYXQtbGlzdCAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSAmJiBleGlzdGluZ1RhZ3NcIiBbZGlzYWJsZWRdPVwiaXNPbmx5Q3JlYXRlTW9kZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWxpc3QtaXRlbSAqbmdGb3I9XCJsZXQgdGFnUm93IG9mIGV4aXN0aW5nVGFnc1wiIGNsYXNzPVwiYWRmLXRhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRXhpc3RpbmdUYWdUb1RhZ3NUb0Fzc2lnbih0YWdSb3cpXCI+XG4gICAgICAgICAgICAgICAge3sgdGFnUm93LmVudHJ5LnRhZyB9fVxuICAgICAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgPHAgKm5nSWY9XCIhZXhpc3RpbmdUYWdzPy5sZW5ndGhcIj57eyAnVEFHLlRBR1NfQ1JFQVRPUi5OT19FWElTVElOR19UQUdTJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAqbmdJZj1cInNwaW5uZXJWaXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRhZ3MtY3JlYXRvci1zcGlubmVyXCJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCI1MFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUQUcuVEFHU19DUkVBVE9SLlRBR1NfTE9BRElORycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -25,9 +25,9 @@ import { MatIconTestingModule } from '@angular/material/icon/testing';
25
25
  import { AlfrescoApiServiceMock } from '../mock';
26
26
  import * as i0 from "@angular/core";
27
27
  export class ContentTestingModule {
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
29
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: ContentTestingModule, imports: [NoopAnimationsModule, CoreModule, NoopAuthModule, NoopTranslateModule, ContentModule, MatIconTestingModule], exports: [NoopAnimationsModule, CoreModule, ContentModule] }); }
30
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentTestingModule, providers: [
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
29
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ContentTestingModule, imports: [NoopAnimationsModule, CoreModule, NoopAuthModule, NoopTranslateModule, ContentModule, MatIconTestingModule], exports: [NoopAnimationsModule, CoreModule, ContentModule] }); }
30
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentTestingModule, providers: [
31
31
  { provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
32
32
  {
33
33
  provide: APP_INITIALIZER,
@@ -37,7 +37,7 @@ export class ContentTestingModule {
37
37
  }
38
38
  ], imports: [NoopAnimationsModule, CoreModule, NoopAuthModule, NoopTranslateModule, ContentModule, MatIconTestingModule, NoopAnimationsModule, CoreModule, ContentModule] }); }
39
39
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentTestingModule, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentTestingModule, decorators: [{
41
41
  type: NgModule,
42
42
  args: [{
43
43
  imports: [NoopAnimationsModule, CoreModule, NoopAuthModule, NoopTranslateModule, ContentModule, MatIconTestingModule],
@@ -53,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
53
53
  exports: [NoopAnimationsModule, CoreModule, ContentModule]
54
54
  }]
55
55
  }] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC50ZXN0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGVzdGluZy9jb250ZW50LnRlc3RpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFlakQsTUFBTSxPQUFPLG9CQUFvQjs4R0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0IsWUFabkIsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLGFBVTFHLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxhQUFhOytHQUVoRCxvQkFBb0IsYUFYbEI7WUFDUCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7WUFDakU7Z0JBQ0ksT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFVBQVUsRUFBRSwyQkFBMkI7Z0JBQ3ZDLElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO2dCQUNuQyxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osWUFUUyxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFVMUcsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGFBQWE7OzJGQUVoRCxvQkFBb0I7a0JBYmhDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLENBQUM7b0JBQ3JILFNBQVMsRUFBRTt3QkFDUCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7d0JBQ2pFOzRCQUNJLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixVQUFVLEVBQUUsMkJBQTJCOzRCQUN2QyxJQUFJLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQzs0QkFDbkMsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7b0JBQ0QsT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQztpQkFDN0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlLCBBUFBfSU5JVElBTElaRVIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vb3BBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvcmVNb2R1bGUsIE5vb3BUcmFuc2xhdGVNb2R1bGUsIE5vb3BBdXRoTW9kdWxlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IENvbnRlbnRNb2R1bGUgfSBmcm9tICcuLi9jb250ZW50Lm1vZHVsZSc7XG5pbXBvcnQgeyB2ZXJzaW9uQ29tcGF0aWJpbGl0eUZhY3RvcnkgfSBmcm9tICcuLi92ZXJzaW9uLWNvbXBhdGliaWxpdHkvdmVyc2lvbi1jb21wYXRpYmlsaXR5LWZhY3RvcnknO1xuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWxmcmVzY28tYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmVyc2lvbkNvbXBhdGliaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vdmVyc2lvbi1jb21wYXRpYmlsaXR5L3ZlcnNpb24tY29tcGF0aWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEljb25UZXN0aW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbi90ZXN0aW5nJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZU1vY2sgfSBmcm9tICcuLi9tb2NrJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbTm9vcEFuaW1hdGlvbnNNb2R1bGUsIENvcmVNb2R1bGUsIE5vb3BBdXRoTW9kdWxlLCBOb29wVHJhbnNsYXRlTW9kdWxlLCBDb250ZW50TW9kdWxlLCBNYXRJY29uVGVzdGluZ01vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQWxmcmVzY29BcGlTZXJ2aWNlLCB1c2VDbGFzczogQWxmcmVzY29BcGlTZXJ2aWNlTW9jayB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiB2ZXJzaW9uQ29tcGF0aWJpbGl0eUZhY3RvcnksXG4gICAgICAgICAgICBkZXBzOiBbVmVyc2lvbkNvbXBhdGliaWxpdHlTZXJ2aWNlXSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGV4cG9ydHM6IFtOb29wQW5pbWF0aW9uc01vZHVsZSwgQ29yZU1vZHVsZSwgQ29udGVudE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudFRlc3RpbmdNb2R1bGUge31cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC50ZXN0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGVzdGluZy9jb250ZW50LnRlc3RpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFlakQsTUFBTSxPQUFPLG9CQUFvQjsrR0FBcEIsb0JBQW9CO2dIQUFwQixvQkFBb0IsWUFabkIsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLGFBVTFHLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxhQUFhO2dIQUVoRCxvQkFBb0IsYUFYbEI7WUFDUCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7WUFDakU7Z0JBQ0ksT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFVBQVUsRUFBRSwyQkFBMkI7Z0JBQ3ZDLElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO2dCQUNuQyxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osWUFUUyxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFVMUcsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGFBQWE7OzRGQUVoRCxvQkFBb0I7a0JBYmhDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLENBQUM7b0JBQ3JILFNBQVMsRUFBRTt3QkFDUCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7d0JBQ2pFOzRCQUNJLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixVQUFVLEVBQUUsMkJBQTJCOzRCQUN2QyxJQUFJLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQzs0QkFDbkMsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7b0JBQ0QsT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQztpQkFDN0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlLCBBUFBfSU5JVElBTElaRVIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vb3BBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvcmVNb2R1bGUsIE5vb3BUcmFuc2xhdGVNb2R1bGUsIE5vb3BBdXRoTW9kdWxlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IENvbnRlbnRNb2R1bGUgfSBmcm9tICcuLi9jb250ZW50Lm1vZHVsZSc7XG5pbXBvcnQgeyB2ZXJzaW9uQ29tcGF0aWJpbGl0eUZhY3RvcnkgfSBmcm9tICcuLi92ZXJzaW9uLWNvbXBhdGliaWxpdHkvdmVyc2lvbi1jb21wYXRpYmlsaXR5LWZhY3RvcnknO1xuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWxmcmVzY28tYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmVyc2lvbkNvbXBhdGliaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vdmVyc2lvbi1jb21wYXRpYmlsaXR5L3ZlcnNpb24tY29tcGF0aWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEljb25UZXN0aW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbi90ZXN0aW5nJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZU1vY2sgfSBmcm9tICcuLi9tb2NrJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbTm9vcEFuaW1hdGlvbnNNb2R1bGUsIENvcmVNb2R1bGUsIE5vb3BBdXRoTW9kdWxlLCBOb29wVHJhbnNsYXRlTW9kdWxlLCBDb250ZW50TW9kdWxlLCBNYXRJY29uVGVzdGluZ01vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQWxmcmVzY29BcGlTZXJ2aWNlLCB1c2VDbGFzczogQWxmcmVzY29BcGlTZXJ2aWNlTW9jayB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiB2ZXJzaW9uQ29tcGF0aWJpbGl0eUZhY3RvcnksXG4gICAgICAgICAgICBkZXBzOiBbVmVyc2lvbkNvbXBhdGliaWxpdHlTZXJ2aWNlXSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGV4cG9ydHM6IFtOb29wQW5pbWF0aW9uc01vZHVsZSwgQ29yZU1vZHVsZSwgQ29udGVudE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudFRlc3RpbmdNb2R1bGUge31cbiJdfQ==
@@ -264,10 +264,10 @@ export class TreeComponent {
264
264
  isRegularNode(node) {
265
265
  return node.nodeType !== TreeNodeType.LoadMoreNode;
266
266
  }
267
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TreeComponent, deps: [{ token: i1.TreeService }, { token: i2.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component }); }
268
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: TreeComponent, isStandalone: true, selector: "adf-tree", inputs: { emptyContentTemplate: "emptyContentTemplate", nodeActionsMenuTemplate: "nodeActionsMenuTemplate", stickyHeader: "stickyHeader", selectableNodes: "selectableNodes", displayName: "displayName", loadMoreSuffix: "loadMoreSuffix", expandIcon: "expandIcon", collapseIcon: "collapseIcon", contextMenuOptions: "contextMenuOptions" }, outputs: { paginationChanged: "paginationChanged", contextMenuOptionSelected: "contextMenuOptionSelected" }, host: { properties: { "class.adf-tree-sticky-header": "this.stickyHeader" }, classAttribute: "adf-tree" }, viewQueries: [{ propertyName: "nodeCheckboxes", predicate: MatCheckbox, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"(loadingRoot$ | async) === false; else loadingSpinner\">\n <ng-container *ngIf=\"!this.isEmpty(); else emptyContent\">\n <div class=\"adf-tree-row adf-tree-header\" *ngIf=\"displayName\">\n <div class=\"adf-tree-cell adf-tree-cell-header\" data-automation-id=\"tree-header-display-name\">\n <span class=\"adf-tree-cell-value\">\n {{ displayName | translate }}\n </span>\n </div>\n </div>\n <mat-tree\n class=\"adf-tree-body\"\n [dataSource]=\"treeService\"\n [treeControl]=\"treeService.treeControl\">\n <mat-tree-node\n class=\"adf-tree-load-more-row\"\n [attr.data-automation-id]=\"'loadMoreSubnodes_' + node.parentId\"\n *matTreeNodeDef=\"let node when isLoadMoreNode\"\n matTreeNodePadding>\n <div class=\"adf-tree-expand-collapse-container\">\n <button class=\"adf-tree-load-more-button\" mat-icon-button (click)=\"loadMoreSubnodes(node)\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else loadMoreIcon\" />\n <ng-template #loadMoreIcon>\n <adf-icon [value]=\"'chevron_right'\" />\n </ng-template>\n </button>\n </div>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"loadMoreSubnodes(node)\"\n (click)=\"loadMoreSubnodes(node)\">\n {{ 'ADF-TREE.LOAD-MORE-BUTTON' | translate: { name: loadMoreSuffix } }}\n </span>\n </div>\n </mat-tree-node>\n <mat-tree-node\n class=\"adf-tree-row\"\n [attr.data-automation-id]=\"'node_' + node.id\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [adf-context-menu]=\"contextMenuOptions\"\n [adf-context-menu-enabled]=\"!!contextMenuOptions\"\n (contextmenu)=\"contextMenuSource = node\">\n <div class=\"adf-tree-expand-collapse-container\">\n <button *ngIf=\"node.hasChildren\"\n class=\"adf-tree-expand-collapse-button\"\n (click)=\"expandCollapseNode(node)\"\n mat-icon-button>\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else expandCollapseIcon\" />\n <ng-template #expandCollapseIcon>\n <adf-icon [value]=\"expandCollapseIconValue(node)\" />\n </ng-template>\n </button>\n </div>\n <ng-container *ngIf=\"selectableNodes\">\n <mat-checkbox *ngIf=\"node.hasChildren; else noChildrenNodeCheckbox\"\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"descendantsAllSelected(node)\"\n [indeterminate]=\"descendantsPartiallySelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"has-children-node-checkbox\" />\n <ng-template #noChildrenNodeCheckbox>\n <mat-checkbox\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"treeNodesSelection.isSelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"no-children-node-checkbox\" />\n </ng-template>\n </ng-container>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n [class.adf-tree-clickable-cell-value]=\"node.hasChildren\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"expandCollapseNode(node)\"\n (click)=\"expandCollapseNode(node)\">\n {{ node.nodeName }}\n </span>\n </div>\n <div class=\"adf-tree-actions\">\n <button mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n [attr.id]=\"'action_menu_right_' + node.id\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template\n [ngTemplateOutlet]=\"nodeActionsMenuTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\" />\n </mat-menu>\n </div>\n </mat-tree-node>\n </mat-tree>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyContent>\n <ng-template [ngTemplateOutlet]=\"emptyContentTemplate\" />\n</ng-template>\n\n<ng-template #loadingSpinner>\n <div class=\"adf-tree-loading-spinner-container\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n</ng-template>\n", styles: [".adf-tree-sticky-header{display:flex;flex-direction:column;height:100%}.adf-tree-sticky-header mat-tree{overflow-y:scroll}.adf-tree-load-more-row .adf-tree-cell-value,.adf-tree-clickable-cell-value{cursor:pointer}.adf-tree-row,.adf-tree-load-more-row{transition:all .3s ease;display:flex;align-items:center;padding-left:15px;padding-right:15px;transition-property:background-color;border-bottom:1px solid var(--adf-theme-foreground-text-color-007);min-height:56px;-webkit-user-select:none;user-select:none}.adf-tree-row .adf-tree-expand-collapse-container,.adf-tree-load-more-row .adf-tree-expand-collapse-container{min-width:55px}.adf-tree-row:hover,.adf-tree-load-more-row:hover{background-color:var(--adf-theme-background-hover-color)}.adf-tree-row:hover .adf-tree-actions,.adf-tree-load-more-row:hover .adf-tree-actions{display:flex}.adf-tree-row:focus,.adf-tree-load-more-row:focus{background-color:var(--adf-theme-background-hover-color);outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-row .adf-tree-expand-collapse-button,.adf-tree-row .adf-tree-load-more-button,.adf-tree-load-more-row .adf-tree-expand-collapse-button,.adf-tree-load-more-row .adf-tree-load-more-button{display:flex;align-items:center;justify-content:center;margin-left:15px}.adf-tree-row .adf-tree-cell,.adf-tree-load-more-row .adf-tree-cell{color:var(--adf-theme-foreground-text-color);width:100%}.adf-tree-row .adf-tree-cell .adf-tree-cell-value,.adf-tree-load-more-row .adf-tree-cell .adf-tree-cell-value{display:inline-block;padding:10px;word-break:break-word}.adf-tree-header{display:flex;width:fit-content;min-width:100%;box-sizing:border-box}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value){cursor:pointer;position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:56px;font-size:12px;color:var(--adf-theme-foreground-text-color);box-sizing:border-box;padding-top:12px}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value):focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-loading-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i5.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
267
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeComponent, deps: [{ token: i1.TreeService }, { token: i2.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component }); }
268
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TreeComponent, isStandalone: true, selector: "adf-tree", inputs: { emptyContentTemplate: "emptyContentTemplate", nodeActionsMenuTemplate: "nodeActionsMenuTemplate", stickyHeader: "stickyHeader", selectableNodes: "selectableNodes", displayName: "displayName", loadMoreSuffix: "loadMoreSuffix", expandIcon: "expandIcon", collapseIcon: "collapseIcon", contextMenuOptions: "contextMenuOptions" }, outputs: { paginationChanged: "paginationChanged", contextMenuOptionSelected: "contextMenuOptionSelected" }, host: { properties: { "class.adf-tree-sticky-header": "this.stickyHeader" }, classAttribute: "adf-tree" }, viewQueries: [{ propertyName: "nodeCheckboxes", predicate: MatCheckbox, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"(loadingRoot$ | async) === false; else loadingSpinner\">\n <ng-container *ngIf=\"!this.isEmpty(); else emptyContent\">\n <div class=\"adf-tree-row adf-tree-header\" *ngIf=\"displayName\">\n <div class=\"adf-tree-cell adf-tree-cell-header\" data-automation-id=\"tree-header-display-name\">\n <span class=\"adf-tree-cell-value\">\n {{ displayName | translate }}\n </span>\n </div>\n </div>\n <mat-tree\n class=\"adf-tree-body\"\n [dataSource]=\"treeService\"\n [treeControl]=\"treeService.treeControl\">\n <mat-tree-node\n class=\"adf-tree-load-more-row\"\n [attr.data-automation-id]=\"'loadMoreSubnodes_' + node.parentId\"\n *matTreeNodeDef=\"let node when isLoadMoreNode\"\n matTreeNodePadding>\n <div class=\"adf-tree-expand-collapse-container\">\n <button class=\"adf-tree-load-more-button\" mat-icon-button (click)=\"loadMoreSubnodes(node)\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else loadMoreIcon\" />\n <ng-template #loadMoreIcon>\n <adf-icon [value]=\"'chevron_right'\" />\n </ng-template>\n </button>\n </div>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"loadMoreSubnodes(node)\"\n (click)=\"loadMoreSubnodes(node)\">\n {{ 'ADF-TREE.LOAD-MORE-BUTTON' | translate: { name: loadMoreSuffix } }}\n </span>\n </div>\n </mat-tree-node>\n <mat-tree-node\n class=\"adf-tree-row\"\n [attr.data-automation-id]=\"'node_' + node.id\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [adf-context-menu]=\"contextMenuOptions\"\n [adf-context-menu-enabled]=\"!!contextMenuOptions\"\n (contextmenu)=\"contextMenuSource = node\">\n <div class=\"adf-tree-expand-collapse-container\">\n <button *ngIf=\"node.hasChildren\"\n class=\"adf-tree-expand-collapse-button\"\n (click)=\"expandCollapseNode(node)\"\n mat-icon-button>\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else expandCollapseIcon\" />\n <ng-template #expandCollapseIcon>\n <adf-icon [value]=\"expandCollapseIconValue(node)\" />\n </ng-template>\n </button>\n </div>\n <ng-container *ngIf=\"selectableNodes\">\n <mat-checkbox *ngIf=\"node.hasChildren; else noChildrenNodeCheckbox\"\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"descendantsAllSelected(node)\"\n [indeterminate]=\"descendantsPartiallySelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"has-children-node-checkbox\" />\n <ng-template #noChildrenNodeCheckbox>\n <mat-checkbox\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"treeNodesSelection.isSelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"no-children-node-checkbox\" />\n </ng-template>\n </ng-container>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n [class.adf-tree-clickable-cell-value]=\"node.hasChildren\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"expandCollapseNode(node)\"\n (click)=\"expandCollapseNode(node)\">\n {{ node.nodeName }}\n </span>\n </div>\n <div class=\"adf-tree-actions\">\n <button mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n [attr.id]=\"'action_menu_right_' + node.id\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template\n [ngTemplateOutlet]=\"nodeActionsMenuTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\" />\n </mat-menu>\n </div>\n </mat-tree-node>\n </mat-tree>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyContent>\n <ng-template [ngTemplateOutlet]=\"emptyContentTemplate\" />\n</ng-template>\n\n<ng-template #loadingSpinner>\n <div class=\"adf-tree-loading-spinner-container\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n</ng-template>\n", styles: [".adf-tree-sticky-header{display:flex;flex-direction:column;height:100%}.adf-tree-sticky-header mat-tree{overflow-y:scroll}.adf-tree-load-more-row .adf-tree-cell-value,.adf-tree-clickable-cell-value{cursor:pointer}.adf-tree-row,.adf-tree-load-more-row{transition:all .3s ease;display:flex;align-items:center;padding-left:15px;padding-right:15px;transition-property:background-color;border-bottom:1px solid var(--adf-theme-foreground-text-color-007);min-height:56px;-webkit-user-select:none;user-select:none}.adf-tree-row .adf-tree-expand-collapse-container,.adf-tree-load-more-row .adf-tree-expand-collapse-container{min-width:55px}.adf-tree-row:hover,.adf-tree-load-more-row:hover{background-color:var(--adf-theme-background-hover-color)}.adf-tree-row:hover .adf-tree-actions,.adf-tree-load-more-row:hover .adf-tree-actions{display:flex}.adf-tree-row:focus,.adf-tree-load-more-row:focus{background-color:var(--adf-theme-background-hover-color);outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-row .adf-tree-expand-collapse-button,.adf-tree-row .adf-tree-load-more-button,.adf-tree-load-more-row .adf-tree-expand-collapse-button,.adf-tree-load-more-row .adf-tree-load-more-button{display:flex;align-items:center;justify-content:center;margin-left:15px}.adf-tree-row .adf-tree-cell,.adf-tree-load-more-row .adf-tree-cell{color:var(--adf-theme-foreground-text-color);width:100%}.adf-tree-row .adf-tree-cell .adf-tree-cell-value,.adf-tree-load-more-row .adf-tree-cell .adf-tree-cell-value{display:inline-block;padding:10px;word-break:break-word}.adf-tree-header{display:flex;width:fit-content;min-width:100%;box-sizing:border-box}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value){cursor:pointer;position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:56px;font-size:12px;color:var(--adf-theme-foreground-text-color);box-sizing:border-box;padding-top:12px}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value):focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-loading-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i5.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
269
269
  }
270
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TreeComponent, decorators: [{
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeComponent, decorators: [{
271
271
  type: Component,
272
272
  args: [{ selector: 'adf-tree', standalone: true, imports: [
273
273
  CommonModule,
@@ -310,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
310
310
  }], contextMenuOptions: [{
311
311
  type: Input
312
312
  }] } });
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9jb21wb25lbnRzL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQVksWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FB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Q3hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixhQUFhO3FCQUNoQixRQUdLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxpQkFDWixpQkFBaUIsQ0FBQyxJQUFJO3FIQUs5QixvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBS0MsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQU1DLFlBQVk7c0JBRmxCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsOEJBQThCO2dCQUtwQyxlQUFlO3NCQURyQixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxVQUFVO3NCQURoQixLQUFLO2dCQUtDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBS0MsaUJBQWlCO3NCQUR2QixNQUFNO2dCQUtBLHlCQUF5QjtzQkFEL0IsTUFBTTtnQkFJQSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLFdBQVc7Z0JBa0JyQixrQkFBa0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJlZU5vZGUsIFRyZWVOb2RlVHlwZSB9IGZyb20gJy4uL21vZGVscy90cmVlLW5vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRleHRNZW51RGlyZWN0aXZlLCBJY29uQ29tcG9uZW50LCBQYWdpbmF0aW9uTW9kZWwsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBUcmVlUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3gsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgVHJlZUNvbnRleHRNZW51UmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtY29udGV4dC1tZW51LXJlc3VsdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0VHJlZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi10cmVlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdFRyZWVNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi10cmVlJyB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudDxUIGV4dGVuZHMgVHJlZU5vZGU+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBUZW1wbGF0ZVJlZiB0byBwcm92aWRlIGVtcHR5IHRlbXBsYXRlIHdoZW4gbm8gbm9kZXMgYXJlIGxvYWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5Q29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFRlbXBsYXRlUmVmIHRvIHByb3ZpZGUgY29udGV4dCBtZW51IGl0ZW1zIGZvciBjb250ZXh0IG1lbnUgZGlzcGxheWVkIG9uIGVhY2ggcm93Ki9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBub2RlQWN0aW9uc01lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBWYXJpYWJsZSBkZWZpbmluZyBpZiB0cmVlIGhlYWRlciBzaG91bGQgYmUgc3RpY2t5LiBCeSBkZWZhdWx0IHNldCB0byBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtdHJlZS1zdGlja3ktaGVhZGVyJylcbiAgICBwdWJsaWMgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVmFyaWFibGUgZGVmaW5pbmcgaWYgdHJlZSBub2RlcyBzaG91bGQgYmUgc2VsZWN0YWJsZS4gQnkgZGVmYXVsdCBzZXQgdG8gZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RhYmxlTm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUcmVlIGRpc3BsYXkgbmFtZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogTG9hZCBtb3JlIHN1ZmZpeCBmb3IgbG9hZCBtb3JlIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRNb3JlU3VmZml4OiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaGFzIGNoaWxkcmVuIGFuZCBpcyBjb2xsYXBzZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGNoZXZyb25fcmlnaHQgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBleHBhbmRJY29uOiBzdHJpbmcgPSAnY2hldnJvbl9yaWdodCc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaXMgZXhwYW5kZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGV4cGFuZF9tb3JlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sbGFwc2VJY29uOiBzdHJpbmcgPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBwYWdpbmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFnaW5hdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uTW9kZWw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbnkgY29udGV4dCBtZW51IG9wdGlvbiBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjb250ZXh0TWVudU9wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlQ29udGV4dE1lbnVSZXN1bHQ8VD4+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKE1hdENoZWNrYm94KVxuICAgIHB1YmxpYyBub2RlQ2hlY2tib3hlczogUXVlcnlMaXN0PE1hdENoZWNrYm94PjtcblxuICAgIHByaXZhdGUgbG9hZGluZ1Jvb3RTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudVNvdXJjZTogVDtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudU9wdGlvbnM6IGFueVtdO1xuICAgIHByaXZhdGUgY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHB1YmxpYyBsb2FkaW5nUm9vdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHVibGljIHRyZWVOb2Rlc1NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSwgdHJ1ZSwgKG5vZGUxOiBULCBub2RlMjogVCkgPT4gbm9kZTEuaWQgPT09IG5vZGUyLmlkKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmVlU2VydmljZTogVHJlZVNlcnZpY2U8VD4sIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlKSB7fVxuXG4gICAgc2V0IGNvbnRleHRNZW51U291cmNlKGNvbnRleHRNZW51U291cmNlOiBUKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRNZW51U291cmNlID0gY29udGV4dE1lbnVTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEFycmF5IG9mIGNvbnRleHQgbWVudSBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgZm9yIGVhY2ggcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbnRleHRNZW51T3B0aW9ucyhjb250ZXh0TWVudU9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICBpZiAoY29udGV4dE1lbnVPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnMgPSBjb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5zdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWVyZ2UoLi4udGhpcy5jb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zdWJqZWN0KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb250ZXh0TWVudU9wdGlvbnNDaGFuZ2VkJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25TZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogdGhpcy5fY29udGV4dE1lbnVTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudU9wdGlvbjogb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVPcHRpb25zID0gY29udGV4dE1lbnVPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRleHRNZW51T3B0aW9ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnM7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZ1Jvb3QkID0gdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVHJlZSgwLCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5wYWdpbmF0aW9uU2l6ZSk7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxUPikgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRyZWVTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIG5vZGUgaXMgTG9hZE1vcmVOb2RlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBfaWR4ICh1bnVzZWQpXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjaGVja2VkXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgcHVibGljIGlzTG9hZE1vcmVOb2RlKF9pZHg6IG51bWJlciwgbm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLkxvYWRNb3JlTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdHJlZSBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMgYm9vbGVhblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhY3Rpb24gaWNvbiBiYXNlZCBvbiBleHBhbmRlZC9jb2xsYXBzZWQgbm9kZSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY2hlY2tlZFxuICAgICAqIEByZXR1cm5zIGNvbGxhcHNlIG9yIGV4cGFuZCBpY29uXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGU6IFQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gdGhpcy5jb2xsYXBzZUljb24gOiB0aGlzLmV4cGFuZEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSB0cmVlLCByb290IG5vZGVzIGFyZSByZWxvYWRlZCwgdHJlZSBzZWxlY3Rpb24gaXMgY2xlYXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBza2lwQ291bnQgTnVtYmVyIG9mIHJvb3Qgbm9kZXMgdG8gc2tpcC5cbiAgICAgKiBAcGFyYW0gbWF4SXRlbXMgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgcmV0dXJuZWQgZnJvbSBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSBzZWFyY2hUZXJtIFNwZWNpZmllcyBpZiBjYXRlZ29yaWVzIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgYnkgbmFtZSBvciBub3QuIElmIG5vdCBzcGVjaWZpZWQgdGhlbiByZXR1cm5zIGNhdGVnb3JpZXMgd2l0aG91dCBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHJlZnJlc2hUcmVlKHNraXBDb3VudD86IG51bWJlciwgbWF4SXRlbXM/OiBudW1iZXIsIHNlYXJjaFRlcm0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKCctcm9vdC0nLCBza2lwQ291bnQsIG1heEl0ZW1zLCBzZWFyY2hUZXJtKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU5vZGVzID0gcmVzcG9uc2UuZW50cmllcztcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlZC5lbWl0KHJlc3BvbnNlLnBhZ2luYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIG9yIGV4cGFuZGluZyB0aGUgbm9kZSBiYXNlZCBvbiBpdHMgY3VycmVudCBzdGF0ZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjb2xsYXBzZWQvZXhwYW5kZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4gJiYgIW5vZGUuaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKG5vZGUuaWQsIDAsIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLnBhZ2luYXRpb25TaXplKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmROb2RlKG5vZGUsIHJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy90aW1lb3V0IHVzZWQgdG8gdXBkYXRlIG5vZGVDaGVja2JveGVzIHF1ZXJ5IGxpc3QgYWZ0ZXIgbmV3IG5vZGVzIGFyZSBhZGRlZCBzbyB0aGV5IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIG1vcmUgc3Vibm9kZSBmb3IgYSBnaXZlbiBwYXJlbnQgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZE1vcmVTdWJub2Rlcyhub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZTogVCA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0UGFyZW50Tm9kZShub2RlLnBhcmVudElkKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICBjb25zdCBsb2FkZWRDaGlsZHJlbjogbnVtYmVyID0gdGhpcy50cmVlU2VydmljZS5nZXRDaGlsZHJlbihwYXJlbnROb2RlKS5sZW5ndGg7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRTdWJOb2RlcyhwYXJlbnROb2RlLmlkLCBsb2FkZWRDaGlsZHJlbiwgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UucGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5hcHBlbmROb2RlcyhwYXJlbnROb2RlLCByZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKHBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGltZW91dCB1c2VkIHRvIHVwZGF0ZSBub2RlQ2hlY2tib3hlcyBxdWVyeSBsaXN0IGFmdGVyIG5ldyBub2RlcyBhcmUgYWRkZWQgc28gdGhleSBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5zZWxlY3QoLi4ucmVzcG9uc2UuZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gbm9kZSBpcyBzZWxlY3RlZCBpdCBzZWxlY3RzIGFsbCBpdHMgZGVzY2VuZGFudHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ob2RlU2VsZWN0ZWQobm9kZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICBpZiAoZGVzY2VuZGFudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxuICAgICAgICAgICAgICAgID8gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxuICAgICAgICAgICAgICAgIDogdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzY2VuZGFudHMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRzU2VsZWN0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbGwgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJiBkZXNjZW5kYW50cy5ldmVyeSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHNvbWUgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKSAmJlxuICAgICAgICAgICAgZGVzY2VuZGFudHMuc29tZSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUGFyZW50c1NlbGVjdGlvbihub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIGxldCBwYXJlbnQ6IFQgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFBhcmVudE5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSb290Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xuICAgICAgICAgICAgcGFyZW50ID0gdGhpcy50cmVlU2VydmljZS5nZXRQYXJlbnROb2RlKHBhcmVudC5wYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUm9vdE5vZGVTZWxlY3Rpb24obm9kZTogVCk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlU2VsZWN0ZWQ6IGJvb2xlYW4gPSB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xuICAgICAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPSB0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XG4gICAgICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5vZGVTZWxlY3RlZCAmJiBkZXNjQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25UcmVlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbkNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPFQ+KTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmZvckVhY2goKHVuc2VsZWN0ZWROb2RlOiBUKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZ3VsYXJOb2RlKHVuc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gdW5zZWxlY3RlZE5vZGUuaWQpLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5hZGRlZC5mb3JFYWNoKChzZWxlY3RlZE5vZGU6IFQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVndWxhck5vZGUoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gc2VsZWN0ZWROb2RlLmlkKS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1JlZ3VsYXJOb2RlKG5vZGU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IFRyZWVOb2RlVHlwZS5Mb2FkTW9yZU5vZGU7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nUm9vdCQgfCBhc3luYykgPT09IGZhbHNlOyBlbHNlIGxvYWRpbmdTcGlubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0aGlzLmlzRW1wdHkoKTsgZWxzZSBlbXB0eUNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLXJvdyBhZGYtdHJlZS1oZWFkZXJcIiAqbmdJZj1cImRpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtY2VsbCBhZGYtdHJlZS1jZWxsLWhlYWRlclwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInRyZWUtaGVhZGVyLWRpc3BsYXktbmFtZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5TmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC10cmVlXG4gICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWJvZHlcIlxuICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidHJlZVNlcnZpY2VcIlxuICAgICAgICAgICAgW3RyZWVDb250cm9sXT1cInRyZWVTZXJ2aWNlLnRyZWVDb250cm9sXCI+XG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtbG9hZC1tb3JlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidsb2FkTW9yZVN1Ym5vZGVzXycgKyBub2RlLnBhcmVudElkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZSB3aGVuIGlzTG9hZE1vcmVOb2RlXCJcbiAgICAgICAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZi10cmVlLWxvYWQtbW9yZS1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmlzTG9hZGluZzsgZWxzZSBsb2FkTW9yZUljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCInY2hldnJvbl9yaWdodCdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1UUkVFLkxPQUQtTU9SRS1CVVRUT04nIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGxvYWRNb3JlU3VmZml4IH0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidub2RlXycgKyBub2RlLmlkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXG4gICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnVdPVwiY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudS1lbmFibGVkXT1cIiEhY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnVTb3VyY2UgPSBub2RlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtZXhwYW5kLWNvbGxhcHNlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuaXNMb2FkaW5nOyBlbHNlIGV4cGFuZENvbGxhcHNlSWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGFuZENvbGxhcHNlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWljb24gW3ZhbHVlXT1cImV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RhYmxlTm9kZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW47IGVsc2Ugbm9DaGlsZHJlbk5vZGVDaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk5vZGVTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiaGFzLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQ2hpbGRyZW5Ob2RlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ob2RlU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm5vLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi10cmVlLWNsaWNrYWJsZS1jZWxsLXZhbHVlXT1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLm5vZGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfcmlnaHRfJyArIG5vZGUuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUFjdGlvbnNNZW51VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUgfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC10cmVlLW5vZGU+XG4gICAgICAgIDwvbWF0LXRyZWU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eUNvbnRlbnQ+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5Q29udGVudFRlbXBsYXRlXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1NwaW5uZXI+XG4gICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWxvYWRpbmctc3Bpbm5lci1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9jb21wb25lbnRzL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQVksWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FB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Q3hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixhQUFhO3FCQUNoQixRQUdLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxpQkFDWixpQkFBaUIsQ0FBQyxJQUFJO3FIQUs5QixvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBS0MsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQU1DLFlBQVk7c0JBRmxCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsOEJBQThCO2dCQUtwQyxlQUFlO3NCQURyQixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxVQUFVO3NCQURoQixLQUFLO2dCQUtDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBS0MsaUJBQWlCO3NCQUR2QixNQUFNO2dCQUtBLHlCQUF5QjtzQkFEL0IsTUFBTTtnQkFJQSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLFdBQVc7Z0JBa0JyQixrQkFBa0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJlZU5vZGUsIFRyZWVOb2RlVHlwZSB9IGZyb20gJy4uL21vZGVscy90cmVlLW5vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRleHRNZW51RGlyZWN0aXZlLCBJY29uQ29tcG9uZW50LCBQYWdpbmF0aW9uTW9kZWwsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBUcmVlUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3gsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgVHJlZUNvbnRleHRNZW51UmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtY29udGV4dC1tZW51LXJlc3VsdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0VHJlZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi10cmVlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdFRyZWVNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi10cmVlJyB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudDxUIGV4dGVuZHMgVHJlZU5vZGU+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBUZW1wbGF0ZVJlZiB0byBwcm92aWRlIGVtcHR5IHRlbXBsYXRlIHdoZW4gbm8gbm9kZXMgYXJlIGxvYWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5Q29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFRlbXBsYXRlUmVmIHRvIHByb3ZpZGUgY29udGV4dCBtZW51IGl0ZW1zIGZvciBjb250ZXh0IG1lbnUgZGlzcGxheWVkIG9uIGVhY2ggcm93Ki9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBub2RlQWN0aW9uc01lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBWYXJpYWJsZSBkZWZpbmluZyBpZiB0cmVlIGhlYWRlciBzaG91bGQgYmUgc3RpY2t5LiBCeSBkZWZhdWx0IHNldCB0byBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtdHJlZS1zdGlja3ktaGVhZGVyJylcbiAgICBwdWJsaWMgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVmFyaWFibGUgZGVmaW5pbmcgaWYgdHJlZSBub2RlcyBzaG91bGQgYmUgc2VsZWN0YWJsZS4gQnkgZGVmYXVsdCBzZXQgdG8gZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RhYmxlTm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUcmVlIGRpc3BsYXkgbmFtZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogTG9hZCBtb3JlIHN1ZmZpeCBmb3IgbG9hZCBtb3JlIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRNb3JlU3VmZml4OiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaGFzIGNoaWxkcmVuIGFuZCBpcyBjb2xsYXBzZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGNoZXZyb25fcmlnaHQgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBleHBhbmRJY29uOiBzdHJpbmcgPSAnY2hldnJvbl9yaWdodCc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaXMgZXhwYW5kZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGV4cGFuZF9tb3JlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sbGFwc2VJY29uOiBzdHJpbmcgPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBwYWdpbmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFnaW5hdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uTW9kZWw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbnkgY29udGV4dCBtZW51IG9wdGlvbiBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjb250ZXh0TWVudU9wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlQ29udGV4dE1lbnVSZXN1bHQ8VD4+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKE1hdENoZWNrYm94KVxuICAgIHB1YmxpYyBub2RlQ2hlY2tib3hlczogUXVlcnlMaXN0PE1hdENoZWNrYm94PjtcblxuICAgIHByaXZhdGUgbG9hZGluZ1Jvb3RTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudVNvdXJjZTogVDtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudU9wdGlvbnM6IGFueVtdO1xuICAgIHByaXZhdGUgY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHB1YmxpYyBsb2FkaW5nUm9vdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHVibGljIHRyZWVOb2Rlc1NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSwgdHJ1ZSwgKG5vZGUxOiBULCBub2RlMjogVCkgPT4gbm9kZTEuaWQgPT09IG5vZGUyLmlkKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmVlU2VydmljZTogVHJlZVNlcnZpY2U8VD4sIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlKSB7fVxuXG4gICAgc2V0IGNvbnRleHRNZW51U291cmNlKGNvbnRleHRNZW51U291cmNlOiBUKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRNZW51U291cmNlID0gY29udGV4dE1lbnVTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEFycmF5IG9mIGNvbnRleHQgbWVudSBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgZm9yIGVhY2ggcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbnRleHRNZW51T3B0aW9ucyhjb250ZXh0TWVudU9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICBpZiAoY29udGV4dE1lbnVPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnMgPSBjb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5zdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWVyZ2UoLi4udGhpcy5jb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zdWJqZWN0KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb250ZXh0TWVudU9wdGlvbnNDaGFuZ2VkJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25TZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogdGhpcy5fY29udGV4dE1lbnVTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudU9wdGlvbjogb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVPcHRpb25zID0gY29udGV4dE1lbnVPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRleHRNZW51T3B0aW9ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnM7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZ1Jvb3QkID0gdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVHJlZSgwLCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5wYWdpbmF0aW9uU2l6ZSk7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxUPikgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRyZWVTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIG5vZGUgaXMgTG9hZE1vcmVOb2RlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBfaWR4ICh1bnVzZWQpXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjaGVja2VkXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgcHVibGljIGlzTG9hZE1vcmVOb2RlKF9pZHg6IG51bWJlciwgbm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLkxvYWRNb3JlTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdHJlZSBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMgYm9vbGVhblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhY3Rpb24gaWNvbiBiYXNlZCBvbiBleHBhbmRlZC9jb2xsYXBzZWQgbm9kZSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY2hlY2tlZFxuICAgICAqIEByZXR1cm5zIGNvbGxhcHNlIG9yIGV4cGFuZCBpY29uXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGU6IFQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gdGhpcy5jb2xsYXBzZUljb24gOiB0aGlzLmV4cGFuZEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSB0cmVlLCByb290IG5vZGVzIGFyZSByZWxvYWRlZCwgdHJlZSBzZWxlY3Rpb24gaXMgY2xlYXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBza2lwQ291bnQgTnVtYmVyIG9mIHJvb3Qgbm9kZXMgdG8gc2tpcC5cbiAgICAgKiBAcGFyYW0gbWF4SXRlbXMgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgcmV0dXJuZWQgZnJvbSBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSBzZWFyY2hUZXJtIFNwZWNpZmllcyBpZiBjYXRlZ29yaWVzIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgYnkgbmFtZSBvciBub3QuIElmIG5vdCBzcGVjaWZpZWQgdGhlbiByZXR1cm5zIGNhdGVnb3JpZXMgd2l0aG91dCBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHJlZnJlc2hUcmVlKHNraXBDb3VudD86IG51bWJlciwgbWF4SXRlbXM/OiBudW1iZXIsIHNlYXJjaFRlcm0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKCctcm9vdC0nLCBza2lwQ291bnQsIG1heEl0ZW1zLCBzZWFyY2hUZXJtKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU5vZGVzID0gcmVzcG9uc2UuZW50cmllcztcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlZC5lbWl0KHJlc3BvbnNlLnBhZ2luYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIG9yIGV4cGFuZGluZyB0aGUgbm9kZSBiYXNlZCBvbiBpdHMgY3VycmVudCBzdGF0ZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjb2xsYXBzZWQvZXhwYW5kZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4gJiYgIW5vZGUuaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKG5vZGUuaWQsIDAsIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLnBhZ2luYXRpb25TaXplKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmROb2RlKG5vZGUsIHJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy90aW1lb3V0IHVzZWQgdG8gdXBkYXRlIG5vZGVDaGVja2JveGVzIHF1ZXJ5IGxpc3QgYWZ0ZXIgbmV3IG5vZGVzIGFyZSBhZGRlZCBzbyB0aGV5IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIG1vcmUgc3Vibm9kZSBmb3IgYSBnaXZlbiBwYXJlbnQgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZE1vcmVTdWJub2Rlcyhub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZTogVCA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0UGFyZW50Tm9kZShub2RlLnBhcmVudElkKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICBjb25zdCBsb2FkZWRDaGlsZHJlbjogbnVtYmVyID0gdGhpcy50cmVlU2VydmljZS5nZXRDaGlsZHJlbihwYXJlbnROb2RlKS5sZW5ndGg7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRTdWJOb2RlcyhwYXJlbnROb2RlLmlkLCBsb2FkZWRDaGlsZHJlbiwgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UucGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5hcHBlbmROb2RlcyhwYXJlbnROb2RlLCByZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKHBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGltZW91dCB1c2VkIHRvIHVwZGF0ZSBub2RlQ2hlY2tib3hlcyBxdWVyeSBsaXN0IGFmdGVyIG5ldyBub2RlcyBhcmUgYWRkZWQgc28gdGhleSBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5zZWxlY3QoLi4ucmVzcG9uc2UuZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gbm9kZSBpcyBzZWxlY3RlZCBpdCBzZWxlY3RzIGFsbCBpdHMgZGVzY2VuZGFudHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ob2RlU2VsZWN0ZWQobm9kZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICBpZiAoZGVzY2VuZGFudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxuICAgICAgICAgICAgICAgID8gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxuICAgICAgICAgICAgICAgIDogdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzY2VuZGFudHMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRzU2VsZWN0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbGwgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJiBkZXNjZW5kYW50cy5ldmVyeSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHNvbWUgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKSAmJlxuICAgICAgICAgICAgZGVzY2VuZGFudHMuc29tZSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUGFyZW50c1NlbGVjdGlvbihub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIGxldCBwYXJlbnQ6IFQgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFBhcmVudE5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSb290Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xuICAgICAgICAgICAgcGFyZW50ID0gdGhpcy50cmVlU2VydmljZS5nZXRQYXJlbnROb2RlKHBhcmVudC5wYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUm9vdE5vZGVTZWxlY3Rpb24obm9kZTogVCk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlU2VsZWN0ZWQ6IGJvb2xlYW4gPSB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xuICAgICAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPSB0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XG4gICAgICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5vZGVTZWxlY3RlZCAmJiBkZXNjQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25UcmVlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbkNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPFQ+KTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmZvckVhY2goKHVuc2VsZWN0ZWROb2RlOiBUKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZ3VsYXJOb2RlKHVuc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gdW5zZWxlY3RlZE5vZGUuaWQpLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5hZGRlZC5mb3JFYWNoKChzZWxlY3RlZE5vZGU6IFQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVndWxhck5vZGUoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gc2VsZWN0ZWROb2RlLmlkKS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1JlZ3VsYXJOb2RlKG5vZGU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IFRyZWVOb2RlVHlwZS5Mb2FkTW9yZU5vZGU7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nUm9vdCQgfCBhc3luYykgPT09IGZhbHNlOyBlbHNlIGxvYWRpbmdTcGlubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0aGlzLmlzRW1wdHkoKTsgZWxzZSBlbXB0eUNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLXJvdyBhZGYtdHJlZS1oZWFkZXJcIiAqbmdJZj1cImRpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtY2VsbCBhZGYtdHJlZS1jZWxsLWhlYWRlclwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInRyZWUtaGVhZGVyLWRpc3BsYXktbmFtZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5TmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC10cmVlXG4gICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWJvZHlcIlxuICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidHJlZVNlcnZpY2VcIlxuICAgICAgICAgICAgW3RyZWVDb250cm9sXT1cInRyZWVTZXJ2aWNlLnRyZWVDb250cm9sXCI+XG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtbG9hZC1tb3JlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidsb2FkTW9yZVN1Ym5vZGVzXycgKyBub2RlLnBhcmVudElkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZSB3aGVuIGlzTG9hZE1vcmVOb2RlXCJcbiAgICAgICAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZi10cmVlLWxvYWQtbW9yZS1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmlzTG9hZGluZzsgZWxzZSBsb2FkTW9yZUljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCInY2hldnJvbl9yaWdodCdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1UUkVFLkxPQUQtTU9SRS1CVVRUT04nIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGxvYWRNb3JlU3VmZml4IH0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidub2RlXycgKyBub2RlLmlkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXG4gICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnVdPVwiY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudS1lbmFibGVkXT1cIiEhY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnVTb3VyY2UgPSBub2RlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtZXhwYW5kLWNvbGxhcHNlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuaXNMb2FkaW5nOyBlbHNlIGV4cGFuZENvbGxhcHNlSWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGFuZENvbGxhcHNlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWljb24gW3ZhbHVlXT1cImV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RhYmxlTm9kZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW47IGVsc2Ugbm9DaGlsZHJlbk5vZGVDaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk5vZGVTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiaGFzLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQ2hpbGRyZW5Ob2RlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ob2RlU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm5vLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi10cmVlLWNsaWNrYWJsZS1jZWxsLXZhbHVlXT1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLm5vZGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfcmlnaHRfJyArIG5vZGUuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUFjdGlvbnNNZW51VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUgfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC10cmVlLW5vZGU+XG4gICAgICAgIDwvbWF0LXRyZWU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eUNvbnRlbnQ+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5Q29udGVudFRlbXBsYXRlXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1NwaW5uZXI+XG4gICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWxvYWRpbmctc3Bpbm5lci1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==