tnx-shared 5.2.17 → 5.2.18

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 (452) hide show
  1. package/classes/base/component-base.d.ts +1 -1
  2. package/classes/base/data-form-base.d.ts +1 -1
  3. package/classes/base/data-list-base.d.ts +1 -1
  4. package/classes/base/list-base.d.ts +1 -1
  5. package/classes/base/tree-list-base.d.ts +1 -1
  6. package/classes/public-function.d.ts +3 -2
  7. package/components/access-denied-component/access-denied-v1/access-denied-v1.component.d.ts +1 -1
  8. package/components/access-denied-component/access-denied.component.d.ts +1 -1
  9. package/components/add-news/add-news.component.d.ts +1 -1
  10. package/components/address/address.component.d.ts +1 -1
  11. package/components/after-view-checked/after-view-checked.component.d.ts +1 -1
  12. package/components/autocomplete-datasource/autocomplete-datasource.component.d.ts +1 -1
  13. package/components/autocomplete-picker/autocomplete-picker.component.d.ts +1 -1
  14. package/components/avatar-uploader/avatar-uploader.component.d.ts +1 -1
  15. package/components/chat/chat-box/chat-box.component.d.ts +1 -1
  16. package/components/chat/chat-send-message-box/chat-send-message-box.component.d.ts +1 -1
  17. package/components/check-box-list/check-box-list.component.d.ts +1 -1
  18. package/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.d.ts +1 -1
  19. package/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.d.ts +1 -1
  20. package/components/common-app-component/app-root-menu/app-root-menu.component.d.ts +1 -1
  21. package/components/common-app-component/app-topbar-v1/app-topbar-v1.component.d.ts +1 -1
  22. package/components/common-app-component/app-topbar-v2/app-topbar-v2.component.d.ts +1 -1
  23. package/components/common-app-component/app.footer.component.d.ts +1 -1
  24. package/components/common-app-component/app.menu.component.d.ts +2 -2
  25. package/components/common-app-component/app.profile.component.d.ts +1 -1
  26. package/components/common-app-component/app.topbar.component.d.ts +1 -1
  27. package/components/common-app-component/common-app-component.d.ts +1 -1
  28. package/components/common-app-component/default-setting-form/default-data-settings.component.d.ts +1 -1
  29. package/components/common-dashboard/common-dashboard.component.d.ts +1 -1
  30. package/components/congviec-picker/congviec-picker.component.d.ts +1 -1
  31. package/components/crud/advance-search/advance-search.component.d.ts +1 -1
  32. package/components/crud/check-ready/check-ready.component.d.ts +1 -1
  33. package/components/crud/crud-form/crud-form.component.d.ts +1 -1
  34. package/components/crud/crud-list/crud-list.component.d.ts +1 -1
  35. package/components/crud/table-detail-form/table-detail-form.component.d.ts +1 -1
  36. package/components/crud/tn-table.component.d.ts +1 -1
  37. package/components/crud/tree-table/tree-table.component.d.ts +1 -1
  38. package/components/datetime-picker/datetime-picker.component.d.ts +1 -1
  39. package/components/datetime-picker-range/datetime-picker-range.component.d.ts +1 -1
  40. package/components/dropdown/dropdown.component.d.ts +1 -1
  41. package/components/dropdown/quick-add-form/quick-add-form.component.d.ts +1 -1
  42. package/components/entity-permission/entity-permission.component.d.ts +1 -1
  43. package/components/entity-picker/entity-picker-box/entity-picker-box.component.d.ts +1 -1
  44. package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts +1 -1
  45. package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts +1 -1
  46. package/components/entity-picker/entity-picker-dialog/entity-picker-dialog.component.d.ts +1 -1
  47. package/components/entity-picker/entity-picker.component.d.ts +1 -1
  48. package/components/equation-editor/equation-editor.component.d.ts +1 -1
  49. package/components/file-explorer/file-explorer.component.d.ts +1 -1
  50. package/components/file-explorer/file-form/file-form.component.d.ts +1 -1
  51. package/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.d.ts +1 -1
  52. package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -1
  53. package/components/file-explorer/file-picker-dialog/file-picker-dialog.component.d.ts +1 -1
  54. package/components/file-explorer/file-tai-lieu/file-tai-lieu.component.d.ts +1 -1
  55. package/components/file-explorer/file-tai-lieu/khaithac-tailieu-dungchung/khaithac-tailieu-dungchung.component.d.ts +1 -1
  56. package/components/file-explorer/file-tai-lieu/tailieu-cuatoi/tailieu-cuatoi.component.d.ts +1 -1
  57. package/components/file-explorer/file-version-list/file-version-list.component.d.ts +1 -1
  58. package/components/file-explorer/file-viewer/file-viewer.component.d.ts +1 -1
  59. package/components/file-explorer/folder-form/folder-form.component.d.ts +1 -1
  60. package/components/file-explorer/ky-so-sim-danh-sach-chu-ky/ky-so-sim-danh-sach-chu-ky.component.d.ts +1 -1
  61. package/components/file-explorer/signature-detail/signature-detail.component.d.ts +1 -1
  62. package/components/file-upload/file-upload.component.d.ts +1 -1
  63. package/components/key-value/key-value.component.d.ts +1 -1
  64. package/components/mask/mask.component.d.ts +1 -1
  65. package/components/not-found/not-found.component.d.ts +1 -1
  66. package/components/number-picker-range/number-picker-range.component.d.ts +1 -1
  67. package/components/paging-next-back-only/paging-next-back-only.component.d.ts +1 -1
  68. package/components/permission-utils/permission-utils.component.d.ts +1 -1
  69. package/components/qr-code-generator/qr-code-generator.component.d.ts +1 -1
  70. package/components/query-builders/query-builder/query-builder.component.d.ts +1 -1
  71. package/components/query-builders/query-builder-group/query-builder-group.component.d.ts +1 -1
  72. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts +1 -1
  73. package/components/radio-button-list/radio-button-list.component.d.ts +1 -1
  74. package/components/report-queue/report-queue.component.d.ts +1 -1
  75. package/components/service-file-upload/service-file-upload.component.d.ts +1 -1
  76. package/components/settings/settings-row/settings-row.component.d.ts +1 -1
  77. package/components/settings/settings-workflow/settings-workflow-no1/settings-workflow-no1.component.d.ts +1 -1
  78. package/components/settings/settings-workflow/settings-workflow.component.d.ts +1 -1
  79. package/components/settings/settings.component.d.ts +1 -1
  80. package/components/share-link-by-permission/share-link-by-permission.component.d.ts +1 -1
  81. package/components/splash-component/splash-component-v1/splash-component-v1.component.d.ts +1 -1
  82. package/components/splash-component/splash-component-v2/splash-component-v2.component.d.ts +1 -1
  83. package/components/splash-component/splash-component.component.d.ts +1 -1
  84. package/components/statemachines/dynamic-node/dynamic-node.component.d.ts +1 -1
  85. package/components/statemachines/state/state.component.d.ts +1 -1
  86. package/components/statemachines/state-metadata/state-metadata.component.d.ts +1 -1
  87. package/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.d.ts +1 -1
  88. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts +1 -1
  89. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts +1 -1
  90. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts +1 -1
  91. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts +1 -1
  92. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts +1 -1
  93. package/components/statemachines/statemachines-connection-receiver-user/statemachines-connection-receiver-user.component.d.ts +1 -1
  94. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts +1 -1
  95. package/components/statemachines/statemachines-designer/statemachines-designer.component.d.ts +1 -1
  96. package/components/tn-app-help/helper-current-page/helper-current-page.component.d.ts +1 -1
  97. package/components/tn-app-help/tn-app-help.component.d.ts +1 -1
  98. package/components/tn-app-notification/tn-app-notification-list/tn-app-notification-list.component.d.ts +1 -1
  99. package/components/tn-app-notification/tn-app-notification.component.d.ts +1 -1
  100. package/components/tn-checkbox/tn-checkbox.component.d.ts +1 -1
  101. package/components/tn-color-picker/tn-color-picker.component.d.ts +1 -1
  102. package/components/tn-custom-scrollbar/tn-custom-scrollbar.component.d.ts +1 -1
  103. package/components/tn-dialog/tn-dialog.component.d.ts +1 -1
  104. package/components/tn-tabview/tn-tabview.component.d.ts +1 -1
  105. package/components/tn-template/tn-template.component.d.ts +1 -1
  106. package/components/tn-tinymce/tn-tinymce.component.d.ts +1 -1
  107. package/components/universal-link-processor/universal-link-processor.component.d.ts +1 -1
  108. package/components/user-picker/user-picker-box/user-picker-box.component.d.ts +1 -1
  109. package/components/user-picker/user-picker-dialog/user-picker-dialog.component.d.ts +1 -1
  110. package/components/user-picker/user-picker.component.d.ts +1 -1
  111. package/components/vanban-picker/vanban-den-picker/vanban-den-picker.component.d.ts +1 -1
  112. package/components/vanban-picker/vanban-di-picker/vanban-di-picker.component.d.ts +1 -1
  113. package/components/vanban-picker/vanban-picker-dialog/vanban-picker-dialog.component.d.ts +1 -1
  114. package/components/vanban-picker/vanban-picker.component.d.ts +1 -1
  115. package/components/workflow/cho-y-kien-form/cho-y-kien-form.component.d.ts +1 -1
  116. package/components/workflow/permission-sharing/permission-sharing.component.d.ts +1 -1
  117. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts +1 -1
  118. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts +1 -1
  119. package/components/workflow/simple-workflow-form/simple-workflow-form.component.d.ts +1 -1
  120. package/components/workflow/start-workflow/start-workflow.component.d.ts +1 -1
  121. package/components/workflow/workflow-history/workflow-history.component.d.ts +1 -1
  122. package/components/workflow/workflow-history-dialog/workflow-history-dialog.component.d.ts +1 -1
  123. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +1 -1
  124. package/components/workflow/workflow-permission/workflow-permission.component.d.ts +1 -1
  125. package/components/workflow/workflow-permission-form/workflow-permission-form.component.d.ts +1 -1
  126. package/components/workflow/workflow-picker/workflow-picker.component.d.ts +1 -1
  127. package/components/workflow/workflow-setting/workflow-setting.component.d.ts +1 -1
  128. package/components/workflow/workflow-setting-dialog/workflow-setting-dialog.component.d.ts +1 -1
  129. package/components/workflow/workflow-setting-new/workflow-setting-new.component.d.ts +1 -1
  130. package/congviec/cauhinh-workflow/cauhinh-workflow-detail/cauhinh-workflow-detail.component.d.ts +1 -1
  131. package/congviec/cauhinh-workflow/cauhinh-workflow.component.d.ts +1 -1
  132. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts +1 -1
  133. package/congviec/congviec/congviec-dinhkem-form/congviec-dinhkem-form.component.d.ts +1 -1
  134. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +1 -1
  135. package/congviec/congviec/congviec-next-first-step/congviec-next-first-step.component.d.ts +1 -1
  136. package/congviec/congviec/congviec.component.d.ts +1 -1
  137. package/congviec/congviec-test/congviec.component.d.ts +1 -1
  138. package/congviec/dm-linhvuc-congviec/dm-linhvuc-congviec-form/dm-linhvuc-congviec-form.component.d.ts +1 -1
  139. package/congviec/dm-linhvuc-congviec/dm-linhvuc-congviec.component.d.ts +1 -1
  140. package/congviec/dm-loai-congviec/dm-loai-congviec-form/dm-loai-congviec-form.component.d.ts +1 -1
  141. package/congviec/dm-loai-congviec/dm-loai-congviec.component.d.ts +1 -1
  142. package/congviec/dm-priority/dm-priority-form/dm-priority-form.component.d.ts +1 -1
  143. package/congviec/dm-priority/dm-priority.component.d.ts +1 -1
  144. package/directives/authorize.directive.d.ts +1 -1
  145. package/directives/prevent-shift-tab.directive.d.ts +1 -1
  146. package/directives/primeng/tn-table.directive.d.ts +5 -5
  147. package/directives/tn-template.directive.d.ts +1 -1
  148. package/esm2020/app-context/application-context.service.mjs +3 -3
  149. package/esm2020/app-context/component-context.service.mjs +3 -3
  150. package/esm2020/classes/base/component-base.mjs +3 -3
  151. package/esm2020/classes/base/data-form-base.mjs +3 -3
  152. package/esm2020/classes/base/data-list-base.mjs +3 -3
  153. package/esm2020/classes/base/list-base.mjs +3 -3
  154. package/esm2020/classes/base/tree-list-base.mjs +3 -3
  155. package/esm2020/components/access-denied-component/access-denied-v1/access-denied-v1.component.mjs +3 -3
  156. package/esm2020/components/access-denied-component/access-denied.component.mjs +6 -6
  157. package/esm2020/components/add-news/add-news.component.mjs +6 -6
  158. package/esm2020/components/address/address.component.mjs +5 -5
  159. package/esm2020/components/address/services/address.service.mjs +3 -3
  160. package/esm2020/components/after-view-checked/after-view-checked.component.mjs +4 -4
  161. package/esm2020/components/autocomplete-datasource/autocomplete-datasource.component.mjs +7 -7
  162. package/esm2020/components/autocomplete-picker/autocomplete-picker.component.mjs +11 -11
  163. package/esm2020/components/avatar-uploader/avatar-uploader.component.mjs +6 -6
  164. package/esm2020/components/chat/chat-box/chat-box.component.mjs +7 -7
  165. package/esm2020/components/chat/chat-send-message-box/chat-send-message-box.component.mjs +10 -10
  166. package/esm2020/components/chat/services/chat.service.mjs +3 -3
  167. package/esm2020/components/chat/services/content.service.mjs +3 -3
  168. package/esm2020/components/chat/services/message-board.service.mjs +3 -3
  169. package/esm2020/components/chat/services/status.service.mjs +3 -3
  170. package/esm2020/components/check-box-list/check-box-list.component.mjs +8 -8
  171. package/esm2020/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.mjs +7 -7
  172. package/esm2020/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.mjs +6 -6
  173. package/esm2020/components/cocautochuc/services/cocautochuc.service.mjs +3 -3
  174. package/esm2020/components/common-app-component/app-root-menu/app-root-menu.component.mjs +4 -4
  175. package/esm2020/components/common-app-component/app-topbar-v1/app-topbar-v1.component.mjs +11 -11
  176. package/esm2020/components/common-app-component/app-topbar-v2/app-topbar-v2.component.mjs +9 -9
  177. package/esm2020/components/common-app-component/app.footer.component.mjs +3 -3
  178. package/esm2020/components/common-app-component/app.menu.component.mjs +11 -17
  179. package/esm2020/components/common-app-component/app.profile.component.mjs +5 -5
  180. package/esm2020/components/common-app-component/app.topbar.component.mjs +11 -11
  181. package/esm2020/components/common-app-component/common-app-component.mjs +15 -15
  182. package/esm2020/components/common-app-component/default-setting-form/default-data-settings.component.mjs +7 -7
  183. package/esm2020/components/common-dashboard/common-dashboard.component.mjs +3 -3
  184. package/esm2020/components/congviec-picker/congviec-picker.component.mjs +7 -7
  185. package/esm2020/components/congviec-picker/services/congviec.service.mjs +3 -3
  186. package/esm2020/components/congviec-picker/services/taskworkflowhistories.service.mjs +3 -3
  187. package/esm2020/components/crud/advance-search/advance-search.component.mjs +14 -14
  188. package/esm2020/components/crud/check-ready/check-ready.component.mjs +4 -4
  189. package/esm2020/components/crud/crud-form/crud-form.component.mjs +26 -26
  190. package/esm2020/components/crud/crud-list/crud-list.component.mjs +25 -25
  191. package/esm2020/components/crud/table-detail-form/table-detail-form.component.mjs +6 -6
  192. package/esm2020/components/crud/tn-table.component.mjs +3 -3
  193. package/esm2020/components/crud/tree-table/tree-table.component.mjs +23 -23
  194. package/esm2020/components/datetime-picker/datetime-picker.component.mjs +7 -7
  195. package/esm2020/components/datetime-picker-range/datetime-picker-range.component.mjs +6 -6
  196. package/esm2020/components/dropdown/dropdown.component.mjs +11 -11
  197. package/esm2020/components/dropdown/quick-add-form/quick-add-form.component.mjs +6 -6
  198. package/esm2020/components/dropdown/services/dropdown.service.mjs +3 -3
  199. package/esm2020/components/entity-permission/entity-permission.component.mjs +9 -9
  200. package/esm2020/components/entity-permission/services.cs/entity-permission.service.mjs +3 -3
  201. package/esm2020/components/entity-picker/entity-picker-box/entity-picker-box.component.mjs +7 -7
  202. package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.mjs +7 -7
  203. package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.mjs +7 -7
  204. package/esm2020/components/entity-picker/entity-picker-dialog/entity-picker-dialog.component.mjs +7 -7
  205. package/esm2020/components/entity-picker/entity-picker.component.mjs +10 -10
  206. package/esm2020/components/equation-editor/equation-editor.component.mjs +6 -6
  207. package/esm2020/components/file-explorer/file-explorer.component.mjs +6 -6
  208. package/esm2020/components/file-explorer/file-form/file-form.component.mjs +7 -7
  209. package/esm2020/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.mjs +8 -8
  210. package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +22 -22
  211. package/esm2020/components/file-explorer/file-picker-dialog/file-picker-dialog.component.mjs +7 -7
  212. package/esm2020/components/file-explorer/file-tai-lieu/file-tai-lieu.component.mjs +9 -9
  213. package/esm2020/components/file-explorer/file-tai-lieu/khaithac-tailieu-dungchung/khaithac-tailieu-dungchung.component.mjs +4 -4
  214. package/esm2020/components/file-explorer/file-tai-lieu/tailieu-cuatoi/tailieu-cuatoi.component.mjs +4 -4
  215. package/esm2020/components/file-explorer/file-version-list/file-version-list.component.mjs +9 -9
  216. package/esm2020/components/file-explorer/file-viewer/file-viewer.component.mjs +9 -9
  217. package/esm2020/components/file-explorer/folder-form/folder-form.component.mjs +7 -7
  218. package/esm2020/components/file-explorer/ky-so-sim-danh-sach-chu-ky/ky-so-sim-danh-sach-chu-ky.component.mjs +6 -6
  219. package/esm2020/components/file-explorer/services/danhmuc-dungchung.service.mjs +3 -3
  220. package/esm2020/components/file-explorer/services/download-link.service.mjs +3 -3
  221. package/esm2020/components/file-explorer/services/file-data.service.mjs +3 -3
  222. package/esm2020/components/file-explorer/services/file-explorer-new.service.mjs +3 -3
  223. package/esm2020/components/file-explorer/services/file-explorer.service.mjs +3 -3
  224. package/esm2020/components/file-explorer/services/file-object.service.mjs +3 -3
  225. package/esm2020/components/file-explorer/services/file-version.service.mjs +3 -3
  226. package/esm2020/components/file-explorer/services/folder.service.mjs +3 -3
  227. package/esm2020/components/file-explorer/services/ky-so-sim-chu-ky-user.service.mjs +3 -3
  228. package/esm2020/components/file-explorer/services/ky-so-sim-signPDF.service.mjs +3 -3
  229. package/esm2020/components/file-explorer/services/my-drive.service.mjs +3 -3
  230. package/esm2020/components/file-explorer/signature-detail/signature-detail.component.mjs +3 -3
  231. package/esm2020/components/file-upload/file-upload.component.mjs +9 -9
  232. package/esm2020/components/key-value/key-value.component.mjs +3 -3
  233. package/esm2020/components/mask/mask.component.mjs +7 -7
  234. package/esm2020/components/not-found/not-found.component.mjs +3 -3
  235. package/esm2020/components/number-picker-range/number-picker-range.component.mjs +7 -7
  236. package/esm2020/components/paging-next-back-only/paging-next-back-only.component.mjs +8 -8
  237. package/esm2020/components/permission-utils/permission-utils.component.mjs +9 -9
  238. package/esm2020/components/qr-code-generator/qr-code-generator.component.mjs +4 -4
  239. package/esm2020/components/query-builders/query-builder/query-builder.component.mjs +8 -8
  240. package/esm2020/components/query-builders/query-builder-group/query-builder-group.component.mjs +10 -10
  241. package/esm2020/components/query-builders/query-builder-rule/query-builder-rule.component.mjs +18 -18
  242. package/esm2020/components/query-builders/services/dm-chucvu.service.mjs +3 -3
  243. package/esm2020/components/radio-button-list/radio-button-list.component.mjs +6 -6
  244. package/esm2020/components/report-queue/report-queue.component.mjs +8 -8
  245. package/esm2020/components/service-file-upload/service-file-upload.component.mjs +10 -10
  246. package/esm2020/components/settings/settings-row/settings-row.component.mjs +8 -8
  247. package/esm2020/components/settings/settings-workflow/settings-workflow-no1/settings-workflow-no1.component.mjs +4 -4
  248. package/esm2020/components/settings/settings-workflow/settings-workflow.component.mjs +9 -9
  249. package/esm2020/components/settings/settings.component.mjs +14 -14
  250. package/esm2020/components/share-link-by-permission/share-link-by-permission.component.mjs +7 -7
  251. package/esm2020/components/splash-component/splash-component-v1/splash-component-v1.component.mjs +7 -7
  252. package/esm2020/components/splash-component/splash-component-v2/splash-component-v2.component.mjs +7 -7
  253. package/esm2020/components/splash-component/splash-component.component.mjs +9 -9
  254. package/esm2020/components/statemachines/dynamic-node/dynamic-node.component.mjs +3 -3
  255. package/esm2020/components/statemachines/services/node.service.mjs +3 -3
  256. package/esm2020/components/statemachines/services/statemachines.service.mjs +3 -3
  257. package/esm2020/components/statemachines/state/state.component.mjs +4 -4
  258. package/esm2020/components/statemachines/state-metadata/state-metadata.component.mjs +7 -7
  259. package/esm2020/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.mjs +9 -9
  260. package/esm2020/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.mjs +7 -7
  261. package/esm2020/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.mjs +3 -3
  262. package/esm2020/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.mjs +3 -3
  263. package/esm2020/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.mjs +3 -3
  264. package/esm2020/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.mjs +3 -3
  265. package/esm2020/components/statemachines/statemachines-connection-receiver-user/statemachines-connection-receiver-user.component.mjs +3 -3
  266. package/esm2020/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.mjs +3 -3
  267. package/esm2020/components/statemachines/statemachines-designer/statemachines-designer.component.mjs +13 -13
  268. package/esm2020/components/tn-app-help/helper-current-page/helper-current-page.component.mjs +3 -3
  269. package/esm2020/components/tn-app-help/services/path-name.service.mjs +3 -3
  270. package/esm2020/components/tn-app-help/tn-app-help.component.mjs +7 -7
  271. package/esm2020/components/tn-app-notification/tn-app-notification-list/tn-app-notification-list.component.mjs +4 -4
  272. package/esm2020/components/tn-app-notification/tn-app-notification.component.mjs +5 -5
  273. package/esm2020/components/tn-checkbox/tn-checkbox.component.mjs +6 -6
  274. package/esm2020/components/tn-color-picker/tn-color-picker.component.mjs +7 -7
  275. package/esm2020/components/tn-custom-scrollbar/tn-custom-scrollbar.component.mjs +6 -6
  276. package/esm2020/components/tn-dialog/tn-dialog.component.mjs +8 -8
  277. package/esm2020/components/tn-tabview/tn-tabview.component.mjs +6 -6
  278. package/esm2020/components/tn-template/tn-template.component.mjs +4 -4
  279. package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +9 -9
  280. package/esm2020/components/universal-link-processor/universal-link-processor.component.mjs +4 -4
  281. package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +9 -9
  282. package/esm2020/components/user-picker/user-picker-dialog/user-picker-dialog.component.mjs +4 -4
  283. package/esm2020/components/user-picker/user-picker.component.mjs +12 -12
  284. package/esm2020/components/vanban-picker/services/vanban-den.service.mjs +3 -3
  285. package/esm2020/components/vanban-picker/services/vanban-di.service.mjs +3 -3
  286. package/esm2020/components/vanban-picker/vanban-den-picker/vanban-den-picker.component.mjs +10 -10
  287. package/esm2020/components/vanban-picker/vanban-di-picker/vanban-di-picker.component.mjs +10 -10
  288. package/esm2020/components/vanban-picker/vanban-picker-dialog/vanban-picker-dialog.component.mjs +6 -6
  289. package/esm2020/components/vanban-picker/vanban-picker.component.mjs +10 -10
  290. package/esm2020/components/workflow/cho-y-kien-form/cho-y-kien-form.component.mjs +7 -7
  291. package/esm2020/components/workflow/permission-sharing/permission-sharing.component.mjs +7 -7
  292. package/esm2020/components/workflow/process-workflow-form/process-workflow-form.component.mjs +9 -9
  293. package/esm2020/components/workflow/process-workflow-target/process-workflow-target.component.mjs +4 -4
  294. package/esm2020/components/workflow/services/canbo-hoso.service.mjs +3 -3
  295. package/esm2020/components/workflow/services/dm-loai-congviec.service.mjs +3 -3
  296. package/esm2020/components/workflow/services/entity-workflow-history.service.mjs +3 -3
  297. package/esm2020/components/workflow/services/entity-workflow-setting.service.mjs +3 -3
  298. package/esm2020/components/workflow/services/workflow-history.service.mjs +3 -3
  299. package/esm2020/components/workflow/services/workflow-permission-detail.service.mjs +3 -3
  300. package/esm2020/components/workflow/services/workflow-permission.service.mjs +3 -3
  301. package/esm2020/components/workflow/services/workflow-settings.service.mjs +3 -3
  302. package/esm2020/components/workflow/simple-workflow-form/simple-workflow-form.component.mjs +7 -7
  303. package/esm2020/components/workflow/start-workflow/start-workflow.component.mjs +8 -8
  304. package/esm2020/components/workflow/workflow-history/workflow-history.component.mjs +6 -6
  305. package/esm2020/components/workflow/workflow-history-dialog/workflow-history-dialog.component.mjs +4 -4
  306. package/esm2020/components/workflow/workflow-history-new/workflow-history-new.component.mjs +10 -10
  307. package/esm2020/components/workflow/workflow-permission/workflow-permission.component.mjs +8 -8
  308. package/esm2020/components/workflow/workflow-permission-form/workflow-permission-form.component.mjs +7 -7
  309. package/esm2020/components/workflow/workflow-picker/workflow-picker.component.mjs +8 -8
  310. package/esm2020/components/workflow/workflow-setting/workflow-setting.component.mjs +5 -5
  311. package/esm2020/components/workflow/workflow-setting-dialog/workflow-setting-dialog.component.mjs +4 -4
  312. package/esm2020/components/workflow/workflow-setting-new/workflow-setting-new.component.mjs +7 -7
  313. package/esm2020/congviec/cauhinh-workflow/cauhinh-workflow-detail/cauhinh-workflow-detail.component.mjs +5 -5
  314. package/esm2020/congviec/cauhinh-workflow/cauhinh-workflow.component.mjs +3 -3
  315. package/esm2020/congviec/cauhinh-workflow/cauhinh-workflow.module.mjs +10 -12
  316. package/esm2020/congviec/cauhinh-workflow/services/cauhinh-workflow.service.mjs +3 -3
  317. package/esm2020/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.mjs +14 -14
  318. package/esm2020/congviec/congviec/congviec-dinhkem-form/congviec-dinhkem-form.component.mjs +4 -4
  319. package/esm2020/congviec/congviec/congviec-form/congviec-form.component.mjs +9 -9
  320. package/esm2020/congviec/congviec/congviec-next-first-step/congviec-next-first-step.component.mjs +9 -9
  321. package/esm2020/congviec/congviec/congviec.component.mjs +11 -11
  322. package/esm2020/congviec/congviec/services/congviec-dinhkem.service.mjs +3 -3
  323. package/esm2020/congviec/congviec/services/congviec.service.mjs +3 -3
  324. package/esm2020/congviec/congviec/services/congvieclienquan.service.mjs +3 -3
  325. package/esm2020/congviec/congviec-test/congviec.component.mjs +3 -3
  326. package/esm2020/congviec/dm-linhvuc-congviec/dm-linhvuc-congviec-form/dm-linhvuc-congviec-form.component.mjs +7 -7
  327. package/esm2020/congviec/dm-linhvuc-congviec/dm-linhvuc-congviec.component.mjs +6 -6
  328. package/esm2020/congviec/dm-linhvuc-congviec/services/dm-linhvuc-congviec.service.mjs +3 -3
  329. package/esm2020/congviec/dm-loai-congviec/dm-loai-congviec-form/dm-loai-congviec-form.component.mjs +7 -7
  330. package/esm2020/congviec/dm-loai-congviec/dm-loai-congviec.component.mjs +6 -6
  331. package/esm2020/congviec/dm-loai-congviec/services/dm-loai-congviec.service.mjs +3 -3
  332. package/esm2020/congviec/dm-priority/dm-priority-form/dm-priority-form.component.mjs +4 -4
  333. package/esm2020/congviec/dm-priority/dm-priority.component.mjs +5 -5
  334. package/esm2020/congviec/dm-priority/dm-priority.module.mjs +9 -9
  335. package/esm2020/congviec/dm-priority/services/dm-priority.service.mjs +3 -3
  336. package/esm2020/directives/authorize.directive.mjs +3 -3
  337. package/esm2020/directives/prevent-shift-tab.directive.mjs +3 -3
  338. package/esm2020/directives/primeng/tn-table.directive.mjs +17 -17
  339. package/esm2020/directives/tn-template.directive.mjs +3 -3
  340. package/esm2020/dynamic-components/dynamic-component.service.mjs +3 -3
  341. package/esm2020/intercepters/log.interceptor.mjs +3 -3
  342. package/esm2020/intercepters/permission-utils.interceptor.mjs +3 -3
  343. package/esm2020/intercepters/send-access-token.interceptor.mjs +3 -3
  344. package/esm2020/intercepters/trace.interceptor.mjs +3 -3
  345. package/esm2020/pipes/approval.pipe.mjs +3 -3
  346. package/esm2020/pipes/boolean-format.pipe.mjs +3 -3
  347. package/esm2020/pipes/convertMoneyToWord.pipe.mjs +3 -3
  348. package/esm2020/pipes/file-icon.pipe.mjs +3 -3
  349. package/esm2020/pipes/file-size.pipe.mjs +3 -3
  350. package/esm2020/pipes/highlight.pipe.mjs +3 -3
  351. package/esm2020/pipes/html-format.pipe.mjs +3 -3
  352. package/esm2020/pipes/masterData.pipe.mjs +3 -3
  353. package/esm2020/pipes/multiple-reference-data-format.pipe.mjs +3 -3
  354. package/esm2020/pipes/organization-format.pipe.mjs +3 -3
  355. package/esm2020/pipes/organization-name-format.pipe.mjs +3 -3
  356. package/esm2020/pipes/organizations-format.pipe.mjs +3 -3
  357. package/esm2020/pipes/reference-data-format.pipe.mjs +3 -3
  358. package/esm2020/pipes/safe-html.pipe.mjs +3 -3
  359. package/esm2020/pipes/safe-style.pipe.mjs +3 -3
  360. package/esm2020/pipes/safe-url.pipe.mjs +3 -3
  361. package/esm2020/pipes/secure.pipe.mjs +3 -3
  362. package/esm2020/pipes/string-format.pipe.mjs +3 -3
  363. package/esm2020/pipes/summary.pipe.mjs +3 -3
  364. package/esm2020/pipes/tn-date.pipe.mjs +3 -3
  365. package/esm2020/pipes/user-format.pipe.mjs +3 -3
  366. package/esm2020/pipes/users-format.pipe.mjs +3 -3
  367. package/esm2020/services/app-list.service.mjs +3 -3
  368. package/esm2020/services/article.service.mjs +3 -3
  369. package/esm2020/services/authen.service.mjs +3 -3
  370. package/esm2020/services/calculation-engine.service.mjs +3 -3
  371. package/esm2020/services/canbo-hoso.service.mjs +3 -3
  372. package/esm2020/services/check-control-visible.service.mjs +3 -3
  373. package/esm2020/services/common.service.mjs +3 -3
  374. package/esm2020/services/conditional-builder.service.mjs +3 -3
  375. package/esm2020/services/crud.service.mjs +3 -3
  376. package/esm2020/services/custom-router.service.mjs +3 -3
  377. package/esm2020/services/customize-ui.service.mjs +3 -3
  378. package/esm2020/services/danhmuc-api.service.mjs +3 -3
  379. package/esm2020/services/dhvinh-guard.service.mjs +3 -3
  380. package/esm2020/services/dm-chucvu.service.mjs +3 -3
  381. package/esm2020/services/dom.service.mjs +3 -3
  382. package/esm2020/services/eform.service.mjs +3 -3
  383. package/esm2020/services/entity-metadata.service.mjs +3 -3
  384. package/esm2020/services/entity-picker.service.mjs +3 -3
  385. package/esm2020/services/environment.service.mjs +3 -3
  386. package/esm2020/services/exception-handler.service.mjs +3 -3
  387. package/esm2020/services/export.service.mjs +3 -3
  388. package/esm2020/services/file-manager.service.mjs +3 -3
  389. package/esm2020/services/file-object-v4.service.mjs +3 -3
  390. package/esm2020/services/generic-guard-child.service.mjs +3 -3
  391. package/esm2020/services/generic-guard.service.mjs +3 -3
  392. package/esm2020/services/global.service.mjs +3 -3
  393. package/esm2020/services/guard-sv.service.mjs +3 -3
  394. package/esm2020/services/guard.service.mjs +3 -3
  395. package/esm2020/services/high-performance.service.mjs +3 -3
  396. package/esm2020/services/image.service.mjs +3 -3
  397. package/esm2020/services/list-helper.service.mjs +3 -3
  398. package/esm2020/services/localCache.service.mjs +3 -3
  399. package/esm2020/services/master-data.service.mjs +3 -3
  400. package/esm2020/services/menu.service.mjs +3 -3
  401. package/esm2020/services/newscategory.service.mjs +3 -3
  402. package/esm2020/services/notification.service.mjs +3 -3
  403. package/esm2020/services/notifier.service.mjs +3 -3
  404. package/esm2020/services/organization.service.mjs +3 -3
  405. package/esm2020/services/permission.service.mjs +3 -3
  406. package/esm2020/services/position.service.mjs +3 -3
  407. package/esm2020/services/print.service.mjs +3 -3
  408. package/esm2020/services/random-data.service.mjs +3 -3
  409. package/esm2020/services/role.service.mjs +3 -3
  410. package/esm2020/services/signalr.service.mjs +3 -3
  411. package/esm2020/services/storage-updated.service.mjs +3 -3
  412. package/esm2020/services/storage.service.mjs +3 -3
  413. package/esm2020/services/template-text-v4.service.mjs +3 -3
  414. package/esm2020/services/template-v4.service.mjs +3 -3
  415. package/esm2020/services/template.service.mjs +3 -3
  416. package/esm2020/services/templateinstance.service.mjs +3 -3
  417. package/esm2020/services/tn-client.service.mjs +3 -3
  418. package/esm2020/services/unique-number.service.mjs +3 -3
  419. package/esm2020/services/user-group-real.service.mjs +3 -3
  420. package/esm2020/services/user-group.service.mjs +3 -3
  421. package/esm2020/services/user-v5.service.mjs +3 -3
  422. package/esm2020/services/user.service.mjs +3 -3
  423. package/esm2020/services/virtual-base.service.mjs +3 -3
  424. package/esm2020/tnx-shared.module.mjs +6 -6
  425. package/fesm2015/tnx-shared.mjs +7269 -7277
  426. package/fesm2015/tnx-shared.mjs.map +1 -1
  427. package/fesm2020/tnx-shared.mjs +9215 -9223
  428. package/fesm2020/tnx-shared.mjs.map +1 -1
  429. package/{tnx-shared.d.ts → index.d.ts} +0 -0
  430. package/package.json +4 -4
  431. package/pipes/approval.pipe.d.ts +1 -1
  432. package/pipes/boolean-format.pipe.d.ts +1 -1
  433. package/pipes/convertMoneyToWord.pipe.d.ts +1 -1
  434. package/pipes/file-icon.pipe.d.ts +1 -1
  435. package/pipes/file-size.pipe.d.ts +1 -1
  436. package/pipes/highlight.pipe.d.ts +1 -1
  437. package/pipes/html-format.pipe.d.ts +1 -1
  438. package/pipes/masterData.pipe.d.ts +1 -1
  439. package/pipes/multiple-reference-data-format.pipe.d.ts +1 -1
  440. package/pipes/organization-format.pipe.d.ts +1 -1
  441. package/pipes/organization-name-format.pipe.d.ts +1 -1
  442. package/pipes/organizations-format.pipe.d.ts +1 -1
  443. package/pipes/reference-data-format.pipe.d.ts +1 -1
  444. package/pipes/safe-html.pipe.d.ts +1 -1
  445. package/pipes/safe-style.pipe.d.ts +1 -1
  446. package/pipes/safe-url.pipe.d.ts +1 -1
  447. package/pipes/secure.pipe.d.ts +1 -1
  448. package/pipes/string-format.pipe.d.ts +1 -1
  449. package/pipes/summary.pipe.d.ts +1 -1
  450. package/pipes/tn-date.pipe.d.ts +1 -1
  451. package/pipes/user-format.pipe.d.ts +1 -1
  452. package/pipes/users-format.pipe.d.ts +1 -1
@@ -17,15 +17,15 @@ import * as i3 from "@ngx-translate/core";
17
17
  import * as i4 from "ngx-device-detector";
18
18
  import * as i5 from "../../../services/localCache.service";
19
19
  import * as i6 from "../../../services/environment.service";
20
- import * as i7 from "../../tn-custom-scrollbar/tn-custom-scrollbar.component";
21
- import * as i8 from "../crud-form/crud-form.component";
22
- import * as i9 from "../../query-builders/query-builder/query-builder.component";
23
- import * as i10 from "../../after-view-checked/after-view-checked.component";
24
- import * as i11 from "@angular/forms";
25
- import * as i12 from "tn-custom-primeng/inputtext";
26
- import * as i13 from "tn-custom-primeng/tooltip";
27
- import * as i14 from "@angular/common";
28
- import * as i15 from "tn-custom-primeng/button";
20
+ import * as i7 from "@angular/common";
21
+ import * as i8 from "tn-custom-primeng/button";
22
+ import * as i9 from "tn-custom-primeng/tooltip";
23
+ import * as i10 from "@angular/forms";
24
+ import * as i11 from "tn-custom-primeng/inputtext";
25
+ import * as i12 from "../../after-view-checked/after-view-checked.component";
26
+ import * as i13 from "../crud-form/crud-form.component";
27
+ import * as i14 from "../../tn-custom-scrollbar/tn-custom-scrollbar.component";
28
+ import * as i15 from "../../query-builders/query-builder/query-builder.component";
29
29
  // import { CrudFormComponent } from '../crud-form/crud-form.component';
30
30
  export class AdvanceSearchComponent extends ComponentBase {
31
31
  constructor(_customRouterService, _injector, _notifierService, _translateService, _deviceDetectorService, _localCacheService, _renderer, _environmentService) {
@@ -461,8 +461,8 @@ export class AdvanceSearchComponent extends ComponentBase {
461
461
  this.onOverlayHide();
462
462
  }
463
463
  }
464
- AdvanceSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: AdvanceSearchComponent, deps: [{ token: i1.CustomRouterService }, { token: i0.Injector }, { token: i2.NotifierService }, { token: i3.TranslateService }, { token: i4.DeviceDetectorService }, { token: i5.LocalCacheService }, { token: i0.Renderer2 }, { token: i6.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
465
- AdvanceSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.6", type: AdvanceSearchComponent, selector: "advance-search", inputs: { parentSetting: "parentSetting", searchInfo: "searchInfo", allowLoadDataWhenParentNull: "allowLoadDataWhenParentNull", loading: "loading" }, outputs: { onSearch: "onSearch", onFormEvent: "onFormEvent", onInit: "onInit" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "el", first: true, predicate: ["el"], descendants: true }, { propertyName: "overlayPanel", first: true, predicate: ["overlayPanel"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #el class=\"box-advance-search-inline p-inputgroup\">\r\n <input type=\"text\" pInputText placeholder=\"Nh\u1EADp t\u1EEB kh\u00F3a t\u00ECm ki\u1EBFm\" [pTooltip]=\"searchBoxTooltip\"\r\n tooltipStyleClass=\"wrap max-width-300\" tooltipPosition=\"top\" [(ngModel)]=\"keyword\" (change)=\"onChanged($event)\"\r\n (keyup.esc)=\"onEsc($event)\"\r\n [disabled]=\"parentSetting.fieldSearchText && parentSetting.fieldSearchText.length > 0? false: true\" />\r\n <span\r\n [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading, 'dirty': keyword != null && keyword != ''}\"\r\n [pTooltip]=\"'X\u00F3a t\u00ECm ki\u1EBFm'\" tooltipPosition=\"top\" (click)=\"clearKeyword()\">\r\n <i class=\"pi pi-filter-slash\"></i>\r\n </span>\r\n <span [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading}\" [pTooltip]=\"'T\u00ECm ki\u1EBFm'\"\r\n tooltipPosition=\"top\" (click)=\"onDoSearching()\">\r\n <i class=\"pi pi-search\"></i>\r\n </span>\r\n <span class=\"container-search-dialog p-inputgroup-addon action action-trigger\" tabindex=\"0\" [class.show]=\"showForm\"\r\n [pTooltip]=\"'T\u00ECm ki\u1EBFm n\u00E2ng cao'\" tooltipPosition=\"top\">\r\n <span (click)=\"showFormSearch()\">\r\n <i class=\"pi pi-caret-down\"></i>\r\n </span>\r\n </span>\r\n <ng-container *ngIf=\"showForm\">\r\n <div #overlayPanel\r\n class=\"advance-search-overlay-panel filter-content p-overlaypanel p-widget-content fadeInDown advance-search-box\"\r\n [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: overlayShowTransitionOptions, hideTransitionParams: overlayHideTransitionOptions}}\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keyup.enter)=\"onDoSearching()\"\r\n (keyup.esc)=\"hideFormSearch()\" (mousedown)=\"onClick($event)\">\r\n <!-- <a class=\"advance-filter-close ng-star-inserted\" href=\"javascript:void(0);\" (click)=\"hideFormSearch()\"><i\r\n class=\"pi pi-times\"></i></a> -->\r\n <ng-container *ngIf=\"parentSetting.filterTemplateAdvs\">\r\n <tn-custom-scrollbar #scrollbar\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline' }\">\r\n <crud-form *ngIf=\"ready\" #crudForm [data]=\"modelCrudForm\" [setting]=\"setting\" [context]=\"context\"\r\n [disableKeypressControl]=\"true\" [disableCaching]=\"true\" (onFormShow)=\"onFormShow($event)\"\r\n (onFormHide)=\"onFormHide($event)\">\r\n </crud-form>\r\n </tn-custom-scrollbar>\r\n <div class=\"footer-search\">\r\n <button type=\"button\" pButton icon=\"pi pi-search\" class=\"p-button-text p-button-info\"\r\n [label]=\"'T\u00ECm ki\u1EBFm' | translate\" (click)=\"onDoSearching()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'X\u00F3a t\u00ECm ki\u1EBFm' | translate\" (click)=\"clearSearch($event)\" preventTab></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!parentSetting.filterTemplateAdvs\">\r\n <query-builder [searchSchema]=\"setting.schema\" [filters]=\"filter_query\"\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline'}\"\r\n (onSave)=\"handleSaveSetting($event)\" (onDeleteSave)=\"handleDeleteSaveSetting()\"\r\n (onSearch)=\"handleSearchBuilder($event)\"></query-builder>\r\n </ng-container>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"handleAdvanceSearchPanelRendered()\">\r\n </after-view-checked>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".advance-search-box{border:1px solid #eee;border-radius:0;overflow:hidden}.advance-filter-close{position:absolute;z-index:1;right:3px;top:3px;font-size:.9em;color:#666;background:#fff}.action-trigger{padding:0;outline:none}.action-trigger>span:first-child{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.footer-search{background:#f7f7f7;border-top:1px solid #dee2e6;padding:10px;padding-right:1rem;position:sticky;bottom:0}.box-advance-search-inline{justify-content:flex-end}.box-advance-search-inline input{padding:5px 12px}.box-advance-search-inline .action{cursor:pointer}.box-advance-search-inline .action.dirty{color:#008eff;pointer-events:unset}.box-advance-search-inline .action.disabled{background:#e9ecef;color:#d6d6d6;pointer-events:none;cursor:unset}.box-advance-search-inline .action:hover{background:#f5f6f8}::ng-deep .advance-search-mask-overlay{position:fixed;left:0;top:0;right:0;bottom:0;background:#00000025;z-index:999}::ng-deep .advance-search-overlay-panel{width:800px;position:fixed;max-width:calc(100vw - 2rem);padding:0;z-index:1000;margin-top:0;animation-duration:.5s;border:0px;box-shadow:0 6px 12px #00000042}::ng-deep .advance-search-overlay-panel perfect-scrollbar{display:flex;flex-direction:column}::ng-deep .advance-search-overlay-panel:not(.hide){display:block!important}@media (min-width: 768px){.box-advance-search-inline input{max-width:300px}}\n"], components: [{ type: i7.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { type: i8.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { type: i9.QueryBuilderComponent, selector: "query-builder", inputs: ["searchSchema", "filters", "style", "styleClass", "useScrollBar", "hiddenButtons"], outputs: ["onSearch", "onSave", "onDeleteSave"] }, { type: i10.AfterViewCheckedComponent, selector: "after-view-checked", inputs: ["renderKey"], outputs: ["loaded", "loading", "unloading", "reRender"] }], directives: [{ type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i12.InputText, selector: "[pInputText]" }, { type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "tooltipDisabled", "pTooltip", "positionStyle", "tooltipStyleClass", "showDelay", "hideDelay", "life"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i15.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }], pipes: { "translate": i3.TranslatePipe }, animations: [
464
+ AdvanceSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: AdvanceSearchComponent, deps: [{ token: i1.CustomRouterService }, { token: i0.Injector }, { token: i2.NotifierService }, { token: i3.TranslateService }, { token: i4.DeviceDetectorService }, { token: i5.LocalCacheService }, { token: i0.Renderer2 }, { token: i6.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
465
+ AdvanceSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: AdvanceSearchComponent, selector: "advance-search", inputs: { parentSetting: "parentSetting", searchInfo: "searchInfo", allowLoadDataWhenParentNull: "allowLoadDataWhenParentNull", loading: "loading" }, outputs: { onSearch: "onSearch", onFormEvent: "onFormEvent", onInit: "onInit" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "el", first: true, predicate: ["el"], descendants: true }, { propertyName: "overlayPanel", first: true, predicate: ["overlayPanel"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #el class=\"box-advance-search-inline p-inputgroup\">\r\n <input type=\"text\" pInputText placeholder=\"Nh\u1EADp t\u1EEB kh\u00F3a t\u00ECm ki\u1EBFm\" [pTooltip]=\"searchBoxTooltip\"\r\n tooltipStyleClass=\"wrap max-width-300\" tooltipPosition=\"top\" [(ngModel)]=\"keyword\" (change)=\"onChanged($event)\"\r\n (keyup.esc)=\"onEsc($event)\"\r\n [disabled]=\"parentSetting.fieldSearchText && parentSetting.fieldSearchText.length > 0? false: true\" />\r\n <span\r\n [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading, 'dirty': keyword != null && keyword != ''}\"\r\n [pTooltip]=\"'X\u00F3a t\u00ECm ki\u1EBFm'\" tooltipPosition=\"top\" (click)=\"clearKeyword()\">\r\n <i class=\"pi pi-filter-slash\"></i>\r\n </span>\r\n <span [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading}\" [pTooltip]=\"'T\u00ECm ki\u1EBFm'\"\r\n tooltipPosition=\"top\" (click)=\"onDoSearching()\">\r\n <i class=\"pi pi-search\"></i>\r\n </span>\r\n <span class=\"container-search-dialog p-inputgroup-addon action action-trigger\" tabindex=\"0\" [class.show]=\"showForm\"\r\n [pTooltip]=\"'T\u00ECm ki\u1EBFm n\u00E2ng cao'\" tooltipPosition=\"top\">\r\n <span (click)=\"showFormSearch()\">\r\n <i class=\"pi pi-caret-down\"></i>\r\n </span>\r\n </span>\r\n <ng-container *ngIf=\"showForm\">\r\n <div #overlayPanel\r\n class=\"advance-search-overlay-panel filter-content p-overlaypanel p-widget-content fadeInDown advance-search-box\"\r\n [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: overlayShowTransitionOptions, hideTransitionParams: overlayHideTransitionOptions}}\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keyup.enter)=\"onDoSearching()\"\r\n (keyup.esc)=\"hideFormSearch()\" (mousedown)=\"onClick($event)\">\r\n <!-- <a class=\"advance-filter-close ng-star-inserted\" href=\"javascript:void(0);\" (click)=\"hideFormSearch()\"><i\r\n class=\"pi pi-times\"></i></a> -->\r\n <ng-container *ngIf=\"parentSetting.filterTemplateAdvs\">\r\n <tn-custom-scrollbar #scrollbar\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline' }\">\r\n <crud-form *ngIf=\"ready\" #crudForm [data]=\"modelCrudForm\" [setting]=\"setting\" [context]=\"context\"\r\n [disableKeypressControl]=\"true\" [disableCaching]=\"true\" (onFormShow)=\"onFormShow($event)\"\r\n (onFormHide)=\"onFormHide($event)\">\r\n </crud-form>\r\n </tn-custom-scrollbar>\r\n <div class=\"footer-search\">\r\n <button type=\"button\" pButton icon=\"pi pi-search\" class=\"p-button-text p-button-info\"\r\n [label]=\"'T\u00ECm ki\u1EBFm' | translate\" (click)=\"onDoSearching()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'X\u00F3a t\u00ECm ki\u1EBFm' | translate\" (click)=\"clearSearch($event)\" preventTab></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!parentSetting.filterTemplateAdvs\">\r\n <query-builder [searchSchema]=\"setting.schema\" [filters]=\"filter_query\"\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline'}\"\r\n (onSave)=\"handleSaveSetting($event)\" (onDeleteSave)=\"handleDeleteSaveSetting()\"\r\n (onSearch)=\"handleSearchBuilder($event)\"></query-builder>\r\n </ng-container>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"handleAdvanceSearchPanelRendered()\">\r\n </after-view-checked>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".advance-search-box{border:1px solid #eee;border-radius:0;overflow:hidden}.advance-filter-close{position:absolute;z-index:1;right:3px;top:3px;font-size:.9em;color:#666;background:#fff}.action-trigger{padding:0;outline:none}.action-trigger>span:first-child{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.footer-search{background:#f7f7f7;border-top:1px solid #dee2e6;padding:10px;padding-right:1rem;position:sticky;bottom:0}.box-advance-search-inline{justify-content:flex-end}.box-advance-search-inline input{padding:5px 12px}.box-advance-search-inline .action{cursor:pointer}.box-advance-search-inline .action.dirty{color:#008eff;pointer-events:unset}.box-advance-search-inline .action.disabled{background:#e9ecef;color:#d6d6d6;pointer-events:none;cursor:unset}.box-advance-search-inline .action:hover{background:#f5f6f8}::ng-deep .advance-search-mask-overlay{position:fixed;left:0;top:0;right:0;bottom:0;background:rgba(0,0,0,.1450980392);z-index:999}::ng-deep .advance-search-overlay-panel{width:800px;position:fixed;max-width:calc(100vw - 2rem);padding:0;z-index:1000;margin-top:0;animation-duration:.5s;border:0px;box-shadow:0 6px 12px #00000042}::ng-deep .advance-search-overlay-panel perfect-scrollbar{display:flex;flex-direction:column}::ng-deep .advance-search-overlay-panel:not(.hide){display:block!important}@media (min-width: 768px){.box-advance-search-inline input{max-width:300px}}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "tooltipDisabled", "pTooltip", "positionStyle", "tooltipStyleClass", "showDelay", "hideDelay", "life"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.InputText, selector: "[pInputText]" }, { kind: "component", type: i12.AfterViewCheckedComponent, selector: "after-view-checked", inputs: ["renderKey"], outputs: ["loaded", "loading", "unloading", "reRender"] }, { kind: "component", type: i13.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i14.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i15.QueryBuilderComponent, selector: "query-builder", inputs: ["searchSchema", "filters", "style", "styleClass", "useScrollBar", "hiddenButtons"], outputs: ["onSearch", "onSave", "onDeleteSave"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [
466
466
  trigger('overlayAnimation', [
467
467
  transition(':enter', [
468
468
  style({ opacity: 0, transform: 'scaleY(0.8)' }),
@@ -473,7 +473,7 @@ AdvanceSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
473
473
  ])
474
474
  ])
475
475
  ] });
476
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: AdvanceSearchComponent, decorators: [{
476
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: AdvanceSearchComponent, decorators: [{
477
477
  type: Component,
478
478
  args: [{ selector: 'advance-search', providers: [ComponentContextService], animations: [
479
479
  trigger('overlayAnimation', [
@@ -485,7 +485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImpor
485
485
  animate('{{hideTransitionParams}}', style({ opacity: 0 }))
486
486
  ])
487
487
  ])
488
- ], template: "<div #el class=\"box-advance-search-inline p-inputgroup\">\r\n <input type=\"text\" pInputText placeholder=\"Nh\u1EADp t\u1EEB kh\u00F3a t\u00ECm ki\u1EBFm\" [pTooltip]=\"searchBoxTooltip\"\r\n tooltipStyleClass=\"wrap max-width-300\" tooltipPosition=\"top\" [(ngModel)]=\"keyword\" (change)=\"onChanged($event)\"\r\n (keyup.esc)=\"onEsc($event)\"\r\n [disabled]=\"parentSetting.fieldSearchText && parentSetting.fieldSearchText.length > 0? false: true\" />\r\n <span\r\n [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading, 'dirty': keyword != null && keyword != ''}\"\r\n [pTooltip]=\"'X\u00F3a t\u00ECm ki\u1EBFm'\" tooltipPosition=\"top\" (click)=\"clearKeyword()\">\r\n <i class=\"pi pi-filter-slash\"></i>\r\n </span>\r\n <span [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading}\" [pTooltip]=\"'T\u00ECm ki\u1EBFm'\"\r\n tooltipPosition=\"top\" (click)=\"onDoSearching()\">\r\n <i class=\"pi pi-search\"></i>\r\n </span>\r\n <span class=\"container-search-dialog p-inputgroup-addon action action-trigger\" tabindex=\"0\" [class.show]=\"showForm\"\r\n [pTooltip]=\"'T\u00ECm ki\u1EBFm n\u00E2ng cao'\" tooltipPosition=\"top\">\r\n <span (click)=\"showFormSearch()\">\r\n <i class=\"pi pi-caret-down\"></i>\r\n </span>\r\n </span>\r\n <ng-container *ngIf=\"showForm\">\r\n <div #overlayPanel\r\n class=\"advance-search-overlay-panel filter-content p-overlaypanel p-widget-content fadeInDown advance-search-box\"\r\n [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: overlayShowTransitionOptions, hideTransitionParams: overlayHideTransitionOptions}}\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keyup.enter)=\"onDoSearching()\"\r\n (keyup.esc)=\"hideFormSearch()\" (mousedown)=\"onClick($event)\">\r\n <!-- <a class=\"advance-filter-close ng-star-inserted\" href=\"javascript:void(0);\" (click)=\"hideFormSearch()\"><i\r\n class=\"pi pi-times\"></i></a> -->\r\n <ng-container *ngIf=\"parentSetting.filterTemplateAdvs\">\r\n <tn-custom-scrollbar #scrollbar\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline' }\">\r\n <crud-form *ngIf=\"ready\" #crudForm [data]=\"modelCrudForm\" [setting]=\"setting\" [context]=\"context\"\r\n [disableKeypressControl]=\"true\" [disableCaching]=\"true\" (onFormShow)=\"onFormShow($event)\"\r\n (onFormHide)=\"onFormHide($event)\">\r\n </crud-form>\r\n </tn-custom-scrollbar>\r\n <div class=\"footer-search\">\r\n <button type=\"button\" pButton icon=\"pi pi-search\" class=\"p-button-text p-button-info\"\r\n [label]=\"'T\u00ECm ki\u1EBFm' | translate\" (click)=\"onDoSearching()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'X\u00F3a t\u00ECm ki\u1EBFm' | translate\" (click)=\"clearSearch($event)\" preventTab></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!parentSetting.filterTemplateAdvs\">\r\n <query-builder [searchSchema]=\"setting.schema\" [filters]=\"filter_query\"\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline'}\"\r\n (onSave)=\"handleSaveSetting($event)\" (onDeleteSave)=\"handleDeleteSaveSetting()\"\r\n (onSearch)=\"handleSearchBuilder($event)\"></query-builder>\r\n </ng-container>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"handleAdvanceSearchPanelRendered()\">\r\n </after-view-checked>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".advance-search-box{border:1px solid #eee;border-radius:0;overflow:hidden}.advance-filter-close{position:absolute;z-index:1;right:3px;top:3px;font-size:.9em;color:#666;background:#fff}.action-trigger{padding:0;outline:none}.action-trigger>span:first-child{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.footer-search{background:#f7f7f7;border-top:1px solid #dee2e6;padding:10px;padding-right:1rem;position:sticky;bottom:0}.box-advance-search-inline{justify-content:flex-end}.box-advance-search-inline input{padding:5px 12px}.box-advance-search-inline .action{cursor:pointer}.box-advance-search-inline .action.dirty{color:#008eff;pointer-events:unset}.box-advance-search-inline .action.disabled{background:#e9ecef;color:#d6d6d6;pointer-events:none;cursor:unset}.box-advance-search-inline .action:hover{background:#f5f6f8}::ng-deep .advance-search-mask-overlay{position:fixed;left:0;top:0;right:0;bottom:0;background:#00000025;z-index:999}::ng-deep .advance-search-overlay-panel{width:800px;position:fixed;max-width:calc(100vw - 2rem);padding:0;z-index:1000;margin-top:0;animation-duration:.5s;border:0px;box-shadow:0 6px 12px #00000042}::ng-deep .advance-search-overlay-panel perfect-scrollbar{display:flex;flex-direction:column}::ng-deep .advance-search-overlay-panel:not(.hide){display:block!important}@media (min-width: 768px){.box-advance-search-inline input{max-width:300px}}\n"] }]
488
+ ], template: "<div #el class=\"box-advance-search-inline p-inputgroup\">\r\n <input type=\"text\" pInputText placeholder=\"Nh\u1EADp t\u1EEB kh\u00F3a t\u00ECm ki\u1EBFm\" [pTooltip]=\"searchBoxTooltip\"\r\n tooltipStyleClass=\"wrap max-width-300\" tooltipPosition=\"top\" [(ngModel)]=\"keyword\" (change)=\"onChanged($event)\"\r\n (keyup.esc)=\"onEsc($event)\"\r\n [disabled]=\"parentSetting.fieldSearchText && parentSetting.fieldSearchText.length > 0? false: true\" />\r\n <span\r\n [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading, 'dirty': keyword != null && keyword != ''}\"\r\n [pTooltip]=\"'X\u00F3a t\u00ECm ki\u1EBFm'\" tooltipPosition=\"top\" (click)=\"clearKeyword()\">\r\n <i class=\"pi pi-filter-slash\"></i>\r\n </span>\r\n <span [ngClass]=\"{'p-inputgroup-addon': true, 'action': true, 'disabled': loading}\" [pTooltip]=\"'T\u00ECm ki\u1EBFm'\"\r\n tooltipPosition=\"top\" (click)=\"onDoSearching()\">\r\n <i class=\"pi pi-search\"></i>\r\n </span>\r\n <span class=\"container-search-dialog p-inputgroup-addon action action-trigger\" tabindex=\"0\" [class.show]=\"showForm\"\r\n [pTooltip]=\"'T\u00ECm ki\u1EBFm n\u00E2ng cao'\" tooltipPosition=\"top\">\r\n <span (click)=\"showFormSearch()\">\r\n <i class=\"pi pi-caret-down\"></i>\r\n </span>\r\n </span>\r\n <ng-container *ngIf=\"showForm\">\r\n <div #overlayPanel\r\n class=\"advance-search-overlay-panel filter-content p-overlaypanel p-widget-content fadeInDown advance-search-box\"\r\n [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: overlayShowTransitionOptions, hideTransitionParams: overlayHideTransitionOptions}}\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keyup.enter)=\"onDoSearching()\"\r\n (keyup.esc)=\"hideFormSearch()\" (mousedown)=\"onClick($event)\">\r\n <!-- <a class=\"advance-filter-close ng-star-inserted\" href=\"javascript:void(0);\" (click)=\"hideFormSearch()\"><i\r\n class=\"pi pi-times\"></i></a> -->\r\n <ng-container *ngIf=\"parentSetting.filterTemplateAdvs\">\r\n <tn-custom-scrollbar #scrollbar\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline' }\">\r\n <crud-form *ngIf=\"ready\" #crudForm [data]=\"modelCrudForm\" [setting]=\"setting\" [context]=\"context\"\r\n [disableKeypressControl]=\"true\" [disableCaching]=\"true\" (onFormShow)=\"onFormShow($event)\"\r\n (onFormHide)=\"onFormHide($event)\">\r\n </crud-form>\r\n </tn-custom-scrollbar>\r\n <div class=\"footer-search\">\r\n <button type=\"button\" pButton icon=\"pi pi-search\" class=\"p-button-text p-button-info\"\r\n [label]=\"'T\u00ECm ki\u1EBFm' | translate\" (click)=\"onDoSearching()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'X\u00F3a t\u00ECm ki\u1EBFm' | translate\" (click)=\"clearSearch($event)\" preventTab></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!parentSetting.filterTemplateAdvs\">\r\n <query-builder [searchSchema]=\"setting.schema\" [filters]=\"filter_query\"\r\n [style]=\"{ maxHeight: _searchBoxMaxHeight, minHeight: '300px', height: 'auto', parentClass: 'box-advance-search-inline'}\"\r\n (onSave)=\"handleSaveSetting($event)\" (onDeleteSave)=\"handleDeleteSaveSetting()\"\r\n (onSearch)=\"handleSearchBuilder($event)\"></query-builder>\r\n </ng-container>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"handleAdvanceSearchPanelRendered()\">\r\n </after-view-checked>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".advance-search-box{border:1px solid #eee;border-radius:0;overflow:hidden}.advance-filter-close{position:absolute;z-index:1;right:3px;top:3px;font-size:.9em;color:#666;background:#fff}.action-trigger{padding:0;outline:none}.action-trigger>span:first-child{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.footer-search{background:#f7f7f7;border-top:1px solid #dee2e6;padding:10px;padding-right:1rem;position:sticky;bottom:0}.box-advance-search-inline{justify-content:flex-end}.box-advance-search-inline input{padding:5px 12px}.box-advance-search-inline .action{cursor:pointer}.box-advance-search-inline .action.dirty{color:#008eff;pointer-events:unset}.box-advance-search-inline .action.disabled{background:#e9ecef;color:#d6d6d6;pointer-events:none;cursor:unset}.box-advance-search-inline .action:hover{background:#f5f6f8}::ng-deep .advance-search-mask-overlay{position:fixed;left:0;top:0;right:0;bottom:0;background:rgba(0,0,0,.1450980392);z-index:999}::ng-deep .advance-search-overlay-panel{width:800px;position:fixed;max-width:calc(100vw - 2rem);padding:0;z-index:1000;margin-top:0;animation-duration:.5s;border:0px;box-shadow:0 6px 12px #00000042}::ng-deep .advance-search-overlay-panel perfect-scrollbar{display:flex;flex-direction:column}::ng-deep .advance-search-overlay-panel:not(.hide){display:block!important}@media (min-width: 768px){.box-advance-search-inline input{max-width:300px}}\n"] }]
489
489
  }], ctorParameters: function () { return [{ type: i1.CustomRouterService }, { type: i0.Injector }, { type: i2.NotifierService }, { type: i3.TranslateService }, { type: i4.DeviceDetectorService }, { type: i5.LocalCacheService }, { type: i0.Renderer2 }, { type: i6.EnvironmentService }]; }, propDecorators: { el: [{
490
490
  type: ViewChild,
491
491
  args: ['el']
@@ -507,4 +507,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImpor
507
507
  }], onInit: [{
508
508
  type: Output
509
509
  }] } });
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZS1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jcnVkL2FkdmFuY2Utc2VhcmNoL2FkdmFuY2Utc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvY3J1ZC9hZHZhbmNlLXNlYXJjaC9hZHZhbmNlLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFrQixLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFGLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxl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dEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixhQUFhO3NCQUFyQixLQUFLO2dCQUVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBV0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uRXZlbnQsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9kb20nO1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IElDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2VudW1zJztcclxuaW1wb3J0IHsgRGF0ZVRpbWVDb250cm9sU2NoZW1hLCBGb3JtU2NoZW1hQmFzZSwgVGV4dENvbnRyb2xTY2hlbWEgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9jYWxDYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sb2NhbENhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IFNlYXJjaEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VhcmNoJztcclxuaW1wb3J0IHsgQ3J1ZEZvcm1EYXRhIH0gZnJvbSAnLi4vbW9kZWxzL2NydWQtYmFzZSc7XHJcbmltcG9ydCB7IEFkdmFuY2VTZWFyY2hEYXRhLCBBZHZhbmNlU2VhcmNoU2V0dGluZyB9IGZyb20gJy4uL21vZGVscy9jcnVkLWJhc2Utc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBDcnVkTGlzdFNldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvY3J1ZC1saXN0LXNldHRpbmdzJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuXHJcbi8vIGltcG9ydCB7IENydWRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQnO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ2FkdmFuY2Utc2VhcmNoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdLFxyXG4gICAgYW5pbWF0aW9uczogW1xyXG4gICAgICAgIHRyaWdnZXIoJ292ZXJsYXlBbmltYXRpb24nLCBbXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVZKDAuOCknIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgne3tzaG93VHJhbnNpdGlvblBhcmFtc319JylcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcclxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJ3t7aGlkZVRyYW5zaXRpb25QYXJhbXN9fScsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSlcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkdmFuY2VTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBJQ29tcG9uZW50QmFzZSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZWwnKSBlbDogRWxlbWVudFJlZjtcclxuICAgIC8vIEBWaWV3Q2hpbGQoJ2NydWRGb3JtJykgY3J1ZEZvcm06IENydWRGb3JtQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnb3ZlcmxheVBhbmVsJykgb3ZlcmxheVBhbmVsOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBJbnB1dCgpIHBhcmVudFNldHRpbmc6IENydWRMaXN0U2V0dGluZztcclxuICAgIF9zZWFyY2hJbmZvOiBTZWFyY2hJbmZvO1xyXG4gICAgQElucHV0KCkgc2V0IHNlYXJjaEluZm8odmFsdWU6IFNlYXJjaEluZm8pIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hJbmZvID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlYXJjaEluZm8gJiYgdGhpcy5fc2VhcmNoSW5mby5zY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZ2V0IHNlYXJjaEluZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEluZm87XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgYWxsb3dMb2FkRGF0YVdoZW5QYXJlbnROdWxsID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRm9ybUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgX292ZXJsYXlQYW5lbDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBvdmVybGF5U2hvd1RyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnLjEycyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSc7XHJcbiAgICBvdmVybGF5SGlkZVRyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnLjFzIGxpbmVhcic7XHJcbiAgICBhbGlnbk92ZXJsYXlUaW1lb3V0ID0gbnVsbDtcclxuXHJcbiAgICBtYXNrT3ZlcmxheTogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBtYXNrQ2xpY2tMaXN0ZW5lcjogRnVuY3Rpb247XHJcblxyXG4gICAgZG9jdW1lbnRSZXNpemVMaXN0ZW5lcjogYW55O1xyXG5cclxuICAgIGtleXdvcmQgPSAnJztcclxuICAgIG1vZGVsOiBBZHZhbmNlU2VhcmNoRGF0YSA9IG5ldyBBZHZhbmNlU2VhcmNoRGF0YSgpO1xyXG4gICAgbW9kZWxDcnVkRm9ybTogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2V0dGluZzogQWR2YW5jZVNlYXJjaFNldHRpbmcgPSBuZXcgQWR2YW5jZVNlYXJjaFNldHRpbmcoKTtcclxuICAgIHJlYWR5ID0gZmFsc2U7XHJcbiAgICBuZWVkQ2xlYXJUeXBlZFZhbHVlcyA9IHRydWU7XHJcbiAgICBzbmFwU2hvdCA9ICcnO1xyXG5cclxuICAgIGZpZWxkUGFyZW50TWFwOiBhbnkgPSB7fTtcclxuXHJcbiAgICB0YXJnZXQ6IGFueTtcclxuXHJcbiAgICBzaG93Rm9ybSA9IGZhbHNlO1xyXG4gICAgc2VhcmNoQm94VG9vbHRpcDtcclxuXHJcbiAgICBmaWx0ZXJfZm9ybTogRmlsdGVyW10gPSBbXTsgLy8gU2VhcmNoIG7hur91IHPhu60gZOG7pW5nIGNydWQgKEtoYWkgYsOhbyB0ZW1wbGF0ZSBmaWx0ZXIpXHJcbiAgICBmaWx0ZXJfa2V5d29yZDogRmlsdGVyW10gPSBbXTsgLy8gU2VhcmNoIHThu6sga2jDs2FcclxuICAgIGZpbHRlcl9xdWVyeTogRmlsdGVyW10gPSBbXTsgLy8gU2VhcmNoIG7hur91IHPhu60gZOG7pW5nIHF1ZXJ5IGJ1aWxkZXJcclxuXHJcbiAgICBfc2VhcmNoQm94TWF4SGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9jYWxDYWNoZVNlcnZpY2U6IExvY2FsQ2FjaGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSBfZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U2F2ZWRGaWx0ZXJzKCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzLmdldEZpbHRlcnMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdERhdGEoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaEluZm8gfHwgdGhpcy5zZWFyY2hJbmZvLnNjaGVtYSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hCb3hUb29sdGlwID0gdGhpcy5zZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEgPSA8Rm9ybVNjaGVtYUJhc2VbXT4odGhpcy5zZWFyY2hJbmZvLnNjaGVtYSk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkRHJvcGRvd24gPSB0aGlzLnNlYXJjaEluZm8uZmllbGREcm9wZG93bjtcclxuICAgICAgICB0aGlzLnNldHRpbmcua2VlcEluaXRTZWFyY2hEYXRhTm90TnVsbCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnRTZXR0aW5nLmZ1bmN0aW9uLm1vZGlmeUFkdmFuY2VTZWFjaE1vZGVsKHRoaXMubW9kZWwsIHRoaXMuc2V0dGluZyk7XHJcblxyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMubW9kZWwuaW5pdERhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1vZGVsLmluaXREYXRhW2tleV0gPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW2tleV0gPSB0aGlzLm1vZGVsLmluaXREYXRhW2tleV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVtrZXldID0gdGhpcy5tb2RlbC5pbml0RGF0YVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEuZm9yRWFjaChzY2hlbWEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gPERyb3Bkb3duQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgICAgICBfc2NoZW1hLmFmdGVyR2V0RGF0YSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV9zY2hlbWEuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IF9zY2hlbWEuZGF0YVNvdXJjZS5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PSB0aGlzLm1vZGVsLmRhdGFbc2NoZW1hLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVtzY2hlbWEuZmllbGRdID0gaXRlbVNlbGVjdGVkLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF9zY2hlbWEuYXBwZW5kVG8gPSAnYm9keSc7XHJcbiAgICAgICAgICAgICAgICBfc2NoZW1hLnBhbmVsQ2xhc3MgPSAnZHJvcGRvd24tYWR2cyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZGlzYWJsZURlZmF1bHRTZXR0aW5nQ2FjaGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhRGVmYXVsdCh0aGlzLnNldHRpbmcuc2NoZW1hKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWxDcnVkRm9ybS5kYXRhID0gdGhpcy5tb2RlbC5kYXRhO1xyXG4gICAgICAgIHRoaXMubW9kZWxDcnVkRm9ybS5kYXRhLmtleSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhRGVmYXVsdChmb3JtU2NoZW1hOiBGb3JtU2NoZW1hQmFzZVtdKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YUNhY2hlID0gdGhpcy5fbG9jYWxDYWNoZVNlcnZpY2UuZ2V0RGF0YURlZmF1bHQoKTtcclxuICAgICAgICBsZXQgYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGUgPSB0aGlzLnBhcmVudFNldHRpbmcuYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGU7XHJcbiAgICAgICAgaWYgKCFhZHZhbmNlU2VhcmNoRmllbGRDYWNoZSB8fCAhT2JqZWN0LmtleXMoYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGUpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBhZHZhbmNlU2VhcmNoRmllbGRDYWNoZSA9IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBsc3RGaWVsZEluZm8gPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0RmllbGRzSW5EZWZhdWx0U2V0dGluZygpO1xyXG4gICAgICAgICAgICBpZiAobHN0RmllbGRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBsc3RGaWVsZEluZm8uZm9yRWFjaChmaWVsZEluZm8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VTZWFyY2hGaWVsZENhY2hlW2ZpZWxkSW5mby5maWVsZF0gPSBmaWVsZEluZm8uZmllbGQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFkdmFuY2VTZWFyY2hGaWVsZENhY2hlIHx8ICFPYmplY3Qua2V5cyhhZHZhbmNlU2VhcmNoRmllbGRDYWNoZSkubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGUpLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybVNjaGVtYS5maW5kKHEgPT4gcS5maWVsZCA9PSBmaWVsZCk7XHJcbiAgICAgICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29udHJvbC5maWVsZCArIChjb250cm9sLnZhbHVlRmllbGQgPT0gJ2lkJyA/ICcnIDogY29udHJvbC52YWx1ZUZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YUNhY2hlW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFbY29udHJvbC5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YUNhY2hlW2NvbnRyb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW2NvbnRyb2wuZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlZChldnQpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcl9rZXl3b3JkID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAhPSBudWxsICYmIHRoaXMua2V5d29yZCAhPSAnJyAmJiB0aGlzLnBhcmVudFNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5V29yayA9IG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVLZXlXb3JrID0gSlNPTi5zdHJpbmdpZnkodGhpcy5rZXl3b3JkKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnRTZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcktleVdvcmsuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUtleVdvcmtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXlXb3JrLmZpbHRlcnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyX2tleXdvcmQucHVzaChmaWx0ZXJLZXlXb3JrLmZpbHRlcnNbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJfa2V5d29yZC5wdXNoKGZpbHRlcktleVdvcmspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVyZ2VGaWx0ZXJBbmRFbWl0KCk7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Fc2MoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jbGVhcktleXdvcmQoKTtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhcktleXdvcmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAhPSBudWxsICYmIHRoaXMua2V5d29yZCAhPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5rZXl3b3JkID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyX2tleXdvcmQgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5tZXJnZUZpbHRlckFuZEVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb1NlYXJjaGluZygpIHtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2VhcmNoQnVpbGRlcihldnQpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcl9xdWVyeSA9IGV2dDtcclxuICAgICAgICB0aGlzLm1lcmdlRmlsdGVyQW5kRW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TZWFyY2hpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtU2NoZW1hID0gdGhpcy5zZXR0aW5nLnNjaGVtYTtcclxuICAgICAgICBjb25zdCBtb2RlbEZpbHRlciA9IHRoaXMubW9kZWxDcnVkRm9ybS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmtlZXBJbml0U2VhcmNoRGF0YU5vdE51bGwpIHtcclxuICAgICAgICAgICAgLy8gUmVwbGFjZSBuaOG7r25nIGZpZWxkIGLhu4sgbnVsbCBi4bqxbmcgdmFsdWUgZmlsdGVyIG3hurdjIMSR4buLbmhcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5tb2RlbC5pbml0RGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vZGVsRmlsdGVyW2tleV0gPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG1vZGVsRmlsdGVyW2tleV0gPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMubW9kZWwuaW5pdERhdGFba2V5XSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsRmlsdGVyW2tleV0gPSB0aGlzLm1vZGVsLmluaXREYXRhW2tleV0oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsRmlsdGVyW2tleV0gPSB0aGlzLm1vZGVsLmluaXREYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBpbnRlcm5hbEZvcm1TY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKGludGVybmFsRm9ybVNjaGVtYVtpbmRleF0gaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gaW50ZXJuYWxGb3JtU2NoZW1hW2luZGV4XS5maWVsZDtcclxuICAgICAgICAgICAgICAgIGlmIChtb2RlbEZpbHRlcltmaWVsZF0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxGaWx0ZXJbZmllbGRdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzID09IG51bGwpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5kZVF1eUFuZEVtaXRTZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclNlYXJjaChldnQpIHtcclxuICAgICAgICBjb25zdCBpbnRlcm5hbEZvcm1TY2hlbWEgPSB0aGlzLnNldHRpbmcuc2NoZW1hO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsRmlsdGVyID0gdGhpcy5tb2RlbENydWRGb3JtLmRhdGE7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW50ZXJuYWxGb3JtU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbEZvcm1TY2hlbWFba2V5XSBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgbW9kZWxGaWx0ZXJbaW50ZXJuYWxGb3JtU2NoZW1hW2tleV0uZmllbGRdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbW9kZWxGaWx0ZXJbaW50ZXJuYWxGb3JtU2NoZW1hW2tleV0uZmllbGRdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRlUXV5QW5kRW1pdFNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlUXV5QW5kRW1pdFNlYXJjaCgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbHRlciA9IHRoaXMucGFyZW50U2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnM7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRlbXBsYXRlRmlsdGVyLCB0aGlzLm1vZGVsQ3J1ZEZvcm0uZGF0YSk7XHJcbiAgICAgICAgdGhpcy5oaWRlRm9ybVNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyX2Zvcm0gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5tZXJnZUZpbHRlckFuZEVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJzKCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRmlsdGVyW10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfa2V5d29yZCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9rZXl3b3JkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2Zvcm0pIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9xdWVyeSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9xdWVyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbWVyZ2VGaWx0ZXJBbmRFbWl0KCkge1xyXG4gICAgICAgIHRoaXMub25TZWFyY2gubmV4dCh0aGlzLmdldEZpbHRlcnMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtU2hvdyhldmVudCkge1xyXG4gICAgICAgIHRoaXMuc25hcFNob3QgPSBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrRml4ZWRQb3NpdGlvbihlbGVtKSB7XHJcbiAgICAgICAgd2hpbGUgKGVsZW0gJiYgZWxlbS50YWdOYW1lICE9PSAnQk9EWScpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKTtcclxuICAgICAgICAgICAgaWYgKHN0eWxlLnBvc2l0aW9uICYmIHN0eWxlLnBvc2l0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdmaXhlZCcpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBlbGVtID0gZWxlbS5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29vcmRzKGVsZW0pIHtcclxuICAgICAgICBjb25zdCBpc0ZpeGVkID0gdGhpcy5jaGVja0ZpeGVkUG9zaXRpb24oZWxlbSk7XHJcbiAgICAgICAgY29uc3QgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICAgICAgY29uc3QgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IGlzRml4ZWQgPyAwIDogd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbFRvcCB8fCBib2R5LnNjcm9sbFRvcDtcclxuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gaXNGaXhlZCA/IDAgOiB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGNsaWVudFRvcCA9IGRvY0VsLmNsaWVudFRvcCB8fCBib2R5LmNsaWVudFRvcCB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xyXG5cclxuICAgICAgICBjb25zdCB0b3AgPSBib3gudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgIGNvbnN0IGxlZnQgPSBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0O1xyXG5cclxuICAgICAgICByZXR1cm4geyB0b3A6IE1hdGgucm91bmQodG9wKSwgbGVmdDogTWF0aC5yb3VuZChsZWZ0KSB9O1xyXG4gICAgfVxyXG5cclxuICAgIG9uRm9ybUhpZGUoZXZ0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmVlZENsZWFyVHlwZWRWYWx1ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IEpTT04ucGFyc2UodGhpcy5zbmFwU2hvdCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiB0aGlzLm1vZGVsLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVtwXSA9IHRlbXBbcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uZWVkQ2xlYXJUeXBlZFZhbHVlcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtRXZlbnRIYW5kbGVyKGV2dCwgc2VhcmNoTW9kZWwpIHtcclxuICAgICAgICBldnQuZGF0YVNlYXJjaE1vZGVsID0gc2VhcmNoTW9kZWw7XHJcbiAgICAgICAgLy8gaWYgKGV2dC5ldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikge1xyXG4gICAgICAgIGlmIChldnQuZmllbGQuZW5kc1dpdGgoJ19lJykpIHtcclxuICAgICAgICAgICAgaWYgKGV2dC5jb250cm9sIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBldnQuZm9ybUNvbnRyb2xzW2V2dC5maWVsZC5yZXBsYWNlKCdfZScsICdfcycpXS5tYXhEYXRlID0gZXZ0LmV2ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC5jb250cm9sIGluc3RhbmNlb2YgVGV4dENvbnRyb2xTY2hlbWEgJiYgZXZ0LmNvbnRyb2wuZGF0YUZvcm1hdCA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgZXZ0LmZvcm1Db250cm9sc1tldnQuZmllbGQucmVwbGFjZSgnX2UnLCAnX3MnKV0ubWF4ID0gcGFyc2VJbnQoZXZ0LmV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZ0LmZpZWxkLmVuZHNXaXRoKCdfcycpKSB7XHJcbiAgICAgICAgICAgIGlmIChldnQuY29udHJvbCBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgZXZ0LmZvcm1Db250cm9sc1tldnQuZmllbGQucmVwbGFjZSgnX3MnLCAnX2UnKV0ubWluRGF0ZSA9IGV2dC5ldmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChldnQuY29udHJvbCBpbnN0YW5jZW9mIFRleHRDb250cm9sU2NoZW1hICYmIGV2dC5jb250cm9sLmRhdGFGb3JtYXQgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIGV2dC5mb3JtQ29udHJvbHNbZXZ0LmZpZWxkLnJlcGxhY2UoJ19zJywgJ19lJyldLm1pbiA9IHBhcnNlSW50KGV2dC5ldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb3JtRXZlbnQubmV4dChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soZXZ0KSB7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2dC5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVGb3JtU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93Rm9ybVNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLnNob3dGb3JtID0gIXRoaXMuc2hvd0Zvcm07XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2F2ZVNldHRpbmcoZmlsdGVycykge1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcuc2V0dGluZ0tleSkgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5wYXJlbnRTZXR0aW5nLnNldHRpbmdLZXk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXJzQWxsID0gW107XHJcbiAgICAgICAgbGV0IGNoZWNrRXhpc3QgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkYXRhRmlsdGVycyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkFEVkFOQ0VfRklMVEVSKTtcclxuICAgICAgICBpZiAoZGF0YUZpbHRlcnMpIHtcclxuICAgICAgICAgICAgZmlsdGVyc0FsbCA9IEpTT04ucGFyc2UoZGF0YUZpbHRlcnMpO1xyXG4gICAgICAgICAgICBmaWx0ZXJzQWxsLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzQWxsLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIGZpbHRlcnMgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5BRFZBTkNFX0ZJTFRFUiwgSlNPTi5zdHJpbmdpZnkoZmlsdGVyc0FsbCkpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnTMawdSBi4buZIGzhu41jIHRow6BuaCBjw7RuZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZURlbGV0ZVNhdmVTZXR0aW5nKCkge1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcuc2V0dGluZ0tleSkgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5wYXJlbnRTZXR0aW5nLnNldHRpbmdLZXk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXJzQWxsID0gW107XHJcbiAgICAgICAgY29uc3QgZGF0YUZpbHRlcnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5BRFZBTkNFX0ZJTFRFUik7XHJcbiAgICAgICAgaWYgKGRhdGFGaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBbGwgPSBKU09OLnBhcnNlKGRhdGFGaWx0ZXJzKTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBmaWx0ZXJzQWxsLmZpbmRJbmRleChwID0+IHAucGF0aG5hbWUgPT0gcGF0aE5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgZmlsdGVyc0FsbC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5BRFZBTkNFX0ZJTFRFUiwgSlNPTi5zdHJpbmdpZnkoZmlsdGVyc0FsbCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1jDs2EgYuG7mSBs4buNYyDEkcOjIGzGsHUgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNhdmVkRmlsdGVycygpIHtcclxuICAgICAgICBjb25zdCBkYXRhRmlsdGVycyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkFEVkFOQ0VfRklMVEVSKTtcclxuICAgICAgICB0aGlzLmZpbHRlcl9xdWVyeSA9IFtdO1xyXG4gICAgICAgIGlmIChkYXRhRmlsdGVycykge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyczogRmlsdGVyW107XHJcbiAgICAgICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nLnNldHRpbmdLZXkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMucGFyZW50U2V0dGluZy5zZXR0aW5nS2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzQWxsID0gSlNPTi5wYXJzZShkYXRhRmlsdGVycyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyc0FsbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZpbHRlcnNBbGxbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzID0gZWxlbWVudC5maWx0ZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJfcXVlcnkgPSBmaWx0ZXJzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmFsaWduT3ZlcmxheVRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMuYWxpZ25PdmVybGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFsaWduT3ZlcmxheSgpO1xyXG4gICAgICAgIH0sIDQwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyKTtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXBwZW5kT3ZlcmxheSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVBhbmVsKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fb3ZlcmxheVBhbmVsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlQYW5lbC5zdHlsZS56SW5kZXggPSBTdHJpbmcoKytEb21IYW5kbGVyLnppbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFsaWduT3ZlcmxheSgpIHtcclxuICAgICAgICB0aGlzLmFwcGVuZE1hc2soKTtcclxuICAgICAgICBEb21IYW5kbGVyLmFic29sdXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVBhbmVsLCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3RvcmVPdmVybGF5QXBwZW5kKCkge1xyXG4gICAgICAgIHRoaXMuX292ZXJsYXlQYW5lbCAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fb3ZlcmxheVBhbmVsKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk92ZXJsYXlIaWRlKCkge1xyXG4gICAgICAgIHRoaXMudW5iaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xyXG4gICAgICAgIHRoaXMudW5iaW5kTWFza0NsaWNrTGlzdGVuZXIoKTtcclxuICAgICAgICB0aGlzLl9vdmVybGF5UGFuZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTWFzaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUFkdmFuY2VTZWFyY2hQYW5lbFJlbmRlcmVkKCkge1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaEJveE1heEhlaWdodCA9IGBjYWxjKDEwMHZoIC0gJHt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgMTUwfXB4KWA7XHJcbiAgICB9XHJcblxyXG4gICAgb25PdmVybGF5QW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC50b1N0YXRlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3Zpc2libGUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVBhbmVsID0gZXZlbnQuZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kT3ZlcmxheSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbk92ZXJsYXkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAndm9pZCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3ZlcmxheUhpZGUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bmJpbmRNYXNrQ2xpY2tMaXN0ZW5lcigpIHtcclxuICAgICAgICBpZiAodGhpcy5tYXNrQ2xpY2tMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWFza0NsaWNrTGlzdGVuZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRNYXNrKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tYXNrT3ZlcmxheSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hc2tPdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIHRoaXMubWFza092ZXJsYXkuc3R5bGUuekluZGV4ID0gU3RyaW5nKHBhcnNlSW50KHRoaXMuX292ZXJsYXlQYW5lbC5zdHlsZS56SW5kZXgpIC0gMSk7XHJcbiAgICAgICAgICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5tYXNrT3ZlcmxheSwgJ2FkdmFuY2Utc2VhcmNoLW1hc2stb3ZlcmxheScpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tYXNrQ2xpY2tMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLm1hc2tPdmVybGF5LCAnY2xpY2snLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlRm9ybVNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVNYXNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMubWFza092ZXJsYXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVNYXNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1hc2tPdmVybGF5KSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5tYXNrT3ZlcmxheSk7XHJcbiAgICAgICAgICAgIHRoaXMudW5iaW5kTWFza0NsaWNrTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5tYXNrT3ZlcmxheSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdG9yZU92ZXJsYXlBcHBlbmQoKTtcclxuICAgICAgICB0aGlzLm9uT3ZlcmxheUhpZGUoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2ICNlbCBjbGFzcz1cImJveC1hZHZhbmNlLXNlYXJjaC1pbmxpbmUgcC1pbnB1dGdyb3VwXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IHBsYWNlaG9sZGVyPVwiTmjhuq1wIHThu6sga2jDs2EgdMOsbSBraeG6v21cIiBbcFRvb2x0aXBdPVwic2VhcmNoQm94VG9vbHRpcFwiXHJcbiAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJ3cmFwIG1heC13aWR0aC0zMDBcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBbKG5nTW9kZWwpXT1cImtleXdvcmRcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAoa2V5dXAuZXNjKT1cIm9uRXNjKCRldmVudClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJwYXJlbnRTZXR0aW5nLmZpZWxkU2VhcmNoVGV4dCAmJiBwYXJlbnRTZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPiAwPyBmYWxzZTogdHJ1ZVwiIC8+XHJcbiAgICA8c3BhblxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsncC1pbnB1dGdyb3VwLWFkZG9uJzogdHJ1ZSwgJ2FjdGlvbic6IHRydWUsICdkaXNhYmxlZCc6IGxvYWRpbmcsICdkaXJ0eSc6IGtleXdvcmQgIT0gbnVsbCAmJiBrZXl3b3JkICE9ICcnfVwiXHJcbiAgICAgICAgW3BUb29sdGlwXT1cIidYw7NhIHTDrG0ga2nhur9tJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIChjbGljayk9XCJjbGVhcktleXdvcmQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktZmlsdGVyLXNsYXNoXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieydwLWlucHV0Z3JvdXAtYWRkb24nOiB0cnVlLCAnYWN0aW9uJzogdHJ1ZSwgJ2Rpc2FibGVkJzogbG9hZGluZ31cIiBbcFRvb2x0aXBdPVwiJ1TDrG0ga2nhur9tJ1wiXHJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgKGNsaWNrKT1cIm9uRG9TZWFyY2hpbmcoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjb250YWluZXItc2VhcmNoLWRpYWxvZyBwLWlucHV0Z3JvdXAtYWRkb24gYWN0aW9uIGFjdGlvbi10cmlnZ2VyXCIgdGFiaW5kZXg9XCIwXCIgW2NsYXNzLnNob3ddPVwic2hvd0Zvcm1cIlxyXG4gICAgICAgIFtwVG9vbHRpcF09XCInVMOsbSBraeG6v20gbsOibmcgY2FvJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgIDxzcGFuIChjbGljayk9XCJzaG93Rm9ybVNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FyZXQtZG93blwiPjwvaT5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0Zvcm1cIj5cclxuICAgICAgICA8ZGl2ICNvdmVybGF5UGFuZWxcclxuICAgICAgICAgICAgY2xhc3M9XCJhZHZhbmNlLXNlYXJjaC1vdmVybGF5LXBhbmVsIGZpbHRlci1jb250ZW50IHAtb3ZlcmxheXBhbmVsIHAtd2lkZ2V0LWNvbnRlbnQgZmFkZUluRG93biBhZHZhbmNlLXNlYXJjaC1ib3hcIlxyXG4gICAgICAgICAgICBbQG92ZXJsYXlBbmltYXRpb25dPVwie3ZhbHVlOiAndmlzaWJsZScsIHBhcmFtczoge3Nob3dUcmFuc2l0aW9uUGFyYW1zOiBvdmVybGF5U2hvd1RyYW5zaXRpb25PcHRpb25zLCBoaWRlVHJhbnNpdGlvblBhcmFtczogb3ZlcmxheUhpZGVUcmFuc2l0aW9uT3B0aW9uc319XCJcclxuICAgICAgICAgICAgKEBvdmVybGF5QW5pbWF0aW9uLnN0YXJ0KT1cIm9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KCRldmVudClcIiAoa2V5dXAuZW50ZXIpPVwib25Eb1NlYXJjaGluZygpXCJcclxuICAgICAgICAgICAgKGtleXVwLmVzYyk9XCJoaWRlRm9ybVNlYXJjaCgpXCIgKG1vdXNlZG93bik9XCJvbkNsaWNrKCRldmVudClcIj5cclxuICAgICAgICAgICAgPCEtLSA8YSBjbGFzcz1cImFkdmFuY2UtZmlsdGVyLWNsb3NlIG5nLXN0YXItaW5zZXJ0ZWRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJoaWRlRm9ybVNlYXJjaCgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLXRpbWVzXCI+PC9pPjwvYT4gLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJlbnRTZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2c1wiPlxyXG4gICAgICAgICAgICAgICAgPHRuLWN1c3RvbS1zY3JvbGxiYXIgI3Njcm9sbGJhclxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IG1heEhlaWdodDogX3NlYXJjaEJveE1heEhlaWdodCwgbWluSGVpZ2h0OiAnMzAwcHgnLCBoZWlnaHQ6ICdhdXRvJywgcGFyZW50Q2xhc3M6ICdib3gtYWR2YW5jZS1zZWFyY2gtaW5saW5lJyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNydWQtZm9ybSAqbmdJZj1cInJlYWR5XCIgI2NydWRGb3JtIFtkYXRhXT1cIm1vZGVsQ3J1ZEZvcm1cIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2NvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlS2V5cHJlc3NDb250cm9sXT1cInRydWVcIiBbZGlzYWJsZUNhY2hpbmddPVwidHJ1ZVwiIChvbkZvcm1TaG93KT1cIm9uRm9ybVNob3coJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkZvcm1IaWRlKT1cIm9uRm9ybUhpZGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY3J1ZC1mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC90bi1jdXN0b20tc2Nyb2xsYmFyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1zZWFyY2hcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVMOsbSBraeG6v20nIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cIm9uRG9TZWFyY2hpbmcoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXJlcGxheVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1jDs2EgdMOsbSBraeG6v20nIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudClcIiBwcmV2ZW50VGFiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBhcmVudFNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzXCI+XHJcbiAgICAgICAgICAgICAgICA8cXVlcnktYnVpbGRlciBbc2VhcmNoU2NoZW1hXT1cInNldHRpbmcuc2NoZW1hXCIgW2ZpbHRlcnNdPVwiZmlsdGVyX3F1ZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyBtYXhIZWlnaHQ6IF9zZWFyY2hCb3hNYXhIZWlnaHQsIG1pbkhlaWdodDogJzMwMHB4JywgaGVpZ2h0OiAnYXV0bycsIHBhcmVudENsYXNzOiAnYm94LWFkdmFuY2Utc2VhcmNoLWlubGluZSd9XCJcclxuICAgICAgICAgICAgICAgICAgICAob25TYXZlKT1cImhhbmRsZVNhdmVTZXR0aW5nKCRldmVudClcIiAob25EZWxldGVTYXZlKT1cImhhbmRsZURlbGV0ZVNhdmVTZXR0aW5nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvblNlYXJjaCk9XCJoYW5kbGVTZWFyY2hCdWlsZGVyKCRldmVudClcIj48L3F1ZXJ5LWJ1aWxkZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8YWZ0ZXItdmlldy1jaGVja2VkIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAobG9hZGVkKT1cImhhbmRsZUFkdmFuY2VTZWFyY2hQYW5lbFJlbmRlcmVkKClcIj5cclxuICAgICAgICAgICAgPC9hZnRlci12aWV3LWNoZWNrZWQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZS1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jcnVkL2FkdmFuY2Utc2VhcmNoL2FkdmFuY2Utc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvY3J1ZC9hZHZhbmNlLXNlYXJjaC9hZHZhbmNlLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFrQixLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFGLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxl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dEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixhQUFhO3NCQUFyQixLQUFLO2dCQUVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBV0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uRXZlbnQsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9kb20nO1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IElDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2VudW1zJztcclxuaW1wb3J0IHsgRGF0ZVRpbWVDb250cm9sU2NoZW1hLCBGb3JtU2NoZW1hQmFzZSwgVGV4dENvbnRyb2xTY2hlbWEgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9jYWxDYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sb2NhbENhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IFNlYXJjaEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VhcmNoJztcclxuaW1wb3J0IHsgQ3J1ZEZvcm1EYXRhIH0gZnJvbSAnLi4vbW9kZWxzL2NydWQtYmFzZSc7XHJcbmltcG9ydCB7IEFkdmFuY2VTZWFyY2hEYXRhLCBBZHZhbmNlU2VhcmNoU2V0dGluZyB9IGZyb20gJy4uL21vZGVscy9jcnVkLWJhc2Utc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBDcnVkTGlzdFNldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvY3J1ZC1saXN0LXNldHRpbmdzJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuXHJcbi8vIGltcG9ydCB7IENydWRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQnO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ2FkdmFuY2Utc2VhcmNoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdLFxyXG4gICAgYW5pbWF0aW9uczogW1xyXG4gICAgICAgIHRyaWdnZXIoJ292ZXJsYXlBbmltYXRpb24nLCBbXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVZKDAuOCknIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgne3tzaG93VHJhbnNpdGlvblBhcmFtc319JylcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcclxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJ3t7aGlkZVRyYW5zaXRpb25QYXJhbXN9fScsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSlcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkdmFuY2VTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBJQ29tcG9uZW50QmFzZSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZWwnKSBlbDogRWxlbWVudFJlZjtcclxuICAgIC8vIEBWaWV3Q2hpbGQoJ2NydWRGb3JtJykgY3J1ZEZvcm06IENydWRGb3JtQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnb3ZlcmxheVBhbmVsJykgb3ZlcmxheVBhbmVsOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBJbnB1dCgpIHBhcmVudFNldHRpbmc6IENydWRMaXN0U2V0dGluZztcclxuICAgIF9zZWFyY2hJbmZvOiBTZWFyY2hJbmZvO1xyXG4gICAgQElucHV0KCkgc2V0IHNlYXJjaEluZm8odmFsdWU6IFNlYXJjaEluZm8pIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hJbmZvID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlYXJjaEluZm8gJiYgdGhpcy5fc2VhcmNoSW5mby5zY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZ2V0IHNlYXJjaEluZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEluZm87XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgYWxsb3dMb2FkRGF0YVdoZW5QYXJlbnROdWxsID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRm9ybUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgX292ZXJsYXlQYW5lbDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBvdmVybGF5U2hvd1RyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnLjEycyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSc7XHJcbiAgICBvdmVybGF5SGlkZVRyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnLjFzIGxpbmVhcic7XHJcbiAgICBhbGlnbk92ZXJsYXlUaW1lb3V0ID0gbnVsbDtcclxuXHJcbiAgICBtYXNrT3ZlcmxheTogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBtYXNrQ2xpY2tMaXN0ZW5lcjogRnVuY3Rpb247XHJcblxyXG4gICAgZG9jdW1lbnRSZXNpemVMaXN0ZW5lcjogYW55O1xyXG5cclxuICAgIGtleXdvcmQgPSAnJztcclxuICAgIG1vZGVsOiBBZHZhbmNlU2VhcmNoRGF0YSA9IG5ldyBBZHZhbmNlU2VhcmNoRGF0YSgpO1xyXG4gICAgbW9kZWxDcnVkRm9ybTogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2V0dGluZzogQWR2YW5jZVNlYXJjaFNldHRpbmcgPSBuZXcgQWR2YW5jZVNlYXJjaFNldHRpbmcoKTtcclxuICAgIHJlYWR5ID0gZmFsc2U7XHJcbiAgICBuZWVkQ2xlYXJUeXBlZFZhbHVlcyA9IHRydWU7XHJcbiAgICBzbmFwU2hvdCA9ICcnO1xyXG5cclxuICAgIGZpZWxkUGFyZW50TWFwOiBhbnkgPSB7fTtcclxuXHJcbiAgICB0YXJnZXQ6IGFueTtcclxuXHJcbiAgICBzaG93Rm9ybSA9IGZhbHNlO1xyXG4gICAgc2VhcmNoQm94VG9vbHRpcDtcclxuXHJcbiAgICBmaWx0ZXJfZm9ybTogRmlsdGVyW10gPSBbXTsgLy8gU2VhcmNoIG7hur91IHPhu60gZOG7pW5nIGNydWQgKEtoYWkgYsOhbyB0ZW1wbGF0ZSBmaWx0ZXIpXHJcbiAgICBmaWx0ZXJfa2V5d29yZDogRmlsdGVyW10gPSBbXTsgLy8gU2VhcmNoIHThu6sga2jDs2FcclxuICAgIGZpbHRlcl9xdWVyeTogRmlsdGVyW10gPSBbXTsgLy8gU2VhcmNoIG7hur91IHPhu60gZOG7pW5nIHF1ZXJ5IGJ1aWxkZXJcclxuXHJcbiAgICBfc2VhcmNoQm94TWF4SGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9jYWxDYWNoZVNlcnZpY2U6IExvY2FsQ2FjaGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSBfZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U2F2ZWRGaWx0ZXJzKCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzLmdldEZpbHRlcnMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdERhdGEoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaEluZm8gfHwgdGhpcy5zZWFyY2hJbmZvLnNjaGVtYSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hCb3hUb29sdGlwID0gdGhpcy5zZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEgPSA8Rm9ybVNjaGVtYUJhc2VbXT4odGhpcy5zZWFyY2hJbmZvLnNjaGVtYSk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkRHJvcGRvd24gPSB0aGlzLnNlYXJjaEluZm8uZmllbGREcm9wZG93bjtcclxuICAgICAgICB0aGlzLnNldHRpbmcua2VlcEluaXRTZWFyY2hEYXRhTm90TnVsbCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnRTZXR0aW5nLmZ1bmN0aW9uLm1vZGlmeUFkdmFuY2VTZWFjaE1vZGVsKHRoaXMubW9kZWwsIHRoaXMuc2V0dGluZyk7XHJcblxyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMubW9kZWwuaW5pdERhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1vZGVsLmluaXREYXRhW2tleV0gPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW2tleV0gPSB0aGlzLm1vZGVsLmluaXREYXRhW2tleV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVtrZXldID0gdGhpcy5tb2RlbC5pbml0RGF0YVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEuZm9yRWFjaChzY2hlbWEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gPERyb3Bkb3duQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgICAgICBfc2NoZW1hLmFmdGVyR2V0RGF0YSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV9zY2hlbWEuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IF9zY2hlbWEuZGF0YVNvdXJjZS5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PSB0aGlzLm1vZGVsLmRhdGFbc2NoZW1hLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVtzY2hlbWEuZmllbGRdID0gaXRlbVNlbGVjdGVkLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF9zY2hlbWEuYXBwZW5kVG8gPSAnYm9keSc7XHJcbiAgICAgICAgICAgICAgICBfc2NoZW1hLnBhbmVsQ2xhc3MgPSAnZHJvcGRvd24tYWR2cyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZGlzYWJsZURlZmF1bHRTZXR0aW5nQ2FjaGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhRGVmYXVsdCh0aGlzLnNldHRpbmcuc2NoZW1hKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWxDcnVkRm9ybS5kYXRhID0gdGhpcy5tb2RlbC5kYXRhO1xyXG4gICAgICAgIHRoaXMubW9kZWxDcnVkRm9ybS5kYXRhLmtleSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhRGVmYXVsdChmb3JtU2NoZW1hOiBGb3JtU2NoZW1hQmFzZVtdKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YUNhY2hlID0gdGhpcy5fbG9jYWxDYWNoZVNlcnZpY2UuZ2V0RGF0YURlZmF1bHQoKTtcclxuICAgICAgICBsZXQgYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGUgPSB0aGlzLnBhcmVudFNldHRpbmcuYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGU7XHJcbiAgICAgICAgaWYgKCFhZHZhbmNlU2VhcmNoRmllbGRDYWNoZSB8fCAhT2JqZWN0LmtleXMoYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGUpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBhZHZhbmNlU2VhcmNoRmllbGRDYWNoZSA9IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBsc3RGaWVsZEluZm8gPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0RmllbGRzSW5EZWZhdWx0U2V0dGluZygpO1xyXG4gICAgICAgICAgICBpZiAobHN0RmllbGRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBsc3RGaWVsZEluZm8uZm9yRWFjaChmaWVsZEluZm8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VTZWFyY2hGaWVsZENhY2hlW2ZpZWxkSW5mby5maWVsZF0gPSBmaWVsZEluZm8uZmllbGQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFkdmFuY2VTZWFyY2hGaWVsZENhY2hlIHx8ICFPYmplY3Qua2V5cyhhZHZhbmNlU2VhcmNoRmllbGRDYWNoZSkubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYWR2YW5jZVNlYXJjaEZpZWxkQ2FjaGUpLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybVNjaGVtYS5maW5kKHEgPT4gcS5maWVsZCA9PSBmaWVsZCk7XHJcbiAgICAgICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29udHJvbC5maWVsZCArIChjb250cm9sLnZhbHVlRmllbGQgPT0gJ2lkJyA/ICcnIDogY29udHJvbC52YWx1ZUZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YUNhY2hlW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFbY29udHJvbC5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YUNhY2hlW2NvbnRyb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW2NvbnRyb2wuZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlZChldnQpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcl9rZXl3b3JkID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAhPSBudWxsICYmIHRoaXMua2V5d29yZCAhPSAnJyAmJiB0aGlzLnBhcmVudFNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5V29yayA9IG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVLZXlXb3JrID0gSlNPTi5zdHJpbmdpZnkodGhpcy5rZXl3b3JkKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnRTZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcktleVdvcmsuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUtleVdvcmtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXlXb3JrLmZpbHRlcnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyX2tleXdvcmQucHVzaChmaWx0ZXJLZXlXb3JrLmZpbHRlcnNbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJfa2V5d29yZC5wdXNoKGZpbHRlcktleVdvcmspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVyZ2VGaWx0ZXJBbmRFbWl0KCk7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Fc2MoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jbGVhcktleXdvcmQoKTtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhcktleXdvcmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAhPSBudWxsICYmIHRoaXMua2V5d29yZCAhPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5rZXl3b3JkID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyX2tleXdvcmQgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5tZXJnZUZpbHRlckFuZEVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb1NlYXJjaGluZygpIHtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2VhcmNoQnVpbGRlcihldnQpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcl9xdWVyeSA9IGV2dDtcclxuICAgICAgICB0aGlzLm1lcmdlRmlsdGVyQW5kRW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TZWFyY2hpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtU2NoZW1hID0gdGhpcy5zZXR0aW5nLnNjaGVtYTtcclxuICAgICAgICBjb25zdCBtb2RlbEZpbHRlciA9IHRoaXMubW9kZWxDcnVkRm9ybS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmtlZXBJbml0U2VhcmNoRGF0YU5vdE51bGwpIHtcclxuICAgICAgICAgICAgLy8gUmVwbGFjZSBuaOG7r25nIGZpZWxkIGLhu4sgbnVsbCBi4bqxbmcgdmFsdWUgZmlsdGVyIG3hurdjIMSR4buLbmhcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5tb2RlbC5pbml0RGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vZGVsRmlsdGVyW2tleV0gPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG1vZGVsRmlsdGVyW2tleV0gPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMubW9kZWwuaW5pdERhdGFba2V5XSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsRmlsdGVyW2tleV0gPSB0aGlzLm1vZGVsLmluaXREYXRhW2tleV0oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsRmlsdGVyW2tleV0gPSB0aGlzLm1vZGVsLmluaXREYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBpbnRlcm5hbEZvcm1TY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKGludGVybmFsRm9ybVNjaGVtYVtpbmRleF0gaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gaW50ZXJuYWxGb3JtU2NoZW1hW2luZGV4XS5maWVsZDtcclxuICAgICAgICAgICAgICAgIGlmIChtb2RlbEZpbHRlcltmaWVsZF0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxGaWx0ZXJbZmllbGRdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzID09IG51bGwpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5kZVF1eUFuZEVtaXRTZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclNlYXJjaChldnQpIHtcclxuICAgICAgICBjb25zdCBpbnRlcm5hbEZvcm1TY2hlbWEgPSB0aGlzLnNldHRpbmcuc2NoZW1hO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsRmlsdGVyID0gdGhpcy5tb2RlbENydWRGb3JtLmRhdGE7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW50ZXJuYWxGb3JtU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbEZvcm1TY2hlbWFba2V5XSBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgbW9kZWxGaWx0ZXJbaW50ZXJuYWxGb3JtU2NoZW1hW2tleV0uZmllbGRdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbW9kZWxGaWx0ZXJbaW50ZXJuYWxGb3JtU2NoZW1hW2tleV0uZmllbGRdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRlUXV5QW5kRW1pdFNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlUXV5QW5kRW1pdFNlYXJjaCgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbHRlciA9IHRoaXMucGFyZW50U2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnM7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRlbXBsYXRlRmlsdGVyLCB0aGlzLm1vZGVsQ3J1ZEZvcm0uZGF0YSk7XHJcbiAgICAgICAgdGhpcy5oaWRlRm9ybVNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyX2Zvcm0gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5tZXJnZUZpbHRlckFuZEVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJzKCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRmlsdGVyW10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfa2V5d29yZCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9rZXl3b3JkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2Zvcm0pIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9xdWVyeSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9xdWVyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbWVyZ2VGaWx0ZXJBbmRFbWl0KCkge1xyXG4gICAgICAgIHRoaXMub25TZWFyY2gubmV4dCh0aGlzLmdldEZpbHRlcnMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtU2hvdyhldmVudCkge1xyXG4gICAgICAgIHRoaXMuc25hcFNob3QgPSBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrRml4ZWRQb3NpdGlvbihlbGVtKSB7XHJcbiAgICAgICAgd2hpbGUgKGVsZW0gJiYgZWxlbS50YWdOYW1lICE9PSAnQk9EWScpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKTtcclxuICAgICAgICAgICAgaWYgKHN0eWxlLnBvc2l0aW9uICYmIHN0eWxlLnBvc2l0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdmaXhlZCcpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBlbGVtID0gZWxlbS5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29vcmRzKGVsZW0pIHtcclxuICAgICAgICBjb25zdCBpc0ZpeGVkID0gdGhpcy5jaGVja0ZpeGVkUG9zaXRpb24oZWxlbSk7XHJcbiAgICAgICAgY29uc3QgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICAgICAgY29uc3QgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IGlzRml4ZWQgPyAwIDogd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbFRvcCB8fCBib2R5LnNjcm9sbFRvcDtcclxuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gaXNGaXhlZCA/IDAgOiB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGNsaWVudFRvcCA9IGRvY0VsLmNsaWVudFRvcCB8fCBib2R5LmNsaWVudFRvcCB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xyXG5cclxuICAgICAgICBjb25zdCB0b3AgPSBib3gudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgIGNvbnN0IGxlZnQgPSBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0O1xyXG5cclxuICAgICAgICByZXR1cm4geyB0b3A6IE1hdGgucm91bmQodG9wKSwgbGVmdDogTWF0aC5yb3VuZChsZWZ0KSB9O1xyXG4gICAgfVxyXG5cclxuICAgIG9uRm9ybUhpZGUoZXZ0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmVlZENsZWFyVHlwZWRWYWx1ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IEpTT04ucGFyc2UodGhpcy5zbmFwU2hvdCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiB0aGlzLm1vZGVsLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVtwXSA9IHRlbXBbcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uZWVkQ2xlYXJUeXBlZFZhbHVlcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtRXZlbnRIYW5kbGVyKGV2dCwgc2VhcmNoTW9kZWwpIHtcclxuICAgICAgICBldnQuZGF0YVNlYXJjaE1vZGVsID0gc2VhcmNoTW9kZWw7XHJcbiAgICAgICAgLy8gaWYgKGV2dC5ldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikge1xyXG4gICAgICAgIGlmIChldnQuZmllbGQuZW5kc1dpdGgoJ19lJykpIHtcclxuICAgICAgICAgICAgaWYgKGV2dC5jb250cm9sIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBldnQuZm9ybUNvbnRyb2xzW2V2dC5maWVsZC5yZXBsYWNlKCdfZScsICdfcycpXS5tYXhEYXRlID0gZXZ0LmV2ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC5jb250cm9sIGluc3RhbmNlb2YgVGV4dENvbnRyb2xTY2hlbWEgJiYgZXZ0LmNvbnRyb2wuZGF0YUZvcm1hdCA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgZXZ0LmZvcm1Db250cm9sc1tldnQuZmllbGQucmVwbGFjZSgnX2UnLCAnX3MnKV0ubWF4ID0gcGFyc2VJbnQoZXZ0LmV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZ0LmZpZWxkLmVuZHNXaXRoKCdfcycpKSB7XHJcbiAgICAgICAgICAgIGlmIChldnQuY29udHJvbCBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgZXZ0LmZvcm1Db250cm9sc1tldnQuZmllbGQucmVwbGFjZSgnX3MnLCAnX2UnKV0ubWluRGF0ZSA9IGV2dC5ldmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChldnQuY29udHJvbCBpbnN0YW5jZW9mIFRleHRDb250cm9sU2NoZW1hICYmIGV2dC5jb250cm9sLmRhdGFGb3JtYXQgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIGV2dC5mb3JtQ29udHJvbHNbZXZ0LmZpZWxkLnJlcGxhY2UoJ19zJywgJ19lJyldLm1pbiA9IHBhcnNlSW50KGV2dC5ldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb3JtRXZlbnQubmV4dChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soZXZ0KSB7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2dC5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVGb3JtU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93Rm9ybVNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLnNob3dGb3JtID0gIXRoaXMuc2hvd0Zvcm07XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2F2ZVNldHRpbmcoZmlsdGVycykge1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcuc2V0dGluZ0tleSkgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5wYXJlbnRTZXR0aW5nLnNldHRpbmdLZXk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXJzQWxsID0gW107XHJcbiAgICAgICAgbGV0IGNoZWNrRXhpc3QgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkYXRhRmlsdGVycyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkFEVkFOQ0VfRklMVEVSKTtcclxuICAgICAgICBpZiAoZGF0YUZpbHRlcnMpIHtcclxuICAgICAgICAgICAgZmlsdGVyc0FsbCA9IEpTT04ucGFyc2UoZGF0YUZpbHRlcnMpO1xyXG4gICAgICAgICAgICBmaWx0ZXJzQWxsLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzQWxsLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIGZpbHRlcnMgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5BRFZBTkNFX0ZJTFRFUiwgSlNPTi5zdHJpbmdpZnkoZmlsdGVyc0FsbCkpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnTMawdSBi4buZIGzhu41jIHRow6BuaCBjw7RuZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZURlbGV0ZVNhdmVTZXR0aW5nKCkge1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcuc2V0dGluZ0tleSkgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5wYXJlbnRTZXR0aW5nLnNldHRpbmdLZXk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXJzQWxsID0gW107XHJcbiAgICAgICAgY29uc3QgZGF0YUZpbHRlcnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5BRFZBTkNFX0ZJTFRFUik7XHJcbiAgICAgICAgaWYgKGRhdGFGaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBbGwgPSBKU09OLnBhcnNlKGRhdGFGaWx0ZXJzKTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBmaWx0ZXJzQWxsLmZpbmRJbmRleChwID0+IHAucGF0aG5hbWUgPT0gcGF0aE5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgZmlsdGVyc0FsbC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5BRFZBTkNFX0ZJTFRFUiwgSlNPTi5zdHJpbmdpZnkoZmlsdGVyc0FsbCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1jDs2EgYuG7mSBs4buNYyDEkcOjIGzGsHUgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNhdmVkRmlsdGVycygpIHtcclxuICAgICAgICBjb25zdCBkYXRhRmlsdGVycyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkFEVkFOQ0VfRklMVEVSKTtcclxuICAgICAgICB0aGlzLmZpbHRlcl9xdWVyeSA9IFtdO1xyXG4gICAgICAgIGlmIChkYXRhRmlsdGVycykge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyczogRmlsdGVyW107XHJcbiAgICAgICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nLnNldHRpbmdLZXkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMucGFyZW50U2V0dGluZy5zZXR0aW5nS2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzQWxsID0gSlNPTi5wYXJzZShkYXRhRmlsdGVycyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyc0FsbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZpbHRlcnNBbGxbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzID0gZWxlbWVudC5maWx0ZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJfcXVlcnkgPSBmaWx0ZXJzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmFsaWduT3ZlcmxheVRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMuYWxpZ25PdmVybGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFsaWduT3ZlcmxheSgpO1xyXG4gICAgICAgIH0sIDQwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyKTtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXBwZW5kT3ZlcmxheSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVBhbmVsKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fb3ZlcmxheVBhbmVsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlQYW5lbC5zdHlsZS56SW5kZXggPSBTdHJpbmcoKytEb21IYW5kbGVyLnppbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFsaWduT3ZlcmxheSgpIHtcclxuICAgICAgICB0aGlzLmFwcGVuZE1hc2soKTtcclxuICAgICAgICBEb21IYW5kbGVyLmFic29sdXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVBhbmVsLCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3RvcmVPdmVybGF5QXBwZW5kKCkge1xyXG4gICAgICAgIHRoaXMuX292ZXJsYXlQYW5lbCAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fb3ZlcmxheVBhbmVsKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk92ZXJsYXlIaWRlKCkge1xyXG4gICAgICAgIHRoaXMudW5iaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xyXG4gICAgICAgIHRoaXMudW5iaW5kTWFza0NsaWNrTGlzdGVuZXIoKTtcclxuICAgICAgICB0aGlzLl9vdmVybGF5UGFuZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTWFzaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUFkdmFuY2VTZWFyY2hQYW5lbFJlbmRlcmVkKCkge1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaEJveE1heEhlaWdodCA9IGBjYWxjKDEwMHZoIC0gJHt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgMTUwfXB4KWA7XHJcbiAgICB9XHJcblxyXG4gICAgb25PdmVybGF5QW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC50b1N0YXRlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3Zpc2libGUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVBhbmVsID0gZXZlbnQuZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kT3ZlcmxheSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbk92ZXJsYXkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAndm9pZCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3ZlcmxheUhpZGUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bmJpbmRNYXNrQ2xpY2tMaXN0ZW5lcigpIHtcclxuICAgICAgICBpZiAodGhpcy5tYXNrQ2xpY2tMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWFza0NsaWNrTGlzdGVuZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRNYXNrKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tYXNrT3ZlcmxheSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hc2tPdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIHRoaXMubWFza092ZXJsYXkuc3R5bGUuekluZGV4ID0gU3RyaW5nKHBhcnNlSW50KHRoaXMuX292ZXJsYXlQYW5lbC5zdHlsZS56SW5kZXgpIC0gMSk7XHJcbiAgICAgICAgICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5tYXNrT3ZlcmxheSwgJ2FkdmFuY2Utc2VhcmNoLW1hc2stb3ZlcmxheScpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tYXNrQ2xpY2tMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLm1hc2tPdmVybGF5LCAnY2xpY2snLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlRm9ybVNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVNYXNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMubWFza092ZXJsYXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVNYXNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1hc2tPdmVybGF5KSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5tYXNrT3ZlcmxheSk7XHJcbiAgICAgICAgICAgIHRoaXMudW5iaW5kTWFza0NsaWNrTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5tYXNrT3ZlcmxheSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdG9yZU92ZXJsYXlBcHBlbmQoKTtcclxuICAgICAgICB0aGlzLm9uT3ZlcmxheUhpZGUoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2ICNlbCBjbGFzcz1cImJveC1hZHZhbmNlLXNlYXJjaC1pbmxpbmUgcC1pbnB1dGdyb3VwXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IHBsYWNlaG9sZGVyPVwiTmjhuq1wIHThu6sga2jDs2EgdMOsbSBraeG6v21cIiBbcFRvb2x0aXBdPVwic2VhcmNoQm94VG9vbHRpcFwiXHJcbiAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJ3cmFwIG1heC13aWR0aC0zMDBcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBbKG5nTW9kZWwpXT1cImtleXdvcmRcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAoa2V5dXAuZXNjKT1cIm9uRXNjKCRldmVudClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJwYXJlbnRTZXR0aW5nLmZpZWxkU2VhcmNoVGV4dCAmJiBwYXJlbnRTZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPiAwPyBmYWxzZTogdHJ1ZVwiIC8+XHJcbiAgICA8c3BhblxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsncC1pbnB1dGdyb3VwLWFkZG9uJzogdHJ1ZSwgJ2FjdGlvbic6IHRydWUsICdkaXNhYmxlZCc6IGxvYWRpbmcsICdkaXJ0eSc6IGtleXdvcmQgIT0gbnVsbCAmJiBrZXl3b3JkICE9ICcnfVwiXHJcbiAgICAgICAgW3BUb29sdGlwXT1cIidYw7NhIHTDrG0ga2nhur9tJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIChjbGljayk9XCJjbGVhcktleXdvcmQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktZmlsdGVyLXNsYXNoXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieydwLWlucHV0Z3JvdXAtYWRkb24nOiB0cnVlLCAnYWN0aW9uJzogdHJ1ZSwgJ2Rpc2FibGVkJzogbG9hZGluZ31cIiBbcFRvb2x0aXBdPVwiJ1TDrG0ga2nhur9tJ1wiXHJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgKGNsaWNrKT1cIm9uRG9TZWFyY2hpbmcoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjb250YWluZXItc2VhcmNoLWRpYWxvZyBwLWlucHV0Z3JvdXAtYWRkb24gYWN0aW9uIGFjdGlvbi10cmlnZ2VyXCIgdGFiaW5kZXg9XCIwXCIgW2NsYXNzLnNob3ddPVwic2hvd0Zvcm1cIlxyXG4gICAgICAgIFtwVG9vbHRpcF09XCInVMOsbSBraeG6v20gbsOibmcgY2FvJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgIDxzcGFuIChjbGljayk9XCJzaG93Rm9ybVNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FyZXQtZG93blwiPjwvaT5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0Zvcm1cIj5cclxuICAgICAgICA8ZGl2ICNvdmVybGF5UGFuZWxcclxuICAgICAgICAgICAgY2xhc3M9XCJhZHZhbmNlLXNlYXJjaC1vdmVybGF5LXBhbmVsIGZpbHRlci1jb250ZW50IHAtb3ZlcmxheXBhbmVsIHAtd2lkZ2V0LWNvbnRlbnQgZmFkZUluRG93biBhZHZhbmNlLXNlYXJjaC1ib3hcIlxyXG4gICAgICAgICAgICBbQG92ZXJsYXlBbmltYXRpb25dPVwie3ZhbHVlOiAndmlzaWJsZScsIHBhcmFtczoge3Nob3dUcmFuc2l0aW9uUGFyYW1zOiBvdmVybGF5U2hvd1RyYW5zaXRpb25PcHRpb25zLCBoaWRlVHJhbnNpdGlvblBhcmFtczogb3ZlcmxheUhpZGVUcmFuc2l0aW9uT3B0aW9uc319XCJcclxuICAgICAgICAgICAgKEBvdmVybGF5QW5pbWF0aW9uLnN0YXJ0KT1cIm9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KCRldmVudClcIiAoa2V5dXAuZW50ZXIpPVwib25Eb1NlYXJjaGluZygpXCJcclxuICAgICAgICAgICAgKGtleXVwLmVzYyk9XCJoaWRlRm9ybVNlYXJjaCgpXCIgKG1vdXNlZG93bik9XCJvbkNsaWNrKCRldmVudClcIj5cclxuICAgICAgICAgICAgPCEtLSA8YSBjbGFzcz1cImFkdmFuY2UtZmlsdGVyLWNsb3NlIG5nLXN0YXItaW5zZXJ0ZWRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJoaWRlRm9ybVNlYXJjaCgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLXRpbWVzXCI+PC9pPjwvYT4gLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJlbnRTZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2c1wiPlxyXG4gICAgICAgICAgICAgICAgPHRuLWN1c3RvbS1zY3JvbGxiYXIgI3Njcm9sbGJhclxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IG1heEhlaWdodDogX3NlYXJjaEJveE1heEhlaWdodCwgbWluSGVpZ2h0OiAnMzAwcHgnLCBoZWlnaHQ6ICdhdXRvJywgcGFyZW50Q2xhc3M6ICdib3gtYWR2YW5jZS1zZWFyY2gtaW5saW5lJyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNydWQtZm9ybSAqbmdJZj1cInJlYWR5XCIgI2NydWRGb3JtIFtkYXRhXT1cIm1vZGVsQ3J1ZEZvcm1cIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2NvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlS2V5cHJlc3NDb250cm9sXT1cInRydWVcIiBbZGlzYWJsZUNhY2hpbmddPVwidHJ1ZVwiIChvbkZvcm1TaG93KT1cIm9uRm9ybVNob3coJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkZvcm1IaWRlKT1cIm9uRm9ybUhpZGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY3J1ZC1mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC90bi1jdXN0b20tc2Nyb2xsYmFyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1zZWFyY2hcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVMOsbSBraeG6v20nIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cIm9uRG9TZWFyY2hpbmcoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXJlcGxheVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1jDs2EgdMOsbSBraeG6v20nIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudClcIiBwcmV2ZW50VGFiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBhcmVudFNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzXCI+XHJcbiAgICAgICAgICAgICAgICA8cXVlcnktYnVpbGRlciBbc2VhcmNoU2NoZW1hXT1cInNldHRpbmcuc2NoZW1hXCIgW2ZpbHRlcnNdPVwiZmlsdGVyX3F1ZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyBtYXhIZWlnaHQ6IF9zZWFyY2hCb3hNYXhIZWlnaHQsIG1pbkhlaWdodDogJzMwMHB4JywgaGVpZ2h0OiAnYXV0bycsIHBhcmVudENsYXNzOiAnYm94LWFkdmFuY2Utc2VhcmNoLWlubGluZSd9XCJcclxuICAgICAgICAgICAgICAgICAgICAob25TYXZlKT1cImhhbmRsZVNhdmVTZXR0aW5nKCRldmVudClcIiAob25EZWxldGVTYXZlKT1cImhhbmRsZURlbGV0ZVNhdmVTZXR0aW5nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvblNlYXJjaCk9XCJoYW5kbGVTZWFyY2hCdWlsZGVyKCRldmVudClcIj48L3F1ZXJ5LWJ1aWxkZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8YWZ0ZXItdmlldy1jaGVja2VkIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAobG9hZGVkKT1cImhhbmRsZUFkdmFuY2VTZWFyY2hQYW5lbFJlbmRlcmVkKClcIj5cclxuICAgICAgICAgICAgPC9hZnRlci12aWV3LWNoZWNrZWQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
@@ -8,11 +8,11 @@ export class CheckReadyComponent {
8
8
  this.onReady.emit();
9
9
  }
10
10
  }
11
- CheckReadyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CheckReadyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
- CheckReadyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.6", type: CheckReadyComponent, selector: "app-check-ready", outputs: { onReady: "onReady" }, ngImport: i0, template: "<p>\r\n check-ready works!\r\n</p>\r\n", styles: [""] });
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CheckReadyComponent, decorators: [{
11
+ CheckReadyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: CheckReadyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ CheckReadyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: CheckReadyComponent, selector: "app-check-ready", outputs: { onReady: "onReady" }, ngImport: i0, template: "<p>\r\n check-ready works!\r\n</p>\r\n", styles: [""] });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: CheckReadyComponent, decorators: [{
14
14
  type: Component,
15
- args: [{ selector: 'app-check-ready', template: "<p>\r\n check-ready works!\r\n</p>\r\n", styles: [""] }]
15
+ args: [{ selector: 'app-check-ready', template: "<p>\r\n check-ready works!\r\n</p>\r\n" }]
16
16
  }], ctorParameters: function () { return []; }, propDecorators: { onReady: [{
17
17
  type: Output
18
18
  }] } });