ng-easycommerce 0.0.594 → 0.0.596

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 (592) hide show
  1. package/README.md +921 -912
  2. package/assets/bamboo.html +145 -145
  3. package/assets/bancardCatastro.html +49 -49
  4. package/assets/bancardFrameBase.html +104 -104
  5. package/assets/cecaFrameRedirectBase.html +172 -172
  6. package/assets/decidirFormEc.html +516 -516
  7. package/assets/docs/COOKIES.md +158 -158
  8. package/assets/docs/Parametros-Frontend.md +56 -56
  9. package/assets/ec-i18n/ct.json +282 -282
  10. package/assets/ec-i18n/en.json +3 -1
  11. package/assets/ec-i18n/es.json +393 -391
  12. package/assets/ec-i18n/fr.json +0 -0
  13. package/assets/ec-i18n/gl.json +282 -282
  14. package/assets/ec-i18n/pr.json +282 -282
  15. package/assets/images/whatsapp.png +0 -0
  16. package/assets/mpFrameRedirectBase.html +114 -114
  17. package/assets/recaptcha/recaptcha-site-keys.json +3 -3
  18. package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
  19. package/assets/recaptcha/recaptcha-sites.json +52 -52
  20. package/assets/redirect.html +62 -62
  21. package/assets/redsysAuthVdosBase.html +78 -78
  22. package/assets/redsysAuthVunoBase.html +84 -84
  23. package/assets/redsysFrameRedirectBase.html +102 -102
  24. package/assets/redsysFrameRedirectOutBase.html +102 -102
  25. package/assets/redsysFrameSendBase.html +71 -71
  26. package/assets/redsysProBase.html +399 -399
  27. package/assets/redsysStateBase.html +63 -63
  28. package/assets/scss/_colors.scss +17 -17
  29. package/assets/scss/_styles.scss +22 -22
  30. package/assets/svg/chevron-left-black.svg +61 -61
  31. package/assets/svg/chevron-right-black.svg +61 -61
  32. package/bundles/ng-easycommerce.umd.js +19291 -19230
  33. package/bundles/ng-easycommerce.umd.js.map +1 -1
  34. package/bundles/ng-easycommerce.umd.min.js +1 -1
  35. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  36. package/esm2015/lib/api/connection.service.js +77 -77
  37. package/esm2015/lib/classes/checkout/step-service.js +39 -39
  38. package/esm2015/lib/classes/checkout/step.js +22 -22
  39. package/esm2015/lib/classes/checkout-process-state.js +2 -2
  40. package/esm2015/lib/classes/component-helper.js +14 -14
  41. package/esm2015/lib/classes/filters/AttributesFilter.js +61 -61
  42. package/esm2015/lib/classes/filters/CategoryFilter.js +54 -54
  43. package/esm2015/lib/classes/filters/DinamycsFilter.js +58 -58
  44. package/esm2015/lib/classes/filters/Filter.js +75 -75
  45. package/esm2015/lib/classes/filters/PriceRangeFilter.js +51 -51
  46. package/esm2015/lib/classes/filters/SortFilter.js +79 -79
  47. package/esm2015/lib/classes/user-role-type.js +1 -1
  48. package/esm2015/lib/classes/user.js +108 -108
  49. package/esm2015/lib/core.consts.js +402 -402
  50. package/esm2015/lib/ec-component/account-ec/account-ec.component.js +45 -45
  51. package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +119 -112
  52. package/esm2015/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +196 -188
  53. package/esm2015/lib/ec-component/auth-ec/auth-ec.component.js +115 -115
  54. package/esm2015/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +44 -44
  55. package/esm2015/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +58 -58
  56. package/esm2015/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +108 -108
  57. package/esm2015/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +166 -166
  58. package/esm2015/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +165 -165
  59. package/esm2015/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +78 -78
  60. package/esm2015/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +138 -138
  61. package/esm2015/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +110 -110
  62. package/esm2015/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +138 -138
  63. package/esm2015/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +38 -38
  64. package/esm2015/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +152 -152
  65. package/esm2015/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +119 -119
  66. package/esm2015/lib/ec-component/blocks-ec/blocks-ec.component.js +70 -70
  67. package/esm2015/lib/ec-component/build-your-ec/build-your-ec.component.js +305 -305
  68. package/esm2015/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +85 -85
  69. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +398 -383
  70. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +152 -146
  71. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +354 -354
  72. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +78 -78
  73. package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +127 -127
  74. package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +112 -112
  75. package/esm2015/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +53 -53
  76. package/esm2015/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +65 -65
  77. package/esm2015/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +80 -80
  78. package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +220 -220
  79. package/esm2015/lib/ec-component/compared-products-ec/compared-products-ec.component.js +186 -186
  80. package/esm2015/lib/ec-component/cookies-ec/cookies-ec.component.js +109 -109
  81. package/esm2015/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +32 -32
  82. package/esm2015/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +34 -34
  83. package/esm2015/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +34 -34
  84. package/esm2015/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +35 -35
  85. package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +53 -53
  86. package/esm2015/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +49 -49
  87. package/esm2015/lib/ec-component/filters-ec/filters-ec.component.js +152 -152
  88. package/esm2015/lib/ec-component/filters-top-ec/filters-top-ec.component.js +102 -102
  89. package/esm2015/lib/ec-component/footer-ec/footer-ec.component.js +80 -80
  90. package/esm2015/lib/ec-component/header-ec/header-ec.component.js +191 -186
  91. package/esm2015/lib/ec-component/home-ec/home-ec.component.js +37 -37
  92. package/esm2015/lib/ec-component/index.js +241 -241
  93. package/esm2015/lib/ec-component/login-ec/login-ec.component.js +102 -102
  94. package/esm2015/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +90 -90
  95. package/esm2015/lib/ec-component/password-reset-ec/password-reset-ec.component.js +103 -103
  96. package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +168 -165
  97. package/esm2015/lib/ec-component/product-ec/product-ec.component.js +133 -123
  98. package/esm2015/lib/ec-component/related-products-ec/related-products-ec.component.js +94 -94
  99. package/esm2015/lib/ec-component/reviews-ec/reviews-ec.component.js +69 -69
  100. package/esm2015/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +138 -138
  101. package/esm2015/lib/ec-component/section-container-ec/section-container-ec.component.js +86 -86
  102. package/esm2015/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +130 -130
  103. package/esm2015/lib/ec-component/share-block-ec/share-block-ec.component.js +149 -149
  104. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +117 -117
  105. package/esm2015/lib/ec-component/stores-ec/stores-ec.component.js +192 -192
  106. package/esm2015/lib/ec-component/variants-ec/variants-ec.component.js +56 -56
  107. package/esm2015/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +205 -205
  108. package/esm2015/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +296 -296
  109. package/esm2015/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +154 -154
  110. package/esm2015/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +144 -144
  111. package/esm2015/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +49 -49
  112. package/esm2015/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +133 -133
  113. package/esm2015/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +152 -152
  114. package/esm2015/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +175 -175
  115. package/esm2015/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +30 -30
  116. package/esm2015/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +26 -26
  117. package/esm2015/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +21 -21
  118. package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +156 -156
  119. package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +368 -368
  120. package/esm2015/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +151 -151
  121. package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +178 -178
  122. package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +44 -44
  123. package/esm2015/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +83 -83
  124. package/esm2015/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +50 -50
  125. package/esm2015/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +90 -90
  126. package/esm2015/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +143 -143
  127. package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +128 -128
  128. package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +145 -145
  129. package/esm2015/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +167 -167
  130. package/esm2015/lib/ec-directive/add-action-redirect.directive.js +85 -85
  131. package/esm2015/lib/ec-directive/auth-wholesaler.directive.js +54 -54
  132. package/esm2015/lib/ec-directive/index.js +36 -36
  133. package/esm2015/lib/ec-directive/product-mini-standard.directive.js +65 -65
  134. package/esm2015/lib/ec-directive/product-off.directive.js +144 -144
  135. package/esm2015/lib/ec-directive/product-stock.directive.js +75 -75
  136. package/esm2015/lib/ec-directive/reload-view.directive.js +34 -34
  137. package/esm2015/lib/ec-pipe/ec-currency-symbol.pipe.js +72 -72
  138. package/esm2015/lib/ec-pipe/ec-sanitizer-html.pipe.js +26 -26
  139. package/esm2015/lib/ec-pipe/ec-sanitizer-url.pipe.js +26 -26
  140. package/esm2015/lib/ec-pipe/index.js +13 -13
  141. package/esm2015/lib/guards/able-buyer-guard.service.js +36 -36
  142. package/esm2015/lib/guards/auth-guard.service.js +36 -36
  143. package/esm2015/lib/guards/checkout-ready.service.js +36 -36
  144. package/esm2015/lib/guards/loggedin-guard.service.js +36 -36
  145. package/esm2015/lib/guards/user-role-guard.service.js +38 -38
  146. package/esm2015/lib/interceptors/auth.interceptor.js +55 -55
  147. package/esm2015/lib/interceptors/customer.interceptor.js +48 -48
  148. package/esm2015/lib/interfaces/Script.js +1 -1
  149. package/esm2015/lib/interfaces/analytics/event-key.model.js +1 -1
  150. package/esm2015/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
  151. package/esm2015/lib/interfaces/analytics/gtm-config.js +1 -1
  152. package/esm2015/lib/interfaces/analytics/metricool-pixel.js +1 -1
  153. package/esm2015/lib/interfaces/block.js +1 -1
  154. package/esm2015/lib/interfaces/cart/cart-affordable.js +1 -1
  155. package/esm2015/lib/interfaces/checkout/checkout-error.js +1 -1
  156. package/esm2015/lib/interfaces/checkout-data.js +1 -1
  157. package/esm2015/lib/interfaces/choose-options/filter-option.js +6 -6
  158. package/esm2015/lib/interfaces/choose-options/options-of-product-list.js +1 -1
  159. package/esm2015/lib/interfaces/cookies.js +1 -1
  160. package/esm2015/lib/interfaces/core.interfaces.js +1 -1
  161. package/esm2015/lib/interfaces/coupon.js +1 -1
  162. package/esm2015/lib/interfaces/deserializable.js +1 -1
  163. package/esm2015/lib/interfaces/faqs.js +1 -1
  164. package/esm2015/lib/interfaces/filter.js +1 -1
  165. package/esm2015/lib/interfaces/filterStep.js +1 -1
  166. package/esm2015/lib/interfaces/observable-error.interface.js +1 -1
  167. package/esm2015/lib/interfaces/paginate.js +1 -1
  168. package/esm2015/lib/interfaces/parameters.js +1 -1
  169. package/esm2015/lib/interfaces/selection.js +4 -4
  170. package/esm2015/lib/interfaces/step.js +1 -1
  171. package/esm2015/lib/interfaces/store.js +1 -1
  172. package/esm2015/lib/ng-easycommerce.module.js +179 -179
  173. package/esm2015/lib/pipes/order-by.pipe.js +101 -101
  174. package/esm2015/lib/services/account/orders.service.js +102 -102
  175. package/esm2015/lib/services/analytics.service.js +57 -57
  176. package/esm2015/lib/services/auth.service.js +339 -339
  177. package/esm2015/lib/services/banner.service.js +72 -72
  178. package/esm2015/lib/services/blocks/blocks-repository.service.js +62 -62
  179. package/esm2015/lib/services/blocks/blocks.service.js +71 -71
  180. package/esm2015/lib/services/captcha.service.js +130 -130
  181. package/esm2015/lib/services/cart.service.js +572 -563
  182. package/esm2015/lib/services/channel-config.service.js +105 -105
  183. package/esm2015/lib/services/checkout/addressing.service.js +222 -222
  184. package/esm2015/lib/services/checkout/checkout.service.js +233 -233
  185. package/esm2015/lib/services/checkout/error-handler.service.js +81 -81
  186. package/esm2015/lib/services/checkout/payment.service.js +77 -77
  187. package/esm2015/lib/services/checkout/shipment.service.js +183 -183
  188. package/esm2015/lib/services/concatenated-associations.service.js +120 -120
  189. package/esm2015/lib/services/cookies.service.js +208 -208
  190. package/esm2015/lib/services/currency.service.js +161 -161
  191. package/esm2015/lib/services/dataform.service.js +46 -46
  192. package/esm2015/lib/services/filters.service.js +122 -122
  193. package/esm2015/lib/services/gift-card.service.js +61 -61
  194. package/esm2015/lib/services/ip-address.service.js +34 -34
  195. package/esm2015/lib/services/options.service.js +275 -275
  196. package/esm2015/lib/services/pagination.service.js +73 -73
  197. package/esm2015/lib/services/parameters.service.js +72 -72
  198. package/esm2015/lib/services/products/product-detail.service.js +429 -429
  199. package/esm2015/lib/services/products/products.service.js +287 -287
  200. package/esm2015/lib/services/reviews.service.js +107 -107
  201. package/esm2015/lib/services/stores.service.js +37 -37
  202. package/esm2015/lib/services/windows.service.js +52 -52
  203. package/esm2015/lib/services/wishlist.service.js +70 -70
  204. package/esm2015/lib/strategies/standard.strategy.js +43 -43
  205. package/esm2015/lib/utils/analytics/doppler.service.js +37 -37
  206. package/esm2015/lib/utils/analytics/facebook-pixel.service.js +141 -141
  207. package/esm2015/lib/utils/analytics/google-analytics.service.js +265 -265
  208. package/esm2015/lib/utils/analytics/gtm.service.js +341 -341
  209. package/esm2015/lib/utils/analytics/metricool-pixel.service.js +48 -48
  210. package/esm2015/lib/utils/options-of-product-list-data.service.js +96 -96
  211. package/esm2015/lib/utils/order-util.service.js +72 -72
  212. package/esm2015/lib/utils/payment-utils.service.js +35 -35
  213. package/esm2015/lib/utils/shipment-transformer.service.js +66 -66
  214. package/esm2015/lib/utils/toast.service.js +42 -42
  215. package/esm2015/lib/utils/utils.service.js +20 -20
  216. package/esm2015/ng-easycommerce.js +33 -33
  217. package/esm2015/public-api.js +146 -146
  218. package/esm5/lib/api/connection.service.js +90 -90
  219. package/esm5/lib/classes/checkout/step-service.js +74 -74
  220. package/esm5/lib/classes/checkout/step.js +25 -25
  221. package/esm5/lib/classes/checkout-process-state.js +2 -2
  222. package/esm5/lib/classes/component-helper.js +18 -18
  223. package/esm5/lib/classes/filters/AttributesFilter.js +79 -79
  224. package/esm5/lib/classes/filters/CategoryFilter.js +72 -72
  225. package/esm5/lib/classes/filters/DinamycsFilter.js +76 -76
  226. package/esm5/lib/classes/filters/Filter.js +78 -78
  227. package/esm5/lib/classes/filters/PriceRangeFilter.js +68 -68
  228. package/esm5/lib/classes/filters/SortFilter.js +97 -97
  229. package/esm5/lib/classes/user-role-type.js +1 -1
  230. package/esm5/lib/classes/user.js +120 -120
  231. package/esm5/lib/core.consts.js +422 -422
  232. package/esm5/lib/ec-component/account-ec/account-ec.component.js +62 -62
  233. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +173 -166
  234. package/esm5/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +213 -205
  235. package/esm5/lib/ec-component/auth-ec/auth-ec.component.js +132 -132
  236. package/esm5/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +60 -60
  237. package/esm5/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +74 -74
  238. package/esm5/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +125 -125
  239. package/esm5/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +183 -183
  240. package/esm5/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +182 -182
  241. package/esm5/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +106 -106
  242. package/esm5/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +166 -166
  243. package/esm5/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +138 -138
  244. package/esm5/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +165 -165
  245. package/esm5/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +54 -54
  246. package/esm5/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +180 -180
  247. package/esm5/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +146 -146
  248. package/esm5/lib/ec-component/blocks-ec/blocks-ec.component.js +90 -90
  249. package/esm5/lib/ec-component/build-your-ec/build-your-ec.component.js +327 -327
  250. package/esm5/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +112 -112
  251. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +482 -467
  252. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +169 -163
  253. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +439 -439
  254. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +95 -95
  255. package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +217 -217
  256. package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +162 -162
  257. package/esm5/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +69 -69
  258. package/esm5/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +82 -82
  259. package/esm5/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +97 -97
  260. package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +261 -261
  261. package/esm5/lib/ec-component/compared-products-ec/compared-products-ec.component.js +209 -209
  262. package/esm5/lib/ec-component/cookies-ec/cookies-ec.component.js +126 -126
  263. package/esm5/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +34 -34
  264. package/esm5/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +36 -36
  265. package/esm5/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +36 -36
  266. package/esm5/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +37 -37
  267. package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +71 -71
  268. package/esm5/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +66 -66
  269. package/esm5/lib/ec-component/filters-ec/filters-ec.component.js +168 -168
  270. package/esm5/lib/ec-component/filters-top-ec/filters-top-ec.component.js +118 -118
  271. package/esm5/lib/ec-component/footer-ec/footer-ec.component.js +109 -109
  272. package/esm5/lib/ec-component/header-ec/header-ec.component.js +250 -245
  273. package/esm5/lib/ec-component/home-ec/home-ec.component.js +53 -53
  274. package/esm5/lib/ec-component/index.js +241 -241
  275. package/esm5/lib/ec-component/login-ec/login-ec.component.js +118 -118
  276. package/esm5/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +106 -106
  277. package/esm5/lib/ec-component/password-reset-ec/password-reset-ec.component.js +119 -119
  278. package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +195 -192
  279. package/esm5/lib/ec-component/product-ec/product-ec.component.js +151 -141
  280. package/esm5/lib/ec-component/related-products-ec/related-products-ec.component.js +111 -111
  281. package/esm5/lib/ec-component/reviews-ec/reviews-ec.component.js +85 -85
  282. package/esm5/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +155 -155
  283. package/esm5/lib/ec-component/section-container-ec/section-container-ec.component.js +103 -103
  284. package/esm5/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +149 -149
  285. package/esm5/lib/ec-component/share-block-ec/share-block-ec.component.js +166 -166
  286. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +120 -120
  287. package/esm5/lib/ec-component/stores-ec/stores-ec.component.js +214 -214
  288. package/esm5/lib/ec-component/variants-ec/variants-ec.component.js +72 -72
  289. package/esm5/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +221 -221
  290. package/esm5/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +313 -313
  291. package/esm5/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +170 -170
  292. package/esm5/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +160 -160
  293. package/esm5/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +83 -83
  294. package/esm5/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +149 -149
  295. package/esm5/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +156 -156
  296. package/esm5/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +192 -192
  297. package/esm5/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +46 -46
  298. package/esm5/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +42 -42
  299. package/esm5/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +23 -23
  300. package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +174 -174
  301. package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +396 -396
  302. package/esm5/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +167 -167
  303. package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +231 -231
  304. package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +60 -60
  305. package/esm5/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +100 -100
  306. package/esm5/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +53 -53
  307. package/esm5/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +124 -124
  308. package/esm5/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +159 -159
  309. package/esm5/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +144 -144
  310. package/esm5/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +162 -162
  311. package/esm5/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +181 -181
  312. package/esm5/lib/ec-directive/add-action-redirect.directive.js +104 -104
  313. package/esm5/lib/ec-directive/auth-wholesaler.directive.js +60 -60
  314. package/esm5/lib/ec-directive/index.js +36 -36
  315. package/esm5/lib/ec-directive/product-mini-standard.directive.js +72 -72
  316. package/esm5/lib/ec-directive/product-off.directive.js +163 -163
  317. package/esm5/lib/ec-directive/product-stock.directive.js +81 -81
  318. package/esm5/lib/ec-directive/reload-view.directive.js +35 -35
  319. package/esm5/lib/ec-pipe/ec-currency-symbol.pipe.js +74 -74
  320. package/esm5/lib/ec-pipe/ec-sanitizer-html.pipe.js +27 -27
  321. package/esm5/lib/ec-pipe/ec-sanitizer-url.pipe.js +27 -27
  322. package/esm5/lib/ec-pipe/index.js +13 -13
  323. package/esm5/lib/guards/able-buyer-guard.service.js +37 -37
  324. package/esm5/lib/guards/auth-guard.service.js +37 -37
  325. package/esm5/lib/guards/checkout-ready.service.js +37 -37
  326. package/esm5/lib/guards/loggedin-guard.service.js +37 -37
  327. package/esm5/lib/guards/user-role-guard.service.js +39 -39
  328. package/esm5/lib/interceptors/auth.interceptor.js +57 -57
  329. package/esm5/lib/interceptors/customer.interceptor.js +50 -50
  330. package/esm5/lib/interfaces/Script.js +1 -1
  331. package/esm5/lib/interfaces/analytics/event-key.model.js +1 -1
  332. package/esm5/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
  333. package/esm5/lib/interfaces/analytics/gtm-config.js +1 -1
  334. package/esm5/lib/interfaces/analytics/metricool-pixel.js +1 -1
  335. package/esm5/lib/interfaces/block.js +1 -1
  336. package/esm5/lib/interfaces/cart/cart-affordable.js +1 -1
  337. package/esm5/lib/interfaces/checkout/checkout-error.js +1 -1
  338. package/esm5/lib/interfaces/checkout-data.js +1 -1
  339. package/esm5/lib/interfaces/choose-options/filter-option.js +6 -6
  340. package/esm5/lib/interfaces/choose-options/options-of-product-list.js +1 -1
  341. package/esm5/lib/interfaces/cookies.js +1 -1
  342. package/esm5/lib/interfaces/core.interfaces.js +1 -1
  343. package/esm5/lib/interfaces/coupon.js +1 -1
  344. package/esm5/lib/interfaces/deserializable.js +1 -1
  345. package/esm5/lib/interfaces/faqs.js +1 -1
  346. package/esm5/lib/interfaces/filter.js +1 -1
  347. package/esm5/lib/interfaces/filterStep.js +1 -1
  348. package/esm5/lib/interfaces/observable-error.interface.js +1 -1
  349. package/esm5/lib/interfaces/paginate.js +1 -1
  350. package/esm5/lib/interfaces/parameters.js +1 -1
  351. package/esm5/lib/interfaces/selection.js +4 -4
  352. package/esm5/lib/interfaces/step.js +1 -1
  353. package/esm5/lib/interfaces/store.js +1 -1
  354. package/esm5/lib/ng-easycommerce.module.js +183 -183
  355. package/esm5/lib/pipes/order-by.pipe.js +106 -106
  356. package/esm5/lib/services/account/orders.service.js +120 -120
  357. package/esm5/lib/services/analytics.service.js +60 -60
  358. package/esm5/lib/services/auth.service.js +413 -413
  359. package/esm5/lib/services/banner.service.js +81 -81
  360. package/esm5/lib/services/blocks/blocks-repository.service.js +94 -94
  361. package/esm5/lib/services/blocks/blocks.service.js +79 -79
  362. package/esm5/lib/services/captcha.service.js +132 -132
  363. package/esm5/lib/services/cart.service.js +701 -690
  364. package/esm5/lib/services/channel-config.service.js +107 -107
  365. package/esm5/lib/services/checkout/addressing.service.js +280 -280
  366. package/esm5/lib/services/checkout/checkout.service.js +316 -316
  367. package/esm5/lib/services/checkout/error-handler.service.js +83 -83
  368. package/esm5/lib/services/checkout/payment.service.js +125 -125
  369. package/esm5/lib/services/checkout/shipment.service.js +265 -265
  370. package/esm5/lib/services/concatenated-associations.service.js +162 -162
  371. package/esm5/lib/services/cookies.service.js +222 -222
  372. package/esm5/lib/services/currency.service.js +205 -205
  373. package/esm5/lib/services/dataform.service.js +48 -48
  374. package/esm5/lib/services/filters.service.js +125 -125
  375. package/esm5/lib/services/gift-card.service.js +63 -63
  376. package/esm5/lib/services/ip-address.service.js +35 -35
  377. package/esm5/lib/services/options.service.js +376 -376
  378. package/esm5/lib/services/pagination.service.js +79 -79
  379. package/esm5/lib/services/parameters.service.js +74 -74
  380. package/esm5/lib/services/products/product-detail.service.js +494 -494
  381. package/esm5/lib/services/products/products.service.js +345 -345
  382. package/esm5/lib/services/reviews.service.js +116 -116
  383. package/esm5/lib/services/stores.service.js +39 -39
  384. package/esm5/lib/services/windows.service.js +79 -79
  385. package/esm5/lib/services/wishlist.service.js +71 -71
  386. package/esm5/lib/strategies/standard.strategy.js +44 -44
  387. package/esm5/lib/utils/analytics/doppler.service.js +39 -39
  388. package/esm5/lib/utils/analytics/facebook-pixel.service.js +145 -145
  389. package/esm5/lib/utils/analytics/google-analytics.service.js +280 -280
  390. package/esm5/lib/utils/analytics/gtm.service.js +358 -358
  391. package/esm5/lib/utils/analytics/metricool-pixel.service.js +40 -40
  392. package/esm5/lib/utils/options-of-product-list-data.service.js +98 -98
  393. package/esm5/lib/utils/order-util.service.js +75 -75
  394. package/esm5/lib/utils/payment-utils.service.js +37 -37
  395. package/esm5/lib/utils/shipment-transformer.service.js +78 -78
  396. package/esm5/lib/utils/toast.service.js +61 -61
  397. package/esm5/lib/utils/utils.service.js +22 -22
  398. package/esm5/ng-easycommerce.js +33 -33
  399. package/esm5/public-api.js +146 -146
  400. package/fesm2015/ng-easycommerce.js +16302 -16243
  401. package/fesm2015/ng-easycommerce.js.map +1 -1
  402. package/fesm5/ng-easycommerce.js +19295 -19234
  403. package/fesm5/ng-easycommerce.js.map +1 -1
  404. package/lib/api/connection.service.d.ts +28 -28
  405. package/lib/classes/checkout/step-service.d.ts +28 -28
  406. package/lib/classes/checkout/step.d.ts +14 -14
  407. package/lib/classes/checkout-process-state.d.ts +12 -12
  408. package/lib/classes/component-helper.d.ts +8 -8
  409. package/lib/classes/filters/AttributesFilter.d.ts +18 -18
  410. package/lib/classes/filters/CategoryFilter.d.ts +17 -17
  411. package/lib/classes/filters/DinamycsFilter.d.ts +15 -15
  412. package/lib/classes/filters/Filter.d.ts +19 -19
  413. package/lib/classes/filters/PriceRangeFilter.d.ts +18 -18
  414. package/lib/classes/filters/SortFilter.d.ts +15 -15
  415. package/lib/classes/user-role-type.d.ts +5 -5
  416. package/lib/classes/user.d.ts +68 -68
  417. package/lib/core.consts.d.ts +211 -211
  418. package/lib/ec-component/account-ec/account-ec.component.d.ts +13 -13
  419. package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +34 -31
  420. package/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.d.ts +85 -82
  421. package/lib/ec-component/auth-ec/auth-ec.component.d.ts +35 -35
  422. package/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +13 -13
  423. package/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +16 -16
  424. package/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.d.ts +26 -26
  425. package/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.d.ts +34 -34
  426. package/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.d.ts +42 -42
  427. package/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.d.ts +23 -23
  428. package/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.d.ts +34 -34
  429. package/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +27 -27
  430. package/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +34 -34
  431. package/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.d.ts +10 -10
  432. package/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.d.ts +40 -40
  433. package/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.d.ts +25 -25
  434. package/lib/ec-component/blocks-ec/blocks-ec.component.d.ts +24 -24
  435. package/lib/ec-component/build-your-ec/build-your-ec.component.d.ts +122 -122
  436. package/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.d.ts +41 -41
  437. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +57 -52
  438. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +43 -42
  439. package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +92 -92
  440. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +20 -20
  441. package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +51 -51
  442. package/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.d.ts +34 -34
  443. package/lib/ec-component/checkout-ec/step-ec/step-ec.component.d.ts +18 -18
  444. package/lib/ec-component/checkout-ec/success-ec/success-ec.component.d.ts +32 -32
  445. package/lib/ec-component/checkout-error-ec/checkout-error-ec.component.d.ts +25 -25
  446. package/lib/ec-component/collection-ec/collection-ec.component.d.ts +67 -67
  447. package/lib/ec-component/compared-products-ec/compared-products-ec.component.d.ts +70 -70
  448. package/lib/ec-component/cookies-ec/cookies-ec.component.d.ts +44 -44
  449. package/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.d.ts +10 -10
  450. package/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.d.ts +8 -8
  451. package/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.d.ts +9 -9
  452. package/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.d.ts +9 -9
  453. package/lib/ec-component/coupon-ec/coupon-ec.component.d.ts +17 -17
  454. package/lib/ec-component/faqs-content-ec/faqs-content-ec.component.d.ts +15 -15
  455. package/lib/ec-component/filters-ec/filters-ec.component.d.ts +33 -33
  456. package/lib/ec-component/filters-top-ec/filters-top-ec.component.d.ts +23 -23
  457. package/lib/ec-component/footer-ec/footer-ec.component.d.ts +30 -30
  458. package/lib/ec-component/header-ec/header-ec.component.d.ts +66 -65
  459. package/lib/ec-component/home-ec/home-ec.component.d.ts +13 -13
  460. package/lib/ec-component/index.d.ts +80 -80
  461. package/lib/ec-component/login-ec/login-ec.component.d.ts +26 -26
  462. package/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.d.ts +28 -28
  463. package/lib/ec-component/password-reset-ec/password-reset-ec.component.d.ts +27 -27
  464. package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +59 -58
  465. package/lib/ec-component/product-ec/product-ec.component.d.ts +49 -46
  466. package/lib/ec-component/related-products-ec/related-products-ec.component.d.ts +22 -22
  467. package/lib/ec-component/reviews-ec/reviews-ec.component.d.ts +29 -29
  468. package/lib/ec-component/reviews-form-ec/reviews-form-ec.component.d.ts +61 -61
  469. package/lib/ec-component/section-container-ec/section-container-ec.component.d.ts +22 -22
  470. package/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.d.ts +37 -37
  471. package/lib/ec-component/share-block-ec/share-block-ec.component.d.ts +26 -26
  472. package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +23 -23
  473. package/lib/ec-component/stores-ec/stores-ec.component.d.ts +54 -54
  474. package/lib/ec-component/variants-ec/variants-ec.component.d.ts +14 -14
  475. package/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.d.ts +60 -60
  476. package/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.d.ts +105 -105
  477. package/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.d.ts +46 -46
  478. package/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.d.ts +44 -44
  479. package/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.d.ts +14 -14
  480. package/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.d.ts +38 -38
  481. package/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.d.ts +38 -38
  482. package/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.d.ts +53 -53
  483. package/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.d.ts +6 -6
  484. package/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.d.ts +5 -5
  485. package/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.d.ts +5 -5
  486. package/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.d.ts +43 -43
  487. package/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.d.ts +64 -64
  488. package/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.d.ts +46 -46
  489. package/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.d.ts +41 -41
  490. package/lib/ec-component/widgets-ec/price-ec/price-ec.component.d.ts +12 -12
  491. package/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.d.ts +28 -28
  492. package/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.d.ts +24 -24
  493. package/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.d.ts +14 -14
  494. package/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.d.ts +44 -44
  495. package/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.d.ts +38 -38
  496. package/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.d.ts +42 -42
  497. package/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.d.ts +66 -66
  498. package/lib/ec-directive/add-action-redirect.directive.d.ts +26 -26
  499. package/lib/ec-directive/auth-wholesaler.directive.d.ts +17 -17
  500. package/lib/ec-directive/index.d.ts +6 -6
  501. package/lib/ec-directive/product-mini-standard.directive.d.ts +19 -19
  502. package/lib/ec-directive/product-off.directive.d.ts +22 -22
  503. package/lib/ec-directive/product-stock.directive.d.ts +15 -15
  504. package/lib/ec-directive/reload-view.directive.d.ts +8 -8
  505. package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +19 -19
  506. package/lib/ec-pipe/ec-sanitizer-html.pipe.d.ts +7 -7
  507. package/lib/ec-pipe/ec-sanitizer-url.pipe.d.ts +7 -7
  508. package/lib/ec-pipe/index.d.ts +4 -4
  509. package/lib/guards/able-buyer-guard.service.d.ts +8 -8
  510. package/lib/guards/auth-guard.service.d.ts +8 -8
  511. package/lib/guards/checkout-ready.service.d.ts +8 -8
  512. package/lib/guards/loggedin-guard.service.d.ts +8 -8
  513. package/lib/guards/user-role-guard.service.d.ts +8 -8
  514. package/lib/interceptors/auth.interceptor.d.ts +9 -9
  515. package/lib/interceptors/customer.interceptor.d.ts +9 -9
  516. package/lib/interfaces/Script.d.ts +5 -5
  517. package/lib/interfaces/analytics/event-key.model.d.ts +1 -1
  518. package/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.d.ts +5 -5
  519. package/lib/interfaces/analytics/gtm-config.d.ts +6 -6
  520. package/lib/interfaces/analytics/metricool-pixel.d.ts +3 -3
  521. package/lib/interfaces/block.d.ts +33 -33
  522. package/lib/interfaces/cart/cart-affordable.d.ts +8 -8
  523. package/lib/interfaces/cart-item.d.ts +8 -8
  524. package/lib/interfaces/checkout/checkout-error.d.ts +7 -7
  525. package/lib/interfaces/checkout-data.d.ts +6 -6
  526. package/lib/interfaces/choose-options/filter-option.d.ts +16 -16
  527. package/lib/interfaces/choose-options/options-of-product-list.d.ts +5 -5
  528. package/lib/interfaces/cookies.d.ts +49 -49
  529. package/lib/interfaces/core.interfaces.d.ts +4 -4
  530. package/lib/interfaces/coupon.d.ts +5 -5
  531. package/lib/interfaces/currencyConfig.d.ts +10 -10
  532. package/lib/interfaces/deserializable.d.ts +3 -3
  533. package/lib/interfaces/faqs.d.ts +12 -12
  534. package/lib/interfaces/filter.d.ts +51 -51
  535. package/lib/interfaces/filterStep.d.ts +29 -29
  536. package/lib/interfaces/navbar-items.d.ts +9 -9
  537. package/lib/interfaces/observable-error.interface.d.ts +5 -5
  538. package/lib/interfaces/paginate.d.ts +1 -1
  539. package/lib/interfaces/parameters.d.ts +10 -10
  540. package/lib/interfaces/paramsInterfaces/paramsProductsWithUniqueVariant.d.ts +6 -6
  541. package/lib/interfaces/product.d.ts +46 -46
  542. package/lib/interfaces/selection.d.ts +10 -10
  543. package/lib/interfaces/step.d.ts +8 -8
  544. package/lib/interfaces/store.d.ts +17 -17
  545. package/lib/ng-easycommerce.module.d.ts +5 -5
  546. package/lib/pipes/order-by.pipe.d.ts +5 -5
  547. package/lib/services/account/orders.service.d.ts +29 -29
  548. package/lib/services/analytics.service.d.ts +21 -21
  549. package/lib/services/auth.service.d.ts +116 -116
  550. package/lib/services/banner.service.d.ts +26 -26
  551. package/lib/services/blocks/blocks-repository.service.d.ts +19 -19
  552. package/lib/services/blocks/blocks.service.d.ts +25 -25
  553. package/lib/services/captcha.service.d.ts +76 -76
  554. package/lib/services/cart.service.d.ts +139 -139
  555. package/lib/services/channel-config.service.d.ts +35 -35
  556. package/lib/services/checkout/addressing.service.d.ts +239 -239
  557. package/lib/services/checkout/checkout.service.d.ts +71 -71
  558. package/lib/services/checkout/error-handler.service.d.ts +19 -19
  559. package/lib/services/checkout/payment.service.d.ts +32 -32
  560. package/lib/services/checkout/shipment.service.d.ts +58 -58
  561. package/lib/services/concatenated-associations.service.d.ts +57 -57
  562. package/lib/services/cookies.service.d.ts +66 -66
  563. package/lib/services/currency.service.d.ts +65 -65
  564. package/lib/services/dataform.service.d.ts +13 -13
  565. package/lib/services/filters.service.d.ts +48 -48
  566. package/lib/services/gift-card.service.d.ts +19 -19
  567. package/lib/services/ip-address.service.d.ts +10 -10
  568. package/lib/services/options.service.d.ts +61 -61
  569. package/lib/services/pagination.service.d.ts +30 -30
  570. package/lib/services/parameters.service.d.ts +18 -18
  571. package/lib/services/products/product-detail.service.d.ts +115 -115
  572. package/lib/services/products/products.service.d.ts +101 -101
  573. package/lib/services/reviews.service.d.ts +71 -71
  574. package/lib/services/stores.service.d.ts +11 -11
  575. package/lib/services/windows.service.d.ts +13 -13
  576. package/lib/services/wishlist.service.d.ts +13 -13
  577. package/lib/strategies/standard.strategy.d.ts +12 -12
  578. package/lib/utils/analytics/doppler.service.d.ts +9 -9
  579. package/lib/utils/analytics/facebook-pixel.service.d.ts +23 -23
  580. package/lib/utils/analytics/google-analytics.service.d.ts +30 -30
  581. package/lib/utils/analytics/gtm.service.d.ts +34 -34
  582. package/lib/utils/analytics/metricool-pixel.service.d.ts +9 -9
  583. package/lib/utils/options-of-product-list-data.service.d.ts +5 -5
  584. package/lib/utils/order-util.service.d.ts +12 -12
  585. package/lib/utils/payment-utils.service.d.ts +5 -5
  586. package/lib/utils/shipment-transformer.service.d.ts +8 -8
  587. package/lib/utils/toast.service.d.ts +15 -15
  588. package/lib/utils/utils.service.d.ts +4 -4
  589. package/ng-easycommerce.d.ts +33 -33
  590. package/ng-easycommerce.metadata.json +1 -1
  591. package/package.json +1 -1
  592. package/public-api.d.ts +144 -144
@@ -1,214 +1,214 @@
1
- var __extends = (this && this.__extends) || (function () {
2
- var extendStatics = function (d, b) {
3
- extendStatics = Object.setPrototypeOf ||
4
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
- return extendStatics(d, b);
7
- };
8
- return function (d, b) {
9
- extendStatics(d, b);
10
- function __() { this.constructor = d; }
11
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
- };
13
- })();
14
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
- return c > 3 && r && Object.defineProperty(target, key, r), r;
19
- };
20
- import { Component } from '@angular/core';
21
- import { DomSanitizer } from '@angular/platform-browser';
22
- import { filter } from 'rxjs/operators';
23
- import { ComponentHelper } from '../../classes/component-helper';
24
- import { Constants } from '../../core.consts';
25
- import { StoresService } from '../../services/stores.service';
26
- import { skipWhile } from 'rxjs/operators';
27
- var StoresEcComponent = /** @class */ (function (_super) {
28
- __extends(StoresEcComponent, _super);
29
- function StoresEcComponent(storesService, consts, sanitizer) {
30
- var _this = _super.call(this) || this;
31
- _this.storesService = storesService;
32
- _this.consts = consts;
33
- _this.sanitizer = sanitizer;
34
- _this.filterStores = null;
35
- _this.storesAll = null;
36
- _this.exclusiveStores = null;
37
- _this.imageMap = true;
38
- _this.stores = [];
39
- _this.provinces = [];
40
- _this.markers = [];
41
- _this.ultimoElementoSeleccionado = null;
42
- _this.locations = [];
43
- /**
44
- * @description Obtiene todas la provincias que figuren en el arreglo
45
- * @param stores Arreglo de tiendas
46
- * @returns {Array} Arreglo de provincias
47
- */
48
- _this.getProvices = function (stores) {
49
- var provincesOpt = [];
50
- stores.forEach(function (store) {
51
- if (provincesOpt.find(function (s) { return s.code == store.province.code; }) == undefined) {
52
- provincesOpt.push(store.province);
53
- }
54
- });
55
- return provincesOpt;
56
- };
57
- /**
58
- * @description Retorna un arreglo de objetos formado por las claves
59
- * "province"(contiene un objeto provincia) y
60
- * "stores" (contiene un arreglo de tiendas pertenecientes a la provincia)
61
- * @param stores Opcional, arreglo de tiendas a la que se le quiere aplicar la division por provincia
62
- * @returns {Array<{"province", "stores"}>}
63
- */
64
- _this.getStoresByProvinces = function (stores) {
65
- if (stores === void 0) { stores = _this.stores; }
66
- var storesByProvinces = [];
67
- if (stores) {
68
- var provinces = _this.getProvices(stores);
69
- provinces.forEach(function (elem) {
70
- var _a;
71
- var aux = (_a = stores) === null || _a === void 0 ? void 0 : _a.filter(function (store) { return store.province.code == elem.code; });
72
- storesByProvinces.push({ province: elem, stores: aux });
73
- });
74
- }
75
- return storesByProvinces;
76
- };
77
- /**
78
- * @description Retorna las tiendas con/sin retiro en el local
79
- * @param stores Opcional, arreglo de tiendas
80
- * @param cond Opcional, Si es "true" obtiene las tiendas con retiro local caso contrario "false"
81
- * @returns {Array<Store>} Arreglo de Store
82
- */
83
- _this.getPickupStores = function (stores, cond) {
84
- if (stores === void 0) { stores = _this.stores; }
85
- if (cond === void 0) { cond = true; }
86
- return stores && stores.filter(function (store) { return cond == store.pickupStore; });
87
- };
88
- /**
89
- * @description Metodo que devuelve las tiendas que NO son exclusivas.
90
- * @returns {Array<Store>} Arreglo de Store
91
- */
92
- _this.getNonExclusiveStores = function () { return _this.stores.filter(function (store) { return !store.exclusive; }); };
93
- _this.selectChange = function (select) {
94
- _this.filterStores = select != '' && _this.storesAll.filter(function (store) { return store.province.code == select; }) || _this.storesAll;
95
- return true;
96
- };
97
- _this.urlmap = _this.sanitizer.bypassSecurityTrustResourceUrl('https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148');
98
- _this.storesService.stores.pipe(filter(function (store) { return store && store.length > 0; })).subscribe(function (stores) {
99
- _this.storesAll = stores;
100
- _this.stores = stores;
101
- _this.exclusiveStores = stores.filter(function (store) { return store.exclusive; });
102
- _this.selectChange('');
103
- });
104
- _this.ecOnConstruct();
105
- return _this;
106
- }
107
- StoresEcComponent.prototype.ngOnInit = function () {
108
- this.ecOnInit();
109
- };
110
- StoresEcComponent.prototype.updateMap = function (url) {
111
- url = url.includes('embed') ? url : 'https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148';
112
- this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl(url);
113
- };
114
- StoresEcComponent.prototype.initMap = function () {
115
- var _this = this;
116
- this.storesService.stores.pipe(skipWhile(function (stores) { return stores.length === 0; }) // Omitir valores vacíos
117
- ).subscribe(function (res) {
118
- _this.stores = res;
119
- _this.stores.forEach(function (store) {
120
- var datos = {
121
- id: store.code,
122
- lat: parseFloat(store.latitude),
123
- lng: parseFloat(store.longitude),
124
- title: store.name + ' - ' + store.address,
125
- description: store.phone,
126
- };
127
- // console.log(datos)
128
- _this.locations.push(datos);
129
- });
130
- var bounds = new google.maps.LatLngBounds();
131
- _this.locations.forEach(function (location) {
132
- bounds.extend(new google.maps.LatLng(location.lat, location.lng));
133
- });
134
- var center = bounds.getCenter();
135
- var style = [{ "elementType": "geometry", "stylers": [{ "color": "#212121" }] }, { "elementType": "labels.icon", "stylers": [{ "visibility": "off" }] }, { "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "elementType": "labels.text.stroke", "stylers": [{ "color": "#212121" }] }, { "featureType": "administrative", "elementType": "geometry", "stylers": [{ "color": "#757575" }] }, { "featureType": "administrative.country", "elementType": "labels.text.fill", "stylers": [{ "color": "#9e9e9e" }] }, { "featureType": "administrative.locality", "elementType": "labels.text.fill", "stylers": [{ "color": "#bdbdbd" }] }, { "featureType": "poi", "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "featureType": "poi.business", "stylers": [{ "visibility": "off" }] }, { "featureType": "poi.park", "elementType": "geometry", "stylers": [{ "color": "#181818" }] }, { "featureType": "poi.park", "elementType": "labels.text.fill", "stylers": [{ "color": "#616161" }] }, { "featureType": "poi.park", "elementType": "labels.text.stroke", "stylers": [{ "color": "#1b1b1b" }] }, { "featureType": "road", "elementType": "geometry.fill", "stylers": [{ "color": "#2c2c2c" }] }, { "featureType": "road", "elementType": "labels.icon", "stylers": [{ "visibility": "off" }] }, { "featureType": "road", "elementType": "labels.text.fill", "stylers": [{ "color": "#8a8a8a" }] }, { "featureType": "road.arterial", "elementType": "geometry", "stylers": [{ "color": "#373737" }] }, { "featureType": "road.arterial", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.highway", "elementType": "geometry", "stylers": [{ "color": "#3c3c3c" }] }, { "featureType": "road.highway", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.highway.controlled_access", "elementType": "geometry", "stylers": [{ "color": "#4e4e4e" }] }, { "featureType": "road.local", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.local", "elementType": "labels.text.fill", "stylers": [{ "color": "#616161" }] }, { "featureType": "transit", "stylers": [{ "visibility": "off" }] }, { "featureType": "transit", "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "featureType": "water", "elementType": "geometry", "stylers": [{ "color": "#000000" }] }, { "featureType": "water", "elementType": "labels.text.fill", "stylers": [{ "color": "#3d3d3d" }] }];
136
- _this.map = new google.maps.Map(document.getElementById('map'), {
137
- zoom: 12,
138
- center: center,
139
- styles: style // Aplica los estilos personalizados
140
- });
141
- _this.locations.forEach(function (location) {
142
- var marker = new google.maps.Marker({
143
- position: { lat: location.lat, lng: location.lng },
144
- map: _this.map,
145
- title: location.title,
146
- icon: {
147
- url: "../../../assets/location.svg",
148
- scaledSize: new google.maps.Size(30, 30)
149
- }
150
- });
151
- marker.set('id', location.id); // Associate marker with its ID
152
- _this.markers.push(marker);
153
- marker.addListener('click', function () {
154
- var elemento = $('#' + location.id);
155
- var contenedor = $('#home');
156
- if (elemento.length && contenedor.length) {
157
- contenedor.animate({
158
- scrollTop: elemento.offset().top - contenedor.offset().top + contenedor.scrollTop()
159
- }, 1000);
160
- }
161
- if (_this.ultimoElementoSeleccionado !== null) {
162
- // Quitar la clase del último elemento seleccionado
163
- _this.ultimoElementoSeleccionado.removeClass('selected');
164
- }
165
- // Agregar una clase al nuevo elemento seleccionado
166
- elemento.addClass('selected');
167
- _this.ultimoElementoSeleccionado = elemento;
168
- _this.stopBounce();
169
- marker.setAnimation(google.maps.Animation.BOUNCE);
170
- });
171
- _this.map.fitBounds(bounds);
172
- }, function (error) {
173
- console.error('Error al obtener las tiendas:', error);
174
- });
175
- });
176
- };
177
- StoresEcComponent.prototype.showStoreOnMap = function (storeCode) {
178
- this.stopBounce();
179
- var marker = this.markers.find(function (m) { return m.get('id') === storeCode; });
180
- var elemento = $('#' + storeCode);
181
- if (this.ultimoElementoSeleccionado !== null) {
182
- // Quitar la clase del último elemento seleccionado
183
- this.ultimoElementoSeleccionado.removeClass('selected');
184
- }
185
- // Agregar una clase al nuevo elemento seleccionado
186
- elemento.addClass('selected');
187
- this.ultimoElementoSeleccionado = elemento;
188
- if (marker) {
189
- // this.map.panTo(marker.getPosition());
190
- // this.map.setZoom(15);
191
- marker.setAnimation(google.maps.Animation.BOUNCE);
192
- }
193
- };
194
- StoresEcComponent.prototype.stopBounce = function () {
195
- this.markers.forEach(function (marker) {
196
- marker.setAnimation(null);
197
- });
198
- };
199
- StoresEcComponent.ctorParameters = function () { return [
200
- { type: StoresService },
201
- { type: Constants },
202
- { type: DomSanitizer }
203
- ]; };
204
- StoresEcComponent = __decorate([
205
- Component({
206
- selector: 'app-store-ec',
207
- template: "<div class=\"row w-100 mx-auto my-4 px-3 bb-s bt-md-s py-1\">\r\n <strong>{{ 'stores' | translate }}</strong>\r\n</div>\r\n\r\n<section class=\"formulario container-fluid\" *ngIf=\"stores ; else noStores\">\r\n <div *ngIf=\"stores.length; else loading\">\r\n\r\n <div class=\"row\" *ngIf=\"stores && stores.length > 0; else noStores\">\r\n <div class=\"col-12 col-md-3 order-1 order-md-1\">\r\n <div class=\"row\">\r\n <div class=\"form-group w-100\">\r\n <select (change)=\"selectChange($event.target.value)\"\r\n class=\"rounded-0 form-control form-control-sm\" id=\"exampleFormControlSelect1\">\r\n <option selected [value]=\"''\">Seleccione provincia</option>\r\n <option [value]=\"item.code\" *ngFor=\"let item of getProvices(stores)\"> {{item.name}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-3 order-3 order-md-2\">\r\n <div class=\"container-fluid scrolleable\" *ngIf=\"filterStores && filterStores.length\">\r\n <div class=\"row mb-1\" *ngFor=\"let store of filterStores; let i = index\">\r\n <div class=\"col-12\">\r\n <h6 class=\"\"><strong>{{ store.name }}</strong></h6>\r\n <label>{{ store.address }}</label>\r\n <label>{{ store.phone }}</label>\r\n <div [innerHtml]=\"store.note\"></div>\r\n <div class=\"text-right\">\r\n <!-- <a [href]=\"store.urlMap\" target=\"_blank\" class=\"custom-a\">Ver mapa</a> -->\r\n <a *ngIf=\"store.urlMap\" (click)=\"updateMap (store.urlMap)\" class=\"custom-a\">Ver mapa</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-6 order-2 order-md-3 my-4 mt-md-0\">\r\n <!-- <img *ngIf=\"imageMap\" src=\"../../../assets/images/recurso (21).png\" alt=\"\" class=\"w-100\"> -->\r\n <!-- <iframe *ngIf=\"!imageMap\" [src]=\"urlMap\" frameborder=\"0\" style=\"width: 100%; height: 500px;\"></iframe> -->\r\n <iframe id=\"map-iframe\" [src]=\"urlmap\" frameborder=\"0\"></iframe>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n\r\n<ng-template #noStores>\r\n\r\n <div class=\"d-flex flex-row justify-content-center my-5 align-items-center alto-total\">\r\n <h5 class=\"text-center\">{{ 'no-stores' | translate }}</h5>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<ng-template #loading>\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 align-items-center\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center my-5\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>",
208
- styles: [".scrolleable{height:70vh;overflow:auto}@media screen and (max-width:768px){.scrolleable{height:auto}}.background-white{background-color:#fff}.alto-total{height:60vh}.custom-a{color:#000}#map-iframe{width:100%;border:0;height:100%}@media screen and (max-width:425px){#map-iframe{height:400px}}"]
209
- })
210
- ], StoresEcComponent);
211
- return StoresEcComponent;
212
- }(ComponentHelper));
213
- export { StoresEcComponent };
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVzLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9lYy1jb21wb25lbnQvc3RvcmVzLWVjL3N0b3Jlcy1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRM0M7SUFBdUMscUNBQWU7SUFlbEQsMkJBQW1CLGFBQTRCLEVBQVMsTUFBaUIsRUFBYSxTQUF1QjtRQUE3RyxZQUNJLGlCQUFPLFNBU1Y7UUFWa0IsbUJBQWEsR0FBYixhQUFhLENBQWU7UUFBUyxZQUFNLEdBQU4sTUFBTSxDQUFXO1FBQWEsZUFBUyxHQUFULFNBQVMsQ0FBYztRQWJ0RyxrQkFBWSxHQUFHLElBQUksQ0FBQTtRQUNuQixlQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLHFCQUFlLEdBQUcsSUFBSSxDQUFBO1FBQ3RCLGNBQVEsR0FBRyxJQUFJLENBQUE7UUFFZixZQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osZUFBUyxHQUFHLEVBQUUsQ0FBQTtRQUdiLGFBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsZ0NBQTBCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLGVBQVMsR0FBVSxFQUFFLENBQUM7UUF1QjlCOzs7O1dBSUc7UUFDSCxpQkFBVyxHQUFHLFVBQUMsTUFBTTtZQUNqQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUE7WUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUs7Z0JBQ2hCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQTdCLENBQTZCLENBQUMsSUFBSyxTQUFTLEVBQUU7b0JBQ3JFLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO2lCQUNwQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxZQUFZLENBQUE7UUFDdkIsQ0FBQyxDQUFBO1FBRUQ7Ozs7OztXQU1HO1FBQ0gsMEJBQW9CLEdBQUcsVUFBQyxNQUFvQjtZQUFwQix1QkFBQSxFQUFBLFNBQVMsS0FBSSxDQUFDLE1BQU07WUFDeEMsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUE7WUFDMUIsSUFBRyxNQUFNLEVBQUM7Z0JBQ04sSUFBSSxTQUFTLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDeEMsU0FBUyxDQUFDLE9BQU8sQ0FBRSxVQUFBLElBQUk7O29CQUNuQixJQUFJLEdBQUcsU0FBRyxNQUFNLDBDQUFFLE1BQU0sQ0FBQyxVQUFBLEtBQUssSUFBSyxPQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQWhDLENBQWdDLENBQUMsQ0FBQTtvQkFDcEUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQTtnQkFDdEQsQ0FBQyxDQUFDLENBQUE7YUFDTDtZQUNELE9BQU8saUJBQWlCLENBQUE7UUFDNUIsQ0FBQyxDQUFBO1FBRUQ7Ozs7O1dBS0c7UUFDSCxxQkFBZSxHQUFHLFVBQUMsTUFBb0IsRUFBRSxJQUFtQjtZQUF6Qyx1QkFBQSxFQUFBLFNBQVMsS0FBSSxDQUFDLE1BQU07WUFBRSxxQkFBQSxFQUFBLFdBQW1CO1lBQUssT0FBQSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUF6QixDQUF5QixDQUFDO1FBQTNELENBQTJELENBQUE7UUFFNUg7OztXQUdHO1FBQ0gsMkJBQXFCLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFoQixDQUFnQixDQUFFLEVBQTlDLENBQThDLENBQUE7UUFFNUUsa0JBQVksR0FBRyxVQUFDLE1BQU07WUFDbEIsS0FBSSxDQUFDLFlBQVksR0FBRyxNQUFNLElBQUksRUFBRSxJQUFLLEtBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQUEsS0FBSyxJQUFLLE9BQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUE3QixDQUE2QixDQUFDLElBQUksS0FBSSxDQUFDLFNBQVMsQ0FBQTtZQUNwSCxPQUFPLElBQUksQ0FBQTtRQUNoQixDQUFDLENBQUE7UUF0RUcsS0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLG1LQUFtSyxDQUFDLENBQUE7UUFDaE8sS0FBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBekIsQ0FBeUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUEsTUFBTTtZQUN2RixLQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQTtZQUN2QixLQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtZQUNwQixLQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLENBQUMsU0FBUyxFQUFmLENBQWUsQ0FBRSxDQUFBO1lBQy9ELEtBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7UUFDRixLQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7O0lBQ3hCLENBQUM7SUFFRCxvQ0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUFFRCxxQ0FBUyxHQUFULFVBQVUsR0FBVTtRQUNoQixHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxtS0FBbUssQ0FBQTtRQUN4TSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQXVERCxtQ0FBTyxHQUFQO1FBQUEsaUJBNEVFO1FBMUVELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDMUIsU0FBUyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQW5CLENBQW1CLENBQUMsQ0FBQyx3QkFBd0I7U0FDbEUsQ0FBQyxTQUFTLENBQ1QsVUFBQyxHQUFHO1lBQ0YsS0FBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFHbEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLO2dCQUN2QixJQUFJLEtBQUssR0FBRztvQkFDVixFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO29CQUMvQixHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQ2hDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTztvQkFDekMsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLO2lCQUN6QixDQUFDO2dCQUNGLHFCQUFxQjtnQkFDckIsS0FBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQSxRQUFRO2dCQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztZQUNILElBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxJQUFNLEtBQUssR0FBRyxDQUFDLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsYUFBYSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxrQkFBa0IsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsb0JBQW9CLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLGdCQUFnQixFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLHdCQUF3QixFQUFDLGFBQWEsRUFBQyxrQkFBa0IsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMseUJBQXlCLEVBQUMsYUFBYSxFQUFDLGtCQUFrQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLGtCQUFrQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxjQUFjLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLGtCQUFrQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLG9CQUFvQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLGVBQWUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxhQUFhLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsa0JBQWtCLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLGVBQWUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxlQUFlLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsY0FBYyxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLGNBQWMsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxnQ0FBZ0MsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxZQUFZLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLFlBQVksRUFBQyxhQUFhLEVBQUMsa0JBQWtCLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxrQkFBa0IsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFB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QWUsR0FrTXJEO1NBbE1ZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IFN0b3Jlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5kZWNsYXJlIHZhciBnb29nbGU6IGFueTtcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1zdG9yZS1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJ3N0b3Jlcy1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnc3RvcmVzLWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFN0b3Jlc0VjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyICB7XHJcblxyXG4gICAgcHVibGljIGZpbHRlclN0b3JlcyA9IG51bGxcclxuICAgIHB1YmxpYyBzdG9yZXNBbGwgPSBudWxsXHJcbiAgICBwdWJsaWMgZXhjbHVzaXZlU3RvcmVzID0gbnVsbFxyXG4gICAgcHVibGljIGltYWdlTWFwID0gdHJ1ZVxyXG4gICAgcHVibGljIHVybG1hcDtcclxuICAgIHB1YmxpYyBzdG9yZXMgPSBbXTtcclxuICAgIHB1YmxpYyBwcm92aW5jZXMgPSBbXVxyXG4gICAgcHJpdmF0ZSB1cmw7XHJcbiAgICBwcml2YXRlIG1hcDogYW55O1xyXG4gICAgcHJpdmF0ZSBtYXJrZXJzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSB1bHRpbW9FbGVtZW50b1NlbGVjY2lvbmFkbyA9IG51bGw7XHJcbiAgICBwcml2YXRlIGxvY2F0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RvcmVzU2VydmljZTogU3RvcmVzU2VydmljZSwgcHVibGljIGNvbnN0czogQ29uc3RhbnRzICwgcHJvdGVjdGVkIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnVybG1hcCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL2VtYmVkP3BiPSExbTEwITFtOCExbTMhMWQxMzEzNy41MTk2ODg5NTc1NDUhMmQtNTguMzg4ODE2MyEzZC0zNC41OTQ1NTMzITNtMiExaTEwMjQhMmk3NjghNGYxMy4xITVlMCEzbTIhMXNlcy00MTkhMnNhciE0djE1MjM4ODkyMDQxNDgnKVxyXG4gICAgICAgIHRoaXMuc3RvcmVzU2VydmljZS5zdG9yZXMucGlwZShmaWx0ZXIoc3RvcmUgPT4gc3RvcmUgJiYgc3RvcmUubGVuZ3RoID4gMCkpLnN1YnNjcmliZShzdG9yZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlc0FsbCA9IHN0b3Jlc1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlcyA9IHN0b3Jlc1xyXG4gICAgICAgICAgICB0aGlzLmV4Y2x1c2l2ZVN0b3JlcyA9IHN0b3Jlcy5maWx0ZXIoc3RvcmUgPT4gc3RvcmUuZXhjbHVzaXZlIClcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RDaGFuZ2UoJycpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZU1hcCh1cmw6c3RyaW5nKSB7XHJcbiAgICAgICAgdXJsID0gdXJsLmluY2x1ZGVzICgnZW1iZWQnKSA/IHVybCA6ICdodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvZW1iZWQ/cGI9ITFtMTAhMW04ITFtMyExZDEzMTM3LjUxOTY4ODk1NzU0NSEyZC01OC4zODg4MTYzITNkLTM0LjU5NDU1MzMhM20yITFpMTAyNCEyaTc2OCE0ZjEzLjEhNWUwITNtMiExc2VzLTQxOSEyc2FyITR2MTUyMzg4OTIwNDE0OCdcclxuICAgICAgICB0aGlzLnVybG1hcCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhcyBsYSBwcm92aW5jaWFzIHF1ZSBmaWd1cmVuIGVuIGVsIGFycmVnbG9cclxuICAgICAqIEBwYXJhbSBzdG9yZXMgQXJyZWdsbyBkZSB0aWVuZGFzXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IEFycmVnbG8gZGUgcHJvdmluY2lhc1xyXG4gICAgICovXHJcbiAgICBnZXRQcm92aWNlcyA9IChzdG9yZXMpID0+IHtcclxuICAgICAgICBsZXQgcHJvdmluY2VzT3B0ID0gW11cclxuICAgICAgICBzdG9yZXMuZm9yRWFjaChzdG9yZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwcm92aW5jZXNPcHQuZmluZChzID0+IHMuY29kZSA9PSBzdG9yZS5wcm92aW5jZS5jb2RlKSA9PSAgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBwcm92aW5jZXNPcHQucHVzaChzdG9yZS5wcm92aW5jZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm92aW5jZXNPcHRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRvcm5hIHVuIGFycmVnbG8gZGUgb2JqZXRvcyBmb3JtYWRvIHBvciBsYXMgY2xhdmVzXHJcbiAgICAgKiAgICAgIFwicHJvdmluY2VcIihjb250aWVuZSB1biBvYmpldG8gcHJvdmluY2lhKSB5XHJcbiAgICAgKiAgICAgIFwic3RvcmVzXCIgKGNvbnRpZW5lIHVuIGFycmVnbG8gZGUgdGllbmRhcyBwZXJ0ZW5lY2llbnRlcyBhIGxhIHByb3ZpbmNpYSlcclxuICAgICAqIEBwYXJhbSBzdG9yZXMgT3BjaW9uYWwsIGFycmVnbG8gZGUgdGllbmRhcyBhIGxhIHF1ZSBzZSBsZSBxdWllcmUgYXBsaWNhciBsYSBkaXZpc2lvbiBwb3IgcHJvdmluY2lhXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8e1wicHJvdmluY2VcIiwgXCJzdG9yZXNcIn0+fVxyXG4gICAgICovXHJcbiAgICBnZXRTdG9yZXNCeVByb3ZpbmNlcyA9IChzdG9yZXMgPSB0aGlzLnN0b3JlcykgPT4ge1xyXG4gICAgICAgIGxldCBzdG9yZXNCeVByb3ZpbmNlcyA9IFtdXHJcbiAgICAgICAgaWYoc3RvcmVzKXtcclxuICAgICAgICAgICAgbGV0IHByb3ZpbmNlcyA9IHRoaXMuZ2V0UHJvdmljZXMoc3RvcmVzKVxyXG4gICAgICAgICAgICBwcm92aW5jZXMuZm9yRWFjaCggZWxlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXV4ID0gc3RvcmVzPy5maWx0ZXIoc3RvcmUgPT4gIHN0b3JlLnByb3ZpbmNlLmNvZGUgPT0gZWxlbS5jb2RlKVxyXG4gICAgICAgICAgICAgICAgc3RvcmVzQnlQcm92aW5jZXMucHVzaCh7cHJvdmluY2U6ZWxlbSxzdG9yZXM6YXV4fSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0b3Jlc0J5UHJvdmluY2VzXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSBsYXMgdGllbmRhcyBjb24vc2luIHJldGlybyBlbiBlbCBsb2NhbFxyXG4gICAgICogQHBhcmFtIHN0b3JlcyBPcGNpb25hbCwgYXJyZWdsbyBkZSB0aWVuZGFzXHJcbiAgICAgKiBAcGFyYW0gY29uZCBPcGNpb25hbCwgU2kgZXMgXCJ0cnVlXCIgb2J0aWVuZSBsYXMgdGllbmRhcyBjb24gcmV0aXJvIGxvY2FsIGNhc28gY29udHJhcmlvIFwiZmFsc2VcIlxyXG4gICAgICogQHJldHVybnMge0FycmF5PFN0b3JlPn0gQXJyZWdsbyBkZSBTdG9yZVxyXG4gICAgICovXHJcbiAgICBnZXRQaWNrdXBTdG9yZXMgPSAoc3RvcmVzID0gdGhpcy5zdG9yZXMsIGNvbmQ6Qm9vbGVhbiA9IHRydWUpID0+IHN0b3JlcyAmJiBzdG9yZXMuZmlsdGVyKHN0b3JlID0+IGNvbmQgPT0gc3RvcmUucGlja3VwU3RvcmUpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTWV0b2RvIHF1ZSBkZXZ1ZWx2ZSBsYXMgdGllbmRhcyBxdWUgTk8gc29uIGV4Y2x1c2l2YXMuXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8U3RvcmU+fSBBcnJlZ2xvIGRlIFN0b3JlXHJcbiAgICAgKi9cclxuICAgIGdldE5vbkV4Y2x1c2l2ZVN0b3JlcyA9ICgpID0+IHRoaXMuc3RvcmVzLmZpbHRlcihzdG9yZSA9PiAhc3RvcmUuZXhjbHVzaXZlIClcclxuXHJcbiAgICBzZWxlY3RDaGFuZ2UgPSAoc2VsZWN0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJTdG9yZXMgPSBzZWxlY3QgIT0gJycgJiYgIHRoaXMuc3RvcmVzQWxsLmZpbHRlcihzdG9yZSA9PiAgc3RvcmUucHJvdmluY2UuY29kZSA9PSBzZWxlY3QpIHx8IHRoaXMuc3RvcmVzQWxsXHJcbiAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdE1hcCgpOiB2b2lkIHtcclxuXHJcbiAgICAgdGhpcy5zdG9yZXNTZXJ2aWNlLnN0b3Jlcy5waXBlKFxyXG4gICAgICAgICBza2lwV2hpbGUoc3RvcmVzID0+IHN0b3Jlcy5sZW5ndGggPT09IDApIC8vIE9taXRpciB2YWxvcmVzIHZhY8Otb3NcclxuICAgICAgICkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXM7XHJcblxyXG5cclxuICAgICAgICAgICB0aGlzLnN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHtcclxuICAgICAgICAgICAgIGxldCBkYXRvcyA9IHtcclxuICAgICAgICAgICAgICAgaWQ6IHN0b3JlLmNvZGUsXHJcbiAgICAgICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChzdG9yZS5sYXRpdHVkZSksXHJcbiAgICAgICAgICAgICAgIGxuZzogcGFyc2VGbG9hdChzdG9yZS5sb25naXR1ZGUpLFxyXG4gICAgICAgICAgICAgICB0aXRsZTogc3RvcmUubmFtZSArICcgLSAnICsgc3RvcmUuYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0b3JlLnBob25lLFxyXG4gICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdG9zKVxyXG4gICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMucHVzaChkYXRvcyk7XHJcbiAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgY29uc3QgYm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpO1xyXG4gICAgICAgICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2gobG9jYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgYm91bmRzLmV4dGVuZChuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxvY2F0aW9uLmxhdCwgbG9jYXRpb24ubG5nKSk7XHJcbiAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgY29uc3QgY2VudGVyID0gYm91bmRzLmdldENlbnRlcigpO1xyXG4gICAgICAgICAgIGNvbnN0IHN0eWxlID0gW3tcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzIxMjEyMVwifV19LHtcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMuaWNvblwiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzc1NzU3NVwifV19LHtcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5zdHJva2VcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMyMTIxMjFcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwiYWRtaW5pc3RyYXRpdmVcIixcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzc1NzU3NVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzllOWU5ZVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJhZG1pbmlzdHJhdGl2ZS5sb2NhbGl0eVwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiNiZGJkYmRcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicG9pXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzc1NzU3NVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJwb2kuYnVzaW5lc3NcIixcInN0eWxlcnNcIjpbe1widmlzaWJpbGl0eVwiOlwib2ZmXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInBvaS5wYXJrXCIsXCJlbGVtZW50VHlwZVwiOlwiZ2VvbWV0cnlcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMxODE4MThcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicG9pLnBhcmtcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjNjE2MTYxXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInBvaS5wYXJrXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuc3Ryb2tlXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjMWIxYjFiXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInJvYWRcIixcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeS5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjMmMyYzJjXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInJvYWRcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMuaWNvblwiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZFwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiM4YThhOGFcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5hcnRlcmlhbFwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjMzczNzM3XCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInJvYWQuYXJ0ZXJpYWxcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHNcIixcInN0eWxlcnNcIjpbe1widmlzaWJpbGl0eVwiOlwib2ZmXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInJvYWQuaGlnaHdheVwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjM2MzYzNjXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInJvYWQuaGlnaHdheVwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVsc1wiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5oaWdod2F5LmNvbnRyb2xsZWRfYWNjZXNzXCIsXCJlbGVtZW50VHlwZVwiOlwiZ2VvbWV0cnlcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiM0ZTRlNGVcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5sb2NhbFwiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5sb2NhbFwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiM2MTYxNjFcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwidHJhbnNpdFwiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwidHJhbnNpdFwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiM3NTc1NzVcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwid2F0ZXJcIixcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzAwMDAwMFwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJ3YXRlclwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMzZDNkM2RcIn1dfV07XHJcbiAgICAgICAgICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXAnKSwge1xyXG4gICAgICAgICAgICAgem9vbTogMTIsXHJcbiAgICAgICAgICAgICBjZW50ZXI6IGNlbnRlciwgLy8gQ2VudHJhciBlbCBtYXBhIGVuIGVsIGNlbnRybyBjYWxjdWxhZG9cclxuICAgICAgICAgICAgIHN0eWxlczogc3R5bGUgLy8gQXBsaWNhIGxvcyBlc3RpbG9zIHBlcnNvbmFsaXphZG9zXHJcbiAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2gobG9jYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgY29uc3QgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XHJcbiAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7IGxhdDogbG9jYXRpb24ubGF0LCBsbmc6IGxvY2F0aW9uLmxuZyB9LFxyXG4gICAgICAgICAgICAgICBtYXA6IHRoaXMubWFwLFxyXG4gICAgICAgICAgICAgICB0aXRsZTogbG9jYXRpb24udGl0bGUsXHJcbiAgICAgICAgICAgICAgIGljb246IHtcclxuICAgICAgICAgICAgICAgIHVybDogXCIuLi8uLi8uLi9hc3NldHMvbG9jYXRpb24uc3ZnXCIsXHJcbiAgICAgICAgICAgICAgICBzY2FsZWRTaXplOiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgzMCwgMzApXHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgbWFya2VyLnNldCgnaWQnLCBsb2NhdGlvbi5pZCk7IC8vIEFzc29jaWF0ZSBtYXJrZXIgd2l0aCBpdHMgSURcclxuICAgICAgICAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XHJcbiAgICAgICAgICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRvID0gJCgnIycgKyBsb2NhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICAgY29uc3QgY29udGVuZWRvciA9ICQoJyNob21lJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgIGlmIChlbGVtZW50by5sZW5ndGggJiYgY29udGVuZWRvci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgY29udGVuZWRvci5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogZWxlbWVudG8ub2Zmc2V0KCkudG9wIC0gY29udGVuZWRvci5vZmZzZXQoKS50b3AgKyBjb250ZW5lZG9yLnNjcm9sbFRvcCgpXHJcbiAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKHRoaXMudWx0aW1vRWxlbWVudG9TZWxlY2Npb25hZG8gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgLy8gUXVpdGFyIGxhIGNsYXNlIGRlbCDDumx0aW1vIGVsZW1lbnRvIHNlbGVjY2lvbmFkb1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgLy8gQWdyZWdhciB1bmEgY2xhc2UgYWwgbnVldm8gZWxlbWVudG8gc2VsZWNjaW9uYWRvXHJcbiAgICAgICAgICAgICAgICAgZWxlbWVudG8uYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgIHRoaXMudWx0aW1vRWxlbWVudG9TZWxlY2Npb25hZG8gPSBlbGVtZW50bztcclxuXHJcbiAgICAgICAgICAgICAgICAgdGhpcy5zdG9wQm91bmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgbWFya2VyLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTtcclxuICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgIHRoaXMubWFwLmZpdEJvdW5kcyhib3VuZHMpO1xyXG4gICAgICAgICB9LFxyXG4gICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBvYnRlbmVyIGxhcyB0aWVuZGFzOicsIGVycm9yKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgKTtcclxuICAgICAgIH0pO1xyXG5cclxuICAgICB9XHJcblxyXG4gICBzaG93U3RvcmVPbk1hcChzdG9yZUNvZGU6IHN0cmluZykge1xyXG4gICAgICAgdGhpcy5zdG9wQm91bmNlKCk7XHJcbiAgICAgICBjb25zdCBtYXJrZXIgPSB0aGlzLm1hcmtlcnMuZmluZChtID0+IG0uZ2V0KCdpZCcpID09PSBzdG9yZUNvZGUpO1xyXG4gICAgICAgY29uc3QgZWxlbWVudG8gPSAkKCcjJyArIHN0b3JlQ29kZSk7XHJcbiAgICAgICBpZiAodGhpcy51bHRpbW9FbGVtZW50b1NlbGVjY2lvbmFkbyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBRdWl0YXIgbGEgY2xhc2UgZGVsIMO6bHRpbW8gZWxlbWVudG8gc2VsZWNjaW9uYWRvXHJcbiAgICAgICAgICAgIHRoaXMudWx0aW1vRWxlbWVudG9TZWxlY2Npb25hZG8ucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZ3JlZ2FyIHVuYSBjbGFzZSBhbCBudWV2byBlbGVtZW50byBzZWxlY2Npb25hZG9cclxuICAgICAgICBlbGVtZW50by5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcclxuXHJcbiAgICAgICAgdGhpcy51bHRpbW9FbGVtZW50b1NlbGVjY2lvbmFkbyA9IGVsZW1lbnRvO1xyXG4gICAgICAgaWYgKG1hcmtlcikge1xyXG4gICAgICAgICAgICAvLyB0aGlzLm1hcC5wYW5UbyhtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubWFwLnNldFpvb20oMTUpO1xyXG4gICAgICAgICAgIG1hcmtlci5zZXRBbmltYXRpb24oZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkJPVU5DRSk7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHN0b3BCb3VuY2UoKXtcclxuICAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKG1hcmtlciA9PiB7XHJcbiAgICAgICAgICAgIG1hcmtlci5zZXRBbmltYXRpb24obnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ };
20
+ import { Component } from '@angular/core';
21
+ import { DomSanitizer } from '@angular/platform-browser';
22
+ import { filter } from 'rxjs/operators';
23
+ import { ComponentHelper } from '../../classes/component-helper';
24
+ import { Constants } from '../../core.consts';
25
+ import { StoresService } from '../../services/stores.service';
26
+ import { skipWhile } from 'rxjs/operators';
27
+ var StoresEcComponent = /** @class */ (function (_super) {
28
+ __extends(StoresEcComponent, _super);
29
+ function StoresEcComponent(storesService, consts, sanitizer) {
30
+ var _this = _super.call(this) || this;
31
+ _this.storesService = storesService;
32
+ _this.consts = consts;
33
+ _this.sanitizer = sanitizer;
34
+ _this.filterStores = null;
35
+ _this.storesAll = null;
36
+ _this.exclusiveStores = null;
37
+ _this.imageMap = true;
38
+ _this.stores = [];
39
+ _this.provinces = [];
40
+ _this.markers = [];
41
+ _this.ultimoElementoSeleccionado = null;
42
+ _this.locations = [];
43
+ /**
44
+ * @description Obtiene todas la provincias que figuren en el arreglo
45
+ * @param stores Arreglo de tiendas
46
+ * @returns {Array} Arreglo de provincias
47
+ */
48
+ _this.getProvices = function (stores) {
49
+ var provincesOpt = [];
50
+ stores.forEach(function (store) {
51
+ if (provincesOpt.find(function (s) { return s.code == store.province.code; }) == undefined) {
52
+ provincesOpt.push(store.province);
53
+ }
54
+ });
55
+ return provincesOpt;
56
+ };
57
+ /**
58
+ * @description Retorna un arreglo de objetos formado por las claves
59
+ * "province"(contiene un objeto provincia) y
60
+ * "stores" (contiene un arreglo de tiendas pertenecientes a la provincia)
61
+ * @param stores Opcional, arreglo de tiendas a la que se le quiere aplicar la division por provincia
62
+ * @returns {Array<{"province", "stores"}>}
63
+ */
64
+ _this.getStoresByProvinces = function (stores) {
65
+ if (stores === void 0) { stores = _this.stores; }
66
+ var storesByProvinces = [];
67
+ if (stores) {
68
+ var provinces = _this.getProvices(stores);
69
+ provinces.forEach(function (elem) {
70
+ var _a;
71
+ var aux = (_a = stores) === null || _a === void 0 ? void 0 : _a.filter(function (store) { return store.province.code == elem.code; });
72
+ storesByProvinces.push({ province: elem, stores: aux });
73
+ });
74
+ }
75
+ return storesByProvinces;
76
+ };
77
+ /**
78
+ * @description Retorna las tiendas con/sin retiro en el local
79
+ * @param stores Opcional, arreglo de tiendas
80
+ * @param cond Opcional, Si es "true" obtiene las tiendas con retiro local caso contrario "false"
81
+ * @returns {Array<Store>} Arreglo de Store
82
+ */
83
+ _this.getPickupStores = function (stores, cond) {
84
+ if (stores === void 0) { stores = _this.stores; }
85
+ if (cond === void 0) { cond = true; }
86
+ return stores && stores.filter(function (store) { return cond == store.pickupStore; });
87
+ };
88
+ /**
89
+ * @description Metodo que devuelve las tiendas que NO son exclusivas.
90
+ * @returns {Array<Store>} Arreglo de Store
91
+ */
92
+ _this.getNonExclusiveStores = function () { return _this.stores.filter(function (store) { return !store.exclusive; }); };
93
+ _this.selectChange = function (select) {
94
+ _this.filterStores = select != '' && _this.storesAll.filter(function (store) { return store.province.code == select; }) || _this.storesAll;
95
+ return true;
96
+ };
97
+ _this.urlmap = _this.sanitizer.bypassSecurityTrustResourceUrl('https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148');
98
+ _this.storesService.stores.pipe(filter(function (store) { return store && store.length > 0; })).subscribe(function (stores) {
99
+ _this.storesAll = stores;
100
+ _this.stores = stores;
101
+ _this.exclusiveStores = stores.filter(function (store) { return store.exclusive; });
102
+ _this.selectChange('');
103
+ });
104
+ _this.ecOnConstruct();
105
+ return _this;
106
+ }
107
+ StoresEcComponent.prototype.ngOnInit = function () {
108
+ this.ecOnInit();
109
+ };
110
+ StoresEcComponent.prototype.updateMap = function (url) {
111
+ url = url.includes('embed') ? url : 'https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148';
112
+ this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl(url);
113
+ };
114
+ StoresEcComponent.prototype.initMap = function () {
115
+ var _this = this;
116
+ this.storesService.stores.pipe(skipWhile(function (stores) { return stores.length === 0; }) // Omitir valores vacíos
117
+ ).subscribe(function (res) {
118
+ _this.stores = res;
119
+ _this.stores.forEach(function (store) {
120
+ var datos = {
121
+ id: store.code,
122
+ lat: parseFloat(store.latitude),
123
+ lng: parseFloat(store.longitude),
124
+ title: store.name + ' - ' + store.address,
125
+ description: store.phone,
126
+ };
127
+ // console.log(datos)
128
+ _this.locations.push(datos);
129
+ });
130
+ var bounds = new google.maps.LatLngBounds();
131
+ _this.locations.forEach(function (location) {
132
+ bounds.extend(new google.maps.LatLng(location.lat, location.lng));
133
+ });
134
+ var center = bounds.getCenter();
135
+ var style = [{ "elementType": "geometry", "stylers": [{ "color": "#212121" }] }, { "elementType": "labels.icon", "stylers": [{ "visibility": "off" }] }, { "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "elementType": "labels.text.stroke", "stylers": [{ "color": "#212121" }] }, { "featureType": "administrative", "elementType": "geometry", "stylers": [{ "color": "#757575" }] }, { "featureType": "administrative.country", "elementType": "labels.text.fill", "stylers": [{ "color": "#9e9e9e" }] }, { "featureType": "administrative.locality", "elementType": "labels.text.fill", "stylers": [{ "color": "#bdbdbd" }] }, { "featureType": "poi", "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "featureType": "poi.business", "stylers": [{ "visibility": "off" }] }, { "featureType": "poi.park", "elementType": "geometry", "stylers": [{ "color": "#181818" }] }, { "featureType": "poi.park", "elementType": "labels.text.fill", "stylers": [{ "color": "#616161" }] }, { "featureType": "poi.park", "elementType": "labels.text.stroke", "stylers": [{ "color": "#1b1b1b" }] }, { "featureType": "road", "elementType": "geometry.fill", "stylers": [{ "color": "#2c2c2c" }] }, { "featureType": "road", "elementType": "labels.icon", "stylers": [{ "visibility": "off" }] }, { "featureType": "road", "elementType": "labels.text.fill", "stylers": [{ "color": "#8a8a8a" }] }, { "featureType": "road.arterial", "elementType": "geometry", "stylers": [{ "color": "#373737" }] }, { "featureType": "road.arterial", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.highway", "elementType": "geometry", "stylers": [{ "color": "#3c3c3c" }] }, { "featureType": "road.highway", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.highway.controlled_access", "elementType": "geometry", "stylers": [{ "color": "#4e4e4e" }] }, { "featureType": "road.local", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.local", "elementType": "labels.text.fill", "stylers": [{ "color": "#616161" }] }, { "featureType": "transit", "stylers": [{ "visibility": "off" }] }, { "featureType": "transit", "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "featureType": "water", "elementType": "geometry", "stylers": [{ "color": "#000000" }] }, { "featureType": "water", "elementType": "labels.text.fill", "stylers": [{ "color": "#3d3d3d" }] }];
136
+ _this.map = new google.maps.Map(document.getElementById('map'), {
137
+ zoom: 12,
138
+ center: center,
139
+ styles: style // Aplica los estilos personalizados
140
+ });
141
+ _this.locations.forEach(function (location) {
142
+ var marker = new google.maps.Marker({
143
+ position: { lat: location.lat, lng: location.lng },
144
+ map: _this.map,
145
+ title: location.title,
146
+ icon: {
147
+ url: "../../../assets/location.svg",
148
+ scaledSize: new google.maps.Size(30, 30)
149
+ }
150
+ });
151
+ marker.set('id', location.id); // Associate marker with its ID
152
+ _this.markers.push(marker);
153
+ marker.addListener('click', function () {
154
+ var elemento = $('#' + location.id);
155
+ var contenedor = $('#home');
156
+ if (elemento.length && contenedor.length) {
157
+ contenedor.animate({
158
+ scrollTop: elemento.offset().top - contenedor.offset().top + contenedor.scrollTop()
159
+ }, 1000);
160
+ }
161
+ if (_this.ultimoElementoSeleccionado !== null) {
162
+ // Quitar la clase del último elemento seleccionado
163
+ _this.ultimoElementoSeleccionado.removeClass('selected');
164
+ }
165
+ // Agregar una clase al nuevo elemento seleccionado
166
+ elemento.addClass('selected');
167
+ _this.ultimoElementoSeleccionado = elemento;
168
+ _this.stopBounce();
169
+ marker.setAnimation(google.maps.Animation.BOUNCE);
170
+ });
171
+ _this.map.fitBounds(bounds);
172
+ }, function (error) {
173
+ console.error('Error al obtener las tiendas:', error);
174
+ });
175
+ });
176
+ };
177
+ StoresEcComponent.prototype.showStoreOnMap = function (storeCode) {
178
+ this.stopBounce();
179
+ var marker = this.markers.find(function (m) { return m.get('id') === storeCode; });
180
+ var elemento = $('#' + storeCode);
181
+ if (this.ultimoElementoSeleccionado !== null) {
182
+ // Quitar la clase del último elemento seleccionado
183
+ this.ultimoElementoSeleccionado.removeClass('selected');
184
+ }
185
+ // Agregar una clase al nuevo elemento seleccionado
186
+ elemento.addClass('selected');
187
+ this.ultimoElementoSeleccionado = elemento;
188
+ if (marker) {
189
+ // this.map.panTo(marker.getPosition());
190
+ // this.map.setZoom(15);
191
+ marker.setAnimation(google.maps.Animation.BOUNCE);
192
+ }
193
+ };
194
+ StoresEcComponent.prototype.stopBounce = function () {
195
+ this.markers.forEach(function (marker) {
196
+ marker.setAnimation(null);
197
+ });
198
+ };
199
+ StoresEcComponent.ctorParameters = function () { return [
200
+ { type: StoresService },
201
+ { type: Constants },
202
+ { type: DomSanitizer }
203
+ ]; };
204
+ StoresEcComponent = __decorate([
205
+ Component({
206
+ selector: 'app-store-ec',
207
+ template: "<div class=\"row w-100 mx-auto my-4 px-3 bb-s bt-md-s py-1\">\n <strong>{{ 'stores' | translate }}</strong>\n</div>\n\n<section class=\"formulario container-fluid\" *ngIf=\"stores ; else noStores\">\n <div *ngIf=\"stores.length; else loading\">\n\n <div class=\"row\" *ngIf=\"stores && stores.length > 0; else noStores\">\n <div class=\"col-12 col-md-3 order-1 order-md-1\">\n <div class=\"row\">\n <div class=\"form-group w-100\">\n <select (change)=\"selectChange($event.target.value)\"\n class=\"rounded-0 form-control form-control-sm\" id=\"exampleFormControlSelect1\">\n <option selected [value]=\"''\">Seleccione provincia</option>\n <option [value]=\"item.code\" *ngFor=\"let item of getProvices(stores)\"> {{item.name}}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-3 order-3 order-md-2\">\n <div class=\"container-fluid scrolleable\" *ngIf=\"filterStores && filterStores.length\">\n <div class=\"row mb-1\" *ngFor=\"let store of filterStores; let i = index\">\n <div class=\"col-12\">\n <h6 class=\"\"><strong>{{ store.name }}</strong></h6>\n <label>{{ store.address }}</label>\n <label>{{ store.phone }}</label>\n <div [innerHtml]=\"store.note\"></div>\n <div class=\"text-right\">\n <!-- <a [href]=\"store.urlMap\" target=\"_blank\" class=\"custom-a\">Ver mapa</a> -->\n <a *ngIf=\"store.urlMap\" (click)=\"updateMap (store.urlMap)\" class=\"custom-a\">Ver mapa</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6 order-2 order-md-3 my-4 mt-md-0\">\n <!-- <img *ngIf=\"imageMap\" src=\"../../../assets/images/recurso (21).png\" alt=\"\" class=\"w-100\"> -->\n <!-- <iframe *ngIf=\"!imageMap\" [src]=\"urlMap\" frameborder=\"0\" style=\"width: 100%; height: 500px;\"></iframe> -->\n <iframe id=\"map-iframe\" [src]=\"urlmap\" frameborder=\"0\"></iframe>\n </div>\n </div>\n </div>\n</section>\n\n\n<ng-template #noStores>\n\n <div class=\"d-flex flex-row justify-content-center my-5 align-items-center alto-total\">\n <h5 class=\"text-center\">{{ 'no-stores' | translate }}</h5>\n </div>\n\n</ng-template>\n\n<ng-template #loading>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 align-items-center\">\n <div class=\"d-flex flex-column justify-content-center align-items-center my-5\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n </div>\n </div>\n</ng-template>",
208
+ styles: [".scrolleable{height:70vh;overflow:auto}@media screen and (max-width:768px){.scrolleable{height:auto}}.background-white{background-color:#fff}.alto-total{height:60vh}.custom-a{color:#000}#map-iframe{width:100%;border:0;height:100%}@media screen and (max-width:425px){#map-iframe{height:400px}}"]
209
+ })
210
+ ], StoresEcComponent);
211
+ return StoresEcComponent;
212
+ }(ComponentHelper));
213
+ export { StoresEcComponent };
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVzLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9lYy1jb21wb25lbnQvc3RvcmVzLWVjL3N0b3Jlcy1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRM0M7SUFBdUMscUNBQWU7SUFlbEQsMkJBQW1CLGFBQTRCLEVBQVMsTUFBaUIsRUFBYSxTQUF1QjtRQUE3RyxZQUNJLGlCQUFPLFNBU1Y7UUFWa0IsbUJBQWEsR0FBYixhQUFhLENBQWU7UUFBUyxZQUFNLEdBQU4sTUFBTSxDQUFXO1FBQWEsZUFBUyxHQUFULFNBQVMsQ0FBYztRQWJ0RyxrQkFBWSxHQUFHLElBQUksQ0FBQTtRQUNuQixlQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLHFCQUFlLEdBQUcsSUFBSSxDQUFBO1FBQ3RCLGNBQVEsR0FBRyxJQUFJLENBQUE7UUFFZixZQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osZUFBUyxHQUFHLEVBQUUsQ0FBQTtRQUdiLGFBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsZ0NBQTBCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLGVBQVMsR0FBVSxFQUFFLENBQUM7UUF1QjlCOzs7O1dBSUc7UUFDSCxp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QyxrQkFBa0IsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMseUJBQXlCLEVBQUMsYUFBYSxFQUFDLGtCQUFrQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLGtCQUFrQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxjQUFjLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLGtCQUFrQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLG9CQUFvQixFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLGVBQWUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxhQUFhLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsa0JBQWtCLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLGVBQWUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxlQUFlLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsY0FBYyxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLGNBQWMsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxnQ0FBZ0MsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxZQUFZLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLFlBQVksRUFBQyxhQUFhLEVBQUMsa0JBQWtCLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxrQkFBa0IsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFB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QWUsR0FrTXJEO1NBbE1ZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgU3RvcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3Jlcy5zZXJ2aWNlJztcbmltcG9ydCB7IHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmRlY2xhcmUgdmFyICQ6IGFueTtcbmRlY2xhcmUgdmFyIGdvb2dsZTogYW55O1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtc3RvcmUtZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnc3RvcmVzLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnc3RvcmVzLWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3RvcmVzRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgIHtcblxuICAgIHB1YmxpYyBmaWx0ZXJTdG9yZXMgPSBudWxsXG4gICAgcHVibGljIHN0b3Jlc0FsbCA9IG51bGxcbiAgICBwdWJsaWMgZXhjbHVzaXZlU3RvcmVzID0gbnVsbFxuICAgIHB1YmxpYyBpbWFnZU1hcCA9IHRydWVcbiAgICBwdWJsaWMgdXJsbWFwO1xuICAgIHB1YmxpYyBzdG9yZXMgPSBbXTtcbiAgICBwdWJsaWMgcHJvdmluY2VzID0gW11cbiAgICBwcml2YXRlIHVybDtcbiAgICBwcml2YXRlIG1hcDogYW55O1xuICAgIHByaXZhdGUgbWFya2VyczogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIHVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvID0gbnVsbDtcbiAgICBwcml2YXRlIGxvY2F0aW9uczogYW55W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdG9yZXNTZXJ2aWNlOiBTdG9yZXNTZXJ2aWNlLCBwdWJsaWMgY29uc3RzOiBDb25zdGFudHMgLCBwcm90ZWN0ZWQgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy51cmxtYXAgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9lbWJlZD9wYj0hMW0xMCExbTghMW0zITFkMTMxMzcuNTE5Njg4OTU3NTQ1ITJkLTU4LjM4ODgxNjMhM2QtMzQuNTk0NTUzMyEzbTIhMWkxMDI0ITJpNzY4ITRmMTMuMSE1ZTAhM20yITFzZXMtNDE5ITJzYXIhNHYxNTIzODg5MjA0MTQ4JylcbiAgICAgICAgdGhpcy5zdG9yZXNTZXJ2aWNlLnN0b3Jlcy5waXBlKGZpbHRlcihzdG9yZSA9PiBzdG9yZSAmJiBzdG9yZS5sZW5ndGggPiAwKSkuc3Vic2NyaWJlKHN0b3JlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3Jlc0FsbCA9IHN0b3Jlc1xuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSBzdG9yZXNcbiAgICAgICAgICAgIHRoaXMuZXhjbHVzaXZlU3RvcmVzID0gc3RvcmVzLmZpbHRlcihzdG9yZSA9PiBzdG9yZS5leGNsdXNpdmUgKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RDaGFuZ2UoJycpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuICAgIH1cblxuICAgIHVwZGF0ZU1hcCh1cmw6c3RyaW5nKSB7XG4gICAgICAgIHVybCA9IHVybC5pbmNsdWRlcyAoJ2VtYmVkJykgPyB1cmwgOiAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL2VtYmVkP3BiPSExbTEwITFtOCExbTMhMWQxMzEzNy41MTk2ODg5NTc1NDUhMmQtNTguMzg4ODE2MyEzZC0zNC41OTQ1NTMzITNtMiExaTEwMjQhMmk3NjghNGYxMy4xITVlMCEzbTIhMXNlcy00MTkhMnNhciE0djE1MjM4ODkyMDQxNDgnXG4gICAgICAgIHRoaXMudXJsbWFwID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhcyBsYSBwcm92aW5jaWFzIHF1ZSBmaWd1cmVuIGVuIGVsIGFycmVnbG9cbiAgICAgKiBAcGFyYW0gc3RvcmVzIEFycmVnbG8gZGUgdGllbmRhc1xuICAgICAqIEByZXR1cm5zIHtBcnJheX0gQXJyZWdsbyBkZSBwcm92aW5jaWFzXG4gICAgICovXG4gICAgZ2V0UHJvdmljZXMgPSAoc3RvcmVzKSA9PiB7XG4gICAgICAgIGxldCBwcm92aW5jZXNPcHQgPSBbXVxuICAgICAgICBzdG9yZXMuZm9yRWFjaChzdG9yZSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvdmluY2VzT3B0LmZpbmQocyA9PiBzLmNvZGUgPT0gc3RvcmUucHJvdmluY2UuY29kZSkgPT0gIHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHByb3ZpbmNlc09wdC5wdXNoKHN0b3JlLnByb3ZpbmNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb3ZpbmNlc09wdFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRvcm5hIHVuIGFycmVnbG8gZGUgb2JqZXRvcyBmb3JtYWRvIHBvciBsYXMgY2xhdmVzXG4gICAgICogICAgICBcInByb3ZpbmNlXCIoY29udGllbmUgdW4gb2JqZXRvIHByb3ZpbmNpYSkgeVxuICAgICAqICAgICAgXCJzdG9yZXNcIiAoY29udGllbmUgdW4gYXJyZWdsbyBkZSB0aWVuZGFzIHBlcnRlbmVjaWVudGVzIGEgbGEgcHJvdmluY2lhKVxuICAgICAqIEBwYXJhbSBzdG9yZXMgT3BjaW9uYWwsIGFycmVnbG8gZGUgdGllbmRhcyBhIGxhIHF1ZSBzZSBsZSBxdWllcmUgYXBsaWNhciBsYSBkaXZpc2lvbiBwb3IgcHJvdmluY2lhXG4gICAgICogQHJldHVybnMge0FycmF5PHtcInByb3ZpbmNlXCIsIFwic3RvcmVzXCJ9Pn1cbiAgICAgKi9cbiAgICBnZXRTdG9yZXNCeVByb3ZpbmNlcyA9IChzdG9yZXMgPSB0aGlzLnN0b3JlcykgPT4ge1xuICAgICAgICBsZXQgc3RvcmVzQnlQcm92aW5jZXMgPSBbXVxuICAgICAgICBpZihzdG9yZXMpe1xuICAgICAgICAgICAgbGV0IHByb3ZpbmNlcyA9IHRoaXMuZ2V0UHJvdmljZXMoc3RvcmVzKVxuICAgICAgICAgICAgcHJvdmluY2VzLmZvckVhY2goIGVsZW0gPT4ge1xuICAgICAgICAgICAgICAgIGxldCBhdXggPSBzdG9yZXM/LmZpbHRlcihzdG9yZSA9PiAgc3RvcmUucHJvdmluY2UuY29kZSA9PSBlbGVtLmNvZGUpXG4gICAgICAgICAgICAgICAgc3RvcmVzQnlQcm92aW5jZXMucHVzaCh7cHJvdmluY2U6ZWxlbSxzdG9yZXM6YXV4fSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0b3Jlc0J5UHJvdmluY2VzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldG9ybmEgbGFzIHRpZW5kYXMgY29uL3NpbiByZXRpcm8gZW4gZWwgbG9jYWxcbiAgICAgKiBAcGFyYW0gc3RvcmVzIE9wY2lvbmFsLCBhcnJlZ2xvIGRlIHRpZW5kYXNcbiAgICAgKiBAcGFyYW0gY29uZCBPcGNpb25hbCwgU2kgZXMgXCJ0cnVlXCIgb2J0aWVuZSBsYXMgdGllbmRhcyBjb24gcmV0aXJvIGxvY2FsIGNhc28gY29udHJhcmlvIFwiZmFsc2VcIlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxTdG9yZT59IEFycmVnbG8gZGUgU3RvcmVcbiAgICAgKi9cbiAgICBnZXRQaWNrdXBTdG9yZXMgPSAoc3RvcmVzID0gdGhpcy5zdG9yZXMsIGNvbmQ6Qm9vbGVhbiA9IHRydWUpID0+IHN0b3JlcyAmJiBzdG9yZXMuZmlsdGVyKHN0b3JlID0+IGNvbmQgPT0gc3RvcmUucGlja3VwU3RvcmUpXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTWV0b2RvIHF1ZSBkZXZ1ZWx2ZSBsYXMgdGllbmRhcyBxdWUgTk8gc29uIGV4Y2x1c2l2YXMuXG4gICAgICogQHJldHVybnMge0FycmF5PFN0b3JlPn0gQXJyZWdsbyBkZSBTdG9yZVxuICAgICAqL1xuICAgIGdldE5vbkV4Y2x1c2l2ZVN0b3JlcyA9ICgpID0+IHRoaXMuc3RvcmVzLmZpbHRlcihzdG9yZSA9PiAhc3RvcmUuZXhjbHVzaXZlIClcblxuICAgIHNlbGVjdENoYW5nZSA9IChzZWxlY3QpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJTdG9yZXMgPSBzZWxlY3QgIT0gJycgJiYgIHRoaXMuc3RvcmVzQWxsLmZpbHRlcihzdG9yZSA9PiAgc3RvcmUucHJvdmluY2UuY29kZSA9PSBzZWxlY3QpIHx8IHRoaXMuc3RvcmVzQWxsXG4gICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGluaXRNYXAoKTogdm9pZCB7XG5cbiAgICAgdGhpcy5zdG9yZXNTZXJ2aWNlLnN0b3Jlcy5waXBlKFxuICAgICAgICAgc2tpcFdoaWxlKHN0b3JlcyA9PiBzdG9yZXMubGVuZ3RoID09PSAwKSAvLyBPbWl0aXIgdmFsb3JlcyB2YWPDrW9zXG4gICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzO1xuXG5cbiAgICAgICAgICAgdGhpcy5zdG9yZXMuZm9yRWFjaChzdG9yZSA9PiB7XG4gICAgICAgICAgICAgbGV0IGRhdG9zID0ge1xuICAgICAgICAgICAgICAgaWQ6IHN0b3JlLmNvZGUsXG4gICAgICAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoc3RvcmUubGF0aXR1ZGUpLFxuICAgICAgICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KHN0b3JlLmxvbmdpdHVkZSksXG4gICAgICAgICAgICAgICB0aXRsZTogc3RvcmUubmFtZSArICcgLSAnICsgc3RvcmUuYWRkcmVzcyxcbiAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdG9yZS5waG9uZSxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdG9zKVxuICAgICAgICAgICAgIHRoaXMubG9jYXRpb25zLnB1c2goZGF0b3MpO1xuICAgICAgICAgICB9KTtcbiAgICAgICAgICAgY29uc3QgYm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpO1xuICAgICAgICAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKGxvY2F0aW9uID0+IHtcbiAgICAgICAgICAgICBib3VuZHMuZXh0ZW5kKG5ldyBnb29nbGUubWFwcy5MYXRMbmcobG9jYXRpb24ubGF0LCBsb2NhdGlvbi5sbmcpKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGJvdW5kcy5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBbe1wiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjMjEyMTIxXCJ9XX0se1wiZWxlbWVudFR5cGVcIjpcImxhYmVscy5pY29uXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjNzU3NTc1XCJ9XX0se1wiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LnN0cm9rZVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzIxMjEyMVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJhZG1pbmlzdHJhdGl2ZVwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjNzU3NTc1XCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjOWU5ZTllXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcImFkbWluaXN0cmF0aXZlLmxvY2FsaXR5XCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiI2JkYmRiZFwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJwb2lcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjNzU3NTc1XCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInBvaS5idXNpbmVzc1wiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicG9pLnBhcmtcIixcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzE4MTgxOFwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJwb2kucGFya1wiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiM2MTYxNjFcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicG9pLnBhcmtcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5zdHJva2VcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMxYjFiMWJcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZFwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMyYzJjMmNcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZFwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy5pY29uXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzhhOGE4YVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmFydGVyaWFsXCIsXCJlbGVtZW50VHlwZVwiOlwiZ2VvbWV0cnlcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMzNzM3MzdcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5hcnRlcmlhbFwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVsc1wiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5oaWdod2F5XCIsXCJlbGVtZW50VHlwZVwiOlwiZ2VvbWV0cnlcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMzYzNjM2NcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5oaWdod2F5XCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmhpZ2h3YXkuY29udHJvbGxlZF9hY2Nlc3NcIixcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzRlNGU0ZVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmxvY2FsXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmxvY2FsXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzYxNjE2MVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJ0cmFuc2l0XCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJ0cmFuc2l0XCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzc1NzU3NVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJ3YXRlclwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjMDAwMDAwXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcIndhdGVyXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzNkM2QzZFwifV19XTtcbiAgICAgICAgICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXAnKSwge1xuICAgICAgICAgICAgIHpvb206IDEyLFxuICAgICAgICAgICAgIGNlbnRlcjogY2VudGVyLCAvLyBDZW50cmFyIGVsIG1hcGEgZW4gZWwgY2VudHJvIGNhbGN1bGFkb1xuICAgICAgICAgICAgIHN0eWxlczogc3R5bGUgLy8gQXBsaWNhIGxvcyBlc3RpbG9zIHBlcnNvbmFsaXphZG9zXG4gICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2gobG9jYXRpb24gPT4ge1xuICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICAgICAgICAgcG9zaXRpb246IHsgbGF0OiBsb2NhdGlvbi5sYXQsIGxuZzogbG9jYXRpb24ubG5nIH0sXG4gICAgICAgICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAgICAgICAgdGl0bGU6IGxvY2F0aW9uLnRpdGxlLFxuICAgICAgICAgICAgICAgaWNvbjoge1xuICAgICAgICAgICAgICAgIHVybDogXCIuLi8uLi8uLi9hc3NldHMvbG9jYXRpb24uc3ZnXCIsXG4gICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMzAsIDMwKVxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgIG1hcmtlci5zZXQoJ2lkJywgbG9jYXRpb24uaWQpOyAvLyBBc3NvY2lhdGUgbWFya2VyIHdpdGggaXRzIElEXG4gICAgICAgICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICAgICAgICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50byA9ICQoJyMnICsgbG9jYXRpb24uaWQpO1xuICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW5lZG9yID0gJCgnI2hvbWUnKTtcblxuICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudG8ubGVuZ3RoICYmIGNvbnRlbmVkb3IubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICBjb250ZW5lZG9yLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogZWxlbWVudG8ub2Zmc2V0KCkudG9wIC0gY29udGVuZWRvci5vZmZzZXQoKS50b3AgKyBjb250ZW5lZG9yLnNjcm9sbFRvcCgpXG4gICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgIGlmICh0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAvLyBRdWl0YXIgbGEgY2xhc2UgZGVsIMO6bHRpbW8gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgLy8gQWdyZWdhciB1bmEgY2xhc2UgYWwgbnVldm8gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICAgICAgICAgICAgIGVsZW1lbnRvLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgIHRoaXMudWx0aW1vRWxlbWVudG9TZWxlY2Npb25hZG8gPSBlbGVtZW50bztcblxuICAgICAgICAgICAgICAgICB0aGlzLnN0b3BCb3VuY2UoKTtcbiAgICAgICAgICAgICAgICAgbWFya2VyLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTtcbiAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgIHRoaXMubWFwLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgICAgICAgfSxcbiAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBvYnRlbmVyIGxhcyB0aWVuZGFzOicsIGVycm9yKTtcbiAgICAgICAgIH1cbiAgICAgICApO1xuICAgICAgIH0pO1xuXG4gICAgIH1cblxuICAgc2hvd1N0b3JlT25NYXAoc3RvcmVDb2RlOiBzdHJpbmcpIHtcbiAgICAgICB0aGlzLnN0b3BCb3VuY2UoKTtcbiAgICAgICBjb25zdCBtYXJrZXIgPSB0aGlzLm1hcmtlcnMuZmluZChtID0+IG0uZ2V0KCdpZCcpID09PSBzdG9yZUNvZGUpO1xuICAgICAgIGNvbnN0IGVsZW1lbnRvID0gJCgnIycgKyBzdG9yZUNvZGUpO1xuICAgICAgIGlmICh0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBRdWl0YXIgbGEgY2xhc2UgZGVsIMO6bHRpbW8gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICAgICAgICB0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWdyZWdhciB1bmEgY2xhc2UgYWwgbnVldm8gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICAgIGVsZW1lbnRvLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAgIHRoaXMudWx0aW1vRWxlbWVudG9TZWxlY2Npb25hZG8gPSBlbGVtZW50bztcbiAgICAgICBpZiAobWFya2VyKSB7XG4gICAgICAgICAgICAvLyB0aGlzLm1hcC5wYW5UbyhtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICAgICAgICAvLyB0aGlzLm1hcC5zZXRab29tKDE1KTtcbiAgICAgICAgICAgbWFya2VyLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTtcbiAgICAgICB9XG4gICB9XG5cbiAgIHN0b3BCb3VuY2UoKXtcbiAgICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaChtYXJrZXIgPT4ge1xuICAgICAgICAgICAgbWFya2VyLnNldEFuaW1hdGlvbihudWxsKTtcbiAgICAgICAgfSk7XG4gICB9XG5cblxufVxuIl19