barsa-sap-ui 1.0.456 → 2.0.2

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 (652) hide show
  1. package/{esm2020 → esm2022}/barsa-sap-ui.mjs +4 -4
  2. package/esm2022/lib/apply-conditional-formmatings.directive.mjs +89 -0
  3. package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +41 -0
  4. package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +141 -0
  5. package/{esm2020 → esm2022}/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +23 -23
  6. package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +29 -0
  7. package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +24 -0
  8. package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +30 -0
  9. package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +41 -0
  10. package/{esm2020 → esm2022}/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +24 -24
  11. package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +260 -0
  12. package/esm2022/lib/barsa-chat/chat.model.mjs +8 -0
  13. package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +13 -0
  14. package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +22 -0
  15. package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +56 -0
  16. package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +77 -0
  17. package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +22 -0
  18. package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +13 -0
  19. package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +15 -0
  20. package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +72 -0
  21. package/{esm2020 → esm2022}/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +23 -23
  22. package/{esm2020 → esm2022}/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +15 -15
  23. package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +14 -0
  24. package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +26 -0
  25. package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +71 -0
  26. package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +41 -0
  27. package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +61 -0
  28. package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +45 -0
  29. package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +37 -0
  30. package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +27 -0
  31. package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +94 -0
  32. package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +22 -0
  33. package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +37 -0
  34. package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +41 -0
  35. package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +29 -0
  36. package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +23 -0
  37. package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +83 -0
  38. package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +53 -0
  39. package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +159 -0
  40. package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +17 -0
  41. package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +30 -0
  42. package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +14 -0
  43. package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +34 -0
  44. package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +46 -0
  45. package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +79 -0
  46. package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +30 -0
  47. package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +31 -0
  48. package/{esm2020 → esm2022}/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +28 -28
  49. package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +98 -0
  50. package/{esm2020 → esm2022}/lib/barsa-sap-ui-routing.module.mjs +18 -18
  51. package/esm2022/lib/barsa-sap-ui.module.mjs +360 -0
  52. package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +29 -0
  53. package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +168 -0
  54. package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +27 -0
  55. package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +198 -0
  56. package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +63 -0
  57. package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +60 -0
  58. package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +26 -0
  59. package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +23 -0
  60. package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +37 -0
  61. package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +417 -0
  62. package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +36 -0
  63. package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +129 -0
  64. package/{esm2020 → esm2022}/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +19 -19
  65. package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +208 -0
  66. package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +78 -0
  67. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +44 -0
  68. package/{esm2020 → esm2022}/lib/captcha-field/captcha-field.component.mjs +28 -28
  69. package/esm2022/lib/card-item/card-item.component.mjs +76 -0
  70. package/esm2022/lib/card-view-content/card-view-content.component.mjs +46 -0
  71. package/esm2022/lib/col-renderer.directive.mjs +46 -0
  72. package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +56 -0
  73. package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +60 -0
  74. package/esm2022/lib/column-renderer/column-renderer.component.mjs +85 -0
  75. package/esm2022/lib/constants.mjs +421 -0
  76. package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +41 -0
  77. package/{esm2020 → esm2022}/lib/device-info-field-base.mjs +23 -23
  78. package/{esm2020 → esm2022}/lib/dialog-handler.directive.mjs +28 -28
  79. package/esm2022/lib/download-files.directive.mjs +33 -0
  80. package/esm2022/lib/dynamic-page-size.pipe.mjs +26 -0
  81. package/{esm2020 → esm2022}/lib/file-in-dialog/file-in-dialog.component.mjs +44 -44
  82. package/esm2022/lib/file-viewer/file-viewer.component.mjs +39 -0
  83. package/{esm2020 → esm2022}/lib/file-viewer-content/file-viewer-content.component.mjs +53 -53
  84. package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +41 -0
  85. package/esm2022/lib/form-dialog/form-dialog.component.mjs +142 -0
  86. package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +44 -0
  87. package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +43 -0
  88. package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +45 -0
  89. package/esm2022/lib/form-wizard/form-wizard.component.mjs +21 -0
  90. package/esm2022/lib/fullscreen-dialog.directive.mjs +59 -0
  91. package/esm2022/lib/fullscreen-files.directive.mjs +42 -0
  92. package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +194 -0
  93. package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +203 -0
  94. package/{esm2020 → esm2022}/lib/global-search/global-search.component.mjs +27 -27
  95. package/esm2022/lib/global-search-module/global-search-module.component.mjs +29 -0
  96. package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +25 -0
  97. package/esm2022/lib/header-avatar/header-avatar.component.mjs +18 -0
  98. package/{esm2020 → esm2022}/lib/header-facet-form/header-facet-form.component.mjs +22 -22
  99. package/{esm2020 → esm2022}/lib/header-facet-key-value/header-facet-key-value.component.mjs +31 -31
  100. package/{esm2020 → esm2022}/lib/header-facet-microchart/header-facet-microchart.component.mjs +21 -21
  101. package/{esm2020 → esm2022}/lib/header-facet-plain-text/header-facet-plain-text.component.mjs +28 -28
  102. package/esm2022/lib/header-facet-progress/header-facet-progress.component.mjs +25 -0
  103. package/esm2022/lib/header-facet-rate/header-facet-rate.component.mjs +25 -0
  104. package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +48 -0
  105. package/esm2022/lib/hyperlink/hyperlink.component.mjs +23 -0
  106. package/esm2022/lib/index.mjs +564 -0
  107. package/{esm2020 → esm2022}/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +32 -32
  108. package/esm2022/lib/layout-actions/layout-actions.component.mjs +68 -0
  109. package/esm2022/lib/layout-control/layout-control.component.mjs +234 -0
  110. package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +154 -0
  111. package/esm2022/lib/list-item/list-item.component.mjs +34 -0
  112. package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +42 -0
  113. package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +71 -0
  114. package/esm2022/lib/ly-label/ly-label.component.mjs +34 -0
  115. package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +83 -0
  116. package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +17 -0
  117. package/{esm2020 → esm2022}/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +24 -24
  118. package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +73 -0
  119. package/esm2022/lib/ly-line/ly-line.component.mjs +56 -0
  120. package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +22 -0
  121. package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +52 -0
  122. package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +44 -0
  123. package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +50 -0
  124. package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +43 -0
  125. package/{esm2020 → esm2022}/lib/mask/mask.component.mjs +22 -22
  126. package/esm2022/lib/message-strip/message-strip.component.mjs +28 -0
  127. package/esm2022/lib/models/grid-data-provider.mjs +83 -0
  128. package/esm2022/lib/models/grid-view.mjs +2 -0
  129. package/{esm2020 → esm2022}/lib/models/index.mjs +1 -1
  130. package/esm2022/lib/no-data/no-data.component.mjs +31 -0
  131. package/esm2022/lib/notification-item/notification-item.component.mjs +57 -0
  132. package/esm2022/lib/notification-popup.service.mjs +92 -0
  133. package/{esm2020 → esm2022}/lib/progress-indicator/progress-indicator.component.mjs +18 -18
  134. package/esm2022/lib/report-navigator/report-navigator.component.mjs +63 -0
  135. package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +60 -0
  136. package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +35 -0
  137. package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +97 -0
  138. package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +88 -0
  139. package/esm2022/lib/report-tree-base.mjs +408 -0
  140. package/esm2022/lib/report-view-renderer.directive.mjs +366 -0
  141. package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +50 -0
  142. package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +84 -0
  143. package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +72 -0
  144. package/esm2022/lib/sap-font-class.pipe.mjs +29 -0
  145. package/esm2022/lib/sap-font.pipe.mjs +29 -0
  146. package/esm2022/lib/sap-size.pipe.mjs +27 -0
  147. package/esm2022/lib/sap-ui-report-base.component.mjs +765 -0
  148. package/esm2022/lib/search-panel/search-panel.component.mjs +42 -0
  149. package/{esm2020 → esm2022}/lib/static-text/static-text.component.mjs +15 -15
  150. package/{esm2020 → esm2022}/lib/title/title.component.mjs +15 -15
  151. package/{esm2020 → esm2022}/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +18 -18
  152. package/esm2022/lib/ui-button/ui-button.component.mjs +31 -0
  153. package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +53 -0
  154. package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +59 -0
  155. package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +42 -0
  156. package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +34 -0
  157. package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +50 -0
  158. package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +34 -0
  159. package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +191 -0
  160. package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +149 -0
  161. package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +110 -0
  162. package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +53 -0
  163. package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +121 -0
  164. package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +92 -0
  165. package/{esm2020 → esm2022}/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +32 -32
  166. package/{esm2020 → esm2022}/lib/ui-graph/ui-graph.component.mjs +17 -17
  167. package/{esm2020 → esm2022}/lib/ui-grid/ui-grid.component.mjs +25 -25
  168. package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +43 -0
  169. package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +66 -0
  170. package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +75 -0
  171. package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +58 -0
  172. package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +155 -0
  173. package/{esm2020 → esm2022}/lib/ui-html-viewer/ui-html-viewer.component.mjs +16 -16
  174. package/{esm2020 → esm2022}/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +11 -11
  175. package/{esm2020 → esm2022}/lib/ui-label/ui-label.component.mjs +12 -12
  176. package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +349 -0
  177. package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +75 -0
  178. package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +124 -0
  179. package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +19 -0
  180. package/{esm2020 → esm2022}/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +14 -14
  181. package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +55 -0
  182. package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +430 -0
  183. package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +28 -0
  184. package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +37 -0
  185. package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +59 -0
  186. package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +93 -0
  187. package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +36 -0
  188. package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +56 -0
  189. package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +28 -0
  190. package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +24 -0
  191. package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +27 -0
  192. package/{esm2020 → esm2022}/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +21 -21
  193. package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +261 -0
  194. package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +98 -0
  195. package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +223 -0
  196. package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +48 -0
  197. package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +36 -0
  198. package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +46 -0
  199. package/{esm2020 → esm2022}/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +24 -24
  200. package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +37 -0
  201. package/{esm2020 → esm2022}/lib/ui-single-picture/ui-single-picture.component.mjs +36 -36
  202. package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +20 -0
  203. package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +155 -0
  204. package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +49 -0
  205. package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +52 -0
  206. package/{esm2020 → esm2022}/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +47 -47
  207. package/{esm2020 → esm2022}/lib/ui-time-span/ui-time-span.component.mjs +24 -24
  208. package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +53 -0
  209. package/esm2022/lib/ui-tree/ui-tree.component.mjs +92 -0
  210. package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +80 -0
  211. package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +23 -0
  212. package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +289 -0
  213. package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +25 -0
  214. package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +93 -0
  215. package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +117 -0
  216. package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +32 -0
  217. package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +48 -0
  218. package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +60 -0
  219. package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +87 -0
  220. package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +43 -0
  221. package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +184 -0
  222. package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +44 -0
  223. package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +84 -0
  224. package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +65 -0
  225. package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +116 -0
  226. package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +44 -0
  227. package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +115 -0
  228. package/esm2022/lib/upload-file-status.pipe.mjs +28 -0
  229. package/esm2022/lib/util-chat-time-badge.pipe.mjs +18 -0
  230. package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +23 -0
  231. package/{esm2020 → esm2022}/lib/wizard-layout.directive.mjs +103 -103
  232. package/{esm2020 → esm2022}/public-api.mjs +230 -222
  233. package/fesm2022/barsa-sap-ui.mjs +14765 -0
  234. package/fesm2022/barsa-sap-ui.mjs.map +1 -0
  235. package/index.d.ts +5 -5
  236. package/lib/apply-conditional-formmatings.directive.d.ts +25 -25
  237. package/lib/barsa-answer-card/barsa-answer-card.component.d.ts +12 -12
  238. package/lib/barsa-asp-viewer/barsa-asp-viewer.component.d.ts +31 -29
  239. package/lib/barsa-bar-panel/barsa-bar-panel.component.d.ts +9 -9
  240. package/lib/barsa-base-panel/barsa-base-layout-panel.component.d.ts +12 -12
  241. package/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.d.ts +15 -15
  242. package/lib/barsa-card-row-payam/barsa-card-row-payam.component.d.ts +20 -20
  243. package/lib/barsa-cartable-form/barsa-cartable-form.component.d.ts +10 -10
  244. package/lib/barsa-cartable-template/barsa-cartable-template.component.d.ts +14 -14
  245. package/lib/barsa-chat/barsa-chat.component.d.ts +48 -0
  246. package/lib/barsa-chat/chat.model.d.ts +43 -0
  247. package/lib/barsa-chat-content/barsa-chat-content.component.d.ts +5 -0
  248. package/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.d.ts +9 -0
  249. package/lib/barsa-chat-list/barsa-chat-list.component.d.ts +16 -0
  250. package/lib/barsa-chat-message/barsa-chat-message.component.d.ts +16 -0
  251. package/lib/barsa-chat-thread/barsa-chat-thread.component.d.ts +6 -0
  252. package/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.d.ts +5 -0
  253. package/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.d.ts +5 -0
  254. package/lib/barsa-chip/barsa-chip.component.d.ts +20 -20
  255. package/lib/barsa-column-indicator/barsa-column-indicator.component.d.ts +11 -11
  256. package/lib/barsa-column-rownumber/barsa-column-rownumber.component.d.ts +8 -8
  257. package/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.d.ts +6 -6
  258. package/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.d.ts +10 -10
  259. package/lib/barsa-date-time-picker/barsa-date-time-picker.component.d.ts +18 -18
  260. package/lib/barsa-dynamic-field/barsa-dynamic-field.component.d.ts +16 -16
  261. package/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.d.ts +23 -23
  262. package/lib/barsa-field-key-value/barsa-field-key-value.component.d.ts +26 -26
  263. package/lib/barsa-form-side-content/barsa-form-side-content.component.d.ts +25 -23
  264. package/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.d.ts +16 -16
  265. package/lib/barsa-group-cartable/barsa-cartable-group.component.d.ts +26 -26
  266. package/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.d.ts +14 -14
  267. package/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.d.ts +12 -12
  268. package/lib/barsa-list-file-linear/barsa-list-file-linear.component.d.ts +17 -17
  269. package/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.d.ts +8 -8
  270. package/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.d.ts +9 -9
  271. package/lib/barsa-monaco-editor/barsa-monaco-editor.component.d.ts +23 -23
  272. package/lib/barsa-network-offline/barsa-network-offline.component.d.ts +14 -14
  273. package/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.d.ts +79 -79
  274. package/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.d.ts +7 -7
  275. package/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.d.ts +13 -13
  276. package/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.d.ts +7 -7
  277. package/lib/barsa-question-answer-form/barsa-question-answer-form.component.d.ts +10 -10
  278. package/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.d.ts +13 -13
  279. package/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.d.ts +14 -14
  280. package/lib/barsa-question-post/barsa-question-post.component.d.ts +10 -10
  281. package/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.d.ts +9 -9
  282. package/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.d.ts +15 -15
  283. package/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.d.ts +31 -31
  284. package/lib/barsa-sap-ui-routing.module.d.ts +7 -7
  285. package/lib/barsa-sap-ui.module.d.ts +245 -234
  286. package/lib/barsa-search-form/barsa-search-form.component.d.ts +8 -8
  287. package/lib/barsa-simple-form/barsa-simple-form.component.d.ts +73 -73
  288. package/lib/barsa-table-column/barsa-table-column.component.d.ts +8 -8
  289. package/lib/barsa-table-header/barsa-table-header.component.d.ts +59 -59
  290. package/lib/barsa-table-row/barsa-table-row.component.d.ts +19 -18
  291. package/lib/barsa-tag-categories/barsa-tag-categories.component.d.ts +11 -11
  292. package/lib/barsa-tag-chip/barsa-tag-chip.component.d.ts +10 -10
  293. package/lib/barsa-tags-category-row/barsa-tags-category-row.component.d.ts +9 -9
  294. package/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.d.ts +18 -18
  295. package/lib/barsa-tinyemce/barsa-tinyemce.component.d.ts +54 -54
  296. package/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.d.ts +12 -12
  297. package/lib/barsa-tree-item/barsa-tree-item.component.d.ts +54 -54
  298. package/lib/barsa-tree-item/node-has-one-depth-level.pipe.d.ts +8 -8
  299. package/lib/barsa-ulv-main/barsa-ulv-main.component.d.ts +72 -72
  300. package/lib/blob-viewer/blob-viewer.component.d.ts +24 -24
  301. package/lib/breadcrumb/breadcrumb.component.d.ts +17 -17
  302. package/lib/captcha-field/captcha-field.component.d.ts +10 -10
  303. package/lib/card-item/card-item.component.d.ts +20 -20
  304. package/lib/card-view-content/card-view-content.component.d.ts +14 -14
  305. package/lib/col-renderer.directive.d.ts +10 -10
  306. package/lib/column-matrix-renderer/column-matrix-renderer.component.d.ts +23 -23
  307. package/lib/column-matrix-renderer/matrix-value.pipe.d.ts +8 -8
  308. package/lib/column-renderer/column-renderer.component.d.ts +33 -33
  309. package/lib/constants.d.ts +12 -12
  310. package/lib/custom-date-time/custom-date-time.component.d.ts +26 -26
  311. package/lib/device-info-field-base.d.ts +12 -12
  312. package/lib/dialog-handler.directive.d.ts +12 -12
  313. package/lib/download-files.directive.d.ts +9 -9
  314. package/lib/dynamic-page-size.pipe.d.ts +8 -8
  315. package/lib/file-in-dialog/file-in-dialog.component.d.ts +16 -16
  316. package/lib/file-viewer/file-viewer.component.d.ts +21 -21
  317. package/lib/file-viewer-content/file-viewer-content.component.d.ts +20 -20
  318. package/lib/file-viewer-popover/file-viewer-popover.component.d.ts +17 -17
  319. package/lib/form-dialog/form-dialog.component.d.ts +45 -45
  320. package/lib/form-dialog-less/form-dialog-less.component.d.ts +29 -29
  321. package/lib/form-toolbar/form-toolbar.component.d.ts +14 -14
  322. package/lib/form-toolbar-button/form-toolbar-button.component.d.ts +20 -20
  323. package/lib/form-wizard/form-wizard.component.d.ts +8 -8
  324. package/lib/fullscreen-dialog.directive.d.ts +20 -20
  325. package/lib/fullscreen-files.directive.d.ts +16 -16
  326. package/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.d.ts +77 -76
  327. package/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.d.ts +18 -18
  328. package/lib/global-search/global-search.component.d.ts +11 -11
  329. package/lib/global-search-module/global-search-module.component.d.ts +18 -18
  330. package/lib/global-search-panel/global-search-panel.component.d.ts +9 -9
  331. package/lib/header-avatar/header-avatar.component.d.ts +8 -8
  332. package/lib/header-facet-form/header-facet-form.component.d.ts +9 -9
  333. package/lib/header-facet-key-value/header-facet-key-value.component.d.ts +11 -11
  334. package/lib/header-facet-microchart/header-facet-microchart.component.d.ts +8 -8
  335. package/lib/header-facet-plain-text/header-facet-plain-text.component.d.ts +11 -11
  336. package/lib/header-facet-progress/header-facet-progress.component.d.ts +11 -11
  337. package/lib/header-facet-rate/header-facet-rate.component.d.ts +11 -11
  338. package/lib/htree-create-new/htree-create-new.component.d.ts +13 -13
  339. package/lib/hyperlink/hyperlink.component.d.ts +7 -7
  340. package/lib/index.d.ts +102 -100
  341. package/lib/inline-save-and-cancel/inline-save-and-cancel.component.d.ts +11 -11
  342. package/lib/layout-actions/layout-actions.component.d.ts +25 -25
  343. package/lib/layout-control/layout-control.component.d.ts +67 -67
  344. package/lib/layout-wizard/layout-wizard.component.d.ts +28 -28
  345. package/lib/list-item/list-item.component.d.ts +14 -14
  346. package/lib/ly-empty-space/ly-empty-space.component.d.ts +13 -13
  347. package/lib/ly-horizontal-layout/ly-horizontal-layout.component.d.ts +23 -23
  348. package/lib/ly-label/ly-label.component.d.ts +16 -16
  349. package/lib/ly-layout-container/ly-layout-container.component.d.ts +26 -26
  350. package/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.d.ts +8 -8
  351. package/lib/ly-layout-field-label/ly-layout-field-label.component.d.ts +13 -13
  352. package/lib/ly-layout-panel/ly-layout-panel.component.d.ts +26 -26
  353. package/lib/ly-line/ly-line.component.d.ts +17 -17
  354. package/lib/ly-simple-label/ly-simple-label.component.d.ts +9 -9
  355. package/lib/ly-tab-container/ly-tab-container.component.d.ts +19 -19
  356. package/lib/ly-tab-page/ly-tab-page.component.d.ts +20 -20
  357. package/lib/ly-vertical-layout/ly-vertical-layout.component.d.ts +19 -19
  358. package/lib/manage-filters-report/manage-filters-report.component.d.ts +24 -24
  359. package/lib/mask/mask.component.d.ts +9 -9
  360. package/lib/message-strip/message-strip.component.d.ts +11 -11
  361. package/lib/models/grid-data-provider.d.ts +22 -22
  362. package/lib/models/grid-view.d.ts +61 -61
  363. package/lib/models/index.d.ts +1 -1
  364. package/lib/no-data/no-data.component.d.ts +11 -9
  365. package/lib/notification-item/notification-item.component.d.ts +43 -43
  366. package/lib/notification-popup.service.d.ts +17 -17
  367. package/lib/progress-indicator/progress-indicator.component.d.ts +8 -8
  368. package/lib/report-navigator/report-navigator.component.d.ts +21 -21
  369. package/lib/report-new-top-form/report-new-top-form.component.d.ts +18 -18
  370. package/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.d.ts +14 -14
  371. package/lib/report-search-fields-manage/report-search-fields-manage.component.d.ts +20 -20
  372. package/lib/report-search-panel-save/report-search-panel-save.component.d.ts +27 -27
  373. package/lib/report-tree-base.d.ts +62 -62
  374. package/lib/report-view-renderer.directive.d.ts +117 -117
  375. package/lib/responsive-toolbar/responsive-toolbar.component.d.ts +19 -19
  376. package/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.d.ts +24 -24
  377. package/lib/rich-text-static/rich-text-static.component.d.ts +28 -28
  378. package/lib/sap-font-class.pipe.d.ts +8 -8
  379. package/lib/sap-font.pipe.d.ts +9 -9
  380. package/lib/sap-size.pipe.d.ts +8 -8
  381. package/lib/sap-ui-report-base.component.d.ts +154 -154
  382. package/lib/search-panel/search-panel.component.d.ts +14 -14
  383. package/lib/static-text/static-text.component.d.ts +7 -7
  384. package/lib/title/title.component.d.ts +7 -7
  385. package/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.d.ts +9 -9
  386. package/lib/ui-button/ui-button.component.d.ts +11 -11
  387. package/lib/ui-calendar/ui-calendar.component.d.ts +19 -19
  388. package/lib/ui-card-view/ui-card-view.component.d.ts +16 -16
  389. package/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.d.ts +12 -12
  390. package/lib/ui-check-box/ui-check-box.component.d.ts +14 -14
  391. package/lib/ui-color-ui/ui-color-ui.component.d.ts +16 -16
  392. package/lib/ui-container-with-button/ui-container-with-button.component.d.ts +11 -11
  393. package/lib/ui-date-range-ex/ui-date-range-ex.component.d.ts +35 -36
  394. package/lib/ui-date-time/ui-date-time.component.d.ts +39 -40
  395. package/lib/ui-editable-grid/ui-editable-grid.component.d.ts +43 -43
  396. package/lib/ui-exception-form/ui-exception-form.component.d.ts +15 -15
  397. package/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.d.ts +50 -50
  398. package/lib/ui-form-panel/ui-form-panel.component.d.ts +53 -53
  399. package/lib/ui-gantt-chart/ui-gantt-chart.component.d.ts +15 -15
  400. package/lib/ui-graph/ui-graph.component.d.ts +9 -9
  401. package/lib/ui-grid/ui-grid.component.d.ts +12 -12
  402. package/lib/ui-grid-columns/ui-grid-columns.component.d.ts +14 -14
  403. package/lib/ui-grid-filter-item/ui-grid-filter-item.component.d.ts +19 -19
  404. package/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.d.ts +24 -24
  405. package/lib/ui-grid-sort-item/ui-grid-sort-item.component.d.ts +25 -25
  406. package/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.d.ts +28 -28
  407. package/lib/ui-html-viewer/ui-html-viewer.component.d.ts +9 -9
  408. package/lib/ui-info-bar-panel/ui-info-bar-panel.component.d.ts +5 -5
  409. package/lib/ui-label/ui-label.component.d.ts +6 -6
  410. package/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.d.ts +73 -73
  411. package/lib/ui-list-view/ui-list-view.component.d.ts +29 -29
  412. package/lib/ui-matrix-view/ui-matrix-view.component.d.ts +45 -45
  413. package/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.d.ts +7 -7
  414. package/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.d.ts +6 -6
  415. package/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.d.ts +15 -15
  416. package/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.d.ts +90 -90
  417. package/lib/ui-monaco-editor/ui-monaco-editor.component.d.ts +10 -7
  418. package/lib/ui-multi-select-card/ui-multi-select-card.component.d.ts +17 -17
  419. package/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.d.ts +19 -19
  420. package/lib/ui-multi-select-combo/ui-multi-select-combo.component.d.ts +27 -27
  421. package/lib/ui-multi-select-radio/ui-multi-select-radio.component.d.ts +17 -17
  422. package/lib/ui-multi-select-slider/ui-multi-select-slider.component.d.ts +24 -24
  423. package/lib/ui-multi-select-smile/ui-multi-select-smile.component.d.ts +23 -23
  424. package/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.d.ts +11 -11
  425. package/lib/ui-num-int-slider/ui-num-int-slider.component.d.ts +18 -18
  426. package/lib/ui-num-int-ui/ui-num-int-ui.component.d.ts +10 -10
  427. package/lib/ui-pdf-viewer/ui-pdf-viewer.component.d.ts +79 -79
  428. package/lib/ui-picture-file/ui-picture-file.component.d.ts +26 -25
  429. package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +80 -69
  430. package/lib/ui-radio-group/ui-radio-group.component.d.ts +20 -20
  431. package/lib/ui-read-only-field/ui-read-only-field.component.d.ts +21 -21
  432. package/lib/ui-report-container/ui-report-container.component.d.ts +17 -17
  433. package/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.d.ts +9 -9
  434. package/lib/ui-simple-combo/ui-simple-combo.component.d.ts +16 -16
  435. package/lib/ui-single-picture/ui-single-picture.component.d.ts +13 -13
  436. package/lib/ui-switch-button/ui-switch-button.component.d.ts +11 -11
  437. package/lib/ui-table-view/ui-table-view.component.d.ts +39 -39
  438. package/lib/ui-text-area/ui-text-area.component.d.ts +23 -23
  439. package/lib/ui-text-field/ui-text-field.component.d.ts +23 -23
  440. package/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.d.ts +13 -13
  441. package/lib/ui-time-span/ui-time-span.component.d.ts +10 -10
  442. package/lib/ui-tinymce/ui-tinymce.component.d.ts +22 -22
  443. package/lib/ui-tree/ui-tree.component.d.ts +37 -37
  444. package/lib/ui-tree-view/ui-tree-view.component.d.ts +47 -47
  445. package/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.d.ts +9 -9
  446. package/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.d.ts +74 -74
  447. package/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.d.ts +16 -16
  448. package/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.d.ts +21 -21
  449. package/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.d.ts +48 -48
  450. package/lib/ul-notify-popup/ul-notify-popup.component.d.ts +21 -21
  451. package/lib/ul-toast-adapter/ul-toast-adapter.component.d.ts +13 -13
  452. package/lib/ulv-column-settings/ulv-column-settings.component.d.ts +20 -20
  453. package/lib/ulv-context-menu/ulv-context-menu.component.d.ts +31 -31
  454. package/lib/ulv-filter-settings/ulv-filter-settings.component.d.ts +19 -19
  455. package/lib/ulv-form-multi-select/ulv-form-multi-select.component.d.ts +26 -26
  456. package/lib/ulv-groupby-settings/ulv-groupby-settings.component.d.ts +16 -16
  457. package/lib/ulv-paging/ulv-paging.component.d.ts +28 -28
  458. package/lib/ulv-selection/ulv-selection.component.d.ts +43 -43
  459. package/lib/ulv-settings/ulv-settings.component.d.ts +43 -43
  460. package/lib/ulv-sort-settings/ulv-sort-settings.component.d.ts +16 -16
  461. package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +49 -49
  462. package/lib/upload-file-status.pipe.d.ts +9 -9
  463. package/lib/util-chat-time-badge.pipe.d.ts +7 -0
  464. package/lib/util-date-to-hh-mm.pipe.d.ts +7 -0
  465. package/lib/wizard-layout.directive.d.ts +40 -40
  466. package/package.json +7 -13
  467. package/public-api.d.ts +226 -218
  468. package/esm2020/lib/apply-conditional-formmatings.directive.mjs +0 -89
  469. package/esm2020/lib/barsa-answer-card/barsa-answer-card.component.mjs +0 -41
  470. package/esm2020/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +0 -127
  471. package/esm2020/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +0 -29
  472. package/esm2020/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +0 -25
  473. package/esm2020/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +0 -30
  474. package/esm2020/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +0 -41
  475. package/esm2020/lib/barsa-chip/barsa-chip.component.mjs +0 -72
  476. package/esm2020/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +0 -15
  477. package/esm2020/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +0 -26
  478. package/esm2020/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +0 -71
  479. package/esm2020/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +0 -42
  480. package/esm2020/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +0 -61
  481. package/esm2020/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +0 -45
  482. package/esm2020/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +0 -37
  483. package/esm2020/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +0 -27
  484. package/esm2020/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +0 -94
  485. package/esm2020/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +0 -22
  486. package/esm2020/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +0 -37
  487. package/esm2020/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +0 -41
  488. package/esm2020/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +0 -29
  489. package/esm2020/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +0 -23
  490. package/esm2020/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +0 -83
  491. package/esm2020/lib/barsa-network-offline/barsa-network-offline.component.mjs +0 -53
  492. package/esm2020/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +0 -159
  493. package/esm2020/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +0 -17
  494. package/esm2020/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +0 -31
  495. package/esm2020/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +0 -14
  496. package/esm2020/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +0 -35
  497. package/esm2020/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +0 -47
  498. package/esm2020/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +0 -78
  499. package/esm2020/lib/barsa-question-post/barsa-question-post.component.mjs +0 -30
  500. package/esm2020/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +0 -31
  501. package/esm2020/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +0 -98
  502. package/esm2020/lib/barsa-sap-ui.module.mjs +0 -332
  503. package/esm2020/lib/barsa-search-form/barsa-search-form.component.mjs +0 -29
  504. package/esm2020/lib/barsa-simple-form/barsa-simple-form.component.mjs +0 -168
  505. package/esm2020/lib/barsa-table-column/barsa-table-column.component.mjs +0 -28
  506. package/esm2020/lib/barsa-table-header/barsa-table-header.component.mjs +0 -198
  507. package/esm2020/lib/barsa-table-row/barsa-table-row.component.mjs +0 -61
  508. package/esm2020/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +0 -60
  509. package/esm2020/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +0 -26
  510. package/esm2020/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +0 -23
  511. package/esm2020/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +0 -38
  512. package/esm2020/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +0 -417
  513. package/esm2020/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +0 -36
  514. package/esm2020/lib/barsa-tree-item/barsa-tree-item.component.mjs +0 -130
  515. package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +0 -209
  516. package/esm2020/lib/blob-viewer/blob-viewer.component.mjs +0 -78
  517. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +0 -45
  518. package/esm2020/lib/card-item/card-item.component.mjs +0 -76
  519. package/esm2020/lib/card-view-content/card-view-content.component.mjs +0 -46
  520. package/esm2020/lib/col-renderer.directive.mjs +0 -46
  521. package/esm2020/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +0 -56
  522. package/esm2020/lib/column-matrix-renderer/matrix-value.pipe.mjs +0 -60
  523. package/esm2020/lib/column-renderer/column-renderer.component.mjs +0 -85
  524. package/esm2020/lib/constants.mjs +0 -421
  525. package/esm2020/lib/custom-date-time/custom-date-time.component.mjs +0 -41
  526. package/esm2020/lib/download-files.directive.mjs +0 -33
  527. package/esm2020/lib/dynamic-page-size.pipe.mjs +0 -26
  528. package/esm2020/lib/file-viewer/file-viewer.component.mjs +0 -47
  529. package/esm2020/lib/file-viewer-popover/file-viewer-popover.component.mjs +0 -41
  530. package/esm2020/lib/form-dialog/form-dialog.component.mjs +0 -143
  531. package/esm2020/lib/form-dialog-less/form-dialog-less.component.mjs +0 -45
  532. package/esm2020/lib/form-toolbar/form-toolbar.component.mjs +0 -42
  533. package/esm2020/lib/form-toolbar-button/form-toolbar-button.component.mjs +0 -46
  534. package/esm2020/lib/form-wizard/form-wizard.component.mjs +0 -21
  535. package/esm2020/lib/fullscreen-dialog.directive.mjs +0 -59
  536. package/esm2020/lib/fullscreen-files.directive.mjs +0 -42
  537. package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +0 -188
  538. package/esm2020/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +0 -203
  539. package/esm2020/lib/global-search-module/global-search-module.component.mjs +0 -30
  540. package/esm2020/lib/global-search-panel/global-search-panel.component.mjs +0 -25
  541. package/esm2020/lib/header-avatar/header-avatar.component.mjs +0 -19
  542. package/esm2020/lib/header-facet-progress/header-facet-progress.component.mjs +0 -26
  543. package/esm2020/lib/header-facet-rate/header-facet-rate.component.mjs +0 -26
  544. package/esm2020/lib/htree-create-new/htree-create-new.component.mjs +0 -49
  545. package/esm2020/lib/hyperlink/hyperlink.component.mjs +0 -23
  546. package/esm2020/lib/index.mjs +0 -529
  547. package/esm2020/lib/layout-actions/layout-actions.component.mjs +0 -68
  548. package/esm2020/lib/layout-control/layout-control.component.mjs +0 -234
  549. package/esm2020/lib/layout-wizard/layout-wizard.component.mjs +0 -155
  550. package/esm2020/lib/list-item/list-item.component.mjs +0 -33
  551. package/esm2020/lib/ly-empty-space/ly-empty-space.component.mjs +0 -42
  552. package/esm2020/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +0 -71
  553. package/esm2020/lib/ly-label/ly-label.component.mjs +0 -35
  554. package/esm2020/lib/ly-layout-container/ly-layout-container.component.mjs +0 -83
  555. package/esm2020/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +0 -17
  556. package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +0 -73
  557. package/esm2020/lib/ly-line/ly-line.component.mjs +0 -56
  558. package/esm2020/lib/ly-simple-label/ly-simple-label.component.mjs +0 -23
  559. package/esm2020/lib/ly-tab-container/ly-tab-container.component.mjs +0 -52
  560. package/esm2020/lib/ly-tab-page/ly-tab-page.component.mjs +0 -44
  561. package/esm2020/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +0 -50
  562. package/esm2020/lib/manage-filters-report/manage-filters-report.component.mjs +0 -45
  563. package/esm2020/lib/message-strip/message-strip.component.mjs +0 -28
  564. package/esm2020/lib/models/grid-data-provider.mjs +0 -83
  565. package/esm2020/lib/models/grid-view.mjs +0 -2
  566. package/esm2020/lib/no-data/no-data.component.mjs +0 -23
  567. package/esm2020/lib/notification-item/notification-item.component.mjs +0 -57
  568. package/esm2020/lib/notification-popup.service.mjs +0 -88
  569. package/esm2020/lib/report-navigator/report-navigator.component.mjs +0 -63
  570. package/esm2020/lib/report-new-top-form/report-new-top-form.component.mjs +0 -60
  571. package/esm2020/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +0 -35
  572. package/esm2020/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +0 -98
  573. package/esm2020/lib/report-search-panel-save/report-search-panel-save.component.mjs +0 -90
  574. package/esm2020/lib/report-tree-base.mjs +0 -408
  575. package/esm2020/lib/report-view-renderer.directive.mjs +0 -366
  576. package/esm2020/lib/responsive-toolbar/responsive-toolbar.component.mjs +0 -50
  577. package/esm2020/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +0 -84
  578. package/esm2020/lib/rich-text-static/rich-text-static.component.mjs +0 -72
  579. package/esm2020/lib/sap-font-class.pipe.mjs +0 -29
  580. package/esm2020/lib/sap-font.pipe.mjs +0 -29
  581. package/esm2020/lib/sap-size.pipe.mjs +0 -27
  582. package/esm2020/lib/sap-ui-report-base.component.mjs +0 -766
  583. package/esm2020/lib/search-panel/search-panel.component.mjs +0 -43
  584. package/esm2020/lib/ui-button/ui-button.component.mjs +0 -31
  585. package/esm2020/lib/ui-calendar/ui-calendar.component.mjs +0 -53
  586. package/esm2020/lib/ui-card-view/ui-card-view.component.mjs +0 -60
  587. package/esm2020/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +0 -43
  588. package/esm2020/lib/ui-check-box/ui-check-box.component.mjs +0 -34
  589. package/esm2020/lib/ui-color-ui/ui-color-ui.component.mjs +0 -50
  590. package/esm2020/lib/ui-container-with-button/ui-container-with-button.component.mjs +0 -34
  591. package/esm2020/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +0 -194
  592. package/esm2020/lib/ui-date-time/ui-date-time.component.mjs +0 -150
  593. package/esm2020/lib/ui-editable-grid/ui-editable-grid.component.mjs +0 -110
  594. package/esm2020/lib/ui-exception-form/ui-exception-form.component.mjs +0 -53
  595. package/esm2020/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +0 -121
  596. package/esm2020/lib/ui-form-panel/ui-form-panel.component.mjs +0 -92
  597. package/esm2020/lib/ui-grid-columns/ui-grid-columns.component.mjs +0 -44
  598. package/esm2020/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +0 -67
  599. package/esm2020/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +0 -76
  600. package/esm2020/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +0 -59
  601. package/esm2020/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +0 -156
  602. package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +0 -349
  603. package/esm2020/lib/ui-list-view/ui-list-view.component.mjs +0 -75
  604. package/esm2020/lib/ui-matrix-view/ui-matrix-view.component.mjs +0 -125
  605. package/esm2020/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +0 -19
  606. package/esm2020/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +0 -56
  607. package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +0 -430
  608. package/esm2020/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +0 -18
  609. package/esm2020/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +0 -37
  610. package/esm2020/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +0 -59
  611. package/esm2020/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +0 -93
  612. package/esm2020/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +0 -36
  613. package/esm2020/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +0 -56
  614. package/esm2020/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +0 -28
  615. package/esm2020/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +0 -24
  616. package/esm2020/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +0 -27
  617. package/esm2020/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +0 -262
  618. package/esm2020/lib/ui-picture-file/ui-picture-file.component.mjs +0 -91
  619. package/esm2020/lib/ui-pictures-info/ui-pictures-info.component.mjs +0 -223
  620. package/esm2020/lib/ui-radio-group/ui-radio-group.component.mjs +0 -48
  621. package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +0 -36
  622. package/esm2020/lib/ui-report-container/ui-report-container.component.mjs +0 -46
  623. package/esm2020/lib/ui-simple-combo/ui-simple-combo.component.mjs +0 -37
  624. package/esm2020/lib/ui-switch-button/ui-switch-button.component.mjs +0 -20
  625. package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +0 -151
  626. package/esm2020/lib/ui-text-area/ui-text-area.component.mjs +0 -49
  627. package/esm2020/lib/ui-text-field/ui-text-field.component.mjs +0 -52
  628. package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +0 -53
  629. package/esm2020/lib/ui-tree/ui-tree.component.mjs +0 -92
  630. package/esm2020/lib/ui-tree-view/ui-tree-view.component.mjs +0 -81
  631. package/esm2020/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +0 -24
  632. package/esm2020/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +0 -289
  633. package/esm2020/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +0 -26
  634. package/esm2020/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +0 -91
  635. package/esm2020/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +0 -117
  636. package/esm2020/lib/ul-notify-popup/ul-notify-popup.component.mjs +0 -32
  637. package/esm2020/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +0 -44
  638. package/esm2020/lib/ulv-column-settings/ulv-column-settings.component.mjs +0 -60
  639. package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +0 -87
  640. package/esm2020/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +0 -43
  641. package/esm2020/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +0 -185
  642. package/esm2020/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +0 -44
  643. package/esm2020/lib/ulv-paging/ulv-paging.component.mjs +0 -84
  644. package/esm2020/lib/ulv-selection/ulv-selection.component.mjs +0 -66
  645. package/esm2020/lib/ulv-settings/ulv-settings.component.mjs +0 -117
  646. package/esm2020/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +0 -44
  647. package/esm2020/lib/ulv-toolbar/ulv-toolbar.component.mjs +0 -115
  648. package/esm2020/lib/upload-file-status.pipe.mjs +0 -28
  649. package/fesm2015/barsa-sap-ui.mjs +0 -14233
  650. package/fesm2015/barsa-sap-ui.mjs.map +0 -1
  651. package/fesm2020/barsa-sap-ui.mjs +0 -14203
  652. package/fesm2020/barsa-sap-ui.mjs.map +0 -1
@@ -1,766 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self, ViewChild, ViewChildren } from '@angular/core';
2
- import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
3
- import { debounceTime, distinctUntilChanged, filter, map, takeUntil, tap, withLatestFrom } from 'rxjs/operators';
4
- import { TableComponent, ToolbarComponent } from '@fundamental-ngx/core';
5
- import { BarsaApi, GetAllColumnsSorted, getControlSizeMode, getGridSettings, ReportBaseComponent, getParentHeight, measureText, getUniqueId, SelectionMode } from 'barsa-novin-ray-core';
6
- import { LayoutControlComponent } from './layout-control/layout-control.component';
7
- import { GridMoDataList } from './models';
8
- import { UlvColumnSettingsComponent } from './ulv-column-settings/ulv-column-settings.component';
9
- import { UlvSortSettingsComponent } from './ulv-sort-settings/ulv-sort-settings.component';
10
- import { UlvGroupbySettingsComponent } from './ulv-groupby-settings/ulv-groupby-settings.component';
11
- import { UlvFilterSettingsComponent } from './ulv-filter-settings/ulv-filter-settings.component';
12
- import { DOCUMENT } from '@angular/common';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/cdk/overlay";
15
- import * as i2 from "@fundamental-ngx/core";
16
- import * as i3 from "barsa-novin-ray-core";
17
- export class SapUiReportBaseComponent extends ReportBaseComponent {
18
- constructor(el, _cdr, _overlay, _contentDensityService, _portalService, _dialogService, _ulvMainService, _layoutService, _renderer, document, _formpanelService) {
19
- super(_portalService, _ulvMainService);
20
- this.el = el;
21
- this._cdr = _cdr;
22
- this._overlay = _overlay;
23
- this._contentDensityService = _contentDensityService;
24
- this._portalService = _portalService;
25
- this._dialogService = _dialogService;
26
- this._ulvMainService = _ulvMainService;
27
- this._layoutService = _layoutService;
28
- this._renderer = _renderer;
29
- this.document = document;
30
- this._formpanelService = _formpanelService;
31
- this.useLayoutItemTextForControl = false;
32
- this.parentHeight = 0;
33
- this.dialogConfig = {
34
- responsivePadding: true,
35
- verticalPadding: true,
36
- minWidth: '40rem',
37
- minHeight: '90vh',
38
- maxWidth: '100vw',
39
- maxHeight: '100vh',
40
- resizable: true
41
- };
42
- this.id = `Report_${getUniqueId(3)}`;
43
- this.selectedRowsNumber = {};
44
- this.selectAll = false;
45
- this.rowClick = true;
46
- this.cellClick = false;
47
- this.secondaryColumnsSource = new BehaviorSubject([]);
48
- this.secondaryColumns$ = this.secondaryColumnsSource.asObservable();
49
- this.hasDetailsInRow = false;
50
- this.rowActivable = true;
51
- this.openOverflowCommands = [];
52
- this.containerWidthSource$ = new Subject();
53
- this.singleSelection = SelectionMode.SINGLE;
54
- this.multipleSelection = SelectionMode.MULTIPLE;
55
- this._deviceNameSource = new BehaviorSubject('desktop');
56
- /* eslint-disable */
57
- this.ShowFormPanelControl = (formpanelCtrlr) => { };
58
- /* eslint-disable */
59
- this.ForceCloseChild = () => { };
60
- /* eslint-disable */
61
- this.RefreshFormPanelControl = (formpanelCtrlr) => { };
62
- this.containerWidth$ = this.containerWidthSource$
63
- .asObservable()
64
- .pipe(debounceTime(200), distinctUntilChanged());
65
- this.deviceName$ = this._deviceNameSource.asObservable();
66
- this.disableResponsive$ = this.deviceName$.pipe(map((c) => c === 'desktop'));
67
- this.mobileOrTablet$ = this.deviceName$.pipe(map((device) => device === 'mobile' || device === 'tablet'));
68
- this._oldContainer = BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter;
69
- this.closeScrollStrategy = this._overlay.scrollStrategies.close();
70
- this.contentDensity$ = this._contentDensityService.contentDensity;
71
- this.secondaryColumnsCount$ = this.secondaryColumns$.pipe(map((columns) => columns.length));
72
- this.columnsCount$ = this.visibleColumns$.pipe(map((columns) => columns.length), map((count) => {
73
- const access = BarsaApi.Common.Util.TryGetValue(this.context, 'Setting.Extra.DefaultCommandsAccess');
74
- if (access?.View) {
75
- count++;
76
- }
77
- return count;
78
- }), map((count) => {
79
- if (this.selectionMode !== 'none') {
80
- count++;
81
- }
82
- return count;
83
- }));
84
- }
85
- onResetWorkflowState(mo) {
86
- mo.$WorkflowState = null;
87
- this._resetMoDataList();
88
- }
89
- get _typeDefId() {
90
- return this.context.Setting.Extra.Report.TypeDefId;
91
- }
92
- get _inlineEditMode() {
93
- return this._ulvMainService.getValueInlineEdit();
94
- }
95
- get _allowInlineEdit() {
96
- return this._ulvMainService.getAllowInlineEdit();
97
- }
98
- get _access() {
99
- return this.context.Setting?.Extra?.DefaultCommandsAccess;
100
- }
101
- set _access(val) {
102
- if (this.context.Setting.Extra) {
103
- this.context.Setting.Extra.DefaultCommandsAccess = val;
104
- }
105
- else {
106
- this.context.Setting.Extra = { DefaultCommandsAccess: val };
107
- }
108
- }
109
- get isCheckList() {
110
- return this.context.ViewSetting?.IsCheckList;
111
- }
112
- ngOnInit() {
113
- this._setParentHeight();
114
- this._readViewSetting();
115
- if (!this._access) {
116
- this._setDefaultAccess();
117
- }
118
- super.ngOnInit();
119
- this.showOkCancelButtons = this.context.ShowOkCancelButtons;
120
- this._ulvMainService.layoutInfo$.subscribe((layoutInfo) => {
121
- if (layoutInfo && layoutInfo.UseLayoutItemTextForControl) {
122
- this.useLayoutItemTextForControl = true;
123
- }
124
- });
125
- const title = this.viewSetting?.Title;
126
- if (title) {
127
- this._ulvMainService.setTitle(title);
128
- }
129
- this._ulvMainService.reportId$.subscribe((reportId) => (this.reportId = reportId));
130
- this._layoutService.setRendered(true);
131
- this.selectionMode = this.context.ViewSetting?.IsCheckList ? this.multipleSelection : this.singleSelection;
132
- this._openOnClick = this.viewSetting?.OpenOnClick;
133
- this.customRowHeight = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.ExtraJsonPropReport.GridRowHeight');
134
- this.rtl$ = this._portalService.rtl$;
135
- this.navigationArrow$ = this._portalService.rtl$.pipe(map((isRtl) => (isRtl ? 'navigation-left-arrow' : 'navigation-right-arrow')));
136
- this.allowInlineEdit$ = this._ulvMainService.allowInlineEdit$;
137
- this.inlineEditMode$ = this._ulvMainService.inlineEditMode$;
138
- this.onlyInlineEdit$ = this._ulvMainService.onlyInlineEdit$;
139
- this._ulvMainService.setCanSaveGridSettings(this.viewSetting?.CanSaveGridSetting);
140
- this.hasSelected$ = this.moDataList$.pipe(map((moList) => moList.some((c) => c.$IsChecked)));
141
- this.moDataList$ = this.moDataList$.pipe(map((items) => this._mapCartableMo(items)));
142
- const gridDataSource = new GridMoDataList(this.moDataList$, this.gridSetting$, this.visibleColumns$, this.searchTerm$);
143
- this.gridDataSource = gridDataSource;
144
- this.columns$ = combineLatest([this.gridSetting$, this.secondaryColumns$]).pipe(map(([_, secondaryColumns]) => {
145
- const secondaries = secondaryColumns.map((c) => c.Name);
146
- let columns = GetAllColumnsSorted(this.context).filter((c) => !c.Hidden);
147
- const groupedColumns = _?.SortSettingList?.filter((c) => c.IsGrouped).map((c) => c.Name);
148
- if (groupedColumns?.length) {
149
- columns = columns.filter((c) => groupedColumns.indexOf(c.Name) === -1);
150
- }
151
- return columns.filter((c) => secondaries.indexOf(c.Name) === -1);
152
- }), tap((columns) => {
153
- columns.forEach((c) => {
154
- c.$CSSClassName = 'column__FieldType' + c.FieldTypeId;
155
- if (c.FieldTypeId === 38) {
156
- c.$Width = 'auto';
157
- }
158
- if (c.Extra?.IconDisplayTypeEnum === 'Image') {
159
- c.$Width = '38px';
160
- }
161
- else {
162
- c.$Width = !BarsaApi.LoginFormData.IsUserLoggedIn // if user is anonymous all column width equals to 100%
163
- ? '100%'
164
- : c.Width > 0
165
- ? c.Width + 'px'
166
- : '100%';
167
- }
168
- });
169
- }));
170
- this._ulvMainService.inlineEditMode$.pipe(withLatestFrom(this.hasSelected$), filter(() => this._access.Add !== false));
171
- this._setContainerWidth();
172
- }
173
- ngOnDestroy() {
174
- super.ngOnDestroy();
175
- if (this._formpanelService) {
176
- this._formpanelService.destroy();
177
- }
178
- }
179
- onExecuteToolbarButton(e) {
180
- const { itemId, options } = e;
181
- this._ulvMainService.executeToolbarButton(itemId, options);
182
- }
183
- onEditMode() {
184
- this._setInlineEdit(!this._inlineEditMode);
185
- }
186
- onSelectNextInlineRecord(mo) {
187
- this._selectNextInlineRecord(mo);
188
- }
189
- onEditFormPanelSave(mo) {
190
- this._inlineEditSaveFormPanel(mo);
191
- }
192
- onEditFormPanelCancel(mo) {
193
- const moDataList = this.moDataList;
194
- const hasSelected = moDataList.some((c) => c.$IsChecked);
195
- if (hasSelected) {
196
- this._inlineEditSaveFormPanel(mo);
197
- this._setInlineEdit(false);
198
- }
199
- }
200
- onEditFormPanelValueChange(mo) {
201
- this._inlineFormPanelValueChange(mo);
202
- }
203
- onColumnResized(columns) {
204
- this._handleColumnsResized(columns);
205
- }
206
- onWorkflowShareButtons(e) {
207
- this._ulvMainService.addWorkflowButtonsInToolbar(e);
208
- }
209
- onRowClick($event) {
210
- const { mo } = $event;
211
- if (mo.group || this._inlineEditMode) {
212
- return;
213
- }
214
- const moIndex = this._getIndex(mo);
215
- this._removeCheckedAll();
216
- if (!mo.$IsChecked) {
217
- this._rowCheck(mo, moIndex, true);
218
- }
219
- if (this.viewSetting?.DisableShowFormOnDoubleClick) {
220
- return;
221
- }
222
- this._openMo(mo, moIndex);
223
- }
224
- onUlvCommand($event) {
225
- const { mo } = $event;
226
- const moIndex = this._getIndex(mo);
227
- this._ulvCommandClicked(mo, moIndex);
228
- }
229
- onDeselectAll() {
230
- this._doCheckedAll(false);
231
- // this.context.fireEvent('rowselect', this.context); // باعث میشود دوبار selectionchange گزارش فراخوانی شود
232
- }
233
- onRowCheck($event) {
234
- const { mo } = $event;
235
- const moIndex = this._getIndex(mo);
236
- if (this._openOnClick) {
237
- this.onRowClick($event);
238
- }
239
- else {
240
- this._rowCheck(mo, moIndex);
241
- }
242
- }
243
- onCartableFormClosed({ mo }) {
244
- const newMoDataList = this.moDataList;
245
- const newMoDataList2 = newMoDataList.filter((c) => c.Id !== mo.Id);
246
- this._resetMoDataList(newMoDataList2);
247
- this.refreshContextMoDataList(newMoDataList2);
248
- }
249
- onExpandClick(mo) {
250
- mo.$Expanded = !mo.$Expanded;
251
- this._setVisibility(mo.$Expanded, mo);
252
- this._resetMoDataList();
253
- }
254
- onAllCheckbox(checked) {
255
- this._doCheckedAll(checked);
256
- // if (checked) {
257
- // this.gridDataSource.resultItems.forEach((mo, index) => {
258
- // this._select(mo, index);
259
- // });
260
- // } else {
261
- // this.gridDataSource.resultItems.forEach((mo, index) => {
262
- // this._deselect(mo, index);
263
- // });
264
- // }
265
- }
266
- onSortAscending(column) {
267
- this._addSortColumn(column.Name, 'ASC');
268
- }
269
- onSortDescending(column) {
270
- this._addSortColumn(column.Name, 'DESC');
271
- }
272
- onFilter(selectedColumn) {
273
- this._showFilterSetting(selectedColumn);
274
- }
275
- onColumnSettings(device) {
276
- this._openSettings('columns', device);
277
- }
278
- onSortSettings(device) {
279
- this._openSettings('sort', device);
280
- }
281
- onGroupbySettings(device) {
282
- this._openSettings('groupby', device);
283
- }
284
- onListCheckboxClick($event) {
285
- const { mo, index, e } = $event;
286
- this.onRowCheck({ mo, index, cause: 'singleSelect' });
287
- e.stopPropagation();
288
- e.preventDefault();
289
- }
290
- onListNavigationClick($event) {
291
- const { mo, index, e } = $event;
292
- this.onRowClick({ mo, index });
293
- e.stopPropagation();
294
- e.preventDefault();
295
- }
296
- onSaveTopForm(mo) {
297
- const newMoDataList = this.moDataList;
298
- const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
299
- if (existsIndex > -1) {
300
- newMoDataList[existsIndex] = mo;
301
- }
302
- newMoDataList.map((c) => {
303
- c.$NewInlineMo = undefined;
304
- c.$IsChecked = false;
305
- });
306
- this._resetMoDataList(newMoDataList);
307
- this.refreshContextMoDataList(newMoDataList);
308
- }
309
- onNewTopFormAdd(mo) {
310
- this._addInlineMoToModataList(mo);
311
- }
312
- // protected _inlineEditModeChanged(editMode): void {
313
- // if (editMode) {
314
- // const canAdd: boolean = this._access?.Add !== false;
315
- // let selectedMo = this._getSelected();
316
- // let newMo;
317
- // if (canAdd !== false && !selectedMo) {
318
- // this._createNewInlineRecord();
319
- // return;
320
- // }
321
- // // if (!selectedMo && !newMo && this.moDataList.length > 0) {
322
- // // selectedMo = this.moDataList[0];
323
- // // }
324
- // // if (selectedMo) {
325
- // // const idOfSelectedMo = this._indexOfMo(selectedMo);
326
- // // selectedMo.$IsChecked = false;
327
- // // this._createNewInlineRecord(selectedMo);
328
- // // this._rowCheck(selectedMo, idOfSelectedMo);
329
- // // }
330
- // } else {
331
- // BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter = this._oldContainer;
332
- // this._setNewInlineMo(null);
333
- // }
334
- // }
335
- // protected _createNewInlineRecord(selectedMo?: MetaobjectDataModel) {
336
- // const mo = this._inlineEditPrepareNewMo();
337
- // const formMo = BarsaApi.Common.Merger.FastMerge(mo, selectedMo, { extendedFields: ['Id,$Caption'] });
338
- // this._setNewInlineMo(formMo);
339
- // this._select(formMo, -1);
340
- // }
341
- _resetMoDataList(newMoDataList) {
342
- this._ulvMainService.reSetMoDataList(newMoDataList);
343
- }
344
- _getWidth(label) {
345
- const labelWithPadding = measureText(label);
346
- if (labelWithPadding < 1) {
347
- return 0;
348
- }
349
- return Math.ceil(labelWithPadding);
350
- }
351
- _setParentHeight() {
352
- this.parentHeight = getParentHeight(this.el.nativeElement);
353
- }
354
- _mapCartableMo(items) {
355
- if (!this.viewSetting) {
356
- return items;
357
- }
358
- const { NameSerializeMo, CartableObjectName } = this.viewSetting;
359
- if (!NameSerializeMo || !CartableObjectName || !items?.length) {
360
- return items;
361
- }
362
- items.forEach((c) => (c[CartableObjectName] = BarsaApi.Ext.decode('{' + c[NameSerializeMo] + '}')));
363
- return items;
364
- }
365
- onToolbarCreateNewInlineMo() {
366
- this._createNewInlineMo();
367
- }
368
- onCreateNewMo() {
369
- this._createNewInlineMo(true);
370
- }
371
- onMandatory(isMandator) {
372
- this.context.fireEvent('Mandatory', isMandator);
373
- }
374
- onUpdateMo(mo) {
375
- const moDataList = this.moDataList;
376
- const moIndex = moDataList.findIndex((c) => c.Id === mo.Id);
377
- if (moIndex > -1) {
378
- moDataList[moIndex] = mo;
379
- this._resetMoDataList(moDataList);
380
- this.refreshContextMoDataList(moDataList);
381
- }
382
- }
383
- onHasDetailsInRow(value, deviceSize) {
384
- this.hasDetailsInRow = value;
385
- this._deviceSizeChanged(deviceSize);
386
- }
387
- onEscapeKey(mo) {
388
- this._handleCancelInlineEdit(mo);
389
- }
390
- _handleCancelInlineEdit(mo) {
391
- const moDataList = this.moDataList;
392
- const moIndex = moDataList.findIndex((c) => c.Id === mo.Id);
393
- if (moIndex < 0 || !mo.$NewInlineMo) {
394
- this._doCheckedAll(false);
395
- return;
396
- }
397
- const newMoDataList = moDataList.filter((c) => c.Id !== mo.Id);
398
- this._resetMoDataList(newMoDataList);
399
- this.refreshContextMoDataList(newMoDataList);
400
- }
401
- _createNewInlineMo(setChanged = false) {
402
- const moDataList = this.moDataList;
403
- const existInlineMo = moDataList.find((c) => c.$NewInlineMo);
404
- if (existInlineMo) {
405
- this._inlineEditSaveFormPanel(existInlineMo);
406
- }
407
- const mo = this._inlineReportCreateNewMo(true);
408
- if (setChanged) {
409
- mo.$InlineMoChanged = true;
410
- }
411
- this.moDataList.forEach((c) => (c.$IsChecked = false));
412
- this._addInlineMoToModataList(mo, true);
413
- }
414
- _inlineReportCreateNewMo(isChecked) {
415
- return this._ulvMainService.createNewInlineMo(isChecked);
416
- }
417
- _inlineFormPanelValueChange(mo) {
418
- const newMoDataList = this.moDataList;
419
- const existMoIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
420
- if (existMoIndex > -1) {
421
- newMoDataList[existMoIndex] = BarsaApi.Common.MetaObjectWeb.CreateMo(mo);
422
- this._resetMoDataList(newMoDataList);
423
- this.refreshContextMoDataList(newMoDataList);
424
- }
425
- }
426
- _selectNextInlineRecord(mo) {
427
- const newMoDataList = this.moDataList;
428
- if (!mo.$NewInlineMo) {
429
- // select next record
430
- const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
431
- if (existsIndex > -1 && existsIndex + 1 < newMoDataList.length) {
432
- newMoDataList[existsIndex + 1].$IsChecked = false;
433
- this._rowCheck(newMoDataList[existsIndex + 1], existsIndex + 1);
434
- }
435
- else {
436
- newMoDataList.map((c) => {
437
- c.$NewInlineMo = undefined;
438
- c.$IsChecked = false;
439
- });
440
- this._addInlineMoToModataList(this._inlineReportCreateNewMo(true), true);
441
- }
442
- return;
443
- }
444
- else {
445
- this._createNewInlineMo();
446
- }
447
- }
448
- _inlineEditSaveFormPanel(mo) {
449
- const newMoDataList = this.moDataList;
450
- if (!mo.$NewInlineMo) {
451
- return;
452
- }
453
- const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
454
- if (existsIndex > -1) {
455
- newMoDataList[existsIndex] = mo;
456
- }
457
- newMoDataList.map((c) => {
458
- c.$NewInlineMo = undefined;
459
- c.$IsChecked = false;
460
- });
461
- // this._ulvMainService.createNewInlineMo();
462
- }
463
- _setDefaultAccess() {
464
- this._access = {
465
- Add: false,
466
- AddToList: false,
467
- Delete: false,
468
- Edit: false,
469
- Export: false,
470
- Print: false,
471
- Refresh: false,
472
- RemoveFromList: false,
473
- View: false
474
- };
475
- }
476
- _expandMo(selectedMo, expand) {
477
- selectedMo.$Expanded = expand;
478
- selectedMo.$Children?.forEach((child) => {
479
- this._expandMo(child, expand);
480
- });
481
- }
482
- _indexOfId(id) {
483
- return this.gridDataSource.resultItems.findIndex((c) => c.Id === id);
484
- }
485
- _indexOfMo(mo) {
486
- return this.gridDataSource.resultItems.findIndex((c) => c.Id === mo.Id);
487
- }
488
- _indexOfSelected() {
489
- return this.gridDataSource.resultItems.findIndex((c) => c.$IsChecked);
490
- }
491
- _getIndex(mo) {
492
- return this.moDataList.findIndex((c) => c.Id === mo.Id);
493
- }
494
- _setInlineEdit(value) {
495
- this._ulvMainService.setInlineEdit(value);
496
- }
497
- _readViewSetting() {
498
- this.viewSetting = this.context.Setting.ClassNames.CustomUi?.Parameters;
499
- }
500
- // protected _moDataListChanged(moDataList: MetaobjectDataModel[]): void {
501
- // super._moDataListChanged(moDataList);
502
- // if (this._inlineEditMode) {
503
- // const checkedMoIndex = moDataList.findIndex((c) => c.$IsChecked);
504
- // if (checkedMoIndex > -1) {
505
- // const checkedMo = moDataList[checkedMoIndex];
506
- // if (checkedMo.Id !== this.formPanelCtrlr.Mo.Id) {
507
- // this._inlineEditorDestroyFormPanelCtrlr();
508
- // this._inlineEditCreateFormPanelCtrlr(checkedMo, checkedMoIndex);
509
- // }
510
- // }
511
- // }
512
- // }
513
- _setVisibility(expand, mo //MetaobjectDataModel
514
- ) {
515
- mo.$Children?.forEach((child) => {
516
- child.$Visibility = expand;
517
- if (child.$Children) {
518
- this._setVisibility(expand, child);
519
- }
520
- });
521
- }
522
- // protected _setNewInlineMo(mo: MetaobjectDataModel | null): void {
523
- // this._ulvMainService.setNewInlineMo(mo);
524
- // }
525
- // protected _inlineEditPrepareNewMo(): MetaobjectDataModel {
526
- // const newMo = getNewMoGridEditor(this.formSetting, this._typeDefId);
527
- // newMo.Id = getUniqueId(3);
528
- // if (this._isComposite()) {
529
- // const relation = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.Relation');
530
- // newMo[relation.ParentFdName] = relation.ParentMoId;
531
- // }
532
- // const newMoDataList = [...this.moDataList, newMo as MetaobjectDataModel];
533
- // this._ulvMainService.reSetMoDataList(newMoDataList);
534
- // BarsaApi.Ul.ApplicationCtrlr.fireEvent(
535
- // BarsaApi.Ul.ApplicationCtrlr.EventEnum.GlobalReportMoAdd,
536
- // this.context,
537
- // reportEventMoAdd
538
- // );
539
- // this.context.fireEvent('RefreshContextMoDataList', newMoDataList);
540
- // return newMo as MetaobjectDataModel;
541
- // }
542
- _addInlineMoToModataList(newInlineMo, select = false) {
543
- const newMoDataList = [...this.moDataList, { ...newInlineMo, $IsChecked: select }];
544
- this._resetMoDataList(newMoDataList);
545
- this.refreshContextMoDataList(newMoDataList);
546
- }
547
- _rowCheck(mo, index, selected = false) {
548
- const editMode = this._inlineEditMode && this._allowInlineEdit;
549
- if (mo.$IsChecked && !this.isCheckList) {
550
- return;
551
- }
552
- let selectionMode = this.selectionMode;
553
- if (editMode) {
554
- selectionMode = SelectionMode.SINGLE;
555
- }
556
- const checked = !mo.$IsChecked || selected;
557
- this.rowHoverable = false;
558
- if (selectionMode === 'none') {
559
- return;
560
- }
561
- if (checked) {
562
- if (selectionMode === 'single' && checked) {
563
- this._doCheckedAll(false);
564
- }
565
- if (editMode) {
566
- if (index !== -1) {
567
- // this._setNewInlineMo(null);
568
- this._select(mo, index);
569
- }
570
- // TODO
571
- // this._setValueInlineMo(mo);
572
- }
573
- else {
574
- this._select(mo, index);
575
- }
576
- }
577
- else
578
- this._deselect(mo, index);
579
- }
580
- // protected _setValueInlineMo(mo: MetaobjectDataModel): void {
581
- // // this.formPanelCtrlr.SetValue({ ...mo, $TypeDefId: this._typeDefId });
582
- // }
583
- _inlineEditorDestroyFormPanelCtrlr() {
584
- // if (this.formPanelCtrlr) {
585
- // this._formPanelService.destroy();
586
- // this.formPanelCtrlr.Destroy();
587
- // this.formPanelCtrlr = null;
588
- // }
589
- }
590
- _windowResized() {
591
- this._setContainerWidth();
592
- this._setParentHeight();
593
- this._cdr.detectChanges();
594
- }
595
- _setContainerWidth() {
596
- const el = this.el.nativeElement;
597
- this.containerWidthSource$.next(el.offsetWidth);
598
- }
599
- _deviceSizeChanged(deviceSize) {
600
- const elNativeElement = this.el.nativeElement;
601
- if (this._inlineEditMode) {
602
- this.secondaryColumnsSource.next([]);
603
- return;
604
- }
605
- const gridSize = getControlSizeMode(elNativeElement, deviceSize);
606
- let deviceName = 'desktop';
607
- this.allColumns
608
- ?.filter((c) => !c.Hidden)
609
- .forEach((c) => (c.$TextWidth = c.$TextWidth ? c.$TextWidth : this._getWidth(c.Alias) + 10));
610
- const allColumnsWidth = this.allColumns.map((column) => column.$TextWidth && column.Width > column.$TextWidth ? column.Width : column.$TextWidth || column.Width);
611
- const visibleColumns = this._visibleColumnsSource.getValue();
612
- let columnsCount = visibleColumns.length;
613
- const colWidthSettings = this.gridSettingSource.getValue()?.ColSettingList?.map((c) => c.Width);
614
- const columnsWidth = colWidthSettings?.length ? colWidthSettings : allColumnsWidth;
615
- let sumColWidth = 0;
616
- if (this.context.ViewSetting?.IsCheckList) {
617
- sumColWidth += 15;
618
- }
619
- if (this.context.Setting?.Extra?.DefaultCommandsAccess?.View) {
620
- sumColWidth += 32;
621
- }
622
- if (this.hasDetailsInRow) {
623
- sumColWidth += 210;
624
- }
625
- const containerWidth = elNativeElement.clientWidth;
626
- switch (gridSize) {
627
- case 'l':
628
- case 'xl':
629
- deviceName = 'desktop';
630
- break;
631
- case 's':
632
- deviceName = 'mobile';
633
- columnsCount = 2;
634
- break;
635
- case 'm':
636
- deviceName = 'tablet';
637
- columnsCount = 4;
638
- break;
639
- }
640
- this._deviceNameSource.next(deviceName);
641
- if (columnsWidth.length > 0 && containerWidth > 0 && deviceSize !== 's') {
642
- columnsCount = visibleColumns.length;
643
- columnsWidth.forEach((width, index) => {
644
- if (sumColWidth + width > containerWidth && columnsCount === visibleColumns.length) {
645
- columnsCount = index;
646
- }
647
- sumColWidth += width;
648
- });
649
- }
650
- if (visibleColumns.length > 2) {
651
- if (this.viewSetting?.DisableResponsive || this._deviceNameSource.getValue() === 'desktop') {
652
- const secColumns = this.secondaryColumnsSource.getValue();
653
- if (secColumns.length) {
654
- this.secondaryColumnsSource.next([]);
655
- }
656
- return;
657
- }
658
- this.secondaryColumnsSource.next(visibleColumns.slice(columnsCount, visibleColumns.length));
659
- }
660
- }
661
- _openSettings(name, device) {
662
- let component = null;
663
- switch (name) {
664
- case 'columns':
665
- component = UlvColumnSettingsComponent;
666
- break;
667
- case 'sort':
668
- component = UlvSortSettingsComponent;
669
- break;
670
- case 'groupby':
671
- component = UlvGroupbySettingsComponent;
672
- break;
673
- }
674
- const config = {
675
- ...this.dialogConfig,
676
- data: { context: this.context },
677
- fullScreen: device === 'mobile',
678
- minWidth: device === 'mobile' ? 'auto' : this.dialogConfig.minWidth,
679
- minHeight: device === 'mobile' ? 'auto' : this.dialogConfig.minHeight,
680
- maxHeight: device === 'mobile' ? '100%' : this.dialogConfig.maxHeight,
681
- maxWidth: device === 'mobile' ? '100%' : this.dialogConfig.maxWidth,
682
- mobile: device === 'mobile'
683
- };
684
- if (component !== null) {
685
- const dialogRef = this._dialogService.open(component, config);
686
- dialogRef.afterClosed.pipe(takeUntil(this._onDestroy$)).subscribe((setting) => {
687
- if (setting) {
688
- const isSortChanged = name === 'sort' || name === 'groupby';
689
- this.updateGridSetting(setting, isSortChanged);
690
- this.context.moDataList = this.gridDataSource.resultItems;
691
- this._setVisibleColumns();
692
- }
693
- });
694
- }
695
- }
696
- _showFilterSetting(selectedColumn) {
697
- const typeDefId = this._typeDefId;
698
- const controlsInfo$ = this._ulvMainService.loadMetaConditionsControlInfos(typeDefId, this.allColumns.map((c) => c.Name));
699
- const config = {
700
- ...this.dialogConfig,
701
- data: {
702
- controlsInfo$,
703
- typeDefId,
704
- selectedColumnName: selectedColumn.Name,
705
- context: this.context
706
- }
707
- };
708
- const dialogRef = this._dialogService.open(UlvFilterSettingsComponent, config);
709
- dialogRef.afterClosed.pipe(takeUntil(this._onDestroy$)).subscribe((setting) => {
710
- if (setting) {
711
- }
712
- });
713
- }
714
- _addSortColumn(name, sortDirection, isGrouped = false) {
715
- const sortItem = {
716
- Name: name,
717
- SortDirection: sortDirection,
718
- IsGrouped: isGrouped
719
- };
720
- const settings = getGridSettings(this.context);
721
- const existSortItemIndex = settings.SortSettingList.findIndex((c) => c.Name === name);
722
- if (existSortItemIndex > -1) {
723
- settings.SortSettingList[existSortItemIndex] = sortItem;
724
- }
725
- else {
726
- settings.SortSettingList.push(sortItem);
727
- }
728
- this.updateGridSetting(settings, true);
729
- }
730
- }
731
- SapUiReportBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: SapUiReportBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i2.ContentDensityService }, { token: i3.PortalService }, { token: i2.DialogService }, { token: i3.UlvMainService }, { token: i3.LayoutService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: i3.FormPanelService, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
732
- SapUiReportBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: SapUiReportBaseComponent, selector: "bsu-sap-ui-report-base", inputs: { ShowFormPanelControl: "ShowFormPanelControl", ForceCloseChild: "ForceCloseChild", RefreshFormPanelControl: "RefreshFormPanelControl" }, viewQueries: [{ propertyName: "tableComponent", first: true, predicate: TableComponent, descendants: true }, { propertyName: "toolbarComponent", first: true, predicate: ToolbarComponent, descendants: true }, { propertyName: "tableRowsRef", predicate: ["tableRows"], descendants: true }, { propertyName: "layoutControlsRef", predicate: LayoutControlComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
733
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: SapUiReportBaseComponent, decorators: [{
734
- type: Component,
735
- args: [{
736
- selector: 'bsu-sap-ui-report-base',
737
- template: '',
738
- changeDetection: ChangeDetectionStrategy.OnPush
739
- }]
740
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i2.ContentDensityService }, { type: i3.PortalService }, { type: i2.DialogService }, { type: i3.UlvMainService }, { type: i3.LayoutService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
741
- type: Inject,
742
- args: [DOCUMENT]
743
- }] }, { type: i3.FormPanelService, decorators: [{
744
- type: Optional
745
- }, {
746
- type: Self
747
- }] }]; }, propDecorators: { tableComponent: [{
748
- type: ViewChild,
749
- args: [TableComponent]
750
- }], toolbarComponent: [{
751
- type: ViewChild,
752
- args: [ToolbarComponent]
753
- }], tableRowsRef: [{
754
- type: ViewChildren,
755
- args: ['tableRows']
756
- }], layoutControlsRef: [{
757
- type: ViewChildren,
758
- args: [LayoutControlComponent]
759
- }], ShowFormPanelControl: [{
760
- type: Input
761
- }], ForceCloseChild: [{
762
- type: Input
763
- }], RefreshFormPanelControl: [{
764
- type: Input
765
- }] } });
766
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUNILFFBQVEsRUFLUixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFJZixtQkFBbUIsRUFLbkIsZUFBZSxFQUNmLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU8zQyxNQUFNLE9BQU8sd0JBQ1QsU0FBUSxtQkFBbUI7SUFtRTNCLFlBQ1csRUFBYyxFQUNYLElBQXVCLEVBQ3ZCLFFBQWlCLEVBQ2pCLHNCQUE2QyxFQUM3QyxjQUE2QixFQUM3QixjQUE2QixFQUM3QixlQUErQixFQUMvQixjQUE2QixFQUM3QixTQUFvQixFQUNGLFFBQVEsRUFDTixpQkFBbUM7UUFFakUsS0FBSyxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQVpoQyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ1gsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ0YsYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUNOLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUF0RXJFLGdDQUEyQixHQUFHLEtBQUssQ0FBQztRQUdwQyxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixpQkFBWSxHQUFpQjtZQUN6QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFNBQVMsRUFBRSxJQUFJO1NBQ2xCLENBQUM7UUFDRixPQUFFLEdBQUcsVUFBVSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDeEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQVNsQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFJbEIsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLHNCQUFpQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUcvRCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQix5QkFBb0IsR0FBYyxFQUFFLENBQUM7UUFDckMsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQVM5QyxvQkFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDdkMsc0JBQWlCLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQVVqQyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBYSxTQUFTLENBQUMsQ0FBQztRQXlTekUsb0JBQW9CO1FBQ1gseUJBQW9CLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUN2RCxvQkFBb0I7UUFDWCxvQkFBZSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNwQyxvQkFBb0I7UUFDWCw0QkFBdUIsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBN1J0RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUI7YUFDNUMsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBQ3ZFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQztRQUNsRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUNoQyxHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNsQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ3JHLElBQUksTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDZCxLQUFLLEVBQUUsQ0FBQzthQUNYO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sRUFBRTtnQkFDL0IsS0FBSyxFQUFFLENBQUM7YUFDWDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsRUFBdUI7UUFDeEMsRUFBRSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDdkQsQ0FBQztJQUNELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUM7SUFDOUQsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEdBQTBCO1FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUM7U0FDMUQ7YUFBTTtZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQy9EO0lBQ0wsQ0FBQztJQUNELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFDRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtRQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0RCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsMkJBQTJCLEVBQUU7Z0JBQ3RELElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7YUFDM0M7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO1FBQ3RDLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDM0csSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQ3BCLHlDQUF5QyxDQUM1QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNqRCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUMvRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FDckMsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FDbkIsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDM0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hELElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekYsSUFBSSxjQUFjLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRTtZQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNaLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFtQixFQUFFLEVBQUU7Z0JBQ3BDLENBQUMsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsRUFBRTtvQkFDdEIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7aUJBQ3JCO2dCQUNELElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxtQkFBbUIsS0FBSyxPQUFPLEVBQUU7b0JBQzFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDSCxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsdURBQXVEO3dCQUNyRyxDQUFDLENBQUMsTUFBTTt3QkFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDOzRCQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUk7NEJBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUM7aUJBQ2hCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNyQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUNqQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQzNDLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsQ0FBb0M7UUFDdkQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELFVBQVU7UUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsRUFBdUI7UUFDdkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxFQUF1QjtRQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUNELDBCQUEwQixDQUFDLEVBQXVCO1FBQzlDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsZUFBZSxDQUFDLE9BQWdDO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsQ0FBd0I7UUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsVUFBVSxDQUFDLE1BQU07UUFDYixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2xDLE9BQU87U0FDVjtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLDRCQUE0QixFQUFFO1lBQ2hELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTTtRQUNmLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxhQUFhO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQiw0R0FBNEc7SUFDaEgsQ0FBQztJQUNELFVBQVUsQ0FBQyxNQUFNO1FBQ2IsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELGFBQWEsQ0FBQyxFQUF1QjtRQUNqQyxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFPO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsaUJBQWlCO1FBQ2pCLDZEQUE2RDtRQUM3RCwrQkFBK0I7UUFDL0IsUUFBUTtRQUNSLFdBQVc7UUFDWCw2REFBNkQ7UUFDN0QsaUNBQWlDO1FBQ2pDLFFBQVE7UUFDUixJQUFJO0lBQ1IsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFNO1FBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBTTtRQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELFFBQVEsQ0FBQyxjQUFjO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBTTtRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQU07UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQU07UUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQU07UUFDdEIsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQU07UUFDeEIsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxhQUFhLENBQUMsRUFBdUI7UUFDakMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNsQixhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsZUFBZSxDQUFDLEVBQXVCO1FBQ25DLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBUUQscURBQXFEO0lBQ3JELHNCQUFzQjtJQUN0QiwrREFBK0Q7SUFFL0QsZ0RBQWdEO0lBQ2hELHFCQUFxQjtJQUNyQixpREFBaUQ7SUFDakQsNkNBQTZDO0lBQzdDLHNCQUFzQjtJQUN0QixZQUFZO0lBQ1osd0VBQXdFO0lBQ3hFLGtEQUFrRDtJQUNsRCxlQUFlO0lBQ2YsK0JBQStCO0lBQy9CLHFFQUFxRTtJQUNyRSxnREFBZ0Q7SUFDaEQsMERBQTBEO0lBQzFELDZEQUE2RDtJQUM3RCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGtGQUFrRjtJQUNsRixzQ0FBc0M7SUFDdEMsUUFBUTtJQUNSLElBQUk7SUFDSix1RUFBdUU7SUFDdkUsaURBQWlEO0lBQ2pELDRHQUE0RztJQUM1RyxvQ0FBb0M7SUFDcEMsZ0NBQWdDO0lBQ2hDLElBQUk7SUFDTSxnQkFBZ0IsQ0FBQyxhQUFxQztRQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ1MsU0FBUyxDQUFDLEtBQWE7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDUyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUE0QixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNTLGNBQWMsQ0FBQyxLQUE0QjtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE1BQU0sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDM0QsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCwwQkFBMEI7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNELGFBQWE7UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELFdBQVcsQ0FBQyxVQUFtQjtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELFVBQVUsQ0FBQyxFQUF1QjtRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUNELGlCQUFpQixDQUFDLEtBQWMsRUFBRSxVQUFVO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsV0FBVyxDQUFDLEVBQXVCO1FBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ08sdUJBQXVCLENBQUMsRUFBdUI7UUFDbkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsT0FBTztTQUNWO1FBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ08sa0JBQWtCLENBQUMsVUFBVSxHQUFHLEtBQUs7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEQ7UUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxVQUFVLEVBQUU7WUFDWixFQUFFLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNPLHdCQUF3QixDQUFDLFNBQWtCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRVMsMkJBQTJCLENBQUMsRUFBdUI7UUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNuQixhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEQ7SUFDTCxDQUFDO0lBQ1MsdUJBQXVCLENBQUMsRUFBdUI7UUFDckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRTtZQUNsQixxQkFBcUI7WUFDckIsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFO2dCQUM1RCxhQUFhLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDbkU7aUJBQU07Z0JBQ0gsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNwQixDQUFDLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDNUU7WUFDRCxPQUFPO1NBQ1Y7YUFBTTtZQUNILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUNTLHdCQUF3QixDQUFDLEVBQXVCO1FBQ3RELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNuQztRQUNELGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixDQUFDLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUMzQixDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILDRDQUE0QztJQUNoRCxDQUFDO0lBQ1MsaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDWCxHQUFHLEVBQUUsS0FBSztZQUNWLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLEtBQUs7WUFDWCxNQUFNLEVBQUUsS0FBSztZQUNiLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLEtBQUs7WUFDZCxjQUFjLEVBQUUsS0FBSztZQUNyQixJQUFJLEVBQUUsS0FBSztTQUNkLENBQUM7SUFDTixDQUFDO0lBQ1MsU0FBUyxDQUFDLFVBQStCLEVBQUUsTUFBTTtRQUN2RCxVQUFVLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUM5QixVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNTLFVBQVUsQ0FBQyxFQUFFO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDUyxVQUFVLENBQUMsRUFBdUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDUyxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ1MsU0FBUyxDQUFDLEVBQXVCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDUyxjQUFjLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ1MsZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7SUFDNUUsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSw0Q0FBNEM7SUFDNUMsa0NBQWtDO0lBQ2xDLDRFQUE0RTtJQUU1RSxxQ0FBcUM7SUFDckMsNERBQTREO0lBQzVELGdFQUFnRTtJQUNoRSw2REFBNkQ7SUFDN0QsbUZBQW1GO0lBQ25GLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osUUFBUTtJQUNSLElBQUk7SUFFTSxjQUFjLENBQ3BCLE1BQWUsRUFDZixFQUFPLENBQUMscUJBQXFCOztRQUU3QixFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVCLEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1lBQzNCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdEM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsK0NBQStDO0lBQy9DLElBQUk7SUFDSiw2REFBNkQ7SUFDN0QsdUVBQXVFO0lBQ3ZFLDZCQUE2QjtJQUM3Qiw2QkFBNkI7SUFDN0IsaUdBQWlHO0lBQ2pHLDBEQUEwRDtJQUMxRCxJQUFJO0lBQ0osbUZBQW1GO0lBQ25GLDZEQUE2RDtJQUM3RCwwQ0FBMEM7SUFDMUMsOERBQThEO0lBQzlELGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsS0FBSztJQUNMLDJFQUEyRTtJQUMzRSwwQ0FBMEM7SUFDMUMsSUFBSTtJQUNNLHdCQUF3QixDQUFDLFdBQWdDLEVBQUUsU0FBa0IsS0FBSztRQUN4RixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVTLFNBQVMsQ0FBQyxFQUF1QixFQUFFLEtBQWEsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUN4RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BDLE9BQU87U0FDVjtRQUNELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkMsSUFBSSxRQUFRLEVBQUU7WUFDVixhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztTQUN4QztRQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxhQUFhLEtBQUssTUFBTSxFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUNELElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxhQUFhLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QjtZQUNELElBQUksUUFBUSxFQUFFO2dCQUNWLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNkLDhCQUE4QjtvQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzNCO2dCQUNELE9BQU87Z0JBQ1AsOEJBQThCO2FBQ2pDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzNCO1NBQ0o7O1lBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELCtEQUErRDtJQUMvRCwrRUFBK0U7SUFDL0UsSUFBSTtJQUVNLGtDQUFrQztRQUN4Qyw2QkFBNkI7UUFDN0Isd0NBQXdDO1FBQ3hDLHFDQUFxQztRQUNyQyxrQ0FBa0M7UUFDbEMsSUFBSTtJQUNSLENBQUM7SUFDUyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNTLGtCQUFrQjtRQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQTRCLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVTLGtCQUFrQixDQUFDLFVBQVU7UUFDbkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUE0QixDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLE9BQU87U0FDVjtRQUVELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRSxJQUFJLFVBQVUsR0FBZSxTQUFTLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVU7WUFDWCxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQ3pCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakcsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNuRCxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUMzRyxDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQXVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRixJQUFJLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRyxNQUFNLFlBQVksR0FBYSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDN0YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFO1lBQ3ZDLFdBQVcsSUFBSSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUU7WUFDMUQsV0FBVyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixXQUFXLElBQUksR0FBRyxDQUFDO1NBQ3RCO1FBQ0QsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUNuRCxRQUFRLFFBQVEsRUFBRTtZQUNkLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxJQUFJO2dCQUNMLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQ3ZCLE1BQU07WUFDVixLQUFLLEdBQUc7Z0JBQ0osVUFBVSxHQUFHLFFBQVEsQ0FBQztnQkFDdEIsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDakIsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFDSixVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUN0QixZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixNQUFNO1NBQ2I7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXhDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksY0FBYyxHQUFHLENBQUMsSUFBSSxVQUFVLEtBQUssR0FBRyxFQUFFO1lBQ3JFLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksV0FBVyxHQUFHLEtBQUssR0FBRyxjQUFjLElBQUksWUFBWSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUU7b0JBQ2hGLFlBQVksR0FBRyxLQUFLLENBQUM7aUJBQ3hCO2dCQUNELFdBQVcsSUFBSSxLQUFLLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO29CQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN4QztnQkFDRCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQy9GO0lBQ0wsQ0FBQztJQUVTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBa0I7UUFDNUMsSUFBSSxTQUFTLEdBQThCLElBQUksQ0FBQztRQUNoRCxRQUFRLElBQUksRUFBRTtZQUNWLEtBQUssU0FBUztnQkFDVixTQUFTLEdBQUcsMEJBQTBCLENBQUM7Z0JBQ3ZDLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsU0FBUyxHQUFHLHdCQUF3QixDQUFDO2dCQUNyQyxNQUFNO1lBQ1YsS0FBSyxTQUFTO2dCQUNWLFNBQVMsR0FBRywyQkFBMkIsQ0FBQztnQkFDeEMsTUFBTTtTQUNiO1FBQ0QsTUFBTSxNQUFNLEdBQWlCO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLFlBQVk7WUFDcEIsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsVUFBVSxFQUFFLE1BQU0sS0FBSyxRQUFRO1lBQy9CLFFBQVEsRUFBRSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUTtZQUNuRSxTQUFTLEVBQUUsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVM7WUFDckUsU0FBUyxFQUFFLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTO1lBQ3JFLFFBQVEsRUFBRSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUTtZQUNuRSxNQUFNLEVBQUUsTUFBTSxLQUFLLFFBQVE7U0FDOUIsQ0FBQztRQUNGLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtZQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMxRSxJQUFJLE9BQU8sRUFBRTtvQkFDVCxNQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUM7b0JBQzVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO29CQUMxRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztpQkFDN0I7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUNTLGtCQUFrQixDQUFDLGNBQWdDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsQ0FDckUsU0FBUyxFQUNULElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3JDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRztZQUNYLEdBQUcsSUFBSSxDQUFDLFlBQVk7WUFDcEIsSUFBSSxFQUFFO2dCQUNGLGFBQWE7Z0JBQ2IsU0FBUztnQkFDVCxrQkFBa0IsRUFBRSxjQUFjLENBQUMsSUFBSTtnQkFDdkMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3hCO1NBQ0osQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxRSxJQUFJLE9BQU8sRUFBRTthQUNaO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ1MsY0FBYyxDQUFDLElBQVMsRUFBRSxhQUFxQixFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ3hFLE1BQU0sUUFBUSxHQUFHO1lBQ2IsSUFBSSxFQUFFLElBQUk7WUFDVixhQUFhLEVBQUUsYUFBYTtZQUM1QixTQUFTLEVBQUUsU0FBUztTQUN2QixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RGLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDekIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztTQUMzRDthQUFNO1lBQ0gsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7O3FIQWx5QlEsd0JBQXdCLHVSQThFckIsUUFBUTt5R0E5RVgsd0JBQXdCLGdRQUl0QixjQUFjLG1GQUNkLGdCQUFnQixzSkFFYixzQkFBc0IsdUVBVjFCLEVBQUU7MkZBR0gsd0JBQXdCO2tCQUxwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDs7MEJBK0VRLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUTs7MEJBQUksSUFBSTs0Q0EzRU0sY0FBYztzQkFBeEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNJLGdCQUFnQjtzQkFBNUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0EsWUFBWTtzQkFBdEMsWUFBWTt1QkFBQyxXQUFXO2dCQUV6QixpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsc0JBQXNCO2dCQW9XM0Isb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFJlbmRlcmVyMixcclxuICAgIFNlbGYsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3Q2hpbGRyZW5cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ29udGVudERlbnNpdHksXHJcbiAgICBDb250ZW50RGVuc2l0eVNlcnZpY2UsXHJcbiAgICBEaWFsb2dDb25maWcsXHJcbiAgICBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgVGFibGVDb21wb25lbnQsXHJcbiAgICBUb29sYmFyQ29tcG9uZW50XHJcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBCYXJzYUFwaSxcclxuICAgIGNvbHVtbnNSZXNpemVkRXZlbnRBcmdzLFxyXG4gICAgRGVmYXVsdENvbW1hbmRzQWNjZXNzLFxyXG4gICAgRGV2aWNlU2l6ZSxcclxuICAgIEZvcm1QYW5lbFNlcnZpY2UsXHJcbiAgICBHZXRBbGxDb2x1bW5zU29ydGVkLFxyXG4gICAgZ2V0Q29udHJvbFNpemVNb2RlLFxyXG4gICAgZ2V0R3JpZFNldHRpbmdzLFxyXG4gICAgTGF5b3V0U2VydmljZSxcclxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBQb3J0YWxTZXJ2aWNlLFxyXG4gICAgUmVwb3J0QmFzZUNvbXBvbmVudCxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZyxcclxuICAgIFVsdk1haW5TZXJ2aWNlLFxyXG4gICAgU2hhcmVCdXR0b25zQ2hvaWNlRGVmLFxyXG4gICAgZ2V0UGFyZW50SGVpZ2h0LFxyXG4gICAgbWVhc3VyZVRleHQsXHJcbiAgICBnZXRVbmlxdWVJZCxcclxuICAgIFNlbGVjdGlvbk1vZGVcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IExheW91dENvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1jb250cm9sL2xheW91dC1jb250cm9sLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdyaWRNb0RhdGFMaXN0IH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWNvbHVtbi1zZXR0aW5ncy91bHYtY29sdW1uLXNldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LXNvcnQtc2V0dGluZ3MvdWx2LXNvcnQtc2V0dGluZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVWx2R3JvdXBieVNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtZ3JvdXBieS1zZXR0aW5ncy91bHYtZ3JvdXBieS1zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVbHZGaWx0ZXJTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWZpbHRlci1zZXR0aW5ncy91bHYtZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3Utc2FwLXVpLXJlcG9ydC1iYXNlJyxcclxuICAgIHRlbXBsYXRlOiAnJyxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTYXBVaVJlcG9ydEJhc2VDb21wb25lbnQ8VCBleHRlbmRzIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPlxyXG4gICAgZXh0ZW5kcyBSZXBvcnRCYXNlQ29tcG9uZW50XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIEBWaWV3Q2hpbGQoVGFibGVDb21wb25lbnQpIHRhYmxlQ29tcG9uZW50OiBUYWJsZUNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoVG9vbGJhckNvbXBvbmVudCkgdG9vbGJhckNvbXBvbmVudDogVG9vbGJhckNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlUm93cycpIHRhYmxlUm93c1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gICAgQFZpZXdDaGlsZHJlbihMYXlvdXRDb250cm9sQ29tcG9uZW50KVxyXG4gICAgbGF5b3V0Q29udHJvbHNSZWY6IFF1ZXJ5TGlzdDxMYXlvdXRDb250cm9sQ29tcG9uZW50PjtcclxuICAgIHVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCA9IGZhbHNlO1xyXG4gICAgaGFzU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgc2hvd09rQ2FuY2VsQnV0dG9uczogYW55O1xyXG4gICAgcGFyZW50SGVpZ2h0ID0gMDtcclxuICAgIGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxyXG4gICAgICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcclxuICAgICAgICBtaW5XaWR0aDogJzQwcmVtJyxcclxuICAgICAgICBtaW5IZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBtYXhXaWR0aDogJzEwMHZ3JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCcsXHJcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgaWQgPSBgUmVwb3J0XyR7Z2V0VW5pcXVlSWQoMyl9YDtcclxuICAgIHNlbGVjdGVkUm93c051bWJlciA9IHt9O1xyXG4gICAgc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICBzZWxlY3Rpb25BZGFwdGVySGFuZGxlcjoge1xyXG4gICAgICAgIHNjb3BlOiBhbnk7XHJcbiAgICAgICAgcm93c2VsZWN0OiBhbnk7XHJcbiAgICAgICAgcm93ZGVzZWxlY3Q6IGFueTtcclxuICAgICAgICBiZWZvcmVyb3dzZWxlY3Q6IGFueTtcclxuICAgIH07XHJcbiAgICBuYXZpZ2F0aW9uQXJyb3ckOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBjdXN0b21Sb3dIZWlnaHQ6IGFueTtcclxuICAgIHJvd0NsaWNrID0gdHJ1ZTtcclxuICAgIGNlbGxDbGljayA9IGZhbHNlO1xyXG4gICAgZGV2aWNlTmFtZSQ6IE9ic2VydmFibGU8RGV2aWNlU2l6ZT47XHJcbiAgICBtb2JpbGVPclRhYmxldCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gICAgc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVwb3J0Vmlld0NvbHVtbltdPihbXSk7XHJcbiAgICBzZWNvbmRhcnlDb2x1bW5zJCA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgIHBvcGluJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XHJcbiAgICBoYXNEZXRhaWxzSW5Sb3cgPSBmYWxzZTtcclxuICAgIHJvd0FjdGl2YWJsZSA9IHRydWU7XHJcbiAgICBvcGVuT3ZlcmZsb3dDb21tYW5kczogYm9vbGVhbltdID0gW107XHJcbiAgICBjb250YWluZXJXaWR0aFNvdXJjZSQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcbiAgICBjbG9zZVNjcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneTtcclxuICAgIHJvd0hvdmVyYWJsZTogYm9vbGVhbjtcclxuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGU7XHJcbiAgICBjb2x1bW5zQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBzZWNvbmRhcnlDb2x1bW5zQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBjb250YWluZXJXaWR0aCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIGNvbHVtbnMkOiBPYnNlcnZhYmxlPFJlcG9ydFZpZXdDb2x1bW5bXT47XHJcbiAgICBncmlkRGF0YVNvdXJjZTogR3JpZE1vRGF0YUxpc3Q7XHJcbiAgICBzaW5nbGVTZWxlY3Rpb24gPSBTZWxlY3Rpb25Nb2RlLlNJTkdMRTtcclxuICAgIG11bHRpcGxlU2VsZWN0aW9uID0gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuICAgIGFsbG93SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBvbmx5SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBmb3JtUGFuZWxDdHJscjogYW55O1xyXG4gICAgbGF5b3V0JDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgcnRsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHJlcG9ydElkOiBzdHJpbmc7XHJcbiAgICB2aWV3U2V0dGluZzogVDtcclxuICAgIGRpc2FibGVSZXNwb25zaXZlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHByb3RlY3RlZCBfZGV2aWNlTmFtZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGV2aWNlU2l6ZT4oJ2Rlc2t0b3AnKTtcclxuICAgIHByaXZhdGUgX29sZENvbnRhaW5lcjogYW55O1xyXG4gICAgcHJpdmF0ZSBfb3Blbk9uQ2xpY2s6IGJvb2xlYW47XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBfb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2NvbnRlbnREZW5zaXR5U2VydmljZTogQ29udGVudERlbnNpdHlTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF91bHZNYWluU2VydmljZTogVWx2TWFpblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9sYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcm90ZWN0ZWQgX2Zvcm1wYW5lbFNlcnZpY2U6IEZvcm1QYW5lbFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9wb3J0YWxTZXJ2aWNlLCBfdWx2TWFpblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgkID0gdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSRcclxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICB0aGlzLmRldmljZU5hbWUkID0gdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVSZXNwb25zaXZlJCA9IHRoaXMuZGV2aWNlTmFtZSQucGlwZShtYXAoKGMpID0+IGMgPT09ICdkZXNrdG9wJykpO1xyXG4gICAgICAgIHRoaXMubW9iaWxlT3JUYWJsZXQkID0gdGhpcy5kZXZpY2VOYW1lJC5waXBlKG1hcCgoZGV2aWNlKSA9PiBkZXZpY2UgPT09ICdtb2JpbGUnIHx8IGRldmljZSA9PT0gJ3RhYmxldCcpKTtcclxuICAgICAgICB0aGlzLl9vbGRDb250YWluZXIgPSBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTY3JvbGxTdHJhdGVneSA9IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuY29udGVudERlbnNpdHkkID0gdGhpcy5fY29udGVudERlbnNpdHlTZXJ2aWNlLmNvbnRlbnREZW5zaXR5O1xyXG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc0NvdW50JCA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1ucyQucGlwZShtYXAoKGNvbHVtbnMpID0+IGNvbHVtbnMubGVuZ3RoKSk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zQ291bnQkID0gdGhpcy52aXNpYmxlQ29sdW1ucyQucGlwZShcclxuICAgICAgICAgICAgbWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCksXHJcbiAgICAgICAgICAgIG1hcCgoY291bnQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LCAnU2V0dGluZy5FeHRyYS5EZWZhdWx0Q29tbWFuZHNBY2Nlc3MnKTtcclxuICAgICAgICAgICAgICAgIGlmIChhY2Nlc3M/LlZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbWFwKChjb3VudDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBvblJlc2V0V29ya2Zsb3dTdGF0ZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIG1vLiRXb3JrZmxvd1N0YXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3R5cGVEZWZJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYS5SZXBvcnQuVHlwZURlZklkO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9pbmxpbmVFZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuZ2V0VmFsdWVJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBnZXQgX2FsbG93SW5saW5lRWRpdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuZ2V0QWxsb3dJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBnZXQgX2FjY2VzcygpOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3Mge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuU2V0dGluZz8uRXh0cmE/LkRlZmF1bHRDb21tYW5kc0FjY2VzcztcclxuICAgIH1cclxuICAgIHNldCBfYWNjZXNzKHZhbDogRGVmYXVsdENvbW1hbmRzQWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhLkRlZmF1bHRDb21tYW5kc0FjY2VzcyA9IHZhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYSA9IHsgRGVmYXVsdENvbW1hbmRzQWNjZXNzOiB2YWwgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgaXNDaGVja0xpc3QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5WaWV3U2V0dGluZz8uSXNDaGVja0xpc3Q7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXRQYXJlbnRIZWlnaHQoKTtcclxuICAgICAgICB0aGlzLl9yZWFkVmlld1NldHRpbmcoKTtcclxuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXREZWZhdWx0QWNjZXNzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5zaG93T2tDYW5jZWxCdXR0b25zID0gdGhpcy5jb250ZXh0LlNob3dPa0NhbmNlbEJ1dHRvbnM7XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UubGF5b3V0SW5mbyQuc3Vic2NyaWJlKChsYXlvdXRJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsYXlvdXRJbmZvICYmIGxheW91dEluZm8uVXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudmlld1NldHRpbmc/LlRpdGxlO1xyXG4gICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlcG9ydElkJC5zdWJzY3JpYmUoKHJlcG9ydElkKSA9PiAodGhpcy5yZXBvcnRJZCA9IHJlcG9ydElkKSk7XHJcbiAgICAgICAgdGhpcy5fbGF5b3V0U2VydmljZS5zZXRSZW5kZXJlZCh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPSB0aGlzLmNvbnRleHQuVmlld1NldHRpbmc/LklzQ2hlY2tMaXN0ID8gdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiA6IHRoaXMuc2luZ2xlU2VsZWN0aW9uO1xyXG4gICAgICAgIHRoaXMuX29wZW5PbkNsaWNrID0gdGhpcy52aWV3U2V0dGluZz8uT3Blbk9uQ2xpY2s7XHJcbiAgICAgICAgdGhpcy5jdXN0b21Sb3dIZWlnaHQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcsXHJcbiAgICAgICAgICAgICdFeHRyYS5FeHRyYUpzb25Qcm9wUmVwb3J0LkdyaWRSb3dIZWlnaHQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJ0bCQgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnJ0bCQ7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQXJyb3ckID0gdGhpcy5fcG9ydGFsU2VydmljZS5ydGwkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoaXNSdGwpID0+IChpc1J0bCA/ICduYXZpZ2F0aW9uLWxlZnQtYXJyb3cnIDogJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWxsb3dJbmxpbmVFZGl0JCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmFsbG93SW5saW5lRWRpdCQ7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVFZGl0TW9kZSQgPSB0aGlzLl91bHZNYWluU2VydmljZS5pbmxpbmVFZGl0TW9kZSQ7XHJcbiAgICAgICAgdGhpcy5vbmx5SW5saW5lRWRpdCQgPSB0aGlzLl91bHZNYWluU2VydmljZS5vbmx5SW5saW5lRWRpdCQ7XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0Q2FuU2F2ZUdyaWRTZXR0aW5ncyh0aGlzLnZpZXdTZXR0aW5nPy5DYW5TYXZlR3JpZFNldHRpbmcpO1xyXG4gICAgICAgIHRoaXMuaGFzU2VsZWN0ZWQkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgobW9MaXN0KSA9PiBtb0xpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKSkpO1xyXG4gICAgICAgIHRoaXMubW9EYXRhTGlzdCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChpdGVtcykgPT4gdGhpcy5fbWFwQ2FydGFibGVNbyhpdGVtcykpKTtcclxuICAgICAgICBjb25zdCBncmlkRGF0YVNvdXJjZSA9IG5ldyBHcmlkTW9EYXRhTGlzdChcclxuICAgICAgICAgICAgdGhpcy5tb0RhdGFMaXN0JCxcclxuICAgICAgICAgICAgdGhpcy5ncmlkU2V0dGluZyQsXHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMkLFxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0kXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YVNvdXJjZSA9IGdyaWREYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMuY29sdW1ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmdyaWRTZXR0aW5nJCwgdGhpcy5zZWNvbmRhcnlDb2x1bW5zJF0pLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW18sIHNlY29uZGFyeUNvbHVtbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRhcmllcyA9IHNlY29uZGFyeUNvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBHZXRBbGxDb2x1bW5zU29ydGVkKHRoaXMuY29udGV4dCkuZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSBfPy5Tb3J0U2V0dGluZ0xpc3Q/LmZpbHRlcigoYykgPT4gYy5Jc0dyb3VwZWQpLm1hcCgoYykgPT4gYy5OYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjKSA9PiBncm91cGVkQ29sdW1ucy5pbmRleE9mKGMuTmFtZSkgPT09IC0xKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoYykgPT4gc2Vjb25kYXJpZXMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0YXAoKGNvbHVtbnMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYzogUmVwb3J0Vmlld0NvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGMuJENTU0NsYXNzTmFtZSA9ICdjb2x1bW5fX0ZpZWxkVHlwZScgKyBjLkZpZWxkVHlwZUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLkZpZWxkVHlwZUlkID09PSAzOCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuRXh0cmE/Lkljb25EaXNwbGF5VHlwZUVudW0gPT09ICdJbWFnZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAnMzhweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAhQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1VzZXJMb2dnZWRJbiAvLyBpZiB1c2VyIGlzIGFub255bW91cyBhbGwgY29sdW1uIHdpZHRoIGVxdWFscyB0byAxMDAlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcxMDAlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjLldpZHRoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjLldpZHRoICsgJ3B4J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5pbmxpbmVFZGl0TW9kZSQucGlwZShcclxuICAgICAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oYXNTZWxlY3RlZCQpLFxyXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5fYWNjZXNzLkFkZCAhPT0gZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICBpZiAodGhpcy5fZm9ybXBhbmVsU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtcGFuZWxTZXJ2aWNlLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkV4ZWN1dGVUb29sYmFyQnV0dG9uKGU6IHsgaXRlbUlkOiBzdHJpbmc7IG9wdGlvbnM/OiBhbnkgfSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgaXRlbUlkLCBvcHRpb25zIH0gPSBlO1xyXG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmV4ZWN1dGVUb29sYmFyQnV0dG9uKGl0ZW1JZCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBvbkVkaXRNb2RlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldElubGluZUVkaXQoIXRoaXMuX2lubGluZUVkaXRNb2RlKTtcclxuICAgIH1cclxuICAgIG9uU2VsZWN0TmV4dElubGluZVJlY29yZChtbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdE5leHRJbmxpbmVSZWNvcmQobW8pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRWRpdEZvcm1QYW5lbFNhdmUobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChtbyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25FZGl0Rm9ybVBhbmVsQ2FuY2VsKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcclxuICAgICAgICBjb25zdCBoYXNTZWxlY3RlZCA9IG1vRGF0YUxpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKTtcclxuICAgICAgICBpZiAoaGFzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW8pO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRJbmxpbmVFZGl0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2lubGluZUZvcm1QYW5lbFZhbHVlQ2hhbmdlKG1vKTtcclxuICAgIH1cclxuICAgIG9uQ29sdW1uUmVzaXplZChjb2x1bW5zOiBjb2x1bW5zUmVzaXplZEV2ZW50QXJncyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZUNvbHVtbnNSZXNpemVkKGNvbHVtbnMpO1xyXG4gICAgfVxyXG4gICAgb25Xb3JrZmxvd1NoYXJlQnV0dG9ucyhlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5hZGRXb3JrZmxvd0J1dHRvbnNJblRvb2xiYXIoZSk7XHJcbiAgICB9XHJcbiAgICBvblJvd0NsaWNrKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcclxuICAgICAgICBpZiAobW8uZ3JvdXAgfHwgdGhpcy5faW5saW5lRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZUNoZWNrZWRBbGwoKTtcclxuICAgICAgICBpZiAoIW1vLiRJc0NoZWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobW8sIG1vSW5kZXgsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52aWV3U2V0dGluZz8uRGlzYWJsZVNob3dGb3JtT25Eb3VibGVDbGljaykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX29wZW5NbyhtbywgbW9JbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25VbHZDb21tYW5kKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcclxuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xyXG4gICAgICAgIHRoaXMuX3VsdkNvbW1hbmRDbGlja2VkKG1vLCBtb0luZGV4KTtcclxuICAgIH1cclxuICAgIG9uRGVzZWxlY3RBbGwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcclxuICAgICAgICAvLyB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdyb3dzZWxlY3QnLCB0aGlzLmNvbnRleHQpOyAvLyDYqNin2LnYqyDZhduM2LTZiNivINiv2YjYqNin2LEgc2VsZWN0aW9uY2hhbmdlINqv2LLYp9ix2LQg2YHYsdin2K7ZiNin2YbbjCDYtNmI2K9cclxuICAgIH1cclxuICAgIG9uUm93Q2hlY2soJGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XHJcbiAgICAgICAgaWYgKHRoaXMuX29wZW5PbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25Sb3dDbGljaygkZXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG1vLCBtb0luZGV4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkNhcnRhYmxlRm9ybUNsb3NlZCh7IG1vIH0pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QyID0gbmV3TW9EYXRhTGlzdC5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcclxuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdDIpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QyKTtcclxuICAgIH1cclxuICAgIG9uRXhwYW5kQ2xpY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBtby4kRXhwYW5kZWQgPSAhbW8uJEV4cGFuZGVkO1xyXG4gICAgICAgIHRoaXMuX3NldFZpc2liaWxpdHkobW8uJEV4cGFuZGVkLCBtbyk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BbGxDaGVja2JveChjaGVja2VkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGNoZWNrZWQpO1xyXG4gICAgICAgIC8vIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZvckVhY2goKG1vLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcclxuICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZvckVhY2goKG1vLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl9kZXNlbGVjdChtbywgaW5kZXgpO1xyXG4gICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU29ydEFzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hZGRTb3J0Q29sdW1uKGNvbHVtbi5OYW1lLCAnQVNDJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Tb3J0RGVzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hZGRTb3J0Q29sdW1uKGNvbHVtbi5OYW1lLCAnREVTQycpO1xyXG4gICAgfVxyXG4gICAgb25GaWx0ZXIoc2VsZWN0ZWRDb2x1bW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbik7XHJcbiAgICB9XHJcblxyXG4gICAgb25Db2x1bW5TZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ2NvbHVtbnMnLCBkZXZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU29ydFNldHRpbmdzKGRldmljZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnc29ydCcsIGRldmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Hcm91cGJ5U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdncm91cGJ5JywgZGV2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkxpc3RDaGVja2JveENsaWNrKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4LCBjYXVzZTogJ3NpbmdsZVNlbGVjdCcgfSk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25MaXN0TmF2aWdhdGlvbkNsaWNrKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgb25TYXZlVG9wRm9ybShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xyXG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICB9XHJcbiAgICBvbk5ld1RvcEZvcm1BZGQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChtbyk7XHJcbiAgICB9XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQElucHV0KCkgU2hvd0Zvcm1QYW5lbENvbnRyb2wgPSAoZm9ybXBhbmVsQ3RybHIpID0+IHt9O1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIEZvcmNlQ2xvc2VDaGlsZCA9ICgpID0+IHt9O1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIFJlZnJlc2hGb3JtUGFuZWxDb250cm9sID0gKGZvcm1wYW5lbEN0cmxyKSA9PiB7fTtcclxuXHJcbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRNb2RlQ2hhbmdlZChlZGl0TW9kZSk6IHZvaWQge1xyXG4gICAgLy8gICAgIGlmIChlZGl0TW9kZSkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjYW5BZGQ6IGJvb2xlYW4gPSB0aGlzLl9hY2Nlc3M/LkFkZCAhPT0gZmFsc2U7XHJcblxyXG4gICAgLy8gICAgICAgICBsZXQgc2VsZWN0ZWRNbyA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XHJcbiAgICAvLyAgICAgICAgIGxldCBuZXdNbztcclxuICAgIC8vICAgICAgICAgaWYgKGNhbkFkZCAhPT0gZmFsc2UgJiYgIXNlbGVjdGVkTW8pIHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZVJlY29yZCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIC8vIGlmICghc2VsZWN0ZWRNbyAmJiAhbmV3TW8gJiYgdGhpcy5tb0RhdGFMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8gPSB0aGlzLm1vRGF0YUxpc3RbMF07XHJcbiAgICAvLyAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICAgICAgLy8gaWYgKHNlbGVjdGVkTW8pIHtcclxuICAgIC8vICAgICAgICAgLy8gICAgIGNvbnN0IGlkT2ZTZWxlY3RlZE1vID0gdGhpcy5faW5kZXhPZk1vKHNlbGVjdGVkTW8pO1xyXG4gICAgLy8gICAgICAgICAvLyAgICAgc2VsZWN0ZWRNby4kSXNDaGVja2VkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoc2VsZWN0ZWRNbyk7XHJcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9yb3dDaGVjayhzZWxlY3RlZE1vLCBpZE9mU2VsZWN0ZWRNbyk7XHJcbiAgICAvLyAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyID0gdGhpcy5fb2xkQ29udGFpbmVyO1xyXG4gICAgLy8gICAgICAgICB0aGlzLl9zZXROZXdJbmxpbmVNbyhudWxsKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm90ZWN0ZWQgX2NyZWF0ZU5ld0lubGluZVJlY29yZChzZWxlY3RlZE1vPzogTWV0YW9iamVjdERhdGFNb2RlbCkge1xyXG4gICAgLy8gICAgIGNvbnN0IG1vID0gdGhpcy5faW5saW5lRWRpdFByZXBhcmVOZXdNbygpO1xyXG4gICAgLy8gICAgIGNvbnN0IGZvcm1NbyA9IEJhcnNhQXBpLkNvbW1vbi5NZXJnZXIuRmFzdE1lcmdlKG1vLCBzZWxlY3RlZE1vLCB7IGV4dGVuZGVkRmllbGRzOiBbJ0lkLCRDYXB0aW9uJ10gfSk7XHJcbiAgICAvLyAgICAgdGhpcy5fc2V0TmV3SW5saW5lTW8oZm9ybU1vKTtcclxuICAgIC8vICAgICB0aGlzLl9zZWxlY3QoZm9ybU1vLCAtMSk7XHJcbiAgICAvLyB9XHJcbiAgICBwcm90ZWN0ZWQgX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0PzogTWV0YW9iamVjdERhdGFNb2RlbFtdKSB7XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVTZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9nZXRXaWR0aChsYWJlbDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsYWJlbFdpdGhQYWRkaW5nID0gbWVhc3VyZVRleHQobGFiZWwpO1xyXG4gICAgICAgIGlmIChsYWJlbFdpdGhQYWRkaW5nIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsYWJlbFdpdGhQYWRkaW5nKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0UGFyZW50SGVpZ2h0KCkge1xyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0ID0gZ2V0UGFyZW50SGVpZ2h0KHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX21hcENhcnRhYmxlTW8oaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xyXG4gICAgICAgIGlmICghdGhpcy52aWV3U2V0dGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgTmFtZVNlcmlhbGl6ZU1vLCBDYXJ0YWJsZU9iamVjdE5hbWUgfSA9IHRoaXMudmlld1NldHRpbmc7XHJcbiAgICAgICAgaWYgKCFOYW1lU2VyaWFsaXplTW8gfHwgIUNhcnRhYmxlT2JqZWN0TmFtZSB8fCAhaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGMpID0+IChjW0NhcnRhYmxlT2JqZWN0TmFtZV0gPSBCYXJzYUFwaS5FeHQuZGVjb2RlKCd7JyArIGNbTmFtZVNlcmlhbGl6ZU1vXSArICd9JykpKTtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub29sYmFyQ3JlYXRlTmV3SW5saW5lTW8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcclxuICAgIH1cclxuICAgIG9uQ3JlYXRlTmV3TW8oKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8odHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBvbk1hbmRhdG9yeShpc01hbmRhdG9yOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnTWFuZGF0b3J5JywgaXNNYW5kYXRvcik7XHJcbiAgICB9XHJcbiAgICBvblVwZGF0ZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcclxuICAgICAgICBjb25zdCBtb0luZGV4ID0gbW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcclxuICAgICAgICBpZiAobW9JbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG1vRGF0YUxpc3RbbW9JbmRleF0gPSBtbztcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG1vRGF0YUxpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChtb0RhdGFMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkhhc0RldGFpbHNJblJvdyh2YWx1ZTogYm9vbGVhbiwgZGV2aWNlU2l6ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFzRGV0YWlsc0luUm93ID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fZGV2aWNlU2l6ZUNoYW5nZWQoZGV2aWNlU2l6ZSk7XHJcbiAgICB9XHJcbiAgICBvbkVzY2FwZUtleShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbmNlbElubGluZUVkaXQobW8pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2FuY2VsSW5saW5lRWRpdChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XHJcbiAgICAgICAgaWYgKG1vSW5kZXggPCAwIHx8ICFtby4kTmV3SW5saW5lTW8pIHtcclxuICAgICAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gbW9EYXRhTGlzdC5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcclxuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9jcmVhdGVOZXdJbmxpbmVNbyhzZXRDaGFuZ2VkID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGNvbnN0IGV4aXN0SW5saW5lTW8gPSBtb0RhdGFMaXN0LmZpbmQoKGMpID0+IGMuJE5ld0lubGluZU1vKTtcclxuICAgICAgICBpZiAoZXhpc3RJbmxpbmVNbykge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChleGlzdElubGluZU1vKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKTtcclxuICAgICAgICBpZiAoc2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICBtby4kSW5saW5lTW9DaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0LmZvckVhY2goKGMpID0+IChjLiRJc0NoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgICAgIHRoaXMuX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG1vLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2lubGluZVJlcG9ydENyZWF0ZU5ld01vKGlzQ2hlY2tlZDogYm9vbGVhbik6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5jcmVhdGVOZXdJbmxpbmVNbyhpc0NoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5saW5lRm9ybVBhbmVsVmFsdWVDaGFuZ2UobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGNvbnN0IGV4aXN0TW9JbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XHJcbiAgICAgICAgaWYgKGV4aXN0TW9JbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RNb0luZGV4XSA9IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViLkNyZWF0ZU1vKG1vKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdE5leHRJbmxpbmVSZWNvcmQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XHJcbiAgICAgICAgICAgIC8vIHNlbGVjdCBuZXh0IHJlY29yZFxyXG4gICAgICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XHJcbiAgICAgICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xICYmIGV4aXN0c0luZGV4ICsgMSA8IG5ld01vRGF0YUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4ICsgMV0uJElzQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLCBleGlzdHNJbmRleCArIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3TW9EYXRhTGlzdC5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QodGhpcy5faW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8odHJ1ZSksIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfaW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xyXG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5fdWx2TWFpblNlcnZpY2UuY3JlYXRlTmV3SW5saW5lTW8oKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0RGVmYXVsdEFjY2VzcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3MgPSB7XHJcbiAgICAgICAgICAgIEFkZDogZmFsc2UsXHJcbiAgICAgICAgICAgIEFkZFRvTGlzdDogZmFsc2UsXHJcbiAgICAgICAgICAgIERlbGV0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIEVkaXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBFeHBvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBQcmludDogZmFsc2UsXHJcbiAgICAgICAgICAgIFJlZnJlc2g6IGZhbHNlLFxyXG4gICAgICAgICAgICBSZW1vdmVGcm9tTGlzdDogZmFsc2UsXHJcbiAgICAgICAgICAgIFZpZXc6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZXhwYW5kTW8oc2VsZWN0ZWRNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgZXhwYW5kKTogdm9pZCB7XHJcbiAgICAgICAgc2VsZWN0ZWRNby4kRXhwYW5kZWQgPSBleHBhbmQ7XHJcbiAgICAgICAgc2VsZWN0ZWRNby4kQ2hpbGRyZW4/LmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZE1vKGNoaWxkLCBleHBhbmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pbmRleE9mSWQoaWQpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gaWQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pbmRleE9mTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pbmRleE9mU2VsZWN0ZWQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuJElzQ2hlY2tlZCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZGV4KG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXRJbmxpbmVFZGl0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0SW5saW5lRWRpdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3JlYWRWaWV3U2V0dGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdTZXR0aW5nID0gdGhpcy5jb250ZXh0LlNldHRpbmcuQ2xhc3NOYW1lcy5DdXN0b21VaT8uUGFyYW1ldGVycztcclxuICAgIH1cclxuICAgIC8vIHByb3RlY3RlZCBfbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XHJcbiAgICAvLyAgICAgc3VwZXIuX21vRGF0YUxpc3RDaGFuZ2VkKG1vRGF0YUxpc3QpO1xyXG4gICAgLy8gICAgIGlmICh0aGlzLl9pbmxpbmVFZGl0TW9kZSkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjaGVja2VkTW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKGNoZWNrZWRNb0luZGV4ID4gLTEpIHtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRNbyA9IG1vRGF0YUxpc3RbY2hlY2tlZE1vSW5kZXhdO1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKGNoZWNrZWRNby5JZCAhPT0gdGhpcy5mb3JtUGFuZWxDdHJsci5Nby5JZCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRvckRlc3Ryb3lGb3JtUGFuZWxDdHJscigpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRDcmVhdGVGb3JtUGFuZWxDdHJscihjaGVja2VkTW8sIGNoZWNrZWRNb0luZGV4KTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NldFZpc2liaWxpdHkoXHJcbiAgICAgICAgZXhwYW5kOiBib29sZWFuLFxyXG4gICAgICAgIG1vOiBhbnkgLy9NZXRhb2JqZWN0RGF0YU1vZGVsXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBtby4kQ2hpbGRyZW4/LmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGNoaWxkLiRWaXNpYmlsaXR5ID0gZXhwYW5kO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuJENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRWaXNpYmlsaXR5KGV4cGFuZCwgY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJvdGVjdGVkIF9zZXROZXdJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcclxuICAgIC8vICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXROZXdJbmxpbmVNbyhtbyk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRQcmVwYXJlTmV3TW8oKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XHJcbiAgICAvLyBjb25zdCBuZXdNbyA9IGdldE5ld01vR3JpZEVkaXRvcih0aGlzLmZvcm1TZXR0aW5nLCB0aGlzLl90eXBlRGVmSWQpO1xyXG4gICAgLy8gbmV3TW8uSWQgPSBnZXRVbmlxdWVJZCgzKTtcclxuICAgIC8vIGlmICh0aGlzLl9pc0NvbXBvc2l0ZSgpKSB7XHJcbiAgICAvLyAgICAgY29uc3QgcmVsYXRpb24gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLmNvbnRleHQuU2V0dGluZywgJ0V4dHJhLlJlbGF0aW9uJyk7XHJcbiAgICAvLyAgICAgbmV3TW9bcmVsYXRpb24uUGFyZW50RmROYW1lXSA9IHJlbGF0aW9uLlBhcmVudE1vSWQ7XHJcbiAgICAvLyB9XHJcbiAgICAvLyAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IFsuLi50aGlzLm1vRGF0YUxpc3QsIG5ld01vIGFzIE1ldGFvYmplY3REYXRhTW9kZWxdO1xyXG4gICAgLy8gICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVTZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xyXG4gICAgLy8gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5maXJlRXZlbnQoXHJcbiAgICAvLyAgIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuRXZlbnRFbnVtLkdsb2JhbFJlcG9ydE1vQWRkLFxyXG4gICAgLy8gICB0aGlzLmNvbnRleHQsXHJcbiAgICAvLyAgIHJlcG9ydEV2ZW50TW9BZGRcclxuICAgIC8vICk7XHJcbiAgICAvLyAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdSZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QnLCBuZXdNb0RhdGFMaXN0KTtcclxuICAgIC8vICAgIHJldHVybiBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsO1xyXG4gICAgLy8gfVxyXG4gICAgcHJvdGVjdGVkIF9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChuZXdJbmxpbmVNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgc2VsZWN0OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gWy4uLnRoaXMubW9EYXRhTGlzdCwgeyAuLi5uZXdJbmxpbmVNbywgJElzQ2hlY2tlZDogc2VsZWN0IH1dO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Jvd0NoZWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBpbmRleDogbnVtYmVyLCBzZWxlY3RlZCA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSB0aGlzLl9pbmxpbmVFZGl0TW9kZSAmJiB0aGlzLl9hbGxvd0lubGluZUVkaXQ7XHJcbiAgICAgICAgaWYgKG1vLiRJc0NoZWNrZWQgJiYgIXRoaXMuaXNDaGVja0xpc3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcclxuICAgICAgICBpZiAoZWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaGVja2VkID0gIW1vLiRJc0NoZWNrZWQgfHwgc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5yb3dIb3ZlcmFibGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnICYmIGNoZWNrZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0TmV3SW5saW5lTW8obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0KG1vLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXRWYWx1ZUlubGluZU1vKG1vKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XHJcbiAgICB9XHJcbiAgICAvLyBwcm90ZWN0ZWQgX3NldFZhbHVlSW5saW5lTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgIC8vICAgICAvLyB0aGlzLmZvcm1QYW5lbEN0cmxyLlNldFZhbHVlKHsgLi4ubW8sICRUeXBlRGVmSWQ6IHRoaXMuX3R5cGVEZWZJZCB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRvckRlc3Ryb3lGb3JtUGFuZWxDdHJscigpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5mb3JtUGFuZWxDdHJscikge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl9mb3JtUGFuZWxTZXJ2aWNlLmRlc3Ryb3koKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtUGFuZWxDdHJsci5EZXN0cm95KCk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZm9ybVBhbmVsQ3RybHIgPSBudWxsO1xyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfd2luZG93UmVzaXplZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJXaWR0aCgpO1xyXG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xyXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGhTb3VyY2UkLm5leHQoZWwub2Zmc2V0V2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZGV2aWNlU2l6ZUNoYW5nZWQoZGV2aWNlU2l6ZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVsTmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAodGhpcy5faW5saW5lRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLm5leHQoW10pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncmlkU2l6ZSA9IGdldENvbnRyb2xTaXplTW9kZShlbE5hdGl2ZUVsZW1lbnQsIGRldmljZVNpemUpO1xyXG4gICAgICAgIGxldCBkZXZpY2VOYW1lOiBEZXZpY2VTaXplID0gJ2Rlc2t0b3AnO1xyXG4gICAgICAgIHRoaXMuYWxsQ29sdW1uc1xyXG4gICAgICAgICAgICA/LmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgoYykgPT4gKGMuJFRleHRXaWR0aCA9IGMuJFRleHRXaWR0aCA/IGMuJFRleHRXaWR0aCA6IHRoaXMuX2dldFdpZHRoKGMuQWxpYXMpICsgMTApKTtcclxuXHJcbiAgICAgICAgY29uc3QgYWxsQ29sdW1uc1dpZHRoID0gdGhpcy5hbGxDb2x1bW5zLm1hcCgoY29sdW1uKSA9PlxyXG4gICAgICAgICAgICBjb2x1bW4uJFRleHRXaWR0aCAmJiBjb2x1bW4uV2lkdGggPiBjb2x1bW4uJFRleHRXaWR0aCA/IGNvbHVtbi5XaWR0aCA6IGNvbHVtbi4kVGV4dFdpZHRoIHx8IGNvbHVtbi5XaWR0aFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSA9IHRoaXMuX3Zpc2libGVDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgbGV0IGNvbHVtbnNDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBjb2xXaWR0aFNldHRpbmdzID0gdGhpcy5ncmlkU2V0dGluZ1NvdXJjZS5nZXRWYWx1ZSgpPy5Db2xTZXR0aW5nTGlzdD8ubWFwKChjKSA9PiBjLldpZHRoKTtcclxuICAgICAgICBjb25zdCBjb2x1bW5zV2lkdGg6IG51bWJlcltdID0gY29sV2lkdGhTZXR0aW5ncz8ubGVuZ3RoID8gY29sV2lkdGhTZXR0aW5ncyA6IGFsbENvbHVtbnNXaWR0aDtcclxuICAgICAgICBsZXQgc3VtQ29sV2lkdGggPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuVmlld1NldHRpbmc/LklzQ2hlY2tMaXN0KSB7XHJcbiAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IDE1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlNldHRpbmc/LkV4dHJhPy5EZWZhdWx0Q29tbWFuZHNBY2Nlc3M/LlZpZXcpIHtcclxuICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gMzI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhhc0RldGFpbHNJblJvdykge1xyXG4gICAgICAgICAgICBzdW1Db2xXaWR0aCArPSAyMTA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWxOYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHN3aXRjaCAoZ3JpZFNpemUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3hsJzpcclxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAnZGVza3RvcCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncyc6XHJcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ21vYmlsZSc7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSAyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20nOlxyXG4gICAgICAgICAgICAgICAgZGV2aWNlTmFtZSA9ICd0YWJsZXQnO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gNDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kZXZpY2VOYW1lU291cmNlLm5leHQoZGV2aWNlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChjb2x1bW5zV2lkdGgubGVuZ3RoID4gMCAmJiBjb250YWluZXJXaWR0aCA+IDAgJiYgZGV2aWNlU2l6ZSAhPT0gJ3MnKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcclxuICAgICAgICAgICAgY29sdW1uc1dpZHRoLmZvckVhY2goKHdpZHRoOiBudW1iZXIsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VtQ29sV2lkdGggKyB3aWR0aCA+IGNvbnRhaW5lcldpZHRoICYmIGNvbHVtbnNDb3VudCA9PT0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzdW1Db2xXaWR0aCArPSB3aWR0aDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52aWV3U2V0dGluZz8uRGlzYWJsZVJlc3BvbnNpdmUgfHwgdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5nZXRWYWx1ZSgpID09PSAnZGVza3RvcCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0NvbHVtbnMgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWNDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dCh2aXNpYmxlQ29sdW1ucy5zbGljZShjb2x1bW5zQ291bnQsIHZpc2libGVDb2x1bW5zLmxlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX29wZW5TZXR0aW5ncyhuYW1lLCBkZXZpY2U6IERldmljZVNpemUpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsID0gbnVsbDtcclxuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzb3J0JzpcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cGJ5JzpcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXHJcbiAgICAgICAgICAgIGRhdGE6IHsgY29udGV4dDogdGhpcy5jb250ZXh0IH0sXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46IGRldmljZSA9PT0gJ21vYmlsZScsXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJ2F1dG8nIDogdGhpcy5kaWFsb2dDb25maWcubWluV2lkdGgsXHJcbiAgICAgICAgICAgIG1pbkhlaWdodDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICdhdXRvJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1pbkhlaWdodCxcclxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJzEwMCUnIDogdGhpcy5kaWFsb2dDb25maWcubWF4SGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICcxMDAlJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1heFdpZHRoLFxyXG4gICAgICAgICAgICBtb2JpbGU6IGRldmljZSA9PT0gJ21vYmlsZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKGNvbXBvbmVudCwgY29uZmlnKTtcclxuICAgICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHNldHRpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTb3J0Q2hhbmdlZCA9IG5hbWUgPT09ICdzb3J0JyB8fCBuYW1lID09PSAnZ3JvdXBieSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHcmlkU2V0dGluZyhzZXR0aW5nLCBpc1NvcnRDaGFuZ2VkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQubW9EYXRhTGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJsZUNvbHVtbnMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHR5cGVEZWZJZCA9IHRoaXMuX3R5cGVEZWZJZDtcclxuICAgICAgICBjb25zdCBjb250cm9sc0luZm8kID0gdGhpcy5fdWx2TWFpblNlcnZpY2UubG9hZE1ldGFDb25kaXRpb25zQ29udHJvbEluZm9zKFxyXG4gICAgICAgICAgICB0eXBlRGVmSWQsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsQ29sdW1ucy5tYXAoKGMpID0+IGMuTmFtZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xzSW5mbyQsXHJcbiAgICAgICAgICAgICAgICB0eXBlRGVmSWQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbHVtbk5hbWU6IHNlbGVjdGVkQ29sdW1uLk5hbWUsXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFVsdkZpbHRlclNldHRpbmdzQ29tcG9uZW50LCBjb25maWcpO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfYWRkU29ydENvbHVtbihuYW1lOiBhbnksIHNvcnREaXJlY3Rpb246IHN0cmluZywgaXNHcm91cGVkID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzb3J0SXRlbSA9IHtcclxuICAgICAgICAgICAgTmFtZTogbmFtZSxcclxuICAgICAgICAgICAgU29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbixcclxuICAgICAgICAgICAgSXNHcm91cGVkOiBpc0dyb3VwZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0R3JpZFNldHRpbmdzKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgY29uc3QgZXhpc3RTb3J0SXRlbUluZGV4ID0gc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5OYW1lID09PSBuYW1lKTtcclxuICAgICAgICBpZiAoZXhpc3RTb3J0SXRlbUluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0W2V4aXN0U29ydEl0ZW1JbmRleF0gPSBzb3J0SXRlbTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5Tb3J0U2V0dGluZ0xpc3QucHVzaChzb3J0SXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZ3MsIHRydWUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==