@kaspernj/api-maker 1.0.2053 → 1.0.2055

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 (948) hide show
  1. package/build/api.d.ts +19 -0
  2. package/build/api.d.ts.map +1 -0
  3. package/build/api.js +77 -109
  4. package/build/api.js.map +1 -0
  5. package/build/attribute-not-loaded-error.d.ts +3 -0
  6. package/build/attribute-not-loaded-error.d.ts.map +1 -0
  7. package/build/attribute-not-loaded-error.js +3 -2
  8. package/build/attribute-not-loaded-error.js.map +1 -0
  9. package/build/base-component.d.ts +4 -0
  10. package/build/base-component.d.ts.map +1 -0
  11. package/build/base-component.js +2 -3
  12. package/build/base-component.js.map +1 -0
  13. package/build/base-error.d.ts +31 -0
  14. package/build/base-error.d.ts.map +1 -0
  15. package/build/base-error.js +44 -26
  16. package/build/base-error.js.map +1 -0
  17. package/build/base-model/attribute.d.ts +45 -0
  18. package/build/base-model/attribute.d.ts.map +1 -0
  19. package/build/base-model/attribute.js +49 -22
  20. package/build/base-model/attribute.js.map +1 -0
  21. package/build/base-model/column.d.ts +17 -0
  22. package/build/base-model/column.d.ts.map +1 -0
  23. package/build/base-model/column.js +15 -8
  24. package/build/base-model/column.js.map +1 -0
  25. package/build/base-model/reflection.d.ts +22 -0
  26. package/build/base-model/reflection.d.ts.map +1 -0
  27. package/build/base-model/reflection.js +22 -10
  28. package/build/base-model/reflection.js.map +1 -0
  29. package/build/base-model/scope.d.ts +9 -0
  30. package/build/base-model/scope.d.ts.map +1 -0
  31. package/build/base-model/scope.js +10 -7
  32. package/build/base-model/scope.js.map +1 -0
  33. package/build/base-model.js +1020 -812
  34. package/build/base-model.js.map +1 -0
  35. package/build/bootstrap/attribute-row.d.ts +3 -0
  36. package/build/bootstrap/attribute-row.d.ts.map +1 -0
  37. package/build/bootstrap/attribute-row.js +84 -123
  38. package/build/bootstrap/attribute-row.js.map +1 -0
  39. package/build/bootstrap/attribute-rows.d.ts +3 -0
  40. package/build/bootstrap/attribute-rows.d.ts.map +1 -0
  41. package/build/bootstrap/attribute-rows.js +17 -25
  42. package/build/bootstrap/attribute-rows.js.map +1 -0
  43. package/build/bootstrap/card.d.ts +3 -0
  44. package/build/bootstrap/card.d.ts.map +1 -0
  45. package/build/bootstrap/card.js +74 -129
  46. package/build/bootstrap/card.js.map +1 -0
  47. package/build/bootstrap/checkbox.d.ts +3 -0
  48. package/build/bootstrap/checkbox.d.ts.map +1 -0
  49. package/build/bootstrap/checkbox.js +49 -90
  50. package/build/bootstrap/checkbox.js.map +1 -0
  51. package/build/bootstrap/checkboxes.d.ts +3 -0
  52. package/build/bootstrap/checkboxes.d.ts.map +1 -0
  53. package/build/bootstrap/checkboxes.js +107 -167
  54. package/build/bootstrap/checkboxes.js.map +1 -0
  55. package/build/bootstrap/index.d.ts +1 -0
  56. package/build/bootstrap/index.d.ts.map +1 -0
  57. package/build/bootstrap/index.js +1 -2
  58. package/build/bootstrap/index.js.map +1 -0
  59. package/build/bootstrap/input.d.ts +3 -0
  60. package/build/bootstrap/input.d.ts.map +1 -0
  61. package/build/bootstrap/input.js +73 -118
  62. package/build/bootstrap/input.js.map +1 -0
  63. package/build/bootstrap/invalid-feedback.d.ts +6 -0
  64. package/build/bootstrap/invalid-feedback.d.ts.map +1 -0
  65. package/build/bootstrap/invalid-feedback.js +17 -20
  66. package/build/bootstrap/invalid-feedback.js.map +1 -0
  67. package/build/bootstrap/paginate.d.ts +3 -0
  68. package/build/bootstrap/paginate.d.ts.map +1 -0
  69. package/build/bootstrap/paginate.js +88 -136
  70. package/build/bootstrap/paginate.js.map +1 -0
  71. package/build/bootstrap/radio-buttons.d.ts +3 -0
  72. package/build/bootstrap/radio-buttons.d.ts.map +1 -0
  73. package/build/bootstrap/radio-buttons.js +44 -64
  74. package/build/bootstrap/radio-buttons.js.map +1 -0
  75. package/build/bootstrap/select.d.ts +3 -0
  76. package/build/bootstrap/select.d.ts.map +1 -0
  77. package/build/bootstrap/select.js +49 -81
  78. package/build/bootstrap/select.js.map +1 -0
  79. package/build/bootstrap/sort-link.d.ts +3 -0
  80. package/build/bootstrap/sort-link.d.ts.map +1 -0
  81. package/build/bootstrap/sort-link.js +62 -121
  82. package/build/bootstrap/sort-link.js.map +1 -0
  83. package/build/cable-connection-pool.d.ts +27 -0
  84. package/build/cable-connection-pool.d.ts.map +1 -0
  85. package/build/cable-connection-pool.js +90 -117
  86. package/build/cable-connection-pool.js.map +1 -0
  87. package/build/cable-subscription-pool.d.ts +16 -0
  88. package/build/cable-subscription-pool.d.ts.map +1 -0
  89. package/build/cable-subscription-pool.js +146 -191
  90. package/build/cable-subscription-pool.js.map +1 -0
  91. package/build/cable-subscription.d.ts +7 -0
  92. package/build/cable-subscription.d.ts.map +1 -0
  93. package/build/cable-subscription.js +15 -17
  94. package/build/cable-subscription.js.map +1 -0
  95. package/build/cache-key-generator.d.ts +15 -0
  96. package/build/cache-key-generator.d.ts.map +1 -0
  97. package/build/cache-key-generator.js +69 -70
  98. package/build/cache-key-generator.js.map +1 -0
  99. package/build/can-can.d.ts +19 -0
  100. package/build/can-can.d.ts.map +1 -0
  101. package/build/can-can.js +113 -119
  102. package/build/can-can.js.map +1 -0
  103. package/build/channels-consumer.d.ts +3 -0
  104. package/build/channels-consumer.d.ts.map +1 -0
  105. package/build/channels-consumer.js +6 -6
  106. package/build/channels-consumer.js.map +1 -0
  107. package/build/collection-loader.d.ts +3 -0
  108. package/build/collection-loader.d.ts.map +1 -0
  109. package/build/collection-loader.js +46 -40
  110. package/build/collection-loader.js.map +1 -0
  111. package/build/collection.d.ts +213 -0
  112. package/build/collection.d.ts.map +1 -0
  113. package/build/collection.js +442 -303
  114. package/build/collection.js.map +1 -0
  115. package/build/command-submit-data.d.ts +54 -0
  116. package/build/command-submit-data.d.ts.map +1 -0
  117. package/build/command-submit-data.js +108 -71
  118. package/build/command-submit-data.js.map +1 -0
  119. package/build/commands-pool.d.ts +63 -0
  120. package/build/commands-pool.d.ts.map +1 -0
  121. package/build/commands-pool.js +197 -181
  122. package/build/commands-pool.js.map +1 -0
  123. package/build/compose.d.ts +2 -0
  124. package/build/compose.d.ts.map +1 -0
  125. package/build/compose.js +8 -7
  126. package/build/compose.js.map +1 -0
  127. package/build/config.d.ts +9 -0
  128. package/build/config.d.ts.map +1 -0
  129. package/build/config.js +51 -63
  130. package/build/config.js.map +1 -0
  131. package/build/custom-error.d.ts +8 -0
  132. package/build/custom-error.d.ts.map +1 -0
  133. package/build/custom-error.js +4 -3
  134. package/build/custom-error.js.map +1 -0
  135. package/build/data-set-to-attributes.d.ts +2 -0
  136. package/build/data-set-to-attributes.d.ts.map +1 -0
  137. package/build/data-set-to-attributes.js +7 -7
  138. package/build/data-set-to-attributes.js.map +1 -0
  139. package/build/deserializer.d.ts +4 -0
  140. package/build/deserializer.d.ts.map +1 -0
  141. package/build/deserializer.js +51 -49
  142. package/build/deserializer.js.map +1 -0
  143. package/build/destroy-error.d.ts +8 -0
  144. package/build/destroy-error.d.ts.map +1 -0
  145. package/build/destroy-error.js +4 -3
  146. package/build/destroy-error.js.map +1 -0
  147. package/build/devise.d.ts +20 -0
  148. package/build/devise.d.ts.map +1 -0
  149. package/build/devise.js +104 -117
  150. package/build/devise.js.map +1 -0
  151. package/build/draggable-sort/controller.d.ts +41 -0
  152. package/build/draggable-sort/controller.d.ts.map +1 -0
  153. package/build/draggable-sort/controller.js +102 -128
  154. package/build/draggable-sort/controller.js.map +1 -0
  155. package/build/draggable-sort/index.d.ts +3 -0
  156. package/build/draggable-sort/index.d.ts.map +1 -0
  157. package/build/draggable-sort/index.js +61 -102
  158. package/build/draggable-sort/index.js.map +1 -0
  159. package/build/draggable-sort/item.d.ts +3 -0
  160. package/build/draggable-sort/item.d.ts.map +1 -0
  161. package/build/draggable-sort/item.js +122 -172
  162. package/build/draggable-sort/item.js.map +1 -0
  163. package/build/error-logger.d.ts +20 -0
  164. package/build/error-logger.d.ts.map +1 -0
  165. package/build/error-logger.js +95 -88
  166. package/build/error-logger.js.map +1 -0
  167. package/build/error-messages.d.ts +18 -0
  168. package/build/error-messages.d.ts.map +1 -0
  169. package/build/error-messages.js +22 -12
  170. package/build/error-messages.js.map +1 -0
  171. package/build/event-connection.d.ts +12 -0
  172. package/build/event-connection.d.ts.map +1 -0
  173. package/build/event-connection.js +25 -25
  174. package/build/event-connection.js.map +1 -0
  175. package/build/event-emitter-listener.d.ts +8 -0
  176. package/build/event-emitter-listener.d.ts.map +1 -0
  177. package/build/event-emitter-listener.js +8 -13
  178. package/build/event-emitter-listener.js.map +1 -0
  179. package/build/event-model-class.d.ts +9 -0
  180. package/build/event-model-class.d.ts.map +1 -0
  181. package/build/event-model-class.js +18 -18
  182. package/build/event-model-class.js.map +1 -0
  183. package/build/events.d.ts +4 -0
  184. package/build/events.d.ts.map +1 -0
  185. package/build/events.js +1 -1
  186. package/build/events.js.map +1 -0
  187. package/build/form.d.ts +14 -0
  188. package/build/form.d.ts.map +1 -0
  189. package/build/form.js +70 -86
  190. package/build/form.js.map +1 -0
  191. package/build/history-expo.d.ts +6 -0
  192. package/build/history-expo.d.ts.map +1 -0
  193. package/build/history-expo.js +10 -13
  194. package/build/history-expo.js.map +1 -0
  195. package/build/history-react-native.d.ts +6 -0
  196. package/build/history-react-native.d.ts.map +1 -0
  197. package/build/history-react-native.js +11 -13
  198. package/build/history-react-native.js.map +1 -0
  199. package/build/history.d.ts +3 -0
  200. package/build/history.d.ts.map +1 -0
  201. package/build/history.js +1 -1
  202. package/build/history.js.map +1 -0
  203. package/build/index.d.ts +2 -0
  204. package/build/index.d.ts.map +1 -0
  205. package/build/index.js +1 -1
  206. package/build/index.js.map +1 -0
  207. package/build/inputs/attachment.d.ts +3 -0
  208. package/build/inputs/attachment.d.ts.map +1 -0
  209. package/build/inputs/attachment.js +67 -126
  210. package/build/inputs/attachment.js.map +1 -0
  211. package/build/inputs/auto-submit.d.ts +9 -0
  212. package/build/inputs/auto-submit.d.ts.map +1 -0
  213. package/build/inputs/auto-submit.js +27 -30
  214. package/build/inputs/auto-submit.js.map +1 -0
  215. package/build/inputs/checkbox.d.ts +3 -0
  216. package/build/inputs/checkbox.d.ts.map +1 -0
  217. package/build/inputs/checkbox.js +76 -130
  218. package/build/inputs/checkbox.js.map +1 -0
  219. package/build/inputs/checkboxes.d.ts +3 -0
  220. package/build/inputs/checkboxes.d.ts.map +1 -0
  221. package/build/inputs/checkboxes.js +67 -99
  222. package/build/inputs/checkboxes.js.map +1 -0
  223. package/build/inputs/id-for-component.d.ts +2 -0
  224. package/build/inputs/id-for-component.d.ts.map +1 -0
  225. package/build/inputs/id-for-component.js +15 -12
  226. package/build/inputs/id-for-component.js.map +1 -0
  227. package/build/inputs/input-wrapper.d.ts +3 -0
  228. package/build/inputs/input-wrapper.d.ts.map +1 -0
  229. package/build/inputs/input-wrapper.js +6 -16
  230. package/build/inputs/input-wrapper.js.map +1 -0
  231. package/build/inputs/input.d.ts +5 -0
  232. package/build/inputs/input.d.ts.map +1 -0
  233. package/build/inputs/input.js +147 -223
  234. package/build/inputs/input.js.map +1 -0
  235. package/build/inputs/money.d.ts +3 -0
  236. package/build/inputs/money.d.ts.map +1 -0
  237. package/build/inputs/money.js +116 -160
  238. package/build/inputs/money.js.map +1 -0
  239. package/build/inputs/name-for-component.d.ts +2 -0
  240. package/build/inputs/name-for-component.d.ts.map +1 -0
  241. package/build/inputs/name-for-component.js +10 -9
  242. package/build/inputs/name-for-component.js.map +1 -0
  243. package/build/inputs/select.d.ts +5 -0
  244. package/build/inputs/select.d.ts.map +1 -0
  245. package/build/inputs/select.js +62 -81
  246. package/build/inputs/select.js.map +1 -0
  247. package/build/instance-of-class-name.d.ts +3 -0
  248. package/build/instance-of-class-name.d.ts.map +1 -0
  249. package/build/instance-of-class-name.js +15 -17
  250. package/build/instance-of-class-name.js.map +1 -0
  251. package/build/is-expo.d.ts +3 -0
  252. package/build/is-expo.d.ts.map +1 -0
  253. package/build/is-expo.js +11 -17
  254. package/build/is-expo.js.map +1 -0
  255. package/build/key-value-store.d.ts +11 -0
  256. package/build/key-value-store.d.ts.map +1 -0
  257. package/build/key-value-store.js +56 -50
  258. package/build/key-value-store.js.map +1 -0
  259. package/build/link.d.ts +3 -0
  260. package/build/link.d.ts.map +1 -0
  261. package/build/link.js +49 -74
  262. package/build/link.js.map +1 -0
  263. package/build/logger.d.ts +13 -0
  264. package/build/logger.d.ts.map +1 -0
  265. package/build/logger.js +30 -26
  266. package/build/logger.js.map +1 -0
  267. package/build/merge-styles.d.ts +2 -0
  268. package/build/merge-styles.d.ts.map +1 -0
  269. package/build/merge-styles.js +10 -9
  270. package/build/merge-styles.js.map +1 -0
  271. package/build/modal.d.ts +3 -0
  272. package/build/modal.d.ts.map +1 -0
  273. package/build/modal.js +20 -34
  274. package/build/modal.js.map +1 -0
  275. package/build/model-class-require.d.ts +3 -0
  276. package/build/model-class-require.d.ts.map +1 -0
  277. package/build/model-class-require.js +10 -10
  278. package/build/model-class-require.js.map +1 -0
  279. package/build/model-events.d.ts +8 -0
  280. package/build/model-events.d.ts.map +1 -0
  281. package/build/model-events.js +27 -27
  282. package/build/model-events.js.map +1 -0
  283. package/build/model-name.d.ts +8 -0
  284. package/build/model-name.d.ts.map +1 -0
  285. package/build/model-name.js +23 -24
  286. package/build/model-name.js.map +1 -0
  287. package/build/model-prop-type.d.ts +21 -0
  288. package/build/model-prop-type.d.ts.map +1 -0
  289. package/build/model-prop-type.js +89 -91
  290. package/build/model-prop-type.js.map +1 -0
  291. package/build/model-recipes-loader.d.ts +10 -0
  292. package/build/model-recipes-loader.d.ts.map +1 -0
  293. package/build/model-recipes-loader.js +19 -28
  294. package/build/model-recipes-loader.js.map +1 -0
  295. package/build/model-recipes-model-loader.d.ts +202 -0
  296. package/build/model-recipes-model-loader.d.ts.map +1 -0
  297. package/build/model-recipes-model-loader.js +226 -344
  298. package/build/model-recipes-model-loader.js.map +1 -0
  299. package/build/models-response-reader.d.ts +9 -0
  300. package/build/models-response-reader.d.ts.map +1 -0
  301. package/build/models-response-reader.js +35 -36
  302. package/build/models-response-reader.js.map +1 -0
  303. package/build/models.d.ts +3 -0
  304. package/build/models.d.ts.map +1 -0
  305. package/build/models.js +3 -5
  306. package/build/models.js.map +1 -0
  307. package/build/money-formatter.d.ts +17 -0
  308. package/build/money-formatter.d.ts.map +1 -0
  309. package/build/money-formatter.js +74 -67
  310. package/build/money-formatter.js.map +1 -0
  311. package/build/not-loaded-error.d.ts +3 -0
  312. package/build/not-loaded-error.d.ts.map +1 -0
  313. package/build/not-loaded-error.js +3 -2
  314. package/build/not-loaded-error.js.map +1 -0
  315. package/build/params.d.ts +16 -0
  316. package/build/params.d.ts.map +1 -0
  317. package/build/params.js +58 -55
  318. package/build/params.js.map +1 -0
  319. package/build/preloaded.d.ts +8 -0
  320. package/build/preloaded.d.ts.map +1 -0
  321. package/build/preloaded.js +29 -32
  322. package/build/preloaded.js.map +1 -0
  323. package/build/resize-observer.d.ts +3 -0
  324. package/build/resize-observer.d.ts.map +1 -0
  325. package/build/resize-observer.js +6 -9
  326. package/build/resize-observer.js.map +1 -0
  327. package/build/rest-props-validator.d.ts +3 -0
  328. package/build/rest-props-validator.d.ts.map +1 -0
  329. package/build/rest-props-validator.js +6 -6
  330. package/build/rest-props-validator.js.map +1 -0
  331. package/build/result.d.ts +38 -0
  332. package/build/result.d.ts.map +1 -0
  333. package/build/result.js +37 -11
  334. package/build/result.js.map +1 -0
  335. package/build/router/route.d.ts +8 -0
  336. package/build/router/route.d.ts.map +1 -0
  337. package/build/router/route.js +174 -251
  338. package/build/router/route.js.map +1 -0
  339. package/build/router/switch.d.ts +4 -0
  340. package/build/router/switch.d.ts.map +1 -0
  341. package/build/router/switch.js +50 -62
  342. package/build/router/switch.js.map +1 -0
  343. package/build/router.d.ts +3 -0
  344. package/build/router.d.ts.map +1 -0
  345. package/build/router.js +30 -53
  346. package/build/router.js.map +1 -0
  347. package/build/routes-native.d.ts +24 -0
  348. package/build/routes-native.d.ts.map +1 -0
  349. package/build/routes-native.js +140 -189
  350. package/build/routes-native.js.map +1 -0
  351. package/build/routes.d.ts +10 -0
  352. package/build/routes.d.ts.map +1 -0
  353. package/build/routes.js +44 -44
  354. package/build/routes.js.map +1 -0
  355. package/build/run-last.d.ts +12 -0
  356. package/build/run-last.d.ts.map +1 -0
  357. package/build/run-last.js +32 -31
  358. package/build/run-last.js.map +1 -0
  359. package/build/serializer.d.ts +10 -0
  360. package/build/serializer.d.ts.map +1 -0
  361. package/build/serializer.js +64 -58
  362. package/build/serializer.js.map +1 -0
  363. package/build/services.d.ts +5 -0
  364. package/build/services.d.ts.map +1 -0
  365. package/build/services.js +18 -17
  366. package/build/services.js.map +1 -0
  367. package/build/session-status-updater.d.ts +21 -0
  368. package/build/session-status-updater.d.ts.map +1 -0
  369. package/build/session-status-updater.js +116 -118
  370. package/build/session-status-updater.js.map +1 -0
  371. package/build/source-maps-loader.d.ts +37 -0
  372. package/build/source-maps-loader.d.ts.map +1 -0
  373. package/build/source-maps-loader.js +146 -165
  374. package/build/source-maps-loader.js.map +1 -0
  375. package/build/super-admin/config-reader.d.ts +23 -0
  376. package/build/super-admin/config-reader.d.ts.map +1 -0
  377. package/build/super-admin/config-reader.js +68 -75
  378. package/build/super-admin/config-reader.js.map +1 -0
  379. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts +3 -0
  380. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -0
  381. package/build/super-admin/edit-page/edit-attribute-checkbox.js +45 -72
  382. package/build/super-admin/edit-page/edit-attribute-checkbox.js.map +1 -0
  383. package/build/super-admin/edit-page/edit-attribute-content.d.ts +3 -0
  384. package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -0
  385. package/build/super-admin/edit-page/edit-attribute-content.js +40 -46
  386. package/build/super-admin/edit-page/edit-attribute-content.js.map +1 -0
  387. package/build/super-admin/edit-page/edit-attribute-input.d.ts +3 -0
  388. package/build/super-admin/edit-page/edit-attribute-input.d.ts.map +1 -0
  389. package/build/super-admin/edit-page/edit-attribute-input.js +48 -68
  390. package/build/super-admin/edit-page/edit-attribute-input.js.map +1 -0
  391. package/build/super-admin/edit-page/edit-attribute.d.ts +3 -0
  392. package/build/super-admin/edit-page/edit-attribute.d.ts.map +1 -0
  393. package/build/super-admin/edit-page/edit-attribute.js +30 -65
  394. package/build/super-admin/edit-page/edit-attribute.js.map +1 -0
  395. package/build/super-admin/edit-page.d.ts +3 -0
  396. package/build/super-admin/edit-page.d.ts.map +1 -0
  397. package/build/super-admin/edit-page.js +75 -106
  398. package/build/super-admin/edit-page.js.map +1 -0
  399. package/build/super-admin/has-edit-config.d.ts +3 -0
  400. package/build/super-admin/has-edit-config.d.ts.map +1 -0
  401. package/build/super-admin/has-edit-config.js +10 -10
  402. package/build/super-admin/has-edit-config.js.map +1 -0
  403. package/build/super-admin/index-page.d.ts +3 -0
  404. package/build/super-admin/index-page.d.ts.map +1 -0
  405. package/build/super-admin/index-page.js +12 -19
  406. package/build/super-admin/index-page.js.map +1 -0
  407. package/build/super-admin/index.d.ts +3 -0
  408. package/build/super-admin/index.d.ts.map +1 -0
  409. package/build/super-admin/index.js +120 -173
  410. package/build/super-admin/index.js.map +1 -0
  411. package/build/super-admin/layout/header/index.d.ts +3 -0
  412. package/build/super-admin/layout/header/index.d.ts.map +1 -0
  413. package/build/super-admin/layout/header/index.js +84 -146
  414. package/build/super-admin/layout/header/index.js.map +1 -0
  415. package/build/super-admin/layout/index.d.ts +3 -0
  416. package/build/super-admin/layout/index.d.ts.map +1 -0
  417. package/build/super-admin/layout/index.js +87 -147
  418. package/build/super-admin/layout/index.js.map +1 -0
  419. package/build/super-admin/layout/menu/index.d.ts +3 -0
  420. package/build/super-admin/layout/menu/index.d.ts.map +1 -0
  421. package/build/super-admin/layout/menu/index.js +98 -186
  422. package/build/super-admin/layout/menu/index.js.map +1 -0
  423. package/build/super-admin/layout/menu/menu-content.d.ts +3 -0
  424. package/build/super-admin/layout/menu/menu-content.d.ts.map +1 -0
  425. package/build/super-admin/layout/menu/menu-content.js +19 -38
  426. package/build/super-admin/layout/menu/menu-content.js.map +1 -0
  427. package/build/super-admin/layout/menu/menu-item.d.ts +3 -0
  428. package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -0
  429. package/build/super-admin/layout/menu/menu-item.js +46 -75
  430. package/build/super-admin/layout/menu/menu-item.js.map +1 -0
  431. package/build/super-admin/layout/no-access.d.ts +3 -0
  432. package/build/super-admin/layout/no-access.d.ts.map +1 -0
  433. package/build/super-admin/layout/no-access.js +15 -22
  434. package/build/super-admin/layout/no-access.js.map +1 -0
  435. package/build/super-admin/model-class-table.d.ts +3 -0
  436. package/build/super-admin/model-class-table.d.ts.map +1 -0
  437. package/build/super-admin/model-class-table.js +42 -54
  438. package/build/super-admin/model-class-table.js.map +1 -0
  439. package/build/super-admin/models.d.ts +3 -0
  440. package/build/super-admin/models.d.ts.map +1 -0
  441. package/build/super-admin/models.js +4 -4
  442. package/build/super-admin/models.js.map +1 -0
  443. package/build/super-admin/show-nav.d.ts +3 -0
  444. package/build/super-admin/show-nav.d.ts.map +1 -0
  445. package/build/super-admin/show-nav.js +19 -42
  446. package/build/super-admin/show-nav.js.map +1 -0
  447. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts +3 -0
  448. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts.map +1 -0
  449. package/build/super-admin/show-page/belongs-to-attribute-row.js +13 -22
  450. package/build/super-admin/show-page/belongs-to-attribute-row.js.map +1 -0
  451. package/build/super-admin/show-page/index.d.ts +3 -0
  452. package/build/super-admin/show-page/index.d.ts.map +1 -0
  453. package/build/super-admin/show-page/index.js +105 -126
  454. package/build/super-admin/show-page/index.js.map +1 -0
  455. package/build/super-admin/show-reflection-actions.d.ts +3 -0
  456. package/build/super-admin/show-reflection-actions.d.ts.map +1 -0
  457. package/build/super-admin/show-reflection-actions.js +33 -44
  458. package/build/super-admin/show-reflection-actions.js.map +1 -0
  459. package/build/super-admin/show-reflection-link.d.ts +3 -0
  460. package/build/super-admin/show-reflection-link.d.ts.map +1 -0
  461. package/build/super-admin/show-reflection-link.js +23 -41
  462. package/build/super-admin/show-reflection-link.js.map +1 -0
  463. package/build/super-admin/show-reflection-page.d.ts +3 -0
  464. package/build/super-admin/show-reflection-page.d.ts.map +1 -0
  465. package/build/super-admin/show-reflection-page.js +26 -40
  466. package/build/super-admin/show-reflection-page.js.map +1 -0
  467. package/build/table/column-content.d.ts +25 -0
  468. package/build/table/column-content.d.ts.map +1 -0
  469. package/build/table/column-content.js +101 -107
  470. package/build/table/column-content.js.map +1 -0
  471. package/build/table/column-identifier.d.ts +2 -0
  472. package/build/table/column-identifier.d.ts.map +1 -0
  473. package/build/table/column-identifier.js +17 -15
  474. package/build/table/column-identifier.js.map +1 -0
  475. package/build/table/column-visible.d.ts +2 -0
  476. package/build/table/column-visible.d.ts.map +1 -0
  477. package/build/table/column-visible.js +8 -5
  478. package/build/table/column-visible.js.map +1 -0
  479. package/build/table/components/column.d.ts +3 -0
  480. package/build/table/components/column.d.ts.map +1 -0
  481. package/build/table/components/column.js +11 -18
  482. package/build/table/components/column.js.map +1 -0
  483. package/build/table/components/flat-list.d.ts +3 -0
  484. package/build/table/components/flat-list.d.ts.map +1 -0
  485. package/build/table/components/flat-list.js +10 -17
  486. package/build/table/components/flat-list.js.map +1 -0
  487. package/build/table/components/header.d.ts +3 -0
  488. package/build/table/components/header.d.ts.map +1 -0
  489. package/build/table/components/header.js +11 -21
  490. package/build/table/components/header.js.map +1 -0
  491. package/build/table/components/row.d.ts +3 -0
  492. package/build/table/components/row.d.ts.map +1 -0
  493. package/build/table/components/row.js +14 -22
  494. package/build/table/components/row.js.map +1 -0
  495. package/build/table/filters/attribute-element.d.ts +3 -0
  496. package/build/table/filters/attribute-element.d.ts.map +1 -0
  497. package/build/table/filters/attribute-element.js +26 -35
  498. package/build/table/filters/attribute-element.js.map +1 -0
  499. package/build/table/filters/filter-form.d.ts +3 -0
  500. package/build/table/filters/filter-form.d.ts.map +1 -0
  501. package/build/table/filters/filter-form.js +261 -428
  502. package/build/table/filters/filter-form.js.map +1 -0
  503. package/build/table/filters/filter.d.ts +3 -0
  504. package/build/table/filters/filter.d.ts.map +1 -0
  505. package/build/table/filters/filter.js +38 -81
  506. package/build/table/filters/filter.js.map +1 -0
  507. package/build/table/filters/index.d.ts +3 -0
  508. package/build/table/filters/index.d.ts.map +1 -0
  509. package/build/table/filters/index.js +87 -176
  510. package/build/table/filters/index.js.map +1 -0
  511. package/build/table/filters/load-search-modal.d.ts +3 -0
  512. package/build/table/filters/load-search-modal.d.ts.map +1 -0
  513. package/build/table/filters/load-search-modal.js +79 -162
  514. package/build/table/filters/load-search-modal.js.map +1 -0
  515. package/build/table/filters/reflection-element.d.ts +3 -0
  516. package/build/table/filters/reflection-element.d.ts.map +1 -0
  517. package/build/table/filters/reflection-element.js +20 -30
  518. package/build/table/filters/reflection-element.js.map +1 -0
  519. package/build/table/filters/save-search-modal.d.ts +3 -0
  520. package/build/table/filters/save-search-modal.d.ts.map +1 -0
  521. package/build/table/filters/save-search-modal.js +36 -77
  522. package/build/table/filters/save-search-modal.js.map +1 -0
  523. package/build/table/filters/scope-element.d.ts +3 -0
  524. package/build/table/filters/scope-element.d.ts.map +1 -0
  525. package/build/table/filters/scope-element.js +24 -36
  526. package/build/table/filters/scope-element.js.map +1 -0
  527. package/build/table/header-column-content.d.ts +3 -0
  528. package/build/table/header-column-content.d.ts.map +1 -0
  529. package/build/table/header-column-content.js +24 -59
  530. package/build/table/header-column-content.js.map +1 -0
  531. package/build/table/header-column.d.ts +3 -0
  532. package/build/table/header-column.d.ts.map +1 -0
  533. package/build/table/header-column.js +80 -132
  534. package/build/table/header-column.js.map +1 -0
  535. package/build/table/header-select.d.ts +3 -0
  536. package/build/table/header-select.d.ts.map +1 -0
  537. package/build/table/header-select.js +35 -95
  538. package/build/table/header-select.js.map +1 -0
  539. package/build/table/model-callback-args.d.ts +4 -0
  540. package/build/table/model-callback-args.d.ts.map +1 -0
  541. package/build/table/model-callback-args.js +5 -7
  542. package/build/table/model-callback-args.js.map +1 -0
  543. package/build/table/model-column.d.ts +3 -0
  544. package/build/table/model-column.d.ts.map +1 -0
  545. package/build/table/model-column.js +49 -88
  546. package/build/table/model-column.js.map +1 -0
  547. package/build/table/model-row.d.ts +3 -0
  548. package/build/table/model-row.d.ts.map +1 -0
  549. package/build/table/model-row.js +60 -174
  550. package/build/table/model-row.js.map +1 -0
  551. package/build/table/select-calculator.d.ts +2 -0
  552. package/build/table/select-calculator.d.ts.map +1 -0
  553. package/build/table/select-calculator.js +46 -54
  554. package/build/table/select-calculator.js.map +1 -0
  555. package/build/table/settings/column-row.d.ts +3 -0
  556. package/build/table/settings/column-row.d.ts.map +1 -0
  557. package/build/table/settings/column-row.js +60 -87
  558. package/build/table/settings/column-row.js.map +1 -0
  559. package/build/table/settings/download-action.d.ts +3 -0
  560. package/build/table/settings/download-action.d.ts.map +1 -0
  561. package/build/table/settings/download-action.js +27 -73
  562. package/build/table/settings/download-action.js.map +1 -0
  563. package/build/table/settings/index.d.ts +3 -0
  564. package/build/table/settings/index.d.ts.map +1 -0
  565. package/build/table/settings/index.js +29 -85
  566. package/build/table/settings/index.js.map +1 -0
  567. package/build/table/table-settings.d.ts +35 -0
  568. package/build/table/table-settings.d.ts.map +1 -0
  569. package/build/table/table-settings.js +187 -195
  570. package/build/table/table-settings.js.map +1 -0
  571. package/build/table/table.d.ts +3 -0
  572. package/build/table/table.d.ts.map +1 -0
  573. package/build/table/table.js +557 -918
  574. package/build/table/table.js.map +1 -0
  575. package/build/table/use-sorting.d.ts +21 -0
  576. package/build/table/use-sorting.d.ts.map +1 -0
  577. package/build/table/use-sorting.js +40 -31
  578. package/build/table/use-sorting.js.map +1 -0
  579. package/build/table/widths.d.ts +18 -0
  580. package/build/table/widths.d.ts.map +1 -0
  581. package/build/table/widths.js +63 -68
  582. package/build/table/widths.js.map +1 -0
  583. package/build/table/worker-plugins-check-all-checkbox.d.ts +3 -0
  584. package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -0
  585. package/build/table/worker-plugins-check-all-checkbox.js +73 -112
  586. package/build/table/worker-plugins-check-all-checkbox.js.map +1 -0
  587. package/build/table/worker-plugins-checkbox.d.ts +3 -0
  588. package/build/table/worker-plugins-checkbox.d.ts.map +1 -0
  589. package/build/table/worker-plugins-checkbox.js +66 -103
  590. package/build/table/worker-plugins-checkbox.js.map +1 -0
  591. package/build/translated-attributes.d.ts +2 -0
  592. package/build/translated-attributes.d.ts.map +1 -0
  593. package/build/translated-attributes.js +7 -7
  594. package/build/translated-attributes.js.map +1 -0
  595. package/build/translated-collections.d.ts +4 -0
  596. package/build/translated-collections.d.ts.map +1 -0
  597. package/build/translated-collections.js +8 -7
  598. package/build/translated-collections.js.map +1 -0
  599. package/build/updated-attribute.d.ts +15 -0
  600. package/build/updated-attribute.d.ts.map +1 -0
  601. package/build/updated-attribute.js +66 -67
  602. package/build/updated-attribute.js.map +1 -0
  603. package/build/url-encode.d.ts +6 -0
  604. package/build/url-encode.d.ts.map +1 -0
  605. package/build/url-encode.js +14 -11
  606. package/build/url-encode.js.map +1 -0
  607. package/build/use-breakpoint.d.ts +3 -0
  608. package/build/use-breakpoint.d.ts.map +1 -0
  609. package/build/use-breakpoint.js +71 -72
  610. package/build/use-breakpoint.js.map +1 -0
  611. package/build/use-can-can.d.ts +8 -0
  612. package/build/use-can-can.d.ts.map +1 -0
  613. package/build/use-can-can.js +45 -52
  614. package/build/use-can-can.js.map +1 -0
  615. package/build/use-collection.d.ts +73 -0
  616. package/build/use-collection.d.ts.map +1 -0
  617. package/build/use-collection.js +253 -212
  618. package/build/use-collection.js.map +1 -0
  619. package/build/use-created-event.d.ts +19 -0
  620. package/build/use-created-event.d.ts.map +1 -0
  621. package/build/use-created-event.js +50 -44
  622. package/build/use-created-event.js.map +1 -0
  623. package/build/use-current-user-context.d.ts +12 -0
  624. package/build/use-current-user-context.d.ts.map +1 -0
  625. package/build/use-current-user-context.js +94 -0
  626. package/build/use-current-user-context.js.map +1 -0
  627. package/build/use-current-user.d.ts +14 -0
  628. package/build/use-current-user.d.ts.map +1 -0
  629. package/build/use-current-user.js +21 -115
  630. package/build/use-current-user.js.map +1 -0
  631. package/build/use-destroyed-event.d.ts +16 -0
  632. package/build/use-destroyed-event.d.ts.map +1 -0
  633. package/build/use-destroyed-event.js +53 -54
  634. package/build/use-destroyed-event.js.map +1 -0
  635. package/build/use-event-emitter.d.ts +9 -0
  636. package/build/use-event-emitter.d.ts.map +1 -0
  637. package/build/use-event-emitter.js +24 -22
  638. package/build/use-event-emitter.js.map +1 -0
  639. package/build/use-event-listener.d.ts +9 -0
  640. package/build/use-event-listener.d.ts.map +1 -0
  641. package/build/use-event-listener.js +24 -18
  642. package/build/use-event-listener.js.map +1 -0
  643. package/build/use-input.d.ts +31 -0
  644. package/build/use-input.d.ts.map +1 -0
  645. package/build/use-input.js +142 -130
  646. package/build/use-input.js.map +1 -0
  647. package/build/use-model-event.d.ts +17 -0
  648. package/build/use-model-event.d.ts.map +1 -0
  649. package/build/use-model-event.js +54 -54
  650. package/build/use-model-event.js.map +1 -0
  651. package/build/use-model.d.ts +30 -0
  652. package/build/use-model.d.ts.map +1 -0
  653. package/build/use-model.js +153 -156
  654. package/build/use-model.js.map +1 -0
  655. package/build/use-resize-observer.d.ts +8 -0
  656. package/build/use-resize-observer.d.ts.map +1 -0
  657. package/build/use-resize-observer.js +22 -19
  658. package/build/use-resize-observer.js.map +1 -0
  659. package/build/use-router.d.ts +8 -0
  660. package/build/use-router.d.ts.map +1 -0
  661. package/build/use-router.js +84 -93
  662. package/build/use-router.js.map +1 -0
  663. package/build/use-screen-layout.d.ts +3 -0
  664. package/build/use-screen-layout.d.ts.map +1 -0
  665. package/build/use-screen-layout.js +41 -34
  666. package/build/use-screen-layout.js.map +1 -0
  667. package/build/use-styles.d.ts +2 -0
  668. package/build/use-styles.d.ts.map +1 -0
  669. package/build/use-styles.js +48 -47
  670. package/build/use-styles.js.map +1 -0
  671. package/build/use-updated-event.d.ts +16 -0
  672. package/build/use-updated-event.d.ts.map +1 -0
  673. package/build/use-updated-event.js +53 -54
  674. package/build/use-updated-event.js.map +1 -0
  675. package/build/use-validation-errors.d.ts +7 -0
  676. package/build/use-validation-errors.d.ts.map +1 -0
  677. package/build/use-validation-errors.js +27 -27
  678. package/build/use-validation-errors.js.map +1 -0
  679. package/build/utils/button.d.ts +3 -0
  680. package/build/utils/button.d.ts.map +1 -0
  681. package/build/utils/button.js +83 -113
  682. package/build/utils/button.js.map +1 -0
  683. package/build/utils/card.d.ts +3 -0
  684. package/build/utils/card.d.ts.map +1 -0
  685. package/build/utils/card.js +25 -48
  686. package/build/utils/card.js.map +1 -0
  687. package/build/utils/checkbox.d.ts +3 -0
  688. package/build/utils/checkbox.d.ts.map +1 -0
  689. package/build/utils/checkbox.js +44 -69
  690. package/build/utils/checkbox.js.map +1 -0
  691. package/build/utils/checkboxes.d.ts +3 -0
  692. package/build/utils/checkboxes.d.ts.map +1 -0
  693. package/build/utils/checkboxes.js +95 -143
  694. package/build/utils/checkboxes.js.map +1 -0
  695. package/build/utils/default-style.d.ts +7 -0
  696. package/build/utils/default-style.d.ts.map +1 -0
  697. package/build/utils/default-style.js +51 -58
  698. package/build/utils/default-style.js.map +1 -0
  699. package/build/utils/header.d.ts +3 -0
  700. package/build/utils/header.d.ts.map +1 -0
  701. package/build/utils/header.js +8 -17
  702. package/build/utils/header.js.map +1 -0
  703. package/build/utils/icon.d.ts +3 -0
  704. package/build/utils/icon.d.ts.map +1 -0
  705. package/build/utils/icon.js +68 -87
  706. package/build/utils/icon.js.map +1 -0
  707. package/build/utils/invalid-feedback.d.ts +3 -0
  708. package/build/utils/invalid-feedback.d.ts.map +1 -0
  709. package/build/utils/invalid-feedback.js +10 -13
  710. package/build/utils/invalid-feedback.js.map +1 -0
  711. package/build/utils/modal.d.ts +3 -0
  712. package/build/utils/modal.d.ts.map +1 -0
  713. package/build/utils/modal.js +30 -56
  714. package/build/utils/modal.js.map +1 -0
  715. package/build/utils/text.d.ts +3 -0
  716. package/build/utils/text.d.ts.map +1 -0
  717. package/build/utils/text.js +7 -17
  718. package/build/utils/text.js.map +1 -0
  719. package/build/validation-error.d.ts +18 -0
  720. package/build/validation-error.d.ts.map +1 -0
  721. package/build/validation-error.js +34 -25
  722. package/build/validation-error.js.map +1 -0
  723. package/build/validation-errors.d.ts +58 -0
  724. package/build/validation-errors.d.ts.map +1 -0
  725. package/build/validation-errors.js +107 -87
  726. package/build/validation-errors.js.map +1 -0
  727. package/build/with-api-maker.d.ts +3 -0
  728. package/build/with-api-maker.d.ts.map +1 -0
  729. package/build/with-api-maker.js +18 -24
  730. package/build/with-api-maker.js.map +1 -0
  731. package/build/with-collection.d.ts +3 -0
  732. package/build/with-collection.d.ts.map +1 -0
  733. package/build/with-collection.js +11 -10
  734. package/build/with-collection.js.map +1 -0
  735. package/build/with-current-user.d.ts +3 -0
  736. package/build/with-current-user.d.ts.map +1 -0
  737. package/build/with-current-user.js +6 -8
  738. package/build/with-current-user.js.map +1 -0
  739. package/build/with-model.d.ts +3 -0
  740. package/build/with-model.d.ts.map +1 -0
  741. package/build/with-model.js +10 -12
  742. package/build/with-model.js.map +1 -0
  743. package/build/with-router.d.ts +3 -0
  744. package/build/with-router.d.ts.map +1 -0
  745. package/build/with-router.js +7 -20
  746. package/build/with-router.js.map +1 -0
  747. package/package.json +14 -8
  748. package/.eslintrc.js +0 -357
  749. package/android/build.gradle +0 -43
  750. package/android/src/main/AndroidManifest.xml +0 -2
  751. package/android/src/main/java/expo/modules/api_maker/ApiMakerModule.kt +0 -50
  752. package/android/src/main/java/expo/modules/api_maker/ApiMakerView.kt +0 -30
  753. package/expo-module.config.json +0 -17
  754. package/ios/ApiMaker.podspec +0 -29
  755. package/ios/ApiMakerModule.swift +0 -48
  756. package/ios/ApiMakerView.swift +0 -38
  757. package/src/api.js +0 -109
  758. package/src/attribute-not-loaded-error.js +0 -1
  759. package/src/base-component.jsx +0 -5
  760. package/src/base-error.js +0 -38
  761. package/src/base-model/attribute.js +0 -33
  762. package/src/base-model/column.js +0 -13
  763. package/src/base-model/reflection.js +0 -15
  764. package/src/base-model/scope.js +0 -12
  765. package/src/base-model.js +0 -1001
  766. package/src/bootstrap/attribute-row.jsx +0 -134
  767. package/src/bootstrap/attribute-rows.jsx +0 -27
  768. package/src/bootstrap/card.jsx +0 -149
  769. package/src/bootstrap/checkbox.jsx +0 -86
  770. package/src/bootstrap/checkboxes.jsx +0 -185
  771. package/src/bootstrap/index.js +0 -0
  772. package/src/bootstrap/input.jsx +0 -173
  773. package/src/bootstrap/invalid-feedback.jsx +0 -31
  774. package/src/bootstrap/paginate.jsx +0 -187
  775. package/src/bootstrap/radio-buttons.jsx +0 -87
  776. package/src/bootstrap/select.jsx +0 -110
  777. package/src/bootstrap/sort-link.jsx +0 -106
  778. package/src/cable-connection-pool.js +0 -127
  779. package/src/cable-subscription-pool.js +0 -189
  780. package/src/cable-subscription.js +0 -23
  781. package/src/cache-key-generator.js +0 -100
  782. package/src/can-can.js +0 -158
  783. package/src/channels-consumer.js +0 -10
  784. package/src/collection-loader.jsx +0 -60
  785. package/src/collection.js +0 -346
  786. package/src/command-submit-data.js +0 -103
  787. package/src/commands-pool.js +0 -212
  788. package/src/compose.js +0 -11
  789. package/src/config.js +0 -71
  790. package/src/custom-error.js +0 -7
  791. package/src/data-set-to-attributes.js +0 -13
  792. package/src/deserializer.js +0 -60
  793. package/src/destroy-error.js +0 -7
  794. package/src/devise.js +0 -151
  795. package/src/draggable-sort/controller.js +0 -137
  796. package/src/draggable-sort/index.jsx +0 -107
  797. package/src/draggable-sort/item.jsx +0 -171
  798. package/src/error-logger.js +0 -111
  799. package/src/error-messages.js +0 -15
  800. package/src/event-connection.jsx +0 -37
  801. package/src/event-emitter-listener.jsx +0 -13
  802. package/src/event-model-class.jsx +0 -28
  803. package/src/events.js +0 -7
  804. package/src/form.jsx +0 -110
  805. package/src/history-expo.js +0 -23
  806. package/src/history-react-native.js +0 -25
  807. package/src/history.js +0 -3
  808. package/src/index.js +0 -3
  809. package/src/inputs/attachment.jsx +0 -108
  810. package/src/inputs/auto-submit.js +0 -37
  811. package/src/inputs/checkbox.jsx +0 -125
  812. package/src/inputs/checkboxes.jsx +0 -116
  813. package/src/inputs/id-for-component.js +0 -15
  814. package/src/inputs/input-wrapper.jsx +0 -16
  815. package/src/inputs/input.jsx +0 -260
  816. package/src/inputs/money.jsx +0 -179
  817. package/src/inputs/name-for-component.js +0 -15
  818. package/src/inputs/select.jsx +0 -104
  819. package/src/instance-of-class-name.js +0 -29
  820. package/src/is-expo.js +0 -18
  821. package/src/key-value-store.js +0 -68
  822. package/src/link.jsx +0 -77
  823. package/src/logger.js +0 -38
  824. package/src/merge-styles.js +0 -15
  825. package/src/modal.jsx +0 -37
  826. package/src/model-class-require.js +0 -17
  827. package/src/model-events.js +0 -39
  828. package/src/model-name.js +0 -33
  829. package/src/model-prop-type.js +0 -124
  830. package/src/model-recipes-loader.js +0 -28
  831. package/src/model-recipes-model-loader.js +0 -350
  832. package/src/models-response-reader.js +0 -48
  833. package/src/models.js +0 -7
  834. package/src/models.js.erb +0 -19
  835. package/src/money-formatter.js +0 -100
  836. package/src/not-loaded-error.js +0 -1
  837. package/src/params.js +0 -66
  838. package/src/preloaded.js +0 -43
  839. package/src/resize-observer.jsx +0 -10
  840. package/src/rest-props-validator.js +0 -9
  841. package/src/result.js +0 -13
  842. package/src/router/route.jsx +0 -246
  843. package/src/router/switch.jsx +0 -76
  844. package/src/router.jsx +0 -47
  845. package/src/routes-native.js +0 -173
  846. package/src/routes.js +0 -58
  847. package/src/run-last.js +0 -39
  848. package/src/serializer.js +0 -76
  849. package/src/services.js +0 -23
  850. package/src/session-status-updater.js +0 -172
  851. package/src/source-maps-loader.js +0 -203
  852. package/src/super-admin/config-reader.jsx +0 -93
  853. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +0 -84
  854. package/src/super-admin/edit-page/edit-attribute-content.jsx +0 -57
  855. package/src/super-admin/edit-page/edit-attribute-input.jsx +0 -79
  856. package/src/super-admin/edit-page/edit-attribute.jsx +0 -84
  857. package/src/super-admin/edit-page.jsx +0 -117
  858. package/src/super-admin/has-edit-config.js +0 -15
  859. package/src/super-admin/index-page.jsx +0 -23
  860. package/src/super-admin/index.jsx +0 -219
  861. package/src/super-admin/layout/header/index.jsx +0 -144
  862. package/src/super-admin/layout/header/style.scss +0 -45
  863. package/src/super-admin/layout/index.jsx +0 -154
  864. package/src/super-admin/layout/menu/index.jsx +0 -173
  865. package/src/super-admin/layout/menu/menu-content.jsx +0 -43
  866. package/src/super-admin/layout/menu/menu-item.jsx +0 -70
  867. package/src/super-admin/layout/menu/style.scss +0 -11
  868. package/src/super-admin/layout/no-access.jsx +0 -26
  869. package/src/super-admin/model-class-table.jsx +0 -66
  870. package/src/super-admin/models.js +0 -11
  871. package/src/super-admin/show-nav.jsx +0 -45
  872. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +0 -30
  873. package/src/super-admin/show-page/index.jsx +0 -141
  874. package/src/super-admin/show-reflection-actions.jsx +0 -55
  875. package/src/super-admin/show-reflection-link.jsx +0 -40
  876. package/src/super-admin/show-reflection-page.jsx +0 -50
  877. package/src/super-admin/stylesheets/variables.scss +0 -11
  878. package/src/table/column-content.jsx +0 -122
  879. package/src/table/column-identifier.js +0 -23
  880. package/src/table/column-visible.js +0 -7
  881. package/src/table/components/column.jsx +0 -19
  882. package/src/table/components/flat-list.jsx +0 -19
  883. package/src/table/components/header.jsx +0 -21
  884. package/src/table/components/row.jsx +0 -23
  885. package/src/table/filters/attribute-element.jsx +0 -47
  886. package/src/table/filters/filter-form.jsx +0 -448
  887. package/src/table/filters/filter.jsx +0 -74
  888. package/src/table/filters/index.jsx +0 -171
  889. package/src/table/filters/load-search-modal.jsx +0 -157
  890. package/src/table/filters/reflection-element.jsx +0 -38
  891. package/src/table/filters/save-search-modal.jsx +0 -74
  892. package/src/table/filters/scope-element.jsx +0 -44
  893. package/src/table/header-column-content.jsx +0 -55
  894. package/src/table/header-column.jsx +0 -129
  895. package/src/table/header-select.jsx +0 -78
  896. package/src/table/model-callback-args.js +0 -10
  897. package/src/table/model-column.jsx +0 -86
  898. package/src/table/model-row.jsx +0 -140
  899. package/src/table/select-calculator.js +0 -65
  900. package/src/table/settings/column-row.jsx +0 -93
  901. package/src/table/settings/download-action.jsx +0 -73
  902. package/src/table/settings/index.jsx +0 -66
  903. package/src/table/table-settings.js +0 -262
  904. package/src/table/table.jsx +0 -957
  905. package/src/table/use-sorting.js +0 -35
  906. package/src/table/variables.scss +0 -11
  907. package/src/table/widths.jsx +0 -87
  908. package/src/table/worker-plugins-check-all-checkbox.jsx +0 -112
  909. package/src/table/worker-plugins-checkbox.jsx +0 -104
  910. package/src/translated-attributes.js +0 -11
  911. package/src/translated-collections-data.js.erb +0 -5
  912. package/src/translated-collections.js +0 -13
  913. package/src/updated-attribute.jsx +0 -93
  914. package/src/url-encode.js +0 -18
  915. package/src/use-breakpoint.js +0 -100
  916. package/src/use-can-can.js +0 -55
  917. package/src/use-collection.js +0 -280
  918. package/src/use-created-event.js +0 -55
  919. package/src/use-current-user.js +0 -133
  920. package/src/use-destroyed-event.js +0 -60
  921. package/src/use-event-emitter.js +0 -25
  922. package/src/use-event-listener.js +0 -23
  923. package/src/use-input.js +0 -159
  924. package/src/use-model-event.js +0 -60
  925. package/src/use-model.js +0 -189
  926. package/src/use-resize-observer.js +0 -24
  927. package/src/use-router.jsx +0 -128
  928. package/src/use-screen-layout.js +0 -49
  929. package/src/use-styles.js +0 -66
  930. package/src/use-updated-event.js +0 -60
  931. package/src/use-validation-errors.js +0 -33
  932. package/src/utils/button.jsx +0 -127
  933. package/src/utils/card.jsx +0 -58
  934. package/src/utils/checkbox.jsx +0 -73
  935. package/src/utils/checkboxes.jsx +0 -157
  936. package/src/utils/default-style.jsx +0 -80
  937. package/src/utils/header.jsx +0 -14
  938. package/src/utils/icon.jsx +0 -81
  939. package/src/utils/invalid-feedback.jsx +0 -20
  940. package/src/utils/modal.jsx +0 -64
  941. package/src/utils/text.jsx +0 -15
  942. package/src/validation-error.js +0 -35
  943. package/src/validation-errors.js +0 -121
  944. package/src/with-api-maker.jsx +0 -31
  945. package/src/with-collection.jsx +0 -17
  946. package/src/with-current-user.jsx +0 -10
  947. package/src/with-model.jsx +0 -16
  948. package/src/with-router.jsx +0 -11
@@ -1,16 +1,16 @@
1
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { digg, digs } from "diggerize";
3
3
  import React, { createContext, useContext, useMemo, useRef } from "react";
4
4
  import { Animated, Platform, Pressable, View } from "react-native";
5
- import BaseComponent from "../base-component";
5
+ import BaseComponent from "../base-component.js";
6
6
  import Card from "../bootstrap/card";
7
7
  import classNames from "classnames";
8
- import Collection from "../collection";
9
- import columnVisible from "./column-visible";
8
+ import Collection from "../collection.js";
9
+ import columnVisible from "./column-visible.js";
10
10
  import debounce from "debounce";
11
11
  import DraggableSort from "../draggable-sort/index";
12
12
  import EventEmitter from "events";
13
- import Filters from "./filters";
13
+ import Filters from "./filters/index";
14
14
  import FlatList from "./components/flat-list";
15
15
  import { Form } from "../form";
16
16
  import Header from "./components/header";
@@ -19,955 +19,594 @@ import HeaderSelect from "./header-select";
19
19
  import Icon from "../utils/icon";
20
20
  import { incorporate } from "incorporator";
21
21
  import * as inflection from "inflection";
22
- import memo from "set-state-compare/src/memo";
23
- import modelClassRequire from "../model-class-require";
22
+ import memo from "set-state-compare/build/memo.js";
23
+ import modelClassRequire from "../model-class-require.js";
24
24
  import ModelRow from "./model-row";
25
25
  import Paginate from "../bootstrap/paginate";
26
- import Params from "../params";
26
+ import Params from "../params.js";
27
27
  import PropTypes from "prop-types";
28
28
  import Row from "./components/row";
29
- import selectCalculator from "./select-calculator";
29
+ import selectCalculator from "./select-calculator.js";
30
30
  import Select from "../inputs/select";
31
31
  import Settings from "./settings/index";
32
- import { shapeComponent } from "set-state-compare/src/shape-component";
33
- import TableSettings from "./table-settings";
32
+ import { shapeComponent } from "set-state-compare/build/shape-component.js";
33
+ import TableSettings from "./table-settings.js";
34
34
  import Text from "../utils/text";
35
35
  import uniqunize from "uniqunize";
36
- import useBreakpoint from "../use-breakpoint";
37
- import useCollection from "../use-collection";
38
- import useI18n from "i18n-on-steroids/src/use-i18n";
39
- import useEventEmitter from "../use-event-emitter";
40
- import useModelEvent from "../use-model-event";
41
- import useQueryParams from "on-location-changed/build/use-query-params";
42
- import Widths from "./widths";
36
+ import useBreakpoint from "../use-breakpoint.js";
37
+ import useCollection from "../use-collection.js";
38
+ import useI18n from "i18n-on-steroids/src/use-i18n.mjs";
39
+ import useEventEmitter from "../use-event-emitter.js";
40
+ import useModelEvent from "../use-model-event.js";
41
+ import useQueryParams from "on-location-changed/build/use-query-params.js";
42
+ import Widths from "./widths.js";
43
+ import WorkerPluginsCheckAllCheckbox from "./worker-plugins-check-all-checkbox";
43
44
  const paginationOptions = [30, 60, 90, ["All", "all"]];
44
- const WorkerPluginsCheckAllCheckbox = /*#__PURE__*/React.lazy(() => import("./worker-plugins-check-all-checkbox"));
45
- const TableContext = /*#__PURE__*/createContext();
45
+ const TableContext = createContext();
46
46
  const ListHeaderComponent = memo(shapeComponent(class ListHeaderComponent extends BaseComponent {
47
- setup() {
48
- this.useStates({
49
- lastUpdate: new Date()
50
- });
51
- }
52
- render() {
53
- const {
54
- mdUp
55
- } = useBreakpoint();
56
- const tableContextValue = useContext(TableContext);
57
- const table = tableContextValue.table;
58
- const {
59
- collection,
60
- events,
61
- queryWithoutPagination,
62
- t
63
- } = table.tt;
64
- const {
65
- query
66
- } = digs(collection, "query");
67
- useEventEmitter(events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
68
- return /*#__PURE__*/React.createElement(Row, {
69
- dataSet: {
70
- class: "api-maker/table/header-row"
71
- },
72
- style: table.styleForRowHeader()
73
- }, table.p.workplace && table.s.currentWorkplace && /*#__PURE__*/React.createElement(Header, {
74
- style: table.styleForHeader({
75
- style: {
76
- width: mdUp ? 41 : undefined
77
- }
78
- })
79
- }, /*#__PURE__*/React.createElement(WorkerPluginsCheckAllCheckbox, {
80
- currentWorkplace: table.s.currentWorkplace,
81
- query: queryWithoutPagination,
82
- style: this.workerPlguinsCheckAllCheckboxStyle ||= {
83
- marginHorizontal: "auto"
84
- }
85
- }), !mdUp && /*#__PURE__*/React.createElement(Text, {
86
- style: this.selectAllFoundTextStyle ||= {
87
- marginLeft: 3
88
- }
89
- }, t(".select_all_found", {
90
- defaultValue: "Select all found"
91
- }))), !mdUp && /*#__PURE__*/React.createElement(Header, {
92
- style: table.styleForHeader({
93
- style: {}
94
- })
95
- }, /*#__PURE__*/React.createElement(HeaderSelect, {
96
- preparedColumns: table.s.preparedColumns,
97
- query: query,
98
- table: table
99
- })), mdUp && /*#__PURE__*/React.createElement(React.Fragment, null, table.headersContentFromColumns(), /*#__PURE__*/React.createElement(Header, {
100
- style: table.styleForHeader({
101
- style: {},
102
- type: "actions"
103
- })
104
- })));
105
- }
106
- onColumnVisibilityUpdated = () => this.setState({
107
- lastUpdate: new Date()
108
- });
47
+ setup() {
48
+ this.useStates({
49
+ lastUpdate: new Date()
50
+ });
51
+ }
52
+ render() {
53
+ const { mdUp } = useBreakpoint();
54
+ const tableContextValue = useContext(TableContext);
55
+ const table = tableContextValue.table;
56
+ const { collection, events, queryWithoutPagination, t } = table.tt;
57
+ const { query } = digs(collection, "query");
58
+ useEventEmitter(events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
59
+ return (_jsxs(Row, { style: table.styleForRowHeader(), testID: "api-maker/table/header-row", children: [table.p.workplace && table.s.currentWorkplace &&
60
+ _jsxs(Header, { style: table.styleForHeader({ style: { width: mdUp ? 41 : undefined } }), children: [_jsx(WorkerPluginsCheckAllCheckbox, { currentWorkplace: table.s.currentWorkplace, query: queryWithoutPagination, style: this.workerPlguinsCheckAllCheckboxStyle ||= { marginHorizontal: "auto" } }), !mdUp &&
61
+ _jsx(Text, { style: this.selectAllFoundTextStyle ||= { marginLeft: 3 }, children: t(".select_all_found", { defaultValue: "Select all found" }) })] }), !mdUp &&
62
+ _jsx(Header, { style: table.styleForHeader({ style: {} }), children: _jsx(HeaderSelect, { preparedColumns: table.s.preparedColumns, query: query, table: table }) }), mdUp &&
63
+ _jsxs(_Fragment, { children: [table.headersContentFromColumns(), _jsx(Header, { style: table.styleForHeader({ style: {}, type: "actions" }) })] })] }));
64
+ }
65
+ onColumnVisibilityUpdated = () => this.setState({ lastUpdate: new Date() });
109
66
  }));
110
67
  export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
111
- static defaultProps = {
112
- card: true,
113
- currentUser: null,
114
- destroyEnabled: true,
115
- filterCard: true,
116
- filterSubmitButton: true,
117
- noRecordsAvailableContent: undefined,
118
- noRecordsFoundContent: undefined,
119
- preloads: [],
120
- select: {},
121
- styleUI: true,
122
- workplace: false
123
- };
124
- static propTypes = {
125
- abilities: PropTypes.object,
126
- actionsContent: PropTypes.func,
127
- appHistory: PropTypes.object,
128
- card: PropTypes.bool.isRequired,
129
- className: PropTypes.string,
130
- collection: PropTypes.instanceOf(Collection),
131
- columns: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),
132
- controls: PropTypes.func,
133
- currentUser: PropTypes.object,
134
- defaultDateFormatName: PropTypes.string,
135
- defaultDateTimeFormatName: PropTypes.string,
136
- defaultParams: PropTypes.object,
137
- destroyEnabled: PropTypes.bool.isRequired,
138
- destroyMessage: PropTypes.string,
139
- editModelPath: PropTypes.func,
140
- filterCard: PropTypes.bool.isRequired,
141
- filterContent: PropTypes.func,
142
- filterSubmitLabel: PropTypes.any,
143
- groupBy: PropTypes.array,
144
- header: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
145
- identifier: PropTypes.string,
146
- modelClass: PropTypes.func.isRequired,
147
- noRecordsAvailableContent: PropTypes.func,
148
- noRecordsFoundContent: PropTypes.func,
149
- onModelsLoaded: PropTypes.func,
150
- paginateContent: PropTypes.func,
151
- paginationComponent: PropTypes.func,
152
- preloads: PropTypes.array.isRequired,
153
- queryMethod: PropTypes.func,
154
- queryName: PropTypes.string,
155
- select: PropTypes.object,
156
- selectColumns: PropTypes.object,
157
- styles: PropTypes.object,
158
- styleUI: PropTypes.bool.isRequired,
159
- viewModelPath: PropTypes.func,
160
- workplace: PropTypes.bool.isRequired
161
- };
162
- draggableSortEvents = new EventEmitter();
163
- events = new EventEmitter();
164
- tableSettings = null;
165
- setup() {
166
- const {
167
- t
168
- } = useI18n({
169
- namespace: "js.api_maker.table"
170
- });
171
- const {
172
- name: breakpoint,
173
- mdUp
174
- } = useBreakpoint();
175
- const queryParams = useQueryParams();
176
- this.setInstance({
177
- breakpoint,
178
- filterFormRef: useRef(),
179
- mdUp,
180
- t
181
- });
182
- const collectionKey = digg(this.p.modelClass.modelClassData(), "collectionKey");
183
- let queryName = this.props.queryName;
184
- if (!queryName) queryName = collectionKey;
185
- const querySName = `${queryName}_s`;
186
- this.useStates({
187
- columns: () => this.columnsAsArray(),
188
- currentWorkplace: undefined,
189
- currentWorkplaceCount: null,
190
- filterForm: null,
191
- columnsToShow: null,
192
- draggedColumn: null,
193
- identifier: () => this.props.identifier || `${collectionKey}-default`,
194
- lastUpdate: () => new Date(),
195
- preload: undefined,
196
- preparedColumns: undefined,
197
- queryName,
198
- queryQName: () => `${queryName}_q`,
199
- queryPageName: () => `${queryName}_page`,
200
- querySName,
201
- resizing: false,
202
- showFilters: () => Boolean(queryParams[querySName]),
203
- showSettings: false,
204
- tableSetting: undefined,
205
- tableSettingLoaded: false,
206
- tableSettingFullCacheKey: undefined,
207
- width: undefined,
208
- widths: null
209
- });
210
- this.tableContextValue = useMemo(() => ({
211
- cacheKey: this.s.tableSettingFullCacheKey,
212
- lastUpdate: this.s.lastUpdate,
213
- resizing: this.s.resizing,
214
- table: this
215
- }), [this.s.lastUpdate, this.s.resizing, this.s.tableSettingFullCacheKey]);
216
- useMemo(() => {
217
- if (this.props.workplace) {
218
- this.loadCurrentWorkplace().then(() => {
219
- this.loadCurrentWorkplaceCount();
68
+ static defaultProps = {
69
+ card: true,
70
+ currentUser: null,
71
+ destroyEnabled: true,
72
+ filterCard: true,
73
+ filterSubmitButton: true,
74
+ noRecordsAvailableContent: undefined,
75
+ noRecordsFoundContent: undefined,
76
+ preloads: [],
77
+ select: {},
78
+ styleUI: true,
79
+ workplace: false
80
+ };
81
+ static propTypes = {
82
+ abilities: PropTypes.object,
83
+ actionsContent: PropTypes.func,
84
+ appHistory: PropTypes.object,
85
+ card: PropTypes.bool.isRequired,
86
+ className: PropTypes.string,
87
+ collection: PropTypes.instanceOf(Collection),
88
+ columns: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),
89
+ controls: PropTypes.func,
90
+ currentUser: PropTypes.object,
91
+ defaultDateFormatName: PropTypes.string,
92
+ defaultDateTimeFormatName: PropTypes.string,
93
+ defaultParams: PropTypes.object,
94
+ destroyEnabled: PropTypes.bool.isRequired,
95
+ destroyMessage: PropTypes.string,
96
+ editModelPath: PropTypes.func,
97
+ filterCard: PropTypes.bool.isRequired,
98
+ filterContent: PropTypes.func,
99
+ filterSubmitLabel: PropTypes.any,
100
+ groupBy: PropTypes.array,
101
+ header: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
102
+ identifier: PropTypes.string,
103
+ modelClass: PropTypes.func.isRequired,
104
+ noRecordsAvailableContent: PropTypes.func,
105
+ noRecordsFoundContent: PropTypes.func,
106
+ onModelsLoaded: PropTypes.func,
107
+ paginateContent: PropTypes.func,
108
+ paginationComponent: PropTypes.func,
109
+ preloads: PropTypes.array.isRequired,
110
+ queryMethod: PropTypes.func,
111
+ queryName: PropTypes.string,
112
+ select: PropTypes.object,
113
+ selectColumns: PropTypes.object,
114
+ styles: PropTypes.object,
115
+ styleUI: PropTypes.bool.isRequired,
116
+ viewModelPath: PropTypes.func,
117
+ workplace: PropTypes.bool.isRequired
118
+ };
119
+ draggableSortEvents = new EventEmitter();
120
+ events = new EventEmitter();
121
+ tableSettings = null;
122
+ setup() {
123
+ const { t } = useI18n({ namespace: "js.api_maker.table" });
124
+ const { name: breakpoint, mdUp } = useBreakpoint();
125
+ const queryParams = useQueryParams();
126
+ this.setInstance({
127
+ breakpoint,
128
+ filterFormRef: useRef(),
129
+ mdUp,
130
+ t
220
131
  });
221
- }
222
- }, [this.p.currentUser?.id()]);
223
- useMemo(() => {
224
- if (!this.tt.tableSettings && this.s.width) {
225
- this.loadTableSetting();
226
- }
227
- }, [this.p.currentUser?.id(), this.s.width]);
228
- useModelEvent(this.s.currentWorkplace, "workplace_links_created", this.tt.onLinksCreated);
229
- useModelEvent(this.s.currentWorkplace, "workplace_links_destroyed", this.tt.onLinksDestroyed);
230
- let collectionReady = true;
231
- let select;
232
- if (!this.s.preparedColumns) {
233
- collectionReady = false;
132
+ const collectionKey = digg(this.p.modelClass.modelClassData(), "collectionKey");
133
+ let queryName = this.props.queryName;
134
+ if (!queryName)
135
+ queryName = collectionKey;
136
+ const querySName = `${queryName}_s`;
137
+ this.useStates({
138
+ columns: () => this.columnsAsArray(),
139
+ currentWorkplace: undefined,
140
+ currentWorkplaceCount: null,
141
+ filterForm: null,
142
+ columnsToShow: null,
143
+ draggedColumn: null,
144
+ identifier: () => this.props.identifier || `${collectionKey}-default`,
145
+ lastUpdate: () => new Date(),
146
+ preload: undefined,
147
+ preparedColumns: undefined,
148
+ queryName,
149
+ queryQName: () => `${queryName}_q`,
150
+ queryPageName: () => `${queryName}_page`,
151
+ querySName,
152
+ resizing: false,
153
+ showFilters: () => Boolean(queryParams[querySName]),
154
+ showSettings: false,
155
+ tableSetting: undefined,
156
+ tableSettingLoaded: false,
157
+ tableSettingFullCacheKey: undefined,
158
+ width: undefined,
159
+ widths: null
160
+ });
161
+ this.tableContextValue = useMemo(() => ({
162
+ cacheKey: this.s.tableSettingFullCacheKey,
163
+ lastUpdate: this.s.lastUpdate,
164
+ resizing: this.s.resizing,
165
+ table: this
166
+ }), [this.s.lastUpdate, this.s.resizing, this.s.tableSettingFullCacheKey]);
167
+ useMemo(() => {
168
+ if (this.props.workplace) {
169
+ this.loadCurrentWorkplace().then(() => {
170
+ this.loadCurrentWorkplaceCount();
171
+ });
172
+ }
173
+ }, [this.p.currentUser?.id()]);
174
+ useMemo(() => {
175
+ if (!this.tt.tableSettings && this.s.width) {
176
+ this.loadTableSetting();
177
+ }
178
+ }, [this.p.currentUser?.id(), this.s.width]);
179
+ useModelEvent(this.s.currentWorkplace, "workplace_links_created", this.tt.onLinksCreated);
180
+ useModelEvent(this.s.currentWorkplace, "workplace_links_destroyed", this.tt.onLinksDestroyed);
181
+ let collectionReady = true;
182
+ let select;
183
+ if (!this.s.preparedColumns) {
184
+ collectionReady = false;
185
+ }
186
+ if (collectionReady) {
187
+ select = selectCalculator({ table: this });
188
+ }
189
+ this.collection = useCollection({
190
+ abilities: this.abilitiesToLoad(),
191
+ defaultParams: this.props.defaultParams,
192
+ collection: this.props.collection,
193
+ groupBy: this.props.groupBy,
194
+ ifCondition: collectionReady,
195
+ modelClass: this.props.modelClass,
196
+ onModelsLoaded: this.props.onModelsLoaded,
197
+ noRecordsAvailableContent: this.props.noRecordsAvailableContent,
198
+ noRecordsFoundContent: this.props.noRecordsFoundContent,
199
+ pagination: true,
200
+ preloads: this.state.preload,
201
+ queryMethod: this.props.queryMethod,
202
+ queryName,
203
+ select,
204
+ selectColumns: this.props.selectColumns
205
+ });
206
+ this.queryWithoutPagination = useMemo(() => this.collection?.query?.clone()?.except("page"), [this.collection.query]);
207
+ useEventEmitter(this.tt.draggableSortEvents, "onDragStart", this.tt.onDragStart);
208
+ useEventEmitter(this.tt.draggableSortEvents, "onDragEndAnimation", this.tt.onDragEndAnimation);
209
+ useEventEmitter(this.tt.events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
234
210
  }
235
- if (collectionReady) {
236
- select = selectCalculator({
237
- table: this
238
- });
211
+ onColumnVisibilityUpdated = () => this.setState({ columnsToShow: this.getColumnsToShow(this.s.columns), lastUpdate: new Date() });
212
+ onDragStart = ({ item }) => item.animatedZIndex.setValue(9999);
213
+ onDragEndAnimation = ({ item }) => item.animatedZIndex.setValue(0);
214
+ async loadCurrentWorkplace() {
215
+ const Workplace = modelClassRequire("Workplace");
216
+ const result = await Workplace.current();
217
+ const currentWorkplace = digg(result, "current", 0);
218
+ this.setState({ currentWorkplace });
239
219
  }
240
- this.collection = useCollection({
241
- abilities: this.abilitiesToLoad(),
242
- defaultParams: this.props.defaultParams,
243
- collection: this.props.collection,
244
- groupBy: this.props.groupBy,
245
- ifCondition: collectionReady,
246
- modelClass: this.props.modelClass,
247
- onModelsLoaded: this.props.onModelsLoaded,
248
- noRecordsAvailableContent: this.props.noRecordsAvailableContent,
249
- noRecordsFoundContent: this.props.noRecordsFoundContent,
250
- pagination: true,
251
- preloads: this.state.preload,
252
- queryMethod: this.props.queryMethod,
253
- queryName,
254
- select,
255
- selectColumns: this.props.selectColumns
256
- });
257
- this.queryWithoutPagination = useMemo(() => this.collection?.query?.clone()?.except("page"), [this.collection.query]);
258
- useEventEmitter(this.tt.draggableSortEvents, "onDragStart", this.tt.onDragStart);
259
- useEventEmitter(this.tt.draggableSortEvents, "onDragEndAnimation", this.tt.onDragEndAnimation);
260
- useEventEmitter(this.tt.events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
261
- }
262
- onColumnVisibilityUpdated = () => this.setState({
263
- columnsToShow: this.getColumnsToShow(this.s.columns),
264
- lastUpdate: new Date()
265
- });
266
- onDragStart = ({
267
- item
268
- }) => item.animatedZIndex.setValue(9999);
269
- onDragEndAnimation = ({
270
- item
271
- }) => item.animatedZIndex.setValue(0);
272
- async loadCurrentWorkplace() {
273
- const Workplace = modelClassRequire("Workplace");
274
- const result = await Workplace.current();
275
- const currentWorkplace = digg(result, "current", 0);
276
- this.setState({
277
- currentWorkplace
278
- });
279
- }
280
- async loadCurrentWorkplaceCount() {
281
- const WorkplaceLink = modelClassRequire("WorkplaceLink");
282
- const currentWorkplaceCount = await WorkplaceLink.ransack({
283
- resource_type_eq: this.p.modelClass.modelClassData().name,
284
- workplace_id_eq: this.s.currentWorkplace.id()
285
- }).count();
286
- this.setState({
287
- currentWorkplaceCount
288
- });
289
- }
290
- getColumnsToShow(columns) {
291
- return columns.filter(({
292
- column,
293
- tableSettingColumn
294
- }) => columnVisible(column, tableSettingColumn)).sort((a, b) => a.tableSettingColumn.position() - b.tableSettingColumn.position());
295
- }
296
- async loadTableSetting() {
297
- this.tableSettings = new TableSettings({
298
- table: this
299
- });
300
- const tableSetting = await this.tableSettings.loadExistingOrCreateTableSettings();
301
- const {
302
- columns,
303
- preload
304
- } = this.tableSettings.preparedColumns(tableSetting);
305
- const {
306
- width
307
- } = this.s;
308
- const widths = new Widths({
309
- columns,
310
- table: this,
311
- width
312
- });
313
- const columnsToShow = this.getColumnsToShow(columns);
314
- this.setState({
315
- columns,
316
- columnsToShow,
317
- preparedColumns: columns,
318
- preload: this.mergedPreloads(preload),
319
- tableSetting,
320
- tableSettingLoaded: true,
321
- tableSettingFullCacheKey: tableSetting.fullCacheKey(),
322
- widths
323
- });
324
- }
325
- updateSettingsFullCacheKey = () => this.setState({
326
- tableSettingFullCacheKey: this.state.tableSetting.fullCacheKey()
327
- });
328
- columnsAsArray = () => {
329
- if (typeof this.props.columns == "function") {
330
- return this.props.columns();
220
+ async loadCurrentWorkplaceCount() {
221
+ const WorkplaceLink = modelClassRequire("WorkplaceLink");
222
+ const currentWorkplaceCount = await WorkplaceLink
223
+ .ransack({
224
+ resource_type_eq: this.p.modelClass.modelClassData().name,
225
+ workplace_id_eq: this.s.currentWorkplace.id()
226
+ })
227
+ .count();
228
+ this.setState({ currentWorkplaceCount });
331
229
  }
332
- return this.props.columns;
333
- };
334
- mergedPreloads(preload) {
335
- const {
336
- preloads
337
- } = this.props;
338
- let mergedPreloads = [];
339
- if (preloads) mergedPreloads = mergedPreloads.concat(preloads);
340
- if (preload) mergedPreloads = mergedPreloads.concat(preload);
341
- return uniqunize(mergedPreloads);
342
- }
343
- render() {
344
- const {
345
- modelClass,
346
- noRecordsAvailableContent,
347
- noRecordsFoundContent
348
- } = this.p;
349
- const {
350
- collection,
351
- currentUser
352
- } = this.props;
353
- const {
354
- queryName,
355
- querySName,
356
- showFilters
357
- } = this.s;
358
- const {
359
- models,
360
- overallCount,
361
- qParams,
362
- query,
363
- result,
364
- showNoRecordsAvailableContent,
365
- showNoRecordsFoundContent
366
- } = digs(this.collection, "models", "overallCount", "qParams", "query", "result", "showNoRecordsAvailableContent", "showNoRecordsFoundContent");
367
- if (collection && collection.args.modelClass.modelClassData().name != modelClass.modelClassData().name) {
368
- throw new Error(`Model class from collection '${collection.args.modelClass.modelClassData().name}' ` + `didn't match model class on table: '${modelClass.modelClassData().name}'`);
230
+ getColumnsToShow(columns) {
231
+ return columns
232
+ .filter(({ column, tableSettingColumn }) => columnVisible(column, tableSettingColumn))
233
+ .sort((a, b) => a.tableSettingColumn.position() - b.tableSettingColumn.position());
369
234
  }
370
- return /*#__PURE__*/React.createElement(View, {
371
- dataSet: {
372
- class: this.className()
373
- },
374
- onLayout: this.tt.onContainerLayout,
375
- style: this.props.styles?.container
376
- }, showNoRecordsAvailableContent && /*#__PURE__*/React.createElement("div", {
377
- className: "live-table--no-records-available-content"
378
- }, noRecordsAvailableContent({
379
- models,
380
- qParams,
381
- overallCount
382
- })), showNoRecordsFoundContent && /*#__PURE__*/React.createElement("div", {
383
- className: "live-table--no-records-found-content"
384
- }, noRecordsFoundContent({
385
- models,
386
- qParams,
387
- overallCount
388
- })), showFilters && /*#__PURE__*/React.createElement(Filters, {
389
- currentUser: currentUser,
390
- modelClass: modelClass,
391
- queryName: queryName,
392
- querySName: querySName
393
- }), qParams && query && result && models && !showNoRecordsAvailableContent && !showNoRecordsFoundContent && this.cardOrTable());
394
- }
395
- abilitiesToLoad() {
396
- const abilitiesToLoad = {};
397
- const {
398
- abilities,
399
- modelClass
400
- } = this.props;
401
- const ownAbilities = [];
402
- if (this.props.destroyEnabled) ownAbilities.push("destroy");
403
- if (this.props.editModelPath) ownAbilities.push("edit");
404
- if (this.props.viewModelPath) ownAbilities.push("show");
405
- if (ownAbilities.length > 0) {
406
- const modelClassName = digg(modelClass.modelClassData(), "name");
407
- abilitiesToLoad[modelClassName] = ownAbilities;
235
+ async loadTableSetting() {
236
+ this.tableSettings = new TableSettings({ table: this });
237
+ const tableSetting = await this.tableSettings.loadExistingOrCreateTableSettings();
238
+ const { columns, preload } = this.tableSettings.preparedColumns(tableSetting);
239
+ const { width } = this.s;
240
+ const widths = new Widths({ columns, table: this, width });
241
+ const columnsToShow = this.getColumnsToShow(columns);
242
+ this.setState({
243
+ columns,
244
+ columnsToShow,
245
+ preparedColumns: columns,
246
+ preload: this.mergedPreloads(preload),
247
+ tableSetting,
248
+ tableSettingLoaded: true,
249
+ tableSettingFullCacheKey: tableSetting.fullCacheKey(),
250
+ widths
251
+ });
408
252
  }
409
- if (abilities) {
410
- for (const modelName in abilities) {
411
- if (!(modelName in abilitiesToLoad)) {
412
- abilitiesToLoad[modelName] = [];
413
- }
414
- for (const ability of abilities[modelName]) {
415
- abilitiesToLoad[modelName].push(ability);
253
+ updateSettingsFullCacheKey = () => this.setState({ tableSettingFullCacheKey: this.state.tableSetting.fullCacheKey() });
254
+ columnsAsArray = () => {
255
+ if (typeof this.props.columns == "function") {
256
+ return this.props.columns();
416
257
  }
417
- }
418
- }
419
- return abilitiesToLoad;
420
- }
421
- cardOrTable() {
422
- const {
423
- abilities,
424
- actionsContent,
425
- appHistory,
426
- card,
427
- className,
428
- collection,
429
- columns,
430
- controls,
431
- currentUser,
432
- defaultDateFormatName,
433
- defaultDateTimeFormatName,
434
- defaultParams,
435
- destroyEnabled,
436
- destroyMessage,
437
- editModelPath,
438
- filterCard,
439
- filterContent,
440
- filterSubmitButton,
441
- filterSubmitLabel,
442
- groupBy,
443
- header,
444
- identifier,
445
- modelClass,
446
- noRecordsAvailableContent,
447
- noRecordsFoundContent,
448
- onModelsLoaded,
449
- paginateContent,
450
- paginationComponent,
451
- preloads,
452
- queryMethod,
453
- queryName,
454
- select,
455
- selectColumns,
456
- styleUI,
457
- viewModelPath,
458
- workplace,
459
- ...restProps
460
- } = this.props;
461
- const {
462
- models,
463
- qParams,
464
- query,
465
- result
466
- } = digs(this.collection, "models", "qParams", "query", "result");
467
- let headerContent, PaginationComponent;
468
- if (typeof header == "function") {
469
- headerContent = header({
470
- models,
471
- qParams,
472
- query,
473
- result
474
- });
475
- } else if (header) {
476
- headerContent = header;
477
- } else {
478
- headerContent = modelClass.modelName().human({
479
- count: 2
480
- });
481
- }
482
- if (!paginateContent) {
483
- if (paginationComponent) {
484
- PaginationComponent = paginationComponent;
485
- } else {
486
- PaginationComponent = Paginate;
487
- }
488
- }
489
- const flatListStyle = {
490
- overflowX: "auto"
258
+ return this.props.columns;
491
259
  };
492
- if (styleUI) {
493
- flatListStyle.border = "1px solid #dbdbdb";
494
- flatListStyle.borderRadius = 5;
260
+ mergedPreloads(preload) {
261
+ const { preloads } = this.props;
262
+ let mergedPreloads = [];
263
+ if (preloads)
264
+ mergedPreloads = mergedPreloads.concat(preloads);
265
+ if (preload)
266
+ mergedPreloads = mergedPreloads.concat(preload);
267
+ return uniqunize(mergedPreloads);
495
268
  }
496
- const flatList = /*#__PURE__*/React.createElement(TableContext.Provider, {
497
- value: this.tt.tableContextValue
498
- }, /*#__PURE__*/React.createElement(FlatList, _extends({
499
- data: models,
500
- dataSet: {
501
- class: classNames("api-maker--table", className),
502
- cacheKey: this.s.tableSettingFullCacheKey,
503
- lastUpdate: this.s.lastUpdate
504
- },
505
- extraData: this.s.lastUpdate,
506
- keyExtractor: this.tt.keyExtrator,
507
- ListHeaderComponent: ListHeaderComponent,
508
- renderItem: this.tt.renderItem,
509
- showsHorizontalScrollIndicator: true,
510
- style: flatListStyle
511
- }, restProps)));
512
- return /*#__PURE__*/React.createElement(React.Fragment, null, filterContent && filterCard && /*#__PURE__*/React.createElement(Card, {
513
- className: "live-table--filter-card mb-4"
514
- }, this.filterForm()), filterContent && !filterCard && this.filterForm(), card && /*#__PURE__*/React.createElement(Card, _extends({
515
- className: classNames("live-table--table-card", "mb-4", className),
516
- controls: this.tableControls(),
517
- header: headerContent,
518
- footer: this.tableFooter()
519
- }, restProps), flatList), !card && flatList, result && PaginationComponent && /*#__PURE__*/React.createElement(PaginationComponent, {
520
- result: result
521
- }), result && paginateContent && paginateContent({
522
- result
523
- }));
524
- }
525
- onContainerLayout = e => {
526
- const {
527
- width
528
- } = e.nativeEvent.layout;
529
- const {
530
- widths
531
- } = this.s;
532
- this.setState({
533
- width
534
- });
535
- if (widths) widths.tableWidth = width;
536
- };
537
- onLinksCreated = ({
538
- args
539
- }) => {
540
- const modelClassName = this.p.modelClass.modelClassData().name;
541
- if (args.created[modelClassName]) {
542
- const amountCreated = args.created[modelClassName].length;
543
- this.setState(prevState => ({
544
- currentWorkplaceCount: prevState.currentWorkplaceCount + amountCreated
545
- }));
269
+ render() {
270
+ const { modelClass, noRecordsAvailableContent, noRecordsFoundContent } = this.p;
271
+ const { collection, currentUser } = this.props;
272
+ const { queryName, querySName, showFilters } = this.s;
273
+ const { models, overallCount, qParams, query, result, showNoRecordsAvailableContent, showNoRecordsFoundContent } = digs(this.collection, "models", "overallCount", "qParams", "query", "result", "showNoRecordsAvailableContent", "showNoRecordsFoundContent");
274
+ if (collection && collection.args.modelClass.modelClassData().name != modelClass.modelClassData().name) {
275
+ throw new Error(`Model class from collection '${collection.args.modelClass.modelClassData().name}' ` +
276
+ `didn't match model class on table: '${modelClass.modelClassData().name}'`);
277
+ }
278
+ return (_jsxs(View, { dataSet: this.cache("rootViewDataSet", { class: this.className() }, [this.className()]), onLayout: this.tt.onContainerLayout, style: this.props.styles?.container, children: [showNoRecordsAvailableContent &&
279
+ _jsx("div", { className: "live-table--no-records-available-content", children: noRecordsAvailableContent({ models, qParams, overallCount }) }), showNoRecordsFoundContent &&
280
+ _jsx("div", { className: "live-table--no-records-found-content", children: noRecordsFoundContent({ models, qParams, overallCount }) }), showFilters &&
281
+ _jsx(Filters, { currentUser: currentUser, modelClass: modelClass, queryName: queryName, querySName: querySName }), (() => {
282
+ if (qParams && query && result && models && !showNoRecordsAvailableContent && !showNoRecordsFoundContent) {
283
+ return this.cardOrTable();
284
+ }
285
+ else {
286
+ return (_jsx(View, { children: _jsx(Text, { children: this.t(".loading_dot_dot_dit", { defaultValue: "Loading..." }) }) }));
287
+ }
288
+ })()] }));
546
289
  }
547
- };
548
- onLinksDestroyed = ({
549
- args
550
- }) => {
551
- const modelClassName = this.p.modelClass.modelClassData().name;
552
- if (args.destroyed[modelClassName]) {
553
- const amountDestroyed = args.destroyed[modelClassName].length;
554
- this.setState(prevState => ({
555
- currentWorkplaceCount: prevState.currentWorkplaceCount - amountDestroyed
556
- }));
290
+ abilitiesToLoad() {
291
+ const abilitiesToLoad = {};
292
+ const { abilities, modelClass } = this.props;
293
+ const ownAbilities = [];
294
+ if (this.props.destroyEnabled)
295
+ ownAbilities.push("destroy");
296
+ if (this.props.editModelPath)
297
+ ownAbilities.push("edit");
298
+ if (this.props.viewModelPath)
299
+ ownAbilities.push("show");
300
+ if (ownAbilities.length > 0) {
301
+ const modelClassName = digg(modelClass.modelClassData(), "name");
302
+ abilitiesToLoad[modelClassName] = ownAbilities;
303
+ }
304
+ if (abilities) {
305
+ for (const modelName in abilities) {
306
+ if (!(modelName in abilitiesToLoad)) {
307
+ abilitiesToLoad[modelName] = [];
308
+ }
309
+ for (const ability of abilities[modelName]) {
310
+ abilitiesToLoad[modelName].push(ability);
311
+ }
312
+ }
313
+ }
314
+ return abilitiesToLoad;
557
315
  }
558
- };
559
- keyExtrator = model => `${this.s.tableSettingFullCacheKey}-${model.id()}`;
560
- filterForm = () => {
561
- const {
562
- filterFormRef,
563
- submitFilter,
564
- submitFilterDebounce
565
- } = this.tt;
566
- const {
567
- filterContent,
568
- filterSubmitButton
569
- } = this.p;
570
- const {
571
- queryQName
572
- } = this.s;
573
- const {
574
- filterSubmitLabel
575
- } = this.props;
576
- const {
577
- qParams
578
- } = digs(this.collection, "qParams");
579
- return /*#__PURE__*/React.createElement(Form, {
580
- className: "live-table--filter-form",
581
- formRef: filterFormRef,
582
- onSubmit: this.tt.onFilterFormSubmit,
583
- setForm: this.setStates.filterForm
584
- }, "s" in qParams && /*#__PURE__*/React.createElement("input", {
585
- name: "s",
586
- type: "hidden",
587
- value: qParams.s
588
- }), filterContent({
589
- onFilterChanged: submitFilter,
590
- onFilterChangedWithDelay: submitFilterDebounce,
591
- qParams,
592
- queryQName
593
- }), filterSubmitButton && /*#__PURE__*/React.createElement("input", {
594
- className: "btn btn-primary live-table--submit-filter-button",
595
- type: "submit",
596
- style: {
597
- marginTop: "8px"
598
- },
599
- value: filterSubmitLabel || this.t(".filter", {
600
- defaultValue: "Filter"
601
- })
602
- }));
603
- };
604
- onFilterClicked = e => {
605
- e.preventDefault();
606
- this.setState({
607
- showFilters: !this.state.showFilters
608
- });
609
- };
610
- onPerPageChanged = e => {
611
- const {
612
- queryName
613
- } = this.s;
614
- const newPerPageValue = digg(e, "target", "value");
615
- const perKey = `${queryName}_per`;
616
- const paramsChange = {};
617
- paramsChange[perKey] = newPerPageValue;
618
- Params.changeParams(paramsChange);
619
- };
620
- renderItem = ({
621
- index,
622
- item: model
623
- }) => {
624
- if (!this.s.tableSettingLoaded) {
625
- return /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(Text, null, this.t(".loading_dot_dot_dot", {
626
- defaultValue: "Loading..."
627
- })));
316
+ cardOrTable() {
317
+ const { abilities, actionsContent, appHistory, card, className, collection, columns, controls, currentUser, defaultDateFormatName, defaultDateTimeFormatName, defaultParams, destroyEnabled, destroyMessage, editModelPath, filterCard, filterContent, filterSubmitButton, filterSubmitLabel, groupBy, header, identifier, modelClass, noRecordsAvailableContent, noRecordsFoundContent, onModelsLoaded, paginateContent, paginationComponent, preloads, queryMethod, queryName, select, selectColumns, styleUI, viewModelPath, workplace, ...restProps } = this.props;
318
+ const { models, qParams, query, result } = digs(this.collection, "models", "qParams", "query", "result");
319
+ let headerContent, PaginationComponent;
320
+ if (typeof header == "function") {
321
+ headerContent = header({ models, qParams, query, result });
322
+ }
323
+ else if (header) {
324
+ headerContent = header;
325
+ }
326
+ else {
327
+ headerContent = modelClass.modelName().human({ count: 2 });
328
+ }
329
+ if (!paginateContent) {
330
+ if (paginationComponent) {
331
+ PaginationComponent = paginationComponent;
332
+ }
333
+ else {
334
+ PaginationComponent = Paginate;
335
+ }
336
+ }
337
+ const flatListStyle = {
338
+ overflowX: "auto"
339
+ };
340
+ if (styleUI) {
341
+ flatListStyle.border = "1px solid #dbdbdb";
342
+ flatListStyle.borderRadius = 5;
343
+ }
344
+ const flatList = (_jsx(TableContext.Provider, { value: this.tt.tableContextValue, children: _jsx(FlatList, { data: models, dataSet: {
345
+ class: classNames("api-maker--table", className),
346
+ cacheKey: this.s.tableSettingFullCacheKey,
347
+ lastUpdate: this.s.lastUpdate
348
+ }, extraData: this.s.lastUpdate, keyExtractor: this.tt.keyExtrator, ListHeaderComponent: ListHeaderComponent, renderItem: this.tt.renderItem, showsHorizontalScrollIndicator: true, style: flatListStyle, ...restProps }) }));
349
+ return (_jsxs(_Fragment, { children: [filterContent && filterCard &&
350
+ _jsx(Card, { className: "live-table--filter-card mb-4", children: this.filterForm() }), filterContent && !filterCard &&
351
+ this.filterForm(), card &&
352
+ _jsx(Card, { className: classNames("live-table--table-card", "mb-4", className), controls: this.tableControls(), header: headerContent, footer: this.tableFooter(), ...restProps, children: flatList }), !card && flatList, result && PaginationComponent &&
353
+ _jsx(PaginationComponent, { result: result }), result && paginateContent &&
354
+ paginateContent({ result })] }));
628
355
  }
629
- return /*#__PURE__*/React.createElement(ModelRow, {
630
- cacheKey: model.cacheKey(),
631
- columns: this.s.columnsToShow,
632
- columnWidths: this.columnWidths(),
633
- events: this.tt.events,
634
- index: index,
635
- key: model.id(),
636
- model: model,
637
- table: this,
638
- tableSettingFullCacheKey: this.s.tableSettingFullCacheKey
639
- });
640
- };
641
- styleForColumn = ({
642
- column,
643
- columnIndex,
644
- even,
645
- style,
646
- type
647
- }) => {
648
- const {
649
- styleUI
650
- } = this.p;
651
- const defaultStyle = {
652
- justifyContent: "center",
653
- padding: 8,
654
- overflow: "hidden"
356
+ onContainerLayout = (e) => {
357
+ const { width } = e.nativeEvent.layout;
358
+ const { widths } = this.s;
359
+ this.setState({ width });
360
+ if (widths)
361
+ widths.tableWidth = width;
655
362
  };
656
- if (styleUI) {
657
- Object.assign(defaultStyle, {
658
- backgroundColor: even ? "#f5f5f5" : "#fff"
659
- });
660
- }
661
- if (type == "actions") {
662
- defaultStyle.flexDirection = "row";
663
- defaultStyle.alignItems = "center";
664
- if (this.tt.mdUp) {
665
- defaultStyle.marginLeft = "auto";
666
- } else {
667
- defaultStyle.marginRight = "auto";
668
- }
669
- } else if (this.tt.mdUp && styleUI) {
670
- defaultStyle.borderRight = "1px solid #dbdbdb";
671
- }
672
- const actualStyle = Object.assign(defaultStyle, style);
673
- return actualStyle;
674
- };
675
- styleForHeader = ({
676
- column,
677
- columnIndex,
678
- style,
679
- type
680
- }) => {
681
- const {
682
- mdUp
683
- } = this.tt;
684
- const defaultStyle = {
685
- flexDirection: "row",
686
- alignItems: "center",
687
- padding: 8
363
+ onLinksCreated = ({ args }) => {
364
+ const modelClassName = this.p.modelClass.modelClassData().name;
365
+ if (args.created[modelClassName]) {
366
+ const amountCreated = args.created[modelClassName].length;
367
+ this.setState((prevState) => ({
368
+ currentWorkplaceCount: prevState.currentWorkplaceCount + amountCreated
369
+ }));
370
+ }
688
371
  };
689
- if (type != "actions" && mdUp && this.p.styleUI) {
690
- defaultStyle.borderRight = "1px solid #dbdbdb";
691
- }
692
- const actualStyle = Object.assign(defaultStyle, style);
693
- return actualStyle;
694
- };
695
- styleForHeaderText() {
696
- const actualStyle = {
697
- fontWeight: "bold"
372
+ onLinksDestroyed = ({ args }) => {
373
+ const modelClassName = this.p.modelClass.modelClassData().name;
374
+ if (args.destroyed[modelClassName]) {
375
+ const amountDestroyed = args.destroyed[modelClassName].length;
376
+ this.setState((prevState) => ({
377
+ currentWorkplaceCount: prevState.currentWorkplaceCount - amountDestroyed
378
+ }));
379
+ }
698
380
  };
699
- return actualStyle;
700
- }
701
- styleForRow = ({
702
- even
703
- } = {}) => {
704
- const actualStyle = {
705
- flex: 1,
706
- alignItems: "stretch"
381
+ keyExtrator = (model) => `${this.s.tableSettingFullCacheKey}-${model.id()}`;
382
+ filterForm = () => {
383
+ const { filterFormRef, submitFilter, submitFilterDebounce } = this.tt;
384
+ const { filterContent, filterSubmitButton } = this.p;
385
+ const { queryQName } = this.s;
386
+ const { filterSubmitLabel } = this.props;
387
+ const { qParams } = digs(this.collection, "qParams");
388
+ return (_jsxs(Form, { className: "live-table--filter-form", formRef: filterFormRef, onSubmit: this.tt.onFilterFormSubmit, setForm: this.setStates.filterForm, children: ["s" in qParams &&
389
+ _jsx("input", { name: "s", type: "hidden", value: qParams.s }), filterContent({
390
+ onFilterChanged: submitFilter,
391
+ onFilterChangedWithDelay: submitFilterDebounce,
392
+ qParams,
393
+ queryQName
394
+ }), filterSubmitButton &&
395
+ _jsx("input", { className: "btn btn-primary live-table--submit-filter-button", type: "submit", style: { marginTop: "8px" }, value: filterSubmitLabel || this.t(".filter", { defaultValue: "Filter" }) })] }));
707
396
  };
708
- if (even && this.p.styleUI) {
709
- actualStyle.backgroundColor = "#f5f5f5";
710
- }
711
- return actualStyle;
712
- };
713
- styleForRowHeader = () => {
714
- const actualStyle = {
715
- flex: 1,
716
- alignItems: "stretch"
397
+ onFilterClicked = (e) => {
398
+ e.preventDefault();
399
+ this.setState({ showFilters: !this.state.showFilters });
717
400
  };
718
- return actualStyle;
719
- };
720
- tableControls() {
721
- const {
722
- controls
723
- } = this.props;
724
- const {
725
- showSettings
726
- } = this.s;
727
- const {
728
- models,
729
- qParams,
730
- query,
731
- result
732
- } = digs(this.collection, "models", "qParams", "query", "result");
733
- return /*#__PURE__*/React.createElement(View, {
734
- style: this.rootViewStyle ||= {
735
- flexDirection: "row"
736
- }
737
- }, controls && controls({
738
- models,
739
- qParams,
740
- query,
741
- result
742
- }), /*#__PURE__*/React.createElement(Pressable, {
743
- dataSet: {
744
- class: "filter-button"
745
- },
746
- onPress: this.tt.onFilterClicked
747
- }, /*#__PURE__*/React.createElement(Icon, {
748
- name: "search",
749
- size: 20
750
- })), /*#__PURE__*/React.createElement(View, null, showSettings && /*#__PURE__*/React.createElement(Settings, {
751
- onRequestClose: this.tt.onRequestCloseSettings,
752
- table: this
753
- }), /*#__PURE__*/React.createElement(Pressable, {
754
- dataSet: this.settingsButtonDataSet ||= {
755
- class: "settings-button"
756
- },
757
- onPress: this.tt.onSettingsClicked
758
- }, /*#__PURE__*/React.createElement(Icon, {
759
- name: "gear",
760
- size: 20
761
- }))));
762
- }
763
- tableFooter() {
764
- const {
765
- result
766
- } = digs(this.collection, "result");
767
- const currentPage = result.currentPage();
768
- const totalCount = result.totalCount();
769
- const perPage = result.perPage();
770
- const to = Math.min(currentPage * perPage, totalCount);
771
- const defaultValue = "Showing %{from} to %{to} out of %{total_count} total.";
772
- let from = (currentPage - 1) * perPage + 1;
773
- if (to === 0) from = 0;
774
- return /*#__PURE__*/React.createElement(View, {
775
- style: this.rootViewStyle ||= {
776
- flexDirection: "row",
777
- justifyContent: "space-between",
778
- marginTop: 10
779
- }
780
- }, /*#__PURE__*/React.createElement(View, {
781
- dataSet: this.showingCountsDataSet ||= {
782
- class: "showing-counts"
783
- },
784
- style: this.showingCountsStyle ||= {
785
- flexDirection: "row"
786
- }
787
- }, /*#__PURE__*/React.createElement(Text, null, this.t(".showing_from_to_out_of_total", {
788
- defaultValue,
789
- from,
790
- to,
791
- total_count: totalCount
792
- })), this.p.workplace && this.s.currentWorkplaceCount !== null && /*#__PURE__*/React.createElement(Text, {
793
- style: this.xSelectedTextStyle ||= {
794
- marginLeft: 3
795
- }
796
- }, this.t(".x_selected", {
797
- defaultValue: "%{selected} selected.",
798
- selected: this.s.currentWorkplaceCount
799
- }))), /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(Select, {
800
- className: "per-page-select",
801
- defaultValue: perPage,
802
- onChange: this.tt.onPerPageChanged,
803
- options: paginationOptions
804
- })));
805
- }
806
- className() {
807
- const classNames = ["api-maker--table"];
808
- if (this.props.className) {
809
- classNames.push(this.props.className);
810
- }
811
- return classNames.join(" ");
812
- }
813
- columnProps(column) {
814
- const props = {};
815
- if (column.textCenter) {
816
- props.style ||= {};
817
- props.style.textAlign = "center";
401
+ onPerPageChanged = (e) => {
402
+ const { queryName } = this.s;
403
+ const newPerPageValue = digg(e, "target", "value");
404
+ const perKey = `${queryName}_per`;
405
+ const paramsChange = {};
406
+ paramsChange[perKey] = newPerPageValue;
407
+ Params.changeParams(paramsChange);
408
+ };
409
+ renderItem = ({ index, item: model }) => {
410
+ if (!this.s.tableSettingLoaded) {
411
+ return (_jsx(View, { children: _jsx(Text, { children: this.t(".loading_dot_dot_dot", { defaultValue: "Loading..." }) }) }));
412
+ }
413
+ return (_jsx(ModelRow, { cacheKey: model.cacheKey(), columns: this.s.columnsToShow, columnWidths: this.columnWidths(), events: this.tt.events, index: index, model: model, table: this, tableSettingFullCacheKey: this.s.tableSettingFullCacheKey }, model.id()));
414
+ };
415
+ styleForColumn = ({ column, columnIndex, even, style, type }) => {
416
+ const { styleUI } = this.p;
417
+ const defaultStyle = {
418
+ justifyContent: "center",
419
+ padding: 8,
420
+ overflow: "hidden"
421
+ };
422
+ if (styleUI) {
423
+ Object.assign(defaultStyle, {
424
+ backgroundColor: even ? "#f5f5f5" : "#fff"
425
+ });
426
+ }
427
+ if (type == "actions") {
428
+ defaultStyle.flexDirection = "row";
429
+ defaultStyle.alignItems = "center";
430
+ if (this.tt.mdUp) {
431
+ defaultStyle.marginLeft = "auto";
432
+ }
433
+ else {
434
+ defaultStyle.marginRight = "auto";
435
+ }
436
+ }
437
+ else if (this.tt.mdUp && styleUI) {
438
+ defaultStyle.borderRight = "1px solid #dbdbdb";
439
+ }
440
+ const actualStyle = Object.assign(defaultStyle, style);
441
+ return actualStyle;
442
+ };
443
+ styleForHeader = ({ column, columnIndex, style, type }) => {
444
+ const { mdUp } = this.tt;
445
+ const defaultStyle = {
446
+ flexDirection: "row",
447
+ alignItems: "center",
448
+ padding: 8
449
+ };
450
+ if (type != "actions" && mdUp && this.p.styleUI) {
451
+ defaultStyle.borderRight = "1px solid #dbdbdb";
452
+ }
453
+ const actualStyle = Object.assign(defaultStyle, style);
454
+ return actualStyle;
455
+ };
456
+ styleForHeaderText() {
457
+ const actualStyle = { fontWeight: "bold" };
458
+ return actualStyle;
818
459
  }
819
- if (column.textRight) {
820
- props.style ||= {};
821
- props.style.textAlign = "right";
460
+ styleForRow = ({ even } = {}) => {
461
+ const actualStyle = {
462
+ flex: 1,
463
+ alignItems: "stretch"
464
+ };
465
+ if (even && this.p.styleUI) {
466
+ actualStyle.backgroundColor = "#f5f5f5";
467
+ }
468
+ return actualStyle;
469
+ };
470
+ styleForRowHeader = () => {
471
+ const actualStyle = {
472
+ flex: 1,
473
+ alignItems: "stretch"
474
+ };
475
+ return actualStyle;
476
+ };
477
+ tableControls() {
478
+ const { controls } = this.props;
479
+ const { showSettings } = this.s;
480
+ const { models, qParams, query, result } = digs(this.collection, "models", "qParams", "query", "result");
481
+ return (_jsxs(View, { style: this.rootViewStyle ||= { flexDirection: "row" }, children: [controls && controls({ models, qParams, query, result }), _jsx(Pressable, { dataSet: { class: "filter-button" }, onPress: this.tt.onFilterClicked, children: _jsx(Icon, { name: "search", size: 20 }) }), _jsxs(View, { children: [showSettings &&
482
+ _jsx(Settings, { onRequestClose: this.tt.onRequestCloseSettings, table: this }), _jsx(Pressable, { dataSet: this.settingsButtonDataSet ||= { class: "settings-button" }, onPress: this.tt.onSettingsClicked, children: _jsx(Icon, { name: "gear", size: 20 }) })] })] }));
822
483
  }
823
- return props;
824
- }
825
- headerProps(column) {
826
- const props = {};
827
- if (column.textCenter) {
828
- props.style ||= {};
829
- props.style.justifyContent = "center";
484
+ tableFooter() {
485
+ const { result } = digs(this.collection, "result");
486
+ const currentPage = result.currentPage();
487
+ const totalCount = result.totalCount();
488
+ const perPage = result.perPage();
489
+ const to = Math.min(currentPage * perPage, totalCount);
490
+ const defaultValue = "Showing %{from} to %{to} out of %{total_count} total.";
491
+ let from = ((currentPage - 1) * perPage) + 1;
492
+ if (to === 0)
493
+ from = 0;
494
+ return (_jsxs(View, { style: this.rootViewStyle ||= { flexDirection: "row", justifyContent: "space-between", marginTop: 10 }, children: [_jsxs(View, { dataSet: this.showingCountsDataSet ||= { class: "showing-counts" }, style: this.showingCountsStyle ||= { flexDirection: "row" }, children: [_jsx(Text, { children: this.t(".showing_from_to_out_of_total", { defaultValue, from, to, total_count: totalCount }) }), this.p.workplace && this.s.currentWorkplaceCount !== null &&
495
+ _jsx(Text, { style: this.xSelectedTextStyle ||= { marginLeft: 3 }, children: this.t(".x_selected", { defaultValue: "%{selected} selected.", selected: this.s.currentWorkplaceCount }) })] }), _jsx(View, { children: _jsx(Select, { className: "per-page-select", defaultValue: perPage, onChange: this.tt.onPerPageChanged, options: paginationOptions }) })] }));
830
496
  }
831
- if (column.textRight) {
832
- props.style ||= {};
833
- props.style.justifyContent = "end";
497
+ className() {
498
+ const classNames = ["api-maker--table"];
499
+ if (this.props.className) {
500
+ classNames.push(this.props.className);
501
+ }
502
+ return classNames.join(" ");
834
503
  }
835
- return props;
836
- }
837
- columnWidths() {
838
- const columnWidths = {};
839
- for (const column of this.s.preparedColumns) {
840
- columnWidths[column.tableSettingColumn.identifier()] = column.width;
504
+ columnProps(column) {
505
+ const props = {};
506
+ if (column.textCenter) {
507
+ props.style ||= {};
508
+ props.style.textAlign = "center";
509
+ }
510
+ if (column.textRight) {
511
+ props.style ||= {};
512
+ props.style.textAlign = "right";
513
+ }
514
+ return props;
841
515
  }
842
- return columnWidths;
843
- }
844
- headersContentFromColumns = () => {
845
- return /*#__PURE__*/React.createElement(DraggableSort, {
846
- data: this.s.columnsToShow,
847
- events: this.tt.draggableSortEvents,
848
- horizontal: true,
849
- keyExtractor: this.tt.dragListkeyExtractor,
850
- onItemMoved: this.tt.onItemMoved,
851
- onReordered: this.tt.onReordered,
852
- renderItem: this.tt.dragListRenderItemContent
853
- });
854
- };
855
- dragListCacheKeyExtractor = item => `${item.tableSettingColumn.identifier()}-${this.s.resizing}`;
856
- dragListkeyExtractor = item => item.tableSettingColumn.identifier();
857
- onItemMoved = ({
858
- animationArgs,
859
- itemIndex,
860
- x,
861
- y
862
- }) => {
863
- const animatedPosition = digg(this, "s", "columnsToShow", itemIndex, "animatedPosition");
864
- if (animationArgs) {
865
- Animated.timing(animatedPosition, animationArgs).start();
866
- } else {
867
- animatedPosition.setValue({
868
- x,
869
- y
870
- });
516
+ headerProps(column) {
517
+ const props = {};
518
+ if (column.textCenter) {
519
+ props.style ||= {};
520
+ props.style.justifyContent = "center";
521
+ }
522
+ if (column.textRight) {
523
+ props.style ||= {};
524
+ props.style.justifyContent = "end";
525
+ }
526
+ return props;
871
527
  }
872
- };
873
- onReordered = async ({
874
- fromItem,
875
- fromPosition,
876
- toItem,
877
- toPosition
878
- }) => {
879
- if (fromPosition == toPosition) return; // Only do requests and queries if changed
880
-
881
- const TableSettingColumn = fromItem.tableSettingColumn.constructor;
882
- const toColumn = await TableSettingColumn.find(toItem.tableSettingColumn.id()); // Need to load latest position because ActsAsList might have changed it
883
-
884
- await fromItem.tableSettingColumn.update({
885
- position: toColumn.position()
886
- });
887
- };
888
- dragListRenderItemContent = ({
889
- isActive,
890
- item,
891
- touchProps
892
- }) => {
893
- const {
894
- animatedWidth,
895
- animatedZIndex,
896
- column,
897
- tableSettingColumn
898
- } = item;
899
- return /*#__PURE__*/React.createElement(HeaderColumn, {
900
- active: isActive,
901
- animatedWidth: animatedWidth,
902
- animatedZIndex: animatedZIndex,
903
- column: column,
904
- key: tableSettingColumn.identifier(),
905
- resizing: this.s.resizing,
906
- table: this,
907
- tableSettingColumn: tableSettingColumn,
908
- touchProps: touchProps,
909
- widths: this.s.widths
910
- });
911
- };
912
- headerClassNameForColumn(column) {
913
- const classNames = [];
914
- if (column.commonProps && column.commonProps.className) classNames.push(column.commonProps.className);
915
- if (column.headerProps && column.headerProps.className) classNames.push(column.headerProps.className);
916
- return classNames;
917
- }
918
- headerLabelForColumn(column) {
919
- const {
920
- modelClass
921
- } = this.p;
922
- if ("label" in column) {
923
- if (typeof column.label == "function") {
924
- return column.label();
925
- } else {
926
- return column.label;
927
- }
528
+ columnWidths() {
529
+ const columnWidths = {};
530
+ for (const column of this.s.preparedColumns) {
531
+ columnWidths[column.tableSettingColumn.identifier()] = column.width;
532
+ }
533
+ return columnWidths;
928
534
  }
929
- let currentModelClass = modelClass;
930
-
931
- // Calculate current model class through path
932
- if (column.path) {
933
- for (const pathPart of column.path) {
934
- const relationships = digg(currentModelClass.modelClassData(), "relationships");
935
- const relationship = relationships.find(relationshipInArray => relationshipInArray.name == inflection.underscore(pathPart));
936
- currentModelClass = modelClassRequire(digg(relationship, "resource_name"));
937
- }
535
+ headersContentFromColumns = () => {
536
+ return (_jsx(DraggableSort, { data: this.s.columnsToShow, events: this.tt.draggableSortEvents, horizontal: true, keyExtractor: this.tt.dragListkeyExtractor, onItemMoved: this.tt.onItemMoved, onReordered: this.tt.onReordered, renderItem: this.tt.dragListRenderItemContent }));
537
+ };
538
+ dragListCacheKeyExtractor = (item) => `${item.tableSettingColumn.identifier()}-${this.s.resizing}`;
539
+ dragListkeyExtractor = (item) => item.tableSettingColumn.identifier();
540
+ onItemMoved = ({ animationArgs, itemIndex, x, y }) => {
541
+ const animatedPosition = digg(this, "s", "columnsToShow", itemIndex, "animatedPosition");
542
+ if (animationArgs) {
543
+ Animated.timing(animatedPosition, animationArgs).start();
544
+ }
545
+ else {
546
+ animatedPosition.setValue({ x, y });
547
+ }
548
+ };
549
+ onReordered = async ({ fromItem, fromPosition, toItem, toPosition }) => {
550
+ if (fromPosition == toPosition)
551
+ return; // Only do requests and queries if changed
552
+ const TableSettingColumn = fromItem.tableSettingColumn.constructor;
553
+ const toColumn = await TableSettingColumn.find(toItem.tableSettingColumn.id()); // Need to load latest position because ActsAsList might have changed it
554
+ await fromItem.tableSettingColumn.update({ position: toColumn.position() });
555
+ };
556
+ dragListRenderItemContent = ({ isActive, item, touchProps }) => {
557
+ const { animatedWidth, animatedZIndex, column, tableSettingColumn } = item;
558
+ return (_jsx(HeaderColumn, { active: isActive, animatedWidth: animatedWidth, animatedZIndex: animatedZIndex, column: column, resizing: this.s.resizing, table: this, tableSettingColumn: tableSettingColumn, touchProps: touchProps, widths: this.s.widths }, tableSettingColumn.identifier()));
559
+ };
560
+ headerClassNameForColumn(column) {
561
+ const classNames = [];
562
+ if (column.commonProps && column.commonProps.className)
563
+ classNames.push(column.commonProps.className);
564
+ if (column.headerProps && column.headerProps.className)
565
+ classNames.push(column.headerProps.className);
566
+ return classNames;
938
567
  }
939
- if (column.attribute) return currentModelClass.humanAttributeName(column.attribute);
940
- throw new Error("No 'label' or 'attribute' was given");
941
- }
942
- onFilterFormSubmit = () => this.submitFilter();
943
- onRequestCloseSettings = () => this.setState({
944
- showSettings: false
945
- });
946
- onSettingsClicked = e => {
947
- e.preventDefault();
948
- this.setState({
949
- showSettings: !this.s.showSettings
950
- });
951
- };
952
- submitFilter = () => {
953
- const {
954
- appHistory
955
- } = this.props;
956
- const {
957
- queryQName
958
- } = this.s;
959
- const changeParamsParams = {};
960
- const qParams = this.s.filterForm.asObject();
961
- if (Platform.OS == "web") {
962
- const filterForm = digg(this.tt.filterFormRef, "current");
963
- const navtiveFormParams = Params.serializeForm(filterForm);
964
- incorporate(qParams, navtiveFormParams);
568
+ headerLabelForColumn(column) {
569
+ const { modelClass } = this.p;
570
+ if ("label" in column) {
571
+ if (typeof column.label == "function") {
572
+ return column.label();
573
+ }
574
+ else {
575
+ return column.label;
576
+ }
577
+ }
578
+ let currentModelClass = modelClass;
579
+ // Calculate current model class through path
580
+ if (column.path) {
581
+ for (const pathPart of column.path) {
582
+ const relationships = digg(currentModelClass.modelClassData(), "relationships");
583
+ const relationship = relationships.find((relationshipInArray) => relationshipInArray.name == inflection.underscore(pathPart));
584
+ currentModelClass = modelClassRequire(digg(relationship, "resource_name"));
585
+ }
586
+ }
587
+ if (column.attribute)
588
+ return currentModelClass.humanAttributeName(column.attribute);
589
+ throw new Error("No 'label' or 'attribute' was given");
965
590
  }
966
- changeParamsParams[queryQName] = JSON.stringify(qParams);
967
- Params.changeParams(changeParamsParams, {
968
- appHistory
969
- });
970
- };
971
- submitFilterDebounce = debounce(this.tt.submitFilter);
591
+ onFilterFormSubmit = () => this.submitFilter();
592
+ onRequestCloseSettings = () => this.setState({ showSettings: false });
593
+ onSettingsClicked = (e) => {
594
+ e.preventDefault();
595
+ this.setState({ showSettings: !this.s.showSettings });
596
+ };
597
+ submitFilter = () => {
598
+ const { appHistory } = this.props;
599
+ const { queryQName } = this.s;
600
+ const changeParamsParams = {};
601
+ const qParams = this.s.filterForm.asObject();
602
+ if (Platform.OS == "web") {
603
+ const filterForm = digg(this.tt.filterFormRef, "current");
604
+ const navtiveFormParams = Params.serializeForm(filterForm);
605
+ incorporate(qParams, navtiveFormParams);
606
+ }
607
+ changeParamsParams[queryQName] = JSON.stringify(qParams);
608
+ Params.changeParams(changeParamsParams, { appHistory });
609
+ };
610
+ submitFilterDebounce = debounce(this.tt.submitFilter);
972
611
  }));
973
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiZGlncyIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VNZW1vIiwidXNlUmVmIiwiQW5pbWF0ZWQiLCJQbGF0Zm9ybSIsIlByZXNzYWJsZSIsIlZpZXciLCJCYXNlQ29tcG9uZW50IiwiQ2FyZCIsImNsYXNzTmFtZXMiLCJDb2xsZWN0aW9uIiwiY29sdW1uVmlzaWJsZSIsImRlYm91bmNlIiwiRHJhZ2dhYmxlU29ydCIsIkV2ZW50RW1pdHRlciIsIkZpbHRlcnMiLCJGbGF0TGlzdCIsIkZvcm0iLCJIZWFkZXIiLCJIZWFkZXJDb2x1bW4iLCJIZWFkZXJTZWxlY3QiLCJJY29uIiwiaW5jb3Jwb3JhdGUiLCJpbmZsZWN0aW9uIiwibWVtbyIsIm1vZGVsQ2xhc3NSZXF1aXJlIiwiTW9kZWxSb3ciLCJQYWdpbmF0ZSIsIlBhcmFtcyIsIlByb3BUeXBlcyIsIlJvdyIsInNlbGVjdENhbGN1bGF0b3IiLCJTZWxlY3QiLCJTZXR0aW5ncyIsInNoYXBlQ29tcG9uZW50IiwiVGFibGVTZXR0aW5ncyIsIlRleHQiLCJ1bmlxdW5pemUiLCJ1c2VCcmVha3BvaW50IiwidXNlQ29sbGVjdGlvbiIsInVzZUkxOG4iLCJ1c2VFdmVudEVtaXR0ZXIiLCJ1c2VNb2RlbEV2ZW50IiwidXNlUXVlcnlQYXJhbXMiLCJXaWR0aHMiLCJwYWdpbmF0aW9uT3B0aW9ucyIsIldvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94IiwibGF6eSIsIlRhYmxlQ29udGV4dCIsIkxpc3RIZWFkZXJDb21wb25lbnQiLCJzZXR1cCIsInVzZVN0YXRlcyIsImxhc3RVcGRhdGUiLCJEYXRlIiwicmVuZGVyIiwibWRVcCIsInRhYmxlQ29udGV4dFZhbHVlIiwidGFibGUiLCJjb2xsZWN0aW9uIiwiZXZlbnRzIiwicXVlcnlXaXRob3V0UGFnaW5hdGlvbiIsInQiLCJ0dCIsInF1ZXJ5Iiwib25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCIsImNyZWF0ZUVsZW1lbnQiLCJkYXRhU2V0IiwiY2xhc3MiLCJzdHlsZSIsInN0eWxlRm9yUm93SGVhZGVyIiwicCIsIndvcmtwbGFjZSIsInMiLCJjdXJyZW50V29ya3BsYWNlIiwic3R5bGVGb3JIZWFkZXIiLCJ3aWR0aCIsInVuZGVmaW5lZCIsIndvcmtlclBsZ3VpbnNDaGVja0FsbENoZWNrYm94U3R5bGUiLCJtYXJnaW5Ib3Jpem9udGFsIiwic2VsZWN0QWxsRm91bmRUZXh0U3R5bGUiLCJtYXJnaW5MZWZ0IiwiZGVmYXVsdFZhbHVlIiwicHJlcGFyZWRDb2x1bW5zIiwiRnJhZ21lbnQiLCJoZWFkZXJzQ29udGVudEZyb21Db2x1bW5zIiwidHlwZSIsInNldFN0YXRlIiwiQXBpTWFrZXJUYWJsZSIsImRlZmF1bHRQcm9wcyIsImNhcmQiLCJjdXJyZW50VXNlciIsImRlc3Ryb3lFbmFibGVkIiwiZmlsdGVyQ2FyZCIsImZpbHRlclN1Ym1pdEJ1dHRvbiIsIm5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQiLCJub1JlY29yZHNGb3VuZENvbnRlbnQiLCJwcmVsb2FkcyIsInNlbGVjdCIsInN0eWxlVUkiLCJwcm9wVHlwZXMiLCJhYmlsaXRpZXMiLCJvYmplY3QiLCJhY3Rpb25zQ29udGVudCIsImZ1bmMiLCJhcHBIaXN0b3J5IiwiYm9vbCIsImlzUmVxdWlyZWQiLCJjbGFzc05hbWUiLCJzdHJpbmciLCJpbnN0YW5jZU9mIiwiY29sdW1ucyIsIm9uZU9mVHlwZSIsImFycmF5IiwiY29udHJvbHMiLCJkZWZhdWx0RGF0ZUZvcm1hdE5hbWUiLCJkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lIiwiZGVmYXVsdFBhcmFtcyIsImRlc3Ryb3lNZXNzYWdlIiwiZWRpdE1vZGVsUGF0aCIsImZpbHRlckNvbnRlbnQiLCJmaWx0ZXJTdWJtaXRMYWJlbCIsImFueSIsImdyb3VwQnkiLCJoZWFkZXIiLCJpZGVudGlmaWVyIiwibW9kZWxDbGFzcyIsIm9uTW9kZWxzTG9hZGVkIiwicGFnaW5hdGVDb250ZW50IiwicGFnaW5hdGlvbkNvbXBvbmVudCIsInF1ZXJ5TWV0aG9kIiwicXVlcnlOYW1lIiwic2VsZWN0Q29sdW1ucyIsInN0eWxlcyIsInZpZXdNb2RlbFBhdGgiLCJkcmFnZ2FibGVTb3J0RXZlbnRzIiwidGFibGVTZXR0aW5ncyIsIm5hbWVzcGFjZSIsIm5hbWUiLCJicmVha3BvaW50IiwicXVlcnlQYXJhbXMiLCJzZXRJbnN0YW5jZSIsImZpbHRlckZvcm1SZWYiLCJjb2xsZWN0aW9uS2V5IiwibW9kZWxDbGFzc0RhdGEiLCJwcm9wcyIsInF1ZXJ5U05hbWUiLCJjb2x1bW5zQXNBcnJheSIsImN1cnJlbnRXb3JrcGxhY2VDb3VudCIsImZpbHRlckZvcm0iLCJjb2x1bW5zVG9TaG93IiwiZHJhZ2dlZENvbHVtbiIsInByZWxvYWQiLCJxdWVyeVFOYW1lIiwicXVlcnlQYWdlTmFtZSIsInJlc2l6aW5nIiwic2hvd0ZpbHRlcnMiLCJCb29sZWFuIiwic2hvd1NldHRpbmdzIiwidGFibGVTZXR0aW5nIiwidGFibGVTZXR0aW5nTG9hZGVkIiwidGFibGVTZXR0aW5nRnVsbENhY2hlS2V5Iiwid2lkdGhzIiwiY2FjaGVLZXkiLCJsb2FkQ3VycmVudFdvcmtwbGFjZSIsInRoZW4iLCJsb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50IiwiaWQiLCJsb2FkVGFibGVTZXR0aW5nIiwib25MaW5rc0NyZWF0ZWQiLCJvbkxpbmtzRGVzdHJveWVkIiwiY29sbGVjdGlvblJlYWR5IiwiYWJpbGl0aWVzVG9Mb2FkIiwiaWZDb25kaXRpb24iLCJwYWdpbmF0aW9uIiwic3RhdGUiLCJjbG9uZSIsImV4Y2VwdCIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnRW5kQW5pbWF0aW9uIiwiZ2V0Q29sdW1uc1RvU2hvdyIsIml0ZW0iLCJhbmltYXRlZFpJbmRleCIsInNldFZhbHVlIiwiV29ya3BsYWNlIiwicmVzdWx0IiwiY3VycmVudCIsIldvcmtwbGFjZUxpbmsiLCJyYW5zYWNrIiwicmVzb3VyY2VfdHlwZV9lcSIsIndvcmtwbGFjZV9pZF9lcSIsImNvdW50IiwiZmlsdGVyIiwiY29sdW1uIiwidGFibGVTZXR0aW5nQ29sdW1uIiwic29ydCIsImEiLCJiIiwicG9zaXRpb24iLCJsb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MiLCJtZXJnZWRQcmVsb2FkcyIsImZ1bGxDYWNoZUtleSIsInVwZGF0ZVNldHRpbmdzRnVsbENhY2hlS2V5IiwiY29uY2F0IiwibW9kZWxzIiwib3ZlcmFsbENvdW50IiwicVBhcmFtcyIsInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50Iiwic2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCIsImFyZ3MiLCJFcnJvciIsIm9uTGF5b3V0Iiwib25Db250YWluZXJMYXlvdXQiLCJjb250YWluZXIiLCJjYXJkT3JUYWJsZSIsIm93bkFiaWxpdGllcyIsInB1c2giLCJsZW5ndGgiLCJtb2RlbENsYXNzTmFtZSIsIm1vZGVsTmFtZSIsImFiaWxpdHkiLCJyZXN0UHJvcHMiLCJoZWFkZXJDb250ZW50IiwiUGFnaW5hdGlvbkNvbXBvbmVudCIsImh1bWFuIiwiZmxhdExpc3RTdHlsZSIsIm92ZXJmbG93WCIsImJvcmRlciIsImJvcmRlclJhZGl1cyIsImZsYXRMaXN0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIl9leHRlbmRzIiwiZGF0YSIsImV4dHJhRGF0YSIsImtleUV4dHJhY3RvciIsImtleUV4dHJhdG9yIiwicmVuZGVySXRlbSIsInNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvciIsInRhYmxlQ29udHJvbHMiLCJmb290ZXIiLCJ0YWJsZUZvb3RlciIsImUiLCJuYXRpdmVFdmVudCIsImxheW91dCIsInRhYmxlV2lkdGgiLCJjcmVhdGVkIiwiYW1vdW50Q3JlYXRlZCIsInByZXZTdGF0ZSIsImRlc3Ryb3llZCIsImFtb3VudERlc3Ryb3llZCIsIm1vZGVsIiwic3VibWl0RmlsdGVyIiwic3VibWl0RmlsdGVyRGVib3VuY2UiLCJmb3JtUmVmIiwib25TdWJtaXQiLCJvbkZpbHRlckZvcm1TdWJtaXQiLCJzZXRGb3JtIiwic2V0U3RhdGVzIiwib25GaWx0ZXJDaGFuZ2VkIiwib25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5IiwibWFyZ2luVG9wIiwib25GaWx0ZXJDbGlja2VkIiwicHJldmVudERlZmF1bHQiLCJvblBlclBhZ2VDaGFuZ2VkIiwibmV3UGVyUGFnZVZhbHVlIiwicGVyS2V5IiwicGFyYW1zQ2hhbmdlIiwiY2hhbmdlUGFyYW1zIiwiaW5kZXgiLCJjb2x1bW5XaWR0aHMiLCJrZXkiLCJzdHlsZUZvckNvbHVtbiIsImNvbHVtbkluZGV4IiwiZXZlbiIsImRlZmF1bHRTdHlsZSIsImp1c3RpZnlDb250ZW50IiwicGFkZGluZyIsIm92ZXJmbG93IiwiT2JqZWN0IiwiYXNzaWduIiwiYmFja2dyb3VuZENvbG9yIiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJtYXJnaW5SaWdodCIsImJvcmRlclJpZ2h0IiwiYWN0dWFsU3R5bGUiLCJzdHlsZUZvckhlYWRlclRleHQiLCJmb250V2VpZ2h0Iiwic3R5bGVGb3JSb3ciLCJmbGV4Iiwicm9vdFZpZXdTdHlsZSIsIm9uUHJlc3MiLCJzaXplIiwib25SZXF1ZXN0Q2xvc2UiLCJvblJlcXVlc3RDbG9zZVNldHRpbmdzIiwic2V0dGluZ3NCdXR0b25EYXRhU2V0Iiwib25TZXR0aW5nc0NsaWNrZWQiLCJjdXJyZW50UGFnZSIsInRvdGFsQ291bnQiLCJwZXJQYWdlIiwidG8iLCJNYXRoIiwibWluIiwiZnJvbSIsInNob3dpbmdDb3VudHNEYXRhU2V0Iiwic2hvd2luZ0NvdW50c1N0eWxlIiwidG90YWxfY291bnQiLCJ4U2VsZWN0ZWRUZXh0U3R5bGUiLCJzZWxlY3RlZCIsIm9uQ2hhbmdlIiwib3B0aW9ucyIsImpvaW4iLCJjb2x1bW5Qcm9wcyIsInRleHRDZW50ZXIiLCJ0ZXh0QWxpZ24iLCJ0ZXh0UmlnaHQiLCJoZWFkZXJQcm9wcyIsImhvcml6b250YWwiLCJkcmFnTGlzdGtleUV4dHJhY3RvciIsIm9uSXRlbU1vdmVkIiwib25SZW9yZGVyZWQiLCJkcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50IiwiZHJhZ0xpc3RDYWNoZUtleUV4dHJhY3RvciIsImFuaW1hdGlvbkFyZ3MiLCJpdGVtSW5kZXgiLCJ4IiwieSIsImFuaW1hdGVkUG9zaXRpb24iLCJ0aW1pbmciLCJzdGFydCIsImZyb21JdGVtIiwiZnJvbVBvc2l0aW9uIiwidG9JdGVtIiwidG9Qb3NpdGlvbiIsIlRhYmxlU2V0dGluZ0NvbHVtbiIsImNvbnN0cnVjdG9yIiwidG9Db2x1bW4iLCJmaW5kIiwidXBkYXRlIiwiaXNBY3RpdmUiLCJ0b3VjaFByb3BzIiwiYW5pbWF0ZWRXaWR0aCIsImFjdGl2ZSIsImhlYWRlckNsYXNzTmFtZUZvckNvbHVtbiIsImNvbW1vblByb3BzIiwiaGVhZGVyTGFiZWxGb3JDb2x1bW4iLCJsYWJlbCIsImN1cnJlbnRNb2RlbENsYXNzIiwicGF0aCIsInBhdGhQYXJ0IiwicmVsYXRpb25zaGlwcyIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uc2hpcEluQXJyYXkiLCJ1bmRlcnNjb3JlIiwiYXR0cmlidXRlIiwiaHVtYW5BdHRyaWJ1dGVOYW1lIiwiY2hhbmdlUGFyYW1zUGFyYW1zIiwiYXNPYmplY3QiLCJPUyIsIm5hdnRpdmVGb3JtUGFyYW1zIiwic2VyaWFsaXplRm9ybSIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvdGFibGUuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgUmVhY3QsIHtjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VSZWZ9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0FuaW1hdGVkLCBQbGF0Zm9ybSwgUHJlc3NhYmxlLCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuLi9iYXNlLWNvbXBvbmVudFwiXG5pbXBvcnQgQ2FyZCBmcm9tIFwiLi4vYm9vdHN0cmFwL2NhcmRcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4uL2NvbGxlY3Rpb25cIlxuaW1wb3J0IGNvbHVtblZpc2libGUgZnJvbSBcIi4vY29sdW1uLXZpc2libGVcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRHJhZ2dhYmxlU29ydCBmcm9tIFwiLi4vZHJhZ2dhYmxlLXNvcnQvaW5kZXhcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCJcbmltcG9ydCBGaWx0ZXJzIGZyb20gXCIuL2ZpbHRlcnNcIlxuaW1wb3J0IEZsYXRMaXN0IGZyb20gXCIuL2NvbXBvbmVudHMvZmxhdC1saXN0XCJcbmltcG9ydCB7Rm9ybX0gZnJvbSBcIi4uL2Zvcm1cIlxuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9jb21wb25lbnRzL2hlYWRlclwiXG5pbXBvcnQgSGVhZGVyQ29sdW1uIGZyb20gXCIuL2hlYWRlci1jb2x1bW5cIlxuaW1wb3J0IEhlYWRlclNlbGVjdCBmcm9tIFwiLi9oZWFkZXItc2VsZWN0XCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi91dGlscy9pY29uXCJcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IG1vZGVsQ2xhc3NSZXF1aXJlIGZyb20gXCIuLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBNb2RlbFJvdyBmcm9tIFwiLi9tb2RlbC1yb3dcIlxuaW1wb3J0IFBhZ2luYXRlIGZyb20gXCIuLi9ib290c3RyYXAvcGFnaW5hdGVcIlxuaW1wb3J0IFBhcmFtcyBmcm9tIFwiLi4vcGFyYW1zXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJvdyBmcm9tIFwiLi9jb21wb25lbnRzL3Jvd1wiXG5pbXBvcnQgc2VsZWN0Q2FsY3VsYXRvciBmcm9tIFwiLi9zZWxlY3QtY2FsY3VsYXRvclwiXG5pbXBvcnQgU2VsZWN0IGZyb20gXCIuLi9pbnB1dHMvc2VsZWN0XCJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy9pbmRleFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3NoYXBlLWNvbXBvbmVudFwiXG5pbXBvcnQgVGFibGVTZXR0aW5ncyBmcm9tIFwiLi90YWJsZS1zZXR0aW5nc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vdXRpbHMvdGV4dFwiXG5pbXBvcnQgdW5pcXVuaXplIGZyb20gXCJ1bmlxdW5pemVcIlxuaW1wb3J0IHVzZUJyZWFrcG9pbnQgZnJvbSBcIi4uL3VzZS1icmVha3BvaW50XCJcbmltcG9ydCB1c2VDb2xsZWN0aW9uIGZyb20gXCIuLi91c2UtY29sbGVjdGlvblwiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG5cIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXNlLWV2ZW50LWVtaXR0ZXJcIlxuaW1wb3J0IHVzZU1vZGVsRXZlbnQgZnJvbSBcIi4uL3VzZS1tb2RlbC1ldmVudFwiXG5pbXBvcnQgdXNlUXVlcnlQYXJhbXMgZnJvbSBcIm9uLWxvY2F0aW9uLWNoYW5nZWQvYnVpbGQvdXNlLXF1ZXJ5LXBhcmFtc1wiXG5pbXBvcnQgV2lkdGhzIGZyb20gXCIuL3dpZHRoc1wiXG5cbmNvbnN0IHBhZ2luYXRpb25PcHRpb25zID0gWzMwLCA2MCwgOTAsIFtcIkFsbFwiLCBcImFsbFwiXV1cbmNvbnN0IFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94ID0gUmVhY3QubGF6eSgoKSA9PiBpbXBvcnQoXCIuL3dvcmtlci1wbHVnaW5zLWNoZWNrLWFsbC1jaGVja2JveFwiKSlcbmNvbnN0IFRhYmxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBMaXN0SGVhZGVyQ29tcG9uZW50ID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBMaXN0SGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHNldHVwKCkge1xuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGxhc3RVcGRhdGU6IG5ldyBEYXRlKClcbiAgICB9KVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHttZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHRhYmxlQ29udGV4dFZhbHVlID0gdXNlQ29udGV4dChUYWJsZUNvbnRleHQpXG4gICAgY29uc3QgdGFibGUgPSB0YWJsZUNvbnRleHRWYWx1ZS50YWJsZVxuICAgIGNvbnN0IHtjb2xsZWN0aW9uLCBldmVudHMsIHF1ZXJ5V2l0aG91dFBhZ2luYXRpb24sIHR9ID0gdGFibGUudHRcbiAgICBjb25zdCB7cXVlcnl9ID0gZGlncyhjb2xsZWN0aW9uLCBcInF1ZXJ5XCIpXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIoZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcblxuICAgIHJldHVybiAoXG4gICAgICA8Um93IGRhdGFTZXQ9e3tjbGFzczogXCJhcGktbWFrZXIvdGFibGUvaGVhZGVyLXJvd1wifX0gc3R5bGU9e3RhYmxlLnN0eWxlRm9yUm93SGVhZGVyKCl9PlxuICAgICAgICB7dGFibGUucC53b3JrcGxhY2UgJiYgdGFibGUucy5jdXJyZW50V29ya3BsYWNlICYmXG4gICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7d2lkdGg6IG1kVXAgPyA0MSA6IHVuZGVmaW5lZH19KX0+XG4gICAgICAgICAgICA8V29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3hcbiAgICAgICAgICAgICAgY3VycmVudFdvcmtwbGFjZT17dGFibGUucy5jdXJyZW50V29ya3BsYWNlfVxuICAgICAgICAgICAgICBxdWVyeT17cXVlcnlXaXRob3V0UGFnaW5hdGlvbn1cbiAgICAgICAgICAgICAgc3R5bGU9e3RoaXMud29ya2VyUGxndWluc0NoZWNrQWxsQ2hlY2tib3hTdHlsZSB8fD0ge21hcmdpbkhvcml6b250YWw6IFwiYXV0b1wifX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMuc2VsZWN0QWxsRm91bmRUZXh0U3R5bGUgfHw9IHttYXJnaW5MZWZ0OiAzfX0+XG4gICAgICAgICAgICAgICAge3QoXCIuc2VsZWN0X2FsbF9mb3VuZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIlNlbGVjdCBhbGwgZm91bmRcIn0pfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIH1cbiAgICAgICAgeyFtZFVwICYmXG4gICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7fX0pfT5cbiAgICAgICAgICAgIDxIZWFkZXJTZWxlY3QgcHJlcGFyZWRDb2x1bW5zPXt0YWJsZS5zLnByZXBhcmVkQ29sdW1uc30gcXVlcnk9e3F1ZXJ5fSB0YWJsZT17dGFibGV9IC8+XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIH1cbiAgICAgICAge21kVXAgJiZcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge3RhYmxlLmhlYWRlcnNDb250ZW50RnJvbUNvbHVtbnMoKX1cbiAgICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge30sIHR5cGU6IFwiYWN0aW9uc1wifSl9IC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgIH1cbiAgICAgIDwvUm93PlxuICAgIClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbn0pKVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VyVGFibGUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBjYXJkOiB0cnVlLFxuICAgIGN1cnJlbnRVc2VyOiBudWxsLFxuICAgIGRlc3Ryb3lFbmFibGVkOiB0cnVlLFxuICAgIGZpbHRlckNhcmQ6IHRydWUsXG4gICAgZmlsdGVyU3VibWl0QnV0dG9uOiB0cnVlLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICBub1JlY29yZHNGb3VuZENvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICBwcmVsb2FkczogW10sXG4gICAgc2VsZWN0OiB7fSxcbiAgICBzdHlsZVVJOiB0cnVlLFxuICAgIHdvcmtwbGFjZTogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYWJpbGl0aWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGFjdGlvbnNDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhcHBIaXN0b3J5OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNhcmQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbGxlY3Rpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKENvbGxlY3Rpb24pLFxuICAgIGNvbHVtbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBjb250cm9sczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY3VycmVudFVzZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVmYXVsdERhdGVGb3JtYXROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdFBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZXN0cm95RW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBkZXN0cm95TWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBlZGl0TW9kZWxQYXRoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJDYXJkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGZpbHRlckNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlclN1Ym1pdExhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGdyb3VwQnk6IFByb3BUeXBlcy5hcnJheSxcbiAgICBoZWFkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgaWRlbnRpZmllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhZ2luYXRlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHF1ZXJ5TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHNlbGVjdENvbHVtbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlVUk6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmlld01vZGVsUGF0aDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgd29ya3BsYWNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG4gIH1cblxuICBkcmFnZ2FibGVTb3J0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICB0YWJsZVNldHRpbmdzID0gbnVsbFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IHVzZUkxOG4oe25hbWVzcGFjZTogXCJqcy5hcGlfbWFrZXIudGFibGVcIn0pXG4gICAgY29uc3Qge25hbWU6IGJyZWFrcG9pbnQsIG1kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB1c2VRdWVyeVBhcmFtcygpXG5cbiAgICB0aGlzLnNldEluc3RhbmNlKHtcbiAgICAgIGJyZWFrcG9pbnQsXG4gICAgICBmaWx0ZXJGb3JtUmVmOiB1c2VSZWYoKSxcbiAgICAgIG1kVXAsXG4gICAgICB0XG4gICAgfSlcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25LZXkgPSBkaWdnKHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwiY29sbGVjdGlvbktleVwiKVxuICAgIGxldCBxdWVyeU5hbWUgPSB0aGlzLnByb3BzLnF1ZXJ5TmFtZVxuXG4gICAgaWYgKCFxdWVyeU5hbWUpIHF1ZXJ5TmFtZSA9IGNvbGxlY3Rpb25LZXlcblxuICAgIGNvbnN0IHF1ZXJ5U05hbWUgPSBgJHtxdWVyeU5hbWV9X3NgXG5cbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBjb2x1bW5zOiAoKSA9PiB0aGlzLmNvbHVtbnNBc0FycmF5KCksXG4gICAgICBjdXJyZW50V29ya3BsYWNlOiB1bmRlZmluZWQsXG4gICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IG51bGwsXG4gICAgICBmaWx0ZXJGb3JtOiBudWxsLFxuICAgICAgY29sdW1uc1RvU2hvdzogbnVsbCxcbiAgICAgIGRyYWdnZWRDb2x1bW46IG51bGwsXG4gICAgICBpZGVudGlmaWVyOiAoKSA9PiB0aGlzLnByb3BzLmlkZW50aWZpZXIgfHwgYCR7Y29sbGVjdGlvbktleX0tZGVmYXVsdGAsXG4gICAgICBsYXN0VXBkYXRlOiAoKSA9PiBuZXcgRGF0ZSgpLFxuICAgICAgcHJlbG9hZDogdW5kZWZpbmVkLFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBxdWVyeVFOYW1lOiAoKSA9PiBgJHtxdWVyeU5hbWV9X3FgLFxuICAgICAgcXVlcnlQYWdlTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9wYWdlYCxcbiAgICAgIHF1ZXJ5U05hbWUsXG4gICAgICByZXNpemluZzogZmFsc2UsXG4gICAgICBzaG93RmlsdGVyczogKCkgPT4gQm9vbGVhbihxdWVyeVBhcmFtc1txdWVyeVNOYW1lXSksXG4gICAgICBzaG93U2V0dGluZ3M6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nOiB1bmRlZmluZWQsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgd2lkdGhzOiBudWxsXG4gICAgfSlcblxuICAgIHRoaXMudGFibGVDb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgY2FjaGVLZXk6IHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXksXG4gICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlLFxuICAgICAgICByZXNpemluZzogdGhpcy5zLnJlc2l6aW5nLFxuICAgICAgICB0YWJsZTogdGhpc1xuICAgICAgfSksXG4gICAgICBbdGhpcy5zLmxhc3RVcGRhdGUsIHRoaXMucy5yZXNpemluZywgdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleV1cbiAgICApXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByb3BzLndvcmtwbGFjZSkge1xuICAgICAgICB0aGlzLmxvYWRDdXJyZW50V29ya3BsYWNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wLmN1cnJlbnRVc2VyPy5pZCgpXSlcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnR0LnRhYmxlU2V0dGluZ3MgJiYgdGhpcy5zLndpZHRoKSB7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKSwgdGhpcy5zLndpZHRoXSlcblxuICAgIHVzZU1vZGVsRXZlbnQodGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UsIFwid29ya3BsYWNlX2xpbmtzX2NyZWF0ZWRcIiwgdGhpcy50dC5vbkxpbmtzQ3JlYXRlZClcbiAgICB1c2VNb2RlbEV2ZW50KHRoaXMucy5jdXJyZW50V29ya3BsYWNlLCBcIndvcmtwbGFjZV9saW5rc19kZXN0cm95ZWRcIiwgdGhpcy50dC5vbkxpbmtzRGVzdHJveWVkKVxuXG4gICAgbGV0IGNvbGxlY3Rpb25SZWFkeSA9IHRydWVcbiAgICBsZXQgc2VsZWN0XG5cbiAgICBpZiAoIXRoaXMucy5wcmVwYXJlZENvbHVtbnMpIHtcbiAgICAgIGNvbGxlY3Rpb25SZWFkeSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25SZWFkeSkge1xuICAgICAgc2VsZWN0ID0gc2VsZWN0Q2FsY3VsYXRvcih7dGFibGU6IHRoaXN9KVxuICAgIH1cblxuICAgIHRoaXMuY29sbGVjdGlvbiA9IHVzZUNvbGxlY3Rpb24oe1xuICAgICAgYWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllc1RvTG9hZCgpLFxuICAgICAgZGVmYXVsdFBhcmFtczogdGhpcy5wcm9wcy5kZWZhdWx0UGFyYW1zLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5wcm9wcy5jb2xsZWN0aW9uLFxuICAgICAgZ3JvdXBCeTogdGhpcy5wcm9wcy5ncm91cEJ5LFxuICAgICAgaWZDb25kaXRpb246IGNvbGxlY3Rpb25SZWFkeSxcbiAgICAgIG1vZGVsQ2xhc3M6IHRoaXMucHJvcHMubW9kZWxDbGFzcyxcbiAgICAgIG9uTW9kZWxzTG9hZGVkOiB0aGlzLnByb3BzLm9uTW9kZWxzTG9hZGVkLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdGhpcy5wcm9wcy5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiB0aGlzLnByb3BzLm5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgICBwcmVsb2FkczogdGhpcy5zdGF0ZS5wcmVsb2FkLFxuICAgICAgcXVlcnlNZXRob2Q6IHRoaXMucHJvcHMucXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zOiB0aGlzLnByb3BzLnNlbGVjdENvbHVtbnNcbiAgICB9KVxuICAgIHRoaXMucXVlcnlXaXRob3V0UGFnaW5hdGlvbiA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiB0aGlzLmNvbGxlY3Rpb24/LnF1ZXJ5Py5jbG9uZSgpPy5leGNlcHQoXCJwYWdlXCIpLFxuICAgICAgW3RoaXMuY29sbGVjdGlvbi5xdWVyeV1cbiAgICApXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzLCBcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMudHQub25EcmFnU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50cywgXCJvbkRyYWdFbmRBbmltYXRpb25cIiwgdGhpcy50dC5vbkRyYWdFbmRBbmltYXRpb24pXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtjb2x1bW5zVG9TaG93OiB0aGlzLmdldENvbHVtbnNUb1Nob3codGhpcy5zLmNvbHVtbnMpLCBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW19KSA9PiBpdGVtLmFuaW1hdGVkWkluZGV4LnNldFZhbHVlKDk5OTkpXG4gIG9uRHJhZ0VuZEFuaW1hdGlvbiA9ICh7aXRlbX0pID0+IGl0ZW0uYW5pbWF0ZWRaSW5kZXguc2V0VmFsdWUoMClcblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZSgpIHtcbiAgICBjb25zdCBXb3JrcGxhY2UgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZVwiKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFdvcmtwbGFjZS5jdXJyZW50KClcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlID0gZGlnZyhyZXN1bHQsIFwiY3VycmVudFwiLCAwKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZX0pXG4gIH1cblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KCkge1xuICAgIGNvbnN0IFdvcmtwbGFjZUxpbmsgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZUxpbmtcIilcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlQ291bnQgPSBhd2FpdCBXb3JrcGxhY2VMaW5rXG4gICAgICAucmFuc2Fjayh7XG4gICAgICAgIHJlc291cmNlX3R5cGVfZXE6IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSxcbiAgICAgICAgd29ya3BsYWNlX2lkX2VxOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZS5pZCgpXG4gICAgICB9KVxuICAgICAgLmNvdW50KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2VDb3VudH0pXG4gIH1cblxuICBnZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcigoe2NvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSkgPT4gY29sdW1uVmlzaWJsZShjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbikpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50YWJsZVNldHRpbmdDb2x1bW4ucG9zaXRpb24oKSAtIGIudGFibGVTZXR0aW5nQ29sdW1uLnBvc2l0aW9uKCkpXG4gIH1cblxuICBhc3luYyBsb2FkVGFibGVTZXR0aW5nKCkge1xuICAgIHRoaXMudGFibGVTZXR0aW5ncyA9IG5ldyBUYWJsZVNldHRpbmdzKHt0YWJsZTogdGhpc30pXG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLnRhYmxlU2V0dGluZ3MubG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzKClcbiAgICBjb25zdCB7Y29sdW1ucywgcHJlbG9hZH0gPSB0aGlzLnRhYmxlU2V0dGluZ3MucHJlcGFyZWRDb2x1bW5zKHRhYmxlU2V0dGluZylcbiAgICBjb25zdCB7d2lkdGh9ID0gdGhpcy5zXG4gICAgY29uc3Qgd2lkdGhzID0gbmV3IFdpZHRocyh7Y29sdW1ucywgdGFibGU6IHRoaXMsIHdpZHRofSlcbiAgICBjb25zdCBjb2x1bW5zVG9TaG93ID0gdGhpcy5nZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5zVG9TaG93LFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgcHJlbG9hZDogdGhpcy5tZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSxcbiAgICAgIHRhYmxlU2V0dGluZyxcbiAgICAgIHRhYmxlU2V0dGluZ0xvYWRlZDogdHJ1ZSxcbiAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdGFibGVTZXR0aW5nLmZ1bGxDYWNoZUtleSgpLFxuICAgICAgd2lkdGhzXG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZVNldHRpbmdzRnVsbENhY2hlS2V5ID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7dGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZy5mdWxsQ2FjaGVLZXkoKX0pXG5cbiAgY29sdW1uc0FzQXJyYXkgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmNvbHVtbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zKClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zXG4gIH1cblxuICBtZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSB7XG4gICAgY29uc3Qge3ByZWxvYWRzfSA9IHRoaXMucHJvcHNcbiAgICBsZXQgbWVyZ2VkUHJlbG9hZHMgPSBbXVxuXG4gICAgaWYgKHByZWxvYWRzKSBtZXJnZWRQcmVsb2FkcyA9IG1lcmdlZFByZWxvYWRzLmNvbmNhdChwcmVsb2FkcylcbiAgICBpZiAocHJlbG9hZCkgbWVyZ2VkUHJlbG9hZHMgPSBtZXJnZWRQcmVsb2Fkcy5jb25jYXQocHJlbG9hZClcblxuICAgIHJldHVybiB1bmlxdW5pemUobWVyZ2VkUHJlbG9hZHMpXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHttb2RlbENsYXNzLCBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LCBub1JlY29yZHNGb3VuZENvbnRlbnR9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NvbGxlY3Rpb24sIGN1cnJlbnRVc2VyfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cXVlcnlOYW1lLCBxdWVyeVNOYW1lLCBzaG93RmlsdGVyc30gPSB0aGlzLnNcbiAgICBjb25zdCB7XG4gICAgICBtb2RlbHMsXG4gICAgICBvdmVyYWxsQ291bnQsXG4gICAgICBxUGFyYW1zLFxuICAgICAgcXVlcnksXG4gICAgICByZXN1bHQsXG4gICAgICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcbiAgICB9ID0gZGlncyhcbiAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgIFwibW9kZWxzXCIsXG4gICAgICBcIm92ZXJhbGxDb3VudFwiLFxuICAgICAgXCJxUGFyYW1zXCIsXG4gICAgICBcInF1ZXJ5XCIsXG4gICAgICBcInJlc3VsdFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgICApXG5cbiAgICBpZiAoY29sbGVjdGlvbiAmJiBjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUgIT0gbW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZGVsIGNsYXNzIGZyb20gY29sbGVjdGlvbiAnJHtjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9JyBgICtcbiAgICAgICAgYGRpZG4ndCBtYXRjaCBtb2RlbCBjbGFzcyBvbiB0YWJsZTogJyR7bW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9J2BcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgZGF0YVNldD17e2NsYXNzOiB0aGlzLmNsYXNzTmFtZSgpfX0gb25MYXlvdXQ9e3RoaXMudHQub25Db250YWluZXJMYXlvdXR9IHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlcz8uY29udGFpbmVyfT5cbiAgICAgICAge3Nob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50ICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1uby1yZWNvcmRzLWF2YWlsYWJsZS1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBvdmVyYWxsQ291bnR9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCAmJlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tbm8tcmVjb3Jkcy1mb3VuZC1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzRm91bmRDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIG92ZXJhbGxDb3VudH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzaG93RmlsdGVycyAmJlxuICAgICAgICAgIDxGaWx0ZXJzIGN1cnJlbnRVc2VyPXtjdXJyZW50VXNlcn0gbW9kZWxDbGFzcz17bW9kZWxDbGFzc30gcXVlcnlOYW1lPXtxdWVyeU5hbWV9IHF1ZXJ5U05hbWU9e3F1ZXJ5U05hbWV9IC8+XG4gICAgICAgIH1cbiAgICAgICAge3FQYXJhbXMgJiYgcXVlcnkgJiYgcmVzdWx0ICYmIG1vZGVscyAmJiAhc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQgJiYgIXNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQgJiZcbiAgICAgICAgICB0aGlzLmNhcmRPclRhYmxlKClcbiAgICAgICAgfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGFiaWxpdGllc1RvTG9hZCAoKSB7XG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0ge31cbiAgICBjb25zdCB7YWJpbGl0aWVzLCBtb2RlbENsYXNzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBvd25BYmlsaXRpZXMgPSBbXVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveUVuYWJsZWQpIG93bkFiaWxpdGllcy5wdXNoKFwiZGVzdHJveVwiKVxuICAgIGlmICh0aGlzLnByb3BzLmVkaXRNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwiZWRpdFwiKVxuICAgIGlmICh0aGlzLnByb3BzLnZpZXdNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwic2hvd1wiKVxuXG4gICAgaWYgKG93bkFiaWxpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcblxuICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsQ2xhc3NOYW1lXSA9IG93bkFiaWxpdGllc1xuICAgIH1cblxuICAgIGlmIChhYmlsaXRpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIGFiaWxpdGllcykge1xuICAgICAgICBpZiAoIShtb2RlbE5hbWUgaW4gYWJpbGl0aWVzVG9Mb2FkKSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXRpZXNbbW9kZWxOYW1lXSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdLnB1c2goYWJpbGl0eSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhYmlsaXRpZXNUb0xvYWRcbiAgfVxuXG4gIGNhcmRPclRhYmxlICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhYmlsaXRpZXMsXG4gICAgICBhY3Rpb25zQ29udGVudCxcbiAgICAgIGFwcEhpc3RvcnksXG4gICAgICBjYXJkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb250cm9scyxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgZGVmYXVsdERhdGVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgICBkZXN0cm95RW5hYmxlZCxcbiAgICAgIGRlc3Ryb3lNZXNzYWdlLFxuICAgICAgZWRpdE1vZGVsUGF0aCxcbiAgICAgIGZpbHRlckNhcmQsXG4gICAgICBmaWx0ZXJDb250ZW50LFxuICAgICAgZmlsdGVyU3VibWl0QnV0dG9uLFxuICAgICAgZmlsdGVyU3VibWl0TGFiZWwsXG4gICAgICBncm91cEJ5LFxuICAgICAgaGVhZGVyLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgb25Nb2RlbHNMb2FkZWQsXG4gICAgICBwYWdpbmF0ZUNvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgcHJlbG9hZHMsXG4gICAgICBxdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnMsXG4gICAgICBzdHlsZVVJLFxuICAgICAgdmlld01vZGVsUGF0aCxcbiAgICAgIHdvcmtwbGFjZSxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcblxuICAgIGxldCBoZWFkZXJDb250ZW50LCBQYWdpbmF0aW9uQ29tcG9uZW50XG5cbiAgICBpZiAodHlwZW9mIGhlYWRlciA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGhlYWRlckNvbnRlbnQgPSBoZWFkZXIoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pXG4gICAgfSBlbHNlIGlmIChoZWFkZXIpIHtcbiAgICAgIGhlYWRlckNvbnRlbnQgPSBoZWFkZXJcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyQ29udGVudCA9IG1vZGVsQ2xhc3MubW9kZWxOYW1lKCkuaHVtYW4oe2NvdW50OiAyfSlcbiAgICB9XG5cbiAgICBpZiAoIXBhZ2luYXRlQ29udGVudCkge1xuICAgICAgaWYgKHBhZ2luYXRpb25Db21wb25lbnQpIHtcbiAgICAgICAgUGFnaW5hdGlvbkNvbXBvbmVudCA9IHBhZ2luYXRpb25Db21wb25lbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQgPSBQYWdpbmF0ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZsYXRMaXN0U3R5bGUgPSB7XG4gICAgICBvdmVyZmxvd1g6IFwiYXV0b1wiXG4gICAgfVxuXG4gICAgaWYgKHN0eWxlVUkpIHtcbiAgICAgIGZsYXRMaXN0U3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2RiZGJkYlwiXG4gICAgICBmbGF0TGlzdFN0eWxlLmJvcmRlclJhZGl1cyA9IDVcbiAgICB9XG5cbiAgICBjb25zdCBmbGF0TGlzdCA9IChcbiAgICAgIDxUYWJsZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMudHQudGFibGVDb250ZXh0VmFsdWV9PlxuICAgICAgICA8RmxhdExpc3RcbiAgICAgICAgICBkYXRhPXttb2RlbHN9XG4gICAgICAgICAgZGF0YVNldD17e1xuICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZXMoXCJhcGktbWFrZXItLXRhYmxlXCIsIGNsYXNzTmFtZSksXG4gICAgICAgICAgICBjYWNoZUtleTogdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleSxcbiAgICAgICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleHRyYURhdGE9e3RoaXMucy5sYXN0VXBkYXRlfVxuICAgICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5rZXlFeHRyYXRvcn1cbiAgICAgICAgICBMaXN0SGVhZGVyQ29tcG9uZW50PXtMaXN0SGVhZGVyQ29tcG9uZW50fVxuICAgICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQucmVuZGVySXRlbX1cbiAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17ZmxhdExpc3RTdHlsZX1cbiAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmIGZpbHRlckNhcmQgJiZcbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1maWx0ZXItY2FyZCBtYi00XCI+XG4gICAgICAgICAgICB7dGhpcy5maWx0ZXJGb3JtKCl9XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICB9XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmICFmaWx0ZXJDYXJkICYmXG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtKClcbiAgICAgICAgfVxuICAgICAgICB7Y2FyZCAmJlxuICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJsaXZlLXRhYmxlLS10YWJsZS1jYXJkXCIsIFwibWItNFwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgY29udHJvbHM9e3RoaXMudGFibGVDb250cm9scygpfVxuICAgICAgICAgICAgaGVhZGVyPXtoZWFkZXJDb250ZW50fVxuICAgICAgICAgICAgZm9vdGVyPXt0aGlzLnRhYmxlRm9vdGVyKCl9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmbGF0TGlzdH1cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIH1cbiAgICAgICAgeyFjYXJkICYmIGZsYXRMaXN0fVxuICAgICAgICB7cmVzdWx0ICYmIFBhZ2luYXRpb25Db21wb25lbnQgJiZcbiAgICAgICAgICA8UGFnaW5hdGlvbkNvbXBvbmVudCByZXN1bHQ9e3Jlc3VsdH0gLz5cbiAgICAgICAgfVxuICAgICAgICB7cmVzdWx0ICYmIHBhZ2luYXRlQ29udGVudCAmJlxuICAgICAgICAgIHBhZ2luYXRlQ29udGVudCh7cmVzdWx0fSlcbiAgICAgICAgfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG5cbiAgb25Db250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHt3aWR0aH0gPSBlLm5hdGl2ZUV2ZW50LmxheW91dFxuICAgIGNvbnN0IHt3aWR0aHN9ID0gdGhpcy5zXG5cbiAgICB0aGlzLnNldFN0YXRlKHt3aWR0aH0pXG4gICAgaWYgKHdpZHRocykgd2lkdGhzLnRhYmxlV2lkdGggPSB3aWR0aFxuICB9XG5cbiAgb25MaW5rc0NyZWF0ZWQgPSAoe2FyZ3N9KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWVcblxuICAgIGlmIChhcmdzLmNyZWF0ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnRDcmVhdGVkID0gYXJncy5jcmVhdGVkW21vZGVsQ2xhc3NOYW1lXS5sZW5ndGhcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IHByZXZTdGF0ZS5jdXJyZW50V29ya3BsYWNlQ291bnQgKyBhbW91bnRDcmVhdGVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBvbkxpbmtzRGVzdHJveWVkID0gKHthcmdzfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lXG5cbiAgICBpZiAoYXJncy5kZXN0cm95ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnREZXN0cm95ZWQgPSBhcmdzLmRlc3Ryb3llZFttb2RlbENsYXNzTmFtZV0ubGVuZ3RoXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBwcmV2U3RhdGUuY3VycmVudFdvcmtwbGFjZUNvdW50IC0gYW1vdW50RGVzdHJveWVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBrZXlFeHRyYXRvciA9IChtb2RlbCkgPT4gYCR7dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX0tJHttb2RlbC5pZCgpfWBcblxuICBmaWx0ZXJGb3JtID0gKCkgPT4ge1xuICAgIGNvbnN0IHtmaWx0ZXJGb3JtUmVmLCBzdWJtaXRGaWx0ZXIsIHN1Ym1pdEZpbHRlckRlYm91bmNlfSA9IHRoaXMudHRcbiAgICBjb25zdCB7ZmlsdGVyQ29udGVudCwgZmlsdGVyU3VibWl0QnV0dG9ufSA9IHRoaXMucFxuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtmaWx0ZXJTdWJtaXRMYWJlbH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3FQYXJhbXN9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicVBhcmFtc1wiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtIGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLWZpbHRlci1mb3JtXCIgZm9ybVJlZj17ZmlsdGVyRm9ybVJlZn0gb25TdWJtaXQ9e3RoaXMudHQub25GaWx0ZXJGb3JtU3VibWl0fSBzZXRGb3JtPXt0aGlzLnNldFN0YXRlcy5maWx0ZXJGb3JtfT5cbiAgICAgICAge1wic1wiIGluIHFQYXJhbXMgJiZcbiAgICAgICAgICA8aW5wdXQgbmFtZT1cInNcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9e3FQYXJhbXMuc30gLz5cbiAgICAgICAgfVxuICAgICAgICB7ZmlsdGVyQ29udGVudCh7XG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkOiBzdWJtaXRGaWx0ZXIsXG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5OiBzdWJtaXRGaWx0ZXJEZWJvdW5jZSxcbiAgICAgICAgICBxUGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UU5hbWVcbiAgICAgICAgfSl9XG4gICAgICAgIHtmaWx0ZXJTdWJtaXRCdXR0b24gJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBsaXZlLXRhYmxlLS1zdWJtaXQtZmlsdGVyLWJ1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiBcIjhweFwifX1cbiAgICAgICAgICAgIHZhbHVlPXtmaWx0ZXJTdWJtaXRMYWJlbCB8fCB0aGlzLnQoXCIuZmlsdGVyXCIsIHtkZWZhdWx0VmFsdWU6IFwiRmlsdGVyXCJ9KX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L0Zvcm0+XG4gICAgKVxuICB9XG5cbiAgb25GaWx0ZXJDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnNldFN0YXRlKHtzaG93RmlsdGVyczogIXRoaXMuc3RhdGUuc2hvd0ZpbHRlcnN9KVxuICB9XG5cbiAgb25QZXJQYWdlQ2hhbmdlZCA9IChlKSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5TmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCBuZXdQZXJQYWdlVmFsdWUgPSBkaWdnKGUsIFwidGFyZ2V0XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBwZXJLZXkgPSBgJHtxdWVyeU5hbWV9X3BlcmBcbiAgICBjb25zdCBwYXJhbXNDaGFuZ2UgPSB7fVxuXG4gICAgcGFyYW1zQ2hhbmdlW3BlcktleV0gPSBuZXdQZXJQYWdlVmFsdWVcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMocGFyYW1zQ2hhbmdlKVxuICB9XG5cbiAgcmVuZGVySXRlbSA9ICh7aW5kZXgsIGl0ZW06IG1vZGVsfSkgPT4ge1xuICAgIGlmICghdGhpcy5zLnRhYmxlU2V0dGluZ0xvYWRlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLmxvYWRpbmdfZG90X2RvdF9kb3RcIiwge2RlZmF1bHRWYWx1ZTogXCJMb2FkaW5nLi4uXCJ9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGVsUm93XG4gICAgICAgIGNhY2hlS2V5PXttb2RlbC5jYWNoZUtleSgpfVxuICAgICAgICBjb2x1bW5zPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgY29sdW1uV2lkdGhzPXt0aGlzLmNvbHVtbldpZHRocygpfVxuICAgICAgICBldmVudHM9e3RoaXMudHQuZXZlbnRzfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17bW9kZWwuaWQoKX1cbiAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICB0YWJsZT17dGhpc31cbiAgICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5PXt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBzdHlsZUZvckNvbHVtbiA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgZXZlbiwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge3N0eWxlVUl9ID0gdGhpcy5wXG4gICAgY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICBwYWRkaW5nOiA4LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBpZiAoc3R5bGVVSSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihkZWZhdWx0U3R5bGUsIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBldmVuID8gXCIjZjVmNWY1XCIgOiBcIiNmZmZcIlxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcImFjdGlvbnNcIikge1xuICAgICAgZGVmYXVsdFN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcInJvd1wiXG4gICAgICBkZWZhdWx0U3R5bGUuYWxpZ25JdGVtcyA9IFwiY2VudGVyXCJcblxuICAgICAgaWYgKHRoaXMudHQubWRVcCkge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luTGVmdCA9IFwiYXV0b1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luUmlnaHQgPSBcImF1dG9cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50dC5tZFVwICYmIHN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlciA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge21kVXB9ID0gdGhpcy50dFxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgcGFkZGluZzogOFxuICAgIH1cblxuICAgIGlmICh0eXBlICE9IFwiYWN0aW9uc1wiICYmIG1kVXAgJiYgdGhpcy5wLnN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlclRleHQoKSB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7Zm9udFdlaWdodDogXCJib2xkXCJ9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9yUm93ID0gKHtldmVufSA9IHt9KSA9PiB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7XG4gICAgICBmbGV4OiAxLFxuICAgICAgYWxpZ25JdGVtczogXCJzdHJldGNoXCJcbiAgICB9XG5cbiAgICBpZiAoZXZlbiAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgYWN0dWFsU3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZjVmNWY1XCJcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9yUm93SGVhZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0ge1xuICAgICAgZmxleDogMSxcbiAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICB0YWJsZUNvbnRyb2xzKCkge1xuICAgIGNvbnN0IHtjb250cm9sc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3Nob3dTZXR0aW5nc30gPSB0aGlzLnNcbiAgICBjb25zdCB7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcIm1vZGVsc1wiLCBcInFQYXJhbXNcIiwgXCJxdWVyeVwiLCBcInJlc3VsdFwiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLnJvb3RWaWV3U3R5bGUgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgIHtjb250cm9scyAmJiBjb250cm9scyh7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSl9XG4gICAgICAgIDxQcmVzc2FibGUgZGF0YVNldD17e2NsYXNzOiBcImZpbHRlci1idXR0b25cIn19IG9uUHJlc3M9e3RoaXMudHQub25GaWx0ZXJDbGlja2VkfT5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwic2VhcmNoXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICB7c2hvd1NldHRpbmdzICYmXG4gICAgICAgICAgICA8U2V0dGluZ3Mgb25SZXF1ZXN0Q2xvc2U9e3RoaXMudHQub25SZXF1ZXN0Q2xvc2VTZXR0aW5nc30gdGFibGU9e3RoaXN9IC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxQcmVzc2FibGUgZGF0YVNldD17dGhpcy5zZXR0aW5nc0J1dHRvbkRhdGFTZXQgfHw9IHtjbGFzczogXCJzZXR0aW5ncy1idXR0b25cIn19IG9uUHJlc3M9e3RoaXMudHQub25TZXR0aW5nc0NsaWNrZWR9PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImdlYXJcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIHRhYmxlRm9vdGVyKCkge1xuICAgIGNvbnN0IHtyZXN1bHR9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicmVzdWx0XCIpXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSByZXN1bHQuY3VycmVudFBhZ2UoKVxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudCgpXG4gICAgY29uc3QgcGVyUGFnZSA9IHJlc3VsdC5wZXJQYWdlKClcbiAgICBjb25zdCB0byA9IE1hdGgubWluKGN1cnJlbnRQYWdlICogcGVyUGFnZSwgdG90YWxDb3VudClcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBcIlNob3dpbmcgJXtmcm9tfSB0byAle3RvfSBvdXQgb2YgJXt0b3RhbF9jb3VudH0gdG90YWwuXCJcbiAgICBsZXQgZnJvbSA9ICgoY3VycmVudFBhZ2UgLSAxKSAqIHBlclBhZ2UpICsgMVxuXG4gICAgaWYgKHRvID09PSAwKSBmcm9tID0gMFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLnJvb3RWaWV3U3R5bGUgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsIG1hcmdpblRvcDogMTB9fT5cbiAgICAgICAgPFZpZXcgZGF0YVNldD17dGhpcy5zaG93aW5nQ291bnRzRGF0YVNldCB8fD0ge2NsYXNzOiBcInNob3dpbmctY291bnRzXCJ9fSBzdHlsZT17dGhpcy5zaG93aW5nQ291bnRzU3R5bGUgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLnNob3dpbmdfZnJvbV90b19vdXRfb2ZfdG90YWxcIiwge2RlZmF1bHRWYWx1ZSwgZnJvbSwgdG8sIHRvdGFsX2NvdW50OiB0b3RhbENvdW50fSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIHt0aGlzLnAud29ya3BsYWNlICYmIHRoaXMucy5jdXJyZW50V29ya3BsYWNlQ291bnQgIT09IG51bGwgJiZcbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt0aGlzLnhTZWxlY3RlZFRleHRTdHlsZSB8fD0ge21hcmdpbkxlZnQ6IDN9fT5cbiAgICAgICAgICAgICAge3RoaXMudChcIi54X3NlbGVjdGVkXCIsIHtkZWZhdWx0VmFsdWU6IFwiJXtzZWxlY3RlZH0gc2VsZWN0ZWQuXCIsIHNlbGVjdGVkOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZUNvdW50fSl9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBlci1wYWdlLXNlbGVjdFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3BlclBhZ2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy50dC5vblBlclBhZ2VDaGFuZ2VkfVxuICAgICAgICAgICAgb3B0aW9ucz17cGFnaW5hdGlvbk9wdGlvbnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGNsYXNzTmFtZSgpIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gW1wiYXBpLW1ha2VyLS10YWJsZVwiXVxuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2godGhpcy5wcm9wcy5jbGFzc05hbWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZXMuam9pbihcIiBcIilcbiAgfVxuXG4gIGNvbHVtblByb3BzKGNvbHVtbikge1xuICAgIGNvbnN0IHByb3BzID0ge31cblxuICAgIGlmIChjb2x1bW4udGV4dENlbnRlcikge1xuICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICBwcm9wcy5zdHlsZS50ZXh0QWxpZ24gPSBcImNlbnRlclwiXG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0UmlnaHQpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUudGV4dEFsaWduID0gXCJyaWdodFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzXG4gIH1cblxuICBoZWFkZXJQcm9wcyhjb2x1bW4pIHtcbiAgICBjb25zdCBwcm9wcyA9IHt9XG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImNlbnRlclwiXG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0UmlnaHQpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImVuZFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzXG4gIH1cblxuICBjb2x1bW5XaWR0aHMoKSB7XG4gICAgY29uc3QgY29sdW1uV2lkdGhzID0ge31cblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMucy5wcmVwYXJlZENvbHVtbnMpIHtcbiAgICAgIGNvbHVtbldpZHRoc1tjb2x1bW4udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKV0gPSBjb2x1bW4ud2lkdGhcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uV2lkdGhzXG4gIH1cblxuICBoZWFkZXJzQ29udGVudEZyb21Db2x1bW5zID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RHJhZ2dhYmxlU29ydFxuICAgICAgICBkYXRhPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgZXZlbnRzPXt0aGlzLnR0LmRyYWdnYWJsZVNvcnRFdmVudHN9XG4gICAgICAgIGhvcml6b250YWxcbiAgICAgICAga2V5RXh0cmFjdG9yPXt0aGlzLnR0LmRyYWdMaXN0a2V5RXh0cmFjdG9yfVxuICAgICAgICBvbkl0ZW1Nb3ZlZD17dGhpcy50dC5vbkl0ZW1Nb3ZlZH1cbiAgICAgICAgb25SZW9yZGVyZWQ9e3RoaXMudHQub25SZW9yZGVyZWR9XG4gICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQuZHJhZ0xpc3RSZW5kZXJJdGVtQ29udGVudH1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgZHJhZ0xpc3RDYWNoZUtleUV4dHJhY3RvciA9IChpdGVtKSA9PiBgJHtpdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCl9LSR7dGhpcy5zLnJlc2l6aW5nfWBcbiAgZHJhZ0xpc3RrZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gaXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpXG5cbiAgb25JdGVtTW92ZWQgPSAoe2FuaW1hdGlvbkFyZ3MsIGl0ZW1JbmRleCwgeCwgeX0pID0+IHtcbiAgICBjb25zdCBhbmltYXRlZFBvc2l0aW9uID0gZGlnZyh0aGlzLCBcInNcIiwgXCJjb2x1bW5zVG9TaG93XCIsIGl0ZW1JbmRleCwgXCJhbmltYXRlZFBvc2l0aW9uXCIpXG5cbiAgICBpZiAoYW5pbWF0aW9uQXJncykge1xuICAgICAgQW5pbWF0ZWQudGltaW5nKGFuaW1hdGVkUG9zaXRpb24sIGFuaW1hdGlvbkFyZ3MpLnN0YXJ0KClcbiAgICB9IGVsc2Uge1xuICAgICAgYW5pbWF0ZWRQb3NpdGlvbi5zZXRWYWx1ZSh7eCwgeX0pXG4gICAgfVxuICB9XG5cbiAgb25SZW9yZGVyZWQgPSBhc3luYyAoe2Zyb21JdGVtLCBmcm9tUG9zaXRpb24sIHRvSXRlbSwgdG9Qb3NpdGlvbn0pID0+IHtcbiAgICBpZiAoZnJvbVBvc2l0aW9uID09IHRvUG9zaXRpb24pIHJldHVybiAvLyBPbmx5IGRvIHJlcXVlc3RzIGFuZCBxdWVyaWVzIGlmIGNoYW5nZWRcblxuICAgIGNvbnN0IFRhYmxlU2V0dGluZ0NvbHVtbiA9IGZyb21JdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5jb25zdHJ1Y3RvclxuICAgIGNvbnN0IHRvQ29sdW1uID0gYXdhaXQgVGFibGVTZXR0aW5nQ29sdW1uLmZpbmQodG9JdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5pZCgpKSAvLyBOZWVkIHRvIGxvYWQgbGF0ZXN0IHBvc2l0aW9uIGJlY2F1c2UgQWN0c0FzTGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgaXRcblxuICAgIGF3YWl0IGZyb21JdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi51cGRhdGUoe3Bvc2l0aW9uOiB0b0NvbHVtbi5wb3NpdGlvbigpfSlcbiAgfVxuXG4gIGRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnQgPSAoe2lzQWN0aXZlLCBpdGVtLCB0b3VjaFByb3BzfSkgPT4ge1xuICAgIGNvbnN0IHthbmltYXRlZFdpZHRoLCBhbmltYXRlZFpJbmRleCwgY29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW59ID0gaXRlbVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxIZWFkZXJDb2x1bW5cbiAgICAgICAgYWN0aXZlPXtpc0FjdGl2ZX1cbiAgICAgICAgYW5pbWF0ZWRXaWR0aD17YW5pbWF0ZWRXaWR0aH1cbiAgICAgICAgYW5pbWF0ZWRaSW5kZXg9e2FuaW1hdGVkWkluZGV4fVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAga2V5PXt0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfVxuICAgICAgICByZXNpemluZz17dGhpcy5zLnJlc2l6aW5nfVxuICAgICAgICB0YWJsZT17dGhpc31cbiAgICAgICAgdGFibGVTZXR0aW5nQ29sdW1uPXt0YWJsZVNldHRpbmdDb2x1bW59XG4gICAgICAgIHRvdWNoUHJvcHM9e3RvdWNoUHJvcHN9XG4gICAgICAgIHdpZHRocz17dGhpcy5zLndpZHRoc31cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaGVhZGVyQ2xhc3NOYW1lRm9yQ29sdW1uKGNvbHVtbikge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXVxuXG4gICAgaWYgKGNvbHVtbi5jb21tb25Qcm9wcyAmJiBjb2x1bW4uY29tbW9uUHJvcHMuY2xhc3NOYW1lKSBjbGFzc05hbWVzLnB1c2goY29sdW1uLmNvbW1vblByb3BzLmNsYXNzTmFtZSlcbiAgICBpZiAoY29sdW1uLmhlYWRlclByb3BzICYmIGNvbHVtbi5oZWFkZXJQcm9wcy5jbGFzc05hbWUpIGNsYXNzTmFtZXMucHVzaChjb2x1bW4uaGVhZGVyUHJvcHMuY2xhc3NOYW1lKVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZXNcbiAgfVxuXG4gIGhlYWRlckxhYmVsRm9yQ29sdW1uKGNvbHVtbikge1xuICAgIGNvbnN0IHttb2RlbENsYXNzfSA9IHRoaXMucFxuXG4gICAgaWYgKFwibGFiZWxcIiBpbiBjb2x1bW4pIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uLmxhYmVsID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gY29sdW1uLmxhYmVsKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ubGFiZWxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY3VycmVudE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG5cbiAgICAvLyBDYWxjdWxhdGUgY3VycmVudCBtb2RlbCBjbGFzcyB0aHJvdWdoIHBhdGhcbiAgICBpZiAoY29sdW1uLnBhdGgpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aFBhcnQgb2YgY29sdW1uLnBhdGgpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwcyA9IGRpZ2coY3VycmVudE1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJyZWxhdGlvbnNoaXBzXCIpXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcHMuZmluZCgocmVsYXRpb25zaGlwSW5BcnJheSkgPT4gcmVsYXRpb25zaGlwSW5BcnJheS5uYW1lID09IGluZmxlY3Rpb24udW5kZXJzY29yZShwYXRoUGFydCkpXG5cbiAgICAgICAgY3VycmVudE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzUmVxdWlyZShkaWdnKHJlbGF0aW9uc2hpcCwgXCJyZXNvdXJjZV9uYW1lXCIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2x1bW4uYXR0cmlidXRlKSByZXR1cm4gY3VycmVudE1vZGVsQ2xhc3MuaHVtYW5BdHRyaWJ1dGVOYW1lKGNvbHVtbi5hdHRyaWJ1dGUpXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyAnbGFiZWwnIG9yICdhdHRyaWJ1dGUnIHdhcyBnaXZlblwiKVxuICB9XG5cbiAgb25GaWx0ZXJGb3JtU3VibWl0ID0gKCkgPT4gdGhpcy5zdWJtaXRGaWx0ZXIoKVxuICBvblJlcXVlc3RDbG9zZVNldHRpbmdzID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7c2hvd1NldHRpbmdzOiBmYWxzZX0pXG5cbiAgb25TZXR0aW5nc0NsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1NldHRpbmdzOiAhdGhpcy5zLnNob3dTZXR0aW5nc30pXG4gIH1cblxuICBzdWJtaXRGaWx0ZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qge2FwcEhpc3Rvcnl9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IGNoYW5nZVBhcmFtc1BhcmFtcyA9IHt9XG4gICAgY29uc3QgcVBhcmFtcyA9IHRoaXMucy5maWx0ZXJGb3JtLmFzT2JqZWN0KClcblxuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICBjb25zdCBmaWx0ZXJGb3JtID0gZGlnZyh0aGlzLnR0LmZpbHRlckZvcm1SZWYsIFwiY3VycmVudFwiKVxuICAgICAgY29uc3QgbmF2dGl2ZUZvcm1QYXJhbXMgPSBQYXJhbXMuc2VyaWFsaXplRm9ybShmaWx0ZXJGb3JtKVxuXG4gICAgICBpbmNvcnBvcmF0ZShxUGFyYW1zLCBuYXZ0aXZlRm9ybVBhcmFtcylcbiAgICB9XG5cbiAgICBjaGFuZ2VQYXJhbXNQYXJhbXNbcXVlcnlRTmFtZV0gPSBKU09OLnN0cmluZ2lmeShxUGFyYW1zKVxuXG4gICAgUGFyYW1zLmNoYW5nZVBhcmFtcyhjaGFuZ2VQYXJhbXNQYXJhbXMsIHthcHBIaXN0b3J5fSlcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlckRlYm91bmNlID0gZGVib3VuY2UodGhpcy50dC5zdWJtaXRGaWx0ZXIpXG59KSlcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVFBLElBQUksRUFBRUMsSUFBSSxRQUFPLFdBQVc7QUFDcEMsT0FBT0MsS0FBSyxJQUFHQyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLFFBQU8sT0FBTztBQUN2RSxTQUFRQyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxJQUFJLFFBQU8sY0FBYztBQUNoRSxPQUFPQyxhQUFhLE1BQU0sbUJBQW1CO0FBQzdDLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFDbkMsT0FBT0MsVUFBVSxNQUFNLGVBQWU7QUFDdEMsT0FBT0MsYUFBYSxNQUFNLGtCQUFrQjtBQUM1QyxPQUFPQyxRQUFRLE1BQU0sVUFBVTtBQUMvQixPQUFPQyxhQUFhLE1BQU0seUJBQXlCO0FBQ25ELE9BQU9DLFlBQVksTUFBTSxRQUFRO0FBQ2pDLE9BQU9DLE9BQU8sTUFBTSxXQUFXO0FBQy9CLE9BQU9DLFFBQVEsTUFBTSx3QkFBd0I7QUFDN0MsU0FBUUMsSUFBSSxRQUFPLFNBQVM7QUFDNUIsT0FBT0MsTUFBTSxNQUFNLHFCQUFxQjtBQUN4QyxPQUFPQyxZQUFZLE1BQU0saUJBQWlCO0FBQzFDLE9BQU9DLFlBQVksTUFBTSxpQkFBaUI7QUFDMUMsT0FBT0MsSUFBSSxNQUFNLGVBQWU7QUFDaEMsU0FBUUMsV0FBVyxRQUFPLGNBQWM7QUFDeEMsT0FBTyxLQUFLQyxVQUFVLE1BQU0sWUFBWTtBQUN4QyxPQUFPQyxJQUFJLE1BQU0sNEJBQTRCO0FBQzdDLE9BQU9DLGlCQUFpQixNQUFNLHdCQUF3QjtBQUN0RCxPQUFPQyxRQUFRLE1BQU0sYUFBYTtBQUNsQyxPQUFPQyxRQUFRLE1BQU0sdUJBQXVCO0FBQzVDLE9BQU9DLE1BQU0sTUFBTSxXQUFXO0FBQzlCLE9BQU9DLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLE9BQU9DLEdBQUcsTUFBTSxrQkFBa0I7QUFDbEMsT0FBT0MsZ0JBQWdCLE1BQU0scUJBQXFCO0FBQ2xELE9BQU9DLE1BQU0sTUFBTSxrQkFBa0I7QUFDckMsT0FBT0MsUUFBUSxNQUFNLGtCQUFrQjtBQUN2QyxTQUFRQyxjQUFjLFFBQU8sdUNBQXVDO0FBQ3BFLE9BQU9DLGFBQWEsTUFBTSxrQkFBa0I7QUFDNUMsT0FBT0MsSUFBSSxNQUFNLGVBQWU7QUFDaEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsT0FBT0MsYUFBYSxNQUFNLG1CQUFtQjtBQUM3QyxPQUFPQyxhQUFhLE1BQU0sbUJBQW1CO0FBQzdDLE9BQU9DLE9BQU8sTUFBTSwrQkFBK0I7QUFDbkQsT0FBT0MsZUFBZSxNQUFNLHNCQUFzQjtBQUNsRCxPQUFPQyxhQUFhLE1BQU0sb0JBQW9CO0FBQzlDLE9BQU9DLGNBQWMsTUFBTSw0Q0FBNEM7QUFDdkUsT0FBT0MsTUFBTSxNQUFNLFVBQVU7QUFFN0IsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RCxNQUFNQyw2QkFBNkIsZ0JBQUdoRCxLQUFLLENBQUNpRCxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUNyRyxNQUFNQyxZQUFZLGdCQUFHakQsYUFBYSxDQUFDLENBQUM7QUFFcEMsTUFBTWtELG1CQUFtQixHQUFHekIsSUFBSSxDQUFDVSxjQUFjLENBQUMsTUFBTWUsbUJBQW1CLFNBQVMxQyxhQUFhLENBQUM7RUFDOUYyQyxLQUFLQSxDQUFBLEVBQUc7SUFDTixJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUNiQyxVQUFVLEVBQUUsSUFBSUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztFQUNKO0VBRUFDLE1BQU1BLENBQUEsRUFBRztJQUNQLE1BQU07TUFBQ0M7SUFBSSxDQUFDLEdBQUdqQixhQUFhLENBQUMsQ0FBQztJQUM5QixNQUFNa0IsaUJBQWlCLEdBQUd4RCxVQUFVLENBQUNnRCxZQUFZLENBQUM7SUFDbEQsTUFBTVMsS0FBSyxHQUFHRCxpQkFBaUIsQ0FBQ0MsS0FBSztJQUNyQyxNQUFNO01BQUNDLFVBQVU7TUFBRUMsTUFBTTtNQUFFQyxzQkFBc0I7TUFBRUM7SUFBQyxDQUFDLEdBQUdKLEtBQUssQ0FBQ0ssRUFBRTtJQUNoRSxNQUFNO01BQUNDO0lBQUssQ0FBQyxHQUFHbEUsSUFBSSxDQUFDNkQsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUV6Q2pCLGVBQWUsQ0FBQ2tCLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxJQUFJLENBQUNHLEVBQUUsQ0FBQ0UseUJBQXlCLENBQUM7SUFFckYsb0JBQ0VsRSxLQUFBLENBQUFtRSxhQUFBLENBQUNuQyxHQUFHO01BQUNvQyxPQUFPLEVBQUU7UUFBQ0MsS0FBSyxFQUFFO01BQTRCLENBQUU7TUFBQ0MsS0FBSyxFQUFFWCxLQUFLLENBQUNZLGlCQUFpQixDQUFDO0lBQUUsR0FDbkZaLEtBQUssQ0FBQ2EsQ0FBQyxDQUFDQyxTQUFTLElBQUlkLEtBQUssQ0FBQ2UsQ0FBQyxDQUFDQyxnQkFBZ0IsaUJBQzVDM0UsS0FBQSxDQUFBbUUsYUFBQSxDQUFDL0MsTUFBTTtNQUFDa0QsS0FBSyxFQUFFWCxLQUFLLENBQUNpQixjQUFjLENBQUM7UUFBQ04sS0FBSyxFQUFFO1VBQUNPLEtBQUssRUFBRXBCLElBQUksR0FBRyxFQUFFLEdBQUdxQjtRQUFTO01BQUMsQ0FBQztJQUFFLGdCQUMzRTlFLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQ25CLDZCQUE2QjtNQUM1QjJCLGdCQUFnQixFQUFFaEIsS0FBSyxDQUFDZSxDQUFDLENBQUNDLGdCQUFpQjtNQUMzQ1YsS0FBSyxFQUFFSCxzQkFBdUI7TUFDOUJRLEtBQUssRUFBRSxJQUFJLENBQUNTLGtDQUFrQyxLQUFLO1FBQUNDLGdCQUFnQixFQUFFO01BQU07SUFBRSxDQUMvRSxDQUFDLEVBQ0QsQ0FBQ3ZCLElBQUksaUJBQ0p6RCxLQUFBLENBQUFtRSxhQUFBLENBQUM3QixJQUFJO01BQUNnQyxLQUFLLEVBQUUsSUFBSSxDQUFDVyx1QkFBdUIsS0FBSztRQUFDQyxVQUFVLEVBQUU7TUFBQztJQUFFLEdBQzNEbkIsQ0FBQyxDQUFDLG1CQUFtQixFQUFFO01BQUNvQixZQUFZLEVBQUU7SUFBa0IsQ0FBQyxDQUN0RCxDQUVGLENBQUMsRUFFVixDQUFDMUIsSUFBSSxpQkFDSnpELEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQy9DLE1BQU07TUFBQ2tELEtBQUssRUFBRVgsS0FBSyxDQUFDaUIsY0FBYyxDQUFDO1FBQUNOLEtBQUssRUFBRSxDQUFDO01BQUMsQ0FBQztJQUFFLGdCQUMvQ3RFLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzdDLFlBQVk7TUFBQzhELGVBQWUsRUFBRXpCLEtBQUssQ0FBQ2UsQ0FBQyxDQUFDVSxlQUFnQjtNQUFDbkIsS0FBSyxFQUFFQSxLQUFNO01BQUNOLEtBQUssRUFBRUE7SUFBTSxDQUFFLENBQy9FLENBQUMsRUFFVkYsSUFBSSxpQkFDSHpELEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQW5FLEtBQUEsQ0FBQXFGLFFBQUEsUUFDRzFCLEtBQUssQ0FBQzJCLHlCQUF5QixDQUFDLENBQUMsZUFDbEN0RixLQUFBLENBQUFtRSxhQUFBLENBQUMvQyxNQUFNO01BQUNrRCxLQUFLLEVBQUVYLEtBQUssQ0FBQ2lCLGNBQWMsQ0FBQztRQUFDTixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQUVpQixJQUFJLEVBQUU7TUFBUyxDQUFDO0lBQUUsQ0FBRSxDQUNwRSxDQUVELENBQUM7RUFFVjtFQUVBckIseUJBQXlCLEdBQUdBLENBQUEsS0FBTSxJQUFJLENBQUNzQixRQUFRLENBQUM7SUFBQ2xDLFVBQVUsRUFBRSxJQUFJQyxJQUFJLENBQUM7RUFBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDLENBQUM7QUFFSCxlQUFlN0IsSUFBSSxDQUFDVSxjQUFjLENBQUMsTUFBTXFELGFBQWEsU0FBU2hGLGFBQWEsQ0FBQztFQUMzRSxPQUFPaUYsWUFBWSxHQUFHO0lBQ3BCQyxJQUFJLEVBQUUsSUFBSTtJQUNWQyxXQUFXLEVBQUUsSUFBSTtJQUNqQkMsY0FBYyxFQUFFLElBQUk7SUFDcEJDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCQyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCQyx5QkFBeUIsRUFBRWxCLFNBQVM7SUFDcENtQixxQkFBcUIsRUFBRW5CLFNBQVM7SUFDaENvQixRQUFRLEVBQUUsRUFBRTtJQUNaQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ1ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2IzQixTQUFTLEVBQUU7RUFDYixDQUFDO0VBRUQsT0FBTzRCLFNBQVMsR0FBRztJQUNqQkMsU0FBUyxFQUFFdkUsU0FBUyxDQUFDd0UsTUFBTTtJQUMzQkMsY0FBYyxFQUFFekUsU0FBUyxDQUFDMEUsSUFBSTtJQUM5QkMsVUFBVSxFQUFFM0UsU0FBUyxDQUFDd0UsTUFBTTtJQUM1QlosSUFBSSxFQUFFNUQsU0FBUyxDQUFDNEUsSUFBSSxDQUFDQyxVQUFVO0lBQy9CQyxTQUFTLEVBQUU5RSxTQUFTLENBQUMrRSxNQUFNO0lBQzNCbEQsVUFBVSxFQUFFN0IsU0FBUyxDQUFDZ0YsVUFBVSxDQUFDbkcsVUFBVSxDQUFDO0lBQzVDb0csT0FBTyxFQUFFakYsU0FBUyxDQUFDa0YsU0FBUyxDQUFDLENBQUNsRixTQUFTLENBQUNtRixLQUFLLEVBQUVuRixTQUFTLENBQUMwRSxJQUFJLENBQUMsQ0FBQztJQUMvRFUsUUFBUSxFQUFFcEYsU0FBUyxDQUFDMEUsSUFBSTtJQUN4QmIsV0FBVyxFQUFFN0QsU0FBUyxDQUFDd0UsTUFBTTtJQUM3QmEscUJBQXFCLEVBQUVyRixTQUFTLENBQUMrRSxNQUFNO0lBQ3ZDTyx5QkFBeUIsRUFBRXRGLFNBQVMsQ0FBQytFLE1BQU07SUFDM0NRLGFBQWEsRUFBRXZGLFNBQVMsQ0FBQ3dFLE1BQU07SUFDL0JWLGNBQWMsRUFBRTlELFNBQVMsQ0FBQzRFLElBQUksQ0FBQ0MsVUFBVTtJQUN6Q1csY0FBYyxFQUFFeEYsU0FBUyxDQUFDK0UsTUFBTTtJQUNoQ1UsYUFBYSxFQUFFekYsU0FBUyxDQUFDMEUsSUFBSTtJQUM3QlgsVUFBVSxFQUFFL0QsU0FBUyxDQUFDNEUsSUFBSSxDQUFDQyxVQUFVO0lBQ3JDYSxhQUFhLEVBQUUxRixTQUFTLENBQUMwRSxJQUFJO0lBQzdCaUIsaUJBQWlCLEVBQUUzRixTQUFTLENBQUM0RixHQUFHO0lBQ2hDQyxPQUFPLEVBQUU3RixTQUFTLENBQUNtRixLQUFLO0lBQ3hCVyxNQUFNLEVBQUU5RixTQUFTLENBQUNrRixTQUFTLENBQUMsQ0FBQ2xGLFNBQVMsQ0FBQzBFLElBQUksRUFBRTFFLFNBQVMsQ0FBQytFLE1BQU0sQ0FBQyxDQUFDO0lBQy9EZ0IsVUFBVSxFQUFFL0YsU0FBUyxDQUFDK0UsTUFBTTtJQUM1QmlCLFVBQVUsRUFBRWhHLFNBQVMsQ0FBQzBFLElBQUksQ0FBQ0csVUFBVTtJQUNyQ1oseUJBQXlCLEVBQUVqRSxTQUFTLENBQUMwRSxJQUFJO0lBQ3pDUixxQkFBcUIsRUFBRWxFLFNBQVMsQ0FBQzBFLElBQUk7SUFDckN1QixjQUFjLEVBQUVqRyxTQUFTLENBQUMwRSxJQUFJO0lBQzlCd0IsZUFBZSxFQUFFbEcsU0FBUyxDQUFDMEUsSUFBSTtJQUMvQnlCLG1CQUFtQixFQUFFbkcsU0FBUyxDQUFDMEUsSUFBSTtJQUNuQ1AsUUFBUSxFQUFFbkUsU0FBUyxDQUFDbUYsS0FBSyxDQUFDTixVQUFVO0lBQ3BDdUIsV0FBVyxFQUFFcEcsU0FBUyxDQUFDMEUsSUFBSTtJQUMzQjJCLFNBQVMsRUFBRXJHLFNBQVMsQ0FBQytFLE1BQU07SUFDM0JYLE1BQU0sRUFBRXBFLFNBQVMsQ0FBQ3dFLE1BQU07SUFDeEI4QixhQUFhLEVBQUV0RyxTQUFTLENBQUN3RSxNQUFNO0lBQy9CK0IsTUFBTSxFQUFFdkcsU0FBUyxDQUFDd0UsTUFBTTtJQUN4QkgsT0FBTyxFQUFFckUsU0FBUyxDQUFDNEUsSUFBSSxDQUFDQyxVQUFVO0lBQ2xDMkIsYUFBYSxFQUFFeEcsU0FBUyxDQUFDMEUsSUFBSTtJQUM3QmhDLFNBQVMsRUFBRTFDLFNBQVMsQ0FBQzRFLElBQUksQ0FBQ0M7RUFDNUIsQ0FBQztFQUVENEIsbUJBQW1CLEdBQUcsSUFBSXhILFlBQVksQ0FBQyxDQUFDO0VBQ3hDNkMsTUFBTSxHQUFHLElBQUk3QyxZQUFZLENBQUMsQ0FBQztFQUMzQnlILGFBQWEsR0FBRyxJQUFJO0VBRXBCckYsS0FBS0EsQ0FBQSxFQUFHO0lBQ04sTUFBTTtNQUFDVztJQUFDLENBQUMsR0FBR3JCLE9BQU8sQ0FBQztNQUFDZ0csU0FBUyxFQUFFO0lBQW9CLENBQUMsQ0FBQztJQUN0RCxNQUFNO01BQUNDLElBQUksRUFBRUMsVUFBVTtNQUFFbkY7SUFBSSxDQUFDLEdBQUdqQixhQUFhLENBQUMsQ0FBQztJQUNoRCxNQUFNcUcsV0FBVyxHQUFHaEcsY0FBYyxDQUFDLENBQUM7SUFFcEMsSUFBSSxDQUFDaUcsV0FBVyxDQUFDO01BQ2ZGLFVBQVU7TUFDVkcsYUFBYSxFQUFFM0ksTUFBTSxDQUFDLENBQUM7TUFDdkJxRCxJQUFJO01BQ0pNO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsTUFBTWlGLGFBQWEsR0FBR2xKLElBQUksQ0FBQyxJQUFJLENBQUMwRSxDQUFDLENBQUN1RCxVQUFVLENBQUNrQixjQUFjLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUMvRSxJQUFJYixTQUFTLEdBQUcsSUFBSSxDQUFDYyxLQUFLLENBQUNkLFNBQVM7SUFFcEMsSUFBSSxDQUFDQSxTQUFTLEVBQUVBLFNBQVMsR0FBR1ksYUFBYTtJQUV6QyxNQUFNRyxVQUFVLEdBQUcsR0FBR2YsU0FBUyxJQUFJO0lBRW5DLElBQUksQ0FBQy9FLFNBQVMsQ0FBQztNQUNiMkQsT0FBTyxFQUFFQSxDQUFBLEtBQU0sSUFBSSxDQUFDb0MsY0FBYyxDQUFDLENBQUM7TUFDcEN6RSxnQkFBZ0IsRUFBRUcsU0FBUztNQUMzQnVFLHFCQUFxQixFQUFFLElBQUk7TUFDM0JDLFVBQVUsRUFBRSxJQUFJO01BQ2hCQyxhQUFhLEVBQUUsSUFBSTtNQUNuQkMsYUFBYSxFQUFFLElBQUk7TUFDbkIxQixVQUFVLEVBQUVBLENBQUEsS0FBTSxJQUFJLENBQUNvQixLQUFLLENBQUNwQixVQUFVLElBQUksR0FBR2tCLGFBQWEsVUFBVTtNQUNyRTFGLFVBQVUsRUFBRUEsQ0FBQSxLQUFNLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQzVCa0csT0FBTyxFQUFFM0UsU0FBUztNQUNsQk0sZUFBZSxFQUFFTixTQUFTO01BQzFCc0QsU0FBUztNQUNUc0IsVUFBVSxFQUFFQSxDQUFBLEtBQU0sR0FBR3RCLFNBQVMsSUFBSTtNQUNsQ3VCLGFBQWEsRUFBRUEsQ0FBQSxLQUFNLEdBQUd2QixTQUFTLE9BQU87TUFDeENlLFVBQVU7TUFDVlMsUUFBUSxFQUFFLEtBQUs7TUFDZkMsV0FBVyxFQUFFQSxDQUFBLEtBQU1DLE9BQU8sQ0FBQ2pCLFdBQVcsQ0FBQ00sVUFBVSxDQUFDLENBQUM7TUFDbkRZLFlBQVksRUFBRSxLQUFLO01BQ25CQyxZQUFZLEVBQUVsRixTQUFTO01BQ3ZCbUYsa0JBQWtCLEVBQUUsS0FBSztNQUN6QkMsd0JBQXdCLEVBQUVwRixTQUFTO01BQ25DRCxLQUFLLEVBQUVDLFNBQVM7TUFDaEJxRixNQUFNLEVBQUU7SUFDVixDQUFDLENBQUM7SUFFRixJQUFJLENBQUN6RyxpQkFBaUIsR0FBR3ZELE9BQU8sQ0FDOUIsT0FBTztNQUNMaUssUUFBUSxFQUFFLElBQUksQ0FBQzFGLENBQUMsQ0FBQ3dGLHdCQUF3QjtNQUN6QzVHLFVBQVUsRUFBRSxJQUFJLENBQUNvQixDQUFDLENBQUNwQixVQUFVO01BQzdCc0csUUFBUSxFQUFFLElBQUksQ0FBQ2xGLENBQUMsQ0FBQ2tGLFFBQVE7TUFDekJqRyxLQUFLLEVBQUU7SUFDVCxDQUFDLENBQUMsRUFDRixDQUFDLElBQUksQ0FBQ2UsQ0FBQyxDQUFDcEIsVUFBVSxFQUFFLElBQUksQ0FBQ29CLENBQUMsQ0FBQ2tGLFFBQVEsRUFBRSxJQUFJLENBQUNsRixDQUFDLENBQUN3Rix3QkFBd0IsQ0FDdEUsQ0FBQztJQUVEL0osT0FBTyxDQUFDLE1BQU07TUFDWixJQUFJLElBQUksQ0FBQytJLEtBQUssQ0FBQ3pFLFNBQVMsRUFBRTtRQUN4QixJQUFJLENBQUM0RixvQkFBb0IsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO1VBQ3JDLElBQUksQ0FBQ0MseUJBQXlCLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7TUFDSjtJQUNGLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQy9GLENBQUMsQ0FBQ29CLFdBQVcsRUFBRTRFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5QnJLLE9BQU8sQ0FBQyxNQUFNO01BQ1osSUFBSSxDQUFDLElBQUksQ0FBQzZELEVBQUUsQ0FBQ3lFLGFBQWEsSUFBSSxJQUFJLENBQUMvRCxDQUFDLENBQUNHLEtBQUssRUFBRTtRQUMxQyxJQUFJLENBQUM0RixnQkFBZ0IsQ0FBQyxDQUFDO01BQ3pCO0lBQ0YsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDakcsQ0FBQyxDQUFDb0IsV0FBVyxFQUFFNEUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM5RixDQUFDLENBQUNHLEtBQUssQ0FBQyxDQUFDO0lBRTVDakMsYUFBYSxDQUFDLElBQUksQ0FBQzhCLENBQUMsQ0FBQ0MsZ0JBQWdCLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDWCxFQUFFLENBQUMwRyxjQUFjLENBQUM7SUFDekY5SCxhQUFhLENBQUMsSUFBSSxDQUFDOEIsQ0FBQyxDQUFDQyxnQkFBZ0IsRUFBRSwyQkFBMkIsRUFBRSxJQUFJLENBQUNYLEVBQUUsQ0FBQzJHLGdCQUFnQixDQUFDO0lBRTdGLElBQUlDLGVBQWUsR0FBRyxJQUFJO0lBQzFCLElBQUl6RSxNQUFNO0lBRVYsSUFBSSxDQUFDLElBQUksQ0FBQ3pCLENBQUMsQ0FBQ1UsZUFBZSxFQUFFO01BQzNCd0YsZUFBZSxHQUFHLEtBQUs7SUFDekI7SUFFQSxJQUFJQSxlQUFlLEVBQUU7TUFDbkJ6RSxNQUFNLEdBQUdsRSxnQkFBZ0IsQ0FBQztRQUFDMEIsS0FBSyxFQUFFO01BQUksQ0FBQyxDQUFDO0lBQzFDO0lBRUEsSUFBSSxDQUFDQyxVQUFVLEdBQUduQixhQUFhLENBQUM7TUFDOUI2RCxTQUFTLEVBQUUsSUFBSSxDQUFDdUUsZUFBZSxDQUFDLENBQUM7TUFDakN2RCxhQUFhLEVBQUUsSUFBSSxDQUFDNEIsS0FBSyxDQUFDNUIsYUFBYTtNQUN2QzFELFVBQVUsRUFBRSxJQUFJLENBQUNzRixLQUFLLENBQUN0RixVQUFVO01BQ2pDZ0UsT0FBTyxFQUFFLElBQUksQ0FBQ3NCLEtBQUssQ0FBQ3RCLE9BQU87TUFDM0JrRCxXQUFXLEVBQUVGLGVBQWU7TUFDNUI3QyxVQUFVLEVBQUUsSUFBSSxDQUFDbUIsS0FBSyxDQUFDbkIsVUFBVTtNQUNqQ0MsY0FBYyxFQUFFLElBQUksQ0FBQ2tCLEtBQUssQ0FBQ2xCLGNBQWM7TUFDekNoQyx5QkFBeUIsRUFBRSxJQUFJLENBQUNrRCxLQUFLLENBQUNsRCx5QkFBeUI7TUFDL0RDLHFCQUFxQixFQUFFLElBQUksQ0FBQ2lELEtBQUssQ0FBQ2pELHFCQUFxQjtNQUN2RDhFLFVBQVUsRUFBRSxJQUFJO01BQ2hCN0UsUUFBUSxFQUFFLElBQUksQ0FBQzhFLEtBQUssQ0FBQ3ZCLE9BQU87TUFDNUJ0QixXQUFXLEVBQUUsSUFBSSxDQUFDZSxLQUFLLENBQUNmLFdBQVc7TUFDbkNDLFNBQVM7TUFDVGpDLE1BQU07TUFDTmtDLGFBQWEsRUFBRSxJQUFJLENBQUNhLEtBQUssQ0FBQ2I7SUFDNUIsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDdkUsc0JBQXNCLEdBQUczRCxPQUFPLENBQ25DLE1BQU0sSUFBSSxDQUFDeUQsVUFBVSxFQUFFSyxLQUFLLEVBQUVnSCxLQUFLLENBQUMsQ0FBQyxFQUFFQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3JELENBQUMsSUFBSSxDQUFDdEgsVUFBVSxDQUFDSyxLQUFLLENBQ3hCLENBQUM7SUFFRHRCLGVBQWUsQ0FBQyxJQUFJLENBQUNxQixFQUFFLENBQUN3RSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDeEUsRUFBRSxDQUFDbUgsV0FBVyxDQUFDO0lBQ2hGeEksZUFBZSxDQUFDLElBQUksQ0FBQ3FCLEVBQUUsQ0FBQ3dFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBQ3hFLEVBQUUsQ0FBQ29ILGtCQUFrQixDQUFDO0lBQzlGekksZUFBZSxDQUFDLElBQUksQ0FBQ3FCLEVBQUUsQ0FBQ0gsTUFBTSxFQUFFLHlCQUF5QixFQUFFLElBQUksQ0FBQ0csRUFBRSxDQUFDRSx5QkFBeUIsQ0FBQztFQUMvRjtFQUVBQSx5QkFBeUIsR0FBR0EsQ0FBQSxLQUFNLElBQUksQ0FBQ3NCLFFBQVEsQ0FBQztJQUFDK0QsYUFBYSxFQUFFLElBQUksQ0FBQzhCLGdCQUFnQixDQUFDLElBQUksQ0FBQzNHLENBQUMsQ0FBQ3NDLE9BQU8sQ0FBQztJQUFFMUQsVUFBVSxFQUFFLElBQUlDLElBQUksQ0FBQztFQUFDLENBQUMsQ0FBQztFQUMvSDRILFdBQVcsR0FBR0EsQ0FBQztJQUFDRztFQUFJLENBQUMsS0FBS0EsSUFBSSxDQUFDQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDNURKLGtCQUFrQixHQUFHQSxDQUFDO0lBQUNFO0VBQUksQ0FBQyxLQUFLQSxJQUFJLENBQUNDLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQztFQUVoRSxNQUFNbkIsb0JBQW9CQSxDQUFBLEVBQUc7SUFDM0IsTUFBTW9CLFNBQVMsR0FBRzlKLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztJQUNoRCxNQUFNK0osTUFBTSxHQUFHLE1BQU1ELFNBQVMsQ0FBQ0UsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTWhILGdCQUFnQixHQUFHN0UsSUFBSSxDQUFDNEwsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFbkQsSUFBSSxDQUFDbEcsUUFBUSxDQUFDO01BQUNiO0lBQWdCLENBQUMsQ0FBQztFQUNuQztFQUVBLE1BQU00Rix5QkFBeUJBLENBQUEsRUFBRztJQUNoQyxNQUFNcUIsYUFBYSxHQUFHakssaUJBQWlCLENBQUMsZUFBZSxDQUFDO0lBQ3hELE1BQU0wSCxxQkFBcUIsR0FBRyxNQUFNdUMsYUFBYSxDQUM5Q0MsT0FBTyxDQUFDO01BQ1BDLGdCQUFnQixFQUFFLElBQUksQ0FBQ3RILENBQUMsQ0FBQ3VELFVBQVUsQ0FBQ2tCLGNBQWMsQ0FBQyxDQUFDLENBQUNOLElBQUk7TUFDekRvRCxlQUFlLEVBQUUsSUFBSSxDQUFDckgsQ0FBQyxDQUFDQyxnQkFBZ0IsQ0FBQzZGLEVBQUUsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FDRHdCLEtBQUssQ0FBQyxDQUFDO0lBRVYsSUFBSSxDQUFDeEcsUUFBUSxDQUFDO01BQUM2RDtJQUFxQixDQUFDLENBQUM7RUFDeEM7RUFFQWdDLGdCQUFnQkEsQ0FBQ3JFLE9BQU8sRUFBRTtJQUN4QixPQUFPQSxPQUFPLENBQ1hpRixNQUFNLENBQUMsQ0FBQztNQUFDQyxNQUFNO01BQUVDO0lBQWtCLENBQUMsS0FBS3RMLGFBQWEsQ0FBQ3FMLE1BQU0sRUFBRUMsa0JBQWtCLENBQUMsQ0FBQyxDQUNuRkMsSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUFLRCxDQUFDLENBQUNGLGtCQUFrQixDQUFDSSxRQUFRLENBQUMsQ0FBQyxHQUFHRCxDQUFDLENBQUNILGtCQUFrQixDQUFDSSxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQ3RGO0VBRUEsTUFBTTlCLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ3ZCLElBQUksQ0FBQ2hDLGFBQWEsR0FBRyxJQUFJcEcsYUFBYSxDQUFDO01BQUNzQixLQUFLLEVBQUU7SUFBSSxDQUFDLENBQUM7SUFFckQsTUFBTXFHLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQ3ZCLGFBQWEsQ0FBQytELGlDQUFpQyxDQUFDLENBQUM7SUFDakYsTUFBTTtNQUFDeEYsT0FBTztNQUFFeUM7SUFBTyxDQUFDLEdBQUcsSUFBSSxDQUFDaEIsYUFBYSxDQUFDckQsZUFBZSxDQUFDNEUsWUFBWSxDQUFDO0lBQzNFLE1BQU07TUFBQ25GO0lBQUssQ0FBQyxHQUFHLElBQUksQ0FBQ0gsQ0FBQztJQUN0QixNQUFNeUYsTUFBTSxHQUFHLElBQUlySCxNQUFNLENBQUM7TUFBQ2tFLE9BQU87TUFBRXJELEtBQUssRUFBRSxJQUFJO01BQUVrQjtJQUFLLENBQUMsQ0FBQztJQUN4RCxNQUFNMEUsYUFBYSxHQUFHLElBQUksQ0FBQzhCLGdCQUFnQixDQUFDckUsT0FBTyxDQUFDO0lBRXBELElBQUksQ0FBQ3hCLFFBQVEsQ0FBQztNQUNad0IsT0FBTztNQUNQdUMsYUFBYTtNQUNibkUsZUFBZSxFQUFFNEIsT0FBTztNQUN4QnlDLE9BQU8sRUFBRSxJQUFJLENBQUNnRCxjQUFjLENBQUNoRCxPQUFPLENBQUM7TUFDckNPLFlBQVk7TUFDWkMsa0JBQWtCLEVBQUUsSUFBSTtNQUN4QkMsd0JBQXdCLEVBQUVGLFlBQVksQ0FBQzBDLFlBQVksQ0FBQyxDQUFDO01BQ3JEdkM7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBd0MsMEJBQTBCLEdBQUdBLENBQUEsS0FBTSxJQUFJLENBQUNuSCxRQUFRLENBQUM7SUFBQzBFLHdCQUF3QixFQUFFLElBQUksQ0FBQ2MsS0FBSyxDQUFDaEIsWUFBWSxDQUFDMEMsWUFBWSxDQUFDO0VBQUMsQ0FBQyxDQUFDO0VBRXBIdEQsY0FBYyxHQUFHQSxDQUFBLEtBQU07SUFDckIsSUFBSSxPQUFPLElBQUksQ0FBQ0YsS0FBSyxDQUFDbEMsT0FBTyxJQUFJLFVBQVUsRUFBRTtNQUMzQyxPQUFPLElBQUksQ0FBQ2tDLEtBQUssQ0FBQ2xDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0lBRUEsT0FBTyxJQUFJLENBQUNrQyxLQUFLLENBQUNsQyxPQUFPO0VBQzNCLENBQUM7RUFFRHlGLGNBQWNBLENBQUNoRCxPQUFPLEVBQUU7SUFDdEIsTUFBTTtNQUFDdkQ7SUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDZ0QsS0FBSztJQUM3QixJQUFJdUQsY0FBYyxHQUFHLEVBQUU7SUFFdkIsSUFBSXZHLFFBQVEsRUFBRXVHLGNBQWMsR0FBR0EsY0FBYyxDQUFDRyxNQUFNLENBQUMxRyxRQUFRLENBQUM7SUFDOUQsSUFBSXVELE9BQU8sRUFBRWdELGNBQWMsR0FBR0EsY0FBYyxDQUFDRyxNQUFNLENBQUNuRCxPQUFPLENBQUM7SUFFNUQsT0FBT2xILFNBQVMsQ0FBQ2tLLGNBQWMsQ0FBQztFQUNsQztFQUVBakosTUFBTUEsQ0FBQSxFQUFJO0lBQ1IsTUFBTTtNQUFDdUUsVUFBVTtNQUFFL0IseUJBQXlCO01BQUVDO0lBQXFCLENBQUMsR0FBRyxJQUFJLENBQUN6QixDQUFDO0lBQzdFLE1BQU07TUFBQ1osVUFBVTtNQUFFZ0M7SUFBVyxDQUFDLEdBQUcsSUFBSSxDQUFDc0QsS0FBSztJQUM1QyxNQUFNO01BQUNkLFNBQVM7TUFBRWUsVUFBVTtNQUFFVTtJQUFXLENBQUMsR0FBRyxJQUFJLENBQUNuRixDQUFDO0lBQ25ELE1BQU07TUFDSm1JLE1BQU07TUFDTkMsWUFBWTtNQUNaQyxPQUFPO01BQ1A5SSxLQUFLO01BQ0x5SCxNQUFNO01BQ05zQiw2QkFBNkI7TUFDN0JDO0lBQ0YsQ0FBQyxHQUFHbE4sSUFBSSxDQUNOLElBQUksQ0FBQzZELFVBQVUsRUFDZixRQUFRLEVBQ1IsY0FBYyxFQUNkLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLCtCQUErQixFQUMvQiwyQkFDRixDQUFDO0lBRUQsSUFBSUEsVUFBVSxJQUFJQSxVQUFVLENBQUNzSixJQUFJLENBQUNuRixVQUFVLENBQUNrQixjQUFjLENBQUMsQ0FBQyxDQUFDTixJQUFJLElBQUlaLFVBQVUsQ0FBQ2tCLGNBQWMsQ0FBQyxDQUFDLENBQUNOLElBQUksRUFBRTtNQUN0RyxNQUFNLElBQUl3RSxLQUFLLENBQ2IsZ0NBQWdDdkosVUFBVSxDQUFDc0osSUFBSSxDQUFDbkYsVUFBVSxDQUFDa0IsY0FBYyxDQUFDLENBQUMsQ0FBQ04sSUFBSSxJQUFJLEdBQ3BGLHVDQUF1Q1osVUFBVSxDQUFDa0IsY0FBYyxDQUFDLENBQUMsQ0FBQ04sSUFBSSxHQUN6RSxDQUFDO0lBQ0g7SUFFQSxvQkFDRTNJLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzNELElBQUk7TUFBQzRELE9BQU8sRUFBRTtRQUFDQyxLQUFLLEVBQUUsSUFBSSxDQUFDd0MsU0FBUyxDQUFDO01BQUMsQ0FBRTtNQUFDdUcsUUFBUSxFQUFFLElBQUksQ0FBQ3BKLEVBQUUsQ0FBQ3FKLGlCQUFrQjtNQUFDL0ksS0FBSyxFQUFFLElBQUksQ0FBQzRFLEtBQUssQ0FBQ1osTUFBTSxFQUFFZ0Y7SUFBVSxHQUNoSE4sNkJBQTZCLGlCQUM1QmhOLEtBQUEsQ0FBQW1FLGFBQUE7TUFBSzBDLFNBQVMsRUFBQztJQUEwQyxHQUN0RGIseUJBQXlCLENBQUM7TUFBQzZHLE1BQU07TUFBRUUsT0FBTztNQUFFRDtJQUFZLENBQUMsQ0FDdkQsQ0FBQyxFQUVQRyx5QkFBeUIsaUJBQ3hCak4sS0FBQSxDQUFBbUUsYUFBQTtNQUFLMEMsU0FBUyxFQUFDO0lBQXNDLEdBQ2xEWixxQkFBcUIsQ0FBQztNQUFDNEcsTUFBTTtNQUFFRSxPQUFPO01BQUVEO0lBQVksQ0FBQyxDQUNuRCxDQUFDLEVBRVBqRCxXQUFXLGlCQUNWN0osS0FBQSxDQUFBbUUsYUFBQSxDQUFDbEQsT0FBTztNQUFDMkUsV0FBVyxFQUFFQSxXQUFZO01BQUNtQyxVQUFVLEVBQUVBLFVBQVc7TUFBQ0ssU0FBUyxFQUFFQSxTQUFVO01BQUNlLFVBQVUsRUFBRUE7SUFBVyxDQUFFLENBQUMsRUFFNUc0RCxPQUFPLElBQUk5SSxLQUFLLElBQUl5SCxNQUFNLElBQUltQixNQUFNLElBQUksQ0FBQ0csNkJBQTZCLElBQUksQ0FBQ0MseUJBQXlCLElBQ25HLElBQUksQ0FBQ00sV0FBVyxDQUFDLENBRWYsQ0FBQztFQUVYO0VBRUExQyxlQUFlQSxDQUFBLEVBQUk7SUFDakIsTUFBTUEsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNO01BQUN2RSxTQUFTO01BQUV5QjtJQUFVLENBQUMsR0FBRyxJQUFJLENBQUNtQixLQUFLO0lBQzFDLE1BQU1zRSxZQUFZLEdBQUcsRUFBRTtJQUV2QixJQUFJLElBQUksQ0FBQ3RFLEtBQUssQ0FBQ3JELGNBQWMsRUFBRTJILFlBQVksQ0FBQ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzRCxJQUFJLElBQUksQ0FBQ3ZFLEtBQUssQ0FBQzFCLGFBQWEsRUFBRWdHLFlBQVksQ0FBQ0MsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2RCxJQUFJLElBQUksQ0FBQ3ZFLEtBQUssQ0FBQ1gsYUFBYSxFQUFFaUYsWUFBWSxDQUFDQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBRXZELElBQUlELFlBQVksQ0FBQ0UsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUMzQixNQUFNQyxjQUFjLEdBQUc3TixJQUFJLENBQUNpSSxVQUFVLENBQUNrQixjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztNQUVoRTRCLGVBQWUsQ0FBQzhDLGNBQWMsQ0FBQyxHQUFHSCxZQUFZO0lBQ2hEO0lBRUEsSUFBSWxILFNBQVMsRUFBRTtNQUNiLEtBQUssTUFBTXNILFNBQVMsSUFBSXRILFNBQVMsRUFBRTtRQUNqQyxJQUFJLEVBQUVzSCxTQUFTLElBQUkvQyxlQUFlLENBQUMsRUFBRTtVQUNuQ0EsZUFBZSxDQUFDK0MsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNqQztRQUVBLEtBQUssTUFBTUMsT0FBTyxJQUFJdkgsU0FBUyxDQUFDc0gsU0FBUyxDQUFDLEVBQUU7VUFDMUMvQyxlQUFlLENBQUMrQyxTQUFTLENBQUMsQ0FBQ0gsSUFBSSxDQUFDSSxPQUFPLENBQUM7UUFDMUM7TUFDRjtJQUNGO0lBRUEsT0FBT2hELGVBQWU7RUFDeEI7RUFFQTBDLFdBQVdBLENBQUEsRUFBSTtJQUNiLE1BQU07TUFDSmpILFNBQVM7TUFDVEUsY0FBYztNQUNkRSxVQUFVO01BQ1ZmLElBQUk7TUFDSmtCLFNBQVM7TUFDVGpELFVBQVU7TUFDVm9ELE9BQU87TUFDUEcsUUFBUTtNQUNSdkIsV0FBVztNQUNYd0IscUJBQXFCO01BQ3JCQyx5QkFBeUI7TUFDekJDLGFBQWE7TUFDYnpCLGNBQWM7TUFDZDBCLGNBQWM7TUFDZEMsYUFBYTtNQUNiMUIsVUFBVTtNQUNWMkIsYUFBYTtNQUNiMUIsa0JBQWtCO01BQ2xCMkIsaUJBQWlCO01BQ2pCRSxPQUFPO01BQ1BDLE1BQU07TUFDTkMsVUFBVTtNQUNWQyxVQUFVO01BQ1YvQix5QkFBeUI7TUFDekJDLHFCQUFxQjtNQUNyQitCLGNBQWM7TUFDZEMsZUFBZTtNQUNmQyxtQkFBbUI7TUFDbkJoQyxRQUFRO01BQ1JpQyxXQUFXO01BQ1hDLFNBQVM7TUFDVGpDLE1BQU07TUFDTmtDLGFBQWE7TUFDYmpDLE9BQU87TUFDUG1DLGFBQWE7TUFDYjlELFNBQVM7TUFDVCxHQUFHcUo7SUFDTCxDQUFDLEdBQUcsSUFBSSxDQUFDNUUsS0FBSztJQUNkLE1BQU07TUFBQzJELE1BQU07TUFBRUUsT0FBTztNQUFFOUksS0FBSztNQUFFeUg7SUFBTSxDQUFDLEdBQUczTCxJQUFJLENBQUMsSUFBSSxDQUFDNkQsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztJQUV0RyxJQUFJbUssYUFBYSxFQUFFQyxtQkFBbUI7SUFFdEMsSUFBSSxPQUFPbkcsTUFBTSxJQUFJLFVBQVUsRUFBRTtNQUMvQmtHLGFBQWEsR0FBR2xHLE1BQU0sQ0FBQztRQUFDZ0YsTUFBTTtRQUFFRSxPQUFPO1FBQUU5SSxLQUFLO1FBQUV5SDtNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDLE1BQU0sSUFBSTdELE1BQU0sRUFBRTtNQUNqQmtHLGFBQWEsR0FBR2xHLE1BQU07SUFDeEIsQ0FBQyxNQUFNO01BQ0xrRyxhQUFhLEdBQUdoRyxVQUFVLENBQUM2RixTQUFTLENBQUMsQ0FBQyxDQUFDSyxLQUFLLENBQUM7UUFBQ2pDLEtBQUssRUFBRTtNQUFDLENBQUMsQ0FBQztJQUMxRDtJQUVBLElBQUksQ0FBQy9ELGVBQWUsRUFBRTtNQUNwQixJQUFJQyxtQkFBbUIsRUFBRTtRQUN2QjhGLG1CQUFtQixHQUFHOUYsbUJBQW1CO01BQzNDLENBQUMsTUFBTTtRQUNMOEYsbUJBQW1CLEdBQUduTSxRQUFRO01BQ2hDO0lBQ0Y7SUFFQSxNQUFNcU0sYUFBYSxHQUFHO01BQ3BCQyxTQUFTLEVBQUU7SUFDYixDQUFDO0lBRUQsSUFBSS9ILE9BQU8sRUFBRTtNQUNYOEgsYUFBYSxDQUFDRSxNQUFNLEdBQUcsbUJBQW1CO01BQzFDRixhQUFhLENBQUNHLFlBQVksR0FBRyxDQUFDO0lBQ2hDO0lBRUEsTUFBTUMsUUFBUSxnQkFDWnRPLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQ2pCLFlBQVksQ0FBQ3FMLFFBQVE7TUFBQ0MsS0FBSyxFQUFFLElBQUksQ0FBQ3hLLEVBQUUsQ0FBQ047SUFBa0IsZ0JBQ3REMUQsS0FBQSxDQUFBbUUsYUFBQSxDQUFDakQsUUFBUSxFQUFBdU4sUUFBQTtNQUNQQyxJQUFJLEVBQUU3QixNQUFPO01BQ2J6SSxPQUFPLEVBQUU7UUFDUEMsS0FBSyxFQUFFMUQsVUFBVSxDQUFDLGtCQUFrQixFQUFFa0csU0FBUyxDQUFDO1FBQ2hEdUQsUUFBUSxFQUFFLElBQUksQ0FBQzFGLENBQUMsQ0FBQ3dGLHdCQUF3QjtRQUN6QzVHLFVBQVUsRUFBRSxJQUFJLENBQUNvQixDQUFDLENBQUNwQjtNQUNyQixDQUFFO01BQ0ZxTCxTQUFTLEVBQUUsSUFBSSxDQUFDakssQ0FBQyxDQUFDcEIsVUFBVztNQUM3QnNMLFlBQVksRUFBRSxJQUFJLENBQUM1SyxFQUFFLENBQUM2SyxXQUFZO01BQ2xDMUwsbUJBQW1CLEVBQUVBLG1CQUFvQjtNQUN6QzJMLFVBQVUsRUFBRSxJQUFJLENBQUM5SyxFQUFFLENBQUM4SyxVQUFXO01BQy9CQyw4QkFBOEI7TUFDOUJ6SyxLQUFLLEVBQUU0SjtJQUFjLEdBQ2pCSixTQUFTLENBQ2QsQ0FDb0IsQ0FDeEI7SUFFRCxvQkFDRTlOLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQW5FLEtBQUEsQ0FBQXFGLFFBQUEsUUFDR29DLGFBQWEsSUFBSTNCLFVBQVUsaUJBQzFCOUYsS0FBQSxDQUFBbUUsYUFBQSxDQUFDekQsSUFBSTtNQUFDbUcsU0FBUyxFQUFDO0lBQThCLEdBQzNDLElBQUksQ0FBQ3lDLFVBQVUsQ0FBQyxDQUNiLENBQUMsRUFFUjdCLGFBQWEsSUFBSSxDQUFDM0IsVUFBVSxJQUMzQixJQUFJLENBQUN3RCxVQUFVLENBQUMsQ0FBQyxFQUVsQjNELElBQUksaUJBQ0gzRixLQUFBLENBQUFtRSxhQUFBLENBQUN6RCxJQUFJLEVBQUErTixRQUFBO01BQ0g1SCxTQUFTLEVBQUVsRyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxFQUFFa0csU0FBUyxDQUFFO01BQ25FTSxRQUFRLEVBQUUsSUFBSSxDQUFDNkgsYUFBYSxDQUFDLENBQUU7TUFDL0JuSCxNQUFNLEVBQUVrRyxhQUFjO01BQ3RCa0IsTUFBTSxFQUFFLElBQUksQ0FBQ0MsV0FBVyxDQUFDO0lBQUUsR0FDdkJwQixTQUFTLEdBRVpRLFFBQ0csQ0FBQyxFQUVSLENBQUMzSSxJQUFJLElBQUkySSxRQUFRLEVBQ2pCNUMsTUFBTSxJQUFJc0MsbUJBQW1CLGlCQUM1QmhPLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzZKLG1CQUFtQjtNQUFDdEMsTUFBTSxFQUFFQTtJQUFPLENBQUUsQ0FBQyxFQUV4Q0EsTUFBTSxJQUFJekQsZUFBZSxJQUN4QkEsZUFBZSxDQUFDO01BQUN5RDtJQUFNLENBQUMsQ0FFMUIsQ0FBQztFQUVQO0VBRUEyQixpQkFBaUIsR0FBSThCLENBQUMsSUFBSztJQUN6QixNQUFNO01BQUN0SztJQUFLLENBQUMsR0FBR3NLLENBQUMsQ0FBQ0MsV0FBVyxDQUFDQyxNQUFNO0lBQ3BDLE1BQU07TUFBQ2xGO0lBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQ3pGLENBQUM7SUFFdkIsSUFBSSxDQUFDYyxRQUFRLENBQUM7TUFBQ1g7SUFBSyxDQUFDLENBQUM7SUFDdEIsSUFBSXNGLE1BQU0sRUFBRUEsTUFBTSxDQUFDbUYsVUFBVSxHQUFHekssS0FBSztFQUN2QyxDQUFDO0VBRUQ2RixjQUFjLEdBQUdBLENBQUM7SUFBQ3dDO0VBQUksQ0FBQyxLQUFLO0lBQzNCLE1BQU1TLGNBQWMsR0FBRyxJQUFJLENBQUNuSixDQUFDLENBQUN1RCxVQUFVLENBQUNrQixjQUFjLENBQUMsQ0FBQyxDQUFDTixJQUFJO0lBRTlELElBQUl1RSxJQUFJLENBQUNxQyxPQUFPLENBQUM1QixjQUFjLENBQUMsRUFBRTtNQUNoQyxNQUFNNkIsYUFBYSxHQUFHdEMsSUFBSSxDQUFDcUMsT0FBTyxDQUFDNUIsY0FBYyxDQUFDLENBQUNELE1BQU07TUFFekQsSUFBSSxDQUFDbEksUUFBUSxDQUFFaUssU0FBUyxLQUFNO1FBQzVCcEcscUJBQXFCLEVBQUVvRyxTQUFTLENBQUNwRyxxQkFBcUIsR0FBR21HO01BQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0w7RUFDRixDQUFDO0VBRUQ3RSxnQkFBZ0IsR0FBR0EsQ0FBQztJQUFDdUM7RUFBSSxDQUFDLEtBQUs7SUFDN0IsTUFBTVMsY0FBYyxHQUFHLElBQUksQ0FBQ25KLENBQUMsQ0FBQ3VELFVBQVUsQ0FBQ2tCLGNBQWMsQ0FBQyxDQUFDLENBQUNOLElBQUk7SUFFOUQsSUFBSXVFLElBQUksQ0FBQ3dDLFNBQVMsQ0FBQy9CLGNBQWMsQ0FBQyxFQUFFO01BQ2xDLE1BQU1nQyxlQUFlLEdBQUd6QyxJQUFJLENBQUN3QyxTQUFTLENBQUMvQixjQUFjLENBQUMsQ0FBQ0QsTUFBTTtNQUU3RCxJQUFJLENBQUNsSSxRQUFRLENBQUVpSyxTQUFTLEtBQU07UUFDNUJwRyxxQkFBcUIsRUFBRW9HLFNBQVMsQ0FBQ3BHLHFCQUFxQixHQUFHc0c7TUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDTDtFQUNGLENBQUM7RUFFRGQsV0FBVyxHQUFJZSxLQUFLLElBQUssR0FBRyxJQUFJLENBQUNsTCxDQUFDLENBQUN3Rix3QkFBd0IsSUFBSTBGLEtBQUssQ0FBQ3BGLEVBQUUsQ0FBQyxDQUFDLEVBQUU7RUFFM0VsQixVQUFVLEdBQUdBLENBQUEsS0FBTTtJQUNqQixNQUFNO01BQUNQLGFBQWE7TUFBRThHLFlBQVk7TUFBRUM7SUFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQzlMLEVBQUU7SUFDbkUsTUFBTTtNQUFDeUQsYUFBYTtNQUFFMUI7SUFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQ3ZCLENBQUM7SUFDbEQsTUFBTTtNQUFDa0Y7SUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDaEYsQ0FBQztJQUMzQixNQUFNO01BQUNnRDtJQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDd0IsS0FBSztJQUN0QyxNQUFNO01BQUM2RDtJQUFPLENBQUMsR0FBR2hOLElBQUksQ0FBQyxJQUFJLENBQUM2RCxVQUFVLEVBQUUsU0FBUyxDQUFDO0lBRWxELG9CQUNFNUQsS0FBQSxDQUFBbUUsYUFBQSxDQUFDaEQsSUFBSTtNQUFDMEYsU0FBUyxFQUFDLHlCQUF5QjtNQUFDa0osT0FBTyxFQUFFaEgsYUFBYztNQUFDaUgsUUFBUSxFQUFFLElBQUksQ0FBQ2hNLEVBQUUsQ0FBQ2lNLGtCQUFtQjtNQUFDQyxPQUFPLEVBQUUsSUFBSSxDQUFDQyxTQUFTLENBQUM3RztJQUFXLEdBQ3hJLEdBQUcsSUFBSXlELE9BQU8saUJBQ2IvTSxLQUFBLENBQUFtRSxhQUFBO01BQU93RSxJQUFJLEVBQUMsR0FBRztNQUFDcEQsSUFBSSxFQUFDLFFBQVE7TUFBQ2lKLEtBQUssRUFBRXpCLE9BQU8sQ0FBQ3JJO0lBQUUsQ0FBRSxDQUFDLEVBRW5EK0MsYUFBYSxDQUFDO01BQ2IySSxlQUFlLEVBQUVQLFlBQVk7TUFDN0JRLHdCQUF3QixFQUFFUCxvQkFBb0I7TUFDOUMvQyxPQUFPO01BQ1ByRDtJQUNGLENBQUMsQ0FBQyxFQUNEM0Qsa0JBQWtCLGlCQUNqQi9GLEtBQUEsQ0FBQW1FLGFBQUE7TUFDRTBDLFNBQVMsRUFBQyxrREFBa0Q7TUFDNUR0QixJQUFJLEVBQUMsUUFBUTtNQUNiakIsS0FBSyxFQUFFO1FBQUNnTSxTQUFTLEVBQUU7TUFBSyxDQUFFO01BQzFCOUIsS0FBSyxFQUFFOUcsaUJBQWlCLElBQUksSUFBSSxDQUFDM0QsQ0FBQyxDQUFDLFNBQVMsRUFBRTtRQUFDb0IsWUFBWSxFQUFFO01BQVEsQ0FBQztJQUFFLENBQ3pFLENBRUMsQ0FBQztFQUVYLENBQUM7RUFFRG9MLGVBQWUsR0FBSXBCLENBQUMsSUFBSztJQUN2QkEsQ0FBQyxDQUFDcUIsY0FBYyxDQUFDLENBQUM7SUFDbEIsSUFBSSxDQUFDaEwsUUFBUSxDQUFDO01BQUNxRSxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUNtQixLQUFLLENBQUNuQjtJQUFXLENBQUMsQ0FBQztFQUN2RCxDQUFDO0VBRUQ0RyxnQkFBZ0IsR0FBSXRCLENBQUMsSUFBSztJQUN4QixNQUFNO01BQUMvRztJQUFTLENBQUMsR0FBRyxJQUFJLENBQUMxRCxDQUFDO0lBQzFCLE1BQU1nTSxlQUFlLEdBQUc1USxJQUFJLENBQUNxUCxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztJQUNsRCxNQUFNd0IsTUFBTSxHQUFHLEdBQUd2SSxTQUFTLE1BQU07SUFDakMsTUFBTXdJLFlBQVksR0FBRyxDQUFDLENBQUM7SUFFdkJBLFlBQVksQ0FBQ0QsTUFBTSxDQUFDLEdBQUdELGVBQWU7SUFFdEM1TyxNQUFNLENBQUMrTyxZQUFZLENBQUNELFlBQVksQ0FBQztFQUNuQyxDQUFDO0VBRUQ5QixVQUFVLEdBQUdBLENBQUM7SUFBQ2dDLEtBQUs7SUFBRXhGLElBQUksRUFBRXNFO0VBQUssQ0FBQyxLQUFLO0lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUNsTCxDQUFDLENBQUN1RixrQkFBa0IsRUFBRTtNQUM5QixvQkFDRWpLLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzNELElBQUkscUJBQ0hSLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzdCLElBQUksUUFDRixJQUFJLENBQUN5QixDQUFDLENBQUMsc0JBQXNCLEVBQUU7UUFBQ29CLFlBQVksRUFBRTtNQUFZLENBQUMsQ0FDeEQsQ0FDRixDQUFDO0lBRVg7SUFFQSxvQkFDRW5GLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQ3ZDLFFBQVE7TUFDUHdJLFFBQVEsRUFBRXdGLEtBQUssQ0FBQ3hGLFFBQVEsQ0FBQyxDQUFFO01BQzNCcEQsT0FBTyxFQUFFLElBQUksQ0FBQ3RDLENBQUMsQ0FBQzZFLGFBQWM7TUFDOUJ3SCxZQUFZLEVBQUUsSUFBSSxDQUFDQSxZQUFZLENBQUMsQ0FBRTtNQUNsQ2xOLE1BQU0sRUFBRSxJQUFJLENBQUNHLEVBQUUsQ0FBQ0gsTUFBTztNQUN2QmlOLEtBQUssRUFBRUEsS0FBTTtNQUNiRSxHQUFHLEVBQUVwQixLQUFLLENBQUNwRixFQUFFLENBQUMsQ0FBRTtNQUNoQm9GLEtBQUssRUFBRUEsS0FBTTtNQUNiak0sS0FBSyxFQUFFLElBQUs7TUFDWnVHLHdCQUF3QixFQUFFLElBQUksQ0FBQ3hGLENBQUMsQ0FBQ3dGO0lBQXlCLENBQzNELENBQUM7RUFFTixDQUFDO0VBRUQrRyxjQUFjLEdBQUdBLENBQUM7SUFBQy9FLE1BQU07SUFBRWdGLFdBQVc7SUFBRUMsSUFBSTtJQUFFN00sS0FBSztJQUFFaUI7RUFBSSxDQUFDLEtBQUs7SUFDN0QsTUFBTTtNQUFDYTtJQUFPLENBQUMsR0FBRyxJQUFJLENBQUM1QixDQUFDO0lBQ3hCLE1BQU00TSxZQUFZLEdBQUc7TUFDbkJDLGNBQWMsRUFBRSxRQUFRO01BQ3hCQyxPQUFPLEVBQUUsQ0FBQztNQUNWQyxRQUFRLEVBQUU7SUFDWixDQUFDO0lBRUQsSUFBSW5MLE9BQU8sRUFBRTtNQUNYb0wsTUFBTSxDQUFDQyxNQUFNLENBQUNMLFlBQVksRUFBRTtRQUMxQk0sZUFBZSxFQUFFUCxJQUFJLEdBQUcsU0FBUyxHQUFHO01BQ3RDLENBQUMsQ0FBQztJQUNKO0lBRUEsSUFBSTVMLElBQUksSUFBSSxTQUFTLEVBQUU7TUFDckI2TCxZQUFZLENBQUNPLGFBQWEsR0FBRyxLQUFLO01BQ2xDUCxZQUFZLENBQUNRLFVBQVUsR0FBRyxRQUFRO01BRWxDLElBQUksSUFBSSxDQUFDNU4sRUFBRSxDQUFDUCxJQUFJLEVBQUU7UUFDaEIyTixZQUFZLENBQUNsTSxVQUFVLEdBQUcsTUFBTTtNQUNsQyxDQUFDLE1BQU07UUFDTGtNLFlBQVksQ0FBQ1MsV0FBVyxHQUFHLE1BQU07TUFDbkM7SUFDRixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM3TixFQUFFLENBQUNQLElBQUksSUFBSTJDLE9BQU8sRUFBRTtNQUNsQ2dMLFlBQVksQ0FBQ1UsV0FBVyxHQUFHLG1CQUFtQjtJQUNoRDtJQUVBLE1BQU1DLFdBQVcsR0FBR1AsTUFBTSxDQUFDQyxNQUFNLENBQy9CTCxZQUFZLEVBQ1o5TSxLQUNGLENBQUM7SUFFRCxPQUFPeU4sV0FBVztFQUNwQixDQUFDO0VBRURuTixjQUFjLEdBQUdBLENBQUM7SUFBQ3NILE1BQU07SUFBRWdGLFdBQVc7SUFBRTVNLEtBQUs7SUFBRWlCO0VBQUksQ0FBQyxLQUFLO0lBQ3ZELE1BQU07TUFBQzlCO0lBQUksQ0FBQyxHQUFHLElBQUksQ0FBQ08sRUFBRTtJQUN0QixNQUFNb04sWUFBWSxHQUFHO01BQ25CTyxhQUFhLEVBQUUsS0FBSztNQUNwQkMsVUFBVSxFQUFFLFFBQVE7TUFDcEJOLE9BQU8sRUFBRTtJQUNYLENBQUM7SUFFRCxJQUFJL0wsSUFBSSxJQUFJLFNBQVMsSUFBSTlCLElBQUksSUFBSSxJQUFJLENBQUNlLENBQUMsQ0FBQzRCLE9BQU8sRUFBRTtNQUMvQ2dMLFlBQVksQ0FBQ1UsV0FBVyxHQUFHLG1CQUFtQjtJQUNoRDtJQUVBLE1BQU1DLFdBQVcsR0FBR1AsTUFBTSxDQUFDQyxNQUFNLENBQy9CTCxZQUFZLEVBQ1o5TSxLQUNGLENBQUM7SUFFRCxPQUFPeU4sV0FBVztFQUNwQixDQUFDO0VBRURDLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQ25CLE1BQU1ELFdBQVcsR0FBRztNQUFDRSxVQUFVLEVBQUU7SUFBTSxDQUFDO0lBRXhDLE9BQU9GLFdBQVc7RUFDcEI7RUFFQUcsV0FBVyxHQUFHQSxDQUFDO0lBQUNmO0VBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLO0lBQzdCLE1BQU1ZLFdBQVcsR0FBRztNQUNsQkksSUFBSSxFQUFFLENBQUM7TUFDUFAsVUFBVSxFQUFFO0lBQ2QsQ0FBQztJQUVELElBQUlULElBQUksSUFBSSxJQUFJLENBQUMzTSxDQUFDLENBQUM0QixPQUFPLEVBQUU7TUFDMUIyTCxXQUFXLENBQUNMLGVBQWUsR0FBRyxTQUFTO0lBQ3pDO0lBRUEsT0FBT0ssV0FBVztFQUNwQixDQUFDO0VBRUR4TixpQkFBaUIsR0FBR0EsQ0FBQSxLQUFNO0lBQ3hCLE1BQU13TixXQUFXLEdBQUc7TUFDbEJJLElBQUksRUFBRSxDQUFDO01BQ1BQLFVBQVUsRUFBRTtJQUNkLENBQUM7SUFFRCxPQUFPRyxXQUFXO0VBQ3BCLENBQUM7RUFFRC9DLGFBQWFBLENBQUEsRUFBRztJQUNkLE1BQU07TUFBQzdIO0lBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQytCLEtBQUs7SUFDN0IsTUFBTTtNQUFDYTtJQUFZLENBQUMsR0FBRyxJQUFJLENBQUNyRixDQUFDO0lBQzdCLE1BQU07TUFBQ21JLE1BQU07TUFBRUUsT0FBTztNQUFFOUksS0FBSztNQUFFeUg7SUFBTSxDQUFDLEdBQUczTCxJQUFJLENBQUMsSUFBSSxDQUFDNkQsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztJQUV0RyxvQkFDRTVELEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzNELElBQUk7TUFBQzhELEtBQUssRUFBRSxJQUFJLENBQUM4TixhQUFhLEtBQUs7UUFBQ1QsYUFBYSxFQUFFO01BQUs7SUFBRSxHQUN4RHhLLFFBQVEsSUFBSUEsUUFBUSxDQUFDO01BQUMwRixNQUFNO01BQUVFLE9BQU87TUFBRTlJLEtBQUs7TUFBRXlIO0lBQU0sQ0FBQyxDQUFDLGVBQ3ZEMUwsS0FBQSxDQUFBbUUsYUFBQSxDQUFDNUQsU0FBUztNQUFDNkQsT0FBTyxFQUFFO1FBQUNDLEtBQUssRUFBRTtNQUFlLENBQUU7TUFBQ2dPLE9BQU8sRUFBRSxJQUFJLENBQUNyTyxFQUFFLENBQUN1TTtJQUFnQixnQkFDN0V2USxLQUFBLENBQUFtRSxhQUFBLENBQUM1QyxJQUFJO01BQUNvSCxJQUFJLEVBQUMsUUFBUTtNQUFDMkosSUFBSSxFQUFFO0lBQUcsQ0FBRSxDQUN0QixDQUFDLGVBQ1p0UyxLQUFBLENBQUFtRSxhQUFBLENBQUMzRCxJQUFJLFFBQ0Z1SixZQUFZLGlCQUNYL0osS0FBQSxDQUFBbUUsYUFBQSxDQUFDaEMsUUFBUTtNQUFDb1EsY0FBYyxFQUFFLElBQUksQ0FBQ3ZPLEVBQUUsQ0FBQ3dPLHNCQUF1QjtNQUFDN08sS0FBSyxFQUFFO0lBQUssQ0FBRSxDQUFDLGVBRTNFM0QsS0FBQSxDQUFBbUUsYUFBQSxDQUFDNUQsU0FBUztNQUFDNkQsT0FBTyxFQUFFLElBQUksQ0FBQ3FPLHFCQUFxQixLQUFLO1FBQUNwTyxLQUFLLEVBQUU7TUFBaUIsQ0FBRTtNQUFDZ08sT0FBTyxFQUFFLElBQUksQ0FBQ3JPLEVBQUUsQ0FBQzBPO0lBQWtCLGdCQUNoSDFTLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzVDLElBQUk7TUFBQ29ILElBQUksRUFBQyxNQUFNO01BQUMySixJQUFJLEVBQUU7SUFBRyxDQUFFLENBQ3BCLENBQ1AsQ0FDRixDQUFDO0VBRVg7RUFFQXBELFdBQVdBLENBQUEsRUFBRztJQUNaLE1BQU07TUFBQ3hEO0lBQU0sQ0FBQyxHQUFHM0wsSUFBSSxDQUFDLElBQUksQ0FBQzZELFVBQVUsRUFBRSxRQUFRLENBQUM7SUFDaEQsTUFBTStPLFdBQVcsR0FBR2pILE1BQU0sQ0FBQ2lILFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU1DLFVBQVUsR0FBR2xILE1BQU0sQ0FBQ2tILFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU1DLE9BQU8sR0FBR25ILE1BQU0sQ0FBQ21ILE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE1BQU1DLEVBQUUsR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUNMLFdBQVcsR0FBR0UsT0FBTyxFQUFFRCxVQUFVLENBQUM7SUFDdEQsTUFBTXpOLFlBQVksR0FBRyx1REFBdUQ7SUFDNUUsSUFBSThOLElBQUksR0FBSSxDQUFDTixXQUFXLEdBQUcsQ0FBQyxJQUFJRSxPQUFPLEdBQUksQ0FBQztJQUU1QyxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUFFRyxJQUFJLEdBQUcsQ0FBQztJQUV0QixvQkFDRWpULEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzNELElBQUk7TUFBQzhELEtBQUssRUFBRSxJQUFJLENBQUM4TixhQUFhLEtBQUs7UUFBQ1QsYUFBYSxFQUFFLEtBQUs7UUFBRU4sY0FBYyxFQUFFLGVBQWU7UUFBRWYsU0FBUyxFQUFFO01BQUU7SUFBRSxnQkFDekd0USxLQUFBLENBQUFtRSxhQUFBLENBQUMzRCxJQUFJO01BQUM0RCxPQUFPLEVBQUUsSUFBSSxDQUFDOE8sb0JBQW9CLEtBQUs7UUFBQzdPLEtBQUssRUFBRTtNQUFnQixDQUFFO01BQUNDLEtBQUssRUFBRSxJQUFJLENBQUM2TyxrQkFBa0IsS0FBSztRQUFDeEIsYUFBYSxFQUFFO01BQUs7SUFBRSxnQkFDaEkzUixLQUFBLENBQUFtRSxhQUFBLENBQUM3QixJQUFJLFFBQ0YsSUFBSSxDQUFDeUIsQ0FBQyxDQUFDLCtCQUErQixFQUFFO01BQUNvQixZQUFZO01BQUU4TixJQUFJO01BQUVILEVBQUU7TUFBRU0sV0FBVyxFQUFFUjtJQUFVLENBQUMsQ0FDdEYsQ0FBQyxFQUNOLElBQUksQ0FBQ3BPLENBQUMsQ0FBQ0MsU0FBUyxJQUFJLElBQUksQ0FBQ0MsQ0FBQyxDQUFDMkUscUJBQXFCLEtBQUssSUFBSSxpQkFDeERySixLQUFBLENBQUFtRSxhQUFBLENBQUM3QixJQUFJO01BQUNnQyxLQUFLLEVBQUUsSUFBSSxDQUFDK08sa0JBQWtCLEtBQUs7UUFBQ25PLFVBQVUsRUFBRTtNQUFDO0lBQUUsR0FDdEQsSUFBSSxDQUFDbkIsQ0FBQyxDQUFDLGFBQWEsRUFBRTtNQUFDb0IsWUFBWSxFQUFFLHVCQUF1QjtNQUFFbU8sUUFBUSxFQUFFLElBQUksQ0FBQzVPLENBQUMsQ0FBQzJFO0lBQXFCLENBQUMsQ0FDbEcsQ0FFSixDQUFDLGVBQ1BySixLQUFBLENBQUFtRSxhQUFBLENBQUMzRCxJQUFJLHFCQUNIUixLQUFBLENBQUFtRSxhQUFBLENBQUNqQyxNQUFNO01BQ0wyRSxTQUFTLEVBQUMsaUJBQWlCO01BQzNCMUIsWUFBWSxFQUFFME4sT0FBUTtNQUN0QlUsUUFBUSxFQUFFLElBQUksQ0FBQ3ZQLEVBQUUsQ0FBQ3lNLGdCQUFpQjtNQUNuQytDLE9BQU8sRUFBRXpRO0lBQWtCLENBQzVCLENBQ0csQ0FDRixDQUFDO0VBRVg7RUFFQThELFNBQVNBLENBQUEsRUFBRztJQUNWLE1BQU1sRyxVQUFVLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztJQUV2QyxJQUFJLElBQUksQ0FBQ3VJLEtBQUssQ0FBQ3JDLFNBQVMsRUFBRTtNQUN4QmxHLFVBQVUsQ0FBQzhNLElBQUksQ0FBQyxJQUFJLENBQUN2RSxLQUFLLENBQUNyQyxTQUFTLENBQUM7SUFDdkM7SUFFQSxPQUFPbEcsVUFBVSxDQUFDOFMsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUM3QjtFQUVBQyxXQUFXQSxDQUFDeEgsTUFBTSxFQUFFO0lBQ2xCLE1BQU1oRCxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLElBQUlnRCxNQUFNLENBQUN5SCxVQUFVLEVBQUU7TUFDckJ6SyxLQUFLLENBQUM1RSxLQUFLLEtBQUssQ0FBQyxDQUFDO01BQ2xCNEUsS0FBSyxDQUFDNUUsS0FBSyxDQUFDc1AsU0FBUyxHQUFHLFFBQVE7SUFDbEM7SUFFQSxJQUFJMUgsTUFBTSxDQUFDMkgsU0FBUyxFQUFFO01BQ3BCM0ssS0FBSyxDQUFDNUUsS0FBSyxLQUFLLENBQUMsQ0FBQztNQUNsQjRFLEtBQUssQ0FBQzVFLEtBQUssQ0FBQ3NQLFNBQVMsR0FBRyxPQUFPO0lBQ2pDO0lBRUEsT0FBTzFLLEtBQUs7RUFDZDtFQUVBNEssV0FBV0EsQ0FBQzVILE1BQU0sRUFBRTtJQUNsQixNQUFNaEQsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVoQixJQUFJZ0QsTUFBTSxDQUFDeUgsVUFBVSxFQUFFO01BQ3JCekssS0FBSyxDQUFDNUUsS0FBSyxLQUFLLENBQUMsQ0FBQztNQUNsQjRFLEtBQUssQ0FBQzVFLEtBQUssQ0FBQytNLGNBQWMsR0FBRyxRQUFRO0lBQ3ZDO0lBRUEsSUFBSW5GLE1BQU0sQ0FBQzJILFNBQVMsRUFBRTtNQUNwQjNLLEtBQUssQ0FBQzVFLEtBQUssS0FBSyxDQUFDLENBQUM7TUFDbEI0RSxLQUFLLENBQUM1RSxLQUFLLENBQUMrTSxjQUFjLEdBQUcsS0FBSztJQUNwQztJQUVBLE9BQU9uSSxLQUFLO0VBQ2Q7RUFFQTZILFlBQVlBLENBQUEsRUFBRztJQUNiLE1BQU1BLFlBQVksR0FBRyxDQUFDLENBQUM7SUFFdkIsS0FBSyxNQUFNN0UsTUFBTSxJQUFJLElBQUksQ0FBQ3hILENBQUMsQ0FBQ1UsZUFBZSxFQUFFO01BQzNDMkwsWUFBWSxDQUFDN0UsTUFBTSxDQUFDQyxrQkFBa0IsQ0FBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBR29FLE1BQU0sQ0FBQ3JILEtBQUs7SUFDckU7SUFFQSxPQUFPa00sWUFBWTtFQUNyQjtFQUVBekwseUJBQXlCLEdBQUdBLENBQUEsS0FBTTtJQUNoQyxvQkFDRXRGLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQ3BELGFBQWE7TUFDWjJOLElBQUksRUFBRSxJQUFJLENBQUNoSyxDQUFDLENBQUM2RSxhQUFjO01BQzNCMUYsTUFBTSxFQUFFLElBQUksQ0FBQ0csRUFBRSxDQUFDd0UsbUJBQW9CO01BQ3BDdUwsVUFBVTtNQUNWbkYsWUFBWSxFQUFFLElBQUksQ0FBQzVLLEVBQUUsQ0FBQ2dRLG9CQUFxQjtNQUMzQ0MsV0FBVyxFQUFFLElBQUksQ0FBQ2pRLEVBQUUsQ0FBQ2lRLFdBQVk7TUFDakNDLFdBQVcsRUFBRSxJQUFJLENBQUNsUSxFQUFFLENBQUNrUSxXQUFZO01BQ2pDcEYsVUFBVSxFQUFFLElBQUksQ0FBQzlLLEVBQUUsQ0FBQ21RO0lBQTBCLENBQy9DLENBQUM7RUFFTixDQUFDO0VBRURDLHlCQUF5QixHQUFJOUksSUFBSSxJQUFLLEdBQUdBLElBQUksQ0FBQ2Esa0JBQWtCLENBQUNyRSxVQUFVLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQ3BELENBQUMsQ0FBQ2tGLFFBQVEsRUFBRTtFQUNsR29LLG9CQUFvQixHQUFJMUksSUFBSSxJQUFLQSxJQUFJLENBQUNhLGtCQUFrQixDQUFDckUsVUFBVSxDQUFDLENBQUM7RUFFckVtTSxXQUFXLEdBQUdBLENBQUM7SUFBQ0ksYUFBYTtJQUFFQyxTQUFTO0lBQUVDLENBQUM7SUFBRUM7RUFBQyxDQUFDLEtBQUs7SUFDbEQsTUFBTUMsZ0JBQWdCLEdBQUczVSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUV3VSxTQUFTLEVBQUUsa0JBQWtCLENBQUM7SUFFeEYsSUFBSUQsYUFBYSxFQUFFO01BQ2pCaFUsUUFBUSxDQUFDcVUsTUFBTSxDQUFDRCxnQkFBZ0IsRUFBRUosYUFBYSxDQUFDLENBQUNNLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUMsTUFBTTtNQUNMRixnQkFBZ0IsQ0FBQ2pKLFFBQVEsQ0FBQztRQUFDK0ksQ0FBQztRQUFFQztNQUFDLENBQUMsQ0FBQztJQUNuQztFQUNGLENBQUM7RUFFRE4sV0FBVyxHQUFHLE1BQUFBLENBQU87SUFBQ1UsUUFBUTtJQUFFQyxZQUFZO0lBQUVDLE1BQU07SUFBRUM7RUFBVSxDQUFDLEtBQUs7SUFDcEUsSUFBSUYsWUFBWSxJQUFJRSxVQUFVLEVBQUUsT0FBTSxDQUFDOztJQUV2QyxNQUFNQyxrQkFBa0IsR0FBR0osUUFBUSxDQUFDekksa0JBQWtCLENBQUM4SSxXQUFXO0lBQ2xFLE1BQU1DLFFBQVEsR0FBRyxNQUFNRixrQkFBa0IsQ0FBQ0csSUFBSSxDQUFDTCxNQUFNLENBQUMzSSxrQkFBa0IsQ0FBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQzs7SUFFL0UsTUFBTW9LLFFBQVEsQ0FBQ3pJLGtCQUFrQixDQUFDaUosTUFBTSxDQUFDO01BQUM3SSxRQUFRLEVBQUUySSxRQUFRLENBQUMzSSxRQUFRLENBQUM7SUFBQyxDQUFDLENBQUM7RUFDM0UsQ0FBQztFQUVENEgseUJBQXlCLEdBQUdBLENBQUM7SUFBQ2tCLFFBQVE7SUFBRS9KLElBQUk7SUFBRWdLO0VBQVUsQ0FBQyxLQUFLO0lBQzVELE1BQU07TUFBQ0MsYUFBYTtNQUFFaEssY0FBYztNQUFFVyxNQUFNO01BQUVDO0lBQWtCLENBQUMsR0FBR2IsSUFBSTtJQUV4RSxvQkFDRXRMLEtBQUEsQ0FBQW1FLGFBQUEsQ0FBQzlDLFlBQVk7TUFDWG1VLE1BQU0sRUFBRUgsUUFBUztNQUNqQkUsYUFBYSxFQUFFQSxhQUFjO01BQzdCaEssY0FBYyxFQUFFQSxjQUFlO01BQy9CVyxNQUFNLEVBQUVBLE1BQU87TUFDZjhFLEdBQUcsRUFBRTdFLGtCQUFrQixDQUFDckUsVUFBVSxDQUFDLENBQUU7TUFDckM4QixRQUFRLEVBQUUsSUFBSSxDQUFDbEYsQ0FBQyxDQUFDa0YsUUFBUztNQUMxQmpHLEtBQUssRUFBRSxJQUFLO01BQ1p3SSxrQkFBa0IsRUFBRUEsa0JBQW1CO01BQ3ZDbUosVUFBVSxFQUFFQSxVQUFXO01BQ3ZCbkwsTUFBTSxFQUFFLElBQUksQ0FBQ3pGLENBQUMsQ0FBQ3lGO0lBQU8sQ0FDdkIsQ0FBQztFQUVOLENBQUM7RUFFRHNMLHdCQUF3QkEsQ0FBQ3ZKLE1BQU0sRUFBRTtJQUMvQixNQUFNdkwsVUFBVSxHQUFHLEVBQUU7SUFFckIsSUFBSXVMLE1BQU0sQ0FBQ3dKLFdBQVcsSUFBSXhKLE1BQU0sQ0FBQ3dKLFdBQVcsQ0FBQzdPLFNBQVMsRUFBRWxHLFVBQVUsQ0FBQzhNLElBQUksQ0FBQ3ZCLE1BQU0sQ0FBQ3dKLFdBQVcsQ0FBQzdPLFNBQVMsQ0FBQztJQUNyRyxJQUFJcUYsTUFBTSxDQUFDNEgsV0FBVyxJQUFJNUgsTUFBTSxDQUFDNEgsV0FBVyxDQUFDak4sU0FBUyxFQUFFbEcsVUFBVSxDQUFDOE0sSUFBSSxDQUFDdkIsTUFBTSxDQUFDNEgsV0FBVyxDQUFDak4sU0FBUyxDQUFDO0lBRXJHLE9BQU9sRyxVQUFVO0VBQ25CO0VBRUFnVixvQkFBb0JBLENBQUN6SixNQUFNLEVBQUU7SUFDM0IsTUFBTTtNQUFDbkU7SUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDdkQsQ0FBQztJQUUzQixJQUFJLE9BQU8sSUFBSTBILE1BQU0sRUFBRTtNQUNyQixJQUFJLE9BQU9BLE1BQU0sQ0FBQzBKLEtBQUssSUFBSSxVQUFVLEVBQUU7UUFDckMsT0FBTzFKLE1BQU0sQ0FBQzBKLEtBQUssQ0FBQyxDQUFDO01BQ3ZCLENBQUMsTUFBTTtRQUNMLE9BQU8xSixNQUFNLENBQUMwSixLQUFLO01BQ3JCO0lBQ0Y7SUFFQSxJQUFJQyxpQkFBaUIsR0FBRzlOLFVBQVU7O0lBRWxDO0lBQ0EsSUFBSW1FLE1BQU0sQ0FBQzRKLElBQUksRUFBRTtNQUNmLEtBQUssTUFBTUMsUUFBUSxJQUFJN0osTUFBTSxDQUFDNEosSUFBSSxFQUFFO1FBQ2xDLE1BQU1FLGFBQWEsR0FBR2xXLElBQUksQ0FBQytWLGlCQUFpQixDQUFDNU0sY0FBYyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUM7UUFDL0UsTUFBTWdOLFlBQVksR0FBR0QsYUFBYSxDQUFDYixJQUFJLENBQUVlLG1CQUFtQixJQUFLQSxtQkFBbUIsQ0FBQ3ZOLElBQUksSUFBSWxILFVBQVUsQ0FBQzBVLFVBQVUsQ0FBQ0osUUFBUSxDQUFDLENBQUM7UUFFN0hGLGlCQUFpQixHQUFHbFUsaUJBQWlCLENBQUM3QixJQUFJLENBQUNtVyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7TUFDNUU7SUFDRjtJQUVBLElBQUkvSixNQUFNLENBQUNrSyxTQUFTLEVBQUUsT0FBT1AsaUJBQWlCLENBQUNRLGtCQUFrQixDQUFDbkssTUFBTSxDQUFDa0ssU0FBUyxDQUFDO0lBRW5GLE1BQU0sSUFBSWpKLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQztFQUN4RDtFQUVBOEMsa0JBQWtCLEdBQUdBLENBQUEsS0FBTSxJQUFJLENBQUNKLFlBQVksQ0FBQyxDQUFDO0VBQzlDMkMsc0JBQXNCLEdBQUdBLENBQUEsS0FBTSxJQUFJLENBQUNoTixRQUFRLENBQUM7SUFBQ3VFLFlBQVksRUFBRTtFQUFLLENBQUMsQ0FBQztFQUVuRTJJLGlCQUFpQixHQUFJdkQsQ0FBQyxJQUFLO0lBQ3pCQSxDQUFDLENBQUNxQixjQUFjLENBQUMsQ0FBQztJQUVsQixJQUFJLENBQUNoTCxRQUFRLENBQUM7TUFBQ3VFLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQ3JGLENBQUMsQ0FBQ3FGO0lBQVksQ0FBQyxDQUFDO0VBQ3JELENBQUM7RUFFRDhGLFlBQVksR0FBR0EsQ0FBQSxLQUFNO0lBQ25CLE1BQU07TUFBQ25KO0lBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQ3dDLEtBQUs7SUFDL0IsTUFBTTtNQUFDUTtJQUFVLENBQUMsR0FBRyxJQUFJLENBQUNoRixDQUFDO0lBQzNCLE1BQU00UixrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTXZKLE9BQU8sR0FBRyxJQUFJLENBQUNySSxDQUFDLENBQUM0RSxVQUFVLENBQUNpTixRQUFRLENBQUMsQ0FBQztJQUU1QyxJQUFJalcsUUFBUSxDQUFDa1csRUFBRSxJQUFJLEtBQUssRUFBRTtNQUN4QixNQUFNbE4sVUFBVSxHQUFHeEosSUFBSSxDQUFDLElBQUksQ0FBQ2tFLEVBQUUsQ0FBQytFLGFBQWEsRUFBRSxTQUFTLENBQUM7TUFDekQsTUFBTTBOLGlCQUFpQixHQUFHM1UsTUFBTSxDQUFDNFUsYUFBYSxDQUFDcE4sVUFBVSxDQUFDO01BRTFEOUgsV0FBVyxDQUFDdUwsT0FBTyxFQUFFMEosaUJBQWlCLENBQUM7SUFDekM7SUFFQUgsa0JBQWtCLENBQUM1TSxVQUFVLENBQUMsR0FBR2lOLElBQUksQ0FBQ0MsU0FBUyxDQUFDN0osT0FBTyxDQUFDO0lBRXhEakwsTUFBTSxDQUFDK08sWUFBWSxDQUFDeUYsa0JBQWtCLEVBQUU7TUFBQzVQO0lBQVUsQ0FBQyxDQUFDO0VBQ3ZELENBQUM7RUFFRG9KLG9CQUFvQixHQUFHaFAsUUFBUSxDQUFDLElBQUksQ0FBQ2tELEVBQUUsQ0FBQzZMLFlBQVksQ0FBQztBQUN2RCxDQUFDLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
612
+ //# sourceMappingURL=table.js.map