keevo-components 1.8.36 → 1.8.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (247) hide show
  1. package/esm2022/lib/api/base-components/base-component-chart.mjs +4 -4
  2. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +2 -2
  3. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +2 -2
  4. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +4 -4
  5. package/esm2022/lib/api/base-components/base-component-input.mjs +5 -5
  6. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +1 -1
  7. package/esm2022/lib/{directives → api/directives}/template/template.directive.mjs +1 -1
  8. package/esm2022/lib/api/pipes/codigofile.pipe.mjs +19 -0
  9. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +25 -0
  10. package/esm2022/lib/api/pipes/mask.pipe.mjs +29 -0
  11. package/esm2022/lib/api/pipes/pipes.module.mjs +39 -0
  12. package/esm2022/lib/api/pipes/telefone.pipe.mjs +45 -0
  13. package/esm2022/lib/components/keevo-components.module.mjs +144 -0
  14. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +78 -0
  15. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +32 -0
  16. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +17 -0
  17. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +31 -0
  18. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +17 -0
  19. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +17 -0
  20. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +39 -0
  21. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +92 -0
  22. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +28 -0
  23. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +145 -0
  24. package/esm2022/lib/components/kv-chart/kvchart.module.mjs +32 -0
  25. package/esm2022/lib/components/kv-error/kv-error.component.mjs +26 -0
  26. package/esm2022/lib/components/kv-error/kv-error.module.mjs +35 -0
  27. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +26 -0
  28. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +37 -0
  29. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +88 -0
  30. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +89 -0
  31. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +29 -0
  32. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +59 -0
  33. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +33 -0
  34. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +21 -0
  35. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +42 -0
  36. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +43 -0
  37. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +24 -0
  38. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +108 -0
  39. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +44 -0
  40. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +53 -0
  41. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +34 -0
  42. package/esm2022/lib/components/kv-label/kv-label.component.mjs +15 -0
  43. package/esm2022/lib/components/kv-label/kv-label.module.mjs +24 -0
  44. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +17 -0
  45. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +28 -0
  46. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +29 -0
  47. package/esm2022/lib/components/kv-login/kv-login.component.mjs +52 -0
  48. package/esm2022/lib/components/kv-login/kv-login.module.mjs +47 -0
  49. package/esm2022/lib/components/kv-menu/kv-menu.component.mjs +188 -0
  50. package/esm2022/lib/components/kv-menu/kv-menu.module.mjs +47 -0
  51. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +67 -0
  52. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +31 -0
  53. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +100 -0
  54. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +24 -0
  55. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +147 -0
  56. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +38 -0
  57. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +48 -0
  58. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +32 -0
  59. package/esm2022/lib/{progress-bar/progress-bar.component.mjs → components/kv-progress-bar/kv-progress-bar.component.mjs} +1 -1
  60. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +28 -0
  61. package/esm2022/lib/components/kv-table/kv-table.component.mjs +554 -0
  62. package/esm2022/lib/components/kv-table/kv-table.module.mjs +36 -0
  63. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +567 -0
  64. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +34 -0
  65. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +215 -0
  66. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +28 -0
  67. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +30 -0
  68. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +28 -0
  69. package/esm2022/lib/components/kv-treetable/kv-treetable.component.mjs +371 -0
  70. package/esm2022/lib/components/kv-treetable/kv-treetable.module.mjs +32 -0
  71. package/esm2022/lib/components/kv-workspace/kv-workspace.component.mjs +178 -0
  72. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +51 -0
  73. package/esm2022/public-api.mjs +75 -71
  74. package/fesm2022/keevo-components.mjs +2771 -2735
  75. package/fesm2022/keevo-components.mjs.map +1 -1
  76. package/lib/api/base-components/base-component-chart.d.ts +2 -2
  77. package/lib/api/base-components/base-component-dropdown-external.d.ts +2 -2
  78. package/lib/api/base-components/base-component-input.d.ts +3 -3
  79. package/lib/api/components/table/tableedit.config.column.d.ts +1 -0
  80. package/lib/{pipes → api/pipes}/codigofile.pipe.d.ts +1 -1
  81. package/lib/api/pipes/mask.pipe.d.ts +7 -0
  82. package/lib/api/pipes/pipes.module.d.ts +11 -0
  83. package/lib/components/keevo-components.module.d.ts +25 -0
  84. package/lib/components/kv-avatar/kv-avatar.component.d.ts +22 -0
  85. package/lib/{avatar → components/kv-avatar}/kv-avatar.module.d.ts +2 -2
  86. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +7 -0
  87. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +13 -0
  88. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +7 -0
  89. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +7 -0
  90. package/lib/components/kv-buttons/kv-button.module.d.ts +11 -0
  91. package/lib/components/kv-carousel/kv-carousel.component.d.ts +16 -0
  92. package/lib/{carousel → components/kv-carousel}/kv-carousel.module.d.ts +3 -3
  93. package/lib/{chart/chart.component.d.ts → components/kv-chart/kv-chart.component.d.ts} +4 -4
  94. package/lib/{chart → components/kv-chart}/kvchart.module.d.ts +3 -3
  95. package/lib/components/kv-error/kv-error.component.d.ts +12 -0
  96. package/lib/{api/components/error/kverror.module.d.ts → components/kv-error/kv-error.module.d.ts} +3 -3
  97. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +11 -0
  98. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +14 -0
  99. package/lib/{inputs/editor/editor.component.d.ts → components/kv-inputs/kv-editor/kv-editor.component.d.ts} +5 -5
  100. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +27 -0
  101. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +12 -0
  102. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +19 -0
  103. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +13 -0
  104. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +9 -0
  105. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +16 -0
  106. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +16 -0
  107. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +10 -0
  108. package/lib/components/kv-inputs/kv-inputs.module.d.ts +25 -0
  109. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +15 -0
  110. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +18 -0
  111. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +14 -0
  112. package/lib/components/kv-label/kv-label.component.d.ts +7 -0
  113. package/lib/components/kv-label/kv-label.module.d.ts +8 -0
  114. package/lib/components/kv-loader/kv-loader.component.d.ts +8 -0
  115. package/lib/{loader/kvloader.module.d.ts → components/kv-loader/kv-loader.module.d.ts} +2 -2
  116. package/lib/{loader/loader.service.d.ts → components/kv-loader/kv-loader.service.d.ts} +3 -3
  117. package/lib/{login/login.component.d.ts → components/kv-login/kv-login.component.d.ts} +7 -7
  118. package/lib/components/kv-login/kv-login.module.d.ts +13 -0
  119. package/lib/{menu/menu.component.d.ts → components/kv-menu/kv-menu.component.d.ts} +7 -7
  120. package/lib/components/kv-menu/kv-menu.module.d.ts +13 -0
  121. package/lib/{modal/modal.component.d.ts → components/kv-modal/kv-modal.component.d.ts} +4 -4
  122. package/lib/{modal → components/kv-modal}/kv-modal.module.d.ts +4 -4
  123. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +27 -0
  124. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +9 -0
  125. package/lib/components/kv-page-form/kv-page-form.component.d.ts +70 -0
  126. package/lib/components/kv-page-form/kv-page-form.module.d.ts +11 -0
  127. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +20 -0
  128. package/lib/{picklist/kvpicklist.module.d.ts → components/kv-pick-list/kv-pick-list.module.d.ts} +3 -3
  129. package/lib/{progress-bar → components/kv-progress-bar}/kv-progress-bar.module.d.ts +2 -2
  130. package/lib/{table/table.component.d.ts → components/kv-table/kv-table.component.d.ts} +10 -10
  131. package/lib/{table/kvtable.module.d.ts → components/kv-table/kv-table.module.d.ts} +4 -4
  132. package/lib/{table-edit/table-edit.component.d.ts → components/kv-table-edit/kv-table-edit.component.d.ts} +10 -10
  133. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +12 -0
  134. package/lib/{treetable/treetable.component.d.ts → components/kv-tree-table/kv-tree-table.component.d.ts} +5 -5
  135. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +9 -0
  136. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +14 -0
  137. package/lib/{tree-view/kvtree-view.module.d.ts → components/kv-tree-view/kv-tree-view.module.d.ts} +3 -3
  138. package/lib/{tree-table → components/kv-treetable}/kv-treetable.component.d.ts +5 -5
  139. package/lib/{tree-table → components/kv-treetable}/kv-treetable.module.d.ts +3 -3
  140. package/lib/{workspace/workspace.component.d.ts → components/kv-workspace/kv-workspace.component.d.ts} +1 -1
  141. package/lib/{workspace/kvworkspace.module.d.ts → components/kv-workspace/kv-workspace.module.d.ts} +4 -4
  142. package/package.json +2 -2
  143. package/public-api.d.ts +74 -70
  144. package/esm2022/lib/api/components/error/error.component.mjs +0 -26
  145. package/esm2022/lib/api/components/error/kverror.module.mjs +0 -35
  146. package/esm2022/lib/avatar/avatar.component.mjs +0 -78
  147. package/esm2022/lib/avatar/kv-avatar.module.mjs +0 -32
  148. package/esm2022/lib/buttons/button-personalize/button-personalize.component.mjs +0 -17
  149. package/esm2022/lib/buttons/button-popup/button-popup.component.mjs +0 -31
  150. package/esm2022/lib/buttons/button-secondary/button-secondary.component.mjs +0 -17
  151. package/esm2022/lib/buttons/button-success/button-success.component.mjs +0 -17
  152. package/esm2022/lib/buttons/kvbutton.module.mjs +0 -39
  153. package/esm2022/lib/carousel/carousel.component.mjs +0 -92
  154. package/esm2022/lib/carousel/kv-carousel.module.mjs +0 -28
  155. package/esm2022/lib/chart/chart.component.mjs +0 -145
  156. package/esm2022/lib/chart/kvchart.module.mjs +0 -32
  157. package/esm2022/lib/inputs/check/check.component.mjs +0 -26
  158. package/esm2022/lib/inputs/dropdown/dropdown.component.mjs +0 -37
  159. package/esm2022/lib/inputs/editor/editor.component.mjs +0 -88
  160. package/esm2022/lib/inputs/input-calendar/input-calendar.component.mjs +0 -89
  161. package/esm2022/lib/inputs/input-mask/input-mask.component.mjs +0 -29
  162. package/esm2022/lib/inputs/input-number/input-number.component.mjs +0 -59
  163. package/esm2022/lib/inputs/input-password/input-password.component.mjs +0 -33
  164. package/esm2022/lib/inputs/input-text/input-text.component.mjs +0 -21
  165. package/esm2022/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +0 -42
  166. package/esm2022/lib/inputs/input-textarea/input-textarea.component.mjs +0 -43
  167. package/esm2022/lib/inputs/input-time/input-time.component.mjs +0 -24
  168. package/esm2022/lib/inputs/kvinputs.module.mjs +0 -108
  169. package/esm2022/lib/inputs/multi-select/multi-select.component.mjs +0 -44
  170. package/esm2022/lib/inputs/radio-group/radio-group.component.mjs +0 -53
  171. package/esm2022/lib/inputs/switch/switch.component.mjs +0 -34
  172. package/esm2022/lib/keevo-components.module.mjs +0 -144
  173. package/esm2022/lib/label/label.component.mjs +0 -15
  174. package/esm2022/lib/label/label.module.mjs +0 -24
  175. package/esm2022/lib/loader/kvloader.module.mjs +0 -28
  176. package/esm2022/lib/loader/loader.component.mjs +0 -17
  177. package/esm2022/lib/loader/loader.service.mjs +0 -29
  178. package/esm2022/lib/login/kvlogin.module.mjs +0 -47
  179. package/esm2022/lib/login/login.component.mjs +0 -52
  180. package/esm2022/lib/menu/kvmenu.module.mjs +0 -47
  181. package/esm2022/lib/menu/menu.component.mjs +0 -188
  182. package/esm2022/lib/modal/kv-modal.module.mjs +0 -31
  183. package/esm2022/lib/modal/modal.component.mjs +0 -67
  184. package/esm2022/lib/orgchart/orgchart.component.mjs +0 -100
  185. package/esm2022/lib/orgchart/orgchart.module.mjs +0 -24
  186. package/esm2022/lib/page-form/kv-page-form.module.mjs +0 -38
  187. package/esm2022/lib/page-form/page-form.component.mjs +0 -147
  188. package/esm2022/lib/picklist/kvpicklist.module.mjs +0 -32
  189. package/esm2022/lib/picklist/picklist.component.mjs +0 -48
  190. package/esm2022/lib/pipes/codigofile.pipe.mjs +0 -19
  191. package/esm2022/lib/pipes/cpfcnpj.pipe.mjs +0 -25
  192. package/esm2022/lib/pipes/pipes.module.mjs +0 -34
  193. package/esm2022/lib/pipes/telefone.pipe.mjs +0 -45
  194. package/esm2022/lib/progress-bar/kv-progress-bar.module.mjs +0 -28
  195. package/esm2022/lib/table/kvtable.module.mjs +0 -36
  196. package/esm2022/lib/table/table.component.mjs +0 -554
  197. package/esm2022/lib/table-edit/table-edit.component.mjs +0 -564
  198. package/esm2022/lib/table-edit/table-edit.module.mjs +0 -31
  199. package/esm2022/lib/tree-table/kv-treetable.component.mjs +0 -371
  200. package/esm2022/lib/tree-table/kv-treetable.module.mjs +0 -32
  201. package/esm2022/lib/tree-view/kvtree-view.module.mjs +0 -28
  202. package/esm2022/lib/tree-view/tree-view.component.mjs +0 -30
  203. package/esm2022/lib/treetable/treetable.component.mjs +0 -215
  204. package/esm2022/lib/treetable/treetable.module.mjs +0 -28
  205. package/esm2022/lib/workspace/kvworkspace.module.mjs +0 -51
  206. package/esm2022/lib/workspace/workspace.component.mjs +0 -178
  207. package/lib/api/components/error/error.component.d.ts +0 -12
  208. package/lib/avatar/avatar.component.d.ts +0 -22
  209. package/lib/buttons/button-personalize/button-personalize.component.d.ts +0 -7
  210. package/lib/buttons/button-popup/button-popup.component.d.ts +0 -13
  211. package/lib/buttons/button-secondary/button-secondary.component.d.ts +0 -7
  212. package/lib/buttons/button-success/button-success.component.d.ts +0 -7
  213. package/lib/buttons/kvbutton.module.d.ts +0 -11
  214. package/lib/carousel/carousel.component.d.ts +0 -16
  215. package/lib/inputs/check/check.component.d.ts +0 -11
  216. package/lib/inputs/dropdown/dropdown.component.d.ts +0 -14
  217. package/lib/inputs/input-calendar/input-calendar.component.d.ts +0 -27
  218. package/lib/inputs/input-mask/input-mask.component.d.ts +0 -12
  219. package/lib/inputs/input-number/input-number.component.d.ts +0 -19
  220. package/lib/inputs/input-password/input-password.component.d.ts +0 -13
  221. package/lib/inputs/input-text/input-text.component.d.ts +0 -9
  222. package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +0 -16
  223. package/lib/inputs/input-textarea/input-textarea.component.d.ts +0 -16
  224. package/lib/inputs/input-time/input-time.component.d.ts +0 -10
  225. package/lib/inputs/kvinputs.module.d.ts +0 -25
  226. package/lib/inputs/multi-select/multi-select.component.d.ts +0 -15
  227. package/lib/inputs/radio-group/radio-group.component.d.ts +0 -18
  228. package/lib/inputs/switch/switch.component.d.ts +0 -14
  229. package/lib/keevo-components.module.d.ts +0 -25
  230. package/lib/label/label.component.d.ts +0 -7
  231. package/lib/label/label.module.d.ts +0 -8
  232. package/lib/loader/loader.component.d.ts +0 -8
  233. package/lib/login/kvlogin.module.d.ts +0 -13
  234. package/lib/menu/kvmenu.module.d.ts +0 -13
  235. package/lib/orgchart/orgchart.component.d.ts +0 -27
  236. package/lib/orgchart/orgchart.module.d.ts +0 -9
  237. package/lib/page-form/kv-page-form.module.d.ts +0 -11
  238. package/lib/page-form/page-form.component.d.ts +0 -70
  239. package/lib/picklist/picklist.component.d.ts +0 -20
  240. package/lib/pipes/pipes.module.d.ts +0 -10
  241. package/lib/table-edit/table-edit.module.d.ts +0 -11
  242. package/lib/tree-view/tree-view.component.d.ts +0 -14
  243. package/lib/treetable/treetable.module.d.ts +0 -9
  244. /package/lib/{directives → api/directives}/template/template.directive.d.ts +0 -0
  245. /package/lib/{pipes → api/pipes}/cpfcnpj.pipe.d.ts +0 -0
  246. /package/lib/{pipes → api/pipes}/telefone.pipe.d.ts +0 -0
  247. /package/lib/{progress-bar/progress-bar.component.d.ts → components/kv-progress-bar/kv-progress-bar.component.d.ts} +0 -0
@@ -1,371 +0,0 @@
1
- import { Component, ContentChildren, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
2
- import { TemplateDirective } from '../directives/template/template.directive';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "../../public-api";
6
- import * as i3 from "primeng/api";
7
- import * as i4 from "primeng/autofocus";
8
- import * as i5 from "primeng/button";
9
- import * as i6 from "primeng/tooltip";
10
- import * as i7 from "primeng/inputtext";
11
- import * as i8 from "primeng/menu";
12
- import * as i9 from "primeng/table";
13
- import * as i10 from "primeng/treetable";
14
- export class TreeTableComponent {
15
- constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe) {
16
- this.datePipe = datePipe;
17
- this.decimalPipe = decimalPipe;
18
- this.codigoFipePipe = codigoFipePipe;
19
- this.cpfCnpjPipe = cpfCnpjPipe;
20
- this.telefonePipe = telefonePipe;
21
- this.selectedItems = [];
22
- this.acoesLinhaTabela = true;
23
- this.espacamentoPai = '2px';
24
- this.espacamentoLateral = true;
25
- this.rows = 5;
26
- this.paginator = true;
27
- this.showFirstLastIcon = false;
28
- this.rightCollapse = false;
29
- this.applyStyle = (rowData, col) => '';
30
- this.colorButtonToggleNodes = 'surface-600';
31
- this.onFilter = new EventEmitter();
32
- this.onPaginate = new EventEmitter();
33
- this.onActiveItem = new EventEmitter();
34
- this.onActiveItemLote = new EventEmitter();
35
- this.doubleClickEvent = new EventEmitter();
36
- this.selectedSize = '';
37
- this.nodeContext = { $implicit: 'rowData', rowNode: 'rowNode' };
38
- this.menuItems = [];
39
- this.imgDefault = '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';
40
- this.isExpanded = false;
41
- }
42
- ngOnInit() {
43
- this.tamanhoTela = window.innerWidth;
44
- }
45
- onGlobalFilter(table, event) {
46
- this.onFilter.emit(event.target.value);
47
- table.filterGlobal(event.target.value, 'contains');
48
- }
49
- onWindowResize() {
50
- this.adjustTableSize();
51
- this.tamanhoTela = window.innerWidth;
52
- }
53
- adjustTableSize() {
54
- if (this.tableSize < 800) {
55
- this.selectedSize = 'p-datatable-sm';
56
- }
57
- else {
58
- this.selectedSize = '';
59
- }
60
- }
61
- paginate($event) {
62
- if ($event) {
63
- let paginaInicial = ($event?.first > 0 ? $event.first / $event.rows : $event.first) + 1;
64
- let termoPesquisa = '';
65
- let ordenacao = '';
66
- if ($event.globalFilter)
67
- termoPesquisa = $event.globalFilter;
68
- if ($event.sortField)
69
- ordenacao = `${$event.sortField} ${$event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
70
- const objeto = {
71
- paginaInicial: paginaInicial,
72
- tamanhoPagina: $event.rows,
73
- termoPesquisa: termoPesquisa,
74
- ordenacao: ordenacao,
75
- };
76
- this.onPaginate.emit(objeto);
77
- }
78
- }
79
- isBooleanField(rowData, col) {
80
- return col.fieldType == 'boolean';
81
- }
82
- isChipField(col) {
83
- return col.fieldType == 'chip';
84
- }
85
- isImageField(col) {
86
- let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
87
- return retorno;
88
- }
89
- returnRowClass(rowData, col) {
90
- let value = rowData[col.field];
91
- let rowClass;
92
- this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
93
- if (col.expiredDate == true) {
94
- new Date(value) < new Date()
95
- ? (rowClass = rowClass + ' text-red-400 font-semibold')
96
- : '';
97
- }
98
- return rowClass;
99
- }
100
- transformValue(rowData, col) {
101
- let value = rowData[col.field];
102
- if (value != null) {
103
- if (!col.pipe) {
104
- return value;
105
- }
106
- switch (col.pipe) {
107
- case 'date':
108
- return this.datePipe.transform(value, 'dd/MM/yyyy');
109
- case 'decimal':
110
- return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
111
- case 'cpfcnpj':
112
- return this.cpfCnpjPipe.transform(value);
113
- case 'telefone':
114
- return this.telefonePipe.transform(value);
115
- case 'codigofipe':
116
- return this.codigoFipePipe.transform(value);
117
- case 'money':
118
- return this.formatarValor(value);
119
- case 'percentage':
120
- return `${value} %`;
121
- default:
122
- break;
123
- }
124
- }
125
- }
126
- alignColunasHeader(col) {
127
- if (col.align) {
128
- if (col.align == 'right')
129
- return 'justify-content: end';
130
- else
131
- return '';
132
- }
133
- else
134
- return '';
135
- }
136
- centralizarColunas(col) {
137
- if (col.centralize) {
138
- return 'text-align: center; ';
139
- }
140
- else
141
- return '';
142
- }
143
- alignColunas(col) {
144
- if (col.align) {
145
- return `text-align: ${col.align}`;
146
- }
147
- else
148
- return '';
149
- }
150
- returnClassIcon(rowData, col) {
151
- return this.retornarRow(rowData, col, 'iconrow');
152
- }
153
- returnTooltipIcon(rowData, col) {
154
- return this.retornarRow(rowData, col, 'tooltipiconrow');
155
- }
156
- returnClassChip(rowData, col) {
157
- return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
158
- }
159
- retornarRow(rowData, col, field) {
160
- const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
161
- const _field = _rowaction && _rowaction[field]
162
- ? _rowaction[field].constructor === Function
163
- ? _rowaction[field].apply(this, [rowData])
164
- : _rowaction[field]
165
- : null;
166
- return _field;
167
- }
168
- formatarValor(valor) {
169
- const formatter = new Intl.NumberFormat('pt-BR', {
170
- style: 'currency',
171
- currency: 'BRL',
172
- });
173
- return formatter.format(valor);
174
- }
175
- loadImage(rowData, col) {
176
- /*
177
- Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
178
- */
179
- let retorno = `data:image/jpg;base64, ${this.imgDefault}`;
180
- if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
181
- if (rowData[col.field].includes('http'))
182
- retorno = rowData[col.field];
183
- else
184
- retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
185
- }
186
- return retorno;
187
- }
188
- getCustomTemplate(templatename) {
189
- return this._templates[templatename];
190
- }
191
- exibirCampo(field, rowData) {
192
- let visible = field.visible ? field.visible(rowData) : true;
193
- return visible;
194
- }
195
- activeItem(rowData, rowNode) {
196
- console.log(rowNode);
197
- this.onActiveItem.emit({ rowData: rowData, rowNode: rowNode });
198
- }
199
- activeItemLote(rowData) {
200
- this.onActiveItemLote.emit(rowData);
201
- }
202
- retornarCampo(action, rowData, field) {
203
- const _function = action.dynamicfields
204
- ? action.dynamicfields[field]
205
- : null;
206
- const _field = _function
207
- ? _function.apply(action, [rowData])
208
- : action[field];
209
- return _field;
210
- }
211
- callDisabled(action, data) {
212
- if (action?.disabled) {
213
- return action.disabled(data);
214
- }
215
- return false;
216
- }
217
- criarMenusModal(data, rowNode) {
218
- if (this.config.actions && data) {
219
- const items = this.config.actions.map((action) => {
220
- const icon = this.retornarCampo(action, data, 'icon');
221
- const tooltip = this.retornarCampo(action, data, 'tooltip');
222
- const label = this.retornarCampo(action, data, 'label');
223
- const command = this.retornarCampo(action, data, 'command');
224
- const visible = action.visible
225
- ? action.visible(data, rowNode)
226
- : true;
227
- const disabled = action.disabled
228
- ? action.disabled(data)
229
- : false;
230
- const menuInsert = {
231
- label,
232
- icon,
233
- tooltip,
234
- command,
235
- disabled,
236
- visible,
237
- };
238
- let item = this.menuItems.filter((x) => x.command == menuInsert.command);
239
- if (item.length == 0)
240
- this.menuItems.push(menuInsert);
241
- else {
242
- if (menuInsert.label != item[0].label) {
243
- let index = this.menuItems.indexOf(item[0]);
244
- this.menuItems.splice(index, 1);
245
- }
246
- if (menuInsert.visible != item[0].visible) {
247
- let index = this.menuItems.indexOf(item[0]);
248
- this.menuItems.splice(index, 1);
249
- }
250
- if (menuInsert.disabled != item[0].disabled) {
251
- let index = this.menuItems.indexOf(item[0]);
252
- this.menuItems.splice(index, 1);
253
- }
254
- }
255
- });
256
- }
257
- }
258
- recuperarRowNode(rowNode) {
259
- return rowNode;
260
- }
261
- validaLinhaAcaoVazia(rowData, rowNode) {
262
- var algumItemVisivel = this.config.actions.some((a) => {
263
- if (typeof a.visible === 'function') {
264
- return a.visible(rowData, rowNode) === true;
265
- }
266
- else {
267
- return true; // Retorna true se a.visible(rowData) não existir
268
- }
269
- });
270
- return !algumItemVisivel;
271
- }
272
- toggleNodes() {
273
- if (this.isExpanded) {
274
- this.collapseAll();
275
- }
276
- else {
277
- this.expandAll();
278
- }
279
- this.isExpanded = !this.isExpanded;
280
- }
281
- expandAll() {
282
- this.dataSource.forEach((node) => {
283
- this.expandCollapseRecursive(node, true);
284
- });
285
- }
286
- collapseAll() {
287
- this.dataSource.forEach((node) => {
288
- this.expandCollapseRecursive(node, false);
289
- });
290
- }
291
- expandCollapseRecursive(node, isExpand) {
292
- node.expanded = isExpand;
293
- if (node.children) {
294
- node.children.forEach((childNode) => {
295
- this.expandCollapseRecursive(childNode, isExpand);
296
- });
297
- this.dataSource = [...this.dataSource];
298
- }
299
- }
300
- doubleClick(e, rowData, rowNode) {
301
- let eventDoubleClick = { event: e, rowData: rowData, rowNode: rowNode };
302
- let array = [];
303
- e.target.classList.forEach((x) => array.push(x));
304
- //if (array.find((x: any) => x == 'ng-star-inserted') != undefined)
305
- this.doubleClickEvent.emit(eventDoubleClick);
306
- }
307
- isDisabledCheckbox(rowData, rowNode) {
308
- return this.config.disableControlCheckboxFunction
309
- ? this.config.disableControlCheckboxFunction(rowData, rowNode)
310
- : false;
311
- }
312
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeTableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }], target: i0.ɵɵFactoryTarget.Component }); }
313
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeTableComponent, selector: "kv-treetable", inputs: { config: "config", dataSource: "dataSource", selectedItems: "selectedItems", acoesLinhaTabela: "acoesLinhaTabela", espacamentoPai: "espacamentoPai", espacamentoLateral: "espacamentoLateral", tamanhoTotalTree: "tamanhoTotalTree", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", tableSize: "tableSize", paginator: "paginator", showFirstLastIcon: "showFirstLastIcon", rightCollapse: "rightCollapse", applyStyle: "applyStyle", _templates: ["templates", "_templates"], colorButtonToggleNodes: "colorButtonToggleNodes" }, outputs: { onFilter: "onFilter", onPaginate: "onPaginate", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", doubleClickEvent: "doubleClickEvent" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<div>\n <p-treeTable\n #tt\n *ngIf=\"config\"\n [value]=\"dataSource\"\n styleClass=\"p-datatable-sm\"\n [columns]=\"config.columns\"\n [(selection)]=\"selectedItems\"\n [scrollable]=\"true\"\n selectionMode=\"checkbox\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [totalRecords]=\"tamanhoTotalTree\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n rowGroupMode=\"rowspan\"\n responsiveLayout=\"stack\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div \n [class]=\"\n tamanhoTela < 768\n ? 'flex flex-row align-items-center col-10 md:col-6 lg:col-4 justify-content-center'\n : 'flex flex-row align-items-center col-12 md:col-6 lg:col-4 justify-content-center input-search'\n \"\n >\n <span\n *ngIf=\"config.enableFilter\"\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\n >\n <i\n class=\"material-symbols-outlined icon-search\"\n style=\"display: inline-block\"\n >\n search\n </i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(tt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"w-full mb-1\"\n style=\"height: 40px\"\n />\n </span>\n\n <div *ngIf=\"config.enableToggleNodes\">\n <button\n (click)=\"toggleNodes()\"\n id=\"recolherExpandirBtn\"\n [pTooltip]=\"isExpanded ? 'Recolher Todos' : 'Expandir Todos'\"\n pButton\n class=\"recolherExpandirBtn toggle p-button-raised p-button-text\"\n >\n <span\n class=\"pi\"\n [ngClass]=\"{\n 'pi-chevron-down': isExpanded,\n ' pi-chevron-right': !isExpanded\n }\"\n >\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div *ngFor=\"let action of config.actionsLote\" class=\"btns-options\">\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"action?.command(commandEvent); activeItemLote(selectedItems)\"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"\n retornarCampo(action, selectedItems, 'btnColor')\n \"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n *ngFor=\"let col of columns; index as i\"\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n class=\"text-sm\"\n [style.width]=\"col.width\"\n >\n <div>\n <div [ngClass]=\"{ flex: i == 0, 'gap-3': i == 0 }\">\n <div *ngIf=\"i == 0 && config.enableSelect\">\n <p-treeTableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n ></p-treeTableHeaderCheckbox>\n </div>\n\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </div>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template \n pTemplate=\"body\"\n let-rowNode\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n >\n\n <tr \n [ttRow]=\"rowNode\"\n *ngIf=\"rowNode.level == 0\"\n [style.height]=\"espacamentoPai\"\n ></tr>\n\n <tr [ttRow]=\"rowNode\" (dblclick)=\"doubleClick($event, rowData, rowNode)\">\n <ng-container *ngFor=\"let col of columns; index as i\" >\n <td\n [style.width]=\"col.width\"\n [ngClass]=\"{ 'margem-filho': rowNode.level != 0 }\"\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n >\n <div\n class=\"w-full-h-full flex\" \n [style]=\"centralizarColunas(col)\"\n [ngClass]=\"{ 'justify-content-between': i == columns.length - 1 }\"\n >\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"i == 0\">\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true\"\n ></p-treeTableCheckbox>\n\n <p-treeTableToggler\n [rowNode]=\"rowNode\"\n *ngIf=\"!rightCollapse\"\n ></p-treeTableToggler>\n <p-treeTableToggler\n class=\"hiddenVisible\"\n [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse\"\n ></p-treeTableToggler>\n </div>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n\n <div\n class=\"w-full-h-full flex\"\n *ngIf=\"\n i == columns.length - 1 &&\n config.actions &&\n config.actions.length > 0\n \"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' })\n \"\n >\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData, rowNode); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData, rowNode)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </div>\n </div>\n </td>\n\n <td \n [style.width]=\"col.width\"\n [ngClass]=\"{\n 'margem-filho': rowNode.level != 0,\n 'justify-content-between': i == columns.length - 1\n }\"\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <div\n class=\"w-full-h-full flex justify-content-between\"\n [ngClass]=\"{ 'justify-content-between': i == columns.length - 1 }\"\n >\n <!-- Toggle -->\n <div class=\"w-full-h-full flex align-items-center d-toggle\" *ngIf=\"i == 0\">\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true\"\n ></p-treeTableCheckbox>\n\n <p-treeTableToggler\n [rowNode]=\"rowNode\"\n *ngIf=\"!rightCollapse\"\n ></p-treeTableToggler>\n <p-treeTableToggler\n class=\"hiddenVisible\"\n [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse\"\n ></p-treeTableToggler>\n </div>\n\n <!-- Texto -->\n <div\n class=\"w-full flex align-items-center\"\n [style]=\"centralizarColunas(col)\"\n >\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </div>\n\n <!-- Botao de a\u00E7\u00E3o -->\n <div\n class=\"w-full-h-full flex\"\n *ngIf=\"\n i == columns.length - 1 &&\n config.actions &&\n config.actions.length > 0\n \"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' })\n \"\n >\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData, rowNode); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData, rowNode)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </div>\n </div>\n </td>\n\n <td\n [style.width]=\"col.width\"\n [ngClass]=\"{\n 'margem-filho': rowNode.level != 0,\n 'justify-content-between': i == columns.length - 1\n }\"\n *ngIf=\"col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <div class=\"flex\" [style]=\"centralizarColunas(col)\">\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"i == 0\">\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true\"\n ></p-treeTableCheckbox>\n\n <p-treeTableToggler\n [rowNode]=\"rowNode\"\n *ngIf=\"!rightCollapse\"\n ></p-treeTableToggler>\n <p-treeTableToggler\n class=\"hiddenVisible\"\n [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse\"\n ></p-treeTableToggler>\n </div>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n\n <div\n class=\"w-full-h-full flex\"\n *ngIf=\"\n i == columns.length - 1 &&\n config.actions &&\n config.actions.length > 0\n \"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' })\n \"\n >\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData, rowNode); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData, rowNode)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </div>\n </div>\n </td>\n \n </ng-container>\n </tr>\n\n </ng-template>\n\n <!-- :: Hotfix do bug da vers\u00E3o 15 do primeng, ao retirar esse bloco de codigo na vers\u00E3o 15 do primeng os icones de prev e next do paginator ir\u00E3o sumir ( resolvido na vers\u00E3o 16.0) :: -->\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <span class=\"pi pi-angle-double-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <span class=\"pi pi-angle-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <span class=\"pi pi-angle-right\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <span class=\"pi pi-angle-double-right\"></span>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + 2\"\n style=\"text-align: center;\n border-radius: 10px !important;\n \"\n >\n <p class=\"font-semibold\"> Nenhum registro encontrado </p>\n </td>\n </tr>\n </ng-template>\n </p-treeTable>\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.input-search{position:relative;right:8px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}.actionLoteBtns,.recolherExpandirBtn{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,#recolherExpandirBtn:hover{color:#a9a9a9}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;font-size:17px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{background-color:red}}:host ::ng-deep .hiddenVisible span{visibility:hidden!important;cursor:hidden}.margem-filho{position:sticky;left:30px}:host ::ng-deep .p-treetable table{border-spacing:0 3px}#botaoFiltro:hover{color:#a9a9a9}:host ::ng-deep .p-treetable .p-treetable-header{background-color:#eaeaea;padding:2px 13px 0!important;border-radius:5px!important;margin-bottom:2px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea;padding:.5rem!important;margin-bottom:-5px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.5rem!important}:host ::ng-deep .p-treetable .p-treetable-thead{border-spacing:0 1px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:first-of-type{background-color:#eaeaea;padding:.5rem!important;border-radius:5px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{background-color:#eaeaea;padding:.5rem!important;border-radius:0 5px 5px 0!important;-webkit-border-radius:0 5px 5px 0!important;-moz-border-radius:0 5px 5px 0!important;-ms-border-radius:0 5px 5px 0!important;-o-border-radius:0 5px 5px 0!important}:host ::ng-deep .p-treetable-scrollable-header-box{padding:0!important}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{background-color:#f2f2f2}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep #tr-style{border-left:solid 4px #5289B4!important;border-radius:10px!important;display:block}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important;-webkit-border-radius:10px 0 0 10px!important;-moz-border-radius:10px 0 0 10px!important;-ms-border-radius:10px 0 0 10px!important;-o-border-radius:10px 0 0 10px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important;-webkit-border-radius:0 10px 10px 0!important;-moz-border-radius:0 10px 10px 0!important;-ms-border-radius:0 10px 10px 0!important;-o-border-radius:0 10px 10px 0!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .recolherExpandirBtn{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-treetable table{border-collapse:separate!important;table-layout:auto!important}@media only screen and (min-width: 768px){.actionLoteBtns,.recolherExpandirBtn{top:-1px}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "component", type: i8.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i9.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i10.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel"] }, { kind: "component", type: i10.TreeTableToggler, selector: "p-treeTableToggler", inputs: ["rowNode"] }, { kind: "directive", type: i10.TTSortableColumn, selector: "[ttSortableColumn]", inputs: ["ttSortableColumn", "ttSortableColumnDisabled"] }, { kind: "directive", type: i10.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: i10.TTCheckbox, selector: "p-treeTableCheckbox", inputs: ["disabled", "value"] }, { kind: "component", type: i10.TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox" }] }); }
314
- }
315
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeTableComponent, decorators: [{
316
- type: Component,
317
- args: [{ selector: 'kv-treetable', template: "<div>\n <p-treeTable\n #tt\n *ngIf=\"config\"\n [value]=\"dataSource\"\n styleClass=\"p-datatable-sm\"\n [columns]=\"config.columns\"\n [(selection)]=\"selectedItems\"\n [scrollable]=\"true\"\n selectionMode=\"checkbox\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [totalRecords]=\"tamanhoTotalTree\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n rowGroupMode=\"rowspan\"\n responsiveLayout=\"stack\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div \n [class]=\"\n tamanhoTela < 768\n ? 'flex flex-row align-items-center col-10 md:col-6 lg:col-4 justify-content-center'\n : 'flex flex-row align-items-center col-12 md:col-6 lg:col-4 justify-content-center input-search'\n \"\n >\n <span\n *ngIf=\"config.enableFilter\"\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\n >\n <i\n class=\"material-symbols-outlined icon-search\"\n style=\"display: inline-block\"\n >\n search\n </i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(tt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"w-full mb-1\"\n style=\"height: 40px\"\n />\n </span>\n\n <div *ngIf=\"config.enableToggleNodes\">\n <button\n (click)=\"toggleNodes()\"\n id=\"recolherExpandirBtn\"\n [pTooltip]=\"isExpanded ? 'Recolher Todos' : 'Expandir Todos'\"\n pButton\n class=\"recolherExpandirBtn toggle p-button-raised p-button-text\"\n >\n <span\n class=\"pi\"\n [ngClass]=\"{\n 'pi-chevron-down': isExpanded,\n ' pi-chevron-right': !isExpanded\n }\"\n >\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div *ngFor=\"let action of config.actionsLote\" class=\"btns-options\">\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"action?.command(commandEvent); activeItemLote(selectedItems)\"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"\n retornarCampo(action, selectedItems, 'btnColor')\n \"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n *ngFor=\"let col of columns; index as i\"\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n class=\"text-sm\"\n [style.width]=\"col.width\"\n >\n <div>\n <div [ngClass]=\"{ flex: i == 0, 'gap-3': i == 0 }\">\n <div *ngIf=\"i == 0 && config.enableSelect\">\n <p-treeTableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n ></p-treeTableHeaderCheckbox>\n </div>\n\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </div>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template \n pTemplate=\"body\"\n let-rowNode\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n >\n\n <tr \n [ttRow]=\"rowNode\"\n *ngIf=\"rowNode.level == 0\"\n [style.height]=\"espacamentoPai\"\n ></tr>\n\n <tr [ttRow]=\"rowNode\" (dblclick)=\"doubleClick($event, rowData, rowNode)\">\n <ng-container *ngFor=\"let col of columns; index as i\" >\n <td\n [style.width]=\"col.width\"\n [ngClass]=\"{ 'margem-filho': rowNode.level != 0 }\"\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n >\n <div\n class=\"w-full-h-full flex\" \n [style]=\"centralizarColunas(col)\"\n [ngClass]=\"{ 'justify-content-between': i == columns.length - 1 }\"\n >\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"i == 0\">\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true\"\n ></p-treeTableCheckbox>\n\n <p-treeTableToggler\n [rowNode]=\"rowNode\"\n *ngIf=\"!rightCollapse\"\n ></p-treeTableToggler>\n <p-treeTableToggler\n class=\"hiddenVisible\"\n [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse\"\n ></p-treeTableToggler>\n </div>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n\n <div\n class=\"w-full-h-full flex\"\n *ngIf=\"\n i == columns.length - 1 &&\n config.actions &&\n config.actions.length > 0\n \"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' })\n \"\n >\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData, rowNode); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData, rowNode)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </div>\n </div>\n </td>\n\n <td \n [style.width]=\"col.width\"\n [ngClass]=\"{\n 'margem-filho': rowNode.level != 0,\n 'justify-content-between': i == columns.length - 1\n }\"\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <div\n class=\"w-full-h-full flex justify-content-between\"\n [ngClass]=\"{ 'justify-content-between': i == columns.length - 1 }\"\n >\n <!-- Toggle -->\n <div class=\"w-full-h-full flex align-items-center d-toggle\" *ngIf=\"i == 0\">\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true\"\n ></p-treeTableCheckbox>\n\n <p-treeTableToggler\n [rowNode]=\"rowNode\"\n *ngIf=\"!rightCollapse\"\n ></p-treeTableToggler>\n <p-treeTableToggler\n class=\"hiddenVisible\"\n [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse\"\n ></p-treeTableToggler>\n </div>\n\n <!-- Texto -->\n <div\n class=\"w-full flex align-items-center\"\n [style]=\"centralizarColunas(col)\"\n >\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </div>\n\n <!-- Botao de a\u00E7\u00E3o -->\n <div\n class=\"w-full-h-full flex\"\n *ngIf=\"\n i == columns.length - 1 &&\n config.actions &&\n config.actions.length > 0\n \"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' })\n \"\n >\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData, rowNode); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData, rowNode)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </div>\n </div>\n </td>\n\n <td\n [style.width]=\"col.width\"\n [ngClass]=\"{\n 'margem-filho': rowNode.level != 0,\n 'justify-content-between': i == columns.length - 1\n }\"\n *ngIf=\"col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <div class=\"flex\" [style]=\"centralizarColunas(col)\">\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"i == 0\">\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true\"\n ></p-treeTableCheckbox>\n\n <p-treeTableToggler\n [rowNode]=\"rowNode\"\n *ngIf=\"!rightCollapse\"\n ></p-treeTableToggler>\n <p-treeTableToggler\n class=\"hiddenVisible\"\n [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse\"\n ></p-treeTableToggler>\n </div>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n\n <div\n class=\"w-full-h-full flex\"\n *ngIf=\"\n i == columns.length - 1 &&\n config.actions &&\n config.actions.length > 0\n \"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' })\n \"\n >\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData, rowNode); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData, rowNode)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </div>\n </div>\n </td>\n \n </ng-container>\n </tr>\n\n </ng-template>\n\n <!-- :: Hotfix do bug da vers\u00E3o 15 do primeng, ao retirar esse bloco de codigo na vers\u00E3o 15 do primeng os icones de prev e next do paginator ir\u00E3o sumir ( resolvido na vers\u00E3o 16.0) :: -->\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <span class=\"pi pi-angle-double-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <span class=\"pi pi-angle-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <span class=\"pi pi-angle-right\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <span class=\"pi pi-angle-double-right\"></span>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + 2\"\n style=\"text-align: center;\n border-radius: 10px !important;\n \"\n >\n <p class=\"font-semibold\"> Nenhum registro encontrado </p>\n </td>\n </tr>\n </ng-template>\n </p-treeTable>\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.input-search{position:relative;right:8px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}.actionLoteBtns,.recolherExpandirBtn{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,#recolherExpandirBtn:hover{color:#a9a9a9}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;font-size:17px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{background-color:red}}:host ::ng-deep .hiddenVisible span{visibility:hidden!important;cursor:hidden}.margem-filho{position:sticky;left:30px}:host ::ng-deep .p-treetable table{border-spacing:0 3px}#botaoFiltro:hover{color:#a9a9a9}:host ::ng-deep .p-treetable .p-treetable-header{background-color:#eaeaea;padding:2px 13px 0!important;border-radius:5px!important;margin-bottom:2px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea;padding:.5rem!important;margin-bottom:-5px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.5rem!important}:host ::ng-deep .p-treetable .p-treetable-thead{border-spacing:0 1px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:first-of-type{background-color:#eaeaea;padding:.5rem!important;border-radius:5px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{background-color:#eaeaea;padding:.5rem!important;border-radius:0 5px 5px 0!important;-webkit-border-radius:0 5px 5px 0!important;-moz-border-radius:0 5px 5px 0!important;-ms-border-radius:0 5px 5px 0!important;-o-border-radius:0 5px 5px 0!important}:host ::ng-deep .p-treetable-scrollable-header-box{padding:0!important}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{background-color:#f2f2f2}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep #tr-style{border-left:solid 4px #5289B4!important;border-radius:10px!important;display:block}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important;-webkit-border-radius:10px 0 0 10px!important;-moz-border-radius:10px 0 0 10px!important;-ms-border-radius:10px 0 0 10px!important;-o-border-radius:10px 0 0 10px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important;-webkit-border-radius:0 10px 10px 0!important;-moz-border-radius:0 10px 10px 0!important;-ms-border-radius:0 10px 10px 0!important;-o-border-radius:0 10px 10px 0!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .recolherExpandirBtn{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-treetable table{border-collapse:separate!important;table-layout:auto!important}@media only screen and (min-width: 768px){.actionLoteBtns,.recolherExpandirBtn{top:-1px}}\n"] }]
318
- }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }]; }, propDecorators: { config: [{
319
- type: Input
320
- }], dataSource: [{
321
- type: Input
322
- }], selectedItems: [{
323
- type: Input
324
- }], acoesLinhaTabela: [{
325
- type: Input
326
- }], espacamentoPai: [{
327
- type: Input
328
- }], espacamentoLateral: [{
329
- type: Input
330
- }], tamanhoTotalTree: [{
331
- type: Input
332
- }], rowsPerPageOptions: [{
333
- type: Input
334
- }], rows: [{
335
- type: Input
336
- }], tableSize: [{
337
- type: Input
338
- }], paginator: [{
339
- type: Input
340
- }], showFirstLastIcon: [{
341
- type: Input
342
- }], rightCollapse: [{
343
- type: Input
344
- }], applyStyle: [{
345
- type: Input
346
- }], _templates: [{
347
- type: Input,
348
- args: ['templates']
349
- }], colorButtonToggleNodes: [{
350
- type: Input
351
- }], templates: [{
352
- type: ContentChildren,
353
- args: [TemplateDirective]
354
- }], table: [{
355
- type: ViewChild,
356
- args: ['table', { static: false }]
357
- }], onFilter: [{
358
- type: Output
359
- }], onPaginate: [{
360
- type: Output
361
- }], onActiveItem: [{
362
- type: Output
363
- }], onActiveItemLote: [{
364
- type: Output
365
- }], doubleClickEvent: [{
366
- type: Output
367
- }], onWindowResize: [{
368
- type: HostListener,
369
- args: ['window:resize', ['$event']]
370
- }] } });
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90cmVlLXRhYmxlL2t2LXRyZWV0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvdHJlZS10YWJsZS9rdi10cmVldGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUlOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQWV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWTlFLE1BQU0sT0FBTyxrQkFBa0I7SUE0QzdCLFlBQ21CLFFBQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFlBQTBCO1FBSjFCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBOUNwQyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUV4QixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFakMsbUJBQWMsR0FBVyxLQUFLLENBQUM7UUFDL0IsdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBSW5DLFNBQUksR0FBVyxDQUFDLENBQUM7UUFFakIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsZUFBVSxHQUFhLENBQUMsT0FBWSxFQUFFLEdBQXNCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUlwRSwyQkFBc0IsR0FBVyxhQUFhLENBQUM7UUFLOUMsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuRCxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pELHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5FLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLGdCQUFXLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUczRCxjQUFTLEdBQWlCLEVBQUUsQ0FBQztRQUM3QixlQUFVLEdBQ1IsMHFQQUEwcVAsQ0FBQztRQUU3cVAsZUFBVSxHQUFZLEtBQUssQ0FBQztJQVV6QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQWdCLEVBQUUsS0FBWTtRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBRSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxLQUFLLENBQUMsWUFBWSxDQUFFLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQUNELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7U0FDdEM7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUNNLFFBQVEsQ0FBQyxNQUFXO1FBQ3pCLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxhQUFhLEdBQ2YsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFbkIsSUFBSSxNQUFNLENBQUMsWUFBWTtnQkFBRSxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUU3RCxJQUFJLE1BQU0sQ0FBQyxTQUFTO2dCQUNsQixTQUFTLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUM3QixNQUFNLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUNuQyxFQUFFLENBQUM7WUFFTCxNQUFNLE1BQU0sR0FBa0I7Z0JBQzVCLGFBQWEsRUFBRSxhQUFhO2dCQUM1QixhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQzFCLGFBQWEsRUFBRSxhQUFhO2dCQUM1QixTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNqRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBc0I7UUFDaEMsT0FBTyxHQUFHLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQXNCO1FBQ2pDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3hFLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxjQUFjLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQ2pELElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxRQUFnQixDQUFDO1FBRXJCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFFekUsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyw2QkFBNkIsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELGNBQWMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDakQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDaEIsS0FBSyxNQUFNO29CQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLFNBQVM7b0JBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM3RCxLQUFLLFNBQVM7b0JBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxVQUFVO29CQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssWUFBWTtvQkFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLE9BQU87b0JBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxLQUFLLFlBQVk7b0JBQ2YsT0FBTyxHQUFHLEtBQUssSUFBSSxDQUFDO2dCQUV0QjtvQkFDRSxNQUFNO2FBQ1Q7U0FDRjtJQUNILENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtZQUNiLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxPQUFPO2dCQUFFLE9BQU8sc0JBQXNCLENBQUM7O2dCQUNuRCxPQUFPLEVBQUUsQ0FBQztTQUNoQjs7WUFBTSxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsR0FBUTtRQUN6QixJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDbEIsT0FBTyxzQkFBc0IsQ0FBQztTQUMvQjs7WUFBTSxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsWUFBWSxDQUFDLEdBQVE7UUFDbkIsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQzs7WUFBTSxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsZUFBZSxDQUFDLE9BQVksRUFBRSxHQUFRO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFZLEVBQUUsR0FBUTtRQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxlQUFlLENBQUMsT0FBWSxFQUFFLEdBQVE7UUFDcEMsT0FBTywrQ0FBK0MsSUFBSSxDQUFDLFdBQVcsQ0FDcEUsT0FBTyxFQUNQLEdBQUcsRUFDSCxXQUFXLENBQ1osV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQVksRUFBRSxHQUFRLEVBQUUsS0FBYTtRQUMvQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekUsTUFBTSxNQUFNLEdBQ1YsVUFBVSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDN0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEtBQUssUUFBUTtnQkFDMUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDWCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQWE7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUMvQyxLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELFNBQVMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDNUM7O1VBRUU7UUFDRixJQUFJLE9BQU8sR0FBRywwQkFBMEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFELElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztnQkFDakUsT0FBTyxHQUFHLDBCQUEwQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDL0Q7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBb0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBVSxFQUFFLE9BQVk7UUFDbEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDTSxVQUFVLENBQUMsT0FBWSxFQUFFLE9BQVk7UUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNNLGNBQWMsQ0FBQyxPQUFZO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFrQixFQUFFLE9BQVksRUFBRSxLQUFhO1FBQzNELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhO1lBQ3BDLENBQUMsQ0FBRSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBYztZQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1QsTUFBTSxNQUFNLEdBQVcsU0FBUztZQUM5QixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxZQUFZLENBQUMsTUFBa0IsRUFBRSxJQUFTO1FBQ3hDLElBQUksTUFBTSxFQUFFLFFBQVEsRUFBRTtZQUNwQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxlQUFlLENBQUMsSUFBUyxFQUFFLE9BQVk7UUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDakUsTUFBTSxPQUFPLEdBQVksTUFBTSxDQUFDLE9BQU87b0JBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsTUFBTSxRQUFRLEdBQVksTUFBTSxDQUFDLFFBQVE7b0JBQ3ZDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFVixNQUFNLFVBQVUsR0FBZTtvQkFDN0IsS0FBSztvQkFDTCxJQUFJO29CQUNKLE9BQU87b0JBQ1AsT0FBTztvQkFDUCxRQUFRO29CQUNSLE9BQU87aUJBQ1IsQ0FBQztnQkFFRixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FDdkMsQ0FBQztnQkFFRixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztvQkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDakQ7b0JBQ0gsSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7d0JBQ3JDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDO29CQUVELElBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO3dCQUN6QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNqQztvQkFFRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTt3QkFDM0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDakM7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQVk7UUFDM0IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELG9CQUFvQixDQUFDLE9BQVksRUFBRSxPQUFZO1FBQzdDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO2dCQUNuQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxDQUFDLGlEQUFpRDthQUMvRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxJQUFjLEVBQUUsUUFBaUI7UUFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQU0sRUFBRSxPQUFZLEVBQUUsT0FBWTtRQUM1QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV4RSxJQUFJLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEQsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsT0FBWSxFQUFFLE9BQVk7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QjtZQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1lBQzlELENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixDQUFDOytHQTlWVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw4MEJBdUJaLGlCQUFpQiw2SEMvRHBDLCszdkJBOG9CQTs7NEZEdG1CYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsY0FBYzsyTUFLZixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFYyxVQUFVO3NCQUE3QixLQUFLO3VCQUFDLFdBQVc7Z0JBRVQsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUU4QixTQUFTO3NCQUE1QyxlQUFlO3VCQUFDLGlCQUFpQjtnQkFDSyxLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRTNCLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBK0JQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVudUl0ZW1Db21tYW5kRXZlbnQsIFRyZWVOb2RlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgQ29kaWdvRmlwZVBpcGUsXG4gIENwZkNucGpQaXBlLFxuICBLdk1lbnVJdGVtLFxuICBUYWJsZUNvbmZpZyxcbiAgVGFibGVDb25maWdDb2x1bW4sXG4gIFRhYmxlUGFnaW5hdGUsXG4gIFRlbGVmb25lUGlwZSxcbn0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgVHJlZVRhYmxlIH0gZnJvbSAncHJpbWVuZy90cmVldGFibGUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RlbXBsYXRlL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBDb2x1bW4ge1xuICBmaWVsZDogc3RyaW5nO1xuICBoZWFkZXI6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3YtdHJlZXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LXRyZWV0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2t2LXRyZWV0YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb25maWchOiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IFRyZWVOb2RlW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xuXG4gIEBJbnB1dCgpIGFjb2VzTGluaGFUYWJlbGE6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGVzcGFjYW1lbnRvUGFpOiBzdHJpbmcgPSAnMnB4JztcbiAgQElucHV0KCkgZXNwYWNhbWVudG9MYXRlcmFsOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSB0YW1hbmhvVG90YWxUcmVlITogbnVtYmVyO1xuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnMhOiBudW1iZXJbXTtcbiAgQElucHV0KCkgcm93czogbnVtYmVyID0gNTtcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xuICBASW5wdXQoKSBwYWdpbmF0b3I6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Rmlyc3RMYXN0SWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByaWdodENvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XG5cbiAgQElucHV0KCd0ZW1wbGF0ZXMnKSBfdGVtcGxhdGVzITogYW55O1xuXG4gIEBJbnB1dCgpIGNvbG9yQnV0dG9uVG9nZ2xlTm9kZXM6IHN0cmluZyA9ICdzdXJmYWNlLTYwMCc7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IGZhbHNlIH0pIHRhYmxlITogVGFibGU7XG5cbiAgQE91dHB1dCgpIG9uRmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uUGFnaW5hdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZG91YmxlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHRhbWFuaG9UZWxhITogbnVtYmVyO1xuICBzZWxlY3RlZFNpemU6IHN0cmluZyA9ICcnO1xuICBub2RlQ29udGV4dCA9IHsgJGltcGxpY2l0OiAncm93RGF0YScsIHJvd05vZGU6ICdyb3dOb2RlJyB9O1xuXG4gIHNlbGVjdGVkTm9kZXMhOiBUcmVlTm9kZVtdO1xuICBtZW51SXRlbXM6IEt2TWVudUl0ZW1bXSA9IFtdO1xuICBpbWdEZWZhdWx0OiBzdHJpbmcgPVxuICAgICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xuXG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb21tYW5kRXZlbnQhOiBNZW51SXRlbUNvbW1hbmRFdmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGlnb0ZpcGVQaXBlOiBDb2RpZ29GaXBlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cblxuICBwdWJsaWMgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRyZWVUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cbiAgYWRqdXN0VGFibGVTaXplKCkge1xuICAgIGlmICh0aGlzLnRhYmxlU2l6ZSA8IDgwMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSAncC1kYXRhdGFibGUtc20nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICcnO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcGFnaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XG4gICAgICAgICgkZXZlbnQ/LmZpcnN0ID4gMCA/ICRldmVudC5maXJzdCAvICRldmVudC5yb3dzIDogJGV2ZW50LmZpcnN0KSArIDE7XG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xuXG4gICAgICBpZiAoJGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9ICRldmVudC5nbG9iYWxGaWx0ZXI7XG5cbiAgICAgIGlmICgkZXZlbnQuc29ydEZpZWxkKVxuICAgICAgICBvcmRlbmFjYW8gPSBgJHskZXZlbnQuc29ydEZpZWxkfSAke1xuICAgICAgICAgICRldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ1xuICAgICAgICB9YDtcblxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xuICAgICAgICBwYWdpbmFJbmljaWFsOiBwYWdpbmFJbmljaWFsLFxuICAgICAgICB0YW1hbmhvUGFnaW5hOiAkZXZlbnQucm93cyxcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcbiAgICAgICAgb3JkZW5hY2FvOiBvcmRlbmFjYW8sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uUGFnaW5hdGUuZW1pdChvYmpldG8pO1xuICAgIH1cbiAgfVxuXG4gIGlzQm9vbGVhbkZpZWxkKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdib29sZWFuJztcbiAgfVxuXG4gIGlzQ2hpcEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XG4gIH1cblxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnaW1hZ2UnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHJldHVybiByZXRvcm5vO1xuICB9XG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcblxuICAgIHRoaXMudGFibGVTaXplID4gODAwID8gKHJvd0NsYXNzID0gJ3RleHQtYmFzZScpIDogKHJvd0NsYXNzID0gJ3RleHQtc20nKTtcblxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xuICAgICAgbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKVxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXG4gICAgICAgIDogJyc7XG4gICAgfVxuICAgIHJldHVybiByb3dDbGFzcztcbiAgfVxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKCFjb2wucGlwZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICBjYXNlICdkZWNpbWFsJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xuICAgICAgICBjYXNlICdjcGZjbnBqJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ2NvZGlnb2ZpcGUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvZGlnb0ZpcGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ21vbmV5JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRhclZhbG9yKHZhbHVlKTtcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfSAlYDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBhbGlnbkNvbHVuYXNIZWFkZXIoY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChjb2wuYWxpZ24pIHtcbiAgICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XG4gICAgICBlbHNlIHJldHVybiAnJztcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG4gIGNlbnRyYWxpemFyQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XG4gICAgICByZXR1cm4gJ3RleHQtYWxpZ246IGNlbnRlcjsgJztcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG4gIGFsaWduQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5hbGlnbikge1xuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xuICAgIH0gZWxzZSByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcbiAgfVxuXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXBpY29ucm93Jyk7XG4gIH1cbiAgcmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgY2hpcC1zdHlsZSB3LWF1dG8gYm9yZGVyLXJvdW5kLTJ4bCBwLTIgdGV4dC0ke3RoaXMucmV0b3JuYXJSb3coXG4gICAgICByb3dEYXRhLFxuICAgICAgY29sLFxuICAgICAgJ3N0eWxlY2hpcCdcbiAgICApfSBib3JkZXItJHt0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3N0eWxlY2hpcCcpfWA7XG4gIH1cbiAgcmV0b3JuYXJSb3cocm93RGF0YTogYW55LCBjb2w6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID1cbiAgICAgIF9yb3dhY3Rpb24gJiYgX3Jvd2FjdGlvbltmaWVsZF1cbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cbiAgICAgICAgICA/IF9yb3dhY3Rpb25bZmllbGRdLmFwcGx5KHRoaXMsIFtyb3dEYXRhXSlcbiAgICAgICAgICA6IF9yb3dhY3Rpb25bZmllbGRdXG4gICAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gX2ZpZWxkO1xuICB9XG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xuICB9XG4gIGxvYWRJbWFnZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBzdHJpbmcge1xuICAgIC8qXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcbiAgICAqL1xuICAgIGxldCByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHt0aGlzLmltZ0RlZmF1bHR9YDtcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSkgcmV0b3JubyA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICAgIGVsc2UgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7cm93RGF0YVtjb2wuZmllbGRdfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBnZXRDdXN0b21UZW1wbGF0ZSh0ZW1wbGF0ZW5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcbiAgfVxuICBleGliaXJDYW1wbyhmaWVsZDogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICBsZXQgdmlzaWJsZSA9IGZpZWxkLnZpc2libGUgPyBmaWVsZC52aXNpYmxlKHJvd0RhdGEpIDogdHJ1ZTtcbiAgICByZXR1cm4gdmlzaWJsZTtcbiAgfVxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnksIHJvd05vZGU6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKHJvd05vZGUpO1xuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQoeyByb3dEYXRhOiByb3dEYXRhLCByb3dOb2RlOiByb3dOb2RlIH0pO1xuICB9XG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLm9uQWN0aXZlSXRlbUxvdGUuZW1pdChyb3dEYXRhKTtcbiAgfVxuXG4gIHJldG9ybmFyQ2FtcG8oYWN0aW9uOiBLdk1lbnVJdGVtLCByb3dEYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IF9mdW5jdGlvbiA9IGFjdGlvbi5keW5hbWljZmllbGRzXG4gICAgICA/IChhY3Rpb24uZHluYW1pY2ZpZWxkc1tmaWVsZF0gYXMgRnVuY3Rpb24pXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPSBfZnVuY3Rpb25cbiAgICAgID8gX2Z1bmN0aW9uLmFwcGx5KGFjdGlvbiwgW3Jvd0RhdGFdKVxuICAgICAgOiBhY3Rpb25bZmllbGRdO1xuICAgIHJldHVybiBfZmllbGQ7XG4gIH1cbiAgY2FsbERpc2FibGVkKGFjdGlvbjogS3ZNZW51SXRlbSwgZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGFjdGlvbj8uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjcmlhck1lbnVzTW9kYWwoZGF0YTogYW55LCByb3dOb2RlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdsYWJlbCcpO1xuICAgICAgICBjb25zdCBjb21tYW5kOiBhbnkgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnY29tbWFuZCcpO1xuICAgICAgICBjb25zdCB2aXNpYmxlOiBib29sZWFuID0gYWN0aW9uLnZpc2libGVcbiAgICAgICAgICA/IGFjdGlvbi52aXNpYmxlKGRhdGEsIHJvd05vZGUpXG4gICAgICAgICAgOiB0cnVlO1xuICAgICAgICBjb25zdCBkaXNhYmxlZDogYm9vbGVhbiA9IGFjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gYWN0aW9uLmRpc2FibGVkKGRhdGEpXG4gICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICBjb25zdCBtZW51SW5zZXJ0OiBLdk1lbnVJdGVtID0ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgdG9vbHRpcCxcbiAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgIGRpc2FibGVkLFxuICAgICAgICAgIHZpc2libGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgKHgpID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQubGFiZWwgIT0gaXRlbVswXS5sYWJlbCkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQudmlzaWJsZSAhPSBpdGVtWzBdLnZpc2libGUpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVjdXBlcmFyUm93Tm9kZShyb3dOb2RlOiBhbnkpIHtcbiAgICByZXR1cm4gcm93Tm9kZTtcbiAgfVxuXG4gIHZhbGlkYUxpbmhhQWNhb1ZhemlhKHJvd0RhdGE6IGFueSwgcm93Tm9kZTogYW55KSB7XG4gICAgdmFyIGFsZ3VtSXRlbVZpc2l2ZWwgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLnNvbWUoKGEpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYS52aXNpYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBhLnZpc2libGUocm93RGF0YSwgcm93Tm9kZSkgPT09IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0b3JuYSB0cnVlIHNlIGEudmlzaWJsZShyb3dEYXRhKSBuw6NvIGV4aXN0aXJcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAhYWxndW1JdGVtVmlzaXZlbDtcbiAgfVxuXG4gIHRvZ2dsZU5vZGVzKCkge1xuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICB9XG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcbiAgfVxuXG4gIGV4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgdGhpcy5leHBhbmRDb2xsYXBzZVJlY3Vyc2l2ZShub2RlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICB0aGlzLmV4cGFuZENvbGxhcHNlUmVjdXJzaXZlKG5vZGUsIGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kQ29sbGFwc2VSZWN1cnNpdmUobm9kZTogVHJlZU5vZGUsIGlzRXhwYW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgbm9kZS5leHBhbmRlZCA9IGlzRXhwYW5kO1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICB0aGlzLmV4cGFuZENvbGxhcHNlUmVjdXJzaXZlKGNoaWxkTm9kZSwgaXNFeHBhbmQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICB9XG4gIH1cblxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSwgcm93Tm9kZTogYW55KSB7XG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhLCByb3dOb2RlOiByb3dOb2RlIH07XG5cbiAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgZS50YXJnZXQuY2xhc3NMaXN0LmZvckVhY2goKHg6IGFueSkgPT4gYXJyYXkucHVzaCh4KSk7XG5cbiAgICAvL2lmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXG4gICAgdGhpcy5kb3VibGVDbGlja0V2ZW50LmVtaXQoZXZlbnREb3VibGVDbGljayk7XG4gIH1cbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSwgcm93Tm9kZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxuICAgICAgPyB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24ocm93RGF0YSwgcm93Tm9kZSlcbiAgICAgIDogZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxwLXRyZWVUYWJsZVxuICAgICN0dFxuICAgICpuZ0lmPVwiY29uZmlnXCJcbiAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXG4gICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtXCJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxuICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxuICAgIHNlbGVjdGlvbk1vZGU9XCJjaGVja2JveFwiXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSAtIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfVwiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJzaG93Rmlyc3RMYXN0SWNvblwiXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICAgIFtyb3dzXT1cInJvd3NcIlxuICAgIFt0b3RhbFJlY29yZHNdPVwidGFtYW5ob1RvdGFsVHJlZVwiXG4gICAgW2xhenldPVwiY29uZmlnLmxhenlcIlxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxuICAgIHJvd0dyb3VwTW9kZT1cInJvd3NwYW5cIlxuICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzdGFja1wiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBncmlkIGZvcm1ncmlkIHAtZmx1aWQgY29sLTEyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy50aXRsZVwiIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiPlxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zdWJ0aXRsZVwiIGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBcbiAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICB0YW1hbmhvVGVsYSA8IDc2OFxuICAgICAgICAgICAgICA/ICdmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBjb2wtMTAgbWQ6Y29sLTYgbGc6Y29sLTQganVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgOiAnZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgY29sLTEyIG1kOmNvbC02IGxnOmNvbC00IGp1c3RpZnktY29udGVudC1jZW50ZXIgaW5wdXQtc2VhcmNoJ1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlRmlsdGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgbXQtMiBtZDptdC0wIHAtaW5wdXQtaWNvbi1sZWZ0IHRleHQtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1zZWFyY2hcIlxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBwQXV0b0ZvY3VzXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uR2xvYmFsRmlsdGVyKHR0LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBtYi0xXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLmVuYWJsZVRvZ2dsZU5vZGVzXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVOb2RlcygpXCJcbiAgICAgICAgICAgICAgaWQ9XCJyZWNvbGhlckV4cGFuZGlyQnRuXCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImlzRXhwYW5kZWQgPyAnUmVjb2xoZXIgVG9kb3MnIDogJ0V4cGFuZGlyIFRvZG9zJ1wiXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvbGhlckV4cGFuZGlyQnRuIHRvZ2dsZSBwLWJ1dHRvbi1yYWlzZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwaVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3BpLWNoZXZyb24tZG93bic6IGlzRXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAnIHBpLWNoZXZyb24tcmlnaHQnOiAhaXNFeHBhbmRlZFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBjb2wtMSBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZVwiIGNsYXNzPVwiYnRucy1vcHRpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwiYWN0aW9uTG90ZUJ0bnNcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcbiAgICAgICAgICAgICAgICBleGliaXJDYW1wbyhhY3Rpb24sIHRoaXMuYWN0aW9uKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbj8uY29tbWFuZChjb21tYW5kRXZlbnQpOyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ3Rvb2x0aXAnKVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIlxuICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnYnRuQ29sb3InKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdkaXNhYmxlZCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMjJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJcbiAgICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnaWNvbkJ0bkNvbG9yJylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsIFwiaWNvblwiKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxuICAgICAgPHRyPlxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGluZGV4IGFzIGlcIlxuICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3R0U29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cInRleHQtc21cIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBmbGV4OiBpID09IDAsICdnYXAtMyc6IGkgPT0gMCB9XCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpID09IDAgJiYgY29uZmlnLmVuYWJsZVNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZUhlYWRlckNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICAgID48L3AtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJ1xuICAgICAgICAgICAgICAgICAgICA/ICdmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICAgIDogJ2ZsZXggZmxleC1yb3cnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwiYWxpZ25Db2x1bmFzSGVhZGVyKGNvbClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8cC1zb3J0SWNvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc29ydGFibGUgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiXG4gICAgICAgICAgICAgICAgPjwvcC1zb3J0SWNvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oZWFkZXJUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgPmluZm88L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgXG4gICAgICBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgIGxldC1yb3dOb2RlXG4gICAgICBsZXQtcm93RGF0YT1cInJvd0RhdGFcIlxuICAgICAgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCJcbiAgICAgIGxldC1yb3dzcGFuPVwicm93c3BhblwiXG4gICAgPlxuXG4gICAgICA8dHIgXG4gICAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgICAgKm5nSWY9XCJyb3dOb2RlLmxldmVsID09IDBcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImVzcGFjYW1lbnRvUGFpXCJcbiAgICAgID48L3RyPlxuXG4gICAgICA8dHIgW3R0Um93XT1cInJvd05vZGVcIiAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhLCByb3dOb2RlKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgaW5kZXggYXMgaVwiID5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbWFyZ2VtLWZpbGhvJzogcm93Tm9kZS5sZXZlbCAhPSAwIH1cIlxuICAgICAgICAgICAgKm5nSWY9XCJyb3dncm91cCAmJiAhY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsLWgtZnVsbCBmbGV4XCIgIFxuICAgICAgICAgICAgICBbc3R5bGVdPVwiY2VudHJhbGl6YXJDb2x1bmFzKGNvbClcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbic6IGkgPT0gY29sdW1ucy5sZW5ndGggLSAxIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsLWgtZnVsbCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiaSA9PSAwXCI+XG4gICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSwgcm93Tm9kZSlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dOb2RlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdCA9PSB0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9wLXRyZWVUYWJsZUNoZWNrYm94PlxuXG4gICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlclxuICAgICAgICAgICAgICAgICAgW3Jvd05vZGVdPVwicm93Tm9kZVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyaWdodENvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICA+PC9wLXRyZWVUYWJsZVRvZ2dsZXI+XG4gICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5WaXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgIFtyb3dOb2RlXT1cInJvd05vZGVcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyaWdodENvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICA+PC9wLXRyZWVUYWJsZVRvZ2dsZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAhaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvblwiIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XG4gICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwtaC1mdWxsIGZsZXhcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBpID09IGNvbHVtbnMubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgICAgICAgICAgY29uZmlnLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2J0bnMtb3B0aW9ucycsIGhlYWRlcjogJycgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGlvbkJ0bnNcIlxuICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4aWJpckNhbXBvKGFjdGlvbiwgcm93RGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSwgcm93Tm9kZSk7IGFjdGlvbj8uY29tbWFuZChjb21tYW5kRXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsICd0b29sdGlwJylcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjYWxsRGlzYWJsZWQoYWN0aW9uLCByb3dEYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCBcImljb25cIikgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFjb2VzTGluaGFUYWJlbGFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJtb3JlVmVydEJ0blwiXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25CdG5zIHAtYnV0dG9uLXRleHQgcC1idXR0b24tcmFpc2VkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSwgcm93Tm9kZSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgbW9yZV9ob3JpelxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhLCByb3dOb2RlKSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICAgICAgPHAtbWVudVxuICAgICAgICAgICAgICAgICAgICAjbWVudVxuICAgICAgICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJtZW51SXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgPjwvcC1tZW51PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8dGQgXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ21hcmdlbS1maWxobyc6IHJvd05vZGUubGV2ZWwgIT0gMCxcbiAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJzogaSA9PSBjb2x1bW5zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKm5nSWY9XCIhcm93Z3JvdXAgJiYgIWNvbC5ncm91cGVkICYmICFjb2wudGVtcGxhdGVcIlxuICAgICAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXG4gICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwtaC1mdWxsIGZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbic6IGkgPT0gY29sdW1ucy5sZW5ndGggLSAxIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFRvZ2dsZSAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbC1oLWZ1bGwgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZC10b2dnbGVcIiAqbmdJZj1cImkgPT0gMFwiPlxuICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEsIHJvd05vZGUpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93Tm9kZVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3QgPT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwvcC10cmVlVGFibGVDaGVja2JveD5cblxuICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZVRvZ2dsZXJcbiAgICAgICAgICAgICAgICAgIFtyb3dOb2RlXT1cInJvd05vZGVcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcmlnaHRDb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgPjwvcC10cmVlVGFibGVUb2dnbGVyPlxuICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZVRvZ2dsZXJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuVmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICBbcm93Tm9kZV09XCJyb3dOb2RlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmlnaHRDb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgPjwvcC10cmVlVGFibGVUb2dnbGVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIFRleHRvIC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjZW50cmFsaXphckNvbHVuYXMoY29sKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25cIiBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcbiAgICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmljb25GaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIEJvdGFvIGRlIGHDp8OjbyAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsLWgtZnVsbCBmbGV4XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgaSA9PSBjb2x1bW5zLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImFjb2VzTGluaGFUYWJlbGFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25CdG5zXCJcbiAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleGliaXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEsIHJvd05vZGUpOyBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCAndG9vbHRpcCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTE5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGlkPVwibW9yZVZlcnRCdG5cIlxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEsIHJvd05vZGUpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIG1vcmVfaG9yaXpcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSwgcm93Tm9kZSkgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICAgICAgICA8cC1tZW51XG4gICAgICAgICAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICA+PC9wLW1lbnU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdtYXJnZW0tZmlsaG8nOiByb3dOb2RlLmxldmVsICE9IDAsXG4gICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbic6IGkgPT0gY29sdW1ucy5sZW5ndGggLSAxXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgW3N0eWxlXT1cImNlbnRyYWxpemFyQ29sdW5hcyhjb2wpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwtaC1mdWxsIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCJpID09IDBcIj5cbiAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVDaGVja2JveFxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhLCByb3dOb2RlKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd05vZGVcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0ID09IHRydWVcIlxuICAgICAgICAgICAgICAgID48L3AtdHJlZVRhYmxlQ2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVUb2dnbGVyXG4gICAgICAgICAgICAgICAgICBbcm93Tm9kZV09XCJyb3dOb2RlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJpZ2h0Q29sbGFwc2VcIlxuICAgICAgICAgICAgICAgID48L3AtdHJlZVRhYmxlVG9nZ2xlcj5cbiAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVUb2dnbGVyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgW3Jvd05vZGVdPVwicm93Tm9kZVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInJpZ2h0Q29sbGFwc2VcIlxuICAgICAgICAgICAgICAgID48L3AtdHJlZVRhYmxlVG9nZ2xlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsLWgtZnVsbCBmbGV4XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgaSA9PSBjb2x1bW5zLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImFjb2VzTGluaGFUYWJlbGFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25CdG5zXCJcbiAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleGliaXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEsIHJvd05vZGUpOyBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCAndG9vbHRpcCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTE5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGlkPVwibW9yZVZlcnRCdG5cIlxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEsIHJvd05vZGUpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIG1vcmVfaG9yaXpcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSwgcm93Tm9kZSkgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICAgICAgICA8cC1tZW51XG4gICAgICAgICAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICA+PC9wLW1lbnU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICBcbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3RyPlxuXG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gOjogSG90Zml4IGRvIGJ1ZyBkYSB2ZXJzw6NvIDE1IGRvIHByaW1lbmcsIGFvIHJldGlyYXIgZXNzZSBibG9jbyBkZSBjb2RpZ28gbmEgdmVyc8OjbyAxNSBkbyBwcmltZW5nIG9zIGljb25lcyBkZSBwcmV2IGUgbmV4dCBkbyBwYWdpbmF0b3IgaXLDo28gc3VtaXIgKCByZXNvbHZpZG8gbmEgdmVyc8OjbyAxNi4wKSAgOjogLS0+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9yZmlyc3RwYWdlbGlua2ljb25cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYW5nbGUtZG91YmxlLWxlZnRcIj48L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycHJldmlvdXNwYWdlbGlua2ljb25cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYW5nbGUtbGVmdFwiPjwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JuZXh0cGFnZWxpbmtpY29uXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWFuZ2xlLXJpZ2h0XCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxhc3RwYWdlbGlua2ljb25cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYW5nbGUtZG91YmxlLXJpZ2h0XCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCIgbGV0LWNvbHVtbnM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAyXCJcbiAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgPHAgY2xhc3M9XCJmb250LXNlbWlib2xkXCI+IE5lbmh1bSByZWdpc3RybyBlbmNvbnRyYWRvIDwvcD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRyZWVUYWJsZT5cbjwvZGl2PlxuXG48bGlua1xuICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnNcIlxuLz5cblxuPGxpbmtcbiAgcmVsPVwic3R5bGVzaGVldFwiXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREA0OCw0MDAsMCwwXCJcbi8+XG4iXX0=