@alfresco/adf-content-services 8.1.0-16295248176 → 8.1.0-16320806191

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 (425) hide show
  1. package/bundles/assets/adf-content-services/i18n/de.json +1 -3
  2. package/bundles/assets/adf-content-services/i18n/en.json +1 -3
  3. package/bundles/assets/adf-content-services/i18n/es.json +1 -3
  4. package/bundles/assets/adf-content-services/i18n/fr.json +1 -3
  5. package/bundles/assets/adf-content-services/i18n/it.json +1 -3
  6. package/bundles/assets/adf-content-services/i18n/pl.json +1 -3
  7. package/bundles/assets/adf-content-services/i18n/pt.json +1 -3
  8. package/esm2022/adf-content-services.mjs +5 -0
  9. package/esm2022/lib/agent/index.mjs +18 -0
  10. package/esm2022/lib/agent/public-api.mjs +18 -0
  11. package/esm2022/lib/agent/services/agent.service.mjs +60 -0
  12. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
  13. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
  14. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +77 -0
  15. package/esm2022/lib/api-factories/index.mjs +18 -0
  16. package/esm2022/lib/api-factories/public-api.mjs +19 -0
  17. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
  18. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +77 -0
  19. package/esm2022/lib/aspect-list/aspect-list.component.mjs +139 -0
  20. package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
  21. package/esm2022/lib/aspect-list/index.mjs +18 -0
  22. package/esm2022/lib/aspect-list/public-api.mjs +24 -0
  23. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
  24. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
  25. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
  26. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
  27. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
  28. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +166 -0
  29. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
  30. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +65 -0
  31. package/esm2022/lib/breadcrumb/index.mjs +18 -0
  32. package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
  33. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
  34. package/esm2022/lib/category/categories-management/categories-management.component.mjs +308 -0
  35. package/esm2022/lib/category/category.module.mjs +33 -0
  36. package/esm2022/lib/category/index.mjs +18 -0
  37. package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
  38. package/esm2022/lib/category/public-api.mjs +23 -0
  39. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
  40. package/esm2022/lib/category/services/category.service.mjs +159 -0
  41. package/esm2022/lib/common/events/file.event.mjs +46 -0
  42. package/esm2022/lib/common/index.mjs +18 -0
  43. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
  44. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
  45. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
  46. package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
  47. package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
  48. package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
  49. package/esm2022/lib/common/models/file.model.mjs +53 -0
  50. package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
  51. package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
  52. package/esm2022/lib/common/public-api.mjs +37 -0
  53. package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
  54. package/esm2022/lib/common/services/content.service.mjs +180 -0
  55. package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
  56. package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
  57. package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
  58. package/esm2022/lib/common/services/people-content.service.mjs +138 -0
  59. package/esm2022/lib/common/services/rendition.service.mjs +270 -0
  60. package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
  61. package/esm2022/lib/common/services/sites.service.mjs +243 -0
  62. package/esm2022/lib/common/services/upload.service.mjs +391 -0
  63. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +54 -0
  64. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +490 -0
  65. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +128 -0
  66. package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
  67. package/esm2022/lib/content-metadata/index.mjs +18 -0
  68. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
  69. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
  70. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
  71. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
  72. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
  73. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
  74. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
  75. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
  76. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
  77. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
  78. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
  79. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
  80. package/esm2022/lib/content-metadata/public-api.mjs +31 -0
  81. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
  82. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
  83. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
  84. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
  85. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
  86. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
  87. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
  88. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
  89. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
  90. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
  91. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
  92. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +617 -0
  93. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
  94. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
  95. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +205 -0
  96. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
  97. package/esm2022/lib/content-node-selector/index.mjs +18 -0
  98. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
  99. package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
  100. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
  101. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +287 -0
  102. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
  103. package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
  104. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
  105. package/esm2022/lib/content-node-share/index.mjs +18 -0
  106. package/esm2022/lib/content-node-share/public-api.mjs +22 -0
  107. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
  108. package/esm2022/lib/content-type/content-type-dialog.component.mjs +57 -0
  109. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
  110. package/esm2022/lib/content-type/content-type.service.mjs +52 -0
  111. package/esm2022/lib/content-type/index.mjs +20 -0
  112. package/esm2022/lib/content.module.mjs +277 -0
  113. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +51 -0
  114. package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
  115. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
  116. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
  117. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
  118. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
  119. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +146 -0
  120. package/esm2022/lib/dialogs/index.mjs +18 -0
  121. package/esm2022/lib/dialogs/library/library.dialog.mjs +224 -0
  122. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +115 -0
  123. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  124. package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
  125. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
  126. package/esm2022/lib/directives/content-directive.module.mjs +75 -0
  127. package/esm2022/lib/directives/index.mjs +18 -0
  128. package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
  129. package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
  130. package/esm2022/lib/directives/node-counter.directive.mjs +59 -0
  131. package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
  132. package/esm2022/lib/directives/node-download.directive.mjs +138 -0
  133. package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
  134. package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
  135. package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
  136. package/esm2022/lib/directives/public-api.mjs +28 -0
  137. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
  138. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
  139. package/esm2022/lib/document-list/components/document-list.component.mjs +965 -0
  140. package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
  141. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +42 -0
  142. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
  143. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +131 -0
  144. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +91 -0
  145. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +86 -0
  146. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +118 -0
  147. package/esm2022/lib/document-list/components/node.event.mjs +30 -0
  148. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
  149. package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
  150. package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
  151. package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
  152. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
  153. package/esm2022/lib/document-list/document-list.module.mjs +75 -0
  154. package/esm2022/lib/document-list/index.mjs +18 -0
  155. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
  156. package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
  157. package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
  158. package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
  159. package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
  160. package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
  161. package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
  162. package/esm2022/lib/document-list/public-api.mjs +47 -0
  163. package/esm2022/lib/document-list/services/custom-resources.service.mjs +378 -0
  164. package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
  165. package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
  166. package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
  167. package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
  168. package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
  169. package/esm2022/lib/group/index.mjs +18 -0
  170. package/esm2022/lib/group/public-api.mjs +18 -0
  171. package/esm2022/lib/group/services/group.service.mjs +84 -0
  172. package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
  173. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
  174. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
  175. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
  176. package/esm2022/lib/interfaces/index.mjs +18 -0
  177. package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
  178. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
  179. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
  180. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
  181. package/esm2022/lib/interfaces/public-api.mjs +23 -0
  182. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
  183. package/esm2022/lib/legal-hold/index.mjs +18 -0
  184. package/esm2022/lib/legal-hold/public-api.mjs +18 -0
  185. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
  186. package/esm2022/lib/material.module.mjs +183 -0
  187. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
  188. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
  189. package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
  190. package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
  191. package/esm2022/lib/mock/index.mjs +18 -0
  192. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
  193. package/esm2022/lib/mock/public-api.mjs +27 -0
  194. package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
  195. package/esm2022/lib/mock/search-query.mock.mjs +40 -0
  196. package/esm2022/lib/mock/search.component.mock.mjs +165 -0
  197. package/esm2022/lib/mock/search.service.mock.mjs +61 -0
  198. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
  199. package/esm2022/lib/new-version-uploader/index.mjs +18 -0
  200. package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
  201. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
  202. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +74 -0
  203. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
  204. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
  205. package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
  206. package/esm2022/lib/node-comments/index.mjs +18 -0
  207. package/esm2022/lib/node-comments/node-comments.component.mjs +50 -0
  208. package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
  209. package/esm2022/lib/node-comments/public-api.mjs +20 -0
  210. package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
  211. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
  212. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +123 -0
  213. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +102 -0
  214. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +69 -0
  215. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
  216. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
  217. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
  218. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +102 -0
  219. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +87 -0
  220. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
  221. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
  222. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
  223. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
  224. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +111 -0
  225. package/esm2022/lib/permission-manager/index.mjs +18 -0
  226. package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
  227. package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
  228. package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
  229. package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
  230. package/esm2022/lib/permission-manager/public-api.mjs +36 -0
  231. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
  232. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
  233. package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
  234. package/esm2022/lib/pipes/index.mjs +18 -0
  235. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
  236. package/esm2022/lib/pipes/public-api.mjs +19 -0
  237. package/esm2022/lib/prediction/index.mjs +18 -0
  238. package/esm2022/lib/prediction/public-api.mjs +18 -0
  239. package/esm2022/lib/prediction/services/index.mjs +18 -0
  240. package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
  241. package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
  242. package/esm2022/lib/search/components/index.mjs +43 -0
  243. package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
  244. package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
  245. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +158 -0
  246. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
  247. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +169 -0
  248. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +46 -0
  249. package/esm2022/lib/search/components/search-control.component.mjs +180 -0
  250. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
  251. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
  252. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
  253. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +196 -0
  254. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
  255. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
  256. package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
  257. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +223 -0
  258. package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
  259. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +132 -0
  260. package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
  261. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +45 -0
  262. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +80 -0
  263. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
  264. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +154 -0
  265. package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
  266. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +104 -0
  267. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +109 -0
  268. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
  269. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +63 -0
  270. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +43 -0
  271. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +109 -0
  272. package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
  273. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +122 -0
  274. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
  275. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
  276. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +63 -0
  277. package/esm2022/lib/search/components/search-form/index.mjs +18 -0
  278. package/esm2022/lib/search/components/search-form/search-form.component.mjs +52 -0
  279. package/esm2022/lib/search/components/search-input/index.mjs +18 -0
  280. package/esm2022/lib/search/components/search-input/search-input.component.mjs +108 -0
  281. package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
  282. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +163 -0
  283. package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
  284. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +154 -0
  285. package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
  286. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
  287. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
  288. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
  289. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
  290. package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
  291. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
  292. package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
  293. package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
  294. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +145 -0
  295. package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
  296. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +119 -0
  297. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
  298. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
  299. package/esm2022/lib/search/components/search-text/index.mjs +18 -0
  300. package/esm2022/lib/search/components/search-text/search-text.component.mjs +134 -0
  301. package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
  302. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
  303. package/esm2022/lib/search/components/search.component.mjs +152 -0
  304. package/esm2022/lib/search/forms/index.mjs +19 -0
  305. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
  306. package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
  307. package/esm2022/lib/search/index.mjs +18 -0
  308. package/esm2022/lib/search/mocks/index.mjs +18 -0
  309. package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
  310. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
  311. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
  312. package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
  313. package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
  314. package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
  315. package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
  316. package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
  317. package/esm2022/lib/search/models/index.mjs +34 -0
  318. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
  319. package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
  320. package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
  321. package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
  322. package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
  323. package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
  324. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
  325. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
  326. package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
  327. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
  328. package/esm2022/lib/search/public-api.mjs +24 -0
  329. package/esm2022/lib/search/search-configuration.token.mjs +19 -0
  330. package/esm2022/lib/search/search.module.mjs +192 -0
  331. package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
  332. package/esm2022/lib/search/services/index.mjs +24 -0
  333. package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
  334. package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
  335. package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
  336. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
  337. package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
  338. package/esm2022/lib/search/services/search.service.mjs +89 -0
  339. package/esm2022/lib/search-ai/index.mjs +18 -0
  340. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
  341. package/esm2022/lib/search-ai/public-api.mjs +19 -0
  342. package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
  343. package/esm2022/lib/security/index.mjs +18 -0
  344. package/esm2022/lib/security/public-api.mjs +18 -0
  345. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
  346. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
  347. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
  348. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +43 -0
  349. package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
  350. package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
  351. package/esm2022/lib/services/index.mjs +18 -0
  352. package/esm2022/lib/services/public-api.mjs +18 -0
  353. package/esm2022/lib/tag/index.mjs +18 -0
  354. package/esm2022/lib/tag/public-api.mjs +24 -0
  355. package/esm2022/lib/tag/services/tag.service.mjs +171 -0
  356. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +114 -0
  357. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
  358. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
  359. package/esm2022/lib/tag/tag.module.mjs +37 -0
  360. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
  361. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +370 -0
  362. package/esm2022/lib/testing/content.testing.module.mjs +56 -0
  363. package/esm2022/lib/tree/components/tree.component.mjs +312 -0
  364. package/esm2022/lib/tree/index.mjs +18 -0
  365. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
  366. package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
  367. package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
  368. package/esm2022/lib/tree/public-api.mjs +23 -0
  369. package/esm2022/lib/tree/services/tree.service.mjs +134 -0
  370. package/esm2022/lib/tree/tree.module.mjs +33 -0
  371. package/esm2022/lib/tree-view/components/tree-view.component.mjs +75 -0
  372. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
  373. package/esm2022/lib/tree-view/index.mjs +18 -0
  374. package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
  375. package/esm2022/lib/tree-view/public-api.mjs +22 -0
  376. package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
  377. package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
  378. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
  379. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +190 -0
  380. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +92 -0
  381. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
  382. package/esm2022/lib/upload/components/upload-button.component.mjs +133 -0
  383. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
  384. package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
  385. package/esm2022/lib/upload/components/upload-version-button.component.mjs +54 -0
  386. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
  387. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
  388. package/esm2022/lib/upload/index.mjs +18 -0
  389. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
  390. package/esm2022/lib/upload/public-api.mjs +29 -0
  391. package/esm2022/lib/upload/upload.module.mjs +72 -0
  392. package/esm2022/lib/version-compatibility/index.mjs +18 -0
  393. package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
  394. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
  395. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
  396. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
  397. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
  398. package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
  399. package/esm2022/lib/version-manager/index.mjs +18 -0
  400. package/esm2022/lib/version-manager/public-api.mjs +23 -0
  401. package/esm2022/lib/version-manager/version-comparison.component.mjs +42 -0
  402. package/esm2022/lib/version-manager/version-list.component.mjs +215 -0
  403. package/esm2022/lib/version-manager/version-manager.component.mjs +145 -0
  404. package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
  405. package/esm2022/lib/version-manager/version-upload.component.mjs +154 -0
  406. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
  407. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +408 -0
  408. package/esm2022/lib/viewer/index.mjs +18 -0
  409. package/esm2022/lib/viewer/public-api.mjs +19 -0
  410. package/esm2022/public-api.mjs +56 -0
  411. package/fesm2022/adf-content-services.mjs +827 -870
  412. package/fesm2022/adf-content-services.mjs.map +1 -1
  413. package/lib/aspect-list/aspect-list.component.d.ts +0 -4
  414. package/lib/aspect-list/public-api.d.ts +0 -1
  415. package/lib/aspect-list/services/aspect-list.service.d.ts +4 -6
  416. package/lib/category/categories-management/categories-management.component.d.ts +0 -4
  417. package/lib/content.module.d.ts +2 -2
  418. package/lib/dialogs/dialog.module.d.ts +5 -6
  419. package/lib/dialogs/download-zip/download-zip.dialog.d.ts +1 -1
  420. package/lib/dialogs/download-zip/download-zip.dialog.module.d.ts +6 -2
  421. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  422. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  423. package/lib/version-manager/version-list.component.scss +2 -3
  424. package/package.json +5 -3
  425. package/lib/aspect-list/interfaces/custom-aspect-paging.interface.d.ts +0 -21
@@ -0,0 +1,256 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { MatDialog } from '@angular/material/dialog';
18
+ import { EventEmitter, Injectable, Output } from '@angular/core';
19
+ import { ThumbnailService, TranslationService } from '@alfresco/adf-core';
20
+ import { Subject, throwError } from 'rxjs';
21
+ import { AllowableOperationsEnum } from '../common/models/allowable-operations.enum';
22
+ import { ContentService } from '../common/services/content.service';
23
+ import { DocumentListService } from '../document-list/services/document-list.service';
24
+ import { ContentNodeSelectorComponent } from './content-node-selector.component';
25
+ import { NodeAction } from '../document-list/models/node-action.enum';
26
+ import { NodeLockDialogComponent } from '../dialogs/node-lock/node-lock.dialog';
27
+ import { switchMap } from 'rxjs/operators';
28
+ import { SitesService } from '../common/services/sites.service';
29
+ import * as i0 from "@angular/core";
30
+ import * as i1 from "@angular/material/dialog";
31
+ import * as i2 from "../common/services/content.service";
32
+ import * as i3 from "../document-list/services/document-list.service";
33
+ import * as i4 from "../common/services/sites.service";
34
+ import * as i5 from "@alfresco/adf-core";
35
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
36
+ export class ContentNodeDialogService {
37
+ static { this.nonDocumentSiteContent = ['blog', 'calendar', 'dataLists', 'discussions', 'links', 'wiki']; }
38
+ constructor(dialog, contentService, documentListService, siteService, translation, thumbnailService) {
39
+ this.dialog = dialog;
40
+ this.contentService = contentService;
41
+ this.documentListService = documentListService;
42
+ this.siteService = siteService;
43
+ this.translation = translation;
44
+ this.thumbnailService = thumbnailService;
45
+ /** Emitted when an error occurs. */
46
+ this.error = new EventEmitter();
47
+ }
48
+ /**
49
+ * Opens a file browser at a chosen folder location.
50
+ * shows files and folders in the dialog search result.
51
+ *
52
+ * @param folderNodeId ID of the folder to use
53
+ * @returns Information about the selected file(s)
54
+ */
55
+ openFileBrowseDialogByFolderId(folderNodeId) {
56
+ return this.documentListService
57
+ .getFolderNode(folderNodeId)
58
+ .pipe(switchMap((nodeEntry) => this.openUploadFileDialog(NodeAction.CHOOSE, nodeEntry.entry, true)));
59
+ }
60
+ /**
61
+ * Opens a lock node dialog.
62
+ *
63
+ * @param contentEntry Node to lock
64
+ * @returns Error/status message (if any)
65
+ */
66
+ openLockNodeDialog(contentEntry) {
67
+ const observable = new Subject();
68
+ if (this.contentService.hasAllowableOperations(contentEntry, AllowableOperationsEnum.LOCK)) {
69
+ this.dialog.open(NodeLockDialogComponent, {
70
+ data: {
71
+ node: contentEntry,
72
+ onError: (error) => {
73
+ this.error.emit(error);
74
+ observable.error(error);
75
+ }
76
+ },
77
+ width: '400px'
78
+ });
79
+ }
80
+ else {
81
+ observable.error('OPERATION.FAIL.NODE.NO_PERMISSION');
82
+ }
83
+ return observable;
84
+ }
85
+ /**
86
+ * Opens a file browser at a chosen site location.
87
+ * shows files and folders in the dialog search result.
88
+ *
89
+ * @returns Information about the selected file(s)
90
+ */
91
+ openFileBrowseDialogBySite() {
92
+ return this.siteService
93
+ .getSites()
94
+ .pipe(switchMap((response) => this.openFileBrowseDialogByFolderId(response.list.entries[0].entry.guid)));
95
+ }
96
+ /**
97
+ * Opens a file browser at a default myFile location.
98
+ * shows files and folders in the dialog search result.
99
+ *
100
+ * @returns Information about the selected file(s)
101
+ */
102
+ openFileBrowseDialogByDefaultLocation() {
103
+ return this.openFileBrowseDialogByFolderId('-my-');
104
+ }
105
+ /**
106
+ * Opens a folder browser at a chosen site location.
107
+ *
108
+ * @returns Information about the selected folder(s)
109
+ */
110
+ openFolderBrowseDialogBySite() {
111
+ return this.openFolderBrowseDialogByFolderId('-my-');
112
+ }
113
+ /**
114
+ * Opens a folder browser at a chosen folder location.
115
+ *
116
+ * @param folderNodeId ID of the folder to use
117
+ * @returns Information about the selected folder(s)
118
+ */
119
+ openFolderBrowseDialogByFolderId(folderNodeId) {
120
+ return this.documentListService
121
+ .getFolderNode(folderNodeId)
122
+ .pipe(switchMap((node) => this.openUploadFolderDialog(NodeAction.CHOOSE, node.entry)));
123
+ }
124
+ /**
125
+ * Opens a dialog to copy or move an item to a new location.
126
+ *
127
+ * @param action Name of the action (eg, "Copy" or "Move") to show in the title
128
+ * @param contentEntry Item to be copied or moved
129
+ * @param permission Permission for the operation
130
+ * @param excludeSiteContent The site content that should be filtered out
131
+ * @returns Information about files that were copied/moved
132
+ */
133
+ openCopyMoveDialog(action, contentEntry, permission, excludeSiteContent) {
134
+ if (this.contentService.hasAllowableOperations(contentEntry, permission)) {
135
+ const select = new Subject();
136
+ const data = {
137
+ title: this.getTitleTranslation(action, contentEntry.name),
138
+ actionName: action,
139
+ selectionMode: 'single',
140
+ currentFolderId: contentEntry.parentId,
141
+ imageResolver: this.imageResolver.bind(this),
142
+ where: '(isFolder=true)',
143
+ isSelectionValid: this.isCopyMoveSelectionValid.bind(this),
144
+ excludeSiteContent: excludeSiteContent || ContentNodeDialogService.nonDocumentSiteContent,
145
+ select
146
+ };
147
+ const dialogRef = this.openContentNodeDialog(data, 'adf-content-node-selector-dialog', '630px');
148
+ dialogRef.afterClosed().subscribe({ next: () => select.complete() });
149
+ return select;
150
+ }
151
+ else {
152
+ const errors = new Error(JSON.stringify({ error: { statusCode: 403 } }));
153
+ return throwError(errors);
154
+ }
155
+ }
156
+ /**
157
+ * Gets the translation of the dialog title.
158
+ *
159
+ * @param action Name of the action to display in the dialog title
160
+ * @param name Name of the item on which the action is being performed
161
+ * @returns Translated version of the title
162
+ */
163
+ getTitleTranslation(action, name) {
164
+ return this.translation.instant(`NODE_SELECTOR.${action.toUpperCase()}_ITEM`, { name });
165
+ }
166
+ /**
167
+ * Opens a dialog to choose folders to upload.
168
+ *
169
+ * @param action Name of the action to show in the title
170
+ * @param contentEntry Item to upload
171
+ * @returns Information about the chosen folder(s)
172
+ */
173
+ openUploadFolderDialog(action, contentEntry) {
174
+ const select = new Subject();
175
+ const data = {
176
+ title: this.getTitleTranslation(action, this.translation.instant('DROPDOWN.MY_FILES_OPTION')),
177
+ actionName: action,
178
+ selectionMode: 'single',
179
+ currentFolderId: contentEntry.id,
180
+ imageResolver: this.imageResolver.bind(this),
181
+ isSelectionValid: this.hasAllowableOperationsOnNodeFolder.bind(this),
182
+ where: '(isFolder=true)',
183
+ select
184
+ };
185
+ const dialogRef = this.openContentNodeDialog(data, 'adf-content-node-selector-dialog', '630px');
186
+ dialogRef.afterClosed().subscribe({ next: () => select.complete() });
187
+ return select;
188
+ }
189
+ /**
190
+ * Opens a dialog to choose a file to upload.
191
+ *
192
+ * @param action Name of the action to show in the title
193
+ * @param contentEntry Item to upload
194
+ * @param showFilesInResult Show files in dialog search result
195
+ * @returns Information about the chosen file(s)
196
+ */
197
+ openUploadFileDialog(action, contentEntry, showFilesInResult = false) {
198
+ const select = new Subject();
199
+ const data = {
200
+ title: this.getTitleTranslation(action, this.translation.instant('DROPDOWN.MY_FILES_OPTION')),
201
+ actionName: action,
202
+ selectionMode: 'single',
203
+ currentFolderId: contentEntry.id,
204
+ imageResolver: this.imageResolver.bind(this),
205
+ isSelectionValid: (entry) => entry.isFile,
206
+ select,
207
+ showFilesInResult
208
+ };
209
+ const dialogRef = this.openContentNodeDialog(data, 'adf-content-node-selector-dialog', '630px');
210
+ dialogRef.afterClosed().subscribe({ next: () => select.complete() });
211
+ return select;
212
+ }
213
+ openContentNodeDialog(data, panelClass, width) {
214
+ return this.dialog.open(ContentNodeSelectorComponent, {
215
+ data,
216
+ panelClass,
217
+ width,
218
+ disableClose: true
219
+ });
220
+ }
221
+ imageResolver(row) {
222
+ const entry = row.node.entry;
223
+ if (!this.contentService.hasAllowableOperations(entry, 'create')) {
224
+ if (this.isNodeFolder(entry)) {
225
+ return this.thumbnailService.getMimeTypeIcon('disable/folder');
226
+ }
227
+ }
228
+ return null;
229
+ }
230
+ hasAllowableOperationsOnNodeFolder(entry) {
231
+ return this.isNodeFolder(entry) && this.contentService.hasAllowableOperations(entry, 'create');
232
+ }
233
+ isNodeFolder(entry) {
234
+ return entry.isFolder;
235
+ }
236
+ isCopyMoveSelectionValid(entry) {
237
+ return this.hasEntityCreatePermission(entry) && !this.isSite(entry);
238
+ }
239
+ hasEntityCreatePermission(entry) {
240
+ return this.contentService.hasAllowableOperations(entry, 'create');
241
+ }
242
+ isSite(entry) {
243
+ return !!entry.guid || entry.nodeType === 'st:site' || entry.nodeType === 'st:sites';
244
+ }
245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeDialogService, deps: [{ token: i1.MatDialog }, { token: i2.ContentService }, { token: i3.DocumentListService }, { token: i4.SitesService }, { token: i5.TranslationService }, { token: i5.ThumbnailService }], target: i0.ɵɵFactoryTarget.Injectable }); }
246
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeDialogService, providedIn: 'root' }); }
247
+ }
248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeDialogService, decorators: [{
249
+ type: Injectable,
250
+ args: [{
251
+ providedIn: 'root'
252
+ }]
253
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.ContentService }, { type: i3.DocumentListService }, { type: i4.SitesService }, { type: i5.TranslationService }, { type: i5.ThumbnailService }], propDecorators: { error: [{
254
+ type: Output
255
+ }] } });
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1ub2RlLWRpYWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW5vZGUtc2VsZWN0b3IvY29udGVudC1ub2RlLWRpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7OztBQUtoRSxrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLHdCQUF3QjthQUMxQiwyQkFBc0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxP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IEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHVtYm5haWxTZXJ2aWNlLCBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2hhcmVEYXRhUm93IH0gZnJvbSAnLi4vZG9jdW1lbnQtbGlzdC9kYXRhL3NoYXJlLWRhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IEFsbG93YWJsZU9wZXJhdGlvbnNFbnVtIH0gZnJvbSAnLi4vY29tbW9uL21vZGVscy9hbGxvd2FibGUtb3BlcmF0aW9ucy5lbnVtJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlLCBOb2RlRW50cnksIFNpdGVQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IERvY3VtZW50TGlzdFNlcnZpY2UgfSBmcm9tICcuLi9kb2N1bWVudC1saXN0L3NlcnZpY2VzL2RvY3VtZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb250ZW50LW5vZGUtc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRlbnROb2RlU2VsZWN0b3JDb21wb25lbnREYXRhIH0gZnJvbSAnLi9jb250ZW50LW5vZGUtc2VsZWN0b3IuY29tcG9uZW50LWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5vZGVBY3Rpb24gfSBmcm9tICcuLi9kb2N1bWVudC1saXN0L21vZGVscy9ub2RlLWFjdGlvbi5lbnVtJztcbmltcG9ydCB7IE5vZGVMb2NrRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9ncy9ub2RlLWxvY2svbm9kZS1sb2NrLmRpYWxvZyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTaXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vc2VydmljZXMvc2l0ZXMuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBDb250ZW50Tm9kZURpYWxvZ1NlcnZpY2Uge1xuICAgIHN0YXRpYyBub25Eb2N1bWVudFNpdGVDb250ZW50ID0gWydibG9nJywgJ2NhbGVuZGFyJywgJ2RhdGFMaXN0cycsICdkaXNjdXNzaW9ucycsICdsaW5rcycsICd3aWtpJ107XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3Vycy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBlcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudExpc3RTZXJ2aWNlOiBEb2N1bWVudExpc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNpdGVTZXJ2aWNlOiBTaXRlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRpb246IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0aHVtYm5haWxTZXJ2aWNlOiBUaHVtYm5haWxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYSBmaWxlIGJyb3dzZXIgYXQgYSBjaG9zZW4gZm9sZGVyIGxvY2F0aW9uLlxuICAgICAqIHNob3dzIGZpbGVzIGFuZCBmb2xkZXJzIGluIHRoZSBkaWFsb2cgc2VhcmNoIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb2xkZXJOb2RlSWQgSUQgb2YgdGhlIGZvbGRlciB0byB1c2VcbiAgICAgKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0ZWQgZmlsZShzKVxuICAgICAqL1xuICAgIG9wZW5GaWxlQnJvd3NlRGlhbG9nQnlGb2xkZXJJZChmb2xkZXJOb2RlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Tm9kZVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRGb2xkZXJOb2RlKGZvbGRlck5vZGVJZClcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcCgobm9kZUVudHJ5OiBOb2RlRW50cnkpID0+IHRoaXMub3BlblVwbG9hZEZpbGVEaWFsb2coTm9kZUFjdGlvbi5DSE9PU0UsIG5vZGVFbnRyeS5lbnRyeSwgdHJ1ZSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIGxvY2sgbm9kZSBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGVudEVudHJ5IE5vZGUgdG8gbG9ja1xuICAgICAqIEByZXR1cm5zIEVycm9yL3N0YXR1cyBtZXNzYWdlIChpZiBhbnkpXG4gICAgICovXG4gICAgcHVibGljIG9wZW5Mb2NrTm9kZURpYWxvZyhjb250ZW50RW50cnk6IE5vZGUpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudFNlcnZpY2UuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucyhjb250ZW50RW50cnksIEFsbG93YWJsZU9wZXJhdGlvbnNFbnVtLkxPQ0spKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE5vZGVMb2NrRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBjb250ZW50RW50cnksXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmFibGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzQwMHB4J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlLmVycm9yKCdPUEVSQVRJT04uRkFJTC5OT0RFLk5PX1BFUk1JU1NJT04nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgZmlsZSBicm93c2VyIGF0IGEgY2hvc2VuIHNpdGUgbG9jYXRpb24uXG4gICAgICogc2hvd3MgZmlsZXMgYW5kIGZvbGRlcnMgaW4gdGhlIGRpYWxvZyBzZWFyY2ggcmVzdWx0LlxuICAgICAqXG4gICAgICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGVkIGZpbGUocylcbiAgICAgKi9cbiAgICBvcGVuRmlsZUJyb3dzZURpYWxvZ0J5U2l0ZSgpOiBPYnNlcnZhYmxlPE5vZGVbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2VydmljZVxuICAgICAgICAgICAgLmdldFNpdGVzKClcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcCgocmVzcG9uc2U6IFNpdGVQYWdpbmcpID0+IHRoaXMub3BlbkZpbGVCcm93c2VEaWFsb2dCeUZvbGRlcklkKHJlc3BvbnNlLmxpc3QuZW50cmllc1swXS5lbnRyeS5ndWlkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgZmlsZSBicm93c2VyIGF0IGEgZGVmYXVsdCBteUZpbGUgbG9jYXRpb24uXG4gICAgICogc2hvd3MgZmlsZXMgYW5kIGZvbGRlcnMgaW4gdGhlIGRpYWxvZyBzZWFyY2ggcmVzdWx0LlxuICAgICAqXG4gICAgICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGVkIGZpbGUocylcbiAgICAgKi9cbiAgICBvcGVuRmlsZUJyb3dzZURpYWxvZ0J5RGVmYXVsdExvY2F0aW9uKCk6IE9ic2VydmFibGU8Tm9kZVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5GaWxlQnJvd3NlRGlhbG9nQnlGb2xkZXJJZCgnLW15LScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgZm9sZGVyIGJyb3dzZXIgYXQgYSBjaG9zZW4gc2l0ZSBsb2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWxlY3RlZCBmb2xkZXIocylcbiAgICAgKi9cbiAgICBvcGVuRm9sZGVyQnJvd3NlRGlhbG9nQnlTaXRlKCk6IE9ic2VydmFibGU8Tm9kZVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5Gb2xkZXJCcm93c2VEaWFsb2dCeUZvbGRlcklkKCctbXktJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYSBmb2xkZXIgYnJvd3NlciBhdCBhIGNob3NlbiBmb2xkZXIgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm9sZGVyTm9kZUlkIElEIG9mIHRoZSBmb2xkZXIgdG8gdXNlXG4gICAgICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGVkIGZvbGRlcihzKVxuICAgICAqL1xuICAgIG9wZW5Gb2xkZXJCcm93c2VEaWFsb2dCeUZvbGRlcklkKGZvbGRlck5vZGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOb2RlW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRMaXN0U2VydmljZVxuICAgICAgICAgICAgLmdldEZvbGRlck5vZGUoZm9sZGVyTm9kZUlkKVxuICAgICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKChub2RlOiBOb2RlRW50cnkpID0+IHRoaXMub3BlblVwbG9hZEZvbGRlckRpYWxvZyhOb2RlQWN0aW9uLkNIT09TRSwgbm9kZS5lbnRyeSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIGRpYWxvZyB0byBjb3B5IG9yIG1vdmUgYW4gaXRlbSB0byBhIG5ldyBsb2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gTmFtZSBvZiB0aGUgYWN0aW9uIChlZywgXCJDb3B5XCIgb3IgXCJNb3ZlXCIpIHRvIHNob3cgaW4gdGhlIHRpdGxlXG4gICAgICogQHBhcmFtIGNvbnRlbnRFbnRyeSBJdGVtIHRvIGJlIGNvcGllZCBvciBtb3ZlZFxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uIFBlcm1pc3Npb24gZm9yIHRoZSBvcGVyYXRpb25cbiAgICAgKiBAcGFyYW0gZXhjbHVkZVNpdGVDb250ZW50IFRoZSBzaXRlIGNvbnRlbnQgdGhhdCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0XG4gICAgICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgdGhhdCB3ZXJlIGNvcGllZC9tb3ZlZFxuICAgICAqL1xuICAgIG9wZW5Db3B5TW92ZURpYWxvZyhhY3Rpb246IE5vZGVBY3Rpb24sIGNvbnRlbnRFbnRyeTogTm9kZSwgcGVybWlzc2lvbj86IHN0cmluZywgZXhjbHVkZVNpdGVDb250ZW50Pzogc3RyaW5nW10pOiBPYnNlcnZhYmxlPE5vZGVbXT4ge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50U2VydmljZS5oYXNBbGxvd2FibGVPcGVyYXRpb25zKGNvbnRlbnRFbnRyeSwgcGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5ldyBTdWJqZWN0PE5vZGVbXT4oKTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YTogQ29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudERhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGVUcmFuc2xhdGlvbihhY3Rpb24sIGNvbnRlbnRFbnRyeS5uYW1lKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25OYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgY3VycmVudEZvbGRlcklkOiBjb250ZW50RW50cnkucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgaW1hZ2VSZXNvbHZlcjogdGhpcy5pbWFnZVJlc29sdmVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgd2hlcmU6ICcoaXNGb2xkZXI9dHJ1ZSknLFxuICAgICAgICAgICAgICAgIGlzU2VsZWN0aW9uVmFsaWQ6IHRoaXMuaXNDb3B5TW92ZVNlbGVjdGlvblZhbGlkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgZXhjbHVkZVNpdGVDb250ZW50OiBleGNsdWRlU2l0ZUNvbnRlbnQgfHwgQ29udGVudE5vZGVEaWFsb2dTZXJ2aWNlLm5vbkRvY3VtZW50U2l0ZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgc2VsZWN0XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm9wZW5Db250ZW50Tm9kZURpYWxvZyhkYXRhLCAnYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1kaWFsb2cnLCAnNjMwcHgnKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSh7IG5leHQ6ICgpID0+IHNlbGVjdC5jb21wbGV0ZSgpIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IHsgc3RhdHVzQ29kZTogNDAzIH0gfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBkaWFsb2cgdGl0bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIE5hbWUgb2YgdGhlIGFjdGlvbiB0byBkaXNwbGF5IGluIHRoZSBkaWFsb2cgdGl0bGVcbiAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBpdGVtIG9uIHdoaWNoIHRoZSBhY3Rpb24gaXMgYmVpbmcgcGVyZm9ybWVkXG4gICAgICogQHJldHVybnMgVHJhbnNsYXRlZCB2ZXJzaW9uIG9mIHRoZSB0aXRsZVxuICAgICAqL1xuICAgIGdldFRpdGxlVHJhbnNsYXRpb24oYWN0aW9uOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uLmluc3RhbnQoYE5PREVfU0VMRUNUT1IuJHthY3Rpb24udG9VcHBlckNhc2UoKX1fSVRFTWAsIHsgbmFtZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIGRpYWxvZyB0byBjaG9vc2UgZm9sZGVycyB0byB1cGxvYWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIE5hbWUgb2YgdGhlIGFjdGlvbiB0byBzaG93IGluIHRoZSB0aXRsZVxuICAgICAqIEBwYXJhbSBjb250ZW50RW50cnkgIEl0ZW0gdG8gdXBsb2FkXG4gICAgICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNob3NlbiBmb2xkZXIocylcbiAgICAgKi9cbiAgICBvcGVuVXBsb2FkRm9sZGVyRGlhbG9nKGFjdGlvbjogTm9kZUFjdGlvbiwgY29udGVudEVudHJ5OiBOb2RlKTogT2JzZXJ2YWJsZTxOb2RlW10+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gbmV3IFN1YmplY3Q8Tm9kZVtdPigpO1xuXG4gICAgICAgIGNvbnN0IGRhdGE6IENvbnRlbnROb2RlU2VsZWN0b3JDb21wb25lbnREYXRhID0ge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGVUcmFuc2xhdGlvbihhY3Rpb24sIHRoaXMudHJhbnNsYXRpb24uaW5zdGFudCgnRFJPUERPV04uTVlfRklMRVNfT1BUSU9OJykpLFxuICAgICAgICAgICAgYWN0aW9uTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScsXG4gICAgICAgICAgICBjdXJyZW50Rm9sZGVySWQ6IGNvbnRlbnRFbnRyeS5pZCxcbiAgICAgICAgICAgIGltYWdlUmVzb2x2ZXI6IHRoaXMuaW1hZ2VSZXNvbHZlci5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgaXNTZWxlY3Rpb25WYWxpZDogdGhpcy5oYXNBbGxvd2FibGVPcGVyYXRpb25zT25Ob2RlRm9sZGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICB3aGVyZTogJyhpc0ZvbGRlcj10cnVlKScsXG4gICAgICAgICAgICBzZWxlY3RcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm9wZW5Db250ZW50Tm9kZURpYWxvZyhkYXRhLCAnYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1kaWFsb2cnLCAnNjMwcHgnKTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHsgbmV4dDogKCkgPT4gc2VsZWN0LmNvbXBsZXRlKCkgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIGRpYWxvZyB0byBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gTmFtZSBvZiB0aGUgYWN0aW9uIHRvIHNob3cgaW4gdGhlIHRpdGxlXG4gICAgICogQHBhcmFtIGNvbnRlbnRFbnRyeSBJdGVtIHRvIHVwbG9hZFxuICAgICAqIEBwYXJhbSBzaG93RmlsZXNJblJlc3VsdCBTaG93IGZpbGVzIGluIGRpYWxvZyBzZWFyY2ggcmVzdWx0XG4gICAgICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNob3NlbiBmaWxlKHMpXG4gICAgICovXG4gICAgb3BlblVwbG9hZEZpbGVEaWFsb2coYWN0aW9uOiBOb2RlQWN0aW9uLCBjb250ZW50RW50cnk6IE5vZGUsIHNob3dGaWxlc0luUmVzdWx0ID0gZmFsc2UpOiBPYnNlcnZhYmxlPE5vZGVbXT4ge1xuICAgICAgICBjb25zdCBzZWxlY3QgPSBuZXcgU3ViamVjdDxOb2RlW10+KCk7XG5cbiAgICAgICAgY29uc3QgZGF0YTogQ29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudERhdGEgPSB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZVRyYW5zbGF0aW9uKGFjdGlvbiwgdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KCdEUk9QRE9XTi5NWV9GSUxFU19PUFRJT04nKSksXG4gICAgICAgICAgICBhY3Rpb25OYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyxcbiAgICAgICAgICAgIGN1cnJlbnRGb2xkZXJJZDogY29udGVudEVudHJ5LmlkLFxuICAgICAgICAgICAgaW1hZ2VSZXNvbHZlcjogdGhpcy5pbWFnZVJlc29sdmVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICBpc1NlbGVjdGlvblZhbGlkOiAoZW50cnk6IE5vZGUpID0+IGVudHJ5LmlzRmlsZSxcbiAgICAgICAgICAgIHNlbGVjdCxcbiAgICAgICAgICAgIHNob3dGaWxlc0luUmVzdWx0XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5vcGVuQ29udGVudE5vZGVEaWFsb2coZGF0YSwgJ2FkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItZGlhbG9nJywgJzYzMHB4Jyk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSh7IG5leHQ6ICgpID0+IHNlbGVjdC5jb21wbGV0ZSgpIH0pO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQ29udGVudE5vZGVEaWFsb2coXG4gICAgICAgIGRhdGE6IENvbnRlbnROb2RlU2VsZWN0b3JDb21wb25lbnREYXRhLFxuICAgICAgICBwYW5lbENsYXNzOiBzdHJpbmcsXG4gICAgICAgIHdpZHRoOiBzdHJpbmdcbiAgICApOiBNYXREaWFsb2dSZWY8Q29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2cub3BlbihDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFuZWxDbGFzcyxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW1hZ2VSZXNvbHZlcihyb3c6IFNoYXJlRGF0YVJvdyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBlbnRyeTogTm9kZSA9IHJvdy5ub2RlLmVudHJ5O1xuICAgICAgICBpZiAoIXRoaXMuY29udGVudFNlcnZpY2UuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucyhlbnRyeSwgJ2NyZWF0ZScpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05vZGVGb2xkZXIoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGh1bWJuYWlsU2VydmljZS5nZXRNaW1lVHlwZUljb24oJ2Rpc2FibGUvZm9sZGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0FsbG93YWJsZU9wZXJhdGlvbnNPbk5vZGVGb2xkZXIoZW50cnk6IE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNOb2RlRm9sZGVyKGVudHJ5KSAmJiB0aGlzLmNvbnRlbnRTZXJ2aWNlLmhhc0FsbG93YWJsZU9wZXJhdGlvbnMoZW50cnksICdjcmVhdGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTm9kZUZvbGRlcihlbnRyeTogTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZW50cnkuaXNGb2xkZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvcHlNb3ZlU2VsZWN0aW9uVmFsaWQoZW50cnk6IE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRW50aXR5Q3JlYXRlUGVybWlzc2lvbihlbnRyeSkgJiYgIXRoaXMuaXNTaXRlKGVudHJ5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0VudGl0eUNyZWF0ZVBlcm1pc3Npb24oZW50cnk6IE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFNlcnZpY2UuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucyhlbnRyeSwgJ2NyZWF0ZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTaXRlKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAhIWVudHJ5Lmd1aWQgfHwgZW50cnkubm9kZVR5cGUgPT09ICdzdDpzaXRlJyB8fCBlbnRyeS5ub2RlVHlwZSA9PT0gJ3N0OnNpdGVzJztcbiAgICB9XG59XG4iXX0=