@bravura/ui 1.21.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -0
  3. package/alert/alert-container.component.d.ts +1 -1
  4. package/alert/alert-message.component.d.ts +1 -1
  5. package/alert/{bravura-ui-alert.d.ts → index.d.ts} +0 -0
  6. package/behavior/await.directive.d.ts +1 -1
  7. package/behavior/{bravura-ui-behavior.d.ts → index.d.ts} +0 -0
  8. package/behavior/sizing-monitor.directive.d.ts +1 -1
  9. package/behavior/sizing.directive.d.ts +1 -1
  10. package/common/{bravura-ui-common.d.ts → index.d.ts} +0 -0
  11. package/currency-input/currency-input.directive.d.ts +1 -1
  12. package/currency-input/{bravura-ui-currency-input.d.ts → index.d.ts} +0 -0
  13. package/decimal-input/decimal-input.directive.d.ts +1 -1
  14. package/decimal-input/{bravura-ui-decimal-input.d.ts → index.d.ts} +0 -0
  15. package/discrete-input/discrete-input.component.d.ts +6 -5
  16. package/discrete-input/{bravura-ui-discrete-input.d.ts → index.d.ts} +0 -0
  17. package/esm2020/alert/alert-container.component.mjs +201 -0
  18. package/esm2020/alert/alert-message.component.mjs +92 -0
  19. package/esm2020/alert/alert.module.mjs +22 -0
  20. package/{esm2015/alert/bravura-ui-alert.js → esm2020/alert/bravura-ui-alert.mjs} +0 -0
  21. package/{esm2015/alert/public-api.js → esm2020/alert/public-api.mjs} +0 -0
  22. package/{esm2015/behavior/await.directive.js → esm2020/behavior/await.directive.mjs} +4 -4
  23. package/esm2020/behavior/behavior.module.mjs +25 -0
  24. package/{esm2015/behavior/bravura-ui-behavior.js → esm2020/behavior/bravura-ui-behavior.mjs} +0 -0
  25. package/{esm2015/behavior/public-api.js → esm2020/behavior/public-api.mjs} +0 -0
  26. package/{esm2015/behavior/sizing-monitor.directive.js → esm2020/behavior/sizing-monitor.directive.mjs} +4 -4
  27. package/{esm2015/behavior/sizing.directive.js → esm2020/behavior/sizing.directive.mjs} +4 -4
  28. package/{esm2015/bravura-ui.js → esm2020/bravura-ui.mjs} +0 -0
  29. package/{esm2015/common/bravura-ui-common.js → esm2020/common/bravura-ui-common.mjs} +0 -0
  30. package/{esm2015/common/common-utils.js → esm2020/common/common-utils.mjs} +0 -0
  31. package/esm2020/common/common.module.mjs +52 -0
  32. package/{esm2015/common/public-api.js → esm2020/common/public-api.mjs} +0 -0
  33. package/{esm2015/currency-input/bravura-ui-currency-input.js → esm2020/currency-input/bravura-ui-currency-input.mjs} +0 -0
  34. package/esm2020/currency-input/currency-input.directive.mjs +279 -0
  35. package/esm2020/currency-input/currency-input.module.mjs +19 -0
  36. package/{esm2015/currency-input/public-api.js → esm2020/currency-input/public-api.mjs} +0 -0
  37. package/{esm2015/decimal-input/bravura-ui-decimal-input.js → esm2020/decimal-input/bravura-ui-decimal-input.mjs} +0 -0
  38. package/{esm2015/decimal-input/decimal-input.directive.js → esm2020/decimal-input/decimal-input.directive.mjs} +4 -4
  39. package/esm2020/decimal-input/decimal-input.module.mjs +19 -0
  40. package/{esm2015/decimal-input/public-api.js → esm2020/decimal-input/public-api.mjs} +0 -0
  41. package/{esm2015/discrete-input/bravura-ui-discrete-input.js → esm2020/discrete-input/bravura-ui-discrete-input.mjs} +0 -0
  42. package/esm2020/discrete-input/discrete-input.component.mjs +326 -0
  43. package/esm2020/discrete-input/discrete-input.module.mjs +21 -0
  44. package/{esm2015/discrete-input/public-api.js → esm2020/discrete-input/public-api.mjs} +0 -0
  45. package/{esm2015/file-upload/bravura-ui-file-upload.js → esm2020/file-upload/bravura-ui-file-upload.mjs} +0 -0
  46. package/esm2020/file-upload/file-upload.component.mjs +356 -0
  47. package/{esm2015/file-upload/file-upload.module.js → esm2020/file-upload/file-upload.module.mjs} +11 -13
  48. package/{esm2015/file-upload/file-upload.service.js → esm2020/file-upload/file-upload.service.mjs} +4 -4
  49. package/{esm2015/file-upload/public-api.js → esm2020/file-upload/public-api.mjs} +0 -0
  50. package/{esm2015/form-field/bravura-ui-form-field.js → esm2020/form-field/bravura-ui-form-field.mjs} +0 -0
  51. package/esm2020/form-field/form-field.component.mjs +96 -0
  52. package/esm2020/form-field/form-field.module.mjs +20 -0
  53. package/{esm2015/form-field/public-api.js → esm2020/form-field/public-api.mjs} +0 -0
  54. package/{esm2015/icon-font/bravura-ui-icon-font.js → esm2020/icon-font/bravura-ui-icon-font.mjs} +0 -0
  55. package/esm2020/icon-font/icon-font.module.mjs +22 -0
  56. package/{esm2015/icon-font/icon.directive.js → esm2020/icon-font/icon.directive.mjs} +4 -4
  57. package/{esm2015/icon-font/public-api.js → esm2020/icon-font/public-api.mjs} +0 -0
  58. package/{esm2015/icon-font/utilities.js → esm2020/icon-font/utilities.mjs} +0 -0
  59. package/{esm2015/phone-number/bravura-ui-phone-number.js → esm2020/phone-number/bravura-ui-phone-number.mjs} +0 -0
  60. package/esm2020/phone-number/phone-number.directive.mjs +187 -0
  61. package/esm2020/phone-number/phone-number.module.mjs +24 -0
  62. package/{esm2015/phone-number/phone-number.pipe.js → esm2020/phone-number/phone-number.pipe.mjs} +4 -4
  63. package/{esm2015/phone-number/phone-number.validator.js → esm2020/phone-number/phone-number.validator.mjs} +4 -4
  64. package/{esm2015/phone-number/public-api.js → esm2020/phone-number/public-api.mjs} +0 -0
  65. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  66. package/{esm2015/radio-panel/bravura-ui-radio-panel.js → esm2020/radio-panel/bravura-ui-radio-panel.mjs} +0 -0
  67. package/{esm2015/radio-panel/public-api.js → esm2020/radio-panel/public-api.mjs} +0 -0
  68. package/esm2020/radio-panel/radio-panel-item.component.mjs +97 -0
  69. package/esm2020/radio-panel/radio-panel.component.mjs +89 -0
  70. package/esm2020/radio-panel/radio-panel.module.mjs +25 -0
  71. package/{esm2015/selection-panel/bravura-ui-selection-panel.js → esm2020/selection-panel/bravura-ui-selection-panel.mjs} +0 -0
  72. package/{esm2015/selection-panel/public-api.js → esm2020/selection-panel/public-api.mjs} +0 -0
  73. package/esm2020/selection-panel/selection-panel-item.component.mjs +166 -0
  74. package/esm2020/selection-panel/selection-panel.directive.mjs +119 -0
  75. package/esm2020/selection-panel/selection-panel.module.mjs +23 -0
  76. package/{esm2015/skeletons/bravura-ui-skeletons.js → esm2020/skeletons/bravura-ui-skeletons.mjs} +0 -0
  77. package/{esm2015/skeletons/public-api.js → esm2020/skeletons/public-api.mjs} +0 -0
  78. package/esm2020/skeletons/skeleton-loader-presets.directive.mjs +83 -0
  79. package/{esm2015/skeletons/skeleton-loader.component.js → esm2020/skeletons/skeleton-loader.component.mjs} +4 -4
  80. package/esm2020/skeletons/skeletons.module.mjs +35 -0
  81. package/{esm2015/stepper/bravura-ui-stepper.js → esm2020/stepper/bravura-ui-stepper.mjs} +0 -0
  82. package/{esm2015/stepper/public-api.js → esm2020/stepper/public-api.mjs} +0 -0
  83. package/esm2020/stepper/stepper-animation.mjs +23 -0
  84. package/esm2020/stepper/stepper.component.mjs +166 -0
  85. package/{esm2015/stepper/stepper.module.js → esm2020/stepper/stepper.module.mjs} +13 -15
  86. package/{esm2015/tooltip/bravura-ui-tooltip.js → esm2020/tooltip/bravura-ui-tooltip.mjs} +0 -0
  87. package/{esm2015/tooltip/public-api.js → esm2020/tooltip/public-api.mjs} +0 -0
  88. package/esm2020/tooltip/tooltip.component.mjs +51 -0
  89. package/{esm2015/tooltip/tooltip.directive.js → esm2020/tooltip/tooltip.directive.mjs} +4 -4
  90. package/esm2020/tooltip/tooltip.module.mjs +25 -0
  91. package/fesm2015/bravura-ui-alert.mjs +324 -0
  92. package/fesm2015/bravura-ui-alert.mjs.map +1 -0
  93. package/fesm2015/bravura-ui-behavior.mjs +407 -0
  94. package/fesm2015/bravura-ui-behavior.mjs.map +1 -0
  95. package/fesm2015/bravura-ui-common.mjs +74 -0
  96. package/fesm2015/bravura-ui-common.mjs.map +1 -0
  97. package/fesm2015/bravura-ui-currency-input.mjs +303 -0
  98. package/fesm2015/bravura-ui-currency-input.mjs.map +1 -0
  99. package/fesm2015/bravura-ui-decimal-input.mjs +147 -0
  100. package/fesm2015/bravura-ui-decimal-input.mjs.map +1 -0
  101. package/fesm2015/bravura-ui-discrete-input.mjs +354 -0
  102. package/fesm2015/bravura-ui-discrete-input.mjs.map +1 -0
  103. package/fesm2015/bravura-ui-file-upload.mjs +434 -0
  104. package/fesm2015/bravura-ui-file-upload.mjs.map +1 -0
  105. package/fesm2015/{bravura-ui-form-field.js → bravura-ui-form-field.mjs} +12 -23
  106. package/fesm2015/bravura-ui-form-field.mjs.map +1 -0
  107. package/fesm2015/{bravura-ui-icon-font.js → bravura-ui-icon-font.mjs} +8 -8
  108. package/fesm2015/bravura-ui-icon-font.mjs.map +1 -0
  109. package/fesm2015/{bravura-ui-phone-number.js → bravura-ui-phone-number.mjs} +34 -30
  110. package/fesm2015/bravura-ui-phone-number.mjs.map +1 -0
  111. package/fesm2015/bravura-ui-radio-panel.mjs +212 -0
  112. package/fesm2015/bravura-ui-radio-panel.mjs.map +1 -0
  113. package/fesm2015/{bravura-ui-selection-panel.js → bravura-ui-selection-panel.mjs} +24 -28
  114. package/fesm2015/bravura-ui-selection-panel.mjs.map +1 -0
  115. package/fesm2015/bravura-ui-skeletons.mjs +195 -0
  116. package/fesm2015/bravura-ui-skeletons.mjs.map +1 -0
  117. package/fesm2015/bravura-ui-stepper.mjs +243 -0
  118. package/fesm2015/bravura-ui-stepper.mjs.map +1 -0
  119. package/fesm2015/bravura-ui-tooltip.mjs +195 -0
  120. package/fesm2015/bravura-ui-tooltip.mjs.map +1 -0
  121. package/fesm2015/{bravura-ui.js → bravura-ui.mjs} +1 -1
  122. package/fesm2015/bravura-ui.mjs.map +1 -0
  123. package/fesm2020/bravura-ui-alert.mjs +312 -0
  124. package/fesm2020/bravura-ui-alert.mjs.map +1 -0
  125. package/{fesm2015/bravura-ui-behavior.js → fesm2020/bravura-ui-behavior.mjs} +14 -14
  126. package/fesm2020/bravura-ui-behavior.mjs.map +1 -0
  127. package/{fesm2015/bravura-ui-common.js → fesm2020/bravura-ui-common.mjs} +7 -7
  128. package/fesm2020/bravura-ui-common.mjs.map +1 -0
  129. package/{fesm2015/bravura-ui-currency-input.js → fesm2020/bravura-ui-currency-input.mjs} +9 -10
  130. package/fesm2020/bravura-ui-currency-input.mjs.map +1 -0
  131. package/{fesm2015/bravura-ui-decimal-input.js → fesm2020/bravura-ui-decimal-input.mjs} +8 -8
  132. package/fesm2020/bravura-ui-decimal-input.mjs.map +1 -0
  133. package/{fesm2015/bravura-ui-discrete-input.js → fesm2020/bravura-ui-discrete-input.mjs} +18 -26
  134. package/fesm2020/bravura-ui-discrete-input.mjs.map +1 -0
  135. package/fesm2020/bravura-ui-file-upload.mjs +430 -0
  136. package/fesm2020/bravura-ui-file-upload.mjs.map +1 -0
  137. package/fesm2020/bravura-ui-form-field.mjs +119 -0
  138. package/fesm2020/bravura-ui-form-field.mjs.map +1 -0
  139. package/fesm2020/bravura-ui-icon-font.mjs +178 -0
  140. package/fesm2020/bravura-ui-icon-font.mjs.map +1 -0
  141. package/fesm2020/bravura-ui-phone-number.mjs +317 -0
  142. package/fesm2020/bravura-ui-phone-number.mjs.map +1 -0
  143. package/fesm2020/bravura-ui-radio-panel.mjs +209 -0
  144. package/fesm2020/bravura-ui-radio-panel.mjs.map +1 -0
  145. package/fesm2020/bravura-ui-selection-panel.mjs +306 -0
  146. package/fesm2020/bravura-ui-selection-panel.mjs.map +1 -0
  147. package/{fesm2015/bravura-ui-skeletons.js → fesm2020/bravura-ui-skeletons.mjs} +13 -13
  148. package/fesm2020/bravura-ui-skeletons.mjs.map +1 -0
  149. package/{fesm2015/bravura-ui-stepper.js → fesm2020/bravura-ui-stepper.mjs} +27 -44
  150. package/fesm2020/bravura-ui-stepper.mjs.map +1 -0
  151. package/{fesm2015/bravura-ui-tooltip.js → fesm2020/bravura-ui-tooltip.mjs} +13 -22
  152. package/fesm2020/bravura-ui-tooltip.mjs.map +1 -0
  153. package/fesm2020/bravura-ui.mjs +8 -0
  154. package/fesm2020/bravura-ui.mjs.map +1 -0
  155. package/file-upload/file-upload.component.d.ts +1 -1
  156. package/file-upload/{bravura-ui-file-upload.d.ts → index.d.ts} +0 -0
  157. package/form-field/form-field.component.d.ts +1 -1
  158. package/form-field/{bravura-ui-form-field.d.ts → index.d.ts} +0 -0
  159. package/icon-font/icon.directive.d.ts +1 -1
  160. package/icon-font/{bravura-ui-icon-font.d.ts → index.d.ts} +0 -0
  161. package/{bravura-ui.d.ts → index.d.ts} +0 -0
  162. package/package.json +149 -14
  163. package/phone-number/{bravura-ui-phone-number.d.ts → index.d.ts} +0 -0
  164. package/phone-number/phone-number.directive.d.ts +1 -1
  165. package/phone-number/phone-number.pipe.d.ts +1 -1
  166. package/phone-number/phone-number.validator.d.ts +1 -1
  167. package/radio-panel/{bravura-ui-radio-panel.d.ts → index.d.ts} +0 -0
  168. package/radio-panel/radio-panel-item.component.d.ts +1 -1
  169. package/radio-panel/radio-panel.component.d.ts +1 -1
  170. package/selection-panel/{bravura-ui-selection-panel.d.ts → index.d.ts} +0 -0
  171. package/selection-panel/selection-panel-item.component.d.ts +1 -1
  172. package/selection-panel/selection-panel.directive.d.ts +1 -1
  173. package/skeletons/{bravura-ui-skeletons.d.ts → index.d.ts} +0 -0
  174. package/skeletons/skeleton-loader-presets.directive.d.ts +1 -1
  175. package/skeletons/skeleton-loader.component.d.ts +1 -1
  176. package/stepper/{bravura-ui-stepper.d.ts → index.d.ts} +0 -0
  177. package/stepper/stepper.component.d.ts +1 -1
  178. package/theme/_ui-theme.scss +1 -1
  179. package/tooltip/{bravura-ui-tooltip.d.ts → index.d.ts} +0 -0
  180. package/tooltip/tooltip.component.d.ts +1 -1
  181. package/tooltip/tooltip.directive.d.ts +1 -1
  182. package/alert/package.json +0 -10
  183. package/behavior/package.json +0 -10
  184. package/bundles/bravura-ui-alert.umd.js +0 -745
  185. package/bundles/bravura-ui-alert.umd.js.map +0 -1
  186. package/bundles/bravura-ui-behavior.umd.js +0 -788
  187. package/bundles/bravura-ui-behavior.umd.js.map +0 -1
  188. package/bundles/bravura-ui-common.umd.js +0 -103
  189. package/bundles/bravura-ui-common.umd.js.map +0 -1
  190. package/bundles/bravura-ui-currency-input.umd.js +0 -335
  191. package/bundles/bravura-ui-currency-input.umd.js.map +0 -1
  192. package/bundles/bravura-ui-decimal-input.umd.js +0 -176
  193. package/bundles/bravura-ui-decimal-input.umd.js.map +0 -1
  194. package/bundles/bravura-ui-discrete-input.umd.js +0 -747
  195. package/bundles/bravura-ui-discrete-input.umd.js.map +0 -1
  196. package/bundles/bravura-ui-file-upload.umd.js +0 -845
  197. package/bundles/bravura-ui-file-upload.umd.js.map +0 -1
  198. package/bundles/bravura-ui-form-field.umd.js +0 -494
  199. package/bundles/bravura-ui-form-field.umd.js.map +0 -1
  200. package/bundles/bravura-ui-icon-font.umd.js +0 -539
  201. package/bundles/bravura-ui-icon-font.umd.js.map +0 -1
  202. package/bundles/bravura-ui-phone-number.umd.js +0 -690
  203. package/bundles/bravura-ui-phone-number.umd.js.map +0 -1
  204. package/bundles/bravura-ui-radio-panel.umd.js +0 -595
  205. package/bundles/bravura-ui-radio-panel.umd.js.map +0 -1
  206. package/bundles/bravura-ui-selection-panel.umd.js +0 -699
  207. package/bundles/bravura-ui-selection-panel.umd.js.map +0 -1
  208. package/bundles/bravura-ui-skeletons.umd.js +0 -525
  209. package/bundles/bravura-ui-skeletons.umd.js.map +0 -1
  210. package/bundles/bravura-ui-stepper.umd.js +0 -613
  211. package/bundles/bravura-ui-stepper.umd.js.map +0 -1
  212. package/bundles/bravura-ui-tooltip.umd.js +0 -586
  213. package/bundles/bravura-ui-tooltip.umd.js.map +0 -1
  214. package/bundles/bravura-ui.umd.js +0 -18
  215. package/bundles/bravura-ui.umd.js.map +0 -1
  216. package/common/package.json +0 -10
  217. package/currency-input/package.json +0 -10
  218. package/decimal-input/package.json +0 -10
  219. package/discrete-input/package.json +0 -10
  220. package/esm2015/alert/alert-container.component.js +0 -220
  221. package/esm2015/alert/alert-message.component.js +0 -98
  222. package/esm2015/alert/alert.module.js +0 -22
  223. package/esm2015/behavior/behavior.module.js +0 -25
  224. package/esm2015/common/common.module.js +0 -52
  225. package/esm2015/currency-input/currency-input.directive.js +0 -280
  226. package/esm2015/currency-input/currency-input.module.js +0 -19
  227. package/esm2015/decimal-input/decimal-input.module.js +0 -19
  228. package/esm2015/discrete-input/discrete-input.component.js +0 -334
  229. package/esm2015/discrete-input/discrete-input.module.js +0 -21
  230. package/esm2015/file-upload/file-upload.component.js +0 -367
  231. package/esm2015/form-field/form-field.component.js +0 -107
  232. package/esm2015/form-field/form-field.module.js +0 -20
  233. package/esm2015/icon-font/icon-font.module.js +0 -22
  234. package/esm2015/phone-number/phone-number.directive.js +0 -192
  235. package/esm2015/phone-number/phone-number.module.js +0 -24
  236. package/esm2015/radio-panel/radio-panel-item.component.js +0 -109
  237. package/esm2015/radio-panel/radio-panel.component.js +0 -98
  238. package/esm2015/radio-panel/radio-panel.module.js +0 -25
  239. package/esm2015/selection-panel/selection-panel-item.component.js +0 -174
  240. package/esm2015/selection-panel/selection-panel.directive.js +0 -120
  241. package/esm2015/selection-panel/selection-panel.module.js +0 -23
  242. package/esm2015/skeletons/skeleton-loader-presets.directive.js +0 -83
  243. package/esm2015/skeletons/skeletons.module.js +0 -35
  244. package/esm2015/stepper/stepper-animation.js +0 -23
  245. package/esm2015/stepper/stepper.component.js +0 -181
  246. package/esm2015/tooltip/tooltip.component.js +0 -59
  247. package/esm2015/tooltip/tooltip.module.js +0 -26
  248. package/fesm2015/bravura-ui-alert.js +0 -337
  249. package/fesm2015/bravura-ui-alert.js.map +0 -1
  250. package/fesm2015/bravura-ui-behavior.js.map +0 -1
  251. package/fesm2015/bravura-ui-common.js.map +0 -1
  252. package/fesm2015/bravura-ui-currency-input.js.map +0 -1
  253. package/fesm2015/bravura-ui-decimal-input.js.map +0 -1
  254. package/fesm2015/bravura-ui-discrete-input.js.map +0 -1
  255. package/fesm2015/bravura-ui-file-upload.js +0 -443
  256. package/fesm2015/bravura-ui-file-upload.js.map +0 -1
  257. package/fesm2015/bravura-ui-form-field.js.map +0 -1
  258. package/fesm2015/bravura-ui-icon-font.js.map +0 -1
  259. package/fesm2015/bravura-ui-phone-number.js.map +0 -1
  260. package/fesm2015/bravura-ui-radio-panel.js +0 -230
  261. package/fesm2015/bravura-ui-radio-panel.js.map +0 -1
  262. package/fesm2015/bravura-ui-selection-panel.js.map +0 -1
  263. package/fesm2015/bravura-ui-skeletons.js.map +0 -1
  264. package/fesm2015/bravura-ui-stepper.js.map +0 -1
  265. package/fesm2015/bravura-ui-tooltip.js.map +0 -1
  266. package/fesm2015/bravura-ui.js.map +0 -1
  267. package/file-upload/package.json +0 -10
  268. package/form-field/package.json +0 -10
  269. package/icon-font/package.json +0 -10
  270. package/phone-number/package.json +0 -10
  271. package/radio-panel/package.json +0 -10
  272. package/selection-panel/package.json +0 -10
  273. package/skeletons/package.json +0 -10
  274. package/stepper/package.json +0 -10
  275. package/tooltip/package.json +0 -10
@@ -1,367 +0,0 @@
1
- import { animate, query, stagger, style, transition, trigger } from '@angular/animations';
2
- import { HttpEventType } from '@angular/common/http';
3
- import { Component, ElementRef, forwardRef, HostListener, Input, ViewChild } from '@angular/core';
4
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { Observable, of, Subject } from 'rxjs';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./file-upload.service";
8
- import * as i2 from "@angular/material/icon";
9
- import * as i3 from "@angular/material/progress-bar";
10
- import * as i4 from "@angular/material/button";
11
- import * as i5 from "@angular/material/divider";
12
- import * as i6 from "@angular/common";
13
- import * as i7 from "@bravura/ui/icon-font";
14
- import * as i8 from "@angular/material/tooltip";
15
- /** @ignore */
16
- class UploadingItem {
17
- constructor(event$, fileOrOncancel, oncomplete, oncancel) {
18
- this.oncancel = oncancel;
19
- this.progress = 0;
20
- if (event$ instanceof Observable) {
21
- this.file = fileOrOncancel;
22
- this.subscription = event$.subscribe({
23
- next: evt => {
24
- if (evt.type === HttpEventType.UploadProgress) {
25
- this.progress = evt.loaded / this.file.size;
26
- }
27
- else if (evt.type === HttpEventType.Response) {
28
- this.uploadedItem = evt.body;
29
- this.progress = 1;
30
- oncomplete();
31
- }
32
- }
33
- });
34
- }
35
- else {
36
- this.subscription = of(event$).subscribe();
37
- this.uploadedItem = event$;
38
- this.oncancel = fileOrOncancel;
39
- }
40
- }
41
- cancel() {
42
- this.subscription.unsubscribe();
43
- this.oncancel(this);
44
- }
45
- get done() {
46
- return !!this.uploadedItem;
47
- }
48
- get name() {
49
- var _a, _b;
50
- return ((_a = this.uploadedItem) === null || _a === void 0 ? void 0 : _a.name) || ((_b = this.file) === null || _b === void 0 ? void 0 : _b.name);
51
- }
52
- get downloading() {
53
- return this.downloadingSubs && !this.downloadingSubs.closed;
54
- }
55
- }
56
- /**
57
- * A control value accessor component to provide the user interface for uploading files.
58
- *
59
- * The application that integrates this UI must provide an implementation of `FileUploadService`.
60
- *
61
- * The control's value is a list of alpha-numerical strings, which are the identifiers to the uploaded files.
62
- *
63
- * Example:
64
- *
65
- * ```html
66
- * <form>
67
- * <bui-file-upload [(ngModel)]="uploadedFileIds" name="myFiles"></bui-file-upload>
68
- * </form>
69
- * ```
70
- *
71
- * @see FileUploadService
72
- */
73
- export class FileUploadComponent {
74
- constructor(_service) {
75
- this._service = _service;
76
- /** @ignore */
77
- this._value = null;
78
- /**
79
- * The caption of the button for opening file selection dialog.
80
- */
81
- this.uploadActionText = 'Drag files here to attach or browse';
82
- /**
83
- * The label for listing successful uploaded files.
84
- */
85
- this.fileUploadedLabel = 'List of files uploaded successfully';
86
- /**
87
- * The text to be displayed when the user starts to drag file items over the browser window.
88
- */
89
- this.dragHint = 'Please drag the files here.';
90
- /**
91
- * The text to be displayed when the user is dragging the file items over the drop zone.
92
- */
93
- this.dropHint = 'Please release the mouse button to start uploading.';
94
- /** Specifies the total number of files accepted. A falsy value removes the limit.*/
95
- this.limit = 0;
96
- /** @ignore */
97
- this._uploadingItems = [];
98
- /** @ignore */
99
- this._accept = '*/*';
100
- /** @ignore */
101
- this._itemAnimationStart = new Subject();
102
- /** @ignore */
103
- this._itemAnimationDone = new Subject();
104
- /** @ignore */
105
- this._itemAnimationInProgress = false;
106
- this._onChange = (_) => { };
107
- this._onTouch = () => { };
108
- this._overFrameCounter = 0;
109
- this._overCounter = 0;
110
- this._typeRegExps = [/.*\/.*/];
111
- this._types = ['*/*'];
112
- this._numberOfFilesDragged = 0;
113
- this._onChange([]);
114
- this._onTouch();
115
- this._frameDndEnter = this._onDndEnterFrame.bind(this);
116
- this._frameDndLeave = this._onDndLeaveFrame.bind(this);
117
- this._frameDndStop = this._onDndStopFrame.bind(this);
118
- this._frameDndOver = event => event.preventDefault();
119
- }
120
- /**
121
- * Accepted MIME types
122
- *
123
- * @example ['text/*', 'image/png']
124
- */
125
- get types() {
126
- return this._types;
127
- }
128
- set types(types) {
129
- if (Array.isArray(types) && (types === null || types === void 0 ? void 0 : types.length)) {
130
- this._typeRegExps = [];
131
- this._types = Array.from(types);
132
- this._accept = this._types.join(',');
133
- types.forEach(t => this._typeRegExps.push(new RegExp(t.replace(/\*/g, '.*'))));
134
- }
135
- }
136
- /** @internal */
137
- ngOnInit() {
138
- document.addEventListener('dragenter', this._frameDndEnter);
139
- document.addEventListener('dragleave', this._frameDndLeave);
140
- document.addEventListener('dragend', this._frameDndStop);
141
- document.addEventListener('drop', this._frameDndStop);
142
- document.addEventListener('dragover', this._frameDndOver);
143
- this._itemAnimationStart.subscribe(() => (this._itemAnimationInProgress = true));
144
- this._itemAnimationDone.subscribe(() => (this._itemAnimationInProgress = false));
145
- }
146
- ngOnDestroy() {
147
- document.removeEventListener('dragenter', this._frameDndEnter);
148
- document.removeEventListener('dragleave', this._frameDndLeave);
149
- document.removeEventListener('dragend', this._frameDndStop);
150
- document.removeEventListener('drop', this._frameDndStop);
151
- document.removeEventListener('dragover', this._frameDndOver);
152
- this._itemAnimationStart.complete();
153
- this._itemAnimationDone.complete();
154
- }
155
- /** @internal */
156
- writeValue(obj) {
157
- if (Array.isArray(obj)) {
158
- if (!this._value) {
159
- this._acceptChange(obj);
160
- return;
161
- }
162
- const common = obj.filter(v => this._value.includes(v));
163
- if (common.length === obj.length && common.length === this._value.length) {
164
- return; // no change
165
- }
166
- this._acceptChange(obj);
167
- }
168
- else {
169
- this._value = null;
170
- }
171
- }
172
- /** @internal */
173
- registerOnChange(fn) {
174
- this._onChange = fn;
175
- }
176
- /** @internal */
177
- registerOnTouched(fn) {
178
- this._onTouch = fn;
179
- }
180
- /** @internal */
181
- onDragEnter(event) {
182
- event.preventDefault();
183
- event.stopPropagation();
184
- this._overCounter++;
185
- }
186
- /** @internal */
187
- onDragOver(event) {
188
- event.preventDefault();
189
- }
190
- /** @internal */
191
- onDragLeave(event) {
192
- event.preventDefault();
193
- event.stopPropagation();
194
- this._overCounter--;
195
- }
196
- /** @internal */
197
- onDndDrop(event) {
198
- var _a;
199
- event.preventDefault();
200
- event.stopPropagation();
201
- this._onDndStopFrame();
202
- const files = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files;
203
- if (files === null || files === void 0 ? void 0 : files.length) {
204
- this._uploadFiles(Array.from(files));
205
- }
206
- }
207
- /** Open the file selection dialog */
208
- selectFiles() {
209
- this._fileInput.nativeElement.click();
210
- }
211
- /** @ignore */
212
- _openItem(item) {
213
- item.downloadingSubs = this._service.get(item.uploadedItem.id).subscribe(blob => {
214
- const url = URL.createObjectURL(blob);
215
- window.open(url, '_blank');
216
- });
217
- }
218
- /** @ignore */
219
- get _overFrame() {
220
- return this._overFrameCounter > 0;
221
- }
222
- /** @ignore */
223
- get _overDropZone() {
224
- return this._overCounter > 0;
225
- }
226
- /** Whether file uploading is in progress */
227
- get uploading() {
228
- return this._uploadingItems.some(i => !i.done);
229
- }
230
- /** The remaining number of files allowed.*/
231
- get remaining() {
232
- return this.limit ? this.limit - this._uploadingItems.length : Infinity;
233
- }
234
- /** @ignore */
235
- _handleFileSelection() {
236
- const fileList = this._fileInput.nativeElement.files;
237
- if (fileList === null || fileList === void 0 ? void 0 : fileList.length) {
238
- this._uploadFiles(Array.from(fileList));
239
- this._fileInput.nativeElement.value = '';
240
- }
241
- }
242
- /** @ignore */
243
- get _invalidFilesDragged() {
244
- return this._numberOfFilesDragged > this.remaining && (this._overFrame || this._overDropZone);
245
- }
246
- /** @ignore */
247
- get _initialising() {
248
- return !!this._initSubs && !this._initSubs.closed;
249
- }
250
- _uploadFiles(files) {
251
- if (this._initialising || files.length > this.remaining) {
252
- return;
253
- }
254
- const filtered = files.filter(f => (!f.type || this._typeRegExps.some(regexp => f.type.match(regexp))) &&
255
- !this._uploadingItems.some(i => i.name === f.name));
256
- const observables = this._service.upload(filtered);
257
- const items = filtered.map((f, i) => new UploadingItem(observables[i], f, this._updateItems.bind(this), this._deleteItem.bind(this)));
258
- this._uploadingItems = [...this._uploadingItems, ...items];
259
- }
260
- _onDndEnterFrame(event) {
261
- var _a, _b;
262
- event.preventDefault();
263
- this._numberOfFilesDragged = ((_b = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.length) || 0;
264
- this._overFrameCounter++;
265
- }
266
- _onDndLeaveFrame() {
267
- this._overFrameCounter--;
268
- }
269
- _onDndStopFrame() {
270
- this._overFrameCounter = 0;
271
- this._overCounter = 0;
272
- }
273
- _acceptChange(v) {
274
- this._initSubs = this._service.list().subscribe(list => {
275
- this._uploadingItems = list
276
- .filter(i => v.includes(i.id))
277
- .map(f => new UploadingItem(f, this._deleteItem.bind(this)));
278
- });
279
- }
280
- _updateItems() {
281
- const completed = this._uploadingItems.filter(i => !!i.uploadedItem);
282
- this._uploadingItems = [...completed, ...this._uploadingItems.filter(i => !i.uploadedItem)];
283
- this._updateValue(completed);
284
- }
285
- _deleteItem(item) {
286
- var _a;
287
- const key = (_a = item.uploadedItem) === null || _a === void 0 ? void 0 : _a.id;
288
- if (key) {
289
- this._service.delete(key).subscribe(() => {
290
- this._uploadingItems = this._uploadingItems.filter(i => i !== item);
291
- const completed = this._uploadingItems.filter(i => !!i.uploadedItem);
292
- this._updateValue(completed);
293
- });
294
- }
295
- else {
296
- this._uploadingItems = this._uploadingItems.filter(i => i !== item);
297
- const completed = this._uploadingItems.filter(i => !!i.uploadedItem);
298
- this._updateValue(completed);
299
- }
300
- }
301
- _updateValue(completed) {
302
- const completedIds = completed.map(c => c.uploadedItem.id);
303
- this._value = completedIds;
304
- if (!this._value.length) {
305
- this._value = null;
306
- }
307
- this._onChange(completedIds);
308
- }
309
- }
310
- FileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileUploadComponent, deps: [{ token: i1.FileUploadService }], target: i0.ɵɵFactoryTarget.Component });
311
- FileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FileUploadComponent, selector: "bui-file-upload", inputs: { uploadActionText: "uploadActionText", fileUploadedLabel: "fileUploadedLabel", dragHint: "dragHint", dropHint: "dropHint", limit: "limit", types: "types" }, host: { listeners: { "dragenter": "onDragEnter($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDndDrop($event)" }, properties: { "class.bui-dnd-active": "_overFrame && remaining >= _numberOfFilesDragged", "class.bui-dnd-over": "_overDropZone && remaining >= _numberOfFilesDragged", "class.bui-dnd-invalid": "_invalidFilesDragged" }, classAttribute: "bui-host bui-file-upload" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FileUploadComponent), multi: true }], viewQueries: [{ propertyName: "_fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"bui-file-upload-container\">\n\t<div\n\t\tclass=\"bui-file-upload-hint\"\n\t\t*ngIf=\"!_initialising && remaining > 0 && (!_itemAnimationInProgress || remaining > 1)\"\n\t>\n\t\t<ng-template [ngIf]=\"_invalidFilesDragged\" [ngIfElse]=\"validDnd\">\n\t\t\t<mat-icon [buiIcon]=\"'block'\" [size]=\"32\" color=\"warn\" variant=\"outlined\" style=\"opacity: 0.6\"></mat-icon>\n\t\t</ng-template>\n\t\t<ng-template #validDnd>\n\t\t\t<div *ngIf=\"!_overFrame && !_overDropZone\" class=\"bui-color-muted bui-upload-icon-link\" (click)=\"selectFiles()\">\n\t\t\t\t<mat-icon [buiIcon]=\"'fas fa-cloud-upload-alt'\" [size]=\"32\"></mat-icon>\n\t\t\t\t<a role=\"button\">{{ uploadActionText }}</a>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"_overFrame && !_overDropZone\" class=\"bui-color-light\">{{ dragHint }}</div>\n\t\t\t<div *ngIf=\"_overDropZone\" class=\"bui-color-light\">{{ dropHint }}</div>\n\t\t</ng-template>\n\t</div>\n\t<div\n\t\tclass=\"bui-file-upload-list\"\n\t\t[@slideOut]=\"_uploadingItems.length\"\n\t\t(@slideOut.start)=\"_itemAnimationStart.next()\"\n\t\t(@slideOut.done)=\"_itemAnimationDone.next()\"\n\t\t*ngIf=\"_uploadingItems.length\"\n\t>\n\t\t<span class=\"bui-file-uploaded-label\">{{ fileUploadedLabel }}</span>\n\n\t\t<ng-container *ngFor=\"let item of _uploadingItems; let idx = index\">\n\t\t\t<div class=\"bui-file-upload-item\" [class.in-progress]=\"!item.done\" #itemDiv>\n\t\t\t\t<div class=\"bui-file-upload-item-name\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<mat-icon class=\"bui-color-muted\">description</mat-icon>\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"text\"\n\t\t\t\t\t\t\t*ngIf=\"item.done && !item.downloading; else staticName\"\n\t\t\t\t\t\t\thref=\"#{{ item.uploadedItem?.id }}\"\n\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); _openItem(item)\"\n\t\t\t\t\t\t\tcontextmenu=\"false\"\n\t\t\t\t\t\t\tmatTooltip=\"Download\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ item.name }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<ng-template #staticName>\n\t\t\t\t\t\t\t<span class=\"text\">{{ item.name }}</span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</span>\n\t\t\t\t\t<div class=\"bui-file-upload-item-progress\">\n\t\t\t\t\t\t<mat-progress-bar\n\t\t\t\t\t\t\tmode=\"determinate\"\n\t\t\t\t\t\t\t[class.upload-completed]=\"item.done\"\n\t\t\t\t\t\t\t*ngIf=\"!item.downloading\"\n\t\t\t\t\t\t\t[value]=\"item.done ? 100 : item.progress * 100\"\n\t\t\t\t\t\t></mat-progress-bar>\n\t\t\t\t\t\t<mat-progress-bar mode=\"buffer\" *ngIf=\"item.downloading\"></mat-progress-bar>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<ng-template [ngIf]=\"item.done\" [ngIfElse]=\"inprogress\"> 100% </ng-template>\n\t\t\t\t\t\t\t<ng-template #inprogress>\n\t\t\t\t\t\t\t\t{{ item.progress | percent }}\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"bui-file-upload-item-action\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\t(click)=\"item.cancel()\"\n\t\t\t\t\t\t(mouseenter)=\"itemDiv.classList.add('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\t(mouseleave)=\"itemDiv.classList.remove('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\tmatTooltip=\"Delete\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<mat-icon [buiIcon]=\"'cancel'\" style=\"line-height: 0.9\"></mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<mat-divider *ngIf=\"idx < _uploadingItems.length - 1\"></mat-divider>\n\t\t</ng-container>\n\t</div>\n\t<input\n\t\ttype=\"file\"\n\t\t#fileInput\n\t\tstyle=\"display: none\"\n\t\taccept=\"{{ _accept }}\"\n\t\t(change)=\"_handleFileSelection()\"\n\t\t[multiple]=\"remaining > 1\"\n\t/>\n</div>\n", styles: [":host:not([hidden]){display:block;border-style:dashed;border-width:1px;border-color:var(--bui-color-muted);transition:all .12s;padding:3px}:host:not([hidden]).bui-dnd-active,:host:not([hidden]).bui-dnd-over{padding:0;border-width:4px}:host:not([hidden]).bui-dnd-invalid{cursor:no-drop}:host:not([hidden]) .bui-file-upload-hint{margin:.5rem;height:40px;justify-content:center;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container{min-height:4rem;display:flex;align-items:center;flex-direction:column;justify-content:center;transition:initial}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link{cursor:pointer;transition:color .1s cubic-bezier(.55,0,.55,.2);display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link:hover{color:var(--bui-color-light)!important}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link>*{margin:4px}:host:not([hidden]) .bui-file-upload-list{align-self:stretch;margin-top:calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-uploaded-label{display:block;font-size:smaller;margin:0 calc(1rem - 4px) .5rem calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item{display:flex;align-items:center;margin:0 calc(1rem - 4px);padding:.25rem 0;justify-content:space-between}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item:last-child{margin-bottom:calc(.5rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.in-progress .bui-file-upload-item-name{font-style:italic}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.bui-file-upload-item-deleting{background-color:#8080801a;transition:background-color .1s cubic-bezier(.55,0,.55,.2)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name{flex-grow:1;font-size:80%;display:flex;align-items:center;flex-wrap:wrap}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span{word-break:break-all;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span>mat-icon{width:20px;height:20px;font-size:20px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name a{color:var(--bui-color-primary)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name .text{margin-left:.5rem;margin-right:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress{flex-grow:1;min-width:50%;display:flex;justify-content:flex-start;align-items:center;margin:.5rem 0}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress .mat-progress-bar{max-width:100%;height:.4rem;border-radius:1rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress>span{margin-inline-start:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-action{display:flex;align-items:center;height:1em;width:1.75em}:host:not([hidden]) .bui-file-upload-list .mat-divider{margin:0 calc(1rem - 4px) 0 calc(1rem - 4px)}:host:not([hidden]) .upload-completed{animation:pulse 1s ease-in-out}@keyframes pulse{0%{transform:scaleY(1)}50%{transform:scaleY(1.5)}to{transform:scaleY(1)}}\n"], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.IconDirective, selector: "[buiIcon]", inputs: ["buiIcon", "size", "variant"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "percent": i6.PercentPipe }, animations: [
312
- trigger('slideOut', [
313
- transition('* => *', [
314
- query(':leave', stagger(100, animate('0.25s', style({ height: 0, overflow: 'hidden' }))), { optional: true })
315
- ])
316
- ])
317
- ] });
318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileUploadComponent, decorators: [{
319
- type: Component,
320
- args: [{
321
- host: {
322
- class: 'bui-host bui-file-upload',
323
- '[class.bui-dnd-active]': '_overFrame && remaining >= _numberOfFilesDragged',
324
- '[class.bui-dnd-over]': '_overDropZone && remaining >= _numberOfFilesDragged',
325
- '[class.bui-dnd-invalid]': '_invalidFilesDragged'
326
- },
327
- selector: 'bui-file-upload',
328
- templateUrl: './file-upload.component.html',
329
- styleUrls: ['./file-upload.component.scss'],
330
- providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FileUploadComponent), multi: true }],
331
- animations: [
332
- trigger('slideOut', [
333
- transition('* => *', [
334
- query(':leave', stagger(100, animate('0.25s', style({ height: 0, overflow: 'hidden' }))), { optional: true })
335
- ])
336
- ])
337
- ]
338
- }]
339
- }], ctorParameters: function () { return [{ type: i1.FileUploadService }]; }, propDecorators: { uploadActionText: [{
340
- type: Input
341
- }], fileUploadedLabel: [{
342
- type: Input
343
- }], dragHint: [{
344
- type: Input
345
- }], dropHint: [{
346
- type: Input
347
- }], limit: [{
348
- type: Input
349
- }], types: [{
350
- type: Input
351
- }], _fileInput: [{
352
- type: ViewChild,
353
- args: ['fileInput', { read: ElementRef, static: true }]
354
- }], onDragEnter: [{
355
- type: HostListener,
356
- args: ['dragenter', ['$event']]
357
- }], onDragOver: [{
358
- type: HostListener,
359
- args: ['dragover', ['$event']]
360
- }], onDragLeave: [{
361
- type: HostListener,
362
- args: ['dragleave', ['$event']]
363
- }], onDndDrop: [{
364
- type: HostListener,
365
- args: ['drop', ['$event']]
366
- }] } });
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFHN0QsY0FBYztBQUNkLE1BQU0sYUFBYTtJQWNsQixZQUNDLE1BQThELEVBQzlELGNBQXVELEVBQ3ZELFVBQXVCLEVBQ2YsUUFBd0M7UUFBeEMsYUFBUSxHQUFSLFFBQVEsQ0FBZ0M7UUFqQmpELGFBQVEsR0FBRyxDQUFDLENBQUM7UUFtQlosSUFBSSxNQUFNLFlBQVksVUFBVSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBc0IsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDWCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLGNBQWMsRUFBRTt3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QUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzs2QkFDN0csQ0FBQzt5QkFDRixDQUFDO3FCQUNGO2lCQUNEO3dHQVNBLGdCQUFnQjtzQkFEZixLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTixRQUFRO3NCQURQLEtBQUs7Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFTRixLQUFLO3NCQURSLEtBQUs7Z0JBd0NFLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThEMUQsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTckMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPcEMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTckMsU0FBUztzQkFEUixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHF1ZXJ5LCBzdGFnZ2VyLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkSXRlbSwgRmlsZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL2ZpbGUtdXBsb2FkLnNlcnZpY2UnO1xuXG4vKiogQGlnbm9yZSAqL1xuY2xhc3MgVXBsb2FkaW5nSXRlbSB7XG5cdHByb2dyZXNzID0gMDtcblx0dXBsb2FkZWRJdGVtOiBGaWxlVXBsb2FkSXRlbSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRvd25sb2FkaW5nU3Vicz86IFN1YnNjcmlwdGlvbjtcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblx0cHJpdmF0ZSBmaWxlPzogRmlsZTtcblxuXHRjb25zdHJ1Y3RvcihpdGVtOiBGaWxlVXBsb2FkSXRlbSwgb25jYW5jZWw6IChpdGVtOiBVcGxvYWRpbmdJdGVtKSA9PiB2b2lkKTtcblx0Y29uc3RydWN0b3IoXG5cdFx0ZXZlbnQkOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxGaWxlVXBsb2FkSXRlbT4+IHwgRmlsZVVwbG9hZEl0ZW0sXG5cdFx0ZmlsZTogRmlsZSxcblx0XHRvbmNvbXBsZXRlOiAoKSA9PiB2b2lkLFxuXHRcdG9uY2FuY2VsOiAoaXRlbTogVXBsb2FkaW5nSXRlbSkgPT4gdm9pZFxuXHQpO1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRldmVudCQ6IE9ic2VydmFibGU8SHR0cEV2ZW50PEZpbGVVcGxvYWRJdGVtPj4gfCBGaWxlVXBsb2FkSXRlbSxcblx0XHRmaWxlT3JPbmNhbmNlbD86IEZpbGUgfCAoKGl0ZW06IFVwbG9hZGluZ0l0ZW0pID0+IHZvaWQpLFxuXHRcdG9uY29tcGxldGU/OiAoKSA9PiB2b2lkLFxuXHRcdHByaXZhdGUgb25jYW5jZWw/OiAoaXRlbTogVXBsb2FkaW5nSXRlbSkgPT4gdm9pZFxuXHQpIHtcblx0XHRpZiAoZXZlbnQkIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuXHRcdFx0dGhpcy5maWxlID0gZmlsZU9yT25jYW5jZWwgYXMgRmlsZTtcblx0XHRcdHRoaXMuc3Vic2NyaXB0aW9uID0gZXZlbnQkLnN1YnNjcmliZSh7XG5cdFx0XHRcdG5leHQ6IGV2dCA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2dC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByb2dyZXNzID0gZXZ0LmxvYWRlZCAvICh0aGlzLmZpbGUgYXMgRmlsZSkuc2l6ZTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2dC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwbG9hZGVkSXRlbSA9IGV2dC5ib2R5O1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9ncmVzcyA9IDE7XG5cdFx0XHRcdFx0XHRvbmNvbXBsZXRlISgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3Vic2NyaXB0aW9uID0gb2YoZXZlbnQkKS5zdWJzY3JpYmUoKTtcblx0XHRcdHRoaXMudXBsb2FkZWRJdGVtID0gZXZlbnQkO1xuXHRcdFx0dGhpcy5vbmNhbmNlbCA9IGZpbGVPck9uY2FuY2VsIGFzIChpdGVtOiBVcGxvYWRpbmdJdGVtKSA9PiB2b2lkO1xuXHRcdH1cblx0fVxuXG5cdGNhbmNlbCgpIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMub25jYW5jZWwhKHRoaXMpO1xuXHR9XG5cblx0Z2V0IGRvbmUoKSB7XG5cdFx0cmV0dXJuICEhdGhpcy51cGxvYWRlZEl0ZW07XG5cdH1cblxuXHRnZXQgbmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy51cGxvYWRlZEl0ZW0/Lm5hbWUgfHwgdGhpcy5maWxlPy5uYW1lO1xuXHR9XG5cblx0Z2V0IGRvd25sb2FkaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmRvd25sb2FkaW5nU3VicyAmJiAhdGhpcy5kb3dubG9hZGluZ1N1YnMuY2xvc2VkO1xuXHR9XG59XG4vKipcbiAqIEEgY29udHJvbCB2YWx1ZSBhY2Nlc3NvciBjb21wb25lbnQgdG8gcHJvdmlkZSB0aGUgdXNlciBpbnRlcmZhY2UgZm9yIHVwbG9hZGluZyBmaWxlcy5cbiAqXG4gKiBUaGUgYXBwbGljYXRpb24gdGhhdCBpbnRlZ3JhdGVzIHRoaXMgVUkgbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIGBGaWxlVXBsb2FkU2VydmljZWAuXG4gKlxuICogVGhlIGNvbnRyb2wncyB2YWx1ZSBpcyBhIGxpc3Qgb2YgYWxwaGEtbnVtZXJpY2FsIHN0cmluZ3MsIHdoaWNoIGFyZSB0aGUgaWRlbnRpZmllcnMgdG8gdGhlIHVwbG9hZGVkIGZpbGVzLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgaHRtbFxuICogPGZvcm0+XG4gKiAgPGJ1aS1maWxlLXVwbG9hZCBbKG5nTW9kZWwpXT1cInVwbG9hZGVkRmlsZUlkc1wiIG5hbWU9XCJteUZpbGVzXCI+PC9idWktZmlsZS11cGxvYWQ+XG4gKiA8L2Zvcm0+XG4gKiBgYGBcbiAqXG4gKiBAc2VlIEZpbGVVcGxvYWRTZXJ2aWNlXG4gKi9cbkBDb21wb25lbnQoe1xuXHRob3N0OiB7XG5cdFx0Y2xhc3M6ICdidWktaG9zdCBidWktZmlsZS11cGxvYWQnLFxuXHRcdCdbY2xhc3MuYnVpLWRuZC1hY3RpdmVdJzogJ19vdmVyRnJhbWUgJiYgcmVtYWluaW5nID49IF9udW1iZXJPZkZpbGVzRHJhZ2dlZCcsXG5cdFx0J1tjbGFzcy5idWktZG5kLW92ZXJdJzogJ19vdmVyRHJvcFpvbmUgJiYgcmVtYWluaW5nID49IF9udW1iZXJPZkZpbGVzRHJhZ2dlZCcsXG5cdFx0J1tjbGFzcy5idWktZG5kLWludmFsaWRdJzogJ19pbnZhbGlkRmlsZXNEcmFnZ2VkJ1xuXHR9LFxuXHRzZWxlY3RvcjogJ2J1aS1maWxlLXVwbG9hZCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZpbGVVcGxvYWRDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XSxcblx0YW5pbWF0aW9uczogW1xuXHRcdHRyaWdnZXIoJ3NsaWRlT3V0JywgW1xuXHRcdFx0dHJhbnNpdGlvbignKiA9PiAqJywgW1xuXHRcdFx0XHRxdWVyeSgnOmxlYXZlJywgc3RhZ2dlcigxMDAsIGFuaW1hdGUoJzAuMjVzJywgc3R5bGUoeyBoZWlnaHQ6IDAsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSkpLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG5cdFx0XHRdKVxuXHRcdF0pXG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKiBAaWdub3JlICovXG5cdF92YWx1ZTogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcblxuXHQvKipcblx0ICogVGhlIGNhcHRpb24gb2YgdGhlIGJ1dHRvbiBmb3Igb3BlbmluZyBmaWxlIHNlbGVjdGlvbiBkaWFsb2cuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHR1cGxvYWRBY3Rpb25UZXh0ID0gJ0RyYWcgZmlsZXMgaGVyZSB0byBhdHRhY2ggb3IgYnJvd3NlJztcblxuXHQvKipcblx0ICogVGhlIGxhYmVsIGZvciBsaXN0aW5nIHN1Y2Nlc3NmdWwgdXBsb2FkZWQgZmlsZXMuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRmaWxlVXBsb2FkZWRMYWJlbCA9ICdMaXN0IG9mIGZpbGVzIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseSc7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZCB3aGVuIHRoZSB1c2VyIHN0YXJ0cyB0byBkcmFnIGZpbGUgaXRlbXMgb3ZlciB0aGUgYnJvd3NlciB3aW5kb3cuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRkcmFnSGludCA9ICdQbGVhc2UgZHJhZyB0aGUgZmlsZXMgaGVyZS4nO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgZmlsZSBpdGVtcyBvdmVyIHRoZSBkcm9wIHpvbmUuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRkcm9wSGludCA9ICdQbGVhc2UgcmVsZWFzZSB0aGUgbW91c2UgYnV0dG9uIHRvIHN0YXJ0IHVwbG9hZGluZy4nO1xuXG5cdC8qKiBTcGVjaWZpZXMgdGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyBhY2NlcHRlZC4gQSBmYWxzeSB2YWx1ZSByZW1vdmVzIHRoZSBsaW1pdC4qL1xuXHRASW5wdXQoKVxuXHRsaW1pdCA9IDA7XG5cblx0LyoqXG5cdCAqIEFjY2VwdGVkIE1JTUUgdHlwZXNcblx0ICpcblx0ICogQGV4YW1wbGUgWyd0ZXh0LyonLCAnaW1hZ2UvcG5nJ11cblx0ICovXG5cdEBJbnB1dCgpXG5cdGdldCB0eXBlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIHRoaXMuX3R5cGVzO1xuXHR9XG5cdHNldCB0eXBlcyh0eXBlczogc3RyaW5nW10pIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0eXBlcykgJiYgdHlwZXM/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5fdHlwZVJlZ0V4cHMgPSBbXTtcblx0XHRcdHRoaXMuX3R5cGVzID0gQXJyYXkuZnJvbSh0eXBlcyk7XG5cdFx0XHR0aGlzLl9hY2NlcHQgPSB0aGlzLl90eXBlcy5qb2luKCcsJyk7XG5cdFx0XHR0eXBlcy5mb3JFYWNoKHQgPT4gdGhpcy5fdHlwZVJlZ0V4cHMucHVzaChuZXcgUmVnRXhwKHQucmVwbGFjZSgvXFwqL2csICcuKicpKSkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdF91cGxvYWRpbmdJdGVtczogVXBsb2FkaW5nSXRlbVtdID0gW107XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X2FjY2VwdCA9ICcqLyonO1xuXG5cdC8qKiBAaWdub3JlICovXG5cdF9pdGVtQW5pbWF0aW9uU3RhcnQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHQvKiogQGlnbm9yZSAqL1xuXHRfaXRlbUFuaW1hdGlvbkRvbmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHQvKiogQGlnbm9yZSAqL1xuXHRfaXRlbUFuaW1hdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuXHRwcml2YXRlIF9vbkNoYW5nZSA9IChfOiBzdHJpbmdbXSkgPT4ge307XG5cdHByaXZhdGUgX29uVG91Y2ggPSAoKSA9PiB7fTtcblx0cHJpdmF0ZSBfZnJhbWVEbmRFbnRlcjogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG5cdHByaXZhdGUgX2ZyYW1lRG5kTGVhdmU6ICgpID0+IHZvaWQ7XG5cdHByaXZhdGUgX2ZyYW1lRG5kT3ZlcjogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG5cdHByaXZhdGUgX2ZyYW1lRG5kU3RvcDogKCkgPT4gdm9pZDtcblx0cHJpdmF0ZSBfb3ZlckZyYW1lQ291bnRlciA9IDA7XG5cdHByaXZhdGUgX292ZXJDb3VudGVyID0gMDtcblx0cHJpdmF0ZSBfdHlwZVJlZ0V4cHM6IFJlZ0V4cFtdID0gWy8uKlxcLy4qL107XG5cdHByaXZhdGUgX3R5cGVzOiBzdHJpbmdbXSA9IFsnKi8qJ107XG5cdHByaXZhdGUgX2luaXRTdWJzPzogU3Vic2NyaXB0aW9uO1xuXHRwcml2YXRlIF9udW1iZXJPZkZpbGVzRHJhZ2dlZCA9IDA7XG5cblx0QFZpZXdDaGlsZCgnZmlsZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcblx0cHJpdmF0ZSBfZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIF9zZXJ2aWNlOiBGaWxlVXBsb2FkU2VydmljZSkge1xuXHRcdHRoaXMuX29uQ2hhbmdlKFtdKTtcblx0XHR0aGlzLl9vblRvdWNoKCk7XG5cdFx0dGhpcy5fZnJhbWVEbmRFbnRlciA9IHRoaXMuX29uRG5kRW50ZXJGcmFtZS5iaW5kKHRoaXMpO1xuXHRcdHRoaXMuX2ZyYW1lRG5kTGVhdmUgPSB0aGlzLl9vbkRuZExlYXZlRnJhbWUuYmluZCh0aGlzKTtcblx0XHR0aGlzLl9mcmFtZURuZFN0b3AgPSB0aGlzLl9vbkRuZFN0b3BGcmFtZS5iaW5kKHRoaXMpO1xuXHRcdHRoaXMuX2ZyYW1lRG5kT3ZlciA9IGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdH1cblxuXHQvKiogQGludGVybmFsICovXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuX2ZyYW1lRG5kRW50ZXIpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIHRoaXMuX2ZyYW1lRG5kTGVhdmUpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLl9mcmFtZURuZFN0b3ApO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLl9mcmFtZURuZFN0b3ApO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5fZnJhbWVEbmRPdmVyKTtcblx0XHR0aGlzLl9pdGVtQW5pbWF0aW9uU3RhcnQuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9pdGVtQW5pbWF0aW9uSW5Qcm9ncmVzcyA9IHRydWUpKTtcblx0XHR0aGlzLl9pdGVtQW5pbWF0aW9uRG9uZS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMuX2l0ZW1BbmltYXRpb25JblByb2dyZXNzID0gZmFsc2UpKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuX2ZyYW1lRG5kRW50ZXIpO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIHRoaXMuX2ZyYW1lRG5kTGVhdmUpO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLl9mcmFtZURuZFN0b3ApO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLl9mcmFtZURuZFN0b3ApO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5fZnJhbWVEbmRPdmVyKTtcblx0XHR0aGlzLl9pdGVtQW5pbWF0aW9uU3RhcnQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9pdGVtQW5pbWF0aW9uRG9uZS5jb21wbGV0ZSgpO1xuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHR3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHRcdFx0aWYgKCF0aGlzLl92YWx1ZSkge1xuXHRcdFx0XHR0aGlzLl9hY2NlcHRDaGFuZ2Uob2JqKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29tbW9uID0gb2JqLmZpbHRlcih2ID0+IHRoaXMuX3ZhbHVlIS5pbmNsdWRlcyh2KSk7XG5cdFx0XHRpZiAoY29tbW9uLmxlbmd0aCA9PT0gb2JqLmxlbmd0aCAmJiBjb21tb24ubGVuZ3RoID09PSB0aGlzLl92YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuOyAvLyBubyBjaGFuZ2Vcblx0XHRcdH1cblx0XHRcdHRoaXMuX2FjY2VwdENoYW5nZShvYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl92YWx1ZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLl9vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5fb25Ub3VjaCA9IGZuO1xuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRASG9zdExpc3RlbmVyKCdkcmFnZW50ZXInLCBbJyRldmVudCddKVxuXHRvbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR0aGlzLl9vdmVyQ291bnRlcisrO1xuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG5cdG9uRHJhZ092ZXIoZXZlbnQ6IEV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0fVxuXG5cdC8qKiBAaW50ZXJuYWwgKi9cblx0QEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcblx0b25EcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR0aGlzLl9vdmVyQ291bnRlci0tO1xuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcblx0b25EbmREcm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdHRoaXMuX29uRG5kU3RvcEZyYW1lKCk7XG5cdFx0Y29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuXHRcdGlmIChmaWxlcz8ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl91cGxvYWRGaWxlcyhBcnJheS5mcm9tKGZpbGVzKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIE9wZW4gdGhlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZyAqL1xuXHRzZWxlY3RGaWxlcygpIHtcblx0XHR0aGlzLl9maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X29wZW5JdGVtKGl0ZW06IFVwbG9hZGluZ0l0ZW0pIHtcblx0XHRpdGVtLmRvd25sb2FkaW5nU3VicyA9IHRoaXMuX3NlcnZpY2UuZ2V0KGl0ZW0udXBsb2FkZWRJdGVtIS5pZCkuc3Vic2NyaWJlKGJsb2IgPT4ge1xuXHRcdFx0Y29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0Z2V0IF9vdmVyRnJhbWUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX292ZXJGcmFtZUNvdW50ZXIgPiAwO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0Z2V0IF9vdmVyRHJvcFpvbmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX292ZXJDb3VudGVyID4gMDtcblx0fVxuXG5cdC8qKiBXaGV0aGVyIGZpbGUgdXBsb2FkaW5nIGlzIGluIHByb2dyZXNzICovXG5cdGdldCB1cGxvYWRpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX3VwbG9hZGluZ0l0ZW1zLnNvbWUoaSA9PiAhaS5kb25lKTtcblx0fVxuXG5cdC8qKiBUaGUgcmVtYWluaW5nIG51bWJlciBvZiBmaWxlcyBhbGxvd2VkLiovXG5cdGdldCByZW1haW5pbmcoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5saW1pdCA/IHRoaXMubGltaXQgLSB0aGlzLl91cGxvYWRpbmdJdGVtcy5sZW5ndGggOiBJbmZpbml0eTtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdF9oYW5kbGVGaWxlU2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGZpbGVMaXN0ID0gdGhpcy5fZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZmlsZXM7XG5cdFx0aWYgKGZpbGVMaXN0Py5sZW5ndGgpIHtcblx0XHRcdHRoaXMuX3VwbG9hZEZpbGVzKEFycmF5LmZyb20oZmlsZUxpc3QpKTtcblx0XHRcdHRoaXMuX2ZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0Z2V0IF9pbnZhbGlkRmlsZXNEcmFnZ2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9udW1iZXJPZkZpbGVzRHJhZ2dlZCA+IHRoaXMucmVtYWluaW5nICYmICh0aGlzLl9vdmVyRnJhbWUgfHwgdGhpcy5fb3ZlckRyb3Bab25lKTtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdGdldCBfaW5pdGlhbGlzaW5nKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2luaXRTdWJzICYmICF0aGlzLl9pbml0U3Vicy5jbG9zZWQ7XG5cdH1cblxuXHRwcml2YXRlIF91cGxvYWRGaWxlcyhmaWxlczogRmlsZVtdKSB7XG5cdFx0aWYgKHRoaXMuX2luaXRpYWxpc2luZyB8fCBmaWxlcy5sZW5ndGggPiB0aGlzLnJlbWFpbmluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBmaWx0ZXJlZCA9IGZpbGVzLmZpbHRlcihcblx0XHRcdGYgPT5cblx0XHRcdFx0KCFmLnR5cGUgfHwgdGhpcy5fdHlwZVJlZ0V4cHMuc29tZShyZWdleHAgPT4gZi50eXBlLm1hdGNoKHJlZ2V4cCkpKSAmJlxuXHRcdFx0XHQhdGhpcy5fdXBsb2FkaW5nSXRlbXMuc29tZShpID0+IGkubmFtZSA9PT0gZi5uYW1lKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb2JzZXJ2YWJsZXMgPSB0aGlzLl9zZXJ2aWNlLnVwbG9hZChmaWx0ZXJlZCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBmaWx0ZXJlZC5tYXAoXG5cdFx0XHQoZiwgaSkgPT4gbmV3IFVwbG9hZGluZ0l0ZW0ob2JzZXJ2YWJsZXNbaV0sIGYsIHRoaXMuX3VwZGF0ZUl0ZW1zLmJpbmQodGhpcyksIHRoaXMuX2RlbGV0ZUl0ZW0uYmluZCh0aGlzKSlcblx0XHQpO1xuXHRcdHRoaXMuX3VwbG9hZGluZ0l0ZW1zID0gWy4uLnRoaXMuX3VwbG9hZGluZ0l0ZW1zLCAuLi5pdGVtc107XG5cdH1cblxuXHRwcml2YXRlIF9vbkRuZEVudGVyRnJhbWUoZXZlbnQ6IERyYWdFdmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0dGhpcy5fbnVtYmVyT2ZGaWxlc0RyYWdnZWQgPSBldmVudC5kYXRhVHJhbnNmZXI/Lml0ZW1zPy5sZW5ndGggfHwgMDtcblx0XHR0aGlzLl9vdmVyRnJhbWVDb3VudGVyKys7XG5cdH1cblxuXHRwcml2YXRlIF9vbkRuZExlYXZlRnJhbWUoKSB7XG5cdFx0dGhpcy5fb3ZlckZyYW1lQ291bnRlci0tO1xuXHR9XG5cblx0cHJpdmF0ZSBfb25EbmRTdG9wRnJhbWUoKSB7XG5cdFx0dGhpcy5fb3ZlckZyYW1lQ291bnRlciA9IDA7XG5cdFx0dGhpcy5fb3ZlckNvdW50ZXIgPSAwO1xuXHR9XG5cblx0cHJpdmF0ZSBfYWNjZXB0Q2hhbmdlKHY6IHN0cmluZ1tdKSB7XG5cdFx0dGhpcy5faW5pdFN1YnMgPSB0aGlzLl9zZXJ2aWNlLmxpc3QoKS5zdWJzY3JpYmUobGlzdCA9PiB7XG5cdFx0XHR0aGlzLl91cGxvYWRpbmdJdGVtcyA9IGxpc3Rcblx0XHRcdFx0LmZpbHRlcihpID0+IHYuaW5jbHVkZXMoaS5pZCkpXG5cdFx0XHRcdC5tYXAoZiA9PiBuZXcgVXBsb2FkaW5nSXRlbShmLCB0aGlzLl9kZWxldGVJdGVtLmJpbmQodGhpcykpKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX3VwZGF0ZUl0ZW1zKCkge1xuXHRcdGNvbnN0IGNvbXBsZXRlZCA9IHRoaXMuX3VwbG9hZGluZ0l0ZW1zLmZpbHRlcihpID0+ICEhaS51cGxvYWRlZEl0ZW0pO1xuXHRcdHRoaXMuX3VwbG9hZGluZ0l0ZW1zID0gWy4uLmNvbXBsZXRlZCwgLi4udGhpcy5fdXBsb2FkaW5nSXRlbXMuZmlsdGVyKGkgPT4gIWkudXBsb2FkZWRJdGVtKV07XG5cdFx0dGhpcy5fdXBkYXRlVmFsdWUoY29tcGxldGVkKTtcblx0fVxuXG5cdHByaXZhdGUgX2RlbGV0ZUl0ZW0oaXRlbTogVXBsb2FkaW5nSXRlbSkge1xuXHRcdGNvbnN0IGtleSA9IGl0ZW0udXBsb2FkZWRJdGVtPy5pZDtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHR0aGlzLl9zZXJ2aWNlLmRlbGV0ZShrZXkpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3VwbG9hZGluZ0l0ZW1zID0gdGhpcy5fdXBsb2FkaW5nSXRlbXMuZmlsdGVyKGkgPT4gaSAhPT0gaXRlbSk7XG5cdFx0XHRcdGNvbnN0IGNvbXBsZXRlZCA9IHRoaXMuX3VwbG9hZGluZ0l0ZW1zLmZpbHRlcihpID0+ICEhaS51cGxvYWRlZEl0ZW0pO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVWYWx1ZShjb21wbGV0ZWQpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3VwbG9hZGluZ0l0ZW1zID0gdGhpcy5fdXBsb2FkaW5nSXRlbXMuZmlsdGVyKGkgPT4gaSAhPT0gaXRlbSk7XG5cdFx0XHRjb25zdCBjb21wbGV0ZWQgPSB0aGlzLl91cGxvYWRpbmdJdGVtcy5maWx0ZXIoaSA9PiAhIWkudXBsb2FkZWRJdGVtKTtcblx0XHRcdHRoaXMuX3VwZGF0ZVZhbHVlKGNvbXBsZXRlZCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfdXBkYXRlVmFsdWUoY29tcGxldGVkOiBVcGxvYWRpbmdJdGVtW10pIHtcblx0XHRjb25zdCBjb21wbGV0ZWRJZHMgPSBjb21wbGV0ZWQubWFwKGMgPT4gYy51cGxvYWRlZEl0ZW0hLmlkKTtcblx0XHR0aGlzLl92YWx1ZSA9IGNvbXBsZXRlZElkcztcblx0XHRpZiAoIXRoaXMuX3ZhbHVlLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5fdmFsdWUgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLl9vbkNoYW5nZShjb21wbGV0ZWRJZHMpO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYnVpLWZpbGUtdXBsb2FkLWNvbnRhaW5lclwiPlxuXHQ8ZGl2XG5cdFx0Y2xhc3M9XCJidWktZmlsZS11cGxvYWQtaGludFwiXG5cdFx0Km5nSWY9XCIhX2luaXRpYWxpc2luZyAmJiByZW1haW5pbmcgPiAwICYmICghX2l0ZW1BbmltYXRpb25JblByb2dyZXNzIHx8IHJlbWFpbmluZyA+IDEpXCJcblx0PlxuXHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJfaW52YWxpZEZpbGVzRHJhZ2dlZFwiIFtuZ0lmRWxzZV09XCJ2YWxpZERuZFwiPlxuXHRcdFx0PG1hdC1pY29uIFtidWlJY29uXT1cIidibG9jaydcIiBbc2l6ZV09XCIzMlwiIGNvbG9yPVwid2FyblwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHN0eWxlPVwib3BhY2l0eTogMC42XCI+PC9tYXQtaWNvbj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDxuZy10ZW1wbGF0ZSAjdmFsaWREbmQ+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiIV9vdmVyRnJhbWUgJiYgIV9vdmVyRHJvcFpvbmVcIiBjbGFzcz1cImJ1aS1jb2xvci1tdXRlZCBidWktdXBsb2FkLWljb24tbGlua1wiIChjbGljayk9XCJzZWxlY3RGaWxlcygpXCI+XG5cdFx0XHRcdDxtYXQtaWNvbiBbYnVpSWNvbl09XCInZmFzIGZhLWNsb3VkLXVwbG9hZC1hbHQnXCIgW3NpemVdPVwiMzJcIj48L21hdC1pY29uPlxuXHRcdFx0XHQ8YSByb2xlPVwiYnV0dG9uXCI+e3sgdXBsb2FkQWN0aW9uVGV4dCB9fTwvYT5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiAqbmdJZj1cIl9vdmVyRnJhbWUgJiYgIV9vdmVyRHJvcFpvbmVcIiBjbGFzcz1cImJ1aS1jb2xvci1saWdodFwiPnt7IGRyYWdIaW50IH19PC9kaXY+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiX292ZXJEcm9wWm9uZVwiIGNsYXNzPVwiYnVpLWNvbG9yLWxpZ2h0XCI+e3sgZHJvcEhpbnQgfX08L2Rpdj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdlxuXHRcdGNsYXNzPVwiYnVpLWZpbGUtdXBsb2FkLWxpc3RcIlxuXHRcdFtAc2xpZGVPdXRdPVwiX3VwbG9hZGluZ0l0ZW1zLmxlbmd0aFwiXG5cdFx0KEBzbGlkZU91dC5zdGFydCk9XCJfaXRlbUFuaW1hdGlvblN0YXJ0Lm5leHQoKVwiXG5cdFx0KEBzbGlkZU91dC5kb25lKT1cIl9pdGVtQW5pbWF0aW9uRG9uZS5uZXh0KClcIlxuXHRcdCpuZ0lmPVwiX3VwbG9hZGluZ0l0ZW1zLmxlbmd0aFwiXG5cdD5cblx0XHQ8c3BhbiBjbGFzcz1cImJ1aS1maWxlLXVwbG9hZGVkLWxhYmVsXCI+e3sgZmlsZVVwbG9hZGVkTGFiZWwgfX08L3NwYW4+XG5cblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF91cGxvYWRpbmdJdGVtczsgbGV0IGlkeCA9IGluZGV4XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiYnVpLWZpbGUtdXBsb2FkLWl0ZW1cIiBbY2xhc3MuaW4tcHJvZ3Jlc3NdPVwiIWl0ZW0uZG9uZVwiICNpdGVtRGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnVpLWZpbGUtdXBsb2FkLWl0ZW0tbmFtZVwiPlxuXHRcdFx0XHRcdDxzcGFuPlxuXHRcdFx0XHRcdFx0PG1hdC1pY29uIGNsYXNzPVwiYnVpLWNvbG9yLW11dGVkXCI+ZGVzY3JpcHRpb248L21hdC1pY29uPlxuXHRcdFx0XHRcdFx0PGFcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ0ZXh0XCJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJpdGVtLmRvbmUgJiYgIWl0ZW0uZG93bmxvYWRpbmc7IGVsc2Ugc3RhdGljTmFtZVwiXG5cdFx0XHRcdFx0XHRcdGhyZWY9XCIje3sgaXRlbS51cGxvYWRlZEl0ZW0/LmlkIH19XCJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBfb3Blbkl0ZW0oaXRlbSlcIlxuXHRcdFx0XHRcdFx0XHRjb250ZXh0bWVudT1cImZhbHNlXCJcblx0XHRcdFx0XHRcdFx0bWF0VG9vbHRpcD1cIkRvd25sb2FkXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3sgaXRlbS5uYW1lIH19XG5cdFx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI3N0YXRpY05hbWU+XG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dFwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidWktZmlsZS11cGxvYWQtaXRlbS1wcm9ncmVzc1wiPlxuXHRcdFx0XHRcdFx0PG1hdC1wcm9ncmVzcy1iYXJcblx0XHRcdFx0XHRcdFx0bW9kZT1cImRldGVybWluYXRlXCJcblx0XHRcdFx0XHRcdFx0W2NsYXNzLnVwbG9hZC1jb21wbGV0ZWRdPVwiaXRlbS5kb25lXCJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCIhaXRlbS5kb3dubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRcdFt2YWx1ZV09XCJpdGVtLmRvbmUgPyAxMDAgOiBpdGVtLnByb2dyZXNzICogMTAwXCJcblx0XHRcdFx0XHRcdD48L21hdC1wcm9ncmVzcy1iYXI+XG5cdFx0XHRcdFx0XHQ8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiYnVmZmVyXCIgKm5nSWY9XCJpdGVtLmRvd25sb2FkaW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuXHRcdFx0XHRcdFx0PHNwYW4+XG5cdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpdGVtLmRvbmVcIiBbbmdJZkVsc2VdPVwiaW5wcm9ncmVzc1wiPiAxMDAlIDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjaW5wcm9ncmVzcz5cblx0XHRcdFx0XHRcdFx0XHR7eyBpdGVtLnByb2dyZXNzIHwgcGVyY2VudCB9fVxuXHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImJ1aS1maWxlLXVwbG9hZC1pdGVtLWFjdGlvblwiPlxuXHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdG1hdC1pY29uLWJ1dHRvblxuXHRcdFx0XHRcdFx0Y29sb3I9XCJwcmltYXJ5XCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJpdGVtLmNhbmNlbCgpXCJcblx0XHRcdFx0XHRcdChtb3VzZWVudGVyKT1cIml0ZW1EaXYuY2xhc3NMaXN0LmFkZCgnYnVpLWZpbGUtdXBsb2FkLWl0ZW0tZGVsZXRpbmcnKVwiXG5cdFx0XHRcdFx0XHQobW91c2VsZWF2ZSk9XCJpdGVtRGl2LmNsYXNzTGlzdC5yZW1vdmUoJ2J1aS1maWxlLXVwbG9hZC1pdGVtLWRlbGV0aW5nJylcIlxuXHRcdFx0XHRcdFx0bWF0VG9vbHRpcD1cIkRlbGV0ZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PG1hdC1pY29uIFtidWlJY29uXT1cIidjYW5jZWwnXCIgc3R5bGU9XCJsaW5lLWhlaWdodDogMC45XCI+PC9tYXQtaWNvbj5cblx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxtYXQtZGl2aWRlciAqbmdJZj1cImlkeCA8IF91cGxvYWRpbmdJdGVtcy5sZW5ndGggLSAxXCI+PC9tYXQtZGl2aWRlcj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0PC9kaXY+XG5cdDxpbnB1dFxuXHRcdHR5cGU9XCJmaWxlXCJcblx0XHQjZmlsZUlucHV0XG5cdFx0c3R5bGU9XCJkaXNwbGF5OiBub25lXCJcblx0XHRhY2NlcHQ9XCJ7eyBfYWNjZXB0IH19XCJcblx0XHQoY2hhbmdlKT1cIl9oYW5kbGVGaWxlU2VsZWN0aW9uKClcIlxuXHRcdFttdWx0aXBsZV09XCJyZW1haW5pbmcgPiAxXCJcblx0Lz5cbjwvZGl2PlxuIl19
@@ -1,107 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, forwardRef, HostListener, ViewEncapsulation } from '@angular/core';
2
- import { MatFormField, matFormFieldAnimations, MAT_FORM_FIELD } from '@angular/material/form-field';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/cdk/observers";
6
- /** @ignore */
7
- const TYPE_REF = forwardRef(() => FormFieldComponent);
8
- /**
9
- * Container for form controls that applies Material Design styling and behavior.
10
- *
11
- * This component extends Angular Material's [mat-form-field](https://material.angular.io/components/form-field) and provides two additional appearances
12
- * `bound` and `detach`. `bound` renders the label outside the outlined area of the field, while `detach` remove the borders all together. `detach`
13
- * is generally used with form controls that render their own borders.
14
- */
15
- export class FormFieldComponent extends MatFormField {
16
- /**
17
- * @ignore
18
- */
19
- _shouldAlwaysFloat() {
20
- return super._shouldAlwaysFloat() || this._enhancedAppearance();
21
- }
22
- /**
23
- * @ignore
24
- */
25
- _borderClass() {
26
- if (this.appearance !== 'bound') {
27
- return 'bui-form-field-flex-default';
28
- }
29
- if (this._control.disabled) {
30
- return 'bui-form-field-border-disabled';
31
- }
32
- else if (this._control.errorState) {
33
- return 'bui-border-warn bui-form-field-border-thick';
34
- }
35
- else if (this._control.focused) {
36
- return `bui-border-${this.color || 'primary'} bui-form-field-border-thick`;
37
- }
38
- else {
39
- return 'bui-form-field-border-default bui-border-emphasis';
40
- }
41
- }
42
- /**
43
- * @ignore
44
- */
45
- _enhancedAppearance() {
46
- return this.appearance === 'detach' || this.appearance === 'bound';
47
- }
48
- /** @ignore */
49
- _hostClicked(event) {
50
- this._control.onContainerClick && this._control.onContainerClick(event);
51
- }
52
- get __defaults() {
53
- return this._defaults;
54
- }
55
- }
56
- FormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
57
- FormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FormFieldComponent, selector: "bui-form-field", inputs: { color: "color" }, host: { listeners: { "click": "_hostClicked($event)" }, properties: { "class.mat-form-field-appearance-standard": "appearance == \"standard\"", "class.mat-form-field-appearance-fill": "appearance == \"fill\"", "class.mat-form-field-appearance-outline": "appearance == \"outline\"", "class.mat-form-field-appearance-detach": "appearance == \"detach\"", "class.mat-form-field-appearance-bound": "appearance == \"bound\"", "class.mat-form-field-appearance-legacy": "appearance == \"legacy\"", "class.mat-form-field-invalid": "_control.errorState", "class.mat-form-field-can-float": "_canLabelFloat()", "class.mat-form-field-should-float": "_shouldLabelFloat()", "class.mat-form-field-has-label": "_hasFloatingLabel()", "class.mat-form-field-hide-placeholder": "_hideControlPlaceholder()", "class.mat-form-field-disabled": "_control.disabled", "class.mat-form-field-autofilled": "_control.autofilled", "class.mat-focused": "_control.focused", "class.ng-untouched": "_shouldForward(\"untouched\")", "class.ng-touched": "_shouldForward(\"touched\")", "class.ng-pristine": "_shouldForward(\"pristine\")", "class.ng-dirty": "_shouldForward(\"dirty\")", "class.ng-valid": "_shouldForward(\"valid\")", "class.ng-invalid": "_shouldForward(\"invalid\")", "class.ng-pending": "_shouldForward(\"pending\")", "class._mat-animation-noopable": "!_animationsEnabled" }, classAttribute: "mat-form-field bui-form-field bui-host" }, providers: [
58
- { provide: MAT_FORM_FIELD, useExisting: TYPE_REF },
59
- { provide: MatFormField, useExisting: TYPE_REF }
60
- ], exportAs: ["buiFormField"], usesInheritance: true, ngImport: i0, template: "<div class=\"mat-form-field-wrapper\">\n\t<div class=\"mat-form-field-flex {{ _borderClass() }}\" #connectionContainer>\n\t\t<!-- Outline used for outline appearance. -->\n\t\t<ng-container *ngIf=\"appearance == 'outline'\">\n\t\t\t<div class=\"mat-form-field-outline\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"mat-form-field-outline mat-form-field-outline-thick\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<div class=\"mat-form-field-prefix\" *ngIf=\"_prefixChildren.length\">\n\t\t\t<ng-content select=\"[matPrefix]\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"{{ _enhancedAppearance() ? 'bui-form-field-infix' : 'mat-form-field-infix' }}\" #inputContainer>\n\t\t\t<ng-content></ng-content>\n\n\t\t\t<span class=\"mat-form-field-label-wrapper\">\n\t\t\t\t<!-- We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n\t\t\t read if it comes before the control in the DOM. -->\n\t\t\t\t<label\n\t\t\t\t\tclass=\"mat-form-field-label\"\n\t\t\t\t\t(cdkObserveContent)=\"updateOutlineGap()\"\n\t\t\t\t\t[cdkObserveContentDisabled]=\"appearance != 'outline'\"\n\t\t\t\t\t[id]=\"_labelId\"\n\t\t\t\t\t[attr.for]=\"_control.id\"\n\t\t\t\t\t[attr.aria-owns]=\"_control.id\"\n\t\t\t\t\t[class.mat-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-form-field-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t\t\t\t[class.bui-bold-label]=\"__defaults?.boldLabel\"\n\t\t\t\t\t#label\n\t\t\t\t\t*ngIf=\"_hasFloatingLabel()\"\n\t\t\t\t\t[ngSwitch]=\"_hasLabel()\"\n\t\t\t\t>\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. -->\n\t\t\t\t\t<ng-container *ngSwitchCase=\"false\">\n\t\t\t\t\t\t<ng-content select=\"mat-placeholder\"></ng-content>\n\t\t\t\t\t\t<span>{{ _control.placeholder }}</span>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t<ng-content select=\"mat-label\" *ngSwitchCase=\"true\"></ng-content>\n\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class -->\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"mat-placeholder-required mat-form-field-required-marker\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t*ngIf=\"!hideRequiredMarker && _control.required && !_control.disabled\"\n\t\t\t\t\t\t>&#32;*</span\n\t\t\t\t\t>\n\t\t\t\t</label>\n\t\t\t</span>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-suffix\" *ngIf=\"_suffixChildren.length\">\n\t\t\t<ng-content select=\"[matSuffix]\"></ng-content>\n\t\t</div>\n\t</div>\n\n\t<!-- Underline used for legacy, standard, and box appearances. -->\n\t<div class=\"mat-form-field-underline\" #underline *ngIf=\"appearance != 'outline'\">\n\t\t<span\n\t\t\tclass=\"mat-form-field-ripple\"\n\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t></span>\n\t</div>\n\n\t<div class=\"mat-form-field-subscript-wrapper\" [ngSwitch]=\"_getDisplayedMessages()\" (click)=\"$event.stopPropagation()\">\n\t\t<div *ngSwitchCase=\"'error'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<ng-content select=\"mat-error\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* -->\n\t\t\t<div *ngIf=\"hintLabel\" [id]=\"_hintLabelId\" class=\"mat-hint\">{{ hintLabel }}</div>\n\t\t\t<ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n\t\t\t<div class=\"mat-form-field-hint-spacer\"></div>\n\t\t\t<ng-content select=\"mat-hint[align='end']\"></ng-content>\n\t\t</div>\n\t</div>\n</div>\n", styles: [".mat-form-field-appearance-bound{width:215px}.mat-form-field-appearance-bound .mat-form-field-flex{align-items:center;border-radius:4px;border-style:solid}.mat-form-field-appearance-bound .mat-form-field-flex:not(.bui-form-field-border-thick):not(:hover),.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-disabled{padding:8px;border-width:1px;margin:1px}.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-disabled{border-color:#80808033;border-style:dotted}.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-default{border-color:#80808066}.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-thick,.mat-form-field-appearance-bound .mat-form-field-flex.bui-border-emphasis:hover{border-width:2px;padding:8px 6px 8px 8px}.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-prefix .mat-icon,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-suffix .mat-icon{height:.667em!important;line-height:.667em}.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-prefix button[matsuffix],.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-prefix button.mat-icon-button,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-suffix button[matsuffix],.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-suffix button.mat-icon-button{display:flex;height:1em;width:1.5em}.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-prefix.mat-datepicker-toggle,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-prefix .mat-datepicker-toggle,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-suffix.mat-datepicker-toggle,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-suffix .mat-datepicker-toggle{display:flex;align-items:center;justify-content:center;width:1.5em;height:1em}.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-prefix.mat-datepicker-toggle .mat-icon-button,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-prefix .mat-datepicker-toggle .mat-icon-button,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-suffix.mat-datepicker-toggle .mat-icon-button,.mat-form-field-appearance-bound .mat-form-field-flex .mat-form-field-suffix .mat-datepicker-toggle .mat-icon-button{width:2em;height:2em}.mat-form-field-appearance-detach,.mat-form-field-appearance-bound{padding-top:.75em}.mat-form-field-appearance-detach .mat-form-field-wrapper,.mat-form-field-appearance-bound .mat-form-field-wrapper{padding-top:.5em}.mat-form-field-appearance-detach .bui-form-field-infix,.mat-form-field-appearance-bound .bui-form-field-infix{flex-grow:1}.mat-form-field-appearance-detach .mat-form-field-label,.mat-form-field-appearance-bound .mat-form-field-label{font-size:1.125em}.mat-form-field-appearance-detach .mat-form-field-flex,.mat-form-field-appearance-bound .mat-form-field-flex{align-items:center}.mat-form-field-appearance-detach .mat-form-field-flex{padding:.125em 0;align-items:center}.bui-form-field .bui-bold-label{font-weight:bold}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [matFormFieldAnimations.transitionMessages], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormFieldComponent, decorators: [{
62
- type: Component,
63
- args: [{
64
- selector: 'bui-form-field',
65
- exportAs: 'buiFormField',
66
- templateUrl: 'form-field.component.html',
67
- styleUrls: ['./form-field.component.scss'],
68
- animations: [matFormFieldAnimations.transitionMessages],
69
- host: {
70
- class: 'mat-form-field bui-form-field bui-host',
71
- '[class.mat-form-field-appearance-standard]': 'appearance == "standard"',
72
- '[class.mat-form-field-appearance-fill]': 'appearance == "fill"',
73
- '[class.mat-form-field-appearance-outline]': 'appearance == "outline"',
74
- '[class.mat-form-field-appearance-detach]': 'appearance == "detach"',
75
- '[class.mat-form-field-appearance-bound]': 'appearance == "bound"',
76
- '[class.mat-form-field-appearance-legacy]': 'appearance == "legacy"',
77
- '[class.mat-form-field-invalid]': '_control.errorState',
78
- '[class.mat-form-field-can-float]': '_canLabelFloat()',
79
- '[class.mat-form-field-should-float]': '_shouldLabelFloat()',
80
- '[class.mat-form-field-has-label]': '_hasFloatingLabel()',
81
- '[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',
82
- '[class.mat-form-field-disabled]': '_control.disabled',
83
- '[class.mat-form-field-autofilled]': '_control.autofilled',
84
- '[class.mat-focused]': '_control.focused',
85
- '[class.ng-untouched]': '_shouldForward("untouched")',
86
- '[class.ng-touched]': '_shouldForward("touched")',
87
- '[class.ng-pristine]': '_shouldForward("pristine")',
88
- '[class.ng-dirty]': '_shouldForward("dirty")',
89
- '[class.ng-valid]': '_shouldForward("valid")',
90
- '[class.ng-invalid]': '_shouldForward("invalid")',
91
- '[class.ng-pending]': '_shouldForward("pending")',
92
- '[class._mat-animation-noopable]': '!_animationsEnabled'
93
- },
94
- inputs: ['color'],
95
- encapsulation: ViewEncapsulation.None,
96
- changeDetection: ChangeDetectionStrategy.OnPush,
97
- providers: [
98
- { provide: MAT_FORM_FIELD, useExisting: TYPE_REF },
99
- { provide: MatFormField, useExisting: TYPE_REF }
100
- ]
101
- }]
102
- }], propDecorators: { _hostClicked: [{
103
- type: HostListener,
104
- args: ['click', ['$event']]
105
- }] } });
106
- FormFieldComponent.ɵcmp.styles.push(MatFormField.ɵcmp.styles);
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQ04sWUFBWSxFQUNaLHNCQUFzQixFQUV0QixjQUFjLEVBQ2QsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQUV0QyxjQUFjO0FBQ2QsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFhdEQ7Ozs7OztHQU1HO0FBd0NILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxZQUFZO0lBQ25EOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2pCLE9BQU8sS0FBSyxDQUFDLGtCQUFrQixFQUFFLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNYLElBQUssSUFBSSxDQUFDLFVBQWtCLEtBQUssT0FBTyxFQUFFO1lBQ3pDLE9BQU8sNkJBQTZCLENBQUM7U0FDckM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQzNCLE9BQU8sZ0NBQWdDLENBQUM7U0FDeEM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ3BDLE9BQU8sNkNBQTZDLENBQUM7U0FDckQ7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ2pDLE9BQU8sY0FBYyxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsOEJBQThCLENBQUM7U0FDM0U7YUFBTTtZQUNOLE9BQU8sbURBQW1ELENBQUM7U0FDM0Q7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDbEIsT0FBUSxJQUFJLENBQUMsVUFBa0IsS0FBSyxRQUFRLElBQUssSUFBSSxDQUFDLFVBQWtCLEtBQUssT0FBTyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxjQUFjO0lBRWQsWUFBWSxDQUFDLEtBQWlCO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ2IsT0FBUSxJQUFZLENBQUMsU0FBUyxDQUFDO0lBQ2hDLENBQUM7O2dIQXpDVyxrQkFBa0I7b0dBQWxCLGtCQUFrQix5OENBTG5CO1FBQ1YsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUU7UUFDbEQsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUU7S0FDaEQsNkVDbEVGLG85SEF5RkEsaWlIRHZEYSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDOzRGQWtDM0Msa0JBQWtCO2tCQXZDOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsV0FBVyxFQUFFLDJCQUEyQjtvQkFDeEMsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7b0JBQzFDLFVBQVUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDO29CQUN2RCxJQUFJLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLHdDQUF3Qzt3QkFDL0MsNENBQTRDLEVBQUUsMEJBQTBCO3dCQUN4RSx3Q0FBd0MsRUFBRSxzQkFBc0I7d0JBQ2hFLDJDQUEyQyxFQUFFLHlCQUF5Qjt3QkFDdEUsMENBQTBDLEVBQUUsd0JBQXdCO3dCQUNwRSx5Q0FBeUMsRUFBRSx1QkFBdUI7d0JBQ2xFLDBDQUEwQyxFQUFFLHdCQUF3Qjt3QkFDcEUsZ0NBQWdDLEVBQUUscUJBQXFCO3dCQUN2RCxrQ0FBa0MsRUFBRSxrQkFBa0I7d0JBQ3RELHFDQUFxQyxFQUFFLHFCQUFxQjt3QkFDNUQsa0NBQWtDLEVBQUUscUJBQXFCO3dCQUN6RCx5Q0FBeUMsRUFBRSwyQkFBMkI7d0JBQ3RFLGlDQUFpQyxFQUFFLG1CQUFtQjt3QkFDdEQsbUNBQW1DLEVBQUUscUJBQXFCO3dCQUMxRCxxQkFBcUIsRUFBRSxrQkFBa0I7d0JBQ3pDLHNCQUFzQixFQUFFLDZCQUE2Qjt3QkFDckQsb0JBQW9CLEVBQUUsMkJBQTJCO3dCQUNqRCxxQkFBcUIsRUFBRSw0QkFBNEI7d0JBQ25ELGtCQUFrQixFQUFFLHlCQUF5Qjt3QkFDN0Msa0JBQWtCLEVBQUUseUJBQXlCO3dCQUM3QyxvQkFBb0IsRUFBRSwyQkFBMkI7d0JBQ2pELG9CQUFvQixFQUFFLDJCQUEyQjt3QkFDakQsaUNBQWlDLEVBQUUscUJBQXFCO3FCQUN4RDtvQkFDRCxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2pCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsU0FBUyxFQUFFO3dCQUNWLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFO3dCQUNsRCxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRTtxQkFDaEQ7aUJBQ0Q7OEJBb0NBLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBVWpDLGtCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLFlBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0TWF0Rm9ybUZpZWxkLFxuXHRtYXRGb3JtRmllbGRBbmltYXRpb25zLFxuXHRNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucyxcblx0TUFUX0ZPUk1fRklFTERcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5cbi8qKiBAaWdub3JlICovXG5jb25zdCBUWVBFX1JFRiA9IGZvcndhcmRSZWYoKCkgPT4gRm9ybUZpZWxkQ29tcG9uZW50KTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBmb3JtIGZpZWxkIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWRcbiAqIHVzaW5nIHRoZSBgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TYCBpbmplY3Rpb24gdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpRm9ybUZpZWxkRGVmYXVsdE9wdGlvbnMgZXh0ZW5kcyBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBSZW5kZXIgbGFiZWxzIGluYiBib2xkIGZvbnRzXG5cdCAqIEBkZWZhdWx0IGZhbHNlXG5cdCAqL1xuXHRib2xkTGFiZWw/OiBib29sZWFuO1xufVxuLyoqXG4gKiBDb250YWluZXIgZm9yIGZvcm0gY29udHJvbHMgdGhhdCBhcHBsaWVzIE1hdGVyaWFsIERlc2lnbiBzdHlsaW5nIGFuZCBiZWhhdmlvci5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBleHRlbmRzIEFuZ3VsYXIgTWF0ZXJpYWwncyBbbWF0LWZvcm0tZmllbGRdKGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9jb21wb25lbnRzL2Zvcm0tZmllbGQpIGFuZCBwcm92aWRlcyB0d28gYWRkaXRpb25hbCBhcHBlYXJhbmNlc1xuICogYGJvdW5kYCBhbmQgYGRldGFjaGAuIGBib3VuZGAgcmVuZGVycyB0aGUgbGFiZWwgb3V0c2lkZSB0aGUgb3V0bGluZWQgYXJlYSBvZiB0aGUgZmllbGQsIHdoaWxlIGBkZXRhY2hgIHJlbW92ZSB0aGUgYm9yZGVycyBhbGwgdG9nZXRoZXIuIGBkZXRhY2hgXG4gKiBpcyBnZW5lcmFsbHkgdXNlZCB3aXRoIGZvcm0gY29udHJvbHMgdGhhdCByZW5kZXIgdGhlaXIgb3duIGJvcmRlcnMuXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2J1aS1mb3JtLWZpZWxkJyxcblx0ZXhwb3J0QXM6ICdidWlGb3JtRmllbGQnLFxuXHR0ZW1wbGF0ZVVybDogJ2Zvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG5cdGFuaW1hdGlvbnM6IFttYXRGb3JtRmllbGRBbmltYXRpb25zLnRyYW5zaXRpb25NZXNzYWdlc10sXG5cdGhvc3Q6IHtcblx0XHRjbGFzczogJ21hdC1mb3JtLWZpZWxkIGJ1aS1mb3JtLWZpZWxkIGJ1aS1ob3N0Jyxcblx0XHQnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmRdJzogJ2FwcGVhcmFuY2UgPT0gXCJzdGFuZGFyZFwiJyxcblx0XHQnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbF0nOiAnYXBwZWFyYW5jZSA9PSBcImZpbGxcIicsXG5cdFx0J1tjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVdJzogJ2FwcGVhcmFuY2UgPT0gXCJvdXRsaW5lXCInLFxuXHRcdCdbY2xhc3MubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1kZXRhY2hdJzogJ2FwcGVhcmFuY2UgPT0gXCJkZXRhY2hcIicsXG5cdFx0J1tjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWJvdW5kXSc6ICdhcHBlYXJhbmNlID09IFwiYm91bmRcIicsXG5cdFx0J1tjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeV0nOiAnYXBwZWFyYW5jZSA9PSBcImxlZ2FjeVwiJyxcblx0XHQnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWludmFsaWRdJzogJ19jb250cm9sLmVycm9yU3RhdGUnLFxuXHRcdCdbY2xhc3MubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0XSc6ICdfY2FuTGFiZWxGbG9hdCgpJyxcblx0XHQnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdF0nOiAnX3Nob3VsZExhYmVsRmxvYXQoKScsXG5cdFx0J1tjbGFzcy5tYXQtZm9ybS1maWVsZC1oYXMtbGFiZWxdJzogJ19oYXNGbG9hdGluZ0xhYmVsKCknLFxuXHRcdCdbY2xhc3MubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlcl0nOiAnX2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKScsXG5cdFx0J1tjbGFzcy5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZF0nOiAnX2NvbnRyb2wuZGlzYWJsZWQnLFxuXHRcdCdbY2xhc3MubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGxlZF0nOiAnX2NvbnRyb2wuYXV0b2ZpbGxlZCcsXG5cdFx0J1tjbGFzcy5tYXQtZm9jdXNlZF0nOiAnX2NvbnRyb2wuZm9jdXNlZCcsXG5cdFx0J1tjbGFzcy5uZy11bnRvdWNoZWRdJzogJ19zaG91bGRGb3J3YXJkKFwidW50b3VjaGVkXCIpJyxcblx0XHQnW2NsYXNzLm5nLXRvdWNoZWRdJzogJ19zaG91bGRGb3J3YXJkKFwidG91Y2hlZFwiKScsXG5cdFx0J1tjbGFzcy5uZy1wcmlzdGluZV0nOiAnX3Nob3VsZEZvcndhcmQoXCJwcmlzdGluZVwiKScsXG5cdFx0J1tjbGFzcy5uZy1kaXJ0eV0nOiAnX3Nob3VsZEZvcndhcmQoXCJkaXJ0eVwiKScsXG5cdFx0J1tjbGFzcy5uZy12YWxpZF0nOiAnX3Nob3VsZEZvcndhcmQoXCJ2YWxpZFwiKScsXG5cdFx0J1tjbGFzcy5uZy1pbnZhbGlkXSc6ICdfc2hvdWxkRm9yd2FyZChcImludmFsaWRcIiknLFxuXHRcdCdbY2xhc3MubmctcGVuZGluZ10nOiAnX3Nob3VsZEZvcndhcmQoXCJwZW5kaW5nXCIpJyxcblx0XHQnW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSc6ICchX2FuaW1hdGlvbnNFbmFibGVkJ1xuXHR9LFxuXHRpbnB1dHM6IFsnY29sb3InXSxcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdHByb3ZpZGVyczogW1xuXHRcdHsgcHJvdmlkZTogTUFUX0ZPUk1fRklFTEQsIHVzZUV4aXN0aW5nOiBUWVBFX1JFRiB9LFxuXHRcdHsgcHJvdmlkZTogTWF0Rm9ybUZpZWxkLCB1c2VFeGlzdGluZzogVFlQRV9SRUYgfVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudCBleHRlbmRzIE1hdEZvcm1GaWVsZCB7XG5cdC8qKlxuXHQgKiBAaWdub3JlXG5cdCAqL1xuXHRfc2hvdWxkQWx3YXlzRmxvYXQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHN1cGVyLl9zaG91bGRBbHdheXNGbG9hdCgpIHx8IHRoaXMuX2VuaGFuY2VkQXBwZWFyYW5jZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpZ25vcmVcblx0ICovXG5cdF9ib3JkZXJDbGFzcygpOiBzdHJpbmcge1xuXHRcdGlmICgodGhpcy5hcHBlYXJhbmNlIGFzIGFueSkgIT09ICdib3VuZCcpIHtcblx0XHRcdHJldHVybiAnYnVpLWZvcm0tZmllbGQtZmxleC1kZWZhdWx0Jztcblx0XHR9XG5cdFx0aWYgKHRoaXMuX2NvbnRyb2wuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiAnYnVpLWZvcm0tZmllbGQtYm9yZGVyLWRpc2FibGVkJztcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZSkge1xuXHRcdFx0cmV0dXJuICdidWktYm9yZGVyLXdhcm4gYnVpLWZvcm0tZmllbGQtYm9yZGVyLXRoaWNrJztcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2NvbnRyb2wuZm9jdXNlZCkge1xuXHRcdFx0cmV0dXJuIGBidWktYm9yZGVyLSR7dGhpcy5jb2xvciB8fCAncHJpbWFyeSd9IGJ1aS1mb3JtLWZpZWxkLWJvcmRlci10aGlja2A7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAnYnVpLWZvcm0tZmllbGQtYm9yZGVyLWRlZmF1bHQgYnVpLWJvcmRlci1lbXBoYXNpcyc7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBpZ25vcmVcblx0ICovXG5cdF9lbmhhbmNlZEFwcGVhcmFuY2UoKSB7XG5cdFx0cmV0dXJuICh0aGlzLmFwcGVhcmFuY2UgYXMgYW55KSA9PT0gJ2RldGFjaCcgfHwgKHRoaXMuYXBwZWFyYW5jZSBhcyBhbnkpID09PSAnYm91bmQnO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0QEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuXHRfaG9zdENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcblx0XHR0aGlzLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sgJiYgdGhpcy5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKGV2ZW50KTtcblx0fVxuXG5cdGdldCBfX2RlZmF1bHRzKCkge1xuXHRcdHJldHVybiAodGhpcyBhcyBhbnkpLl9kZWZhdWx0cztcblx0fVxufVxuXG4oRm9ybUZpZWxkQ29tcG9uZW50IGFzIGFueSkuybVjbXAuc3R5bGVzLnB1c2goKE1hdEZvcm1GaWVsZCBhcyBhbnkpLsm1Y21wLnN0eWxlcyk7XG4iLCI8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtd3JhcHBlclwiPlxuXHQ8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZmxleCB7eyBfYm9yZGVyQ2xhc3MoKSB9fVwiICNjb25uZWN0aW9uQ29udGFpbmVyPlxuXHRcdDwhLS0gT3V0bGluZSB1c2VkIGZvciBvdXRsaW5lIGFwcGVhcmFuY2UuIC0tPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBlYXJhbmNlID09ICdvdXRsaW5lJ1wiPlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLW91dGxpbmVcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnRcIj48L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZFwiPjwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtb3V0bGluZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0XCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcFwiPjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmRcIj48L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLXByZWZpeFwiICpuZ0lmPVwiX3ByZWZpeENoaWxkcmVuLmxlbmd0aFwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwie3sgX2VuaGFuY2VkQXBwZWFyYW5jZSgpID8gJ2J1aS1mb3JtLWZpZWxkLWluZml4JyA6ICdtYXQtZm9ybS1maWVsZC1pbmZpeCcgfX1cIiAjaW5wdXRDb250YWluZXI+XG5cdFx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cblx0XHRcdDxzcGFuIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclwiPlxuXHRcdFx0XHQ8IS0tIFdlIGFkZCBhcmlhLW93bnMgYXMgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBKQVdTICYgTlZEQSB3aGVyZSB0aGUgbGFiZWwgaXNuJ3Rcblx0XHRcdCAgIHJlYWQgaWYgaXQgY29tZXMgYmVmb3JlIHRoZSBjb250cm9sIGluIHRoZSBET00uIC0tPlxuXHRcdFx0XHQ8bGFiZWxcblx0XHRcdFx0XHRjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWxhYmVsXCJcblx0XHRcdFx0XHQoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwidXBkYXRlT3V0bGluZUdhcCgpXCJcblx0XHRcdFx0XHRbY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZF09XCJhcHBlYXJhbmNlICE9ICdvdXRsaW5lJ1wiXG5cdFx0XHRcdFx0W2lkXT1cIl9sYWJlbElkXCJcblx0XHRcdFx0XHRbYXR0ci5mb3JdPVwiX2NvbnRyb2wuaWRcIlxuXHRcdFx0XHRcdFthdHRyLmFyaWEtb3duc109XCJfY29udHJvbC5pZFwiXG5cdFx0XHRcdFx0W2NsYXNzLm1hdC1lbXB0eV09XCJfY29udHJvbC5lbXB0eSAmJiAhX3Nob3VsZEFsd2F5c0Zsb2F0KClcIlxuXHRcdFx0XHRcdFtjbGFzcy5tYXQtZm9ybS1maWVsZC1lbXB0eV09XCJfY29udHJvbC5lbXB0eSAmJiAhX3Nob3VsZEFsd2F5c0Zsb2F0KClcIlxuXHRcdFx0XHRcdFtjbGFzcy5tYXQtYWNjZW50XT1cImNvbG9yID09ICdhY2NlbnQnXCJcblx0XHRcdFx0XHRbY2xhc3MubWF0LXdhcm5dPVwiY29sb3IgPT0gJ3dhcm4nXCJcblx0XHRcdFx0XHRbY2xhc3MuYnVpLWJvbGQtbGFiZWxdPVwiX19kZWZhdWx0cz8uYm9sZExhYmVsXCJcblx0XHRcdFx0XHQjbGFiZWxcblx0XHRcdFx0XHQqbmdJZj1cIl9oYXNGbG9hdGluZ0xhYmVsKClcIlxuXHRcdFx0XHRcdFtuZ1N3aXRjaF09XCJfaGFzTGFiZWwoKVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8IS0tIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgcmVtb3ZlIGluIGZhdm9yIG9mIG1hdC1sYWJlbCBlbGVtZW50IGFuIHBsYWNlaG9sZGVyIGF0dHIuIC0tPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCI+XG5cdFx0XHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtcGxhY2Vob2xkZXJcIj48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdFx0XHQ8c3Bhbj57eyBfY29udHJvbC5wbGFjZWhvbGRlciB9fTwvc3Bhbj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblxuXHRcdFx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1sYWJlbFwiICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+PC9uZy1jb250ZW50PlxuXG5cdFx0XHRcdFx0PCEtLSBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHJlbW92ZSBgbWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkYCBjbGFzcyAtLT5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWQgbWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyXCJcblx0XHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHQqbmdJZj1cIiFoaWRlUmVxdWlyZWRNYXJrZXIgJiYgX2NvbnRyb2wucmVxdWlyZWQgJiYgIV9jb250cm9sLmRpc2FibGVkXCJcblx0XHRcdFx0XHRcdD4mIzMyOyo8L3NwYW5cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtc3VmZml4XCIgKm5nSWY9XCJfc3VmZml4Q2hpbGRyZW4ubGVuZ3RoXCI+XG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cblx0PCEtLSBVbmRlcmxpbmUgdXNlZCBmb3IgbGVnYWN5LCBzdGFuZGFyZCwgYW5kIGJveCBhcHBlYXJhbmNlcy4gLS0+XG5cdDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmVcIiAjdW5kZXJsaW5lICpuZ0lmPVwiYXBwZWFyYW5jZSAhPSAnb3V0bGluZSdcIj5cblx0XHQ8c3BhblxuXHRcdFx0Y2xhc3M9XCJtYXQtZm9ybS1maWVsZC1yaXBwbGVcIlxuXHRcdFx0W2NsYXNzLm1hdC1hY2NlbnRdPVwiY29sb3IgPT0gJ2FjY2VudCdcIlxuXHRcdFx0W2NsYXNzLm1hdC13YXJuXT1cImNvbG9yID09ICd3YXJuJ1wiXG5cdFx0Pjwvc3Bhbj5cblx0PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyXCIgW25nU3dpdGNoXT1cIl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXHRcdDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidlcnJvcidcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJfc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIj5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvclwiPjwvbmctY29udGVudD5cblx0XHQ8L2Rpdj5cblxuXHRcdDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIiAqbmdTd2l0Y2hDYXNlPVwiJ2hpbnQnXCIgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwiX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCI+XG5cdFx0XHQ8IS0tIFRPRE8obW1hbGVyYmEpOiB1c2UgYW4gYWN0dWFsIDxtYXQtaGludD4gb25jZSBhbGwgc2VsZWN0b3JzIGFyZSBzd2l0Y2hlZCB0byBtYXQtKiAtLT5cblx0XHRcdDxkaXYgKm5nSWY9XCJoaW50TGFiZWxcIiBbaWRdPVwiX2hpbnRMYWJlbElkXCIgY2xhc3M9XCJtYXQtaGludFwiPnt7IGhpbnRMYWJlbCB9fTwvZGl2PlxuXHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyXCI+PC9kaXY+XG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=