@alfresco/adf-content-services 8.1.0-16121703802 → 8.1.0-16144344582

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 (418) hide show
  1. package/bundles/assets/adf-content-services/i18n/en.json +3 -1
  2. package/fesm2022/adf-content-services.mjs +866 -823
  3. package/fesm2022/adf-content-services.mjs.map +1 -1
  4. package/lib/aspect-list/aspect-list.component.d.ts +4 -0
  5. package/lib/aspect-list/interfaces/custom-aspect-paging.interface.d.ts +21 -0
  6. package/lib/aspect-list/public-api.d.ts +1 -0
  7. package/lib/aspect-list/services/aspect-list.service.d.ts +6 -4
  8. package/lib/category/categories-management/categories-management.component.d.ts +4 -0
  9. package/lib/content.module.d.ts +2 -2
  10. package/lib/dialogs/dialog.module.d.ts +6 -5
  11. package/lib/dialogs/download-zip/download-zip.dialog.d.ts +1 -1
  12. package/lib/dialogs/download-zip/download-zip.dialog.module.d.ts +2 -6
  13. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  14. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  15. package/package.json +3 -5
  16. package/esm2022/adf-content-services.mjs +0 -5
  17. package/esm2022/lib/agent/index.mjs +0 -18
  18. package/esm2022/lib/agent/public-api.mjs +0 -18
  19. package/esm2022/lib/agent/services/agent.service.mjs +0 -60
  20. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +0 -27
  21. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +0 -42
  22. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +0 -77
  23. package/esm2022/lib/api-factories/index.mjs +0 -18
  24. package/esm2022/lib/api-factories/public-api.mjs +0 -19
  25. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +0 -18
  26. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +0 -77
  27. package/esm2022/lib/aspect-list/aspect-list.component.mjs +0 -139
  28. package/esm2022/lib/aspect-list/aspect-list.module.mjs +0 -35
  29. package/esm2022/lib/aspect-list/index.mjs +0 -18
  30. package/esm2022/lib/aspect-list/public-api.mjs +0 -24
  31. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +0 -83
  32. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +0 -86
  33. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +0 -52
  34. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +0 -26
  35. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +0 -42
  36. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -166
  37. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +0 -35
  38. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +0 -65
  39. package/esm2022/lib/breadcrumb/index.mjs +0 -18
  40. package/esm2022/lib/breadcrumb/public-api.mjs +0 -20
  41. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +0 -22
  42. package/esm2022/lib/category/categories-management/categories-management.component.mjs +0 -308
  43. package/esm2022/lib/category/category.module.mjs +0 -33
  44. package/esm2022/lib/category/index.mjs +0 -18
  45. package/esm2022/lib/category/models/category-node.interface.mjs +0 -18
  46. package/esm2022/lib/category/public-api.mjs +0 -23
  47. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +0 -80
  48. package/esm2022/lib/category/services/category.service.mjs +0 -159
  49. package/esm2022/lib/common/events/file.event.mjs +0 -46
  50. package/esm2022/lib/common/index.mjs +0 -18
  51. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +0 -18
  52. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +0 -18
  53. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +0 -37
  54. package/esm2022/lib/common/models/allowable-operations.enum.mjs +0 -30
  55. package/esm2022/lib/common/models/ecm-company.model.mjs +0 -19
  56. package/esm2022/lib/common/models/ecm-user.model.mjs +0 -45
  57. package/esm2022/lib/common/models/file.model.mjs +0 -53
  58. package/esm2022/lib/common/models/node-metadata.model.mjs +0 -23
  59. package/esm2022/lib/common/models/permissions.enum.mjs +0 -32
  60. package/esm2022/lib/common/public-api.mjs +0 -37
  61. package/esm2022/lib/common/services/card-view-content-update.service.mjs +0 -55
  62. package/esm2022/lib/common/services/content.service.mjs +0 -180
  63. package/esm2022/lib/common/services/discovery-api.service.mjs +0 -79
  64. package/esm2022/lib/common/services/favorites-api.service.mjs +0 -84
  65. package/esm2022/lib/common/services/nodes-api.service.mjs +0 -251
  66. package/esm2022/lib/common/services/people-content.service.mjs +0 -138
  67. package/esm2022/lib/common/services/rendition.service.mjs +0 -270
  68. package/esm2022/lib/common/services/saved-searches.service.mjs +0 -206
  69. package/esm2022/lib/common/services/sites.service.mjs +0 -243
  70. package/esm2022/lib/common/services/upload.service.mjs +0 -391
  71. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +0 -54
  72. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +0 -490
  73. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +0 -128
  74. package/esm2022/lib/content-metadata/content-metadata.module.mjs +0 -36
  75. package/esm2022/lib/content-metadata/index.mjs +0 -18
  76. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +0 -18
  77. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +0 -18
  78. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +0 -18
  79. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +0 -18
  80. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +0 -18
  81. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +0 -28
  82. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +0 -18
  83. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +0 -18
  84. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +0 -18
  85. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +0 -18
  86. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +0 -18
  87. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +0 -18
  88. package/esm2022/lib/content-metadata/public-api.mjs +0 -31
  89. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +0 -107
  90. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +0 -106
  91. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +0 -76
  92. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +0 -40
  93. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +0 -108
  94. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +0 -33
  95. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +0 -99
  96. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +0 -134
  97. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +0 -52
  98. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +0 -169
  99. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +0 -256
  100. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +0 -617
  101. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +0 -66
  102. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +0 -18
  103. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +0 -205
  104. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +0 -50
  105. package/esm2022/lib/content-node-selector/index.mjs +0 -18
  106. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +0 -48
  107. package/esm2022/lib/content-node-selector/public-api.mjs +0 -25
  108. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +0 -168
  109. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +0 -287
  110. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +0 -102
  111. package/esm2022/lib/content-node-share/content-node-share.module.mjs +0 -35
  112. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +0 -18
  113. package/esm2022/lib/content-node-share/index.mjs +0 -18
  114. package/esm2022/lib/content-node-share/public-api.mjs +0 -22
  115. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +0 -83
  116. package/esm2022/lib/content-type/content-type-dialog.component.mjs +0 -57
  117. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +0 -18
  118. package/esm2022/lib/content-type/content-type.service.mjs +0 -52
  119. package/esm2022/lib/content-type/index.mjs +0 -20
  120. package/esm2022/lib/content.module.mjs +0 -277
  121. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +0 -51
  122. package/esm2022/lib/dialogs/dialog.module.mjs +0 -52
  123. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +0 -111
  124. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +0 -38
  125. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +0 -66
  126. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +0 -44
  127. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +0 -146
  128. package/esm2022/lib/dialogs/index.mjs +0 -18
  129. package/esm2022/lib/dialogs/library/library.dialog.mjs +0 -224
  130. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +0 -115
  131. package/esm2022/lib/dialogs/public-api.mjs +0 -25
  132. package/esm2022/lib/directives/auto-focus.directive.mjs +0 -38
  133. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +0 -126
  134. package/esm2022/lib/directives/content-directive.module.mjs +0 -75
  135. package/esm2022/lib/directives/index.mjs +0 -18
  136. package/esm2022/lib/directives/library-favorite.directive.mjs +0 -119
  137. package/esm2022/lib/directives/library-membership.directive.mjs +0 -202
  138. package/esm2022/lib/directives/node-counter.directive.mjs +0 -59
  139. package/esm2022/lib/directives/node-delete.directive.mjs +0 -177
  140. package/esm2022/lib/directives/node-download.directive.mjs +0 -138
  141. package/esm2022/lib/directives/node-favorite.directive.mjs +0 -193
  142. package/esm2022/lib/directives/node-lock.directive.mjs +0 -57
  143. package/esm2022/lib/directives/node-restore.directive.mjs +0 -218
  144. package/esm2022/lib/directives/public-api.mjs +0 -28
  145. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +0 -60
  146. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +0 -196
  147. package/esm2022/lib/document-list/components/document-list.component.mjs +0 -965
  148. package/esm2022/lib/document-list/components/document-list.token.mjs +0 -21
  149. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +0 -42
  150. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +0 -107
  151. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +0 -131
  152. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +0 -91
  153. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +0 -86
  154. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +0 -118
  155. package/esm2022/lib/document-list/components/node.event.mjs +0 -30
  156. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +0 -83
  157. package/esm2022/lib/document-list/data/image-resolver.model.mjs +0 -18
  158. package/esm2022/lib/document-list/data/row-filter.model.mjs +0 -18
  159. package/esm2022/lib/document-list/data/share-data-row.model.mjs +0 -102
  160. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +0 -258
  161. package/esm2022/lib/document-list/document-list.module.mjs +0 -75
  162. package/esm2022/lib/document-list/index.mjs +0 -18
  163. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +0 -18
  164. package/esm2022/lib/document-list/models/content-action.model.mjs +0 -59
  165. package/esm2022/lib/document-list/models/document-folder.model.mjs +0 -23
  166. package/esm2022/lib/document-list/models/node-action.enum.mjs +0 -27
  167. package/esm2022/lib/document-list/models/permissions-style.model.mjs +0 -27
  168. package/esm2022/lib/document-list/models/permissions.model.mjs +0 -26
  169. package/esm2022/lib/document-list/models/preset.model.mjs +0 -257
  170. package/esm2022/lib/document-list/public-api.mjs +0 -47
  171. package/esm2022/lib/document-list/services/custom-resources.service.mjs +0 -378
  172. package/esm2022/lib/document-list/services/document-actions.service.mjs +0 -142
  173. package/esm2022/lib/document-list/services/document-list.service.mjs +0 -175
  174. package/esm2022/lib/document-list/services/folder-actions.service.mjs +0 -137
  175. package/esm2022/lib/document-list/services/lock.service.mjs +0 -72
  176. package/esm2022/lib/document-list/services/node-actions.service.mjs +0 -122
  177. package/esm2022/lib/group/index.mjs +0 -18
  178. package/esm2022/lib/group/public-api.mjs +0 -18
  179. package/esm2022/lib/group/services/group.service.mjs +0 -84
  180. package/esm2022/lib/infinite-scroll-datasource/index.mjs +0 -18
  181. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +0 -69
  182. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +0 -18
  183. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +0 -18
  184. package/esm2022/lib/interfaces/index.mjs +0 -18
  185. package/esm2022/lib/interfaces/library-entity.interface.mjs +0 -18
  186. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +0 -18
  187. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +0 -18
  188. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +0 -18
  189. package/esm2022/lib/interfaces/public-api.mjs +0 -23
  190. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +0 -19
  191. package/esm2022/lib/legal-hold/index.mjs +0 -18
  192. package/esm2022/lib/legal-hold/public-api.mjs +0 -18
  193. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +0 -136
  194. package/esm2022/lib/material.module.mjs +0 -183
  195. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +0 -43
  196. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +0 -65
  197. package/esm2022/lib/mock/document-library.model.mock.mjs +0 -84
  198. package/esm2022/lib/mock/document-list.component.mock.mjs +0 -364
  199. package/esm2022/lib/mock/index.mjs +0 -18
  200. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +0 -161
  201. package/esm2022/lib/mock/public-api.mjs +0 -27
  202. package/esm2022/lib/mock/search-filter-mock.mjs +0 -637
  203. package/esm2022/lib/mock/search-query.mock.mjs +0 -40
  204. package/esm2022/lib/mock/search.component.mock.mjs +0 -165
  205. package/esm2022/lib/mock/search.service.mock.mjs +0 -61
  206. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +0 -281
  207. package/esm2022/lib/new-version-uploader/index.mjs +0 -18
  208. package/esm2022/lib/new-version-uploader/models/index.mjs +0 -18
  209. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +0 -24
  210. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +0 -74
  211. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +0 -33
  212. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +0 -103
  213. package/esm2022/lib/new-version-uploader/public-api.mjs +0 -21
  214. package/esm2022/lib/node-comments/index.mjs +0 -18
  215. package/esm2022/lib/node-comments/node-comments.component.mjs +0 -50
  216. package/esm2022/lib/node-comments/node-comments.module.mjs +0 -33
  217. package/esm2022/lib/node-comments/public-api.mjs +0 -20
  218. package/esm2022/lib/node-comments/services/node-comments.service.mjs +0 -85
  219. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +0 -18
  220. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +0 -123
  221. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +0 -102
  222. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +0 -69
  223. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +0 -45
  224. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +0 -67
  225. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +0 -56
  226. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +0 -102
  227. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +0 -87
  228. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +0 -219
  229. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +0 -134
  230. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +0 -88
  231. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +0 -82
  232. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +0 -111
  233. package/esm2022/lib/permission-manager/index.mjs +0 -18
  234. package/esm2022/lib/permission-manager/models/member.model.mjs +0 -59
  235. package/esm2022/lib/permission-manager/models/permission.model.mjs +0 -29
  236. package/esm2022/lib/permission-manager/models/role.model.mjs +0 -18
  237. package/esm2022/lib/permission-manager/permission-manager.module.mjs +0 -84
  238. package/esm2022/lib/permission-manager/public-api.mjs +0 -36
  239. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +0 -78
  240. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +0 -299
  241. package/esm2022/lib/pipes/content-pipe.module.mjs +0 -37
  242. package/esm2022/lib/pipes/index.mjs +0 -18
  243. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +0 -69
  244. package/esm2022/lib/pipes/public-api.mjs +0 -19
  245. package/esm2022/lib/prediction/index.mjs +0 -18
  246. package/esm2022/lib/prediction/public-api.mjs +0 -18
  247. package/esm2022/lib/prediction/services/index.mjs +0 -18
  248. package/esm2022/lib/prediction/services/prediction.service.mjs +0 -57
  249. package/esm2022/lib/search/components/empty-search-result.component.mjs +0 -27
  250. package/esm2022/lib/search/components/index.mjs +0 -43
  251. package/esm2022/lib/search/components/reset-search.directive.mjs +0 -41
  252. package/esm2022/lib/search/components/search-check-list/index.mjs +0 -18
  253. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +0 -158
  254. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +0 -18
  255. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +0 -169
  256. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +0 -46
  257. package/esm2022/lib/search/components/search-control.component.mjs +0 -180
  258. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +0 -22
  259. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +0 -23
  260. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +0 -23
  261. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +0 -196
  262. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +0 -18
  263. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +0 -201
  264. package/esm2022/lib/search/components/search-datetime-range/index.mjs +0 -18
  265. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +0 -223
  266. package/esm2022/lib/search/components/search-facet-field/index.mjs +0 -18
  267. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +0 -132
  268. package/esm2022/lib/search/components/search-filter/index.mjs +0 -19
  269. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +0 -45
  270. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +0 -80
  271. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +0 -18
  272. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +0 -154
  273. package/esm2022/lib/search/components/search-filter-chips/index.mjs +0 -23
  274. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +0 -104
  275. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +0 -109
  276. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +0 -129
  277. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +0 -63
  278. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +0 -43
  279. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +0 -109
  280. package/esm2022/lib/search/components/search-filter-container/index.mjs +0 -18
  281. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +0 -122
  282. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +0 -19
  283. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +0 -36
  284. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +0 -63
  285. package/esm2022/lib/search/components/search-form/index.mjs +0 -18
  286. package/esm2022/lib/search/components/search-form/search-form.component.mjs +0 -52
  287. package/esm2022/lib/search/components/search-input/index.mjs +0 -18
  288. package/esm2022/lib/search/components/search-input/search-input.component.mjs +0 -108
  289. package/esm2022/lib/search/components/search-logical-filter/index.mjs +0 -18
  290. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +0 -163
  291. package/esm2022/lib/search/components/search-number-range/index.mjs +0 -18
  292. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +0 -154
  293. package/esm2022/lib/search/components/search-panel/index.mjs +0 -18
  294. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +0 -44
  295. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +0 -18
  296. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +0 -23
  297. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +0 -26
  298. package/esm2022/lib/search/components/search-properties/index.mjs +0 -22
  299. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +0 -244
  300. package/esm2022/lib/search/components/search-properties/search-properties.mjs +0 -18
  301. package/esm2022/lib/search/components/search-radio/index.mjs +0 -18
  302. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +0 -145
  303. package/esm2022/lib/search/components/search-slider/index.mjs +0 -18
  304. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +0 -119
  305. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +0 -18
  306. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +0 -77
  307. package/esm2022/lib/search/components/search-text/index.mjs +0 -18
  308. package/esm2022/lib/search/components/search-text/search-text.component.mjs +0 -134
  309. package/esm2022/lib/search/components/search-widget-container/index.mjs +0 -18
  310. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +0 -113
  311. package/esm2022/lib/search/components/search.component.mjs +0 -152
  312. package/esm2022/lib/search/forms/index.mjs +0 -19
  313. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +0 -23
  314. package/esm2022/lib/search/forms/search-term-validator.mjs +0 -26
  315. package/esm2022/lib/search/index.mjs +0 -18
  316. package/esm2022/lib/search/mocks/index.mjs +0 -18
  317. package/esm2022/lib/search/mocks/search.service.mock.mjs +0 -56
  318. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +0 -22
  319. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +0 -18
  320. package/esm2022/lib/search/models/facet-field.interface.mjs +0 -29
  321. package/esm2022/lib/search/models/facet-query.interface.mjs +0 -18
  322. package/esm2022/lib/search/models/facet-widget.interface.mjs +0 -18
  323. package/esm2022/lib/search/models/filter-query.interface.mjs +0 -18
  324. package/esm2022/lib/search/models/filter-search.interface.mjs +0 -18
  325. package/esm2022/lib/search/models/index.mjs +0 -34
  326. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +0 -31
  327. package/esm2022/lib/search/models/search-category.interface.mjs +0 -18
  328. package/esm2022/lib/search/models/search-configuration.interface.mjs +0 -18
  329. package/esm2022/lib/search/models/search-filter-list.model.mjs +0 -148
  330. package/esm2022/lib/search/models/search-form.interface.mjs +0 -18
  331. package/esm2022/lib/search/models/search-range.interface.mjs +0 -18
  332. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +0 -18
  333. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +0 -18
  334. package/esm2022/lib/search/models/search-widget.interface.mjs +0 -18
  335. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +0 -18
  336. package/esm2022/lib/search/public-api.mjs +0 -24
  337. package/esm2022/lib/search/search-configuration.token.mjs +0 -19
  338. package/esm2022/lib/search/search.module.mjs +0 -192
  339. package/esm2022/lib/search/services/base-query-builder.service.mjs +0 -509
  340. package/esm2022/lib/search/services/index.mjs +0 -24
  341. package/esm2022/lib/search/services/search-configuration.service.mjs +0 -50
  342. package/esm2022/lib/search/services/search-facet-filters.service.mjs +0 -374
  343. package/esm2022/lib/search/services/search-filter.service.mjs +0 -56
  344. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +0 -136
  345. package/esm2022/lib/search/services/search-query-builder.service.mjs +0 -48
  346. package/esm2022/lib/search/services/search.service.mjs +0 -89
  347. package/esm2022/lib/search-ai/index.mjs +0 -18
  348. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +0 -18
  349. package/esm2022/lib/search-ai/public-api.mjs +0 -19
  350. package/esm2022/lib/search-ai/services/search-ai.service.mjs +0 -103
  351. package/esm2022/lib/security/index.mjs +0 -18
  352. package/esm2022/lib/security/public-api.mjs +0 -18
  353. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +0 -18
  354. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +0 -18
  355. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +0 -274
  356. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +0 -43
  357. package/esm2022/lib/services/alfresco-api.interface.mjs +0 -18
  358. package/esm2022/lib/services/alfresco-api.service.mjs +0 -120
  359. package/esm2022/lib/services/index.mjs +0 -18
  360. package/esm2022/lib/services/public-api.mjs +0 -18
  361. package/esm2022/lib/tag/index.mjs +0 -18
  362. package/esm2022/lib/tag/public-api.mjs +0 -24
  363. package/esm2022/lib/tag/services/tag.service.mjs +0 -171
  364. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +0 -114
  365. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +0 -98
  366. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +0 -80
  367. package/esm2022/lib/tag/tag.module.mjs +0 -37
  368. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +0 -27
  369. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +0 -370
  370. package/esm2022/lib/testing/content.testing.module.mjs +0 -56
  371. package/esm2022/lib/tree/components/tree.component.mjs +0 -312
  372. package/esm2022/lib/tree/index.mjs +0 -18
  373. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +0 -18
  374. package/esm2022/lib/tree/models/tree-node.interface.mjs +0 -22
  375. package/esm2022/lib/tree/models/tree-response.interface.mjs +0 -18
  376. package/esm2022/lib/tree/public-api.mjs +0 -23
  377. package/esm2022/lib/tree/services/tree.service.mjs +0 -134
  378. package/esm2022/lib/tree/tree.module.mjs +0 -33
  379. package/esm2022/lib/tree-view/components/tree-view.component.mjs +0 -75
  380. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +0 -99
  381. package/esm2022/lib/tree-view/index.mjs +0 -18
  382. package/esm2022/lib/tree-view/models/tree-view.model.mjs +0 -28
  383. package/esm2022/lib/tree-view/public-api.mjs +0 -22
  384. package/esm2022/lib/tree-view/services/tree-view.service.mjs +0 -38
  385. package/esm2022/lib/tree-view/tree-view.module.mjs +0 -33
  386. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +0 -176
  387. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +0 -190
  388. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +0 -92
  389. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +0 -124
  390. package/esm2022/lib/upload/components/upload-button.component.mjs +0 -133
  391. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +0 -112
  392. package/esm2022/lib/upload/components/upload-files.event.mjs +0 -41
  393. package/esm2022/lib/upload/components/upload-version-button.component.mjs +0 -54
  394. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +0 -154
  395. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +0 -75
  396. package/esm2022/lib/upload/index.mjs +0 -18
  397. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +0 -39
  398. package/esm2022/lib/upload/public-api.mjs +0 -29
  399. package/esm2022/lib/upload/upload.module.mjs +0 -72
  400. package/esm2022/lib/version-compatibility/index.mjs +0 -18
  401. package/esm2022/lib/version-compatibility/public-api.mjs +0 -20
  402. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +0 -26
  403. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +0 -53
  404. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +0 -33
  405. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +0 -76
  406. package/esm2022/lib/version-manager/content-version.service.mjs +0 -53
  407. package/esm2022/lib/version-manager/index.mjs +0 -18
  408. package/esm2022/lib/version-manager/public-api.mjs +0 -23
  409. package/esm2022/lib/version-manager/version-comparison.component.mjs +0 -42
  410. package/esm2022/lib/version-manager/version-list.component.mjs +0 -215
  411. package/esm2022/lib/version-manager/version-manager.component.mjs +0 -145
  412. package/esm2022/lib/version-manager/version-manager.module.mjs +0 -48
  413. package/esm2022/lib/version-manager/version-upload.component.mjs +0 -154
  414. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +0 -33
  415. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +0 -408
  416. package/esm2022/lib/viewer/index.mjs +0 -18
  417. package/esm2022/lib/viewer/public-api.mjs +0 -19
  418. package/esm2022/public-api.mjs +0 -56
@@ -1,965 +0,0 @@
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
- /* eslint-disable rxjs/no-subject-value */
18
- /* eslint-disable @typescript-eslint/naming-convention */
19
- import { AppConfigService, ColumnsSelectorComponent, CustomEmptyContentTemplateDirective, CustomLoadingContentTemplateDirective, CustomNoPermissionTemplateDirective, DataColumnListComponent, DataSorting, DataTableComponent, DataTableSchema, DataTableService, EmptyListComponent, LoadingContentTemplateDirective, MainMenuDataTableTemplateDirective, NoContentTemplateDirective, NoPermissionTemplateDirective, ShowHeaderMode, ThumbnailService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
20
- import { NodePaging, NodesApi, Pagination } from '@alfresco/js-api';
21
- import { Component, ContentChild, DestroyRef, ElementRef, EventEmitter, HostListener, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
22
- import { MatDialog } from '@angular/material/dialog';
23
- import { BehaviorSubject, of, Subject } from 'rxjs';
24
- import { ContentService, NodesApiService } from '../../common';
25
- import { ShareDataTableAdapter } from '../data/share-datatable-adapter';
26
- import { ContentActionModel } from '../models/content-action.model';
27
- import { presetsDefaultModel } from '../models/preset.model';
28
- import { DocumentListService } from '../services/document-list.service';
29
- import { LockService } from '../services/lock.service';
30
- import { ADF_DOCUMENT_PARENT_COMPONENT } from './document-list.token';
31
- import { FileAutoDownloadComponent } from './file-auto-download/file-auto-download.component';
32
- import { NodeEntityEvent, NodeEntryEvent } from './node.event';
33
- import { CommonModule } from '@angular/common';
34
- import { FilterHeaderComponent } from './filter-header/filter-header.component';
35
- import { TranslatePipe } from '@ngx-translate/core';
36
- import { MatIconModule } from '@angular/material/icon';
37
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
38
- import { AlfrescoApiService } from '../../services/alfresco-api.service';
39
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
40
- import * as i0 from "@angular/core";
41
- import * as i1 from "../services/document-list.service";
42
- import * as i2 from "@alfresco/adf-core";
43
- import * as i3 from "../../common";
44
- import * as i4 from "../../services/alfresco-api.service";
45
- import * as i5 from "../services/lock.service";
46
- import * as i6 from "@angular/material/dialog";
47
- import * as i7 from "@angular/common";
48
- import * as i8 from "@angular/material/icon";
49
- import * as i9 from "@angular/material/progress-spinner";
50
- const BYTES_TO_MB_CONVERSION_VALUE = 1048576;
51
- export class DocumentListComponent extends DataTableSchema {
52
- static { this.SINGLE_CLICK_NAVIGATION = 'click'; }
53
- static { this.DOUBLE_CLICK_NAVIGATION = 'dblclick'; }
54
- /**
55
- * Custom function to choose whether to show or hide rows.
56
- * See the [Row Filter Model](row-filter.model.md) page for
57
- * more information.
58
- */
59
- set rowFilter(rowFilter) {
60
- this._rowFilter = rowFilter;
61
- if (this.data) {
62
- this.data.setFilter(this._rowFilter);
63
- if (this.currentFolderId) {
64
- this.reload();
65
- }
66
- }
67
- }
68
- get rowFilter() {
69
- return this._rowFilter;
70
- }
71
- /** Sets columns visibility for DataTableSchema */
72
- set setColumnsVisibility(columnsVisibility) {
73
- this.columnsVisibility = columnsVisibility;
74
- }
75
- /** Sets columns width for DataTableSchema */
76
- set setColumnsWidths(columnsWidths) {
77
- this.columnsWidths = columnsWidths;
78
- }
79
- /** Sets columns order for DataTableSchema */
80
- set setColumnsOrder(columnsOrder) {
81
- this.columnsOrder = columnsOrder;
82
- }
83
- get nodesApi() {
84
- this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApiService.getInstance());
85
- return this._nodesApi;
86
- }
87
- constructor(documentListService, elementRef, appConfig, userPreferencesService, contentService, thumbnailService, alfrescoApiService, nodeService, dataTableService, lockService, dialog) {
88
- super(appConfig, 'default', presetsDefaultModel);
89
- this.documentListService = documentListService;
90
- this.elementRef = elementRef;
91
- this.appConfig = appConfig;
92
- this.userPreferencesService = userPreferencesService;
93
- this.contentService = contentService;
94
- this.thumbnailService = thumbnailService;
95
- this.alfrescoApiService = alfrescoApiService;
96
- this.nodeService = nodeService;
97
- this.dataTableService = dataTableService;
98
- this.lockService = lockService;
99
- this.dialog = dialog;
100
- this.DEFAULT_PAGINATION = new Pagination({
101
- hasMoreItems: false,
102
- skipCount: 0,
103
- maxItems: 25,
104
- totalItems: 0
105
- });
106
- this.DEFAULT_SORTING = [new DataSorting('name', 'asc'), new DataSorting('isFolder', 'desc')];
107
- /**
108
- * Define a set of CSS styles to apply depending on the permission
109
- * of the user on that node. See the Permission Style model
110
- * page for further details and examples.
111
- */
112
- this.permissionsStyle = [];
113
- /** The default route for all the location-based columns (if declared). */
114
- this.locationFormat = '/';
115
- /** Toggles navigation to folder content or file preview */
116
- this.navigate = true;
117
- /** Toggles the header */
118
- this.showHeader = ShowHeaderMode.Data;
119
- /**
120
- * User interaction for folder navigation or file preview.
121
- * Valid values are "click" and "dblclick". Default value: "dblclick"
122
- */
123
- this.navigationMode = DocumentListComponent.DOUBLE_CLICK_NAVIGATION; // click|dblclick
124
- /** Show document thumbnails rather than icons */
125
- this.thumbnails = false;
126
- /**
127
- * Row selection mode. Can be null, `single` or `multiple`. For `multiple` mode,
128
- * you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows.
129
- */
130
- this.selectionMode = 'single'; // null|single|multiple
131
- /** Toggles multiselect mode */
132
- this.multiselect = false;
133
- /** Toggles content actions for each row */
134
- this.contentActions = false;
135
- /** Position of the content actions dropdown menu. Can be set to "left" or "right". */
136
- this.contentActionsPosition = 'right'; // left|right
137
- /** Toggles context menus for each row */
138
- this.contextMenuActions = false;
139
- /** Custom image for empty folder. Default value: './assets/images/empty_doc_lib.svg' */
140
- this.emptyFolderImageUrl = './assets/images/empty_doc_lib.svg';
141
- /**
142
- * When true, this enables you to drop files directly into subfolders shown
143
- * as items in the list or into another file to trigger updating it's version.
144
- * When false, the dropped file will be added to the
145
- * current folder (ie, the one containing all the items shown in the list).
146
- * See the Upload directive for further details about how the file drop is
147
- * handled.
148
- */
149
- this.allowDropFiles = false;
150
- /**
151
- * Defines default sorting. The format is an array of 2 strings `[key, direction]`
152
- * i.e. `['name', 'desc']` or `['name', 'asc']`. Set this value only if you want to
153
- * override the default sorting detected by the component based on columns.
154
- */
155
- this.sorting = ['name', 'asc'];
156
- /**
157
- * Defines default sorting. The format is an array of strings `[key direction, otherKey otherDirection]`
158
- * i.e. `['name desc', 'nodeType asc']` or `['name asc']`. Set this value if you want a base
159
- * rule to be added to the sorting apart from the one driven by the header.
160
- */
161
- this.additionalSorting = new DataSorting('isFolder', 'desc');
162
- /**
163
- * Defines sorting mode. Can be either `client` (items in the list
164
- * are sorted client-side) or `server` (the ordering supplied by the
165
- * server is used without further client-side sorting).
166
- * Note that the `server` option *does not* request the server to sort the data
167
- * before delivering it.
168
- */
169
- this.sortingMode = 'server';
170
- /**
171
- * Toggles the loading state and animated spinners for the component. Used in
172
- * combination with `navigate=false` to perform custom navigation and loading
173
- * state indication.
174
- */
175
- this.loading = false;
176
- this._rowFilter = null;
177
- /**
178
- * Custom function to choose image file paths to show. See the
179
- * [Image Resolver Model](image-resolver.model.md) page for
180
- * more information.
181
- */
182
- this.imageResolver = null;
183
- /** Toggles the sticky header mode. */
184
- this.stickyHeader = false;
185
- /** Toggles the header filters mode. */
186
- this.headerFilters = false;
187
- /** The ID of the folder node to display or a reserved string alias for special sources */
188
- this.currentFolderId = null;
189
- /**
190
- * Array of nodes to be pre-selected. All nodes in the
191
- * array are pre-selected in multi selection mode, but only the first node
192
- * is pre-selected in single selection mode.
193
- */
194
- this.preselectNodes = [];
195
- /** The Document list will show all the nodes contained in the NodePaging entity */
196
- this.node = null;
197
- /** Default value is stored in the user preference settings. Use this only if you are not using pagination. */
198
- this.maxItems = this.DEFAULT_PAGINATION.maxItems;
199
- /** Enables column resizing for datatable */
200
- this.isResizingEnabled = false;
201
- /** Enables blur when resizing datatable columns */
202
- this.blurOnResize = true;
203
- /** Display checkboxes in datatable rows on hover only */
204
- this.displayCheckboxesOnHover = false;
205
- /** Display drag and drop hint. */
206
- this.displayDragAndDropHint = true;
207
- /** Emitted when the user clicks a list node */
208
- this.nodeClick = new EventEmitter();
209
- /** Emitted when the user double-clicks a list node */
210
- this.nodeDblClick = new EventEmitter();
211
- /** Emitted when the current display folder changes */
212
- this.folderChange = new EventEmitter();
213
- /**
214
- * Emitted when the user acts upon files with either single or double click
215
- * (depends on `navigation-mode`). Useful for integration with the
216
- * Viewer component.
217
- */
218
- this.preview = new EventEmitter();
219
- /** Emitted when the Document List has loaded all items and is ready for use */
220
- this.ready = new EventEmitter();
221
- /** Emitted when the API fails to get the Document List data */
222
- this.error = new EventEmitter();
223
- /** Emitted when the node selection change */
224
- this.nodeSelected = new EventEmitter();
225
- /** Emitted when a filter value is selected */
226
- this.filterSelection = new EventEmitter();
227
- /** Emitted when column widths change */
228
- this.columnsWidthChanged = new EventEmitter();
229
- /** Emitted when columns visibility change */
230
- this.columnsVisibilityChanged = new EventEmitter();
231
- /** Emitted when columns order change */
232
- this.columnsOrderChanged = new EventEmitter();
233
- /** Emitted when the selected row items count in the table changed. */
234
- this.selectedItemsCountChanged = new EventEmitter();
235
- this.actions = [];
236
- this.contextActionHandler = new Subject();
237
- this.noPermission = false;
238
- this.selection = new Array();
239
- this.$folderNode = new Subject();
240
- this.allowFiltering = true;
241
- this.orderBy = null;
242
- this.preselectedRows = [];
243
- this._pagination = this.DEFAULT_PAGINATION;
244
- this.pagination = new BehaviorSubject(this.DEFAULT_PAGINATION);
245
- this.sortingSubject = new BehaviorSubject(this.DEFAULT_SORTING);
246
- this.rowMenuCache = {};
247
- this.destroyRef = inject(DestroyRef);
248
- this.nodeService.nodeUpdated.pipe(takeUntilDestroyed()).subscribe((node) => {
249
- this.dataTableService.rowUpdate.next({ id: node.id, obj: { entry: node } });
250
- });
251
- this.userPreferencesService
252
- .select(UserPreferenceValues.PaginationSize)
253
- .pipe(takeUntilDestroyed())
254
- .subscribe((pagSize) => {
255
- this.maxItems = this._pagination.maxItems = pagSize;
256
- });
257
- }
258
- getContextActions(node) {
259
- if (node?.entry) {
260
- const actions = this.getNodeActions(node);
261
- if (actions && actions.length > 0) {
262
- return actions.map((currentAction) => ({
263
- model: currentAction,
264
- node,
265
- subject: this.contextActionHandler
266
- }));
267
- }
268
- }
269
- return null;
270
- }
271
- getDefaultSorting() {
272
- let defaultSorting;
273
- if (Array.isArray(this.sorting)) {
274
- const [key, direction] = this.sorting;
275
- defaultSorting = new DataSorting(key, direction);
276
- }
277
- else {
278
- defaultSorting = new DataSorting(this.sorting.key, this.sorting.direction);
279
- }
280
- return defaultSorting;
281
- }
282
- isMobile() {
283
- return !!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
284
- }
285
- isEmpty() {
286
- return !this.data || this.data.getRows().length === 0;
287
- }
288
- ngOnInit() {
289
- this.rowMenuCache = {};
290
- this.loadLayoutPresets();
291
- this.data = new ShareDataTableAdapter(this.thumbnailService, this.contentService, null, this.getDefaultSorting(), this.sortingMode, this.allowDropFiles);
292
- this.data.thumbnails = this.thumbnails;
293
- this.data.permissionsStyle = this.permissionsStyle;
294
- if (this._rowFilter) {
295
- this.data.setFilter(this._rowFilter);
296
- }
297
- if (this.imageResolver) {
298
- this.data.setImageResolver(this.imageResolver);
299
- }
300
- this.contextActionHandler.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((val) => this.contextActionCallback(val));
301
- this.enforceSingleClickNavigationForMobile();
302
- if (this.filterValue && Object.keys(this.filterValue).length > 0) {
303
- this.showHeader = ShowHeaderMode.Always;
304
- }
305
- if (this.columnsPresetKey) {
306
- this.setPresetKey(this.columnsPresetKey);
307
- }
308
- this.documentListService.reload$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
309
- this.resetSelection();
310
- this.reload();
311
- });
312
- this.documentListService.resetSelection$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
313
- this.resetSelection();
314
- });
315
- }
316
- ngAfterContentInit() {
317
- if (this.columnList) {
318
- this.columnList.columns.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
319
- this.createColumns();
320
- this.data.setColumns(this.columns);
321
- });
322
- }
323
- this.createDatatableSchema();
324
- this.data.setColumns(this.columns);
325
- }
326
- ngOnChanges(changes) {
327
- if (!changes['preselectNodes']) {
328
- this.resetSelection();
329
- }
330
- if (Array.isArray(this.sorting)) {
331
- const [key, direction] = this.sorting;
332
- this.orderBy = this.buildOrderByArray(key, direction);
333
- }
334
- else {
335
- this.orderBy = this.buildOrderByArray(this.sorting.key, this.sorting.direction);
336
- }
337
- if (this.data) {
338
- this.data.thumbnails = this.thumbnails;
339
- }
340
- if (changes.sortingMode && !changes.sortingMode.firstChange && this.data) {
341
- this.data.sortingMode = changes.sortingMode.currentValue;
342
- }
343
- if (changes.sorting && !changes.sorting.firstChange && this.data) {
344
- const newValue = changes.sorting.currentValue;
345
- if (newValue && newValue.length > 0) {
346
- const [key, direction] = newValue;
347
- this.data.setSorting(new DataSorting(key, direction));
348
- }
349
- }
350
- if (this.currentFolderId && changes['currentFolderId']?.currentValue !== changes['currentFolderId']?.previousValue) {
351
- this.loadFolder();
352
- }
353
- if (this.data) {
354
- if (changes.node?.currentValue) {
355
- const merge = this._pagination ? this._pagination.merge : false;
356
- this.data.loadPage(changes.node.currentValue, merge, null);
357
- this.preserveExistingSelection();
358
- this.onPreselectNodes();
359
- this.onDataReady(changes.node.currentValue);
360
- }
361
- else if (changes.imageResolver) {
362
- this.data.setImageResolver(changes.imageResolver.currentValue);
363
- }
364
- }
365
- }
366
- reload(hideLoadingSpinner = false) {
367
- this.resetSelection();
368
- this.reloadWithoutResettingSelection(hideLoadingSpinner);
369
- }
370
- reloadWithoutResettingSelection(hideLoadingSpinner = false) {
371
- if (this.node) {
372
- if (this.data) {
373
- this.data.loadPage(this.node, this._pagination.merge, null);
374
- this.preserveExistingSelection();
375
- }
376
- this.onPreselectNodes();
377
- this.syncPagination();
378
- this.onDataReady(this.node);
379
- }
380
- else {
381
- this.loadFolder(hideLoadingSpinner);
382
- }
383
- }
384
- contextActionCallback(action) {
385
- if (action) {
386
- this.executeContentAction(action.node, action.model);
387
- }
388
- }
389
- getNodeActions(node) {
390
- if (node?.entry) {
391
- let target = null;
392
- if (node.entry.isFile) {
393
- target = 'document';
394
- }
395
- else if (node.entry.isFolder) {
396
- target = 'folder';
397
- }
398
- if (target) {
399
- const actions = this.rowMenuCache[node.entry.id];
400
- if (actions) {
401
- actions.forEach((action) => {
402
- this.refreshAction(action, node);
403
- });
404
- return actions;
405
- }
406
- const actionsByTarget = this.actions
407
- .filter((entry) => {
408
- const isVisible = typeof entry.visible === 'function' ? entry.visible(node) : entry.visible;
409
- return isVisible && entry.target.toLowerCase() === target;
410
- })
411
- .map((action) => new ContentActionModel(action));
412
- actionsByTarget.forEach((action) => {
413
- this.refreshAction(action, node);
414
- });
415
- this.rowMenuCache[node.entry.id] = actionsByTarget;
416
- return actionsByTarget;
417
- }
418
- }
419
- return [];
420
- }
421
- refreshAction(action, node) {
422
- action.disabled = this.isActionDisabled(action, node);
423
- action.visible = this.isActionVisible(action, node);
424
- }
425
- isActionVisible(action, node) {
426
- if (typeof action.visible === 'function') {
427
- return action.visible(node);
428
- }
429
- return action.visible;
430
- }
431
- isActionDisabled(action, node) {
432
- if (typeof action.disabled === 'function') {
433
- return action.disabled(node);
434
- }
435
- if ((action.permission && action.disableWithNoPermission && !this.contentService.hasAllowableOperations(node.entry, action.permission)) ||
436
- this.lockService.isLocked(node.entry)) {
437
- return true;
438
- }
439
- else {
440
- return action.disabled;
441
- }
442
- }
443
- onShowContextMenu(e) {
444
- if (e && this.contextMenuActions) {
445
- e.preventDefault();
446
- }
447
- }
448
- navigateTo(node) {
449
- if (typeof node === 'string') {
450
- this.resetNewFolderPagination();
451
- this.currentFolderId = node;
452
- this.filterValue = {};
453
- this.folderChange.emit(new NodeEntryEvent({ id: node }));
454
- this.reload();
455
- return true;
456
- }
457
- else {
458
- if (this.canNavigateFolder(node)) {
459
- this.resetNewFolderPagination();
460
- this.currentFolderId = this.getNodeFolderDestinationId(node);
461
- this.filterValue = {};
462
- this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId }));
463
- this.reload();
464
- return true;
465
- }
466
- }
467
- return false;
468
- }
469
- getNodeFolderDestinationId(node) {
470
- return this.isLinkFolder(node) ? node.properties['cm:destination'] : node.id;
471
- }
472
- isLinkFolder(node) {
473
- return node.nodeType === 'app:folderlink' && node.properties?.['cm:destination'];
474
- }
475
- updateCustomSourceData(nodeId) {
476
- this.currentFolderId = nodeId;
477
- }
478
- /**
479
- * Invoked when executing content action for a document or folder.
480
- *
481
- * @param node Node to be the context of the execution.
482
- * @param action Action to be executed against the context.
483
- */
484
- executeContentAction(node, action) {
485
- if (node?.entry && action) {
486
- const handlerSub = typeof action.handler === 'function' ? action.handler(node, this, action.permission) : of(true);
487
- if (typeof action.execute === 'function' && handlerSub) {
488
- handlerSub.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => action.execute(node));
489
- }
490
- }
491
- }
492
- setLoadingState(value) {
493
- if (this.data?.getRows().length > 0) {
494
- if (value) {
495
- clearTimeout(this.loadingTimeout);
496
- this.loadingTimeout = setTimeout(() => {
497
- this.loading = true;
498
- }, 1000);
499
- }
500
- else {
501
- clearTimeout(this.loadingTimeout);
502
- this.loading = false;
503
- }
504
- }
505
- else {
506
- clearTimeout(this.loadingTimeout);
507
- this.loading = value;
508
- }
509
- }
510
- loadFolder(hideLoadingSpinner = false) {
511
- if (!hideLoadingSpinner) {
512
- this.setLoadingState(true);
513
- }
514
- if (this.documentListService.isCustomSourceService(this.currentFolderId)) {
515
- this.updateCustomSourceData(this.currentFolderId);
516
- }
517
- this.documentListService.loadFolderByNodeId(this.currentFolderId, this._pagination, this.includeFields, this.where, this.orderBy).subscribe((documentNode) => {
518
- if (documentNode.currentNode) {
519
- this.folderNode = documentNode.currentNode.entry;
520
- this.$folderNode.next(documentNode.currentNode.entry);
521
- }
522
- this.onPageLoaded(documentNode.children);
523
- }, (err) => {
524
- this.handleError(err);
525
- });
526
- }
527
- resetSelection() {
528
- this.dataTable.resetSelection();
529
- this.selection = [];
530
- this.noPermission = false;
531
- }
532
- onPageLoaded(nodePaging) {
533
- if (nodePaging) {
534
- if (this.data) {
535
- this.data.loadPage(nodePaging, this._pagination.merge, this.allowDropFiles);
536
- this.preserveExistingSelection();
537
- }
538
- this.onPreselectNodes();
539
- this.setLoadingState(false);
540
- this.onDataReady(nodePaging);
541
- }
542
- }
543
- onSortingChanged(event) {
544
- this.orderBy = this.buildOrderByArray(event.detail.sortingKey, event.detail.direction);
545
- this.sorting = [event.detail.sortingKey, event.detail.direction];
546
- this.sortingSubject.next([this.additionalSorting, event.detail]);
547
- if (this.sortingMode === 'server') {
548
- this.reload();
549
- }
550
- }
551
- buildOrderByArray(currentKey, currentDirection) {
552
- return [`${this.additionalSorting.key} ${this.additionalSorting.direction}`, `${currentKey} ${currentDirection}`];
553
- }
554
- onPreviewFile(node) {
555
- if (node) {
556
- const sizeInMB = node.entry?.content?.sizeInBytes / BYTES_TO_MB_CONVERSION_VALUE;
557
- const fileAutoDownloadFlag = this.appConfig.get('viewer.enableFileAutoDownload', true);
558
- const sizeThreshold = this.appConfig.get('viewer.fileAutoDownloadSizeThresholdInMB', 15);
559
- if (fileAutoDownloadFlag && sizeInMB && sizeInMB > sizeThreshold) {
560
- this.dialog.open(FileAutoDownloadComponent, { disableClose: true, data: node });
561
- }
562
- else {
563
- this.preview.emit(new NodeEntityEvent(node));
564
- }
565
- }
566
- }
567
- onColumnsVisibilityChange(columns) {
568
- this.columnsVisibility = columns.reduce((visibleColumnsMap, column) => {
569
- if (column.isHidden !== undefined) {
570
- visibleColumnsMap[column.id] = !column.isHidden;
571
- }
572
- return visibleColumnsMap;
573
- }, {});
574
- this.createColumns();
575
- this.data.setColumns(this.columns);
576
- this.columnsVisibilityChanged.emit(this.columnsVisibility);
577
- }
578
- onColumnOrderChange(columnsWithNewOrder) {
579
- this.columnsOrder = columnsWithNewOrder.map((column) => column.id);
580
- this.createColumns();
581
- this.columnsOrderChanged.emit(this.columnsOrder);
582
- }
583
- onColumnsWidthChange(columns) {
584
- const newColumnsWidths = columns.reduce((widthsColumnsMap, column) => {
585
- if (column.width) {
586
- widthsColumnsMap[column.id] = Math.ceil(column.width);
587
- }
588
- return widthsColumnsMap;
589
- }, {});
590
- this.columnsWidths = { ...this.columnsWidths, ...newColumnsWidths };
591
- this.createColumns();
592
- this.columnsWidthChanged.emit(this.columnsWidths);
593
- }
594
- onSelectedItemsCountChanged(count) {
595
- this.selectedItemsCountChanged.emit(count);
596
- }
597
- onNodeClick(nodeEntry) {
598
- const domEvent = new CustomEvent('node-click', {
599
- detail: {
600
- sender: this,
601
- node: nodeEntry
602
- },
603
- bubbles: true
604
- });
605
- this.elementRef.nativeElement.dispatchEvent(domEvent);
606
- const event = new NodeEntityEvent(nodeEntry);
607
- this.nodeClick.emit(event);
608
- if (!event.defaultPrevented) {
609
- if (this.navigate && this.navigationMode === DocumentListComponent.SINGLE_CLICK_NAVIGATION) {
610
- this.executeActionClick(nodeEntry);
611
- }
612
- }
613
- }
614
- onNodeDblClick(nodeEntry) {
615
- const domEvent = new CustomEvent('node-dblclick', {
616
- detail: {
617
- sender: this,
618
- node: nodeEntry
619
- },
620
- bubbles: true
621
- });
622
- this.elementRef.nativeElement.dispatchEvent(domEvent);
623
- const event = new NodeEntityEvent(nodeEntry);
624
- this.nodeDblClick.emit(event);
625
- if (!event.defaultPrevented) {
626
- if (this.navigate && this.navigationMode === DocumentListComponent.DOUBLE_CLICK_NAVIGATION) {
627
- this.executeActionClick(nodeEntry);
628
- }
629
- }
630
- }
631
- executeActionClick(nodeEntry) {
632
- if (nodeEntry?.entry) {
633
- if (nodeEntry.entry.isFile) {
634
- this.onPreviewFile(nodeEntry);
635
- }
636
- if (nodeEntry.entry.isFolder) {
637
- this.navigateTo(nodeEntry.entry);
638
- }
639
- if (nodeEntry.entry['guid']) {
640
- const options = {
641
- include: this.includeFields
642
- };
643
- this.nodesApi.getNode(nodeEntry.entry['guid'], options).then((node) => {
644
- this.navigateTo(node.entry);
645
- });
646
- }
647
- }
648
- }
649
- onNodeSelect(event) {
650
- this.selection = event.selection.map((entry) => entry.node);
651
- const domEvent = new CustomEvent('node-select', {
652
- detail: {
653
- node: event.row ? event.row.node : null,
654
- selection: this.selection
655
- },
656
- bubbles: true
657
- });
658
- this.nodeSelected.emit(this.selection);
659
- this.elementRef.nativeElement.dispatchEvent(domEvent);
660
- }
661
- onNodeUnselect(event) {
662
- this.selection = event.selection.map((entry) => entry.node);
663
- const domEvent = new CustomEvent('node-unselect', {
664
- detail: {
665
- node: event.row ? event.row.node : null,
666
- selection: this.selection
667
- },
668
- bubbles: true
669
- });
670
- this.nodeSelected.emit(this.selection);
671
- this.elementRef.nativeElement.dispatchEvent(domEvent);
672
- }
673
- onShowRowContextMenu(event) {
674
- if (this.contextMenuActions) {
675
- const args = event.value;
676
- const node = args.row.node;
677
- if (node) {
678
- args.actions = this.getContextActions(node) || [];
679
- }
680
- }
681
- }
682
- onShowRowActionsMenu(event) {
683
- if (this.contentActions) {
684
- const args = event.value;
685
- const node = args.row.node;
686
- if (node) {
687
- args.actions = this.getNodeActions(node) || [];
688
- }
689
- }
690
- }
691
- onExecuteRowAction(event) {
692
- if (this.contentActions) {
693
- const args = event.value;
694
- const node = args.row.node;
695
- const action = args.action;
696
- this.executeContentAction(node, action);
697
- }
698
- }
699
- enforceSingleClickNavigationForMobile() {
700
- if (this.isMobile()) {
701
- this.navigationMode = DocumentListComponent.SINGLE_CLICK_NAVIGATION;
702
- }
703
- }
704
- canNavigateFolder(node) {
705
- let canNavigateFolder = false;
706
- if (node?.isFolder) {
707
- canNavigateFolder = true;
708
- }
709
- return canNavigateFolder;
710
- }
711
- onDataReady(nodePaging) {
712
- this.ready.emit(nodePaging);
713
- this.pagination.next(nodePaging.list.pagination);
714
- }
715
- updatePagination(requestPaginationModel) {
716
- this._pagination.maxItems = requestPaginationModel.maxItems;
717
- this._pagination.skipCount = requestPaginationModel.skipCount;
718
- this.reload(requestPaginationModel.merge);
719
- }
720
- syncPagination() {
721
- this.node.list.pagination.maxItems = this._pagination.maxItems;
722
- this.node.list.pagination.skipCount = this._pagination.skipCount;
723
- }
724
- onFilterSelectionChange(activeFilters) {
725
- this.filterSelection.emit(activeFilters);
726
- }
727
- resetNewFolderPagination() {
728
- this._pagination.skipCount = 0;
729
- this._pagination.maxItems = this.maxItems;
730
- }
731
- handleError(err) {
732
- if (err.message) {
733
- try {
734
- if (JSON.parse(err.message).error.statusCode === 403) {
735
- this.noPermission = true;
736
- }
737
- }
738
- catch (error) {
739
- /* empty */
740
- }
741
- }
742
- this.setLoadingState(false);
743
- this.error.emit(err);
744
- }
745
- getPreselectedNodesBasedOnSelectionMode() {
746
- return this.hasPreselectedNodes() ? (this.isSingleSelectionMode() ? [this.preselectNodes[0]] : this.preselectNodes) : [];
747
- }
748
- getPreselectedRowsBasedOnSelectionMode() {
749
- return this.hasPreselectedRows() ? (this.isSingleSelectionMode() ? [this.preselectedRows[0]] : this.preselectedRows) : [];
750
- }
751
- getSelectionBasedOnSelectionMode() {
752
- return this.hasPreselectedRows()
753
- ? this.isSingleSelectionMode()
754
- ? [this.preselectedRows[0]]
755
- : this.data.getSelectedRows()
756
- : this.data.getSelectedRows();
757
- }
758
- onPreselectNodes() {
759
- if (this.hasPreselectedNodes()) {
760
- this.preselectRowsOfPreselectedNodes();
761
- const preselectedRows = this.getPreselectedRowsBasedOnSelectionMode();
762
- const selection = this.data.getSelectedRows();
763
- for (const node of preselectedRows) {
764
- this.dataTable.selectRow(node, true);
765
- }
766
- this.onNodeSelect({ row: undefined, selection });
767
- }
768
- }
769
- preserveExistingSelection() {
770
- if (this.isMultipleSelectionMode()) {
771
- for (const selection of this.selection) {
772
- const rowOfSelection = this.data.getRowByNodeId(selection.entry.id);
773
- if (rowOfSelection) {
774
- rowOfSelection.isSelected = true;
775
- }
776
- }
777
- }
778
- }
779
- preselectRowsOfPreselectedNodes() {
780
- this.preselectedRows = [];
781
- const preselectedNodes = this.getPreselectedNodesBasedOnSelectionMode();
782
- preselectedNodes.forEach((preselectedNode) => {
783
- const rowOfPreselectedNode = this.data.getRowByNodeId(preselectedNode.entry.id);
784
- if (rowOfPreselectedNode) {
785
- rowOfPreselectedNode.isSelected = true;
786
- this.preselectedRows.push(rowOfPreselectedNode);
787
- }
788
- });
789
- }
790
- unselectRowFromNodeId(nodeId) {
791
- const rowToUnselect = this.data.getRowByNodeId(nodeId);
792
- if (rowToUnselect?.isSelected) {
793
- rowToUnselect.isSelected = false;
794
- this.dataTable.selectRow(rowToUnselect, false);
795
- const selection = this.getSelectionBasedOnSelectionMode();
796
- this.onNodeUnselect({ row: undefined, selection });
797
- }
798
- }
799
- isSingleSelectionMode() {
800
- return this.selectionMode === 'single';
801
- }
802
- isMultipleSelectionMode() {
803
- return this.selectionMode === 'multiple';
804
- }
805
- hasPreselectedNodes() {
806
- return this.preselectNodes?.length > 0;
807
- }
808
- hasPreselectedRows() {
809
- return this.preselectedRows?.length > 0;
810
- }
811
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, deps: [{ token: i1.DocumentListService }, { token: i0.ElementRef }, { token: i2.AppConfigService }, { token: i2.UserPreferencesService }, { token: i3.ContentService }, { token: i2.ThumbnailService }, { token: i4.AlfrescoApiService }, { token: i3.NodesApiService }, { token: i2.DataTableService }, { token: i5.LockService }, { token: i6.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
812
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentListComponent, isStandalone: true, selector: "adf-document-list", inputs: { includeFields: "includeFields", where: "where", permissionsStyle: "permissionsStyle", locationFormat: "locationFormat", navigate: "navigate", showHeader: "showHeader", navigationMode: "navigationMode", thumbnails: "thumbnails", selectionMode: "selectionMode", multiselect: "multiselect", contentActions: "contentActions", contentActionsPosition: "contentActionsPosition", contextMenuActions: "contextMenuActions", emptyFolderImageUrl: "emptyFolderImageUrl", allowDropFiles: "allowDropFiles", sorting: "sorting", additionalSorting: "additionalSorting", sortingMode: "sortingMode", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", loading: "loading", _rowFilter: "_rowFilter", rowFilter: "rowFilter", imageResolver: "imageResolver", stickyHeader: "stickyHeader", headerFilters: "headerFilters", filterValue: "filterValue", currentFolderId: "currentFolderId", preselectNodes: "preselectNodes", node: "node", maxItems: "maxItems", columnsPresetKey: "columnsPresetKey", setColumnsVisibility: "setColumnsVisibility", setColumnsWidths: "setColumnsWidths", setColumnsOrder: "setColumnsOrder", maxColumnsVisible: "maxColumnsVisible", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize", displayCheckboxesOnHover: "displayCheckboxesOnHover", displayDragAndDropHint: "displayDragAndDropHint" }, outputs: { nodeClick: "nodeClick", nodeDblClick: "nodeDblClick", folderChange: "folderChange", preview: "preview", ready: "ready", error: "error", nodeSelected: "nodeSelected", filterSelection: "filterSelection", columnsWidthChanged: "columnsWidthChanged", columnsVisibilityChanged: "columnsVisibilityChanged", columnsOrderChanged: "columnsOrderChanged", selectedItemsCountChanged: "selectedItemsCountChanged" }, host: { listeners: { "contextmenu": "onShowContextMenu($event)" }, classAttribute: "adf-document-list" }, providers: [
813
- {
814
- provide: ADF_DOCUMENT_PARENT_COMPONENT,
815
- useExisting: DocumentListComponent
816
- },
817
- DataTableService
818
- ], queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }, { propertyName: "customLoadingContent", first: true, predicate: CustomLoadingContentTemplateDirective, descendants: true }, { propertyName: "customNoPermissionsTemplate", first: true, predicate: CustomNoPermissionTemplateDirective, descendants: true }, { propertyName: "customNoContentTemplate", first: true, predicate: CustomEmptyContentTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dataTable", first: true, predicate: ["dataTable"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<adf-datatable\n #dataTable\n [selectionMode]=\"selectionMode\"\n [data]=\"data\"\n [actions]=\"contentActions\"\n [actionsPosition]=\"contentActionsPosition\"\n [multiselect]=\"multiselect\"\n [contextMenu]=\"contextMenuActions\"\n [rowStyle]=\"rowStyle\"\n [rowStyleClass]=\"rowStyleClass\"\n [showMainDatatableActions]=\"true\"\n [loading]=\"loading\"\n [noPermission]=\"noPermission\"\n [showHeader]=\"showHeader\"\n [rowMenuCacheEnabled]=\"false\"\n [stickyHeader]=\"stickyHeader\"\n [allowFiltering]=\"allowFiltering\"\n [isResizingEnabled]=\"isResizingEnabled\"\n [blurOnResize]=\"blurOnResize\"\n [displayCheckboxesOnHover]=\"displayCheckboxesOnHover\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChange($event)\"\n (columnOrderChanged)=\"onColumnOrderChange($event)\"\n (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n (rowClick)=\"onNodeClick($event.value?.node)\"\n (rowDblClick)=\"onNodeDblClick($event.value?.node)\"\n (row-select)=\"onNodeSelect($any($event).detail)\"\n (row-unselect)=\"onNodeUnselect($any($event).detail)\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n [class.adf-datatable-gallery-thumbnails]=\"data.thumbnails\">\n\n <div *ngIf=\"headerFilters\">\n <adf-filter-header\n [currentFolderId]=\"currentFolderId\"\n [value]=\"filterValue\"\n (filterSelection)=\"onFilterSelectionChange($event)\" />\n </div>\n\n <adf-no-content-template>\n <ng-template>\n <adf-empty-list *ngIf=\"!customNoContentTemplate\">\n <div class=\"adf-empty-list_template adf-empty-folder\">\n <div class=\"adf-empty-folder-this-space-is-empty\">{{'ADF-DOCUMENT-LIST.EMPTY.HEADER' | translate}}</div>\n <ng-container *ngIf=\"displayDragAndDropHint\">\n <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n </ng-container>\n <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\" [src]=\"emptyFolderImageUrl\">\n </div>\n </adf-empty-list>\n <ng-content select=\"adf-custom-empty-content-template, empty-folder-content\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-no-permission-template>\n <ng-template>\n <div class=\"adf-no-permission__template\" *ngIf=\"!customNoPermissionsTemplate\">\n <mat-icon>error</mat-icon>\n <p class=\"adf-no-permission__template--text\">{{ 'ADF-DOCUMENT-LIST.NO_PERMISSION' | translate }}</p>\n </div>\n <ng-content select=\"adf-custom-no-permission-template, no-permission-content\" />\n </ng-template>\n </adf-no-permission-template>\n\n <adf-loading-content-template>\n <ng-template>\n <div class=\"adf-document-list-loading-container\" *ngIf=\"!customLoadingContent\">\n <mat-progress-spinner\n id=\"adf-document-list-loading\"\n class=\"adf-document-list-loading-margin\"\n [attr.aria-label]=\"'ADF-DOCUMENT-LIST.LOADER_LABEL' | translate\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n </div>\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n [columnsSorting]=\"false\"\n [maxColumnsVisible]=\"maxColumnsVisible\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n\n</adf-datatable>\n", styles: [".adf-document-list{min-height:0;height:100%;background-color:var(--theme-background-color)}.adf-sticky-document-list{height:310px;overflow-y:auto}.adf-datatable-card .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px;position:absolute;top:10px}.adf-datatable-list .adf-datatable-selected{display:inline-table}.adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px}.adf-document-list_empty_template{text-align:center;margin-top:20px;margin-bottom:20px}.adf-no-permission__template{display:flex;align-items:center;justify-content:center;flex-direction:column;width:100%;height:100%;min-height:300px}.adf-no-permission__template mat-icon{font-size:52px;height:52px;width:52px}.adf-no-permission__template--text{color:var(--adf-theme-foreground-text-color);font-size:var(--theme-subheading-2-font-size)}.adf-document-list__this-space-is-empty{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-document-list__drag-drop{height:56px;opacity:.54;font-size:56px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px}.adf-document-list__any-files-here-to-add{height:24px;opacity:.54;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px}.adf-document-list__empty_doc_lib{width:565px;height:161px;object-fit:contain;margin-top:17px}.adf-document-list-loading-margin{margin:auto}.adf-document-list-loading-container{min-height:300px;display:flex;flex-direction:row;height:100%}.adf-empty-list-header{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination{color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination .adf-pagination__block{border-right:none}.adf-empty-folder-this-space-is-empty{height:32px;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color-054)}.adf-empty-folder-drag-drop{min-height:56px;font-size:53px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px;word-break:break-all;white-space:pre-line}@media (max-width: 599.9px){.adf-empty-folder-drag-drop{font-size:48px}}.adf-empty-folder-any-files-here-to-add{min-height:24px;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px;word-break:break-all;white-space:pre-line}.adf-empty-folder-image{width:565px;max-width:100%;object-fit:contain;margin-top:17px}@media (max-width: 599.9px){.adf-empty-folder-image{width:250px}}@media (max-width: 959.9px){.adf-empty-folder-drag-drop,.adf-empty-folder-any-files-here-to-add{display:none}}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row){height:300px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) img{height:130px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell{overflow:visible}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image{flex:0 0 auto;display:flex;flex-direction:column-reverse;justify-content:space-between}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image .adf-cell-value{display:flex;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DataTableComponent, selector: "adf-datatable", inputs: ["data", "rows", "sorting", "columns", "selectionMode", "multiselect", "mainTableAction", "actions", "showMainDatatableActions", "showProvidedActions", "actionsPosition", "actionsVisibleOnHover", "fallbackThumbnail", "contextMenu", "rowStyle", "rowStyleClass", "showHeader", "stickyHeader", "loading", "noPermission", "rowMenuCacheEnabled", "resolverFn", "allowFiltering", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "enableDragRows"], outputs: ["rowClick", "rowDblClick", "showRowContextMenu", "showRowActionsMenu", "executeRowAction", "columnOrderChanged", "columnsWidthChanged", "selectedItemsCountChanged", "dragDropped"] }, { kind: "component", type: FilterHeaderComponent, selector: "adf-filter-header", inputs: ["value", "currentFolderId"], outputs: ["filterSelection"] }, { kind: "directive", type: NoContentTemplateDirective, selector: "adf-no-content-template, no-content-template" }, { kind: "component", type: EmptyListComponent, selector: "adf-empty-list" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: NoPermissionTemplateDirective, selector: "adf-no-permission-template, no-permission-template" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: LoadingContentTemplateDirective, selector: "adf-loading-content-template, loading-content-template" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: MainMenuDataTableTemplateDirective, selector: "adf-main-menu-datatable-template" }, { kind: "component", type: ColumnsSelectorComponent, selector: "adf-datatable-column-selector", inputs: ["columns", "mainMenuTrigger", "columnsSorting", "maxColumnsVisible"], outputs: ["submitColumnsVisibility"] }], encapsulation: i0.ViewEncapsulation.None }); }
819
- }
820
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, decorators: [{
821
- type: Component,
822
- args: [{ selector: 'adf-document-list', standalone: true, imports: [
823
- CommonModule,
824
- DataTableComponent,
825
- FilterHeaderComponent,
826
- NoContentTemplateDirective,
827
- EmptyListComponent,
828
- TranslatePipe,
829
- NoPermissionTemplateDirective,
830
- MatIconModule,
831
- LoadingContentTemplateDirective,
832
- MatProgressSpinnerModule,
833
- MainMenuDataTableTemplateDirective,
834
- ColumnsSelectorComponent
835
- ], providers: [
836
- {
837
- provide: ADF_DOCUMENT_PARENT_COMPONENT,
838
- useExisting: DocumentListComponent
839
- },
840
- DataTableService
841
- ], encapsulation: ViewEncapsulation.None, host: { class: 'adf-document-list' }, template: "<adf-datatable\n #dataTable\n [selectionMode]=\"selectionMode\"\n [data]=\"data\"\n [actions]=\"contentActions\"\n [actionsPosition]=\"contentActionsPosition\"\n [multiselect]=\"multiselect\"\n [contextMenu]=\"contextMenuActions\"\n [rowStyle]=\"rowStyle\"\n [rowStyleClass]=\"rowStyleClass\"\n [showMainDatatableActions]=\"true\"\n [loading]=\"loading\"\n [noPermission]=\"noPermission\"\n [showHeader]=\"showHeader\"\n [rowMenuCacheEnabled]=\"false\"\n [stickyHeader]=\"stickyHeader\"\n [allowFiltering]=\"allowFiltering\"\n [isResizingEnabled]=\"isResizingEnabled\"\n [blurOnResize]=\"blurOnResize\"\n [displayCheckboxesOnHover]=\"displayCheckboxesOnHover\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChange($event)\"\n (columnOrderChanged)=\"onColumnOrderChange($event)\"\n (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n (rowClick)=\"onNodeClick($event.value?.node)\"\n (rowDblClick)=\"onNodeDblClick($event.value?.node)\"\n (row-select)=\"onNodeSelect($any($event).detail)\"\n (row-unselect)=\"onNodeUnselect($any($event).detail)\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n [class.adf-datatable-gallery-thumbnails]=\"data.thumbnails\">\n\n <div *ngIf=\"headerFilters\">\n <adf-filter-header\n [currentFolderId]=\"currentFolderId\"\n [value]=\"filterValue\"\n (filterSelection)=\"onFilterSelectionChange($event)\" />\n </div>\n\n <adf-no-content-template>\n <ng-template>\n <adf-empty-list *ngIf=\"!customNoContentTemplate\">\n <div class=\"adf-empty-list_template adf-empty-folder\">\n <div class=\"adf-empty-folder-this-space-is-empty\">{{'ADF-DOCUMENT-LIST.EMPTY.HEADER' | translate}}</div>\n <ng-container *ngIf=\"displayDragAndDropHint\">\n <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n </ng-container>\n <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\" [src]=\"emptyFolderImageUrl\">\n </div>\n </adf-empty-list>\n <ng-content select=\"adf-custom-empty-content-template, empty-folder-content\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-no-permission-template>\n <ng-template>\n <div class=\"adf-no-permission__template\" *ngIf=\"!customNoPermissionsTemplate\">\n <mat-icon>error</mat-icon>\n <p class=\"adf-no-permission__template--text\">{{ 'ADF-DOCUMENT-LIST.NO_PERMISSION' | translate }}</p>\n </div>\n <ng-content select=\"adf-custom-no-permission-template, no-permission-content\" />\n </ng-template>\n </adf-no-permission-template>\n\n <adf-loading-content-template>\n <ng-template>\n <div class=\"adf-document-list-loading-container\" *ngIf=\"!customLoadingContent\">\n <mat-progress-spinner\n id=\"adf-document-list-loading\"\n class=\"adf-document-list-loading-margin\"\n [attr.aria-label]=\"'ADF-DOCUMENT-LIST.LOADER_LABEL' | translate\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n </div>\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n [columnsSorting]=\"false\"\n [maxColumnsVisible]=\"maxColumnsVisible\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n\n</adf-datatable>\n", styles: [".adf-document-list{min-height:0;height:100%;background-color:var(--theme-background-color)}.adf-sticky-document-list{height:310px;overflow-y:auto}.adf-datatable-card .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px;position:absolute;top:10px}.adf-datatable-list .adf-datatable-selected{display:inline-table}.adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px}.adf-document-list_empty_template{text-align:center;margin-top:20px;margin-bottom:20px}.adf-no-permission__template{display:flex;align-items:center;justify-content:center;flex-direction:column;width:100%;height:100%;min-height:300px}.adf-no-permission__template mat-icon{font-size:52px;height:52px;width:52px}.adf-no-permission__template--text{color:var(--adf-theme-foreground-text-color);font-size:var(--theme-subheading-2-font-size)}.adf-document-list__this-space-is-empty{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-document-list__drag-drop{height:56px;opacity:.54;font-size:56px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px}.adf-document-list__any-files-here-to-add{height:24px;opacity:.54;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px}.adf-document-list__empty_doc_lib{width:565px;height:161px;object-fit:contain;margin-top:17px}.adf-document-list-loading-margin{margin:auto}.adf-document-list-loading-container{min-height:300px;display:flex;flex-direction:row;height:100%}.adf-empty-list-header{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination{color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination .adf-pagination__block{border-right:none}.adf-empty-folder-this-space-is-empty{height:32px;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color-054)}.adf-empty-folder-drag-drop{min-height:56px;font-size:53px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px;word-break:break-all;white-space:pre-line}@media (max-width: 599.9px){.adf-empty-folder-drag-drop{font-size:48px}}.adf-empty-folder-any-files-here-to-add{min-height:24px;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px;word-break:break-all;white-space:pre-line}.adf-empty-folder-image{width:565px;max-width:100%;object-fit:contain;margin-top:17px}@media (max-width: 599.9px){.adf-empty-folder-image{width:250px}}@media (max-width: 959.9px){.adf-empty-folder-drag-drop,.adf-empty-folder-any-files-here-to-add{display:none}}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row){height:300px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) img{height:130px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell{overflow:visible}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image{flex:0 0 auto;display:flex;flex-direction:column-reverse;justify-content:space-between}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image .adf-cell-value{display:flex;justify-content:center}\n"] }]
842
- }], ctorParameters: () => [{ type: i1.DocumentListService }, { type: i0.ElementRef }, { type: i2.AppConfigService }, { type: i2.UserPreferencesService }, { type: i3.ContentService }, { type: i2.ThumbnailService }, { type: i4.AlfrescoApiService }, { type: i3.NodesApiService }, { type: i2.DataTableService }, { type: i5.LockService }, { type: i6.MatDialog }], propDecorators: { columnList: [{
843
- type: ContentChild,
844
- args: [DataColumnListComponent]
845
- }], customLoadingContent: [{
846
- type: ContentChild,
847
- args: [CustomLoadingContentTemplateDirective]
848
- }], customNoPermissionsTemplate: [{
849
- type: ContentChild,
850
- args: [CustomNoPermissionTemplateDirective]
851
- }], customNoContentTemplate: [{
852
- type: ContentChild,
853
- args: [CustomEmptyContentTemplateDirective]
854
- }], includeFields: [{
855
- type: Input
856
- }], where: [{
857
- type: Input
858
- }], permissionsStyle: [{
859
- type: Input
860
- }], locationFormat: [{
861
- type: Input
862
- }], navigate: [{
863
- type: Input
864
- }], showHeader: [{
865
- type: Input
866
- }], navigationMode: [{
867
- type: Input
868
- }], thumbnails: [{
869
- type: Input
870
- }], selectionMode: [{
871
- type: Input
872
- }], multiselect: [{
873
- type: Input
874
- }], contentActions: [{
875
- type: Input
876
- }], contentActionsPosition: [{
877
- type: Input
878
- }], contextMenuActions: [{
879
- type: Input
880
- }], emptyFolderImageUrl: [{
881
- type: Input
882
- }], allowDropFiles: [{
883
- type: Input
884
- }], sorting: [{
885
- type: Input
886
- }], additionalSorting: [{
887
- type: Input
888
- }], sortingMode: [{
889
- type: Input
890
- }], rowStyle: [{
891
- type: Input
892
- }], rowStyleClass: [{
893
- type: Input
894
- }], loading: [{
895
- type: Input
896
- }], _rowFilter: [{
897
- type: Input
898
- }], rowFilter: [{
899
- type: Input
900
- }], imageResolver: [{
901
- type: Input
902
- }], stickyHeader: [{
903
- type: Input
904
- }], headerFilters: [{
905
- type: Input
906
- }], filterValue: [{
907
- type: Input
908
- }], currentFolderId: [{
909
- type: Input
910
- }], preselectNodes: [{
911
- type: Input
912
- }], node: [{
913
- type: Input
914
- }], maxItems: [{
915
- type: Input
916
- }], columnsPresetKey: [{
917
- type: Input
918
- }], setColumnsVisibility: [{
919
- type: Input
920
- }], setColumnsWidths: [{
921
- type: Input
922
- }], setColumnsOrder: [{
923
- type: Input
924
- }], maxColumnsVisible: [{
925
- type: Input
926
- }], isResizingEnabled: [{
927
- type: Input
928
- }], blurOnResize: [{
929
- type: Input
930
- }], displayCheckboxesOnHover: [{
931
- type: Input
932
- }], displayDragAndDropHint: [{
933
- type: Input
934
- }], nodeClick: [{
935
- type: Output
936
- }], nodeDblClick: [{
937
- type: Output
938
- }], folderChange: [{
939
- type: Output
940
- }], preview: [{
941
- type: Output
942
- }], ready: [{
943
- type: Output
944
- }], error: [{
945
- type: Output
946
- }], nodeSelected: [{
947
- type: Output
948
- }], filterSelection: [{
949
- type: Output
950
- }], columnsWidthChanged: [{
951
- type: Output
952
- }], columnsVisibilityChanged: [{
953
- type: Output
954
- }], columnsOrderChanged: [{
955
- type: Output
956
- }], selectedItemsCountChanged: [{
957
- type: Output
958
- }], dataTable: [{
959
- type: ViewChild,
960
- args: ['dataTable', { static: true }]
961
- }], onShowContextMenu: [{
962
- type: HostListener,
963
- args: ['contextmenu', ['$event']]
964
- }] } });
965
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2RvY3VtZW50LWxpc3QvY29tcG9uZW50cy9kb2N1bWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsMENBQTBDO0FBQzFDLHlEQUF5RDtBQUV6RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBQ3JDLG1DQUFtQyxFQUduQyx1QkFBdUIsRUFHdkIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQiwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFJN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFtQixVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JGLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFB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TixhQUFhO3NCQURaLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFTTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBT0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQU9GLGVBQWU7c0JBRGxCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixTQUFTO3NCQURSLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFTUCxPQUFPO3NCQUROLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLEtBQUs7c0JBREosTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxNQUFNO2dCQUtQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFLUCx3QkFBd0I7c0JBRHZCLE1BQU07Z0JBS1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQUtQLHlCQUF5QjtzQkFEeEIsTUFBTTtnQkFJUCxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkEwUnhDLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHJ4anMvbm8tc3ViamVjdC12YWx1ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbmltcG9ydCB7XG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBDb2x1bW5zU2VsZWN0b3JDb21wb25lbnQsXG4gICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBDdXN0b21Ob1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEYXRhQ2VsbEV2ZW50LFxuICAgIERhdGFDb2x1bW4sXG4gICAgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQsXG4gICAgRGF0YVJvdyxcbiAgICBEYXRhUm93QWN0aW9uRXZlbnQsXG4gICAgRGF0YVNvcnRpbmcsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIERhdGFUYWJsZVNjaGVtYSxcbiAgICBEYXRhVGFibGVTZXJ2aWNlLFxuICAgIEVtcHR5TGlzdENvbXBvbmVudCxcbiAgICBMb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE1haW5NZW51RGF0YVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTm9Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgUGFnaW5hdGVkQ29tcG9uZW50LFxuICAgIFBhZ2luYXRpb25Nb2RlbCxcbiAgICBSZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLFxuICAgIFNob3dIZWFkZXJNb2RlLFxuICAgIFRodW1ibmFpbFNlcnZpY2UsXG4gICAgVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBVc2VyUHJlZmVyZW5jZVZhbHVlc1xufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgTm9kZSwgTm9kZUVudHJ5LCBOb2RlUGFnaW5nLCBOb2Rlc0FwaSwgUGFnaW5hdGlvbiB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlLCBOb2Rlc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoIH0gZnJvbSAnLi4vLi4vc2VhcmNoJztcbmltcG9ydCB7IFJvd0ZpbHRlciB9IGZyb20gJy4uL2RhdGEvcm93LWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBTaGFyZURhdGFSb3cgfSBmcm9tICcuLi9kYXRhL3NoYXJlLWRhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IFNoYXJlRGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uL2RhdGEvc2hhcmUtZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgQ29udGVudEFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbnRlbnQtYWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IERvY3VtZW50TG9hZGVyTm9kZSB9IGZyb20gJy4uL21vZGVscy9kb2N1bWVudC1mb2xkZXIubW9kZWwnO1xuaW1wb3J0IHsgUGVybWlzc2lvblN0eWxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbnMtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgcHJlc2V0c0RlZmF1bHRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRMaXN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvY3VtZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBMb2NrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2suc2VydmljZSc7XG5pbXBvcnQgeyBBREZfRE9DVU1FTlRfUEFSRU5UX0NPTVBPTkVOVCB9IGZyb20gJy4vZG9jdW1lbnQtbGlzdC50b2tlbic7XG5pbXBvcnQgeyBGaWxlQXV0b0Rvd25sb2FkQ29tcG9uZW50IH0gZnJvbSAnLi9maWxlLWF1dG8tZG93bmxvYWQvZmlsZS1hdXRvLWRvd25sb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlRW50aXR5RXZlbnQsIE5vZGVFbnRyeUV2ZW50IH0gZnJvbSAnLi9ub2RlLmV2ZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2ZpbHRlci1oZWFkZXIvZmlsdGVyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBBbGZyZXNjb0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGZyZXNjby1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmNvbnN0IEJZVEVTX1RPX01CX0NPTlZFUlNJT05fVkFMVUUgPSAxMDQ4NTc2O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1kb2N1bWVudC1saXN0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgICAgIEZpbHRlckhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgTm9Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIEVtcHR5TGlzdENvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIExvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWFpbk1lbnVEYXRhVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgQ29sdW1uc1NlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBREZfRE9DVU1FTlRfUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBEb2N1bWVudExpc3RDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgRGF0YVRhYmxlU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLWRvY3VtZW50LWxpc3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRMaXN0Q29tcG9uZW50IGV4dGVuZHMgRGF0YVRhYmxlU2NoZW1hIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIFBhZ2luYXRlZENvbXBvbmVudCB7XG4gICAgc3RhdGljIFNJTkdMRV9DTElDS19OQVZJR0FUSU9OOiBzdHJpbmcgPSAnY2xpY2snO1xuICAgIHN0YXRpYyBET1VCTEVfQ0xJQ0tfTkFWSUdBVElPTjogc3RyaW5nID0gJ2RibGNsaWNrJztcblxuICAgIERFRkFVTFRfUEFHSU5BVElPTjogUGFnaW5hdGlvbiA9IG5ldyBQYWdpbmF0aW9uKHtcbiAgICAgICAgaGFzTW9yZUl0ZW1zOiBmYWxzZSxcbiAgICAgICAgc2tpcENvdW50OiAwLFxuICAgICAgICBtYXhJdGVtczogMjUsXG4gICAgICAgIHRvdGFsSXRlbXM6IDBcbiAgICB9KTtcblxuICAgIERFRkFVTFRfU09SVElORzogRGF0YVNvcnRpbmdbXSA9IFtuZXcgRGF0YVNvcnRpbmcoJ25hbWUnLCAnYXNjJyksIG5ldyBEYXRhU29ydGluZygnaXNGb2xkZXInLCAnZGVzYycpXTtcblxuICAgIEBDb250ZW50Q2hpbGQoRGF0YUNvbHVtbkxpc3RDb21wb25lbnQpXG4gICAgY29sdW1uTGlzdDogRGF0YUNvbHVtbkxpc3RDb21wb25lbnQ7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTG9hZGluZ0NvbnRlbnQ6IEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbU5vUGVybWlzc2lvblRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbU5vUGVybWlzc2lvbnNUZW1wbGF0ZTogQ3VzdG9tTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbU5vQ29udGVudFRlbXBsYXRlOiBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKiBJbmNsdWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgaW4gdGhlIHNlcnZlciByZXF1ZXN0LiBGb3IgZXhhbXBsZTogYXNzb2NpYXRpb24sIGlzTGluaywgaXNMb2NrZWQgYW5kIG90aGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGluY2x1ZGVGaWVsZHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVycyB0aGUgTm9kZSBsaXN0IHVzaW5nIHRoZSAqd2hlcmUqIGNvbmRpdGlvbiBvZiB0aGUgUkVTVCBBUElcbiAgICAgKiAoZm9yIGV4YW1wbGUsIGlzRm9sZGVyPXRydWUpLiBTZWUgdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB3aGVyZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIGEgc2V0IG9mIENTUyBzdHlsZXMgdG8gYXBwbHkgZGVwZW5kaW5nIG9uIHRoZSBwZXJtaXNzaW9uXG4gICAgICogb2YgdGhlIHVzZXIgb24gdGhhdCBub2RlLiBTZWUgdGhlIFBlcm1pc3Npb24gU3R5bGUgbW9kZWxcbiAgICAgKiBwYWdlIGZvciBmdXJ0aGVyIGRldGFpbHMgYW5kIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGVybWlzc2lvbnNTdHlsZTogUGVybWlzc2lvblN0eWxlTW9kZWxbXSA9IFtdO1xuXG4gICAgLyoqIFRoZSBkZWZhdWx0IHJvdXRlIGZvciBhbGwgdGhlIGxvY2F0aW9uLWJhc2VkIGNvbHVtbnMgKGlmIGRlY2xhcmVkKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvY2F0aW9uRm9ybWF0OiBzdHJpbmcgPSAnLyc7XG5cbiAgICAvKiogVG9nZ2xlcyBuYXZpZ2F0aW9uIHRvIGZvbGRlciBjb250ZW50IG9yIGZpbGUgcHJldmlldyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGhlYWRlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0hlYWRlciA9IFNob3dIZWFkZXJNb2RlLkRhdGE7XG5cbiAgICAvKipcbiAgICAgKiBVc2VyIGludGVyYWN0aW9uIGZvciBmb2xkZXIgbmF2aWdhdGlvbiBvciBmaWxlIHByZXZpZXcuXG4gICAgICogVmFsaWQgdmFsdWVzIGFyZSBcImNsaWNrXCIgYW5kIFwiZGJsY2xpY2tcIi4gRGVmYXVsdCB2YWx1ZTogXCJkYmxjbGlja1wiXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0aW9uTW9kZTogc3RyaW5nID0gRG9jdW1lbnRMaXN0Q29tcG9uZW50LkRPVUJMRV9DTElDS19OQVZJR0FUSU9OOyAvLyBjbGlja3xkYmxjbGlja1xuXG4gICAgLyoqIFNob3cgZG9jdW1lbnQgdGh1bWJuYWlscyByYXRoZXIgdGhhbiBpY29ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGh1bWJuYWlsczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUm93IHNlbGVjdGlvbiBtb2RlLiBDYW4gYmUgbnVsbCwgYHNpbmdsZWAgb3IgYG11bHRpcGxlYC4gRm9yIGBtdWx0aXBsZWAgbW9kZSxcbiAgICAgKiB5b3UgY2FuIHVzZSBDbWQgKG1hY09TKSBvciBDdHJsIChXaW4pIG1vZGlmaWVyIGtleSB0byB0b2dnbGUgc2VsZWN0aW9uIGZvciBtdWx0aXBsZSByb3dzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogc3RyaW5nID0gJ3NpbmdsZSc7IC8vIG51bGx8c2luZ2xlfG11bHRpcGxlXG5cbiAgICAvKiogVG9nZ2xlcyBtdWx0aXNlbGVjdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgY29udGVudCBhY3Rpb25zIGZvciBlYWNoIHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGVudEFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBQb3NpdGlvbiBvZiB0aGUgY29udGVudCBhY3Rpb25zIGRyb3Bkb3duIG1lbnUuIENhbiBiZSBzZXQgdG8gXCJsZWZ0XCIgb3IgXCJyaWdodFwiLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGVudEFjdGlvbnNQb3NpdGlvbjogc3RyaW5nID0gJ3JpZ2h0JzsgLy8gbGVmdHxyaWdodFxuXG4gICAgLyoqIFRvZ2dsZXMgY29udGV4dCBtZW51cyBmb3IgZWFjaCByb3cgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRleHRNZW51QWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEN1c3RvbSBpbWFnZSBmb3IgZW1wdHkgZm9sZGVyLiBEZWZhdWx0IHZhbHVlOiAnLi9hc3NldHMvaW1hZ2VzL2VtcHR5X2RvY19saWIuc3ZnJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW1wdHlGb2xkZXJJbWFnZVVybDogc3RyaW5nID0gJy4vYXNzZXRzL2ltYWdlcy9lbXB0eV9kb2NfbGliLnN2Zyc7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRydWUsIHRoaXMgZW5hYmxlcyB5b3UgdG8gZHJvcCBmaWxlcyBkaXJlY3RseSBpbnRvIHN1YmZvbGRlcnMgc2hvd25cbiAgICAgKiBhcyBpdGVtcyBpbiB0aGUgbGlzdCBvciBpbnRvIGFub3RoZXIgZmlsZSB0byB0cmlnZ2VyIHVwZGF0aW5nIGl0J3MgdmVyc2lvbi5cbiAgICAgKiBXaGVuIGZhbHNlLCB0aGUgZHJvcHBlZCBmaWxlIHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gICAgICogY3VycmVudCBmb2xkZXIgKGllLCB0aGUgb25lIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBzaG93biBpbiB0aGUgbGlzdCkuXG4gICAgICogU2VlIHRoZSBVcGxvYWQgZGlyZWN0aXZlIGZvciBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgaG93IHRoZSBmaWxlIGRyb3AgaXNcbiAgICAgKiBoYW5kbGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dEcm9wRmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZGVmYXVsdCBzb3J0aW5nLiBUaGUgZm9ybWF0IGlzIGFuIGFycmF5IG9mIDIgc3RyaW5ncyBgW2tleSwgZGlyZWN0aW9uXWBcbiAgICAgKiBpLmUuIGBbJ25hbWUnLCAnZGVzYyddYCBvciBgWyduYW1lJywgJ2FzYyddYC4gU2V0IHRoaXMgdmFsdWUgb25seSBpZiB5b3Ugd2FudCB0b1xuICAgICAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNvcnRpbmcgZGV0ZWN0ZWQgYnkgdGhlIGNvbXBvbmVudCBiYXNlZCBvbiBjb2x1bW5zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydGluZzogc3RyaW5nW10gfCBEYXRhU29ydGluZyA9IFsnbmFtZScsICdhc2MnXTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZGVmYXVsdCBzb3J0aW5nLiBUaGUgZm9ybWF0IGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgYFtrZXkgZGlyZWN0aW9uLCBvdGhlcktleSBvdGhlckRpcmVjdGlvbl1gXG4gICAgICogaS5lLiBgWyduYW1lIGRlc2MnLCAnbm9kZVR5cGUgYXNjJ11gIG9yIGBbJ25hbWUgYXNjJ11gLiBTZXQgdGhpcyB2YWx1ZSBpZiB5b3Ugd2FudCBhIGJhc2VcbiAgICAgKiBydWxlIHRvIGJlIGFkZGVkIHRvIHRoZSBzb3J0aW5nIGFwYXJ0IGZyb20gdGhlIG9uZSBkcml2ZW4gYnkgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFkZGl0aW9uYWxTb3J0aW5nOiBEYXRhU29ydGluZyA9IG5ldyBEYXRhU29ydGluZygnaXNGb2xkZXInLCAnZGVzYycpO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBzb3J0aW5nIG1vZGUuIENhbiBiZSBlaXRoZXIgYGNsaWVudGAgKGl0ZW1zIGluIHRoZSBsaXN0XG4gICAgICogYXJlIHNvcnRlZCBjbGllbnQtc2lkZSkgb3IgYHNlcnZlcmAgKHRoZSBvcmRlcmluZyBzdXBwbGllZCBieSB0aGVcbiAgICAgKiBzZXJ2ZXIgaXMgdXNlZCB3aXRob3V0IGZ1cnRoZXIgY2xpZW50LXNpZGUgc29ydGluZykuXG4gICAgICogTm90ZSB0aGF0IHRoZSBgc2VydmVyYCBvcHRpb24gKmRvZXMgbm90KiByZXF1ZXN0IHRoZSBzZXJ2ZXIgdG8gc29ydCB0aGUgZGF0YVxuICAgICAqIGJlZm9yZSBkZWxpdmVyaW5nIGl0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydGluZ01vZGU6ICdzZXJ2ZXInIHwgJ2NsaWVudCcgPSAnc2VydmVyJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmxpbmUgc3R5bGUgdG8gYXBwbHkgdG8gZXZlcnkgcm93LiBTZWVcbiAgICAgKiB0aGUgQW5ndWxhciBOZ1N0eWxlXG4gICAgICogZG9jcyBmb3IgbW9yZSBkZXRhaWxzIGFuZCB1c2FnZSBleGFtcGxlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gICAgLyoqIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gZXZlcnkgcm93ICovXG4gICAgQElucHV0KClcbiAgICByb3dTdHlsZUNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBsb2FkaW5nIHN0YXRlIGFuZCBhbmltYXRlZCBzcGlubmVycyBmb3IgdGhlIGNvbXBvbmVudC4gVXNlZCBpblxuICAgICAqIGNvbWJpbmF0aW9uIHdpdGggYG5hdmlnYXRlPWZhbHNlYCB0byBwZXJmb3JtIGN1c3RvbSBuYXZpZ2F0aW9uIGFuZCBsb2FkaW5nXG4gICAgICogc3RhdGUgaW5kaWNhdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgX3Jvd0ZpbHRlcjogUm93RmlsdGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gY2hvb3NlIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIHJvd3MuXG4gICAgICogU2VlIHRoZSBbUm93IEZpbHRlciBNb2RlbF0ocm93LWZpbHRlci5tb2RlbC5tZCkgcGFnZSBmb3JcbiAgICAgKiBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJvd0ZpbHRlcihyb3dGaWx0ZXI6IFJvd0ZpbHRlcikge1xuICAgICAgICB0aGlzLl9yb3dGaWx0ZXIgPSByb3dGaWx0ZXI7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRGaWx0ZXIodGhpcy5fcm93RmlsdGVyKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgcm93RmlsdGVyKCk6IFJvd0ZpbHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dGaWx0ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNob29zZSBpbWFnZSBmaWxlIHBhdGhzIHRvIHNob3cuIFNlZSB0aGVcbiAgICAgKiBbSW1hZ2UgUmVzb2x2ZXIgTW9kZWxdKGltYWdlLXJlc29sdmVyLm1vZGVsLm1kKSBwYWdlIGZvclxuICAgICAqIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpbWFnZVJlc29sdmVyOiBhbnkgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBzdGlja3kgaGVhZGVyIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzdGlja3lIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBoZWFkZXIgZmlsdGVycyBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVyRmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEluaXRpYWwgdmFsdWUgZm9yIGZpbHRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlclZhbHVlOiBhbnk7XG5cbiAgICAvKiogVGhlIElEIG9mIHRoZSBmb2xkZXIgbm9kZSB0byBkaXNwbGF5IG9yIGEgcmVzZXJ2ZWQgc3RyaW5nIGFsaWFzIGZvciBzcGVjaWFsIHNvdXJjZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGN1cnJlbnRGb2xkZXJJZDogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIG5vZGVzIHRvIGJlIHByZS1zZWxlY3RlZC4gQWxsIG5vZGVzIGluIHRoZVxuICAgICAqIGFycmF5IGFyZSBwcmUtc2VsZWN0ZWQgaW4gbXVsdGkgc2VsZWN0aW9uIG1vZGUsIGJ1dCBvbmx5IHRoZSBmaXJzdCBub2RlXG4gICAgICogaXMgcHJlLXNlbGVjdGVkIGluIHNpbmdsZSBzZWxlY3Rpb24gbW9kZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXNlbGVjdE5vZGVzOiBOb2RlRW50cnlbXSA9IFtdO1xuXG4gICAgLyoqIFRoZSBEb2N1bWVudCBsaXN0IHdpbGwgc2hvdyBhbGwgdGhlIG5vZGVzIGNvbnRhaW5lZCBpbiB0aGUgTm9kZVBhZ2luZyBlbnRpdHkgKi9cbiAgICBASW5wdXQoKVxuICAgIG5vZGU6IE5vZGVQYWdpbmcgPSBudWxsO1xuXG4gICAgLyoqIERlZmF1bHQgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSB1c2VyIHByZWZlcmVuY2Ugc2V0dGluZ3MuIFVzZSB0aGlzIG9ubHkgaWYgeW91IGFyZSBub3QgdXNpbmcgcGFnaW5hdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEl0ZW1zOiBudW1iZXIgPSB0aGlzLkRFRkFVTFRfUEFHSU5BVElPTi5tYXhJdGVtcztcblxuICAgIC8qKiBLZXkgb2YgY29sdW1ucyBwcmVzZXQgc2V0IGluIGV4dGVuc2lvbi5qc29uICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uc1ByZXNldEtleT86IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGNvbHVtbnMgdmlzaWJpbGl0eSBmb3IgRGF0YVRhYmxlU2NoZW1hICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2V0Q29sdW1uc1Zpc2liaWxpdHkoY29sdW1uc1Zpc2liaWxpdHk6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBib29sZWFuIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eSA9IGNvbHVtbnNWaXNpYmlsaXR5O1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGNvbHVtbnMgd2lkdGggZm9yIERhdGFUYWJsZVNjaGVtYSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNldENvbHVtbnNXaWR0aHMoY29sdW1uc1dpZHRoczogeyBbY29sdW1uSWQ6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc1dpZHRocyA9IGNvbHVtbnNXaWR0aHM7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY29sdW1ucyBvcmRlciBmb3IgRGF0YVRhYmxlU2NoZW1hICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2V0Q29sdW1uc09yZGVyKGNvbHVtbnNPcmRlcjogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXIgPSBjb2x1bW5zT3JkZXI7XG4gICAgfVxuXG4gICAgLyoqIExpbWl0IG9mIHBvc3NpYmxlIHZpc2libGUgY29sdW1ucywgaW5jbHVkaW5nIFwiJHRodW1ibmFpbFwiIGNvbHVtbiBpZiBwcm92aWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4Q29sdW1uc1Zpc2libGU/OiBudW1iZXI7XG5cbiAgICAvKiogRW5hYmxlcyBjb2x1bW4gcmVzaXppbmcgZm9yIGRhdGF0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNSZXNpemluZ0VuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBFbmFibGVzIGJsdXIgd2hlbiByZXNpemluZyBkYXRhdGFibGUgY29sdW1ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmx1ck9uUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNwbGF5IGNoZWNrYm94ZXMgaW4gZGF0YXRhYmxlIHJvd3Mgb24gaG92ZXIgb25seSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUNoZWNrYm94ZXNPbkhvdmVyID0gZmFsc2U7XG5cbiAgICAvKiogRGlzcGxheSBkcmFnIGFuZCBkcm9wIGhpbnQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5RHJhZ0FuZERyb3BIaW50ID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgbGlzdCBub2RlICovXG4gICAgQE91dHB1dCgpXG4gICAgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50aXR5RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGRvdWJsZS1jbGlja3MgYSBsaXN0IG5vZGUgKi9cbiAgICBAT3V0cHV0KClcbiAgICBub2RlRGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRpdHlFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGN1cnJlbnQgZGlzcGxheSBmb2xkZXIgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvbGRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJ5RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgYWN0cyB1cG9uIGZpbGVzIHdpdGggZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgY2xpY2tcbiAgICAgKiAoZGVwZW5kcyBvbiBgbmF2aWdhdGlvbi1tb2RlYCkuIFVzZWZ1bCBmb3IgaW50ZWdyYXRpb24gd2l0aCB0aGVcbiAgICAgKiBWaWV3ZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRpdHlFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIERvY3VtZW50IExpc3QgaGFzIGxvYWRlZCBhbGwgaXRlbXMgYW5kIGlzIHJlYWR5IGZvciB1c2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZVBhZ2luZz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIEFQSSBmYWlscyB0byBnZXQgdGhlIERvY3VtZW50IExpc3QgZGF0YSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBub2RlIHNlbGVjdGlvbiBjaGFuZ2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBub2RlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRyeVtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIGZpbHRlciB2YWx1ZSBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZpbHRlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU2VhcmNoW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGNvbHVtbiB3aWR0aHMgY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc1dpZHRoQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBbY29sdW1uSWQ6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBjb2x1bW5zIHZpc2liaWxpdHkgY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc1Zpc2liaWxpdHlDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtjb2x1bW5JZDogc3RyaW5nXTogYm9vbGVhbiB9IHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBjb2x1bW5zIG9yZGVyIGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbnNPcmRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgcm93IGl0ZW1zIGNvdW50IGluIHRoZSB0YWJsZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2RhdGFUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgZGF0YVRhYmxlOiBEYXRhVGFibGVDb21wb25lbnQ7XG5cbiAgICBhY3Rpb25zOiBDb250ZW50QWN0aW9uTW9kZWxbXSA9IFtdO1xuICAgIGNvbnRleHRBY3Rpb25IYW5kbGVyOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGRhdGE6IFNoYXJlRGF0YVRhYmxlQWRhcHRlcjtcbiAgICBub1Blcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzZWxlY3Rpb24gPSBuZXcgQXJyYXk8Tm9kZUVudHJ5PigpO1xuICAgICRmb2xkZXJOb2RlOiBTdWJqZWN0PE5vZGU+ID0gbmV3IFN1YmplY3Q8Tm9kZT4oKTtcbiAgICBhbGxvd0ZpbHRlcmluZzogYm9vbGVhbiA9IHRydWU7XG4gICAgb3JkZXJCeTogc3RyaW5nW10gPSBudWxsO1xuICAgIHByZXNlbGVjdGVkUm93czogRGF0YVJvd1tdID0gW107XG5cbiAgICAvLyBAZGVwcmVjYXRlZCAzLjAuMFxuICAgIGZvbGRlck5vZGU6IE5vZGU7XG5cbiAgICBwcml2YXRlIF9wYWdpbmF0aW9uOiBQYWdpbmF0aW9uTW9kZWwgPSB0aGlzLkRFRkFVTFRfUEFHSU5BVElPTjtcbiAgICBwYWdpbmF0aW9uOiBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbk1vZGVsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbk1vZGVsPih0aGlzLkRFRkFVTFRfUEFHSU5BVElPTik7XG4gICAgc29ydGluZ1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxEYXRhU29ydGluZ1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvcnRpbmdbXT4odGhpcy5ERUZBVUxUX1NPUlRJTkcpO1xuXG4gICAgcHJpdmF0ZSByb3dNZW51Q2FjaGU6IHsgW2tleTogc3RyaW5nXTogQ29udGVudEFjdGlvbk1vZGVsW10gfSA9IHt9O1xuICAgIHByaXZhdGUgbG9hZGluZ1RpbWVvdXQ6IGFueTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBnZXQgbm9kZXNBcGkoKTogTm9kZXNBcGkge1xuICAgICAgICB0aGlzLl9ub2Rlc0FwaSA9IHRoaXMuX25vZGVzQXBpID8/IG5ldyBOb2Rlc0FwaSh0aGlzLmFsZnJlc2NvQXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzQXBpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRvY3VtZW50TGlzdFNlcnZpY2U6IERvY3VtZW50TGlzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdGh1bWJuYWlsU2VydmljZTogVGh1bWJuYWlsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbGZyZXNjb0FwaVNlcnZpY2U6IEFsZnJlc2NvQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub2RlU2VydmljZTogTm9kZXNBcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRhdGFUYWJsZVNlcnZpY2U6IERhdGFUYWJsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFwcENvbmZpZywgJ2RlZmF1bHQnLCBwcmVzZXRzRGVmYXVsdE1vZGVsKTtcbiAgICAgICAgdGhpcy5ub2RlU2VydmljZS5ub2RlVXBkYXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlU2VydmljZS5yb3dVcGRhdGUubmV4dCh7IGlkOiBub2RlLmlkLCBvYmo6IHsgZW50cnk6IG5vZGUgfSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLlBhZ2luYXRpb25TaXplKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwYWdTaXplKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhJdGVtcyA9IHRoaXMuX3BhZ2luYXRpb24ubWF4SXRlbXMgPSBwYWdTaXplO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udGV4dEFjdGlvbnMobm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlPy5lbnRyeSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuZ2V0Tm9kZUFjdGlvbnMobm9kZSk7XG4gICAgICAgICAgICBpZiAoYWN0aW9ucyAmJiBhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucy5tYXAoKGN1cnJlbnRBY3Rpb246IENvbnRlbnRBY3Rpb25Nb2RlbCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IGN1cnJlbnRBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IHRoaXMuY29udGV4dEFjdGlvbkhhbmRsZXJcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0U29ydGluZygpOiBEYXRhU29ydGluZyB7XG4gICAgICAgIGxldCBkZWZhdWx0U29ydGluZzogRGF0YVNvcnRpbmc7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc29ydGluZykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIGRpcmVjdGlvbl0gPSB0aGlzLnNvcnRpbmc7XG4gICAgICAgICAgICBkZWZhdWx0U29ydGluZyA9IG5ldyBEYXRhU29ydGluZyhrZXksIGRpcmVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0U29ydGluZyA9IG5ldyBEYXRhU29ydGluZyh0aGlzLnNvcnRpbmcua2V5LCB0aGlzLnNvcnRpbmcuZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0U29ydGluZztcbiAgICB9XG5cbiAgICBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kYXRhIHx8IHRoaXMuZGF0YS5nZXRSb3dzKCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvd01lbnVDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLmxvYWRMYXlvdXRQcmVzZXRzKCk7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBTaGFyZURhdGFUYWJsZUFkYXB0ZXIoXG4gICAgICAgICAgICB0aGlzLnRodW1ibmFpbFNlcnZpY2UsXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRoaXMuZ2V0RGVmYXVsdFNvcnRpbmcoKSxcbiAgICAgICAgICAgIHRoaXMuc29ydGluZ01vZGUsXG4gICAgICAgICAgICB0aGlzLmFsbG93RHJvcEZpbGVzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGF0YS50aHVtYm5haWxzID0gdGhpcy50aHVtYm5haWxzO1xuICAgICAgICB0aGlzLmRhdGEucGVybWlzc2lvbnNTdHlsZSA9IHRoaXMucGVybWlzc2lvbnNTdHlsZTtcblxuICAgICAgICBpZiAodGhpcy5fcm93RmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0RmlsdGVyKHRoaXMuX3Jvd0ZpbHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbWFnZVJlc29sdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0SW1hZ2VSZXNvbHZlcih0aGlzLmltYWdlUmVzb2x2ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250ZXh0QWN0aW9uSGFuZGxlci5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZhbCkgPT4gdGhpcy5jb250ZXh0QWN0aW9uQ2FsbGJhY2sodmFsKSk7XG5cbiAgICAgICAgdGhpcy5lbmZvcmNlU2luZ2xlQ2xpY2tOYXZpZ2F0aW9uRm9yTW9iaWxlKCk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlICYmIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyVmFsdWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0hlYWRlciA9IFNob3dIZWFkZXJNb2RlLkFsd2F5cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2x1bW5zUHJlc2V0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNldFByZXNldEtleSh0aGlzLmNvbHVtbnNQcmVzZXRLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlLnJlbG9hZCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0U2VydmljZS5yZXNldFNlbGVjdGlvbiQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxpc3QuY29sdW1ucy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YXRhYmxlU2NoZW1hKCk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoIWNoYW5nZXNbJ3ByZXNlbGVjdE5vZGVzJ10pIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc29ydGluZykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIGRpcmVjdGlvbl0gPSB0aGlzLnNvcnRpbmc7XG4gICAgICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLmJ1aWxkT3JkZXJCeUFycmF5KGtleSwgZGlyZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckJ5QXJyYXkodGhpcy5zb3J0aW5nLmtleSwgdGhpcy5zb3J0aW5nLmRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudGh1bWJuYWlscyA9IHRoaXMudGh1bWJuYWlscztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNvcnRpbmdNb2RlICYmICFjaGFuZ2VzLnNvcnRpbmdNb2RlLmZpcnN0Q2hhbmdlICYmIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNvcnRpbmdNb2RlID0gY2hhbmdlcy5zb3J0aW5nTW9kZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5zb3J0aW5nICYmICFjaGFuZ2VzLnNvcnRpbmcuZmlyc3RDaGFuZ2UgJiYgdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNoYW5nZXMuc29ydGluZy5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIGRpcmVjdGlvbl0gPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2V0U29ydGluZyhuZXcgRGF0YVNvcnRpbmcoa2V5LCBkaXJlY3Rpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJZCAmJiBjaGFuZ2VzWydjdXJyZW50Rm9sZGVySWQnXT8uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydjdXJyZW50Rm9sZGVySWQnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZSA9IHRoaXMuX3BhZ2luYXRpb24gPyB0aGlzLl9wYWdpbmF0aW9uLm1lcmdlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmxvYWRQYWdlKGNoYW5nZXMubm9kZS5jdXJyZW50VmFsdWUsIG1lcmdlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJlc2VsZWN0Tm9kZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlYWR5KGNoYW5nZXMubm9kZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzLmltYWdlUmVzb2x2ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2V0SW1hZ2VSZXNvbHZlcihjaGFuZ2VzLmltYWdlUmVzb2x2ZXIuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbG9hZChoaWRlTG9hZGluZ1NwaW5uZXIgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVsb2FkV2l0aG91dFJlc2V0dGluZ1NlbGVjdGlvbihoaWRlTG9hZGluZ1NwaW5uZXIpO1xuICAgIH1cblxuICAgIHJlbG9hZFdpdGhvdXRSZXNldHRpbmdTZWxlY3Rpb24oaGlkZUxvYWRpbmdTcGlubmVyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5sb2FkUGFnZSh0aGlzLm5vZGUsIHRoaXMuX3BhZ2luYXRpb24ubWVyZ2UsIG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmVFeGlzdGluZ1NlbGVjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblByZXNlbGVjdE5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLnN5bmNQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm9uRGF0YVJlYWR5KHRoaXMubm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRGb2xkZXIoaGlkZUxvYWRpbmdTcGlubmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHRBY3Rpb25DYWxsYmFjayhhY3Rpb24pIHtcbiAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29udGVudEFjdGlvbihhY3Rpb24ubm9kZSwgYWN0aW9uLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE5vZGVBY3Rpb25zKG5vZGU6IE5vZGVFbnRyeSB8IGFueSk6IENvbnRlbnRBY3Rpb25Nb2RlbFtdIHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5KSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5vZGUuZW50cnkuaXNGaWxlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gJ2RvY3VtZW50JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5lbnRyeS5pc0ZvbGRlcikge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9ICdmb2xkZXInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMucm93TWVudUNhY2hlW25vZGUuZW50cnkuaWRdO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hBY3Rpb24oYWN0aW9uLCBub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnNCeVRhcmdldCA9IHRoaXMuYWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gdHlwZW9mIGVudHJ5LnZpc2libGUgPT09ICdmdW5jdGlvbicgPyBlbnRyeS52aXNpYmxlKG5vZGUpIDogZW50cnkudmlzaWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBlbnRyeS50YXJnZXQudG9Mb3dlckNhc2UoKSA9PT0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKChhY3Rpb24pID0+IG5ldyBDb250ZW50QWN0aW9uTW9kZWwoYWN0aW9uKSk7XG5cbiAgICAgICAgICAgICAgICBhY3Rpb25zQnlUYXJnZXQuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjdGlvbihhY3Rpb24sIG5vZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNZW51Q2FjaGVbbm9kZS5lbnRyeS5pZF0gPSBhY3Rpb25zQnlUYXJnZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnNCeVRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hBY3Rpb24oYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwsIG5vZGU6IE5vZGVFbnRyeSkge1xuICAgICAgICBhY3Rpb24uZGlzYWJsZWQgPSB0aGlzLmlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uLCBub2RlKTtcbiAgICAgICAgYWN0aW9uLnZpc2libGUgPSB0aGlzLmlzQWN0aW9uVmlzaWJsZShhY3Rpb24sIG5vZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25WaXNpYmxlKGFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsLCBub2RlOiBOb2RlRW50cnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24udmlzaWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi52aXNpYmxlKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbi52aXNpYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25EaXNhYmxlZChhY3Rpb246IENvbnRlbnRBY3Rpb25Nb2RlbCwgbm9kZTogTm9kZUVudHJ5KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmRpc2FibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGFjdGlvbi5wZXJtaXNzaW9uICYmIGFjdGlvbi5kaXNhYmxlV2l0aE5vUGVybWlzc2lvbiAmJiAhdGhpcy5jb250ZW50U2VydmljZS5oYXNBbGxvd2FibGVPcGVyYXRpb25zKG5vZGUuZW50cnksIGFjdGlvbi5wZXJtaXNzaW9uKSkgfHxcbiAgICAgICAgICAgIHRoaXMubG9ja1NlcnZpY2UuaXNMb2NrZWQobm9kZS5lbnRyeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gICAgb25TaG93Q29udGV4dE1lbnUoZT86IEV2ZW50KSB7XG4gICAgICAgIGlmIChlICYmIHRoaXMuY29udGV4dE1lbnVBY3Rpb25zKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvKG5vZGU6IE5vZGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5yZXNldE5ld0ZvbGRlclBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvbGRlcklkID0gbm9kZTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyQ2hhbmdlLmVtaXQobmV3IE5vZGVFbnRyeUV2ZW50KHsgaWQ6IG5vZGUgfSBhcyBOb2RlKSk7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZUZvbGRlcihub2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXROZXdGb2xkZXJQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVySWQgPSB0aGlzLmdldE5vZGVGb2xkZXJEZXN0aW5hdGlvbklkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckNoYW5nZS5lbWl0KG5ldyBOb2RlRW50cnlFdmVudCh7IGlkOiB0aGlzLmN1cnJlbnRGb2xkZXJJZCB9IGFzIE5vZGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vZGVGb2xkZXJEZXN0aW5hdGlvbklkKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaW5rRm9sZGVyKG5vZGUpID8gbm9kZS5wcm9wZXJ0aWVzWydjbTpkZXN0aW5hdGlvbiddIDogbm9kZS5pZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTGlua0ZvbGRlcihub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAnYXBwOmZvbGRlcmxpbmsnICYmIG5vZGUucHJvcGVydGllcz8uWydjbTpkZXN0aW5hdGlvbiddO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ3VzdG9tU291cmNlRGF0YShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IG5vZGVJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gZXhlY3V0aW5nIGNvbnRlbnQgYWN0aW9uIGZvciBhIGRvY3VtZW50IG9yIGZvbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgdGhlIGNvbnRleHQgb2YgdGhlIGV4ZWN1dGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiB0byBiZSBleGVjdXRlZCBhZ2FpbnN0IHRoZSBjb250ZXh0LlxuICAgICAqL1xuICAgIGV4ZWN1dGVDb250ZW50QWN0aW9uKG5vZGU6IE5vZGVFbnRyeSwgYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwpIHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5ICYmIGFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlclN1YiA9IHR5cGVvZiBhY3Rpb24uaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbi5oYW5kbGVyKG5vZGUsIHRoaXMsIGFjdGlvbi5wZXJtaXNzaW9uKSA6IG9mKHRydWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5leGVjdXRlID09PSAnZnVuY3Rpb24nICYmIGhhbmRsZXJTdWIpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyU3ViLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiBhY3Rpb24uZXhlY3V0ZShub2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5kYXRhPy5nZXRSb3dzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRm9sZGVyKGhpZGVMb2FkaW5nU3Bpbm5lciA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghaGlkZUxvYWRpbmdTcGlubmVyKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UuaXNDdXN0b21Tb3VyY2VTZXJ2aWNlKHRoaXMuY3VycmVudEZvbGRlcklkKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDdXN0b21Tb3VyY2VEYXRhKHRoaXMuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0U2VydmljZS5sb2FkRm9sZGVyQnlOb2RlSWQodGhpcy5jdXJyZW50Rm9sZGVySWQsIHRoaXMuX3BhZ2luYXRpb24sIHRoaXMuaW5jbHVkZUZpZWxkcywgdGhpcy53aGVyZSwgdGhpcy5vcmRlckJ5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoZG9jdW1lbnROb2RlOiBEb2N1bWVudExvYWRlck5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnROb2RlLmN1cnJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyTm9kZSA9IGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZS5lbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZm9sZGVyTm9kZS5uZXh0KGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlTG9hZGVkKGRvY3VtZW50Tm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldFNlbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5kYXRhVGFibGUucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgdGhpcy5ub1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblBhZ2VMb2FkZWQobm9kZVBhZ2luZzogTm9kZVBhZ2luZykge1xuICAgICAgICBpZiAobm9kZVBhZ2luZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5sb2FkUGFnZShub2RlUGFnaW5nLCB0aGlzLl9wYWdpbmF0aW9uLm1lcmdlLCB0aGlzLmFsbG93RHJvcEZpbGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25QcmVzZWxlY3ROb2RlcygpO1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWFkeShub2RlUGFnaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU29ydGluZ0NoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XG4gICAgICAgIHRoaXMub3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckJ5QXJyYXkoZXZlbnQuZGV0YWlsLnNvcnRpbmdLZXksIGV2ZW50LmRldGFpbC5kaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLnNvcnRpbmcgPSBbZXZlbnQuZGV0YWlsLnNvcnRpbmdLZXksIGV2ZW50LmRldGFpbC5kaXJlY3Rpb25dO1xuICAgICAgICB0aGlzLnNvcnRpbmdTdWJqZWN0Lm5leHQoW3RoaXMuYWRkaXRpb25hbFNvcnRpbmcsIGV2ZW50LmRldGFpbF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnNvcnRpbmdNb2RlID09PSAnc2VydmVyJykge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmRlckJ5QXJyYXkoY3VycmVudEtleTogc3RyaW5nLCBjdXJyZW50RGlyZWN0aW9uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbYCR7dGhpcy5hZGRpdGlvbmFsU29ydGluZy5rZXl9ICR7dGhpcy5hZGRpdGlvbmFsU29ydGluZy5kaXJlY3Rpb259YCwgYCR7Y3VycmVudEtleX0gJHtjdXJyZW50RGlyZWN0aW9ufWBdO1xuICAgIH1cblxuICAgIG9uUHJldmlld0ZpbGUobm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBjb25zdCBzaXplSW5NQiA9IG5vZGUuZW50cnk/LmNvbnRlbnQ/LnNpemVJbkJ5dGVzIC8gQllURVNfVE9fTUJfQ09OVkVSU0lPTl9WQUxVRTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVBdXRvRG93bmxvYWRGbGFnOiBib29sZWFuID0gdGhpcy5hcHBDb25maWcuZ2V0KCd2aWV3ZXIuZW5hYmxlRmlsZUF1dG9Eb3dubG9hZCcsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZVRocmVzaG9sZDogbnVtYmVyID0gdGhpcy5hcHBDb25maWcuZ2V0KCd2aWV3ZXIuZmlsZUF1dG9Eb3dubG9hZFNpemVUaHJlc2hvbGRJbk1CJywgMTUpO1xuXG4gICAgICAgICAgICBpZiAoZmlsZUF1dG9Eb3dubG9hZEZsYWcgJiYgc2l6ZUluTUIgJiYgc2l6ZUluTUIgPiBzaXplVGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihGaWxlQXV0b0Rvd25sb2FkQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogdHJ1ZSwgZGF0YTogbm9kZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3LmVtaXQobmV3IE5vZGVFbnRpdHlFdmVudChub2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKGNvbHVtbnM6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5ID0gY29sdW1ucy5yZWR1Y2UoKHZpc2libGVDb2x1bW5zTWFwLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZpc2libGVDb2x1bW5zTWFwW2NvbHVtbi5pZF0gPSAhY29sdW1uLmlzSGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnNNYXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eUNoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNWaXNpYmlsaXR5KTtcbiAgICB9XG5cbiAgICBvbkNvbHVtbk9yZGVyQ2hhbmdlKGNvbHVtbnNXaXRoTmV3T3JkZXI6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlciA9IGNvbHVtbnNXaXRoTmV3T3JkZXIubWFwKChjb2x1bW4pID0+IGNvbHVtbi5pZCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlckNoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNPcmRlcik7XG4gICAgfVxuXG4gICAgb25Db2x1bW5zV2lkdGhDaGFuZ2UoY29sdW1uczogRGF0YUNvbHVtbltdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbnNXaWR0aHMgPSBjb2x1bW5zLnJlZHVjZSgod2lkdGhzQ29sdW1uc01hcCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhzQ29sdW1uc01hcFtjb2x1bW4uaWRdID0gTWF0aC5jZWlsKGNvbHVtbi53aWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2lkdGhzQ29sdW1uc01hcDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMuY29sdW1uc1dpZHRocyA9IHsgLi4udGhpcy5jb2x1bW5zV2lkdGhzLCAuLi5uZXdDb2x1bW5zV2lkdGhzIH07XG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aENoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNXaWR0aHMpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KGNvdW50KTtcbiAgICB9XG5cbiAgICBvbk5vZGVDbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1jbGljaycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlRW50cnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE5vZGVFbnRpdHlFdmVudChub2RlRW50cnkpO1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KGV2ZW50KTtcblxuICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlICYmIHRoaXMubmF2aWdhdGlvbk1vZGUgPT09IERvY3VtZW50TGlzdENvbXBvbmVudC5TSU5HTEVfQ0xJQ0tfTkFWSUdBVElPTikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUFjdGlvbkNsaWNrKG5vZGVFbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVEYmxDbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1kYmxjbGljaycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlRW50cnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBOb2RlRW50aXR5RXZlbnQobm9kZUVudHJ5KTtcbiAgICAgICAgdGhpcy5ub2RlRGJsQ2xpY2suZW1pdChldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZSAmJiB0aGlzLm5hdmlnYXRpb25Nb2RlID09PSBEb2N1bWVudExpc3RDb21wb25lbnQuRE9VQkxFX0NMSUNLX05BVklHQVRJT04pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVBY3Rpb25DbGljayhub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUFjdGlvbkNsaWNrKG5vZGVFbnRyeTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlRW50cnk/LmVudHJ5KSB7XG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5LmlzRmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25QcmV2aWV3RmlsZShub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKG5vZGVFbnRyeS5lbnRyeSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlRW50cnkuZW50cnlbJ2d1aWQnXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6IHRoaXMuaW5jbHVkZUZpZWxkc1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzQXBpLmdldE5vZGUobm9kZUVudHJ5LmVudHJ5WydndWlkJ10sIG9wdGlvbnMpLnRoZW4oKG5vZGU6IE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8obm9kZS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVTZWxlY3QoZXZlbnQ6IHsgcm93OiBTaGFyZURhdGFSb3c7IHNlbGVjdGlvbjogQXJyYXk8U2hhcmVEYXRhUm93PiB9KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gZXZlbnQuc2VsZWN0aW9uLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5vZGUpO1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1zZWxlY3QnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBub2RlOiBldmVudC5yb3cgPyBldmVudC5yb3cubm9kZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcbiAgICB9XG5cbiAgICBvbk5vZGVVbnNlbGVjdChldmVudDogeyByb3c6IFNoYXJlRGF0YVJvdzsgc2VsZWN0aW9uOiBBcnJheTxTaGFyZURhdGFSb3c+IH0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBldmVudC5zZWxlY3Rpb24ubWFwKChlbnRyeSkgPT4gZW50cnkubm9kZSk7XG4gICAgICAgIGNvbnN0IGRvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdub2RlLXVuc2VsZWN0Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgbm9kZTogZXZlbnQucm93ID8gZXZlbnQucm93Lm5vZGUgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgb25TaG93Um93Q29udGV4dE1lbnUoZXZlbnQ6IERhdGFDZWxsRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgYXJncy5hY3Rpb25zID0gdGhpcy5nZXRDb250ZXh0QWN0aW9ucyhub2RlKSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd1Jvd0FjdGlvbnNNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgYXJncy5hY3Rpb25zID0gdGhpcy5nZXROb2RlQWN0aW9ucyhub2RlKSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihldmVudDogRGF0YVJvd0FjdGlvbkV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGFyZ3MuYWN0aW9uO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29udGVudEFjdGlvbihub2RlLCBhY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmZvcmNlU2luZ2xlQ2xpY2tOYXZpZ2F0aW9uRm9yTW9iaWxlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Nb2RlID0gRG9jdW1lbnRMaXN0Q29tcG9uZW50LlNJTkdMRV9DTElDS19OQVZJR0FUSU9OO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuTmF2aWdhdGVGb2xkZXIobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2FuTmF2aWdhdGVGb2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAobm9kZT8uaXNGb2xkZXIpIHtcbiAgICAgICAgICAgIGNhbk5hdmlnYXRlRm9sZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYW5OYXZpZ2F0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YVJlYWR5KG5vZGVQYWdpbmc6IE5vZGVQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5yZWFkeS5lbWl0KG5vZGVQYWdpbmcpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24ubmV4dChub2RlUGFnaW5nLmxpc3QucGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFnaW5hdGlvbihyZXF1ZXN0UGFnaW5hdGlvbk1vZGVsOiBSZXF1ZXN0UGFnaW5hdGlvbk1vZGVsKSB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb24ubWF4SXRlbXMgPSByZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLm1heEl0ZW1zO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLnNraXBDb3VudCA9IHJlcXVlc3RQYWdpbmF0aW9uTW9kZWwuc2tpcENvdW50O1xuICAgICAgICB0aGlzLnJlbG9hZChyZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLm1lcmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLm5vZGUubGlzdC5wYWdpbmF0aW9uLm1heEl0ZW1zID0gdGhpcy5fcGFnaW5hdGlvbi5tYXhJdGVtcztcbiAgICAgICAgdGhpcy5ub2RlLmxpc3QucGFnaW5hdGlvbi5za2lwQ291bnQgPSB0aGlzLl9wYWdpbmF0aW9uLnNraXBDb3VudDtcbiAgICB9XG5cbiAgICBvbkZpbHRlclNlbGVjdGlvbkNoYW5nZShhY3RpdmVGaWx0ZXJzOiBGaWx0ZXJTZWFyY2hbXSkge1xuICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGlvbi5lbWl0KGFjdGl2ZUZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbi5za2lwQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLm1heEl0ZW1zID0gdGhpcy5tYXhJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShlcnIubWVzc2FnZSkuZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9QZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICB9XG5cbiAgICBnZXRQcmVzZWxlY3RlZE5vZGVzQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogTm9kZUVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNQcmVzZWxlY3RlZE5vZGVzKCkgPyAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSA/IFt0aGlzLnByZXNlbGVjdE5vZGVzWzBdXSA6IHRoaXMucHJlc2VsZWN0Tm9kZXMpIDogW107XG4gICAgfVxuXG4gICAgZ2V0UHJlc2VsZWN0ZWRSb3dzQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogRGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUHJlc2VsZWN0ZWRSb3dzKCkgPyAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSA/IFt0aGlzLnByZXNlbGVjdGVkUm93c1swXV0gOiB0aGlzLnByZXNlbGVjdGVkUm93cykgOiBbXTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb25CYXNlZE9uU2VsZWN0aW9uTW9kZSgpOiBEYXRhUm93W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNQcmVzZWxlY3RlZFJvd3MoKVxuICAgICAgICAgICAgPyB0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpXG4gICAgICAgICAgICAgICAgPyBbdGhpcy5wcmVzZWxlY3RlZFJvd3NbMF1dXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGEuZ2V0U2VsZWN0ZWRSb3dzKClcbiAgICAgICAgICAgIDogdGhpcy5kYXRhLmdldFNlbGVjdGVkUm93cygpO1xuICAgIH1cblxuICAgIG9uUHJlc2VsZWN0Tm9kZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ByZXNlbGVjdGVkTm9kZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZWxlY3RSb3dzT2ZQcmVzZWxlY3RlZE5vZGVzKCk7XG4gICAgICAgICAgICBjb25zdCBwcmVzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFByZXNlbGVjdGVkUm93c0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRhdGEuZ2V0U2VsZWN0ZWRSb3dzKCkgYXMgU2hhcmVEYXRhUm93W107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwcmVzZWxlY3RlZFJvd3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5zZWxlY3RSb3cobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdCh7IHJvdzogdW5kZWZpbmVkLCBzZWxlY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0aW9uIG9mIHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93T2ZTZWxlY3Rpb24gPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQoc2VsZWN0aW9uLmVudHJ5LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAocm93T2ZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcm93T2ZTZWxlY3Rpb24uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJlc2VsZWN0Um93c09mUHJlc2VsZWN0ZWROb2RlcygpIHtcbiAgICAgICAgdGhpcy5wcmVzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgY29uc3QgcHJlc2VsZWN0ZWROb2RlcyA9IHRoaXMuZ2V0UHJlc2VsZWN0ZWROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG5cbiAgICAgICAgcHJlc2VsZWN0ZWROb2Rlcy5mb3JFYWNoKChwcmVzZWxlY3RlZE5vZGU6IE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93T2ZQcmVzZWxlY3RlZE5vZGUgPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQocHJlc2VsZWN0ZWROb2RlLmVudHJ5LmlkKTtcbiAgICAgICAgICAgIGlmIChyb3dPZlByZXNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgICAgIHJvd09mUHJlc2VsZWN0ZWROb2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2VsZWN0ZWRSb3dzLnB1c2gocm93T2ZQcmVzZWxlY3RlZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1bnNlbGVjdFJvd0Zyb21Ob2RlSWQobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm93VG9VbnNlbGVjdCA9IHRoaXMuZGF0YS5nZXRSb3dCeU5vZGVJZChub2RlSWQpO1xuICAgICAgICBpZiAocm93VG9VbnNlbGVjdD8uaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgcm93VG9VbnNlbGVjdC5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5zZWxlY3RSb3cocm93VG9VbnNlbGVjdCwgZmFsc2UpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb25CYXNlZE9uU2VsZWN0aW9uTW9kZSgpIGFzIFNoYXJlRGF0YVJvd1tdO1xuICAgICAgICAgICAgdGhpcy5vbk5vZGVVbnNlbGVjdCh7IHJvdzogdW5kZWZpbmVkLCBzZWxlY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkTm9kZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbGVjdE5vZGVzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlc2VsZWN0ZWRSb3dzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDA7XG4gICAgfVxufVxuIiwiPGFkZi1kYXRhdGFibGVcbiAgICAjZGF0YVRhYmxlXG4gICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2FjdGlvbnNdPVwiY29udGVudEFjdGlvbnNcIlxuICAgIFthY3Rpb25zUG9zaXRpb25dPVwiY29udGVudEFjdGlvbnNQb3NpdGlvblwiXG4gICAgW211bHRpc2VsZWN0XT1cIm11bHRpc2VsZWN0XCJcbiAgICBbY29udGV4dE1lbnVdPVwiY29udGV4dE1lbnVBY3Rpb25zXCJcbiAgICBbcm93U3R5bGVdPVwicm93U3R5bGVcIlxuICAgIFtyb3dTdHlsZUNsYXNzXT1cInJvd1N0eWxlQ2xhc3NcIlxuICAgIFtzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnNdPVwidHJ1ZVwiXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgW25vUGVybWlzc2lvbl09XCJub1Blcm1pc3Npb25cIlxuICAgIFtzaG93SGVhZGVyXT1cInNob3dIZWFkZXJcIlxuICAgIFtyb3dNZW51Q2FjaGVFbmFibGVkXT1cImZhbHNlXCJcbiAgICBbc3RpY2t5SGVhZGVyXT1cInN0aWNreUhlYWRlclwiXG4gICAgW2FsbG93RmlsdGVyaW5nXT1cImFsbG93RmlsdGVyaW5nXCJcbiAgICBbaXNSZXNpemluZ0VuYWJsZWRdPVwiaXNSZXNpemluZ0VuYWJsZWRcIlxuICAgIFtibHVyT25SZXNpemVdPVwiYmx1ck9uUmVzaXplXCJcbiAgICBbZGlzcGxheUNoZWNrYm94ZXNPbkhvdmVyXT1cImRpc3BsYXlDaGVja2JveGVzT25Ib3ZlclwiXG4gICAgKHNob3dSb3dDb250ZXh0TWVudSk9XCJvblNob3dSb3dDb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgICAoc2hvd1Jvd0FjdGlvbnNNZW51KT1cIm9uU2hvd1Jvd0FjdGlvbnNNZW51KCRldmVudClcIlxuICAgIChleGVjdXRlUm93QWN0aW9uKT1cIm9uRXhlY3V0ZVJvd0FjdGlvbigkZXZlbnQpXCJcbiAgICAoY29sdW1uc1dpZHRoQ2hhbmdlZCk9XCJvbkNvbHVtbnNXaWR0aENoYW5nZSgkZXZlbnQpXCJcbiAgICAoY29sdW1uT3JkZXJDaGFuZ2VkKT1cIm9uQ29sdW1uT3JkZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQpPVwib25TZWxlY3RlZEl0ZW1zQ291bnRDaGFuZ2VkKCRldmVudClcIlxuICAgIChyb3dDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQudmFsdWU/Lm5vZGUpXCJcbiAgICAocm93RGJsQ2xpY2spPVwib25Ob2RlRGJsQ2xpY2soJGV2ZW50LnZhbHVlPy5ub2RlKVwiXG4gICAgKHJvdy1zZWxlY3QpPVwib25Ob2RlU2VsZWN0KCRhbnkoJGV2ZW50KS5kZXRhaWwpXCJcbiAgICAocm93LXVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0KCRhbnkoJGV2ZW50KS5kZXRhaWwpXCJcbiAgICAoc29ydGluZy1jaGFuZ2VkKT1cIm9uU29ydGluZ0NoYW5nZWQoJGFueSgkZXZlbnQpKVwiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtZ2FsbGVyeS10aHVtYm5haWxzXT1cImRhdGEudGh1bWJuYWlsc1wiPlxuXG4gICAgPGRpdiAqbmdJZj1cImhlYWRlckZpbHRlcnNcIj5cbiAgICAgICAgPGFkZi1maWx0ZXItaGVhZGVyXG4gICAgICAgICAgICBbY3VycmVudEZvbGRlcklkXT1cImN1cnJlbnRGb2xkZXJJZFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgKGZpbHRlclNlbGVjdGlvbik9XCJvbkZpbHRlclNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxhZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGFkZi1lbXB0eS1saXN0ICpuZ0lmPVwiIWN1c3RvbU5vQ29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1saXN0X3RlbXBsYXRlIGFkZi1lbXB0eS1mb2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItdGhpcy1zcGFjZS1pcy1lbXB0eVwiPnt7J0FERi1ET0NVTUVOVC1MSVNULkVNUFRZLkhFQURFUicgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheURyYWdBbmREcm9wSGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItZHJhZy1kcm9wXCI+e3sgJ0FERi1EQVRBVEFCTEUuRU1QVFkuRFJBRy1BTkQtRFJPUC5USVRMRScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLWFueS1maWxlcy1oZXJlLXRvLWFkZFwiPnt7ICdBREYtREFUQVRBQkxFLkVNUFRZLkRSQUctQU5ELURST1AuU1VCVElUTEUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIFthbHRdPVwiJ0FERi1EQVRBVEFCTEUuRU1QVFkuRFJBRy1BTkQtRFJPUC5USVRMRScgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItaW1hZ2VcIiBbc3JjXT1cImVtcHR5Rm9sZGVySW1hZ2VVcmxcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWVtcHR5LWxpc3Q+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGUsIGVtcHR5LWZvbGRlci1jb250ZW50XCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1uby1jb250ZW50LXRlbXBsYXRlPlxuXG4gICAgPGFkZi1uby1wZXJtaXNzaW9uLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLXBlcm1pc3Npb25fX3RlbXBsYXRlXCIgKm5nSWY9XCIhY3VzdG9tTm9QZXJtaXNzaW9uc1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmVycm9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX190ZW1wbGF0ZS0tdGV4dFwiPnt7ICdBREYtRE9DVU1FTlQtTElTVC5OT19QRVJNSVNTSU9OJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1uby1wZXJtaXNzaW9uLXRlbXBsYXRlLCBuby1wZXJtaXNzaW9uLWNvbnRlbnRcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLW5vLXBlcm1pc3Npb24tdGVtcGxhdGU+XG5cbiAgICA8YWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kb2N1bWVudC1saXN0LWxvYWRpbmctY29udGFpbmVyXCIgKm5nSWY9XCIhY3VzdG9tTG9hZGluZ0NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nLW1hcmdpblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1ET0NVTUVOVC1MSVNULkxPQURFUl9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiJ2luZGV0ZXJtaW5hdGUnXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGVcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cblxuICAgIDxhZGYtbWFpbi1tZW51LWRhdGF0YWJsZS10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1tYWluTWVudVRyaWdnZXI+XG4gICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jb2x1bW4tc2VsZWN0b3JcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICAgIFttYWluTWVudVRyaWdnZXJdPVwibWFpbk1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgW2NvbHVtbnNTb3J0aW5nXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW21heENvbHVtbnNWaXNpYmxlXT1cIm1heENvbHVtbnNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgKHN1Ym1pdENvbHVtbnNWaXNpYmlsaXR5KT1cIm9uQ29sdW1uc1Zpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9hZGYtbWFpbi1tZW51LWRhdGF0YWJsZS10ZW1wbGF0ZT5cblxuPC9hZGYtZGF0YXRhYmxlPlxuIl19