@jigx/core-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (902) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +87 -0
  3. package/dist/PACKAGE.d.ts +4 -0
  4. package/dist/PACKAGE.d.ts.map +1 -0
  5. package/dist/PACKAGE.js +5 -0
  6. package/dist/abstract/app-info.d.ts +8 -0
  7. package/dist/abstract/app-info.d.ts.map +1 -0
  8. package/dist/abstract/app-info.js +8 -0
  9. package/dist/abstract/app-name.d.ts +15 -0
  10. package/dist/abstract/app-name.d.ts.map +1 -0
  11. package/dist/abstract/app-name.js +28 -0
  12. package/dist/abstract/base-builder.d.ts +4 -0
  13. package/dist/abstract/base-builder.d.ts.map +1 -0
  14. package/dist/abstract/base-builder.js +3 -0
  15. package/dist/abstract/element-base-builder.d.ts +7 -0
  16. package/dist/abstract/element-base-builder.d.ts.map +1 -0
  17. package/dist/abstract/element-base-builder.js +11 -0
  18. package/dist/abstract/generic.d.ts +31 -0
  19. package/dist/abstract/generic.d.ts.map +1 -0
  20. package/dist/abstract/generic.js +2 -0
  21. package/dist/abstract/index.d.ts +12 -0
  22. package/dist/abstract/index.d.ts.map +1 -0
  23. package/dist/abstract/index.js +11 -0
  24. package/dist/abstract/register.d.ts +31 -0
  25. package/dist/abstract/register.d.ts.map +1 -0
  26. package/dist/abstract/register.js +48 -0
  27. package/dist/abstract/sdk.expression.d.ts +43 -0
  28. package/dist/abstract/sdk.expression.d.ts.map +1 -0
  29. package/dist/abstract/sdk.expression.js +175 -0
  30. package/dist/abstract/sdk.text.d.ts +23 -0
  31. package/dist/abstract/sdk.text.d.ts.map +1 -0
  32. package/dist/abstract/sdk.text.js +110 -0
  33. package/dist/abstract/sdk.types.d.ts +16 -0
  34. package/dist/abstract/sdk.types.d.ts.map +1 -0
  35. package/dist/abstract/sdk.types.js +88 -0
  36. package/dist/abstract/zod.strata.d.ts +17 -0
  37. package/dist/abstract/zod.strata.d.ts.map +1 -0
  38. package/dist/abstract/zod.strata.js +11 -0
  39. package/dist/abstract/zod.types.d.ts +1937 -0
  40. package/dist/abstract/zod.types.d.ts.map +1 -0
  41. package/dist/abstract/zod.types.js +848 -0
  42. package/dist/action/action-definition.builder.d.ts +16 -0
  43. package/dist/action/action-definition.builder.d.ts.map +1 -0
  44. package/dist/action/action-definition.builder.js +35 -0
  45. package/dist/action/action.descriptor.d.ts +8 -0
  46. package/dist/action/action.descriptor.d.ts.map +1 -0
  47. package/dist/action/action.descriptor.js +2 -0
  48. package/dist/action/index.d.ts +57 -0
  49. package/dist/action/index.d.ts.map +1 -0
  50. package/dist/action/index.js +48 -0
  51. package/dist/action/ja.abstract.d.ts +33 -0
  52. package/dist/action/ja.abstract.d.ts.map +1 -0
  53. package/dist/action/ja.abstract.js +58 -0
  54. package/dist/action/ja.action-definition.d.ts +11 -0
  55. package/dist/action/ja.action-definition.d.ts.map +1 -0
  56. package/dist/action/ja.action-definition.js +12 -0
  57. package/dist/action/ja.action-list.d.ts +9 -0
  58. package/dist/action/ja.action-list.d.ts.map +1 -0
  59. package/dist/action/ja.action-list.js +15 -0
  60. package/dist/action/ja.clear-queue.d.ts +9 -0
  61. package/dist/action/ja.clear-queue.d.ts.map +1 -0
  62. package/dist/action/ja.clear-queue.js +9 -0
  63. package/dist/action/ja.color.d.ts +3 -0
  64. package/dist/action/ja.color.d.ts.map +1 -0
  65. package/dist/action/ja.color.js +2 -0
  66. package/dist/action/ja.confirm.abstract.d.ts +16 -0
  67. package/dist/action/ja.confirm.abstract.d.ts.map +1 -0
  68. package/dist/action/ja.confirm.abstract.js +25 -0
  69. package/dist/action/ja.confirm.d.ts +23 -0
  70. package/dist/action/ja.confirm.d.ts.map +1 -0
  71. package/dist/action/ja.confirm.js +28 -0
  72. package/dist/action/ja.delete-queue-command.d.ts +9 -0
  73. package/dist/action/ja.delete-queue-command.d.ts.map +1 -0
  74. package/dist/action/ja.delete-queue-command.js +9 -0
  75. package/dist/action/ja.delete-sync-scope.d.ts +10 -0
  76. package/dist/action/ja.delete-sync-scope.d.ts.map +1 -0
  77. package/dist/action/ja.delete-sync-scope.js +14 -0
  78. package/dist/action/ja.delete-sync-status.d.ts +9 -0
  79. package/dist/action/ja.delete-sync-status.d.ts.map +1 -0
  80. package/dist/action/ja.delete-sync-status.js +9 -0
  81. package/dist/action/ja.evaluate.d.ts +12 -0
  82. package/dist/action/ja.evaluate.d.ts.map +1 -0
  83. package/dist/action/ja.evaluate.js +9 -0
  84. package/dist/action/ja.execute-action.d.ts +11 -0
  85. package/dist/action/ja.execute-action.d.ts.map +1 -0
  86. package/dist/action/ja.execute-action.js +15 -0
  87. package/dist/action/ja.execute-entities.d.ts +7 -0
  88. package/dist/action/ja.execute-entities.d.ts.map +1 -0
  89. package/dist/action/ja.execute-entities.js +8 -0
  90. package/dist/action/ja.execute-entity.abstract.d.ts +41 -0
  91. package/dist/action/ja.execute-entity.abstract.d.ts.map +1 -0
  92. package/dist/action/ja.execute-entity.abstract.js +104 -0
  93. package/dist/action/ja.execute-entity.d.ts +6 -0
  94. package/dist/action/ja.execute-entity.d.ts.map +1 -0
  95. package/dist/action/ja.execute-entity.dynamic-data.d.ts +6 -0
  96. package/dist/action/ja.execute-entity.dynamic-data.d.ts.map +1 -0
  97. package/dist/action/ja.execute-entity.dynamic-data.js +2 -0
  98. package/dist/action/ja.execute-entity.generic.d.ts +11 -0
  99. package/dist/action/ja.execute-entity.generic.d.ts.map +1 -0
  100. package/dist/action/ja.execute-entity.generic.js +2 -0
  101. package/dist/action/ja.execute-entity.js +8 -0
  102. package/dist/action/ja.execute-entity.sql.d.ts +12 -0
  103. package/dist/action/ja.execute-entity.sql.d.ts.map +1 -0
  104. package/dist/action/ja.execute-entity.sql.js +2 -0
  105. package/dist/action/ja.execute-sql.abstract.d.ts +6 -0
  106. package/dist/action/ja.execute-sql.abstract.d.ts.map +1 -0
  107. package/dist/action/ja.execute-sql.abstract.js +2 -0
  108. package/dist/action/ja.execute-sql.d.ts +16 -0
  109. package/dist/action/ja.execute-sql.d.ts.map +1 -0
  110. package/dist/action/ja.execute-sql.js +64 -0
  111. package/dist/action/ja.find-replace.d.ts +12 -0
  112. package/dist/action/ja.find-replace.d.ts.map +1 -0
  113. package/dist/action/ja.find-replace.js +22 -0
  114. package/dist/action/ja.generate-file.d.ts +11 -0
  115. package/dist/action/ja.generate-file.d.ts.map +1 -0
  116. package/dist/action/ja.generate-file.js +19 -0
  117. package/dist/action/ja.generate-pdf.d.ts +10 -0
  118. package/dist/action/ja.generate-pdf.d.ts.map +1 -0
  119. package/dist/action/ja.generate-pdf.js +10 -0
  120. package/dist/action/ja.go-back.d.ts +9 -0
  121. package/dist/action/ja.go-back.d.ts.map +1 -0
  122. package/dist/action/ja.go-back.js +11 -0
  123. package/dist/action/ja.go-to.d.ts +18 -0
  124. package/dist/action/ja.go-to.d.ts.map +1 -0
  125. package/dist/action/ja.go-to.js +41 -0
  126. package/dist/action/ja.in-background.d.ts +95 -0
  127. package/dist/action/ja.in-background.d.ts.map +1 -0
  128. package/dist/action/ja.in-background.factory.d.ts +88 -0
  129. package/dist/action/ja.in-background.factory.d.ts.map +1 -0
  130. package/dist/action/ja.in-background.factory.js +98 -0
  131. package/dist/action/ja.in-background.js +247 -0
  132. package/dist/action/ja.info-modal.d.ts +37 -0
  133. package/dist/action/ja.info-modal.d.ts.map +1 -0
  134. package/dist/action/ja.info-modal.js +61 -0
  135. package/dist/action/ja.jig-actions.d.ts +16 -0
  136. package/dist/action/ja.jig-actions.d.ts.map +1 -0
  137. package/dist/action/ja.jig-actions.js +35 -0
  138. package/dist/action/ja.on-button.factory.d.ts +89 -0
  139. package/dist/action/ja.on-button.factory.d.ts.map +1 -0
  140. package/dist/action/ja.on-button.factory.js +86 -0
  141. package/dist/action/ja.open-app-settings.d.ts +6 -0
  142. package/dist/action/ja.open-app-settings.d.ts.map +1 -0
  143. package/dist/action/ja.open-app-settings.js +8 -0
  144. package/dist/action/ja.open-map.abstract.d.ts +6 -0
  145. package/dist/action/ja.open-map.abstract.d.ts.map +1 -0
  146. package/dist/action/ja.open-map.abstract.js +2 -0
  147. package/dist/action/ja.open-map.d.ts +11 -0
  148. package/dist/action/ja.open-map.d.ts.map +1 -0
  149. package/dist/action/ja.open-map.js +25 -0
  150. package/dist/action/ja.open-media-picker.abstract.d.ts +8 -0
  151. package/dist/action/ja.open-media-picker.abstract.d.ts.map +1 -0
  152. package/dist/action/ja.open-media-picker.abstract.js +2 -0
  153. package/dist/action/ja.open-media-picker.d.ts +18 -0
  154. package/dist/action/ja.open-media-picker.d.ts.map +1 -0
  155. package/dist/action/ja.open-media-picker.js +46 -0
  156. package/dist/action/ja.open-scanner.d.ts +14 -0
  157. package/dist/action/ja.open-scanner.d.ts.map +1 -0
  158. package/dist/action/ja.open-scanner.js +23 -0
  159. package/dist/action/ja.open-url.d.ts +10 -0
  160. package/dist/action/ja.open-url.d.ts.map +1 -0
  161. package/dist/action/ja.open-url.js +13 -0
  162. package/dist/action/ja.print.d.ts +10 -0
  163. package/dist/action/ja.print.d.ts.map +1 -0
  164. package/dist/action/ja.print.js +17 -0
  165. package/dist/action/ja.reset-application-state.d.ts +9 -0
  166. package/dist/action/ja.reset-application-state.d.ts.map +1 -0
  167. package/dist/action/ja.reset-application-state.js +12 -0
  168. package/dist/action/ja.reset-component-state.d.ts +9 -0
  169. package/dist/action/ja.reset-component-state.d.ts.map +1 -0
  170. package/dist/action/ja.reset-component-state.js +13 -0
  171. package/dist/action/ja.reset-screen-state.d.ts +9 -0
  172. package/dist/action/ja.reset-screen-state.d.ts.map +1 -0
  173. package/dist/action/ja.reset-screen-state.js +12 -0
  174. package/dist/action/ja.reset-state.d.ts +9 -0
  175. package/dist/action/ja.reset-state.d.ts.map +1 -0
  176. package/dist/action/ja.reset-state.js +13 -0
  177. package/dist/action/ja.retry-queue-command.d.ts +9 -0
  178. package/dist/action/ja.retry-queue-command.d.ts.map +1 -0
  179. package/dist/action/ja.retry-queue-command.js +9 -0
  180. package/dist/action/ja.sdk.d.ts +4 -0
  181. package/dist/action/ja.sdk.d.ts.map +1 -0
  182. package/dist/action/ja.sdk.js +2 -0
  183. package/dist/action/ja.set-active-tab.d.ts +13 -0
  184. package/dist/action/ja.set-active-tab.d.ts.map +1 -0
  185. package/dist/action/ja.set-active-tab.js +29 -0
  186. package/dist/action/ja.set-application-state.d.ts +9 -0
  187. package/dist/action/ja.set-application-state.d.ts.map +1 -0
  188. package/dist/action/ja.set-application-state.js +17 -0
  189. package/dist/action/ja.set-screen-state.d.ts +9 -0
  190. package/dist/action/ja.set-screen-state.d.ts.map +1 -0
  191. package/dist/action/ja.set-screen-state.js +12 -0
  192. package/dist/action/ja.share.d.ts +12 -0
  193. package/dist/action/ja.share.d.ts.map +1 -0
  194. package/dist/action/ja.share.js +23 -0
  195. package/dist/action/ja.show-alert.d.ts +33 -0
  196. package/dist/action/ja.show-alert.d.ts.map +1 -0
  197. package/dist/action/ja.show-alert.js +61 -0
  198. package/dist/action/ja.start-location-sharing.abstract.d.ts +6 -0
  199. package/dist/action/ja.start-location-sharing.abstract.d.ts.map +1 -0
  200. package/dist/action/ja.start-location-sharing.abstract.js +2 -0
  201. package/dist/action/ja.start-location-sharing.d.ts +18 -0
  202. package/dist/action/ja.start-location-sharing.d.ts.map +1 -0
  203. package/dist/action/ja.start-location-sharing.js +33 -0
  204. package/dist/action/ja.start-sync-scope.d.ts +9 -0
  205. package/dist/action/ja.start-sync-scope.d.ts.map +1 -0
  206. package/dist/action/ja.start-sync-scope.js +18 -0
  207. package/dist/action/ja.stop-location-sharing.d.ts +6 -0
  208. package/dist/action/ja.stop-location-sharing.d.ts.map +1 -0
  209. package/dist/action/ja.stop-location-sharing.js +8 -0
  210. package/dist/action/ja.submit-form.abstract.d.ts +11 -0
  211. package/dist/action/ja.submit-form.abstract.d.ts.map +1 -0
  212. package/dist/action/ja.submit-form.abstract.js +2 -0
  213. package/dist/action/ja.submit-form.d.ts +31 -0
  214. package/dist/action/ja.submit-form.d.ts.map +1 -0
  215. package/dist/action/ja.submit-form.js +124 -0
  216. package/dist/action/ja.swipeable-action.d.ts +19 -0
  217. package/dist/action/ja.swipeable-action.d.ts.map +1 -0
  218. package/dist/action/ja.swipeable-action.js +25 -0
  219. package/dist/action/ja.sync-entities.abstract.d.ts +25 -0
  220. package/dist/action/ja.sync-entities.abstract.d.ts.map +1 -0
  221. package/dist/action/ja.sync-entities.abstract.js +2 -0
  222. package/dist/action/ja.sync-entities.d.ts +32 -0
  223. package/dist/action/ja.sync-entities.d.ts.map +1 -0
  224. package/dist/action/ja.sync-entities.js +142 -0
  225. package/dist/action/ja.update-profile.d.ts +12 -0
  226. package/dist/action/ja.update-profile.d.ts.map +1 -0
  227. package/dist/action/ja.update-profile.js +20 -0
  228. package/dist/application/application.sdk.d.ts +84 -0
  229. package/dist/application/application.sdk.d.ts.map +1 -0
  230. package/dist/application/application.sdk.js +217 -0
  231. package/dist/application/application.tab.d.ts +20 -0
  232. package/dist/application/application.tab.d.ts.map +1 -0
  233. package/dist/application/application.tab.js +45 -0
  234. package/dist/application/context.sdk.d.ts +48 -0
  235. package/dist/application/context.sdk.d.ts.map +1 -0
  236. package/dist/application/context.sdk.js +116 -0
  237. package/dist/application/index.d.ts +4 -0
  238. package/dist/application/index.d.ts.map +1 -0
  239. package/dist/application/index.js +4 -0
  240. package/dist/assets/example-extraction-cache.json +9 -0
  241. package/dist/assets/extracted-core-sdk-examples.yaml +44440 -0
  242. package/dist/assets/extracted-core-sdk-types.yaml +12100 -0
  243. package/dist/assets/stream-line-icons.csv +19281 -0
  244. package/dist/assets/type-extraction-cache.json +9 -0
  245. package/dist/builder/application-analyzer/application-analyzer.d.ts +42 -0
  246. package/dist/builder/application-analyzer/application-analyzer.d.ts.map +1 -0
  247. package/dist/builder/application-analyzer/application-analyzer.js +150 -0
  248. package/dist/builder/application-analyzer/create-application-analyzer.d.ts +17 -0
  249. package/dist/builder/application-analyzer/create-application-analyzer.d.ts.map +1 -0
  250. package/dist/builder/application-analyzer/create-application-analyzer.js +121 -0
  251. package/dist/builder/application-analyzer/index.d.ts +5 -0
  252. package/dist/builder/application-analyzer/index.d.ts.map +1 -0
  253. package/dist/builder/application-analyzer/index.js +5 -0
  254. package/dist/builder/application-analyzer/select-component-nodes.d.ts +7 -0
  255. package/dist/builder/application-analyzer/select-component-nodes.d.ts.map +1 -0
  256. package/dist/builder/application-analyzer/select-component-nodes.js +15 -0
  257. package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts +8 -0
  258. package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts.map +1 -0
  259. package/dist/builder/application-analyzer/select-datasource-node-by-id.js +20 -0
  260. package/dist/builder/application-analyzer/types.d.ts +60 -0
  261. package/dist/builder/application-analyzer/types.d.ts.map +1 -0
  262. package/dist/builder/application-analyzer/types.js +16 -0
  263. package/dist/builder/application-analyzer/utils.d.ts +3 -0
  264. package/dist/builder/application-analyzer/utils.d.ts.map +1 -0
  265. package/dist/builder/application-analyzer/utils.js +8 -0
  266. package/dist/builder/builder.d.ts +8 -0
  267. package/dist/builder/builder.d.ts.map +1 -0
  268. package/dist/builder/builder.js +54 -0
  269. package/dist/builder/index.d.ts +5 -0
  270. package/dist/builder/index.d.ts.map +1 -0
  271. package/dist/builder/index.js +4 -0
  272. package/dist/builder/transform-summary.d.ts +3 -0
  273. package/dist/builder/transform-summary.d.ts.map +1 -0
  274. package/dist/builder/transform-summary.js +39 -0
  275. package/dist/builder/types.d.ts +8 -0
  276. package/dist/builder/types.d.ts.map +1 -0
  277. package/dist/builder/types.js +2 -0
  278. package/dist/builder/validate-datasource-ids.d.ts +17 -0
  279. package/dist/builder/validate-datasource-ids.d.ts.map +1 -0
  280. package/dist/builder/validate-datasource-ids.js +51 -0
  281. package/dist/component/common/index.d.ts +22 -0
  282. package/dist/component/common/index.d.ts.map +1 -0
  283. package/dist/component/common/index.js +16 -0
  284. package/dist/component/common/jc.avatar-field.types.d.ts +9 -0
  285. package/dist/component/common/jc.avatar-field.types.d.ts.map +1 -0
  286. package/dist/component/common/jc.avatar-field.types.js +11 -0
  287. package/dist/component/common/jc.chart.common.abstract.d.ts +85 -0
  288. package/dist/component/common/jc.chart.common.abstract.d.ts.map +1 -0
  289. package/dist/component/common/jc.chart.common.abstract.js +2 -0
  290. package/dist/component/common/jc.chart.common.builders.d.ts +37 -0
  291. package/dist/component/common/jc.chart.common.builders.d.ts.map +1 -0
  292. package/dist/component/common/jc.chart.common.builders.js +81 -0
  293. package/dist/component/common/jc.component.types.d.ts +101 -0
  294. package/dist/component/common/jc.component.types.d.ts.map +1 -0
  295. package/dist/component/common/jc.component.types.js +144 -0
  296. package/dist/component/common/jc.context.d.ts +7 -0
  297. package/dist/component/common/jc.context.d.ts.map +1 -0
  298. package/dist/component/common/jc.context.js +2 -0
  299. package/dist/component/common/jc.element.types.d.ts +14 -0
  300. package/dist/component/common/jc.element.types.d.ts.map +1 -0
  301. package/dist/component/common/jc.element.types.js +13 -0
  302. package/dist/component/common/jc.field-base.builder.d.ts +21 -0
  303. package/dist/component/common/jc.field-base.builder.d.ts.map +1 -0
  304. package/dist/component/common/jc.field-base.builder.js +101 -0
  305. package/dist/component/common/jc.field-base.types.d.ts +28 -0
  306. package/dist/component/common/jc.field-base.types.d.ts.map +1 -0
  307. package/dist/component/common/jc.field-base.types.js +2 -0
  308. package/dist/component/common/jc.left-right.element.avatar.d.ts +11 -0
  309. package/dist/component/common/jc.left-right.element.avatar.d.ts.map +1 -0
  310. package/dist/component/common/jc.left-right.element.avatar.js +18 -0
  311. package/dist/component/common/jc.left-right.element.badge.d.ts +11 -0
  312. package/dist/component/common/jc.left-right.element.badge.d.ts.map +1 -0
  313. package/dist/component/common/jc.left-right.element.badge.js +17 -0
  314. package/dist/component/common/jc.left-right.element.button.d.ts +11 -0
  315. package/dist/component/common/jc.left-right.element.button.d.ts.map +1 -0
  316. package/dist/component/common/jc.left-right.element.button.js +14 -0
  317. package/dist/component/common/jc.left-right.element.checkbox.d.ts +13 -0
  318. package/dist/component/common/jc.left-right.element.checkbox.d.ts.map +1 -0
  319. package/dist/component/common/jc.left-right.element.checkbox.js +21 -0
  320. package/dist/component/common/jc.left-right.element.d.ts +31 -0
  321. package/dist/component/common/jc.left-right.element.d.ts.map +1 -0
  322. package/dist/component/common/jc.left-right.element.icon.d.ts +18 -0
  323. package/dist/component/common/jc.left-right.element.icon.d.ts.map +1 -0
  324. package/dist/component/common/jc.left-right.element.icon.js +32 -0
  325. package/dist/component/common/jc.left-right.element.image.d.ts +16 -0
  326. package/dist/component/common/jc.left-right.element.image.d.ts.map +1 -0
  327. package/dist/component/common/jc.left-right.element.image.js +29 -0
  328. package/dist/component/common/jc.left-right.element.js +2 -0
  329. package/dist/component/common/jc.left-right.element.progress.d.ts +11 -0
  330. package/dist/component/common/jc.left-right.element.progress.d.ts.map +1 -0
  331. package/dist/component/common/jc.left-right.element.progress.js +17 -0
  332. package/dist/component/common/jc.left-right.element.switch.d.ts +13 -0
  333. package/dist/component/common/jc.left-right.element.switch.d.ts.map +1 -0
  334. package/dist/component/common/jc.left-right.element.switch.js +21 -0
  335. package/dist/component/common/jc.left-right.element.value.d.ts +10 -0
  336. package/dist/component/common/jc.left-right.element.value.d.ts.map +1 -0
  337. package/dist/component/common/jc.left-right.element.value.js +12 -0
  338. package/dist/component/common/jc.picker-field-options.types.d.ts +13 -0
  339. package/dist/component/common/jc.picker-field-options.types.d.ts.map +1 -0
  340. package/dist/component/common/jc.picker-field-options.types.js +2 -0
  341. package/dist/component/common/jc.text.types.d.ts +6 -0
  342. package/dist/component/common/jc.text.types.d.ts.map +1 -0
  343. package/dist/component/common/jc.text.types.js +2 -0
  344. package/dist/component/common/jc.validation.d.ts +9 -0
  345. package/dist/component/common/jc.validation.d.ts.map +1 -0
  346. package/dist/component/common/jc.validation.js +48 -0
  347. package/dist/component/index.d.ts +86 -0
  348. package/dist/component/index.d.ts.map +1 -0
  349. package/dist/component/index.js +83 -0
  350. package/dist/component/jc.abstract.d.ts +32 -0
  351. package/dist/component/jc.abstract.d.ts.map +1 -0
  352. package/dist/component/jc.abstract.factory.d.ts +488 -0
  353. package/dist/component/jc.abstract.factory.d.ts.map +1 -0
  354. package/dist/component/jc.abstract.factory.js +757 -0
  355. package/dist/component/jc.abstract.js +53 -0
  356. package/dist/component/jc.abstract.utils.d.ts +3 -0
  357. package/dist/component/jc.abstract.utils.d.ts.map +1 -0
  358. package/dist/component/jc.abstract.utils.js +26 -0
  359. package/dist/component/jc.amount-control.d.ts +16 -0
  360. package/dist/component/jc.amount-control.d.ts.map +1 -0
  361. package/dist/component/jc.amount-control.js +36 -0
  362. package/dist/component/jc.avatar-field.d.ts +11 -0
  363. package/dist/component/jc.avatar-field.d.ts.map +1 -0
  364. package/dist/component/jc.avatar-field.js +27 -0
  365. package/dist/component/jc.avatar.d.ts +14 -0
  366. package/dist/component/jc.avatar.d.ts.map +1 -0
  367. package/dist/component/jc.avatar.js +26 -0
  368. package/dist/component/jc.banner.d.ts +81 -0
  369. package/dist/component/jc.banner.d.ts.map +1 -0
  370. package/dist/component/jc.banner.js +49 -0
  371. package/dist/component/jc.bar-chart.d.ts +23 -0
  372. package/dist/component/jc.bar-chart.d.ts.map +1 -0
  373. package/dist/component/jc.bar-chart.js +45 -0
  374. package/dist/component/jc.button.d.ts +20 -0
  375. package/dist/component/jc.button.d.ts.map +1 -0
  376. package/dist/component/jc.button.js +39 -0
  377. package/dist/component/jc.card.abstract.d.ts +14 -0
  378. package/dist/component/jc.card.abstract.d.ts.map +1 -0
  379. package/dist/component/jc.card.abstract.js +31 -0
  380. package/dist/component/jc.card.on-default.d.ts +91 -0
  381. package/dist/component/jc.card.on-default.d.ts.map +1 -0
  382. package/dist/component/jc.card.on-default.js +96 -0
  383. package/dist/component/jc.carousel.d.ts +31 -0
  384. package/dist/component/jc.carousel.d.ts.map +1 -0
  385. package/dist/component/jc.carousel.js +58 -0
  386. package/dist/component/jc.chat-message.d.ts +17 -0
  387. package/dist/component/jc.chat-message.d.ts.map +1 -0
  388. package/dist/component/jc.chat-message.js +32 -0
  389. package/dist/component/jc.chat.d.ts +23 -0
  390. package/dist/component/jc.chat.d.ts.map +1 -0
  391. package/dist/component/jc.chat.js +68 -0
  392. package/dist/component/jc.checkbox.d.ts +15 -0
  393. package/dist/component/jc.checkbox.d.ts.map +1 -0
  394. package/dist/component/jc.checkbox.js +38 -0
  395. package/dist/component/jc.choice-field-item.d.ts +15 -0
  396. package/dist/component/jc.choice-field-item.d.ts.map +1 -0
  397. package/dist/component/jc.choice-field-item.js +41 -0
  398. package/dist/component/jc.choice-field.d.ts +21 -0
  399. package/dist/component/jc.choice-field.d.ts.map +1 -0
  400. package/dist/component/jc.choice-field.js +34 -0
  401. package/dist/component/jc.count-down.d.ts +18 -0
  402. package/dist/component/jc.count-down.d.ts.map +1 -0
  403. package/dist/component/jc.count-down.js +55 -0
  404. package/dist/component/jc.count-up.d.ts +15 -0
  405. package/dist/component/jc.count-up.d.ts.map +1 -0
  406. package/dist/component/jc.count-up.js +42 -0
  407. package/dist/component/jc.custom-component.interop.d.ts +58 -0
  408. package/dist/component/jc.custom-component.interop.d.ts.map +1 -0
  409. package/dist/component/jc.custom-component.interop.js +115 -0
  410. package/dist/component/jc.date-picker.d.ts +15 -0
  411. package/dist/component/jc.date-picker.d.ts.map +1 -0
  412. package/dist/component/jc.date-picker.js +31 -0
  413. package/dist/component/jc.divider.d.ts +7 -0
  414. package/dist/component/jc.divider.d.ts.map +1 -0
  415. package/dist/component/jc.divider.js +8 -0
  416. package/dist/component/jc.dropdown.d.ts +20 -0
  417. package/dist/component/jc.dropdown.d.ts.map +1 -0
  418. package/dist/component/jc.dropdown.item.d.ts +22 -0
  419. package/dist/component/jc.dropdown.item.d.ts.map +1 -0
  420. package/dist/component/jc.dropdown.item.js +85 -0
  421. package/dist/component/jc.dropdown.js +33 -0
  422. package/dist/component/jc.duration-picker.d.ts +18 -0
  423. package/dist/component/jc.duration-picker.d.ts.map +1 -0
  424. package/dist/component/jc.duration-picker.js +35 -0
  425. package/dist/component/jc.email-field.d.ts +11 -0
  426. package/dist/component/jc.email-field.d.ts.map +1 -0
  427. package/dist/component/jc.email-field.js +19 -0
  428. package/dist/component/jc.entity-field.d.ts +23 -0
  429. package/dist/component/jc.entity-field.d.ts.map +1 -0
  430. package/dist/component/jc.entity-field.js +71 -0
  431. package/dist/component/jc.entity.d.ts +15 -0
  432. package/dist/component/jc.entity.d.ts.map +1 -0
  433. package/dist/component/jc.entity.js +27 -0
  434. package/dist/component/jc.event.d.ts +22 -0
  435. package/dist/component/jc.event.d.ts.map +1 -0
  436. package/dist/component/jc.event.js +68 -0
  437. package/dist/component/jc.expander.d.ts +49 -0
  438. package/dist/component/jc.expander.d.ts.map +1 -0
  439. package/dist/component/jc.expander.header.d.ts +25 -0
  440. package/dist/component/jc.expander.header.d.ts.map +1 -0
  441. package/dist/component/jc.expander.header.js +39 -0
  442. package/dist/component/jc.expander.js +53 -0
  443. package/dist/component/jc.field-row.d.ts +34 -0
  444. package/dist/component/jc.field-row.d.ts.map +1 -0
  445. package/dist/component/jc.field-row.entity.d.ts +12 -0
  446. package/dist/component/jc.field-row.entity.d.ts.map +1 -0
  447. package/dist/component/jc.field-row.entity.js +35 -0
  448. package/dist/component/jc.field-row.js +37 -0
  449. package/dist/component/jc.form.d.ts +98 -0
  450. package/dist/component/jc.form.d.ts.map +1 -0
  451. package/dist/component/jc.form.js +127 -0
  452. package/dist/component/jc.gallery-item.d.ts +12 -0
  453. package/dist/component/jc.gallery-item.d.ts.map +1 -0
  454. package/dist/component/jc.gallery-item.js +24 -0
  455. package/dist/component/jc.grid-item.d.ts +15 -0
  456. package/dist/component/jc.grid-item.d.ts.map +1 -0
  457. package/dist/component/jc.grid-item.js +31 -0
  458. package/dist/component/jc.grid.d.ts +16 -0
  459. package/dist/component/jc.grid.d.ts.map +1 -0
  460. package/dist/component/jc.grid.js +64 -0
  461. package/dist/component/jc.guards.d.ts +17 -0
  462. package/dist/component/jc.guards.d.ts.map +1 -0
  463. package/dist/component/jc.guards.js +14 -0
  464. package/dist/component/jc.icon.d.ts +19 -0
  465. package/dist/component/jc.icon.d.ts.map +1 -0
  466. package/dist/component/jc.icon.js +41 -0
  467. package/dist/component/jc.image.abstract.d.ts +28 -0
  468. package/dist/component/jc.image.abstract.d.ts.map +1 -0
  469. package/dist/component/jc.image.abstract.js +52 -0
  470. package/dist/component/jc.image.d.ts +5 -0
  471. package/dist/component/jc.image.d.ts.map +1 -0
  472. package/dist/component/jc.image.js +2 -0
  473. package/dist/component/jc.image.on-carousel.d.ts +23 -0
  474. package/dist/component/jc.image.on-carousel.d.ts.map +1 -0
  475. package/dist/component/jc.image.on-carousel.js +19 -0
  476. package/dist/component/jc.image.on-default.d.ts +25 -0
  477. package/dist/component/jc.image.on-default.d.ts.map +1 -0
  478. package/dist/component/jc.image.on-default.js +22 -0
  479. package/dist/component/jc.interactive-image.d.ts +41 -0
  480. package/dist/component/jc.interactive-image.d.ts.map +1 -0
  481. package/dist/component/jc.interactive-image.item.d.ts +24 -0
  482. package/dist/component/jc.interactive-image.item.d.ts.map +1 -0
  483. package/dist/component/jc.interactive-image.item.js +78 -0
  484. package/dist/component/jc.interactive-image.js +78 -0
  485. package/dist/component/jc.jig-header.d.ts +19 -0
  486. package/dist/component/jc.jig-header.d.ts.map +1 -0
  487. package/dist/component/jc.jig-header.js +42 -0
  488. package/dist/component/jc.jig-widget.d.ts +15 -0
  489. package/dist/component/jc.jig-widget.d.ts.map +1 -0
  490. package/dist/component/jc.jig-widget.js +41 -0
  491. package/dist/component/jc.jig.d.ts +11 -0
  492. package/dist/component/jc.jig.d.ts.map +1 -0
  493. package/dist/component/jc.jig.js +24 -0
  494. package/dist/component/jc.line-chart.d.ts +28 -0
  495. package/dist/component/jc.line-chart.d.ts.map +1 -0
  496. package/dist/component/jc.line-chart.js +45 -0
  497. package/dist/component/jc.list-item.d.ts +106 -0
  498. package/dist/component/jc.list-item.d.ts.map +1 -0
  499. package/dist/component/jc.list-item.js +274 -0
  500. package/dist/component/jc.list-item.standalone.d.ts +13 -0
  501. package/dist/component/jc.list-item.standalone.d.ts.map +1 -0
  502. package/dist/component/jc.list-item.standalone.js +10 -0
  503. package/dist/component/jc.list.abstract.d.ts +36 -0
  504. package/dist/component/jc.list.abstract.d.ts.map +1 -0
  505. package/dist/component/jc.list.abstract.js +2 -0
  506. package/dist/component/jc.list.d.ts +39 -0
  507. package/dist/component/jc.list.d.ts.map +1 -0
  508. package/dist/component/jc.list.js +95 -0
  509. package/dist/component/jc.location.d.ts +41 -0
  510. package/dist/component/jc.location.d.ts.map +1 -0
  511. package/dist/component/jc.location.js +63 -0
  512. package/dist/component/jc.marker-item.d.ts +29 -0
  513. package/dist/component/jc.marker-item.d.ts.map +1 -0
  514. package/dist/component/jc.marker-item.js +48 -0
  515. package/dist/component/jc.media-field.d.ts +13 -0
  516. package/dist/component/jc.media-field.d.ts.map +1 -0
  517. package/dist/component/jc.media-field.js +37 -0
  518. package/dist/component/jc.menu-item.d.ts +89 -0
  519. package/dist/component/jc.menu-item.d.ts.map +1 -0
  520. package/dist/component/jc.menu-item.js +65 -0
  521. package/dist/component/jc.number-field.d.ts +21 -0
  522. package/dist/component/jc.number-field.d.ts.map +1 -0
  523. package/dist/component/jc.number-field.js +33 -0
  524. package/dist/component/jc.pie-chart.d.ts +26 -0
  525. package/dist/component/jc.pie-chart.d.ts.map +1 -0
  526. package/dist/component/jc.pie-chart.js +45 -0
  527. package/dist/component/jc.product-item.amount.d.ts +17 -0
  528. package/dist/component/jc.product-item.amount.d.ts.map +1 -0
  529. package/dist/component/jc.product-item.amount.js +31 -0
  530. package/dist/component/jc.product-item.d.ts +30 -0
  531. package/dist/component/jc.product-item.d.ts.map +1 -0
  532. package/dist/component/jc.product-item.js +68 -0
  533. package/dist/component/jc.progress-bar.d.ts +45 -0
  534. package/dist/component/jc.progress-bar.d.ts.map +1 -0
  535. package/dist/component/jc.progress-bar.js +58 -0
  536. package/dist/component/jc.rating.d.ts +17 -0
  537. package/dist/component/jc.rating.d.ts.map +1 -0
  538. package/dist/component/jc.rating.js +38 -0
  539. package/dist/component/jc.section.abstract.d.ts +87 -0
  540. package/dist/component/jc.section.abstract.d.ts.map +1 -0
  541. package/dist/component/jc.section.abstract.js +33 -0
  542. package/dist/component/jc.section.on-default.d.ts +85 -0
  543. package/dist/component/jc.section.on-default.d.ts.map +1 -0
  544. package/dist/component/jc.section.on-default.js +85 -0
  545. package/dist/component/jc.section.on-entity.d.ts +11 -0
  546. package/dist/component/jc.section.on-entity.d.ts.map +1 -0
  547. package/dist/component/jc.section.on-entity.js +11 -0
  548. package/dist/component/jc.segmented-control.d.ts +23 -0
  549. package/dist/component/jc.segmented-control.d.ts.map +1 -0
  550. package/dist/component/jc.segmented-control.js +66 -0
  551. package/dist/component/jc.signature-field.d.ts +11 -0
  552. package/dist/component/jc.signature-field.d.ts.map +1 -0
  553. package/dist/component/jc.signature-field.js +18 -0
  554. package/dist/component/jc.slider.d.ts +36 -0
  555. package/dist/component/jc.slider.d.ts.map +1 -0
  556. package/dist/component/jc.slider.js +53 -0
  557. package/dist/component/jc.stage.d.ts +23 -0
  558. package/dist/component/jc.stage.d.ts.map +1 -0
  559. package/dist/component/jc.stage.js +31 -0
  560. package/dist/component/jc.step.d.ts +30 -0
  561. package/dist/component/jc.step.d.ts.map +1 -0
  562. package/dist/component/jc.step.js +35 -0
  563. package/dist/component/jc.stepper.d.ts +34 -0
  564. package/dist/component/jc.stepper.d.ts.map +1 -0
  565. package/dist/component/jc.stepper.js +59 -0
  566. package/dist/component/jc.story-group.d.ts +18 -0
  567. package/dist/component/jc.story-group.d.ts.map +1 -0
  568. package/dist/component/jc.story-group.js +27 -0
  569. package/dist/component/jc.summary.abstract.d.ts +15 -0
  570. package/dist/component/jc.summary.abstract.d.ts.map +1 -0
  571. package/dist/component/jc.summary.abstract.js +29 -0
  572. package/dist/component/jc.summary.card.d.ts +14 -0
  573. package/dist/component/jc.summary.card.d.ts.map +1 -0
  574. package/dist/component/jc.summary.card.js +36 -0
  575. package/dist/component/jc.summary.counter.d.ts +12 -0
  576. package/dist/component/jc.summary.counter.d.ts.map +1 -0
  577. package/dist/component/jc.summary.counter.js +28 -0
  578. package/dist/component/jc.summary.default.d.ts +16 -0
  579. package/dist/component/jc.summary.default.d.ts.map +1 -0
  580. package/dist/component/jc.summary.default.js +34 -0
  581. package/dist/component/jc.summary.progress.d.ts +46 -0
  582. package/dist/component/jc.summary.progress.d.ts.map +1 -0
  583. package/dist/component/jc.summary.progress.js +35 -0
  584. package/dist/component/jc.tab-button.d.ts +18 -0
  585. package/dist/component/jc.tab-button.d.ts.map +1 -0
  586. package/dist/component/jc.tab-button.js +43 -0
  587. package/dist/component/jc.text-field.d.ts +20 -0
  588. package/dist/component/jc.text-field.d.ts.map +1 -0
  589. package/dist/component/jc.text-field.js +49 -0
  590. package/dist/component/jc.text.d.ts +24 -0
  591. package/dist/component/jc.text.d.ts.map +1 -0
  592. package/dist/component/jc.text.js +44 -0
  593. package/dist/component/jc.titles.d.ts +19 -0
  594. package/dist/component/jc.titles.d.ts.map +1 -0
  595. package/dist/component/jc.titles.js +34 -0
  596. package/dist/component/jc.trend.d.ts +18 -0
  597. package/dist/component/jc.trend.d.ts.map +1 -0
  598. package/dist/component/jc.trend.js +31 -0
  599. package/dist/component/jc.types.d.ts +75 -0
  600. package/dist/component/jc.types.d.ts.map +1 -0
  601. package/dist/component/jc.types.js +74 -0
  602. package/dist/component/jc.video-player.abstract.d.ts +28 -0
  603. package/dist/component/jc.video-player.abstract.d.ts.map +1 -0
  604. package/dist/component/jc.video-player.abstract.js +38 -0
  605. package/dist/component/jc.video-player.d.ts +4 -0
  606. package/dist/component/jc.video-player.d.ts.map +1 -0
  607. package/dist/component/jc.video-player.js +2 -0
  608. package/dist/component/jc.video-player.on-jig.d.ts +25 -0
  609. package/dist/component/jc.video-player.on-jig.d.ts.map +1 -0
  610. package/dist/component/jc.video-player.on-jig.js +31 -0
  611. package/dist/component/jc.view.d.ts +158 -0
  612. package/dist/component/jc.view.d.ts.map +1 -0
  613. package/dist/component/jc.view.js +85 -0
  614. package/dist/component/jc.web-view.abstract.d.ts +15 -0
  615. package/dist/component/jc.web-view.abstract.d.ts.map +1 -0
  616. package/dist/component/jc.web-view.abstract.js +33 -0
  617. package/dist/component/jc.web-view.on-default.d.ts +5 -0
  618. package/dist/component/jc.web-view.on-default.d.ts.map +1 -0
  619. package/dist/component/jc.web-view.on-default.js +4 -0
  620. package/dist/component/jc.web-view.on-full.d.ts +10 -0
  621. package/dist/component/jc.web-view.on-full.d.ts.map +1 -0
  622. package/dist/component/jc.web-view.on-full.js +14 -0
  623. package/dist/database/database.abstract.d.ts +39 -0
  624. package/dist/database/database.abstract.d.ts.map +1 -0
  625. package/dist/database/database.abstract.js +42 -0
  626. package/dist/database/index.d.ts +2 -0
  627. package/dist/database/index.d.ts.map +1 -0
  628. package/dist/database/index.js +2 -0
  629. package/dist/datasource/datasource.abstract.d.ts +39 -0
  630. package/dist/datasource/datasource.abstract.d.ts.map +1 -0
  631. package/dist/datasource/datasource.abstract.js +47 -0
  632. package/dist/datasource/datasource.descriptor.d.ts +11 -0
  633. package/dist/datasource/datasource.descriptor.d.ts.map +1 -0
  634. package/dist/datasource/datasource.descriptor.js +2 -0
  635. package/dist/datasource/datasource.reference.d.ts +33 -0
  636. package/dist/datasource/datasource.reference.d.ts.map +1 -0
  637. package/dist/datasource/datasource.reference.js +66 -0
  638. package/dist/datasource/datasource.sdk.d.ts +7 -0
  639. package/dist/datasource/datasource.sdk.d.ts.map +1 -0
  640. package/dist/datasource/datasource.sdk.js +5 -0
  641. package/dist/datasource/datasource.sqlite.d.ts +88 -0
  642. package/dist/datasource/datasource.sqlite.d.ts.map +1 -0
  643. package/dist/datasource/datasource.sqlite.js +286 -0
  644. package/dist/datasource/datasource.static.d.ts +21 -0
  645. package/dist/datasource/datasource.static.d.ts.map +1 -0
  646. package/dist/datasource/datasource.static.js +30 -0
  647. package/dist/datasource/datasource.system.d.ts +18 -0
  648. package/dist/datasource/datasource.system.d.ts.map +1 -0
  649. package/dist/datasource/datasource.system.js +10 -0
  650. package/dist/datasource/entity.descriptor.d.ts +9 -0
  651. package/dist/datasource/entity.descriptor.d.ts.map +1 -0
  652. package/dist/datasource/entity.descriptor.js +2 -0
  653. package/dist/datasource/index.d.ts +11 -0
  654. package/dist/datasource/index.d.ts.map +1 -0
  655. package/dist/datasource/index.js +9 -0
  656. package/dist/datasource/sqlite-normalizer.d.ts +3 -0
  657. package/dist/datasource/sqlite-normalizer.d.ts.map +1 -0
  658. package/dist/datasource/sqlite-normalizer.js +194 -0
  659. package/dist/datasource/sqlite-validator.d.ts +28 -0
  660. package/dist/datasource/sqlite-validator.d.ts.map +1 -0
  661. package/dist/datasource/sqlite-validator.js +218 -0
  662. package/dist/function/function.abstract.d.ts +538 -0
  663. package/dist/function/function.abstract.d.ts.map +1 -0
  664. package/dist/function/function.abstract.js +271 -0
  665. package/dist/function/function.guard.d.ts +17 -0
  666. package/dist/function/function.guard.d.ts.map +1 -0
  667. package/dist/function/function.guard.js +62 -0
  668. package/dist/function/function.operation.d.ts +26 -0
  669. package/dist/function/function.operation.d.ts.map +1 -0
  670. package/dist/function/function.operation.js +118 -0
  671. package/dist/function/function.rest.continuation.d.ts +12 -0
  672. package/dist/function/function.rest.continuation.d.ts.map +1 -0
  673. package/dist/function/function.rest.continuation.js +24 -0
  674. package/dist/function/function.rest.d.ts +31 -0
  675. package/dist/function/function.rest.d.ts.map +1 -0
  676. package/dist/function/function.rest.error-builder.d.ts +38 -0
  677. package/dist/function/function.rest.error-builder.d.ts.map +1 -0
  678. package/dist/function/function.rest.error-builder.js +161 -0
  679. package/dist/function/function.rest.js +72 -0
  680. package/dist/function/function.rest.parameter-builder.d.ts +33 -0
  681. package/dist/function/function.rest.parameter-builder.d.ts.map +1 -0
  682. package/dist/function/function.rest.parameter-builder.js +81 -0
  683. package/dist/function/function.rest.types.d.ts +28 -0
  684. package/dist/function/function.rest.types.d.ts.map +1 -0
  685. package/dist/function/function.rest.types.js +2 -0
  686. package/dist/function/function.sdk.d.ts +10 -0
  687. package/dist/function/function.sdk.d.ts.map +1 -0
  688. package/dist/function/function.sdk.js +12 -0
  689. package/dist/function/function.soap.d.ts +19 -0
  690. package/dist/function/function.soap.d.ts.map +1 -0
  691. package/dist/function/function.soap.js +36 -0
  692. package/dist/function/function.soap.parameter-builder.d.ts +25 -0
  693. package/dist/function/function.soap.parameter-builder.d.ts.map +1 -0
  694. package/dist/function/function.soap.parameter-builder.js +41 -0
  695. package/dist/function/function.soap.types.d.ts +17 -0
  696. package/dist/function/function.soap.types.d.ts.map +1 -0
  697. package/dist/function/function.soap.types.js +2 -0
  698. package/dist/function/function.sql.d.ts +20 -0
  699. package/dist/function/function.sql.d.ts.map +1 -0
  700. package/dist/function/function.sql.js +53 -0
  701. package/dist/function/function.sql.parameter-builder.d.ts +24 -0
  702. package/dist/function/function.sql.parameter-builder.d.ts.map +1 -0
  703. package/dist/function/function.sql.parameter-builder.js +44 -0
  704. package/dist/function/function.sql.types.d.ts +20 -0
  705. package/dist/function/function.sql.types.d.ts.map +1 -0
  706. package/dist/function/function.sql.types.js +2 -0
  707. package/dist/function/function.types.d.ts +7 -0
  708. package/dist/function/function.types.d.ts.map +1 -0
  709. package/dist/function/function.types.js +2 -0
  710. package/dist/function/index.d.ts +17 -0
  711. package/dist/function/index.d.ts.map +1 -0
  712. package/dist/function/index.js +13 -0
  713. package/dist/icon/index.d.ts +3 -0
  714. package/dist/icon/index.d.ts.map +1 -0
  715. package/dist/icon/index.js +3 -0
  716. package/dist/icon/sdk.icon.d.ts +10 -0
  717. package/dist/icon/sdk.icon.d.ts.map +1 -0
  718. package/dist/icon/sdk.icon.data.d.ts +7 -0
  719. package/dist/icon/sdk.icon.data.d.ts.map +1 -0
  720. package/dist/icon/sdk.icon.data.js +19283 -0
  721. package/dist/icon/sdk.icon.js +27 -0
  722. package/dist/icon/sdk.icon.loader.d.ts +7 -0
  723. package/dist/icon/sdk.icon.loader.d.ts.map +1 -0
  724. package/dist/icon/sdk.icon.loader.js +15 -0
  725. package/dist/icon/sdk.icon.name.d.ts +7 -0
  726. package/dist/icon/sdk.icon.name.d.ts.map +1 -0
  727. package/dist/icon/sdk.icon.name.js +19305 -0
  728. package/dist/index.d.ts +14 -0
  729. package/dist/index.d.ts.map +1 -0
  730. package/dist/index.js +14 -0
  731. package/dist/jsonata/ast.d.ts +15 -0
  732. package/dist/jsonata/ast.d.ts.map +1 -0
  733. package/dist/jsonata/ast.js +118 -0
  734. package/dist/jsonata/base.d.ts +7 -0
  735. package/dist/jsonata/base.d.ts.map +1 -0
  736. package/dist/jsonata/base.js +43 -0
  737. package/dist/jsonata/builder.d.ts +28 -0
  738. package/dist/jsonata/builder.d.ts.map +1 -0
  739. package/dist/jsonata/builder.js +140 -0
  740. package/dist/jsonata/context.d.ts +10 -0
  741. package/dist/jsonata/context.d.ts.map +1 -0
  742. package/dist/jsonata/context.js +349 -0
  743. package/dist/jsonata/expression.d.ts +35 -0
  744. package/dist/jsonata/expression.d.ts.map +1 -0
  745. package/dist/jsonata/expression.js +498 -0
  746. package/dist/jsonata/index.d.ts +6 -0
  747. package/dist/jsonata/index.d.ts.map +1 -0
  748. package/dist/jsonata/index.js +6 -0
  749. package/dist/logger/index.d.ts +2 -0
  750. package/dist/logger/index.d.ts.map +1 -0
  751. package/dist/logger/index.js +2 -0
  752. package/dist/logger/logger.d.ts +14 -0
  753. package/dist/logger/logger.d.ts.map +1 -0
  754. package/dist/logger/logger.js +40 -0
  755. package/dist/runtime/auth.d.ts +19 -0
  756. package/dist/runtime/auth.d.ts.map +1 -0
  757. package/dist/runtime/auth.js +11 -0
  758. package/dist/runtime/index.d.ts +5 -0
  759. package/dist/runtime/index.d.ts.map +1 -0
  760. package/dist/runtime/index.js +3 -0
  761. package/dist/runtime/system.d.ts +27 -0
  762. package/dist/runtime/system.d.ts.map +1 -0
  763. package/dist/runtime/system.js +26 -0
  764. package/dist/screen/common/index.d.ts +9 -0
  765. package/dist/screen/common/index.d.ts.map +1 -0
  766. package/dist/screen/common/index.js +7 -0
  767. package/dist/screen/common/screen.badge.d.ts +8 -0
  768. package/dist/screen/common/screen.badge.d.ts.map +1 -0
  769. package/dist/screen/common/screen.badge.js +2 -0
  770. package/dist/screen/common/screen.bottom-sheet.d.ts +62 -0
  771. package/dist/screen/common/screen.bottom-sheet.d.ts.map +1 -0
  772. package/dist/screen/common/screen.bottom-sheet.js +31 -0
  773. package/dist/screen/common/screen.callback-actions.d.ts +7 -0
  774. package/dist/screen/common/screen.callback-actions.d.ts.map +1 -0
  775. package/dist/screen/common/screen.callback-actions.js +19 -0
  776. package/dist/screen/common/screen.input-definition.d.ts +108 -0
  777. package/dist/screen/common/screen.input-definition.d.ts.map +1 -0
  778. package/dist/screen/common/screen.input-definition.js +109 -0
  779. package/dist/screen/common/screen.placeholder.d.ts +20 -0
  780. package/dist/screen/common/screen.placeholder.d.ts.map +1 -0
  781. package/dist/screen/common/screen.placeholder.js +54 -0
  782. package/dist/screen/common/screen.preview.actions.d.ts +47 -0
  783. package/dist/screen/common/screen.preview.actions.d.ts.map +1 -0
  784. package/dist/screen/common/screen.preview.actions.js +122 -0
  785. package/dist/screen/common/screen.preview.d.ts +40 -0
  786. package/dist/screen/common/screen.preview.d.ts.map +1 -0
  787. package/dist/screen/common/screen.preview.js +87 -0
  788. package/dist/screen/common/screen.state.d.ts +7 -0
  789. package/dist/screen/common/screen.state.d.ts.map +1 -0
  790. package/dist/screen/common/screen.state.js +2 -0
  791. package/dist/screen/common/screen.summary.d.ts +14 -0
  792. package/dist/screen/common/screen.summary.d.ts.map +1 -0
  793. package/dist/screen/common/screen.summary.js +22 -0
  794. package/dist/screen/index.d.ts +16 -0
  795. package/dist/screen/index.d.ts.map +1 -0
  796. package/dist/screen/index.js +16 -0
  797. package/dist/screen/screen.abstract.d.ts +105 -0
  798. package/dist/screen/screen.abstract.d.ts.map +1 -0
  799. package/dist/screen/screen.abstract.js +175 -0
  800. package/dist/screen/screen.calendar.d.ts +22 -0
  801. package/dist/screen/screen.calendar.d.ts.map +1 -0
  802. package/dist/screen/screen.calendar.js +32 -0
  803. package/dist/screen/screen.default.d.ts +65 -0
  804. package/dist/screen/screen.default.d.ts.map +1 -0
  805. package/dist/screen/screen.default.js +68 -0
  806. package/dist/screen/screen.document.d.ts +58 -0
  807. package/dist/screen/screen.document.d.ts.map +1 -0
  808. package/dist/screen/screen.document.js +72 -0
  809. package/dist/screen/screen.full-screen.d.ts +23 -0
  810. package/dist/screen/screen.full-screen.d.ts.map +1 -0
  811. package/dist/screen/screen.full-screen.js +18 -0
  812. package/dist/screen/screen.gallery.d.ts +15 -0
  813. package/dist/screen/screen.gallery.d.ts.map +1 -0
  814. package/dist/screen/screen.gallery.js +14 -0
  815. package/dist/screen/screen.grid.base.d.ts +18 -0
  816. package/dist/screen/screen.grid.base.d.ts.map +1 -0
  817. package/dist/screen/screen.grid.base.js +17 -0
  818. package/dist/screen/screen.grid.dynamic.d.ts +18 -0
  819. package/dist/screen/screen.grid.dynamic.d.ts.map +1 -0
  820. package/dist/screen/screen.grid.dynamic.js +26 -0
  821. package/dist/screen/screen.grid.static.d.ts +14 -0
  822. package/dist/screen/screen.grid.static.d.ts.map +1 -0
  823. package/dist/screen/screen.grid.static.js +12 -0
  824. package/dist/screen/screen.guards.d.ts +41 -0
  825. package/dist/screen/screen.guards.d.ts.map +1 -0
  826. package/dist/screen/screen.guards.js +35 -0
  827. package/dist/screen/screen.list.d.ts +79 -0
  828. package/dist/screen/screen.list.d.ts.map +1 -0
  829. package/dist/screen/screen.list.js +123 -0
  830. package/dist/screen/screen.sdk.d.ts +13 -0
  831. package/dist/screen/screen.sdk.d.ts.map +1 -0
  832. package/dist/screen/screen.sdk.js +9 -0
  833. package/dist/screen/screen.tabs.d.ts +27 -0
  834. package/dist/screen/screen.tabs.d.ts.map +1 -0
  835. package/dist/screen/screen.tabs.instance.d.ts +34 -0
  836. package/dist/screen/screen.tabs.instance.d.ts.map +1 -0
  837. package/dist/screen/screen.tabs.instance.js +79 -0
  838. package/dist/screen/screen.tabs.js +35 -0
  839. package/dist/screen/screen.wizard.d.ts +12 -0
  840. package/dist/screen/screen.wizard.d.ts.map +1 -0
  841. package/dist/screen/screen.wizard.instance.d.ts +20 -0
  842. package/dist/screen/screen.wizard.instance.d.ts.map +1 -0
  843. package/dist/screen/screen.wizard.instance.js +40 -0
  844. package/dist/screen/screen.wizard.js +23 -0
  845. package/dist/utils/check.d.ts +3 -0
  846. package/dist/utils/check.d.ts.map +1 -0
  847. package/dist/utils/check.js +7 -0
  848. package/dist/utils/convert.d.ts +2 -0
  849. package/dist/utils/convert.d.ts.map +1 -0
  850. package/dist/utils/convert.js +8 -0
  851. package/dist/utils/dedent.d.ts +2 -0
  852. package/dist/utils/dedent.d.ts.map +1 -0
  853. package/dist/utils/dedent.js +28 -0
  854. package/dist/utils/index.d.ts +6 -0
  855. package/dist/utils/index.d.ts.map +1 -0
  856. package/dist/utils/index.js +5 -0
  857. package/dist/utils/types.d.ts +2 -0
  858. package/dist/utils/types.d.ts.map +1 -0
  859. package/dist/utils/types.js +2 -0
  860. package/dist/utils/utils.d.ts +9 -0
  861. package/dist/utils/utils.d.ts.map +1 -0
  862. package/dist/utils/utils.js +49 -0
  863. package/dist/widget/index.d.ts +12 -0
  864. package/dist/widget/index.d.ts.map +1 -0
  865. package/dist/widget/index.js +12 -0
  866. package/dist/widget/jw.abstract.d.ts +27 -0
  867. package/dist/widget/jw.abstract.d.ts.map +1 -0
  868. package/dist/widget/jw.abstract.js +36 -0
  869. package/dist/widget/jw.actions.d.ts +17 -0
  870. package/dist/widget/jw.actions.d.ts.map +1 -0
  871. package/dist/widget/jw.actions.js +30 -0
  872. package/dist/widget/jw.avatar.d.ts +19 -0
  873. package/dist/widget/jw.avatar.d.ts.map +1 -0
  874. package/dist/widget/jw.avatar.js +23 -0
  875. package/dist/widget/jw.chart.d.ts +18 -0
  876. package/dist/widget/jw.chart.d.ts.map +1 -0
  877. package/dist/widget/jw.chart.js +23 -0
  878. package/dist/widget/jw.group.d.ts +28 -0
  879. package/dist/widget/jw.group.d.ts.map +1 -0
  880. package/dist/widget/jw.group.js +35 -0
  881. package/dist/widget/jw.image.d.ts +27 -0
  882. package/dist/widget/jw.image.d.ts.map +1 -0
  883. package/dist/widget/jw.image.js +54 -0
  884. package/dist/widget/jw.list.d.ts +44 -0
  885. package/dist/widget/jw.list.d.ts.map +1 -0
  886. package/dist/widget/jw.list.js +44 -0
  887. package/dist/widget/jw.location.d.ts +41 -0
  888. package/dist/widget/jw.location.d.ts.map +1 -0
  889. package/dist/widget/jw.location.js +54 -0
  890. package/dist/widget/jw.sdk.d.ts +2 -0
  891. package/dist/widget/jw.sdk.d.ts.map +1 -0
  892. package/dist/widget/jw.sdk.js +2 -0
  893. package/dist/widget/jw.status.condition.d.ts +20 -0
  894. package/dist/widget/jw.status.condition.d.ts.map +1 -0
  895. package/dist/widget/jw.status.condition.js +27 -0
  896. package/dist/widget/jw.status.d.ts +8 -0
  897. package/dist/widget/jw.status.d.ts.map +1 -0
  898. package/dist/widget/jw.status.js +11 -0
  899. package/dist/widget/jw.value.d.ts +24 -0
  900. package/dist/widget/jw.value.d.ts.map +1 -0
  901. package/dist/widget/jw.value.js +51 -0
  902. package/package.json +94 -0
@@ -0,0 +1,848 @@
1
+ import { z } from 'zod/v4';
2
+ import { convertOrExpression } from '../jsonata/base.js';
3
+ import { ExpressionSchema, NonExpressionSchema, NumberOrExpressionSchema, PrimitiveOrExpressionSchema, PrimitiveSchema, StringOrExpressionSchema, toExpression, } from './sdk.expression.js';
4
+ export const OrganizationIdSchema = z
5
+ .uuid()
6
+ .describe('Organization UUID (contains users, solutions, data)');
7
+ export function isOrganizationId(value) {
8
+ return OrganizationIdSchema.safeParse(value).success;
9
+ }
10
+ export function toOrganizationId(value) {
11
+ return OrganizationIdSchema.parse(value);
12
+ }
13
+ export const SolutionIdSchema = z.uuid().describe('Solution UUID (a native mobile app)');
14
+ export function isSolutionId(value) {
15
+ return SolutionIdSchema.safeParse(value).success;
16
+ }
17
+ export function toSolutionId(value) {
18
+ return SolutionIdSchema.parse(value);
19
+ }
20
+ export const CommonNameMixedRegex = /^[a-zA-Z][a-zA-Z0-9_-]{0,48}[a-zA-Z0-9]$/;
21
+ export const CommonNameMixedSchema = z
22
+ .string()
23
+ .regex(CommonNameMixedRegex, 'Mixedcase 2-50, prefer kebab-case, starts alpha, contains alphanum and `-`, ends alphanum.');
24
+ export function toCommonNameMixed(value) {
25
+ return CommonNameMixedSchema.parse(value);
26
+ }
27
+ export const CategorySchema = z
28
+ .enum([
29
+ 'unknown',
30
+ 'analytics',
31
+ 'business',
32
+ 'communications',
33
+ 'consulting',
34
+ 'field-services',
35
+ 'finances',
36
+ 'health',
37
+ 'human-resources',
38
+ 'logistics',
39
+ 'management',
40
+ 'miscellaneous',
41
+ 'operations',
42
+ 'personal',
43
+ 'sales',
44
+ ])
45
+ .describe('Solution category');
46
+ const ApplicationGroupIdSchema = CommonNameMixedSchema.describe('Application group Id');
47
+ export const InstanceIdSchema = z
48
+ .string()
49
+ .min(1, 'Required')
50
+ .regex(CommonNameMixedRegex, 'Starts with alpha, 0-48 alphanum/`_`/`-`, ends alphanum.')
51
+ .describe('Instance Id');
52
+ export function isInstanceId(value) {
53
+ return InstanceIdSchema.safeParse(value).success;
54
+ }
55
+ export function toInstanceId(value) {
56
+ return InstanceIdSchema.parse(value);
57
+ }
58
+ export const KegInstanceIdSchema = z
59
+ .union([InstanceIdSchema, ExpressionSchema])
60
+ .describe('Instance Identifier');
61
+ export function isInstanceIdOrExpression(value, options) {
62
+ if (!KegInstanceIdSchema.safeParse(value).success)
63
+ return false;
64
+ if (!options || options.yamlConversion === false)
65
+ return true;
66
+ try {
67
+ toInstanceIdOrExpression(value, options);
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ export function toInstanceIdOrExpression(value, options) {
75
+ return convertOrExpression(value, KegInstanceIdSchema, 'KegInstanceId', options);
76
+ }
77
+ export const FormIdSchema = NonExpressionSchema.describe('Form Identifier');
78
+ export function isFormId(value) {
79
+ return FormIdSchema.safeParse(value).success;
80
+ }
81
+ export function toFormId(value) {
82
+ return FormIdSchema.parse(value);
83
+ }
84
+ export const SYSTEM_TABLES = [
85
+ '_commandQueue',
86
+ '_syncScope',
87
+ ];
88
+ export function isSqliteSystemTable(name) {
89
+ return SYSTEM_TABLES.includes(name);
90
+ }
91
+ export const ParameterNameSchema = z.string().describe('Parameter name');
92
+ export function isParameterName(value) {
93
+ return ParameterNameSchema.safeParse(value).success;
94
+ }
95
+ export function toParameterName(value) {
96
+ return ParameterNameSchema.parse(value);
97
+ }
98
+ export const ParameterNameDollarSchema = z
99
+ .string()
100
+ .regex(/^[$a-zA-Z][a-zA-Z0-9_-]{0,48}[a-zA-Z0-9]$/, 'Starts with $ or alpha, 0-48 alphanum/`_`/`-`, ends alphanum.');
101
+ export function isParameterNameDollar(value) {
102
+ return ParameterNameDollarSchema.safeParse(value).success;
103
+ }
104
+ export function toParameterNameDollar(value) {
105
+ if (value.startsWith('$')) {
106
+ return ParameterNameDollarSchema.parse(value);
107
+ }
108
+ if (value.length < 2) {
109
+ throw new Error('Starts with $ or alpha, 0-48 alphanum/`_`/`-`, ends alphanum.');
110
+ }
111
+ if (!/^[a-zA-Z]/.test(value)) {
112
+ throw new Error('Starts with $ or alpha, 0-48 alphanum/`_`/`-`, ends alphanum.');
113
+ }
114
+ if (!/[a-zA-Z0-9]$/.test(value)) {
115
+ throw new Error('Starts with $ or alpha, 0-48 alphanum/`_`/`-`, ends alphanum.');
116
+ }
117
+ const withDollar = `$${value}`;
118
+ return ParameterNameDollarSchema.parse(withDollar);
119
+ }
120
+ const EntityNameBaseSchema = z.string().min(1, 'Required').regex(CommonNameMixedRegex);
121
+ const EntityNameFqnSchema = z
122
+ .string()
123
+ .min(1, 'Required')
124
+ .regex(/^default\/[a-zA-Z][a-zA-Z0-9_-]{0,48}[a-zA-Z0-9]$/, 'Entity name must be in format default/table')
125
+ .describe('Entity name in format default/table');
126
+ export const EntityNameSchema = z.union([EntityNameBaseSchema, EntityNameFqnSchema]);
127
+ export const EntityNameBranded = EntityNameSchema;
128
+ export function isEntityName(value) {
129
+ return EntityNameBranded.safeParse(value).success;
130
+ }
131
+ export function toEntityName(value, requireDefault) {
132
+ if (requireDefault || value.startsWith('default/')) {
133
+ return EntityNameFqnSchema.parse(value);
134
+ }
135
+ else if (isSqliteSystemTable(value)) {
136
+ return value;
137
+ }
138
+ else {
139
+ return EntityNameBaseSchema.parse(value);
140
+ }
141
+ }
142
+ export const ActionIdSchema = z.string().regex(CommonNameMixedRegex);
143
+ export function toActionId(value) {
144
+ return ActionIdSchema.parse(value);
145
+ }
146
+ export function isActionId(value) {
147
+ return ActionIdSchema.safeParse(value).success;
148
+ }
149
+ export const ScreenIdSchema = z.string().regex(CommonNameMixedRegex);
150
+ export function toScreenId(value) {
151
+ return ScreenIdSchema.parse(value);
152
+ }
153
+ export function toScreenIdOrExpression(value) {
154
+ return value.startsWith('=') ? toExpression(value) : toScreenId(value);
155
+ }
156
+ export function isScreenId(value) {
157
+ return ScreenIdSchema.safeParse(value).success;
158
+ }
159
+ export const SCREEN_TYPE = {
160
+ CALENDAR: 'jig.calendar',
161
+ DEFAULT: 'jig.default',
162
+ DOCUMENT: 'jig.document',
163
+ FULL_SCREEN: 'jig.full-screen',
164
+ GALLERY: 'jig.gallery',
165
+ GRID: 'jig.grid',
166
+ LIST: 'jig.list',
167
+ TABLE: 'jig.table',
168
+ TABS: 'jig.tabs',
169
+ WIZARD: 'jig.wizard',
170
+ };
171
+ export const SCREEN_TYPES = Object.values(SCREEN_TYPE);
172
+ export function isScreenType(value) {
173
+ return SCREEN_TYPES.includes(value);
174
+ }
175
+ export const ParameterValueSchema = z.union([
176
+ PrimitiveSchema,
177
+ z.array(PrimitiveSchema),
178
+ z.record(z.string(), PrimitiveSchema),
179
+ ]);
180
+ export const WIDGET_TYPE = {
181
+ ACTIONS: 'widget.actions',
182
+ AVATAR: 'widget.avatar',
183
+ CHART: 'widget.chart',
184
+ GROUP: 'widget.group',
185
+ IMAGE: 'widget.image',
186
+ LIST: 'widget.list',
187
+ LOCATION: 'widget.location',
188
+ STATUS: 'widget.status',
189
+ VALUE: 'widget.value',
190
+ };
191
+ const WIDGET_TYPES = Object.values(WIDGET_TYPE);
192
+ export const WidgetTypeEnum = z.enum(WIDGET_TYPES, {
193
+ message: `Must be one of: ${WIDGET_TYPES.join(', ')}`,
194
+ });
195
+ export function isWidgetType(value) {
196
+ return WidgetTypeEnum.safeParse(value).success;
197
+ }
198
+ export const ParameterDefinitionSchema = z.object({
199
+ type: NonExpressionSchema.describe('Type from datasource'),
200
+ default: ParameterValueSchema.optional().describe('Default value'),
201
+ required: z.boolean().optional().describe('Required flag'),
202
+ });
203
+ export const ParameterDefinitionsSchema = z.record(ParameterNameDollarSchema, ParameterDefinitionSchema);
204
+ const ConvertFromToEnum = z
205
+ .enum(['buffer', 'local-uri', 'base64', 'data-uri'])
206
+ .describe('Specifies the type of data to convert from or to: buffer, local-uri, base64, data-uri.');
207
+ export function isConvertFromTo(value) {
208
+ return ConvertFromToEnum.safeParse(value).success;
209
+ }
210
+ export function toConvertFromTo(value) {
211
+ return ConvertFromToEnum.parse(value);
212
+ }
213
+ const ConversionDefinitionBase = z.object({
214
+ property: CommonNameMixedSchema.describe('Name of property to process conversion on'),
215
+ from: ConvertFromToEnum,
216
+ convertHeicToJpg: z.boolean().optional().describe('Convert HEIC to JPG'),
217
+ });
218
+ export const ConversionDefinitionSchema = z.discriminatedUnion('to', [
219
+ ConversionDefinitionBase.extend({
220
+ to: z.enum(['buffer', 'base64', 'data-uri']),
221
+ }),
222
+ ConversionDefinitionBase.extend({
223
+ to: z.literal('local-uri'),
224
+ localFilename: NonExpressionSchema.optional().describe('Local filename (optional)'),
225
+ }),
226
+ ]);
227
+ export const TableNameSchema = CommonNameMixedSchema
228
+ .describe('Table Name.');
229
+ export function isDatabaseTableName(value) {
230
+ return TableNameSchema.safeParse(value).success;
231
+ }
232
+ export function toDatabaseTableName(value) {
233
+ if (value.startsWith('default/')) {
234
+ value = value.slice(8);
235
+ }
236
+ return TableNameSchema.parse(value);
237
+ }
238
+ export const ComponentIdSchema = CommonNameMixedSchema.min(1, 'Required');
239
+ export function isComponentId(value) {
240
+ return ComponentIdSchema.safeParse(value).success;
241
+ }
242
+ export function toComponentId(value) {
243
+ return ComponentIdSchema.parse(value);
244
+ }
245
+ export const ACTION_TYPE = {
246
+ ACTION_LIST: 'action.action-list',
247
+ CLEAR_QUEUE: 'action.clear-queue',
248
+ CONFIRM: 'action.confirm',
249
+ DELETE_QUEUE_COMMAND: 'action.delete-queue-command',
250
+ DELETE_SYNC_SCOPE: 'action.delete-sync-scope',
251
+ DELETE_SYNC_STATUS: 'action.delete-sync-status',
252
+ EXECUTE_ACTION: 'action.execute-action',
253
+ EXECUTE_ENTITIES: 'action.execute-entities',
254
+ EXECUTE_ENTITY: 'action.execute-entity',
255
+ EXECUTE_SQL: 'action.execute-sql',
256
+ EVALUATE: 'action.evaluate',
257
+ FIND_REPLACE: 'action.find-replace',
258
+ GENERATE_FILE: 'action.generate-file',
259
+ GENERATE_PDF: 'action.generate-pdf',
260
+ GO_BACK: 'action.go-back',
261
+ GO_TO: 'action.go-to',
262
+ INFO_MODAL: 'action.info-modal',
263
+ OPEN_APP_SETTINGS: 'action.open-app-settings',
264
+ OPEN_MAP: 'action.open-map',
265
+ OPEN_MEDIA_PICKER: 'action.open-media-picker',
266
+ OPEN_SCANNER: 'action.open-scanner',
267
+ OPEN_URL: 'action.open-url',
268
+ PRINT: 'action.print',
269
+ RESET_COMPONENT_STATE: 'action.reset-component-state',
270
+ RESET_JIG_STATE: 'action.reset-jig-state',
271
+ RESET_SOLUTION_STATE: 'action.reset-solution-state',
272
+ RESET_STATE: 'action.reset-state',
273
+ RETRY_QUEUE_COMMAND: 'action.retry-queue-command',
274
+ SET_ACTIVE_TAB: 'action.set-active-tab',
275
+ SET_JIG_STATE: 'action.set-jig-state',
276
+ SET_SOLUTION_STATE: 'action.set-solution-state',
277
+ SET_STATE: 'action.set-state',
278
+ SHARE: 'action.share',
279
+ SHOW_ALERT: 'action.show-alert',
280
+ START_LOCATION_SHARING: 'action.start-location-sharing',
281
+ START_SYNC_SCOPE: 'action.start-sync-scope',
282
+ STOP_LOCATION_SHARING: 'action.stop-location-sharing',
283
+ SUBMIT_FORM: 'action.submit-form',
284
+ SYNC_ENTITIES: 'action.sync-entities',
285
+ UPDATE_PROFILE: 'action.update-profile',
286
+ };
287
+ export const ActionTypeSchema = z.enum(ACTION_TYPE, {
288
+ error: `Must be one of: ${Object.values(ACTION_TYPE).join(', ')}`,
289
+ });
290
+ export const DatabaseIdSchema = z
291
+ .literal('default')
292
+ .describe('Name of database. Always named `default`.');
293
+ export function isDatabaseId(value) {
294
+ return DatabaseIdSchema.safeParse(value).success;
295
+ }
296
+ export function toDatabaseId(value) {
297
+ return DatabaseIdSchema.parse(value);
298
+ }
299
+ export const DefaultDatabaseId = toDatabaseId('default');
300
+ export const DatasourceIdSchema = CommonNameMixedSchema.min(1, 'Required');
301
+ export function isDatasourceId(value) {
302
+ return DatasourceIdSchema.safeParse(value).success;
303
+ }
304
+ export function toDatasourceId(value) {
305
+ return DatasourceIdSchema.parse(value);
306
+ }
307
+ export const DATASOURCE_TYPE = {
308
+ SQLITE: 'datasource.sqlite',
309
+ STATIC: 'datasource.static',
310
+ SYSTEM: 'datasource.system',
311
+ REFERENCE: 'datasource.reference',
312
+ };
313
+ const DATASOURCE_TYPES = Object.values(DATASOURCE_TYPE);
314
+ export const DatasourceTypeEnum = z.enum(DATASOURCE_TYPES, {
315
+ error: `Must be one of: ${DATASOURCE_TYPES.join(', ')}`,
316
+ });
317
+ export const FunctionIdSchema = CommonNameMixedSchema.min(1, 'Required');
318
+ export function isFunctionId(value) {
319
+ return FunctionIdSchema.safeParse(value).success;
320
+ }
321
+ export function toFunctionId(value) {
322
+ return FunctionIdSchema.parse(value);
323
+ }
324
+ export const DATA_PROVIDER = {
325
+ ONEDRIVE: 'DATA_PROVIDER_ONEDRIVE',
326
+ SALESFORCE: 'DATA_PROVIDER_SALESFORCE',
327
+ SQL: 'DATA_PROVIDER_SQL',
328
+ REST: 'DATA_PROVIDER_REST',
329
+ SOAP: 'DATA_PROVIDER_SOAP',
330
+ DYNAMIC: 'DATA_PROVIDER_DYNAMIC',
331
+ LOCAL: 'DATA_PROVIDER_LOCAL',
332
+ DYNAMIC_FILE: 'DATA_PROVIDER_DYNAMIC_FILE',
333
+ };
334
+ const DATA_PROVIDERS = Object.values(DATA_PROVIDER);
335
+ export const DataProviderEnum = z.enum(DATA_PROVIDERS, {
336
+ error: `Must be one of: ${DATA_PROVIDERS.join(', ')}`,
337
+ });
338
+ export function isDataProvider(value) {
339
+ return DataProviderEnum.safeParse(value).success;
340
+ }
341
+ export const CommonNameLower = z
342
+ .string()
343
+ .regex(/^[a-z][a-z0-9_-]{0,48}[a-z0-9]$/, 'Lowercase 2-50, prefer kebab-case, starts alpha, contains alphanum and `-`, ends alphanum.');
344
+ export const CommonName = z
345
+ .string()
346
+ .regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,48}[a-zA-Z0-9]$/, '2-50 chars, starts with letter, contains letters/numbers/underscore/hyphen.');
347
+ export const ExpressionsSchema = z.record(CommonNameLower, ExpressionSchema).default({});
348
+ export const InputExpressionsSchema = z
349
+ .record(CommonNameLower, z.union([PrimitiveSchema, ExpressionSchema, z.any()]))
350
+ .describe('Named Inputs with values or expressions');
351
+ export const ParameterExpressionsSchema = z
352
+ .record(ParameterNameDollarSchema, z.union([PrimitiveOrExpressionSchema, z.record(z.string(), z.unknown())]))
353
+ .describe('Named parameters with values, expressions, or objects');
354
+ const BasicColorSchema = z.enum([
355
+ 'color1',
356
+ 'color2',
357
+ 'color3',
358
+ 'color4',
359
+ 'color5',
360
+ 'color6',
361
+ 'color7',
362
+ 'color8',
363
+ 'color9',
364
+ 'color10',
365
+ 'color11',
366
+ 'color12',
367
+ 'color13',
368
+ 'color14',
369
+ ]);
370
+ const StatusColorSchema = z.enum(['positive', 'negative', 'warning']);
371
+ const ComponentColorSchema = z.union([BasicColorSchema, StatusColorSchema]);
372
+ export const ColorValueSchema = z.union([
373
+ z.literal('primary'),
374
+ BasicColorSchema,
375
+ StatusColorSchema,
376
+ ExpressionSchema,
377
+ ]);
378
+ export function toColorValue(value) {
379
+ return ColorValueSchema.parse(value);
380
+ }
381
+ export function toColorValueOrConditions(value) {
382
+ return ColorValueOrConditionsSchema.parse(value);
383
+ }
384
+ export const ColorConditionSchema = z.object({
385
+ when: z.union([z.string(), z.boolean()]),
386
+ color: ColorValueSchema,
387
+ });
388
+ export const ColorValueOrConditionsSchema = z
389
+ .union([ColorValueSchema, z.array(ColorConditionSchema)])
390
+ .describe('Color definition can be either a list of conditions or a single color value');
391
+ export const JigPreviewConfigurationSchema = z.object({
392
+ title: z.string().optional().describe('Preview title'),
393
+ subtitle: z.string().optional().describe('Preview subtitle'),
394
+ image: z.string().optional().describe('Preview image URL'),
395
+ });
396
+ export const PaletteColorSchema = z.enum([
397
+ 'element',
398
+ 'background',
399
+ 'onBackground',
400
+ 'screen',
401
+ 'card',
402
+ 'color10',
403
+ 'color11',
404
+ 'color12',
405
+ 'color13',
406
+ 'color14',
407
+ 'color1',
408
+ 'color2',
409
+ 'color3',
410
+ 'color4',
411
+ 'color5',
412
+ 'color6',
413
+ 'color7',
414
+ 'color8',
415
+ 'color9',
416
+ 'overlay',
417
+ 'onOverlay',
418
+ 'link',
419
+ 'navigation',
420
+ 'onNavigation',
421
+ 'negative',
422
+ 'onScreen',
423
+ 'onCard',
424
+ 'onColor10',
425
+ 'onColor11',
426
+ 'onColor12',
427
+ 'onColor13',
428
+ 'onColor14',
429
+ 'onColor1',
430
+ 'onColor2',
431
+ 'onColor3',
432
+ 'onColor4',
433
+ 'onColor5',
434
+ 'onColor6',
435
+ 'onColor7',
436
+ 'onColor8',
437
+ 'onColor9',
438
+ 'onElement',
439
+ 'onNegative',
440
+ 'onPositive',
441
+ 'onPrimary',
442
+ 'onSecondary',
443
+ 'onSplash',
444
+ 'onToast',
445
+ 'onWarning',
446
+ 'positive',
447
+ 'primary',
448
+ 'secondary',
449
+ 'splash',
450
+ 'toast',
451
+ 'transparent',
452
+ 'warning',
453
+ ]);
454
+ export const TextNumberStyleSchema = z.enum(['decimal', 'currency', 'percent', 'unit']);
455
+ export const TextSignDisplaySchema = z.enum(['auto', 'always', 'never']);
456
+ export const TextUnitDisplaySchema = z.enum(['long', 'short', 'narrow']);
457
+ export const TextNumberingSystemSchema = z.enum([
458
+ 'arab',
459
+ 'arabext',
460
+ 'bali',
461
+ 'beng',
462
+ 'deva',
463
+ 'fullwide',
464
+ 'gujr',
465
+ 'guru',
466
+ 'hanidec',
467
+ 'khmr',
468
+ 'knda',
469
+ 'laoo',
470
+ 'latn',
471
+ 'limb',
472
+ 'mlym',
473
+ 'mong',
474
+ 'mymr',
475
+ 'orya',
476
+ 'tamldec',
477
+ 'telu',
478
+ 'thai',
479
+ 'tibt',
480
+ ]);
481
+ export const TextNotationSchema = z.enum(['standard', 'scientific', 'engineering', 'compact']);
482
+ export const TextCompactDisplaySchema = z.enum(['short', 'long']);
483
+ export const TextCurrencyDisplaySchema = z.enum(['symbol', 'code', 'name', 'narrowSymbol']);
484
+ export const TextCurrencySignSchema = z.enum(['standard', 'accounting']);
485
+ export const TextDateFormatSchema = z.union([z.string(), z.enum(['default', 'fromNow', 'toNow'])]);
486
+ export const CurrencyCodesSchema = z.enum([
487
+ 'AED', // 'United Arab Emirates Dirham'
488
+ 'AFN', // 'Afghan Afghani'
489
+ 'ALL', // 'Albanian Lek'
490
+ 'AMD', // 'Armenian Dram'
491
+ 'ANG', // 'Netherlands Antillean Guilder'
492
+ 'AOA', // 'Angolan Kwanza'
493
+ 'ARS', // 'Argentine Peso'
494
+ 'AUD', // 'Australian Dollar'
495
+ 'AWG', // 'Aruban Florin'
496
+ 'AZN', // 'Azerbaijani Manat'
497
+ 'BAM', // 'Bosnia-Herzegovina Convertible Mark'
498
+ 'BBD', // 'Barbadian Dollar'
499
+ 'BDT', // 'Bangladeshi Taka'
500
+ 'BGN', // 'Bulgarian Lev'
501
+ 'BHD', // 'Bahraini Dinar'
502
+ 'BIF', // 'Burundian Franc'
503
+ 'BMD', // 'Bermudian Dollar'
504
+ 'BND', // 'Brunei Dollar'
505
+ 'BOB', // 'Bolivian Boliviano'
506
+ 'BRL', // 'Brazilian Real'
507
+ 'BSD', // 'Bahamian Dollar'
508
+ 'BTN', // 'Bhutanese Ngultrum'
509
+ 'BWP', // 'Botswanan Pula'
510
+ 'BYN', // 'Belarusian Ruble'
511
+ 'BZD', // 'Belize Dollar'
512
+ 'CAD', // 'Canadian Dollar'
513
+ 'CDF', // 'Congolese Franc'
514
+ 'CHF', // 'Swiss Franc'
515
+ 'CLP', // 'Chilean Peso'
516
+ 'CNY', // 'Chinese Yuan'
517
+ 'COP', // 'Colombian Peso'
518
+ 'CRC', // 'Costa Rican Colón'
519
+ 'CUP', // 'Cuban Peso'
520
+ 'CVE', // 'Cape Verdean Escudo'
521
+ 'CZK', // 'Czech Koruna'
522
+ 'DJF', // 'Djiboutian Franc'
523
+ 'DKK', // 'Danish Krone'
524
+ 'DOP', // 'Dominican Peso'
525
+ 'DZD', // 'Algerian Dinar'
526
+ 'EGP', // 'Egyptian Pound'
527
+ 'ERN', // 'Eritrean Nakfa'
528
+ 'ETB', // 'Ethiopian Birr'
529
+ 'EUR', // 'Euro'
530
+ 'FJD', // 'Fijian Dollar'
531
+ 'FKP', // 'Falkland Islands Pound'
532
+ 'FOK', // 'Faroese Króna'
533
+ 'GBP', // 'British Pound Sterling'
534
+ 'GEL', // 'Georgian Lari'
535
+ 'GGP', // 'Guernsey Pound'
536
+ 'GHS', // 'Ghanaian Cedi'
537
+ 'GIP', // 'Gibraltar Pound'
538
+ 'GMD', // 'Gambian Dalasi'
539
+ 'GNF', // 'Guinean Franc'
540
+ 'GTQ', // 'Guatemalan Quetzal'
541
+ 'GYD', // 'Guyanaese Dollar'
542
+ 'HKD', // 'Hong Kong Dollar'
543
+ 'HNL', // 'Honduran Lempira'
544
+ 'HRK', // 'Croatian Kuna'
545
+ 'HTG', // 'Haitian Gourde'
546
+ 'HUF', // 'Hungarian Forint'
547
+ 'IDR', // 'Indonesian Rupiah'
548
+ 'ILS', // 'Israeli New Shekel'
549
+ 'IMP', // 'Isle of Man Pound'
550
+ 'INR', // 'Indian Rupee'
551
+ 'IQD', // 'Iraqi Dinar'
552
+ 'IRR', // 'Iranian Rial'
553
+ 'ISK', // 'Icelandic Króna'
554
+ 'JEP', // 'Jersey Pound'
555
+ 'JMD', // 'Jamaican Dollar'
556
+ 'JOD', // 'Jordanian Dinar'
557
+ 'JPY', // 'Japanese Yen'
558
+ 'KES', // 'Kenyan Shilling'
559
+ 'KGS', // 'Kyrgystani Som'
560
+ 'KHR', // 'Cambodian Riel'
561
+ 'KID', // 'Kiribati Dollar'
562
+ 'KMF', // 'Comorian Franc'
563
+ 'KRW', // 'South Korean Won'
564
+ 'KWD', // 'Kuwaiti Dinar'
565
+ 'KYD', // 'Cayman Islands Dollar'
566
+ 'KZT', // 'Kazakhstani Tenge'
567
+ 'LAK', // 'Laotian Kip'
568
+ 'LBP', // 'Lebanese Pound'
569
+ 'LKR', // 'Sri Lankan Rupee'
570
+ 'LRD', // 'Liberian Dollar'
571
+ 'LSL', // 'Lesotho Loti'
572
+ 'LYD', // 'Libyan Dinar'
573
+ 'MAD', // 'Moroccan Dirham'
574
+ 'MDL', // 'Moldovan Leu'
575
+ 'MGA', // 'Malagasy Ariary'
576
+ 'MKD', // 'Macedonian Denar'
577
+ 'MMK', // 'Myanma Kyat'
578
+ 'MNT', // 'Mongolian Tugrik'
579
+ 'MOP', // 'Macanese Pataca'
580
+ 'MRU', // 'Mauritanian Ouguiya'
581
+ 'MUR', // 'Mauritian Rupee'
582
+ 'MVR', // 'Maldivian Rufiyaa'
583
+ 'MWK', // 'Malawian Kwacha'
584
+ 'MXN', // 'Mexican Peso'
585
+ 'MYR', // 'Malaysian Ringgit'
586
+ 'MZN', // 'Mozambican Metical'
587
+ 'NAD', // 'Namibian Dollar'
588
+ 'NGN', // 'Nigerian Naira'
589
+ 'NIO', // 'Nicaraguan Córdoba'
590
+ 'NOK', // 'Norwegian Krone'
591
+ 'NPR', // 'Nepalese Rupee'
592
+ 'NZD', // 'New Zealand Dollar'
593
+ 'OMR', // 'Omani Rial'
594
+ 'PAB', // 'Panamanian Balboa'
595
+ 'PEN', // 'Peruvian Sol'
596
+ 'PGK', // 'Papua New Guinean Kina'
597
+ 'PHP', // 'Philippine Peso'
598
+ 'PKR', // 'Pakistani Rupee'
599
+ 'PLN', // 'Polish Zloty'
600
+ 'PYG', // 'Paraguayan Guarani'
601
+ 'QAR', // 'Qatari Rial'
602
+ 'RON', // 'Romanian Leu'
603
+ 'RSD', // 'Serbian Dinar'
604
+ 'RUB', // 'Russian Ruble'
605
+ 'RWF', // 'Rwandan Franc'
606
+ 'SAR', // 'Saudi Riyal'
607
+ 'SBD', // 'Solomon Islands Dollar'
608
+ 'SCR', // 'Seychellois Rupee'
609
+ 'SDG', // 'Sudanese Pound'
610
+ 'SEK', // 'Swedish Krona'
611
+ 'SGD', // 'Singapore Dollar'
612
+ 'SHP', // 'Saint Helena Pound'
613
+ 'SLL', // 'Sierra Leonean Leone'
614
+ 'SOS', // 'Somali Shilling'
615
+ 'SRD', // 'Surinamese Dollar'
616
+ 'SSP', // 'South Sudanese Pound'
617
+ 'STN', // 'São Tomé & Príncipe Dobra'
618
+ 'SYP', // 'Syrian Pound'
619
+ 'SZL', // 'Eswatini Lilangeni'
620
+ 'THB', // 'Thai Baht'
621
+ 'TJS', // 'Tajikistani Somoni'
622
+ 'TMT', // 'Turkmenistan Manat'
623
+ 'TND', // 'Tunisian Dinar'
624
+ 'TOP', // "Tongan Pa'anga"
625
+ 'TRY', // 'Turkish Lira'
626
+ 'TTD', // 'Trinidad & Tobago Dollar'
627
+ 'TVD', // 'Tuvaluan Dollar'
628
+ 'TWD', // 'New Taiwan Dollar'
629
+ 'TZS', // 'Tanzanian Shilling'
630
+ 'UAH', // 'Ukrainian Hryvnia'
631
+ 'UGX', // 'Ugandan Shilling'
632
+ 'USD', // 'United States Dollar'
633
+ 'UYU', // 'Uruguayan Peso'
634
+ 'UZS', // 'Uzbekistani Som'
635
+ 'VES', // 'Venezuelan Bolívar'
636
+ 'VND', // 'Vietnamese Dong'
637
+ 'VUV', // 'Vanuatu Vatu'
638
+ 'WST', // 'Samoan Tala'
639
+ 'XAF', // 'Central African CFA Franc'
640
+ 'XCD', // 'East Caribbean Dollar'
641
+ 'XDR', // 'Special Drawing Rights'
642
+ 'XOF', // 'West African CFA Franc'
643
+ 'XPF', // 'CFP Franc'
644
+ 'YER', // 'Yemeni Rial'
645
+ 'ZAR', // 'South African Rand'
646
+ 'ZMW',
647
+ ]);
648
+ export const NumberUnitSchema = z.enum([
649
+ 'acre',
650
+ 'bit',
651
+ 'byte',
652
+ 'celsius',
653
+ 'centimeter',
654
+ 'day',
655
+ 'degree',
656
+ 'fahrenheit',
657
+ 'fluid-ounce',
658
+ 'foot',
659
+ 'gallon',
660
+ 'gigabit',
661
+ 'gigabyte',
662
+ 'gram',
663
+ 'hectare',
664
+ 'hour',
665
+ 'inch',
666
+ 'kilobit',
667
+ 'kilobyte',
668
+ 'kilogram',
669
+ 'kilometer',
670
+ 'liter',
671
+ 'megabit',
672
+ 'megabyte',
673
+ 'meter',
674
+ 'mile',
675
+ 'mile-scandinavian',
676
+ 'milliliter',
677
+ 'millimeter',
678
+ 'millisecond',
679
+ 'minute',
680
+ 'month',
681
+ 'ounce',
682
+ 'percent',
683
+ 'petabyte',
684
+ 'pound',
685
+ 'second',
686
+ 'stone',
687
+ 'terabit',
688
+ 'terabyte',
689
+ 'week',
690
+ 'yard',
691
+ 'year',
692
+ ]);
693
+ export const NumberFormatExpressionsSchema = z.object({
694
+ numberStyle: z
695
+ .union([TextNumberStyleSchema, StringOrExpressionSchema])
696
+ .optional()
697
+ .describe('decimal, currency, percent or unit - identifying the type of quantity being measured'),
698
+ minimumIntegerDigits: NumberOrExpressionSchema.optional().describe('Minimum number of integer digits (1-21). Numbers padded with leading zeroes if necessary'),
699
+ minimumFractionDigits: NumberOrExpressionSchema.optional().describe('Minimum fraction digits. Numbers rounded or padded with trailing zeroes if necessary'),
700
+ maximumFractionDigits: NumberOrExpressionSchema.optional().describe('Maximum fraction digits. Numbers rounded or padded with trailing zeroes if necessary'),
701
+ minimumSignificantDigits: NumberOrExpressionSchema.optional().describe('Minimum significant digits to show'),
702
+ maximumSignificantDigits: NumberOrExpressionSchema.optional().describe('Maximum significant digits to show'),
703
+ signDisplay: z
704
+ .union([TextSignDisplaySchema, StringOrExpressionSchema])
705
+ .optional()
706
+ .describe('auto, always, never, or exceptZero - whether to show sign'),
707
+ unit: PrimitiveOrExpressionSchema.optional().describe('Unit for unit formatting (e.g. kilometer, mile-per-hour)'),
708
+ unitDisplay: z
709
+ .union([TextUnitDisplaySchema, StringOrExpressionSchema])
710
+ .optional()
711
+ .describe('long, short, or narrow - unit display style'),
712
+ numberingSystem: z
713
+ .union([TextNumberingSystemSchema, StringOrExpressionSchema])
714
+ .optional()
715
+ .describe('Numbering system for formatting'),
716
+ currency: z
717
+ .union([CurrencyCodesSchema, StringOrExpressionSchema])
718
+ .optional()
719
+ .describe('Currency code (e.g. USD, EUR) for currency formatting'),
720
+ notation: z
721
+ .union([TextNotationSchema, StringOrExpressionSchema])
722
+ .optional()
723
+ .describe('standard, scientific, engineering, or compact'),
724
+ compactDisplay: z
725
+ .union([TextCompactDisplaySchema, StringOrExpressionSchema])
726
+ .optional()
727
+ .describe('short or long - only used when notation is compact'),
728
+ currencyDisplay: z
729
+ .union([TextCurrencyDisplaySchema, StringOrExpressionSchema])
730
+ .optional()
731
+ .describe('symbol, code, name, or narrowSymbol - currency display style'),
732
+ currencySign: z
733
+ .union([TextCurrencySignSchema, StringOrExpressionSchema])
734
+ .optional()
735
+ .describe('standard or accounting - for negative currency rendering'),
736
+ });
737
+ export const TextFormatExpressionsSchema = NumberFormatExpressionsSchema.extend({
738
+ dateFormat: z
739
+ .union([TextDateFormatSchema, StringOrExpressionSchema])
740
+ .optional()
741
+ .describe('Date format pattern or preset'),
742
+ }).describe('Date & Number Format');
743
+ export const EmphasisDefinitionSchema = z
744
+ .union([
745
+ z.literal('extra-low'),
746
+ z.literal('low'),
747
+ z.literal('low-medium'),
748
+ z.literal('medium'),
749
+ z.literal('high'),
750
+ z.literal('color'),
751
+ ExpressionSchema,
752
+ ])
753
+ .describe('Emphasis definition');
754
+ const _TextWithFormatSchemaBase = z.object({
755
+ text: z.union([StringOrExpressionSchema, z.lazy(() => TextLocaleSchema)]),
756
+ format: TextFormatExpressionsSchema.optional(),
757
+ });
758
+ export const TextWithFormatSchema = _TextWithFormatSchemaBase;
759
+ export function isTextWithFormat(value) {
760
+ return TextWithFormatSchema.safeParse(value).success;
761
+ }
762
+ export const TextLocaleSchema = z.object({
763
+ id: PrimitiveOrExpressionSchema.describe('Locale Id'),
764
+ defaultMessage: PrimitiveOrExpressionSchema.optional().describe('Default message'),
765
+ values: z
766
+ .record(CommonName, z.union([PrimitiveOrExpressionSchema, TextWithFormatSchema, z.lazy(() => TextLocaleSchema)]))
767
+ .optional(),
768
+ });
769
+ export const TextLocaleValuesSchema = z.record(CommonName, z.union([PrimitiveOrExpressionSchema, TextWithFormatSchema, TextLocaleSchema]));
770
+ export function isTextLocale(value) {
771
+ return TextLocaleSchema.safeParse(value).success;
772
+ }
773
+ export const TextValueSchema = z.union([
774
+ PrimitiveOrExpressionSchema,
775
+ TextWithFormatSchema,
776
+ TextLocaleSchema,
777
+ ]);
778
+ export function isTextValue(value) {
779
+ return TextValueSchema.safeParse(value).success;
780
+ }
781
+ export function toTextValue(value) {
782
+ return TextValueSchema.parse(value);
783
+ }
784
+ export const TextStyleOptionSchema = z.object({
785
+ fontSize: z.enum(['regular', 'small', 'medium']).optional().describe('Font size'),
786
+ color: ColorValueOrConditionsSchema.optional().describe('Text color'),
787
+ isSubtle: z.union([z.boolean(), ExpressionSchema]).optional().describe('Is text subtle'),
788
+ isBold: z.union([z.boolean(), ExpressionSchema]).optional().describe('Is text bold'),
789
+ numberOfLines: NumberOrExpressionSchema.optional().describe('Number of lines to show before truncating with ellipsis'),
790
+ });
791
+ export const TextWithStyleSchema = _TextWithFormatSchemaBase.extend(TextStyleOptionSchema.shape);
792
+ export function isTextWithStyle(value) {
793
+ return TextWithStyleSchema.safeParse(value).success;
794
+ }
795
+ export const TextValueWithStyleSchema = z.union([
796
+ PrimitiveOrExpressionSchema,
797
+ TextWithStyleSchema,
798
+ TextLocaleSchema,
799
+ ]);
800
+ export function isTextValueWithStyle(value) {
801
+ return TextValueWithStyleSchema.safeParse(value).success;
802
+ }
803
+ export function toTextValueWithStyle(value) {
804
+ return TextValueWithStyleSchema.parse(value);
805
+ }
806
+ export const Base64Schema = z.base64();
807
+ export const Base64UrlSchema = z.base64url();
808
+ export const Base64OrUrlSchema = z.union([Base64Schema, Base64UrlSchema]);
809
+ export function toBase64OrUrl(value) {
810
+ return Base64OrUrlSchema.parse(value);
811
+ }
812
+ export const SelectableMediaTypeSchema = z.union([
813
+ z.literal('image'),
814
+ z.literal('video'),
815
+ z.literal('imageAndVideo'),
816
+ z.literal('pdf'),
817
+ z.literal('doc'),
818
+ z.literal('ppt'),
819
+ z.literal('xls'),
820
+ z.literal('csv'),
821
+ z.literal('plainText'),
822
+ z.literal('any'),
823
+ ]);
824
+ export const SetStateChangesSchema = z.record(z.string(), z.union([
825
+ ExpressionSchema,
826
+ z.string(),
827
+ z.number(),
828
+ z.boolean(),
829
+ z.null(),
830
+ z.record(z.string(), z.unknown()),
831
+ z.array(z.any()),
832
+ ]));
833
+ export function toSetStateChanges(value) {
834
+ return SetStateChangesSchema.parse(value);
835
+ }
836
+ export const ImageResizeModeSchema = z
837
+ .enum(['cover', 'contain', 'stretch', 'repeat', 'center'])
838
+ .describe('Image resize mode');
839
+ export const ImageShapeSchema = z
840
+ .enum(['landscape', 'portrait', 'square'])
841
+ .describe('Image shape for list item');
842
+ export const ImageSizeSchema = z
843
+ .enum(['small', 'regular', 'large'])
844
+ .describe('Image size for list item');
845
+ export const HorizontalAlignSchema = z.enum(['left', 'center', 'right']);
846
+ export const VerticalAlignSchema = z.enum(['top', 'center', 'bottom']);
847
+ export const DataRowId = z.string().regex(/^[!$*-:=@-_a-~]{1,64}$/);
848
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fic3RyYWN0L3pvZC50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTFCLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxvQkFBb0IsQ0FBQTtBQUNoRixPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFFeEIsMkJBQTJCLEVBQzNCLGVBQWUsRUFFZix3QkFBd0IsRUFDeEIsWUFBWSxHQUNiLE1BQU0scUJBQXFCLENBQUE7QUFFNUIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQztLQUNsQyxJQUFJLEVBQUU7S0FDTixRQUFRLENBQUMscURBQXFELENBQUMsQ0FBQTtBQU1sRSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYyxFQUEyQjtJQUN4RSxPQUFPLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUE7QUFBQSxDQUNyRDtBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjLEVBQWtCO0lBQy9ELE9BQU8sb0JBQW9CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQUEsQ0FDekM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLHFDQUFxQyxDQUFDLENBQUE7QUFNeEYsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFjLEVBQXVCO0lBQ2hFLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQTtBQUFBLENBQ2pEO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFjLEVBQWM7SUFDdkQsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7QUFBQSxDQUNyQztB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QzdCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUE7QUFRdkMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQVF4RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBUXRFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSAnem9kL3Y0J1xuXG5pbXBvcnQgeyBjb252ZXJ0T3JFeHByZXNzaW9uLCB0eXBlIEV4cHJlc3Npb25PcHRpb25zIH0gZnJvbSAnLi4vanNvbmF0YS9iYXNlLmpzJ1xuaW1wb3J0IHtcbiAgdHlwZSBFeHByZXNzaW9uLFxuICBFeHByZXNzaW9uU2NoZW1hLFxuICBOb25FeHByZXNzaW9uU2NoZW1hLFxuICBOdW1iZXJPckV4cHJlc3Npb25TY2hlbWEsXG4gIHR5cGUgUHJpbWl0aXZlT3JFeHByZXNzaW9uLFxuICBQcmltaXRpdmVPckV4cHJlc3Npb25TY2hlbWEsXG4gIFByaW1pdGl2ZVNjaGVtYSxcbiAgdHlwZSBTdHJpbmdPckV4cHJlc3Npb24sXG4gIFN0cmluZ09yRXhwcmVzc2lvblNjaGVtYSxcbiAgdG9FeHByZXNzaW9uLFxufSBmcm9tICcuL3Nkay5leHByZXNzaW9uLmpzJ1xuXG5leHBvcnQgY29uc3QgT3JnYW5pemF0aW9uSWRTY2hlbWEgPSB6XG4gIC51dWlkKClcbiAgLmRlc2NyaWJlKCdPcmdhbml6YXRpb24gVVVJRCAoY29udGFpbnMgdXNlcnMsIHNvbHV0aW9ucywgZGF0YSknKVxuZXhwb3J0IHR5cGUgT3JnYW5pemF0aW9uSWQgPSB6LmluZmVyPHR5cGVvZiBPcmdhbml6YXRpb25JZFNjaGVtYT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgT3JnYW5pemF0aW9uSWQgKFVVSUQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcmdhbml6YXRpb25JZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE9yZ2FuaXphdGlvbklkIHtcbiAgcmV0dXJuIE9yZ2FuaXphdGlvbklkU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvT3JnYW5pemF0aW9uSWQodmFsdWU6IHVua25vd24pOiBPcmdhbml6YXRpb25JZCB7XG4gIHJldHVybiBPcmdhbml6YXRpb25JZFNjaGVtYS5wYXJzZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGNvbnN0IFNvbHV0aW9uSWRTY2hlbWEgPSB6LnV1aWQoKS5kZXNjcmliZSgnU29sdXRpb24gVVVJRCAoYSBuYXRpdmUgbW9iaWxlIGFwcCknKVxuZXhwb3J0IHR5cGUgU29sdXRpb25JZCA9IHouaW5mZXI8dHlwZW9mIFNvbHV0aW9uSWRTY2hlbWE+XG5cbi8qKlxuICogQ2hlY2tzIGlmIHZhbHVlIGlzIHZhbGlkIFNvbHV0aW9uSWQgKFVVSUQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTb2x1dGlvbklkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU29sdXRpb25JZCB7XG4gIHJldHVybiBTb2x1dGlvbklkU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Tb2x1dGlvbklkKHZhbHVlOiB1bmtub3duKTogU29sdXRpb25JZCB7XG4gIHJldHVybiBTb2x1dGlvbklkU2NoZW1hLnBhcnNlKHZhbHVlKVxufVxuXG5leHBvcnQgY29uc3QgQ29tbW9uTmFtZU1peGVkUmVnZXggPSAvXlthLXpBLVpdW2EtekEtWjAtOV8tXXswLDQ4fVthLXpBLVowLTldJC9cblxuZXhwb3J0IGNvbnN0IENvbW1vbk5hbWVNaXhlZFNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC5yZWdleChcbiAgICBDb21tb25OYW1lTWl4ZWRSZWdleCxcbiAgICAnTWl4ZWRjYXNlIDItNTAsIHByZWZlciBrZWJhYi1jYXNlLCBzdGFydHMgYWxwaGEsIGNvbnRhaW5zIGFscGhhbnVtIGFuZCBgLWAsIGVuZHMgYWxwaGFudW0uJyxcbiAgKVxuLyoqXG4gKiBNaXhlZGNhc2UgMi01MCwgcHJlZmVyIGtlYmFiLWNhc2UsIHN0YXJ0cyBhbHBoYSwgY29udGFpbnMgYWxwaGFudW0gYW5kIGAtYCwgZW5kcyBhbHBoYW51bS5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9Db21tb25OYW1lTWl4ZWRcbiAqL1xuZXhwb3J0IHR5cGUgQ29tbW9uTmFtZU1peGVkID0gei5pbmZlcjx0eXBlb2YgQ29tbW9uTmFtZU1peGVkU2NoZW1hPlxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIHRvIENvbW1vbk5hbWVNaXhlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29tbW9uTmFtZU1peGVkKHZhbHVlOiBzdHJpbmcpOiBDb21tb25OYW1lTWl4ZWQge1xuICByZXR1cm4gQ29tbW9uTmFtZU1peGVkU2NoZW1hLnBhcnNlKHZhbHVlKVxufVxuXG5leHBvcnQgY29uc3QgQ2F0ZWdvcnlTY2hlbWEgPSB6XG4gIC5lbnVtKFtcbiAgICAndW5rbm93bicsXG4gICAgJ2FuYWx5dGljcycsXG4gICAgJ2J1c2luZXNzJyxcbiAgICAnY29tbXVuaWNhdGlvbnMnLFxuICAgICdjb25zdWx0aW5nJyxcbiAgICAnZmllbGQtc2VydmljZXMnLFxuICAgICdmaW5hbmNlcycsXG4gICAgJ2hlYWx0aCcsXG4gICAgJ2h1bWFuLXJlc291cmNlcycsXG4gICAgJ2xvZ2lzdGljcycsXG4gICAgJ21hbmFnZW1lbnQnLFxuICAgICdtaXNjZWxsYW5lb3VzJyxcbiAgICAnb3BlcmF0aW9ucycsXG4gICAgJ3BlcnNvbmFsJyxcbiAgICAnc2FsZXMnLFxuICBdKVxuICAuZGVzY3JpYmUoJ1NvbHV0aW9uIGNhdGVnb3J5Jylcbi8qKlxuICogQXBwbGljYXRpb24gY2F0ZWdvcnkgZW51bWVyYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENhdGVnb3J5ID0gei5pbmZlcjx0eXBlb2YgQ2F0ZWdvcnlTY2hlbWE+XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmNvbnN0IEFwcGxpY2F0aW9uR3JvdXBJZFNjaGVtYSA9IENvbW1vbk5hbWVNaXhlZFNjaGVtYS5kZXNjcmliZSgnQXBwbGljYXRpb24gZ3JvdXAgSWQnKVxuLyoqXG4gKiBBcHBsaWNhdGlvbiBncm91cCBpZGVudGlmaWVyLlxuICogQGFsaWFzIFNvbHV0aW9uR3JvdXBJZFxuICogQHNlZSAjL2RlZmluaXRpb25zL1NvbHV0aW9uR3JvdXBJZFxuICovXG5leHBvcnQgdHlwZSBBcHBsaWNhdGlvbkdyb3VwSWQgPSB6LmluZmVyPHR5cGVvZiBBcHBsaWNhdGlvbkdyb3VwSWRTY2hlbWE+XG5cbi8qKlxuICogU3RyaW5nIG9yIEV4cHJlc3Npb24gdW5pb24gdHlwZS5cbiAqL1xuXG5leHBvcnQgY29uc3QgSW5zdGFuY2VJZFNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC5taW4oMSwgJ1JlcXVpcmVkJylcbiAgLnJlZ2V4KENvbW1vbk5hbWVNaXhlZFJlZ2V4LCAnU3RhcnRzIHdpdGggYWxwaGEsIDAtNDggYWxwaGFudW0vYF9gL2AtYCwgZW5kcyBhbHBoYW51bS4nKVxuICAvLy5icmFuZDwnSW5zdGFuY2VJZCc+KClcbiAgLmRlc2NyaWJlKCdJbnN0YW5jZSBJZCcpXG4vKipcbiAqIEluc3RhbmNlIGlkZW50aWZpZXIuIFN0YXJ0cyB3aXRoIGxldHRlciwgY29udGFpbnMgbGV0dGVycy9udW1iZXJzL3VuZGVyc2NvcmUvaHlwaGVuLCBlbmRzIHdpdGggbGV0dGVyL251bWJlci5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9JbnN0YW5jZUlkXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbmNlSWQgPSB6LmluZmVyPHR5cGVvZiBJbnN0YW5jZUlkU2NoZW1hPlxuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyB2YWxpZCBJbnN0YW5jZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZUlkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSW5zdGFuY2VJZCB7XG4gIHJldHVybiBJbnN0YW5jZUlkU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHN0cmluZyB0byBJbnN0YW5jZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9JbnN0YW5jZUlkKHZhbHVlOiBzdHJpbmcpOiBJbnN0YW5jZUlkIHtcbiAgcmV0dXJuIEluc3RhbmNlSWRTY2hlbWEucGFyc2UodmFsdWUpXG59XG5cbmV4cG9ydCBjb25zdCBLZWdJbnN0YW5jZUlkU2NoZW1hID0gelxuICAudW5pb24oW0luc3RhbmNlSWRTY2hlbWEsIEV4cHJlc3Npb25TY2hlbWFdKVxuICAuZGVzY3JpYmUoJ0luc3RhbmNlIElkZW50aWZpZXInKVxuXG4vKipcbiAqIEtlZyBpbnN0YW5jZSBpZGVudGlmaWVyLiBFaXRoZXIgc3RhdGljIGlkZW50aWZpZXIgb3IgZXhwcmVzc2lvbi5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9LZWdJbnN0YW5jZUlkXG4gKi9cbmV4cG9ydCB0eXBlIEtlZ0luc3RhbmNlSWQgPSB6LmluZmVyPHR5cGVvZiBLZWdJbnN0YW5jZUlkU2NoZW1hPlxuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyB2YWxpZCBLZWdJbnN0YW5jZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZUlkT3JFeHByZXNzaW9uKFxuICB2YWx1ZTogdW5rbm93bixcbiAgb3B0aW9ucz86IEV4cHJlc3Npb25PcHRpb25zLFxuKTogdmFsdWUgaXMgS2VnSW5zdGFuY2VJZCB7XG4gIGlmICghS2VnSW5zdGFuY2VJZFNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3MpIHJldHVybiBmYWxzZVxuXG4gIC8vIElmIG5vIG9wdGlvbnMgb3IgeWFtbENvbnZlcnNpb24gZGlzYWJsZWQsIHNjaGVtYSB2YWxpZGF0aW9uIGlzIGVub3VnaFxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy55YW1sQ29udmVyc2lvbiA9PT0gZmFsc2UpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgWUFNTCBjb252ZXJzaW9uIGVuYWJsZWQsIHRlc3QgdGhlIGFjdHVhbCBjb252ZXJzaW9uXG4gIHRyeSB7XG4gICAgdG9JbnN0YW5jZUlkT3JFeHByZXNzaW9uKHZhbHVlIGFzIHN0cmluZyB8IEV4cHJlc3Npb24sIG9wdGlvbnMpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB2YWx1ZSB0byBLZWdJbnN0YW5jZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9JbnN0YW5jZUlkT3JFeHByZXNzaW9uKFxuICB2YWx1ZTogc3RyaW5nIHwgRXhwcmVzc2lvbixcbiAgb3B0aW9ucz86IEV4cHJlc3Npb25PcHRpb25zLFxuKTogS2VnSW5zdGFuY2VJZCB7XG4gIHJldHVybiBjb252ZXJ0T3JFeHByZXNzaW9uKHZhbHVlLCBLZWdJbnN0YW5jZUlkU2NoZW1hLCAnS2VnSW5zdGFuY2VJZCcsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBjb25zdCBGb3JtSWRTY2hlbWEgPSBOb25FeHByZXNzaW9uU2NoZW1hLmRlc2NyaWJlKCdGb3JtIElkZW50aWZpZXInKVxuXG4vKipcbiAqIEZvcm0gaWRlbnRpZmllci4gTm9uLWV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5leHBvcnQgdHlwZSBGb3JtSWQgPSB6LmluZmVyPHR5cGVvZiBLZWdJbnN0YW5jZUlkU2NoZW1hPlxuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyB2YWxpZCBGb3JtSWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1JZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEZvcm1JZCB7XG4gIHJldHVybiBGb3JtSWRTY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbi8qKlxuICogQ29udmVydHMgdmFsdWUgdG8gRm9ybUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Gb3JtSWQodmFsdWU6IHN0cmluZyB8IEV4cHJlc3Npb24pOiBGb3JtSWQge1xuICByZXR1cm4gRm9ybUlkU2NoZW1hLnBhcnNlKHZhbHVlKVxufVxuXG4vKipcbiAqIFdoaXRlbGlzdGVkIHN5c3RlbSB0YWJsZXMgdGhhdCBieXBhc3Mgc3RhbmRhcmQgZW50aXR5IG5hbWUgdmFsaWRhdGlvbi5cbiAqIFRoZXNlIHRhYmxlcyBzdGFydCB3aXRoIHVuZGVyc2NvcmUgYW5kIGFyZSBtYW5hZ2VkIGJ5IHRoZSBKaWd4IHBsYXRmb3JtLlxuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX1RBQkxFUyA9IFtcbiAgJ19jb21tYW5kUXVldWUnLFxuICAnX3N5bmNTY29wZScsXG4gIC8vIEFkZCBtb3JlIHN5c3RlbSB0YWJsZXMgaGVyZSBpZiBuZWVkZWRcbl0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgU3lzdGVtU3FsaXRlVGFibGVOYW1lID0gKHR5cGVvZiBTWVNURU1fVEFCTEVTKVtudW1iZXJdXG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHN0cmluZyBpcyBhIHN5c3RlbSB0YWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTcWxpdGVTeXN0ZW1UYWJsZShuYW1lOiBzdHJpbmcpOiBuYW1lIGlzIFN5c3RlbVNxbGl0ZVRhYmxlTmFtZSB7XG4gIHJldHVybiAoU1lTVEVNX1RBQkxFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMobmFtZSlcbn1cblxuZXhwb3J0IGNvbnN0IFBhcmFtZXRlck5hbWVTY2hlbWEgPSB6LnN0cmluZygpLmRlc2NyaWJlKCdQYXJhbWV0ZXIgbmFtZScpXG5cbi8qKlxuICogUGFyYW1ldGVyIG5hbWUuIFN0YXJ0cyB3aXRoICQuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvUGFyYW1ldGVyTmFtZVxuICovXG5leHBvcnQgdHlwZSBQYXJhbWV0ZXJOYW1lID0gei5pbmZlcjx0eXBlb2YgUGFyYW1ldGVyTmFtZVNjaGVtYT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgUGFyYW1ldGVyTmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyYW1ldGVyTmFtZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhcmFtZXRlck5hbWUge1xuICByZXR1cm4gUGFyYW1ldGVyTmFtZVNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3Ncbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBzdHJpbmcgdG8gUGFyYW1ldGVyTmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyYW1ldGVyTmFtZSh2YWx1ZTogc3RyaW5nKTogUGFyYW1ldGVyTmFtZSB7XG4gIHJldHVybiBQYXJhbWV0ZXJOYW1lU2NoZW1hLnBhcnNlKHZhbHVlKVxufVxuXG5leHBvcnQgY29uc3QgUGFyYW1ldGVyTmFtZURvbGxhclNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC5yZWdleChcbiAgICAvXlskYS16QS1aXVthLXpBLVowLTlfLV17MCw0OH1bYS16QS1aMC05XSQvLFxuICAgICdTdGFydHMgd2l0aCAkIG9yIGFscGhhLCAwLTQ4IGFscGhhbnVtL2BfYC9gLWAsIGVuZHMgYWxwaGFudW0uJyxcbiAgKVxuXG4vKipcbiAqIFBhcmFtZXRlciBuYW1lLiBTdGFydHMgd2l0aCAkIG9yIGxldHRlciwgY29udGFpbnMgbGV0dGVycy9udW1iZXJzL3VuZGVyc2NvcmUvaHlwaGVuLCBlbmRzIHdpdGggbGV0dGVyL251bWJlci5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9QYXJhbWV0ZXJEZWZpbml0aW9ucy9wcm9wZXJ0eU5hbWVzXG4gKi9cbmV4cG9ydCB0eXBlIFBhcmFtZXRlck5hbWVEb2xsYXIgPSB6LmluZmVyPHR5cGVvZiBQYXJhbWV0ZXJOYW1lRG9sbGFyU2NoZW1hPlxuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyB2YWxpZCBQYXJhbWV0ZXJEb2xsYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcmFtZXRlck5hbWVEb2xsYXIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXJhbWV0ZXJOYW1lRG9sbGFyIHtcbiAgcmV0dXJuIFBhcmFtZXRlck5hbWVEb2xsYXJTY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbi8qKlxuICogQ29udmVydHMgc3RyaW5nIHRvIFBhcmFtZXRlckRvbGxhciwgYWRkaW5nICQgcHJlZml4IGlmIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyYW1ldGVyTmFtZURvbGxhcih2YWx1ZTogc3RyaW5nKTogUGFyYW1ldGVyTmFtZURvbGxhciB7XG4gIC8vIElmIGl0IGFscmVhZHkgc3RhcnRzIHdpdGggJCwganVzdCB2YWxpZGF0ZSBpdFxuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIFBhcmFtZXRlck5hbWVEb2xsYXJTY2hlbWEucGFyc2UodmFsdWUpXG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgd2l0aG91dCAkIHdvdWxkIGJlIHZhbGlkXG4gIC8vIFRoZSByZWdleCByZXF1aXJlczogc3RhcnRzIHdpdGggbGV0dGVyLCAwLTQ4IGFscGhhbnVtL18vLSwgZW5kcyBhbHBoYW51bVxuICAvLyBTbyB3ZSBuZWVkIGF0IGxlYXN0IDIgY2hhcmFjdGVycyB0b3RhbFxuICBpZiAodmFsdWUubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RhcnRzIHdpdGggJCBvciBhbHBoYSwgMC00OCBhbHBoYW51bS9gX2AvYC1gLCBlbmRzIGFscGhhbnVtLicpXG4gIH1cblxuICAvLyBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlclxuICBpZiAoIS9eW2EtekEtWl0vLnRlc3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdGFydHMgd2l0aCAkIG9yIGFscGhhLCAwLTQ4IGFscGhhbnVtL2BfYC9gLWAsIGVuZHMgYWxwaGFudW0uJylcbiAgfVxuXG4gIC8vIExhc3QgY2hhcmFjdGVyIG11c3QgYmUgYWxwaGFudW1lcmljXG4gIGlmICghL1thLXpBLVowLTldJC8udGVzdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YXJ0cyB3aXRoICQgb3IgYWxwaGEsIDAtNDggYWxwaGFudW0vYF9gL2AtYCwgZW5kcyBhbHBoYW51bS4nKVxuICB9XG5cbiAgLy8gQWRkICQgcHJlZml4IGFuZCB2YWxpZGF0ZSB3aXRoIHRoZSBzY2hlbWFcbiAgY29uc3Qgd2l0aERvbGxhciA9IGAkJHt2YWx1ZX1gXG4gIHJldHVybiBQYXJhbWV0ZXJOYW1lRG9sbGFyU2NoZW1hLnBhcnNlKHdpdGhEb2xsYXIpXG59XG5cbmNvbnN0IEVudGl0eU5hbWVCYXNlU2NoZW1hID0gei5zdHJpbmcoKS5taW4oMSwgJ1JlcXVpcmVkJykucmVnZXgoQ29tbW9uTmFtZU1peGVkUmVnZXgpXG5jb25zdCBFbnRpdHlOYW1lRnFuU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLm1pbigxLCAnUmVxdWlyZWQnKVxuICAucmVnZXgoXG4gICAgL15kZWZhdWx0XFwvW2EtekEtWl1bYS16QS1aMC05Xy1dezAsNDh9W2EtekEtWjAtOV0kLyxcbiAgICAnRW50aXR5IG5hbWUgbXVzdCBiZSBpbiBmb3JtYXQgZGVmYXVsdC90YWJsZScsXG4gIClcbiAgLmRlc2NyaWJlKCdFbnRpdHkgbmFtZSBpbiBmb3JtYXQgZGVmYXVsdC90YWJsZScpXG5cbi8vICMvZGVmaW5pdGlvbnMvRHluYW1pY0VudGl0eU5hbWVcbi8vICMvZGVmaW5pdGlvbnMvRW50aXR5TmFtZVxuZXhwb3J0IGNvbnN0IEVudGl0eU5hbWVTY2hlbWEgPSB6LnVuaW9uKFtFbnRpdHlOYW1lQmFzZVNjaGVtYSwgRW50aXR5TmFtZUZxblNjaGVtYV0pXG5cbi8qKlxuICogRW50aXR5IG5hbWUuIEZvcm1hdDogZGVmYXVsdC90YWJsZW5hbWUgd2hlcmUgdGFibGVuYW1lIHN0YXJ0cyB3aXRoIGxldHRlci5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9FbnRpdHlOYW1lXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eU5hbWUgPSB6LmluZmVyPHR5cGVvZiBFbnRpdHlOYW1lU2NoZW1hPlxuZXhwb3J0IGNvbnN0IEVudGl0eU5hbWVCcmFuZGVkID0gRW50aXR5TmFtZVNjaGVtYVxuLy8uYnJhbmQ8J0VudGl0eU5hbWUnPigpXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eU5hbWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFbnRpdHlOYW1lIHtcbiAgcmV0dXJuIEVudGl0eU5hbWVCcmFuZGVkLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHN0cmluZyB0byBlbnRpdHkgbmFtZSwgYWRkaW5nIGRlZmF1bHQvIHByZWZpeCBpZiBuZWVkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VudGl0eU5hbWUodmFsdWU6IHN0cmluZywgcmVxdWlyZURlZmF1bHQ6IGJvb2xlYW4pOiBFbnRpdHlOYW1lIHtcbiAgaWYgKHJlcXVpcmVEZWZhdWx0IHx8IHZhbHVlLnN0YXJ0c1dpdGgoJ2RlZmF1bHQvJykpIHtcbiAgICByZXR1cm4gRW50aXR5TmFtZUZxblNjaGVtYS5wYXJzZSh2YWx1ZSlcbiAgfSBlbHNlIGlmIChpc1NxbGl0ZVN5c3RlbVRhYmxlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBFbnRpdHlOYW1lQmFzZVNjaGVtYS5wYXJzZSh2YWx1ZSlcbiAgfVxufVxuXG4vLyAjL2RlZmluaXRpb25zL0FjdGlvbklkRGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IEFjdGlvbklkU2NoZW1hID0gei5zdHJpbmcoKS5yZWdleChDb21tb25OYW1lTWl4ZWRSZWdleClcbi8vLmJyYW5kPCdBY3Rpb25JZCc+KClcbi8qKlxuICogQWN0aW9uIGlkZW50aWZpZXIuIFN0YXJ0cyB3aXRoIGxldHRlciwgY29udGFpbnMgbGV0dGVycy9udW1iZXJzL3VuZGVyc2NvcmUvaHlwaGVuLCBlbmRzIHdpdGggbGV0dGVyL251bWJlci5cbiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uSWQgPSB6LmluZmVyPHR5cGVvZiBBY3Rpb25JZFNjaGVtYT5cblxuLyoqXG4gKiBDb252ZXJ0cyB2YWx1ZSB0byB2YWxpZGF0ZWQgQWN0aW9uSWQgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQWN0aW9uSWQodmFsdWU6IHVua25vd24pOiBBY3Rpb25JZCB7XG4gIHJldHVybiBBY3Rpb25JZFNjaGVtYS5wYXJzZSh2YWx1ZSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgQWN0aW9uSWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbklkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQWN0aW9uSWQge1xuICByZXR1cm4gQWN0aW9uSWRTY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbi8vICMvZGVmaW5pdGlvbnMvSmlnSWRcbmV4cG9ydCBjb25zdCBTY3JlZW5JZFNjaGVtYSA9IHouc3RyaW5nKCkucmVnZXgoQ29tbW9uTmFtZU1peGVkUmVnZXgpXG4vLy5icmFuZDwnU2NyZWVuSWQnPigpXG4vKipcbiAqIFNjcmVlbiBpZGVudGlmaWVyLiBTdGFydHMgd2l0aCBsZXR0ZXIsIGNvbnRhaW5zIGxldHRlcnMvbnVtYmVycy91bmRlcnNjb3JlL2h5cGhlbiwgZW5kcyB3aXRoIGxldHRlci9udW1iZXIuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvSmlnSWREZWZpbml0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFNjcmVlbklkID0gei5pbmZlcjx0eXBlb2YgU2NyZWVuSWRTY2hlbWE+XG5cbi8qKlxuICogQ29udmVydHMgdmFsdWUgdG8gU2NyZWVuSWQgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU2NyZWVuSWQodmFsdWU6IHVua25vd24pOiBTY3JlZW5JZCB7XG4gIHJldHVybiBTY3JlZW5JZFNjaGVtYS5wYXJzZSh2YWx1ZSlcbn1cblxuLyoqXG4gKiBQYXJzZXMgdmFsdWUgYXMgRXhwcmVzc2lvbiAoaWYgc3RhcnRzIHdpdGggYD1gKSBvciBTY3JlZW5JZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU2NyZWVuSWRPckV4cHJlc3Npb24odmFsdWU6IHN0cmluZyk6IFNjcmVlbklkIHwgRXhwcmVzc2lvbiB7XG4gIHJldHVybiB2YWx1ZS5zdGFydHNXaXRoKCc9JykgPyB0b0V4cHJlc3Npb24odmFsdWUpIDogdG9TY3JlZW5JZCh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyZWVuSWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTY3JlZW5JZCB7XG4gIHJldHVybiBTY3JlZW5JZFNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3Ncbn1cblxuZXhwb3J0IGNvbnN0IFNDUkVFTl9UWVBFID0ge1xuICBDQUxFTkRBUjogJ2ppZy5jYWxlbmRhcicsXG4gIERFRkFVTFQ6ICdqaWcuZGVmYXVsdCcsXG4gIERPQ1VNRU5UOiAnamlnLmRvY3VtZW50JyxcbiAgRlVMTF9TQ1JFRU46ICdqaWcuZnVsbC1zY3JlZW4nLFxuICBHQUxMRVJZOiAnamlnLmdhbGxlcnknLFxuICBHUklEOiAnamlnLmdyaWQnLFxuICBMSVNUOiAnamlnLmxpc3QnLFxuICBUQUJMRTogJ2ppZy50YWJsZScsXG4gIFRBQlM6ICdqaWcudGFicycsXG4gIFdJWkFSRDogJ2ppZy53aXphcmQnLFxufSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgU0NSRUVOX1RZUEVTID0gT2JqZWN0LnZhbHVlcyhTQ1JFRU5fVFlQRSlcbi8qKlxuICogU2NyZWVuIHR5cGUgZW51bWVyYXRpb24uXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvU2NyZWVuVHlwZVxuICovXG5leHBvcnQgdHlwZSBTY3JlZW5UeXBlID0gKHR5cGVvZiBTQ1JFRU5fVFlQRSlba2V5b2YgdHlwZW9mIFNDUkVFTl9UWVBFXVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JlZW5UeXBlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2NyZWVuVHlwZSB7XG4gIHJldHVybiBTQ1JFRU5fVFlQRVMuaW5jbHVkZXModmFsdWUgYXMgU2NyZWVuVHlwZSlcbn1cblxuLy8gUmVjdXJzaXZlIChkaWZmaWN1bHQgdG8gZXhwcmVzcyBpbiBab2QpXG5leHBvcnQgY29uc3QgUGFyYW1ldGVyVmFsdWVTY2hlbWEgPSB6LnVuaW9uKFtcbiAgUHJpbWl0aXZlU2NoZW1hLFxuICB6LmFycmF5KFByaW1pdGl2ZVNjaGVtYSksXG4gIHoucmVjb3JkKHouc3RyaW5nKCksIFByaW1pdGl2ZVNjaGVtYSksXG5dKVxuXG5leHBvcnQgY29uc3QgV0lER0VUX1RZUEUgPSB7XG4gIEFDVElPTlM6ICd3aWRnZXQuYWN0aW9ucycsXG4gIEFWQVRBUjogJ3dpZGdldC5hdmF0YXInLFxuICBDSEFSVDogJ3dpZGdldC5jaGFydCcsXG4gIEdST1VQOiAnd2lkZ2V0Lmdyb3VwJyxcbiAgSU1BR0U6ICd3aWRnZXQuaW1hZ2UnLFxuICBMSVNUOiAnd2lkZ2V0Lmxpc3QnLFxuICBMT0NBVElPTjogJ3dpZGdldC5sb2NhdGlvbicsXG4gIFNUQVRVUzogJ3dpZGdldC5zdGF0dXMnLFxuICBWQUxVRTogJ3dpZGdldC52YWx1ZScsXG59IGFzIGNvbnN0XG5cbmNvbnN0IFdJREdFVF9UWVBFUyA9IE9iamVjdC52YWx1ZXMoV0lER0VUX1RZUEUpXG5leHBvcnQgY29uc3QgV2lkZ2V0VHlwZUVudW0gPSB6LmVudW0oV0lER0VUX1RZUEVTLCB7XG4gIG1lc3NhZ2U6IGBNdXN0IGJlIG9uZSBvZjogJHtXSURHRVRfVFlQRVMuam9pbignLCAnKX1gLFxufSlcbi8qKlxuICogV2lkZ2V0IHR5cGUgZW51bWVyYXRpb24uXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvV2lkZ2V0VHlwZVxuICovXG5leHBvcnQgdHlwZSBXaWRnZXRUeXBlID0gei5pbmZlcjx0eXBlb2YgV2lkZ2V0VHlwZUVudW0+XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldFR5cGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBXaWRnZXRUeXBlIHtcbiAgcmV0dXJuIFdpZGdldFR5cGVFbnVtLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIFBhcmFtZXRlciB2YWx1ZS4gU3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG51bGwsIGFycmF5LCBvciBvYmplY3QuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvUGFyYW1ldGVyVmFsdWVcbiAqL1xuZXhwb3J0IHR5cGUgUGFyYW1ldGVyVmFsdWUgPSB6LmluZmVyPHR5cGVvZiBQYXJhbWV0ZXJWYWx1ZVNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFBhcmFtZXRlckRlZmluaXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IE5vbkV4cHJlc3Npb25TY2hlbWEuZGVzY3JpYmUoJ1R5cGUgZnJvbSBkYXRhc291cmNlJyksXG4gIGRlZmF1bHQ6IFBhcmFtZXRlclZhbHVlU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0RlZmF1bHQgdmFsdWUnKSxcbiAgcmVxdWlyZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1JlcXVpcmVkIGZsYWcnKSxcbn0pXG5cbi8qKlxuICogUGFyYW1ldGVyIGRlZmluaXRpb24gd2l0aCB0eXBlLCBkZWZhdWx0IHZhbHVlLCBhbmQgcmVxdWlyZWQgZmxhZy5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9QYXJhbWV0ZXJEZWZpbml0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFBhcmFtZXRlckRlZmluaXRpb24gPSB6LmluZmVyPHR5cGVvZiBQYXJhbWV0ZXJEZWZpbml0aW9uU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgUGFyYW1ldGVyRGVmaW5pdGlvbnNTY2hlbWEgPSB6LnJlY29yZChcbiAgUGFyYW1ldGVyTmFtZURvbGxhclNjaGVtYSxcbiAgUGFyYW1ldGVyRGVmaW5pdGlvblNjaGVtYSxcbilcblxuLyoqXG4gKiBNYXAgb2YgcGFyYW1ldGVyIG5hbWVzICh3aXRoICQpIHRvIHBhcmFtZXRlciBkZWZpbml0aW9ucy5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9QYXJhbWV0ZXJEZWZpbml0aW9uc1xuICovXG5leHBvcnQgdHlwZSBQYXJhbWV0ZXJEZWZpbml0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFBhcmFtZXRlckRlZmluaXRpb25zU2NoZW1hPlxuXG5jb25zdCBDb252ZXJ0RnJvbVRvRW51bSA9IHpcbiAgLmVudW0oWydidWZmZXInLCAnbG9jYWwtdXJpJywgJ2Jhc2U2NCcsICdkYXRhLXVyaSddKVxuICAuZGVzY3JpYmUoXG4gICAgJ1NwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRhIHRvIGNvbnZlcnQgZnJvbSBvciB0bzogYnVmZmVyLCBsb2NhbC11cmksIGJhc2U2NCwgZGF0YS11cmkuJyxcbiAgKVxuXG4vKipcbiAqIERhdGEgY29udmVyc2lvbiB0eXBlOiBidWZmZXIsIGxvY2FsLXVyaSwgYmFzZTY0LCBvciBkYXRhLXVyaS5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9Db252ZXJ0VG9cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9Db252ZXJ0RnJvbVRvXG4gKi9cbmV4cG9ydCB0eXBlIENvbnZlcnRGcm9tVG8gPSB6LmluZmVyPHR5cGVvZiBDb252ZXJ0RnJvbVRvRW51bT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgQ29udmVydEZyb21Uby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udmVydEZyb21Ubyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIENvbnZlcnRGcm9tVG8ge1xuICByZXR1cm4gQ29udmVydEZyb21Ub0VudW0uc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbi8qKlxuICogQ29udmVydHMgc3RyaW5nIHRvIENvbnZlcnRGcm9tVG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NvbnZlcnRGcm9tVG8odmFsdWU6IHN0cmluZyk6IENvbnZlcnRGcm9tVG8ge1xuICByZXR1cm4gQ29udmVydEZyb21Ub0VudW0ucGFyc2UodmFsdWUpXG59XG5cbmNvbnN0IENvbnZlcnNpb25EZWZpbml0aW9uQmFzZSA9IHoub2JqZWN0KHtcbiAgcHJvcGVydHk6IENvbW1vbk5hbWVNaXhlZFNjaGVtYS5kZXNjcmliZSgnTmFtZSBvZiBwcm9wZXJ0eSB0byBwcm9jZXNzIGNvbnZlcnNpb24gb24nKSxcbiAgZnJvbTogQ29udmVydEZyb21Ub0VudW0sXG4gIGNvbnZlcnRIZWljVG9KcGc6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0NvbnZlcnQgSEVJQyB0byBKUEcnKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBDb252ZXJzaW9uRGVmaW5pdGlvblNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKCd0bycsIFtcbiAgQ29udmVyc2lvbkRlZmluaXRpb25CYXNlLmV4dGVuZCh7XG4gICAgdG86IHouZW51bShbJ2J1ZmZlcicsICdiYXNlNjQnLCAnZGF0YS11cmknXSksXG4gIH0pLFxuICBDb252ZXJzaW9uRGVmaW5pdGlvbkJhc2UuZXh0ZW5kKHtcbiAgICB0bzogei5saXRlcmFsKCdsb2NhbC11cmknKSxcbiAgICBsb2NhbEZpbGVuYW1lOiBOb25FeHByZXNzaW9uU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0xvY2FsIGZpbGVuYW1lIChvcHRpb25hbCknKSxcbiAgfSksXG5dKVxuXG4vKipcbiAqIERhdGEgY29udmVyc2lvbiBkZWZpbml0aW9uIHdpdGggcHJvcGVydHksIGZyb20vdG8gdHlwZXMsIGFuZCBvcHRpb25hbCBzZXR0aW5ncy5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9Db252ZXJzaW9uRGVmaW5pdGlvblxuICovXG5leHBvcnQgdHlwZSBDb252ZXJzaW9uRGVmaW5pdGlvbiA9IHouaW5mZXI8dHlwZW9mIENvbnZlcnNpb25EZWZpbml0aW9uU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgVGFibGVOYW1lU2NoZW1hID0gQ29tbW9uTmFtZU1peGVkU2NoZW1hXG4gIC8vIC5icmFuZCA8ICdUYWJsZU5hbWUnXG4gIC5kZXNjcmliZSgnVGFibGUgTmFtZS4nKVxuLyoqXG4gKiBUYWJsZSBuYW1lLiBNaXhlZC1jYXNlIDItNTAgY2hhcnMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvRGF0YVRhYmxlc0RlZmluaXRpb24vcHJvcGVydGllcy9wcm9wZXJ0eU5hbWVzXG4gKi9cbmV4cG9ydCB0eXBlIFRhYmxlTmFtZSA9IHouaW5mZXI8dHlwZW9mIFRhYmxlTmFtZVNjaGVtYT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgVGFibGVOYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhYmFzZVRhYmxlTmFtZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFRhYmxlTmFtZSB7XG4gIHJldHVybiBUYWJsZU5hbWVTY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbi8qKlxuICogQ29udmVydHMgc3RyaW5nIHRvIFRhYmxlTmFtZSwgcmVtb3ZpbmcgYGRlZmF1bHQvYCBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGFiYXNlVGFibGVOYW1lKHZhbHVlOiBzdHJpbmcpOiBUYWJsZU5hbWUge1xuICAvLyBJZiBpdCBzdGFydHMgd2l0aCBkZWZhdWx0LywgcmVtb3ZlIGl0XG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdkZWZhdWx0LycpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSg4KVxuICB9XG4gIHJldHVybiBUYWJsZU5hbWVTY2hlbWEucGFyc2UodmFsdWUpXG59XG5cbmV4cG9ydCBjb25zdCBDb21wb25lbnRJZFNjaGVtYSA9IENvbW1vbk5hbWVNaXhlZFNjaGVtYS5taW4oMSwgJ1JlcXVpcmVkJylcbi8vIC5icmFuZDwnQ29tcG9uZW50SWQnPigpXG5cbi8qKlxuICogQ29tcG9uZW50IGlkZW50aWZpZXIuIE1peGVkLWNhc2UgMi01MCBjaGFycy5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9Db21wb25lbnRJZERlZmluaXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50SWQgPSB6LmluZmVyPHR5cGVvZiBDb21wb25lbnRJZFNjaGVtYT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgQ29tcG9uZW50SWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBvbmVudElkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ29tcG9uZW50SWQge1xuICByZXR1cm4gQ29tcG9uZW50SWRTY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbi8qKlxuICogQ29udmVydHMgc3RyaW5nIHRvIENvbXBvbmVudElkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db21wb25lbnRJZCh2YWx1ZTogc3RyaW5nKTogQ29tcG9uZW50SWQge1xuICByZXR1cm4gQ29tcG9uZW50SWRTY2hlbWEucGFyc2UodmFsdWUpXG59XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVFlQRSA9IHtcbiAgQUNUSU9OX0xJU1Q6ICdhY3Rpb24uYWN0aW9uLWxpc3QnLFxuICBDTEVBUl9RVUVVRTogJ2FjdGlvbi5jbGVhci1xdWV1ZScsXG4gIENPTkZJUk06ICdhY3Rpb24uY29uZmlybScsXG4gIERFTEVURV9RVUVVRV9DT01NQU5EOiAnYWN0aW9uLmRlbGV0ZS1xdWV1ZS1jb21tYW5kJyxcbiAgREVMRVRFX1NZTkNfU0NPUEU6ICdhY3Rpb24uZGVsZXRlLXN5bmMtc2NvcGUnLFxuICBERUxFVEVfU1lOQ19TVEFUVVM6ICdhY3Rpb24uZGVsZXRlLXN5bmMtc3RhdHVzJyxcbiAgRVhFQ1VURV9BQ1RJT046ICdhY3Rpb24uZXhlY3V0ZS1hY3Rpb24nLFxuICBFWEVDVVRFX0VOVElUSUVTOiAnYWN0aW9uLmV4ZWN1dGUtZW50aXRpZXMnLFxuICBFWEVDVVRFX0VOVElUWTogJ2FjdGlvbi5leGVjdXRlLWVudGl0eScsXG4gIEVYRUNVVEVfU1FMOiAnYWN0aW9uLmV4ZWN1dGUtc3FsJyxcbiAgRVZBTFVBVEU6ICdhY3Rpb24uZXZhbHVhdGUnLFxuICBGSU5EX1JFUExBQ0U6ICdhY3Rpb24uZmluZC1yZXBsYWNlJyxcbiAgR0VORVJBVEVfRklMRTogJ2FjdGlvbi5nZW5lcmF0ZS1maWxlJyxcbiAgR0VORVJBVEVfUERGOiAnYWN0aW9uLmdlbmVyYXRlLXBkZicsXG4gIEdPX0JBQ0s6ICdhY3Rpb24uZ28tYmFjaycsXG4gIEdPX1RPOiAnYWN0aW9uLmdvLXRvJyxcbiAgSU5GT19NT0RBTDogJ2FjdGlvbi5pbmZvLW1vZGFsJyxcbiAgT1BFTl9BUFBfU0VUVElOR1M6ICdhY3Rpb24ub3Blbi1hcHAtc2V0dGluZ3MnLFxuICBPUEVOX01BUDogJ2FjdGlvbi5vcGVuLW1hcCcsXG4gIE9QRU5fTUVESUFfUElDS0VSOiAnYWN0aW9uLm9wZW4tbWVkaWEtcGlja2VyJyxcbiAgT1BFTl9TQ0FOTkVSOiAnYWN0aW9uLm9wZW4tc2Nhbm5lcicsXG4gIE9QRU5fVVJMOiAnYWN0aW9uLm9wZW4tdXJsJyxcbiAgUFJJTlQ6ICdhY3Rpb24ucHJpbnQnLFxuICBSRVNFVF9DT01QT05FTlRfU1RBVEU6ICdhY3Rpb24ucmVzZXQtY29tcG9uZW50LXN0YXRlJyxcbiAgUkVTRVRfSklHX1NUQVRFOiAnYWN0aW9uLnJlc2V0LWppZy1zdGF0ZScsXG4gIFJFU0VUX1NPTFVUSU9OX1NUQVRFOiAnYWN0aW9uLnJlc2V0LXNvbHV0aW9uLXN0YXRlJyxcbiAgUkVTRVRfU1RBVEU6ICdhY3Rpb24ucmVzZXQtc3RhdGUnLFxuICBSRVRSWV9RVUVVRV9DT01NQU5EOiAnYWN0aW9uLnJldHJ5LXF1ZXVlLWNvbW1hbmQnLFxuICBTRVRfQUNUSVZFX1RBQjogJ2FjdGlvbi5zZXQtYWN0aXZlLXRhYicsXG4gIFNFVF9KSUdfU1RBVEU6ICdhY3Rpb24uc2V0LWppZy1zdGF0ZScsXG4gIFNFVF9TT0xVVElPTl9TVEFURTogJ2FjdGlvbi5zZXQtc29sdXRpb24tc3RhdGUnLFxuICBTRVRfU1RBVEU6ICdhY3Rpb24uc2V0LXN0YXRlJyxcbiAgU0hBUkU6ICdhY3Rpb24uc2hhcmUnLFxuICBTSE9XX0FMRVJUOiAnYWN0aW9uLnNob3ctYWxlcnQnLFxuICBTVEFSVF9MT0NBVElPTl9TSEFSSU5HOiAnYWN0aW9uLnN0YXJ0LWxvY2F0aW9uLXNoYXJpbmcnLFxuICBTVEFSVF9TWU5DX1NDT1BFOiAnYWN0aW9uLnN0YXJ0LXN5bmMtc2NvcGUnLFxuICBTVE9QX0xPQ0FUSU9OX1NIQVJJTkc6ICdhY3Rpb24uc3RvcC1sb2NhdGlvbi1zaGFyaW5nJyxcbiAgU1VCTUlUX0ZPUk06ICdhY3Rpb24uc3VibWl0LWZvcm0nLFxuICBTWU5DX0VOVElUSUVTOiAnYWN0aW9uLnN5bmMtZW50aXRpZXMnLFxuICBVUERBVEVfUFJPRklMRTogJ2FjdGlvbi51cGRhdGUtcHJvZmlsZScsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBBY3Rpb25UeXBlU2NoZW1hID0gei5lbnVtKEFDVElPTl9UWVBFLCB7XG4gIGVycm9yOiBgTXVzdCBiZSBvbmUgb2Y6ICR7T2JqZWN0LnZhbHVlcyhBQ1RJT05fVFlQRSkuam9pbignLCAnKX1gLFxufSlcblxuLyoqXG4gKiBBY3Rpb24gdHlwZSBlbnVtZXJhdGlvbi5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9BY3Rpb25UeXBlXG4gKi9cbmV4cG9ydCB0eXBlIEFjdGlvblR5cGUgPSB6LmluZmVyPHR5cGVvZiBBY3Rpb25UeXBlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgRGF0YWJhc2VJZFNjaGVtYSA9IHpcbiAgLmxpdGVyYWwoJ2RlZmF1bHQnKVxuICAvLy5icmFuZDwnRGF0YWJhc2VJZCc+KClcbiAgLmRlc2NyaWJlKCdOYW1lIG9mIGRhdGFiYXNlLiBBbHdheXMgbmFtZWQgYGRlZmF1bHRgLicpXG5cbi8qKlxuICogRGF0YWJhc2UgaWRlbnRpZmllci4gQWx3YXlzICdkZWZhdWx0Jy5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9EYXRhYmFzZUlkXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFiYXNlSWQgPSB6LmluZmVyPHR5cGVvZiBEYXRhYmFzZUlkU2NoZW1hPlxuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyB2YWxpZCBEYXRhYmFzZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhYmFzZUlkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRGF0YWJhc2VJZCB7XG4gIHJldHVybiBEYXRhYmFzZUlkU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHN0cmluZyB0byBEYXRhYmFzZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRhYmFzZUlkKHZhbHVlOiBzdHJpbmcpOiBEYXRhYmFzZUlkIHtcbiAgcmV0dXJuIERhdGFiYXNlSWRTY2hlbWEucGFyc2UodmFsdWUpXG59XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0RGF0YWJhc2VJZDogRGF0YWJhc2VJZCA9IHRvRGF0YWJhc2VJZCgnZGVmYXVsdCcpXG5cbi8vIGNvbnN0IERhdGFUYWJsZXNTY2hlbWEgPSB6LnJlY29yZChUYWJsZU5hbWVTY2hlbWEsIHoubnVsbCgpKVxuXG4vLyBleHBvcnQgY29uc3QgRGF0YWJhc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4vLyAgIGRhdGFiYXNlSWQ6IERhdGFiYXNlSWRTY2hlbWEsXG4vLyAgIHRhYmxlczogRGF0YVRhYmxlc1NjaGVtYVxuLy8gfSlcblxuLy8gZXhwb3J0IHR5cGUgRGF0YWJhc2UgPSB6LmluZmVyPHR5cGVvZiBEYXRhYmFzZVNjaGVtYT5cblxuLy8gZXhwb3J0IGNvbnN0IERhdGFiYXNlc1NjaGVtYSA9IHoub2JqZWN0KHtcbi8vICAgZGVmYXVsdDogRGF0YWJhc2VTY2hlbWFcbi8vIH0pXG5cbi8vIGV4cG9ydCB0eXBlIERhdGFiYXNlcyA9IHouaW5mZXI8dHlwZW9mIERhdGFiYXNlc1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IERhdGFzb3VyY2VJZFNjaGVtYSA9IENvbW1vbk5hbWVNaXhlZFNjaGVtYS5taW4oMSwgJ1JlcXVpcmVkJylcbi8vLmJyYW5kPCdEYXRhc291cmNlSWQnPigpXG5cbi8qKlxuICogRGF0YXNvdXJjZSBpZGVudGlmaWVyLiBNaXhlZC1jYXNlIDItNTAgY2hhcnMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvRGF0YXNvdXJjZUlkXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFzb3VyY2VJZCA9IHouaW5mZXI8dHlwZW9mIERhdGFzb3VyY2VJZFNjaGVtYT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgRGF0YXNvdXJjZUlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhc291cmNlSWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEYXRhc291cmNlSWQge1xuICByZXR1cm4gRGF0YXNvdXJjZUlkU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHZhbHVlIHRvIERhdGFzb3VyY2VJZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0YXNvdXJjZUlkKHZhbHVlOiB1bmtub3duKTogRGF0YXNvdXJjZUlkIHtcbiAgcmV0dXJuIERhdGFzb3VyY2VJZFNjaGVtYS5wYXJzZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGNvbnN0IERBVEFTT1VSQ0VfVFlQRSA9IHtcbiAgU1FMSVRFOiAnZGF0YXNvdXJjZS5zcWxpdGUnLFxuICBTVEFUSUM6ICdkYXRhc291cmNlLnN0YXRpYycsXG4gIFNZU1RFTTogJ2RhdGFzb3VyY2Uuc3lzdGVtJyxcbiAgUkVGRVJFTkNFOiAnZGF0YXNvdXJjZS5yZWZlcmVuY2UnLFxufSBhcyBjb25zdFxuXG5jb25zdCBEQVRBU09VUkNFX1RZUEVTID0gT2JqZWN0LnZhbHVlcyhEQVRBU09VUkNFX1RZUEUpXG5leHBvcnQgY29uc3QgRGF0YXNvdXJjZVR5cGVFbnVtID0gei5lbnVtKERBVEFTT1VSQ0VfVFlQRVMsIHtcbiAgZXJyb3I6IGBNdXN0IGJlIG9uZSBvZjogJHtEQVRBU09VUkNFX1RZUEVTLmpvaW4oJywgJyl9YCxcbn0pXG5cbi8qKlxuICogRGF0YXNvdXJjZSB0eXBlIGVudW1lcmF0aW9uLlxuICogQHNlZSAjL2RlZmluaXRpb25zL0RhdGFzb3VyY2VUeXBlXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFzb3VyY2VUeXBlID0gei5pbmZlcjx0eXBlb2YgRGF0YXNvdXJjZVR5cGVFbnVtPlxuXG5leHBvcnQgY29uc3QgRnVuY3Rpb25JZFNjaGVtYSA9IENvbW1vbk5hbWVNaXhlZFNjaGVtYS5taW4oMSwgJ1JlcXVpcmVkJykgLy8uYnJhbmQ8J0Z1bmN0aW9uSWQnPigpXG5cbi8qKlxuICogRnVuY3Rpb24gaWRlbnRpZmllci4gTWl4ZWQtY2FzZSAyLTUwIGNoYXJzLlxuICogQHNlZSAjL2RlZmluaXRpb25zL0Z1bmN0aW9uSWREZWZpbml0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uSWQgPSB6LmluZmVyPHR5cGVvZiBGdW5jdGlvbklkU2NoZW1hPlxuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyB2YWxpZCBGdW5jdGlvbklkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbklkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRnVuY3Rpb25JZCB7XG4gIHJldHVybiBGdW5jdGlvbklkU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHZhbHVlIHRvIEZ1bmN0aW9uSWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Z1bmN0aW9uSWQodmFsdWU6IHVua25vd24pOiBGdW5jdGlvbklkIHtcbiAgcmV0dXJuIEZ1bmN0aW9uSWRTY2hlbWEucGFyc2UodmFsdWUpXG59XG5cbi8qKlxuICogRGF0YSBwcm92aWRlciB0eXBlIGNvbnN0YW50cyBmb3IgZXhlY3V0ZSBhY3Rpb25zLlxuICovXG5leHBvcnQgY29uc3QgREFUQV9QUk9WSURFUiA9IHtcbiAgT05FRFJJVkU6ICdEQVRBX1BST1ZJREVSX09ORURSSVZFJyxcbiAgU0FMRVNGT1JDRTogJ0RBVEFfUFJPVklERVJfU0FMRVNGT1JDRScsXG4gIFNRTDogJ0RBVEFfUFJPVklERVJfU1FMJyxcbiAgUkVTVDogJ0RBVEFfUFJPVklERVJfUkVTVCcsXG4gIFNPQVA6ICdEQVRBX1BST1ZJREVSX1NPQVAnLFxuICBEWU5BTUlDOiAnREFUQV9QUk9WSURFUl9EWU5BTUlDJyxcbiAgTE9DQUw6ICdEQVRBX1BST1ZJREVSX0xPQ0FMJyxcbiAgRFlOQU1JQ19GSUxFOiAnREFUQV9QUk9WSURFUl9EWU5BTUlDX0ZJTEUnLFxufSBhcyBjb25zdFxuXG5jb25zdCBEQVRBX1BST1ZJREVSUyA9IE9iamVjdC52YWx1ZXMoREFUQV9QUk9WSURFUilcbmV4cG9ydCBjb25zdCBEYXRhUHJvdmlkZXJFbnVtID0gei5lbnVtKERBVEFfUFJPVklERVJTLCB7XG4gIGVycm9yOiBgTXVzdCBiZSBvbmUgb2Y6ICR7REFUQV9QUk9WSURFUlMuam9pbignLCAnKX1gLFxufSlcblxuLyoqXG4gKiBEYXRhIHByb3ZpZGVyIHR5cGUgZW51bWVyYXRpb24uXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvUHJvdmlkZXJUeXBlXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQcm92aWRlciA9IHouaW5mZXI8dHlwZW9mIERhdGFQcm92aWRlckVudW0+XG5cbi8qKlxuICogQ2hlY2tzIGlmIHZhbHVlIGlzIHZhbGlkIERhdGFQcm92aWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVByb3ZpZGVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRGF0YVByb3ZpZGVyIHtcbiAgcmV0dXJuIERhdGFQcm92aWRlckVudW0uc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbmV4cG9ydCBjb25zdCBDb21tb25OYW1lTG93ZXIgPSB6XG4gIC5zdHJpbmcoKVxuICAucmVnZXgoXG4gICAgL15bYS16XVthLXowLTlfLV17MCw0OH1bYS16MC05XSQvLFxuICAgICdMb3dlcmNhc2UgMi01MCwgcHJlZmVyIGtlYmFiLWNhc2UsIHN0YXJ0cyBhbHBoYSwgY29udGFpbnMgYWxwaGFudW0gYW5kIGAtYCwgZW5kcyBhbHBoYW51bS4nLFxuICApXG5cbi8qKlxuICogTG93ZXJjYXNlIGlkZW50aWZpZXIuIDItNTAgY2hhcnMsIHN0YXJ0cyB3aXRoIGxldHRlciwgY29udGFpbnMgbGV0dGVycy9udW1iZXJzL3VuZGVyc2NvcmUvaHlwaGVuLlxuICovXG5leHBvcnQgdHlwZSBDb21tb25OYW1lTG93ZXIgPSB6LmluZmVyPHR5cGVvZiBDb21tb25OYW1lTG93ZXI+XG5cbmV4cG9ydCBjb25zdCBDb21tb25OYW1lID0gelxuICAuc3RyaW5nKClcbiAgLnJlZ2V4KFxuICAgIC9eW2EtekEtWl1bYS16QS1aMC05Xy1dezAsNDh9W2EtekEtWjAtOV0kLyxcbiAgICAnMi01MCBjaGFycywgc3RhcnRzIHdpdGggbGV0dGVyLCBjb250YWlucyBsZXR0ZXJzL251bWJlcnMvdW5kZXJzY29yZS9oeXBoZW4uJyxcbiAgKVxuXG4vKipcbiAqIDItNTAgY2hhcnMsIHN0YXJ0cyB3aXRoIGxldHRlciwgY29udGFpbnMgbGV0dGVycy9udW1iZXJzL3VuZGVyc2NvcmUvaHlwaGVuLlxuICovXG5leHBvcnQgdHlwZSBDb21tb25OYW1lID0gei5pbmZlcjx0eXBlb2YgQ29tbW9uTmFtZT5cblxuLyoqXG4gKiBNYXAgb2YgbG93ZXJjYXNlIG5hbWVzIHRvIGV4cHJlc3Npb25zLlxuICovXG5leHBvcnQgY29uc3QgRXhwcmVzc2lvbnNTY2hlbWEgPSB6LnJlY29yZChDb21tb25OYW1lTG93ZXIsIEV4cHJlc3Npb25TY2hlbWEpLmRlZmF1bHQoe30pXG5cbmV4cG9ydCBjb25zdCBJbnB1dEV4cHJlc3Npb25zU2NoZW1hID0gelxuICAucmVjb3JkKENvbW1vbk5hbWVMb3dlciwgei51bmlvbihbUHJpbWl0aXZlU2NoZW1hLCBFeHByZXNzaW9uU2NoZW1hLCB6LmFueSgpXSkpXG4gIC5kZXNjcmliZSgnTmFtZWQgSW5wdXRzIHdpdGggdmFsdWVzIG9yIGV4cHJlc3Npb25zJylcblxuLyoqXG4gKiBNYXAgb2YgbG93ZXJjYXNlIG5hbWVzIHRvIHByaW1pdGl2ZSB2YWx1ZXMgb3IgZXhwcmVzc2lvbnMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvSW5wdXRFeHByZXNzaW9uc1xuICovXG5leHBvcnQgdHlwZSBJbnB1dEV4cHJlc3Npb25zID0gei5pbmZlcjx0eXBlb2YgSW5wdXRFeHByZXNzaW9uc1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFBhcmFtZXRlckV4cHJlc3Npb25zU2NoZW1hID0gelxuICAucmVjb3JkKFxuICAgIFBhcmFtZXRlck5hbWVEb2xsYXJTY2hlbWEsXG4gICAgLy8gZGlmZmVyZW5jZSBmcm9tIG1vYmlsZS1ydW50aW1lIHNjaGVtYXMsIGJ1dCBydW50aW1lIHN1cHBvcnRzIG9iamVjdCBhcyBwYXJhbWV0ZXIgdmFsdWVcbiAgICB6LnVuaW9uKFtQcmltaXRpdmVPckV4cHJlc3Npb25TY2hlbWEsIHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKV0pLFxuICApXG4gIC5kZXNjcmliZSgnTmFtZWQgcGFyYW1ldGVycyB3aXRoIHZhbHVlcywgZXhwcmVzc2lvbnMsIG9yIG9iamVjdHMnKVxuXG4vKipcbiAqIE1hcCBvZiBwYXJhbWV0ZXIgbmFtZXMgKHdpdGggJCkgdG8gcHJpbWl0aXZlIHZhbHVlcywgZXhwcmVzc2lvbnMsIG9yIG9iamVjdHMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvUGFyYW1ldGVyRXhwcmVzc2lvbnNcbiAqL1xuZXhwb3J0IHR5cGUgUGFyYW1ldGVyRXhwcmVzc2lvbnMgPSB6LmluZmVyPHR5cGVvZiBQYXJhbWV0ZXJFeHByZXNzaW9uc1NjaGVtYT5cblxuY29uc3QgQmFzaWNDb2xvclNjaGVtYSA9IHouZW51bShbXG4gICdjb2xvcjEnLFxuICAnY29sb3IyJyxcbiAgJ2NvbG9yMycsXG4gICdjb2xvcjQnLFxuICAnY29sb3I1JyxcbiAgJ2NvbG9yNicsXG4gICdjb2xvcjcnLFxuICAnY29sb3I4JyxcbiAgJ2NvbG9yOScsXG4gICdjb2xvcjEwJyxcbiAgJ2NvbG9yMTEnLFxuICAnY29sb3IxMicsXG4gICdjb2xvcjEzJyxcbiAgJ2NvbG9yMTQnLFxuXSlcblxuLyoqXG4gKiBCYXNpYyBjb2xvciBwYWxldHRlOiBjb2xvcjEgdGhyb3VnaCBjb2xvcjE0LlxuICogQHNlZSAjL2RlZmluaXRpb25zL0Jhc2ljQ29sb3JcbiAqL1xuLy8gZXhwb3J0IHR5cGUgQmFzaWNDb2xvciA9IHouaW5mZXI8dHlwZW9mIEJhc2ljQ29sb3JTY2hlbWE+XG5cbmNvbnN0IFN0YXR1c0NvbG9yU2NoZW1hID0gei5lbnVtKFsncG9zaXRpdmUnLCAnbmVnYXRpdmUnLCAnd2FybmluZyddKVxuXG4vKipcbiAqIFN0YXR1cyBjb2xvcjogcG9zaXRpdmUsIG5lZ2F0aXZlLCBvciB3YXJuaW5nLlxuICogQHNlZSAjL2RlZmluaXRpb25zL1N0YXR1c0NvbG9yXG4gKi9cbi8vIGV4cG9ydCB0eXBlIFN0YXR1c0NvbG9yID0gei5pbmZlcjx0eXBlb2YgU3RhdHVzQ29sb3JTY2hlbWE+XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmNvbnN0IENvbXBvbmVudENvbG9yU2NoZW1hID0gei51bmlvbihbQmFzaWNDb2xvclNjaGVtYSwgU3RhdHVzQ29sb3JTY2hlbWFdKVxuXG4vKipcbiAqIENvbXBvbmVudCBjb2xvci4gQmFzaWMgcGFsZXR0ZSBvciBzdGF0dXMgY29sb3IuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvQ29tcG9uZW50Q29sb3JcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50Q29sb3IgPSB6LmluZmVyPHR5cGVvZiBDb21wb25lbnRDb2xvclNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IENvbG9yVmFsdWVTY2hlbWEgPSB6LnVuaW9uKFtcbiAgei5saXRlcmFsKCdwcmltYXJ5JyksXG4gIEJhc2ljQ29sb3JTY2hlbWEsXG4gIFN0YXR1c0NvbG9yU2NoZW1hLFxuICBFeHByZXNzaW9uU2NoZW1hLFxuXSlcblxuLyoqXG4gKiBDb2xvciB2YWx1ZSBzdHJpbmcuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvQ29sb3JWYWx1ZVxuICovXG5leHBvcnQgdHlwZSBDb2xvclZhbHVlID0gei5pbmZlcjx0eXBlb2YgQ29sb3JWYWx1ZVNjaGVtYT5cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQ29sb3JWYWx1ZSh2YWx1ZTogdW5rbm93bik6IENvbG9yVmFsdWUge1xuICByZXR1cm4gQ29sb3JWYWx1ZVNjaGVtYS5wYXJzZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQ29sb3JWYWx1ZU9yQ29uZGl0aW9ucyh2YWx1ZTogdW5rbm93bik6IENvbG9yVmFsdWVPckNvbmRpdGlvbnMge1xuICByZXR1cm4gQ29sb3JWYWx1ZU9yQ29uZGl0aW9uc1NjaGVtYS5wYXJzZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGNvbnN0IENvbG9yQ29uZGl0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICB3aGVuOiB6LnVuaW9uKFt6LnN0cmluZygpLCB6LmJvb2xlYW4oKV0pLFxuICBjb2xvcjogQ29sb3JWYWx1ZVNjaGVtYSxcbn0pXG5cbi8qKlxuICogQ29sb3IgY29uZGl0aW9uIHdpdGggd2hlbiBjbGF1c2UgYW5kIGNvbG9yIHZhbHVlLlxuICogQHNlZSAjL2RlZmluaXRpb25zL0NvbG9yQ29uZGl0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIENvbG9yQ29uZGl0aW9uID0gei5pbmZlcjx0eXBlb2YgQ29sb3JDb25kaXRpb25TY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBDb2xvclZhbHVlT3JDb25kaXRpb25zU2NoZW1hID0gelxuICAudW5pb24oW0NvbG9yVmFsdWVTY2hlbWEsIHouYXJyYXkoQ29sb3JDb25kaXRpb25TY2hlbWEpXSlcbiAgLmRlc2NyaWJlKCdDb2xvciBkZWZpbml0aW9uIGNhbiBiZSBlaXRoZXIgYSBsaXN0IG9mIGNvbmRpdGlvbnMgb3IgYSBzaW5nbGUgY29sb3IgdmFsdWUnKVxuXG4vKipcbiAqIENvbG9yIHZhbHVlIG9yIGFycmF5IG9mIGNvbG9yIGNvbmRpdGlvbnMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvQ29sb3JWYWx1ZU9yQ29uZGl0aW9uc1xuICovXG5leHBvcnQgdHlwZSBDb2xvclZhbHVlT3JDb25kaXRpb25zID0gei5pbmZlcjx0eXBlb2YgQ29sb3JWYWx1ZU9yQ29uZGl0aW9uc1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IEppZ1ByZXZpZXdDb25maWd1cmF0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdQcmV2aWV3IHRpdGxlJyksXG4gIHN1YnRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1ByZXZpZXcgc3VidGl0bGUnKSxcbiAgaW1hZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnUHJldmlldyBpbWFnZSBVUkwnKSxcbn0pXG5cbi8qKlxuICogSmlnIHByZXZpZXcgd2l0aCB0aXRsZSwgc3VidGl0bGUsIGFuZCBpbWFnZS5cbiAqL1xuZXhwb3J0IHR5cGUgSmlnUHJldmlld1R5cGUgPSB6LmluZmVyPHR5cGVvZiBKaWdQcmV2aWV3Q29uZmlndXJhdGlvblNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFBhbGV0dGVDb2xvclNjaGVtYSA9IHouZW51bShbXG4gICdlbGVtZW50JyxcbiAgJ2JhY2tncm91bmQnLFxuICAnb25CYWNrZ3JvdW5kJyxcbiAgJ3NjcmVlbicsXG4gICdjYXJkJyxcbiAgJ2NvbG9yMTAnLFxuICAnY29sb3IxMScsXG4gICdjb2xvcjEyJyxcbiAgJ2NvbG9yMTMnLFxuICAnY29sb3IxNCcsXG4gICdjb2xvcjEnLFxuICAnY29sb3IyJyxcbiAgJ2NvbG9yMycsXG4gICdjb2xvcjQnLFxuICAnY29sb3I1JyxcbiAgJ2NvbG9yNicsXG4gICdjb2xvcjcnLFxuICAnY29sb3I4JyxcbiAgJ2NvbG9yOScsXG4gICdvdmVybGF5JyxcbiAgJ29uT3ZlcmxheScsXG4gICdsaW5rJyxcbiAgJ25hdmlnYXRpb24nLFxuICAnb25OYXZpZ2F0aW9uJyxcbiAgJ25lZ2F0aXZlJyxcbiAgJ29uU2NyZWVuJyxcbiAgJ29uQ2FyZCcsXG4gICdvbkNvbG9yMTAnLFxuICAnb25Db2xvcjExJyxcbiAgJ29uQ29sb3IxMicsXG4gICdvbkNvbG9yMTMnLFxuICAnb25Db2xvcjE0JyxcbiAgJ29uQ29sb3IxJyxcbiAgJ29uQ29sb3IyJyxcbiAgJ29uQ29sb3IzJyxcbiAgJ29uQ29sb3I0JyxcbiAgJ29uQ29sb3I1JyxcbiAgJ29uQ29sb3I2JyxcbiAgJ29uQ29sb3I3JyxcbiAgJ29uQ29sb3I4JyxcbiAgJ29uQ29sb3I5JyxcbiAgJ29uRWxlbWVudCcsXG4gICdvbk5lZ2F0aXZlJyxcbiAgJ29uUG9zaXRpdmUnLFxuICAnb25QcmltYXJ5JyxcbiAgJ29uU2Vjb25kYXJ5JyxcbiAgJ29uU3BsYXNoJyxcbiAgJ29uVG9hc3QnLFxuICAnb25XYXJuaW5nJyxcbiAgJ3Bvc2l0aXZlJyxcbiAgJ3ByaW1hcnknLFxuICAnc2Vjb25kYXJ5JyxcbiAgJ3NwbGFzaCcsXG4gICd0b2FzdCcsXG4gICd0cmFuc3BhcmVudCcsXG4gICd3YXJuaW5nJyxcbl0pXG5cbi8qKlxuICogRnVsbCBwYWxldHRlIGNvbG9yIGluY2x1ZGluZyBzZW1hbnRpYyBhbmQgbnVtYmVyZWQgY29sb3JzLlxuICogQHNlZSAjL2RlZmluaXRpb25zL1BhbGV0dGVDb2xvclxuICovXG5leHBvcnQgdHlwZSBQYWxldHRlQ29sb3IgPSB6LmluZmVyPHR5cGVvZiBQYWxldHRlQ29sb3JTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBUZXh0TnVtYmVyU3R5bGVTY2hlbWEgPSB6LmVudW0oWydkZWNpbWFsJywgJ2N1cnJlbmN5JywgJ3BlcmNlbnQnLCAndW5pdCddKVxuZXhwb3J0IHR5cGUgVGV4dE51bWJlclN0eWxlID0gei5pbmZlcjx0eXBlb2YgVGV4dE51bWJlclN0eWxlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgVGV4dFNpZ25EaXNwbGF5U2NoZW1hID0gei5lbnVtKFsnYXV0bycsICdhbHdheXMnLCAnbmV2ZXInXSlcbmV4cG9ydCB0eXBlIFRleHRTaWduRGlzcGxheSA9IHouaW5mZXI8dHlwZW9mIFRleHRTaWduRGlzcGxheVNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFRleHRVbml0RGlzcGxheVNjaGVtYSA9IHouZW51bShbJ2xvbmcnLCAnc2hvcnQnLCAnbmFycm93J10pXG5leHBvcnQgdHlwZSBUZXh0VW5pdERpc3BsYXkgPSB6LmluZmVyPHR5cGVvZiBUZXh0VW5pdERpc3BsYXlTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBUZXh0TnVtYmVyaW5nU3lzdGVtU2NoZW1hID0gei5lbnVtKFtcbiAgJ2FyYWInLFxuICAnYXJhYmV4dCcsXG4gICdiYWxpJyxcbiAgJ2JlbmcnLFxuICAnZGV2YScsXG4gICdmdWxsd2lkZScsXG4gICdndWpyJyxcbiAgJ2d1cnUnLFxuICAnaGFuaWRlYycsXG4gICdraG1yJyxcbiAgJ2tuZGEnLFxuICAnbGFvbycsXG4gICdsYXRuJyxcbiAgJ2xpbWInLFxuICAnbWx5bScsXG4gICdtb25nJyxcbiAgJ215bXInLFxuICAnb3J5YScsXG4gICd0YW1sZGVjJyxcbiAgJ3RlbHUnLFxuICAndGhhaScsXG4gICd0aWJ0Jyxcbl0pXG5leHBvcnQgdHlwZSBUZXh0TnVtYmVyaW5nU3lzdGVtID0gei5pbmZlcjx0eXBlb2YgVGV4dE51bWJlcmluZ1N5c3RlbVNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFRleHROb3RhdGlvblNjaGVtYSA9IHouZW51bShbJ3N0YW5kYXJkJywgJ3NjaWVudGlmaWMnLCAnZW5naW5lZXJpbmcnLCAnY29tcGFjdCddKVxuZXhwb3J0IHR5cGUgVGV4dE5vdGF0aW9uID0gei5pbmZlcjx0eXBlb2YgVGV4dE5vdGF0aW9uU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgVGV4dENvbXBhY3REaXNwbGF5U2NoZW1hID0gei5lbnVtKFsnc2hvcnQnLCAnbG9uZyddKVxuZXhwb3J0IHR5cGUgVGV4dENvbXBhY3REaXNwbGF5ID0gei5pbmZlcjx0eXBlb2YgVGV4dENvbXBhY3REaXNwbGF5U2NoZW1hPlxuXG5leHBvcnQgY29uc3QgVGV4dEN1cnJlbmN5RGlzcGxheVNjaGVtYSA9IHouZW51bShbJ3N5bWJvbCcsICdjb2RlJywgJ25hbWUnLCAnbmFycm93U3ltYm9sJ10pXG5leHBvcnQgdHlwZSBUZXh0Q3VycmVuY3lEaXNwbGF5ID0gei5pbmZlcjx0eXBlb2YgVGV4dEN1cnJlbmN5RGlzcGxheVNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFRleHRDdXJyZW5jeVNpZ25TY2hlbWEgPSB6LmVudW0oWydzdGFuZGFyZCcsICdhY2NvdW50aW5nJ10pXG5leHBvcnQgdHlwZSBUZXh0Q3VycmVuY3lTaWduID0gei5pbmZlcjx0eXBlb2YgVGV4dEN1cnJlbmN5U2lnblNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFRleHREYXRlRm9ybWF0U2NoZW1hID0gei51bmlvbihbei5zdHJpbmcoKSwgei5lbnVtKFsnZGVmYXVsdCcsICdmcm9tTm93JywgJ3RvTm93J10pXSlcbmV4cG9ydCB0eXBlIFRleHREYXRlRm9ybWF0ID0gei5pbmZlcjx0eXBlb2YgVGV4dERhdGVGb3JtYXRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBDdXJyZW5jeUNvZGVzU2NoZW1hID0gei5lbnVtKFtcbiAgJ0FFRCcsIC8vICdVbml0ZWQgQXJhYiBFbWlyYXRlcyBEaXJoYW0nXG4gICdBRk4nLCAvLyAnQWZnaGFuIEFmZ2hhbmknXG4gICdBTEwnLCAvLyAnQWxiYW5pYW4gTGVrJ1xuICAnQU1EJywgLy8gJ0FybWVuaWFuIERyYW0nXG4gICdBTkcnLCAvLyAnTmV0aGVybGFuZHMgQW50aWxsZWFuIEd1aWxkZXInXG4gICdBT0EnLCAvLyAnQW5nb2xhbiBLd2FuemEnXG4gICdBUlMnLCAvLyAnQXJnZW50aW5lIFBlc28nXG4gICdBVUQnLCAvLyAnQXVzdHJhbGlhbiBEb2xsYXInXG4gICdBV0cnLCAvLyAnQXJ1YmFuIEZsb3JpbidcbiAgJ0FaTicsIC8vICdBemVyYmFpamFuaSBNYW5hdCdcbiAgJ0JBTScsIC8vICdCb3NuaWEtSGVyemVnb3ZpbmEgQ29udmVydGlibGUgTWFyaydcbiAgJ0JCRCcsIC8vICdCYXJiYWRpYW4gRG9sbGFyJ1xuICAnQkRUJywgLy8gJ0JhbmdsYWRlc2hpIFRha2EnXG4gICdCR04nLCAvLyAnQnVsZ2FyaWFuIExldidcbiAgJ0JIRCcsIC8vICdCYWhyYWluaSBEaW5hcidcbiAgJ0JJRicsIC8vICdCdXJ1bmRpYW4gRnJhbmMnXG4gICdCTUQnLCAvLyAnQmVybXVkaWFuIERvbGxhcidcbiAgJ0JORCcsIC8vICdCcnVuZWkgRG9sbGFyJ1xuICAnQk9CJywgLy8gJ0JvbGl2aWFuIEJvbGl2aWFubydcbiAgJ0JSTCcsIC8vICdCcmF6aWxpYW4gUmVhbCdcbiAgJ0JTRCcsIC8vICdCYWhhbWlhbiBEb2xsYXInXG4gICdCVE4nLCAvLyAnQmh1dGFuZXNlIE5ndWx0cnVtJ1xuICAnQldQJywgLy8gJ0JvdHN3YW5hbiBQdWxhJ1xuICAnQllOJywgLy8gJ0JlbGFydXNpYW4gUnVibGUnXG4gICdCWkQnLCAvLyAnQmVsaXplIERvbGxhcidcbiAgJ0NBRCcsIC8vICdDYW5hZGlhbiBEb2xsYXInXG4gICdDREYnLCAvLyAnQ29uZ29sZXNlIEZyYW5jJ1xuICAnQ0hGJywgLy8gJ1N3aXNzIEZyYW5jJ1xuICAnQ0xQJywgLy8gJ0NoaWxlYW4gUGVzbydcbiAgJ0NOWScsIC8vICdDaGluZXNlIFl1YW4nXG4gICdDT1AnLCAvLyAnQ29sb21iaWFuIFBlc28nXG4gICdDUkMnLCAvLyAnQ29zdGEgUmljYW4gQ29sw7NuJ1xuICAnQ1VQJywgLy8gJ0N1YmFuIFBlc28nXG4gICdDVkUnLCAvLyAnQ2FwZSBWZXJkZWFuIEVzY3VkbydcbiAgJ0NaSycsIC8vICdDemVjaCBLb3J1bmEnXG4gICdESkYnLCAvLyAnRGppYm91dGlhbiBGcmFuYydcbiAgJ0RLSycsIC8vICdEYW5pc2ggS3JvbmUnXG4gICdET1AnLCAvLyAnRG9taW5pY2FuIFBlc28nXG4gICdEWkQnLCAvLyAnQWxnZXJpYW4gRGluYXInXG4gICdFR1AnLCAvLyAnRWd5cHRpYW4gUG91bmQnXG4gICdFUk4nLCAvLyAnRXJpdHJlYW4gTmFrZmEnXG4gICdFVEInLCAvLyAnRXRoaW9waWFuIEJpcnInXG4gICdFVVInLCAvLyAnRXVybydcbiAgJ0ZKRCcsIC8vICdGaWppYW4gRG9sbGFyJ1xuICAnRktQJywgLy8gJ0ZhbGtsYW5kIElzbGFuZHMgUG91bmQnXG4gICdGT0snLCAvLyAnRmFyb2VzZSBLcsOzbmEnXG4gICdHQlAnLCAvLyAnQnJpdGlzaCBQb3VuZCBTdGVybGluZydcbiAgJ0dFTCcsIC8vICdHZW9yZ2lhbiBMYXJpJ1xuICAnR0dQJywgLy8gJ0d1ZXJuc2V5IFBvdW5kJ1xuICAnR0hTJywgLy8gJ0doYW5haWFuIENlZGknXG4gICdHSVAnLCAvLyAnR2licmFsdGFyIFBvdW5kJ1xuICAnR01EJywgLy8gJ0dhbWJpYW4gRGFsYXNpJ1xuICAnR05GJywgLy8gJ0d1aW5lYW4gRnJhbmMnXG4gICdHVFEnLCAvLyAnR3VhdGVtYWxhbiBRdWV0emFsJ1xuICAnR1lEJywgLy8gJ0d1eWFuYWVzZSBEb2xsYXInXG4gICdIS0QnLCAvLyAnSG9uZyBLb25nIERvbGxhcidcbiAgJ0hOTCcsIC8vICdIb25kdXJhbiBMZW1waXJhJ1xuICAnSFJLJywgLy8gJ0Nyb2F0aWFuIEt1bmEnXG4gICdIVEcnLCAvLyAnSGFpdGlhbiBHb3VyZGUnXG4gICdIVUYnLCAvLyAnSHVuZ2FyaWFuIEZvcmludCdcbiAgJ0lEUicsIC8vICdJbmRvbmVzaWFuIFJ1cGlhaCdcbiAgJ0lMUycsIC8vICdJc3JhZWxpIE5ldyBTaGVrZWwnXG4gICdJTVAnLCAvLyAnSXNsZSBvZiBNYW4gUG91bmQnXG4gICdJTlInLCAvLyAnSW5kaWFuIFJ1cGVlJ1xuICAnSVFEJywgLy8gJ0lyYXFpIERpbmFyJ1xuICAnSVJSJywgLy8gJ0lyYW5pYW4gUmlhbCdcbiAgJ0lTSycsIC8vICdJY2VsYW5kaWMgS3LDs25hJ1xuICAnSkVQJywgLy8gJ0plcnNleSBQb3VuZCdcbiAgJ0pNRCcsIC8vICdKYW1haWNhbiBEb2xsYXInXG4gICdKT0QnLCAvLyAnSm9yZGFuaWFuIERpbmFyJ1xuICAnSlBZJywgLy8gJ0phcGFuZXNlIFllbidcbiAgJ0tFUycsIC8vICdLZW55YW4gU2hpbGxpbmcnXG4gICdLR1MnLCAvLyAnS3lyZ3lzdGFuaSBTb20nXG4gICdLSFInLCAvLyAnQ2FtYm9kaWFuIFJpZWwnXG4gICdLSUQnLCAvLyAnS2lyaWJhdGkgRG9sbGFyJ1xuICAnS01GJywgLy8gJ0NvbW9yaWFuIEZyYW5jJ1xuICAnS1JXJywgLy8gJ1NvdXRoIEtvcmVhbiBXb24nXG4gICdLV0QnLCAvLyAnS3V3YWl0aSBEaW5hcidcbiAgJ0tZRCcsIC8vICdDYXltYW4gSXNsYW5kcyBEb2xsYXInXG4gICdLWlQnLCAvLyAnS2F6YWtoc3RhbmkgVGVuZ2UnXG4gICdMQUsnLCAvLyAnTGFvdGlhbiBLaXAnXG4gICdMQlAnLCAvLyAnTGViYW5lc2UgUG91bmQnXG4gICdMS1InLCAvLyAnU3JpIExhbmthbiBSdXBlZSdcbiAgJ0xSRCcsIC8vICdMaWJlcmlhbiBEb2xsYXInXG4gICdMU0wnLCAvLyAnTGVzb3RobyBMb3RpJ1xuICAnTFlEJywgLy8gJ0xpYnlhbiBEaW5hcidcbiAgJ01BRCcsIC8vICdNb3JvY2NhbiBEaXJoYW0nXG4gICdNREwnLCAvLyAnTW9sZG92YW4gTGV1J1xuICAnTUdBJywgLy8gJ01hbGFnYXN5IEFyaWFyeSdcbiAgJ01LRCcsIC8vICdNYWNlZG9uaWFuIERlbmFyJ1xuICAnTU1LJywgLy8gJ015YW5tYSBLeWF0J1xuICAnTU5UJywgLy8gJ01vbmdvbGlhbiBUdWdyaWsnXG4gICdNT1AnLCAvLyAnTWFjYW5lc2UgUGF0YWNhJ1xuICAnTVJVJywgLy8gJ01hdXJpdGFuaWFuIE91Z3VpeWEnXG4gICdNVVInLCAvLyAnTWF1cml0aWFuIFJ1cGVlJ1xuICAnTVZSJywgLy8gJ01hbGRpdmlhbiBSdWZpeWFhJ1xuICAnTVdLJywgLy8gJ01hbGF3aWFuIEt3YWNoYSdcbiAgJ01YTicsIC8vICdNZXhpY2FuIFBlc28nXG4gICdNWVInLCAvLyAnTWFsYXlzaWFuIFJpbmdnaXQnXG4gICdNWk4nLCAvLyAnTW96YW1iaWNhbiBNZXRpY2FsJ1xuICAnTkFEJywgLy8gJ05hbWliaWFuIERvbGxhcidcbiAgJ05HTicsIC8vICdOaWdlcmlhbiBOYWlyYSdcbiAgJ05JTycsIC8vICdOaWNhcmFndWFuIEPDs3Jkb2JhJ1xuICAnTk9LJywgLy8gJ05vcndlZ2lhbiBLcm9uZSdcbiAgJ05QUicsIC8vICdOZXBhbGVzZSBSdXBlZSdcbiAgJ05aRCcsIC8vICdOZXcgWmVhbGFuZCBEb2xsYXInXG4gICdPTVInLCAvLyAnT21hbmkgUmlhbCdcbiAgJ1BBQicsIC8vICdQYW5hbWFuaWFuIEJhbGJvYSdcbiAgJ1BFTicsIC8vICdQZXJ1dmlhbiBTb2wnXG4gICdQR0snLCAvLyAnUGFwdWEgTmV3IEd1aW5lYW4gS2luYSdcbiAgJ1BIUCcsIC8vICdQaGlsaXBwaW5lIFBlc28nXG4gICdQS1InLCAvLyAnUGFraXN0YW5pIFJ1cGVlJ1xuICAnUExOJywgLy8gJ1BvbGlzaCBabG90eSdcbiAgJ1BZRycsIC8vICdQYXJhZ3VheWFuIEd1YXJhbmknXG4gICdRQVInLCAvLyAnUWF0YXJpIFJpYWwnXG4gICdST04nLCAvLyAnUm9tYW5pYW4gTGV1J1xuICAnUlNEJywgLy8gJ1NlcmJpYW4gRGluYXInXG4gICdSVUInLCAvLyAnUnVzc2lhbiBSdWJsZSdcbiAgJ1JXRicsIC8vICdSd2FuZGFuIEZyYW5jJ1xuICAnU0FSJywgLy8gJ1NhdWRpIFJpeWFsJ1xuICAnU0JEJywgLy8gJ1NvbG9tb24gSXNsYW5kcyBEb2xsYXInXG4gICdTQ1InLCAvLyAnU2V5Y2hlbGxvaXMgUnVwZWUnXG4gICdTREcnLCAvLyAnU3VkYW5lc2UgUG91bmQnXG4gICdTRUsnLCAvLyAnU3dlZGlzaCBLcm9uYSdcbiAgJ1NHRCcsIC8vICdTaW5nYXBvcmUgRG9sbGFyJ1xuICAnU0hQJywgLy8gJ1NhaW50IEhlbGVuYSBQb3VuZCdcbiAgJ1NMTCcsIC8vICdTaWVycmEgTGVvbmVhbiBMZW9uZSdcbiAgJ1NPUycsIC8vICdTb21hbGkgU2hpbGxpbmcnXG4gICdTUkQnLCAvLyAnU3VyaW5hbWVzZSBEb2xsYXInXG4gICdTU1AnLCAvLyAnU291dGggU3VkYW5lc2UgUG91bmQnXG4gICdTVE4nLCAvLyAnU8OjbyBUb23DqSAmIFByw61uY2lwZSBEb2JyYSdcbiAgJ1NZUCcsIC8vICdTeXJpYW4gUG91bmQnXG4gICdTWkwnLCAvLyAnRXN3YXRpbmkgTGlsYW5nZW5pJ1xuICAnVEhCJywgLy8gJ1RoYWkgQmFodCdcbiAgJ1RKUycsIC8vICdUYWppa2lzdGFuaSBTb21vbmknXG4gICdUTVQnLCAvLyAnVHVya21lbmlzdGFuIE1hbmF0J1xuICAnVE5EJywgLy8gJ1R1bmlzaWFuIERpbmFyJ1xuICAnVE9QJywgLy8gXCJUb25nYW4gUGEnYW5nYVwiXG4gICdUUlknLCAvLyAnVHVya2lzaCBMaXJhJ1xuICAnVFREJywgLy8gJ1RyaW5pZGFkICYgVG9iYWdvIERvbGxhcidcbiAgJ1RWRCcsIC8vICdUdXZhbHVhbiBEb2xsYXInXG4gICdUV0QnLCAvLyAnTmV3IFRhaXdhbiBEb2xsYXInXG4gICdUWlMnLCAvLyAnVGFuemFuaWFuIFNoaWxsaW5nJ1xuICAnVUFIJywgLy8gJ1VrcmFpbmlhbiBIcnl2bmlhJ1xuICAnVUdYJywgLy8gJ1VnYW5kYW4gU2hpbGxpbmcnXG4gICdVU0QnLCAvLyAnVW5pdGVkIFN0YXRlcyBEb2xsYXInXG4gICdVWVUnLCAvLyAnVXJ1Z3VheWFuIFBlc28nXG4gICdVWlMnLCAvLyAnVXpiZWtpc3RhbmkgU29tJ1xuICAnVkVTJywgLy8gJ1ZlbmV6dWVsYW4gQm9sw612YXInXG4gICdWTkQnLCAvLyAnVmlldG5hbWVzZSBEb25nJ1xuICAnVlVWJywgLy8gJ1ZhbnVhdHUgVmF0dSdcbiAgJ1dTVCcsIC8vICdTYW1vYW4gVGFsYSdcbiAgJ1hBRicsIC8vICdDZW50cmFsIEFmcmljYW4gQ0ZBIEZyYW5jJ1xuICAnWENEJywgLy8gJ0Vhc3QgQ2FyaWJiZWFuIERvbGxhcidcbiAgJ1hEUicsIC8vICdTcGVjaWFsIERyYXdpbmcgUmlnaHRzJ1xuICAnWE9GJywgLy8gJ1dlc3QgQWZyaWNhbiBDRkEgRnJhbmMnXG4gICdYUEYnLCAvLyAnQ0ZQIEZyYW5jJ1xuICAnWUVSJywgLy8gJ1llbWVuaSBSaWFsJ1xuICAnWkFSJywgLy8gJ1NvdXRoIEFmcmljYW4gUmFuZCdcbiAgJ1pNVycsIC8vICdaYW1iaWFuIEt3YWNoYSdcbl0pXG5leHBvcnQgdHlwZSBDdXJyZW5jeUNvZGVzS2V5cyA9IHouaW5mZXI8dHlwZW9mIEN1cnJlbmN5Q29kZXNTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBOdW1iZXJVbml0U2NoZW1hID0gei5lbnVtKFtcbiAgJ2FjcmUnLFxuICAnYml0JyxcbiAgJ2J5dGUnLFxuICAnY2Vsc2l1cycsXG4gICdjZW50aW1ldGVyJyxcbiAgJ2RheScsXG4gICdkZWdyZWUnLFxuICAnZmFocmVuaGVpdCcsXG4gICdmbHVpZC1vdW5jZScsXG4gICdmb290JyxcbiAgJ2dhbGxvbicsXG4gICdnaWdhYml0JyxcbiAgJ2dpZ2FieXRlJyxcbiAgJ2dyYW0nLFxuICAnaGVjdGFyZScsXG4gICdob3VyJyxcbiAgJ2luY2gnLFxuICAna2lsb2JpdCcsXG4gICdraWxvYnl0ZScsXG4gICdraWxvZ3JhbScsXG4gICdraWxvbWV0ZXInLFxuICAnbGl0ZXInLFxuICAnbWVnYWJpdCcsXG4gICdtZWdhYnl0ZScsXG4gICdtZXRlcicsXG4gICdtaWxlJyxcbiAgJ21pbGUtc2NhbmRpbmF2aWFuJyxcbiAgJ21pbGxpbGl0ZXInLFxuICAnbWlsbGltZXRlcicsXG4gICdtaWxsaXNlY29uZCcsXG4gICdtaW51dGUnLFxuICAnbW9udGgnLFxuICAnb3VuY2UnLFxuICAncGVyY2VudCcsXG4gICdwZXRhYnl0ZScsXG4gICdwb3VuZCcsXG4gICdzZWNvbmQnLFxuICAnc3RvbmUnLFxuICAndGVyYWJpdCcsXG4gICd0ZXJhYnl0ZScsXG4gICd3ZWVrJyxcbiAgJ3lhcmQnLFxuICAneWVhcicsXG5dKVxuZXhwb3J0IHR5cGUgTnVtYmVyVW5pdCA9IHouaW5mZXI8dHlwZW9mIE51bWJlclVuaXRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBOdW1iZXJGb3JtYXRFeHByZXNzaW9uc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgbnVtYmVyU3R5bGU6IHpcbiAgICAudW5pb24oW1RleHROdW1iZXJTdHlsZVNjaGVtYSwgU3RyaW5nT3JFeHByZXNzaW9uU2NoZW1hXSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgICdkZWNpbWFsLCBjdXJyZW5jeSwgcGVyY2VudCBvciB1bml0IC0gaWRlbnRpZnlpbmcgdGhlIHR5cGUgb2YgcXVhbnRpdHkgYmVpbmcgbWVhc3VyZWQnLFxuICAgICksXG4gIG1pbmltdW1JbnRlZ2VyRGlnaXRzOiBOdW1iZXJPckV4cHJlc3Npb25TY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcbiAgICAnTWluaW11bSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgKDEtMjEpLiBOdW1iZXJzIHBhZGRlZCB3aXRoIGxlYWRpbmcgemVyb2VzIGlmIG5lY2Vzc2FyeScsXG4gICksXG4gIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogTnVtYmVyT3JFeHByZXNzaW9uU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgJ01pbmltdW0gZnJhY3Rpb24gZGlnaXRzLiBOdW1iZXJzIHJvdW5kZWQgb3IgcGFkZGVkIHdpdGggdHJhaWxpbmcgemVyb2VzIGlmIG5lY2Vzc2FyeScsXG4gICksXG4gIG1heGltdW1GcmFjdGlvbkRpZ2l0czogTnVtYmVyT3JFeHByZXNzaW9uU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgJ01heGltdW0gZnJhY3Rpb24gZGlnaXRzLiBOdW1iZXJzIHJvdW5kZWQgb3IgcGFkZGVkIHdpdGggdHJhaWxpbmcgemVyb2VzIGlmIG5lY2Vzc2FyeScsXG4gICksXG4gIG1pbmltdW1TaWduaWZpY2FudERpZ2l0czogTnVtYmVyT3JFeHByZXNzaW9uU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgJ01pbmltdW0gc2lnbmlmaWNhbnQgZGlnaXRzIHRvIHNob3cnLFxuICApLFxuICBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHM6IE51bWJlck9yRXhwcmVzc2lvblNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgICdNYXhpbXVtIHNpZ25pZmljYW50IGRpZ2l0cyB0byBzaG93JyxcbiAgKSxcbiAgc2lnbkRpc3BsYXk6IHpcbiAgICAudW5pb24oW1RleHRTaWduRGlzcGxheVNjaGVtYSwgU3RyaW5nT3JFeHByZXNzaW9uU2NoZW1hXSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZSgnYXV0bywgYWx3YXlzLCBuZXZlciwgb3IgZXhjZXB0WmVybyAtIHdoZXRoZXIgdG8gc2hvdyBzaWduJyksXG4gIHVuaXQ6IFByaW1pdGl2ZU9yRXhwcmVzc2lvblNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgICdVbml0IGZvciB1bml0IGZvcm1hdHRpbmcgKGUuZy4ga2lsb21ldGVyLCBtaWxlLXBlci1ob3VyKScsXG4gICksXG4gIHVuaXREaXNwbGF5OiB6XG4gICAgLnVuaW9uKFtUZXh0VW5pdERpc3BsYXlTY2hlbWEsIFN0cmluZ09yRXhwcmVzc2lvblNjaGVtYV0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoJ2xvbmcsIHNob3J0LCBvciBuYXJyb3cgLSB1bml0IGRpc3BsYXkgc3R5bGUnKSxcbiAgbnVtYmVyaW5nU3lzdGVtOiB6XG4gICAgLnVuaW9uKFtUZXh0TnVtYmVyaW5nU3lzdGVtU2NoZW1hLCBTdHJpbmdPckV4cHJlc3Npb25TY2hlbWFdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKCdOdW1iZXJpbmcgc3lzdGVtIGZvciBmb3JtYXR0aW5nJyksXG4gIGN1cnJlbmN5OiB6XG4gICAgLnVuaW9uKFtDdXJyZW5jeUNvZGVzU2NoZW1hLCBTdHJpbmdPckV4cHJlc3Npb25TY2hlbWFdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKCdDdXJyZW5jeSBjb2RlIChlLmcuIFVTRCwgRVVSKSBmb3IgY3VycmVuY3kgZm9ybWF0dGluZycpLFxuICBub3RhdGlvbjogelxuICAgIC51bmlvbihbVGV4dE5vdGF0aW9uU2NoZW1hLCBTdHJpbmdPckV4cHJlc3Npb25TY2hlbWFdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKCdzdGFuZGFyZCwgc2NpZW50aWZpYywgZW5naW5lZXJpbmcsIG9yIGNvbXBhY3QnKSxcbiAgY29tcGFjdERpc3BsYXk6IHpcbiAgICAudW5pb24oW1RleHRDb21wYWN0RGlzcGxheVNjaGVtYSwgU3RyaW5nT3JFeHByZXNzaW9uU2NoZW1hXSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZSgnc2hvcnQgb3IgbG9uZyAtIG9ubHkgdXNlZCB3aGVuIG5vdGF0aW9uIGlzIGNvbXBhY3QnKSxcbiAgY3VycmVuY3lEaXNwbGF5OiB6XG4gICAgLnVuaW9uKFtUZXh0Q3VycmVuY3lEaXNwbGF5U2NoZW1hLCBTdHJpbmdPckV4cHJlc3Npb25TY2hlbWFdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKCdzeW1ib2wsIGNvZGUsIG5hbWUsIG9yIG5hcnJvd1N5bWJvbCAtIGN1cnJlbmN5IGRpc3BsYXkgc3R5bGUnKSxcbiAgY3VycmVuY3lTaWduOiB6XG4gICAgLnVuaW9uKFtUZXh0Q3VycmVuY3lTaWduU2NoZW1hLCBTdHJpbmdPckV4cHJlc3Npb25TY2hlbWFdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKCdzdGFuZGFyZCBvciBhY2NvdW50aW5nIC0gZm9yIG5lZ2F0aXZlIGN1cnJlbmN5IHJlbmRlcmluZycpLFxufSlcblxuLyoqXG4gKiBOdW1iZXIgZm9ybWF0dGluZyBvcHRpb25zIHdpdGggc3R5bGUsIGRpc3BsYXksIGFuZCBwcmVjaXNpb24gc2V0dGluZ3MuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvTnVtYmVyRm9ybWF0RXhwcmVzc2lvbnNcbiAqL1xuZXhwb3J0IHR5cGUgTnVtYmVyRm9ybWF0RXhwcmVzc2lvbnMgPSB6LmluZmVyPHR5cGVvZiBOdW1iZXJGb3JtYXRFeHByZXNzaW9uc1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IFRleHRGb3JtYXRFeHByZXNzaW9uc1NjaGVtYSA9IE51bWJlckZvcm1hdEV4cHJlc3Npb25zU2NoZW1hLmV4dGVuZCh7XG4gIGRhdGVGb3JtYXQ6IHpcbiAgICAudW5pb24oW1RleHREYXRlRm9ybWF0U2NoZW1hLCBTdHJpbmdPckV4cHJlc3Npb25TY2hlbWFdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKCdEYXRlIGZvcm1hdCBwYXR0ZXJuIG9yIHByZXNldCcpLFxufSkuZGVzY3JpYmUoJ0RhdGUgJiBOdW1iZXIgRm9ybWF0JylcblxuLyoqXG4gKiBUZXh0IGZvcm1hdHRpbmcgb3B0aW9ucyBmb3IgZGF0ZXMgYW5kIG51bWJlcnMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvVGV4dEZvcm1hdEV4cHJlc3Npb25zXG4gKi9cbmV4cG9ydCB0eXBlIFRleHRGb3JtYXRFeHByZXNzaW9ucyA9IHouaW5mZXI8dHlwZW9mIFRleHRGb3JtYXRFeHByZXNzaW9uc1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IEVtcGhhc2lzRGVmaW5pdGlvblNjaGVtYSA9IHpcbiAgLnVuaW9uKFtcbiAgICB6LmxpdGVyYWwoJ2V4dHJhLWxvdycpLFxuICAgIHoubGl0ZXJhbCgnbG93JyksXG4gICAgei5saXRlcmFsKCdsb3ctbWVkaXVtJyksXG4gICAgei5saXRlcmFsKCdtZWRpdW0nKSxcbiAgICB6LmxpdGVyYWwoJ2hpZ2gnKSxcbiAgICB6LmxpdGVyYWwoJ2NvbG9yJyksXG4gICAgRXhwcmVzc2lvblNjaGVtYSxcbiAgXSlcbiAgLmRlc2NyaWJlKCdFbXBoYXNpcyBkZWZpbml0aW9uJylcblxuLyoqXG4gKiBFbXBoYXNpcyBsZXZlbCBmcm9tIGV4dHJhLWxvdyB0byBoaWdoLCBjb2xvciwgb3IgZXhwcmVzc2lvbi5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9FbXBoYXNpc0RlZmluaXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgRW1waGFzaXNEZWZpbml0aW9uID0gei5pbmZlcjx0eXBlb2YgRW1waGFzaXNEZWZpbml0aW9uU2NoZW1hPlxuXG4vKipcbiAqIFRleHQgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvVGV4dFdpdGhGb3JtYXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0V2l0aEZvcm1hdCB7XG4gIHRleHQ6IFN0cmluZ09yRXhwcmVzc2lvbiB8IFRleHRMb2NhbGVcbiAgZm9ybWF0PzogVGV4dEZvcm1hdEV4cHJlc3Npb25zXG59XG5cbmNvbnN0IF9UZXh0V2l0aEZvcm1hdFNjaGVtYUJhc2UgPSB6Lm9iamVjdCh7XG4gIHRleHQ6IHoudW5pb24oW1N0cmluZ09yRXhwcmVzc2lvblNjaGVtYSwgei5sYXp5KCgpID0+IFRleHRMb2NhbGVTY2hlbWEpXSksXG4gIGZvcm1hdDogVGV4dEZvcm1hdEV4cHJlc3Npb25zU2NoZW1hLm9wdGlvbmFsKCksXG59KVxuXG5leHBvcnQgY29uc3QgVGV4dFdpdGhGb3JtYXRTY2hlbWE6IHouWm9kVHlwZTxUZXh0V2l0aEZvcm1hdD4gPSBfVGV4dFdpdGhGb3JtYXRTY2hlbWFCYXNlXG5cbi8qKlxuICogQ2hlY2tzIGlmIHZhbHVlIGlzIHZhbGlkIFRleHRXaXRoRm9ybWF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUZXh0V2l0aEZvcm1hdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFRleHRXaXRoRm9ybWF0IHtcbiAgcmV0dXJuIFRleHRXaXRoRm9ybWF0U2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIFRleHQgbG9jYWxlIHdpdGggaWQsIGRlZmF1bHQgbWVzc2FnZSwgYW5kIHZhbHVlcy5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9UZXh0TG9jYWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dExvY2FsZSB7XG4gIGlkOiBQcmltaXRpdmVPckV4cHJlc3Npb25cbiAgZGVmYXVsdE1lc3NhZ2U/OiBQcmltaXRpdmVPckV4cHJlc3Npb25cbiAgdmFsdWVzPzogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlT3JFeHByZXNzaW9uIHwgVGV4dFdpdGhGb3JtYXQgfCBUZXh0TG9jYWxlPlxufVxuXG5leHBvcnQgY29uc3QgVGV4dExvY2FsZVNjaGVtYTogei5ab2RUeXBlPFRleHRMb2NhbGU+ID0gei5vYmplY3Qoe1xuICBpZDogUHJpbWl0aXZlT3JFeHByZXNzaW9uU2NoZW1hLmRlc2NyaWJlKCdMb2NhbGUgSWQnKSxcbiAgZGVmYXVsdE1lc3NhZ2U6IFByaW1pdGl2ZU9yRXhwcmVzc2lvblNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKCdEZWZhdWx0IG1lc3NhZ2UnKSxcbiAgdmFsdWVzOiB6XG4gICAgLnJlY29yZChcbiAgICAgIENvbW1vbk5hbWUsXG4gICAgICAvLyB6LmxhenkgdG8gYWxsb3cgZm9yIHJlY3Vyc2l2ZSBkZWZpbml0aW9uXG4gICAgICAvLyB0aGVyZSBoYXMgdG8gYmUgYSBzcGVjaWFsIG1vZGlmaWNhdGlvbiBpbiB6b2QudXRpbHMgYW5kIGV4dHJhY3QtdHlwZSB0byBzdXBwb3J0IHRoaXMgbGF6eSByZWN1cnNpb25cbiAgICAgIHoudW5pb24oW1ByaW1pdGl2ZU9yRXhwcmVzc2lvblNjaGVtYSwgVGV4dFdpdGhGb3JtYXRTY2hlbWEsIHoubGF6eSgoKSA9PiBUZXh0TG9jYWxlU2NoZW1hKV0pLFxuICAgIClcbiAgICAub3B0aW9uYWwoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBUZXh0TG9jYWxlVmFsdWVzU2NoZW1hID0gei5yZWNvcmQoXG4gIENvbW1vbk5hbWUsXG4gIHoudW5pb24oW1ByaW1pdGl2ZU9yRXhwcmVzc2lvblNjaGVtYSwgVGV4dFdpdGhGb3JtYXRTY2hlbWEsIFRleHRMb2NhbGVTY2hlbWFdKSxcbilcblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgVGV4dExvY2FsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGV4dExvY2FsZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFRleHRMb2NhbGUge1xuICByZXR1cm4gVGV4dExvY2FsZVNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3Ncbn1cblxuZXhwb3J0IGNvbnN0IFRleHRWYWx1ZVNjaGVtYSA9IHoudW5pb24oW1xuICBQcmltaXRpdmVPckV4cHJlc3Npb25TY2hlbWEsXG4gIFRleHRXaXRoRm9ybWF0U2NoZW1hLFxuICBUZXh0TG9jYWxlU2NoZW1hLFxuXSlcblxuLyoqXG4gKiBUZXh0IHZhbHVlLiBQcmltaXRpdmUsIGZvcm1hdHRlZCB0ZXh0LCBvciBsb2NhbGl6ZWQgdGV4dC5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9UZXh0VmFsdWVcbiAqL1xuZXhwb3J0IHR5cGUgVGV4dFZhbHVlID0gei5pbmZlcjx0eXBlb2YgVGV4dFZhbHVlU2NoZW1hPlxuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyB2YWxpZCBUZXh0VmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RleHRWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFRleHRWYWx1ZSB7XG4gIHJldHVybiBUZXh0VmFsdWVTY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzXG59XG5cbi8qKlxuICogQ29udmVydHMgdmFsdWUgdG8gVGV4dFZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UZXh0VmFsdWUodmFsdWU6IHN0cmluZyB8IHouaW5mZXI8dHlwZW9mIFRleHRWYWx1ZVNjaGVtYT4pOiBUZXh0VmFsdWUge1xuICByZXR1cm4gVGV4dFZhbHVlU2NoZW1hLnBhcnNlKHZhbHVlKVxufVxuXG5leHBvcnQgY29uc3QgVGV4dFN0eWxlT3B0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBmb250U2l6ZTogei5lbnVtKFsncmVndWxhcicsICdzbWFsbCcsICdtZWRpdW0nXSkub3B0aW9uYWwoKS5kZXNjcmliZSgnRm9udCBzaXplJyksXG4gIGNvbG9yOiBDb2xvclZhbHVlT3JDb25kaXRpb25zU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1RleHQgY29sb3InKSxcbiAgaXNTdWJ0bGU6IHoudW5pb24oW3ouYm9vbGVhbigpLCBFeHByZXNzaW9uU2NoZW1hXSkub3B0aW9uYWwoKS5kZXNjcmliZSgnSXMgdGV4dCBzdWJ0bGUnKSxcbiAgaXNCb2xkOiB6LnVuaW9uKFt6LmJvb2xlYW4oKSwgRXhwcmVzc2lvblNjaGVtYV0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0lzIHRleHQgYm9sZCcpLFxuICBudW1iZXJPZkxpbmVzOiBOdW1iZXJPckV4cHJlc3Npb25TY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcbiAgICAnTnVtYmVyIG9mIGxpbmVzIHRvIHNob3cgYmVmb3JlIHRydW5jYXRpbmcgd2l0aCBlbGxpcHNpcycsXG4gICksXG59KVxuXG4vKipcbiAqIFRleHQgc3R5bGUgb3B0aW9ucyBmb3IgZm9udFNpemUsIGNvbG9yLCBpc1N1YnRsZSwgaXNCb2xkLCBudW1iZXJPZkxpbmVzLlxuICogQHNlZSAjL2RlZmluaXRpb25zL1RleHRTdHlsZU9wdGlvblxuICovXG5leHBvcnQgdHlwZSBUZXh0U3R5bGVPcHRpb24gPSB6LmluZmVyPHR5cGVvZiBUZXh0U3R5bGVPcHRpb25TY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBUZXh0V2l0aFN0eWxlU2NoZW1hID0gX1RleHRXaXRoRm9ybWF0U2NoZW1hQmFzZS5leHRlbmQoVGV4dFN0eWxlT3B0aW9uU2NoZW1hLnNoYXBlKVxuXG4vKipcbiAqIFRleHQgd2l0aCBmb3JtYXQgYW5kIHN0eWxlIG9wdGlvbnMuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvVGV4dFdpdGhTdHlsZVxuICovXG5leHBvcnQgdHlwZSBUZXh0V2l0aFN0eWxlID0gei5pbmZlcjx0eXBlb2YgVGV4dFdpdGhTdHlsZVNjaGVtYT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgVGV4dFdpdGhTdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGV4dFdpdGhTdHlsZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFRleHRXaXRoU3R5bGUge1xuICByZXR1cm4gVGV4dFdpdGhTdHlsZVNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3Ncbn1cblxuZXhwb3J0IGNvbnN0IFRleHRWYWx1ZVdpdGhTdHlsZVNjaGVtYSA9IHoudW5pb24oW1xuICBQcmltaXRpdmVPckV4cHJlc3Npb25TY2hlbWEsXG4gIFRleHRXaXRoU3R5bGVTY2hlbWEsXG4gIFRleHRMb2NhbGVTY2hlbWEsXG5dKVxuXG4vKipcbiAqIFRleHQgdmFsdWUgd2l0aCBzdHlsZSBzdXBwb3J0LiBQcmltaXRpdmUsIHN0eWxlZC9mb3JtYXR0ZWQgdGV4dCwgb3IgbG9jYWxpemVkIHRleHQuXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvVGV4dFZhbHVlV2l0aFN0eWxlXG4gKi9cbmV4cG9ydCB0eXBlIFRleHRWYWx1ZVdpdGhTdHlsZSA9IHouaW5mZXI8dHlwZW9mIFRleHRWYWx1ZVdpdGhTdHlsZVNjaGVtYT5cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgVGV4dFZhbHVlV2l0aFN0eWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUZXh0VmFsdWVXaXRoU3R5bGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUZXh0VmFsdWVXaXRoU3R5bGUge1xuICByZXR1cm4gVGV4dFZhbHVlV2l0aFN0eWxlU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzc1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHZhbHVlIHRvIFRleHRWYWx1ZVdpdGhTdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVGV4dFZhbHVlV2l0aFN0eWxlKFxuICB2YWx1ZTogc3RyaW5nIHwgei5pbmZlcjx0eXBlb2YgVGV4dFZhbHVlV2l0aFN0eWxlU2NoZW1hPixcbik6IFRleHRWYWx1ZVdpdGhTdHlsZSB7XG4gIHJldHVybiBUZXh0VmFsdWVXaXRoU3R5bGVTY2hlbWEucGFyc2UodmFsdWUpXG59XG5cbmV4cG9ydCBjb25zdCBCYXNlNjRTY2hlbWEgPSB6LmJhc2U2NCgpXG5leHBvcnQgY29uc3QgQmFzZTY0VXJsU2NoZW1hID0gei5iYXNlNjR1cmwoKVxuZXhwb3J0IGNvbnN0IEJhc2U2NE9yVXJsU2NoZW1hID0gei51bmlvbihbQmFzZTY0U2NoZW1hLCBCYXNlNjRVcmxTY2hlbWFdKVxuXG4vKipcbiAqIENvbnZlcnRzIHN0cmluZyB0byBCYXNlNjQgb3IgQmFzZTY0VXJsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9CYXNlNjRPclVybCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEJhc2U2NE9yVXJsU2NoZW1hLnBhcnNlKHZhbHVlKVxufVxuXG5leHBvcnQgY29uc3QgU2VsZWN0YWJsZU1lZGlhVHlwZVNjaGVtYSA9IHoudW5pb24oW1xuICB6LmxpdGVyYWwoJ2ltYWdlJyksXG4gIHoubGl0ZXJhbCgndmlkZW8nKSxcbiAgei5saXRlcmFsKCdpbWFnZUFuZFZpZGVvJyksXG4gIHoubGl0ZXJhbCgncGRmJyksXG4gIHoubGl0ZXJhbCgnZG9jJyksXG4gIHoubGl0ZXJhbCgncHB0JyksXG4gIHoubGl0ZXJhbCgneGxzJyksXG4gIHoubGl0ZXJhbCgnY3N2JyksXG4gIHoubGl0ZXJhbCgncGxhaW5UZXh0JyksXG4gIHoubGl0ZXJhbCgnYW55JyksXG5dKVxuXG4vKipcbiAqIE1lZGlhIHR5cGUgZm9yIGZpbGUgc2VsZWN0aW9uLlxuICogQHNlZSAjL2RlZmluaXRpb25zL1NlbGVjdGFibGVNZWRpYVR5cGVcbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0YWJsZU1lZGlhVHlwZSA9IHouaW5mZXI8dHlwZW9mIFNlbGVjdGFibGVNZWRpYVR5cGVTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBTZXRTdGF0ZUNoYW5nZXNTY2hlbWEgPSB6LnJlY29yZChcbiAgei5zdHJpbmcoKSxcbiAgei51bmlvbihbXG4gICAgRXhwcmVzc2lvblNjaGVtYSxcbiAgICB6LnN0cmluZygpLFxuICAgIHoubnVtYmVyKCksXG4gICAgei5ib29sZWFuKCksXG4gICAgei5udWxsKCksXG4gICAgei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLFxuICAgIHouYXJyYXkoei5hbnkoKSksXG4gIF0pLFxuKVxuXG4vKipcbiAqIE1hcCBvZiBzdGF0ZSBwcm9wZXJ0eSBuYW1lcyB0byBuZXcgdmFsdWVzLlxuICogQHNlZSAjL2RlZmluaXRpb25zL1NldFN0YXRlQ2hhbmdlc1xuICovXG5leHBvcnQgdHlwZSBTZXRTdGF0ZUNoYW5nZXMgPSB6LmluZmVyPHR5cGVvZiBTZXRTdGF0ZUNoYW5nZXNTY2hlbWE+XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NldFN0YXRlQ2hhbmdlcyh2YWx1ZTogdW5rbm93bik6IFNldFN0YXRlQ2hhbmdlcyB7XG4gIHJldHVybiBTZXRTdGF0ZUNoYW5nZXNTY2hlbWEucGFyc2UodmFsdWUpXG59XG5cbmV4cG9ydCBjb25zdCBJbWFnZVJlc2l6ZU1vZGVTY2hlbWEgPSB6XG4gIC5lbnVtKFsnY292ZXInLCAnY29udGFpbicsICdzdHJldGNoJywgJ3JlcGVhdCcsICdjZW50ZXInXSlcbiAgLmRlc2NyaWJlKCdJbWFnZSByZXNpemUgbW9kZScpXG5cbi8qKlxuICogSW1hZ2UgcmVzaXplIG1vZGU6IGNvdmVyLCBjb250YWluLCBzdHJldGNoLCByZXBlYXQsIG9yIGNlbnRlci5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9JbWFnZVJlc2l6ZU1vZGVcbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VSZXNpemVNb2RlID0gei5pbmZlcjx0eXBlb2YgSW1hZ2VSZXNpemVNb2RlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgSW1hZ2VTaGFwZVNjaGVtYSA9IHpcbiAgLmVudW0oWydsYW5kc2NhcGUnLCAncG9ydHJhaXQnLCAnc3F1YXJlJ10pXG4gIC5kZXNjcmliZSgnSW1hZ2Ugc2hhcGUgZm9yIGxpc3QgaXRlbScpXG5cbi8qKlxuICogSW1hZ2Ugc2hhcGU6IGxhbmRzY2FwZSwgcG9ydHJhaXQsIG9yIHNxdWFyZS5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9JbWFnZVNoYXBlXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlU2hhcGUgPSB6LmluZmVyPHR5cGVvZiBJbWFnZVNoYXBlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgSW1hZ2VTaXplU2NoZW1hID0gelxuICAuZW51bShbJ3NtYWxsJywgJ3JlZ3VsYXInLCAnbGFyZ2UnXSlcbiAgLmRlc2NyaWJlKCdJbWFnZSBzaXplIGZvciBsaXN0IGl0ZW0nKVxuXG4vKipcbiAqIEltYWdlIHNpemU6IHNtYWxsLCByZWd1bGFyLCBvciBsYXJnZS5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9JbWFnZVNpemVcbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VTaXplID0gei5pbmZlcjx0eXBlb2YgSW1hZ2VTaXplU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEFsaWduU2NoZW1hID0gei5lbnVtKFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXSlcblxuLyoqXG4gKiBIb3Jpem9udGFsIGFsaWdubWVudDogbGVmdCwgY2VudGVyLCBvciByaWdodC5cbiAqIEBzZWUgIy9kZWZpbml0aW9ucy9Ib3Jpem9udGFsQWxpZ25cbiAqL1xuZXhwb3J0IHR5cGUgSG9yaXpvbnRhbEFsaWduID0gei5pbmZlcjx0eXBlb2YgSG9yaXpvbnRhbEFsaWduU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgVmVydGljYWxBbGlnblNjaGVtYSA9IHouZW51bShbJ3RvcCcsICdjZW50ZXInLCAnYm90dG9tJ10pXG5cbi8qKlxuICogVmVydGljYWwgYWxpZ25tZW50OiB0b3AsIGNlbnRlciwgb3IgYm90dG9tLlxuICogQHNlZSAjL2RlZmluaXRpb25zL1ZlcnRpY2FsQWxpZ25cbiAqL1xuZXhwb3J0IHR5cGUgVmVydGljYWxBbGlnbiA9IHouaW5mZXI8dHlwZW9mIFZlcnRpY2FsQWxpZ25TY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBEYXRhUm93SWQgPSB6LnN0cmluZygpLnJlZ2V4KC9eWyEkKi06PUAtX2Etfl17MSw2NH0kLylcbi8vLmJyYW5kPCdEYXRhUm93SWQnPigpXG5cbi8qKlxuICogRGF0YSByb3cgaWRlbnRpZmllci4gMS02NCBjaGFycywgY29udGFpbnMgcHJpbnRhYmxlIEFTQ0lJIGV4Y2VwdCBzcGFjZS9jb21tYS9zZW1pY29sb24uXG4gKiBAc2VlICMvZGVmaW5pdGlvbnMvRGF0YVJvd0lkXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFSb3dJZCA9IHouaW5mZXI8dHlwZW9mIERhdGFSb3dJZD5cblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJNZXRob2QgPVxuICB8ICdjcmVhdGUnXG4gIHwgJ3VwZGF0ZSdcbiAgfCAnc2F2ZSdcbiAgfCAnZGVsZXRlJ1xuICB8ICdkb3dubG9hZCdcbiAgfCAnZnVuY3Rpb25DYWxsJ1xuICB8IEV4cHJlc3Npb25cbiJdfQ==