simpo-component-library 3.5.52 → 3.6.2

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 (309) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +3 -3
  3. package/esm2022/lib/components/document/document.component.mjs +3 -3
  4. package/esm2022/lib/components/hover-elements/hover-elements.component.mjs +3 -3
  5. package/esm2022/lib/components/image-loading/image-loading.component.mjs +3 -3
  6. package/esm2022/lib/components/payment-details/payment-details.component.mjs +3 -3
  7. package/esm2022/lib/constants/business.constant.mjs +1 -1
  8. package/esm2022/lib/directive/alignment.directive.mjs +23 -0
  9. package/esm2022/lib/directive/background-directive.mjs +130 -5
  10. package/esm2022/lib/directive/blur-content.directive.mjs +1 -1
  11. package/esm2022/lib/directive/border-directive.mjs +2 -2
  12. package/esm2022/lib/directive/borderlessImage.directive.mjs +4 -1
  13. package/esm2022/lib/directive/button-directive.directive.mjs +72 -17
  14. package/esm2022/lib/directive/button-editor.directive.mjs +22 -4
  15. package/esm2022/lib/directive/color.directive.mjs +1 -1
  16. package/esm2022/lib/directive/column-directive.directive.mjs +1 -1
  17. package/esm2022/lib/directive/container-alignment.directive.mjs +1 -1
  18. package/esm2022/lib/directive/container-fir.directive.mjs +1 -1
  19. package/esm2022/lib/directive/content-title-spacing.directive.mjs +4 -4
  20. package/esm2022/lib/directive/contenteditable.directive.mjs +1 -1
  21. package/esm2022/lib/directive/corner-directive.mjs +1 -1
  22. package/esm2022/lib/directive/height.directive.mjs +29 -0
  23. package/esm2022/lib/directive/hover-animation.directive.mjs +142 -0
  24. package/esm2022/lib/directive/hoverborder.directive.mjs +1 -1
  25. package/esm2022/lib/directive/image-container.directive.mjs +1 -1
  26. package/esm2022/lib/directive/image-directive.directive.mjs +1 -1
  27. package/esm2022/lib/directive/image-editor.directive.mjs +25 -5
  28. package/esm2022/lib/directive/image-position.directive.mjs +1 -1
  29. package/esm2022/lib/directive/position-layout-directive.directive.mjs +1 -1
  30. package/esm2022/lib/directive/set-dynamic-background.directive.mjs +66 -0
  31. package/esm2022/lib/directive/spacing-around.directive.mjs +40 -3
  32. package/esm2022/lib/directive/spacing-horizontal.directive.mjs +5 -1
  33. package/esm2022/lib/directive/spacing.directive.mjs +29 -0
  34. package/esm2022/lib/directive/sticky-directive.mjs +2 -2
  35. package/esm2022/lib/directive/text-background-directive.directive.mjs +1 -1
  36. package/esm2022/lib/directive/text-size.directive.mjs +1 -1
  37. package/esm2022/lib/directive/translate-onhover.directive.mjs +47 -0
  38. package/esm2022/lib/directive/wrap-containers.directive.mjs +1 -1
  39. package/esm2022/lib/ecommerce/sections/address/address.component.mjs +96 -59
  40. package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -3
  41. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +128 -14
  42. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
  43. package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +199 -0
  44. package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.model.mjs +2 -0
  45. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +214 -36
  46. package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
  47. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
  48. package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
  49. package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
  50. package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
  51. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
  52. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
  53. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +405 -0
  54. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.model.mjs +2 -0
  55. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +6 -4
  56. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
  57. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +7 -5
  58. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +42 -7
  59. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
  60. package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
  61. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +144 -0
  62. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.modal.mjs +2 -0
  63. package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +99 -11
  64. package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
  65. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
  66. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
  67. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +395 -21
  68. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
  69. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +626 -142
  70. package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
  71. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +95 -0
  72. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.model.mjs +2 -0
  73. package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +57 -0
  74. package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +36 -0
  75. package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +49 -4
  76. package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +157 -0
  77. package/esm2022/lib/ecommerce/sections/store-list/store-list.modal.mjs +2 -0
  78. package/esm2022/lib/ecommerce/sections/store-page/store-page.component.mjs +120 -0
  79. package/esm2022/lib/ecommerce/sections/store-page/store-page.model.mjs +2 -0
  80. package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +5 -4
  81. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +66 -16
  82. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
  83. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
  84. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
  85. package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +17 -12
  86. package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
  87. package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +5 -3
  88. package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
  89. package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
  90. package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
  91. package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
  92. package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
  93. package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
  94. package/esm2022/lib/ecommerce/styles/product.modal.mjs +22 -1
  95. package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
  96. package/esm2022/lib/ecommerce/styles/user.modal.mjs +3 -1
  97. package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -4
  98. package/esm2022/lib/elements/address-list/address-list.component.mjs +98 -0
  99. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +13 -8
  100. package/esm2022/lib/elements/button/button.component.mjs +3 -3
  101. package/esm2022/lib/elements/button/button.model.mjs +1 -1
  102. package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
  103. package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +8 -4
  104. package/esm2022/lib/elements/editor-service.service.mjs +29 -12
  105. package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
  106. package/esm2022/lib/elements/image-editor/image-editor.component.mjs +147 -15
  107. package/esm2022/lib/elements/index.mjs +1 -1
  108. package/esm2022/lib/elements/link-editor/link-editor.component.mjs +108 -10
  109. package/esm2022/lib/elements/list-home-appointment/list-home-appointment.component.mjs +94 -0
  110. package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
  111. package/esm2022/lib/elements/navbar-button-element/navbar-button-element.component.mjs +1 -2
  112. package/esm2022/lib/elements/portfolio/portfolio.component.mjs +3 -3
  113. package/esm2022/lib/elements/pricing-s1/pricing-s1.component.mjs +80 -0
  114. package/esm2022/lib/elements/property/property.component.mjs +3 -3
  115. package/esm2022/lib/elements/schedule-video-call/schedule-video-call.component.mjs +187 -0
  116. package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +3 -3
  117. package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +3 -3
  118. package/esm2022/lib/elements/text/text.component.mjs +3 -3
  119. package/esm2022/lib/elements/text-editor/text-editor.component.mjs +72 -27
  120. package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +7 -3
  121. package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
  122. package/esm2022/lib/pipes/gender.pipe.mjs +5 -1
  123. package/esm2022/lib/sections/BaseSection.mjs +1 -1
  124. package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
  125. package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +164 -98
  126. package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
  127. package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +6 -32
  128. package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
  129. package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +52 -17
  130. package/esm2022/lib/sections/banner-section/banner-section.component.mjs +6 -25
  131. package/esm2022/lib/sections/blog-list/blog-list.component.mjs +4 -4
  132. package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
  133. package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +8 -7
  134. package/esm2022/lib/sections/carousel-banner/carousel-banner.model.mjs +1 -1
  135. package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +6 -4
  136. package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
  137. package/esm2022/lib/sections/contact-us/contact-us.component.mjs +37 -7
  138. package/esm2022/lib/sections/contact-us/contact-us.modal.mjs +1 -1
  139. package/esm2022/lib/sections/faq-section/faq-section.component.mjs +4 -4
  140. package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
  141. package/esm2022/lib/sections/features-section/features-section.component.mjs +6 -4
  142. package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
  143. package/esm2022/lib/sections/footer/footer.component.mjs +6 -9
  144. package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
  145. package/esm2022/lib/sections/header-section/header-section.component.mjs +95 -13
  146. package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
  147. package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
  148. package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
  149. package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +12 -22
  150. package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
  151. package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +9 -4
  152. package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
  153. package/esm2022/lib/sections/image-section/image-section.component.mjs +12 -5
  154. package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
  155. package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
  156. package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
  157. package/esm2022/lib/sections/logo-gallery/logo-gallery.component.mjs +9 -4
  158. package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +9 -3
  159. package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
  160. package/esm2022/lib/sections/moving-text/moving-text.component.mjs +119 -0
  161. package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +2 -0
  162. package/esm2022/lib/sections/new-services/new-services.component.mjs +4 -4
  163. package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
  164. package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +12 -6
  165. package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
  166. package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +108 -0
  167. package/esm2022/lib/sections/news-letter-component/news-letter.modal.mjs +2 -0
  168. package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +28 -4
  169. package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
  170. package/esm2022/lib/sections/process-modern/process-modern.component.mjs +12 -4
  171. package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
  172. package/esm2022/lib/sections/process-section/process-section.component.mjs +6 -3
  173. package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
  174. package/esm2022/lib/sections/property-component/property-component.component.mjs +3 -3
  175. package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
  176. package/esm2022/lib/sections/property-list/property-list.component.mjs +3 -3
  177. package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
  178. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +6 -4
  179. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
  180. package/esm2022/lib/sections/registration-form/registration-form.component.mjs +9 -9
  181. package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
  182. package/esm2022/lib/sections/service-section/service-section.component.mjs +4 -4
  183. package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
  184. package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
  185. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
  186. package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
  187. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +6 -3
  188. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
  189. package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +18 -3
  190. package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
  191. package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
  192. package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
  193. package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +3 -17
  194. package/esm2022/lib/sections/text-section/text-section.component.mjs +3 -21
  195. package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
  196. package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +3 -3
  197. package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
  198. package/esm2022/lib/sections/video-section/video-section.component.mjs +16 -16
  199. package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
  200. package/esm2022/lib/sections/view-blog/view-blog.component.mjs +3 -3
  201. package/esm2022/lib/services/cart.service.mjs +38 -35
  202. package/esm2022/lib/services/endUser.service.mjs +1 -1
  203. package/esm2022/lib/services/events.service.mjs +3 -8
  204. package/esm2022/lib/services/image-upload-service.service.mjs +7 -4
  205. package/esm2022/lib/services/rest.service.mjs +125 -68
  206. package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
  207. package/esm2022/lib/services/storage.service.mjs +27 -44
  208. package/esm2022/lib/styles/index.mjs +8 -1
  209. package/esm2022/lib/styles/style.model.mjs +3 -2
  210. package/esm2022/lib/styles/types.mjs +1 -1
  211. package/esm2022/lib/tokens/api-token.mjs +1 -1
  212. package/esm2022/public-api.mjs +14 -2
  213. package/fesm2022/simpo-component-library.mjs +5815 -1711
  214. package/fesm2022/simpo-component-library.mjs.map +1 -1
  215. package/lib/directive/alignment.directive.d.ts +11 -0
  216. package/lib/directive/button-directive.directive.d.ts +2 -0
  217. package/lib/directive/button-editor.directive.d.ts +6 -2
  218. package/lib/directive/height.directive.d.ts +11 -0
  219. package/lib/directive/hover-animation.directive.d.ts +19 -0
  220. package/lib/directive/image-editor.directive.d.ts +6 -1
  221. package/lib/directive/set-dynamic-background.directive.d.ts +14 -0
  222. package/lib/directive/spacing-around.directive.d.ts +7 -2
  223. package/lib/directive/spacing.directive.d.ts +12 -0
  224. package/lib/directive/translate-onhover.directive.d.ts +11 -0
  225. package/lib/ecommerce/sections/address/address.component.d.ts +11 -3
  226. package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +23 -5
  227. package/lib/ecommerce/sections/book-appointment/book-appointment.component.d.ts +70 -0
  228. package/lib/ecommerce/sections/book-appointment/book-appointment.model.d.ts +14 -0
  229. package/lib/ecommerce/sections/cart/cart.component.d.ts +35 -3
  230. package/lib/ecommerce/sections/enrollment-form/enrollment-form.component.d.ts +54 -0
  231. package/lib/ecommerce/sections/enrollment-form/enrollment-form.model.d.ts +29 -0
  232. package/lib/ecommerce/sections/featured-category/featured-category.modal.d.ts +2 -0
  233. package/lib/ecommerce/sections/featured-products/featured-products.component.d.ts +6 -1
  234. package/lib/ecommerce/sections/featured-products/featured-products.modal.d.ts +6 -2
  235. package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +36 -0
  236. package/lib/ecommerce/sections/new-collection/new-collection.modal.d.ts +23 -0
  237. package/lib/ecommerce/sections/order-details/order-details.component.d.ts +18 -1
  238. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +61 -2
  239. package/lib/ecommerce/sections/product-desc/product-desc.modal.d.ts +5 -0
  240. package/lib/ecommerce/sections/product-list/product-list.component.d.ts +110 -17
  241. package/lib/ecommerce/sections/returns-calculator/returns-calculator.component.d.ts +31 -0
  242. package/lib/ecommerce/sections/returns-calculator/returns-calculator.model.d.ts +14 -0
  243. package/lib/ecommerce/sections/scheme-details/scheme-details.component.d.ts +16 -0
  244. package/lib/ecommerce/sections/scheme-selection/scheme-selection.component.d.ts +18 -0
  245. package/lib/ecommerce/sections/small-product-listing/small-product-listing.component.d.ts +6 -1
  246. package/lib/ecommerce/sections/store-list/store-list.component.d.ts +43 -0
  247. package/lib/ecommerce/sections/store-list/store-list.modal.d.ts +11 -0
  248. package/lib/ecommerce/sections/store-page/store-page.component.d.ts +27 -0
  249. package/lib/ecommerce/sections/store-page/store-page.model.d.ts +11 -0
  250. package/lib/ecommerce/sections/user-profile/user-profile.component.d.ts +10 -1
  251. package/lib/ecommerce/sections/whislist/whislist.component.d.ts +4 -1
  252. package/lib/ecommerce/styles/Collection.modal.d.ts +1 -0
  253. package/lib/ecommerce/styles/product.modal.d.ts +19 -0
  254. package/lib/ecommerce/styles/user.modal.d.ts +3 -0
  255. package/lib/elements/address-list/address-list.component.d.ts +27 -0
  256. package/lib/elements/below-image-card/below-image-card.component.d.ts +3 -0
  257. package/lib/elements/covering-image-card/covering-image-card.component.d.ts +3 -0
  258. package/lib/elements/editor-service.service.d.ts +4 -4
  259. package/lib/elements/image-editor/image-editor.component.d.ts +29 -3
  260. package/lib/elements/link-editor/link-editor.component.d.ts +13 -1
  261. package/lib/elements/list-home-appointment/list-home-appointment.component.d.ts +27 -0
  262. package/lib/elements/pricing-s1/pricing-s1.component.d.ts +21 -0
  263. package/lib/elements/schedule-video-call/schedule-video-call.component.d.ts +33 -0
  264. package/lib/elements/text-editor/text-editor.component.d.ts +3 -0
  265. package/lib/elements/top-of-image-card/top-of-image-card.component.d.ts +3 -0
  266. package/lib/sections/appointment-form/appointment-form.component.d.ts +11 -4
  267. package/lib/sections/banner-carousel/banner-carousel.component.d.ts +1 -1
  268. package/lib/sections/banner-grid-section/banner-grid-section.component.d.ts +8 -1
  269. package/lib/sections/carousel-banner/carousel-banner.model.d.ts +1 -0
  270. package/lib/sections/contact-us/contact-us.component.d.ts +2 -1
  271. package/lib/sections/contact-us/contact-us.modal.d.ts +5 -1
  272. package/lib/sections/features-section/features-section.model.d.ts +2 -0
  273. package/lib/sections/header-section/header-section.component.d.ts +29 -2
  274. package/lib/sections/header-section/header-section.model.d.ts +14 -2
  275. package/lib/sections/header-text/header-text.model.d.ts +2 -1
  276. package/lib/sections/image-carousel-section/image-carousel-section.component.d.ts +2 -1
  277. package/lib/sections/image-grid-section/image-grid-section.component.d.ts +1 -0
  278. package/lib/sections/image-grid-section/image-grid-section.model.d.ts +3 -1
  279. package/lib/sections/image-section/image-section.component.d.ts +2 -1
  280. package/lib/sections/logo-gallery/logo-gallery.component.d.ts +2 -1
  281. package/lib/sections/logo-showcase/logo-showcase.component.d.ts +3 -1
  282. package/lib/sections/logo-showcase/logo-showcase.modal.d.ts +11 -2
  283. package/lib/sections/moving-text/moving-text.component.d.ts +28 -0
  284. package/lib/sections/moving-text/moving-text.modal.d.ts +19 -0
  285. package/lib/sections/new-testimonials/new-testimonials.component.d.ts +2 -1
  286. package/lib/sections/news-letter-component/news-letter-component.component.d.ts +26 -0
  287. package/lib/sections/news-letter-component/news-letter.modal.d.ts +19 -0
  288. package/lib/sections/pricing-section/pricing-section.component.d.ts +2 -0
  289. package/lib/sections/pricing-section/pricing-section.modal.d.ts +3 -0
  290. package/lib/sections/process-modern/process-modern.component.d.ts +2 -0
  291. package/lib/sections/process-section/process-section.component.d.ts +1 -0
  292. package/lib/sections/process-section/process-section.modal.d.ts +2 -0
  293. package/lib/sections/service-section/service-section.model.d.ts +5 -1
  294. package/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.d.ts +1 -0
  295. package/lib/sections/testimonial-section/testimonial-section.component.d.ts +1 -0
  296. package/lib/sections/video-section/video-section.component.d.ts +4 -3
  297. package/lib/sections/video-section/video-section.model.d.ts +1 -1
  298. package/lib/services/cart.service.d.ts +1 -6
  299. package/lib/services/events.service.d.ts +2 -6
  300. package/lib/services/rest.service.d.ts +29 -18
  301. package/lib/services/storage.service.d.ts +6 -5
  302. package/lib/styles/index.d.ts +7 -1
  303. package/lib/styles/style.model.d.ts +15 -1
  304. package/lib/styles/types.d.ts +10 -2
  305. package/package.json +1 -1
  306. package/public-api.d.ts +13 -0
  307. package/simpo-component-library-3.6.2.tgz +0 -0
  308. package/src/lib/styles/global-styles.css +251 -191
  309. package/simpo-component-library-3.5.52.tgz +0 -0
@@ -0,0 +1,405 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import BaseSection from '../../../sections/BaseSection';
3
+ import { CommonModule } from '@angular/common';
4
+ import { AnimationDirective } from '../../../directive/animation-directive';
5
+ import { BackgroundDirective } from '../../../directive/background-directive';
6
+ import { CornerDirective } from '../../../directive/corner-directive';
7
+ import { SimpoComponentModule } from '../../../components/index';
8
+ import { HoverDirective } from '../../../directive/hover-element-directive';
9
+ import { ButtonDirectiveDirective } from '../../../directive/button-directive.directive';
10
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
11
+ import { MatIcon } from '@angular/material/icon';
12
+ import { ContentFitDirective } from '../../../directive/content-fit-directive';
13
+ import { SpacingHorizontalDirective } from '../../../directive/spacing-horizontal.directive';
14
+ import { ButtonEditorDirective } from '../../../directive/button-editor.directive';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "../../../services/rest.service";
17
+ import * as i2 from "@angular/router";
18
+ import * as i3 from "../../../services/storage.service";
19
+ import * as i4 from "@angular/common";
20
+ import * as i5 from "@angular/forms";
21
+ import * as i6 from "../../../components/hover-elements/hover-elements.component";
22
+ import * as i7 from "../../../components/delete-hover-element/delete-hover-element.component";
23
+ export class EnrollmentFormComponent extends BaseSection {
24
+ constructor(restService, activeRoute, storageService, router) {
25
+ super();
26
+ this.restService = restService;
27
+ this.activeRoute = activeRoute;
28
+ this.storageService = storageService;
29
+ this.router = router;
30
+ this.edit = true;
31
+ this.page = 'ENROLLMENT';
32
+ this.enrollementPayload = {
33
+ name: "",
34
+ mailId: "",
35
+ mobileNumber: "",
36
+ dateOfBirth: "",
37
+ schemeDetails: {
38
+ schemeId: "",
39
+ schemeName: "",
40
+ schemeType: "",
41
+ pwcSchemeCode: ""
42
+ },
43
+ pwcUserCode: "",
44
+ addressDetails: {
45
+ state: {
46
+ id: "",
47
+ name: ""
48
+ },
49
+ city: {
50
+ id: "",
51
+ name: ""
52
+ },
53
+ addressLine: "",
54
+ pinCode: localStorage.getItem('pincode') || 0,
55
+ },
56
+ bankDetails: {
57
+ bankName: "",
58
+ accountNumber: 0,
59
+ ifscCode: "",
60
+ accountHolderName: ""
61
+ },
62
+ nomineeDetails: {
63
+ nomineeName: "",
64
+ mobile: "",
65
+ relationShip: "Father",
66
+ },
67
+ custodian: {
68
+ staffId: "",
69
+ staffName: "",
70
+ mobileNumber: "",
71
+ email: "",
72
+ staffCode: "",
73
+ profileImgUrl: ""
74
+ },
75
+ storeDetails: {},
76
+ enrolledGroup: {},
77
+ monthlyInstallmentAmount: 0,
78
+ pwcStoreCode: "",
79
+ subscriptionChargeDate: new Date().getDate()
80
+ };
81
+ this.schemesData = [];
82
+ this.storeData = [];
83
+ this.staffData = [];
84
+ this.stateData = [];
85
+ this.cityData = [];
86
+ this.storeSlabs = [];
87
+ this.validator = false;
88
+ this.showResult = true;
89
+ this.isProcessing = false;
90
+ this.validObject = {
91
+ NAME: true,
92
+ EMAIL: true,
93
+ MOBILE: true,
94
+ DOB: true,
95
+ SCHEME: true,
96
+ MONTHLY_AMOUNT: true,
97
+ STORE: true,
98
+ ADDRESS: true,
99
+ STATE: true,
100
+ CITY: true,
101
+ PINCODE: true,
102
+ NOMINEE_NAME: true,
103
+ NOMINEE_MOBILE: true,
104
+ NOMINEE_RELATIONSHIP: true,
105
+ BANK_NAME: true,
106
+ ACCOUNT_NUMBER: true,
107
+ IFSC_CODE: true,
108
+ ACCOUNT_HOLDER_NAME: true,
109
+ };
110
+ }
111
+ ngOnInit() {
112
+ this.checkUserLoggedIn();
113
+ this.getSchemes();
114
+ this.getAllStores();
115
+ this.getAllState();
116
+ }
117
+ checkUserLoggedIn() {
118
+ if (!this.storageService.getUser()) {
119
+ this.router.navigate(['/login'], { queryParams: { schemes: true } });
120
+ }
121
+ else {
122
+ let user = this.storageService?.getUser();
123
+ this.enrollementPayload.name = user?.contact?.name;
124
+ this.enrollementPayload.mailId = user?.contact?.email;
125
+ this.enrollementPayload.mobileNumber = user?.contact?.mobile;
126
+ this.enrollementPayload.pwcUserCode = user?.pwcUserCode;
127
+ }
128
+ }
129
+ getSchemes() {
130
+ this.restService.getAllScheme().subscribe((res) => {
131
+ this.schemesData = res?.data || [];
132
+ this.selectedScheme = this.schemesData[0];
133
+ this.setMonthlyInstallmentAmount();
134
+ }, (error) => {
135
+ console.error("Error fetching schemes: ", error);
136
+ });
137
+ }
138
+ getAllStores() {
139
+ this.restService.getAllStoresOrra(0, 10000).subscribe((res) => {
140
+ this.storeData = res?.data?.data || [];
141
+ this.enrollementPayload.storeDetails = this.storeData[0];
142
+ this.getStaffById();
143
+ }, (error) => {
144
+ console.error("Error fetching stores: ", error);
145
+ });
146
+ }
147
+ getStaffById() {
148
+ this.restService.getstaffByStoreId(this.enrollementPayload.storeDetails.storeId).subscribe((res) => {
149
+ this.staffData = res?.data || [];
150
+ this.enrollementPayload.custodian = this.staffData[0] || {};
151
+ }, (error) => {
152
+ console.error("Error fetching staff: ", error);
153
+ });
154
+ }
155
+ getAllState() {
156
+ this.restService.getAllState().subscribe((res) => {
157
+ this.stateData = res?.data || [];
158
+ this.enrollementPayload.addressDetails.state = this.stateData[0] || {};
159
+ this.getCityByStateId();
160
+ }, (error) => {
161
+ console.error("Error fetching states: ", error);
162
+ });
163
+ }
164
+ getCityByStateId() {
165
+ this.restService.getCityByStateBypaginated(this.enrollementPayload.addressDetails.state.id, 0, 10000).subscribe((res) => {
166
+ this.cityData = res?.data.data || [];
167
+ this.enrollementPayload.addressDetails.city = this.cityData[0] || {};
168
+ }, (error) => {
169
+ console.error("Error fetching Cities: ", error);
170
+ });
171
+ }
172
+ setMonthlyInstallmentAmount() {
173
+ if (this.selectedScheme.schemeType == 'INDIVIDUAL' && this.selectedScheme.minInstallmentAmount) {
174
+ this.enrollementPayload.monthlyInstallmentAmount = this.selectedScheme.minInstallmentAmount;
175
+ }
176
+ else {
177
+ this.getStoreSlabs();
178
+ }
179
+ }
180
+ getStoreSlabs() {
181
+ this.restService.getStoreBySlab({ storesList: this.selectedScheme.schemeSlabs[0].slabStores }).subscribe((res) => {
182
+ this.storeSlabs = res?.data || [];
183
+ }, (error) => {
184
+ console.error("Error fetching store slabs: ", error);
185
+ });
186
+ }
187
+ createEnrollment() {
188
+ for (let ele of Object.keys(this.validObject)) {
189
+ this.validater(ele);
190
+ }
191
+ if (Object.values(this.validObject).some(value => !value)) {
192
+ this.validator = true;
193
+ return;
194
+ }
195
+ this.enrollementPayload.pwcStoreCode = this.enrollementPayload.storeDetails?.pwcStoreCode || this.selectedScheme?.pwcStoreCode;
196
+ this.enrollementPayload.schemeDetails = ['schemeId', 'schemeName', 'schemeType', 'pwcSchemeCode'].reduce((acc, key) => {
197
+ if (this.selectedScheme[key] !== undefined) {
198
+ acc[key] = this.selectedScheme[key];
199
+ }
200
+ if (key == 'pwcSchemeCode') {
201
+ acc[key] = this.selectedScheme?.pwcIndividualSchemeCode;
202
+ }
203
+ return acc;
204
+ }, {});
205
+ if (this.selectedScheme.schemeType == 'GROUP') {
206
+ this.enrollementPayload.enrolledGroup.schemeId = this.selectedScheme?.schemeId;
207
+ this.enrollementPayload.enrolledGroup.schemeName = this.selectedScheme?.schemeName;
208
+ this.enrollementPayload.enrolledGroup.storeId = this.enrollementPayload?.storeDetails?.storeId;
209
+ this.enrollementPayload.enrolledGroup.storeName = this.enrollementPayload?.storeDetails?.storeName;
210
+ this.enrollementPayload.monthlyInstallmentAmount = this.enrollementPayload?.enrolledGroup?.schemeSlab?.monthlyInstallmentAmount;
211
+ }
212
+ this.enrollementPayload.addressDetails.state = ['id', 'name'].reduce((acc, key) => {
213
+ if (this.enrollementPayload.addressDetails.state?.[key] !== undefined) {
214
+ acc[key] = this.enrollementPayload.addressDetails.state[key];
215
+ }
216
+ return acc;
217
+ }, {});
218
+ this.enrollementPayload.addressDetails.city = ['id', 'name'].reduce((acc, key) => {
219
+ if (this.enrollementPayload.addressDetails.city?.[key] !== undefined) {
220
+ acc[key] = this.enrollementPayload.addressDetails.city[key];
221
+ }
222
+ return acc;
223
+ }, {});
224
+ this.enrollementPayload.custodian = [
225
+ 'staffId', 'staffName', 'mobileNumber', 'email', 'staffCode', 'profileImgUrl'
226
+ ].reduce((acc, key) => {
227
+ if (this.enrollementPayload.custodian?.[key] !== undefined) {
228
+ acc[key] = this.enrollementPayload.custodian[key];
229
+ }
230
+ if (key == 'staffName')
231
+ acc[key] = this.enrollementPayload.custodian?.personalInfo?.name;
232
+ if (key == 'mobileNumber')
233
+ acc[key] = this.enrollementPayload.custodian?.contactDetails?.mobile;
234
+ if (key == 'email')
235
+ acc[key] = this.enrollementPayload.custodian?.contactDetails?.email;
236
+ if (key == 'profileImgUrl')
237
+ acc[key] = this.enrollementPayload.custodian?.personalInfo?.profileImage;
238
+ if (key == 'staffCode')
239
+ acc[key] = this.enrollementPayload.custodian?.staffWorkInfo?.staffCode;
240
+ return acc;
241
+ }, {});
242
+ this.page = 'PAYMENT';
243
+ }
244
+ success() {
245
+ this.restService.createEnrollmentScheme(this.enrollementPayload).subscribe((res) => {
246
+ this.router.navigate(['/profile']);
247
+ }, (error) => {
248
+ this.simulatePayment('failure');
249
+ });
250
+ }
251
+ simulatePayment(type) {
252
+ this.isProcessing = true;
253
+ this.showResult = false;
254
+ this.result = {};
255
+ setTimeout(() => {
256
+ this.isProcessing = false;
257
+ if (type === 'success') {
258
+ this.result = {
259
+ type: 'success',
260
+ title: 'Payment Successful!',
261
+ message: 'Your transaction has been processed successfully.',
262
+ iconClass: 'fas fa-check-circle'
263
+ };
264
+ this.success();
265
+ }
266
+ else {
267
+ this.result = {
268
+ type: 'failure',
269
+ title: 'Payment Failed!',
270
+ message: 'There was an error processing your payment. Please try again.',
271
+ iconClass: 'fas fa-exclamation-triangle'
272
+ };
273
+ }
274
+ setTimeout(() => {
275
+ this.showResult = true;
276
+ }, 100);
277
+ }, 2000);
278
+ }
279
+ getButtonId(index) {
280
+ return this.data?.action?.buttons[index]?.id ?? "";
281
+ }
282
+ getButtonStyle(index) {
283
+ return this.data?.action?.buttons[index]?.styles;
284
+ }
285
+ getButtonContent(index) {
286
+ return this.data?.action?.buttons[index]?.content;
287
+ }
288
+ validateForm(fieldType) {
289
+ clearTimeout(this.debounceTimer);
290
+ this.debounceTimer = setTimeout(() => {
291
+ this.validater(fieldType);
292
+ }, 300);
293
+ }
294
+ validater(fieldType) {
295
+ switch (fieldType) {
296
+ case 'NAME': {
297
+ this.validObject.NAME = this.enrollementPayload.name.trim().length > 0;
298
+ break;
299
+ }
300
+ case 'EMAIL': {
301
+ this.validObject.EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(this.enrollementPayload.mailId);
302
+ break;
303
+ }
304
+ case 'MOBILE': {
305
+ this.validObject.MOBILE = /^\d{10}$/.test(this.enrollementPayload.mobileNumber);
306
+ break;
307
+ }
308
+ case 'DOB': {
309
+ this.validObject.DOB = !!this.enrollementPayload.dateOfBirth;
310
+ break;
311
+ }
312
+ case 'SCHEME': {
313
+ this.validObject.SCHEME = !!this.selectedScheme;
314
+ break;
315
+ }
316
+ case 'MONTHLY_AMOUNT': {
317
+ this.validObject.MONTHLY_AMOUNT = this.enrollementPayload?.monthlyInstallmentAmount > 0;
318
+ break;
319
+ }
320
+ case 'STORE': {
321
+ this.validObject.STORE = !!this.enrollementPayload?.storeDetails?.storeId;
322
+ break;
323
+ }
324
+ case 'ADDRESS': {
325
+ this.validObject.ADDRESS = !!this.enrollementPayload?.addressDetails?.addressLine.trim();
326
+ break;
327
+ }
328
+ case 'STATE': {
329
+ this.validObject.STATE = !!this.enrollementPayload?.addressDetails?.state?.id;
330
+ break;
331
+ }
332
+ case 'CITY': {
333
+ this.validObject.CITY = !!this.enrollementPayload?.addressDetails?.city?.id;
334
+ break;
335
+ }
336
+ case 'PINCODE': {
337
+ this.validObject.PINCODE = /^\d{6}$/.test(this.enrollementPayload?.addressDetails?.pinCode?.toString());
338
+ break;
339
+ }
340
+ case 'NOMINEE_NAME': {
341
+ this.validObject.NOMINEE_NAME = this.enrollementPayload?.nomineeDetails?.nomineeName?.trim()?.length > 0;
342
+ break;
343
+ }
344
+ case 'NOMINEE_MOBILE': {
345
+ this.validObject.NOMINEE_MOBILE = /^\d{10}$/.test(this.enrollementPayload?.nomineeDetails?.mobile);
346
+ break;
347
+ }
348
+ case 'NOMINEE_RELATIONSHIP': {
349
+ this.validObject.NOMINEE_RELATIONSHIP = !!this.enrollementPayload?.nomineeDetails?.relationShip?.trim();
350
+ break;
351
+ }
352
+ case 'BANK_NAME': {
353
+ this.validObject.BANK_NAME = !!this.enrollementPayload?.bankDetails?.bankName.trim();
354
+ break;
355
+ }
356
+ case 'ACCOUNT_NUMBER': {
357
+ this.validObject.ACCOUNT_NUMBER = /^\d+$/.test(this.enrollementPayload?.bankDetails?.accountNumber?.toString());
358
+ break;
359
+ }
360
+ case 'IFSC_CODE': {
361
+ this.validObject.IFSC_CODE = !!this.enrollementPayload?.bankDetails?.ifscCode?.trim();
362
+ break;
363
+ }
364
+ case 'ACCOUNT_HOLDER_NAME': {
365
+ this.validObject.ACCOUNT_HOLDER_NAME = this.enrollementPayload?.bankDetails?.accountHolderName?.trim().length > 0;
366
+ break;
367
+ }
368
+ default: {
369
+ break;
370
+ }
371
+ }
372
+ }
373
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnrollmentFormComponent, deps: [{ token: i1.RestService }, { token: i2.ActivatedRoute }, { token: i3.StorageServiceService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
374
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EnrollmentFormComponent, isStandalone: true, selector: "simpo-enrollment-form", inputs: { data: "data", edit: "edit", customClass: "customClass", delete: "delete", index: "index" }, usesInheritance: true, ngImport: i0, template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\r\n [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\r\n [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\r\n [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\r\n [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\r\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\r\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\r\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\r\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\r\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\r\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\r\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\r\n <!-- payment-simulation.component.html -->\r\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\r\n *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"payment-container\">\r\n\r\n <!-- Header -->\r\n <div class=\"payment-header mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <h1 class=\"payment-title\">Payment Method</h1>\r\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Credit Card -->\r\n <div class=\"credit-card mb-4\">\r\n <div class=\"card-inner\">\r\n <div class=\"card-shine\"></div>\r\n <div class=\"card-content\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"visa-logo\"></div>\r\n <span class=\"visa-text\">VISA</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cardholder-name mb-4\">\r\n turquoisecoyote\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div class=\"card-dots\">\r\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\r\n </div>\r\n <span class=\"card-number\">1111</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- OTP Section -->\r\n <div class=\"otp-section mb-4\">\r\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\r\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\r\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\r\n </div>\r\n\r\n <!-- Simulation Buttons -->\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate failure\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate success\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Processing State -->\r\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\r\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n\r\n <!-- Result Alert -->\r\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success',\r\n 'alert-danger': result.type === 'failure'\r\n }\">\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"text-center mt-4\">\r\n <small class=\"text-muted\">\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i6.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i7.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }] }); }
375
+ }
376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnrollmentFormComponent, decorators: [{
377
+ type: Component,
378
+ args: [{ selector: 'simpo-enrollment-form', standalone: true, imports: [
379
+ CommonModule,
380
+ FormsModule,
381
+ ReactiveFormsModule,
382
+ MatIcon,
383
+ SimpoComponentModule,
384
+ AnimationDirective,
385
+ BackgroundDirective,
386
+ CornerDirective,
387
+ HoverDirective,
388
+ ButtonDirectiveDirective,
389
+ ContentFitDirective,
390
+ SpacingHorizontalDirective,
391
+ ButtonEditorDirective,
392
+ MatIcon
393
+ ], template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\r\n [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\r\n [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\r\n [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\r\n [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\r\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\r\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\r\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\r\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\r\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\r\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\r\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\r\n <!-- payment-simulation.component.html -->\r\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\r\n *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"payment-container\">\r\n\r\n <!-- Header -->\r\n <div class=\"payment-header mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <h1 class=\"payment-title\">Payment Method</h1>\r\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Credit Card -->\r\n <div class=\"credit-card mb-4\">\r\n <div class=\"card-inner\">\r\n <div class=\"card-shine\"></div>\r\n <div class=\"card-content\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"visa-logo\"></div>\r\n <span class=\"visa-text\">VISA</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cardholder-name mb-4\">\r\n turquoisecoyote\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div class=\"card-dots\">\r\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\r\n </div>\r\n <span class=\"card-number\">1111</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- OTP Section -->\r\n <div class=\"otp-section mb-4\">\r\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\r\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\r\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\r\n </div>\r\n\r\n <!-- Simulation Buttons -->\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate failure\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate success\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Processing State -->\r\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\r\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n\r\n <!-- Result Alert -->\r\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success',\r\n 'alert-danger': result.type === 'failure'\r\n }\">\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"text-center mt-4\">\r\n <small class=\"text-muted\">\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}\n"] }]
394
+ }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.ActivatedRoute }, { type: i3.StorageServiceService }, { type: i2.Router }], propDecorators: { data: [{
395
+ type: Input
396
+ }], edit: [{
397
+ type: Input
398
+ }], customClass: [{
399
+ type: Input
400
+ }], delete: [{
401
+ type: Input
402
+ }], index: [{
403
+ type: Input
404
+ }] } });
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL2Vucm9sbG1lbnQtZm9ybS9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZW5yb2xsbWVudC1mb3JtL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxp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QkF0Qm5DLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLE9BQU87cUJBQ1I7c0tBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBOZ01vZHVsZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFbnJvbGxtZW50Rm9ybU1vZGVsLCBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWwgfSBmcm9tICcuL2Vucm9sbG1lbnQtZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAc2ltcG8tdWkvZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tZW5yb2xsbWVudC1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBDb3JuZXJEaXJlY3RpdmUsXHJcbiAgICBIb3ZlckRpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSxcclxuICAgIE1hdEljb25cclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEVucm9sbG1lbnRGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG5cclxuICBASW5wdXQoKSBkYXRhPzogRW5yb2xsbWVudEZvcm1Nb2RlbDtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGVsZXRlPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBzdHlsZXM/OiBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNoZWNrVXNlckxvZ2dlZEluKCk7XHJcbiAgICB0aGlzLmdldFNjaGVtZXMoKTtcclxuICAgIHRoaXMuZ2V0QWxsU3RvcmVzKCk7XHJcbiAgICB0aGlzLmdldEFsbFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja1VzZXJMb2dnZWRJbigpIHtcclxuICAgIGlmICghdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCkpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSwgeyBxdWVyeVBhcmFtczogeyBzY2hlbWVzOiB0cnVlIH0gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgIHVzZXIgID0gdGhpcy5zdG9yYWdlU2VydmljZT8uZ2V0VXNlcigpXHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm5hbWUgPSB1c2VyPy5jb250YWN0Py5uYW1lXHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1haWxJZCA9IHVzZXI/LmNvbnRhY3Q/LmVtYWlsXHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1vYmlsZU51bWJlciA9IHVzZXI/LmNvbnRhY3Q/Lm1vYmlsZVxyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5wd2NVc2VyQ29kZSA9IHVzZXI/LnB3Y1VzZXJDb2RlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYWdlOiAnRU5ST0xMTUVOVCcgfCAnUEFZTUVOVCcgPSAnRU5ST0xMTUVOVCc7XHJcblxyXG4gIGVucm9sbGVtZW50UGF5bG9hZDogYW55ID0ge1xyXG4gICAgbmFtZTogXCJcIixcclxuICAgIG1haWxJZDogXCJcIixcclxuICAgIG1vYmlsZU51bWJlcjogXCJcIixcclxuICAgIGRhdGVPZkJpcnRoOiBcIlwiLFxyXG4gICAgc2NoZW1lRGV0YWlsczoge1xyXG4gICAgICBzY2hlbWVJZDogXCJcIixcclxuICAgICAgc2NoZW1lTmFtZTogXCJcIixcclxuICAgICAgc2NoZW1lVHlwZTogXCJcIixcclxuICAgICAgcHdjU2NoZW1lQ29kZTogXCJcIlxyXG4gICAgfSxcclxuICAgIHB3Y1VzZXJDb2RlOiBcIlwiLFxyXG4gICAgYWRkcmVzc0RldGFpbHM6IHtcclxuICAgICAgc3RhdGU6IHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH0sXHJcbiAgICAgIGNpdHk6IHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH0sXHJcbiAgICAgIGFkZHJlc3NMaW5lOiBcIlwiLFxyXG4gICAgICBwaW5Db2RlOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGluY29kZScpIHx8IDAsXHJcbiAgICB9LFxyXG4gICAgYmFua0RldGFpbHM6IHtcclxuICAgICAgYmFua05hbWU6IFwiXCIsXHJcbiAgICAgIGFjY291bnROdW1iZXI6IDAsXHJcbiAgICAgIGlmc2NDb2RlOiBcIlwiLFxyXG4gICAgICBhY2NvdW50SG9sZGVyTmFtZTogXCJcIlxyXG4gICAgfSxcclxuICAgIG5vbWluZWVEZXRhaWxzOiB7XHJcbiAgICAgIG5vbWluZWVOYW1lOiBcIlwiLFxyXG4gICAgICBtb2JpbGU6IFwiXCIsXHJcbiAgICAgIHJlbGF0aW9uU2hpcDogXCJGYXRoZXJcIixcclxuICAgIH0sXHJcbiAgICBjdXN0b2RpYW46IHtcclxuICAgICAgc3RhZmZJZDogXCJcIixcclxuICAgICAgc3RhZmZOYW1lOiBcIlwiLFxyXG4gICAgICBtb2JpbGVOdW1iZXI6IFwiXCIsXHJcbiAgICAgIGVtYWlsOiBcIlwiLFxyXG4gICAgICBzdGFmZkNvZGU6IFwiXCIsXHJcbiAgICAgIHByb2ZpbGVJbWdVcmw6IFwiXCJcclxuICAgIH0sXHJcbiAgICBzdG9yZURldGFpbHM6IHt9LFxyXG4gICAgZW5yb2xsZWRHcm91cDoge30sXHJcbiAgICBtb250aGx5SW5zdGFsbG1lbnRBbW91bnQ6IDAsXHJcbiAgICBwd2NTdG9yZUNvZGU6IFwiXCIsXHJcbiAgICBzdWJzY3JpcHRpb25DaGFyZ2VEYXRlOiBuZXcgRGF0ZSgpLmdldERhdGUoKVxyXG4gIH1cclxuXHJcbiAgc2NoZW1lc0RhdGE6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU2NoZW1lOiBhbnk7XHJcbiAgZ2V0U2NoZW1lcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU2NoZW1lKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNjaGVtZXNEYXRhID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2NoZW1lID0gdGhpcy5zY2hlbWVzRGF0YVswXTtcclxuICAgICAgdGhpcy5zZXRNb250aGx5SW5zdGFsbG1lbnRBbW91bnQoKTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNjaGVtZXM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHN0b3JlRGF0YTogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZTogYW55O1xyXG4gIGdldEFsbFN0b3JlcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU3RvcmVzT3JyYSgwLCAxMDAwMCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlRGF0YSA9IHJlcz8uZGF0YT8uZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc3RvcmVEZXRhaWxzID0gdGhpcy5zdG9yZURhdGFbMF07XHJcbiAgICAgIHRoaXMuZ2V0U3RhZmZCeUlkKCk7XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdG9yZXM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHN0YWZmRGF0YTogYW55ID0gW107XHJcbiAgZ2V0U3RhZmZCeUlkKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRzdGFmZkJ5U3RvcmVJZCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5zdG9yZURldGFpbHMuc3RvcmVJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0YWZmRGF0YSA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuID0gdGhpcy5zdGFmZkRhdGFbMF0gfHwge307XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdGFmZjogXCIsIGVycm9yKTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHN0YXRlRGF0YTogYW55ID0gW107XHJcbiAgZ2V0QWxsU3RhdGUoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbFN0YXRlKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0YXRlRGF0YSA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGUgPSB0aGlzLnN0YXRlRGF0YVswXSB8fCB7fTtcclxuICAgICAgdGhpcy5nZXRDaXR5QnlTdGF0ZUlkKCk7XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdGF0ZXM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBjaXR5RGF0YTogYW55ID0gW107XHJcbiAgZ2V0Q2l0eUJ5U3RhdGVJZCgpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0Q2l0eUJ5U3RhdGVCeXBhZ2luYXRlZCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZS5pZCwgMCwgMTAwMDApLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jaXR5RGF0YSA9IHJlcz8uZGF0YS5kYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5ID0gdGhpcy5jaXR5RGF0YVswXSB8fCB7fTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIENpdGllczogXCIsIGVycm9yKTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHNldE1vbnRobHlJbnN0YWxsbWVudEFtb3VudCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2NoZW1lLnNjaGVtZVR5cGUgPT0gJ0lORElWSURVQUwnICYmIHRoaXMuc2VsZWN0ZWRTY2hlbWUubWluSW5zdGFsbG1lbnRBbW91bnQpIHtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9udGhseUluc3RhbGxtZW50QW1vdW50ID0gdGhpcy5zZWxlY3RlZFNjaGVtZS5taW5JbnN0YWxsbWVudEFtb3VudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0U3RvcmVTbGFicygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcmVTbGFiczogYW55ID0gW107XHJcbiAgZ2V0U3RvcmVTbGFicygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0U3RvcmVCeVNsYWIoeyBzdG9yZXNMaXN0OiB0aGlzLnNlbGVjdGVkU2NoZW1lLnNjaGVtZVNsYWJzWzBdLnNsYWJTdG9yZXMgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlU2xhYnMgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdG9yZSBzbGFiczogXCIsIGVycm9yKTtcclxuICAgICAgfSlcclxuICB9XHJcbiAgdmFsaWRhdG9yOiBib29sZWFuID0gZmFsc2VcclxuICBjcmVhdGVFbnJvbGxtZW50KCkge1xyXG5cclxuICAgIGZvciAobGV0IGVsZSBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbGlkT2JqZWN0KSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlcihlbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMudmFsaWRPYmplY3QpLnNvbWUodmFsdWUgPT4gIXZhbHVlKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRvciA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5wd2NTdG9yZUNvZGUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5zdG9yZURldGFpbHM/LnB3Y1N0b3JlQ29kZSB8fCB0aGlzLnNlbGVjdGVkU2NoZW1lPy5wd2NTdG9yZUNvZGU7XHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc2NoZW1lRGV0YWlscyA9IFsnc2NoZW1lSWQnLCAnc2NoZW1lTmFtZScsICdzY2hlbWVUeXBlJywgJ3B3Y1NjaGVtZUNvZGUnXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNjaGVtZVtrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuc2VsZWN0ZWRTY2hlbWVba2V5XTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoa2V5ID09ICdwd2NTY2hlbWVDb2RlJykge1xyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5zZWxlY3RlZFNjaGVtZT8ucHdjSW5kaXZpZHVhbFNjaGVtZUNvZGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNjaGVtZS5zY2hlbWVUeXBlID09ICdHUk9VUCcpIHtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zY2hlbWVJZCA9IHRoaXMuc2VsZWN0ZWRTY2hlbWU/LnNjaGVtZUlkO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnNjaGVtZU5hbWUgPSB0aGlzLnNlbGVjdGVkU2NoZW1lPy5zY2hlbWVOYW1lO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnN0b3JlSWQgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uc3RvcmVEZXRhaWxzPy5zdG9yZUlkO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnN0b3JlTmFtZSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5zdG9yZURldGFpbHM/LnN0b3JlTmFtZTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9udGhseUluc3RhbGxtZW50QW1vdW50ID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmVucm9sbGVkR3JvdXA/LnNjaGVtZVNsYWI/Lm1vbnRobHlJbnN0YWxsbWVudEFtb3VudDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGUgPSBbJ2lkJywgJ25hbWUnXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGU/LltrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlW2tleV07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuXHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eSA9IFsnaWQnLCAnbmFtZSddLnJlZHVjZSgoYWNjOiBhbnksIGtleTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5Py5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5W2tleV07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuXHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuID0gW1xyXG4gICAgICAnc3RhZmZJZCcsICdzdGFmZk5hbWUnLCAnbW9iaWxlTnVtYmVyJywgJ2VtYWlsJywgJ3N0YWZmQ29kZScsICdwcm9maWxlSW1nVXJsJ1xyXG4gICAgXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW5ba2V5XTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoa2V5ID09ICdzdGFmZk5hbWUnKVxyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5wZXJzb25hbEluZm8/Lm5hbWVcclxuICAgICAgaWYgKGtleSA9PSAnbW9iaWxlTnVtYmVyJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8uY29udGFjdERldGFpbHM/Lm1vYmlsZVxyXG4gICAgICBpZiAoa2V5ID09ICdlbWFpbCcpXHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LmNvbnRhY3REZXRhaWxzPy5lbWFpbFxyXG4gICAgICBpZiAoa2V5ID09ICdwcm9maWxlSW1nVXJsJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8ucGVyc29uYWxJbmZvPy5wcm9maWxlSW1hZ2VcclxuICAgICAgaWYgKGtleSA9PSAnc3RhZmZDb2RlJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8uc3RhZmZXb3JrSW5mbz8uc3RhZmZDb2RlO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30pO1xyXG4gICAgdGhpcy5wYWdlID0gJ1BBWU1FTlQnO1xyXG4gIH1cclxuXHJcbiAgc3VjY2VzcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlRW5yb2xsbWVudFNjaGVtZSh0aGlzLmVucm9sbGVtZW50UGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcm9maWxlJ10pXHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2ltdWxhdGVQYXltZW50KCdmYWlsdXJlJyk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHJlc3VsdDogYW55XHJcbiAgc2hvd1Jlc3VsdCA9IHRydWU7XHJcbiAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG4gIHNpbXVsYXRlUGF5bWVudCh0eXBlOiAnc3VjY2VzcycgfCAnZmFpbHVyZScpIHtcclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd1Jlc3VsdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXN1bHQgPSB7fVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgICAgICAgICB0aXRsZTogJ1BheW1lbnQgU3VjY2Vzc2Z1bCEnLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ1lvdXIgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseS4nLFxyXG4gICAgICAgICAgaWNvbkNsYXNzOiAnZmFzIGZhLWNoZWNrLWNpcmNsZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzdWx0ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ2ZhaWx1cmUnLFxyXG4gICAgICAgICAgdGl0bGU6ICdQYXltZW50IEZhaWxlZCEnLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHdhcyBhbiBlcnJvciBwcm9jZXNzaW5nIHlvdXIgcGF5bWVudC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxyXG4gICAgICAgICAgaWNvbkNsYXNzOiAnZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgfSwgMTAwKTtcclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uSWQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uYWN0aW9uPy5idXR0b25zW2luZGV4XT8uaWQgPz8gXCJcIjtcclxuICB9XHJcbiAgZ2V0QnV0dG9uU3R5bGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uYWN0aW9uPy5idXR0b25zW2luZGV4XT8uc3R5bGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29udGVudChpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5hY3Rpb24/LmJ1dHRvbnNbaW5kZXhdPy5jb250ZW50O1xyXG4gIH1cclxuXHJcblxyXG4gIGRlYm91bmNlVGltZXI6IGFueTtcclxuICB2YWxpZGF0ZUZvcm0oZmllbGRUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVyKGZpZWxkVHlwZSlcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG4gIHZhbGlkT2JqZWN0OiBhbnkgPSB7XHJcbiAgICBOQU1FOiB0cnVlLFxyXG4gICAgRU1BSUw6IHRydWUsXHJcbiAgICBNT0JJTEU6IHRydWUsXHJcbiAgICBET0I6IHRydWUsXHJcbiAgICBTQ0hFTUU6IHRydWUsXHJcbiAgICBNT05USExZX0FNT1VOVDogdHJ1ZSxcclxuICAgIFNUT1JFOiB0cnVlLFxyXG4gICAgQUREUkVTUzogdHJ1ZSxcclxuICAgIFNUQVRFOiB0cnVlLFxyXG4gICAgQ0lUWTogdHJ1ZSxcclxuICAgIFBJTkNPREU6IHRydWUsXHJcbiAgICBOT01JTkVFX05BTUU6IHRydWUsXHJcbiAgICBOT01JTkVFX01PQklMRTogdHJ1ZSxcclxuICAgIE5PTUlORUVfUkVMQVRJT05TSElQOiB0cnVlLFxyXG4gICAgQkFOS19OQU1FOiB0cnVlLFxyXG4gICAgQUNDT1VOVF9OVU1CRVI6IHRydWUsXHJcbiAgICBJRlNDX0NPREU6IHRydWUsXHJcbiAgICBBQ0NPVU5UX0hPTERFUl9OQU1FOiB0cnVlLFxyXG4gIH1cclxuICB2YWxpZGF0ZXIoZmllbGRUeXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ05BTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OQU1FID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubmFtZS50cmltKCkubGVuZ3RoID4gMDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdFTUFJTCc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkVNQUlMID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5tYWlsSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01PQklMRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk1PQklMRSA9IC9eXFxkezEwfSQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9iaWxlTnVtYmVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdET0InOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5ET0IgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmRhdGVPZkJpcnRoO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1NDSEVNRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LlNDSEVNRSA9ICEhdGhpcy5zZWxlY3RlZFNjaGVtZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdNT05USExZX0FNT1VOVCc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk1PTlRITFlfQU1PVU5UID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA+IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnU1RPUkUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5TVE9SRSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LnN0b3JlRGV0YWlscz8uc3RvcmVJZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBRERSRVNTJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQUREUkVTUyA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5hZGRyZXNzTGluZS50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnU1RBVEUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5TVEFURSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5zdGF0ZT8uaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQ0lUWSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkNJVFkgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5hZGRyZXNzRGV0YWlscz8uY2l0eT8uaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnUElOQ09ERSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LlBJTkNPREUgPSAvXlxcZHs2fSQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5waW5Db2RlPy50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdOT01JTkVFX05BTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OT01JTkVFX05BTUUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8ubm9taW5lZURldGFpbHM/Lm5vbWluZWVOYW1lPy50cmltKCk/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnTk9NSU5FRV9NT0JJTEUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OT01JTkVFX01PQklMRSA9IC9eXFxkezEwfSQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm5vbWluZWVEZXRhaWxzPy5tb2JpbGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ05PTUlORUVfUkVMQVRJT05TSElQJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTk9NSU5FRV9SRUxBVElPTlNISVAgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5ub21pbmVlRGV0YWlscz8ucmVsYXRpb25TaGlwPy50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQkFOS19OQU1FJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQkFOS19OQU1FID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/LmJhbmtOYW1lLnRyaW0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBQ0NPVU5UX05VTUJFUic6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkFDQ09VTlRfTlVNQkVSID0gL15cXGQrJC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/LmFjY291bnROdW1iZXI/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lGU0NfQ09ERSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LklGU0NfQ09ERSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5pZnNjQ29kZT8udHJpbSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FDQ09VTlRfSE9MREVSX05BTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5BQ0NPVU5UX0hPTERFUl9OQU1FID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5hY2NvdW50SG9sZGVyTmFtZT8udHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidG90YWwtY29udGFpbmVyIHBvc2l0aW9uLXJlbGF0aXZlXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgcHktNVwiICpuZ0lmPVwicGFnZSA9PT0gJ0VOUk9MTE1FTlQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+Q3VzdG9tZXIgSW5mb3JtYXRpb248L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZnVsbE5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5GdWxsIE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImZ1bGxOYW1lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5uYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdOQU1FJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydOQU1FJ11cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW1haWwgQWRkcmVzcyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImVtYWlsXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5tYWlsSWRcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0VNQUlMJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydFTUFJTCddXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibW9iaWxlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TW9iaWxlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZWxcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJtb2JpbGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5tb2JpbGVOdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ01PQklMRScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ01PQklMRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkYXRlT2ZCaXJ0aFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRhdGUgb2YgQmlydGggPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJkYXRlT2ZCaXJ0aFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmRhdGVPZkJpcnRoXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdET0InKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydET0InXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTY2hlbWUgSW5mb3JtYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U2NoZW1lIEluZm9ybWF0aW9uPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzY2hlbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TY2hlbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJzY2hlbWVcIiByZXF1aXJlZCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2NoZW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0TW9udGhseUluc3RhbGxtZW50QW1vdW50KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgU2NoZW1lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNjaGVtZSBvZiBzY2hlbWVzRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzY2hlbWVcIj57e3NjaGVtZS5zY2hlbWVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtb250aGx5QW1vdW50XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TW9udGhseSBBbW91bnQgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm1vbnRobHlBbW91bnRcIiByZXF1aXJlZCBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkU2NoZW1lPy5zY2hlbWVUeXBlID09ICdJTkRJVklEVUFMJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInN1YmRpdmlzaW9uXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFNjaGVtZT8uc2NoZW1lVHlwZSA9PSAnR1JPVVAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zY2hlbWVTbGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IEFtb3VudCBQbGFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNsYWIgb2Ygc2VsZWN0ZWRTY2hlbWUuc2NoZW1lU2xhYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwic2xhYlwiPnt7c2xhYi5tb250aGx5SW5zdGFsbG1lbnRBbW91bnQgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gU3RvcmUgSW5mb3JtYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U3RvcmUgSW5mb3JtYXRpb248L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0b3JlIE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJzdWJkaXZpc2lvblwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlsc1wiIChuZ01vZGVsQ2hhbmdlKT1cImdldFN0YWZmQnlJZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IFN0b3JlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIHN0b3JlRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdG9yZVwiPnt7c3RvcmUuc3RvcmVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdWJkaXZpc2lvblwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkN1c3RvZGlhbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIGlkPVwic3ViZGl2aXNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgQ3VzdG9kaWFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YWZmIG9mIHN0YWZmRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdGFmZlwiPnt7c3RhZmYucGVyc29uYWxJbmZvLm5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRW50ZXIgWW91ciBBZGRyZXNzIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkVudGVyIFlvdXIgQWRkcmVzczwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhZGRyZXNzXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWRkcmVzcyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWRkcmVzc1wiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuYWRkcmVzc0xpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnQUREUkVTUycpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0FERFJFU1MnXVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0YXRlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RhdGUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJnZXRDaXR5QnlTdGF0ZUlkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgU3RhdGU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RhdGUgb2Ygc3RhdGVEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInN0YXRlXCI+e3tzdGF0ZS5uYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjaXR5XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q2l0eSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IENpdHk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2l0eSBvZiBjaXR5RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJjaXR5XCI+e3tjaXR5Lm5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpbmNvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaW5jb2RlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJwaW5jb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMucGluQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnUElOQ09ERScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ1BJTkNPREUnXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5FbnRlciBOb21pbmVlIERldGFpbHM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibm9taW5lZU5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5GdWxsIE5hbWUgb2YgTm9taW5lZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwibm9taW5lZU5hbWVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm5vbWluZWVEZXRhaWxzLm5vbWluZWVOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ05PTUlORUVfTkFNRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ05PTUlORUVfTkFNRSddXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVsYXRpb25zaGlwXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VsZWN0IFJlbGF0aW9uc2hpcCA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJyZWxhdGlvbnNoaXBcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5ub21pbmVlRGV0YWlscy5yZWxhdGlvblNoaXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IFJlbGF0aW9uc2hpcDwvb3B0aW9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlNwb3VzZVwiPlNwb3VzZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ2hpbGRcIj5DaGlsZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTW90aGVyXCI+TW90aGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJGYXRoZXJcIj5GYXRoZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlNpYmxpbmdcIj5TaWJsaW5nPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJub21pbmVlUGhvbmVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Nb2JpbGUgTnVtYmVyIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwibm9taW5lZVBob25lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubm9taW5lZURldGFpbHMubW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdOT01JTkVFX01PQklMRScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ05PTUlORUVfTU9CSUxFJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+QWNjb3VudCBJbmZvcm1hdGlvbjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYWNjb3VudEhvbGRlclwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFjY291bnQgSG9sZGVyIE5hbWUgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWNjb3VudEhvbGRlclwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmJhbmtEZXRhaWxzLmFjY291bnRIb2xkZXJOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdBQ0NPVU5UX0hPTERFUl9OQU1FJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQUNDT1VOVF9IT0xERVJfTkFNRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2NvdW50TnVtYmVyXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWNjb3VudCBOdW1iZXIgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJhY2NvdW50TnVtYmVyXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYWNjb3VudE51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnQUNDT1VOVF9OVU1CRVInKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydBQ0NPVU5UX05VTUJFUiddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJiYW5rTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkJhbmsgTmFtZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImJhbmtOYW1lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYmFua05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0JBTktfTkFNRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0JBTktfTkFNRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJpZnNjQ29kZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPklGU0MgQ29kZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImlmc2NDb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuaWZzY0NvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0lGU0NfQ09ERScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0lGU0NfQ09ERSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWdyaWQgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Ym1pdFwiIChjbGljayk9XCJjcmVhdGVFbnJvbGxtZW50KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtidXR0b25TdHlsZV09XCJnZXRCdXR0b25TdHlsZSgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2J1dHRvbklkXT1cImdldEJ1dHRvbklkKDApXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiIFtpZF09XCJkYXRhPy5pZCtnZXRCdXR0b25JZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2J1dHRvbkRhdGFdPVwiZ2V0QnV0dG9uQ29udGVudCgwKVwiPlN1Ym1pdFxyXG4gICAgICAgICAgICAgICAgICAgIEVucm9sbG1lbnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0b3JcIiBbY2xhc3MuZXJyb3ItY29sb3JdPVwidmFsaWRhdG9yXCI+RmlsbCBhbGwgbWFuZGF0b3J5IGZpZWxkcyB0byBwcm9jZWVkKjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBZGQgdGhpcyBibG9jayBpbiB5b3VyIEFuZ3VsYXIgcGF5bWVudCBzdGVwIChwYWdlID09PSAnUEFZTUVOVCcpIC0tPlxyXG4gICAgPCEtLSBwYXltZW50LXNpbXVsYXRpb24uY29tcG9uZW50Lmh0bWwgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIG1pbi12aC0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJnLWxpZ2h0XCJcclxuICAgICAgICAqbmdJZj1cInBhZ2UgPT09ICdQQVlNRU5UJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWhlYWRlciBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInBheW1lbnQtdGl0bGVcIj5QYXltZW50IE1ldGhvZDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zdWNjZXNzIHJvdW5kZWQtcGlsbCBweC0zIHB5LTJcIj5DcmVkaXQgQ2FyZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ3JlZGl0IENhcmQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVkaXQtY2FyZCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXNoaW5lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aXNhLWxvZ29cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc2EtdGV4dFwiPlZJU0E8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZGhvbGRlci1uYW1lIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cnF1b2lzZWNveW90ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1kb3RzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiAqbmdGb3I9XCJsZXQgZG90IG9mIFsxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMl1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1udW1iZXJcIj4xMTExPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gT1RQIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdHAtc2VjdGlvbiBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm90cC1sYWJlbFwiPkVudGVyIE9UUCBzZW50IHRvIHlvdXIgeHh4IHh4eCA0ODM5PC9wPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgb3RwLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBPVFBcIj5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgbXQtMiBkLWJsb2NrXCI+SGludDogT1RQIGlzIDExMTAwMDwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTaW11bGF0aW9uIEJ1dHRvbnMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tbGcgdy0xMDAgc2ltdWxhdGlvbi1idG5cIiAoY2xpY2spPVwic2ltdWxhdGVQYXltZW50KCdmYWlsdXJlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNpbXVsYXRlIGZhaWx1cmVcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyBidG4tbGcgdy0xMDAgc2ltdWxhdGlvbi1idG5cIiAoY2xpY2spPVwic2ltdWxhdGVQYXltZW50KCdzdWNjZXNzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNpbXVsYXRlIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUHJvY2Vzc2luZyBTdGF0ZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUHJvY2Vzc2luZ1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnkgbWUtM1wiIHJvbGU9XCJzdGF0dXNcIiBzdHlsZT1cIndpZHRoOiAxLjVyZW07IGhlaWdodDogMS41cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj5Qcm9jZXNzaW5nIHBheW1lbnQuLi48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBSZXN1bHQgQWxlcnQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZXN1bHQgJiYgc2hvd1Jlc3VsdFwiIGNsYXNzPVwiYWxlcnQgdGV4dC1jZW50ZXIgcmVzdWx0LWFsZXJ0XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgJ2FsZXJ0LXN1Y2Nlc3MnOiByZXN1bHQudHlwZSA9PT0gJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlcic6IHJlc3VsdC50eXBlID09PSAnZmFpbHVyZSdcclxuICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlc3VsdC50aXRsZSB9fTwvc3Ryb25nPiB7eyByZXN1bHQubWVzc2FnZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRm9vdGVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIENsaWNrIGJ1dHRvbnMgdG8gc2ltdWxhdGUgcGF5bWVudCBzY2VuYXJpb3NcclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICAgICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==