@alfresco/adf-core 8.1.0-15469386840 → 8.1.0-15470372956

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 (575) hide show
  1. package/esm2022/adf-core.mjs +5 -0
  2. package/esm2022/api/alfresco-adf-core-api.mjs +5 -0
  3. package/esm2022/api/index.mjs +20 -0
  4. package/esm2022/api/lib/adf-http-client.service.mjs +311 -0
  5. package/esm2022/api/lib/alfresco-api/alfresco-api.param-encoder.mjs +33 -0
  6. package/esm2022/api/lib/alfresco-api/alfresco-api.response-error.mjs +25 -0
  7. package/esm2022/api/lib/alfresco-api/alfresco-api.utils.mjs +80 -0
  8. package/esm2022/api/lib/interfaces.mjs +18 -0
  9. package/esm2022/api/lib/types.mjs +18 -0
  10. package/esm2022/auth/alfresco-adf-core-auth.mjs +5 -0
  11. package/esm2022/auth/authentication-interceptor/authentication.interceptor.mjs +56 -0
  12. package/esm2022/auth/authentication.mjs +19 -0
  13. package/esm2022/auth/index.mjs +19 -0
  14. package/esm2022/breadcrumbs/alfresco-adf-core-breadcrumbs.mjs +5 -0
  15. package/esm2022/breadcrumbs/components/breadcrumb/breadcrumb.component.mjs +83 -0
  16. package/esm2022/breadcrumbs/components/breadcrumb-item/breadcrumb-item.component.mjs +42 -0
  17. package/esm2022/breadcrumbs/directives/breadcrumb-focus.directive.mjs +44 -0
  18. package/esm2022/breadcrumbs/index.mjs +19 -0
  19. package/esm2022/feature-flags/alfresco-adf-core-feature-flags.mjs +5 -0
  20. package/esm2022/feature-flags/index.mjs +29 -0
  21. package/esm2022/feature-flags/lib/components/feature-flags-wrapper.mjs +36 -0
  22. package/esm2022/feature-flags/lib/components/feature-override-indicator.component.mjs +56 -0
  23. package/esm2022/feature-flags/lib/components/flags/flags.component.mjs +130 -0
  24. package/esm2022/feature-flags/lib/directives/features.directive.mjs +63 -0
  25. package/esm2022/feature-flags/lib/directives/not-features.directive.mjs +63 -0
  26. package/esm2022/feature-flags/lib/guards/is-feature-off.guard.mjs +38 -0
  27. package/esm2022/feature-flags/lib/guards/is-feature-on.guard.mjs +38 -0
  28. package/esm2022/feature-flags/lib/guards/is-flags-override-on.guard.mjs +40 -0
  29. package/esm2022/feature-flags/lib/interfaces/features.interface.mjs +24 -0
  30. package/esm2022/feature-flags/lib/mocks/features-service-mock.factory.mjs +62 -0
  31. package/esm2022/feature-flags/lib/providers/debug-feature-flags.provider.mjs +51 -0
  32. package/esm2022/feature-flags/lib/providers/dummy-feature-flags.provider.mjs +36 -0
  33. package/esm2022/feature-flags/lib/services/debug-features.service.mjs +94 -0
  34. package/esm2022/feature-flags/lib/services/dummy-features.service.mjs +40 -0
  35. package/esm2022/feature-flags/lib/services/flagset.parser.mjs +38 -0
  36. package/esm2022/feature-flags/lib/services/qa-features.helper.mjs +62 -0
  37. package/esm2022/feature-flags/lib/services/storage-features.service.mjs +126 -0
  38. package/esm2022/lib/about/about-extension-list/about-extension-list.component.mjs +52 -0
  39. package/esm2022/lib/about/about-license-list/about-license-list.component.mjs +52 -0
  40. package/esm2022/lib/about/about-module-list/module-list.component.mjs +52 -0
  41. package/esm2022/lib/about/about-package/package-list.component.mjs +66 -0
  42. package/esm2022/lib/about/about-panel.directive.mjs +37 -0
  43. package/esm2022/lib/about/about-repository-info/about-repository-info.component.mjs +60 -0
  44. package/esm2022/lib/about/about-repository-info/repository-info.interface.mjs +18 -0
  45. package/esm2022/lib/about/about-server-settings/about-server-settings.component.mjs +43 -0
  46. package/esm2022/lib/about/about-status-list/about-status-list.component.mjs +52 -0
  47. package/esm2022/lib/about/about.component.mjs +35 -0
  48. package/esm2022/lib/about/about.module.mjs +75 -0
  49. package/esm2022/lib/about/index.mjs +18 -0
  50. package/esm2022/lib/about/interfaces.mjs +18 -0
  51. package/esm2022/lib/about/public-api.mjs +28 -0
  52. package/esm2022/lib/app-config/app-config-storage-prefix.factory.mjs +51 -0
  53. package/esm2022/lib/app-config/app-config.loader.mjs +41 -0
  54. package/esm2022/lib/app-config/app-config.module.mjs +33 -0
  55. package/esm2022/lib/app-config/app-config.pipe.mjs +38 -0
  56. package/esm2022/lib/app-config/app-config.service.mjs +243 -0
  57. package/esm2022/lib/app-config/debug-app-config.service.mjs +44 -0
  58. package/esm2022/lib/app-config/index.mjs +18 -0
  59. package/esm2022/lib/app-config/public-api.mjs +22 -0
  60. package/esm2022/lib/auth/authentication-interceptor/auth-bearer.interceptor.mjs +67 -0
  61. package/esm2022/lib/auth/basic-auth/basic-alfresco-auth.service.mjs +356 -0
  62. package/esm2022/lib/auth/basic-auth/content-auth.mjs +189 -0
  63. package/esm2022/lib/auth/basic-auth/process-auth.mjs +193 -0
  64. package/esm2022/lib/auth/guard/auth-guard-bpm.service.mjs +31 -0
  65. package/esm2022/lib/auth/guard/auth-guard-ecm.service.mjs +31 -0
  66. package/esm2022/lib/auth/guard/auth-guard-sso-role.service.mjs +57 -0
  67. package/esm2022/lib/auth/guard/auth-guard.mjs +53 -0
  68. package/esm2022/lib/auth/guard/auth-guard.service.mjs +113 -0
  69. package/esm2022/lib/auth/index.mjs +18 -0
  70. package/esm2022/lib/auth/interfaces/authentication-service.interface.mjs +18 -0
  71. package/esm2022/lib/auth/interfaces/authentication.interface.mjs +18 -0
  72. package/esm2022/lib/auth/interfaces/identity-group.interface.mjs +18 -0
  73. package/esm2022/lib/auth/interfaces/identity-user.service.interface.mjs +18 -0
  74. package/esm2022/lib/auth/interfaces/openid-configuration.interface.mjs +18 -0
  75. package/esm2022/lib/auth/models/application-access.model.mjs +18 -0
  76. package/esm2022/lib/auth/models/identity-group.model.mjs +18 -0
  77. package/esm2022/lib/auth/models/identity-role.model.mjs +30 -0
  78. package/esm2022/lib/auth/models/identity-user.model.mjs +18 -0
  79. package/esm2022/lib/auth/models/oauth-config.model.mjs +18 -0
  80. package/esm2022/lib/auth/models/redirection.model.mjs +28 -0
  81. package/esm2022/lib/auth/models/user-access.model.mjs +18 -0
  82. package/esm2022/lib/auth/oidc/auth-config.mjs +19 -0
  83. package/esm2022/lib/auth/oidc/auth-config.service.mjs +110 -0
  84. package/esm2022/lib/auth/oidc/auth-routing.module.mjs +34 -0
  85. package/esm2022/lib/auth/oidc/auth.module.mjs +112 -0
  86. package/esm2022/lib/auth/oidc/auth.service.mjs +22 -0
  87. package/esm2022/lib/auth/oidc/oidc-auth.guard.mjs +37 -0
  88. package/esm2022/lib/auth/oidc/oidc-authentication.service.mjs +202 -0
  89. package/esm2022/lib/auth/oidc/public-api.mjs +24 -0
  90. package/esm2022/lib/auth/oidc/redirect-auth.service.mjs +267 -0
  91. package/esm2022/lib/auth/oidc/retry-login.service.mjs +66 -0
  92. package/esm2022/lib/auth/oidc/token.interceptor.mjs +62 -0
  93. package/esm2022/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.mjs +31 -0
  94. package/esm2022/lib/auth/public-api.mjs +44 -0
  95. package/esm2022/lib/auth/services/authentication.service.mjs +190 -0
  96. package/esm2022/lib/auth/services/base-authentication.service.mjs +99 -0
  97. package/esm2022/lib/auth/services/identity-group.service.mjs +269 -0
  98. package/esm2022/lib/auth/services/identity-role.service.mjs +99 -0
  99. package/esm2022/lib/auth/services/identity-user.service.mjs +443 -0
  100. package/esm2022/lib/auth/services/jwt-helper.service.mjs +205 -0
  101. package/esm2022/lib/auth/services/oauth2.service.mjs +69 -0
  102. package/esm2022/lib/auth/services/time-sync.service.mjs +83 -0
  103. package/esm2022/lib/auth/services/user-access.service.mjs +110 -0
  104. package/esm2022/lib/avatar/avatar.component.mjs +51 -0
  105. package/esm2022/lib/blank-page/blank-page.component.mjs +31 -0
  106. package/esm2022/lib/blank-page/blank-page.module.mjs +33 -0
  107. package/esm2022/lib/blank-page/index.mjs +18 -0
  108. package/esm2022/lib/blank-page/public-api.mjs +19 -0
  109. package/esm2022/lib/button/button.component.mjs +61 -0
  110. package/esm2022/lib/card-view/card-view.module.mjs +80 -0
  111. package/esm2022/lib/card-view/components/base-card-view.mjs +51 -0
  112. package/esm2022/lib/card-view/components/card-view/card-view.component.mjs +66 -0
  113. package/esm2022/lib/card-view/components/card-view-arrayitem/card-view-arrayitem.component.mjs +56 -0
  114. package/esm2022/lib/card-view/components/card-view-boolitem/card-view-boolitem.component.mjs +40 -0
  115. package/esm2022/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.mjs +177 -0
  116. package/esm2022/lib/card-view/components/card-view-item-dispatcher/card-view-item-dispatcher.component.mjs +108 -0
  117. package/esm2022/lib/card-view/components/card-view-keyvaluepairsitem/card-view-keyvaluepairsitem.component.mjs +65 -0
  118. package/esm2022/lib/card-view/components/card-view-mapitem/card-view-mapitem.component.mjs +47 -0
  119. package/esm2022/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.mjs +138 -0
  120. package/esm2022/lib/card-view/components/card-view-selectitem/select-filter-input/select-filter-input.component.mjs +114 -0
  121. package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +240 -0
  122. package/esm2022/lib/card-view/components/card-view.components.mjs +28 -0
  123. package/esm2022/lib/card-view/index.mjs +18 -0
  124. package/esm2022/lib/card-view/interfaces/base-card-view-update.interface.mjs +18 -0
  125. package/esm2022/lib/card-view/interfaces/card-view-arrayitem-properties.interface.mjs +18 -0
  126. package/esm2022/lib/card-view/interfaces/card-view-boolitem-properties.interface.mjs +18 -0
  127. package/esm2022/lib/card-view/interfaces/card-view-dateitem-properties.interface.mjs +18 -0
  128. package/esm2022/lib/card-view/interfaces/card-view-item-properties.interface.mjs +18 -0
  129. package/esm2022/lib/card-view/interfaces/card-view-item-validator.interface.mjs +18 -0
  130. package/esm2022/lib/card-view/interfaces/card-view-item.interface.mjs +18 -0
  131. package/esm2022/lib/card-view/interfaces/card-view-keyvaluepairsitem-properties.interface.mjs +18 -0
  132. package/esm2022/lib/card-view/interfaces/card-view-selectitem-properties.interface.mjs +18 -0
  133. package/esm2022/lib/card-view/interfaces/card-view-textitem-pipe-property.interface.mjs +18 -0
  134. package/esm2022/lib/card-view/interfaces/card-view-textitem-properties.interface.mjs +18 -0
  135. package/esm2022/lib/card-view/interfaces/card-view.interfaces.mjs +29 -0
  136. package/esm2022/lib/card-view/interfaces/click-notification.interface.mjs +18 -0
  137. package/esm2022/lib/card-view/interfaces/update-notification.interface.mjs +18 -0
  138. package/esm2022/lib/card-view/models/card-view-arrayitem.model.mjs +28 -0
  139. package/esm2022/lib/card-view/models/card-view-baseitem.model.mjs +64 -0
  140. package/esm2022/lib/card-view/models/card-view-boolitem.model.mjs +36 -0
  141. package/esm2022/lib/card-view/models/card-view-dateitem.model.mjs +58 -0
  142. package/esm2022/lib/card-view/models/card-view-datetimeitem.model.mjs +28 -0
  143. package/esm2022/lib/card-view/models/card-view-floatitem.model.mjs +33 -0
  144. package/esm2022/lib/card-view/models/card-view-intitem.model.mjs +36 -0
  145. package/esm2022/lib/card-view/models/card-view-keyvaluepairs.model.mjs +27 -0
  146. package/esm2022/lib/card-view/models/card-view-longitem.model.mjs +36 -0
  147. package/esm2022/lib/card-view/models/card-view-mapitem.model.mjs +32 -0
  148. package/esm2022/lib/card-view/models/card-view-selectitem.model.mjs +41 -0
  149. package/esm2022/lib/card-view/models/card-view-textitem.model.mjs +40 -0
  150. package/esm2022/lib/card-view/models/card-view.models.mjs +29 -0
  151. package/esm2022/lib/card-view/public-api.mjs +25 -0
  152. package/esm2022/lib/card-view/services/card-item-types.service.mjs +54 -0
  153. package/esm2022/lib/card-view/services/card-view-update.service.mjs +59 -0
  154. package/esm2022/lib/card-view/services/card-view.services.mjs +19 -0
  155. package/esm2022/lib/card-view/validators/card-view-item-float.validator.mjs +31 -0
  156. package/esm2022/lib/card-view/validators/card-view-item-int.validator.mjs +35 -0
  157. package/esm2022/lib/card-view/validators/card-view-item-length.validator.mjs +34 -0
  158. package/esm2022/lib/card-view/validators/card-view-item-long.validator.mjs +35 -0
  159. package/esm2022/lib/card-view/validators/card-view-item-match.validator.mjs +35 -0
  160. package/esm2022/lib/card-view/validators/card-view-item-minmax.validator.mjs +35 -0
  161. package/esm2022/lib/card-view/validators/card-view-item-only-positive-int.validator.mjs +32 -0
  162. package/esm2022/lib/card-view/validators/card-view-item-only-positive-long.validator.mjs +31 -0
  163. package/esm2022/lib/card-view/validators/card-view.validators.mjs +26 -0
  164. package/esm2022/lib/card-view/validators/validators.map.mjs +26 -0
  165. package/esm2022/lib/clipboard/clipboard.directive.mjs +99 -0
  166. package/esm2022/lib/clipboard/clipboard.module.mjs +34 -0
  167. package/esm2022/lib/clipboard/clipboard.service.mjs +103 -0
  168. package/esm2022/lib/clipboard/index.mjs +18 -0
  169. package/esm2022/lib/clipboard/public-api.mjs +21 -0
  170. package/esm2022/lib/comments/comment-list/comment-list.component.mjs +53 -0
  171. package/esm2022/lib/comments/comment-list/comment-list.module.mjs +33 -0
  172. package/esm2022/lib/comments/comment-list/index.mjs +18 -0
  173. package/esm2022/lib/comments/comment-list/public-api.mjs +19 -0
  174. package/esm2022/lib/comments/comments.component.mjs +128 -0
  175. package/esm2022/lib/comments/comments.module.mjs +33 -0
  176. package/esm2022/lib/comments/index.mjs +18 -0
  177. package/esm2022/lib/comments/interfaces/comments-service.interface.mjs +18 -0
  178. package/esm2022/lib/comments/interfaces/comments.token.mjs +19 -0
  179. package/esm2022/lib/comments/public-api.mjs +22 -0
  180. package/esm2022/lib/common/index.mjs +35 -0
  181. package/esm2022/lib/common/interface/search-component.interface.mjs +18 -0
  182. package/esm2022/lib/common/mock/app-config.service.mock.mjs +47 -0
  183. package/esm2022/lib/common/models/default-languages.model.mjs +36 -0
  184. package/esm2022/lib/common/models/log-levels.model.mjs +33 -0
  185. package/esm2022/lib/common/models/user-info-mode.enum.mjs +25 -0
  186. package/esm2022/lib/common/services/cookie.service.mjs +82 -0
  187. package/esm2022/lib/common/services/download.service.mjs +102 -0
  188. package/esm2022/lib/common/services/dynamic-component-mapper.service.mjs +89 -0
  189. package/esm2022/lib/common/services/highlight-transform.service.mjs +61 -0
  190. package/esm2022/lib/common/services/language-item.interface.mjs +18 -0
  191. package/esm2022/lib/common/services/log.service.mjs +171 -0
  192. package/esm2022/lib/common/services/page-title.service.mjs +63 -0
  193. package/esm2022/lib/common/services/sort-by-category.service.mjs +81 -0
  194. package/esm2022/lib/common/services/storage.service.mjs +143 -0
  195. package/esm2022/lib/common/services/thumbnail.service.mjs +194 -0
  196. package/esm2022/lib/common/services/url.service.mjs +45 -0
  197. package/esm2022/lib/common/services/user-preferences.service.mjs +238 -0
  198. package/esm2022/lib/common/utils/date-fns-adapter.mjs +115 -0
  199. package/esm2022/lib/common/utils/date-fns-utils.mjs +222 -0
  200. package/esm2022/lib/common/utils/datetime-fns-adapter.mjs +134 -0
  201. package/esm2022/lib/common/utils/file-utils.mjs +65 -0
  202. package/esm2022/lib/common/utils/index.mjs +18 -0
  203. package/esm2022/lib/common/utils/moment-date-adapter.mjs +202 -0
  204. package/esm2022/lib/common/utils/moment-date-formats.model.mjs +32 -0
  205. package/esm2022/lib/common/utils/object-utils.mjs +107 -0
  206. package/esm2022/lib/common/utils/public-api.mjs +25 -0
  207. package/esm2022/lib/common/utils/string-utils.mjs +45 -0
  208. package/esm2022/lib/context-menu/animations.mjs +33 -0
  209. package/esm2022/lib/context-menu/context-menu-list.component.mjs +92 -0
  210. package/esm2022/lib/context-menu/context-menu-overlay.mjs +25 -0
  211. package/esm2022/lib/context-menu/context-menu-overlay.service.mjs +109 -0
  212. package/esm2022/lib/context-menu/context-menu.directive.mjs +63 -0
  213. package/esm2022/lib/context-menu/context-menu.module.mjs +35 -0
  214. package/esm2022/lib/context-menu/context-menu.tokens.mjs +19 -0
  215. package/esm2022/lib/context-menu/index.mjs +18 -0
  216. package/esm2022/lib/context-menu/interfaces.mjs +18 -0
  217. package/esm2022/lib/context-menu/public-api.mjs +21 -0
  218. package/esm2022/lib/core.module.mjs +314 -0
  219. package/esm2022/lib/datatable/components/amount-cell/amount-cell.component.mjs +45 -0
  220. package/esm2022/lib/datatable/components/boolean-cell/boolean-cell.component.mjs +65 -0
  221. package/esm2022/lib/datatable/components/columns-selector/columns-search-filter.pipe.mjs +55 -0
  222. package/esm2022/lib/datatable/components/columns-selector/columns-selector.component.mjs +114 -0
  223. package/esm2022/lib/datatable/components/data-cell.event.mjs +31 -0
  224. package/esm2022/lib/datatable/components/data-row-action.event.mjs +34 -0
  225. package/esm2022/lib/datatable/components/datatable/datatable.component.mjs +915 -0
  226. package/esm2022/lib/datatable/components/datatable-cell/datatable-cell.component.mjs +126 -0
  227. package/esm2022/lib/datatable/components/datatable-row/datatable-row.component.mjs +98 -0
  228. package/esm2022/lib/datatable/components/date-cell/date-cell.component.mjs +78 -0
  229. package/esm2022/lib/datatable/components/empty-list/empty-list.component.mjs +60 -0
  230. package/esm2022/lib/datatable/components/filesize-cell/filesize-cell.component.mjs +49 -0
  231. package/esm2022/lib/datatable/components/icon-cell/icon-cell.component.mjs +67 -0
  232. package/esm2022/lib/datatable/components/json-cell/json-cell.component.mjs +86 -0
  233. package/esm2022/lib/datatable/components/location-cell/location-cell.component.mjs +69 -0
  234. package/esm2022/lib/datatable/components/mocks/datatable.mock.mjs +153 -0
  235. package/esm2022/lib/datatable/components/number-cell/number-cell.component.mjs +42 -0
  236. package/esm2022/lib/datatable/data/data-column.model.mjs +18 -0
  237. package/esm2022/lib/datatable/data/data-row-event.model.mjs +26 -0
  238. package/esm2022/lib/datatable/data/data-row-update.model.mjs +18 -0
  239. package/esm2022/lib/datatable/data/data-row.model.mjs +18 -0
  240. package/esm2022/lib/datatable/data/data-sorting.model.mjs +24 -0
  241. package/esm2022/lib/datatable/data/data-table.schema.mjs +132 -0
  242. package/esm2022/lib/datatable/data/datatable-adapter.mjs +18 -0
  243. package/esm2022/lib/datatable/data/object-datacolumn.model.mjs +46 -0
  244. package/esm2022/lib/datatable/data/object-datarow.model.mjs +38 -0
  245. package/esm2022/lib/datatable/data/object-datatable-adapter.mjs +134 -0
  246. package/esm2022/lib/datatable/data-column/data-column-header.component.mjs +45 -0
  247. package/esm2022/lib/datatable/data-column/data-column-list.component.mjs +36 -0
  248. package/esm2022/lib/datatable/data-column/data-column.component.mjs +114 -0
  249. package/esm2022/lib/datatable/data-column/index.mjs +18 -0
  250. package/esm2022/lib/datatable/data-column/public-api.mjs +20 -0
  251. package/esm2022/lib/datatable/datatable.module.mjs +161 -0
  252. package/esm2022/lib/datatable/directives/custom-empty-content-template.directive.mjs +35 -0
  253. package/esm2022/lib/datatable/directives/custom-loading-template.directive.mjs +30 -0
  254. package/esm2022/lib/datatable/directives/custom-no-permission-template.directive.mjs +35 -0
  255. package/esm2022/lib/datatable/directives/drop-zone.directive.mjs +89 -0
  256. package/esm2022/lib/datatable/directives/header-filter-template.directive.mjs +43 -0
  257. package/esm2022/lib/datatable/directives/loading-template.directive.mjs +46 -0
  258. package/esm2022/lib/datatable/directives/main-data-table-action-template.directive.mjs +43 -0
  259. package/esm2022/lib/datatable/directives/no-content-template.directive.mjs +46 -0
  260. package/esm2022/lib/datatable/directives/no-permission-template.directive.mjs +46 -0
  261. package/esm2022/lib/datatable/directives/resizable/resizable.directive.mjs +173 -0
  262. package/esm2022/lib/datatable/directives/resizable/resize-handle.directive.mjs +72 -0
  263. package/esm2022/lib/datatable/directives/resizable/types.mjs +18 -0
  264. package/esm2022/lib/datatable/index.mjs +18 -0
  265. package/esm2022/lib/datatable/public-api.mjs +55 -0
  266. package/esm2022/lib/datatable/services/datatable.service.mjs +33 -0
  267. package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.mjs +50 -0
  268. package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.module.mjs +38 -0
  269. package/esm2022/lib/dialogs/dialog/dialog-data.interface.mjs +18 -0
  270. package/esm2022/lib/dialogs/dialog/dialog.component.mjs +71 -0
  271. package/esm2022/lib/dialogs/dialog/dialog.model.mjs +22 -0
  272. package/esm2022/lib/dialogs/dialog/index.mjs +20 -0
  273. package/esm2022/lib/dialogs/edit-json/edit-json.dialog.mjs +51 -0
  274. package/esm2022/lib/dialogs/edit-json/edit-json.dialog.module.mjs +38 -0
  275. package/esm2022/lib/dialogs/index.mjs +18 -0
  276. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  277. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +74 -0
  278. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.model.mjs +18 -0
  279. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +33 -0
  280. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes.guard.mjs +64 -0
  281. package/esm2022/lib/directives/directive.module.mjs +56 -0
  282. package/esm2022/lib/directives/highlight.directive.mjs +67 -0
  283. package/esm2022/lib/directives/index.mjs +18 -0
  284. package/esm2022/lib/directives/infinite-select-scroll.directive.mjs +67 -0
  285. package/esm2022/lib/directives/logout.directive.mjs +72 -0
  286. package/esm2022/lib/directives/public-api.mjs +24 -0
  287. package/esm2022/lib/directives/tooltip-card/tooltip-card.component.mjs +60 -0
  288. package/esm2022/lib/directives/tooltip-card/tooltip-card.directive.mjs +104 -0
  289. package/esm2022/lib/directives/upload.directive.mjs +241 -0
  290. package/esm2022/lib/dynamic-chip-list/chip.mjs +18 -0
  291. package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.component.mjs +205 -0
  292. package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.module.mjs +33 -0
  293. package/esm2022/lib/dynamic-chip-list/index.mjs +18 -0
  294. package/esm2022/lib/dynamic-chip-list/public-api.mjs +20 -0
  295. package/esm2022/lib/events/base-ui.event.mjs +21 -0
  296. package/esm2022/lib/events/base.event.mjs +29 -0
  297. package/esm2022/lib/events/index.mjs +18 -0
  298. package/esm2022/lib/events/public-api.mjs +19 -0
  299. package/esm2022/lib/form/components/form-base.component.mjs +212 -0
  300. package/esm2022/lib/form/components/form-custom-button.directive.mjs +30 -0
  301. package/esm2022/lib/form/components/form-field/form-field.component.mjs +142 -0
  302. package/esm2022/lib/form/components/form-renderer.component.mjs +162 -0
  303. package/esm2022/lib/form/components/form-section/form-section.component.mjs +46 -0
  304. package/esm2022/lib/form/components/helpers/buttons-visibility.mjs +37 -0
  305. package/esm2022/lib/form/components/inplace-form-input/inplace-form-input.component.mjs +37 -0
  306. package/esm2022/lib/form/components/middlewares/decimal-middleware.service.mjs +48 -0
  307. package/esm2022/lib/form/components/middlewares/middleware.mjs +19 -0
  308. package/esm2022/lib/form/components/widgets/amount/amount.widget.mjs +78 -0
  309. package/esm2022/lib/form/components/widgets/base-viewer/base-viewer.widget.mjs +60 -0
  310. package/esm2022/lib/form/components/widgets/checkbox/checkbox.widget.mjs +53 -0
  311. package/esm2022/lib/form/components/widgets/core/container-column.model.mjs +28 -0
  312. package/esm2022/lib/form/components/widgets/core/container.model.mjs +50 -0
  313. package/esm2022/lib/form/components/widgets/core/content-link.model.mjs +52 -0
  314. package/esm2022/lib/form/components/widgets/core/displayable-cm-properties.model.mjs +18 -0
  315. package/esm2022/lib/form/components/widgets/core/error-message.model.mjs +38 -0
  316. package/esm2022/lib/form/components/widgets/core/external-content-link.mjs +18 -0
  317. package/esm2022/lib/form/components/widgets/core/external-content.mjs +18 -0
  318. package/esm2022/lib/form/components/widgets/core/form-field-file-source.mjs +18 -0
  319. package/esm2022/lib/form/components/widgets/core/form-field-metadata.mjs +18 -0
  320. package/esm2022/lib/form/components/widgets/core/form-field-option.mjs +18 -0
  321. package/esm2022/lib/form/components/widgets/core/form-field-rule.mjs +18 -0
  322. package/esm2022/lib/form/components/widgets/core/form-field-selected-folder.mjs +18 -0
  323. package/esm2022/lib/form/components/widgets/core/form-field-templates.mjs +18 -0
  324. package/esm2022/lib/form/components/widgets/core/form-field-types.mjs +74 -0
  325. package/esm2022/lib/form/components/widgets/core/form-field-utils.mjs +23 -0
  326. package/esm2022/lib/form/components/widgets/core/form-field-validator.mjs +268 -0
  327. package/esm2022/lib/form/components/widgets/core/form-field-variable-options.mjs +18 -0
  328. package/esm2022/lib/form/components/widgets/core/form-field.model.mjs +490 -0
  329. package/esm2022/lib/form/components/widgets/core/form-outcome-event.model.mjs +32 -0
  330. package/esm2022/lib/form/components/widgets/core/form-outcome.model.mjs +38 -0
  331. package/esm2022/lib/form/components/widgets/core/form-values.mjs +18 -0
  332. package/esm2022/lib/form/components/widgets/core/form-variable.model.mjs +18 -0
  333. package/esm2022/lib/form/components/widgets/core/form-widget.model.mjs +33 -0
  334. package/esm2022/lib/form/components/widgets/core/form.model.mjs +387 -0
  335. package/esm2022/lib/form/components/widgets/core/group.model.mjs +18 -0
  336. package/esm2022/lib/form/components/widgets/core/index.mjs +49 -0
  337. package/esm2022/lib/form/components/widgets/core/predefined-theme.mjs +115 -0
  338. package/esm2022/lib/form/components/widgets/core/process-form-model.interface.mjs +18 -0
  339. package/esm2022/lib/form/components/widgets/core/process-variable.model.mjs +18 -0
  340. package/esm2022/lib/form/components/widgets/core/tab.model.mjs +34 -0
  341. package/esm2022/lib/form/components/widgets/core/theme.model.mjs +18 -0
  342. package/esm2022/lib/form/components/widgets/core/upload-widget-content-link.model.mjs +27 -0
  343. package/esm2022/lib/form/components/widgets/core/widget-schema.model.mjs +18 -0
  344. package/esm2022/lib/form/components/widgets/date/date.widget.mjs +163 -0
  345. package/esm2022/lib/form/components/widgets/date-time/date-time.widget.mjs +154 -0
  346. package/esm2022/lib/form/components/widgets/decimal/decimal.component.mjs +54 -0
  347. package/esm2022/lib/form/components/widgets/display-text/display-text.schema.mjs +86 -0
  348. package/esm2022/lib/form/components/widgets/display-text/display-text.widget.mjs +47 -0
  349. package/esm2022/lib/form/components/widgets/display-text/index.mjs +19 -0
  350. package/esm2022/lib/form/components/widgets/error/error.component.mjs +93 -0
  351. package/esm2022/lib/form/components/widgets/header/header.schema.mjs +86 -0
  352. package/esm2022/lib/form/components/widgets/header/header.widget.mjs +43 -0
  353. package/esm2022/lib/form/components/widgets/header/index.mjs +19 -0
  354. package/esm2022/lib/form/components/widgets/hyperlink/hyperlink.widget.mjs +71 -0
  355. package/esm2022/lib/form/components/widgets/index.mjs +71 -0
  356. package/esm2022/lib/form/components/widgets/json/json.widget.mjs +67 -0
  357. package/esm2022/lib/form/components/widgets/multiline-text/multiline-text.widget.mjs +56 -0
  358. package/esm2022/lib/form/components/widgets/number/number.widget.mjs +66 -0
  359. package/esm2022/lib/form/components/widgets/reactive-widget.interface.mjs +18 -0
  360. package/esm2022/lib/form/components/widgets/text/text-mask.component.mjs +215 -0
  361. package/esm2022/lib/form/components/widgets/text/text.widget.mjs +66 -0
  362. package/esm2022/lib/form/components/widgets/unknown/unknown.widget.mjs +63 -0
  363. package/esm2022/lib/form/components/widgets/widget.component.mjs +110 -0
  364. package/esm2022/lib/form/events/form-error.event.mjs +24 -0
  365. package/esm2022/lib/form/events/form-field.event.mjs +24 -0
  366. package/esm2022/lib/form/events/form-rules.event.mjs +25 -0
  367. package/esm2022/lib/form/events/form-spinner.event.mjs +23 -0
  368. package/esm2022/lib/form/events/form.event.mjs +29 -0
  369. package/esm2022/lib/form/events/index.mjs +24 -0
  370. package/esm2022/lib/form/events/validate-form-field.event.mjs +24 -0
  371. package/esm2022/lib/form/events/validate-form.event.mjs +25 -0
  372. package/esm2022/lib/form/form-base.module.mjs +90 -0
  373. package/esm2022/lib/form/index.mjs +18 -0
  374. package/esm2022/lib/form/models/form-rules.model.mjs +77 -0
  375. package/esm2022/lib/form/models/task-process-variable.model.mjs +19 -0
  376. package/esm2022/lib/form/models/widget-visibility.model.mjs +104 -0
  377. package/esm2022/lib/form/pipes/field-style.pipe.mjs +45 -0
  378. package/esm2022/lib/form/pipes/index.mjs +18 -0
  379. package/esm2022/lib/form/public-api.mjs +35 -0
  380. package/esm2022/lib/form/services/form-rendering.service.mjs +53 -0
  381. package/esm2022/lib/form/services/form-validation-service.interface.mjs +18 -0
  382. package/esm2022/lib/form/services/form.service.mjs +86 -0
  383. package/esm2022/lib/form/services/widget-visibility.service.mjs +294 -0
  384. package/esm2022/lib/header/header.component.mjs +73 -0
  385. package/esm2022/lib/header/index.mjs +18 -0
  386. package/esm2022/lib/header/navbar/navbar-item.component.mjs +37 -0
  387. package/esm2022/lib/header/navbar/navbar.component.mjs +36 -0
  388. package/esm2022/lib/header/public-api.mjs +20 -0
  389. package/esm2022/lib/icon/icon.component.mjs +51 -0
  390. package/esm2022/lib/icon/icon.module.mjs +36 -0
  391. package/esm2022/lib/icon/index.mjs +18 -0
  392. package/esm2022/lib/icon/public-api.mjs +19 -0
  393. package/esm2022/lib/identity-user-info/identity-user-info.component.mjs +87 -0
  394. package/esm2022/lib/identity-user-info/identity-user-info.module.mjs +33 -0
  395. package/esm2022/lib/identity-user-info/index.mjs +18 -0
  396. package/esm2022/lib/identity-user-info/public-api.mjs +19 -0
  397. package/esm2022/lib/info-drawer/index.mjs +18 -0
  398. package/esm2022/lib/info-drawer/info-drawer-layout.component.mjs +71 -0
  399. package/esm2022/lib/info-drawer/info-drawer.component.mjs +114 -0
  400. package/esm2022/lib/info-drawer/info-drawer.module.mjs +53 -0
  401. package/esm2022/lib/info-drawer/public-api.mjs +20 -0
  402. package/esm2022/lib/interface/index.mjs +18 -0
  403. package/esm2022/lib/interface/injection.tokens.mjs +19 -0
  404. package/esm2022/lib/interface/public-api.mjs +18 -0
  405. package/esm2022/lib/language-menu/index.mjs +18 -0
  406. package/esm2022/lib/language-menu/language-menu.component.mjs +61 -0
  407. package/esm2022/lib/language-menu/language-menu.module.mjs +35 -0
  408. package/esm2022/lib/language-menu/language-picker.component.mjs +78 -0
  409. package/esm2022/lib/language-menu/public-api.mjs +21 -0
  410. package/esm2022/lib/language-menu/service/language.service.interface.mjs +18 -0
  411. package/esm2022/lib/language-menu/service/language.service.mjs +34 -0
  412. package/esm2022/lib/layout/components/header/header.component.mjs +100 -0
  413. package/esm2022/lib/layout/components/layout-container/layout-container.component.mjs +180 -0
  414. package/esm2022/lib/layout/components/sidebar-action/sidebar-action-menu.component.mjs +82 -0
  415. package/esm2022/lib/layout/components/sidenav-layout/sidenav-layout.component.mjs +145 -0
  416. package/esm2022/lib/layout/directives/sidenav-layout-content.directive.mjs +33 -0
  417. package/esm2022/lib/layout/directives/sidenav-layout-header.directive.mjs +33 -0
  418. package/esm2022/lib/layout/directives/sidenav-layout-navigation.directive.mjs +33 -0
  419. package/esm2022/lib/layout/index.mjs +18 -0
  420. package/esm2022/lib/layout/layout.module.mjs +72 -0
  421. package/esm2022/lib/layout/public-api.mjs +25 -0
  422. package/esm2022/lib/login/components/login/login.component.mjs +368 -0
  423. package/esm2022/lib/login/components/login-dialog/login-dialog-component-data.interface.mjs +18 -0
  424. package/esm2022/lib/login/components/login-dialog/login-dialog.component.mjs +58 -0
  425. package/esm2022/lib/login/components/login-dialog-panel/login-dialog-panel.component.mjs +48 -0
  426. package/esm2022/lib/login/directives/login-footer.directive.mjs +41 -0
  427. package/esm2022/lib/login/directives/login-header.directive.mjs +41 -0
  428. package/esm2022/lib/login/index.mjs +18 -0
  429. package/esm2022/lib/login/login.module.mjs +54 -0
  430. package/esm2022/lib/login/models/login-error.event.mjs +22 -0
  431. package/esm2022/lib/login/models/login-submit.event.mjs +32 -0
  432. package/esm2022/lib/login/models/login-success.event.mjs +24 -0
  433. package/esm2022/lib/login/public-api.mjs +27 -0
  434. package/esm2022/lib/material.module.mjs +254 -0
  435. package/esm2022/lib/mock/cookie.service.mock.mjs +43 -0
  436. package/esm2022/lib/mock/data-column.mock.mjs +73 -0
  437. package/esm2022/lib/mock/event.mock.mjs +39 -0
  438. package/esm2022/lib/mock/form/form-definition-readonly.mock.mjs +225 -0
  439. package/esm2022/lib/mock/form/form-definition-visibility.mock.mjs +347 -0
  440. package/esm2022/lib/mock/form/form-definition.mock.mjs +403 -0
  441. package/esm2022/lib/mock/form/form.component.mock.mjs +275 -0
  442. package/esm2022/lib/mock/form/form.service.mock.mjs +248 -0
  443. package/esm2022/lib/mock/form/widget-visibility.service.mock.mjs +1835 -0
  444. package/esm2022/lib/mock/index.mjs +18 -0
  445. package/esm2022/lib/mock/public-api.mjs +27 -0
  446. package/esm2022/lib/mock/translation.service.mock.mjs +44 -0
  447. package/esm2022/lib/models/comment.model.mjs +51 -0
  448. package/esm2022/lib/models/component.model.mjs +24 -0
  449. package/esm2022/lib/models/decimal-number.model.mjs +26 -0
  450. package/esm2022/lib/models/general-user.model.mjs +24 -0
  451. package/esm2022/lib/models/index.mjs +18 -0
  452. package/esm2022/lib/models/pagination.model.mjs +29 -0
  453. package/esm2022/lib/models/path.model.mjs +24 -0
  454. package/esm2022/lib/models/product-version.model.mjs +28 -0
  455. package/esm2022/lib/models/public-api.mjs +24 -0
  456. package/esm2022/lib/models/request-pagination.model.mjs +25 -0
  457. package/esm2022/lib/notifications/components/add-notification.stories.component.mjs +44 -0
  458. package/esm2022/lib/notifications/components/notification-history.component.mjs +139 -0
  459. package/esm2022/lib/notifications/helpers/notification.factory.mjs +43 -0
  460. package/esm2022/lib/notifications/index.mjs +18 -0
  461. package/esm2022/lib/notifications/models/notification.model.mjs +25 -0
  462. package/esm2022/lib/notifications/notification-history.module.mjs +35 -0
  463. package/esm2022/lib/notifications/public-api.mjs +23 -0
  464. package/esm2022/lib/notifications/services/notification.service.mjs +166 -0
  465. package/esm2022/lib/pagination/index.mjs +18 -0
  466. package/esm2022/lib/pagination/infinite-pagination.component.mjs +112 -0
  467. package/esm2022/lib/pagination/paginated-component.interface.mjs +18 -0
  468. package/esm2022/lib/pagination/pagination-component.interface.mjs +18 -0
  469. package/esm2022/lib/pagination/pagination.component.mjs +263 -0
  470. package/esm2022/lib/pagination/pagination.module.mjs +35 -0
  471. package/esm2022/lib/pagination/public-api.mjs +22 -0
  472. package/esm2022/lib/pipes/date-time.pipe.mjs +46 -0
  473. package/esm2022/lib/pipes/decimal-number.pipe.mjs +78 -0
  474. package/esm2022/lib/pipes/file-size.pipe.mjs +54 -0
  475. package/esm2022/lib/pipes/file-type.pipe.mjs +40 -0
  476. package/esm2022/lib/pipes/format-space.pipe.mjs +39 -0
  477. package/esm2022/lib/pipes/full-name.pipe.mjs +43 -0
  478. package/esm2022/lib/pipes/index.mjs +18 -0
  479. package/esm2022/lib/pipes/localized-date.pipe.mjs +70 -0
  480. package/esm2022/lib/pipes/multi-value.pipe.mjs +37 -0
  481. package/esm2022/lib/pipes/pipe.module.mjs +83 -0
  482. package/esm2022/lib/pipes/public-api.mjs +30 -0
  483. package/esm2022/lib/pipes/text-highlight.pipe.mjs +39 -0
  484. package/esm2022/lib/pipes/time-ago.pipe.mjs +65 -0
  485. package/esm2022/lib/pipes/truncate.pipe.mjs +33 -0
  486. package/esm2022/lib/pipes/user-initial.pipe.mjs +52 -0
  487. package/esm2022/lib/pipes/user-like.interface.mjs +18 -0
  488. package/esm2022/lib/progress/progress.component.mjs +90 -0
  489. package/esm2022/lib/search-text/animations.mjs +32 -0
  490. package/esm2022/lib/search-text/index.mjs +18 -0
  491. package/esm2022/lib/search-text/models/search-text-input.model.mjs +23 -0
  492. package/esm2022/lib/search-text/public-api.mjs +22 -0
  493. package/esm2022/lib/search-text/search-text-input.component.mjs +294 -0
  494. package/esm2022/lib/search-text/search-text-input.module.mjs +35 -0
  495. package/esm2022/lib/search-text/search-trigger.directive.mjs +181 -0
  496. package/esm2022/lib/snackbar-content/index.mjs +18 -0
  497. package/esm2022/lib/snackbar-content/public-api.mjs +20 -0
  498. package/esm2022/lib/snackbar-content/snack-bar-data.mjs +18 -0
  499. package/esm2022/lib/snackbar-content/snackbar-content.component.mjs +48 -0
  500. package/esm2022/lib/snackbar-content/snackbar-content.module.mjs +38 -0
  501. package/esm2022/lib/sorting-picker/index.mjs +18 -0
  502. package/esm2022/lib/sorting-picker/public-api.mjs +18 -0
  503. package/esm2022/lib/sorting-picker/sorting-picker.component.mjs +68 -0
  504. package/esm2022/lib/templates/empty-content/empty-content.component.mjs +44 -0
  505. package/esm2022/lib/templates/error-content/error-content.component.mjs +62 -0
  506. package/esm2022/lib/templates/index.mjs +18 -0
  507. package/esm2022/lib/templates/public-api.mjs +20 -0
  508. package/esm2022/lib/templates/template.module.mjs +38 -0
  509. package/esm2022/lib/testing/core.story.module.mjs +39 -0
  510. package/esm2022/lib/testing/core.testing.module.mjs +35 -0
  511. package/esm2022/lib/testing/index.mjs +22 -0
  512. package/esm2022/lib/testing/noop-auth.module.mjs +80 -0
  513. package/esm2022/lib/testing/noop-translate.module.mjs +61 -0
  514. package/esm2022/lib/testing/unit-testing-utils.mjs +364 -0
  515. package/esm2022/lib/toolbar/index.mjs +18 -0
  516. package/esm2022/lib/toolbar/public-api.mjs +21 -0
  517. package/esm2022/lib/toolbar/toolbar-divider.component.mjs +27 -0
  518. package/esm2022/lib/toolbar/toolbar-title.component.mjs +32 -0
  519. package/esm2022/lib/toolbar/toolbar.component.mjs +40 -0
  520. package/esm2022/lib/toolbar/toolbar.module.mjs +36 -0
  521. package/esm2022/lib/translation/index.mjs +18 -0
  522. package/esm2022/lib/translation/public-api.mjs +19 -0
  523. package/esm2022/lib/translation/translate-loader.service.mjs +148 -0
  524. package/esm2022/lib/translation/translation.service.mjs +148 -0
  525. package/esm2022/lib/viewer/components/download-prompt-dialog/download-prompt-dialog.component.mjs +37 -0
  526. package/esm2022/lib/viewer/components/img-viewer/img-viewer.component.mjs +221 -0
  527. package/esm2022/lib/viewer/components/media-player/media-player.component.mjs +64 -0
  528. package/esm2022/lib/viewer/components/pdf-viewer/pdf-viewer.component.mjs +546 -0
  529. package/esm2022/lib/viewer/components/pdf-viewer-password-dialog/pdf-viewer-password-dialog.mjs +61 -0
  530. package/esm2022/lib/viewer/components/pdf-viewer-thumb/pdf-viewer-thumb.component.mjs +49 -0
  531. package/esm2022/lib/viewer/components/pdf-viewer-thumbnails/pdf-viewer-thumbnails.component.mjs +198 -0
  532. package/esm2022/lib/viewer/components/txt-viewer/txt-viewer.component.mjs +77 -0
  533. package/esm2022/lib/viewer/components/unknown-format/unknown-format.component.mjs +33 -0
  534. package/esm2022/lib/viewer/components/viewer-more-actions.component.mjs +34 -0
  535. package/esm2022/lib/viewer/components/viewer-open-with.component.mjs +34 -0
  536. package/esm2022/lib/viewer/components/viewer-render/viewer-render.component.mjs +219 -0
  537. package/esm2022/lib/viewer/components/viewer-sidebar.component.mjs +46 -0
  538. package/esm2022/lib/viewer/components/viewer-toolbar-actions.component.mjs +34 -0
  539. package/esm2022/lib/viewer/components/viewer-toolbar-custom-actions.component.mjs +34 -0
  540. package/esm2022/lib/viewer/components/viewer-toolbar.component.mjs +34 -0
  541. package/esm2022/lib/viewer/components/viewer.component.mjs +477 -0
  542. package/esm2022/lib/viewer/directives/viewer-extension.directive.mjs +67 -0
  543. package/esm2022/lib/viewer/index.mjs +18 -0
  544. package/esm2022/lib/viewer/models/download-prompt.actions.mjs +23 -0
  545. package/esm2022/lib/viewer/models/viewer.model.mjs +22 -0
  546. package/esm2022/lib/viewer/public-api.mjs +40 -0
  547. package/esm2022/lib/viewer/services/rendering-queue.services.mjs +179 -0
  548. package/esm2022/lib/viewer/services/view-util.service.mjs +149 -0
  549. package/esm2022/lib/viewer/viewer.module.mjs +112 -0
  550. package/esm2022/public-api.mjs +60 -0
  551. package/esm2022/shell/alfresco-adf-core-shell.mjs +5 -0
  552. package/esm2022/shell/index.mjs +20 -0
  553. package/esm2022/shell/lib/components/shell/shell.component.mjs +122 -0
  554. package/esm2022/shell/lib/services/shell-app.service.mjs +22 -0
  555. package/esm2022/shell/lib/shell.module.mjs +79 -0
  556. package/esm2022/shell/lib/shell.routes.mjs +25 -0
  557. package/feature-flags/lib/providers/debug-feature-flags.provider.d.ts +35 -4
  558. package/fesm2022/adf-core.mjs +979 -958
  559. package/fesm2022/adf-core.mjs.map +1 -1
  560. package/fesm2022/alfresco-adf-core-api.mjs +4 -4
  561. package/fesm2022/alfresco-adf-core-api.mjs.map +1 -1
  562. package/fesm2022/alfresco-adf-core-auth.mjs +3 -3
  563. package/fesm2022/alfresco-adf-core-auth.mjs.map +1 -1
  564. package/fesm2022/alfresco-adf-core-breadcrumbs.mjs +11 -11
  565. package/fesm2022/alfresco-adf-core-breadcrumbs.mjs.map +1 -1
  566. package/fesm2022/alfresco-adf-core-feature-flags.mjs +56 -51
  567. package/fesm2022/alfresco-adf-core-feature-flags.mjs.map +1 -1
  568. package/fesm2022/alfresco-adf-core-shell.mjs +9 -9
  569. package/fesm2022/alfresco-adf-core-shell.mjs.map +1 -1
  570. package/lib/card-view/components/base-card-view.d.ts +1 -1
  571. package/lib/datatable/data/data-table.schema.d.ts +1 -1
  572. package/lib/testing/unit-testing-utils.d.ts +1 -2
  573. package/lib/viewer/components/pdf-viewer/pdf-viewer.component.d.ts +2 -2
  574. package/lib/viewer/components/viewer-render/viewer-render.component.d.ts +9 -5
  575. package/package.json +19 -7
@@ -0,0 +1,546 @@
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 @typescript-eslint/naming-convention */
18
+ /* eslint-disable no-underscore-dangle */
19
+ /* eslint-disable @angular-eslint/no-output-native */
20
+ import { NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';
21
+ import { Component, EventEmitter, HostListener, inject, InjectionToken, Input, Output, TemplateRef, ViewEncapsulation } from '@angular/core';
22
+ import { MatButtonModule } from '@angular/material/button';
23
+ import { MatDialog } from '@angular/material/dialog';
24
+ import { MatIconModule } from '@angular/material/icon';
25
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
26
+ import { TranslateModule } from '@ngx-translate/core';
27
+ import { from, Subject, switchMap } from 'rxjs';
28
+ import { catchError } from 'rxjs/operators';
29
+ import { AppConfigService } from '../../../app-config';
30
+ import { ToolbarComponent, ToolbarDividerComponent } from '../../../toolbar';
31
+ import { RenderingQueueServices } from '../../services/rendering-queue.services';
32
+ import { PdfPasswordDialogComponent } from '../pdf-viewer-password-dialog/pdf-viewer-password-dialog';
33
+ import { PdfThumbListComponent } from '../pdf-viewer-thumbnails/pdf-viewer-thumbnails.component';
34
+ import * as pdfjsLib from 'pdfjs-dist/build/pdf.min.mjs';
35
+ import { EventBus, PDFViewer } from 'pdfjs-dist/web/pdf_viewer.mjs';
36
+ import * as i0 from "@angular/core";
37
+ import * as i1 from "@angular/material/button";
38
+ import * as i2 from "@angular/material/icon";
39
+ import * as i3 from "@ngx-translate/core";
40
+ import * as i4 from "@angular/material/progress-bar";
41
+ export const PDFJS_MODULE = new InjectionToken('PDFJS_MODULE', { factory: () => pdfjsLib });
42
+ export const PDFJS_VIEWER_MODULE = new InjectionToken('PDFJS_VIEWER_MODULE', { factory: () => PDFViewer });
43
+ export class PdfViewerComponent {
44
+ get currentScaleText() {
45
+ return this.pdfViewer?.currentScaleValue ? Math.round(this.pdfViewer.currentScaleValue * 100) + '%' : '';
46
+ }
47
+ constructor() {
48
+ this.showToolbar = true;
49
+ this.allowThumbnails = false;
50
+ this.thumbnailsTemplate = null;
51
+ this.cacheType = '';
52
+ this.rendered = new EventEmitter();
53
+ this.error = new EventEmitter();
54
+ this.close = new EventEmitter();
55
+ this.pagesLoaded = new EventEmitter();
56
+ this.currentScaleMode = 'init';
57
+ this.MAX_AUTO_SCALE = 1.25;
58
+ this.DEFAULT_SCALE_DELTA = 1.1;
59
+ this.MIN_SCALE = 0.25;
60
+ this.MAX_SCALE = 10.0;
61
+ this.isPanelDisabled = true;
62
+ this.showThumbnails = false;
63
+ this.pdfThumbnailsContext = { viewer: null };
64
+ this.documentOverflow = false;
65
+ this.pdfjsLib = inject(PDFJS_MODULE);
66
+ this.pdfjsViewer = inject(PDFJS_VIEWER_MODULE);
67
+ this.eventBus = new EventBus();
68
+ this.pdfjsDefaultOptions = {
69
+ disableAutoFetch: true,
70
+ disableStream: true,
71
+ cMapUrl: './cmaps/',
72
+ cMapPacked: true
73
+ };
74
+ this.pdfjsWorkerDestroy$ = new Subject();
75
+ this.dialog = inject(MatDialog);
76
+ this.renderingQueueServices = inject(RenderingQueueServices);
77
+ this.appConfigService = inject(AppConfigService);
78
+ // needed to preserve "this" context
79
+ this.onPageChange = this.onPageChange.bind(this);
80
+ this.onPagesLoaded = this.onPagesLoaded.bind(this);
81
+ this.onPageRendered = this.onPageRendered.bind(this);
82
+ this.randomPdfId = Date.now().toString();
83
+ this.pdfjsWorkerDestroy$
84
+ .pipe(catchError(() => null), switchMap(() => from(this.destroyPfdJsWorker())))
85
+ .subscribe(() => { });
86
+ }
87
+ getUserScaling() {
88
+ let scaleConfig = this.appConfigService.get('adf-viewer.pdf-viewer-scaling', undefined);
89
+ if (scaleConfig) {
90
+ scaleConfig = scaleConfig / 100;
91
+ scaleConfig = this.checkLimits(scaleConfig);
92
+ }
93
+ return scaleConfig;
94
+ }
95
+ checkLimits(scaleConfig) {
96
+ if (scaleConfig > this.MAX_SCALE) {
97
+ return this.MAX_SCALE;
98
+ }
99
+ else if (scaleConfig < this.MIN_SCALE) {
100
+ return this.MIN_SCALE;
101
+ }
102
+ else {
103
+ return scaleConfig;
104
+ }
105
+ }
106
+ ngOnChanges(changes) {
107
+ const blobFile = changes['blobFile'];
108
+ if (blobFile?.currentValue) {
109
+ const reader = new FileReader();
110
+ reader.onload = async () => {
111
+ const pdfOptions = {
112
+ ...this.pdfjsDefaultOptions,
113
+ data: reader.result,
114
+ withCredentials: this.appConfigService.get('auth.withCredentials', undefined),
115
+ isEvalSupported: false
116
+ };
117
+ this.executePdf(pdfOptions);
118
+ };
119
+ reader.readAsArrayBuffer(blobFile.currentValue);
120
+ }
121
+ const urlFile = changes['urlFile'];
122
+ if (urlFile?.currentValue) {
123
+ const pdfOptions = {
124
+ ...this.pdfjsDefaultOptions,
125
+ url: urlFile.currentValue,
126
+ withCredentials: this.appConfigService.get('auth.withCredentials', undefined),
127
+ isEvalSupported: false
128
+ };
129
+ if (this.cacheType) {
130
+ pdfOptions.httpHeaders = {
131
+ 'Cache-Control': this.cacheType
132
+ };
133
+ }
134
+ this.executePdf(pdfOptions);
135
+ }
136
+ if (!this.urlFile && !this.blobFile) {
137
+ throw new Error('Attribute urlFile or blobFile is required');
138
+ }
139
+ }
140
+ executePdf(pdfOptions) {
141
+ this.setupPdfJsWorker().then(() => {
142
+ this.loadingTask = this.pdfjsLib.getDocument(pdfOptions);
143
+ this.loadingTask.onPassword = (callback, reason) => {
144
+ this.onPdfPassword(callback, reason);
145
+ };
146
+ this.loadingTask.onProgress = (progressData) => {
147
+ const level = progressData.loaded / progressData.total;
148
+ this.loadingPercent = Math.round(level * 100);
149
+ };
150
+ this.isPanelDisabled = true;
151
+ this.loadingTask.promise
152
+ .then((pdfDocument) => {
153
+ this.totalPages = pdfDocument.numPages;
154
+ this.page = 1;
155
+ this.displayPage = 1;
156
+ this.initPDFViewer(pdfDocument);
157
+ return pdfDocument.getPage(1);
158
+ })
159
+ .then(() => this.scalePage('init'))
160
+ .catch(() => this.error.emit());
161
+ });
162
+ }
163
+ async setupPdfJsWorker() {
164
+ if (this.pdfJsWorkerInstance) {
165
+ await this.destroyPfdJsWorker();
166
+ }
167
+ else if (!this.pdfJsWorkerUrl) {
168
+ this.pdfJsWorkerUrl = await this.getPdfJsWorker();
169
+ }
170
+ this.pdfJsWorkerInstance = new Worker(this.pdfJsWorkerUrl, { type: 'module' });
171
+ this.pdfjsLib.GlobalWorkerOptions.workerPort = this.pdfJsWorkerInstance;
172
+ }
173
+ async getPdfJsWorker() {
174
+ const response = await fetch('./pdf.worker.min.mjs');
175
+ const workerScript = await response.text();
176
+ const blob = new Blob([workerScript], { type: 'application/javascript' });
177
+ return URL.createObjectURL(blob);
178
+ }
179
+ initPDFViewer(pdfDocument) {
180
+ const viewer = this.getViewer();
181
+ const container = this.getDocumentContainer();
182
+ if (viewer && container) {
183
+ this.pdfViewer = new this.pdfjsViewer({
184
+ container,
185
+ viewer,
186
+ renderingQueue: this.renderingQueueServices,
187
+ eventBus: this.eventBus,
188
+ annotationMode: 0
189
+ });
190
+ // cspell: disable-next
191
+ this.eventBus.on('pagechanging', this.onPageChange);
192
+ // cspell: disable-next
193
+ this.eventBus.on('pagesloaded', this.onPagesLoaded);
194
+ // cspell: disable-next
195
+ this.eventBus.on('textlayerrendered', () => {
196
+ this.onPageRendered();
197
+ });
198
+ this.eventBus.on('pagerendered', () => {
199
+ this.onPageRendered();
200
+ });
201
+ this.renderingQueueServices.setViewer(this.pdfViewer);
202
+ this.pdfViewer.setDocument(pdfDocument);
203
+ this.pdfThumbnailsContext.viewer = this.pdfViewer;
204
+ }
205
+ }
206
+ ngOnDestroy() {
207
+ if (this.pdfViewer) {
208
+ // cspell: disable-next
209
+ this.eventBus.off('pagechanging', () => { });
210
+ // cspell: disable-next
211
+ this.eventBus.off('pagesloaded', () => { });
212
+ // cspell: disable-next
213
+ this.eventBus.off('textlayerrendered', () => { });
214
+ }
215
+ if (this.loadingTask) {
216
+ this.pdfjsWorkerDestroy$.next(true);
217
+ }
218
+ this.pdfjsWorkerDestroy$.complete();
219
+ this.revokePdfJsWorkerUrl();
220
+ }
221
+ async destroyPfdJsWorker() {
222
+ if (this.loadingTask.destroy) {
223
+ await this.loadingTask.destroy();
224
+ }
225
+ if (this.pdfJsWorkerInstance) {
226
+ this.pdfJsWorkerInstance.terminate();
227
+ }
228
+ this.loadingTask = null;
229
+ }
230
+ revokePdfJsWorkerUrl() {
231
+ URL.revokeObjectURL(this.pdfJsWorkerUrl);
232
+ }
233
+ toggleThumbnails() {
234
+ this.showThumbnails = !this.showThumbnails;
235
+ }
236
+ /**
237
+ * Method to scale the page current support implementation
238
+ *
239
+ * @param scaleMode - new scale mode
240
+ */
241
+ scalePage(scaleMode) {
242
+ this.currentScaleMode = scaleMode;
243
+ const viewerContainer = this.getMainContainer();
244
+ const documentContainer = this.getDocumentContainer();
245
+ if (this.pdfViewer && documentContainer) {
246
+ let widthContainer;
247
+ let heightContainer;
248
+ if (viewerContainer && viewerContainer.clientWidth <= documentContainer.clientWidth) {
249
+ widthContainer = viewerContainer.clientWidth;
250
+ heightContainer = viewerContainer.clientHeight;
251
+ }
252
+ else {
253
+ widthContainer = documentContainer.clientWidth;
254
+ heightContainer = documentContainer.clientHeight;
255
+ }
256
+ const currentPage = this.pdfViewer._pages[this.pdfViewer._currentPageNumber - 1];
257
+ const padding = 20;
258
+ const pageWidthScale = ((widthContainer - padding) / currentPage.width) * currentPage.scale;
259
+ const pageHeightScale = ((heightContainer - padding) / currentPage.width) * currentPage.scale;
260
+ let scale;
261
+ switch (this.currentScaleMode) {
262
+ case 'init':
263
+ case 'page-fit': {
264
+ scale = this.getUserScaling();
265
+ if (!scale) {
266
+ scale = this.autoScaling(pageHeightScale, pageWidthScale);
267
+ }
268
+ break;
269
+ }
270
+ case 'page-actual': {
271
+ scale = 1;
272
+ break;
273
+ }
274
+ case 'page-width': {
275
+ scale = pageWidthScale;
276
+ break;
277
+ }
278
+ case 'page-height': {
279
+ scale = pageHeightScale;
280
+ break;
281
+ }
282
+ case 'auto': {
283
+ scale = this.autoScaling(pageHeightScale, pageWidthScale);
284
+ break;
285
+ }
286
+ default:
287
+ return;
288
+ }
289
+ this.setScaleUpdatePages(scale);
290
+ }
291
+ }
292
+ autoScaling(pageHeightScale, pageWidthScale) {
293
+ let horizontalScale;
294
+ if (this.isLandscape) {
295
+ horizontalScale = Math.min(pageHeightScale, pageWidthScale);
296
+ }
297
+ else {
298
+ horizontalScale = pageWidthScale;
299
+ }
300
+ horizontalScale = Math.round(horizontalScale);
301
+ const scale = Math.min(this.MAX_AUTO_SCALE, horizontalScale);
302
+ return this.checkPageFitInContainer(scale);
303
+ }
304
+ getMainContainer() {
305
+ return document.getElementById(`${this.randomPdfId}-viewer-main-container`);
306
+ }
307
+ getDocumentContainer() {
308
+ return document.getElementById(`${this.randomPdfId}-viewer-pdf-viewer`);
309
+ }
310
+ getViewer() {
311
+ return document.getElementById(`${this.randomPdfId}-viewer-viewerPdf`);
312
+ }
313
+ checkPageFitInContainer(scale) {
314
+ const documentContainerSize = this.getDocumentContainer();
315
+ const page = this.pdfViewer._pages[this.pdfViewer._currentPageNumber - 1];
316
+ if (page.width > documentContainerSize.clientWidth) {
317
+ scale = Math.fround((documentContainerSize.clientWidth - 20) / page.width);
318
+ if (scale < this.MIN_SCALE) {
319
+ scale = this.MIN_SCALE;
320
+ }
321
+ }
322
+ return scale;
323
+ }
324
+ setDocumentOverflow() {
325
+ const documentContainerSize = this.getDocumentContainer();
326
+ const page = this.pdfViewer._pages[this.pdfViewer._currentPageNumber - 1];
327
+ this.documentOverflow = page.width > documentContainerSize.clientWidth;
328
+ }
329
+ /**
330
+ * Update all the pages with the newScale scale
331
+ *
332
+ * @param newScale - new scale page
333
+ */
334
+ setScaleUpdatePages(newScale) {
335
+ if (this.pdfViewer) {
336
+ if (!this.isSameScale(this.pdfViewer.currentScaleValue, newScale)) {
337
+ this.pdfViewer.currentScaleValue = newScale;
338
+ }
339
+ this.pdfViewer.update();
340
+ }
341
+ this.setDocumentOverflow();
342
+ }
343
+ /**
344
+ * Check if the request scale of the page is the same for avoid useless re-rendering
345
+ *
346
+ * @param oldScale - old scale page
347
+ * @param newScale - new scale page
348
+ * @returns `true` if the scale is the same, otherwise `false`
349
+ */
350
+ isSameScale(oldScale, newScale) {
351
+ return newScale === oldScale;
352
+ }
353
+ /**
354
+ * Check if is a land scape view
355
+ *
356
+ * @param width target width
357
+ * @param height target height
358
+ * @returns `true` if the target is in the landscape mode, otherwise `false`
359
+ */
360
+ isLandscape(width, height) {
361
+ return width > height;
362
+ }
363
+ /**
364
+ * Method triggered when the page is resized
365
+ */
366
+ onResize() {
367
+ this.scalePage(this.currentScaleMode);
368
+ }
369
+ /**
370
+ * toggle the fit page pdf
371
+ */
372
+ pageFit() {
373
+ if (this.currentScaleMode !== 'page-fit') {
374
+ this.scalePage('page-fit');
375
+ }
376
+ else {
377
+ this.scalePage('auto');
378
+ }
379
+ }
380
+ /**
381
+ * zoom in page pdf
382
+ *
383
+ * @param ticks number of ticks to zoom
384
+ */
385
+ zoomIn(ticks) {
386
+ let newScale = this.pdfViewer.currentScaleValue;
387
+ do {
388
+ newScale = (newScale * this.DEFAULT_SCALE_DELTA).toFixed(2);
389
+ newScale = Math.ceil(newScale * 10) / 10;
390
+ newScale = Math.min(this.MAX_SCALE, newScale);
391
+ } while (--ticks > 0 && newScale < this.MAX_SCALE);
392
+ this.currentScaleMode = 'auto';
393
+ this.setScaleUpdatePages(newScale);
394
+ }
395
+ /**
396
+ * zoom out page pdf
397
+ *
398
+ * @param ticks number of ticks to scale
399
+ */
400
+ zoomOut(ticks) {
401
+ let newScale = this.pdfViewer.currentScaleValue;
402
+ do {
403
+ newScale = (newScale / this.DEFAULT_SCALE_DELTA).toFixed(2);
404
+ newScale = Math.floor(newScale * 10) / 10;
405
+ newScale = Math.max(this.MIN_SCALE, newScale);
406
+ } while (--ticks > 0 && newScale > this.MIN_SCALE);
407
+ this.currentScaleMode = 'auto';
408
+ this.setScaleUpdatePages(newScale);
409
+ }
410
+ /**
411
+ * load the previous page
412
+ */
413
+ previousPage() {
414
+ if (this.pdfViewer && this.page > 1) {
415
+ this.page--;
416
+ this.displayPage = this.page;
417
+ this.pdfViewer.currentPageNumber = this.page;
418
+ }
419
+ }
420
+ /**
421
+ * load the next page
422
+ */
423
+ nextPage() {
424
+ if (this.pdfViewer && this.page < this.totalPages) {
425
+ this.page++;
426
+ this.displayPage = this.page;
427
+ this.pdfViewer.currentPageNumber = this.page;
428
+ }
429
+ }
430
+ /**
431
+ * load the page in input
432
+ *
433
+ * @param page to load
434
+ */
435
+ inputPage(page) {
436
+ const pageInput = parseInt(page, 10);
437
+ if (!isNaN(pageInput) && pageInput > 0 && pageInput <= this.totalPages) {
438
+ this.page = pageInput;
439
+ this.displayPage = this.page;
440
+ this.pdfViewer.currentPageNumber = this.page;
441
+ }
442
+ else {
443
+ this.displayPage = this.page;
444
+ }
445
+ }
446
+ /**
447
+ * Page Change Event
448
+ *
449
+ * @param event event
450
+ */
451
+ onPageChange(event) {
452
+ if (event.source && event.source.container.id === `${this.randomPdfId}-viewer-pdf-viewer`) {
453
+ this.page = event.pageNumber;
454
+ this.displayPage = event.pageNumber;
455
+ }
456
+ }
457
+ onPdfPassword(callback, reason) {
458
+ this.dialog
459
+ .open(PdfPasswordDialogComponent, {
460
+ width: '400px',
461
+ data: { reason }
462
+ })
463
+ .afterClosed()
464
+ .subscribe((password) => {
465
+ if (password) {
466
+ callback(password);
467
+ }
468
+ else {
469
+ this.close.emit();
470
+ }
471
+ });
472
+ }
473
+ /**
474
+ * Page Rendered Event
475
+ */
476
+ onPageRendered() {
477
+ this.rendered.emit();
478
+ }
479
+ /**
480
+ * Pages Loaded Event
481
+ *
482
+ */
483
+ onPagesLoaded() {
484
+ this.pagesLoaded.emit();
485
+ this.isPanelDisabled = false;
486
+ }
487
+ /**
488
+ * Keyboard Event Listener
489
+ *
490
+ * @param event KeyboardEvent
491
+ */
492
+ handleKeyboardEvent(event) {
493
+ const key = event.keyCode;
494
+ if (key === 39) {
495
+ // right arrow
496
+ this.nextPage();
497
+ }
498
+ else if (key === 37) {
499
+ // left arrow
500
+ this.previousPage();
501
+ }
502
+ }
503
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
504
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PdfViewerComponent, isStandalone: true, selector: "adf-pdf-viewer", inputs: { urlFile: "urlFile", blobFile: "blobFile", fileName: "fileName", showToolbar: "showToolbar", allowThumbnails: "allowThumbnails", thumbnailsTemplate: "thumbnailsTemplate", cacheType: "cacheType" }, outputs: { rendered: "rendered", error: "error", close: "close", pagesLoaded: "pagesLoaded" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "adf-pdf-viewer" }, providers: [RenderingQueueServices], usesOnChanges: true, ngImport: i0, template: "<div class=\"adf-pdf-viewer__container\">\n <ng-container *ngIf=\"showThumbnails\">\n <div class=\"adf-pdf-viewer__thumbnails\">\n <div class=\"adf-thumbnails-template__container\">\n <div class=\"adf-thumbnails-template__buttons\">\n <button mat-icon-button\n data-automation-id='adf-thumbnails-close'\n (click)=\"toggleThumbnails()\"\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS_PANLEL_CLOSE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container *ngIf=\"thumbnailsTemplate\">\n <ng-container *ngTemplateOutlet=\"thumbnailsTemplate;context:pdfThumbnailsContext\" />\n </ng-container>\n <adf-pdf-thumbnails *ngIf=\"!thumbnailsTemplate && !isPanelDisabled\"\n (close)=\"toggleThumbnails()\"\n [pdfViewer]=\"pdfViewer\" />\n </div>\n </div>\n </ng-container>\n\n <div class=\"adf-pdf-viewer__content\">\n <div [id]=\"randomPdfId + '-viewer-pdf-viewer'\"\n class=\"adf-viewer-pdf-viewer\"\n (window:resize)=\"onResize()\">\n <div [id]=\"randomPdfId + '-viewer-viewerPdf'\"\n class=\"adf-pdfViewer\"\n role=\"document\"\n tabindex=\"0\"\n aria-expanded=\"true\">\n <div id=\"loader-container\" class=\"adf-loader-container\">\n <div class=\"adf-loader-item\">\n <mat-progress-bar class=\"adf-loader-item-progress-bar\" mode=\"indeterminate\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"adf-pdf-viewer__toolbar\" *ngIf=\"showToolbar\" [ngStyle]=\"documentOverflow && {bottom: '25px'}\">\n <adf-toolbar>\n\n <ng-container *ngIf=\"allowThumbnails\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS' | translate\"\n [attr.aria-expanded]=\"showThumbnails\"\n data-automation-id=\"adf-thumbnails-button\"\n [disabled]=\"isPanelDisabled\"\n (click)=\"toggleThumbnails()\">\n <mat-icon>dashboard</mat-icon>\n </button>\n <adf-toolbar-divider />\n </ng-container>\n\n <button id=\"viewer-previous-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"previousPage()\">\n <mat-icon>keyboard_arrow_up</mat-icon>\n </button>\n\n <button id=\"viewer-next-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"nextPage()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n\n <div class=\"adf-pdf-viewer__toolbar-page-selector\">\n <label for=\"page-selector\">{{ 'ADF_VIEWER.PAGE_LABEL.SHOWING' | translate }}</label>\n <input #page\n id=\"page-selector\"\n type=\"text\"\n data-automation-id=\"adf-page-selector\"\n pattern=\"-?[0-9]*(\\.[0-9]+)?\"\n value=\"{{ displayPage }}\"\n [attr.aria-label]=\"'ADF_VIEWER.PAGE_LABEL.PAGE_SELECTOR_LABEL' | translate\"\n (keyup.enter)=\"inputPage(page.value)\">\n <span>{{ 'ADF_VIEWER.PAGE_LABEL.OF' | translate }} {{ totalPages }}</span>\n </div>\n\n <div class=\"adf-pdf-viewer__toolbar-page-scale\" data-automation-id=\"adf-page-scale\">\n {{ currentScaleText }}\n </div>\n\n <button id=\"viewer-zoom-in-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n mat-icon-button\n (click)=\"zoomIn()\">\n <mat-icon>zoom_in</mat-icon>\n </button>\n\n <button id=\"viewer-zoom-out-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n mat-icon-button\n (click)=\"zoomOut()\">\n <mat-icon>zoom_out</mat-icon>\n </button>\n\n <button id=\"viewer-scale-page-button\"\n role=\"button\" aria-pressed=\"true\"\n title=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"pageFit()\">\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n\n </adf-toolbar>\n</div>\n", styles: [".adf-pdf-viewer .textLayer{position:absolute;inset:0;overflow:hidden;opacity:.2;line-height:1;border:1px solid gray}.adf-pdf-viewer .textLayer>div{color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0 0}.adf-pdf-viewer .textLayer .adf-highlight{margin:-1px;padding:1px;background-color:#b400aa;border-radius:4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-begin{border-radius:4px 0 0 4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-end{border-radius:0 4px 4px 0}.adf-pdf-viewer .textLayer .adf-highlight.adf-middle{border-radius:0}.adf-pdf-viewer .textLayer .adf-highlight.adf-selected{background-color:#006400}.adf-pdf-viewer .textLayer::selection{background:#00f}.adf-pdf-viewer .textLayer .adf-endOfContent{display:block;position:absolute;inset:100% 0 0;z-index:-1;cursor:default;-webkit-user-select:none;user-select:none}.adf-pdf-viewer .textLayer .adf-endOfContent.adf-active{top:0}.adf-pdf-viewer .adf-annotationLayer section{position:absolute}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 0 0 repeat}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a:hover{opacity:.2;background:#ff0;box-shadow:0 2px 10px #ff0}.adf-pdf-viewer .adf-annotationLayer .adf-textAnnotation img{position:absolute;cursor:pointer}.adf-pdf-viewer .adf-annotationLayer .adf-popupWrapper{position:absolute;width:20em}.adf-pdf-viewer .adf-annotationLayer .adf-popup{position:absolute;z-index:200;max-width:20em;background-color:#ff9;box-shadow:0 2px 5px #333;border-radius:2px;padding:.6em;margin-left:5px;cursor:pointer;word-wrap:break-word}.adf-pdf-viewer .adf-annotationLayer .adf-popup h1{font-size:1em;border-bottom:1px solid #000;padding-bottom:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-popup p{padding-top:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-highlightAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-underlineAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-squigglyAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-strikeoutAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-fileAttachmentAnnotation{cursor:pointer}.adf-pdf-viewer .adf-pdfViewer .canvasWrapper{overflow:hidden}.adf-pdf-viewer .adf-pdfViewer .page{direction:ltr;width:816px;height:1056px;margin:1px auto -8px;position:relative;overflow:visible;border:9px solid transparent;background-clip:content-box;background-color:#fff}.adf-pdf-viewer .adf-pdfViewer .page canvas{margin:0;display:block}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon{position:absolute;display:block;width:100px;height:100px;inset:50% 0 0 50%;margin-top:-50px;margin-left:-50px;font-size:5px;text-indent:-9999em;border-top:1.1em solid rgba(3,0,2,.2);border-right:1.1em solid rgba(3,0,2,.2);border-bottom:1.1em solid rgba(3,0,2,.2);border-left:1.1em solid #030002;animation:load8 1.1s infinite linear;border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon:after{border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page *{padding:0;margin:0}.adf-pdf-viewer .adf-pdfViewer.adf-removePageBorders .adf-page{margin:0 auto 10px;border:none}.adf-pdf-viewer .adf-hidden,.adf-pdf-viewer [hidden]{display:none}.adf-viewer-pdf-viewer{overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;inset:0;outline:none}html[dir=ltr] .adf-viewer-pdf-viewer{box-shadow:inset 1px 0 #ffffff0d}html[dir=rtl] .adf-viewer-pdf-viewer{box-shadow:inset -1px 0 #ffffff0d}\n", ".adf-pdf-viewer{width:100%;height:100%;margin:0}.adf-pdf-viewer .adf-loader-container{display:flex;flex-direction:row;height:100%}.adf-pdf-viewer__thumbnails{position:relative;height:100%;width:190px;background-color:#0000001f;display:flex;flex-direction:column;padding:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout{display:flex;flex-direction:column;flex:1;background:#e6e6e6}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-header{margin-bottom:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content{padding:0;height:100%;overflow:hidden}.adf-pdf-viewer__thumbnails .adf-info-drawer-content{height:100%}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content>*:last-child{height:100%;overflow:hidden}.adf-pdf-viewer .adf-thumbnails-template__container{display:flex;flex-direction:column;height:100%}.adf-pdf-viewer .adf-thumbnails-template__buttons{height:45px;justify-content:flex-end;align-items:flex-end;display:flex;color:var(--adf-theme-foreground-text-color-054)}.adf-pdf-viewer__container{display:flex;height:100%;min-height:1px}.adf-pdf-viewer__content{flex:1 1 auto;position:relative}.adf-pdf-viewer .adf-loader-item{margin:auto;max-height:100px;max-width:300px}.adf-pdf-viewer .adf-loader-item .adf-loader-item-progress-bar{max-width:300px;margin:0;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.adf-pdf-viewer__toolbar{z-index:100;position:absolute;bottom:5px;left:50%;transform:translate(-50%)}.adf-pdf-viewer__toolbar .adf-toolbar .mat-toolbar{max-height:48px;background-color:var(--adf-theme-background-card-color);border-width:0;border-radius:2px;box-shadow:0 2px 2px #000,0 0 2px #0000001f}.adf-pdf-viewer__toolbar-page-selector{padding-left:10px;padding-right:10px;white-space:nowrap;font-size:var(--theme-body-1-font-size)}.adf-pdf-viewer__toolbar-page-selector>input{border:1px solid var(--adf-theme-foreground-text-color-007);background-color:var(--adf-theme-background-card-color);color:inherit;font-size:var(--theme-body-1-font-size);padding:5px;height:24px;line-height:24px;text-align:right;width:33px;margin-right:4px;outline-width:1px;outline-color:gray}.adf-pdf-viewer__toolbar-page-scale{cursor:default;width:79px;height:24px;font-size:var(--theme-body-1-font-size);border:1px solid var(--adf-theme-foreground-text-color-007);text-align:center;line-height:24px;margin-left:4px;margin-right:4px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: PdfThumbListComponent, selector: "adf-pdf-thumbnails", inputs: ["pdfViewer"], outputs: ["close"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: ToolbarDividerComponent, selector: "adf-toolbar-divider" }], encapsulation: i0.ViewEncapsulation.None }); }
505
+ }
506
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfViewerComponent, decorators: [{
507
+ type: Component,
508
+ args: [{ selector: 'adf-pdf-viewer', standalone: true, providers: [RenderingQueueServices], host: { class: 'adf-pdf-viewer' }, imports: [
509
+ MatButtonModule,
510
+ MatIconModule,
511
+ TranslateModule,
512
+ PdfThumbListComponent,
513
+ NgIf,
514
+ NgTemplateOutlet,
515
+ MatProgressBarModule,
516
+ NgStyle,
517
+ ToolbarComponent,
518
+ ToolbarDividerComponent
519
+ ], encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-pdf-viewer__container\">\n <ng-container *ngIf=\"showThumbnails\">\n <div class=\"adf-pdf-viewer__thumbnails\">\n <div class=\"adf-thumbnails-template__container\">\n <div class=\"adf-thumbnails-template__buttons\">\n <button mat-icon-button\n data-automation-id='adf-thumbnails-close'\n (click)=\"toggleThumbnails()\"\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS_PANLEL_CLOSE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container *ngIf=\"thumbnailsTemplate\">\n <ng-container *ngTemplateOutlet=\"thumbnailsTemplate;context:pdfThumbnailsContext\" />\n </ng-container>\n <adf-pdf-thumbnails *ngIf=\"!thumbnailsTemplate && !isPanelDisabled\"\n (close)=\"toggleThumbnails()\"\n [pdfViewer]=\"pdfViewer\" />\n </div>\n </div>\n </ng-container>\n\n <div class=\"adf-pdf-viewer__content\">\n <div [id]=\"randomPdfId + '-viewer-pdf-viewer'\"\n class=\"adf-viewer-pdf-viewer\"\n (window:resize)=\"onResize()\">\n <div [id]=\"randomPdfId + '-viewer-viewerPdf'\"\n class=\"adf-pdfViewer\"\n role=\"document\"\n tabindex=\"0\"\n aria-expanded=\"true\">\n <div id=\"loader-container\" class=\"adf-loader-container\">\n <div class=\"adf-loader-item\">\n <mat-progress-bar class=\"adf-loader-item-progress-bar\" mode=\"indeterminate\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"adf-pdf-viewer__toolbar\" *ngIf=\"showToolbar\" [ngStyle]=\"documentOverflow && {bottom: '25px'}\">\n <adf-toolbar>\n\n <ng-container *ngIf=\"allowThumbnails\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS' | translate\"\n [attr.aria-expanded]=\"showThumbnails\"\n data-automation-id=\"adf-thumbnails-button\"\n [disabled]=\"isPanelDisabled\"\n (click)=\"toggleThumbnails()\">\n <mat-icon>dashboard</mat-icon>\n </button>\n <adf-toolbar-divider />\n </ng-container>\n\n <button id=\"viewer-previous-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"previousPage()\">\n <mat-icon>keyboard_arrow_up</mat-icon>\n </button>\n\n <button id=\"viewer-next-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"nextPage()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n\n <div class=\"adf-pdf-viewer__toolbar-page-selector\">\n <label for=\"page-selector\">{{ 'ADF_VIEWER.PAGE_LABEL.SHOWING' | translate }}</label>\n <input #page\n id=\"page-selector\"\n type=\"text\"\n data-automation-id=\"adf-page-selector\"\n pattern=\"-?[0-9]*(\\.[0-9]+)?\"\n value=\"{{ displayPage }}\"\n [attr.aria-label]=\"'ADF_VIEWER.PAGE_LABEL.PAGE_SELECTOR_LABEL' | translate\"\n (keyup.enter)=\"inputPage(page.value)\">\n <span>{{ 'ADF_VIEWER.PAGE_LABEL.OF' | translate }} {{ totalPages }}</span>\n </div>\n\n <div class=\"adf-pdf-viewer__toolbar-page-scale\" data-automation-id=\"adf-page-scale\">\n {{ currentScaleText }}\n </div>\n\n <button id=\"viewer-zoom-in-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n mat-icon-button\n (click)=\"zoomIn()\">\n <mat-icon>zoom_in</mat-icon>\n </button>\n\n <button id=\"viewer-zoom-out-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n mat-icon-button\n (click)=\"zoomOut()\">\n <mat-icon>zoom_out</mat-icon>\n </button>\n\n <button id=\"viewer-scale-page-button\"\n role=\"button\" aria-pressed=\"true\"\n title=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"pageFit()\">\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n\n </adf-toolbar>\n</div>\n", styles: [".adf-pdf-viewer .textLayer{position:absolute;inset:0;overflow:hidden;opacity:.2;line-height:1;border:1px solid gray}.adf-pdf-viewer .textLayer>div{color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0 0}.adf-pdf-viewer .textLayer .adf-highlight{margin:-1px;padding:1px;background-color:#b400aa;border-radius:4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-begin{border-radius:4px 0 0 4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-end{border-radius:0 4px 4px 0}.adf-pdf-viewer .textLayer .adf-highlight.adf-middle{border-radius:0}.adf-pdf-viewer .textLayer .adf-highlight.adf-selected{background-color:#006400}.adf-pdf-viewer .textLayer::selection{background:#00f}.adf-pdf-viewer .textLayer .adf-endOfContent{display:block;position:absolute;inset:100% 0 0;z-index:-1;cursor:default;-webkit-user-select:none;user-select:none}.adf-pdf-viewer .textLayer .adf-endOfContent.adf-active{top:0}.adf-pdf-viewer .adf-annotationLayer section{position:absolute}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 0 0 repeat}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a:hover{opacity:.2;background:#ff0;box-shadow:0 2px 10px #ff0}.adf-pdf-viewer .adf-annotationLayer .adf-textAnnotation img{position:absolute;cursor:pointer}.adf-pdf-viewer .adf-annotationLayer .adf-popupWrapper{position:absolute;width:20em}.adf-pdf-viewer .adf-annotationLayer .adf-popup{position:absolute;z-index:200;max-width:20em;background-color:#ff9;box-shadow:0 2px 5px #333;border-radius:2px;padding:.6em;margin-left:5px;cursor:pointer;word-wrap:break-word}.adf-pdf-viewer .adf-annotationLayer .adf-popup h1{font-size:1em;border-bottom:1px solid #000;padding-bottom:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-popup p{padding-top:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-highlightAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-underlineAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-squigglyAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-strikeoutAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-fileAttachmentAnnotation{cursor:pointer}.adf-pdf-viewer .adf-pdfViewer .canvasWrapper{overflow:hidden}.adf-pdf-viewer .adf-pdfViewer .page{direction:ltr;width:816px;height:1056px;margin:1px auto -8px;position:relative;overflow:visible;border:9px solid transparent;background-clip:content-box;background-color:#fff}.adf-pdf-viewer .adf-pdfViewer .page canvas{margin:0;display:block}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon{position:absolute;display:block;width:100px;height:100px;inset:50% 0 0 50%;margin-top:-50px;margin-left:-50px;font-size:5px;text-indent:-9999em;border-top:1.1em solid rgba(3,0,2,.2);border-right:1.1em solid rgba(3,0,2,.2);border-bottom:1.1em solid rgba(3,0,2,.2);border-left:1.1em solid #030002;animation:load8 1.1s infinite linear;border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon:after{border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page *{padding:0;margin:0}.adf-pdf-viewer .adf-pdfViewer.adf-removePageBorders .adf-page{margin:0 auto 10px;border:none}.adf-pdf-viewer .adf-hidden,.adf-pdf-viewer [hidden]{display:none}.adf-viewer-pdf-viewer{overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;inset:0;outline:none}html[dir=ltr] .adf-viewer-pdf-viewer{box-shadow:inset 1px 0 #ffffff0d}html[dir=rtl] .adf-viewer-pdf-viewer{box-shadow:inset -1px 0 #ffffff0d}\n", ".adf-pdf-viewer{width:100%;height:100%;margin:0}.adf-pdf-viewer .adf-loader-container{display:flex;flex-direction:row;height:100%}.adf-pdf-viewer__thumbnails{position:relative;height:100%;width:190px;background-color:#0000001f;display:flex;flex-direction:column;padding:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout{display:flex;flex-direction:column;flex:1;background:#e6e6e6}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-header{margin-bottom:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content{padding:0;height:100%;overflow:hidden}.adf-pdf-viewer__thumbnails .adf-info-drawer-content{height:100%}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content>*:last-child{height:100%;overflow:hidden}.adf-pdf-viewer .adf-thumbnails-template__container{display:flex;flex-direction:column;height:100%}.adf-pdf-viewer .adf-thumbnails-template__buttons{height:45px;justify-content:flex-end;align-items:flex-end;display:flex;color:var(--adf-theme-foreground-text-color-054)}.adf-pdf-viewer__container{display:flex;height:100%;min-height:1px}.adf-pdf-viewer__content{flex:1 1 auto;position:relative}.adf-pdf-viewer .adf-loader-item{margin:auto;max-height:100px;max-width:300px}.adf-pdf-viewer .adf-loader-item .adf-loader-item-progress-bar{max-width:300px;margin:0;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.adf-pdf-viewer__toolbar{z-index:100;position:absolute;bottom:5px;left:50%;transform:translate(-50%)}.adf-pdf-viewer__toolbar .adf-toolbar .mat-toolbar{max-height:48px;background-color:var(--adf-theme-background-card-color);border-width:0;border-radius:2px;box-shadow:0 2px 2px #000,0 0 2px #0000001f}.adf-pdf-viewer__toolbar-page-selector{padding-left:10px;padding-right:10px;white-space:nowrap;font-size:var(--theme-body-1-font-size)}.adf-pdf-viewer__toolbar-page-selector>input{border:1px solid var(--adf-theme-foreground-text-color-007);background-color:var(--adf-theme-background-card-color);color:inherit;font-size:var(--theme-body-1-font-size);padding:5px;height:24px;line-height:24px;text-align:right;width:33px;margin-right:4px;outline-width:1px;outline-color:gray}.adf-pdf-viewer__toolbar-page-scale{cursor:default;width:79px;height:24px;font-size:var(--theme-body-1-font-size);border:1px solid var(--adf-theme-foreground-text-color-007);text-align:center;line-height:24px;margin-left:4px;margin-right:4px}\n"] }]
520
+ }], ctorParameters: () => [], propDecorators: { urlFile: [{
521
+ type: Input
522
+ }], blobFile: [{
523
+ type: Input
524
+ }], fileName: [{
525
+ type: Input
526
+ }], showToolbar: [{
527
+ type: Input
528
+ }], allowThumbnails: [{
529
+ type: Input
530
+ }], thumbnailsTemplate: [{
531
+ type: Input
532
+ }], cacheType: [{
533
+ type: Input
534
+ }], rendered: [{
535
+ type: Output
536
+ }], error: [{
537
+ type: Output
538
+ }], close: [{
539
+ type: Output
540
+ }], pagesLoaded: [{
541
+ type: Output
542
+ }], handleKeyboardEvent: [{
543
+ type: HostListener,
544
+ args: ['document:keydown', ['$event']]
545
+ }] } });
546
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3BkZi12aWV3ZXIvcGRmLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3BkZi12aWV3ZXIvcGRmLXZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCx5REFBeUQ7QUFDekQseUNBQXlDO0FBQ3pDLHFEQUFxRDtBQUVyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUNYLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFB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O3NCQURqQixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixRQUFRO3NCQURQLE1BQU07Z0JBSVAsS0FBSztzQkFESixNQUFNO2dCQUlQLEtBQUs7c0JBREosTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBcWdCUCxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlICovXG5cbmltcG9ydCB7IE5nSWYsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tLCBTdWJqZWN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbmZpZyc7XG5pbXBvcnQgeyBUb29sYmFyQ29tcG9uZW50LCBUb29sYmFyRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXInO1xuaW1wb3J0IHsgUmVuZGVyaW5nUXVldWVTZXJ2aWNlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlbmRlcmluZy1xdWV1ZS5zZXJ2aWNlcyc7XG5pbXBvcnQgeyBQZGZQYXNzd29yZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3BkZi12aWV3ZXItcGFzc3dvcmQtZGlhbG9nL3BkZi12aWV3ZXItcGFzc3dvcmQtZGlhbG9nJztcbmltcG9ydCB7IFBkZlRodW1iTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL3BkZi12aWV3ZXItdGh1bWJuYWlscy9wZGYtdmlld2VyLXRodW1ibmFpbHMuY29tcG9uZW50JztcbmltcG9ydCAqIGFzIHBkZmpzTGliIGZyb20gJ3BkZmpzLWRpc3QvYnVpbGQvcGRmLm1pbi5tanMnO1xuaW1wb3J0IHsgRXZlbnRCdXMsIFBERlZpZXdlciB9IGZyb20gJ3BkZmpzLWRpc3Qvd2ViL3BkZl92aWV3ZXIubWpzJztcbmltcG9ydCB7IE9uUHJvZ3Jlc3NQYXJhbWV0ZXJzLCBQREZEb2N1bWVudExvYWRpbmdUYXNrLCBQREZEb2N1bWVudFByb3h5IH0gZnJvbSAncGRmanMtZGlzdC90eXBlcy9zcmMvZGlzcGxheS9hcGknO1xuXG5leHBvcnQgdHlwZSBQZGZTY2FsZU1vZGUgPSAnaW5pdCcgfCAncGFnZS1hY3R1YWwnIHwgJ3BhZ2Utd2lkdGgnIHwgJ3BhZ2UtaGVpZ2h0JyB8ICdwYWdlLWZpdCcgfCAnYXV0byc7XG5cbmV4cG9ydCBjb25zdCBQREZKU19NT0RVTEUgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ1BERkpTX01PRFVMRScsIHsgZmFjdG9yeTogKCkgPT4gcGRmanNMaWIgfSk7XG5leHBvcnQgY29uc3QgUERGSlNfVklFV0VSX01PRFVMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbignUERGSlNfVklFV0VSX01PRFVMRScsIHsgZmFjdG9yeTogKCkgPT4gUERGVmlld2VyIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1wZGYtdmlld2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wZGYtdmlld2VyLWhvc3QuY29tcG9uZW50LnNjc3MnLCAnLi9wZGYtdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbUmVuZGVyaW5nUXVldWVTZXJ2aWNlc10sXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1wZGYtdmlld2VyJyB9LFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIFBkZlRodW1iTGlzdENvbXBvbmVudCxcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJEaXZpZGVyQ29tcG9uZW50XG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFBkZlZpZXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKVxuICAgIHVybEZpbGU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgYmxvYkZpbGU6IEJsb2I7XG5cbiAgICBASW5wdXQoKVxuICAgIGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dUb29sYmFyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dUaHVtYm5haWxzID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRodW1ibmFpbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIGNhY2hlVHlwZTogc3RyaW5nID0gJyc7XG5cbiAgICBAT3V0cHV0KClcbiAgICByZW5kZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwYWdlc0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBkaXNwbGF5UGFnZTogbnVtYmVyO1xuICAgIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgICBsb2FkaW5nUGVyY2VudDogbnVtYmVyO1xuICAgIHBkZlZpZXdlcjogYW55O1xuICAgIHBkZkpzV29ya2VyVXJsOiBzdHJpbmc7XG4gICAgcGRmSnNXb3JrZXJJbnN0YW5jZTogV29ya2VyO1xuICAgIGN1cnJlbnRTY2FsZU1vZGU6IFBkZlNjYWxlTW9kZSA9ICdpbml0JztcblxuICAgIE1BWF9BVVRPX1NDQUxFOiBudW1iZXIgPSAxLjI1O1xuICAgIERFRkFVTFRfU0NBTEVfREVMVEE6IG51bWJlciA9IDEuMTtcbiAgICBNSU5fU0NBTEU6IG51bWJlciA9IDAuMjU7XG4gICAgTUFYX1NDQUxFOiBudW1iZXIgPSAxMC4wO1xuXG4gICAgbG9hZGluZ1Rhc2s6IFBERkRvY3VtZW50TG9hZGluZ1Rhc2s7XG4gICAgaXNQYW5lbERpc2FibGVkID0gdHJ1ZTtcbiAgICBzaG93VGh1bWJuYWlsczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHBkZlRodW1ibmFpbHNDb250ZXh0OiB7IHZpZXdlcjogYW55IH0gPSB7IHZpZXdlcjogbnVsbCB9O1xuICAgIHJhbmRvbVBkZklkOiBzdHJpbmc7XG4gICAgZG9jdW1lbnRPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgZ2V0IGN1cnJlbnRTY2FsZVRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGRmVmlld2VyPy5jdXJyZW50U2NhbGVWYWx1ZSA/IE1hdGgucm91bmQodGhpcy5wZGZWaWV3ZXIuY3VycmVudFNjYWxlVmFsdWUgKiAxMDApICsgJyUnIDogJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZGZqc0xpYiA9IGluamVjdChQREZKU19NT0RVTEUpO1xuICAgIHByaXZhdGUgcGRmanNWaWV3ZXIgPSBpbmplY3QoUERGSlNfVklFV0VSX01PRFVMRSk7XG5cbiAgICBwcml2YXRlIGV2ZW50QnVzID0gbmV3IEV2ZW50QnVzKCk7XG4gICAgcHJpdmF0ZSBwZGZqc0RlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICBkaXNhYmxlQXV0b0ZldGNoOiB0cnVlLFxuICAgICAgICBkaXNhYmxlU3RyZWFtOiB0cnVlLFxuICAgICAgICBjTWFwVXJsOiAnLi9jbWFwcy8nLFxuICAgICAgICBjTWFwUGFja2VkOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIHBkZmpzV29ya2VyRGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgICBwcml2YXRlIHJlbmRlcmluZ1F1ZXVlU2VydmljZXMgPSBpbmplY3QoUmVuZGVyaW5nUXVldWVTZXJ2aWNlcyk7XG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlID0gaW5qZWN0KEFwcENvbmZpZ1NlcnZpY2UpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIG5lZWRlZCB0byBwcmVzZXJ2ZSBcInRoaXNcIiBjb250ZXh0XG4gICAgICAgIHRoaXMub25QYWdlQ2hhbmdlID0gdGhpcy5vblBhZ2VDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBhZ2VzTG9hZGVkID0gdGhpcy5vblBhZ2VzTG9hZGVkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25QYWdlUmVuZGVyZWQgPSB0aGlzLm9uUGFnZVJlbmRlcmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5yYW5kb21QZGZJZCA9IERhdGUubm93KCkudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5wZGZqc1dvcmtlckRlc3Ryb3kkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG51bGwpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmcm9tKHRoaXMuZGVzdHJveVBmZEpzV29ya2VyKCkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgZ2V0VXNlclNjYWxpbmcoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHNjYWxlQ29uZmlnID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldDxudW1iZXI+KCdhZGYtdmlld2VyLnBkZi12aWV3ZXItc2NhbGluZycsIHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKHNjYWxlQ29uZmlnKSB7XG4gICAgICAgICAgICBzY2FsZUNvbmZpZyA9IHNjYWxlQ29uZmlnIC8gMTAwO1xuICAgICAgICAgICAgc2NhbGVDb25maWcgPSB0aGlzLmNoZWNrTGltaXRzKHNjYWxlQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY2FsZUNvbmZpZztcbiAgICB9XG5cbiAgICBjaGVja0xpbWl0cyhzY2FsZUNvbmZpZzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHNjYWxlQ29uZmlnID4gdGhpcy5NQVhfU0NBTEUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLk1BWF9TQ0FMRTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2FsZUNvbmZpZyA8IHRoaXMuTUlOX1NDQUxFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5NSU5fU0NBTEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGVDb25maWc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGJsb2JGaWxlID0gY2hhbmdlc1snYmxvYkZpbGUnXTtcblxuICAgICAgICBpZiAoYmxvYkZpbGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGRmT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wZGZqc0RlZmF1bHRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZWFkZXIucmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXQ8Ym9vbGVhbj4oJ2F1dGgud2l0aENyZWRlbnRpYWxzJywgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlUGRmKHBkZk9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iRmlsZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsRmlsZSA9IGNoYW5nZXNbJ3VybEZpbGUnXTtcbiAgICAgICAgaWYgKHVybEZpbGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGRmT3B0aW9uczogYW55ID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucGRmanNEZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICB1cmw6IHVybEZpbGUuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldDxib29sZWFuPignYXV0aC53aXRoQ3JlZGVudGlhbHMnLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBwZGZPcHRpb25zLmh0dHBIZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6IHRoaXMuY2FjaGVUeXBlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVBkZihwZGZPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy51cmxGaWxlICYmICF0aGlzLmJsb2JGaWxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dHJpYnV0ZSB1cmxGaWxlIG9yIGJsb2JGaWxlIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleGVjdXRlUGRmKHBkZk9wdGlvbnM6IGFueSkge1xuICAgICAgICB0aGlzLnNldHVwUGRmSnNXb3JrZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2sgPSB0aGlzLnBkZmpzTGliLmdldERvY3VtZW50KHBkZk9wdGlvbnMpO1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdUYXNrLm9uUGFzc3dvcmQgPSAoY2FsbGJhY2ssIHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QZGZQYXNzd29yZChjYWxsYmFjaywgcmVhc29uKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2sub25Qcm9ncmVzcyA9IChwcm9ncmVzc0RhdGE6IE9uUHJvZ3Jlc3NQYXJhbWV0ZXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSBwcm9ncmVzc0RhdGEubG9hZGVkIC8gcHJvZ3Jlc3NEYXRhLnRvdGFsO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1BlcmNlbnQgPSBNYXRoLnJvdW5kKGxldmVsICogMTAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuaXNQYW5lbERpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGFzay5wcm9taXNlXG4gICAgICAgICAgICAgICAgLnRoZW4oKHBkZkRvY3VtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IHBkZkRvY3VtZW50Lm51bVBhZ2VzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UERGVmlld2VyKHBkZkRvY3VtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmRG9jdW1lbnQuZ2V0UGFnZSgxKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuc2NhbGVQYWdlKCdpbml0JykpXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMuZXJyb3IuZW1pdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXR1cFBkZkpzV29ya2VyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5wZGZKc1dvcmtlckluc3RhbmNlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlc3Ryb3lQZmRKc1dvcmtlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnBkZkpzV29ya2VyVXJsKSB7XG4gICAgICAgICAgICB0aGlzLnBkZkpzV29ya2VyVXJsID0gYXdhaXQgdGhpcy5nZXRQZGZKc1dvcmtlcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGRmSnNXb3JrZXJJbnN0YW5jZSA9IG5ldyBXb3JrZXIodGhpcy5wZGZKc1dvcmtlclVybCwgeyB0eXBlOiAnbW9kdWxlJyB9KTtcbiAgICAgICAgdGhpcy5wZGZqc0xpYi5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQgPSB0aGlzLnBkZkpzV29ya2VySW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRQZGZKc1dvcmtlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcuL3BkZi53b3JrZXIubWluLm1qcycpO1xuICAgICAgICBjb25zdCB3b3JrZXJTY3JpcHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbd29ya2VyU2NyaXB0XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcgfSk7XG4gICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIH1cblxuICAgIGluaXRQREZWaWV3ZXIocGRmRG9jdW1lbnQ6IFBERkRvY3VtZW50UHJveHkpIHtcbiAgICAgICAgY29uc3Qgdmlld2VyOiBhbnkgPSB0aGlzLmdldFZpZXdlcigpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmdldERvY3VtZW50Q29udGFpbmVyKCk7XG5cbiAgICAgICAgaWYgKHZpZXdlciAmJiBjb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGRmVmlld2VyID0gbmV3IHRoaXMucGRmanNWaWV3ZXIoe1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICB2aWV3ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyaW5nUXVldWU6IHRoaXMucmVuZGVyaW5nUXVldWVTZXJ2aWNlcyxcbiAgICAgICAgICAgICAgICBldmVudEJ1czogdGhpcy5ldmVudEJ1cyxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uTW9kZTogMFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGNzcGVsbDogZGlzYWJsZS1uZXh0XG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzLm9uKCdwYWdlY2hhbmdpbmcnLCB0aGlzLm9uUGFnZUNoYW5nZSk7XG4gICAgICAgICAgICAvLyBjc3BlbGw6IGRpc2FibGUtbmV4dFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5vbigncGFnZXNsb2FkZWQnLCB0aGlzLm9uUGFnZXNMb2FkZWQpO1xuICAgICAgICAgICAgLy8gY3NwZWxsOiBkaXNhYmxlLW5leHRcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMub24oJ3RleHRsYXllcnJlbmRlcmVkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5vbigncGFnZXJlbmRlcmVkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmluZ1F1ZXVlU2VydmljZXMuc2V0Vmlld2VyKHRoaXMucGRmVmlld2VyKTtcbiAgICAgICAgICAgIHRoaXMucGRmVmlld2VyLnNldERvY3VtZW50KHBkZkRvY3VtZW50KTtcbiAgICAgICAgICAgIHRoaXMucGRmVGh1bWJuYWlsc0NvbnRleHQudmlld2VyID0gdGhpcy5wZGZWaWV3ZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGRmVmlld2VyKSB7XG4gICAgICAgICAgICAvLyBjc3BlbGw6IGRpc2FibGUtbmV4dFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5vZmYoJ3BhZ2VjaGFuZ2luZycsICgpID0+IHt9KTtcbiAgICAgICAgICAgIC8vIGNzcGVsbDogZGlzYWJsZS1uZXh0XG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzLm9mZigncGFnZXNsb2FkZWQnLCAoKSA9PiB7fSk7XG4gICAgICAgICAgICAvLyBjc3BlbGw6IGRpc2FibGUtbmV4dFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5vZmYoJ3RleHRsYXllcnJlbmRlcmVkJywgKCkgPT4ge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1Rhc2spIHtcbiAgICAgICAgICAgIHRoaXMucGRmanNXb3JrZXJEZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGRmanNXb3JrZXJEZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJldm9rZVBkZkpzV29ya2VyVXJsKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBkZXN0cm95UGZkSnNXb3JrZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZGluZ1Rhc2suZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBkZkpzV29ya2VySW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGRmSnNXb3JrZXJJbnN0YW5jZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdUYXNrID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJldm9rZVBkZkpzV29ya2VyVXJsKCk6IHZvaWQge1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMucGRmSnNXb3JrZXJVcmwpO1xuICAgIH1cblxuICAgIHRvZ2dsZVRodW1ibmFpbHMoKSB7XG4gICAgICAgIHRoaXMuc2hvd1RodW1ibmFpbHMgPSAhdGhpcy5zaG93VGh1bWJuYWlscztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdG8gc2NhbGUgdGhlIHBhZ2UgY3VycmVudCBzdXBwb3J0IGltcGxlbWVudGF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2NhbGVNb2RlIC0gbmV3IHNjYWxlIG1vZGVcbiAgICAgKi9cbiAgICBzY2FsZVBhZ2Uoc2NhbGVNb2RlOiBQZGZTY2FsZU1vZGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVNb2RlID0gc2NhbGVNb2RlO1xuXG4gICAgICAgIGNvbnN0IHZpZXdlckNvbnRhaW5lciA9IHRoaXMuZ2V0TWFpbkNvbnRhaW5lcigpO1xuICAgICAgICBjb25zdCBkb2N1bWVudENvbnRhaW5lciA9IHRoaXMuZ2V0RG9jdW1lbnRDb250YWluZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5wZGZWaWV3ZXIgJiYgZG9jdW1lbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgIGxldCB3aWR0aENvbnRhaW5lcjogbnVtYmVyO1xuICAgICAgICAgICAgbGV0IGhlaWdodENvbnRhaW5lcjogbnVtYmVyO1xuXG4gICAgICAgICAgICBpZiAodmlld2VyQ29udGFpbmVyICYmIHZpZXdlckNvbnRhaW5lci5jbGllbnRXaWR0aCA8PSBkb2N1bWVudENvbnRhaW5lci5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHdpZHRoQ29udGFpbmVyID0gdmlld2VyQ29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGhlaWdodENvbnRhaW5lciA9IHZpZXdlckNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpZHRoQ29udGFpbmVyID0gZG9jdW1lbnRDb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0Q29udGFpbmVyID0gZG9jdW1lbnRDb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMucGRmVmlld2VyLl9wYWdlc1t0aGlzLnBkZlZpZXdlci5fY3VycmVudFBhZ2VOdW1iZXIgLSAxXTtcblxuICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDIwO1xuICAgICAgICAgICAgY29uc3QgcGFnZVdpZHRoU2NhbGUgPSAoKHdpZHRoQ29udGFpbmVyIC0gcGFkZGluZykgLyBjdXJyZW50UGFnZS53aWR0aCkgKiBjdXJyZW50UGFnZS5zY2FsZTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VIZWlnaHRTY2FsZSA9ICgoaGVpZ2h0Q29udGFpbmVyIC0gcGFkZGluZykgLyBjdXJyZW50UGFnZS53aWR0aCkgKiBjdXJyZW50UGFnZS5zY2FsZTtcblxuICAgICAgICAgICAgbGV0IHNjYWxlOiBudW1iZXI7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFNjYWxlTW9kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2luaXQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UtZml0Jzoge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IHRoaXMuZ2V0VXNlclNjYWxpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSB0aGlzLmF1dG9TY2FsaW5nKHBhZ2VIZWlnaHRTY2FsZSwgcGFnZVdpZHRoU2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdwYWdlLWFjdHVhbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAncGFnZS13aWR0aCc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBwYWdlV2lkdGhTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UtaGVpZ2h0Jzoge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IHBhZ2VIZWlnaHRTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2F1dG8nOiB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gdGhpcy5hdXRvU2NhbGluZyhwYWdlSGVpZ2h0U2NhbGUsIHBhZ2VXaWR0aFNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRTY2FsZVVwZGF0ZVBhZ2VzKHNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXV0b1NjYWxpbmcocGFnZUhlaWdodFNjYWxlOiBudW1iZXIsIHBhZ2VXaWR0aFNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGhvcml6b250YWxTY2FsZTogbnVtYmVyO1xuICAgICAgICBpZiAodGhpcy5pc0xhbmRzY2FwZSkge1xuICAgICAgICAgICAgaG9yaXpvbnRhbFNjYWxlID0gTWF0aC5taW4ocGFnZUhlaWdodFNjYWxlLCBwYWdlV2lkdGhTY2FsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob3Jpem9udGFsU2NhbGUgPSBwYWdlV2lkdGhTY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBob3Jpem9udGFsU2NhbGUgPSBNYXRoLnJvdW5kKGhvcml6b250YWxTY2FsZSk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5taW4odGhpcy5NQVhfQVVUT19TQ0FMRSwgaG9yaXpvbnRhbFNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tQYWdlRml0SW5Db250YWluZXIoc2NhbGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWFpbkNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLnJhbmRvbVBkZklkfS12aWV3ZXItbWFpbi1jb250YWluZXJgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERvY3VtZW50Q29udGFpbmVyKCk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMucmFuZG9tUGRmSWR9LXZpZXdlci1wZGYtdmlld2VyYCkgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWaWV3ZXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5yYW5kb21QZGZJZH0tdmlld2VyLXZpZXdlclBkZmApO1xuICAgIH1cblxuICAgIGNoZWNrUGFnZUZpdEluQ29udGFpbmVyKHNjYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkb2N1bWVudENvbnRhaW5lclNpemUgPSB0aGlzLmdldERvY3VtZW50Q29udGFpbmVyKCk7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBkZlZpZXdlci5fcGFnZXNbdGhpcy5wZGZWaWV3ZXIuX2N1cnJlbnRQYWdlTnVtYmVyIC0gMV07XG5cbiAgICAgICAgaWYgKHBhZ2Uud2lkdGggPiBkb2N1bWVudENvbnRhaW5lclNpemUuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHNjYWxlID0gTWF0aC5mcm91bmQoKGRvY3VtZW50Q29udGFpbmVyU2l6ZS5jbGllbnRXaWR0aCAtIDIwKSAvIHBhZ2Uud2lkdGgpO1xuICAgICAgICAgICAgaWYgKHNjYWxlIDwgdGhpcy5NSU5fU0NBTEUpIHtcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHRoaXMuTUlOX1NDQUxFO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHNldERvY3VtZW50T3ZlcmZsb3coKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q29udGFpbmVyU2l6ZSA9IHRoaXMuZ2V0RG9jdW1lbnRDb250YWluZXIoKTtcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucGRmVmlld2VyLl9wYWdlc1t0aGlzLnBkZlZpZXdlci5fY3VycmVudFBhZ2VOdW1iZXIgLSAxXTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50T3ZlcmZsb3cgPSBwYWdlLndpZHRoID4gZG9jdW1lbnRDb250YWluZXJTaXplLmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbGwgdGhlIHBhZ2VzIHdpdGggdGhlIG5ld1NjYWxlIHNjYWxlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3U2NhbGUgLSBuZXcgc2NhbGUgcGFnZVxuICAgICAqL1xuICAgIHNldFNjYWxlVXBkYXRlUGFnZXMobmV3U2NhbGU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5wZGZWaWV3ZXIpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NhbWVTY2FsZSh0aGlzLnBkZlZpZXdlci5jdXJyZW50U2NhbGVWYWx1ZSwgbmV3U2NhbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZGZWaWV3ZXIuY3VycmVudFNjYWxlVmFsdWUgPSBuZXdTY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wZGZWaWV3ZXIudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREb2N1bWVudE92ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgc2NhbGUgb2YgdGhlIHBhZ2UgaXMgdGhlIHNhbWUgZm9yIGF2b2lkIHVzZWxlc3MgcmUtcmVuZGVyaW5nXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2xkU2NhbGUgLSBvbGQgc2NhbGUgcGFnZVxuICAgICAqIEBwYXJhbSBuZXdTY2FsZSAtIG5ldyBzY2FsZSBwYWdlXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzY2FsZSBpcyB0aGUgc2FtZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBpc1NhbWVTY2FsZShvbGRTY2FsZTogbnVtYmVyLCBuZXdTY2FsZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBuZXdTY2FsZSA9PT0gb2xkU2NhbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgaXMgYSBsYW5kIHNjYXBlIHZpZXdcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB0YXJnZXQgd2lkdGhcbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHRhcmdldCBoZWlnaHRcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhcmdldCBpcyBpbiB0aGUgbGFuZHNjYXBlIG1vZGUsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgaXNMYW5kc2NhcGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHdpZHRoID4gaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB0aGUgcGFnZSBpcyByZXNpemVkXG4gICAgICovXG4gICAgb25SZXNpemUoKSB7XG4gICAgICAgIHRoaXMuc2NhbGVQYWdlKHRoaXMuY3VycmVudFNjYWxlTW9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdG9nZ2xlIHRoZSBmaXQgcGFnZSBwZGZcbiAgICAgKi9cbiAgICBwYWdlRml0KCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NhbGVNb2RlICE9PSAncGFnZS1maXQnKSB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlUGFnZSgncGFnZS1maXQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGVQYWdlKCdhdXRvJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB6b29tIGluIHBhZ2UgcGRmXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGlja3MgbnVtYmVyIG9mIHRpY2tzIHRvIHpvb21cbiAgICAgKi9cbiAgICB6b29tSW4odGlja3M/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld1NjYWxlOiBhbnkgPSB0aGlzLnBkZlZpZXdlci5jdXJyZW50U2NhbGVWYWx1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgbmV3U2NhbGUgPSAobmV3U2NhbGUgKiB0aGlzLkRFRkFVTFRfU0NBTEVfREVMVEEpLnRvRml4ZWQoMik7XG4gICAgICAgICAgICBuZXdTY2FsZSA9IE1hdGguY2VpbChuZXdTY2FsZSAqIDEwKSAvIDEwO1xuICAgICAgICAgICAgbmV3U2NhbGUgPSBNYXRoLm1pbih0aGlzLk1BWF9TQ0FMRSwgbmV3U2NhbGUpO1xuICAgICAgICB9IHdoaWxlICgtLXRpY2tzID4gMCAmJiBuZXdTY2FsZSA8IHRoaXMuTUFYX1NDQUxFKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVNb2RlID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLnNldFNjYWxlVXBkYXRlUGFnZXMobmV3U2NhbGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHpvb20gb3V0IHBhZ2UgcGRmXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGlja3MgbnVtYmVyIG9mIHRpY2tzIHRvIHNjYWxlXG4gICAgICovXG4gICAgem9vbU91dCh0aWNrcz86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgbmV3U2NhbGU6IGFueSA9IHRoaXMucGRmVmlld2VyLmN1cnJlbnRTY2FsZVZhbHVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBuZXdTY2FsZSA9IChuZXdTY2FsZSAvIHRoaXMuREVGQVVMVF9TQ0FMRV9ERUxUQSkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIG5ld1NjYWxlID0gTWF0aC5mbG9vcihuZXdTY2FsZSAqIDEwKSAvIDEwO1xuICAgICAgICAgICAgbmV3U2NhbGUgPSBNYXRoLm1heCh0aGlzLk1JTl9TQ0FMRSwgbmV3U2NhbGUpO1xuICAgICAgICB9IHdoaWxlICgtLXRpY2tzID4gMCAmJiBuZXdTY2FsZSA+IHRoaXMuTUlOX1NDQUxFKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVNb2RlID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLnNldFNjYWxlVXBkYXRlUGFnZXMobmV3U2NhbGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGxvYWQgdGhlIHByZXZpb3VzIHBhZ2VcbiAgICAgKi9cbiAgICBwcmV2aW91c1BhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnBkZlZpZXdlciAmJiB0aGlzLnBhZ2UgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UtLTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVBhZ2UgPSB0aGlzLnBhZ2U7XG5cbiAgICAgICAgICAgIHRoaXMucGRmVmlld2VyLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5wYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZCB0aGUgbmV4dCBwYWdlXG4gICAgICovXG4gICAgbmV4dFBhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnBkZlZpZXdlciAmJiB0aGlzLnBhZ2UgPCB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5UGFnZSA9IHRoaXMucGFnZTtcblxuICAgICAgICAgICAgdGhpcy5wZGZWaWV3ZXIuY3VycmVudFBhZ2VOdW1iZXIgPSB0aGlzLnBhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb2FkIHRoZSBwYWdlIGluIGlucHV0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFnZSB0byBsb2FkXG4gICAgICovXG4gICAgaW5wdXRQYWdlKHBhZ2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwYWdlSW5wdXQgPSBwYXJzZUludChwYWdlLCAxMCk7XG5cbiAgICAgICAgaWYgKCFpc05hTihwYWdlSW5wdXQpICYmIHBhZ2VJbnB1dCA+IDAgJiYgcGFnZUlucHV0IDw9IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlID0gcGFnZUlucHV0O1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5UGFnZSA9IHRoaXMucGFnZTtcbiAgICAgICAgICAgIHRoaXMucGRmVmlld2VyLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5wYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5UGFnZSA9IHRoaXMucGFnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZ2UgQ2hhbmdlIEV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgZXZlbnRcbiAgICAgKi9cbiAgICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnQuc291cmNlICYmIGV2ZW50LnNvdXJjZS5jb250YWluZXIuaWQgPT09IGAke3RoaXMucmFuZG9tUGRmSWR9LXZpZXdlci1wZGYtdmlld2VyYCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlID0gZXZlbnQucGFnZU51bWJlcjtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVBhZ2UgPSBldmVudC5wYWdlTnVtYmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25QZGZQYXNzd29yZChjYWxsYmFjaywgcmVhc29uKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nXG4gICAgICAgICAgICAub3BlbihQZGZQYXNzd29yZERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgcmVhc29uIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocGFzc3dvcmQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZ2UgUmVuZGVyZWQgRXZlbnRcbiAgICAgKi9cbiAgICBvblBhZ2VSZW5kZXJlZCgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFnZXMgTG9hZGVkIEV2ZW50XG4gICAgICpcbiAgICAgKi9cbiAgICBvblBhZ2VzTG9hZGVkKCkge1xuICAgICAgICB0aGlzLnBhZ2VzTG9hZGVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5pc1BhbmVsRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBFdmVudCBMaXN0ZW5lclxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkRXZlbnRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGlmIChrZXkgPT09IDM5KSB7XG4gICAgICAgICAgICAvLyByaWdodCBhcnJvd1xuICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gMzcpIHtcbiAgICAgICAgICAgIC8vIGxlZnQgYXJyb3dcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLXBkZi12aWV3ZXJfX2NvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGh1bWJuYWlsc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXBkZi12aWV3ZXJfX3RodW1ibmFpbHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdGh1bWJuYWlscy10ZW1wbGF0ZV9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10aHVtYm5haWxzLXRlbXBsYXRlX19idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPSdhZGYtdGh1bWJuYWlscy1jbG9zZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVGh1bWJuYWlscygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFSSUEuVEhVTUJOQUlMU19QQU5MRUxfQ0xPU0UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFDVElPTlMuQ0xPU0UnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aHVtYm5haWxzVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRodW1ibmFpbHNUZW1wbGF0ZTtjb250ZXh0OnBkZlRodW1ibmFpbHNDb250ZXh0XCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8YWRmLXBkZi10aHVtYm5haWxzICpuZ0lmPVwiIXRodW1ibmFpbHNUZW1wbGF0ZSAmJiAhaXNQYW5lbERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJ0b2dnbGVUaHVtYm5haWxzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BkZlZpZXdlcl09XCJwZGZWaWV3ZXJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImFkZi1wZGYtdmlld2VyX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgW2lkXT1cInJhbmRvbVBkZklkICsgJy12aWV3ZXItcGRmLXZpZXdlcidcIlxuICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXZpZXdlci1wZGYtdmlld2VyXCJcbiAgICAgICAgICAgICAod2luZG93OnJlc2l6ZSk9XCJvblJlc2l6ZSgpXCI+XG4gICAgICAgICAgICA8ZGl2IFtpZF09XCJyYW5kb21QZGZJZCArICctdmlld2VyLXZpZXdlclBkZidcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wZGZWaWV3ZXJcIlxuICAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIlxuICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJsb2FkZXItY29udGFpbmVyXCIgY2xhc3M9XCJhZGYtbG9hZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWxvYWRlci1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBjbGFzcz1cImFkZi1sb2FkZXItaXRlbS1wcm9ncmVzcy1iYXJcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJhZGYtcGRmLXZpZXdlcl9fdG9vbGJhclwiICpuZ0lmPVwic2hvd1Rvb2xiYXJcIiBbbmdTdHlsZV09XCJkb2N1bWVudE92ZXJmbG93ICYmIHtib3R0b206ICcyNXB4J31cIj5cbiAgICA8YWRmLXRvb2xiYXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsbG93VGh1bWJuYWlsc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1ZJRVdFUi5BUklBLlRIVU1CTkFJTFMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG93VGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi10aHVtYm5haWxzLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1BhbmVsRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVGh1bWJuYWlscygpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRhc2hib2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxhZGYtdG9vbGJhci1kaXZpZGVyIC8+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxidXR0b24gaWQ9XCJ2aWV3ZXItcHJldmlvdXMtcGFnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5QUkVWSU9VU19QQUdFJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5QUkVWSU9VU19QQUdFJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfdXA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIGlkPVwidmlld2VyLW5leHQtcGFnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5ORVhUX1BBR0UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJ7eyAnQURGX1ZJRVdFUi5BUklBLk5FWFRfUEFHRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtcGRmLXZpZXdlcl9fdG9vbGJhci1wYWdlLXNlbGVjdG9yXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZS1zZWxlY3RvclwiPnt7ICdBREZfVklFV0VSLlBBR0VfTEFCRUwuU0hPV0lORycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0ICNwYWdlXG4gICAgICAgICAgICAgICAgICAgaWQ9XCJwYWdlLXNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXBhZ2Utc2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCItP1swLTldKihcXC5bMC05XSspP1wiXG4gICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyBkaXNwbGF5UGFnZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1ZJRVdFUi5QQUdFX0xBQkVMLlBBR0VfU0VMRUNUT1JfTEFCRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaW5wdXRQYWdlKHBhZ2UudmFsdWUpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyAnQURGX1ZJRVdFUi5QQUdFX0xBQkVMLk9GJyB8IHRyYW5zbGF0ZSB9fSB7eyB0b3RhbFBhZ2VzIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXBkZi12aWV3ZXJfX3Rvb2xiYXItcGFnZS1zY2FsZVwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1wYWdlLXNjYWxlXCI+XG4gICAgICAgICAgICB7eyBjdXJyZW50U2NhbGVUZXh0IH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gaWQ9XCJ2aWV3ZXItem9vbS1pbi1idXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5aT09NX0lOJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5aT09NX0lOJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInpvb21JbigpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+em9vbV9pbjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gaWQ9XCJ2aWV3ZXItem9vbS1vdXQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFSSUEuWk9PTV9PVVQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJ7eyAnQURGX1ZJRVdFUi5BUklBLlpPT01fT1VUJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInpvb21PdXQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnpvb21fb3V0PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInZpZXdlci1zY2FsZS1wYWdlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiIGFyaWEtcHJlc3NlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5GSVRfUEFHRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cInt7ICdBREZfVklFV0VSLkFSSUEuRklUX1BBR0UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFnZUZpdCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+em9vbV9vdXRfbWFwPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICA8L2FkZi10b29sYmFyPlxuPC9kaXY+XG4iXX0=