@acorex/components 6.5.29 → 6.5.31

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 (364) hide show
  1. package/README.md +3 -3
  2. package/acorex-components.d.ts +5 -5
  3. package/esm2020/acorex-components.mjs +4 -4
  4. package/esm2020/lib/accordion/accordion.component.mjs +44 -44
  5. package/esm2020/lib/accordion/accordion.module.mjs +20 -20
  6. package/esm2020/lib/base/base-page.class.mjs +94 -94
  7. package/esm2020/lib/base/components.class.mjs +17 -17
  8. package/esm2020/lib/base/element.class.mjs +294 -294
  9. package/esm2020/lib/base/events.class.mjs +11 -11
  10. package/esm2020/lib/button/button.component.mjs +71 -71
  11. package/esm2020/lib/button/button.module.mjs +21 -21
  12. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +413 -413
  13. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +22 -22
  14. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +54 -54
  15. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +18 -18
  16. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +213 -213
  17. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +68 -68
  18. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +132 -132
  19. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -37
  20. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +47 -47
  21. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +95 -95
  22. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +204 -204
  23. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -99
  24. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +77 -77
  25. package/esm2020/lib/checkbox/checkbox.component.mjs +98 -98
  26. package/esm2020/lib/checkbox/checkbox.module.mjs +20 -20
  27. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +422 -422
  28. package/esm2020/lib/color-picker/color-picker.component.mjs +82 -82
  29. package/esm2020/lib/color-picker/color-picker.module.mjs +24 -24
  30. package/esm2020/lib/context-menu/context-menu.component.mjs +65 -65
  31. package/esm2020/lib/context-menu/context-menu.directive.mjs +135 -135
  32. package/esm2020/lib/context-menu/context-menu.module.mjs +20 -20
  33. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +138 -138
  34. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +117 -117
  35. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +74 -74
  36. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +117 -117
  37. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +258 -258
  38. package/esm2020/lib/data-filter/filter.class.mjs +44 -44
  39. package/esm2020/lib/data-filter/filter.module.mjs +90 -90
  40. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +166 -166
  41. package/esm2020/lib/data-list/core/data-list.component.mjs +40 -40
  42. package/esm2020/lib/data-list/list/list.component.mjs +124 -124
  43. package/esm2020/lib/data-list/list/list.module.mjs +22 -22
  44. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +85 -85
  45. package/esm2020/lib/data-source/datasource.component.mjs +47 -47
  46. package/esm2020/lib/data-source/datasource.module.mjs +18 -18
  47. package/esm2020/lib/data-source/read-param.mjs +5 -5
  48. package/esm2020/lib/date-picker/date-picker.component.mjs +702 -702
  49. package/esm2020/lib/date-picker/date-picker.module.mjs +25 -25
  50. package/esm2020/lib/dialog/dialog.component.mjs +24 -24
  51. package/esm2020/lib/dialog/dialog.module.mjs +21 -21
  52. package/esm2020/lib/dialog/dialog.service.mjs +150 -150
  53. package/esm2020/lib/drawer/content.component.mjs +18 -18
  54. package/esm2020/lib/drawer/drawer-container.component.mjs +36 -36
  55. package/esm2020/lib/drawer/drawer.component.mjs +142 -142
  56. package/esm2020/lib/drawer/drawer.module.mjs +23 -23
  57. package/esm2020/lib/dropdown/dropdown.component.mjs +176 -176
  58. package/esm2020/lib/dropdown/dropdown.module.mjs +26 -26
  59. package/esm2020/lib/fieldset/fieldset.component.mjs +59 -59
  60. package/esm2020/lib/fieldset/fieldset.module.mjs +19 -19
  61. package/esm2020/lib/form-group/form-group.component.mjs +34 -34
  62. package/esm2020/lib/form-group/form-group.module.mjs +21 -21
  63. package/esm2020/lib/label/label.component.mjs +19 -19
  64. package/esm2020/lib/label/label.module.mjs +21 -21
  65. package/esm2020/lib/loading/loading-indicator.component.mjs +17 -17
  66. package/esm2020/lib/loading/loading-panel.component.mjs +44 -44
  67. package/esm2020/lib/loading/loading.module.mjs +21 -21
  68. package/esm2020/lib/loading/loading.service.mjs +45 -45
  69. package/esm2020/lib/menu/menu-item.component.mjs +47 -47
  70. package/esm2020/lib/menu/menu.component.mjs +86 -86
  71. package/esm2020/lib/menu/menu.module.mjs +22 -22
  72. package/esm2020/lib/menu/menu2.component.mjs +96 -96
  73. package/esm2020/lib/number-box/number-box.component.mjs +622 -622
  74. package/esm2020/lib/number-box/number-box.module.mjs +21 -21
  75. package/esm2020/lib/page/content.component.mjs +32 -32
  76. package/esm2020/lib/page/footer.component.mjs +19 -19
  77. package/esm2020/lib/page/page.component.mjs +53 -53
  78. package/esm2020/lib/page/page.module.mjs +22 -22
  79. package/esm2020/lib/panel-box/panel-box.component.mjs +88 -88
  80. package/esm2020/lib/panel-box/panel-box.module.mjs +19 -19
  81. package/esm2020/lib/password-box/password-box.component.mjs +31 -31
  82. package/esm2020/lib/password-box/password-box.module.mjs +23 -23
  83. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +48 -48
  84. package/esm2020/lib/popover/overlay.service.mjs +90 -90
  85. package/esm2020/lib/popover/popover.component.mjs +127 -127
  86. package/esm2020/lib/popover/popover.module.mjs +19 -19
  87. package/esm2020/lib/popup/popup.component.mjs +147 -147
  88. package/esm2020/lib/popup/popup.module.mjs +25 -25
  89. package/esm2020/lib/popup/popup.service.mjs +93 -93
  90. package/esm2020/lib/progress-bar/progress-bar.component.mjs +19 -19
  91. package/esm2020/lib/progress-bar/progress-bar.module.mjs +19 -19
  92. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +61 -61
  93. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +22 -22
  94. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +38 -38
  95. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +24 -24
  96. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +115 -115
  97. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +32 -32
  98. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +211 -211
  99. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +78 -78
  100. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +51 -51
  101. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +24 -24
  102. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +63 -63
  103. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +24 -24
  104. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +140 -140
  105. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +61 -61
  106. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +72 -72
  107. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +71 -71
  108. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -25
  109. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +69 -69
  110. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -22
  111. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +29 -29
  112. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +25 -25
  113. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +32 -32
  114. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +24 -24
  115. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +32 -32
  116. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -24
  117. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +43 -43
  118. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +24 -24
  119. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +154 -154
  120. package/esm2020/lib/property-editor/property-editor.class.mjs +101 -101
  121. package/esm2020/lib/property-editor/property-editor.module.mjs +196 -196
  122. package/esm2020/lib/query-builder/query-builder-group.component.mjs +124 -124
  123. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +171 -171
  124. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +395 -395
  125. package/esm2020/lib/query-builder/query-builder.class.mjs +20 -20
  126. package/esm2020/lib/query-builder/query-builder.component.mjs +82 -82
  127. package/esm2020/lib/query-builder/query-builder.module.mjs +62 -62
  128. package/esm2020/lib/query-builder/query-builder.service.mjs +197 -197
  129. package/esm2020/lib/search-bar/search-bar.component.mjs +283 -283
  130. package/esm2020/lib/search-bar/search-bar.module.mjs +63 -63
  131. package/esm2020/lib/searchbox/searchbox.component.mjs +79 -79
  132. package/esm2020/lib/searchbox/searchbox.module.mjs +24 -24
  133. package/esm2020/lib/selectbox/selectbox.component.mjs +961 -961
  134. package/esm2020/lib/selectbox/selectbox.module.mjs +44 -44
  135. package/esm2020/lib/selectbox/selectbox2.component.mjs +574 -574
  136. package/esm2020/lib/selection-list/selection-list.component.mjs +108 -108
  137. package/esm2020/lib/selection-list/selection-list.module.mjs +21 -21
  138. package/esm2020/lib/switch/switch.component.mjs +51 -51
  139. package/esm2020/lib/switch/switch.module.mjs +20 -20
  140. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +71 -71
  141. package/esm2020/lib/tab-page/tab-page-host.component.mjs +116 -116
  142. package/esm2020/lib/tab-page/tab-page.module.mjs +21 -21
  143. package/esm2020/lib/tab-page/tab-page.service.mjs +156 -156
  144. package/esm2020/lib/tab-strip/tab-strip.component.mjs +36 -36
  145. package/esm2020/lib/tab-strip/tab-strip.module.mjs +19 -19
  146. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +24 -24
  147. package/esm2020/lib/tab-view/tab-view.component.mjs +105 -105
  148. package/esm2020/lib/tab-view/tab-view.module.mjs +21 -21
  149. package/esm2020/lib/tab-view/tab.component.mjs +30 -30
  150. package/esm2020/lib/textarea/textarea.component.mjs +26 -26
  151. package/esm2020/lib/textarea/textarea.module.mjs +21 -21
  152. package/esm2020/lib/textbox/textbox.component.mjs +39 -39
  153. package/esm2020/lib/textbox/textbox.module.mjs +24 -24
  154. package/esm2020/lib/time-picker/time-picker.component.mjs +943 -943
  155. package/esm2020/lib/time-picker/time-picker.module.mjs +22 -22
  156. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +74 -74
  157. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -13
  158. package/esm2020/lib/toast/toast.module.mjs +21 -21
  159. package/esm2020/lib/toast/toast.service.mjs +44 -44
  160. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +78 -78
  161. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +57 -57
  162. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +54 -54
  163. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +47 -47
  164. package/esm2020/lib/toolbar/toolbar-item.mjs +6 -6
  165. package/esm2020/lib/toolbar/toolbar.component.mjs +13 -13
  166. package/esm2020/lib/toolbar/toolbar.module.mjs +40 -40
  167. package/esm2020/lib/tooltip/tooltip.directive.mjs +100 -100
  168. package/esm2020/lib/tooltip/tooltip.module.mjs +19 -19
  169. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +646 -646
  170. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +35 -35
  171. package/esm2020/lib/tree-view/tree-view.component.mjs +775 -775
  172. package/esm2020/lib/tree-view/tree-view.module.mjs +22 -22
  173. package/esm2020/lib/upload-file/upload-file.component.mjs +208 -208
  174. package/esm2020/lib/upload-file/upload-file.events.mjs +2 -2
  175. package/esm2020/lib/upload-file/upload-file.module.mjs +24 -24
  176. package/esm2020/lib/validation/validation-form.component.mjs +65 -65
  177. package/esm2020/lib/validation/validation-rule.widget.mjs +111 -111
  178. package/esm2020/lib/validation/validation.class.mjs +2 -2
  179. package/esm2020/lib/validation/validation.component.mjs +89 -89
  180. package/esm2020/lib/validation/validation.module.mjs +34 -34
  181. package/esm2020/public-api.mjs +158 -158
  182. package/fesm2015/acorex-components.mjs +15616 -15616
  183. package/fesm2015/acorex-components.mjs.map +1 -1
  184. package/fesm2020/acorex-components.mjs +15552 -15552
  185. package/fesm2020/acorex-components.mjs.map +1 -1
  186. package/lib/accordion/accordion.component.d.ts +13 -13
  187. package/lib/accordion/accordion.module.d.ts +9 -9
  188. package/lib/base/base-page.class.d.ts +46 -46
  189. package/lib/base/components.class.d.ts +10 -10
  190. package/lib/base/element.class.d.ts +106 -106
  191. package/lib/base/events.class.d.ts +18 -18
  192. package/lib/button/button.component.d.ts +21 -21
  193. package/lib/button/button.module.d.ts +8 -8
  194. package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -81
  195. package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -11
  196. package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -19
  197. package/lib/calendar/scheduler/scheduler.class.d.ts +36 -36
  198. package/lib/calendar/scheduler/scheduler.component.d.ts +39 -39
  199. package/lib/calendar/scheduler/scheduler.module.d.ts +21 -21
  200. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -25
  201. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -14
  202. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -16
  203. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -26
  204. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -37
  205. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -28
  206. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -24
  207. package/lib/checkbox/checkbox.component.d.ts +30 -30
  208. package/lib/checkbox/checkbox.module.d.ts +9 -9
  209. package/lib/color-picker/color-box/color-box.component.d.ts +25 -25
  210. package/lib/color-picker/color-picker.component.d.ts +30 -30
  211. package/lib/color-picker/color-picker.module.d.ts +13 -13
  212. package/lib/context-menu/context-menu.component.d.ts +22 -22
  213. package/lib/context-menu/context-menu.directive.d.ts +38 -38
  214. package/lib/context-menu/context-menu.module.d.ts +9 -9
  215. package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -22
  216. package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -15
  217. package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -18
  218. package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -15
  219. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -45
  220. package/lib/data-filter/filter.class.d.ts +40 -40
  221. package/lib/data-filter/filter.module.d.ts +24 -24
  222. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -25
  223. package/lib/data-list/core/data-list.component.d.ts +15 -15
  224. package/lib/data-list/list/list.component.d.ts +40 -40
  225. package/lib/data-list/list/list.module.d.ts +11 -11
  226. package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -17
  227. package/lib/data-source/datasource.component.d.ts +16 -16
  228. package/lib/data-source/datasource.module.d.ts +7 -7
  229. package/lib/data-source/read-param.d.ts +40 -40
  230. package/lib/date-picker/date-picker.component.d.ts +81 -81
  231. package/lib/date-picker/date-picker.module.d.ts +14 -14
  232. package/lib/dialog/dialog.component.d.ts +14 -14
  233. package/lib/dialog/dialog.module.d.ts +10 -10
  234. package/lib/dialog/dialog.service.d.ts +36 -36
  235. package/lib/drawer/content.component.d.ts +7 -7
  236. package/lib/drawer/drawer-container.component.d.ts +10 -10
  237. package/lib/drawer/drawer.component.d.ts +34 -34
  238. package/lib/drawer/drawer.module.d.ts +10 -10
  239. package/lib/dropdown/dropdown.component.d.ts +38 -38
  240. package/lib/dropdown/dropdown.module.d.ts +13 -13
  241. package/lib/fieldset/fieldset.component.d.ts +11 -11
  242. package/lib/fieldset/fieldset.module.d.ts +8 -8
  243. package/lib/form-group/form-group.component.d.ts +14 -14
  244. package/lib/form-group/form-group.module.d.ts +8 -8
  245. package/lib/label/label.component.d.ts +9 -9
  246. package/lib/label/label.module.d.ts +8 -8
  247. package/lib/loading/loading-indicator.component.d.ts +9 -9
  248. package/lib/loading/loading-panel.component.d.ts +13 -13
  249. package/lib/loading/loading.module.d.ts +10 -10
  250. package/lib/loading/loading.service.d.ts +13 -13
  251. package/lib/menu/menu-item.component.d.ts +18 -18
  252. package/lib/menu/menu.component.d.ts +35 -35
  253. package/lib/menu/menu.module.d.ts +11 -11
  254. package/lib/menu/menu2.component.d.ts +21 -21
  255. package/lib/number-box/number-box.component.d.ts +52 -52
  256. package/lib/number-box/number-box.module.d.ts +10 -10
  257. package/lib/page/content.component.d.ts +8 -8
  258. package/lib/page/footer.component.d.ts +5 -5
  259. package/lib/page/page.component.d.ts +16 -16
  260. package/lib/page/page.module.d.ts +11 -11
  261. package/lib/panel-box/panel-box.component.d.ts +19 -19
  262. package/lib/panel-box/panel-box.module.d.ts +8 -8
  263. package/lib/password-box/password-box.component.d.ts +12 -12
  264. package/lib/password-box/password-box.module.d.ts +10 -10
  265. package/lib/popover/custom-cdk-overlay.service.d.ts +19 -19
  266. package/lib/popover/overlay.service.d.ts +31 -31
  267. package/lib/popover/popover.component.d.ts +34 -34
  268. package/lib/popover/popover.module.d.ts +8 -8
  269. package/lib/popup/popup.component.d.ts +40 -40
  270. package/lib/popup/popup.module.d.ts +13 -13
  271. package/lib/popup/popup.service.d.ts +22 -22
  272. package/lib/progress-bar/progress-bar.component.d.ts +7 -7
  273. package/lib/progress-bar/progress-bar.module.d.ts +8 -8
  274. package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -19
  275. package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -11
  276. package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -13
  277. package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -12
  278. package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -34
  279. package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -20
  280. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -44
  281. package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -19
  282. package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -28
  283. package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -12
  284. package/lib/property-editor/editors/number-editor/number.editor.d.ts +20 -20
  285. package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -12
  286. package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -29
  287. package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -18
  288. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -29
  289. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +28 -28
  290. package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -14
  291. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -25
  292. package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -11
  293. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -11
  294. package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -13
  295. package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -18
  296. package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -12
  297. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -17
  298. package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -12
  299. package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -17
  300. package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -12
  301. package/lib/property-editor/property-editor-renderer.directive.d.ts +30 -30
  302. package/lib/property-editor/property-editor.class.d.ts +92 -92
  303. package/lib/property-editor/property-editor.module.d.ts +21 -21
  304. package/lib/query-builder/query-builder-group.component.d.ts +33 -33
  305. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -35
  306. package/lib/query-builder/query-builder-rule.component.d.ts +45 -45
  307. package/lib/query-builder/query-builder.class.d.ts +45 -45
  308. package/lib/query-builder/query-builder.component.d.ts +27 -27
  309. package/lib/query-builder/query-builder.module.d.ts +23 -23
  310. package/lib/query-builder/query-builder.service.d.ts +18 -18
  311. package/lib/search-bar/search-bar.component.d.ts +61 -61
  312. package/lib/search-bar/search-bar.module.d.ts +18 -18
  313. package/lib/searchbox/searchbox.component.d.ts +22 -22
  314. package/lib/searchbox/searchbox.module.d.ts +13 -13
  315. package/lib/selectbox/selectbox.component.d.ts +118 -118
  316. package/lib/selectbox/selectbox.module.d.ts +15 -15
  317. package/lib/selectbox/selectbox2.component.d.ts +103 -103
  318. package/lib/selection-list/selection-list.component.d.ts +32 -32
  319. package/lib/selection-list/selection-list.module.d.ts +10 -10
  320. package/lib/switch/switch.component.d.ts +20 -20
  321. package/lib/switch/switch.module.d.ts +9 -9
  322. package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -16
  323. package/lib/tab-page/tab-page-host.component.d.ts +25 -25
  324. package/lib/tab-page/tab-page.module.d.ts +10 -10
  325. package/lib/tab-page/tab-page.service.d.ts +30 -30
  326. package/lib/tab-strip/tab-strip.component.d.ts +28 -28
  327. package/lib/tab-strip/tab-strip.module.d.ts +8 -8
  328. package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -16
  329. package/lib/tab-view/tab-view.component.d.ts +26 -26
  330. package/lib/tab-view/tab-view.module.d.ts +10 -10
  331. package/lib/tab-view/tab.component.d.ts +12 -12
  332. package/lib/textarea/textarea.component.d.ts +12 -12
  333. package/lib/textarea/textarea.module.d.ts +8 -8
  334. package/lib/textbox/textbox.component.d.ts +16 -16
  335. package/lib/textbox/textbox.module.d.ts +11 -11
  336. package/lib/time-picker/time-picker.component.d.ts +52 -52
  337. package/lib/time-picker/time-picker.module.d.ts +11 -11
  338. package/lib/toast/toast-message/toast-message.component.d.ts +18 -18
  339. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -8
  340. package/lib/toast/toast.module.d.ts +9 -9
  341. package/lib/toast/toast.service.d.ts +18 -18
  342. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -12
  343. package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -24
  344. package/lib/toolbar/search/toolbar-search.component.d.ts +16 -16
  345. package/lib/toolbar/title/toolbar-title.component.d.ts +9 -9
  346. package/lib/toolbar/toolbar-item.d.ts +3 -3
  347. package/lib/toolbar/toolbar.component.d.ts +8 -8
  348. package/lib/toolbar/toolbar.module.d.ts +14 -14
  349. package/lib/tooltip/tooltip.directive.d.ts +21 -21
  350. package/lib/tooltip/tooltip.module.d.ts +8 -8
  351. package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -111
  352. package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -11
  353. package/lib/tree-view/tree-view.component.d.ts +121 -121
  354. package/lib/tree-view/tree-view.module.d.ts +11 -11
  355. package/lib/upload-file/upload-file.component.d.ts +42 -42
  356. package/lib/upload-file/upload-file.events.d.ts +10 -10
  357. package/lib/upload-file/upload-file.module.d.ts +13 -13
  358. package/lib/validation/validation-form.component.d.ts +19 -19
  359. package/lib/validation/validation-rule.widget.d.ts +23 -23
  360. package/lib/validation/validation.class.d.ts +16 -16
  361. package/lib/validation/validation.component.d.ts +25 -25
  362. package/lib/validation/validation.module.d.ts +11 -11
  363. package/package.json +1 -1
  364. package/public-api.d.ts +155 -155
@@ -1,395 +1,395 @@
1
- import { Component, Input, ViewEncapsulation, Output, EventEmitter, ViewChild } from '@angular/core';
2
- import { AXQueryBuilderRule, AXQueryBuilderGroup, AXQueryBuilderControl } from './query-builder.class';
3
- import { AXTranslator } from '@acorex/core';
4
- import { AXSelectBoxComponent } from '../selectbox/selectbox.component';
5
- import { AXTextBoxComponent } from '../textbox/textbox.component';
6
- import { AXValidationFormComponent } from '../validation/validation-form.component';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../form-group/form-group.component";
9
- import * as i2 from "../selectbox/selectbox.component";
10
- import * as i3 from "../data-source/datasource.component";
11
- import * as i4 from "../textbox/textbox.component";
12
- import * as i5 from "../number-box/number-box.component";
13
- import * as i6 from "../date-picker/date-picker.component";
14
- import * as i7 from "../checkbox/checkbox.component";
15
- import * as i8 from "@angular/common";
16
- import * as i9 from "@acorex/core";
17
- export class AXQueryBuilderRuleComponent {
18
- constructor() {
19
- this.isEditing = true;
20
- this.mode = 'new';
21
- this.fields = [];
22
- this.onRuleDelete = new EventEmitter();
23
- this.ruleChanged = new EventEmitter();
24
- this.showValue = false;
25
- this.isOnDemandLabel = false;
26
- this.showSelectBox = true;
27
- this.showOperatorSelectBox = true;
28
- this.provideDataBoolean = (e) => {
29
- return new Promise((resolve) => {
30
- resolve([
31
- {
32
- value: 'true',
33
- text: AXTranslator.get('queryBuilder.true')
34
- },
35
- {
36
- value: 'false',
37
- text: AXTranslator.get('queryBuilder.false')
38
- }
39
- ]);
40
- });
41
- };
42
- this.provideDataOperator = (e) => {
43
- return new Promise((resolve) => {
44
- if (this.rule.dataType === 'string') {
45
- if (this.rule && this.rule.control && this.rule.control.type && this.rule.control.type == 'selectBox') {
46
- if (this.rule.control.options.mode == 'multiple') {
47
- resolve([
48
- {
49
- value: 'contains',
50
- text: AXTranslator.get('queryBuilder.contains')
51
- },
52
- {
53
- value: 'not-contains',
54
- text: AXTranslator.get('queryBuilder.not-contains')
55
- },
56
- {
57
- value: 'contains-all',
58
- text: AXTranslator.get('queryBuilder.contains-all')
59
- },
60
- {
61
- value: 'null',
62
- text: AXTranslator.get('queryBuilder.null')
63
- },
64
- {
65
- value: 'not-null',
66
- text: AXTranslator.get('queryBuilder.not-null')
67
- }
68
- ]);
69
- }
70
- else {
71
- resolve([
72
- {
73
- value: 'equal',
74
- text: AXTranslator.get('queryBuilder.equal')
75
- },
76
- {
77
- value: 'not-equal',
78
- text: AXTranslator.get('queryBuilder.not-equal')
79
- },
80
- {
81
- value: 'null',
82
- text: AXTranslator.get('queryBuilder.null')
83
- },
84
- {
85
- value: 'not-null',
86
- text: AXTranslator.get('queryBuilder.not-null')
87
- }
88
- ]);
89
- }
90
- }
91
- else {
92
- resolve([
93
- {
94
- value: 'equal',
95
- text: AXTranslator.get('queryBuilder.equal')
96
- },
97
- {
98
- value: 'contains',
99
- text: AXTranslator.get('queryBuilder.contains')
100
- },
101
- {
102
- value: 'start-with',
103
- text: AXTranslator.get('queryBuilder.start-with')
104
- },
105
- {
106
- value: 'end-with',
107
- text: AXTranslator.get('queryBuilder.end-with')
108
- },
109
- {
110
- value: 'not-equal',
111
- text: AXTranslator.get('queryBuilder.not-equal')
112
- },
113
- {
114
- value: 'null',
115
- text: AXTranslator.get('queryBuilder.null')
116
- },
117
- {
118
- value: 'not-null',
119
- text: AXTranslator.get('queryBuilder.not-null')
120
- }
121
- ]);
122
- }
123
- }
124
- if (this.rule.dataType === 'number') {
125
- resolve([
126
- {
127
- value: 'equal',
128
- text: AXTranslator.get('queryBuilder.equal')
129
- },
130
- {
131
- value: 'gt',
132
- text: AXTranslator.get('queryBuilder.greater-than')
133
- },
134
- {
135
- value: 'gte',
136
- text: AXTranslator.get('queryBuilder.greater-than-equal')
137
- },
138
- {
139
- value: 'lt',
140
- text: AXTranslator.get('queryBuilder.less-than')
141
- },
142
- {
143
- value: 'lte',
144
- text: AXTranslator.get('queryBuilder.less-than-equal')
145
- },
146
- {
147
- value: 'not-equal',
148
- text: AXTranslator.get('queryBuilder.not-equal')
149
- },
150
- {
151
- value: 'null',
152
- text: AXTranslator.get('queryBuilder.null')
153
- },
154
- {
155
- value: 'not-null',
156
- text: AXTranslator.get('queryBuilder.not-null')
157
- }
158
- ]);
159
- }
160
- if (this.rule.dataType === 'boolean') {
161
- resolve([
162
- {
163
- value: 'equal',
164
- text: AXTranslator.get('queryBuilder.equal')
165
- },
166
- {
167
- value: 'null',
168
- text: AXTranslator.get('queryBuilder.null')
169
- },
170
- {
171
- value: 'not-null',
172
- text: AXTranslator.get('queryBuilder.not-null')
173
- }
174
- ]);
175
- }
176
- if (this.rule.dataType === 'datetime') {
177
- resolve([
178
- {
179
- value: 'equal',
180
- text: AXTranslator.get('queryBuilder.equal')
181
- },
182
- {
183
- value: 'gt',
184
- text: AXTranslator.get('queryBuilder.greater-than')
185
- },
186
- {
187
- value: 'gte',
188
- text: AXTranslator.get('queryBuilder.greater-than-equal')
189
- },
190
- {
191
- value: 'lt',
192
- text: AXTranslator.get('queryBuilder.less-than')
193
- },
194
- {
195
- value: 'lte',
196
- text: AXTranslator.get('queryBuilder.less-than-equal')
197
- },
198
- {
199
- value: 'not-equal',
200
- text: AXTranslator.get('queryBuilder.not-equal')
201
- },
202
- {
203
- value: 'null',
204
- text: AXTranslator.get('queryBuilder.null')
205
- },
206
- {
207
- value: 'not-null',
208
- text: AXTranslator.get('queryBuilder.not-null')
209
- }
210
- ]);
211
- }
212
- resolve([]);
213
- });
214
- };
215
- this.getProvideData = (e) => {
216
- if (this.rule && this.rule.control.options && this.rule.control.options.dataSource) {
217
- return this.rule.control.options.dataSource({ ...e, optionsData: { ...this.rule.control.options } });
218
- }
219
- };
220
- }
221
- ngOnInit() { }
222
- ngAfterViewInit() {
223
- //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
224
- //Add 'implements AfterViewInit' to the class.
225
- if (this.rule.onDemandLabel) {
226
- this.isOnDemandLabel = true;
227
- }
228
- }
229
- saveRule() {
230
- this.form.validate().then((c) => { });
231
- }
232
- handleEditClick() {
233
- this.isEditing = true;
234
- }
235
- handleCommitClick() {
236
- this.isEditing = false;
237
- this.ruleChanged.emit({ items: this.rule, component: this });
238
- }
239
- handleRemoveClick() {
240
- this.onRuleDelete.emit({ items: this.rule, component: this });
241
- }
242
- captionChange(e) {
243
- if (e.selectedItems[0]) {
244
- this.rule.caption = e.selectedItems[0].caption;
245
- this.rule.dataField = e.selectedItems[0].dataField;
246
- this.rule.dataType = e.selectedItems[0].dataType;
247
- this.rule.control = e.selectedItems[0].control || new AXQueryBuilderControl();
248
- this.rule.dataFieldItem[0] = e.selectedItems[0];
249
- }
250
- if (this.selectBox) {
251
- if (this.rule.control.type === 'selectBox' && this.rule.control.options.mode == 'multiple') {
252
- this.rule.operator = 'contains';
253
- }
254
- else {
255
- this.rule.operator = 'equal';
256
- }
257
- this.selectBox.refresh();
258
- }
259
- this.showOperatorSelectBox = false;
260
- setTimeout(() => {
261
- this.showOperatorSelectBox = true;
262
- }, 20);
263
- this.rule.value = null;
264
- this.rule.valueItem = [];
265
- this.rule.text = '';
266
- if (this.rule.control.type === 'selectBox' && this.selectBoxValue) {
267
- this.showSelectBox = false;
268
- setTimeout(() => {
269
- this.showSelectBox = true;
270
- this.selectBoxValue.refresh();
271
- }, 20);
272
- }
273
- if (this.rule.control.type == 'boolean') {
274
- this.selectBoxBoolean.refresh();
275
- }
276
- this.ruleChanged.emit({ component: this, items: this.rule });
277
- }
278
- operatorChange(e) {
279
- this.rule.operator = e[0].value;
280
- this.ruleChanged.emit({ component: this, items: this.rule });
281
- if (e[0].value !== 'null' && e[0].value !== 'not-null') {
282
- this.showValue = true;
283
- }
284
- else {
285
- this.showValue = false;
286
- this.rule.value = '';
287
- this.rule.text = '';
288
- this.rule.valueItem = [];
289
- this.rule.onDemandLabel = '';
290
- }
291
- }
292
- valueChange(e) {
293
- debugger;
294
- // this.rule.text = e.value == undefined ? e[0].value : (e.value == null ? '' : e.value);
295
- this.rule.text = e[0] ? (e[0].value == null ? '' : e[0].value) : e.value == null ? '' : e.value;
296
- this.rule.onDemandLabel = '';
297
- this.ruleChanged.emit({ component: this, items: this.rule });
298
- }
299
- onDemandLabelChange(e) {
300
- // this.rule.onDemandLabel = e.value == undefined ? '????|' + e[0].value : '????|' + e.value;
301
- this.rule.onDemandLabel = e[0] ? '????|' + (e[0].value == null ? '' : e[0].value) : '????|' + (e.value == null ? '' : e.value);
302
- this.rule.value = '';
303
- this.rule.text = '';
304
- this.rule.valueItem = [];
305
- this.ruleChanged.emit({ component: this, items: this.rule });
306
- }
307
- valueBooleanChange(e) {
308
- // this.rule.text = e.value == undefined ? e[0].value : (e.value == null ? '' : e.value);
309
- this.rule.text = e[0] ? (e[0].value == null ? '' : e[0].value) : e.value == null ? '' : e.value;
310
- this.rule.value = e.value == undefined ? e[0].value : e.value;
311
- this.rule.onDemandLabel = '';
312
- this.ruleChanged.emit({ component: this, items: this.rule });
313
- }
314
- getOnDemandName(v) {
315
- return v ? v.split('|')[1] : '';
316
- }
317
- selectedItemsChange(e) {
318
- let n = this.getOption('textField');
319
- if (this.rule.control.options.mode === 'single') {
320
- this.rule.text = e[0][n];
321
- if (this.rule && this.rule.control.options.valueField) {
322
- this.rule.value = e[0][this.rule.control.options.valueField];
323
- }
324
- else {
325
- this.rule.value = e[0].value;
326
- }
327
- this.rule.valueItem[0] = e[0];
328
- }
329
- else {
330
- this.rule.text = e.map((x) => x[n]).join('- ');
331
- const THAT = this;
332
- if (THAT.rule && THAT.rule.control.options.valueField) {
333
- THAT.rule.value = e.map(function (item) {
334
- return item[THAT.rule.control.options.valueField];
335
- });
336
- }
337
- else {
338
- this.rule.value = e.map(function (item) {
339
- return item.value;
340
- });
341
- }
342
- this.rule.valueItem = e;
343
- }
344
- this.ruleChanged.emit({ component: this, items: this.rule });
345
- this.rule.onDemandLabel = '';
346
- }
347
- onDemandLabel(e) {
348
- // if (e.value && (this.rule.onDemandLabel == '????|' || this.rule.onDemandLabel === undefined || this.rule.onDemandLabel === null || this.rule.onDemandLabel === '')) {
349
- // this.textBoxNameValue.focus();
350
- // }
351
- if (e.value == false) {
352
- this.rule.onDemandLabel = '';
353
- }
354
- this.isOnDemandLabel = e.value;
355
- }
356
- getOption(name) {
357
- return this.rule.control.options ? this.rule.control.options[name] : null;
358
- }
359
- }
360
- AXQueryBuilderRuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXQueryBuilderRuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
361
- AXQueryBuilderRuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXQueryBuilderRuleComponent, selector: "ax-query-rule", inputs: { isEditing: "isEditing", rule: "rule", parent: "parent", mode: "mode", fields: "fields" }, outputs: { onRuleDelete: "onRuleDelete", ruleChanged: "ruleChanged" }, host: { classAttribute: "ax ax-query-rule" }, viewQueries: [{ propertyName: "selectBox", first: true, predicate: ["selectBox"], descendants: true }, { propertyName: "selectBoxValue", first: true, predicate: ["selectBoxValue"], descendants: true }, { propertyName: "selectBoxBoolean", first: true, predicate: ["selectBoxBoolean"], descendants: true }, { propertyName: "textBoxNameValue", first: true, predicate: ["textBoxNameValue"], descendants: true }, { propertyName: "form", first: true, predicate: AXValidationFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"condition\" *ngIf=\"parent\">\r\n <div class=\"text {{parent.condition}}\">\r\n <span>{{parent.condition}}</span>\r\n </div>\r\n</div>\r\n<div class=\"handler\">\r\n <i class=\"far fa-grip-lines-vertical\"></i>\r\n</div>\r\n\r\n<div class=\"caption\" [ngClass]=\"{'editable': isEditing}\">\r\n <ng-container *ngIf=\"isEditing;else fieldsTemplate\">\r\n <ax-form-group>\r\n <ax-select-box [readonly]=\"mode == 'edit'\" (selectionChanged)=\"captionChange($event)\" allowNull=\"false\"\r\n [(selectedItems)]=\"rule.dataFieldItem\" textField=\"caption\" valueField=\"dataField\" [items]=\"fields\"\r\n mode=\"single\">\r\n </ax-select-box>\r\n </ax-form-group>\r\n </ng-container>\r\n <ng-template #fieldsTemplate>\r\n <div (click)=\"handleEditClick()\">\r\n {{rule.caption}}\r\n </div>\r\n </ng-template>\r\n</div>\r\n\r\n<div class=\"operator\" [ngClass]=\"{'editable': isEditing,'radius':!showValue}\">\r\n <ng-container *ngIf=\"isEditing;else operatorTemplate\">\r\n <ax-form-group>\r\n <ax-select-box [readonly]=\"mode == 'edit'\" *ngIf=\"showOperatorSelectBox\" [(selectedValues)]=\"rule.operator\"\r\n #selectBox (selectedItemsChange)=\"operatorChange($event)\" allowNull=\"false\" mode=\"single\">\r\n <ax-data-source [provideData]=\"provideDataOperator\">\r\n </ax-data-source>\r\n </ax-select-box>\r\n </ax-form-group>\r\n </ng-container>\r\n <ng-template #operatorTemplate>\r\n <div class=\"text\" (click)=\"handleEditClick()\">\r\n {{('queryBuilder.'+rule.operator) | trans}}\r\n </div>\r\n </ng-template>\r\n</div>\r\n<div *ngIf=\"showValue\" class=\"value\" [ngClass]=\"{'editable': isEditing}\">\r\n <ng-container *ngIf=\"isEditing;else valueTemplate\">\r\n\r\n <div *ngIf=\" rule.control && !isOnDemandLabel\" [ngSwitch]=\"rule.control.type\">\r\n <div *ngSwitchCase=\"'textBox'\">\r\n <ax-form-group>\r\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\r\n [(value)]=\"rule.value\">\r\n </ax-text-box>\r\n </ax-form-group>\r\n </div>\r\n <div *ngSwitchCase=\"'selectBox'\">\r\n <ax-form-group>\r\n <ax-select-box *ngIf=\"showSelectBox\" [mode]=\"getOption('mode')\"\r\n [remoteOperation]=\"getOption('remoteOperation')\" [valueField]=\"getOption('valueField')\"\r\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [textField]=\"getOption('textField')\"\r\n [(selectedItems)]=\"rule.valueItem\" (selectedItemsChange)=\"selectedItemsChange($event)\"\r\n #selectBoxValue>\r\n <ax-data-source [provideData]=\"getProvideData\"></ax-data-source>\r\n </ax-select-box>\r\n </ax-form-group>\r\n </div>\r\n\r\n <div *ngSwitchCase=\"'numberBox'\">\r\n <ax-form-group>\r\n <ax-number-box [decimalNumber]=\"2\" (onValueChanged)=\"valueChange($event)\"\r\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [(value)]=\"rule.value\">\r\n </ax-number-box>\r\n </ax-form-group>\r\n </div>\r\n <div *ngSwitchCase=\"'datetime'\">\r\n <ax-date-picker label=\"From\" [(value)]=\"rule.value\" (onValueChanged)=\"valueChange($event)\">\r\n </ax-date-picker>\r\n\r\n </div>\r\n <div *ngSwitchCase=\"'boolean'\">\r\n\r\n <ax-form-group>\r\n <ax-select-box #selectBoxBoolean (selectedItemsChange)=\"valueBooleanChange($event)\"\r\n allowNull=\"false\" [selectedValues]=\"rule.value\" mode=\"single\">\r\n <ax-data-source [provideData]=\"provideDataBoolean\">\r\n </ax-data-source>\r\n </ax-select-box>\r\n </ax-form-group>\r\n\r\n </div>\r\n <div *ngSwitchDefault>\r\n <ax-form-group>\r\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\r\n [(value)]=\"rule.value\">\r\n </ax-text-box>\r\n\r\n </ax-form-group>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isOnDemandLabel\">\r\n\r\n <ax-text-box #textBoxNameValue [value]=\"getOnDemandName(rule.onDemandLabel)\"\r\n (onValueChanged)=\"onDemandLabelChange($event)\" placeholder=\"\u0646\u0627\u0645 \u0645\u062A\u063A\u06CC\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\">\r\n <!-- <ax-validation>\r\n <ax-validation-rule type=\"required\"></ax-validation-rule>\r\n </ax-validation> -->\r\n </ax-text-box>\r\n\r\n\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #valueTemplate>\r\n <div (click)=\"handleEditClick()\">\r\n\r\n {{rule.text}}\r\n\r\n </div>\r\n </ng-template>\r\n</div>\r\n\r\n<div class=\"buttons-list\">\r\n <div *ngIf=\"showValue && isEditing && mode == 'new'\" class=\"button variable\"\r\n [ngClass]=\"{'active-button': isOnDemandLabel}\">\r\n <i class=\"far fa-dollar-sign\"></i>\r\n <ax-check-box [value]=\"isOnDemandLabel\" (onClick)=\"onDemandLabel($event)\">\r\n </ax-check-box>\r\n </div>\r\n\r\n <div class=\"button commit\" (click)=\"handleCommitClick()\" *ngIf=\"isEditing\">\r\n <i class=\"far fa-check\"></i>\r\n </div>\r\n <div class=\"button remove\" (click)=\"handleRemoveClick()\" *ngIf=\"mode == 'new'\">\r\n <i class=\"far fa-times\"></i>\r\n </div>\r\n</div>", components: [{ type: i1.AXFormGroupComponent, selector: "ax-form-group", inputs: ["size"] }, { type: i2.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["showDropDownButton", "rowInputTemplate", "showCheckBox", "readonly", "rtl", "disabled", "placeholder", "size", "allowNull", "textAlign", "bufferSize", "remoteOperation", "fitParent", "dropdownWidth", "dataSource", "validation", "disabledCallback", "allowSearch", "textField", "valueField", "disabledField", "mode", "items", "selectedItems", "selectedValues"], outputs: ["dropdownToggle", "itemsChange", "onBlur", "onFocus", "selectionChanged", "selectedItemsChange", "selectedValuesChange"] }, { type: i3.AXDataSourceComponent, selector: "ax-data-source", inputs: ["provideData", "params"] }, { type: i4.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "type", "showMask", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions"] }, { type: i5.AXNumberBoxComponent, selector: "ax-number-box", inputs: ["min", "max", "showSeparator", "showCurrency", "showCounter", "scrollWeel", "showDoubleCounter", "maxLength", "intStep", "decimalNumber", "customStep"] }, { type: i6.AXDatePickerComponent, selector: "ax-date-picker", inputs: ["dayStyle", "dayMinMaxResoan", "validation", "placeholder", "min", "max", "readonly", "disabled", "allowClear", "textAlign", "showToday", "selectableHoliday", "dateType", "showTodayButton", "openByClick", "size", "type", "value"], outputs: ["typeChange", "onValueChanged", "valueChange"] }, { type: i7.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "trans": i9.AXTranslatorPipe }, encapsulation: i0.ViewEncapsulation.None });
362
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXQueryBuilderRuleComponent, decorators: [{
363
- type: Component,
364
- args: [{ selector: 'ax-query-rule', host: { class: 'ax ax-query-rule' }, encapsulation: ViewEncapsulation.None, template: "<div class=\"condition\" *ngIf=\"parent\">\r\n <div class=\"text {{parent.condition}}\">\r\n <span>{{parent.condition}}</span>\r\n </div>\r\n</div>\r\n<div class=\"handler\">\r\n <i class=\"far fa-grip-lines-vertical\"></i>\r\n</div>\r\n\r\n<div class=\"caption\" [ngClass]=\"{'editable': isEditing}\">\r\n <ng-container *ngIf=\"isEditing;else fieldsTemplate\">\r\n <ax-form-group>\r\n <ax-select-box [readonly]=\"mode == 'edit'\" (selectionChanged)=\"captionChange($event)\" allowNull=\"false\"\r\n [(selectedItems)]=\"rule.dataFieldItem\" textField=\"caption\" valueField=\"dataField\" [items]=\"fields\"\r\n mode=\"single\">\r\n </ax-select-box>\r\n </ax-form-group>\r\n </ng-container>\r\n <ng-template #fieldsTemplate>\r\n <div (click)=\"handleEditClick()\">\r\n {{rule.caption}}\r\n </div>\r\n </ng-template>\r\n</div>\r\n\r\n<div class=\"operator\" [ngClass]=\"{'editable': isEditing,'radius':!showValue}\">\r\n <ng-container *ngIf=\"isEditing;else operatorTemplate\">\r\n <ax-form-group>\r\n <ax-select-box [readonly]=\"mode == 'edit'\" *ngIf=\"showOperatorSelectBox\" [(selectedValues)]=\"rule.operator\"\r\n #selectBox (selectedItemsChange)=\"operatorChange($event)\" allowNull=\"false\" mode=\"single\">\r\n <ax-data-source [provideData]=\"provideDataOperator\">\r\n </ax-data-source>\r\n </ax-select-box>\r\n </ax-form-group>\r\n </ng-container>\r\n <ng-template #operatorTemplate>\r\n <div class=\"text\" (click)=\"handleEditClick()\">\r\n {{('queryBuilder.'+rule.operator) | trans}}\r\n </div>\r\n </ng-template>\r\n</div>\r\n<div *ngIf=\"showValue\" class=\"value\" [ngClass]=\"{'editable': isEditing}\">\r\n <ng-container *ngIf=\"isEditing;else valueTemplate\">\r\n\r\n <div *ngIf=\" rule.control && !isOnDemandLabel\" [ngSwitch]=\"rule.control.type\">\r\n <div *ngSwitchCase=\"'textBox'\">\r\n <ax-form-group>\r\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\r\n [(value)]=\"rule.value\">\r\n </ax-text-box>\r\n </ax-form-group>\r\n </div>\r\n <div *ngSwitchCase=\"'selectBox'\">\r\n <ax-form-group>\r\n <ax-select-box *ngIf=\"showSelectBox\" [mode]=\"getOption('mode')\"\r\n [remoteOperation]=\"getOption('remoteOperation')\" [valueField]=\"getOption('valueField')\"\r\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [textField]=\"getOption('textField')\"\r\n [(selectedItems)]=\"rule.valueItem\" (selectedItemsChange)=\"selectedItemsChange($event)\"\r\n #selectBoxValue>\r\n <ax-data-source [provideData]=\"getProvideData\"></ax-data-source>\r\n </ax-select-box>\r\n </ax-form-group>\r\n </div>\r\n\r\n <div *ngSwitchCase=\"'numberBox'\">\r\n <ax-form-group>\r\n <ax-number-box [decimalNumber]=\"2\" (onValueChanged)=\"valueChange($event)\"\r\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [(value)]=\"rule.value\">\r\n </ax-number-box>\r\n </ax-form-group>\r\n </div>\r\n <div *ngSwitchCase=\"'datetime'\">\r\n <ax-date-picker label=\"From\" [(value)]=\"rule.value\" (onValueChanged)=\"valueChange($event)\">\r\n </ax-date-picker>\r\n\r\n </div>\r\n <div *ngSwitchCase=\"'boolean'\">\r\n\r\n <ax-form-group>\r\n <ax-select-box #selectBoxBoolean (selectedItemsChange)=\"valueBooleanChange($event)\"\r\n allowNull=\"false\" [selectedValues]=\"rule.value\" mode=\"single\">\r\n <ax-data-source [provideData]=\"provideDataBoolean\">\r\n </ax-data-source>\r\n </ax-select-box>\r\n </ax-form-group>\r\n\r\n </div>\r\n <div *ngSwitchDefault>\r\n <ax-form-group>\r\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\r\n [(value)]=\"rule.value\">\r\n </ax-text-box>\r\n\r\n </ax-form-group>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isOnDemandLabel\">\r\n\r\n <ax-text-box #textBoxNameValue [value]=\"getOnDemandName(rule.onDemandLabel)\"\r\n (onValueChanged)=\"onDemandLabelChange($event)\" placeholder=\"\u0646\u0627\u0645 \u0645\u062A\u063A\u06CC\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\">\r\n <!-- <ax-validation>\r\n <ax-validation-rule type=\"required\"></ax-validation-rule>\r\n </ax-validation> -->\r\n </ax-text-box>\r\n\r\n\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #valueTemplate>\r\n <div (click)=\"handleEditClick()\">\r\n\r\n {{rule.text}}\r\n\r\n </div>\r\n </ng-template>\r\n</div>\r\n\r\n<div class=\"buttons-list\">\r\n <div *ngIf=\"showValue && isEditing && mode == 'new'\" class=\"button variable\"\r\n [ngClass]=\"{'active-button': isOnDemandLabel}\">\r\n <i class=\"far fa-dollar-sign\"></i>\r\n <ax-check-box [value]=\"isOnDemandLabel\" (onClick)=\"onDemandLabel($event)\">\r\n </ax-check-box>\r\n </div>\r\n\r\n <div class=\"button commit\" (click)=\"handleCommitClick()\" *ngIf=\"isEditing\">\r\n <i class=\"far fa-check\"></i>\r\n </div>\r\n <div class=\"button remove\" (click)=\"handleRemoveClick()\" *ngIf=\"mode == 'new'\">\r\n <i class=\"far fa-times\"></i>\r\n </div>\r\n</div>" }]
365
- }], ctorParameters: function () { return []; }, propDecorators: { selectBox: [{
366
- type: ViewChild,
367
- args: ['selectBox']
368
- }], selectBoxValue: [{
369
- type: ViewChild,
370
- args: ['selectBoxValue']
371
- }], selectBoxBoolean: [{
372
- type: ViewChild,
373
- args: ['selectBoxBoolean']
374
- }], textBoxNameValue: [{
375
- type: ViewChild,
376
- args: ['textBoxNameValue']
377
- }], form: [{
378
- type: ViewChild,
379
- args: [AXValidationFormComponent]
380
- }], isEditing: [{
381
- type: Input
382
- }], rule: [{
383
- type: Input
384
- }], parent: [{
385
- type: Input
386
- }], mode: [{
387
- type: Input
388
- }], fields: [{
389
- type: Input
390
- }], onRuleDelete: [{
391
- type: Output
392
- }], ruleChanged: [{
393
- type: Output
394
- }] } });
395
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1ydWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvcXVlcnktYnVpbGRlci9xdWVyeS1idWlsZGVyLXJ1bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2NvbXBvbmVudHMvc3JjL2xpYi9xdWVyeS1idWlsZGVyL3F1ZXJ5LWJ1aWxkZXItcnVsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTJCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFRcEYsTUFBTSxPQUFPLDJCQUEyQjtJQW1DdEM7UUExQkEsY0FBUyxHQUFZLElBQUksQ0FBQztRQVMxQixTQUFJLEdBQW1CLEtBQUssQ0FBQztRQUc3QixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBR25CLGlCQUFZLEdBQTBDLElBQUksWUFBWSxFQUEyQixDQUFDO1FBR2xHLGdCQUFXLEdBQTBDLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRWpHLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFF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U0FBUzsrQkFDRSxlQUFlLFFBRW5CLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLGlCQUNwQixpQkFBaUIsQ0FBQyxJQUFJOzBFQUdiLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDTyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFFSSxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVFLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ1MsSUFBSTtzQkFBekMsU0FBUzt1QkFBQyx5QkFBeUI7Z0JBRXBDLFNBQVM7c0JBRFIsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24sIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQVhRdWVyeUJ1aWxkZXJSdWxlLCBBWFF1ZXJ5QnVpbGRlckdyb3VwLCBBWFF1ZXJ5QnVpbGRlclJ1bGVFdmVudCwgQVhRdWVyeUJ1aWxkZXJDb250cm9sIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyLmNsYXNzJztcclxuaW1wb3J0IHsgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuaW1wb3J0IHsgQVhTZWxlY3RCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3Rib3gvc2VsZWN0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYVGV4dEJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vdmFsaWRhdGlvbi92YWxpZGF0aW9uLWZvcm0uY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXgtcXVlcnktcnVsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICdxdWVyeS1idWlsZGVyLXJ1bGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdheCBheC1xdWVyeS1ydWxlJyB9LFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEFYUXVlcnlCdWlsZGVyUnVsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Qm94Jykgc2VsZWN0Qm94OiBBWFNlbGVjdEJveENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RCb3hWYWx1ZScpIHNlbGVjdEJveFZhbHVlOiBBWFNlbGVjdEJveENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Qm94Qm9vbGVhbicpIHNlbGVjdEJveEJvb2xlYW46IEFYU2VsZWN0Qm94Q29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKCd0ZXh0Qm94TmFtZVZhbHVlJykgdGV4dEJveE5hbWVWYWx1ZTogQVhUZXh0Qm94Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoQVhWYWxpZGF0aW9uRm9ybUNvbXBvbmVudCkgZm9ybTogQVhWYWxpZGF0aW9uRm9ybUNvbXBvbmVudDtcclxuICBASW5wdXQoKVxyXG4gIGlzRWRpdGluZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcnVsZTogQVhRdWVyeUJ1aWxkZXJSdWxlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBhcmVudDogQVhRdWVyeUJ1aWxkZXJHcm91cDtcclxuXHJcbiAgQElucHV0KClcclxuICBtb2RlOiAnbmV3JyB8ICdlZGl0JyA9ICduZXcnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGZpZWxkczogYW55W10gPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgb25SdWxlRGVsZXRlOiBFdmVudEVtaXR0ZXI8QVhRdWVyeUJ1aWxkZXJSdWxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFF1ZXJ5QnVpbGRlclJ1bGVFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcnVsZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFF1ZXJ5QnVpbGRlclJ1bGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYUXVlcnlCdWlsZGVyUnVsZUV2ZW50PigpO1xyXG5cclxuICBzaG93VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNPbkRlbWFuZExhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNob3dTZWxlY3RCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dPcGVyYXRvclNlbGVjdEJveDogYm9vbGVhbiA9IHRydWU7XHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7IH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy9DYWxsZWQgYWZ0ZXIgbmdBZnRlckNvbnRlbnRJbml0IHdoZW4gdGhlIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIEFwcGxpZXMgdG8gY29tcG9uZW50cyBvbmx5LlxyXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxyXG4gICAgaWYgKHRoaXMucnVsZS5vbkRlbWFuZExhYmVsKSB7XHJcbiAgICAgIHRoaXMuaXNPbkRlbWFuZExhYmVsID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdmlkZURhdGFCb29sZWFuID0gKGUpID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICByZXNvbHZlKFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YWx1ZTogJ3RydWUnLFxyXG4gICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLnRydWUnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdmFsdWU6ICdmYWxzZScsXHJcbiAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuZmFsc2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBzYXZlUnVsZSgpIHtcclxuICAgIHRoaXMuZm9ybS52YWxpZGF0ZSgpLnRoZW4oKGMpID0+IHsgfSk7XHJcbiAgfVxyXG5cclxuICBwcm92aWRlRGF0YU9wZXJhdG9yID0gKGUpID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5ydWxlLmRhdGFUeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bGUgJiYgdGhpcy5ydWxlLmNvbnRyb2wgJiYgdGhpcy5ydWxlLmNvbnRyb2wudHlwZSAmJiB0aGlzLnJ1bGUuY29udHJvbC50eXBlID09ICdzZWxlY3RCb3gnKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5ydWxlLmNvbnRyb2wub3B0aW9ucy5tb2RlID09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdjb250YWlucycsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuY29udGFpbnMnKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdub3QtY29udGFpbnMnLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1jb250YWlucycpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zLWFsbCcsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuY29udGFpbnMtYWxsJylcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiAnbnVsbCcsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubnVsbCcpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ25vdC1udWxsJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtbnVsbCcpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiAnZXF1YWwnLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmVxdWFsJylcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiAnbm90LWVxdWFsJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtZXF1YWwnKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdudWxsJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5udWxsJylcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiAnbm90LW51bGwnLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1udWxsJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHZhbHVlOiAnZXF1YWwnLFxyXG4gICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5lcXVhbCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJyxcclxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuY29udGFpbnMnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6ICdzdGFydC13aXRoJyxcclxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuc3RhcnQtd2l0aCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB2YWx1ZTogJ2VuZC13aXRoJyxcclxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuZW5kLXdpdGgnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6ICdub3QtZXF1YWwnLFxyXG4gICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtZXF1YWwnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6ICdudWxsJyxcclxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubnVsbCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB2YWx1ZTogJ25vdC1udWxsJyxcclxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubm90LW51bGwnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucnVsZS5kYXRhVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdlcXVhbCcsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5lcXVhbCcpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogJ2d0JyxcclxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmdyZWF0ZXItdGhhbicpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogJ2d0ZScsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ncmVhdGVyLXRoYW4tZXF1YWwnKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdsdCcsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5sZXNzLXRoYW4nKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdsdGUnLFxyXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubGVzcy10aGFuLWVxdWFsJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlOiAnbm90LWVxdWFsJyxcclxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1lcXVhbCcpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogJ251bGwnLFxyXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubnVsbCcpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogJ25vdC1udWxsJyxcclxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1udWxsJylcclxuICAgICAgICAgIH1cclxuICAgICAgICBdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5ydWxlLmRhdGFUeXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdlcXVhbCcsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5lcXVhbCcpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogJ251bGwnLFxyXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubnVsbCcpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogJ25vdC1udWxsJyxcclxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1udWxsJylcclxuICAgICAgICAgIH1cclxuICAgICAgICBdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5ydWxlLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgcmVzb2x2ZShbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlOiAnZXF1YWwnLFxyXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuZXF1YWwnKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdndCcsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ncmVhdGVyLXRoYW4nKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdndGUnLFxyXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuZ3JlYXRlci10aGFuLWVxdWFsJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlOiAnbHQnLFxyXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubGVzcy10aGFuJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlOiAnbHRlJyxcclxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmxlc3MtdGhhbi1lcXVhbCcpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogJ25vdC1lcXVhbCcsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtZXF1YWwnKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdudWxsJyxcclxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm51bGwnKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWU6ICdub3QtbnVsbCcsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtbnVsbCcpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZShbXSk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBoYW5kbGVFZGl0Q2xpY2soKSB7XHJcbiAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDb21taXRDbGljaygpIHtcclxuICAgIHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnJ1bGVDaGFuZ2VkLmVtaXQoeyBpdGVtczogdGhpcy5ydWxlLCBjb21wb25lbnQ6IHRoaXMgfSk7XHJcbiAgfVxyXG4gIGhhbmRsZVJlbW92ZUNsaWNrKCkge1xyXG4gICAgdGhpcy5vblJ1bGVEZWxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLnJ1bGUsIGNvbXBvbmVudDogdGhpcyB9KTtcclxuICB9XHJcbiAgY2FwdGlvbkNoYW5nZShlKSB7XHJcbiAgICBpZiAoZS5zZWxlY3RlZEl0ZW1zWzBdKSB7XHJcbiAgICAgIHRoaXMucnVsZS5jYXB0aW9uID0gZS5zZWxlY3RlZEl0ZW1zWzBdLmNhcHRpb247XHJcbiAgICAgIHRoaXMucnVsZS5kYXRhRmllbGQgPSBlLnNlbGVjdGVkSXRlbXNbMF0uZGF0YUZpZWxkO1xyXG4gICAgICB0aGlzLnJ1bGUuZGF0YVR5cGUgPSBlLnNlbGVjdGVkSXRlbXNbMF0uZGF0YVR5cGU7XHJcbiAgICAgIHRoaXMucnVsZS5jb250cm9sID0gZS5zZWxlY3RlZEl0ZW1zWzBdLmNvbnRyb2wgfHwgbmV3IEFYUXVlcnlCdWlsZGVyQ29udHJvbCgpO1xyXG4gICAgICB0aGlzLnJ1bGUuZGF0YUZpZWxkSXRlbVswXSA9IGUuc2VsZWN0ZWRJdGVtc1swXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RCb3gpIHtcclxuICAgICAgaWYgKHRoaXMucnVsZS5jb250cm9sLnR5cGUgPT09ICdzZWxlY3RCb3gnICYmIHRoaXMucnVsZS5jb250cm9sLm9wdGlvbnMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XHJcbiAgICAgICAgdGhpcy5ydWxlLm9wZXJhdG9yID0gJ2NvbnRhaW5zJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJ1bGUub3BlcmF0b3IgPSAnZXF1YWwnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0Qm94LnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dPcGVyYXRvclNlbGVjdEJveCA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd09wZXJhdG9yU2VsZWN0Qm94ID0gdHJ1ZTtcclxuICAgIH0sIDIwKTtcclxuXHJcbiAgICB0aGlzLnJ1bGUudmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5ydWxlLnZhbHVlSXRlbSA9IFtdO1xyXG4gICAgdGhpcy5ydWxlLnRleHQgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy5ydWxlLmNvbnRyb2wudHlwZSA9PT0gJ3NlbGVjdEJveCcgJiYgdGhpcy5zZWxlY3RCb3hWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNob3dTZWxlY3RCb3ggPSBmYWxzZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0Qm94ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdEJveFZhbHVlLnJlZnJlc2goKTtcclxuICAgICAgfSwgMjApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucnVsZS5jb250cm9sLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Qm94Qm9vbGVhbi5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJ1bGVDaGFuZ2VkLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIGl0ZW1zOiB0aGlzLnJ1bGUgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVyYXRvckNoYW5nZShlKSB7XHJcbiAgICB0aGlzLnJ1bGUub3BlcmF0b3IgPSBlWzBdLnZhbHVlO1xyXG4gICAgdGhpcy5ydWxlQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBpdGVtczogdGhpcy5ydWxlIH0pO1xyXG5cclxuICAgIGlmIChlWzBdLnZhbHVlICE9PSAnbnVsbCcgJiYgZVswXS52YWx1ZSAhPT0gJ25vdC1udWxsJykge1xyXG4gICAgICB0aGlzLnNob3dWYWx1ZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJ1bGUudmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5ydWxlLnRleHQgPSAnJztcclxuICAgICAgdGhpcy5ydWxlLnZhbHVlSXRlbSA9IFtdO1xyXG4gICAgICB0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICB2YWx1ZUNoYW5nZShlKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgLy8gdGhpcy5ydWxlLnRleHQgPSBlLnZhbHVlID09IHVuZGVmaW5lZCA/IGVbMF0udmFsdWUgOiAoZS52YWx1ZSA9PSBudWxsID8gJycgOiBlLnZhbHVlKTtcclxuXHJcbiAgICB0aGlzLnJ1bGUudGV4dCA9IGVbMF0gPyAoZVswXS52YWx1ZSA9PSBudWxsID8gJycgOiBlWzBdLnZhbHVlKSA6IGUudmFsdWUgPT0gbnVsbCA/ICcnIDogZS52YWx1ZTtcclxuICAgIHRoaXMucnVsZS5vbkRlbWFuZExhYmVsID0gJyc7XHJcbiAgICB0aGlzLnJ1bGVDaGFuZ2VkLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIGl0ZW1zOiB0aGlzLnJ1bGUgfSk7XHJcbiAgfVxyXG4gIG9uRGVtYW5kTGFiZWxDaGFuZ2UoZSkge1xyXG4gICAgLy8gdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPSBlLnZhbHVlID09IHVuZGVmaW5lZCA/ICc/Pz8/fCcgKyBlWzBdLnZhbHVlIDogJz8/Pz98JyArIGUudmFsdWU7XHJcbiAgICB0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9IGVbMF0gPyAnPz8/P3wnICsgKGVbMF0udmFsdWUgPT0gbnVsbCA/ICcnIDogZVswXS52YWx1ZSkgOiAnPz8/P3wnICsgKGUudmFsdWUgPT0gbnVsbCA/ICcnIDogZS52YWx1ZSk7XHJcbiAgICB0aGlzLnJ1bGUudmFsdWUgPSAnJztcclxuICAgIHRoaXMucnVsZS50ZXh0ID0gJyc7XHJcbiAgICB0aGlzLnJ1bGUudmFsdWVJdGVtID0gW107XHJcblxyXG4gICAgdGhpcy5ydWxlQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBpdGVtczogdGhpcy5ydWxlIH0pO1xyXG4gIH1cclxuICB2YWx1ZUJvb2xlYW5DaGFuZ2UoZSkge1xyXG4gICAgLy8gdGhpcy5ydWxlLnRleHQgPSBlLnZhbHVlID09IHVuZGVmaW5lZCA/IGVbMF0udmFsdWUgOiAoZS52YWx1ZSA9PSBudWxsID8gJycgOiBlLnZhbHVlKTtcclxuICAgIHRoaXMucnVsZS50ZXh0ID0gZVswXSA/IChlWzBdLnZhbHVlID09IG51bGwgPyAnJyA6IGVbMF0udmFsdWUpIDogZS52YWx1ZSA9PSBudWxsID8gJycgOiBlLnZhbHVlO1xyXG4gICAgdGhpcy5ydWxlLnZhbHVlID0gZS52YWx1ZSA9PSB1bmRlZmluZWQgPyBlWzBdLnZhbHVlIDogZS52YWx1ZTtcclxuICAgIHRoaXMucnVsZS5vbkRlbWFuZExhYmVsID0gJyc7XHJcbiAgICB0aGlzLnJ1bGVDaGFuZ2VkLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIGl0ZW1zOiB0aGlzLnJ1bGUgfSk7XHJcbiAgfVxyXG4gIGdldE9uRGVtYW5kTmFtZSh2KSB7XHJcbiAgICByZXR1cm4gdiA/IHYuc3BsaXQoJ3wnKVsxXSA6ICcnO1xyXG4gIH1cclxuICBzZWxlY3RlZEl0ZW1zQ2hhbmdlKGUpIHtcclxuICAgIGxldCBuID0gdGhpcy5nZXRPcHRpb24oJ3RleHRGaWVsZCcpO1xyXG5cclxuICAgIGlmICh0aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMucnVsZS50ZXh0ID0gZVswXVtuXTtcclxuICAgICAgaWYgKHRoaXMucnVsZSAmJiB0aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zLnZhbHVlRmllbGQpIHtcclxuICAgICAgICB0aGlzLnJ1bGUudmFsdWUgPSBlWzBdW3RoaXMucnVsZS5jb250cm9sLm9wdGlvbnMudmFsdWVGaWVsZF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ydWxlLnZhbHVlID0gZVswXS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJ1bGUudmFsdWVJdGVtWzBdID0gZVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucnVsZS50ZXh0ID0gZS5tYXAoKHgpID0+IHhbbl0pLmpvaW4oJy0gJyk7XHJcbiAgICAgIGNvbnN0IFRIQVQgPSB0aGlzO1xyXG4gICAgICBpZiAoVEhBVC5ydWxlICYmIFRIQVQucnVsZS5jb250cm9sLm9wdGlvbnMudmFsdWVGaWVsZCkge1xyXG4gICAgICAgIFRIQVQucnVsZS52YWx1ZSA9IGUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbVtUSEFULnJ1bGUuY29udHJvbC5vcHRpb25zLnZhbHVlRmllbGRdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucnVsZS52YWx1ZSA9IGUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJ1bGUudmFsdWVJdGVtID0gZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJ1bGVDaGFuZ2VkLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIGl0ZW1zOiB0aGlzLnJ1bGUgfSk7XHJcbiAgICB0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9ICcnO1xyXG4gIH1cclxuICBvbkRlbWFuZExhYmVsKGUpIHtcclxuICAgIC8vIGlmIChlLnZhbHVlICYmICh0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9PSAnPz8/P3wnIHx8IHRoaXMucnVsZS5vbkRlbWFuZExhYmVsID09PSB1bmRlZmluZWQgfHwgdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPT09IG51bGwgfHwgdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPT09ICcnKSkge1xyXG4gICAgLy8gICB0aGlzLnRleHRCb3hOYW1lVmFsdWUuZm9jdXMoKTtcclxuICAgIC8vIH1cclxuICAgIGlmIChlLnZhbHVlID09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMucnVsZS5vbkRlbWFuZExhYmVsID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzT25EZW1hbmRMYWJlbCA9IGUudmFsdWU7XHJcbiAgfVxyXG4gIGdldFByb3ZpZGVEYXRhID0gKGUpID0+IHtcclxuICAgIGlmICh0aGlzLnJ1bGUgJiYgdGhpcy5ydWxlLmNvbnRyb2wub3B0aW9ucyAmJiB0aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zLmRhdGFTb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucnVsZS5jb250cm9sLm9wdGlvbnMuZGF0YVNvdXJjZSh7IC4uLmUsIG9wdGlvbnNEYXRhOiB7IC4uLnRoaXMucnVsZS5jb250cm9sLm9wdGlvbnMgfSB9KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBnZXRPcHRpb24obmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ydWxlLmNvbnRyb2wub3B0aW9ucyA/IHRoaXMucnVsZS5jb250cm9sLm9wdGlvbnNbbmFtZV0gOiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29uZGl0aW9uXCIgKm5nSWY9XCJwYXJlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IHt7cGFyZW50LmNvbmRpdGlvbn19XCI+XHJcbiAgICAgICAgPHNwYW4+e3twYXJlbnQuY29uZGl0aW9ufX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJoYW5kbGVyXCI+XHJcbiAgICA8aSBjbGFzcz1cImZhciBmYS1ncmlwLWxpbmVzLXZlcnRpY2FsXCI+PC9pPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjYXB0aW9uXCIgW25nQ2xhc3NdPVwieydlZGl0YWJsZSc6IGlzRWRpdGluZ31cIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmc7ZWxzZSBmaWVsZHNUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxheC1mb3JtLWdyb3VwPlxyXG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveCBbcmVhZG9ubHldPVwibW9kZSA9PSAnZWRpdCdcIiAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJjYXB0aW9uQ2hhbmdlKCRldmVudClcIiBhbGxvd051bGw9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbKHNlbGVjdGVkSXRlbXMpXT1cInJ1bGUuZGF0YUZpZWxkSXRlbVwiIHRleHRGaWVsZD1cImNhcHRpb25cIiB2YWx1ZUZpZWxkPVwiZGF0YUZpZWxkXCIgW2l0ZW1zXT1cImZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICBtb2RlPVwic2luZ2xlXCI+XHJcbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cclxuICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZmllbGRzVGVtcGxhdGU+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKClcIj5cclxuICAgICAgICAgICAge3tydWxlLmNhcHRpb259fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwib3BlcmF0b3JcIiBbbmdDbGFzc109XCJ7J2VkaXRhYmxlJzogaXNFZGl0aW5nLCdyYWRpdXMnOiFzaG93VmFsdWV9XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nO2Vsc2Ugb3BlcmF0b3JUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxheC1mb3JtLWdyb3VwPlxyXG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveCBbcmVhZG9ubHldPVwibW9kZSA9PSAnZWRpdCdcIiAqbmdJZj1cInNob3dPcGVyYXRvclNlbGVjdEJveFwiIFsoc2VsZWN0ZWRWYWx1ZXMpXT1cInJ1bGUub3BlcmF0b3JcIlxyXG4gICAgICAgICAgICAgICAgI3NlbGVjdEJveCAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJvcGVyYXRvckNoYW5nZSgkZXZlbnQpXCIgYWxsb3dOdWxsPVwiZmFsc2VcIiBtb2RlPVwic2luZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICA8YXgtZGF0YS1zb3VyY2UgW3Byb3ZpZGVEYXRhXT1cInByb3ZpZGVEYXRhT3BlcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgIDwvYXgtZGF0YS1zb3VyY2U+XHJcbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cclxuICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjb3BlcmF0b3JUZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2soKVwiPlxyXG4gICAgICAgICAgICB7eygncXVlcnlCdWlsZGVyLicrcnVsZS5vcGVyYXRvcikgfCB0cmFuc319XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNob3dWYWx1ZVwiIGNsYXNzPVwidmFsdWVcIiBbbmdDbGFzc109XCJ7J2VkaXRhYmxlJzogaXNFZGl0aW5nfVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZztlbHNlIHZhbHVlVGVtcGxhdGVcIj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiBydWxlLmNvbnRyb2wgJiYgIWlzT25EZW1hbmRMYWJlbFwiIFtuZ1N3aXRjaF09XCJydWxlLmNvbnRyb2wudHlwZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIndGV4dEJveCdcIj5cclxuICAgICAgICAgICAgICAgIDxheC1mb3JtLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDxheC10ZXh0LWJveCAob25WYWx1ZUNoYW5nZWQpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwi2YXZgtiv2KfYsSDZhdmI2LHYryDZhti42LEg2K7ZiNivINix2Kcg2YjYp9ix2K8g2qnZhtuM2K9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJydWxlLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9heC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICAgIDwvYXgtZm9ybS1ncm91cD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3RCb3gnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXgtZm9ybS1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8YXgtc2VsZWN0LWJveCAqbmdJZj1cInNob3dTZWxlY3RCb3hcIiBbbW9kZV09XCJnZXRPcHRpb24oJ21vZGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdGVPcGVyYXRpb25dPVwiZ2V0T3B0aW9uKCdyZW1vdGVPcGVyYXRpb24nKVwiIFt2YWx1ZUZpZWxkXT1cImdldE9wdGlvbigndmFsdWVGaWVsZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLZhdmC2K/Yp9ixINmF2YjYsdivINmG2LjYsSDYrtmI2K8g2LHYpyDZiNin2LHYryDaqdmG24zYr1wiIFt0ZXh0RmllbGRdPVwiZ2V0T3B0aW9uKCd0ZXh0RmllbGQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRJdGVtcyldPVwicnVsZS52YWx1ZUl0ZW1cIiAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJzZWxlY3RlZEl0ZW1zQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjc2VsZWN0Qm94VmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1kYXRhLXNvdXJjZSBbcHJvdmlkZURhdGFdPVwiZ2V0UHJvdmlkZURhdGFcIj48L2F4LWRhdGEtc291cmNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cclxuICAgICAgICAgICAgICAgIDwvYXgtZm9ybS1ncm91cD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyQm94J1wiPlxyXG4gICAgICAgICAgICAgICAgPGF4LWZvcm0tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGF4LW51bWJlci1ib3ggW2RlY2ltYWxOdW1iZXJdPVwiMlwiIChvblZhbHVlQ2hhbmdlZCk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLZhdmC2K/Yp9ixINmF2YjYsdivINmG2LjYsSDYrtmI2K8g2LHYpyDZiNin2LHYryDaqdmG24zYr1wiIFsodmFsdWUpXT1cInJ1bGUudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2F4LW51bWJlci1ib3g+XHJcbiAgICAgICAgICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXgtZGF0ZS1waWNrZXIgbGFiZWw9XCJGcm9tXCIgWyh2YWx1ZSldPVwicnVsZS52YWx1ZVwiIChvblZhbHVlQ2hhbmdlZCk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2F4LWRhdGUtcGlja2VyPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxheC1mb3JtLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDxheC1zZWxlY3QtYm94ICNzZWxlY3RCb3hCb29sZWFuIChzZWxlY3RlZEl0ZW1zQ2hhbmdlKT1cInZhbHVlQm9vbGVhbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dOdWxsPVwiZmFsc2VcIiBbc2VsZWN0ZWRWYWx1ZXNdPVwicnVsZS52YWx1ZVwiIG1vZGU9XCJzaW5nbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWRhdGEtc291cmNlIFtwcm92aWRlRGF0YV09XCJwcm92aWRlRGF0YUJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1kYXRhLXNvdXJjZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2F4LXNlbGVjdC1ib3g+XHJcbiAgICAgICAgICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGF4LWZvcm0tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGF4LXRleHQtYm94IChvblZhbHVlQ2hhbmdlZCk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCLZhdmC2K/Yp9ixINmF2YjYsdivINmG2LjYsSDYrtmI2K8g2LHYpyDZiNin2LHYryDaqdmG24zYr1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInJ1bGUudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2F4LXRleHQtYm94PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvYXgtZm9ybS1ncm91cD5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNPbkRlbWFuZExhYmVsXCI+XHJcblxyXG4gICAgICAgICAgICA8YXgtdGV4dC1ib3ggI3RleHRCb3hOYW1lVmFsdWUgW3ZhbHVlXT1cImdldE9uRGVtYW5kTmFtZShydWxlLm9uRGVtYW5kTGFiZWwpXCJcclxuICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJvbkRlbWFuZExhYmVsQ2hhbmdlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cItmG2KfZhSDZhdiq2LrbjNixINiu2YjYryDYsdinINmI2KfYsdivINqp2YbbjNivXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxheC12YWxpZGF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxheC12YWxpZGF0aW9uLXJ1bGUgdHlwZT1cInJlcXVpcmVkXCI+PC9heC12YWxpZGF0aW9uLXJ1bGU+XHJcbiAgICAgICAgICAgICAgICA8L2F4LXZhbGlkYXRpb24+IC0tPlxyXG4gICAgICAgICAgICA8L2F4LXRleHQtYm94PlxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI3ZhbHVlVGVtcGxhdGU+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKClcIj5cclxuXHJcbiAgICAgICAgICAgIHt7cnVsZS50ZXh0fX1cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJidXR0b25zLWxpc3RcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93VmFsdWUgJiYgaXNFZGl0aW5nICYmIG1vZGUgPT0gJ25ldydcIiBjbGFzcz1cImJ1dHRvbiB2YXJpYWJsZVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtYnV0dG9uJzogaXNPbkRlbWFuZExhYmVsfVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWRvbGxhci1zaWduXCI+PC9pPlxyXG4gICAgICAgIDxheC1jaGVjay1ib3ggW3ZhbHVlXT1cImlzT25EZW1hbmRMYWJlbFwiIChvbkNsaWNrKT1cIm9uRGVtYW5kTGFiZWwoJGV2ZW50KVwiPlxyXG4gICAgICAgIDwvYXgtY2hlY2stYm94PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBjb21taXRcIiAoY2xpY2spPVwiaGFuZGxlQ29tbWl0Q2xpY2soKVwiICpuZ0lmPVwiaXNFZGl0aW5nXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtY2hlY2tcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJidXR0b24gcmVtb3ZlXCIgKGNsaWNrKT1cImhhbmRsZVJlbW92ZUNsaWNrKClcIiAqbmdJZj1cIm1vZGUgPT0gJ25ldydcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhciBmYS10aW1lc1wiPjwvaT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
1
+ import { Component, Input, ViewEncapsulation, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { AXQueryBuilderRule, AXQueryBuilderGroup, AXQueryBuilderControl } from './query-builder.class';
3
+ import { AXTranslator } from '@acorex/core';
4
+ import { AXSelectBoxComponent } from '../selectbox/selectbox.component';
5
+ import { AXTextBoxComponent } from '../textbox/textbox.component';
6
+ import { AXValidationFormComponent } from '../validation/validation-form.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../form-group/form-group.component";
9
+ import * as i2 from "../selectbox/selectbox.component";
10
+ import * as i3 from "../data-source/datasource.component";
11
+ import * as i4 from "../textbox/textbox.component";
12
+ import * as i5 from "../number-box/number-box.component";
13
+ import * as i6 from "../date-picker/date-picker.component";
14
+ import * as i7 from "../checkbox/checkbox.component";
15
+ import * as i8 from "@angular/common";
16
+ import * as i9 from "@acorex/core";
17
+ export class AXQueryBuilderRuleComponent {
18
+ constructor() {
19
+ this.isEditing = true;
20
+ this.mode = 'new';
21
+ this.fields = [];
22
+ this.onRuleDelete = new EventEmitter();
23
+ this.ruleChanged = new EventEmitter();
24
+ this.showValue = false;
25
+ this.isOnDemandLabel = false;
26
+ this.showSelectBox = true;
27
+ this.showOperatorSelectBox = true;
28
+ this.provideDataBoolean = (e) => {
29
+ return new Promise((resolve) => {
30
+ resolve([
31
+ {
32
+ value: 'true',
33
+ text: AXTranslator.get('queryBuilder.true')
34
+ },
35
+ {
36
+ value: 'false',
37
+ text: AXTranslator.get('queryBuilder.false')
38
+ }
39
+ ]);
40
+ });
41
+ };
42
+ this.provideDataOperator = (e) => {
43
+ return new Promise((resolve) => {
44
+ if (this.rule.dataType === 'string') {
45
+ if (this.rule && this.rule.control && this.rule.control.type && this.rule.control.type == 'selectBox') {
46
+ if (this.rule.control.options.mode == 'multiple') {
47
+ resolve([
48
+ {
49
+ value: 'contains',
50
+ text: AXTranslator.get('queryBuilder.contains')
51
+ },
52
+ {
53
+ value: 'not-contains',
54
+ text: AXTranslator.get('queryBuilder.not-contains')
55
+ },
56
+ {
57
+ value: 'contains-all',
58
+ text: AXTranslator.get('queryBuilder.contains-all')
59
+ },
60
+ {
61
+ value: 'null',
62
+ text: AXTranslator.get('queryBuilder.null')
63
+ },
64
+ {
65
+ value: 'not-null',
66
+ text: AXTranslator.get('queryBuilder.not-null')
67
+ }
68
+ ]);
69
+ }
70
+ else {
71
+ resolve([
72
+ {
73
+ value: 'equal',
74
+ text: AXTranslator.get('queryBuilder.equal')
75
+ },
76
+ {
77
+ value: 'not-equal',
78
+ text: AXTranslator.get('queryBuilder.not-equal')
79
+ },
80
+ {
81
+ value: 'null',
82
+ text: AXTranslator.get('queryBuilder.null')
83
+ },
84
+ {
85
+ value: 'not-null',
86
+ text: AXTranslator.get('queryBuilder.not-null')
87
+ }
88
+ ]);
89
+ }
90
+ }
91
+ else {
92
+ resolve([
93
+ {
94
+ value: 'equal',
95
+ text: AXTranslator.get('queryBuilder.equal')
96
+ },
97
+ {
98
+ value: 'contains',
99
+ text: AXTranslator.get('queryBuilder.contains')
100
+ },
101
+ {
102
+ value: 'start-with',
103
+ text: AXTranslator.get('queryBuilder.start-with')
104
+ },
105
+ {
106
+ value: 'end-with',
107
+ text: AXTranslator.get('queryBuilder.end-with')
108
+ },
109
+ {
110
+ value: 'not-equal',
111
+ text: AXTranslator.get('queryBuilder.not-equal')
112
+ },
113
+ {
114
+ value: 'null',
115
+ text: AXTranslator.get('queryBuilder.null')
116
+ },
117
+ {
118
+ value: 'not-null',
119
+ text: AXTranslator.get('queryBuilder.not-null')
120
+ }
121
+ ]);
122
+ }
123
+ }
124
+ if (this.rule.dataType === 'number') {
125
+ resolve([
126
+ {
127
+ value: 'equal',
128
+ text: AXTranslator.get('queryBuilder.equal')
129
+ },
130
+ {
131
+ value: 'gt',
132
+ text: AXTranslator.get('queryBuilder.greater-than')
133
+ },
134
+ {
135
+ value: 'gte',
136
+ text: AXTranslator.get('queryBuilder.greater-than-equal')
137
+ },
138
+ {
139
+ value: 'lt',
140
+ text: AXTranslator.get('queryBuilder.less-than')
141
+ },
142
+ {
143
+ value: 'lte',
144
+ text: AXTranslator.get('queryBuilder.less-than-equal')
145
+ },
146
+ {
147
+ value: 'not-equal',
148
+ text: AXTranslator.get('queryBuilder.not-equal')
149
+ },
150
+ {
151
+ value: 'null',
152
+ text: AXTranslator.get('queryBuilder.null')
153
+ },
154
+ {
155
+ value: 'not-null',
156
+ text: AXTranslator.get('queryBuilder.not-null')
157
+ }
158
+ ]);
159
+ }
160
+ if (this.rule.dataType === 'boolean') {
161
+ resolve([
162
+ {
163
+ value: 'equal',
164
+ text: AXTranslator.get('queryBuilder.equal')
165
+ },
166
+ {
167
+ value: 'null',
168
+ text: AXTranslator.get('queryBuilder.null')
169
+ },
170
+ {
171
+ value: 'not-null',
172
+ text: AXTranslator.get('queryBuilder.not-null')
173
+ }
174
+ ]);
175
+ }
176
+ if (this.rule.dataType === 'datetime') {
177
+ resolve([
178
+ {
179
+ value: 'equal',
180
+ text: AXTranslator.get('queryBuilder.equal')
181
+ },
182
+ {
183
+ value: 'gt',
184
+ text: AXTranslator.get('queryBuilder.greater-than')
185
+ },
186
+ {
187
+ value: 'gte',
188
+ text: AXTranslator.get('queryBuilder.greater-than-equal')
189
+ },
190
+ {
191
+ value: 'lt',
192
+ text: AXTranslator.get('queryBuilder.less-than')
193
+ },
194
+ {
195
+ value: 'lte',
196
+ text: AXTranslator.get('queryBuilder.less-than-equal')
197
+ },
198
+ {
199
+ value: 'not-equal',
200
+ text: AXTranslator.get('queryBuilder.not-equal')
201
+ },
202
+ {
203
+ value: 'null',
204
+ text: AXTranslator.get('queryBuilder.null')
205
+ },
206
+ {
207
+ value: 'not-null',
208
+ text: AXTranslator.get('queryBuilder.not-null')
209
+ }
210
+ ]);
211
+ }
212
+ resolve([]);
213
+ });
214
+ };
215
+ this.getProvideData = (e) => {
216
+ if (this.rule && this.rule.control.options && this.rule.control.options.dataSource) {
217
+ return this.rule.control.options.dataSource({ ...e, optionsData: { ...this.rule.control.options } });
218
+ }
219
+ };
220
+ }
221
+ ngOnInit() { }
222
+ ngAfterViewInit() {
223
+ //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
224
+ //Add 'implements AfterViewInit' to the class.
225
+ if (this.rule.onDemandLabel) {
226
+ this.isOnDemandLabel = true;
227
+ }
228
+ }
229
+ saveRule() {
230
+ this.form.validate().then((c) => { });
231
+ }
232
+ handleEditClick() {
233
+ this.isEditing = true;
234
+ }
235
+ handleCommitClick() {
236
+ this.isEditing = false;
237
+ this.ruleChanged.emit({ items: this.rule, component: this });
238
+ }
239
+ handleRemoveClick() {
240
+ this.onRuleDelete.emit({ items: this.rule, component: this });
241
+ }
242
+ captionChange(e) {
243
+ if (e.selectedItems[0]) {
244
+ this.rule.caption = e.selectedItems[0].caption;
245
+ this.rule.dataField = e.selectedItems[0].dataField;
246
+ this.rule.dataType = e.selectedItems[0].dataType;
247
+ this.rule.control = e.selectedItems[0].control || new AXQueryBuilderControl();
248
+ this.rule.dataFieldItem[0] = e.selectedItems[0];
249
+ }
250
+ if (this.selectBox) {
251
+ if (this.rule.control.type === 'selectBox' && this.rule.control.options.mode == 'multiple') {
252
+ this.rule.operator = 'contains';
253
+ }
254
+ else {
255
+ this.rule.operator = 'equal';
256
+ }
257
+ this.selectBox.refresh();
258
+ }
259
+ this.showOperatorSelectBox = false;
260
+ setTimeout(() => {
261
+ this.showOperatorSelectBox = true;
262
+ }, 20);
263
+ this.rule.value = null;
264
+ this.rule.valueItem = [];
265
+ this.rule.text = '';
266
+ if (this.rule.control.type === 'selectBox' && this.selectBoxValue) {
267
+ this.showSelectBox = false;
268
+ setTimeout(() => {
269
+ this.showSelectBox = true;
270
+ this.selectBoxValue.refresh();
271
+ }, 20);
272
+ }
273
+ if (this.rule.control.type == 'boolean') {
274
+ this.selectBoxBoolean.refresh();
275
+ }
276
+ this.ruleChanged.emit({ component: this, items: this.rule });
277
+ }
278
+ operatorChange(e) {
279
+ this.rule.operator = e[0].value;
280
+ this.ruleChanged.emit({ component: this, items: this.rule });
281
+ if (e[0].value !== 'null' && e[0].value !== 'not-null') {
282
+ this.showValue = true;
283
+ }
284
+ else {
285
+ this.showValue = false;
286
+ this.rule.value = '';
287
+ this.rule.text = '';
288
+ this.rule.valueItem = [];
289
+ this.rule.onDemandLabel = '';
290
+ }
291
+ }
292
+ valueChange(e) {
293
+ debugger;
294
+ // this.rule.text = e.value == undefined ? e[0].value : (e.value == null ? '' : e.value);
295
+ this.rule.text = e[0] ? (e[0].value == null ? '' : e[0].value) : e.value == null ? '' : e.value;
296
+ this.rule.onDemandLabel = '';
297
+ this.ruleChanged.emit({ component: this, items: this.rule });
298
+ }
299
+ onDemandLabelChange(e) {
300
+ // this.rule.onDemandLabel = e.value == undefined ? '????|' + e[0].value : '????|' + e.value;
301
+ this.rule.onDemandLabel = e[0] ? '????|' + (e[0].value == null ? '' : e[0].value) : '????|' + (e.value == null ? '' : e.value);
302
+ this.rule.value = '';
303
+ this.rule.text = '';
304
+ this.rule.valueItem = [];
305
+ this.ruleChanged.emit({ component: this, items: this.rule });
306
+ }
307
+ valueBooleanChange(e) {
308
+ // this.rule.text = e.value == undefined ? e[0].value : (e.value == null ? '' : e.value);
309
+ this.rule.text = e[0] ? (e[0].value == null ? '' : e[0].value) : e.value == null ? '' : e.value;
310
+ this.rule.value = e.value == undefined ? e[0].value : e.value;
311
+ this.rule.onDemandLabel = '';
312
+ this.ruleChanged.emit({ component: this, items: this.rule });
313
+ }
314
+ getOnDemandName(v) {
315
+ return v ? v.split('|')[1] : '';
316
+ }
317
+ selectedItemsChange(e) {
318
+ let n = this.getOption('textField');
319
+ if (this.rule.control.options.mode === 'single') {
320
+ this.rule.text = e[0][n];
321
+ if (this.rule && this.rule.control.options.valueField) {
322
+ this.rule.value = e[0][this.rule.control.options.valueField];
323
+ }
324
+ else {
325
+ this.rule.value = e[0].value;
326
+ }
327
+ this.rule.valueItem[0] = e[0];
328
+ }
329
+ else {
330
+ this.rule.text = e.map((x) => x[n]).join('- ');
331
+ const THAT = this;
332
+ if (THAT.rule && THAT.rule.control.options.valueField) {
333
+ THAT.rule.value = e.map(function (item) {
334
+ return item[THAT.rule.control.options.valueField];
335
+ });
336
+ }
337
+ else {
338
+ this.rule.value = e.map(function (item) {
339
+ return item.value;
340
+ });
341
+ }
342
+ this.rule.valueItem = e;
343
+ }
344
+ this.ruleChanged.emit({ component: this, items: this.rule });
345
+ this.rule.onDemandLabel = '';
346
+ }
347
+ onDemandLabel(e) {
348
+ // if (e.value && (this.rule.onDemandLabel == '????|' || this.rule.onDemandLabel === undefined || this.rule.onDemandLabel === null || this.rule.onDemandLabel === '')) {
349
+ // this.textBoxNameValue.focus();
350
+ // }
351
+ if (e.value == false) {
352
+ this.rule.onDemandLabel = '';
353
+ }
354
+ this.isOnDemandLabel = e.value;
355
+ }
356
+ getOption(name) {
357
+ return this.rule.control.options ? this.rule.control.options[name] : null;
358
+ }
359
+ }
360
+ AXQueryBuilderRuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXQueryBuilderRuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
361
+ AXQueryBuilderRuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXQueryBuilderRuleComponent, selector: "ax-query-rule", inputs: { isEditing: "isEditing", rule: "rule", parent: "parent", mode: "mode", fields: "fields" }, outputs: { onRuleDelete: "onRuleDelete", ruleChanged: "ruleChanged" }, host: { classAttribute: "ax ax-query-rule" }, viewQueries: [{ propertyName: "selectBox", first: true, predicate: ["selectBox"], descendants: true }, { propertyName: "selectBoxValue", first: true, predicate: ["selectBoxValue"], descendants: true }, { propertyName: "selectBoxBoolean", first: true, predicate: ["selectBoxBoolean"], descendants: true }, { propertyName: "textBoxNameValue", first: true, predicate: ["textBoxNameValue"], descendants: true }, { propertyName: "form", first: true, predicate: AXValidationFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"condition\" *ngIf=\"parent\">\n <div class=\"text {{parent.condition}}\">\n <span>{{parent.condition}}</span>\n </div>\n</div>\n<div class=\"handler\">\n <i class=\"far fa-grip-lines-vertical\"></i>\n</div>\n\n<div class=\"caption\" [ngClass]=\"{'editable': isEditing}\">\n <ng-container *ngIf=\"isEditing;else fieldsTemplate\">\n <ax-form-group>\n <ax-select-box [readonly]=\"mode == 'edit'\" (selectionChanged)=\"captionChange($event)\" allowNull=\"false\"\n [(selectedItems)]=\"rule.dataFieldItem\" textField=\"caption\" valueField=\"dataField\" [items]=\"fields\"\n mode=\"single\">\n </ax-select-box>\n </ax-form-group>\n </ng-container>\n <ng-template #fieldsTemplate>\n <div (click)=\"handleEditClick()\">\n {{rule.caption}}\n </div>\n </ng-template>\n</div>\n\n<div class=\"operator\" [ngClass]=\"{'editable': isEditing,'radius':!showValue}\">\n <ng-container *ngIf=\"isEditing;else operatorTemplate\">\n <ax-form-group>\n <ax-select-box [readonly]=\"mode == 'edit'\" *ngIf=\"showOperatorSelectBox\" [(selectedValues)]=\"rule.operator\"\n #selectBox (selectedItemsChange)=\"operatorChange($event)\" allowNull=\"false\" mode=\"single\">\n <ax-data-source [provideData]=\"provideDataOperator\">\n </ax-data-source>\n </ax-select-box>\n </ax-form-group>\n </ng-container>\n <ng-template #operatorTemplate>\n <div class=\"text\" (click)=\"handleEditClick()\">\n {{('queryBuilder.'+rule.operator) | trans}}\n </div>\n </ng-template>\n</div>\n<div *ngIf=\"showValue\" class=\"value\" [ngClass]=\"{'editable': isEditing}\">\n <ng-container *ngIf=\"isEditing;else valueTemplate\">\n\n <div *ngIf=\" rule.control && !isOnDemandLabel\" [ngSwitch]=\"rule.control.type\">\n <div *ngSwitchCase=\"'textBox'\">\n <ax-form-group>\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\n [(value)]=\"rule.value\">\n </ax-text-box>\n </ax-form-group>\n </div>\n <div *ngSwitchCase=\"'selectBox'\">\n <ax-form-group>\n <ax-select-box *ngIf=\"showSelectBox\" [mode]=\"getOption('mode')\"\n [remoteOperation]=\"getOption('remoteOperation')\" [valueField]=\"getOption('valueField')\"\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [textField]=\"getOption('textField')\"\n [(selectedItems)]=\"rule.valueItem\" (selectedItemsChange)=\"selectedItemsChange($event)\"\n #selectBoxValue>\n <ax-data-source [provideData]=\"getProvideData\"></ax-data-source>\n </ax-select-box>\n </ax-form-group>\n </div>\n\n <div *ngSwitchCase=\"'numberBox'\">\n <ax-form-group>\n <ax-number-box [decimalNumber]=\"2\" (onValueChanged)=\"valueChange($event)\"\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [(value)]=\"rule.value\">\n </ax-number-box>\n </ax-form-group>\n </div>\n <div *ngSwitchCase=\"'datetime'\">\n <ax-date-picker label=\"From\" [(value)]=\"rule.value\" (onValueChanged)=\"valueChange($event)\">\n </ax-date-picker>\n\n </div>\n <div *ngSwitchCase=\"'boolean'\">\n\n <ax-form-group>\n <ax-select-box #selectBoxBoolean (selectedItemsChange)=\"valueBooleanChange($event)\"\n allowNull=\"false\" [selectedValues]=\"rule.value\" mode=\"single\">\n <ax-data-source [provideData]=\"provideDataBoolean\">\n </ax-data-source>\n </ax-select-box>\n </ax-form-group>\n\n </div>\n <div *ngSwitchDefault>\n <ax-form-group>\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\n [(value)]=\"rule.value\">\n </ax-text-box>\n\n </ax-form-group>\n\n </div>\n </div>\n\n <div *ngIf=\"isOnDemandLabel\">\n\n <ax-text-box #textBoxNameValue [value]=\"getOnDemandName(rule.onDemandLabel)\"\n (onValueChanged)=\"onDemandLabelChange($event)\" placeholder=\"\u0646\u0627\u0645 \u0645\u062A\u063A\u06CC\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\">\n <!-- <ax-validation>\n <ax-validation-rule type=\"required\"></ax-validation-rule>\n </ax-validation> -->\n </ax-text-box>\n\n\n </div>\n\n </ng-container>\n <ng-template #valueTemplate>\n <div (click)=\"handleEditClick()\">\n\n {{rule.text}}\n\n </div>\n </ng-template>\n</div>\n\n<div class=\"buttons-list\">\n <div *ngIf=\"showValue && isEditing && mode == 'new'\" class=\"button variable\"\n [ngClass]=\"{'active-button': isOnDemandLabel}\">\n <i class=\"far fa-dollar-sign\"></i>\n <ax-check-box [value]=\"isOnDemandLabel\" (onClick)=\"onDemandLabel($event)\">\n </ax-check-box>\n </div>\n\n <div class=\"button commit\" (click)=\"handleCommitClick()\" *ngIf=\"isEditing\">\n <i class=\"far fa-check\"></i>\n </div>\n <div class=\"button remove\" (click)=\"handleRemoveClick()\" *ngIf=\"mode == 'new'\">\n <i class=\"far fa-times\"></i>\n </div>\n</div>", components: [{ type: i1.AXFormGroupComponent, selector: "ax-form-group", inputs: ["size"] }, { type: i2.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["showDropDownButton", "rowInputTemplate", "showCheckBox", "readonly", "rtl", "disabled", "placeholder", "size", "allowNull", "textAlign", "bufferSize", "remoteOperation", "fitParent", "dropdownWidth", "dataSource", "validation", "disabledCallback", "allowSearch", "textField", "valueField", "disabledField", "mode", "items", "selectedItems", "selectedValues"], outputs: ["dropdownToggle", "itemsChange", "onBlur", "onFocus", "selectionChanged", "selectedItemsChange", "selectedValuesChange"] }, { type: i3.AXDataSourceComponent, selector: "ax-data-source", inputs: ["provideData", "params"] }, { type: i4.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "type", "showMask", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions"] }, { type: i5.AXNumberBoxComponent, selector: "ax-number-box", inputs: ["min", "max", "showSeparator", "showCurrency", "showCounter", "scrollWeel", "showDoubleCounter", "maxLength", "intStep", "decimalNumber", "customStep"] }, { type: i6.AXDatePickerComponent, selector: "ax-date-picker", inputs: ["dayStyle", "dayMinMaxResoan", "validation", "placeholder", "min", "max", "readonly", "disabled", "allowClear", "textAlign", "showToday", "selectableHoliday", "dateType", "showTodayButton", "openByClick", "size", "type", "value"], outputs: ["typeChange", "onValueChanged", "valueChange"] }, { type: i7.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "trans": i9.AXTranslatorPipe }, encapsulation: i0.ViewEncapsulation.None });
362
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXQueryBuilderRuleComponent, decorators: [{
363
+ type: Component,
364
+ args: [{ selector: 'ax-query-rule', host: { class: 'ax ax-query-rule' }, encapsulation: ViewEncapsulation.None, template: "<div class=\"condition\" *ngIf=\"parent\">\n <div class=\"text {{parent.condition}}\">\n <span>{{parent.condition}}</span>\n </div>\n</div>\n<div class=\"handler\">\n <i class=\"far fa-grip-lines-vertical\"></i>\n</div>\n\n<div class=\"caption\" [ngClass]=\"{'editable': isEditing}\">\n <ng-container *ngIf=\"isEditing;else fieldsTemplate\">\n <ax-form-group>\n <ax-select-box [readonly]=\"mode == 'edit'\" (selectionChanged)=\"captionChange($event)\" allowNull=\"false\"\n [(selectedItems)]=\"rule.dataFieldItem\" textField=\"caption\" valueField=\"dataField\" [items]=\"fields\"\n mode=\"single\">\n </ax-select-box>\n </ax-form-group>\n </ng-container>\n <ng-template #fieldsTemplate>\n <div (click)=\"handleEditClick()\">\n {{rule.caption}}\n </div>\n </ng-template>\n</div>\n\n<div class=\"operator\" [ngClass]=\"{'editable': isEditing,'radius':!showValue}\">\n <ng-container *ngIf=\"isEditing;else operatorTemplate\">\n <ax-form-group>\n <ax-select-box [readonly]=\"mode == 'edit'\" *ngIf=\"showOperatorSelectBox\" [(selectedValues)]=\"rule.operator\"\n #selectBox (selectedItemsChange)=\"operatorChange($event)\" allowNull=\"false\" mode=\"single\">\n <ax-data-source [provideData]=\"provideDataOperator\">\n </ax-data-source>\n </ax-select-box>\n </ax-form-group>\n </ng-container>\n <ng-template #operatorTemplate>\n <div class=\"text\" (click)=\"handleEditClick()\">\n {{('queryBuilder.'+rule.operator) | trans}}\n </div>\n </ng-template>\n</div>\n<div *ngIf=\"showValue\" class=\"value\" [ngClass]=\"{'editable': isEditing}\">\n <ng-container *ngIf=\"isEditing;else valueTemplate\">\n\n <div *ngIf=\" rule.control && !isOnDemandLabel\" [ngSwitch]=\"rule.control.type\">\n <div *ngSwitchCase=\"'textBox'\">\n <ax-form-group>\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\n [(value)]=\"rule.value\">\n </ax-text-box>\n </ax-form-group>\n </div>\n <div *ngSwitchCase=\"'selectBox'\">\n <ax-form-group>\n <ax-select-box *ngIf=\"showSelectBox\" [mode]=\"getOption('mode')\"\n [remoteOperation]=\"getOption('remoteOperation')\" [valueField]=\"getOption('valueField')\"\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [textField]=\"getOption('textField')\"\n [(selectedItems)]=\"rule.valueItem\" (selectedItemsChange)=\"selectedItemsChange($event)\"\n #selectBoxValue>\n <ax-data-source [provideData]=\"getProvideData\"></ax-data-source>\n </ax-select-box>\n </ax-form-group>\n </div>\n\n <div *ngSwitchCase=\"'numberBox'\">\n <ax-form-group>\n <ax-number-box [decimalNumber]=\"2\" (onValueChanged)=\"valueChange($event)\"\n placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\" [(value)]=\"rule.value\">\n </ax-number-box>\n </ax-form-group>\n </div>\n <div *ngSwitchCase=\"'datetime'\">\n <ax-date-picker label=\"From\" [(value)]=\"rule.value\" (onValueChanged)=\"valueChange($event)\">\n </ax-date-picker>\n\n </div>\n <div *ngSwitchCase=\"'boolean'\">\n\n <ax-form-group>\n <ax-select-box #selectBoxBoolean (selectedItemsChange)=\"valueBooleanChange($event)\"\n allowNull=\"false\" [selectedValues]=\"rule.value\" mode=\"single\">\n <ax-data-source [provideData]=\"provideDataBoolean\">\n </ax-data-source>\n </ax-select-box>\n </ax-form-group>\n\n </div>\n <div *ngSwitchDefault>\n <ax-form-group>\n <ax-text-box (onValueChanged)=\"valueChange($event)\" placeholder=\"\u0645\u0642\u062F\u0627\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\"\n [(value)]=\"rule.value\">\n </ax-text-box>\n\n </ax-form-group>\n\n </div>\n </div>\n\n <div *ngIf=\"isOnDemandLabel\">\n\n <ax-text-box #textBoxNameValue [value]=\"getOnDemandName(rule.onDemandLabel)\"\n (onValueChanged)=\"onDemandLabelChange($event)\" placeholder=\"\u0646\u0627\u0645 \u0645\u062A\u063A\u06CC\u0631 \u062E\u0648\u062F \u0631\u0627 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F\">\n <!-- <ax-validation>\n <ax-validation-rule type=\"required\"></ax-validation-rule>\n </ax-validation> -->\n </ax-text-box>\n\n\n </div>\n\n </ng-container>\n <ng-template #valueTemplate>\n <div (click)=\"handleEditClick()\">\n\n {{rule.text}}\n\n </div>\n </ng-template>\n</div>\n\n<div class=\"buttons-list\">\n <div *ngIf=\"showValue && isEditing && mode == 'new'\" class=\"button variable\"\n [ngClass]=\"{'active-button': isOnDemandLabel}\">\n <i class=\"far fa-dollar-sign\"></i>\n <ax-check-box [value]=\"isOnDemandLabel\" (onClick)=\"onDemandLabel($event)\">\n </ax-check-box>\n </div>\n\n <div class=\"button commit\" (click)=\"handleCommitClick()\" *ngIf=\"isEditing\">\n <i class=\"far fa-check\"></i>\n </div>\n <div class=\"button remove\" (click)=\"handleRemoveClick()\" *ngIf=\"mode == 'new'\">\n <i class=\"far fa-times\"></i>\n </div>\n</div>" }]
365
+ }], ctorParameters: function () { return []; }, propDecorators: { selectBox: [{
366
+ type: ViewChild,
367
+ args: ['selectBox']
368
+ }], selectBoxValue: [{
369
+ type: ViewChild,
370
+ args: ['selectBoxValue']
371
+ }], selectBoxBoolean: [{
372
+ type: ViewChild,
373
+ args: ['selectBoxBoolean']
374
+ }], textBoxNameValue: [{
375
+ type: ViewChild,
376
+ args: ['textBoxNameValue']
377
+ }], form: [{
378
+ type: ViewChild,
379
+ args: [AXValidationFormComponent]
380
+ }], isEditing: [{
381
+ type: Input
382
+ }], rule: [{
383
+ type: Input
384
+ }], parent: [{
385
+ type: Input
386
+ }], mode: [{
387
+ type: Input
388
+ }], fields: [{
389
+ type: Input
390
+ }], onRuleDelete: [{
391
+ type: Output
392
+ }], ruleChanged: [{
393
+ type: Output
394
+ }] } });
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1ydWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvcXVlcnktYnVpbGRlci9xdWVyeS1idWlsZGVyLXJ1bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2NvbXBvbmVudHMvc3JjL2xpYi9xdWVyeS1idWlsZGVyL3F1ZXJ5LWJ1aWxkZXItcnVsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTJCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFRcEYsTUFBTSxPQUFPLDJCQUEyQjtJQW1DdEM7UUExQkEsY0FBUyxHQUFZLElBQUksQ0FBQztRQVMxQixTQUFJLEdBQW1CLEtBQUssQ0FBQztRQUc3QixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBR25CLGlCQUFZLEdBQTBDLElBQUksWUFBWSxFQUEyQixDQUFDO1FBR2xHLGdCQUFXLEdBQTBDLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRWpHLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFF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U0FBUzsrQkFDRSxlQUFlLFFBRW5CLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLGlCQUNwQixpQkFBaUIsQ0FBQyxJQUFJOzBFQUdiLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDTyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFFSSxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVFLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ1MsSUFBSTtzQkFBekMsU0FBUzt1QkFBQyx5QkFBeUI7Z0JBRXBDLFNBQVM7c0JBRFIsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24sIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUXVlcnlCdWlsZGVyUnVsZSwgQVhRdWVyeUJ1aWxkZXJHcm91cCwgQVhRdWVyeUJ1aWxkZXJSdWxlRXZlbnQsIEFYUXVlcnlCdWlsZGVyQ29udHJvbCB9IGZyb20gJy4vcXVlcnktYnVpbGRlci5jbGFzcyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuaW1wb3J0IHsgQVhTZWxlY3RCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3Rib3gvc2VsZWN0Ym94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IEFYVmFsaWRhdGlvbkZvcm1Db21wb25lbnQgfSBmcm9tICcuLi92YWxpZGF0aW9uL3ZhbGlkYXRpb24tZm9ybS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1xdWVyeS1ydWxlJyxcbiAgdGVtcGxhdGVVcmw6ICdxdWVyeS1idWlsZGVyLXJ1bGUuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnYXggYXgtcXVlcnktcnVsZScgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBWFF1ZXJ5QnVpbGRlclJ1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCdzZWxlY3RCb3gnKSBzZWxlY3RCb3g6IEFYU2VsZWN0Qm94Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzZWxlY3RCb3hWYWx1ZScpIHNlbGVjdEJveFZhbHVlOiBBWFNlbGVjdEJveENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdzZWxlY3RCb3hCb29sZWFuJykgc2VsZWN0Qm94Qm9vbGVhbjogQVhTZWxlY3RCb3hDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgndGV4dEJveE5hbWVWYWx1ZScpIHRleHRCb3hOYW1lVmFsdWU6IEFYVGV4dEJveENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50KSBmb3JtOiBBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50O1xuICBASW5wdXQoKVxuICBpc0VkaXRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHJ1bGU6IEFYUXVlcnlCdWlsZGVyUnVsZTtcblxuICBASW5wdXQoKVxuICBwYXJlbnQ6IEFYUXVlcnlCdWlsZGVyR3JvdXA7XG5cbiAgQElucHV0KClcbiAgbW9kZTogJ25ldycgfCAnZWRpdCcgPSAnbmV3JztcblxuICBASW5wdXQoKVxuICBmaWVsZHM6IGFueVtdID0gW107XG5cbiAgQE91dHB1dCgpXG4gIG9uUnVsZURlbGV0ZTogRXZlbnRFbWl0dGVyPEFYUXVlcnlCdWlsZGVyUnVsZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhRdWVyeUJ1aWxkZXJSdWxlRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJ1bGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhRdWVyeUJ1aWxkZXJSdWxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFF1ZXJ5QnVpbGRlclJ1bGVFdmVudD4oKTtcblxuICBzaG93VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc09uRGVtYW5kTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzaG93U2VsZWN0Qm94OiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd09wZXJhdG9yU2VsZWN0Qm94OiBib29sZWFuID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvL0NhbGxlZCBhZnRlciBuZ0FmdGVyQ29udGVudEluaXQgd2hlbiB0aGUgY29tcG9uZW50J3MgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZC4gQXBwbGllcyB0byBjb21wb25lbnRzIG9ubHkuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgIGlmICh0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCkge1xuICAgICAgdGhpcy5pc09uRGVtYW5kTGFiZWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcm92aWRlRGF0YUJvb2xlYW4gPSAoZSkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgcmVzb2x2ZShbXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogJ3RydWUnLFxuICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci50cnVlJylcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAnZmFsc2UnLFxuICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5mYWxzZScpXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHNhdmVSdWxlKCkge1xuICAgIHRoaXMuZm9ybS52YWxpZGF0ZSgpLnRoZW4oKGMpID0+IHsgfSk7XG4gIH1cblxuICBwcm92aWRlRGF0YU9wZXJhdG9yID0gKGUpID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLnJ1bGUuZGF0YVR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0aGlzLnJ1bGUgJiYgdGhpcy5ydWxlLmNvbnRyb2wgJiYgdGhpcy5ydWxlLmNvbnRyb2wudHlwZSAmJiB0aGlzLnJ1bGUuY29udHJvbC50eXBlID09ICdzZWxlY3RCb3gnKSB7XG4gICAgICAgICAgaWYgKHRoaXMucnVsZS5jb250cm9sLm9wdGlvbnMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICByZXNvbHZlKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnY29udGFpbnMnLFxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5jb250YWlucycpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ25vdC1jb250YWlucycsXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1jb250YWlucycpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zLWFsbCcsXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmNvbnRhaW5zLWFsbCcpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ251bGwnLFxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5udWxsJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnbm90LW51bGwnLFxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtbnVsbCcpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5lcXVhbCcpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ25vdC1lcXVhbCcsXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1lcXVhbCcpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ251bGwnLFxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5udWxsJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnbm90LW51bGwnLFxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtbnVsbCcpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFsdWU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5lcXVhbCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJyxcbiAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmNvbnRhaW5zJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnc3RhcnQtd2l0aCcsXG4gICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5zdGFydC13aXRoJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnZW5kLXdpdGgnLFxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuZW5kLXdpdGgnKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFsdWU6ICdub3QtZXF1YWwnLFxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubm90LWVxdWFsJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnbnVsbCcsXG4gICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5udWxsJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnbm90LW51bGwnLFxuICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubm90LW51bGwnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ydWxlLmRhdGFUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXNvbHZlKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ2VxdWFsJyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5lcXVhbCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ2d0JyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ncmVhdGVyLXRoYW4nKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICdndGUnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmdyZWF0ZXItdGhhbi1lcXVhbCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ2x0JyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5sZXNzLXRoYW4nKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICdsdGUnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmxlc3MtdGhhbi1lcXVhbCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ25vdC1lcXVhbCcsXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubm90LWVxdWFsJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnbnVsbCcsXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubnVsbCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ25vdC1udWxsJyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtbnVsbCcpXG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJ1bGUuZGF0YVR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXNvbHZlKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ2VxdWFsJyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5lcXVhbCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ251bGwnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm51bGwnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICdub3QtbnVsbCcsXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubm90LW51bGwnKVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ydWxlLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgIHJlc29sdmUoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnZXF1YWwnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmVxdWFsJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnZ3QnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmdyZWF0ZXItdGhhbicpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ2d0ZScsXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIuZ3JlYXRlci10aGFuLWVxdWFsJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnbHQnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLmxlc3MtdGhhbicpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJ2x0ZScsXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdxdWVyeUJ1aWxkZXIubGVzcy10aGFuLWVxdWFsJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnbm90LWVxdWFsJyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5ub3QtZXF1YWwnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICdudWxsJyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ3F1ZXJ5QnVpbGRlci5udWxsJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnbm90LW51bGwnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgncXVlcnlCdWlsZGVyLm5vdC1udWxsJylcbiAgICAgICAgICB9XG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXSk7XG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlRWRpdENsaWNrKCkge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNvbW1pdENsaWNrKCkge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5ydWxlQ2hhbmdlZC5lbWl0KHsgaXRlbXM6IHRoaXMucnVsZSwgY29tcG9uZW50OiB0aGlzIH0pO1xuICB9XG4gIGhhbmRsZVJlbW92ZUNsaWNrKCkge1xuICAgIHRoaXMub25SdWxlRGVsZXRlLmVtaXQoeyBpdGVtczogdGhpcy5ydWxlLCBjb21wb25lbnQ6IHRoaXMgfSk7XG4gIH1cbiAgY2FwdGlvbkNoYW5nZShlKSB7XG4gICAgaWYgKGUuc2VsZWN0ZWRJdGVtc1swXSkge1xuICAgICAgdGhpcy5ydWxlLmNhcHRpb24gPSBlLnNlbGVjdGVkSXRlbXNbMF0uY2FwdGlvbjtcbiAgICAgIHRoaXMucnVsZS5kYXRhRmllbGQgPSBlLnNlbGVjdGVkSXRlbXNbMF0uZGF0YUZpZWxkO1xuICAgICAgdGhpcy5ydWxlLmRhdGFUeXBlID0gZS5zZWxlY3RlZEl0ZW1zWzBdLmRhdGFUeXBlO1xuICAgICAgdGhpcy5ydWxlLmNvbnRyb2wgPSBlLnNlbGVjdGVkSXRlbXNbMF0uY29udHJvbCB8fCBuZXcgQVhRdWVyeUJ1aWxkZXJDb250cm9sKCk7XG4gICAgICB0aGlzLnJ1bGUuZGF0YUZpZWxkSXRlbVswXSA9IGUuc2VsZWN0ZWRJdGVtc1swXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RCb3gpIHtcbiAgICAgIGlmICh0aGlzLnJ1bGUuY29udHJvbC50eXBlID09PSAnc2VsZWN0Qm94JyAmJiB0aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zLm1vZGUgPT0gJ211bHRpcGxlJykge1xuICAgICAgICB0aGlzLnJ1bGUub3BlcmF0b3IgPSAnY29udGFpbnMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydWxlLm9wZXJhdG9yID0gJ2VxdWFsJztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0Qm94LnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dPcGVyYXRvclNlbGVjdEJveCA9IGZhbHNlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93T3BlcmF0b3JTZWxlY3RCb3ggPSB0cnVlO1xuICAgIH0sIDIwKTtcblxuICAgIHRoaXMucnVsZS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5ydWxlLnZhbHVlSXRlbSA9IFtdO1xuICAgIHRoaXMucnVsZS50ZXh0ID0gJyc7XG5cbiAgICBpZiAodGhpcy5ydWxlLmNvbnRyb2wudHlwZSA9PT0gJ3NlbGVjdEJveCcgJiYgdGhpcy5zZWxlY3RCb3hWYWx1ZSkge1xuICAgICAgdGhpcy5zaG93U2VsZWN0Qm94ID0gZmFsc2U7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0Qm94ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RCb3hWYWx1ZS5yZWZyZXNoKCk7XG4gICAgICB9LCAyMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJ1bGUuY29udHJvbC50eXBlID09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5zZWxlY3RCb3hCb29sZWFuLnJlZnJlc2goKTtcbiAgICB9XG4gICAgdGhpcy5ydWxlQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBpdGVtczogdGhpcy5ydWxlIH0pO1xuICB9XG5cbiAgb3BlcmF0b3JDaGFuZ2UoZSkge1xuICAgIHRoaXMucnVsZS5vcGVyYXRvciA9IGVbMF0udmFsdWU7XG4gICAgdGhpcy5ydWxlQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBpdGVtczogdGhpcy5ydWxlIH0pO1xuXG4gICAgaWYgKGVbMF0udmFsdWUgIT09ICdudWxsJyAmJiBlWzBdLnZhbHVlICE9PSAnbm90LW51bGwnKSB7XG4gICAgICB0aGlzLnNob3dWYWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1ZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLnJ1bGUudmFsdWUgPSAnJztcbiAgICAgIHRoaXMucnVsZS50ZXh0ID0gJyc7XG4gICAgICB0aGlzLnJ1bGUudmFsdWVJdGVtID0gW107XG4gICAgICB0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9ICcnO1xuICAgIH1cbiAgfVxuICB2YWx1ZUNoYW5nZShlKSB7XG4gICAgZGVidWdnZXJcbiAgICAvLyB0aGlzLnJ1bGUudGV4dCA9IGUudmFsdWUgPT0gdW5kZWZpbmVkID8gZVswXS52YWx1ZSA6IChlLnZhbHVlID09IG51bGwgPyAnJyA6IGUudmFsdWUpO1xuXG4gICAgdGhpcy5ydWxlLnRleHQgPSBlWzBdID8gKGVbMF0udmFsdWUgPT0gbnVsbCA/ICcnIDogZVswXS52YWx1ZSkgOiBlLnZhbHVlID09IG51bGwgPyAnJyA6IGUudmFsdWU7XG4gICAgdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPSAnJztcbiAgICB0aGlzLnJ1bGVDaGFuZ2VkLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIGl0ZW1zOiB0aGlzLnJ1bGUgfSk7XG4gIH1cbiAgb25EZW1hbmRMYWJlbENoYW5nZShlKSB7XG4gICAgLy8gdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPSBlLnZhbHVlID09IHVuZGVmaW5lZCA/ICc/Pz8/fCcgKyBlWzBdLnZhbHVlIDogJz8/Pz98JyArIGUudmFsdWU7XG4gICAgdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPSBlWzBdID8gJz8/Pz98JyArIChlWzBdLnZhbHVlID09IG51bGwgPyAnJyA6IGVbMF0udmFsdWUpIDogJz8/Pz98JyArIChlLnZhbHVlID09IG51bGwgPyAnJyA6IGUudmFsdWUpO1xuICAgIHRoaXMucnVsZS52YWx1ZSA9ICcnO1xuICAgIHRoaXMucnVsZS50ZXh0ID0gJyc7XG4gICAgdGhpcy5ydWxlLnZhbHVlSXRlbSA9IFtdO1xuXG4gICAgdGhpcy5ydWxlQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBpdGVtczogdGhpcy5ydWxlIH0pO1xuICB9XG4gIHZhbHVlQm9vbGVhbkNoYW5nZShlKSB7XG4gICAgLy8gdGhpcy5ydWxlLnRleHQgPSBlLnZhbHVlID09IHVuZGVmaW5lZCA/IGVbMF0udmFsdWUgOiAoZS52YWx1ZSA9PSBudWxsID8gJycgOiBlLnZhbHVlKTtcbiAgICB0aGlzLnJ1bGUudGV4dCA9IGVbMF0gPyAoZVswXS52YWx1ZSA9PSBudWxsID8gJycgOiBlWzBdLnZhbHVlKSA6IGUudmFsdWUgPT0gbnVsbCA/ICcnIDogZS52YWx1ZTtcbiAgICB0aGlzLnJ1bGUudmFsdWUgPSBlLnZhbHVlID09IHVuZGVmaW5lZCA/IGVbMF0udmFsdWUgOiBlLnZhbHVlO1xuICAgIHRoaXMucnVsZS5vbkRlbWFuZExhYmVsID0gJyc7XG4gICAgdGhpcy5ydWxlQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBpdGVtczogdGhpcy5ydWxlIH0pO1xuICB9XG4gIGdldE9uRGVtYW5kTmFtZSh2KSB7XG4gICAgcmV0dXJuIHYgPyB2LnNwbGl0KCd8JylbMV0gOiAnJztcbiAgfVxuICBzZWxlY3RlZEl0ZW1zQ2hhbmdlKGUpIHtcbiAgICBsZXQgbiA9IHRoaXMuZ2V0T3B0aW9uKCd0ZXh0RmllbGQnKTtcblxuICAgIGlmICh0aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLnJ1bGUudGV4dCA9IGVbMF1bbl07XG4gICAgICBpZiAodGhpcy5ydWxlICYmIHRoaXMucnVsZS5jb250cm9sLm9wdGlvbnMudmFsdWVGaWVsZCkge1xuICAgICAgICB0aGlzLnJ1bGUudmFsdWUgPSBlWzBdW3RoaXMucnVsZS5jb250cm9sLm9wdGlvbnMudmFsdWVGaWVsZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bGUudmFsdWUgPSBlWzBdLnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5ydWxlLnZhbHVlSXRlbVswXSA9IGVbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZS50ZXh0ID0gZS5tYXAoKHgpID0+IHhbbl0pLmpvaW4oJy0gJyk7XG4gICAgICBjb25zdCBUSEFUID0gdGhpcztcbiAgICAgIGlmIChUSEFULnJ1bGUgJiYgVEhBVC5ydWxlLmNvbnRyb2wub3B0aW9ucy52YWx1ZUZpZWxkKSB7XG4gICAgICAgIFRIQVQucnVsZS52YWx1ZSA9IGUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1bVEhBVC5ydWxlLmNvbnRyb2wub3B0aW9ucy52YWx1ZUZpZWxkXTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bGUudmFsdWUgPSBlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucnVsZS52YWx1ZUl0ZW0gPSBlO1xuICAgIH1cblxuICAgIHRoaXMucnVsZUNoYW5nZWQuZW1pdCh7IGNvbXBvbmVudDogdGhpcywgaXRlbXM6IHRoaXMucnVsZSB9KTtcbiAgICB0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9ICcnO1xuICB9XG4gIG9uRGVtYW5kTGFiZWwoZSkge1xuICAgIC8vIGlmIChlLnZhbHVlICYmICh0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9PSAnPz8/P3wnIHx8IHRoaXMucnVsZS5vbkRlbWFuZExhYmVsID09PSB1bmRlZmluZWQgfHwgdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPT09IG51bGwgfHwgdGhpcy5ydWxlLm9uRGVtYW5kTGFiZWwgPT09ICcnKSkge1xuICAgIC8vICAgdGhpcy50ZXh0Qm94TmFtZVZhbHVlLmZvY3VzKCk7XG4gICAgLy8gfVxuICAgIGlmIChlLnZhbHVlID09IGZhbHNlKSB7XG4gICAgICB0aGlzLnJ1bGUub25EZW1hbmRMYWJlbCA9ICcnO1xuICAgIH1cbiAgICB0aGlzLmlzT25EZW1hbmRMYWJlbCA9IGUudmFsdWU7XG4gIH1cbiAgZ2V0UHJvdmlkZURhdGEgPSAoZSkgPT4ge1xuICAgIGlmICh0aGlzLnJ1bGUgJiYgdGhpcy5ydWxlLmNvbnRyb2wub3B0aW9ucyAmJiB0aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zLmRhdGFTb3VyY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zLmRhdGFTb3VyY2UoeyAuLi5lLCBvcHRpb25zRGF0YTogeyAuLi50aGlzLnJ1bGUuY29udHJvbC5vcHRpb25zIH0gfSk7XG4gICAgfVxuICB9O1xuXG4gIGdldE9wdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlLmNvbnRyb2wub3B0aW9ucyA/IHRoaXMucnVsZS5jb250cm9sLm9wdGlvbnNbbmFtZV0gOiBudWxsO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29uZGl0aW9uXCIgKm5nSWY9XCJwYXJlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dCB7e3BhcmVudC5jb25kaXRpb259fVwiPlxuICAgICAgICA8c3Bhbj57e3BhcmVudC5jb25kaXRpb259fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImhhbmRsZXJcIj5cbiAgICA8aSBjbGFzcz1cImZhciBmYS1ncmlwLWxpbmVzLXZlcnRpY2FsXCI+PC9pPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjYXB0aW9uXCIgW25nQ2xhc3NdPVwieydlZGl0YWJsZSc6IGlzRWRpdGluZ31cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nO2Vsc2UgZmllbGRzVGVtcGxhdGVcIj5cbiAgICAgICAgPGF4LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveCBbcmVhZG9ubHldPVwibW9kZSA9PSAnZWRpdCdcIiAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJjYXB0aW9uQ2hhbmdlKCRldmVudClcIiBhbGxvd051bGw9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgWyhzZWxlY3RlZEl0ZW1zKV09XCJydWxlLmRhdGFGaWVsZEl0ZW1cIiB0ZXh0RmllbGQ9XCJjYXB0aW9uXCIgdmFsdWVGaWVsZD1cImRhdGFGaWVsZFwiIFtpdGVtc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgICAgIG1vZGU9XCJzaW5nbGVcIj5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgPC9heC1mb3JtLWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZmllbGRzVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljaygpXCI+XG4gICAgICAgICAgICB7e3J1bGUuY2FwdGlvbn19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm9wZXJhdG9yXCIgW25nQ2xhc3NdPVwieydlZGl0YWJsZSc6IGlzRWRpdGluZywncmFkaXVzJzohc2hvd1ZhbHVlfVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmc7ZWxzZSBvcGVyYXRvclRlbXBsYXRlXCI+XG4gICAgICAgIDxheC1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGF4LXNlbGVjdC1ib3ggW3JlYWRvbmx5XT1cIm1vZGUgPT0gJ2VkaXQnXCIgKm5nSWY9XCJzaG93T3BlcmF0b3JTZWxlY3RCb3hcIiBbKHNlbGVjdGVkVmFsdWVzKV09XCJydWxlLm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAjc2VsZWN0Qm94IChzZWxlY3RlZEl0ZW1zQ2hhbmdlKT1cIm9wZXJhdG9yQ2hhbmdlKCRldmVudClcIiBhbGxvd051bGw9XCJmYWxzZVwiIG1vZGU9XCJzaW5nbGVcIj5cbiAgICAgICAgICAgICAgICA8YXgtZGF0YS1zb3VyY2UgW3Byb3ZpZGVEYXRhXT1cInByb3ZpZGVEYXRhT3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICA8L2F4LWRhdGEtc291cmNlPlxuICAgICAgICAgICAgPC9heC1zZWxlY3QtYm94PlxuICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNvcGVyYXRvclRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2soKVwiPlxuICAgICAgICAgICAge3soJ3F1ZXJ5QnVpbGRlci4nK3J1bGUub3BlcmF0b3IpIHwgdHJhbnN9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwic2hvd1ZhbHVlXCIgY2xhc3M9XCJ2YWx1ZVwiIFtuZ0NsYXNzXT1cInsnZWRpdGFibGUnOiBpc0VkaXRpbmd9XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZztlbHNlIHZhbHVlVGVtcGxhdGVcIj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIHJ1bGUuY29udHJvbCAmJiAhaXNPbkRlbWFuZExhYmVsXCIgW25nU3dpdGNoXT1cInJ1bGUuY29udHJvbC50eXBlXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIndGV4dEJveCdcIj5cbiAgICAgICAgICAgICAgICA8YXgtZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXRleHQtYm94IChvblZhbHVlQ2hhbmdlZCk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCLZhdmC2K/Yp9ixINmF2YjYsdivINmG2LjYsSDYrtmI2K8g2LHYpyDZiNin2LHYryDaqdmG24zYr1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJydWxlLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgPC9heC1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0Qm94J1wiPlxuICAgICAgICAgICAgICAgIDxheC1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8YXgtc2VsZWN0LWJveCAqbmdJZj1cInNob3dTZWxlY3RCb3hcIiBbbW9kZV09XCJnZXRPcHRpb24oJ21vZGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3RlT3BlcmF0aW9uXT1cImdldE9wdGlvbigncmVtb3RlT3BlcmF0aW9uJylcIiBbdmFsdWVGaWVsZF09XCJnZXRPcHRpb24oJ3ZhbHVlRmllbGQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItmF2YLYr9in2LEg2YXZiNix2K8g2YbYuNixINiu2YjYryDYsdinINmI2KfYsdivINqp2YbbjNivXCIgW3RleHRGaWVsZF09XCJnZXRPcHRpb24oJ3RleHRGaWVsZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRJdGVtcyldPVwicnVsZS52YWx1ZUl0ZW1cIiAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJzZWxlY3RlZEl0ZW1zQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGVjdEJveFZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWRhdGEtc291cmNlIFtwcm92aWRlRGF0YV09XCJnZXRQcm92aWRlRGF0YVwiPjwvYXgtZGF0YS1zb3VyY2U+XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlckJveCdcIj5cbiAgICAgICAgICAgICAgICA8YXgtZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LW51bWJlci1ib3ggW2RlY2ltYWxOdW1iZXJdPVwiMlwiIChvblZhbHVlQ2hhbmdlZCk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi2YXZgtiv2KfYsSDZhdmI2LHYryDZhti42LEg2K7ZiNivINix2Kcg2YjYp9ix2K8g2qnZhtuM2K9cIiBbKHZhbHVlKV09XCJydWxlLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtbnVtYmVyLWJveD5cbiAgICAgICAgICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIj5cbiAgICAgICAgICAgICAgICA8YXgtZGF0ZS1waWNrZXIgbGFiZWw9XCJGcm9tXCIgWyh2YWx1ZSldPVwicnVsZS52YWx1ZVwiIChvblZhbHVlQ2hhbmdlZCk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9heC1kYXRlLXBpY2tlcj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cblxuICAgICAgICAgICAgICAgIDxheC1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8YXgtc2VsZWN0LWJveCAjc2VsZWN0Qm94Qm9vbGVhbiAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJ2YWx1ZUJvb2xlYW5DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd051bGw9XCJmYWxzZVwiIFtzZWxlY3RlZFZhbHVlc109XCJydWxlLnZhbHVlXCIgbW9kZT1cInNpbmdsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWRhdGEtc291cmNlIFtwcm92aWRlRGF0YV09XCJwcm92aWRlRGF0YUJvb2xlYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtZGF0YS1zb3VyY2U+XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICA8L2F4LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxheC1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8YXgtdGV4dC1ib3ggKG9uVmFsdWVDaGFuZ2VkKT1cInZhbHVlQ2hhbmdlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cItmF2YLYr9in2LEg2YXZiNix2K8g2YbYuNixINiu2YjYryDYsdinINmI2KfYsdivINqp2YbbjNivXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInJ1bGUudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9heC10ZXh0LWJveD5cblxuICAgICAgICAgICAgICAgIDwvYXgtZm9ybS1ncm91cD5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc09uRGVtYW5kTGFiZWxcIj5cblxuICAgICAgICAgICAgPGF4LXRleHQtYm94ICN0ZXh0Qm94TmFtZVZhbHVlIFt2YWx1ZV09XCJnZXRPbkRlbWFuZE5hbWUocnVsZS5vbkRlbWFuZExhYmVsKVwiXG4gICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cIm9uRGVtYW5kTGFiZWxDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwi2YbYp9mFINmF2KrYutuM2LEg2K7ZiNivINix2Kcg2YjYp9ix2K8g2qnZhtuM2K9cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxheC12YWxpZGF0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8YXgtdmFsaWRhdGlvbi1ydWxlIHR5cGU9XCJyZXF1aXJlZFwiPjwvYXgtdmFsaWRhdGlvbi1ydWxlPlxuICAgICAgICAgICAgICAgIDwvYXgtdmFsaWRhdGlvbj4gLS0+XG4gICAgICAgICAgICA8L2F4LXRleHQtYm94PlxuXG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3ZhbHVlVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljaygpXCI+XG5cbiAgICAgICAgICAgIHt7cnVsZS50ZXh0fX1cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJidXR0b25zLWxpc3RcIj5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1ZhbHVlICYmIGlzRWRpdGluZyAmJiBtb2RlID09ICduZXcnXCIgY2xhc3M9XCJidXR0b24gdmFyaWFibGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZS1idXR0b24nOiBpc09uRGVtYW5kTGFiZWx9XCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWRvbGxhci1zaWduXCI+PC9pPlxuICAgICAgICA8YXgtY2hlY2stYm94IFt2YWx1ZV09XCJpc09uRGVtYW5kTGFiZWxcIiAob25DbGljayk9XCJvbkRlbWFuZExhYmVsKCRldmVudClcIj5cbiAgICAgICAgPC9heC1jaGVjay1ib3g+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGNvbW1pdFwiIChjbGljayk9XCJoYW5kbGVDb21taXRDbGljaygpXCIgKm5nSWY9XCJpc0VkaXRpbmdcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtY2hlY2tcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJ1dHRvbiByZW1vdmVcIiAoY2xpY2spPVwiaGFuZGxlUmVtb3ZlQ2xpY2soKVwiICpuZ0lmPVwibW9kZSA9PSAnbmV3J1wiPlxuICAgICAgICA8aSBjbGFzcz1cImZhciBmYS10aW1lc1wiPjwvaT5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==