@alfresco/adf-content-services 8.1.0-15972188736 → 8.1.0-15979090800

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 (408) hide show
  1. package/esm2022/adf-content-services.mjs +5 -0
  2. package/esm2022/lib/agent/index.mjs +18 -0
  3. package/esm2022/lib/agent/public-api.mjs +18 -0
  4. package/esm2022/lib/agent/services/agent.service.mjs +60 -0
  5. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
  6. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
  7. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +77 -0
  8. package/esm2022/lib/api-factories/index.mjs +18 -0
  9. package/esm2022/lib/api-factories/public-api.mjs +19 -0
  10. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
  11. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +77 -0
  12. package/esm2022/lib/aspect-list/aspect-list.component.mjs +139 -0
  13. package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
  14. package/esm2022/lib/aspect-list/index.mjs +18 -0
  15. package/esm2022/lib/aspect-list/public-api.mjs +24 -0
  16. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
  17. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
  18. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
  19. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
  20. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
  21. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +166 -0
  22. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
  23. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +65 -0
  24. package/esm2022/lib/breadcrumb/index.mjs +18 -0
  25. package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
  26. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
  27. package/esm2022/lib/category/categories-management/categories-management.component.mjs +308 -0
  28. package/esm2022/lib/category/category.module.mjs +33 -0
  29. package/esm2022/lib/category/index.mjs +18 -0
  30. package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
  31. package/esm2022/lib/category/public-api.mjs +23 -0
  32. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
  33. package/esm2022/lib/category/services/category.service.mjs +159 -0
  34. package/esm2022/lib/common/events/file.event.mjs +46 -0
  35. package/esm2022/lib/common/index.mjs +18 -0
  36. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
  37. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
  38. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
  39. package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
  40. package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
  41. package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
  42. package/esm2022/lib/common/models/file.model.mjs +53 -0
  43. package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
  44. package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
  45. package/esm2022/lib/common/public-api.mjs +37 -0
  46. package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
  47. package/esm2022/lib/common/services/content.service.mjs +180 -0
  48. package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
  49. package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
  50. package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
  51. package/esm2022/lib/common/services/people-content.service.mjs +138 -0
  52. package/esm2022/lib/common/services/rendition.service.mjs +270 -0
  53. package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
  54. package/esm2022/lib/common/services/sites.service.mjs +243 -0
  55. package/esm2022/lib/common/services/upload.service.mjs +391 -0
  56. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +54 -0
  57. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +490 -0
  58. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +128 -0
  59. package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
  60. package/esm2022/lib/content-metadata/index.mjs +18 -0
  61. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
  62. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
  63. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
  64. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
  65. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
  66. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
  67. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
  68. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
  69. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
  70. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
  71. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
  72. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
  73. package/esm2022/lib/content-metadata/public-api.mjs +31 -0
  74. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
  75. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
  76. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
  77. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
  78. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
  79. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
  80. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
  81. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
  82. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
  83. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
  84. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
  85. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +617 -0
  86. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
  87. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
  88. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +205 -0
  89. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
  90. package/esm2022/lib/content-node-selector/index.mjs +18 -0
  91. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
  92. package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
  93. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
  94. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +287 -0
  95. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
  96. package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
  97. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
  98. package/esm2022/lib/content-node-share/index.mjs +18 -0
  99. package/esm2022/lib/content-node-share/public-api.mjs +22 -0
  100. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
  101. package/esm2022/lib/content-type/content-type-dialog.component.mjs +57 -0
  102. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
  103. package/esm2022/lib/content-type/content-type.service.mjs +52 -0
  104. package/esm2022/lib/content-type/index.mjs +20 -0
  105. package/esm2022/lib/content.module.mjs +277 -0
  106. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +51 -0
  107. package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
  108. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
  109. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
  110. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
  111. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
  112. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +146 -0
  113. package/esm2022/lib/dialogs/index.mjs +18 -0
  114. package/esm2022/lib/dialogs/library/library.dialog.mjs +224 -0
  115. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +115 -0
  116. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  117. package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
  118. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
  119. package/esm2022/lib/directives/content-directive.module.mjs +75 -0
  120. package/esm2022/lib/directives/index.mjs +18 -0
  121. package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
  122. package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
  123. package/esm2022/lib/directives/node-counter.directive.mjs +59 -0
  124. package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
  125. package/esm2022/lib/directives/node-download.directive.mjs +138 -0
  126. package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
  127. package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
  128. package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
  129. package/esm2022/lib/directives/public-api.mjs +28 -0
  130. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
  131. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
  132. package/esm2022/lib/document-list/components/document-list.component.mjs +963 -0
  133. package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
  134. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +42 -0
  135. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
  136. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +131 -0
  137. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +91 -0
  138. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +86 -0
  139. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +118 -0
  140. package/esm2022/lib/document-list/components/node.event.mjs +30 -0
  141. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
  142. package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
  143. package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
  144. package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
  145. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
  146. package/esm2022/lib/document-list/document-list.module.mjs +75 -0
  147. package/esm2022/lib/document-list/index.mjs +18 -0
  148. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
  149. package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
  150. package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
  151. package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
  152. package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
  153. package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
  154. package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
  155. package/esm2022/lib/document-list/public-api.mjs +47 -0
  156. package/esm2022/lib/document-list/services/custom-resources.service.mjs +378 -0
  157. package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
  158. package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
  159. package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
  160. package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
  161. package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
  162. package/esm2022/lib/group/index.mjs +18 -0
  163. package/esm2022/lib/group/public-api.mjs +18 -0
  164. package/esm2022/lib/group/services/group.service.mjs +84 -0
  165. package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
  166. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
  167. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
  168. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
  169. package/esm2022/lib/interfaces/index.mjs +18 -0
  170. package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
  171. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
  172. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
  173. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
  174. package/esm2022/lib/interfaces/public-api.mjs +23 -0
  175. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
  176. package/esm2022/lib/legal-hold/index.mjs +18 -0
  177. package/esm2022/lib/legal-hold/public-api.mjs +18 -0
  178. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
  179. package/esm2022/lib/material.module.mjs +183 -0
  180. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
  181. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
  182. package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
  183. package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
  184. package/esm2022/lib/mock/index.mjs +18 -0
  185. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
  186. package/esm2022/lib/mock/public-api.mjs +27 -0
  187. package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
  188. package/esm2022/lib/mock/search-query.mock.mjs +40 -0
  189. package/esm2022/lib/mock/search.component.mock.mjs +165 -0
  190. package/esm2022/lib/mock/search.service.mock.mjs +61 -0
  191. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
  192. package/esm2022/lib/new-version-uploader/index.mjs +18 -0
  193. package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
  194. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
  195. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +74 -0
  196. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
  197. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
  198. package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
  199. package/esm2022/lib/node-comments/index.mjs +18 -0
  200. package/esm2022/lib/node-comments/node-comments.component.mjs +44 -0
  201. package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
  202. package/esm2022/lib/node-comments/public-api.mjs +20 -0
  203. package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
  204. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
  205. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +123 -0
  206. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +102 -0
  207. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +69 -0
  208. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
  209. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
  210. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
  211. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +102 -0
  212. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +87 -0
  213. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
  214. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
  215. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
  216. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
  217. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +111 -0
  218. package/esm2022/lib/permission-manager/index.mjs +18 -0
  219. package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
  220. package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
  221. package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
  222. package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
  223. package/esm2022/lib/permission-manager/public-api.mjs +36 -0
  224. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
  225. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
  226. package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
  227. package/esm2022/lib/pipes/index.mjs +18 -0
  228. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
  229. package/esm2022/lib/pipes/public-api.mjs +19 -0
  230. package/esm2022/lib/prediction/index.mjs +18 -0
  231. package/esm2022/lib/prediction/public-api.mjs +18 -0
  232. package/esm2022/lib/prediction/services/index.mjs +18 -0
  233. package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
  234. package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
  235. package/esm2022/lib/search/components/index.mjs +43 -0
  236. package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
  237. package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
  238. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +158 -0
  239. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
  240. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +169 -0
  241. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +46 -0
  242. package/esm2022/lib/search/components/search-control.component.mjs +180 -0
  243. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
  244. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
  245. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
  246. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +196 -0
  247. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
  248. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
  249. package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
  250. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +223 -0
  251. package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
  252. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +132 -0
  253. package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
  254. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +45 -0
  255. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +80 -0
  256. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
  257. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +154 -0
  258. package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
  259. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +104 -0
  260. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +109 -0
  261. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
  262. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +63 -0
  263. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +43 -0
  264. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +109 -0
  265. package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
  266. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +122 -0
  267. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
  268. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
  269. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +63 -0
  270. package/esm2022/lib/search/components/search-form/index.mjs +18 -0
  271. package/esm2022/lib/search/components/search-form/search-form.component.mjs +52 -0
  272. package/esm2022/lib/search/components/search-input/index.mjs +18 -0
  273. package/esm2022/lib/search/components/search-input/search-input.component.mjs +108 -0
  274. package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
  275. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +163 -0
  276. package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
  277. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +154 -0
  278. package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
  279. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
  280. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
  281. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
  282. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
  283. package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
  284. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
  285. package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
  286. package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
  287. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +145 -0
  288. package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
  289. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +119 -0
  290. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
  291. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
  292. package/esm2022/lib/search/components/search-text/index.mjs +18 -0
  293. package/esm2022/lib/search/components/search-text/search-text.component.mjs +134 -0
  294. package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
  295. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
  296. package/esm2022/lib/search/components/search.component.mjs +152 -0
  297. package/esm2022/lib/search/forms/index.mjs +19 -0
  298. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
  299. package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
  300. package/esm2022/lib/search/index.mjs +18 -0
  301. package/esm2022/lib/search/mocks/index.mjs +18 -0
  302. package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
  303. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
  304. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
  305. package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
  306. package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
  307. package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
  308. package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
  309. package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
  310. package/esm2022/lib/search/models/index.mjs +34 -0
  311. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
  312. package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
  313. package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
  314. package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
  315. package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
  316. package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
  317. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
  318. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
  319. package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
  320. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
  321. package/esm2022/lib/search/public-api.mjs +24 -0
  322. package/esm2022/lib/search/search-configuration.token.mjs +19 -0
  323. package/esm2022/lib/search/search.module.mjs +192 -0
  324. package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
  325. package/esm2022/lib/search/services/index.mjs +24 -0
  326. package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
  327. package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
  328. package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
  329. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
  330. package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
  331. package/esm2022/lib/search/services/search.service.mjs +89 -0
  332. package/esm2022/lib/search-ai/index.mjs +18 -0
  333. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
  334. package/esm2022/lib/search-ai/public-api.mjs +19 -0
  335. package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
  336. package/esm2022/lib/security/index.mjs +18 -0
  337. package/esm2022/lib/security/public-api.mjs +18 -0
  338. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
  339. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
  340. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
  341. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +43 -0
  342. package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
  343. package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
  344. package/esm2022/lib/services/index.mjs +18 -0
  345. package/esm2022/lib/services/public-api.mjs +18 -0
  346. package/esm2022/lib/tag/index.mjs +18 -0
  347. package/esm2022/lib/tag/public-api.mjs +24 -0
  348. package/esm2022/lib/tag/services/tag.service.mjs +171 -0
  349. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +114 -0
  350. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
  351. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
  352. package/esm2022/lib/tag/tag.module.mjs +37 -0
  353. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
  354. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +370 -0
  355. package/esm2022/lib/testing/content.testing.module.mjs +56 -0
  356. package/esm2022/lib/tree/components/tree.component.mjs +312 -0
  357. package/esm2022/lib/tree/index.mjs +18 -0
  358. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
  359. package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
  360. package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
  361. package/esm2022/lib/tree/public-api.mjs +23 -0
  362. package/esm2022/lib/tree/services/tree.service.mjs +134 -0
  363. package/esm2022/lib/tree/tree.module.mjs +33 -0
  364. package/esm2022/lib/tree-view/components/tree-view.component.mjs +75 -0
  365. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
  366. package/esm2022/lib/tree-view/index.mjs +18 -0
  367. package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
  368. package/esm2022/lib/tree-view/public-api.mjs +22 -0
  369. package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
  370. package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
  371. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
  372. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +190 -0
  373. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +92 -0
  374. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
  375. package/esm2022/lib/upload/components/upload-button.component.mjs +133 -0
  376. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
  377. package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
  378. package/esm2022/lib/upload/components/upload-version-button.component.mjs +54 -0
  379. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
  380. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
  381. package/esm2022/lib/upload/index.mjs +18 -0
  382. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
  383. package/esm2022/lib/upload/public-api.mjs +29 -0
  384. package/esm2022/lib/upload/upload.module.mjs +72 -0
  385. package/esm2022/lib/version-compatibility/index.mjs +18 -0
  386. package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
  387. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
  388. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
  389. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
  390. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
  391. package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
  392. package/esm2022/lib/version-manager/index.mjs +18 -0
  393. package/esm2022/lib/version-manager/public-api.mjs +23 -0
  394. package/esm2022/lib/version-manager/version-comparison.component.mjs +42 -0
  395. package/esm2022/lib/version-manager/version-list.component.mjs +215 -0
  396. package/esm2022/lib/version-manager/version-manager.component.mjs +145 -0
  397. package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
  398. package/esm2022/lib/version-manager/version-upload.component.mjs +154 -0
  399. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
  400. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +408 -0
  401. package/esm2022/lib/viewer/index.mjs +18 -0
  402. package/esm2022/lib/viewer/public-api.mjs +19 -0
  403. package/esm2022/public-api.mjs +56 -0
  404. package/fesm2022/adf-content-services.mjs +761 -744
  405. package/fesm2022/adf-content-services.mjs.map +1 -1
  406. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  407. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  408. package/package.json +5 -3
@@ -0,0 +1,963 @@
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.folderChange.emit(new NodeEntryEvent({ id: node }));
453
+ this.reload();
454
+ return true;
455
+ }
456
+ else {
457
+ if (this.canNavigateFolder(node)) {
458
+ this.resetNewFolderPagination();
459
+ this.currentFolderId = this.getNodeFolderDestinationId(node);
460
+ this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId }));
461
+ this.reload();
462
+ return true;
463
+ }
464
+ }
465
+ return false;
466
+ }
467
+ getNodeFolderDestinationId(node) {
468
+ return this.isLinkFolder(node) ? node.properties['cm:destination'] : node.id;
469
+ }
470
+ isLinkFolder(node) {
471
+ return node.nodeType === 'app:folderlink' && node.properties?.['cm:destination'];
472
+ }
473
+ updateCustomSourceData(nodeId) {
474
+ this.currentFolderId = nodeId;
475
+ }
476
+ /**
477
+ * Invoked when executing content action for a document or folder.
478
+ *
479
+ * @param node Node to be the context of the execution.
480
+ * @param action Action to be executed against the context.
481
+ */
482
+ executeContentAction(node, action) {
483
+ if (node?.entry && action) {
484
+ const handlerSub = typeof action.handler === 'function' ? action.handler(node, this, action.permission) : of(true);
485
+ if (typeof action.execute === 'function' && handlerSub) {
486
+ handlerSub.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => action.execute(node));
487
+ }
488
+ }
489
+ }
490
+ setLoadingState(value) {
491
+ if (this.data?.getRows().length > 0) {
492
+ if (value) {
493
+ clearTimeout(this.loadingTimeout);
494
+ this.loadingTimeout = setTimeout(() => {
495
+ this.loading = true;
496
+ }, 1000);
497
+ }
498
+ else {
499
+ clearTimeout(this.loadingTimeout);
500
+ this.loading = false;
501
+ }
502
+ }
503
+ else {
504
+ clearTimeout(this.loadingTimeout);
505
+ this.loading = value;
506
+ }
507
+ }
508
+ loadFolder(hideLoadingSpinner = false) {
509
+ if (!hideLoadingSpinner) {
510
+ this.setLoadingState(true);
511
+ }
512
+ if (this.documentListService.isCustomSourceService(this.currentFolderId)) {
513
+ this.updateCustomSourceData(this.currentFolderId);
514
+ }
515
+ this.documentListService.loadFolderByNodeId(this.currentFolderId, this._pagination, this.includeFields, this.where, this.orderBy).subscribe((documentNode) => {
516
+ if (documentNode.currentNode) {
517
+ this.folderNode = documentNode.currentNode.entry;
518
+ this.$folderNode.next(documentNode.currentNode.entry);
519
+ }
520
+ this.onPageLoaded(documentNode.children);
521
+ }, (err) => {
522
+ this.handleError(err);
523
+ });
524
+ }
525
+ resetSelection() {
526
+ this.dataTable.resetSelection();
527
+ this.selection = [];
528
+ this.noPermission = false;
529
+ }
530
+ onPageLoaded(nodePaging) {
531
+ if (nodePaging) {
532
+ if (this.data) {
533
+ this.data.loadPage(nodePaging, this._pagination.merge, this.allowDropFiles);
534
+ this.preserveExistingSelection();
535
+ }
536
+ this.onPreselectNodes();
537
+ this.setLoadingState(false);
538
+ this.onDataReady(nodePaging);
539
+ }
540
+ }
541
+ onSortingChanged(event) {
542
+ this.orderBy = this.buildOrderByArray(event.detail.sortingKey, event.detail.direction);
543
+ this.sorting = [event.detail.sortingKey, event.detail.direction];
544
+ this.sortingSubject.next([this.additionalSorting, event.detail]);
545
+ if (this.sortingMode === 'server') {
546
+ this.reload();
547
+ }
548
+ }
549
+ buildOrderByArray(currentKey, currentDirection) {
550
+ return [`${this.additionalSorting.key} ${this.additionalSorting.direction}`, `${currentKey} ${currentDirection}`];
551
+ }
552
+ onPreviewFile(node) {
553
+ if (node) {
554
+ const sizeInMB = node.entry?.content?.sizeInBytes / BYTES_TO_MB_CONVERSION_VALUE;
555
+ const fileAutoDownloadFlag = this.appConfig.get('viewer.enableFileAutoDownload', true);
556
+ const sizeThreshold = this.appConfig.get('viewer.fileAutoDownloadSizeThresholdInMB', 15);
557
+ if (fileAutoDownloadFlag && sizeInMB && sizeInMB > sizeThreshold) {
558
+ this.dialog.open(FileAutoDownloadComponent, { disableClose: true, data: node });
559
+ }
560
+ else {
561
+ this.preview.emit(new NodeEntityEvent(node));
562
+ }
563
+ }
564
+ }
565
+ onColumnsVisibilityChange(columns) {
566
+ this.columnsVisibility = columns.reduce((visibleColumnsMap, column) => {
567
+ if (column.isHidden !== undefined) {
568
+ visibleColumnsMap[column.id] = !column.isHidden;
569
+ }
570
+ return visibleColumnsMap;
571
+ }, {});
572
+ this.createColumns();
573
+ this.data.setColumns(this.columns);
574
+ this.columnsVisibilityChanged.emit(this.columnsVisibility);
575
+ }
576
+ onColumnOrderChange(columnsWithNewOrder) {
577
+ this.columnsOrder = columnsWithNewOrder.map((column) => column.id);
578
+ this.createColumns();
579
+ this.columnsOrderChanged.emit(this.columnsOrder);
580
+ }
581
+ onColumnsWidthChange(columns) {
582
+ const newColumnsWidths = columns.reduce((widthsColumnsMap, column) => {
583
+ if (column.width) {
584
+ widthsColumnsMap[column.id] = Math.ceil(column.width);
585
+ }
586
+ return widthsColumnsMap;
587
+ }, {});
588
+ this.columnsWidths = { ...this.columnsWidths, ...newColumnsWidths };
589
+ this.createColumns();
590
+ this.columnsWidthChanged.emit(this.columnsWidths);
591
+ }
592
+ onSelectedItemsCountChanged(count) {
593
+ this.selectedItemsCountChanged.emit(count);
594
+ }
595
+ onNodeClick(nodeEntry) {
596
+ const domEvent = new CustomEvent('node-click', {
597
+ detail: {
598
+ sender: this,
599
+ node: nodeEntry
600
+ },
601
+ bubbles: true
602
+ });
603
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
604
+ const event = new NodeEntityEvent(nodeEntry);
605
+ this.nodeClick.emit(event);
606
+ if (!event.defaultPrevented) {
607
+ if (this.navigate && this.navigationMode === DocumentListComponent.SINGLE_CLICK_NAVIGATION) {
608
+ this.executeActionClick(nodeEntry);
609
+ }
610
+ }
611
+ }
612
+ onNodeDblClick(nodeEntry) {
613
+ const domEvent = new CustomEvent('node-dblclick', {
614
+ detail: {
615
+ sender: this,
616
+ node: nodeEntry
617
+ },
618
+ bubbles: true
619
+ });
620
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
621
+ const event = new NodeEntityEvent(nodeEntry);
622
+ this.nodeDblClick.emit(event);
623
+ if (!event.defaultPrevented) {
624
+ if (this.navigate && this.navigationMode === DocumentListComponent.DOUBLE_CLICK_NAVIGATION) {
625
+ this.executeActionClick(nodeEntry);
626
+ }
627
+ }
628
+ }
629
+ executeActionClick(nodeEntry) {
630
+ if (nodeEntry?.entry) {
631
+ if (nodeEntry.entry.isFile) {
632
+ this.onPreviewFile(nodeEntry);
633
+ }
634
+ if (nodeEntry.entry.isFolder) {
635
+ this.navigateTo(nodeEntry.entry);
636
+ }
637
+ if (nodeEntry.entry['guid']) {
638
+ const options = {
639
+ include: this.includeFields
640
+ };
641
+ this.nodesApi.getNode(nodeEntry.entry['guid'], options).then((node) => {
642
+ this.navigateTo(node.entry);
643
+ });
644
+ }
645
+ }
646
+ }
647
+ onNodeSelect(event) {
648
+ this.selection = event.selection.map((entry) => entry.node);
649
+ const domEvent = new CustomEvent('node-select', {
650
+ detail: {
651
+ node: event.row ? event.row.node : null,
652
+ selection: this.selection
653
+ },
654
+ bubbles: true
655
+ });
656
+ this.nodeSelected.emit(this.selection);
657
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
658
+ }
659
+ onNodeUnselect(event) {
660
+ this.selection = event.selection.map((entry) => entry.node);
661
+ const domEvent = new CustomEvent('node-unselect', {
662
+ detail: {
663
+ node: event.row ? event.row.node : null,
664
+ selection: this.selection
665
+ },
666
+ bubbles: true
667
+ });
668
+ this.nodeSelected.emit(this.selection);
669
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
670
+ }
671
+ onShowRowContextMenu(event) {
672
+ if (this.contextMenuActions) {
673
+ const args = event.value;
674
+ const node = args.row.node;
675
+ if (node) {
676
+ args.actions = this.getContextActions(node) || [];
677
+ }
678
+ }
679
+ }
680
+ onShowRowActionsMenu(event) {
681
+ if (this.contentActions) {
682
+ const args = event.value;
683
+ const node = args.row.node;
684
+ if (node) {
685
+ args.actions = this.getNodeActions(node) || [];
686
+ }
687
+ }
688
+ }
689
+ onExecuteRowAction(event) {
690
+ if (this.contentActions) {
691
+ const args = event.value;
692
+ const node = args.row.node;
693
+ const action = args.action;
694
+ this.executeContentAction(node, action);
695
+ }
696
+ }
697
+ enforceSingleClickNavigationForMobile() {
698
+ if (this.isMobile()) {
699
+ this.navigationMode = DocumentListComponent.SINGLE_CLICK_NAVIGATION;
700
+ }
701
+ }
702
+ canNavigateFolder(node) {
703
+ let canNavigateFolder = false;
704
+ if (node?.isFolder) {
705
+ canNavigateFolder = true;
706
+ }
707
+ return canNavigateFolder;
708
+ }
709
+ onDataReady(nodePaging) {
710
+ this.ready.emit(nodePaging);
711
+ this.pagination.next(nodePaging.list.pagination);
712
+ }
713
+ updatePagination(requestPaginationModel) {
714
+ this._pagination.maxItems = requestPaginationModel.maxItems;
715
+ this._pagination.skipCount = requestPaginationModel.skipCount;
716
+ this.reload(requestPaginationModel.merge);
717
+ }
718
+ syncPagination() {
719
+ this.node.list.pagination.maxItems = this._pagination.maxItems;
720
+ this.node.list.pagination.skipCount = this._pagination.skipCount;
721
+ }
722
+ onFilterSelectionChange(activeFilters) {
723
+ this.filterSelection.emit(activeFilters);
724
+ }
725
+ resetNewFolderPagination() {
726
+ this._pagination.skipCount = 0;
727
+ this._pagination.maxItems = this.maxItems;
728
+ }
729
+ handleError(err) {
730
+ if (err.message) {
731
+ try {
732
+ if (JSON.parse(err.message).error.statusCode === 403) {
733
+ this.noPermission = true;
734
+ }
735
+ }
736
+ catch (error) {
737
+ /* empty */
738
+ }
739
+ }
740
+ this.setLoadingState(false);
741
+ this.error.emit(err);
742
+ }
743
+ getPreselectedNodesBasedOnSelectionMode() {
744
+ return this.hasPreselectedNodes() ? (this.isSingleSelectionMode() ? [this.preselectNodes[0]] : this.preselectNodes) : [];
745
+ }
746
+ getPreselectedRowsBasedOnSelectionMode() {
747
+ return this.hasPreselectedRows() ? (this.isSingleSelectionMode() ? [this.preselectedRows[0]] : this.preselectedRows) : [];
748
+ }
749
+ getSelectionBasedOnSelectionMode() {
750
+ return this.hasPreselectedRows()
751
+ ? this.isSingleSelectionMode()
752
+ ? [this.preselectedRows[0]]
753
+ : this.data.getSelectedRows()
754
+ : this.data.getSelectedRows();
755
+ }
756
+ onPreselectNodes() {
757
+ if (this.hasPreselectedNodes()) {
758
+ this.preselectRowsOfPreselectedNodes();
759
+ const preselectedRows = this.getPreselectedRowsBasedOnSelectionMode();
760
+ const selection = this.data.getSelectedRows();
761
+ for (const node of preselectedRows) {
762
+ this.dataTable.selectRow(node, true);
763
+ }
764
+ this.onNodeSelect({ row: undefined, selection });
765
+ }
766
+ }
767
+ preserveExistingSelection() {
768
+ if (this.isMultipleSelectionMode()) {
769
+ for (const selection of this.selection) {
770
+ const rowOfSelection = this.data.getRowByNodeId(selection.entry.id);
771
+ if (rowOfSelection) {
772
+ rowOfSelection.isSelected = true;
773
+ }
774
+ }
775
+ }
776
+ }
777
+ preselectRowsOfPreselectedNodes() {
778
+ this.preselectedRows = [];
779
+ const preselectedNodes = this.getPreselectedNodesBasedOnSelectionMode();
780
+ preselectedNodes.forEach((preselectedNode) => {
781
+ const rowOfPreselectedNode = this.data.getRowByNodeId(preselectedNode.entry.id);
782
+ if (rowOfPreselectedNode) {
783
+ rowOfPreselectedNode.isSelected = true;
784
+ this.preselectedRows.push(rowOfPreselectedNode);
785
+ }
786
+ });
787
+ }
788
+ unselectRowFromNodeId(nodeId) {
789
+ const rowToUnselect = this.data.getRowByNodeId(nodeId);
790
+ if (rowToUnselect?.isSelected) {
791
+ rowToUnselect.isSelected = false;
792
+ this.dataTable.selectRow(rowToUnselect, false);
793
+ const selection = this.getSelectionBasedOnSelectionMode();
794
+ this.onNodeUnselect({ row: undefined, selection });
795
+ }
796
+ }
797
+ isSingleSelectionMode() {
798
+ return this.selectionMode === 'single';
799
+ }
800
+ isMultipleSelectionMode() {
801
+ return this.selectionMode === 'multiple';
802
+ }
803
+ hasPreselectedNodes() {
804
+ return this.preselectNodes?.length > 0;
805
+ }
806
+ hasPreselectedRows() {
807
+ return this.preselectedRows?.length > 0;
808
+ }
809
+ 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 }); }
810
+ 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: [
811
+ {
812
+ provide: ADF_DOCUMENT_PARENT_COMPONENT,
813
+ useExisting: DocumentListComponent
814
+ },
815
+ DataTableService
816
+ ], 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 }); }
817
+ }
818
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, decorators: [{
819
+ type: Component,
820
+ args: [{ selector: 'adf-document-list', standalone: true, imports: [
821
+ CommonModule,
822
+ DataTableComponent,
823
+ FilterHeaderComponent,
824
+ NoContentTemplateDirective,
825
+ EmptyListComponent,
826
+ TranslatePipe,
827
+ NoPermissionTemplateDirective,
828
+ MatIconModule,
829
+ LoadingContentTemplateDirective,
830
+ MatProgressSpinnerModule,
831
+ MainMenuDataTableTemplateDirective,
832
+ ColumnsSelectorComponent
833
+ ], providers: [
834
+ {
835
+ provide: ADF_DOCUMENT_PARENT_COMPONENT,
836
+ useExisting: DocumentListComponent
837
+ },
838
+ DataTableService
839
+ ], 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"] }]
840
+ }], 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: [{
841
+ type: ContentChild,
842
+ args: [DataColumnListComponent]
843
+ }], customLoadingContent: [{
844
+ type: ContentChild,
845
+ args: [CustomLoadingContentTemplateDirective]
846
+ }], customNoPermissionsTemplate: [{
847
+ type: ContentChild,
848
+ args: [CustomNoPermissionTemplateDirective]
849
+ }], customNoContentTemplate: [{
850
+ type: ContentChild,
851
+ args: [CustomEmptyContentTemplateDirective]
852
+ }], includeFields: [{
853
+ type: Input
854
+ }], where: [{
855
+ type: Input
856
+ }], permissionsStyle: [{
857
+ type: Input
858
+ }], locationFormat: [{
859
+ type: Input
860
+ }], navigate: [{
861
+ type: Input
862
+ }], showHeader: [{
863
+ type: Input
864
+ }], navigationMode: [{
865
+ type: Input
866
+ }], thumbnails: [{
867
+ type: Input
868
+ }], selectionMode: [{
869
+ type: Input
870
+ }], multiselect: [{
871
+ type: Input
872
+ }], contentActions: [{
873
+ type: Input
874
+ }], contentActionsPosition: [{
875
+ type: Input
876
+ }], contextMenuActions: [{
877
+ type: Input
878
+ }], emptyFolderImageUrl: [{
879
+ type: Input
880
+ }], allowDropFiles: [{
881
+ type: Input
882
+ }], sorting: [{
883
+ type: Input
884
+ }], additionalSorting: [{
885
+ type: Input
886
+ }], sortingMode: [{
887
+ type: Input
888
+ }], rowStyle: [{
889
+ type: Input
890
+ }], rowStyleClass: [{
891
+ type: Input
892
+ }], loading: [{
893
+ type: Input
894
+ }], _rowFilter: [{
895
+ type: Input
896
+ }], rowFilter: [{
897
+ type: Input
898
+ }], imageResolver: [{
899
+ type: Input
900
+ }], stickyHeader: [{
901
+ type: Input
902
+ }], headerFilters: [{
903
+ type: Input
904
+ }], filterValue: [{
905
+ type: Input
906
+ }], currentFolderId: [{
907
+ type: Input
908
+ }], preselectNodes: [{
909
+ type: Input
910
+ }], node: [{
911
+ type: Input
912
+ }], maxItems: [{
913
+ type: Input
914
+ }], columnsPresetKey: [{
915
+ type: Input
916
+ }], setColumnsVisibility: [{
917
+ type: Input
918
+ }], setColumnsWidths: [{
919
+ type: Input
920
+ }], setColumnsOrder: [{
921
+ type: Input
922
+ }], maxColumnsVisible: [{
923
+ type: Input
924
+ }], isResizingEnabled: [{
925
+ type: Input
926
+ }], blurOnResize: [{
927
+ type: Input
928
+ }], displayCheckboxesOnHover: [{
929
+ type: Input
930
+ }], displayDragAndDropHint: [{
931
+ type: Input
932
+ }], nodeClick: [{
933
+ type: Output
934
+ }], nodeDblClick: [{
935
+ type: Output
936
+ }], folderChange: [{
937
+ type: Output
938
+ }], preview: [{
939
+ type: Output
940
+ }], ready: [{
941
+ type: Output
942
+ }], error: [{
943
+ type: Output
944
+ }], nodeSelected: [{
945
+ type: Output
946
+ }], filterSelection: [{
947
+ type: Output
948
+ }], columnsWidthChanged: [{
949
+ type: Output
950
+ }], columnsVisibilityChanged: [{
951
+ type: Output
952
+ }], columnsOrderChanged: [{
953
+ type: Output
954
+ }], selectedItemsCountChanged: [{
955
+ type: Output
956
+ }], dataTable: [{
957
+ type: ViewChild,
958
+ args: ['dataTable', { static: true }]
959
+ }], onShowContextMenu: [{
960
+ type: HostListener,
961
+ args: ['contextmenu', ['$event']]
962
+ }] } });
963
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2RvY3VtZW50LWxpc3QvY29tcG9uZW50cy9kb2N1bWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsMENBQTBDO0FBQzFDLHlEQUF5RDtBQUV6RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBQ3JDLG1DQUFtQyxFQUduQyx1QkFBdUIsRUFHdkIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQiwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFJN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFtQixVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JGLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQUVoRSxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQStCN0MsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7YUFDL0MsNEJBQXVCLEdBQVcsT0FBTyxBQUFsQixDQUFtQjthQUMxQyw0QkFBdUIsR0FBVyxVQUFVLEFBQXJCLENBQXNCO0lBd0pwRDs7OztPQUlHO0lBQ0gsSUFDSSxTQUFTLENBQUMsU0FBb0I7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQThDRCxrREFBa0Q7SUFDbEQsSUFDSSxvQkFBb0IsQ0FBQyxpQkFBOEQ7UUFDbkYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQy9DLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsSUFDSSxnQkFBZ0IsQ0FBQyxhQUF5RDtRQUMxRSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLElBQ0ksZUFBZSxDQUFDLFlBQWtDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFvR0QsSUFBSSxRQUFRO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFDWSxtQkFBd0MsRUFDeEMsVUFBc0IsRUFDdEIsU0FBMkIsRUFDM0Isc0JBQThDLEVBQzlDLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsV0FBNEIsRUFDNUIsZ0JBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLE1BQWlCO1FBRXpCLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFaekMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBMVY3Qix1QkFBa0IsR0FBZSxJQUFJLFVBQVUsQ0FBQztZQUM1QyxZQUFZLEVBQUUsS0FBSztZQUNuQixTQUFTLEVBQUUsQ0FBQztZQUNaLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLENBQUM7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsb0JBQWUsR0FBa0IsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUF5QnZHOzs7O1dBSUc7UUFFSCxxQkFBZ0IsR0FBMkIsRUFBRSxDQUFDO1FBRTlDLDBFQUEwRTtRQUUxRSxtQkFBYyxHQUFXLEdBQUcsQ0FBQztRQUU3QiwyREFBMkQ7UUFFM0QsYUFBUSxHQUFZLElBQUksQ0FBQztRQUV6Qix5QkFBeUI7UUFFekIsZUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFakM7OztXQUdHO1FBRUgsbUJBQWMsR0FBVyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLGlCQUFpQjtRQUV6RixpREFBaUQ7UUFFakQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1Qjs7O1dBR0c7UUFFSCxrQkFBYSxHQUFXLFFBQVEsQ0FBQyxDQUFDLHVCQUF1QjtRQUV6RCwrQkFBK0I7UUFFL0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0IsMkNBQTJDO1FBRTNDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRWhDLHNGQUFzRjtRQUV0RiwyQkFBc0IsR0FBVyxPQUFPLENBQUMsQ0FBQyxhQUFhO1FBRXZELHlDQUF5QztRQUV6Qyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFcEMsd0ZBQXdGO1FBRXhGLHdCQUFtQixHQUFXLG1DQUFtQyxDQUFDO1FBRWxFOzs7Ozs7O1dBT0c7UUFFSCxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQzs7OztXQUlHO1FBRUgsWUFBTyxHQUEyQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVsRDs7OztXQUlHO1FBRUgsc0JBQWlCLEdBQWdCLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVyRTs7Ozs7O1dBTUc7UUFFSCxnQkFBVyxHQUF3QixRQUFRLENBQUM7UUFjNUM7Ozs7V0FJRztRQUVILFlBQU8sR0FBWSxLQUFLLENBQUM7UUFHekIsZUFBVSxHQUFxQixJQUFJLENBQUM7UUFzQnBDOzs7O1dBSUc7UUFFSCxrQkFBYSxHQUFlLElBQUksQ0FBQztRQUVqQyxzQ0FBc0M7UUFFdEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFOUIsdUNBQXVDO1FBRXZDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBTS9CLDBGQUEwRjtRQUUxRixvQkFBZSxHQUFXLElBQUksQ0FBQztRQUUvQjs7OztXQUlHO1FBRUgsbUJBQWMsR0FBZ0IsRUFBRSxDQUFDO1FBRWpDLG1GQUFtRjtRQUVuRixTQUFJLEdBQWUsSUFBSSxDQUFDO1FBRXhCLDhHQUE4RztRQUU5RyxhQUFRLEdBQVcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQTRCcEQsNENBQTRDO1FBRTVDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixtREFBbUQ7UUFFbkQsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEIseURBQXlEO1FBRXpELDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVqQyxrQ0FBa0M7UUFFbEMsMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBRTlCLCtDQUErQztRQUUvQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFaEQsc0RBQXNEO1FBRXRELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFbkQsc0RBQXNEO1FBRXRELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFbEQ7Ozs7V0FJRztRQUVILFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUU5QywrRUFBK0U7UUFFL0UsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFdkMsK0RBQStEO1FBRS9ELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhDLDZDQUE2QztRQUU3QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFL0MsOENBQThDO1FBRTlDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFckQsd0NBQXdDO1FBRXhDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBRXJGLDZDQUE2QztRQUU3Qyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUUzRix3Q0FBd0M7UUFFeEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFL0Qsc0VBQXNFO1FBRXRFLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBS25FLFlBQU8sR0FBeUIsRUFBRSxDQUFDO1FBQ25DLHlCQUFvQixHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRW5ELGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1FBQ25DLGdCQUFXLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFDakQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsWUFBTyxHQUFhLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUt4QixnQkFBVyxHQUFvQixJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDL0QsZUFBVSxHQUFxQyxJQUFJLGVBQWUsQ0FBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0csbUJBQWMsR0FBbUMsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVsRyxpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFHbEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQXNCN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCO2FBQ3RCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUM7YUFDM0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBZTtRQUM3QixJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDdkQsS0FBSyxFQUFFLGFBQWE7b0JBQ3BCLElBQUk7b0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7aUJBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksY0FBMkIsQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3RDLGNBQWMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDSixjQUFjLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLENBQUMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHFCQUFxQixDQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksRUFDSixJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FDdEIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXhILElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDOUMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFlBQVksS0FBSyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRSxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSztRQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLCtCQUErQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELCtCQUErQixDQUFDLGtCQUFrQixHQUFHLEtBQUs7UUFDdEQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBTTtRQUN4QixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQXFCO1FBQ2hDLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRWxCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxHQUFHLFVBQVUsQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxPQUFPLENBQUM7Z0JBQ25CLENBQUM7Z0JBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU87cUJBQy9CLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNkLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBRTVGLE9BQU8sU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO2dCQUM5RCxDQUFDLENBQUM7cUJBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBRXJELGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7Z0JBQ25ELE9BQU8sZUFBZSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQTBCLEVBQUUsSUFBZTtRQUM3RCxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQTBCLEVBQUUsSUFBZTtRQUMvRCxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBMEIsRUFBRSxJQUFlO1FBQ2hFLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFDSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLHVCQUF1QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ3ZDLENBQUM7WUFDQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUdELGlCQUFpQixDQUFDLENBQVM7UUFDdkIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQW1CO1FBQzFCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sMEJBQTBCLENBQUMsSUFBVTtRQUN6QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVU7UUFDM0IsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLGdCQUFnQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFjO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9CQUFvQixDQUFDLElBQWUsRUFBRSxNQUEwQjtRQUM1RCxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDeEIsTUFBTSxVQUFVLEdBQUcsT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRW5ILElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDckQsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9GLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFjO1FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDYixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQ3ZJLENBQUMsWUFBZ0MsRUFBRSxFQUFFO1lBQ2pDLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFzQjtRQUMvQixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDckMsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWtCO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFakUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQWtCLEVBQUUsZ0JBQXdCO1FBQ2xFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsVUFBVSxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN0SCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWU7UUFDekIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRyw0QkFBNEIsQ0FBQztZQUNqRixNQUFNLG9CQUFvQixHQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sYUFBYSxHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWpHLElBQUksb0JBQW9CLElBQUksUUFBUSxJQUFJLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLE9BQXFCO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbEUsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNoQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3BELENBQUM7WUFFRCxPQUFPLGlCQUFpQixDQUFDO1FBQzdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsbUJBQWlDO1FBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFxQjtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNqRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELE9BQU8sZ0JBQWdCLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxLQUFhO1FBQ3JDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFvQjtRQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUU7WUFDM0MsTUFBTSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxJQUFJO2dCQUNaLElBQUksRUFBRSxTQUFTO2FBQ2xCO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXRELE1BQU0sS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUN6RixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQW9CO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRTtZQUM5QyxNQUFNLEVBQUU7Z0JBQ0osTUFBTSxFQUFFLElBQUk7Z0JBQ1osSUFBSSxFQUFFLFNBQVM7YUFDbEI7WUFDRCxPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ3pGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFvQjtRQUNuQyxJQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUVELElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUVELElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLE9BQU8sR0FBRztvQkFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWE7aUJBQzlCLENBQUM7Z0JBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtvQkFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQTREO1FBQ3JFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDNUMsTUFBTSxFQUFFO2dCQUNKLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzVCO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQTREO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDOUMsTUFBTSxFQUFFO2dCQUNKLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzVCO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBb0I7UUFDckMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQW9CO1FBQ3JDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25ELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXlCO1FBQ3hDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDTCxDQUFDO0lBRU8scUNBQXFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQztRQUN4RSxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVU7UUFDeEIsSUFBSSxpQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFdkMsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDakIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUFFTyxXQUFXLENBQUMsVUFBc0I7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsc0JBQThDO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sY0FBYztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDckUsQ0FBQztJQUVELHVCQUF1QixDQUFDLGFBQTZCO1FBQ2pELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCx3QkFBd0I7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFRO1FBQ3hCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQzdCLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDYixXQUFXO1lBQ2YsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCx1Q0FBdUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdILENBQUM7SUFFRCxzQ0FBc0M7UUFDbEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlILENBQUM7SUFFRCxnQ0FBZ0M7UUFDNUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDdkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7WUFDdEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQW9CLENBQUM7WUFFaEUsS0FBSyxNQUFNLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCO1FBQzdCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQztZQUNqQyxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDakIsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCwrQkFBK0I7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUNBQXVDLEVBQUUsQ0FBQztRQUV4RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUEwQixFQUFFLEVBQUU7WUFDcEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDdkIsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBYztRQUNoQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUM1QixhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxFQUFvQixDQUFDO1lBQzVFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQztJQUMzQyxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLENBQUM7SUFDN0MsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7K0dBeC9CUSxxQkFBcUI7bUdBQXJCLHFCQUFxQiwyMkRBVm5CO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLDZCQUE2QjtnQkFDdEMsV0FBVyxFQUFFLHFCQUFxQjthQUNyQztZQUNELGdCQUFnQjtTQUNuQixrRUFpQmEsdUJBQXVCLHVGQUd2QixxQ0FBcUMsOEZBR3JDLG1DQUFtQywwRkFHbkMsbUNBQW1DLGtOQy9JckQscXhJQTRGQSw2ckhESVEsWUFBWSxtSUFDWixrQkFBa0IsMHNCQUNsQixxQkFBcUIsa0lBQ3JCLDBCQUEwQix5RkFDMUIsa0JBQWtCLHNEQUNsQixhQUFhLGtEQUNiLDZCQUE2Qiw4RkFDN0IsYUFBYSxvTEFDYiwrQkFBK0Isa0dBQy9CLHdCQUF3QixtT0FDeEIsa0NBQWtDLDZFQUNsQyx3QkFBd0I7OzRGQWNuQixxQkFBcUI7a0JBN0JqQyxTQUFTOytCQUNJLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsMEJBQTBCO3dCQUMxQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsNkJBQTZCO3dCQUM3QixhQUFhO3dCQUNiLCtCQUErQjt3QkFDL0Isd0JBQXdCO3dCQUN4QixrQ0FBa0M7d0JBQ2xDLHdCQUF3QjtxQkFDM0IsYUFHVTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsNkJBQTZCOzRCQUN0QyxXQUFXLHVCQUF1Qjt5QkFDckM7d0JBQ0QsZ0JBQWdCO3FCQUNuQixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO2lZQWdCcEMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFJckMsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLHFDQUFxQztnQkFJbkQsMkJBQTJCO3NCQUQxQixZQUFZO3VCQUFDLG1DQUFtQztnQkFJakQsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLG1DQUFtQztnQkFLakQsYUFBYTtzQkFEWixLQUFLO2dCQVFOLEtBQUs7c0JBREosS0FBSztnQkFTTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQVFOLGFBQWE7c0JBRFosS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQVlOLGNBQWM7c0JBRGIsS0FBSztnQkFTTixPQUFPO3NCQUROLEtBQUs7Z0JBU04saUJBQWlCO3NCQURoQixLQUFLO2dCQVdOLFdBQVc7c0JBRFYsS0FBSztnQkFTTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQVNOLE9BQU87c0JBRE4sS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBU0YsU0FBUztzQkFEWixLQUFLO2dCQXFCTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQVNOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUtGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFPRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBT0YsZUFBZTtzQkFEbEIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQVNQLE9BQU87c0JBRE4sTUFBTTtnQkFLUCxLQUFLO3NCQURKLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFLUCxlQUFlO3NCQURkLE1BQU07Z0JBS1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQUtQLHdCQUF3QjtzQkFEdkIsTUFBTTtnQkFLUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBS1AseUJBQXlCO3NCQUR4QixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQTBSeEMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgcnhqcy9uby1zdWJqZWN0LXZhbHVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cblxuaW1wb3J0IHtcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIENvbHVtbnNTZWxlY3RvckNvbXBvbmVudCxcbiAgICBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBDdXN0b21Mb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEN1c3RvbU5vUGVybWlzc2lvblRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIERhdGFDZWxsRXZlbnQsXG4gICAgRGF0YUNvbHVtbixcbiAgICBEYXRhQ29sdW1uTGlzdENvbXBvbmVudCxcbiAgICBEYXRhUm93LFxuICAgIERhdGFSb3dBY3Rpb25FdmVudCxcbiAgICBEYXRhU29ydGluZyxcbiAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgRGF0YVRhYmxlU2NoZW1hLFxuICAgIERhdGFUYWJsZVNlcnZpY2UsXG4gICAgRW1wdHlMaXN0Q29tcG9uZW50LFxuICAgIExvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTWFpbk1lbnVEYXRhVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOb0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOb1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBQYWdpbmF0ZWRDb21wb25lbnQsXG4gICAgUGFnaW5hdGlvbk1vZGVsLFxuICAgIFJlcXVlc3RQYWdpbmF0aW9uTW9kZWwsXG4gICAgU2hvd0hlYWRlck1vZGUsXG4gICAgVGh1bWJuYWlsU2VydmljZSxcbiAgICBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIFVzZXJQcmVmZXJlbmNlVmFsdWVzXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBOb2RlLCBOb2RlRW50cnksIE5vZGVQYWdpbmcsIE5vZGVzQXBpLCBQYWdpbmF0aW9uIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UsIE5vZGVzQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXJTZWFyY2ggfSBmcm9tICcuLi8uLi9zZWFyY2gnO1xuaW1wb3J0IHsgUm93RmlsdGVyIH0gZnJvbSAnLi4vZGF0YS9yb3ctZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7IFNoYXJlRGF0YVJvdyB9IGZyb20gJy4uL2RhdGEvc2hhcmUtZGF0YS1yb3cubW9kZWwnO1xuaW1wb3J0IHsgU2hhcmVEYXRhVGFibGVBZGFwdGVyIH0gZnJvbSAnLi4vZGF0YS9zaGFyZS1kYXRhdGFibGUtYWRhcHRlcic7XG5pbXBvcnQgeyBDb250ZW50QWN0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY29udGVudC1hY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRMb2FkZXJOb2RlIH0gZnJvbSAnLi4vbW9kZWxzL2RvY3VtZW50LWZvbGRlci5tb2RlbCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU3R5bGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9ucy1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBwcmVzZXRzRGVmYXVsdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldC5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG9jdW1lbnQtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jay5zZXJ2aWNlJztcbmltcG9ydCB7IEFERl9ET0NVTUVOVF9QQVJFTlRfQ09NUE9ORU5UIH0gZnJvbSAnLi9kb2N1bWVudC1saXN0LnRva2VuJztcbmltcG9ydCB7IEZpbGVBdXRvRG93bmxvYWRDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtYXV0by1kb3dubG9hZC9maWxlLWF1dG8tZG93bmxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVFbnRpdHlFdmVudCwgTm9kZUVudHJ5RXZlbnQgfSBmcm9tICcuL25vZGUuZXZlbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZmlsdGVyLWhlYWRlci9maWx0ZXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuY29uc3QgQllURVNfVE9fTUJfQ09OVkVSU0lPTl9WQUxVRSA9IDEwNDg1NzY7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWRvY3VtZW50LWxpc3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgRmlsdGVySGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBOb0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgRW1wdHlMaXN0Q29tcG9uZW50LFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBOb1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYWluTWVudURhdGFUYWJsZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBDb2x1bW5zU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFERl9ET0NVTUVOVF9QQVJFTlRfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IERvY3VtZW50TGlzdENvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICBEYXRhVGFibGVTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtZG9jdW1lbnQtbGlzdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudExpc3RDb21wb25lbnQgZXh0ZW5kcyBEYXRhVGFibGVTY2hlbWEgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgUGFnaW5hdGVkQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgU0lOR0xFX0NMSUNLX05BVklHQVRJT046IHN0cmluZyA9ICdjbGljayc7XG4gICAgc3RhdGljIERPVUJMRV9DTElDS19OQVZJR0FUSU9OOiBzdHJpbmcgPSAnZGJsY2xpY2snO1xuXG4gICAgREVGQVVMVF9QQUdJTkFUSU9OOiBQYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb24oe1xuICAgICAgICBoYXNNb3JlSXRlbXM6IGZhbHNlLFxuICAgICAgICBza2lwQ291bnQ6IDAsXG4gICAgICAgIG1heEl0ZW1zOiAyNSxcbiAgICAgICAgdG90YWxJdGVtczogMFxuICAgIH0pO1xuXG4gICAgREVGQVVMVF9TT1JUSU5HOiBEYXRhU29ydGluZ1tdID0gW25ldyBEYXRhU29ydGluZygnbmFtZScsICdhc2MnKSwgbmV3IERhdGFTb3J0aW5nKCdpc0ZvbGRlcicsICdkZXNjJyldO1xuXG4gICAgQENvbnRlbnRDaGlsZChEYXRhQ29sdW1uTGlzdENvbXBvbmVudClcbiAgICBjb2x1bW5MaXN0OiBEYXRhQ29sdW1uTGlzdENvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGQoQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBjdXN0b21Mb2FkaW5nQ29udGVudDogQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoQ3VzdG9tTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTm9QZXJtaXNzaW9uc1RlbXBsYXRlOiBDdXN0b21Ob1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTm9Db250ZW50VGVtcGxhdGU6IEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEluY2x1ZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSBpbiB0aGUgc2VydmVyIHJlcXVlc3QuIEZvciBleGFtcGxlOiBhc3NvY2lhdGlvbiwgaXNMaW5rLCBpc0xvY2tlZCBhbmQgb3RoZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jbHVkZUZpZWxkczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoZSBOb2RlIGxpc3QgdXNpbmcgdGhlICp3aGVyZSogY29uZGl0aW9uIG9mIHRoZSBSRVNUIEFQSVxuICAgICAqIChmb3IgZXhhbXBsZSwgaXNGb2xkZXI9dHJ1ZSkuIFNlZSB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHdoZXJlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgYSBzZXQgb2YgQ1NTIHN0eWxlcyB0byBhcHBseSBkZXBlbmRpbmcgb24gdGhlIHBlcm1pc3Npb25cbiAgICAgKiBvZiB0aGUgdXNlciBvbiB0aGF0IG5vZGUuIFNlZSB0aGUgUGVybWlzc2lvbiBTdHlsZSBtb2RlbFxuICAgICAqIHBhZ2UgZm9yIGZ1cnRoZXIgZGV0YWlscyBhbmQgZXhhbXBsZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwZXJtaXNzaW9uc1N0eWxlOiBQZXJtaXNzaW9uU3R5bGVNb2RlbFtdID0gW107XG5cbiAgICAvKiogVGhlIGRlZmF1bHQgcm91dGUgZm9yIGFsbCB0aGUgbG9jYXRpb24tYmFzZWQgY29sdW1ucyAoaWYgZGVjbGFyZWQpLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9jYXRpb25Gb3JtYXQ6IHN0cmluZyA9ICcvJztcblxuICAgIC8qKiBUb2dnbGVzIG5hdmlnYXRpb24gdG8gZm9sZGVyIGNvbnRlbnQgb3IgZmlsZSBwcmV2aWV3ICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgaGVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBzaG93SGVhZGVyID0gU2hvd0hlYWRlck1vZGUuRGF0YTtcblxuICAgIC8qKlxuICAgICAqIFVzZXIgaW50ZXJhY3Rpb24gZm9yIGZvbGRlciBuYXZpZ2F0aW9uIG9yIGZpbGUgcHJldmlldy5cbiAgICAgKiBWYWxpZCB2YWx1ZXMgYXJlIFwiY2xpY2tcIiBhbmQgXCJkYmxjbGlja1wiLiBEZWZhdWx0IHZhbHVlOiBcImRibGNsaWNrXCJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRpb25Nb2RlOiBzdHJpbmcgPSBEb2N1bWVudExpc3RDb21wb25lbnQuRE9VQkxFX0NMSUNLX05BVklHQVRJT047IC8vIGNsaWNrfGRibGNsaWNrXG5cbiAgICAvKiogU2hvdyBkb2N1bWVudCB0aHVtYm5haWxzIHJhdGhlciB0aGFuIGljb25zICovXG4gICAgQElucHV0KClcbiAgICB0aHVtYm5haWxzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBSb3cgc2VsZWN0aW9uIG1vZGUuIENhbiBiZSBudWxsLCBgc2luZ2xlYCBvciBgbXVsdGlwbGVgLiBGb3IgYG11bHRpcGxlYCBtb2RlLFxuICAgICAqIHlvdSBjYW4gdXNlIENtZCAobWFjT1MpIG9yIEN0cmwgKFdpbikgbW9kaWZpZXIga2V5IHRvIHRvZ2dsZSBzZWxlY3Rpb24gZm9yIG11bHRpcGxlIHJvd3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSAnc2luZ2xlJzsgLy8gbnVsbHxzaW5nbGV8bXVsdGlwbGVcblxuICAgIC8qKiBUb2dnbGVzIG11bHRpc2VsZWN0IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBjb250ZW50IGFjdGlvbnMgZm9yIGVhY2ggcm93ICovXG4gICAgQElucHV0KClcbiAgICBjb250ZW50QWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBjb250ZW50IGFjdGlvbnMgZHJvcGRvd24gbWVudS4gQ2FuIGJlIHNldCB0byBcImxlZnRcIiBvciBcInJpZ2h0XCIuICovXG4gICAgQElucHV0KClcbiAgICBjb250ZW50QWN0aW9uc1Bvc2l0aW9uOiBzdHJpbmcgPSAncmlnaHQnOyAvLyBsZWZ0fHJpZ2h0XG5cbiAgICAvKiogVG9nZ2xlcyBjb250ZXh0IG1lbnVzIGZvciBlYWNoIHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGV4dE1lbnVBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQ3VzdG9tIGltYWdlIGZvciBlbXB0eSBmb2xkZXIuIERlZmF1bHQgdmFsdWU6ICcuL2Fzc2V0cy9pbWFnZXMvZW1wdHlfZG9jX2xpYi5zdmcnICovXG4gICAgQElucHV0KClcbiAgICBlbXB0eUZvbGRlckltYWdlVXJsOiBzdHJpbmcgPSAnLi9hc3NldHMvaW1hZ2VzL2VtcHR5X2RvY19saWIuc3ZnJztcblxuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgdGhpcyBlbmFibGVzIHlvdSB0byBkcm9wIGZpbGVzIGRpcmVjdGx5IGludG8gc3ViZm9sZGVycyBzaG93blxuICAgICAqIGFzIGl0ZW1zIGluIHRoZSBsaXN0IG9yIGludG8gYW5vdGhlciBmaWxlIHRvIHRyaWdnZXIgdXBkYXRpbmcgaXQncyB2ZXJzaW9uLlxuICAgICAqIFdoZW4gZmFsc2UsIHRoZSBkcm9wcGVkIGZpbGUgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgICAgKiBjdXJyZW50IGZvbGRlciAoaWUsIHRoZSBvbmUgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIHNob3duIGluIHRoZSBsaXN0KS5cbiAgICAgKiBTZWUgdGhlIFVwbG9hZCBkaXJlY3RpdmUgZm9yIGZ1cnRoZXIgZGV0YWlscyBhYm91dCBob3cgdGhlIGZpbGUgZHJvcCBpc1xuICAgICAqIGhhbmRsZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0Ryb3BGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBkZWZhdWx0IHNvcnRpbmcuIFRoZSBmb3JtYXQgaXMgYW4gYXJyYXkgb2YgMiBzdHJpbmdzIGBba2V5LCBkaXJlY3Rpb25dYFxuICAgICAqIGkuZS4gYFsnbmFtZScsICdkZXNjJ11gIG9yIGBbJ25hbWUnLCAnYXNjJ11gLiBTZXQgdGhpcyB2YWx1ZSBvbmx5IGlmIHlvdSB3YW50IHRvXG4gICAgICogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc29ydGluZyBkZXRlY3RlZCBieSB0aGUgY29tcG9uZW50IGJhc2VkIG9uIGNvbHVtbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzb3J0aW5nOiBzdHJpbmdbXSB8IERhdGFTb3J0aW5nID0gWyduYW1lJywgJ2FzYyddO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBkZWZhdWx0IHNvcnRpbmcuIFRoZSBmb3JtYXQgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBgW2tleSBkaXJlY3Rpb24sIG90aGVyS2V5IG90aGVyRGlyZWN0aW9uXWBcbiAgICAgKiBpLmUuIGBbJ25hbWUgZGVzYycsICdub2RlVHlwZSBhc2MnXWAgb3IgYFsnbmFtZSBhc2MnXWAuIFNldCB0aGlzIHZhbHVlIGlmIHlvdSB3YW50IGEgYmFzZVxuICAgICAqIHJ1bGUgdG8gYmUgYWRkZWQgdG8gdGhlIHNvcnRpbmcgYXBhcnQgZnJvbSB0aGUgb25lIGRyaXZlbiBieSB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWRkaXRpb25hbFNvcnRpbmc6IERhdGFTb3J0aW5nID0gbmV3IERhdGFTb3J0aW5nKCdpc0ZvbGRlcicsICdkZXNjJyk7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHNvcnRpbmcgbW9kZS4gQ2FuIGJlIGVpdGhlciBgY2xpZW50YCAoaXRlbXMgaW4gdGhlIGxpc3RcbiAgICAgKiBhcmUgc29ydGVkIGNsaWVudC1zaWRlKSBvciBgc2VydmVyYCAodGhlIG9yZGVyaW5nIHN1cHBsaWVkIGJ5IHRoZVxuICAgICAqIHNlcnZlciBpcyB1c2VkIHdpdGhvdXQgZnVydGhlciBjbGllbnQtc2lkZSBzb3J0aW5nKS5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIGBzZXJ2ZXJgIG9wdGlvbiAqZG9lcyBub3QqIHJlcXVlc3QgdGhlIHNlcnZlciB0byBzb3J0IHRoZSBkYXRhXG4gICAgICogYmVmb3JlIGRlbGl2ZXJpbmcgaXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzb3J0aW5nTW9kZTogJ3NlcnZlcicgfCAnY2xpZW50JyA9ICdzZXJ2ZXInO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGlubGluZSBzdHlsZSB0byBhcHBseSB0byBldmVyeSByb3cuIFNlZVxuICAgICAqIHRoZSBBbmd1bGFyIE5nU3R5bGVcbiAgICAgKiBkb2NzIGZvciBtb3JlIGRldGFpbHMgYW5kIHVzYWdlIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93U3R5bGU6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgICAvKiogVGhlIENTUyBjbGFzcyB0byBhcHBseSB0byBldmVyeSByb3cgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGxvYWRpbmcgc3RhdGUgYW5kIGFuaW1hdGVkIHNwaW5uZXJzIGZvciB0aGUgY29tcG9uZW50LiBVc2VkIGluXG4gICAgICogY29tYmluYXRpb24gd2l0aCBgbmF2aWdhdGU9ZmFsc2VgIHRvIHBlcmZvcm0gY3VzdG9tIG5hdmlnYXRpb24gYW5kIGxvYWRpbmdcbiAgICAgKiBzdGF0ZSBpbmRpY2F0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBfcm93RmlsdGVyOiBSb3dGaWx0ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBmdW5jdGlvbiB0byBjaG9vc2Ugd2hldGhlciB0byBzaG93IG9yIGhpZGUgcm93cy5cbiAgICAgKiBTZWUgdGhlIFtSb3cgRmlsdGVyIE1vZGVsXShyb3ctZmlsdGVyLm1vZGVsLm1kKSBwYWdlIGZvclxuICAgICAqIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93RmlsdGVyKHJvd0ZpbHRlcjogUm93RmlsdGVyKSB7XG4gICAgICAgIHRoaXMuX3Jvd0ZpbHRlciA9IHJvd0ZpbHRlcjtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldEZpbHRlcih0aGlzLl9yb3dGaWx0ZXIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByb3dGaWx0ZXIoKTogUm93RmlsdGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0ZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gY2hvb3NlIGltYWdlIGZpbGUgcGF0aHMgdG8gc2hvdy4gU2VlIHRoZVxuICAgICAqIFtJbWFnZSBSZXNvbHZlciBNb2RlbF0oaW1hZ2UtcmVzb2x2ZXIubW9kZWwubWQpIHBhZ2UgZm9yXG4gICAgICogbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGltYWdlUmVzb2x2ZXI6IGFueSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHN0aWNreSBoZWFkZXIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGhlYWRlciBmaWx0ZXJzIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBoZWFkZXJGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogSW5pdGlhbCB2YWx1ZSBmb3IgZmlsdGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyVmFsdWU6IGFueTtcblxuICAgIC8qKiBUaGUgSUQgb2YgdGhlIGZvbGRlciBub2RlIHRvIGRpc3BsYXkgb3IgYSByZXNlcnZlZCBzdHJpbmcgYWxpYXMgZm9yIHNwZWNpYWwgc291cmNlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVudEZvbGRlcklkOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2Ygbm9kZXMgdG8gYmUgcHJlLXNlbGVjdGVkLiBBbGwgbm9kZXMgaW4gdGhlXG4gICAgICogYXJyYXkgYXJlIHByZS1zZWxlY3RlZCBpbiBtdWx0aSBzZWxlY3Rpb24gbW9kZSwgYnV0IG9ubHkgdGhlIGZpcnN0IG5vZGVcbiAgICAgKiBpcyBwcmUtc2VsZWN0ZWQgaW4gc2luZ2xlIHNlbGVjdGlvbiBtb2RlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJlc2VsZWN0Tm9kZXM6IE5vZGVFbnRyeVtdID0gW107XG5cbiAgICAvKiogVGhlIERvY3VtZW50IGxpc3Qgd2lsbCBzaG93IGFsbCB0aGUgbm9kZXMgY29udGFpbmVkIGluIHRoZSBOb2RlUGFnaW5nIGVudGl0eSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9kZTogTm9kZVBhZ2luZyA9IG51bGw7XG5cbiAgICAvKiogRGVmYXVsdCB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZSBzZXR0aW5ncy4gVXNlIHRoaXMgb25seSBpZiB5b3UgYXJlIG5vdCB1c2luZyBwYWdpbmF0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SXRlbXM6IG51bWJlciA9IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLm1heEl0ZW1zO1xuXG4gICAgLyoqIEtleSBvZiBjb2x1bW5zIHByZXNldCBzZXQgaW4gZXh0ZW5zaW9uLmpzb24gICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zUHJlc2V0S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgY29sdW1ucyB2aXNpYmlsaXR5IGZvciBEYXRhVGFibGVTY2hlbWEgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZXRDb2x1bW5zVmlzaWJpbGl0eShjb2x1bW5zVmlzaWJpbGl0eTogeyBbY29sdW1uSWQ6IHN0cmluZ106IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5ID0gY29sdW1uc1Zpc2liaWxpdHk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY29sdW1ucyB3aWR0aCBmb3IgRGF0YVRhYmxlU2NoZW1hICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2V0Q29sdW1uc1dpZHRocyhjb2x1bW5zV2lkdGhzOiB7IFtjb2x1bW5JZDogc3RyaW5nXTogbnVtYmVyIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhzID0gY29sdW1uc1dpZHRocztcbiAgICB9XG5cbiAgICAvKiogU2V0cyBjb2x1bW5zIG9yZGVyIGZvciBEYXRhVGFibGVTY2hlbWEgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZXRDb2x1bW5zT3JkZXIoY29sdW1uc09yZGVyOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlciA9IGNvbHVtbnNPcmRlcjtcbiAgICB9XG5cbiAgICAvKiogTGltaXQgb2YgcG9zc2libGUgdmlzaWJsZSBjb2x1bW5zLCBpbmNsdWRpbmcgXCIkdGh1bWJuYWlsXCIgY29sdW1uIGlmIHByb3ZpZGVkICovXG4gICAgQElucHV0KClcbiAgICBtYXhDb2x1bW5zVmlzaWJsZT86IG51bWJlcjtcblxuICAgIC8qKiBFbmFibGVzIGNvbHVtbiByZXNpemluZyBmb3IgZGF0YXRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBpc1Jlc2l6aW5nRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEVuYWJsZXMgYmx1ciB3aGVuIHJlc2l6aW5nIGRhdGF0YWJsZSBjb2x1bW5zICovXG4gICAgQElucHV0KClcbiAgICBibHVyT25SZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqIERpc3BsYXkgY2hlY2tib3hlcyBpbiBkYXRhdGFibGUgcm93cyBvbiBob3ZlciBvbmx5ICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Q2hlY2tib3hlc09uSG92ZXIgPSBmYWxzZTtcblxuICAgIC8qKiBEaXNwbGF5IGRyYWcgYW5kIGRyb3AgaGludC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlEcmFnQW5kRHJvcEhpbnQgPSB0cnVlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgYSBsaXN0IG5vZGUgKi9cbiAgICBAT3V0cHV0KClcbiAgICBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRpdHlFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZG91YmxlLWNsaWNrcyBhIGxpc3Qgbm9kZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5vZGVEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudGl0eUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBkaXNwbGF5IGZvbGRlciBjaGFuZ2VzICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9sZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50cnlFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBhY3RzIHVwb24gZmlsZXMgd2l0aCBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBjbGlja1xuICAgICAqIChkZXBlbmRzIG9uIGBuYXZpZ2F0aW9uLW1vZGVgKS4gVXNlZnVsIGZvciBpbnRlZ3JhdGlvbiB3aXRoIHRoZVxuICAgICAqIFZpZXdlciBjb21wb25lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHJldmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudGl0eUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgRG9jdW1lbnQgTGlzdCBoYXMgbG9hZGVkIGFsbCBpdGVtcyBhbmQgaXMgcmVhZHkgZm9yIHVzZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlUGFnaW5nPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgQVBJIGZhaWxzIHRvIGdldCB0aGUgRG9jdW1lbnQgTGlzdCBkYXRhICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIG5vZGUgc2VsZWN0aW9uIGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5vZGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJ5W10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZmlsdGVyIHZhbHVlIGlzIHNlbGVjdGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgZmlsdGVyU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hbXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gY29sdW1uIHdpZHRocyBjaGFuZ2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5zV2lkdGhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtjb2x1bW5JZDogc3RyaW5nXTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGNvbHVtbnMgdmlzaWJpbGl0eSBjaGFuZ2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5zVmlzaWJpbGl0eUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2NvbHVtbklkOiBzdHJpbmddOiBib29sZWFuIH0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGNvbHVtbnMgb3JkZXIgY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc09yZGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCByb3cgaXRlbXMgY291bnQgaW4gdGhlIHRhYmxlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0YVRhYmxlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBkYXRhVGFibGU6IERhdGFUYWJsZUNvbXBvbmVudDtcblxuICAgIGFjdGlvbnM6IENvbnRlbnRBY3Rpb25Nb2RlbFtdID0gW107XG4gICAgY29udGV4dEFjdGlvbkhhbmRsZXI6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgZGF0YTogU2hhcmVEYXRhVGFibGVBZGFwdGVyO1xuICAgIG5vUGVybWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbiA9IG5ldyBBcnJheTxOb2RlRW50cnk+KCk7XG4gICAgJGZvbGRlck5vZGU6IFN1YmplY3Q8Tm9kZT4gPSBuZXcgU3ViamVjdDxOb2RlPigpO1xuICAgIGFsbG93RmlsdGVyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgICBvcmRlckJ5OiBzdHJpbmdbXSA9IG51bGw7XG4gICAgcHJlc2VsZWN0ZWRSb3dzOiBEYXRhUm93W10gPSBbXTtcblxuICAgIC8vIEBkZXByZWNhdGVkIDMuMC4wXG4gICAgZm9sZGVyTm9kZTogTm9kZTtcblxuICAgIHByaXZhdGUgX3BhZ2luYXRpb246IFBhZ2luYXRpb25Nb2RlbCA9IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OO1xuICAgIHBhZ2luYXRpb246IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uTW9kZWw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uTW9kZWw+KHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OKTtcbiAgICBzb3J0aW5nU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0aW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhU29ydGluZ1tdPih0aGlzLkRFRkFVTFRfU09SVElORyk7XG5cbiAgICBwcml2YXRlIHJvd01lbnVDYWNoZTogeyBba2V5OiBzdHJpbmddOiBDb250ZW50QWN0aW9uTW9kZWxbXSB9ID0ge307XG4gICAgcHJpdmF0ZSBsb2FkaW5nVGltZW91dDogYW55O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSBfbm9kZXNBcGk6IE5vZGVzQXBpO1xuICAgIGdldCBub2Rlc0FwaSgpOiBOb2Rlc0FwaSB7XG4gICAgICAgIHRoaXMuX25vZGVzQXBpID0gdGhpcy5fbm9kZXNBcGkgPz8gbmV3IE5vZGVzQXBpKHRoaXMuYWxmcmVzY29BcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNBcGk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZG9jdW1lbnRMaXN0U2VydmljZTogRG9jdW1lbnRMaXN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0aHVtYm5haWxTZXJ2aWNlOiBUaHVtYm5haWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFsZnJlc2NvQXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBOb2Rlc0FwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGF0YVRhYmxlU2VydmljZTogRGF0YVRhYmxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dcbiAgICApIHtcbiAgICAgICAgc3VwZXIoYXBwQ29uZmlnLCAnZGVmYXVsdCcsIHByZXNldHNEZWZhdWx0TW9kZWwpO1xuICAgICAgICB0aGlzLm5vZGVTZXJ2aWNlLm5vZGVVcGRhdGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgobm9kZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGVTZXJ2aWNlLnJvd1VwZGF0ZS5uZXh0KHsgaWQ6IG5vZGUuaWQsIG9iajogeyBlbnRyeTogbm9kZSB9IH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuUGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhZ1NpemUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1heEl0ZW1zID0gdGhpcy5fcGFnaW5hdGlvbi5tYXhJdGVtcyA9IHBhZ1NpemU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0QWN0aW9ucyhub2RlOiBOb2RlRW50cnkpIHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5nZXROb2RlQWN0aW9ucyhub2RlKTtcbiAgICAgICAgICAgIGlmIChhY3Rpb25zICYmIGFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLm1hcCgoY3VycmVudEFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbDogY3VycmVudEFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogdGhpcy5jb250ZXh0QWN0aW9uSGFuZGxlclxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlZmF1bHRTb3J0aW5nKCk6IERhdGFTb3J0aW5nIHtcbiAgICAgICAgbGV0IGRlZmF1bHRTb3J0aW5nOiBEYXRhU29ydGluZztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zb3J0aW5nKSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgZGlyZWN0aW9uXSA9IHRoaXMuc29ydGluZztcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0aW5nID0gbmV3IERhdGFTb3J0aW5nKGtleSwgZGlyZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0aW5nID0gbmV3IERhdGFTb3J0aW5nKHRoaXMuc29ydGluZy5rZXksIHRoaXMuc29ydGluZy5kaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTb3J0aW5nO1xuICAgIH1cblxuICAgIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRhdGEgfHwgdGhpcy5kYXRhLmdldFJvd3MoKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm93TWVudUNhY2hlID0ge307XG4gICAgICAgIHRoaXMubG9hZExheW91dFByZXNldHMoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IFNoYXJlRGF0YVRhYmxlQWRhcHRlcihcbiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsU2VydmljZSxcbiAgICAgICAgICAgIHRoaXMuY29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdGhpcy5nZXREZWZhdWx0U29ydGluZygpLFxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nTW9kZSxcbiAgICAgICAgICAgIHRoaXMuYWxsb3dEcm9wRmlsZXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhLnRodW1ibmFpbHMgPSB0aGlzLnRodW1ibmFpbHM7XG4gICAgICAgIHRoaXMuZGF0YS5wZXJtaXNzaW9uc1N0eWxlID0gdGhpcy5wZXJtaXNzaW9uc1N0eWxlO1xuXG4gICAgICAgIGlmICh0aGlzLl9yb3dGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRGaWx0ZXIodGhpcy5fcm93RmlsdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlUmVzb2x2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRJbWFnZVJlc29sdmVyKHRoaXMuaW1hZ2VSZXNvbHZlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRleHRBY3Rpb25IYW5kbGVyLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgodmFsKSA9PiB0aGlzLmNvbnRleHRBY3Rpb25DYWxsYmFjayh2YWwpKTtcblxuICAgICAgICB0aGlzLmVuZm9yY2VTaW5nbGVDbGlja05hdmlnYXRpb25Gb3JNb2JpbGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5maWx0ZXJWYWx1ZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG93SGVhZGVyID0gU2hvd0hlYWRlck1vZGUuQWx3YXlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnNQcmVzZXRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJlc2V0S2V5KHRoaXMuY29sdW1uc1ByZXNldEtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UucmVsb2FkJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlLnJlc2V0U2VsZWN0aW9uJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkxpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTGlzdC5jb2x1bW5zLmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhdGFibGVTY2hlbWEoKTtcbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICghY2hhbmdlc1sncHJlc2VsZWN0Tm9kZXMnXSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zb3J0aW5nKSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgZGlyZWN0aW9uXSA9IHRoaXMuc29ydGluZztcbiAgICAgICAgICAgIHRoaXMub3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckJ5QXJyYXkoa2V5LCBkaXJlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcmRlckJ5ID0gdGhpcy5idWlsZE9yZGVyQnlBcnJheSh0aGlzLnNvcnRpbmcua2V5LCB0aGlzLnNvcnRpbmcuZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS50aHVtYm5haWxzID0gdGhpcy50aHVtYm5haWxzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuc29ydGluZ01vZGUgJiYgIWNoYW5nZXMuc29ydGluZ01vZGUuZmlyc3RDaGFuZ2UgJiYgdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc29ydGluZ01vZGUgPSBjaGFuZ2VzLnNvcnRpbmdNb2RlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNvcnRpbmcgJiYgIWNoYW5nZXMuc29ydGluZy5maXJzdENoYW5nZSAmJiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2hhbmdlcy5zb3J0aW5nLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2tleSwgZGlyZWN0aW9uXSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRTb3J0aW5nKG5ldyBEYXRhU29ydGluZyhrZXksIGRpcmVjdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklkICYmIGNoYW5nZXNbJ2N1cnJlbnRGb2xkZXJJZCddPy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2N1cnJlbnRGb2xkZXJJZCddPy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRGb2xkZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLm5vZGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlID0gdGhpcy5fcGFnaW5hdGlvbiA/IHRoaXMuX3BhZ2luYXRpb24ubWVyZ2UgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEubG9hZFBhZ2UoY2hhbmdlcy5ub2RlLmN1cnJlbnRWYWx1ZSwgbWVyZ2UsIG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmVFeGlzdGluZ1NlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMub25QcmVzZWxlY3ROb2RlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVhZHkoY2hhbmdlcy5ub2RlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZXMuaW1hZ2VSZXNvbHZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRJbWFnZVJlc29sdmVyKGNoYW5nZXMuaW1hZ2VSZXNvbHZlci5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVsb2FkKGhpZGVMb2FkaW5nU3Bpbm5lciA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5yZWxvYWRXaXRob3V0UmVzZXR0aW5nU2VsZWN0aW9uKGhpZGVMb2FkaW5nU3Bpbm5lcik7XG4gICAgfVxuXG4gICAgcmVsb2FkV2l0aG91dFJlc2V0dGluZ1NlbGVjdGlvbihoaWRlTG9hZGluZ1NwaW5uZXIgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5ub2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmxvYWRQYWdlKHRoaXMubm9kZSwgdGhpcy5fcGFnaW5hdGlvbi5tZXJnZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZUV4aXN0aW5nU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uUHJlc2VsZWN0Tm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc3luY1BhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMub25EYXRhUmVhZHkodGhpcy5ub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcihoaWRlTG9hZGluZ1NwaW5uZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dEFjdGlvbkNhbGxiYWNrKGFjdGlvbikge1xuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb250ZW50QWN0aW9uKGFjdGlvbi5ub2RlLCBhY3Rpb24ubW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Tm9kZUFjdGlvbnMobm9kZTogTm9kZUVudHJ5IHwgYW55KTogQ29udGVudEFjdGlvbk1vZGVsW10ge1xuICAgICAgICBpZiAobm9kZT8uZW50cnkpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5lbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSAnZG9jdW1lbnQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gJ2ZvbGRlcic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5yb3dNZW51Q2FjaGVbbm9kZS5lbnRyeS5pZF07XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjdGlvbihhY3Rpb24sIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uc0J5VGFyZ2V0ID0gdGhpcy5hY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSB0eXBlb2YgZW50cnkudmlzaWJsZSA9PT0gJ2Z1bmN0aW9uJyA/IGVudHJ5LnZpc2libGUobm9kZSkgOiBlbnRyeS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIGVudHJ5LnRhcmdldC50b0xvd2VyQ2FzZSgpID09PSB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGFjdGlvbikgPT4gbmV3IENvbnRlbnRBY3Rpb25Nb2RlbChhY3Rpb24pKTtcblxuICAgICAgICAgICAgICAgIGFjdGlvbnNCeVRhcmdldC5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoQWN0aW9uKGFjdGlvbiwgbm9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvd01lbnVDYWNoZVtub2RlLmVudHJ5LmlkXSA9IGFjdGlvbnNCeVRhcmdldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uc0J5VGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaEFjdGlvbihhY3Rpb246IENvbnRlbnRBY3Rpb25Nb2RlbCwgbm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGFjdGlvbi5kaXNhYmxlZCA9IHRoaXMuaXNBY3Rpb25EaXNhYmxlZChhY3Rpb24sIG5vZGUpO1xuICAgICAgICBhY3Rpb24udmlzaWJsZSA9IHRoaXMuaXNBY3Rpb25WaXNpYmxlKGFjdGlvbiwgbm9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvblZpc2libGUoYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwsIG5vZGU6IE5vZGVFbnRyeSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLnZpc2libGUobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWN0aW9uLnZpc2libGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvbkRpc2FibGVkKGFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsLCBub2RlOiBOb2RlRW50cnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoYWN0aW9uLnBlcm1pc3Npb24gJiYgYWN0aW9uLmRpc2FibGVXaXRoTm9QZXJtaXNzaW9uICYmICF0aGlzLmNvbnRlbnRTZXJ2aWNlLmhhc0FsbG93YWJsZU9wZXJhdGlvbnMobm9kZS5lbnRyeSwgYWN0aW9uLnBlcm1pc3Npb24pKSB8fFxuICAgICAgICAgICAgdGhpcy5sb2NrU2VydmljZS5pc0xvY2tlZChub2RlLmVudHJ5KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgICBvblNob3dDb250ZXh0TWVudShlPzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGUgJiYgdGhpcy5jb250ZXh0TWVudUFjdGlvbnMpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hdmlnYXRlVG8obm9kZTogTm9kZSB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVySWQgPSBub2RlO1xuICAgICAgICAgICAgdGhpcy5mb2xkZXJDaGFuZ2UuZW1pdChuZXcgTm9kZUVudHJ5RXZlbnQoeyBpZDogbm9kZSB9IGFzIE5vZGUpKTtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbk5hdmlnYXRlRm9sZGVyKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldE5ld0ZvbGRlclBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IHRoaXMuZ2V0Tm9kZUZvbGRlckRlc3RpbmF0aW9uSWQobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkZXJDaGFuZ2UuZW1pdChuZXcgTm9kZUVudHJ5RXZlbnQoeyBpZDogdGhpcy5jdXJyZW50Rm9sZGVySWQgfSBhcyBOb2RlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROb2RlRm9sZGVyRGVzdGluYXRpb25JZChub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlua0ZvbGRlcihub2RlKSA/IG5vZGUucHJvcGVydGllc1snY206ZGVzdGluYXRpb24nXSA6IG5vZGUuaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xpbmtGb2xkZXIobm9kZTogTm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gJ2FwcDpmb2xkZXJsaW5rJyAmJiBub2RlLnByb3BlcnRpZXM/LlsnY206ZGVzdGluYXRpb24nXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUN1c3RvbVNvdXJjZURhdGEobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVySWQgPSBub2RlSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIGV4ZWN1dGluZyBjb250ZW50IGFjdGlvbiBmb3IgYSBkb2N1bWVudCBvciBmb2xkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGJlIHRoZSBjb250ZXh0IG9mIHRoZSBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWdhaW5zdCB0aGUgY29udGV4dC5cbiAgICAgKi9cbiAgICBleGVjdXRlQ29udGVudEFjdGlvbihub2RlOiBOb2RlRW50cnksIGFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsKSB7XG4gICAgICAgIGlmIChub2RlPy5lbnRyeSAmJiBhY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJTdWIgPSB0eXBlb2YgYWN0aW9uLmhhbmRsZXIgPT09ICdmdW5jdGlvbicgPyBhY3Rpb24uaGFuZGxlcihub2RlLCB0aGlzLCBhY3Rpb24ucGVybWlzc2lvbikgOiBvZih0cnVlKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uZXhlY3V0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyU3ViKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclN1Yi5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gYWN0aW9uLmV4ZWN1dGUobm9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2FkaW5nU3RhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YT8uZ2V0Um93cygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZEZvbGRlcihoaWRlTG9hZGluZ1NwaW5uZXIgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIWhpZGVMb2FkaW5nU3Bpbm5lcikge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlLmlzQ3VzdG9tU291cmNlU2VydmljZSh0aGlzLmN1cnJlbnRGb2xkZXJJZCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VzdG9tU291cmNlRGF0YSh0aGlzLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UubG9hZEZvbGRlckJ5Tm9kZUlkKHRoaXMuY3VycmVudEZvbGRlcklkLCB0aGlzLl9wYWdpbmF0aW9uLCB0aGlzLmluY2x1ZGVGaWVsZHMsIHRoaXMud2hlcmUsIHRoaXMub3JkZXJCeSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGRvY3VtZW50Tm9kZTogRG9jdW1lbnRMb2FkZXJOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlck5vZGUgPSBkb2N1bWVudE5vZGUuY3VycmVudE5vZGUuZW50cnk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGZvbGRlck5vZGUubmV4dChkb2N1bWVudE5vZGUuY3VycmVudE5vZGUuZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZUxvYWRlZChkb2N1bWVudE5vZGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzZXRTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XG4gICAgICAgIHRoaXMubm9QZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25QYWdlTG9hZGVkKG5vZGVQYWdpbmc6IE5vZGVQYWdpbmcpIHtcbiAgICAgICAgaWYgKG5vZGVQYWdpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEubG9hZFBhZ2Uobm9kZVBhZ2luZywgdGhpcy5fcGFnaW5hdGlvbi5tZXJnZSwgdGhpcy5hbGxvd0Ryb3BGaWxlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZUV4aXN0aW5nU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uUHJlc2VsZWN0Tm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMub25EYXRhUmVhZHkobm9kZVBhZ2luZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNvcnRpbmdDaGFuZ2VkKGV2ZW50OiBDdXN0b21FdmVudCkge1xuICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLmJ1aWxkT3JkZXJCeUFycmF5KGV2ZW50LmRldGFpbC5zb3J0aW5nS2V5LCBldmVudC5kZXRhaWwuZGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5zb3J0aW5nID0gW2V2ZW50LmRldGFpbC5zb3J0aW5nS2V5LCBldmVudC5kZXRhaWwuZGlyZWN0aW9uXTtcbiAgICAgICAgdGhpcy5zb3J0aW5nU3ViamVjdC5uZXh0KFt0aGlzLmFkZGl0aW9uYWxTb3J0aW5nLCBldmVudC5kZXRhaWxdKTtcblxuICAgICAgICBpZiAodGhpcy5zb3J0aW5nTW9kZSA9PT0gJ3NlcnZlcicpIHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkT3JkZXJCeUFycmF5KGN1cnJlbnRLZXk6IHN0cmluZywgY3VycmVudERpcmVjdGlvbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW2Ake3RoaXMuYWRkaXRpb25hbFNvcnRpbmcua2V5fSAke3RoaXMuYWRkaXRpb25hbFNvcnRpbmcuZGlyZWN0aW9ufWAsIGAke2N1cnJlbnRLZXl9ICR7Y3VycmVudERpcmVjdGlvbn1gXTtcbiAgICB9XG5cbiAgICBvblByZXZpZXdGaWxlKG5vZGU6IE5vZGVFbnRyeSkge1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgc2l6ZUluTUIgPSBub2RlLmVudHJ5Py5jb250ZW50Py5zaXplSW5CeXRlcyAvIEJZVEVTX1RPX01CX0NPTlZFUlNJT05fVkFMVUU7XG4gICAgICAgICAgICBjb25zdCBmaWxlQXV0b0Rvd25sb2FkRmxhZzogYm9vbGVhbiA9IHRoaXMuYXBwQ29uZmlnLmdldCgndmlld2VyLmVuYWJsZUZpbGVBdXRvRG93bmxvYWQnLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNpemVUaHJlc2hvbGQ6IG51bWJlciA9IHRoaXMuYXBwQ29uZmlnLmdldCgndmlld2VyLmZpbGVBdXRvRG93bmxvYWRTaXplVGhyZXNob2xkSW5NQicsIDE1KTtcblxuICAgICAgICAgICAgaWYgKGZpbGVBdXRvRG93bmxvYWRGbGFnICYmIHNpemVJbk1CICYmIHNpemVJbk1CID4gc2l6ZVRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oRmlsZUF1dG9Eb3dubG9hZENvbXBvbmVudCwgeyBkaXNhYmxlQ2xvc2U6IHRydWUsIGRhdGE6IG5vZGUgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlldy5lbWl0KG5ldyBOb2RlRW50aXR5RXZlbnQobm9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db2x1bW5zVmlzaWJpbGl0eUNoYW5nZShjb2x1bW5zOiBEYXRhQ29sdW1uW10pIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eSA9IGNvbHVtbnMucmVkdWNlKCh2aXNpYmxlQ29sdW1uc01hcCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlQ29sdW1uc01hcFtjb2x1bW4uaWRdID0gIWNvbHVtbi5pc0hpZGRlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZpc2libGVDb2x1bW5zTWFwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHlDaGFuZ2VkLmVtaXQodGhpcy5jb2x1bW5zVmlzaWJpbGl0eSk7XG4gICAgfVxuXG4gICAgb25Db2x1bW5PcmRlckNoYW5nZShjb2x1bW5zV2l0aE5ld09yZGVyOiBEYXRhQ29sdW1uW10pIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXIgPSBjb2x1bW5zV2l0aE5ld09yZGVyLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXJDaGFuZ2VkLmVtaXQodGhpcy5jb2x1bW5zT3JkZXIpO1xuICAgIH1cblxuICAgIG9uQ29sdW1uc1dpZHRoQ2hhbmdlKGNvbHVtbnM6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICBjb25zdCBuZXdDb2x1bW5zV2lkdGhzID0gY29sdW1ucy5yZWR1Y2UoKHdpZHRoc0NvbHVtbnNNYXAsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCkge1xuICAgICAgICAgICAgICAgIHdpZHRoc0NvbHVtbnNNYXBbY29sdW1uLmlkXSA9IE1hdGguY2VpbChjb2x1bW4ud2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoc0NvbHVtbnNNYXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aHMgPSB7IC4uLnRoaXMuY29sdW1uc1dpZHRocywgLi4ubmV3Q29sdW1uc1dpZHRocyB9O1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5jb2x1bW5zV2lkdGhzKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQoY291bnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQuZW1pdChjb3VudCk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sobm9kZUVudHJ5OiBOb2RlRW50cnkpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ25vZGUtY2xpY2snLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgbm9kZTogbm9kZUVudHJ5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBOb2RlRW50aXR5RXZlbnQobm9kZUVudHJ5KTtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdChldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZSAmJiB0aGlzLm5hdmlnYXRpb25Nb2RlID09PSBEb2N1bWVudExpc3RDb21wb25lbnQuU0lOR0xFX0NMSUNLX05BVklHQVRJT04pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVBY3Rpb25DbGljayhub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlRGJsQ2xpY2sobm9kZUVudHJ5OiBOb2RlRW50cnkpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ25vZGUtZGJsY2xpY2snLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgbm9kZTogbm9kZUVudHJ5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG5cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTm9kZUVudGl0eUV2ZW50KG5vZGVFbnRyeSk7XG4gICAgICAgIHRoaXMubm9kZURibENsaWNrLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGUgJiYgdGhpcy5uYXZpZ2F0aW9uTW9kZSA9PT0gRG9jdW1lbnRMaXN0Q29tcG9uZW50LkRPVUJMRV9DTElDS19OQVZJR0FUSU9OKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlQWN0aW9uQ2xpY2sobm9kZUVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4ZWN1dGVBY3Rpb25DbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBpZiAobm9kZUVudHJ5Py5lbnRyeSkge1xuICAgICAgICAgICAgaWYgKG5vZGVFbnRyeS5lbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJldmlld0ZpbGUobm9kZUVudHJ5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGVFbnRyeS5lbnRyeS5pc0ZvbGRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyhub2RlRW50cnkuZW50cnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5WydndWlkJ10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiB0aGlzLmluY2x1ZGVGaWVsZHNcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc0FwaS5nZXROb2RlKG5vZGVFbnRyeS5lbnRyeVsnZ3VpZCddLCBvcHRpb25zKS50aGVuKChub2RlOiBOb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKG5vZGUuZW50cnkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlU2VsZWN0KGV2ZW50OiB7IHJvdzogU2hhcmVEYXRhUm93OyBzZWxlY3Rpb246IEFycmF5PFNoYXJlRGF0YVJvdz4gfSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGV2ZW50LnNlbGVjdGlvbi5tYXAoKGVudHJ5KSA9PiBlbnRyeS5ub2RlKTtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ25vZGUtc2VsZWN0Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgbm9kZTogZXZlbnQucm93ID8gZXZlbnQucm93Lm5vZGUgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgb25Ob2RlVW5zZWxlY3QoZXZlbnQ6IHsgcm93OiBTaGFyZURhdGFSb3c7IHNlbGVjdGlvbjogQXJyYXk8U2hhcmVEYXRhUm93PiB9KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gZXZlbnQuc2VsZWN0aW9uLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5vZGUpO1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS11bnNlbGVjdCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIG5vZGU6IGV2ZW50LnJvdyA/IGV2ZW50LnJvdy5ub2RlIDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIG9uU2hvd1Jvd0NvbnRleHRNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51QWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGFyZ3Mucm93Lm5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIGFyZ3MuYWN0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dEFjdGlvbnMobm9kZSkgfHwgW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNob3dSb3dBY3Rpb25zTWVudShldmVudDogRGF0YUNlbGxFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50QWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGFyZ3Mucm93Lm5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIGFyZ3MuYWN0aW9ucyA9IHRoaXMuZ2V0Tm9kZUFjdGlvbnMobm9kZSkgfHwgW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkV4ZWN1dGVSb3dBY3Rpb24oZXZlbnQ6IERhdGFSb3dBY3Rpb25FdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50QWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGFyZ3Mucm93Lm5vZGU7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhcmdzLmFjdGlvbjtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUNvbnRlbnRBY3Rpb24obm9kZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZW5mb3JjZVNpbmdsZUNsaWNrTmF2aWdhdGlvbkZvck1vYmlsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uTW9kZSA9IERvY3VtZW50TGlzdENvbXBvbmVudC5TSU5HTEVfQ0xJQ0tfTkFWSUdBVElPTjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbk5hdmlnYXRlRm9sZGVyKG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGNhbk5hdmlnYXRlRm9sZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5vZGU/LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICBjYW5OYXZpZ2F0ZUZvbGRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuTmF2aWdhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRhdGFSZWFkeShub2RlUGFnaW5nOiBOb2RlUGFnaW5nKSB7XG4gICAgICAgIHRoaXMucmVhZHkuZW1pdChub2RlUGFnaW5nKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLm5leHQobm9kZVBhZ2luZy5saXN0LnBhZ2luYXRpb24pO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhZ2luYXRpb24ocmVxdWVzdFBhZ2luYXRpb25Nb2RlbDogUmVxdWVzdFBhZ2luYXRpb25Nb2RlbCkge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLm1heEl0ZW1zID0gcmVxdWVzdFBhZ2luYXRpb25Nb2RlbC5tYXhJdGVtcztcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbi5za2lwQ291bnQgPSByZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLnNraXBDb3VudDtcbiAgICAgICAgdGhpcy5yZWxvYWQocmVxdWVzdFBhZ2luYXRpb25Nb2RlbC5tZXJnZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jUGFnaW5hdGlvbigpIHtcbiAgICAgICAgdGhpcy5ub2RlLmxpc3QucGFnaW5hdGlvbi5tYXhJdGVtcyA9IHRoaXMuX3BhZ2luYXRpb24ubWF4SXRlbXM7XG4gICAgICAgIHRoaXMubm9kZS5saXN0LnBhZ2luYXRpb24uc2tpcENvdW50ID0gdGhpcy5fcGFnaW5hdGlvbi5za2lwQ291bnQ7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoYWN0aXZlRmlsdGVyczogRmlsdGVyU2VhcmNoW10pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3Rpb24uZW1pdChhY3RpdmVGaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXNldE5ld0ZvbGRlclBhZ2luYXRpb24oKSB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb24uc2tpcENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbi5tYXhJdGVtcyA9IHRoaXMubWF4SXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UoZXJyLm1lc3NhZ2UpLmVycm9yLnN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vUGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycik7XG4gICAgfVxuXG4gICAgZ2V0UHJlc2VsZWN0ZWROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk6IE5vZGVFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUHJlc2VsZWN0ZWROb2RlcygpID8gKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkgPyBbdGhpcy5wcmVzZWxlY3ROb2Rlc1swXV0gOiB0aGlzLnByZXNlbGVjdE5vZGVzKSA6IFtdO1xuICAgIH1cblxuICAgIGdldFByZXNlbGVjdGVkUm93c0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk6IERhdGFSb3dbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1ByZXNlbGVjdGVkUm93cygpID8gKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkgPyBbdGhpcy5wcmVzZWxlY3RlZFJvd3NbMF1dIDogdGhpcy5wcmVzZWxlY3RlZFJvd3MpIDogW107XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogRGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUHJlc2VsZWN0ZWRSb3dzKClcbiAgICAgICAgICAgID8gdGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKVxuICAgICAgICAgICAgICAgID8gW3RoaXMucHJlc2VsZWN0ZWRSb3dzWzBdXVxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhLmdldFNlbGVjdGVkUm93cygpXG4gICAgICAgICAgICA6IHRoaXMuZGF0YS5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICB9XG5cbiAgICBvblByZXNlbGVjdE5vZGVzKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNQcmVzZWxlY3RlZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJlc2VsZWN0Um93c09mUHJlc2VsZWN0ZWROb2RlcygpO1xuICAgICAgICAgICAgY29uc3QgcHJlc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRQcmVzZWxlY3RlZFJvd3NCYXNlZE9uU2VsZWN0aW9uTW9kZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5kYXRhLmdldFNlbGVjdGVkUm93cygpIGFzIFNoYXJlRGF0YVJvd1tdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcHJlc2VsZWN0ZWRSb3dzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuc2VsZWN0Um93KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbk5vZGVTZWxlY3QoeyByb3c6IHVuZGVmaW5lZCwgc2VsZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVzZXJ2ZUV4aXN0aW5nU2VsZWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiB0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd09mU2VsZWN0aW9uID0gdGhpcy5kYXRhLmdldFJvd0J5Tm9kZUlkKHNlbGVjdGlvbi5lbnRyeS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHJvd09mU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd09mU2VsZWN0aW9uLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXNlbGVjdFJvd3NPZlByZXNlbGVjdGVkTm9kZXMoKSB7XG4gICAgICAgIHRoaXMucHJlc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGNvbnN0IHByZXNlbGVjdGVkTm9kZXMgPSB0aGlzLmdldFByZXNlbGVjdGVkTm9kZXNCYXNlZE9uU2VsZWN0aW9uTW9kZSgpO1xuXG4gICAgICAgIHByZXNlbGVjdGVkTm9kZXMuZm9yRWFjaCgocHJlc2VsZWN0ZWROb2RlOiBOb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd09mUHJlc2VsZWN0ZWROb2RlID0gdGhpcy5kYXRhLmdldFJvd0J5Tm9kZUlkKHByZXNlbGVjdGVkTm9kZS5lbnRyeS5pZCk7XG4gICAgICAgICAgICBpZiAocm93T2ZQcmVzZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICByb3dPZlByZXNlbGVjdGVkTm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlbGVjdGVkUm93cy5wdXNoKHJvd09mUHJlc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW5zZWxlY3RSb3dGcm9tTm9kZUlkKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJvd1RvVW5zZWxlY3QgPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQobm9kZUlkKTtcbiAgICAgICAgaWYgKHJvd1RvVW5zZWxlY3Q/LmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJvd1RvVW5zZWxlY3QuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuc2VsZWN0Um93KHJvd1RvVW5zZWxlY3QsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uQmFzZWRPblNlbGVjdGlvbk1vZGUoKSBhcyBTaGFyZURhdGFSb3dbXTtcbiAgICAgICAgICAgIHRoaXMub25Ob2RlVW5zZWxlY3QoeyByb3c6IHVuZGVmaW5lZCwgc2VsZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNdWx0aXBsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQcmVzZWxlY3RlZE5vZGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZWxlY3ROb2Rlcz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkUm93cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlc2VsZWN0ZWRSb3dzPy5sZW5ndGggPiAwO1xuICAgIH1cbn1cbiIsIjxhZGYtZGF0YXRhYmxlXG4gICAgI2RhdGFUYWJsZVxuICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFthY3Rpb25zXT1cImNvbnRlbnRBY3Rpb25zXCJcbiAgICBbYWN0aW9uc1Bvc2l0aW9uXT1cImNvbnRlbnRBY3Rpb25zUG9zaXRpb25cIlxuICAgIFttdWx0aXNlbGVjdF09XCJtdWx0aXNlbGVjdFwiXG4gICAgW2NvbnRleHRNZW51XT1cImNvbnRleHRNZW51QWN0aW9uc1wiXG4gICAgW3Jvd1N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICBbcm93U3R5bGVDbGFzc109XCJyb3dTdHlsZUNsYXNzXCJcbiAgICBbc2hvd01haW5EYXRhdGFibGVBY3Rpb25zXT1cInRydWVcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtub1Blcm1pc3Npb25dPVwibm9QZXJtaXNzaW9uXCJcbiAgICBbc2hvd0hlYWRlcl09XCJzaG93SGVhZGVyXCJcbiAgICBbcm93TWVudUNhY2hlRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgW3N0aWNreUhlYWRlcl09XCJzdGlja3lIZWFkZXJcIlxuICAgIFthbGxvd0ZpbHRlcmluZ109XCJhbGxvd0ZpbHRlcmluZ1wiXG4gICAgW2lzUmVzaXppbmdFbmFibGVkXT1cImlzUmVzaXppbmdFbmFibGVkXCJcbiAgICBbYmx1ck9uUmVzaXplXT1cImJsdXJPblJlc2l6ZVwiXG4gICAgW2Rpc3BsYXlDaGVja2JveGVzT25Ib3Zlcl09XCJkaXNwbGF5Q2hlY2tib3hlc09uSG92ZXJcIlxuICAgIChzaG93Um93Q29udGV4dE1lbnUpPVwib25TaG93Um93Q29udGV4dE1lbnUoJGV2ZW50KVwiXG4gICAgKHNob3dSb3dBY3Rpb25zTWVudSk9XCJvblNob3dSb3dBY3Rpb25zTWVudSgkZXZlbnQpXCJcbiAgICAoZXhlY3V0ZVJvd0FjdGlvbik9XCJvbkV4ZWN1dGVSb3dBY3Rpb24oJGV2ZW50KVwiXG4gICAgKGNvbHVtbnNXaWR0aENoYW5nZWQpPVwib25Db2x1bW5zV2lkdGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGNvbHVtbk9yZGVyQ2hhbmdlZCk9XCJvbkNvbHVtbk9yZGVyQ2hhbmdlKCRldmVudClcIlxuICAgIChzZWxlY3RlZEl0ZW1zQ291bnRDaGFuZ2VkKT1cIm9uU2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAocm93Q2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LnZhbHVlPy5ub2RlKVwiXG4gICAgKHJvd0RibENsaWNrKT1cIm9uTm9kZURibENsaWNrKCRldmVudC52YWx1ZT8ubm9kZSlcIlxuICAgIChyb3ctc2VsZWN0KT1cIm9uTm9kZVNlbGVjdCgkYW55KCRldmVudCkuZGV0YWlsKVwiXG4gICAgKHJvdy11bnNlbGVjdCk9XCJvbk5vZGVVbnNlbGVjdCgkYW55KCRldmVudCkuZGV0YWlsKVwiXG4gICAgKHNvcnRpbmctY2hhbmdlZCk9XCJvblNvcnRpbmdDaGFuZ2VkKCRhbnkoJGV2ZW50KSlcIlxuICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlLWdhbGxlcnktdGh1bWJuYWlsc109XCJkYXRhLnRodW1ibmFpbHNcIj5cblxuICAgIDxkaXYgKm5nSWY9XCJoZWFkZXJGaWx0ZXJzXCI+XG4gICAgICAgIDxhZGYtZmlsdGVyLWhlYWRlclxuICAgICAgICAgICAgW2N1cnJlbnRGb2xkZXJJZF09XCJjdXJyZW50Rm9sZGVySWRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgIChmaWx0ZXJTZWxlY3Rpb24pPVwib25GaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8YWRmLW5vLWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxhZGYtZW1wdHktbGlzdCAqbmdJZj1cIiFjdXN0b21Ob0NvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktbGlzdF90ZW1wbGF0ZSBhZGYtZW1wdHktZm9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLXRoaXMtc3BhY2UtaXMtZW1wdHlcIj57eydBREYtRE9DVU1FTlQtTElTVC5FTVBUWS5IRUFERVInIHwgdHJhbnNsYXRlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlEcmFnQW5kRHJvcEhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLWRyYWctZHJvcFwiPnt7ICdBREYtREFUQVRBQkxFLkVNUFRZLkRSQUctQU5ELURST1AuVElUTEUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVtcHR5LWZvbGRlci1hbnktZmlsZXMtaGVyZS10by1hZGRcIj57eyAnQURGLURBVEFUQUJMRS5FTVBUWS5EUkFHLUFORC1EUk9QLlNVQlRJVExFJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBbYWx0XT1cIidBREYtREFUQVRBQkxFLkVNUFRZLkRSQUctQU5ELURST1AuVElUTEUnIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLWltYWdlXCIgW3NyY109XCJlbXB0eUZvbGRlckltYWdlVXJsXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FkZi1lbXB0eS1saXN0PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlLCBlbXB0eS1mb2xkZXItY29udGVudFwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9hZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cblxuICAgIDxhZGYtbm8tcGVybWlzc2lvbi10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX190ZW1wbGF0ZVwiICpuZ0lmPVwiIWN1c3RvbU5vUGVybWlzc2lvbnNUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lcnJvcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhZGYtbm8tcGVybWlzc2lvbl9fdGVtcGxhdGUtLXRleHRcIj57eyAnQURGLURPQ1VNRU5ULUxJU1QuTk9fUEVSTUlTU0lPTicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi1jdXN0b20tbm8tcGVybWlzc2lvbi10ZW1wbGF0ZSwgbm8tcGVybWlzc2lvbi1jb250ZW50XCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1uby1wZXJtaXNzaW9uLXRlbXBsYXRlPlxuXG4gICAgPGFkZi1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nLWNvbnRhaW5lclwiICpuZ0lmPVwiIWN1c3RvbUxvYWRpbmdDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWRmLWRvY3VtZW50LWxpc3QtbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRvY3VtZW50LWxpc3QtbG9hZGluZy1tYXJnaW5cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREYtRE9DVU1FTlQtTElTVC5MT0FERVJfTEFCRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cIidpbmRldGVybWluYXRlJ1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi1jdXN0b20tbG9hZGluZy1jb250ZW50LXRlbXBsYXRlXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGU+XG5cbiAgICA8YWRmLW1haW4tbWVudS1kYXRhdGFibGUtdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbWFpbk1lbnVUcmlnZ2VyPlxuICAgICAgICAgICAgPGFkZi1kYXRhdGFibGUtY29sdW1uLXNlbGVjdG9yXG4gICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICAgICAgICBbbWFpbk1lbnVUcmlnZ2VyXT1cIm1haW5NZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgIFtjb2x1bW5zU29ydGluZ109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFttYXhDb2x1bW5zVmlzaWJsZV09XCJtYXhDb2x1bW5zVmlzaWJsZVwiXG4gICAgICAgICAgICAgIChzdWJtaXRDb2x1bW5zVmlzaWJpbGl0eSk9XCJvbkNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLW1haW4tbWVudS1kYXRhdGFibGUtdGVtcGxhdGU+XG5cbjwvYWRmLWRhdGF0YWJsZT5cbiJdfQ==