@wavemaker/app-ng-runtime 11.10.0-next.25079 → 11.10.0-next.27705

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 (829) hide show
  1. package/components/advanced/custom/bundles/index.umd.js +1 -0
  2. package/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +1 -0
  3. package/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +2 -1
  4. package/components/advanced/custom/fesm2022/index.mjs +1 -0
  5. package/components/advanced/custom/fesm2022/index.mjs.map +1 -1
  6. package/components/base/bundles/index.umd.js +2 -2
  7. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +3 -3
  8. package/components/base/fesm2022/index.mjs +2 -2
  9. package/components/base/fesm2022/index.mjs.map +1 -1
  10. package/components/containers/tabs/bundles/index.umd.js +1 -1
  11. package/components/containers/wizard/bundles/index.umd.js +14 -112
  12. package/components/containers/wizard/esm2022/wizard-step/wizard-step.directive.mjs +3 -4
  13. package/components/containers/wizard/esm2022/wizard.component.mjs +13 -110
  14. package/components/containers/wizard/fesm2022/index.mjs +14 -112
  15. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  16. package/components/containers/wizard/wizard.component.d.ts +0 -1
  17. package/components/data/list/bundles/index.umd.js +2 -2
  18. package/components/data/list/esm2022/list.component.mjs +3 -3
  19. package/components/data/list/fesm2022/index.mjs +2 -2
  20. package/components/data/list/fesm2022/index.mjs.map +1 -1
  21. package/components/dialogs/default/bundles/index.umd.js +2 -2
  22. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +3 -3
  23. package/components/dialogs/default/fesm2022/index.mjs +2 -2
  24. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  25. package/components/input/default/bundles/index.umd.js +7 -7
  26. package/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +2 -2
  27. package/components/input/default/esm2022/dataset-aware-form.component.mjs +2 -2
  28. package/components/input/default/esm2022/radioset/radioset.component.mjs +2 -2
  29. package/components/input/default/esm2022/switch/switch.component.mjs +4 -4
  30. package/components/input/default/esm2022/switch/switch.props.mjs +2 -2
  31. package/components/input/default/fesm2022/index.mjs +7 -7
  32. package/components/input/default/fesm2022/index.mjs.map +1 -1
  33. package/locales/angular/global/af-na.js +24 -0
  34. package/locales/angular/global/af.js +24 -0
  35. package/locales/angular/global/agq.js +22 -0
  36. package/locales/angular/global/ak.js +24 -0
  37. package/locales/angular/global/am.js +24 -0
  38. package/locales/angular/global/ar-ae.js +32 -0
  39. package/locales/angular/global/ar-bh.js +32 -0
  40. package/locales/angular/global/ar-dj.js +32 -0
  41. package/locales/angular/global/ar-dz.js +32 -0
  42. package/locales/angular/global/ar-eg.js +32 -0
  43. package/locales/angular/global/ar-eh.js +32 -0
  44. package/locales/angular/global/ar-er.js +32 -0
  45. package/locales/angular/global/ar-il.js +32 -0
  46. package/locales/angular/global/ar-iq.js +32 -0
  47. package/locales/angular/global/ar-jo.js +32 -0
  48. package/locales/angular/global/ar-km.js +32 -0
  49. package/locales/angular/global/ar-kw.js +32 -0
  50. package/locales/angular/global/ar-lb.js +32 -0
  51. package/locales/angular/global/ar-ly.js +32 -0
  52. package/locales/angular/global/ar-ma.js +32 -0
  53. package/locales/angular/global/ar-mr.js +32 -0
  54. package/locales/angular/global/ar-om.js +32 -0
  55. package/locales/angular/global/ar-ps.js +32 -0
  56. package/locales/angular/global/ar-qa.js +32 -0
  57. package/locales/angular/global/ar-sa.js +32 -0
  58. package/locales/angular/global/ar-sd.js +32 -0
  59. package/locales/angular/global/ar-so.js +32 -0
  60. package/locales/angular/global/ar-ss.js +32 -0
  61. package/locales/angular/global/ar-sy.js +32 -0
  62. package/locales/angular/global/ar-td.js +32 -0
  63. package/locales/angular/global/ar-tn.js +32 -0
  64. package/locales/angular/global/ar-ye.js +32 -0
  65. package/locales/angular/global/ar.js +32 -0
  66. package/locales/angular/global/as.js +24 -0
  67. package/locales/angular/global/asa.js +24 -0
  68. package/locales/angular/global/ast.js +24 -0
  69. package/locales/angular/global/az-cyrl.js +22 -0
  70. package/locales/angular/global/az-latn.js +24 -0
  71. package/locales/angular/global/az.js +24 -0
  72. package/locales/angular/global/bas.js +22 -0
  73. package/locales/angular/global/be-tarask.js +28 -0
  74. package/locales/angular/global/be.js +28 -0
  75. package/locales/angular/global/bem.js +24 -0
  76. package/locales/angular/global/bez.js +24 -0
  77. package/locales/angular/global/bg.js +24 -0
  78. package/locales/angular/global/bm.js +22 -0
  79. package/locales/angular/global/bn-in.js +24 -0
  80. package/locales/angular/global/bn.js +24 -0
  81. package/locales/angular/global/bo-in.js +22 -0
  82. package/locales/angular/global/bo.js +22 -0
  83. package/locales/angular/global/br.js +30 -0
  84. package/locales/angular/global/brx.js +24 -0
  85. package/locales/angular/global/bs-cyrl.js +22 -0
  86. package/locales/angular/global/bs-latn.js +26 -0
  87. package/locales/angular/global/bs.js +26 -0
  88. package/locales/angular/global/ca-ad.js +24 -0
  89. package/locales/angular/global/ca-es-valencia.js +24 -0
  90. package/locales/angular/global/ca-fr.js +24 -0
  91. package/locales/angular/global/ca-it.js +24 -0
  92. package/locales/angular/global/ca.js +24 -0
  93. package/locales/angular/global/ccp-in.js +22 -0
  94. package/locales/angular/global/ccp.js +22 -0
  95. package/locales/angular/global/ce.js +24 -0
  96. package/locales/angular/global/ceb.js +24 -0
  97. package/locales/angular/global/cgg.js +24 -0
  98. package/locales/angular/global/chr.js +24 -0
  99. package/locales/angular/global/ckb-ir.js +24 -0
  100. package/locales/angular/global/ckb.js +24 -0
  101. package/locales/angular/global/cs.js +28 -0
  102. package/locales/angular/global/cy.js +32 -0
  103. package/locales/angular/global/da-gl.js +24 -0
  104. package/locales/angular/global/da.js +24 -0
  105. package/locales/angular/global/dav.js +22 -0
  106. package/locales/angular/global/de-at.js +24 -0
  107. package/locales/angular/global/de-be.js +24 -0
  108. package/locales/angular/global/de-ch.js +24 -0
  109. package/locales/angular/global/de-it.js +24 -0
  110. package/locales/angular/global/de-li.js +24 -0
  111. package/locales/angular/global/de-lu.js +24 -0
  112. package/locales/angular/global/de.js +24 -0
  113. package/locales/angular/global/dje.js +22 -0
  114. package/locales/angular/global/doi.js +24 -0
  115. package/locales/angular/global/dsb.js +28 -0
  116. package/locales/angular/global/dua.js +22 -0
  117. package/locales/angular/global/dyo.js +22 -0
  118. package/locales/angular/global/dz.js +22 -0
  119. package/locales/angular/global/ebu.js +22 -0
  120. package/locales/angular/global/ee-tg.js +24 -0
  121. package/locales/angular/global/ee.js +24 -0
  122. package/locales/angular/global/el-cy.js +24 -0
  123. package/locales/angular/global/el.js +24 -0
  124. package/locales/angular/global/en-001.js +24 -0
  125. package/locales/angular/global/en-150.js +24 -0
  126. package/locales/angular/global/en-ae.js +24 -0
  127. package/locales/angular/global/en-ag.js +24 -0
  128. package/locales/angular/global/en-ai.js +24 -0
  129. package/locales/angular/global/en-as.js +24 -0
  130. package/locales/angular/global/en-at.js +24 -0
  131. package/locales/angular/global/en-au.js +24 -0
  132. package/locales/angular/global/en-bb.js +24 -0
  133. package/locales/angular/global/en-be.js +24 -0
  134. package/locales/angular/global/en-bi.js +24 -0
  135. package/locales/angular/global/en-bm.js +24 -0
  136. package/locales/angular/global/en-bs.js +24 -0
  137. package/locales/angular/global/en-bw.js +24 -0
  138. package/locales/angular/global/en-bz.js +24 -0
  139. package/locales/angular/global/en-ca.js +24 -0
  140. package/locales/angular/global/en-cc.js +24 -0
  141. package/locales/angular/global/en-ch.js +24 -0
  142. package/locales/angular/global/en-ck.js +24 -0
  143. package/locales/angular/global/en-cm.js +24 -0
  144. package/locales/angular/global/en-cx.js +24 -0
  145. package/locales/angular/global/en-cy.js +24 -0
  146. package/locales/angular/global/en-de.js +24 -0
  147. package/locales/angular/global/en-dg.js +24 -0
  148. package/locales/angular/global/en-dk.js +24 -0
  149. package/locales/angular/global/en-dm.js +24 -0
  150. package/locales/angular/global/en-er.js +24 -0
  151. package/locales/angular/global/en-fi.js +24 -0
  152. package/locales/angular/global/en-fj.js +24 -0
  153. package/locales/angular/global/en-fk.js +24 -0
  154. package/locales/angular/global/en-fm.js +24 -0
  155. package/locales/angular/global/en-gb.js +24 -0
  156. package/locales/angular/global/en-gd.js +24 -0
  157. package/locales/angular/global/en-gg.js +24 -0
  158. package/locales/angular/global/en-gh.js +24 -0
  159. package/locales/angular/global/en-gi.js +24 -0
  160. package/locales/angular/global/en-gm.js +24 -0
  161. package/locales/angular/global/en-gu.js +24 -0
  162. package/locales/angular/global/en-gy.js +24 -0
  163. package/locales/angular/global/en-hk.js +24 -0
  164. package/locales/angular/global/en-ie.js +24 -0
  165. package/locales/angular/global/en-il.js +24 -0
  166. package/locales/angular/global/en-im.js +24 -0
  167. package/locales/angular/global/en-in.js +24 -0
  168. package/locales/angular/global/en-io.js +24 -0
  169. package/locales/angular/global/en-je.js +24 -0
  170. package/locales/angular/global/en-jm.js +24 -0
  171. package/locales/angular/global/en-ke.js +24 -0
  172. package/locales/angular/global/en-ki.js +24 -0
  173. package/locales/angular/global/en-kn.js +24 -0
  174. package/locales/angular/global/en-ky.js +24 -0
  175. package/locales/angular/global/en-lc.js +24 -0
  176. package/locales/angular/global/en-lr.js +24 -0
  177. package/locales/angular/global/en-ls.js +24 -0
  178. package/locales/angular/global/en-mg.js +24 -0
  179. package/locales/angular/global/en-mh.js +24 -0
  180. package/locales/angular/global/en-mo.js +24 -0
  181. package/locales/angular/global/en-mp.js +24 -0
  182. package/locales/angular/global/en-ms.js +24 -0
  183. package/locales/angular/global/en-mt.js +24 -0
  184. package/locales/angular/global/en-mu.js +24 -0
  185. package/locales/angular/global/en-mv.js +24 -0
  186. package/locales/angular/global/en-mw.js +24 -0
  187. package/locales/angular/global/en-my.js +24 -0
  188. package/locales/angular/global/en-na.js +24 -0
  189. package/locales/angular/global/en-nf.js +24 -0
  190. package/locales/angular/global/en-ng.js +24 -0
  191. package/locales/angular/global/en-nl.js +24 -0
  192. package/locales/angular/global/en-nr.js +24 -0
  193. package/locales/angular/global/en-nu.js +24 -0
  194. package/locales/angular/global/en-nz.js +24 -0
  195. package/locales/angular/global/en-pg.js +24 -0
  196. package/locales/angular/global/en-ph.js +24 -0
  197. package/locales/angular/global/en-pk.js +24 -0
  198. package/locales/angular/global/en-pn.js +24 -0
  199. package/locales/angular/global/en-pr.js +24 -0
  200. package/locales/angular/global/en-pw.js +24 -0
  201. package/locales/angular/global/en-rw.js +24 -0
  202. package/locales/angular/global/en-sb.js +24 -0
  203. package/locales/angular/global/en-sc.js +24 -0
  204. package/locales/angular/global/en-sd.js +24 -0
  205. package/locales/angular/global/en-se.js +24 -0
  206. package/locales/angular/global/en-sg.js +24 -0
  207. package/locales/angular/global/en-sh.js +24 -0
  208. package/locales/angular/global/en-si.js +24 -0
  209. package/locales/angular/global/en-sl.js +24 -0
  210. package/locales/angular/global/en-ss.js +24 -0
  211. package/locales/angular/global/en-sx.js +24 -0
  212. package/locales/angular/global/en-sz.js +24 -0
  213. package/locales/angular/global/en-tc.js +24 -0
  214. package/locales/angular/global/en-tk.js +24 -0
  215. package/locales/angular/global/en-to.js +24 -0
  216. package/locales/angular/global/en-tt.js +24 -0
  217. package/locales/angular/global/en-tv.js +24 -0
  218. package/locales/angular/global/en-tz.js +24 -0
  219. package/locales/angular/global/en-ug.js +24 -0
  220. package/locales/angular/global/en-um.js +24 -0
  221. package/locales/angular/global/en-vc.js +24 -0
  222. package/locales/angular/global/en-vg.js +24 -0
  223. package/locales/angular/global/en-vi.js +24 -0
  224. package/locales/angular/global/en-vu.js +24 -0
  225. package/locales/angular/global/en-ws.js +24 -0
  226. package/locales/angular/global/en-za.js +24 -0
  227. package/locales/angular/global/en-zm.js +24 -0
  228. package/locales/angular/global/en-zw.js +24 -0
  229. package/locales/angular/global/en.js +24 -0
  230. package/locales/angular/global/eo.js +24 -0
  231. package/locales/angular/global/es-419.js +26 -0
  232. package/locales/angular/global/es-ar.js +26 -0
  233. package/locales/angular/global/es-bo.js +26 -0
  234. package/locales/angular/global/es-br.js +26 -0
  235. package/locales/angular/global/es-bz.js +26 -0
  236. package/locales/angular/global/es-cl.js +26 -0
  237. package/locales/angular/global/es-co.js +26 -0
  238. package/locales/angular/global/es-cr.js +26 -0
  239. package/locales/angular/global/es-cu.js +26 -0
  240. package/locales/angular/global/es-do.js +26 -0
  241. package/locales/angular/global/es-ea.js +26 -0
  242. package/locales/angular/global/es-ec.js +26 -0
  243. package/locales/angular/global/es-gq.js +26 -0
  244. package/locales/angular/global/es-gt.js +26 -0
  245. package/locales/angular/global/es-hn.js +26 -0
  246. package/locales/angular/global/es-ic.js +26 -0
  247. package/locales/angular/global/es-mx.js +26 -0
  248. package/locales/angular/global/es-ni.js +26 -0
  249. package/locales/angular/global/es-pa.js +26 -0
  250. package/locales/angular/global/es-pe.js +26 -0
  251. package/locales/angular/global/es-ph.js +26 -0
  252. package/locales/angular/global/es-pr.js +26 -0
  253. package/locales/angular/global/es-py.js +26 -0
  254. package/locales/angular/global/es-sv.js +26 -0
  255. package/locales/angular/global/es-us.js +26 -0
  256. package/locales/angular/global/es-uy.js +26 -0
  257. package/locales/angular/global/es-ve.js +26 -0
  258. package/locales/angular/global/es.js +26 -0
  259. package/locales/angular/global/et.js +24 -0
  260. package/locales/angular/global/eu.js +24 -0
  261. package/locales/angular/global/ewo.js +22 -0
  262. package/locales/angular/global/fa-af.js +24 -0
  263. package/locales/angular/global/fa.js +24 -0
  264. package/locales/angular/global/ff-adlm-bf.js +22 -0
  265. package/locales/angular/global/ff-adlm-cm.js +22 -0
  266. package/locales/angular/global/ff-adlm-gh.js +22 -0
  267. package/locales/angular/global/ff-adlm-gm.js +22 -0
  268. package/locales/angular/global/ff-adlm-gw.js +22 -0
  269. package/locales/angular/global/ff-adlm-lr.js +22 -0
  270. package/locales/angular/global/ff-adlm-mr.js +22 -0
  271. package/locales/angular/global/ff-adlm-ne.js +22 -0
  272. package/locales/angular/global/ff-adlm-ng.js +22 -0
  273. package/locales/angular/global/ff-adlm-sl.js +22 -0
  274. package/locales/angular/global/ff-adlm-sn.js +22 -0
  275. package/locales/angular/global/ff-adlm.js +22 -0
  276. package/locales/angular/global/ff-cm.js +74 -0
  277. package/locales/angular/global/ff-gn.js +74 -0
  278. package/locales/angular/global/ff-latn-bf.js +24 -0
  279. package/locales/angular/global/ff-latn-cm.js +24 -0
  280. package/locales/angular/global/ff-latn-gh.js +24 -0
  281. package/locales/angular/global/ff-latn-gm.js +24 -0
  282. package/locales/angular/global/ff-latn-gn.js +24 -0
  283. package/locales/angular/global/ff-latn-gw.js +24 -0
  284. package/locales/angular/global/ff-latn-lr.js +24 -0
  285. package/locales/angular/global/ff-latn-mr.js +24 -0
  286. package/locales/angular/global/ff-latn-ne.js +24 -0
  287. package/locales/angular/global/ff-latn-ng.js +24 -0
  288. package/locales/angular/global/ff-latn-sl.js +24 -0
  289. package/locales/angular/global/ff-latn.js +24 -0
  290. package/locales/angular/global/ff-mr.js +74 -0
  291. package/locales/angular/global/ff.js +24 -0
  292. package/locales/angular/global/fi.js +24 -0
  293. package/locales/angular/global/fil.js +24 -0
  294. package/locales/angular/global/fo-dk.js +24 -0
  295. package/locales/angular/global/fo.js +24 -0
  296. package/locales/angular/global/fr-be.js +26 -0
  297. package/locales/angular/global/fr-bf.js +26 -0
  298. package/locales/angular/global/fr-bi.js +26 -0
  299. package/locales/angular/global/fr-bj.js +26 -0
  300. package/locales/angular/global/fr-bl.js +26 -0
  301. package/locales/angular/global/fr-ca.js +26 -0
  302. package/locales/angular/global/fr-cd.js +26 -0
  303. package/locales/angular/global/fr-cf.js +26 -0
  304. package/locales/angular/global/fr-cg.js +26 -0
  305. package/locales/angular/global/fr-ch.js +26 -0
  306. package/locales/angular/global/fr-ci.js +26 -0
  307. package/locales/angular/global/fr-cm.js +26 -0
  308. package/locales/angular/global/fr-dj.js +26 -0
  309. package/locales/angular/global/fr-dz.js +26 -0
  310. package/locales/angular/global/fr-ga.js +26 -0
  311. package/locales/angular/global/fr-gf.js +26 -0
  312. package/locales/angular/global/fr-gn.js +26 -0
  313. package/locales/angular/global/fr-gp.js +26 -0
  314. package/locales/angular/global/fr-gq.js +26 -0
  315. package/locales/angular/global/fr-ht.js +26 -0
  316. package/locales/angular/global/fr-km.js +26 -0
  317. package/locales/angular/global/fr-lu.js +26 -0
  318. package/locales/angular/global/fr-ma.js +26 -0
  319. package/locales/angular/global/fr-mc.js +26 -0
  320. package/locales/angular/global/fr-mf.js +26 -0
  321. package/locales/angular/global/fr-mg.js +26 -0
  322. package/locales/angular/global/fr-ml.js +26 -0
  323. package/locales/angular/global/fr-mq.js +26 -0
  324. package/locales/angular/global/fr-mr.js +26 -0
  325. package/locales/angular/global/fr-mu.js +26 -0
  326. package/locales/angular/global/fr-nc.js +26 -0
  327. package/locales/angular/global/fr-ne.js +26 -0
  328. package/locales/angular/global/fr-pf.js +26 -0
  329. package/locales/angular/global/fr-pm.js +26 -0
  330. package/locales/angular/global/fr-re.js +26 -0
  331. package/locales/angular/global/fr-rw.js +26 -0
  332. package/locales/angular/global/fr-sc.js +26 -0
  333. package/locales/angular/global/fr-sn.js +26 -0
  334. package/locales/angular/global/fr-sy.js +26 -0
  335. package/locales/angular/global/fr-td.js +26 -0
  336. package/locales/angular/global/fr-tg.js +26 -0
  337. package/locales/angular/global/fr-tn.js +26 -0
  338. package/locales/angular/global/fr-vu.js +26 -0
  339. package/locales/angular/global/fr-wf.js +26 -0
  340. package/locales/angular/global/fr-yt.js +26 -0
  341. package/locales/angular/global/fr.js +26 -0
  342. package/locales/angular/global/fur.js +24 -0
  343. package/locales/angular/global/fy.js +24 -0
  344. package/locales/angular/global/ga-gb.js +30 -0
  345. package/locales/angular/global/ga.js +30 -0
  346. package/locales/angular/global/gd.js +28 -0
  347. package/locales/angular/global/gl.js +24 -0
  348. package/locales/angular/global/gsw-fr.js +24 -0
  349. package/locales/angular/global/gsw-li.js +24 -0
  350. package/locales/angular/global/gsw.js +24 -0
  351. package/locales/angular/global/gu.js +24 -0
  352. package/locales/angular/global/guz.js +22 -0
  353. package/locales/angular/global/gv.js +30 -0
  354. package/locales/angular/global/ha-gh.js +24 -0
  355. package/locales/angular/global/ha-ne.js +24 -0
  356. package/locales/angular/global/ha.js +24 -0
  357. package/locales/angular/global/haw.js +24 -0
  358. package/locales/angular/global/he.js +28 -0
  359. package/locales/angular/global/hi-latn.js +24 -0
  360. package/locales/angular/global/hi.js +24 -0
  361. package/locales/angular/global/hr-ba.js +26 -0
  362. package/locales/angular/global/hr.js +26 -0
  363. package/locales/angular/global/hsb.js +28 -0
  364. package/locales/angular/global/hu.js +24 -0
  365. package/locales/angular/global/hy.js +24 -0
  366. package/locales/angular/global/ia.js +24 -0
  367. package/locales/angular/global/id.js +22 -0
  368. package/locales/angular/global/ig.js +22 -0
  369. package/locales/angular/global/ii.js +22 -0
  370. package/locales/angular/global/is.js +24 -0
  371. package/locales/angular/global/it-ch.js +26 -0
  372. package/locales/angular/global/it-sm.js +26 -0
  373. package/locales/angular/global/it-va.js +26 -0
  374. package/locales/angular/global/it.js +26 -0
  375. package/locales/angular/global/ja.js +22 -0
  376. package/locales/angular/global/jgo.js +24 -0
  377. package/locales/angular/global/jmc.js +24 -0
  378. package/locales/angular/global/jv.js +22 -0
  379. package/locales/angular/global/ka.js +24 -0
  380. package/locales/angular/global/kab.js +24 -0
  381. package/locales/angular/global/kam.js +22 -0
  382. package/locales/angular/global/kde.js +22 -0
  383. package/locales/angular/global/kea.js +22 -0
  384. package/locales/angular/global/kgp.js +22 -0
  385. package/locales/angular/global/khq.js +22 -0
  386. package/locales/angular/global/ki.js +22 -0
  387. package/locales/angular/global/kk.js +24 -0
  388. package/locales/angular/global/kkj.js +24 -0
  389. package/locales/angular/global/kl.js +24 -0
  390. package/locales/angular/global/kln.js +22 -0
  391. package/locales/angular/global/km.js +22 -0
  392. package/locales/angular/global/kn.js +24 -0
  393. package/locales/angular/global/ko-kp.js +22 -0
  394. package/locales/angular/global/ko.js +22 -0
  395. package/locales/angular/global/kok.js +22 -0
  396. package/locales/angular/global/ks-arab.js +24 -0
  397. package/locales/angular/global/ks-deva.js +22 -0
  398. package/locales/angular/global/ks.js +24 -0
  399. package/locales/angular/global/ksb.js +24 -0
  400. package/locales/angular/global/ksf.js +22 -0
  401. package/locales/angular/global/ksh.js +26 -0
  402. package/locales/angular/global/ku.js +24 -0
  403. package/locales/angular/global/kw.js +32 -0
  404. package/locales/angular/global/ky.js +24 -0
  405. package/locales/angular/global/lag.js +26 -0
  406. package/locales/angular/global/lb.js +24 -0
  407. package/locales/angular/global/lg.js +24 -0
  408. package/locales/angular/global/lkt.js +22 -0
  409. package/locales/angular/global/ln-ao.js +24 -0
  410. package/locales/angular/global/ln-cf.js +24 -0
  411. package/locales/angular/global/ln-cg.js +24 -0
  412. package/locales/angular/global/ln.js +24 -0
  413. package/locales/angular/global/lo.js +22 -0
  414. package/locales/angular/global/lrc-iq.js +22 -0
  415. package/locales/angular/global/lrc.js +22 -0
  416. package/locales/angular/global/lt.js +28 -0
  417. package/locales/angular/global/lu.js +22 -0
  418. package/locales/angular/global/luo.js +22 -0
  419. package/locales/angular/global/luy.js +22 -0
  420. package/locales/angular/global/lv.js +26 -0
  421. package/locales/angular/global/mai.js +22 -0
  422. package/locales/angular/global/mas-tz.js +24 -0
  423. package/locales/angular/global/mas.js +24 -0
  424. package/locales/angular/global/mer.js +22 -0
  425. package/locales/angular/global/mfe.js +22 -0
  426. package/locales/angular/global/mg.js +24 -0
  427. package/locales/angular/global/mgh.js +22 -0
  428. package/locales/angular/global/mgo.js +24 -0
  429. package/locales/angular/global/mi.js +22 -0
  430. package/locales/angular/global/mk.js +24 -0
  431. package/locales/angular/global/ml.js +24 -0
  432. package/locales/angular/global/mn.js +24 -0
  433. package/locales/angular/global/mni-beng.js +22 -0
  434. package/locales/angular/global/mni.js +22 -0
  435. package/locales/angular/global/mr.js +24 -0
  436. package/locales/angular/global/ms-bn.js +22 -0
  437. package/locales/angular/global/ms-id.js +22 -0
  438. package/locales/angular/global/ms-sg.js +22 -0
  439. package/locales/angular/global/ms.js +22 -0
  440. package/locales/angular/global/mt.js +28 -0
  441. package/locales/angular/global/mua.js +22 -0
  442. package/locales/angular/global/my.js +22 -0
  443. package/locales/angular/global/mzn.js +22 -0
  444. package/locales/angular/global/naq.js +26 -0
  445. package/locales/angular/global/nb-sj.js +24 -0
  446. package/locales/angular/global/nb.js +24 -0
  447. package/locales/angular/global/nd.js +24 -0
  448. package/locales/angular/global/nds-nl.js +22 -0
  449. package/locales/angular/global/nds.js +22 -0
  450. package/locales/angular/global/ne-in.js +24 -0
  451. package/locales/angular/global/ne.js +24 -0
  452. package/locales/angular/global/nl-aw.js +24 -0
  453. package/locales/angular/global/nl-be.js +24 -0
  454. package/locales/angular/global/nl-bq.js +24 -0
  455. package/locales/angular/global/nl-cw.js +24 -0
  456. package/locales/angular/global/nl-sr.js +24 -0
  457. package/locales/angular/global/nl-sx.js +24 -0
  458. package/locales/angular/global/nl.js +24 -0
  459. package/locales/angular/global/nmg.js +22 -0
  460. package/locales/angular/global/nn.js +24 -0
  461. package/locales/angular/global/nnh.js +24 -0
  462. package/locales/angular/global/no.js +24 -0
  463. package/locales/angular/global/nus.js +22 -0
  464. package/locales/angular/global/nyn.js +24 -0
  465. package/locales/angular/global/om-ke.js +24 -0
  466. package/locales/angular/global/om.js +24 -0
  467. package/locales/angular/global/or.js +24 -0
  468. package/locales/angular/global/os-ru.js +24 -0
  469. package/locales/angular/global/os.js +24 -0
  470. package/locales/angular/global/pa-arab.js +22 -0
  471. package/locales/angular/global/pa-guru.js +24 -0
  472. package/locales/angular/global/pa.js +24 -0
  473. package/locales/angular/global/pcm.js +24 -0
  474. package/locales/angular/global/pl.js +28 -0
  475. package/locales/angular/global/ps-pk.js +24 -0
  476. package/locales/angular/global/ps.js +24 -0
  477. package/locales/angular/global/pt-ao.js +26 -0
  478. package/locales/angular/global/pt-ch.js +26 -0
  479. package/locales/angular/global/pt-cv.js +26 -0
  480. package/locales/angular/global/pt-gq.js +26 -0
  481. package/locales/angular/global/pt-gw.js +26 -0
  482. package/locales/angular/global/pt-lu.js +26 -0
  483. package/locales/angular/global/pt-mo.js +26 -0
  484. package/locales/angular/global/pt-mz.js +26 -0
  485. package/locales/angular/global/pt-pt.js +26 -0
  486. package/locales/angular/global/pt-st.js +26 -0
  487. package/locales/angular/global/pt-tl.js +26 -0
  488. package/locales/angular/global/pt.js +26 -0
  489. package/locales/angular/global/qu-bo.js +22 -0
  490. package/locales/angular/global/qu-ec.js +22 -0
  491. package/locales/angular/global/qu.js +22 -0
  492. package/locales/angular/global/rm.js +24 -0
  493. package/locales/angular/global/rn.js +22 -0
  494. package/locales/angular/global/ro-md.js +26 -0
  495. package/locales/angular/global/ro.js +26 -0
  496. package/locales/angular/global/rof.js +24 -0
  497. package/locales/angular/global/ru-by.js +28 -0
  498. package/locales/angular/global/ru-kg.js +28 -0
  499. package/locales/angular/global/ru-kz.js +28 -0
  500. package/locales/angular/global/ru-md.js +28 -0
  501. package/locales/angular/global/ru-ua.js +28 -0
  502. package/locales/angular/global/ru.js +28 -0
  503. package/locales/angular/global/rw.js +22 -0
  504. package/locales/angular/global/rwk.js +24 -0
  505. package/locales/angular/global/sa.js +22 -0
  506. package/locales/angular/global/sah.js +22 -0
  507. package/locales/angular/global/saq.js +24 -0
  508. package/locales/angular/global/sat-olck.js +26 -0
  509. package/locales/angular/global/sat.js +26 -0
  510. package/locales/angular/global/sbp.js +22 -0
  511. package/locales/angular/global/sc.js +24 -0
  512. package/locales/angular/global/sd-arab.js +24 -0
  513. package/locales/angular/global/sd-deva.js +22 -0
  514. package/locales/angular/global/sd.js +24 -0
  515. package/locales/angular/global/se-fi.js +26 -0
  516. package/locales/angular/global/se-se.js +26 -0
  517. package/locales/angular/global/se.js +26 -0
  518. package/locales/angular/global/seh.js +24 -0
  519. package/locales/angular/global/ses.js +22 -0
  520. package/locales/angular/global/sg.js +22 -0
  521. package/locales/angular/global/shi-latn.js +22 -0
  522. package/locales/angular/global/shi-tfng.js +26 -0
  523. package/locales/angular/global/shi.js +26 -0
  524. package/locales/angular/global/si.js +24 -0
  525. package/locales/angular/global/sk.js +28 -0
  526. package/locales/angular/global/sl.js +28 -0
  527. package/locales/angular/global/smn.js +26 -0
  528. package/locales/angular/global/sn.js +24 -0
  529. package/locales/angular/global/so-dj.js +24 -0
  530. package/locales/angular/global/so-et.js +24 -0
  531. package/locales/angular/global/so-ke.js +24 -0
  532. package/locales/angular/global/so.js +24 -0
  533. package/locales/angular/global/sq-mk.js +24 -0
  534. package/locales/angular/global/sq-xk.js +24 -0
  535. package/locales/angular/global/sq.js +24 -0
  536. package/locales/angular/global/sr-cyrl-ba.js +26 -0
  537. package/locales/angular/global/sr-cyrl-me.js +26 -0
  538. package/locales/angular/global/sr-cyrl-xk.js +26 -0
  539. package/locales/angular/global/sr-cyrl.js +26 -0
  540. package/locales/angular/global/sr-latn-ba.js +22 -0
  541. package/locales/angular/global/sr-latn-me.js +22 -0
  542. package/locales/angular/global/sr-latn-xk.js +22 -0
  543. package/locales/angular/global/sr-latn.js +22 -0
  544. package/locales/angular/global/sr.js +26 -0
  545. package/locales/angular/global/su-latn.js +22 -0
  546. package/locales/angular/global/su.js +22 -0
  547. package/locales/angular/global/sv-ax.js +24 -0
  548. package/locales/angular/global/sv-fi.js +24 -0
  549. package/locales/angular/global/sv.js +24 -0
  550. package/locales/angular/global/sw-cd.js +24 -0
  551. package/locales/angular/global/sw-ke.js +24 -0
  552. package/locales/angular/global/sw-ug.js +24 -0
  553. package/locales/angular/global/sw.js +24 -0
  554. package/locales/angular/global/ta-lk.js +24 -0
  555. package/locales/angular/global/ta-my.js +24 -0
  556. package/locales/angular/global/ta-sg.js +24 -0
  557. package/locales/angular/global/ta.js +24 -0
  558. package/locales/angular/global/te.js +24 -0
  559. package/locales/angular/global/teo-ke.js +24 -0
  560. package/locales/angular/global/teo.js +24 -0
  561. package/locales/angular/global/tg.js +22 -0
  562. package/locales/angular/global/th.js +22 -0
  563. package/locales/angular/global/ti-er.js +24 -0
  564. package/locales/angular/global/ti.js +24 -0
  565. package/locales/angular/global/tk.js +24 -0
  566. package/locales/angular/global/to.js +22 -0
  567. package/locales/angular/global/tr-cy.js +24 -0
  568. package/locales/angular/global/tr.js +24 -0
  569. package/locales/angular/global/tt.js +22 -0
  570. package/locales/angular/global/twq.js +22 -0
  571. package/locales/angular/global/tzm.js +24 -0
  572. package/locales/angular/global/ug.js +24 -0
  573. package/locales/angular/global/uk.js +28 -0
  574. package/locales/angular/global/und.js +24 -0
  575. package/locales/angular/global/ur-in.js +24 -0
  576. package/locales/angular/global/ur.js +24 -0
  577. package/locales/angular/global/uz-arab.js +22 -0
  578. package/locales/angular/global/uz-cyrl.js +22 -0
  579. package/locales/angular/global/uz-latn.js +24 -0
  580. package/locales/angular/global/uz.js +24 -0
  581. package/locales/angular/global/vai-latn.js +22 -0
  582. package/locales/angular/global/vai-vaii.js +22 -0
  583. package/locales/angular/global/vai.js +22 -0
  584. package/locales/angular/global/vi.js +22 -0
  585. package/locales/angular/global/vun.js +24 -0
  586. package/locales/angular/global/wae.js +24 -0
  587. package/locales/angular/global/wo.js +22 -0
  588. package/locales/angular/global/xh.js +24 -0
  589. package/locales/angular/global/xog.js +24 -0
  590. package/locales/angular/global/yav.js +22 -0
  591. package/locales/angular/global/yi.js +24 -0
  592. package/locales/angular/global/yo-bj.js +22 -0
  593. package/locales/angular/global/yo.js +22 -0
  594. package/locales/angular/global/yrl-co.js +22 -0
  595. package/locales/angular/global/yrl-ve.js +22 -0
  596. package/locales/angular/global/yrl.js +22 -0
  597. package/locales/angular/global/yue-hans.js +22 -0
  598. package/locales/angular/global/yue-hant.js +22 -0
  599. package/locales/angular/global/yue.js +22 -0
  600. package/locales/angular/global/zgh.js +22 -0
  601. package/locales/angular/global/zh-hans-hk.js +22 -0
  602. package/locales/angular/global/zh-hans-mo.js +22 -0
  603. package/locales/angular/global/zh-hans-sg.js +22 -0
  604. package/locales/angular/global/zh-hans.js +22 -0
  605. package/locales/angular/global/zh-hant-hk.js +22 -0
  606. package/locales/angular/global/zh-hant-mo.js +22 -0
  607. package/locales/angular/global/zh-hant.js +22 -0
  608. package/locales/angular/global/zh.js +22 -0
  609. package/locales/angular/global/zu.js +24 -0
  610. package/locales/fullcalendar/af.js +27 -0
  611. package/locales/fullcalendar/ar-dz.js +28 -0
  612. package/locales/fullcalendar/ar-kw.js +28 -0
  613. package/locales/fullcalendar/ar-ly.js +28 -0
  614. package/locales/fullcalendar/ar-ma.js +28 -0
  615. package/locales/fullcalendar/ar-sa.js +28 -0
  616. package/locales/fullcalendar/ar-tn.js +28 -0
  617. package/locales/fullcalendar/ar.js +28 -0
  618. package/locales/fullcalendar/az.js +29 -0
  619. package/locales/fullcalendar/bg.js +28 -0
  620. package/locales/fullcalendar/bs.js +29 -0
  621. package/locales/fullcalendar/ca.js +27 -0
  622. package/locales/fullcalendar/cs.js +29 -0
  623. package/locales/fullcalendar/da.js +27 -0
  624. package/locales/fullcalendar/de.js +30 -0
  625. package/locales/fullcalendar/el.js +27 -0
  626. package/locales/fullcalendar/en-au.js +14 -0
  627. package/locales/fullcalendar/en-gb.js +14 -0
  628. package/locales/fullcalendar/en-nz.js +14 -0
  629. package/locales/fullcalendar/es-us.js +27 -0
  630. package/locales/fullcalendar/es.js +27 -0
  631. package/locales/fullcalendar/et.js +29 -0
  632. package/locales/fullcalendar/eu.js +27 -0
  633. package/locales/fullcalendar/fa.js +30 -0
  634. package/locales/fullcalendar/fi.js +27 -0
  635. package/locales/fullcalendar/fr-ca.js +24 -0
  636. package/locales/fullcalendar/fr-ch.js +28 -0
  637. package/locales/fullcalendar/fr.js +28 -0
  638. package/locales/fullcalendar/gl.js +27 -0
  639. package/locales/fullcalendar/he.js +24 -0
  640. package/locales/fullcalendar/hi.js +29 -0
  641. package/locales/fullcalendar/hr.js +29 -0
  642. package/locales/fullcalendar/hu.js +27 -0
  643. package/locales/fullcalendar/id.js +27 -0
  644. package/locales/fullcalendar/is.js +27 -0
  645. package/locales/fullcalendar/it.js +29 -0
  646. package/locales/fullcalendar/ja.js +25 -0
  647. package/locales/fullcalendar/ka.js +29 -0
  648. package/locales/fullcalendar/kk.js +29 -0
  649. package/locales/fullcalendar/ko.js +23 -0
  650. package/locales/fullcalendar/lb.js +27 -0
  651. package/locales/fullcalendar/lt.js +27 -0
  652. package/locales/fullcalendar/lv.js +29 -0
  653. package/locales/fullcalendar/mk.js +25 -0
  654. package/locales/fullcalendar/ms.js +29 -0
  655. package/locales/fullcalendar/nb.js +27 -0
  656. package/locales/fullcalendar/ne.js +27 -0
  657. package/locales/fullcalendar/nl.js +27 -0
  658. package/locales/fullcalendar/nn.js +27 -0
  659. package/locales/fullcalendar/pl.js +27 -0
  660. package/locales/fullcalendar/pt-br.js +25 -0
  661. package/locales/fullcalendar/pt.js +27 -0
  662. package/locales/fullcalendar/ro.js +29 -0
  663. package/locales/fullcalendar/ru.js +29 -0
  664. package/locales/fullcalendar/sk.js +29 -0
  665. package/locales/fullcalendar/sl.js +27 -0
  666. package/locales/fullcalendar/sq.js +29 -0
  667. package/locales/fullcalendar/sr-cyrl.js +29 -0
  668. package/locales/fullcalendar/sr.js +29 -0
  669. package/locales/fullcalendar/sv.js +27 -0
  670. package/locales/fullcalendar/th.js +30 -0
  671. package/locales/fullcalendar/tr.js +27 -0
  672. package/locales/fullcalendar/ug.js +17 -0
  673. package/locales/fullcalendar/uk.js +29 -0
  674. package/locales/fullcalendar/uz.js +21 -0
  675. package/locales/fullcalendar/vi.js +29 -0
  676. package/locales/fullcalendar/zh-cn.js +30 -0
  677. package/locales/fullcalendar/zh-tw.js +23 -0
  678. package/locales/moment/af.js +82 -0
  679. package/locales/moment/ar-dz.js +167 -0
  680. package/locales/moment/ar-kw.js +66 -0
  681. package/locales/moment/ar-ly.js +182 -0
  682. package/locales/moment/ar-ma.js +67 -0
  683. package/locales/moment/ar-sa.js +116 -0
  684. package/locales/moment/ar-tn.js +66 -0
  685. package/locales/moment/ar.js +200 -0
  686. package/locales/moment/az.js +113 -0
  687. package/locales/moment/be.js +153 -0
  688. package/locales/moment/bg.js +98 -0
  689. package/locales/moment/bm.js +62 -0
  690. package/locales/moment/bn-bd.js +140 -0
  691. package/locales/moment/bn.js +130 -0
  692. package/locales/moment/bo.js +135 -0
  693. package/locales/moment/br.js +179 -0
  694. package/locales/moment/bs.js +161 -0
  695. package/locales/moment/ca.js +111 -0
  696. package/locales/moment/cs.js +191 -0
  697. package/locales/moment/cv.js +74 -0
  698. package/locales/moment/cy.js +109 -0
  699. package/locales/moment/da.js +64 -0
  700. package/locales/moment/de-at.js +90 -0
  701. package/locales/moment/de-ch.js +87 -0
  702. package/locales/moment/de.js +89 -0
  703. package/locales/moment/dv.js +101 -0
  704. package/locales/moment/el.js +117 -0
  705. package/locales/moment/en-au.js +79 -0
  706. package/locales/moment/en-ca.js +75 -0
  707. package/locales/moment/en-gb.js +79 -0
  708. package/locales/moment/en-ie.js +79 -0
  709. package/locales/moment/en-il.js +75 -0
  710. package/locales/moment/en-in.js +79 -0
  711. package/locales/moment/en-nz.js +79 -0
  712. package/locales/moment/en-sg.js +79 -0
  713. package/locales/moment/eo.js +79 -0
  714. package/locales/moment/es-do.js +119 -0
  715. package/locales/moment/es-mx.js +121 -0
  716. package/locales/moment/es-us.js +121 -0
  717. package/locales/moment/es.js +121 -0
  718. package/locales/moment/et.js +89 -0
  719. package/locales/moment/eu.js +76 -0
  720. package/locales/moment/fa.js +124 -0
  721. package/locales/moment/fi.js +135 -0
  722. package/locales/moment/fil.js +69 -0
  723. package/locales/moment/fo.js +68 -0
  724. package/locales/moment/fr-ca.js +81 -0
  725. package/locales/moment/fr-ch.js +85 -0
  726. package/locales/moment/fr.js +119 -0
  727. package/locales/moment/fy.js +86 -0
  728. package/locales/moment/ga.js +106 -0
  729. package/locales/moment/gd.js +106 -0
  730. package/locales/moment/gl.js +86 -0
  731. package/locales/moment/gom-deva.js +137 -0
  732. package/locales/moment/gom-latn.js +135 -0
  733. package/locales/moment/gu.js +133 -0
  734. package/locales/moment/he.js +105 -0
  735. package/locales/moment/hi.js +179 -0
  736. package/locales/moment/hr.js +167 -0
  737. package/locales/moment/hu.js +129 -0
  738. package/locales/moment/hy-am.js +105 -0
  739. package/locales/moment/id.js +87 -0
  740. package/locales/moment/is.js +151 -0
  741. package/locales/moment/it-ch.js +75 -0
  742. package/locales/moment/it.js +117 -0
  743. package/locales/moment/ja.js +159 -0
  744. package/locales/moment/jv.js +87 -0
  745. package/locales/moment/ka.js +103 -0
  746. package/locales/moment/kk.js +93 -0
  747. package/locales/moment/km.js +114 -0
  748. package/locales/moment/kn.js +135 -0
  749. package/locales/moment/ko.js +86 -0
  750. package/locales/moment/ku.js +129 -0
  751. package/locales/moment/ky.js +95 -0
  752. package/locales/moment/lb.js +148 -0
  753. package/locales/moment/lo.js +77 -0
  754. package/locales/moment/lt.js +136 -0
  755. package/locales/moment/lv.js +105 -0
  756. package/locales/moment/me.js +128 -0
  757. package/locales/moment/mi.js +71 -0
  758. package/locales/moment/mk.js +97 -0
  759. package/locales/moment/ml.js +93 -0
  760. package/locales/moment/mn.js +111 -0
  761. package/locales/moment/mr.js +214 -0
  762. package/locales/moment/ms-my.js +87 -0
  763. package/locales/moment/ms.js +86 -0
  764. package/locales/moment/mt.js +67 -0
  765. package/locales/moment/my.js +102 -0
  766. package/locales/moment/nb.js +71 -0
  767. package/locales/moment/ne.js +132 -0
  768. package/locales/moment/nl-be.js +113 -0
  769. package/locales/moment/nl.js +115 -0
  770. package/locales/moment/nn.js +70 -0
  771. package/locales/moment/oc-lnc.js +96 -0
  772. package/locales/moment/pa-in.js +133 -0
  773. package/locales/moment/pl.js +151 -0
  774. package/locales/moment/pt-br.js +69 -0
  775. package/locales/moment/pt.js +74 -0
  776. package/locales/moment/ro.js +87 -0
  777. package/locales/moment/ru.js +224 -0
  778. package/locales/moment/sd.js +92 -0
  779. package/locales/moment/se.js +68 -0
  780. package/locales/moment/si.js +80 -0
  781. package/locales/moment/sk.js +156 -0
  782. package/locales/moment/sl.js +182 -0
  783. package/locales/moment/sq.js +76 -0
  784. package/locales/moment/sr-cyrl.js +138 -0
  785. package/locales/moment/sr.js +140 -0
  786. package/locales/moment/ss.js +95 -0
  787. package/locales/moment/sv.js +79 -0
  788. package/locales/moment/sw.js +66 -0
  789. package/locales/moment/ta.js +142 -0
  790. package/locales/moment/te.js +99 -0
  791. package/locales/moment/tet.js +79 -0
  792. package/locales/moment/tg.js +128 -0
  793. package/locales/moment/th.js +76 -0
  794. package/locales/moment/tk.js +102 -0
  795. package/locales/moment/tl-ph.js +68 -0
  796. package/locales/moment/tlh.js +135 -0
  797. package/locales/moment/tr.js +117 -0
  798. package/locales/moment/tzl.js +100 -0
  799. package/locales/moment/tzm-latn.js +65 -0
  800. package/locales/moment/tzm.js +65 -0
  801. package/locales/moment/ug-cn.js +122 -0
  802. package/locales/moment/uk.js +178 -0
  803. package/locales/moment/ur.js +93 -0
  804. package/locales/moment/uz-latn.js +65 -0
  805. package/locales/moment/uz.js +62 -0
  806. package/locales/moment/vi.js +91 -0
  807. package/locales/moment/x-pseudo.js +84 -0
  808. package/locales/moment/yo.js +64 -0
  809. package/locales/moment/zh-cn.js +131 -0
  810. package/locales/moment/zh-hk.js +112 -0
  811. package/locales/moment/zh-mo.js +111 -0
  812. package/locales/moment/zh-tw.js +110 -0
  813. package/locales/moment-timezone/moment-timezone-with-data.js +1581 -0
  814. package/mobile/components/containers/segmented-control/bundles/index.umd.js +1 -1
  815. package/npm-shrinkwrap.json +2 -2
  816. package/package-lock.json +2 -2
  817. package/package.json +1 -1
  818. package/runtime/base/bundles/index.umd.js +20 -9
  819. package/runtime/base/esm2022/services/app.manager.service.mjs +13 -8
  820. package/runtime/base/esm2022/services/http-interceptor.services.mjs +9 -3
  821. package/runtime/base/fesm2022/index.mjs +20 -9
  822. package/runtime/base/fesm2022/index.mjs.map +1 -1
  823. package/runtime/base/services/app.manager.service.d.ts +1 -1
  824. package/runtime/base/services/http-interceptor.services.d.ts +1 -0
  825. package/scripts/datatable/datatable.js +3 -0
  826. package/variables/bundles/index.umd.js +1 -1
  827. package/variables/esm2022/service/metadata-service/metadata.service.mjs +2 -2
  828. package/variables/fesm2022/index.mjs +1 -1
  829. package/variables/fesm2022/index.mjs.map +1 -1
@@ -140,7 +140,7 @@
140
140
  };
141
141
  this.currentSelectedIndex = index;
142
142
  this.invokeEventCallback('beforesegmentchange', eventData);
143
- core.setCSS(this._$container[0], 'transform', `translate3d(${-1 * index / this.contents.length * 100}%, 0, 0)`);
143
+ core.setCSS(this._$container[0], 'transform', `translate3d(${ -1 * index / this.contents.length * 100}%, 0, 0)`);
144
144
  this.invokeEventCallback('segmentchange', eventData);
145
145
  }
146
146
  static { this.ɵfac = function SegmentedControlComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SegmentedControlComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.10.0-next.25079",
3
+ "version": "11.10.0-next.27705",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@wavemaker/app-ng-runtime",
9
- "version": "11.10.0-next.25079",
9
+ "version": "11.10.0-next.27705",
10
10
  "license": "MIT",
11
11
  "engines": {
12
12
  "node": ">=18.16.1",
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.10.0-next.25079",
3
+ "version": "11.10.0-next.27705",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@wavemaker/app-ng-runtime",
9
- "version": "11.10.0-next.25079",
9
+ "version": "11.10.0-next.27705",
10
10
  "license": "MIT",
11
11
  "engines": {
12
12
  "node": ">=18.16.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.10.0-next.25079",
3
+ "version": "11.10.0-next.27705",
4
4
  "description": "All modules required for a WaveMaker application.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -239,9 +239,9 @@
239
239
  updateSupportedLocaleVariable() {
240
240
  lodashEs.get(this.$app, 'Variables.supportedLocale');
241
241
  }
242
- handleSSOLogin(config) {
242
+ handleSSOLogin(config, options) {
243
243
  const SSO_URL = 'services/security/ssologin', PREVIEW_WINDOW_NAME = 'WM_PREVIEW_WINDOW';
244
- let page, pageParams;
244
+ let page, queryParams;
245
245
  // do not provide redirectTo page if fetching HOME page resulted 401
246
246
  // on app load, by default Home page is loaded
247
247
  page = this.$security.getRedirectPage(config);
@@ -262,12 +262,17 @@
262
262
  }
263
263
  else {
264
264
  page = page ? '?redirectPage=' + encodeURIComponent(page) : '';
265
- pageParams = this.$security.getQueryString(this.$security.getRedirectedRouteQueryParams());
266
- pageParams = pageParams ? '?' + pageParams : '';
265
+ /*
266
+ * For preview, this.$security.getRedirectedRouteQueryParams() gets the queryparams form the activated route(pagewrappercomponent)
267
+ * For deployed app, canactivate guard resolved to false and gets the queryparams from the canactivate gurard(no active route component)
268
+ */
269
+ queryParams = (options && options.queryParams) || this.$security.getRedirectedRouteQueryParams();
270
+ queryParams = this.$security.getQueryString(queryParams);
271
+ queryParams = queryParams ? '?' + queryParams : '';
267
272
  // showing a redirecting message
268
273
  document.body.textContent = lodashEs.get(this.getAppLocale(), ['MESSAGE_LOGIN_REDIRECTION']) || 'Redirecting to sso login...';
269
274
  // appending redirect to page and page params
270
- const ssoUrl = this.getDeployedURL() + SSO_URL + page + pageParams;
275
+ const ssoUrl = this.getDeployedURL() + SSO_URL + page + queryParams;
271
276
  /*
272
277
  * remove iFrame when redirected to IdP login page.
273
278
  * this is being done as IDPs do not allow to get themselves loaded into iFrames.
@@ -337,7 +342,7 @@
337
342
  }
338
343
  break;
339
344
  case LOGIN_METHOD.SSO:
340
- this.handleSSOLogin(config);
345
+ this.handleSSOLogin(config, options);
341
346
  break;
342
347
  }
343
348
  this.setLandingPage();
@@ -363,7 +368,7 @@
363
368
  this.$app.landingPageName = loginConfig.pageName;
364
369
  break;
365
370
  case LOGIN_METHOD.SSO:
366
- this.handleSSOLogin(config);
371
+ this.handleSSOLogin(config, options);
367
372
  break;
368
373
  }
369
374
  }
@@ -4188,11 +4193,17 @@
4188
4193
  createSubject() {
4189
4194
  return new rxjs.Subject();
4190
4195
  }
4196
+ isAbsoluteUrl(url) {
4197
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(url);
4198
+ }
4191
4199
  intercept(request, next) {
4192
4200
  let modifiedReq;
4193
4201
  let modifiedResp;
4194
- let isServicesUrl = request.url.indexOf("services/") !== -1 || request.url.indexOf("j_spring_security_check") !== -1;
4195
- if (isServicesUrl) {
4202
+ let isRelativeAPIUrl = false;
4203
+ if (!this.isAbsoluteUrl(request.url)) {
4204
+ isRelativeAPIUrl = request.url.indexOf("services/") !== -1 || request.url.indexOf("j_spring_security_check") !== -1;
4205
+ }
4206
+ if (isRelativeAPIUrl) {
4196
4207
  let apiUrl = i1._WM_APP_PROJECT.apiUrl + request.url;
4197
4208
  request = request.clone({ url: apiUrl });
4198
4209
  }
@@ -189,9 +189,9 @@ export class AppManagerService {
189
189
  updateSupportedLocaleVariable() {
190
190
  const supportedLocaleVar = get(this.$app, 'Variables.supportedLocale');
191
191
  }
192
- handleSSOLogin(config) {
192
+ handleSSOLogin(config, options) {
193
193
  const SSO_URL = 'services/security/ssologin', PREVIEW_WINDOW_NAME = 'WM_PREVIEW_WINDOW';
194
- let page, pageParams;
194
+ let page, queryParams;
195
195
  // do not provide redirectTo page if fetching HOME page resulted 401
196
196
  // on app load, by default Home page is loaded
197
197
  page = this.$security.getRedirectPage(config);
@@ -212,12 +212,17 @@ export class AppManagerService {
212
212
  }
213
213
  else {
214
214
  page = page ? '?redirectPage=' + encodeURIComponent(page) : '';
215
- pageParams = this.$security.getQueryString(this.$security.getRedirectedRouteQueryParams());
216
- pageParams = pageParams ? '?' + pageParams : '';
215
+ /*
216
+ * For preview, this.$security.getRedirectedRouteQueryParams() gets the queryparams form the activated route(pagewrappercomponent)
217
+ * For deployed app, canactivate guard resolved to false and gets the queryparams from the canactivate gurard(no active route component)
218
+ */
219
+ queryParams = (options && options.queryParams) || this.$security.getRedirectedRouteQueryParams();
220
+ queryParams = this.$security.getQueryString(queryParams);
221
+ queryParams = queryParams ? '?' + queryParams : '';
217
222
  // showing a redirecting message
218
223
  document.body.textContent = get(this.getAppLocale(), ['MESSAGE_LOGIN_REDIRECTION']) || 'Redirecting to sso login...';
219
224
  // appending redirect to page and page params
220
- const ssoUrl = this.getDeployedURL() + SSO_URL + page + pageParams;
225
+ const ssoUrl = this.getDeployedURL() + SSO_URL + page + queryParams;
221
226
  /*
222
227
  * remove iFrame when redirected to IdP login page.
223
228
  * this is being done as IDPs do not allow to get themselves loaded into iFrames.
@@ -287,7 +292,7 @@ export class AppManagerService {
287
292
  }
288
293
  break;
289
294
  case LOGIN_METHOD.SSO:
290
- this.handleSSOLogin(config);
295
+ this.handleSSOLogin(config, options);
291
296
  break;
292
297
  }
293
298
  this.setLandingPage();
@@ -313,7 +318,7 @@ export class AppManagerService {
313
318
  this.$app.landingPageName = loginConfig.pageName;
314
319
  break;
315
320
  case LOGIN_METHOD.SSO:
316
- this.handleSSOLogin(config);
321
+ this.handleSSOLogin(config, options);
317
322
  break;
318
323
  }
319
324
  }
@@ -484,4 +489,4 @@ export class AppManagerService {
484
489
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppManagerService, [{
485
490
  type: Injectable
486
491
  }], () => [{ type: i1.AbstractHttpService }, { type: i2.SecurityService }, { type: i1.AbstractDialogService }, { type: i3.Router }, { type: i1.App }, { type: i4.VariablesService }, { type: i4.MetadataService }, { type: i1.AbstractSpinnerService }, { type: i1.AbstractI18nService }, { type: i5.DatePipe }], null); })();
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvYXBwLm1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixHQUFHLEVBQ0gsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFHLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7OztBQUU1RixJQUFLLGFBT0o7QUFQRCxXQUFLLGFBQWE7SUFDZCxzRUFBcUQsQ0FBQTtJQUNyRCxzRUFBcUQsQ0FBQTtJQUNyRCx5REFBaUQsQ0FBQTtJQUNqRCxvREFBNEMsQ0FBQTtJQUM1QyxpRUFBbUQsQ0FBQTtJQUNuRCxvQ0FBb0MsQ0FBQTtBQUN4QyxDQUFDLEVBUEksYUFBYSxLQUFiLGFBQWEsUUFPakI7QUFHRCxNQUFNLE9BQU8saUJBQWlCO2FBQ1YsaUJBQVksR0FBRyxtQkFBbUIsQUFBdEIsQ0FB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SyxhQUFhLENBQUMsZUFBZTtvQkFDOUIsYUFBYTtvQkFDYixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDekMsTUFBTTtZQUNkLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLEtBQUssRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN6QyxDQUFDO0lBQ0wsQ0FBQztrSEFyZ0JRLGlCQUFpQjt1RUFBakIsaUJBQWlCLFdBQWpCLGlCQUFpQjs7aUZBQWpCLGlCQUFpQjtjQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgICBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgQWJzdHJhY3RIdHRwU2VydmljZSxcbiAgICBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgIEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgQXBwLFxuICAgIGZldGNoQ29udGVudCxcbiAgICBpc0RlZmluZWQsXG4gICAgdHJpZ2dlckZuLFxuICAgICRhcHBEaWdlc3Rcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcbmltcG9ydCB7IENPTlNUQU5UUywgJHJvb3RTY29wZSwgcm91dGVyU2VydmljZSwgIE1ldGFkYXRhU2VydmljZSwgVmFyaWFibGVzU2VydmljZSB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHtleHRlbmQsIGZvckVhY2gsIGdldCwgaXNFbXB0eSwgaXNPYmplY3QsIGlzVW5kZWZpbmVkLCBtZXJnZSwgdHJpbX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5lbnVtIFBPU1RfTUVTU0FHRVMge1xuICAgIEhJREVfVEVNUExBVEVTX1NIT1dfQ0FTRSA9ICdoaWRlLXRlbXBsYXRlcy1zaG93LWNhc2UnLFxuICAgIFNIT1dfVEVNUExBVEVTX1NIT1dfQ0FTRSA9ICdzaG93LXRlbXBsYXRlcy1zaG93LWNhc2UnLFxuICAgIFVQREFURV9MT0NBVElPTiAgICAgICAgICA9ICd1cGRhdGUtbG9jYXRpb24tcGF0aCcsXG4gICAgU0VMRUNUX1RFTVBMQVRFICAgICAgICAgID0gJ3NlbGVjdC10ZW1wbGF0ZScsXG4gICAgVEVNUExBVEVCVU5ETEVfQ09ORklHICAgID0gJ3RlbXBsYXRlLWJ1bmRsZS1jb25maWcnLFxuICAgIE9OX0xPQUQgICAgICAgICAgICAgICAgICA9ICdvbi1sb2FkJ1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwTWFuYWdlclNlcnZpY2Uge1xuICAgIHN0YXRpYyByZWFkb25seSBTRVJWSUNFX05BTUUgPSAnQXBwTWFuYWdlclNlcnZpY2UnO1xuXG4gICAgcHJpdmF0ZSBhcHBWYXJpYWJsZXNMb2FkZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGFwcFZhcmlhYmxlc0ZpcmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbm9SZWRpcmVjdCA9IGZhbHNlO1xuICAgIHByaXZhdGUgdGVtcGxhdGVzOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgbGFzdExvZ2dlZFVzZXJJZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlICRodHRwOiBBYnN0cmFjdEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRzZWN1cml0eTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRkaWFsb2c6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSAkcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgJGFwcDogQXBwLFxuICAgICAgICBwcml2YXRlICR2YXJpYWJsZXM6IFZhcmlhYmxlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgJG1ldGFkYXRhOiBNZXRhZGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgJHNwaW5uZXI6IEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgJGkxOG46IEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgJGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICApIHtcbiAgICAgICAgLy8gcmVnaXN0ZXIgbWV0aG9kIHRvIGludm9rZSBvbiBzZXNzaW9uIHRpbWVvdXRcbiAgICAgICAgdGhpcy4kaHR0cC5yZWdpc3Rlck9uU2Vzc2lvblRpbWVvdXQodGhpcy5oYW5kbGU0MDEuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGhpcy4kdmFyaWFibGVzLnJlZ2lzdGVyRGVwZW5kZW5jeSgnYXBwTWFuYWdlcicsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuJGFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGRhdGEudmFyaWFibGUsXG4gICAgICAgICAgICAgICAgYWN0aXZlID0gZGF0YS5hY3RpdmU7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkodHJpbSh2YXJpYWJsZS5zcGlubmVyQ29udGV4dCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3Bpbm5lckV4aXN0cztcbiAgICAgICAgICAgICAgICAgICAgLy8gV01TLTIxMTE3IDogRG8gbm90IHRyaWdnZXIgc3Bpbm5lciwgaWYgdGhlIGN1cnJlbnQgdmFyaWFibGUgaXMgc2FtZSBhcyBzcGlubmVyIHdoaWNoIGlzIGluIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLl9zcGlubmVySWQgJiYgdmFyaWFibGUuX3NwaW5uZXJJZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2godmFyaWFibGUuX3NwaW5uZXJJZCwgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5zbGljZSgwLCBpdGVtLmxhc3RJbmRleE9mKCdfJykpID09PSB2YXJpYWJsZS5faWQgJiYgKHRoaXMuJHNwaW5uZXIgYXMgYW55KS5tZXNzYWdlc0J5Q29udGV4dCAmJiAodGhpcy4kc3Bpbm5lciBhcyBhbnkpLm1lc3NhZ2VzQnlDb250ZXh0W3ZhcmlhYmxlLnNwaW5uZXJDb250ZXh0XSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFyaWFibGUuc3Bpbm5lck1lc3NhZ2UgPT09ICh0aGlzLiRzcGlubmVyIGFzIGFueSkubWVzc2FnZXNCeUNvbnRleHRbdmFyaWFibGUuc3Bpbm5lckNvbnRleHRdW1wiZmluYWxNZXNzYWdlXCJdIHx8IHZhcmlhYmxlLnNwaW5uZXJNZXNzYWdlID09PSAodGhpcy4kc3Bpbm5lciBhcyBhbnkpLm1lc3NhZ2VzQnlDb250ZXh0W3ZhcmlhYmxlLnNwaW5uZXJDb250ZXh0XVtpdGVtXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbm5lckV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaW5uZXJFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLl9zcGlubmVySWQgPSB2YXJpYWJsZS5fc3Bpbm5lcklkIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Bpbm5lcklkID0gdGhpcy4kc3Bpbm5lci5zaG93KHZhcmlhYmxlLnNwaW5uZXJNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLl9pZCArICdfJyArIERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuc3Bpbm5lcmNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLnNwaW5uZXJDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLl9zcGlubmVySWQucHVzaChzcGlubmVySWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc3Bpbm5lci5oaWRlKHZhcmlhYmxlLl9zcGlubmVySWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4kYXBwLnN1YnNjcmliZSgndXNlckxvZ2dlZEluJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRMYW5kaW5nUGFnZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubGFzdExvZ2dlZFVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHNlY3VyaXR5LmdldENvbmZpZyhjb25maWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihjb25maWcgJiYgY29uZmlnLnVzZXJJbmZvLnVzZXJJZCAhPT0gdGhpcy5sYXN0TG9nZ2VkVXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRhcHAuY2xlYXJQYWdlQ2FjaGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4kYXBwLnN1YnNjcmliZSgndXNlckxvZ2dlZE91dCcsICgpID0+IHRoaXMuc2V0TGFuZGluZ1BhZ2UoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuJGFwcC5jbGVhclBhZ2VDYWNoZSgpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuJGFwcC5zdWJzY3JpYmUoJ2h0dHA0MDEnLCAoZCA9IHt9KSA9PiB0aGlzLmhhbmRsZTQwMShkLnBhZ2UsIGQub3B0aW9ucykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIHNlc3Npb24gdGltZW91dCwgaWYgdGhlIHNlc3Npb24gdGltZW91dCBjb25maWcgaXMgc2V0IHRvIGEgZGlhbG9nLCB0aGVuIG9wZW4gbG9naW4gZGlhbG9nXG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG93TG9naW5EaWFsb2coKSB7XG4gICAgICAgIHRoaXMuJHNwaW5uZXIuaGlkZSgnZ2xvYmFsU3Bpbm5lcicpO1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgY2xvc2UgYWxsIGRpYWxvZ3MgY2FsbCwgc28gdGhlIGV4aXN0aW5nIGRpYWxvZ3MgcmVtYWluIG9wZW4gYW5kXG4gICAgICAgIC8vIHRoZSBsb2dpbiBkaWFsb2cgY29tZXMgb24gdG9wIG9mIGl0LlxuICAgICAgICB0aGlzLiRkaWFsb2cub3BlbignQ29tbW9uTG9naW5EaWFsb2cnKTtcbiAgICAgICAgLy8gU2luY2UgdGhlIGxvZ2luIGRpYWxvZyBpcyBjbG9zZWQgYW5kIG9wZW5lZCBpdHMgdXBkYXRlZCBwcm9wZXJ0eSBpc24ndCByZWFkIGJ5IGFuZ3VsYXIuXG4gICAgICAgIC8vIEhlbmNlIHdlIHRyaWdnZXIgdGhlIGRpZ2VzdCBjeWNsZVxuICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgfVxuXG4gICAgbG9hZEFwcEpTKCkge1xuXG4gICAgfVxuXG4gICAgbG9hZENvbW1vblBhZ2UoKSB7XG5cbiAgICB9XG5cbiAgICBsb2FkU2VjdXJpdHlDb25maWcoZm9yY2VGbGFnPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdGhpcy4kc2VjdXJpdHkubG9hZChmb3JjZUZsYWcpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy4kYXBwLmxhbmRpbmdQYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFuZGluZ1BhZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkTWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRtZXRhZGF0YS5sb2FkKCk7XG4gICAgfVxuXG4gICAgbG9hZEFwcFZhcmlhYmxlcyh2YXJpYWJsZXM/OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBwVmFyaWFibGVzTG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbml0ID0gcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuJHZhcmlhYmxlcy5yZWdpc3RlcignYXBwJywgcmVzcG9uc2UsIHRoaXMuJGFwcCk7XG4gICAgICAgICAgICAvLyBub3QgYXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuJGFwcCB0byBrZWVwIHRoZSByZWZlcmVuY2UgaW4gdGFjdFxuICAgICAgICAgICAgZXh0ZW5kKHRoaXMuJGFwcC5WYXJpYWJsZXMsIGRhdGEuVmFyaWFibGVzKTtcbiAgICAgICAgICAgIGV4dGVuZCh0aGlzLiRhcHAuQWN0aW9ucywgZGF0YS5BY3Rpb25zKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9nZ2VkSW5Vc2VyVmFyaWFibGUoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3VwcG9ydGVkTG9jYWxlVmFyaWFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwVmFyaWFibGVzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYXBwVmFyaWFibGVzRmlyZWQgPSBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGluaXQodmFyaWFibGVzKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCgnLi9hcHAudmFyaWFibGVzLmpzb24nKS50aGVuKHJlc3BvbnNlID0+IGluaXQocmVzcG9uc2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXR0ZXIgYW5kIHNldHRlciBmb3IgdGhlIHByb3BlcnR5IGFwcFZhcmlhYmxlc0ZpcmVkXG4gICAgICogdGhpcyBmbGFnIGRldGVybWluZXMgaWYgdGhlIGFwcCB2YXJpYWJsZXMod2l0aCBzdGFydFVwZGF0ZTp0cnVlKSBoYXZlIGJlZW4gZmlyZWRcbiAgICAgKiB0aGV5IHNob3VsZCBnZXQgZmlyZWQgb25seSBvbmNlIHRocm91Z2ggYXBwIGxpZmVjeWNsZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGaXJlZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzQXBwVmFyaWFibGVzRmlyZWQoaXNGaXJlZD86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZChpc0ZpcmVkKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBWYXJpYWJsZXNGaXJlZCA9IGlzRmlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwVmFyaWFibGVzRmlyZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckxvZ2dlZEluVXNlclZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgICAgIHZhcmlhYmxlLmlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgICB2YXJpYWJsZS5yb2xlcyAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdmFyaWFibGUubmFtZSAgICAgICAgICAgID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXJpYWJsZS5pZCAgICAgICAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhcmlhYmxlLnRlbmFudElkICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvZ2dlZEluVXNlclZhcmlhYmxlKCkge1xuICAgICAgICBjb25zdCBsb2dnZWRJblVzZXIgPSBnZXQodGhpcy4kYXBwLCAnVmFyaWFibGVzLmxvZ2dlZEluVXNlci5kYXRhU2V0Jyk7XG5cbiAgICAgICAgLy8gc2FuaXR5IGNoZWNrXG4gICAgICAgIGlmICghbG9nZ2VkSW5Vc2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlY3VyaXR5LmxvYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3VyaXR5Q29uZmlnID0gdGhpcy4kc2VjdXJpdHkuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoc2VjdXJpdHlDb25maWcgJiYgc2VjdXJpdHlDb25maWcuc2VjdXJpdHlFbmFibGVkICYmIHNlY3VyaXR5Q29uZmlnLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIuaXNBdXRoZW50aWNhdGVkID0gc2VjdXJpdHlDb25maWcuYXV0aGVudGljYXRlZDtcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIucm9sZXMgICAgICAgICAgID0gc2VjdXJpdHlDb25maWcudXNlckluZm8udXNlclJvbGVzO1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci5uYW1lICAgICAgICAgICAgPSBzZWN1cml0eUNvbmZpZy51c2VySW5mby51c2VyTmFtZTtcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIuaWQgICAgICAgICAgICAgID0gc2VjdXJpdHlDb25maWcudXNlckluZm8udXNlcklkO1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci50ZW5hbnRJZCAgICAgICAgPSBzZWN1cml0eUNvbmZpZy51c2VySW5mby50ZW5hbnRJZDtcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIudXNlckF0dHJpYnV0ZXMgID0gc2VjdXJpdHlDb25maWcudXNlckluZm8udXNlckF0dHJpYnV0ZXM7IC8vIGFzc2lnbiB0aGUgZXh0cmEgdXNlckF0dHJpYnV0ZXMgZm9yIGN1c3RvbSB1c2FnZS5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckxvZ2dlZEluVXNlclZhcmlhYmxlKGxvZ2dlZEluVXNlcik7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlzU2VjdXJpdHlFbmFibGVkID0gc2VjdXJpdHlDb25maWcgJiYgc2VjdXJpdHlDb25maWcuc2VjdXJpdHlFbmFibGVkO1xuICAgICAgICAgICAgICAgIHRocm93IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VjdXJpdHlDb25maWc7XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBsb2dnZWRJblVzZXIuaXNBdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsb2dnZWRJblVzZXIucm9sZXMgICAgICAgICAgID0gW107XG4gICAgICAgICAgICBsb2dnZWRJblVzZXIubmFtZSAgICAgICAgICAgID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlkICAgICAgICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlci50ZW5hbnRJZCAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsb2dnZWRJblVzZXIudXNlckF0dHJpYnV0ZXMgID0ge307XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRpbmcgdGhlIGFwcCB2YXJpYWJsZSBzdXBwb3J0ZWQgbG9jYWxlIHdpdGggdGhlIHdtUHJvcGVydGllcyBpMThuIERhdGFWYWx1ZXNcbiAgICAgKlxuICAgICAqIFRPRE9bVmliaHVdOlxuICAgICAqIENhbiB3cml0ZSBhIHNpbXBsZSBtaWdyYXRpb24gdG8gc3luYyB0aGUgc3VwcG9ydGVkTG9jYWxlIHZhcmlhYmxlIHdpdGggJ19XTV9BUFBfUFJPUEVSVElFUy5zdXBwb3J0ZWRMYW5ndWFnZXMnXG4gICAgICogSGVuY2UsIHRoaXMgbWF5IG5vdCBiZSByZXF1aXJlZFxuICAgICAqXG4gICAgICovXG4gICAgdXBkYXRlU3VwcG9ydGVkTG9jYWxlVmFyaWFibGUoKSB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZExvY2FsZVZhciA9IGdldCh0aGlzLiRhcHAsICdWYXJpYWJsZXMuc3VwcG9ydGVkTG9jYWxlJyk7XG4gICAgfVxuXG4gICAgaGFuZGxlU1NPTG9naW4oY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IFNTT19VUkwgPSAnc2VydmljZXMvc2VjdXJpdHkvc3NvbG9naW4nLFxuICAgICAgICAgICAgUFJFVklFV19XSU5ET1dfTkFNRSA9ICdXTV9QUkVWSUVXX1dJTkRPVyc7XG4gICAgICAgIGxldCBwYWdlLFxuICAgICAgICAgICAgcGFnZVBhcmFtcztcblxuICAgICAgICAvLyBkbyBub3QgcHJvdmlkZSByZWRpcmVjdFRvIHBhZ2UgaWYgZmV0Y2hpbmcgSE9NRSBwYWdlIHJlc3VsdGVkIDQwMVxuICAgICAgICAvLyBvbiBhcHAgbG9hZCwgYnkgZGVmYXVsdCBIb21lIHBhZ2UgaXMgbG9hZGVkXG4gICAgICAgIHBhZ2UgPSB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdFBhZ2UoY29uZmlnKTtcblxuICAgICAgICBpZiAoQ09OU1RBTlRTLmhhc0NvcmRvdmEpIHtcbiAgICAgICAgICAgIC8vIGdldCBwcmV2aW91c2x5IGxvZ2dlZEluVXNlciBuYW1lIChpZiBhbnkpXG4gICAgICAgICAgICBjb25zdCBsYXN0TG9nZ2VkSW5Vc2VybmFtZSA9IGdldCh0aGlzLiRzZWN1cml0eS5nZXQoKSwgJ3VzZXJJbmZvLnVzZXJOYW1lJyk7XG4gICAgICAgICAgICB0aGlzLiRzZWN1cml0eS5hdXRoSW5Ccm93c2VyKClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnJlbG9hZEFwcERhdGEoKSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXNlbnRMb2dnZWRJblVzZXJuYW1lID0gZ2V0KHRoaXMuJHNlY3VyaXR5LmdldCgpLCAndXNlckluZm8udXNlck5hbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlbnRMb2dnZWRJblVzZXJuYW1lICYmIHByZXNlbnRMb2dnZWRJblVzZXJuYW1lID09PSBsYXN0TG9nZ2VkSW5Vc2VybmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyU2VydmljZS5uYXZpZ2F0ZShbcGFnZV0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyU2VydmljZS5uYXZpZ2F0ZShbYC9gXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhZ2UgPSBwYWdlID8gJz9yZWRpcmVjdFBhZ2U9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYWdlKSA6ICcnO1xuICAgICAgICAgICAgcGFnZVBhcmFtcyA9IHRoaXMuJHNlY3VyaXR5LmdldFF1ZXJ5U3RyaW5nKHRoaXMuJHNlY3VyaXR5LmdldFJlZGlyZWN0ZWRSb3V0ZVF1ZXJ5UGFyYW1zKCkpO1xuICAgICAgICAgICAgcGFnZVBhcmFtcyA9IHBhZ2VQYXJhbXMgPyAnPycgKyBwYWdlUGFyYW1zIDogJyc7XG4gICAgICAgICAgICAvLyBzaG93aW5nIGEgcmVkaXJlY3RpbmcgbWVzc2FnZVxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCA9IGdldCh0aGlzLmdldEFwcExvY2FsZSgpLCBbJ01FU1NBR0VfTE9HSU5fUkVESVJFQ1RJT04nXSkgfHwgJ1JlZGlyZWN0aW5nIHRvIHNzbyBsb2dpbi4uLic7XG4gICAgICAgICAgICAvLyBhcHBlbmRpbmcgcmVkaXJlY3QgdG8gcGFnZSBhbmQgcGFnZSBwYXJhbXNcbiAgICAgICAgICAgIGNvbnN0IHNzb1VybCA9IHRoaXMuZ2V0RGVwbG95ZWRVUkwoKSArIFNTT19VUkwgKyBwYWdlICsgcGFnZVBhcmFtcztcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiByZW1vdmUgaUZyYW1lIHdoZW4gcmVkaXJlY3RlZCB0byBJZFAgbG9naW4gcGFnZS5cbiAgICAgICAgICAgICAqIHRoaXMgaXMgYmVpbmcgZG9uZSBhcyBJRFBzIGRvIG5vdCBhbGxvdyB0byBnZXQgdGhlbXNlbHZlcyBsb2FkZWQgaW50byBpRnJhbWVzLlxuICAgICAgICAgICAgICogcmVtb3ZlLXRvb2xiYXIgaGFzIGJlZW4gYXNzaWduZWQgd2l0aCBhIHdpbmRvdyBuYW1lIFdNX1BSRVZJRVdfV0lORE9XLCBjaGVjayBpZiB0aGUgaWZyYW1lIGlzIG91ciB0b29sYmFyIHJlbGF0ZWQgYW5kXG4gICAgICAgICAgICAgKiBzYWZlbHkgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyZW50IHRvb2xiYXIgd2l0aCBjdXJyZW50IHVybC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5wYXJlbnQgJiYgd2luZG93LmxvY2F0aW9uLm9yaWdpbiA9PT0gd2luZG93LnBhcmVudC5vcmlnaW4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LnBhcmVudC5uYW1lID09PSBQUkVWSUVXX1dJTkRPV19OQU1FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5sb2NhdGlvbi5ocmVmID0gd2luZG93LnNlbGYubG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50Lm5hbWUgPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNzb1VybFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBzc29Vcmw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNzb1VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGFwcCB3aGVuIGEgWEhSIHJlcXVlc3QgcmV0dXJucyA0MDEgcmVzcG9uc2VcbiAgICAgKiBJZiBubyB1c2VyIHdhcyBsb2dnZWQgaW4gYmVmb3JlIDQwMSBvY2N1cnJlZCwgRmlyc3QgdGltZSBMb2dpbiBpcyBzaW11bGF0ZWRcbiAgICAgKiBFbHNlLCBhIHNlc3Npb24gdGltZW91dCBoYXMgb2NjdXJyZWQgYW5kIHRoZSBzYW1lIGlzIHNpbXVsYXRlZFxuICAgICAqIEBwYXJhbSBwYWdlICBpZiBwcm92aWRlZCwgcmVwcmVzZW50cyB0aGUgcGFnZSBuYW1lIGZvciB3aGljaCBYSFIgcmVxdWVzdCByZXR1cm5lZCA0MDEsIG9uIHJlLWxvZ2luXG4gICAgICogICAgICAgICAgICAgIGlmIG5vdCBwcm92aWRlZCwgYSBzZXJ2aWNlIHJlcXVlc3QgcmV0dXJuZWQgNDAxXG4gICAgICogQHBhcmFtIG9uU3VjY2VzcyBzdWNjZXNzIGhhbmRsZXJcbiAgICAgKiBAcGFyYW0gb25FcnJvciBlcnJvciBoYW5kbGVyXG4gICAgICovXG4gICAgaGFuZGxlNDAxKHBhZ2U/LCBvcHRpb25zPykge1xuICAgICAgICBsZXQgc2Vzc2lvblRpbWVvdXRDb25maWcsXG4gICAgICAgICAgICBzZXNzaW9uVGltZW91dE1ldGhvZCxcbiAgICAgICAgICAgIGxvZ2luQ29uZmlnLFxuICAgICAgICAgICAgbG9naW5NZXRob2Q7XG4gICAgICAgIGNvbnN0IExPR0lOX01FVEhPRCA9IHtcbiAgICAgICAgICAgICAgICAnRElBTE9HJyA6ICdESUFMT0cnLFxuICAgICAgICAgICAgICAgICdQQUdFJyAgIDogJ1BBR0UnLFxuICAgICAgICAgICAgICAgICdTU08nICAgIDogJ1NTTydcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy4kc2VjdXJpdHkuZ2V0KCk7XG4gICAgICAgIGxldCBxdWVyeVBhcmFtc09iaiA9IHt9O1xuICAgICAgICBsb2dpbkNvbmZpZyA9IGNvbmZpZy5sb2dpbkNvbmZpZztcbiAgICAgICAgdGhpcy5sYXN0TG9nZ2VkVXNlcklkID0gY29uZmlnLnVzZXJJbmZvICYmIGNvbmZpZy51c2VySW5mby51c2VySWQ7XG4gICAgICAgIC8vIGlmIHVzZXIgZm91bmQsIDQwMSB3YXMgdGhyb3duIGFmdGVyIHNlc3Npb24gdGltZVxuICAgICAgICBpZiAoY29uZmlnLnVzZXJJbmZvICYmIGNvbmZpZy51c2VySW5mby51c2VyTmFtZSkge1xuICAgICAgICAgICAgY29uZmlnLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlc3Npb25UaW1lb3V0Q29uZmlnID0gbG9naW5Db25maWcuc2Vzc2lvblRpbWVvdXQgfHwgeyd0eXBlJzogTE9HSU5fTUVUSE9ELkRJQUxPR307XG4gICAgICAgICAgICBzZXNzaW9uVGltZW91dE1ldGhvZCA9IHNlc3Npb25UaW1lb3V0Q29uZmlnLnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc2Vzc2lvblRpbWVvdXRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5ESUFMT0c6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvZ2luRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlBBR0U6XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSA9IHRoaXMuJHNlY3VyaXR5LmdldEN1cnJlbnRSb3V0ZVBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc09ialsncmVkaXJlY3RUbyddID0gcGFnZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIHF1ZXJ5IHBhcmFtcyhwYWdlIHBhcmFtcyBvZiBwYWdlIGJlaW5nIHJlZGlyZWN0ZWQgdG8pIHRvIHRoZSBVUkwuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zT2JqID0gbWVyZ2UocXVlcnlQYXJhbXNPYmosIHRoaXMuJHNlY3VyaXR5LmdldFJlZGlyZWN0ZWRSb3V0ZVF1ZXJ5UGFyYW1zKCkpO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcmVkaXJlY3QgcGFnZSBzaG91bGQgbm90IGJlIHNhbWUgYXMgc2Vzc2lvbiB0aW1lb3V0IGxvZ2luIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBwYWdlICE9PSBzZXNzaW9uVGltZW91dENvbmZpZy5wYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLm5hdmlnYXRlKFtzZXNzaW9uVGltZW91dENvbmZpZy5wYWdlTmFtZV0sIHtxdWVyeVBhcmFtczogcXVlcnlQYXJhbXNPYmp9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5TU086XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU1NPTG9naW4oY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldExhbmRpbmdQYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiBubyB1c2VyIGZvdW5kLCA0MDEgd2FzIHRocm93biBmb3IgZmlyc3QgdGltZSBsb2dpblxuICAgICAgICAgICAgbG9naW5NZXRob2QgPSBsb2dpbkNvbmZpZy50eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGxvZ2luTWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBMT0dJTl9NRVRIT0QuRElBTE9HOlxuICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdWdoIGxvZ2luRGlhbG9nLCB1c2VyIHdpbGwgcmVtYWluIGluIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBmYWlsZWQgY2FsbHMgd2lsbCBiZSBleGVjdXRlZCBwb3N0IGxvZ2luIHRocm91Z2ggTG9naW5WYXJpYWJsZVNlcnZpY2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHJlc3BlY3RpdmUgbGFuZGluZyBwYWdlIG9ubHkgaWYgZGlhbG9nIGlzIG9wZW5lZCBtYW51YWxseShub3QgdGhyb3VnaCBhIGZhaWxlZCA0MDEgY2FsbCkuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9SZWRpcmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TG9naW5EaWFsb2coKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBMT0dJTl9NRVRIT0QuUEFHRTpcbiAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IHByb3ZpZGUgcmVkaXJlY3RUbyBwYWdlIGlmIGZldGNoaW5nIEhPTUUgcGFnZSByZXN1bHRlZCA0MDFcbiAgICAgICAgICAgICAgICAgICAgLy8gb24gYXBwIGxvYWQsIGJ5IGRlZmF1bHQgSG9tZSBwYWdlIGlzIGxvYWRlZFxuICAgICAgICAgICAgICAgICAgICBwYWdlID0gdGhpcy4kc2VjdXJpdHkuZ2V0UmVkaXJlY3RQYWdlKGNvbmZpZywgcGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zT2JqWydyZWRpcmVjdFRvJ10gPSBwYWdlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYVF1ZXJ5UGFyYW1zID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5xdWVyeVBhcmFtcykgfHwgdGhpcy4kc2VjdXJpdHkuZ2V0UmVkaXJlY3RlZFJvdXRlUXVlcnlQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNPYmogPSBtZXJnZShxdWVyeVBhcmFtc09iaiwgZXh0cmFRdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5uYXZpZ2F0ZShbbG9naW5Db25maWcucGFnZU5hbWVdLCB7cXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zT2JqfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGFwcC5sYW5kaW5nUGFnZU5hbWUgPSBsb2dpbkNvbmZpZy5wYWdlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBMT0dJTl9NRVRIT0QuU1NPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNTT0xvZ2luKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBkYXRhIGRlcGVuZGVudCBvbiBsb2dnZWQgaW4gdXNlclxuICAgICAqIFJlbG9hZHMgc2VjdXJpdHkgY29uZmlnLCBtZXRhZGF0YVxuICAgICAqIFVwZGF0ZXMgdGhlIGxvZ2dlZEluVXNlclZhcmlhYmxlXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgcmVsb2FkQXBwRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNlY3VyaXR5Q29uZmlnKHRydWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZE1ldGFkYXRhKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTG9nZ2VkSW5Vc2VyVmFyaWFibGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBub1JlZGlyZWN0KHZhbHVlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9SZWRpcmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX25vUmVkaXJlY3QgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vUmVkaXJlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlcyBzZXNzaW9uIGZhaWx1cmUgcmVxdWVzdHNcbiAgICAgKi9cbiAgICBleGVjdXRlU2Vzc2lvbkZhaWx1cmVSZXF1ZXN0cygpIHtcbiAgICAgICAgdGhpcy4kaHR0cC5leGVjdXRlU2Vzc2lvbkZhaWx1cmVSZXF1ZXN0cygpO1xuICAgIH1cblxuICAgIHB1c2hUb1Nlc3Npb25GYWlsdXJlUmVxdWVzdHMoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy4kaHR0cC5wdXNoVG9TZXNzaW9uRmFpbHVyZVF1ZXVlKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVwbG95ZWRVUkwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuZGVwbG95ZWRVcmwgPyB0aGlzLiRhcHAuZGVwbG95ZWRVcmwgOiAkcm9vdFNjb3BlLnByb2plY3QuZGVwbG95ZWRVcmw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyB0aGUgY3VzdG9tdXJsc2NoZW1lIGZvciBhIG1vYmlsZSBhcHBcbiAgICAgKiB3aGljaCBpcyB1c2VkIGZvciByZWRpcmVjdGlvbiBiYWNrIHRvIHRoZSBhcHAgZnJvbSBicm93c2VyIGluIGltcGxpY2l0IG9BdXRoIGZsb3dcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDdXN0b21VcmxTY2hlbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuY3VzdG9tVXJsU2NoZW1lO1xuICAgIH1cblxuICAgIG5vdGlmeShldmVudE5hbWUsIGRhdGEpIHtcbiAgICAgICAgdGhpcy4kYXBwLm5vdGlmeShldmVudE5hbWUsIGRhdGEpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShldmVudE5hbWUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5zdWJzY3JpYmUoZXZlbnROYW1lLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVQYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLmFjdGl2ZVBhZ2U7XG4gICAgfVxuXG4gICAgZ2V0QXBwTG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLmFwcExvY2FsZTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGkxOG4uZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICB9XG5cbiAgICBub3RpZnlBcHAodGVtcGxhdGUsIHR5cGUsIHRpdGxlPykge1xuICAgICAgICB0aGlzLiRhcHAubm90aWZ5QXBwKHRlbXBsYXRlLCB0eXBlLCB0aXRsZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgdGhlIG9uQmVmb3JlU2VydmljZSBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1zXG4gICAgICovXG4gICAgYXBwT25CZWZvcmVTZXJ2aWNlQ2FsbChyZXF1ZXN0UGFyYW1zOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25CZWZvcmVTZXJ2aWNlQ2FsbCwgcmVxdWVzdFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgdGhlIG9uU2VydmljZVN1Y2Nlc3MgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSB4aHJPYmpcbiAgICAgKi9cbiAgICBhcHBPblNlcnZpY2VTdWNjZXNzKGRhdGE6IGFueSwgeGhyT2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25TZXJ2aWNlU3VjY2VzcywgZGF0YSwgeGhyT2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25TZXJ2aWNlRXJyb3IgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSB4aHJPYlxuICAgICAqL1xuICAgIGFwcE9uU2VydmljZUVycm9yKGRhdGE6IGFueSwgeGhyT2I/OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25TZXJ2aWNlRXJyb3IsIGRhdGEsIHhock9iKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgYXBwVmFyaWFibGVzUmVhZHkgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKi9cbiAgICBhcHBWYXJpYWJsZXNSZWFkeSgpIHtcbiAgICAgICAgdHJpZ2dlckZuKHRoaXMuJGFwcC5vbkFwcFZhcmlhYmxlc1JlYWR5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25CZWZvcmVBcHBSZWFkeSBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqL1xuICAgIGJlZm9yZUFwcFJlYWR5KCkge1xuICAgICAgICB0cmlnZ2VyRm4odGhpcy4kYXBwLm9uQmVmb3JlQXBwUmVhZHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBpcGUgYmFzZWQgb24gdGhlIGlucHV0XG4gICAgICovXG4gICAgZ2V0UGlwZShwaXBlKSB7XG4gICAgICAgIGlmIChwaXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRlUGlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFuZGluZ1BhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWN1cml0eS5nZXRQYWdlQnlMb2dnZWRJblVzZXIoKS50aGVuKHAgPT4gdGhpcy4kYXBwLmxhbmRpbmdQYWdlTmFtZSA9IDxzdHJpbmc+IHApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0cnVlIGlmIHByZWZhYiB0eXBlIGFwcFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUHJlZmFiVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5pc1ByZWZhYlR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRydWUgaWYgdGVtcGxhdGUgYnVuZGxlIHR5cGUgYXBwXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNUZW1wbGF0ZUJ1bmRsZVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuaXNUZW1wbGF0ZUJ1bmRsZVR5cGU7XG4gICAgfVxuXG4gICAgcG9zdE1lc3NhZ2UoY29udGVudCkge1xuICAgICAgICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKGNvbnRlbnQsICcqJyk7XG4gICAgfVxuXG4gICAgc2hvd1RlbXBsYXRlKGlkeCkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2lkeF07XG4gICAgICAgIC8vIHNjb3BlLmFjdGl2ZVRlbXBsYXRlSW5kZXggPSBpZHg7XG4gICAgICAgIHRoaXMuJHJvdXRlci5uYXZpZ2F0ZShbdGVtcGxhdGUuaWRdKTtcbiAgICB9XG4gICAgcG9zdFRlbXBsYXRlQnVuZGxlSW5mbygpIHtcblxuICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnRGF0YSA9IGV2dC5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoIWlzT2JqZWN0KG1zZ0RhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBtc2dEYXRhLmtleTtcblxuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFBPU1RfTUVTU0FHRVMuSElERV9URU1QTEFURVNfU0hPV19DQVNFOlxuICAgICAgICAgICAgICAgICAgICAvLyBzY29wZS5oaWRlU2hvd0Nhc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBPU1RfTUVTU0FHRVMuU0VMRUNUX1RFTVBMQVRFOlxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RlbXBsYXRlKG1zZ0RhdGEudGVtcGxhdGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSh7a2V5OiBQT1NUX01FU1NBR0VTLk9OX0xPQUR9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZldGNoQ29udGVudCgnanNvbicsICcuL2NvbmZpZy5qc29uJywgdHJ1ZSwgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHJlc3BvbnNlLnRlbXBsYXRlcztcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHsna2V5JzogUE9TVF9NRVNTQUdFUy5URU1QTEFURUJVTkRMRV9DT05GSUcsICdjb25maWcnOiByZXNwb25zZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0QXBwVHlwZUluZm8oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVCdW5kbGVUeXBlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RUZW1wbGF0ZUJ1bmRsZUluZm8oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
492
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvYXBwLm1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixHQUFHLEVBQ0gsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFHLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7OztBQUU1RixJQUFLLGFBT0o7QUFQRCxXQUFLLGFBQWE7SUFDZCxzRUFBcUQsQ0FBQTtJQUNyRCxzRUFBcUQsQ0FBQTtJQUNyRCx5REFBaUQsQ0FBQTtJQUNqRCxvREFBNEMsQ0FBQTtJQUM1QyxpRUFBbUQsQ0FBQTtJQUNuRCxvQ0FBb0MsQ0FBQTtBQUN4QyxDQUFDLEVBUEksYUFBYSxLQUFiLGFBQWEsUUFPakI7QUFHRCxNQUFNLE9BQU8saUJBQWlCO2FBQ1YsaUJBQVksR0FBRyxtQkFBbUIsQUFBdEIsQ0FB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ci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7XG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgIEFwcCxcbiAgICBmZXRjaENvbnRlbnQsXG4gICAgaXNEZWZpbmVkLFxuICAgIHRyaWdnZXJGbixcbiAgICAkYXBwRGlnZXN0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5pbXBvcnQgeyBDT05TVEFOVFMsICRyb290U2NvcGUsIHJvdXRlclNlcnZpY2UsICBNZXRhZGF0YVNlcnZpY2UsIFZhcmlhYmxlc1NlcnZpY2UgfSBmcm9tICdAd20vdmFyaWFibGVzJztcbmltcG9ydCB7ZXh0ZW5kLCBmb3JFYWNoLCBnZXQsIGlzRW1wdHksIGlzT2JqZWN0LCBpc1VuZGVmaW5lZCwgbWVyZ2UsIHRyaW19IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZW51bSBQT1NUX01FU1NBR0VTIHtcbiAgICBISURFX1RFTVBMQVRFU19TSE9XX0NBU0UgPSAnaGlkZS10ZW1wbGF0ZXMtc2hvdy1jYXNlJyxcbiAgICBTSE9XX1RFTVBMQVRFU19TSE9XX0NBU0UgPSAnc2hvdy10ZW1wbGF0ZXMtc2hvdy1jYXNlJyxcbiAgICBVUERBVEVfTE9DQVRJT04gICAgICAgICAgPSAndXBkYXRlLWxvY2F0aW9uLXBhdGgnLFxuICAgIFNFTEVDVF9URU1QTEFURSAgICAgICAgICA9ICdzZWxlY3QtdGVtcGxhdGUnLFxuICAgIFRFTVBMQVRFQlVORExFX0NPTkZJRyAgICA9ICd0ZW1wbGF0ZS1idW5kbGUtY29uZmlnJyxcbiAgICBPTl9MT0FEICAgICAgICAgICAgICAgICAgPSAnb24tbG9hZCdcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcE1hbmFnZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgU0VSVklDRV9OQU1FID0gJ0FwcE1hbmFnZXJTZXJ2aWNlJztcblxuICAgIHByaXZhdGUgYXBwVmFyaWFibGVzTG9hZGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhcHBWYXJpYWJsZXNGaXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX25vUmVkaXJlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIHRlbXBsYXRlczogQXJyYXk8YW55PjtcbiAgICBwcml2YXRlIGxhc3RMb2dnZWRVc2VySWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSAkaHR0cDogQWJzdHJhY3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSAkc2VjdXJpdHk6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSAkZGlhbG9nOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgJHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlICRhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSAkdmFyaWFibGVzOiBWYXJpYWJsZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRtZXRhZGF0YTogTWV0YWRhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRzcGlubmVyOiBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRpMThuOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgKSB7XG4gICAgICAgIC8vIHJlZ2lzdGVyIG1ldGhvZCB0byBpbnZva2Ugb24gc2Vzc2lvbiB0aW1lb3V0XG4gICAgICAgIHRoaXMuJGh0dHAucmVnaXN0ZXJPblNlc3Npb25UaW1lb3V0KHRoaXMuaGFuZGxlNDAxLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuJHZhcmlhYmxlcy5yZWdpc3RlckRlcGVuZGVuY3koJ2FwcE1hbmFnZXInLCB0aGlzKTtcblxuICAgICAgICB0aGlzLiRhcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBkYXRhLnZhcmlhYmxlLFxuICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHRyaW0odmFyaWFibGUuc3Bpbm5lckNvbnRleHQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwaW5uZXJFeGlzdHM7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdNUy0yMTExNyA6IERvIG5vdCB0cmlnZ2VyIHNwaW5uZXIsIGlmIHRoZSBjdXJyZW50IHZhcmlhYmxlIGlzIHNhbWUgYXMgc3Bpbm5lciB3aGljaCBpcyBpbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS5fc3Bpbm5lcklkICYmIHZhcmlhYmxlLl9zcGlubmVySWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHZhcmlhYmxlLl9zcGlubmVySWQsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2xpY2UoMCwgaXRlbS5sYXN0SW5kZXhPZignXycpKSA9PT0gdmFyaWFibGUuX2lkICYmICh0aGlzLiRzcGlubmVyIGFzIGFueSkubWVzc2FnZXNCeUNvbnRleHQgJiYgKHRoaXMuJHNwaW5uZXIgYXMgYW55KS5tZXNzYWdlc0J5Q29udGV4dFt2YXJpYWJsZS5zcGlubmVyQ29udGV4dF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhcmlhYmxlLnNwaW5uZXJNZXNzYWdlID09PSAodGhpcy4kc3Bpbm5lciBhcyBhbnkpLm1lc3NhZ2VzQnlDb250ZXh0W3ZhcmlhYmxlLnNwaW5uZXJDb250ZXh0XVtcImZpbmFsTWVzc2FnZVwiXSB8fCB2YXJpYWJsZS5zcGlubmVyTWVzc2FnZSA9PT0gKHRoaXMuJHNwaW5uZXIgYXMgYW55KS5tZXNzYWdlc0J5Q29udGV4dFt2YXJpYWJsZS5zcGlubmVyQ29udGV4dF1baXRlbV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXJFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlubmVyRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5fc3Bpbm5lcklkID0gdmFyaWFibGUuX3NwaW5uZXJJZCB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwaW5uZXJJZCA9IHRoaXMuJHNwaW5uZXIuc2hvdyh2YXJpYWJsZS5zcGlubmVyTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5faWQgKyAnXycgKyBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLnNwaW5uZXJjbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5zcGlubmVyQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5fc3Bpbm5lcklkLnB1c2goc3Bpbm5lcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNwaW5uZXIuaGlkZSh2YXJpYWJsZS5fc3Bpbm5lcklkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGFwcC5zdWJzY3JpYmUoJ3VzZXJMb2dnZWRJbicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGFuZGluZ1BhZ2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RMb2dnZWRVc2VySWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRzZWN1cml0eS5nZXRDb25maWcoY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlnICYmIGNvbmZpZy51c2VySW5mby51c2VySWQgIT09IHRoaXMubGFzdExvZ2dlZFVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kYXBwLmNsZWFyUGFnZUNhY2hlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGFwcC5zdWJzY3JpYmUoJ3VzZXJMb2dnZWRPdXQnLCAoKSA9PiB0aGlzLnNldExhbmRpbmdQYWdlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRhcHAuY2xlYXJQYWdlQ2FjaGUoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLiRhcHAuc3Vic2NyaWJlKCdodHRwNDAxJywgKGQgPSB7fSkgPT4gdGhpcy5oYW5kbGU0MDEoZC5wYWdlLCBkLm9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBzZXNzaW9uIHRpbWVvdXQsIGlmIHRoZSBzZXNzaW9uIHRpbWVvdXQgY29uZmlnIGlzIHNldCB0byBhIGRpYWxvZywgdGhlbiBvcGVuIGxvZ2luIGRpYWxvZ1xuICAgICAqL1xuICAgIHByaXZhdGUgc2hvd0xvZ2luRGlhbG9nKCkge1xuICAgICAgICB0aGlzLiRzcGlubmVyLmhpZGUoJ2dsb2JhbFNwaW5uZXInKTtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGNsb3NlIGFsbCBkaWFsb2dzIGNhbGwsIHNvIHRoZSBleGlzdGluZyBkaWFsb2dzIHJlbWFpbiBvcGVuIGFuZFxuICAgICAgICAvLyB0aGUgbG9naW4gZGlhbG9nIGNvbWVzIG9uIHRvcCBvZiBpdC5cbiAgICAgICAgdGhpcy4kZGlhbG9nLm9wZW4oJ0NvbW1vbkxvZ2luRGlhbG9nJyk7XG4gICAgICAgIC8vIFNpbmNlIHRoZSBsb2dpbiBkaWFsb2cgaXMgY2xvc2VkIGFuZCBvcGVuZWQgaXRzIHVwZGF0ZWQgcHJvcGVydHkgaXNuJ3QgcmVhZCBieSBhbmd1bGFyLlxuICAgICAgICAvLyBIZW5jZSB3ZSB0cmlnZ2VyIHRoZSBkaWdlc3QgY3ljbGVcbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIGxvYWRBcHBKUygpIHtcblxuICAgIH1cblxuICAgIGxvYWRDb21tb25QYWdlKCkge1xuXG4gICAgfVxuXG4gICAgbG9hZFNlY3VyaXR5Q29uZmlnKGZvcmNlRmxhZz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlY3VyaXR5LmxvYWQoZm9yY2VGbGFnKS50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJGFwcC5sYW5kaW5nUGFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldExhbmRpbmdQYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZE1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kbWV0YWRhdGEubG9hZCgpO1xuICAgIH1cblxuICAgIGxvYWRBcHBWYXJpYWJsZXModmFyaWFibGVzPzogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmFwcFZhcmlhYmxlc0xvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5pdCA9IHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLiR2YXJpYWJsZXMucmVnaXN0ZXIoJ2FwcCcsIHJlc3BvbnNlLCB0aGlzLiRhcHApO1xuICAgICAgICAgICAgLy8gbm90IGFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLiRhcHAgdG8ga2VlcCB0aGUgcmVmZXJlbmNlIGluIHRhY3RcbiAgICAgICAgICAgIGV4dGVuZCh0aGlzLiRhcHAuVmFyaWFibGVzLCBkYXRhLlZhcmlhYmxlcyk7XG4gICAgICAgICAgICBleHRlbmQodGhpcy4kYXBwLkFjdGlvbnMsIGRhdGEuQWN0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvZ2dlZEluVXNlclZhcmlhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN1cHBvcnRlZExvY2FsZVZhcmlhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmFwcFZhcmlhYmxlc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFwcFZhcmlhYmxlc0ZpcmVkID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICBpbml0KHZhcmlhYmxlcyk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoJy4vYXBwLnZhcmlhYmxlcy5qc29uJykudGhlbihyZXNwb25zZSA9PiBpbml0KHJlc3BvbnNlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0dGVyIGFuZCBzZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSBhcHBWYXJpYWJsZXNGaXJlZFxuICAgICAqIHRoaXMgZmxhZyBkZXRlcm1pbmVzIGlmIHRoZSBhcHAgdmFyaWFibGVzKHdpdGggc3RhcnRVcGRhdGU6dHJ1ZSkgaGF2ZSBiZWVuIGZpcmVkXG4gICAgICogdGhleSBzaG91bGQgZ2V0IGZpcmVkIG9ubHkgb25jZSB0aHJvdWdoIGFwcCBsaWZlY3ljbGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRmlyZWRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc0FwcFZhcmlhYmxlc0ZpcmVkKGlzRmlyZWQ/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQoaXNGaXJlZCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwVmFyaWFibGVzRmlyZWQgPSBpc0ZpcmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFZhcmlhYmxlc0ZpcmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJMb2dnZWRJblVzZXJWYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgICAgICB2YXJpYWJsZS5pc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyaWFibGUucm9sZXMgICAgICAgICAgID0gW107XG4gICAgICAgIHZhcmlhYmxlLm5hbWUgICAgICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyaWFibGUuaWQgICAgICAgICAgICAgID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXJpYWJsZS50ZW5hbnRJZCAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2dnZWRJblVzZXJWYXJpYWJsZSgpIHtcbiAgICAgICAgY29uc3QgbG9nZ2VkSW5Vc2VyID0gZ2V0KHRoaXMuJGFwcCwgJ1ZhcmlhYmxlcy5sb2dnZWRJblVzZXIuZGF0YVNldCcpO1xuXG4gICAgICAgIC8vIHNhbml0eSBjaGVja1xuICAgICAgICBpZiAoIWxvZ2dlZEluVXNlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWN1cml0eS5sb2FkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWN1cml0eUNvbmZpZyA9IHRoaXMuJHNlY3VyaXR5LmdldCgpO1xuICAgICAgICAgICAgaWYgKHNlY3VyaXR5Q29uZmlnICYmIHNlY3VyaXR5Q29uZmlnLnNlY3VyaXR5RW5hYmxlZCAmJiBzZWN1cml0eUNvbmZpZy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlzQXV0aGVudGljYXRlZCA9IHNlY3VyaXR5Q29uZmlnLmF1dGhlbnRpY2F0ZWQ7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnJvbGVzICAgICAgICAgICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnVzZXJSb2xlcztcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIubmFtZSAgICAgICAgICAgID0gc2VjdXJpdHlDb25maWcudXNlckluZm8udXNlck5hbWU7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlkICAgICAgICAgICAgICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnVzZXJJZDtcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIudGVuYW50SWQgICAgICAgID0gc2VjdXJpdHlDb25maWcudXNlckluZm8udGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnVzZXJBdHRyaWJ1dGVzICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnVzZXJBdHRyaWJ1dGVzOyAvLyBhc3NpZ24gdGhlIGV4dHJhIHVzZXJBdHRyaWJ1dGVzIGZvciBjdXN0b20gdXNhZ2UuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJMb2dnZWRJblVzZXJWYXJpYWJsZShsb2dnZWRJblVzZXIpO1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci5pc1NlY3VyaXR5RW5hYmxlZCA9IHNlY3VyaXR5Q29uZmlnICYmIHNlY3VyaXR5Q29uZmlnLnNlY3VyaXR5RW5hYmxlZDtcbiAgICAgICAgICAgICAgICB0aHJvdyBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlY3VyaXR5Q29uZmlnO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnJvbGVzICAgICAgICAgICA9IFtdO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLm5hbWUgICAgICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlci5pZCAgICAgICAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsb2dnZWRJblVzZXIudGVuYW50SWQgICAgICAgID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnVzZXJBdHRyaWJ1dGVzICA9IHt9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkaW5nIHRoZSBhcHAgdmFyaWFibGUgc3VwcG9ydGVkIGxvY2FsZSB3aXRoIHRoZSB3bVByb3BlcnRpZXMgaTE4biBEYXRhVmFsdWVzXG4gICAgICpcbiAgICAgKiBUT0RPW1ZpYmh1XTpcbiAgICAgKiBDYW4gd3JpdGUgYSBzaW1wbGUgbWlncmF0aW9uIHRvIHN5bmMgdGhlIHN1cHBvcnRlZExvY2FsZSB2YXJpYWJsZSB3aXRoICdfV01fQVBQX1BST1BFUlRJRVMuc3VwcG9ydGVkTGFuZ3VhZ2VzJ1xuICAgICAqIEhlbmNlLCB0aGlzIG1heSBub3QgYmUgcmVxdWlyZWRcbiAgICAgKlxuICAgICAqL1xuICAgIHVwZGF0ZVN1cHBvcnRlZExvY2FsZVZhcmlhYmxlKCkge1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRMb2NhbGVWYXIgPSBnZXQodGhpcy4kYXBwLCAnVmFyaWFibGVzLnN1cHBvcnRlZExvY2FsZScpO1xuICAgIH1cblxuICAgIGhhbmRsZVNTT0xvZ2luKGNvbmZpZywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBTU09fVVJMID0gJ3NlcnZpY2VzL3NlY3VyaXR5L3Nzb2xvZ2luJyxcbiAgICAgICAgICAgIFBSRVZJRVdfV0lORE9XX05BTUUgPSAnV01fUFJFVklFV19XSU5ET1cnO1xuICAgICAgICBsZXQgcGFnZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zO1xuXG4gICAgICAgIC8vIGRvIG5vdCBwcm92aWRlIHJlZGlyZWN0VG8gcGFnZSBpZiBmZXRjaGluZyBIT01FIHBhZ2UgcmVzdWx0ZWQgNDAxXG4gICAgICAgIC8vIG9uIGFwcCBsb2FkLCBieSBkZWZhdWx0IEhvbWUgcGFnZSBpcyBsb2FkZWRcbiAgICAgICAgcGFnZSA9IHRoaXMuJHNlY3VyaXR5LmdldFJlZGlyZWN0UGFnZShjb25maWcpO1xuXG4gICAgICAgIGlmIChDT05TVEFOVFMuaGFzQ29yZG92YSkge1xuICAgICAgICAgICAgLy8gZ2V0IHByZXZpb3VzbHkgbG9nZ2VkSW5Vc2VyIG5hbWUgKGlmIGFueSlcbiAgICAgICAgICAgIGNvbnN0IGxhc3RMb2dnZWRJblVzZXJuYW1lID0gZ2V0KHRoaXMuJHNlY3VyaXR5LmdldCgpLCAndXNlckluZm8udXNlck5hbWUnKTtcbiAgICAgICAgICAgIHRoaXMuJHNlY3VyaXR5LmF1dGhJbkJyb3dzZXIoKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucmVsb2FkQXBwRGF0YSgpKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlc2VudExvZ2dlZEluVXNlcm5hbWUgPSBnZXQodGhpcy4kc2VjdXJpdHkuZ2V0KCksICd1c2VySW5mby51c2VyTmFtZScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VudExvZ2dlZEluVXNlcm5hbWUgJiYgcHJlc2VudExvZ2dlZEluVXNlcm5hbWUgPT09IGxhc3RMb2dnZWRJblVzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlKFtwYWdlXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlKFtgL2BdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFnZSA9IHBhZ2UgPyAnP3JlZGlyZWN0UGFnZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhZ2UpIDogJyc7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogRm9yIHByZXZpZXcsIHRoaXMuJHNlY3VyaXR5LmdldFJlZGlyZWN0ZWRSb3V0ZVF1ZXJ5UGFyYW1zKCkgZ2V0cyB0aGUgcXVlcnlwYXJhbXMgZm9ybSB0aGUgYWN0aXZhdGVkIHJvdXRlKHBhZ2V3cmFwcGVyY29tcG9uZW50KVxuICAgICAgICAgICAgICogRm9yIGRlcGxveWVkIGFwcCwgY2FuYWN0aXZhdGUgZ3VhcmQgcmVzb2x2ZWQgdG8gZmFsc2UgYW5kIGdldHMgdGhlIHF1ZXJ5cGFyYW1zIGZyb20gdGhlIGNhbmFjdGl2YXRlIGd1cmFyZChubyBhY3RpdmUgcm91dGUgY29tcG9uZW50KVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IChvcHRpb25zICYmIG9wdGlvbnMucXVlcnlQYXJhbXMpIHx8IHRoaXMuJHNlY3VyaXR5LmdldFJlZGlyZWN0ZWRSb3V0ZVF1ZXJ5UGFyYW1zKCk7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHRoaXMuJHNlY3VyaXR5LmdldFF1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMgPyAnPycgKyBxdWVyeVBhcmFtcyA6ICcnO1xuICAgICAgICAgICAgLy8gc2hvd2luZyBhIHJlZGlyZWN0aW5nIG1lc3NhZ2VcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQgPSBnZXQodGhpcy5nZXRBcHBMb2NhbGUoKSwgWydNRVNTQUdFX0xPR0lOX1JFRElSRUNUSU9OJ10pIHx8ICdSZWRpcmVjdGluZyB0byBzc28gbG9naW4uLi4nO1xuICAgICAgICAgICAgLy8gYXBwZW5kaW5nIHJlZGlyZWN0IHRvIHBhZ2UgYW5kIHBhZ2UgcGFyYW1zXG4gICAgICAgICAgICBjb25zdCBzc29VcmwgPSB0aGlzLmdldERlcGxveWVkVVJMKCkgKyBTU09fVVJMICsgcGFnZSArIHF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIHJlbW92ZSBpRnJhbWUgd2hlbiByZWRpcmVjdGVkIHRvIElkUCBsb2dpbiBwYWdlLlxuICAgICAgICAgICAgICogdGhpcyBpcyBiZWluZyBkb25lIGFzIElEUHMgZG8gbm90IGFsbG93IHRvIGdldCB0aGVtc2VsdmVzIGxvYWRlZCBpbnRvIGlGcmFtZXMuXG4gICAgICAgICAgICAgKiByZW1vdmUtdG9vbGJhciBoYXMgYmVlbiBhc3NpZ25lZCB3aXRoIGEgd2luZG93IG5hbWUgV01fUFJFVklFV19XSU5ET1csIGNoZWNrIGlmIHRoZSBpZnJhbWUgaXMgb3VyIHRvb2xiYXIgcmVsYXRlZCBhbmRcbiAgICAgICAgICAgICAqIHNhZmVseSBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXJlbnQgdG9vbGJhciB3aXRoIGN1cnJlbnQgdXJsLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LnBhcmVudCAmJiB3aW5kb3cubG9jYXRpb24ub3JpZ2luID09PSB3aW5kb3cucGFyZW50Lm9yaWdpbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cucGFyZW50Lm5hbWUgPT09IFBSRVZJRVdfV0lORE9XX05BTUUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cuc2VsZi5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQubmFtZSA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gc3NvVXJsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNzb1VybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gc3NvVXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB0aGUgYXBwIHdoZW4gYSBYSFIgcmVxdWVzdCByZXR1cm5zIDQwMSByZXNwb25zZVxuICAgICAqIElmIG5vIHVzZXIgd2FzIGxvZ2dlZCBpbiBiZWZvcmUgNDAxIG9jY3VycmVkLCBGaXJzdCB0aW1lIExvZ2luIGlzIHNpbXVsYXRlZFxuICAgICAqIEVsc2UsIGEgc2Vzc2lvbiB0aW1lb3V0IGhhcyBvY2N1cnJlZCBhbmQgdGhlIHNhbWUgaXMgc2ltdWxhdGVkXG4gICAgICogQHBhcmFtIHBhZ2UgIGlmIHByb3ZpZGVkLCByZXByZXNlbnRzIHRoZSBwYWdlIG5hbWUgZm9yIHdoaWNoIFhIUiByZXF1ZXN0IHJldHVybmVkIDQwMSwgb24gcmUtbG9naW5cbiAgICAgKiAgICAgICAgICAgICAgaWYgbm90IHByb3ZpZGVkLCBhIHNlcnZpY2UgcmVxdWVzdCByZXR1cm5lZCA0MDFcbiAgICAgKiBAcGFyYW0gb25TdWNjZXNzIHN1Y2Nlc3MgaGFuZGxlclxuICAgICAqIEBwYXJhbSBvbkVycm9yIGVycm9yIGhhbmRsZXJcbiAgICAgKi9cbiAgICBoYW5kbGU0MDEocGFnZT8sIG9wdGlvbnM/KSB7XG4gICAgICAgIGxldCBzZXNzaW9uVGltZW91dENvbmZpZyxcbiAgICAgICAgICAgIHNlc3Npb25UaW1lb3V0TWV0aG9kLFxuICAgICAgICAgICAgbG9naW5Db25maWcsXG4gICAgICAgICAgICBsb2dpbk1ldGhvZDtcbiAgICAgICAgY29uc3QgTE9HSU5fTUVUSE9EID0ge1xuICAgICAgICAgICAgICAgICdESUFMT0cnIDogJ0RJQUxPRycsXG4gICAgICAgICAgICAgICAgJ1BBR0UnICAgOiAnUEFHRScsXG4gICAgICAgICAgICAgICAgJ1NTTycgICAgOiAnU1NPJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLiRzZWN1cml0eS5nZXQoKTtcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zT2JqID0ge307XG4gICAgICAgIGxvZ2luQ29uZmlnID0gY29uZmlnLmxvZ2luQ29uZmlnO1xuICAgICAgICB0aGlzLmxhc3RMb2dnZWRVc2VySWQgPSBjb25maWcudXNlckluZm8gJiYgY29uZmlnLnVzZXJJbmZvLnVzZXJJZDtcbiAgICAgICAgLy8gaWYgdXNlciBmb3VuZCwgNDAxIHdhcyB0aHJvd24gYWZ0ZXIgc2Vzc2lvbiB0aW1lXG4gICAgICAgIGlmIChjb25maWcudXNlckluZm8gJiYgY29uZmlnLnVzZXJJbmZvLnVzZXJOYW1lKSB7XG4gICAgICAgICAgICBjb25maWcuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgc2Vzc2lvblRpbWVvdXRDb25maWcgPSBsb2dpbkNvbmZpZy5zZXNzaW9uVGltZW91dCB8fCB7J3R5cGUnOiBMT0dJTl9NRVRIT0QuRElBTE9HfTtcbiAgICAgICAgICAgIHNlc3Npb25UaW1lb3V0TWV0aG9kID0gc2Vzc2lvblRpbWVvdXRDb25maWcudHlwZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChzZXNzaW9uVGltZW91dE1ldGhvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELkRJQUxPRzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TG9naW5EaWFsb2coKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBMT0dJTl9NRVRIT0QuUEFHRTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlID0gdGhpcy4kc2VjdXJpdHkuZ2V0Q3VycmVudFJvdXRlUGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zT2JqWydyZWRpcmVjdFRvJ10gPSBwYWdlO1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgcXVlcnkgcGFyYW1zKHBhZ2UgcGFyYW1zIG9mIHBhZ2UgYmVpbmcgcmVkaXJlY3RlZCB0bykgdG8gdGhlIFVSTC5cbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNPYmogPSBtZXJnZShxdWVyeVBhcmFtc09iaiwgdGhpcy4kc2VjdXJpdHkuZ2V0UmVkaXJlY3RlZFJvdXRlUXVlcnlQYXJhbXMoKSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZWRpcmVjdCBwYWdlIHNob3VsZCBub3QgYmUgc2FtZSBhcyBzZXNzaW9uIHRpbWVvdXQgbG9naW4gcGFnZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT09IHNlc3Npb25UaW1lb3V0Q29uZmlnLnBhZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoW3Nlc3Npb25UaW1lb3V0Q29uZmlnLnBhZ2VOYW1lXSwge3F1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc09ian0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlNTTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTU09Mb2dpbihjb25maWcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0TGFuZGluZ1BhZ2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIG5vIHVzZXIgZm91bmQsIDQwMSB3YXMgdGhyb3duIGZvciBmaXJzdCB0aW1lIGxvZ2luXG4gICAgICAgICAgICBsb2dpbk1ldGhvZCA9IGxvZ2luQ29uZmlnLnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAobG9naW5NZXRob2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5ESUFMT0c6XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm91Z2ggbG9naW5EaWFsb2csIHVzZXIgd2lsbCByZW1haW4gaW4gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGZhaWxlZCBjYWxscyB3aWxsIGJlIGV4ZWN1dGVkIHBvc3QgbG9naW4gdGhyb3VnaCBMb2dpblZhcmlhYmxlU2VydmljZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogdXNlciB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gcmVzcGVjdGl2ZSBsYW5kaW5nIHBhZ2Ugb25seSBpZiBkaWFsb2cgaXMgb3BlbmVkIG1hbnVhbGx5KG5vdCB0aHJvdWdoIGEgZmFpbGVkIDQwMSBjYWxsKS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub1JlZGlyZWN0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2dpbkRpYWxvZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5QQUdFOlxuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgcHJvdmlkZSByZWRpcmVjdFRvIHBhZ2UgaWYgZmV0Y2hpbmcgSE9NRSBwYWdlIHJlc3VsdGVkIDQwMVxuICAgICAgICAgICAgICAgICAgICAvLyBvbiBhcHAgbG9hZCwgYnkgZGVmYXVsdCBIb21lIHBhZ2UgaXMgbG9hZGVkXG4gICAgICAgICAgICAgICAgICAgIHBhZ2UgPSB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdFBhZ2UoY29uZmlnLCBwYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNPYmpbJ3JlZGlyZWN0VG8nXSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhUXVlcnlQYXJhbXMgPSAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXJ5UGFyYW1zKSB8fCB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdGVkUm91dGVRdWVyeVBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc09iaiA9IG1lcmdlKHF1ZXJ5UGFyYW1zT2JqLCBleHRyYVF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLm5hdmlnYXRlKFtsb2dpbkNvbmZpZy5wYWdlTmFtZV0sIHtxdWVyeVBhcmFtczogcXVlcnlQYXJhbXNPYmp9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kYXBwLmxhbmRpbmdQYWdlTmFtZSA9IGxvZ2luQ29uZmlnLnBhZ2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5TU086XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU1NPTG9naW4oY29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIGRhdGEgZGVwZW5kZW50IG9uIGxvZ2dlZCBpbiB1c2VyXG4gICAgICogUmVsb2FkcyBzZWN1cml0eSBjb25maWcsIG1ldGFkYXRhXG4gICAgICogVXBkYXRlcyB0aGUgbG9nZ2VkSW5Vc2VyVmFyaWFibGVcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICByZWxvYWRBcHBEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2VjdXJpdHlDb25maWcodHJ1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkTWV0YWRhdGEoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVMb2dnZWRJblVzZXJWYXJpYWJsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5vUmVkaXJlY3QodmFsdWU/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub1JlZGlyZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbm9SZWRpcmVjdCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9SZWRpcmVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbnZva2VzIHNlc3Npb24gZmFpbHVyZSByZXF1ZXN0c1xuICAgICAqL1xuICAgIGV4ZWN1dGVTZXNzaW9uRmFpbHVyZVJlcXVlc3RzKCkge1xuICAgICAgICB0aGlzLiRodHRwLmV4ZWN1dGVTZXNzaW9uRmFpbHVyZVJlcXVlc3RzKCk7XG4gICAgfVxuXG4gICAgcHVzaFRvU2Vzc2lvbkZhaWx1cmVSZXF1ZXN0cyhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLiRodHRwLnB1c2hUb1Nlc3Npb25GYWlsdXJlUXVldWUoY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZXBsb3llZFVSTCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5kZXBsb3llZFVybCA/IHRoaXMuJGFwcC5kZXBsb3llZFVybCA6ICRyb290U2NvcGUucHJvamVjdC5kZXBsb3llZFVybDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIHRoZSBjdXN0b211cmxzY2hlbWUgZm9yIGEgbW9iaWxlIGFwcFxuICAgICAqIHdoaWNoIGlzIHVzZWQgZm9yIHJlZGlyZWN0aW9uIGJhY2sgdG8gdGhlIGFwcCBmcm9tIGJyb3dzZXIgaW4gaW1wbGljaXQgb0F1dGggZmxvd1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHVibGljIGdldEN1c3RvbVVybFNjaGVtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5jdXN0b21VcmxTY2hlbWU7XG4gICAgfVxuXG4gICAgbm90aWZ5KGV2ZW50TmFtZSwgZGF0YSkge1xuICAgICAgICB0aGlzLiRhcHAubm90aWZ5KGV2ZW50TmFtZSwgZGF0YSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKGV2ZW50TmFtZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLnN1YnNjcmliZShldmVudE5hbWUsIGRhdGEpO1xuICAgIH1cblxuICAgIGdldEFjdGl2ZVBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuYWN0aXZlUGFnZTtcbiAgICB9XG5cbiAgICBnZXRBcHBMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuYXBwTG9jYWxlO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkTG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaTE4bi5nZXRTZWxlY3RlZExvY2FsZSgpO1xuICAgIH1cblxuICAgIG5vdGlmeUFwcCh0ZW1wbGF0ZSwgdHlwZSwgdGl0bGU/KSB7XG4gICAgICAgIHRoaXMuJGFwcC5ub3RpZnlBcHAodGVtcGxhdGUsIHR5cGUsIHRpdGxlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25CZWZvcmVTZXJ2aWNlIG1ldGhvZCBkZWZpbmVkIGluIGFwcC5qcyBvZiB0aGUgYXBwXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbXNcbiAgICAgKi9cbiAgICBhcHBPbkJlZm9yZVNlcnZpY2VDYWxsKHJlcXVlc3RQYXJhbXM6IGFueSkge1xuICAgICAgICByZXR1cm4gdHJpZ2dlckZuKHRoaXMuJGFwcC5vbkJlZm9yZVNlcnZpY2VDYWxsLCByZXF1ZXN0UGFyYW1zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25TZXJ2aWNlU3VjY2VzcyBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIHhock9ialxuICAgICAqL1xuICAgIGFwcE9uU2VydmljZVN1Y2Nlc3MoZGF0YTogYW55LCB4aHJPYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gdHJpZ2dlckZuKHRoaXMuJGFwcC5vblNlcnZpY2VTdWNjZXNzLCBkYXRhLCB4aHJPYmopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIHRoZSBvblNlcnZpY2VFcnJvciBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIHhock9iXG4gICAgICovXG4gICAgYXBwT25TZXJ2aWNlRXJyb3IoZGF0YTogYW55LCB4aHJPYj86IGFueSkge1xuICAgICAgICByZXR1cm4gdHJpZ2dlckZuKHRoaXMuJGFwcC5vblNlcnZpY2VFcnJvciwgZGF0YSwgeGhyT2IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIHRoZSBhcHBWYXJpYWJsZXNSZWFkeSBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqL1xuICAgIGFwcFZhcmlhYmxlc1JlYWR5KCkge1xuICAgICAgICB0cmlnZ2VyRm4odGhpcy4kYXBwLm9uQXBwVmFyaWFibGVzUmVhZHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIHRoZSBvbkJlZm9yZUFwcFJlYWR5IG1ldGhvZCBkZWZpbmVkIGluIGFwcC5qcyBvZiB0aGUgYXBwXG4gICAgICovXG4gICAgYmVmb3JlQXBwUmVhZHkoKSB7XG4gICAgICAgIHRyaWdnZXJGbih0aGlzLiRhcHAub25CZWZvcmVBcHBSZWFkeSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcGlwZSBiYXNlZCBvbiB0aGUgaW5wdXRcbiAgICAgKi9cbiAgICBnZXRQaXBlKHBpcGUpIHtcbiAgICAgICAgaWYgKHBpcGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGVQaXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYW5kaW5nUGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlY3VyaXR5LmdldFBhZ2VCeUxvZ2dlZEluVXNlcigpLnRoZW4ocCA9PiB0aGlzLiRhcHAubGFuZGluZ1BhZ2VOYW1lID0gPHN0cmluZz4gcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRydWUgaWYgcHJlZmFiIHR5cGUgYXBwXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQcmVmYWJUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLmlzUHJlZmFiVHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdHJ1ZSBpZiB0ZW1wbGF0ZSBidW5kbGUgdHlwZSBhcHBcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1RlbXBsYXRlQnVuZGxlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5pc1RlbXBsYXRlQnVuZGxlVHlwZTtcbiAgICB9XG5cbiAgICBwb3N0TWVzc2FnZShjb250ZW50KSB7XG4gICAgICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2UoY29udGVudCwgJyonKTtcbiAgICB9XG5cbiAgICBzaG93VGVtcGxhdGUoaWR4KSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaWR4XTtcbiAgICAgICAgLy8gc2NvcGUuYWN0aXZlVGVtcGxhdGVJbmRleCA9IGlkeDtcbiAgICAgICAgdGhpcy4kcm91dGVyLm5hdmlnYXRlKFt0ZW1wbGF0ZS5pZF0pO1xuICAgIH1cbiAgICBwb3N0VGVtcGxhdGVCdW5kbGVJbmZvKCkge1xuXG4gICAgICAgIHdpbmRvdy5vbm1lc3NhZ2UgPSAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2dEYXRhID0gZXZ0LmRhdGE7XG5cbiAgICAgICAgICAgIGlmICghaXNPYmplY3QobXNnRGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1zZ0RhdGEua2V5O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgUE9TVF9NRVNTQUdFUy5ISURFX1RFTVBMQVRFU19TSE9XX0NBU0U6XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjb3BlLmhpZGVTaG93Q2FzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUE9TVF9NRVNTQUdFUy5TRUxFQ1RfVEVNUExBVEU6XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VGVtcGxhdGUobXNnRGF0YS50ZW1wbGF0ZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHtrZXk6IFBPU1RfTUVTU0FHRVMuT05fTE9BRH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmV0Y2hDb250ZW50KCdqc29uJywgJy4vY29uZmlnLmpzb24nLCB0cnVlLCByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzID0gcmVzcG9uc2UudGVtcGxhdGVzO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UoeydrZXknOiBQT1NUX01FU1NBR0VTLlRFTVBMQVRFQlVORExFX0NPTkZJRywgJ2NvbmZpZyc6IHJlc3BvbnNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBvc3RBcHBUeXBlSW5mbygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZUJ1bmRsZVR5cGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRlbXBsYXRlQnVuZGxlSW5mbygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -18,11 +18,17 @@ export class HttpCallInterceptor {
18
18
  createSubject() {
19
19
  return new Subject();
20
20
  }
21
+ isAbsoluteUrl(url) {
22
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(url);
23
+ }
21
24
  intercept(request, next) {
22
25
  let modifiedReq;
23
26
  let modifiedResp;
24
- let isServicesUrl = request.url.indexOf("services/") !== -1 || request.url.indexOf("j_spring_security_check") !== -1;
25
- if (isServicesUrl) {
27
+ let isRelativeAPIUrl = false;
28
+ if (!this.isAbsoluteUrl(request.url)) {
29
+ isRelativeAPIUrl = request.url.indexOf("services/") !== -1 || request.url.indexOf("j_spring_security_check") !== -1;
30
+ }
31
+ if (isRelativeAPIUrl) {
26
32
  let apiUrl = _WM_APP_PROJECT.apiUrl + request.url;
27
33
  request = request.clone({ url: apiUrl });
28
34
  }
@@ -73,4 +79,4 @@ export class HttpCallInterceptor {
73
79
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(HttpCallInterceptor, [{
74
80
  type: Injectable
75
81
  }], () => [], null); })();
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFFekM7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUs1QjtRQUNJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELFNBQVMsQ0FBQyxPQUF5QixFQUFFLElBQWlCO1FBQ2xELElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckgsSUFBRyxhQUFhLEVBQUUsQ0FBQztZQUNmLElBQUksTUFBTSxHQUFFLGVBQWUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNqRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNsRCxvREFBb0Q7WUFDcEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzRCxtRUFBbUU7WUFDbkUsV0FBVyxHQUFJLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNkLG9EQUFvRDtnQkFDcEQsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2pFLE9BQU8sR0FBRyxXQUFXLENBQUM7WUFDMUIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNkLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFVBQVUsSUFBSyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDbkYsc0RBQXNEO2dCQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCx1REFBdUQ7Z0JBQ3ZELFlBQVksR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixzREFBc0Q7b0JBQ3RELFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyRSxNQUFNLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtZQUNKLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksV0FBVyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDN0Msc0RBQXNEO2dCQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxxREFBcUQ7Z0JBQ3JELFlBQVksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixzREFBc0Q7b0JBQ3RELFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyRSxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FDSixDQUNKLENBQUM7SUFDTixDQUFDO29IQWpFUSxtQkFBbUI7dUVBQW5CLG1CQUFtQixXQUFuQixtQkFBbUI7O2lGQUFuQixtQkFBbUI7Y0FEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBodHRwU2VydmljZSwgYXBwTWFuYWdlciB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHsgV21IdHRwUmVxdWVzdCwgV21IdHRwUmVzcG9uc2UgfSBmcm9tICdAd20vaHR0cCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtfV01fQVBQX1BST0pFQ1R9IGZyb20gXCJAd20vY29yZVwiO1xuXG4vKipcbiAqIFRoaXMgSW50ZXJjZXB0b3IgaW50ZXJjZXB0cyBhbGwgbmV0d29yayBjYWxscyBhbmQgaWYgYSBuZXR3b3JrIGNhbGwgZmFpbHNcbiAqIGR1ZSB0byBzZXNzaW9uIHRpbWVvdXQsIHRoZW4gaXQgY2FsbHMgYSBmdW5jdGlvbiB0byBoYW5kbGUgc2Vzc2lvbiB0aW1lb3V0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cENhbGxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgICB3bUh0dHBSZXF1ZXN0OiBhbnk7XG4gICAgd21IdHRwUmVzcG9uc2U6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLndtSHR0cFJlcXVlc3QgPSBuZXcgV21IdHRwUmVxdWVzdCgpO1xuICAgICAgICB0aGlzLndtSHR0cFJlc3BvbnNlID0gbmV3IFdtSHR0cFJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU3ViamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICAgICAgbGV0IG1vZGlmaWVkUmVxO1xuICAgICAgICBsZXQgbW9kaWZpZWRSZXNwO1xuICAgICAgICBsZXQgaXNTZXJ2aWNlc1VybCA9IHJlcXVlc3QudXJsLmluZGV4T2YoXCJzZXJ2aWNlcy9cIikgIT09IC0xIHx8IHJlcXVlc3QudXJsLmluZGV4T2YoXCJqX3NwcmluZ19zZWN1cml0eV9jaGVja1wiKSAhPT0gLTE7XG4gICAgICAgIGlmKGlzU2VydmljZXNVcmwpIHtcbiAgICAgICAgICAgIGxldCBhcGlVcmw9IF9XTV9BUFBfUFJPSkVDVC5hcGlVcmwgKyByZXF1ZXN0LnVybDtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHsgdXJsOiBhcGlVcmwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwcE1hbmFnZXIgJiYgYXBwTWFuYWdlci5hcHBPbkJlZm9yZVNlcnZpY2VDYWxsKSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhbmd1bGFyIEh0dHBSZXF1ZXN0IHRvIHdtIEh0dHBSZXF1ZXN0XG4gICAgICAgICAgICBjb25zdCByZXEgPSB0aGlzLndtSHR0cFJlcXVlc3QuYW5ndWxhclRvV21SZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgY29tbW9uIG9uQmVmb3JlU2VydmljZUNhbGwgaGFuZGxlciBwcmVzZW50IGluIGFwcC5qc1xuICAgICAgICAgICAgbW9kaWZpZWRSZXEgPSAgYXBwTWFuYWdlci5hcHBPbkJlZm9yZVNlcnZpY2VDYWxsKHJlcSk7XG4gICAgICAgICAgICBpZiAobW9kaWZpZWRSZXEpIHtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSB3bSBIdHRwUmVxdWVzdCB0byBhbmd1bGFyIEh0dHBSZXF1ZXN0XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRSZXEgPSB0aGlzLndtSHR0cFJlcXVlc3Qud21Ub0FuZ3VsYXJSZXF1ZXN0KG1vZGlmaWVkUmVxKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gbW9kaWZpZWRSZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnR5cGUgPT09IDQgJiYgYXBwTWFuYWdlciAmJiAgYXBwTWFuYWdlci5hcHBPblNlcnZpY2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhbmd1bGFyIEh0dHBSZXNwb25zZSB0byB3bSBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3AgPSB0aGlzLndtSHR0cFJlc3BvbnNlLmFuZ3VsYXJUb1dtUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgY29tbW9uIHN1Y2Nlc3MgaGFuZGxlciBwcmVzZW50IGluIGFwcC5qc1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gYXBwTWFuYWdlci5hcHBPblNlcnZpY2VTdWNjZXNzKHJlc3AuYm9keSwgcmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRSZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgd20gSHR0cFJlc3BvbnNlIHRvIGFuZ3VsYXIgSHR0cFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gdGhpcy53bUh0dHBSZXNwb25zZS53bVRvQW5ndWxhclJlc3BvbnNlKG1vZGlmaWVkUmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc3BvbnNlLCBtb2RpZmllZFJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLl80MDFTdWJzY3JpYmVyID0gdGhpcy5jcmVhdGVTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChodHRwU2VydmljZS5pc1BsYXRmb3JtU2Vzc2lvblRpbWVvdXQoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwU2VydmljZS5oYW5kbGVTZXNzaW9uVGltZW91dChyZXF1ZXN0LCBlcnJvci5fNDAxU3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcE1hbmFnZXIgJiYgYXBwTWFuYWdlci5hcHBPblNlcnZpY2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYW5ndWxhciBIdHRwUmVzcG9uc2UgdG8gd20gSHR0cFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSB0aGlzLndtSHR0cFJlc3BvbnNlLmFuZ3VsYXJUb1dtUmVzcG9uc2UoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgY29tbW9uIGVycm9yIGhhbmRsZXIgcHJlc2VudCBpbiBhcHAuanNcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkUmVzcCA9IGFwcE1hbmFnZXIuYXBwT25TZXJ2aWNlRXJyb3IoZXJyLm1lc3NhZ2UsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRSZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgd20gSHR0cFJlc3BvbnNlIHRvIGFuZ3VsYXIgSHR0cFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gdGhpcy53bUh0dHBSZXNwb25zZS53bVRvQW5ndWxhclJlc3BvbnNlKG1vZGlmaWVkUmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKGVycm9yLCBtb2RpZmllZFJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFFekM7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUs1QjtRQUNJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNsRCxJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFJLFlBQVksQ0FBQztRQUNqQixJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFHLENBQUMsSUFBSSxDQUFDLGFB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WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUNKLENBQ0osQ0FBQztJQUNOLENBQUM7b0hBekVRLG1CQUFtQjt1RUFBbkIsbUJBQW1CLFdBQW5CLG1CQUFtQjs7aUZBQW5CLG1CQUFtQjtjQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGh0dHBTZXJ2aWNlLCBhcHBNYW5hZ2VyIH0gZnJvbSAnQHdtL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBXbUh0dHBSZXF1ZXN0LCBXbUh0dHBSZXNwb25zZSB9IGZyb20gJ0B3bS9odHRwJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQge19XTV9BUFBfUFJPSkVDVH0gZnJvbSBcIkB3bS9jb3JlXCI7XG5cbi8qKlxuICogVGhpcyBJbnRlcmNlcHRvciBpbnRlcmNlcHRzIGFsbCBuZXR3b3JrIGNhbGxzIGFuZCBpZiBhIG5ldHdvcmsgY2FsbCBmYWlsc1xuICogZHVlIHRvIHNlc3Npb24gdGltZW91dCwgdGhlbiBpdCBjYWxscyBhIGZ1bmN0aW9uIHRvIGhhbmRsZSBzZXNzaW9uIHRpbWVvdXQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdHRwQ2FsbEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICAgIHdtSHR0cFJlcXVlc3Q6IGFueTtcbiAgICB3bUh0dHBSZXNwb25zZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMud21IdHRwUmVxdWVzdCA9IG5ldyBXbUh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHRoaXMud21IdHRwUmVzcG9uc2UgPSBuZXcgV21IdHRwUmVzcG9uc2UoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVTdWJqZWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IFN1YmplY3QoKTtcbiAgICB9XG5cbiAgICBpc0Fic29sdXRlVXJsKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAvXlthLXpdW2EtejAtOSsuLV0qOlxcL1xcLy9pLnRlc3QodXJsKTtcbiAgICB9XG5cbiAgICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgICAgIGxldCBtb2RpZmllZFJlcTtcbiAgICAgICAgbGV0IG1vZGlmaWVkUmVzcDtcbiAgICAgICAgbGV0IGlzUmVsYXRpdmVBUElVcmwgPSBmYWxzZTtcbiAgICAgICAgaWYoIXRoaXMuaXNBYnNvbHV0ZVVybChyZXF1ZXN0LnVybCkpIHtcbiAgICAgICAgICAgIGlzUmVsYXRpdmVBUElVcmwgPSByZXF1ZXN0LnVybC5pbmRleE9mKFwic2VydmljZXMvXCIpICE9PSAtMSB8fCByZXF1ZXN0LnVybC5pbmRleE9mKFwial9zcHJpbmdfc2VjdXJpdHlfY2hlY2tcIikgIT09IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmKGlzUmVsYXRpdmVBUElVcmwpIHtcbiAgICAgICAgICAgIGxldCBhcGlVcmw9IF9XTV9BUFBfUFJPSkVDVC5hcGlVcmwgKyByZXF1ZXN0LnVybDtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHsgdXJsOiBhcGlVcmwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwcE1hbmFnZXIgJiYgYXBwTWFuYWdlci5hcHBPbkJlZm9yZVNlcnZpY2VDYWxsKSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhbmd1bGFyIEh0dHBSZXF1ZXN0IHRvIHdtIEh0dHBSZXF1ZXN0XG4gICAgICAgICAgICBjb25zdCByZXEgPSB0aGlzLndtSHR0cFJlcXVlc3QuYW5ndWxhclRvV21SZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgY29tbW9uIG9uQmVmb3JlU2VydmljZUNhbGwgaGFuZGxlciBwcmVzZW50IGluIGFwcC5qc1xuICAgICAgICAgICAgbW9kaWZpZWRSZXEgPSAgYXBwTWFuYWdlci5hcHBPbkJlZm9yZVNlcnZpY2VDYWxsKHJlcSk7XG4gICAgICAgICAgICBpZiAobW9kaWZpZWRSZXEpIHtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSB3bSBIdHRwUmVxdWVzdCB0byBhbmd1bGFyIEh0dHBSZXF1ZXN0XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRSZXEgPSB0aGlzLndtSHR0cFJlcXVlc3Qud21Ub0FuZ3VsYXJSZXF1ZXN0KG1vZGlmaWVkUmVxKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gbW9kaWZpZWRSZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnR5cGUgPT09IDQgJiYgYXBwTWFuYWdlciAmJiAgYXBwTWFuYWdlci5hcHBPblNlcnZpY2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhbmd1bGFyIEh0dHBSZXNwb25zZSB0byB3bSBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3AgPSB0aGlzLndtSHR0cFJlc3BvbnNlLmFuZ3VsYXJUb1dtUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgY29tbW9uIHN1Y2Nlc3MgaGFuZGxlciBwcmVzZW50IGluIGFwcC5qc1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gYXBwTWFuYWdlci5hcHBPblNlcnZpY2VTdWNjZXNzKHJlc3AuYm9keSwgcmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRSZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgd20gSHR0cFJlc3BvbnNlIHRvIGFuZ3VsYXIgSHR0cFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gdGhpcy53bUh0dHBSZXNwb25zZS53bVRvQW5ndWxhclJlc3BvbnNlKG1vZGlmaWVkUmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc3BvbnNlLCBtb2RpZmllZFJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLl80MDFTdWJzY3JpYmVyID0gdGhpcy5jcmVhdGVTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChodHRwU2VydmljZS5pc1BsYXRmb3JtU2Vzc2lvblRpbWVvdXQoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwU2VydmljZS5oYW5kbGVTZXNzaW9uVGltZW91dChyZXF1ZXN0LCBlcnJvci5fNDAxU3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcE1hbmFnZXIgJiYgYXBwTWFuYWdlci5hcHBPblNlcnZpY2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYW5ndWxhciBIdHRwUmVzcG9uc2UgdG8gd20gSHR0cFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSB0aGlzLndtSHR0cFJlc3BvbnNlLmFuZ3VsYXJUb1dtUmVzcG9uc2UoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgY29tbW9uIGVycm9yIGhhbmRsZXIgcHJlc2VudCBpbiBhcHAuanNcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkUmVzcCA9IGFwcE1hbmFnZXIuYXBwT25TZXJ2aWNlRXJyb3IoZXJyLm1lc3NhZ2UsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRSZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgd20gSHR0cFJlc3BvbnNlIHRvIGFuZ3VsYXIgSHR0cFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gdGhpcy53bUh0dHBSZXNwb25zZS53bVRvQW5ndWxhclJlc3BvbnNlKG1vZGlmaWVkUmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKGVycm9yLCBtb2RpZmllZFJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
@@ -298,9 +298,9 @@ class AppManagerService {
298
298
  updateSupportedLocaleVariable() {
299
299
  const supportedLocaleVar = get(this.$app, 'Variables.supportedLocale');
300
300
  }
301
- handleSSOLogin(config) {
301
+ handleSSOLogin(config, options) {
302
302
  const SSO_URL = 'services/security/ssologin', PREVIEW_WINDOW_NAME = 'WM_PREVIEW_WINDOW';
303
- let page, pageParams;
303
+ let page, queryParams;
304
304
  // do not provide redirectTo page if fetching HOME page resulted 401
305
305
  // on app load, by default Home page is loaded
306
306
  page = this.$security.getRedirectPage(config);
@@ -321,12 +321,17 @@ class AppManagerService {
321
321
  }
322
322
  else {
323
323
  page = page ? '?redirectPage=' + encodeURIComponent(page) : '';
324
- pageParams = this.$security.getQueryString(this.$security.getRedirectedRouteQueryParams());
325
- pageParams = pageParams ? '?' + pageParams : '';
324
+ /*
325
+ * For preview, this.$security.getRedirectedRouteQueryParams() gets the queryparams form the activated route(pagewrappercomponent)
326
+ * For deployed app, canactivate guard resolved to false and gets the queryparams from the canactivate gurard(no active route component)
327
+ */
328
+ queryParams = (options && options.queryParams) || this.$security.getRedirectedRouteQueryParams();
329
+ queryParams = this.$security.getQueryString(queryParams);
330
+ queryParams = queryParams ? '?' + queryParams : '';
326
331
  // showing a redirecting message
327
332
  document.body.textContent = get(this.getAppLocale(), ['MESSAGE_LOGIN_REDIRECTION']) || 'Redirecting to sso login...';
328
333
  // appending redirect to page and page params
329
- const ssoUrl = this.getDeployedURL() + SSO_URL + page + pageParams;
334
+ const ssoUrl = this.getDeployedURL() + SSO_URL + page + queryParams;
330
335
  /*
331
336
  * remove iFrame when redirected to IdP login page.
332
337
  * this is being done as IDPs do not allow to get themselves loaded into iFrames.
@@ -396,7 +401,7 @@ class AppManagerService {
396
401
  }
397
402
  break;
398
403
  case LOGIN_METHOD.SSO:
399
- this.handleSSOLogin(config);
404
+ this.handleSSOLogin(config, options);
400
405
  break;
401
406
  }
402
407
  this.setLandingPage();
@@ -422,7 +427,7 @@ class AppManagerService {
422
427
  this.$app.landingPageName = loginConfig.pageName;
423
428
  break;
424
429
  case LOGIN_METHOD.SSO:
425
- this.handleSSOLogin(config);
430
+ this.handleSSOLogin(config, options);
426
431
  break;
427
432
  }
428
433
  }
@@ -4247,11 +4252,17 @@ class HttpCallInterceptor {
4247
4252
  createSubject() {
4248
4253
  return new Subject();
4249
4254
  }
4255
+ isAbsoluteUrl(url) {
4256
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(url);
4257
+ }
4250
4258
  intercept(request, next) {
4251
4259
  let modifiedReq;
4252
4260
  let modifiedResp;
4253
- let isServicesUrl = request.url.indexOf("services/") !== -1 || request.url.indexOf("j_spring_security_check") !== -1;
4254
- if (isServicesUrl) {
4261
+ let isRelativeAPIUrl = false;
4262
+ if (!this.isAbsoluteUrl(request.url)) {
4263
+ isRelativeAPIUrl = request.url.indexOf("services/") !== -1 || request.url.indexOf("j_spring_security_check") !== -1;
4264
+ }
4265
+ if (isRelativeAPIUrl) {
4255
4266
  let apiUrl = _WM_APP_PROJECT.apiUrl + request.url;
4256
4267
  request = request.clone({ url: apiUrl });
4257
4268
  }