@po-ui/ng-components 5.21.0 → 5.22.3

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 (1217) hide show
  1. package/README.md +36 -36
  2. package/bundles/po-ui-ng-components.umd.js +38669 -38615
  3. package/bundles/po-ui-ng-components.umd.js.map +1 -1
  4. package/esm2015/lib/components/components.module.js +122 -122
  5. package/esm2015/lib/components/index.js +38 -38
  6. package/esm2015/lib/components/po-accordion/index.js +4 -4
  7. package/esm2015/lib/components/po-accordion/po-accordion-base.component.js +29 -29
  8. package/esm2015/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.js +66 -66
  9. package/esm2015/lib/components/po-accordion/po-accordion-item-body/po-accordion-item-body.component.js +23 -23
  10. package/esm2015/lib/components/po-accordion/po-accordion-item-header/po-accordion-item-header.component.js +24 -24
  11. package/esm2015/lib/components/po-accordion/po-accordion.component.js +70 -70
  12. package/esm2015/lib/components/po-accordion/po-accordion.module.js +52 -52
  13. package/esm2015/lib/components/po-accordion/services/po-accordion.service.js +27 -27
  14. package/esm2015/lib/components/po-avatar/index.js +3 -3
  15. package/esm2015/lib/components/po-avatar/po-avatar-base.component.js +68 -68
  16. package/esm2015/lib/components/po-avatar/po-avatar.component.js +42 -42
  17. package/esm2015/lib/components/po-avatar/po-avatar.module.js +18 -18
  18. package/esm2015/lib/components/po-badge/po-badge-base.component.js +89 -89
  19. package/esm2015/lib/components/po-badge/po-badge.component.js +16 -16
  20. package/esm2015/lib/components/po-badge/po-badge.module.js +18 -18
  21. package/esm2015/lib/components/po-breadcrumb/index.js +5 -5
  22. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-base.component.js +48 -48
  23. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.js +20 -20
  24. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.component.js +77 -77
  25. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.service.js +49 -49
  26. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-item/po-breadcrumb-item.component.js +27 -27
  27. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-item.interface.js +2 -2
  28. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb.component.js +159 -159
  29. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb.interface.js +2 -2
  30. package/esm2015/lib/components/po-breadcrumb/po-breadcrumb.module.js +28 -28
  31. package/esm2015/lib/components/po-button/index.js +3 -3
  32. package/esm2015/lib/components/po-button/po-button-base.component.js +127 -127
  33. package/esm2015/lib/components/po-button/po-button.component.js +69 -69
  34. package/esm2015/lib/components/po-button/po-button.module.js +20 -20
  35. package/esm2015/lib/components/po-button-group/index.js +5 -5
  36. package/esm2015/lib/components/po-button-group/po-button-group-base.component.js +95 -95
  37. package/esm2015/lib/components/po-button-group/po-button-group-item.interface.js +2 -2
  38. package/esm2015/lib/components/po-button-group/po-button-group-toggle.enum.js +17 -17
  39. package/esm2015/lib/components/po-button-group/po-button-group.component.js +43 -43
  40. package/esm2015/lib/components/po-button-group/po-button-group.module.js +20 -20
  41. package/esm2015/lib/components/po-calendar/index.js +4 -4
  42. package/esm2015/lib/components/po-calendar/po-calendar-base.component.js +176 -176
  43. package/esm2015/lib/components/po-calendar/po-calendar-header/po-calendar-header.component.js +24 -24
  44. package/esm2015/lib/components/po-calendar/po-calendar-mode.enum.js +13 -13
  45. package/esm2015/lib/components/po-calendar/po-calendar-wrapper/po-calendar-wrapper.component.js +251 -251
  46. package/esm2015/lib/components/po-calendar/po-calendar.component.js +199 -199
  47. package/esm2015/lib/components/po-calendar/po-calendar.module.js +19 -19
  48. package/esm2015/lib/components/po-calendar/services/po-calendar.lang.service.js +187 -187
  49. package/esm2015/lib/components/po-calendar/services/po-calendar.service.js +44 -44
  50. package/esm2015/lib/components/po-chart/directives/po-resize-observer.directive.js +44 -44
  51. package/esm2015/lib/components/po-chart/enums/po-chart-type.enum.js +51 -51
  52. package/esm2015/lib/components/po-chart/helpers/po-chart-default-values.constant.js +18 -18
  53. package/esm2015/lib/components/po-chart/index.js +8 -8
  54. package/esm2015/lib/components/po-chart/interfaces/po-chart-axis-options.interface.js +2 -2
  55. package/esm2015/lib/components/po-chart/interfaces/po-chart-bar-coordinates.interface.js +2 -2
  56. package/esm2015/lib/components/po-chart/interfaces/po-chart-container-size.interface.js +11 -11
  57. package/esm2015/lib/components/po-chart/interfaces/po-chart-label-coordinates.interface.js +2 -2
  58. package/esm2015/lib/components/po-chart/interfaces/po-chart-min-max-values.interface.js +2 -2
  59. package/esm2015/lib/components/po-chart/interfaces/po-chart-options.interface.js +2 -2
  60. package/esm2015/lib/components/po-chart/interfaces/po-chart-path-coordinates.interface.js +2 -2
  61. package/esm2015/lib/components/po-chart/interfaces/po-chart-points-coordinates.interface.js +2 -2
  62. package/esm2015/lib/components/po-chart/interfaces/po-chart-serie.interface.js +2 -2
  63. package/esm2015/lib/components/po-chart/po-chart-base.component.js +244 -244
  64. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-label/po-chart-axis-label.component.js +23 -23
  65. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-path/po-chart-axis-path.component.js +19 -19
  66. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis.component.js +287 -287
  67. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-base.component.js +94 -94
  68. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-path/po-chart-bar-path.component.js +33 -33
  69. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar.component.js +58 -58
  70. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-column/po-chart-column.component.js +59 -59
  71. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-label/po-chart-circular-label.component.js +29 -29
  72. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-circular-path.component.js +35 -35
  73. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-tooltip.directive.js +76 -76
  74. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular.component.js +142 -142
  75. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-donut/po-chart-donut.component.js +115 -115
  76. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-pie/po-chart-pie.component.js +57 -57
  77. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-container.component.js +119 -119
  78. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-area/po-chart-area.component.js +77 -77
  79. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line-base.component.js +151 -151
  80. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line.component.js +41 -41
  81. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-path/po-chart-path.component.js +65 -65
  82. package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-series-point/po-chart-series-point.component.js +95 -95
  83. package/esm2015/lib/components/po-chart/po-chart-legend/po-chart-legend.component.js +21 -21
  84. package/esm2015/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.constant.js +11 -11
  85. package/esm2015/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.js +374 -374
  86. package/esm2015/lib/components/po-chart/po-chart-types/po-chart-dynamic-type.component.js +45 -45
  87. package/esm2015/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-series.interface.js +2 -2
  88. package/esm2015/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-text-content/po-chart-gauge-text-content.component.js +75 -75
  89. package/esm2015/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge.component.js +85 -85
  90. package/esm2015/lib/components/po-chart/po-chart.component.js +203 -203
  91. package/esm2015/lib/components/po-chart/po-chart.module.js +61 -61
  92. package/esm2015/lib/components/po-chart/services/po-chart-maths.service.js +135 -135
  93. package/esm2015/lib/components/po-chart/services/po-chart-svg-container.service.js +57 -57
  94. package/esm2015/lib/components/po-container/index.js +3 -3
  95. package/esm2015/lib/components/po-container/po-container-base.component.js +88 -88
  96. package/esm2015/lib/components/po-container/po-container.component.js +32 -32
  97. package/esm2015/lib/components/po-container/po-container.module.js +18 -18
  98. package/esm2015/lib/components/po-disclaimer/index.js +4 -4
  99. package/esm2015/lib/components/po-disclaimer/po-disclaimer-base.component.js +77 -77
  100. package/esm2015/lib/components/po-disclaimer/po-disclaimer.component.js +29 -29
  101. package/esm2015/lib/components/po-disclaimer/po-disclaimer.interface.js +2 -2
  102. package/esm2015/lib/components/po-disclaimer/po-disclaimer.module.js +17 -17
  103. package/esm2015/lib/components/po-disclaimer-group/index.js +5 -5
  104. package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group-base.component.js +194 -194
  105. package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group-remove-action.interface.js +2 -2
  106. package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group.component.js +41 -41
  107. package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group.interface.js +2 -2
  108. package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group.module.js +20 -20
  109. package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-remove/po-disclaimer-remove.component.js +30 -30
  110. package/esm2015/lib/components/po-divider/index.js +3 -3
  111. package/esm2015/lib/components/po-divider/po-divider-base.component.js +16 -16
  112. package/esm2015/lib/components/po-divider/po-divider.component.js +32 -32
  113. package/esm2015/lib/components/po-divider/po-divider.module.js +18 -18
  114. package/esm2015/lib/components/po-dropdown/index.js +4 -4
  115. package/esm2015/lib/components/po-dropdown/po-dropdown-action.interface.js +2 -2
  116. package/esm2015/lib/components/po-dropdown/po-dropdown-base.component.js +71 -71
  117. package/esm2015/lib/components/po-dropdown/po-dropdown.component.js +97 -97
  118. package/esm2015/lib/components/po-dropdown/po-dropdown.module.js +18 -18
  119. package/esm2015/lib/components/po-dynamic/index.js +11 -11
  120. package/esm2015/lib/components/po-dynamic/po-dynamic-field-type.enum.js +25 -25
  121. package/esm2015/lib/components/po-dynamic/po-dynamic-field.interface.js +2 -2
  122. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-base.component.js +104 -104
  123. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.js +2 -2
  124. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-field-internal.interface.js +2 -2
  125. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields-base.component.js +200 -200
  126. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.js +129 -129
  127. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.interface.js +2 -2
  128. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.service.js +32 -32
  129. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-operation/po-dynamic-form-operation.js +20 -20
  130. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-response.interface.js +2 -2
  131. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-changed.interface.js +2 -2
  132. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-validation.interface.js +2 -2
  133. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.interface.js +2 -2
  134. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.service.js +39 -39
  135. package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form.component.js +167 -167
  136. package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-base.component.js +163 -163
  137. package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-field.interface.js +2 -2
  138. package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.component.js +101 -101
  139. package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.service.js +17 -17
  140. package/esm2015/lib/components/po-dynamic/po-dynamic.module.js +35 -35
  141. package/esm2015/lib/components/po-dynamic/po-dynamic.util.js +18 -18
  142. package/esm2015/lib/components/po-field/index.js +51 -51
  143. package/esm2015/lib/components/po-field/po-checkbox/po-checkbox-base.component.js +98 -98
  144. package/esm2015/lib/components/po-field/po-checkbox/po-checkbox.component.js +94 -94
  145. package/esm2015/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option-view.interface.js +2 -2
  146. package/esm2015/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option.interface.js +2 -2
  147. package/esm2015/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.js +297 -289
  148. package/esm2015/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.js +98 -98
  149. package/esm2015/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.js +20 -20
  150. package/esm2015/lib/components/po-field/po-clean/po-clean-base.component.js +42 -42
  151. package/esm2015/lib/components/po-field/po-clean/po-clean.component.js +33 -33
  152. package/esm2015/lib/components/po-field/po-clean/po-clean.module.js +18 -18
  153. package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-filter.interface.js +2 -2
  154. package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-group.interface.js +2 -2
  155. package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-literals.interface.js +2 -2
  156. package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-option-group.interface.js +2 -2
  157. package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-option.interface.js +2 -2
  158. package/esm2015/lib/components/po-field/po-combo/interfaces/po-response.interface.js +2 -2
  159. package/esm2015/lib/components/po-field/po-combo/po-combo-base.component.js +749 -741
  160. package/esm2015/lib/components/po-field/po-combo/po-combo-filter-mode.enum.js +17 -17
  161. package/esm2015/lib/components/po-field/po-combo/po-combo-filter.service.js +78 -78
  162. package/esm2015/lib/components/po-field/po-combo/po-combo-option-template/po-combo-option-template.directive.js +81 -81
  163. package/esm2015/lib/components/po-field/po-combo/po-combo.component.js +525 -525
  164. package/esm2015/lib/components/po-field/po-datepicker/enums/po-datepicker-iso-format.enum.js +17 -17
  165. package/esm2015/lib/components/po-field/po-datepicker/po-datepicker-base.component.js +396 -396
  166. package/esm2015/lib/components/po-field/po-datepicker/po-datepicker.component.js +345 -344
  167. package/esm2015/lib/components/po-field/po-datepicker/po-datepicker.module.js +22 -22
  168. package/esm2015/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range-literals.interface.js +2 -2
  169. package/esm2015/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range.interface.js +2 -2
  170. package/esm2015/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.js +475 -475
  171. package/esm2015/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.js +443 -436
  172. package/esm2015/lib/components/po-field/po-datepicker-range/po-datepicker-range.literals.js +27 -27
  173. package/esm2015/lib/components/po-field/po-decimal/po-decimal.component.js +598 -598
  174. package/esm2015/lib/components/po-field/po-email/po-email.component.js +106 -106
  175. package/esm2015/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.js +29 -29
  176. package/esm2015/lib/components/po-field/po-field-container/po-field-container-literals.js +15 -15
  177. package/esm2015/lib/components/po-field/po-field-container/po-field-container.component.js +39 -39
  178. package/esm2015/lib/components/po-field/po-field-container/po-field-container.module.js +19 -19
  179. package/esm2015/lib/components/po-field/po-field-validate.model.js +69 -69
  180. package/esm2015/lib/components/po-field/po-field.model.js +78 -78
  181. package/esm2015/lib/components/po-field/po-field.module.js +156 -156
  182. package/esm2015/lib/components/po-field/po-input/po-input-base.component.js +357 -357
  183. package/esm2015/lib/components/po-field/po-input/po-input.component.js +56 -56
  184. package/esm2015/lib/components/po-field/po-input/po-mask.js +460 -460
  185. package/esm2015/lib/components/po-field/po-input-generic/po-input-generic.js +187 -187
  186. package/esm2015/lib/components/po-field/po-login/po-login.component.js +65 -65
  187. package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-advanced-filter.interface.js +2 -2
  188. package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-column.interface.js +2 -2
  189. package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-filter.interface.js +2 -2
  190. package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-filtered-items-params.interface.js +2 -2
  191. package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-literals.interface.js +2 -2
  192. package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-response-api.interface.js +2 -2
  193. package/esm2015/lib/components/po-field/po-lookup/po-lookup-base.component.js +451 -451
  194. package/esm2015/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.js +357 -347
  195. package/esm2015/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.js +130 -130
  196. package/esm2015/lib/components/po-field/po-lookup/po-lookup.component.js +337 -337
  197. package/esm2015/lib/components/po-field/po-lookup/services/po-lookup-filter.service.js +59 -59
  198. package/esm2015/lib/components/po-field/po-lookup/services/po-lookup-modal.service.js +62 -62
  199. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-base.component.js +576 -571
  200. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.js +139 -139
  201. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-filter-mode.enum.js +17 -17
  202. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.js +2 -2
  203. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-filter.service.js +50 -50
  204. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-item/po-multiselect-item.component.js +33 -33
  205. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-literals.interface.js +2 -2
  206. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-option.interface.js +2 -2
  207. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.js +57 -57
  208. package/esm2015/lib/components/po-field/po-multiselect/po-multiselect.component.js +359 -359
  209. package/esm2015/lib/components/po-field/po-number/po-number-base.component.js +114 -114
  210. package/esm2015/lib/components/po-field/po-number/po-number.component.js +119 -119
  211. package/esm2015/lib/components/po-field/po-password/po-password.component.js +92 -92
  212. package/esm2015/lib/components/po-field/po-radio-group/po-radio-group-base.component.js +184 -184
  213. package/esm2015/lib/components/po-field/po-radio-group/po-radio-group-option.interface.js +2 -2
  214. package/esm2015/lib/components/po-field/po-radio-group/po-radio-group.component.js +119 -119
  215. package/esm2015/lib/components/po-field/po-rich-text/interfaces/po-rich-text-toolbar-button-group-item.interface.js +2 -2
  216. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-base.component.js +181 -181
  217. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-body/po-rich-text-body.component.js +312 -312
  218. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-image-modal/po-rich-text-image-modal.component.js +96 -96
  219. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-link-modal/po-rich-text-link-modal.component.js +140 -140
  220. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-literals.js +83 -83
  221. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.js +166 -166
  222. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text.component.js +147 -147
  223. package/esm2015/lib/components/po-field/po-rich-text/po-rich-text.service.js +17 -17
  224. package/esm2015/lib/components/po-field/po-select/po-select-option-template/po-select-option-template.directive.js +59 -59
  225. package/esm2015/lib/components/po-field/po-select/po-select-option.interface.js +2 -2
  226. package/esm2015/lib/components/po-field/po-select/po-select.component.js +366 -359
  227. package/esm2015/lib/components/po-field/po-switch/po-switch-label-position.enum.js +15 -15
  228. package/esm2015/lib/components/po-field/po-switch/po-switch.component.js +190 -190
  229. package/esm2015/lib/components/po-field/po-textarea/po-textarea-base.component.js +269 -269
  230. package/esm2015/lib/components/po-field/po-textarea/po-textarea.component.js +130 -130
  231. package/esm2015/lib/components/po-field/po-upload/interfaces/po-upload-file-restriction.interface.js +2 -2
  232. package/esm2015/lib/components/po-field/po-upload/interfaces/po-upload-literals.interface.js +2 -2
  233. package/esm2015/lib/components/po-field/po-upload/po-upload-base.component.js +581 -573
  234. package/esm2015/lib/components/po-field/po-upload/po-upload-base.service.js +88 -88
  235. package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area/po-upload-drag-drop-area.component.js +30 -30
  236. package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area-overlay/po-upload-drag-drop-area-overlay.component.js +40 -40
  237. package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.component.js +60 -60
  238. package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.directive.js +165 -165
  239. package/esm2015/lib/components/po-field/po-upload/po-upload-file-restrictions/po-upload-file-restrictions.component.js +63 -63
  240. package/esm2015/lib/components/po-field/po-upload/po-upload-file.js +39 -39
  241. package/esm2015/lib/components/po-field/po-upload/po-upload-status.enum.js +13 -13
  242. package/esm2015/lib/components/po-field/po-upload/po-upload.component.js +326 -326
  243. package/esm2015/lib/components/po-field/po-upload/po-upload.service.js +8 -8
  244. package/esm2015/lib/components/po-field/po-url/po-url.component.js +86 -86
  245. package/esm2015/lib/components/po-field/validators.js +41 -41
  246. package/esm2015/lib/components/po-gauge/index.js +4 -4
  247. package/esm2015/lib/components/po-gauge/interfaces/po-gauge-coordinates.interface.js +2 -2
  248. package/esm2015/lib/components/po-gauge/interfaces/po-gauge-ranges.interface.js +2 -2
  249. package/esm2015/lib/components/po-gauge/interfaces/po-gauge-svg-container.interface.js +2 -2
  250. package/esm2015/lib/components/po-gauge/po-gauge-base.component.js +146 -146
  251. package/esm2015/lib/components/po-gauge/po-gauge-default-values.constant.js +11 -11
  252. package/esm2015/lib/components/po-gauge/po-gauge-description/po-gauge-description.component.js +27 -27
  253. package/esm2015/lib/components/po-gauge/po-gauge-legend/po-gauge-legend.component.js +27 -27
  254. package/esm2015/lib/components/po-gauge/po-gauge-svg/po-gauge-path/po-gauge-path.component.js +20 -20
  255. package/esm2015/lib/components/po-gauge/po-gauge-svg/po-gauge-pointer/po-gauge-pointer.component.js +50 -50
  256. package/esm2015/lib/components/po-gauge/po-gauge-svg/po-gauge-svg.component.js +204 -204
  257. package/esm2015/lib/components/po-gauge/po-gauge-title/po-gauge-title.component.js +13 -13
  258. package/esm2015/lib/components/po-gauge/po-gauge.component.js +72 -72
  259. package/esm2015/lib/components/po-gauge/po-gauge.module.js +32 -32
  260. package/esm2015/lib/components/po-grid/index.js +4 -4
  261. package/esm2015/lib/components/po-grid/po-grid-cell/po-grid-cell.component.js +111 -111
  262. package/esm2015/lib/components/po-grid/po-grid-cell-action/po-grid-cell-action.component.js +24 -24
  263. package/esm2015/lib/components/po-grid/po-grid-head/po-grid-head.component.js +30 -30
  264. package/esm2015/lib/components/po-grid/po-grid-row-actions.interface.js +2 -2
  265. package/esm2015/lib/components/po-grid/po-grid.component.js +314 -314
  266. package/esm2015/lib/components/po-grid/po-grid.module.js +23 -23
  267. package/esm2015/lib/components/po-icon/index.js +3 -3
  268. package/esm2015/lib/components/po-icon/po-icon.component.js +62 -62
  269. package/esm2015/lib/components/po-icon/po-icon.module.js +18 -18
  270. package/esm2015/lib/components/po-info/index.js +4 -4
  271. package/esm2015/lib/components/po-info/po-info-base.component.js +62 -62
  272. package/esm2015/lib/components/po-info/po-info-orietation.enum.js +15 -15
  273. package/esm2015/lib/components/po-info/po-info.component.js +36 -36
  274. package/esm2015/lib/components/po-info/po-info.module.js +21 -21
  275. package/esm2015/lib/components/po-list-view/index.js +7 -7
  276. package/esm2015/lib/components/po-list-view/interfaces/po-list-view-action.interface.js +2 -2
  277. package/esm2015/lib/components/po-list-view/interfaces/po-list-view-literals.interface.js +2 -2
  278. package/esm2015/lib/components/po-list-view/po-list-view-base.component.js +274 -274
  279. package/esm2015/lib/components/po-list-view/po-list-view-content-template/po-list-view-content-template.directive.js +101 -101
  280. package/esm2015/lib/components/po-list-view/po-list-view-detail-template/po-list-view-detail-template.directive.js +64 -64
  281. package/esm2015/lib/components/po-list-view/po-list-view.component.js +128 -128
  282. package/esm2015/lib/components/po-list-view/po-list-view.module.js +51 -51
  283. package/esm2015/lib/components/po-loading/index.js +5 -5
  284. package/esm2015/lib/components/po-loading/po-loading-base.component.js +24 -24
  285. package/esm2015/lib/components/po-loading/po-loading-icon/po-loading-icon.component.js +37 -37
  286. package/esm2015/lib/components/po-loading/po-loading-overlay/interfaces/po-loading-overlay-literals.interface.js +2 -2
  287. package/esm2015/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.js +91 -91
  288. package/esm2015/lib/components/po-loading/po-loading-overlay/po-loading-overlay.component.js +41 -41
  289. package/esm2015/lib/components/po-loading/po-loading.component.js +16 -16
  290. package/esm2015/lib/components/po-loading/po-loading.module.js +22 -22
  291. package/esm2015/lib/components/po-menu/index.js +9 -9
  292. package/esm2015/lib/components/po-menu/po-menu-base.component.js +299 -299
  293. package/esm2015/lib/components/po-menu/po-menu-filter/po-menu-filter-literals.interface.js +2 -2
  294. package/esm2015/lib/components/po-menu/po-menu-filter/po-menu-filter.component.js +40 -40
  295. package/esm2015/lib/components/po-menu/po-menu-filter/po-menu-filter.interface.js +2 -2
  296. package/esm2015/lib/components/po-menu/po-menu-header-template/po-menu-header-template.directive.js +51 -51
  297. package/esm2015/lib/components/po-menu/po-menu-item/po-menu-item-badge.interface.js +2 -2
  298. package/esm2015/lib/components/po-menu/po-menu-item/po-menu-item-filtered.interface.js +2 -2
  299. package/esm2015/lib/components/po-menu/po-menu-item/po-menu-item.component.js +173 -173
  300. package/esm2015/lib/components/po-menu/po-menu-item.interface.js +2 -2
  301. package/esm2015/lib/components/po-menu/po-menu.component.js +497 -497
  302. package/esm2015/lib/components/po-menu/po-menu.module.js +26 -26
  303. package/esm2015/lib/components/po-menu/services/po-menu-global.service.js +32 -32
  304. package/esm2015/lib/components/po-menu/services/po-menu-items.service.js +35 -35
  305. package/esm2015/lib/components/po-menu/services/po-menu.service.js +35 -35
  306. package/esm2015/lib/components/po-menu-panel/index.js +4 -4
  307. package/esm2015/lib/components/po-menu-panel/po-menu-panel-base.component.js +76 -76
  308. package/esm2015/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item-internal.interface.js +2 -2
  309. package/esm2015/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.component.js +54 -54
  310. package/esm2015/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.interface.js +2 -2
  311. package/esm2015/lib/components/po-menu-panel/po-menu-panel.component.js +145 -145
  312. package/esm2015/lib/components/po-menu-panel/po-menu-panel.module.js +24 -24
  313. package/esm2015/lib/components/po-menu-panel/services/po-menu-panel-items.service.js +35 -35
  314. package/esm2015/lib/components/po-modal/index.js +5 -5
  315. package/esm2015/lib/components/po-modal/po-modal-action.interface.js +2 -2
  316. package/esm2015/lib/components/po-modal/po-modal-base.component.js +121 -121
  317. package/esm2015/lib/components/po-modal/po-modal-footer/po-modal-footer.component.js +43 -43
  318. package/esm2015/lib/components/po-modal/po-modal.component.js +114 -114
  319. package/esm2015/lib/components/po-modal/po-modal.literals.js +15 -15
  320. package/esm2015/lib/components/po-modal/po-modal.module.js +19 -19
  321. package/esm2015/lib/components/po-navbar/index.js +5 -5
  322. package/esm2015/lib/components/po-navbar/interfaces/po-navbar-icon-action.interface.js +2 -2
  323. package/esm2015/lib/components/po-navbar/interfaces/po-navbar-item.interface.js +2 -2
  324. package/esm2015/lib/components/po-navbar/interfaces/po-navbar-literals.interface.js +2 -2
  325. package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-action/po-navbar-action.component.js +43 -43
  326. package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-action-popup/po-navbar-action-popup.component.js +18 -18
  327. package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.component.js +19 -19
  328. package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.module.js +18 -18
  329. package/esm2015/lib/components/po-navbar/po-navbar-base.component.js +147 -147
  330. package/esm2015/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation-icon/po-navbar-item-navigation-icon.component.js +18 -18
  331. package/esm2015/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.component.js +18 -18
  332. package/esm2015/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.module.js +15 -15
  333. package/esm2015/lib/components/po-navbar/po-navbar-items/po-navbar-item/po-navbar-item.component.js +30 -30
  334. package/esm2015/lib/components/po-navbar/po-navbar-items/po-navbar-items.component.js +53 -53
  335. package/esm2015/lib/components/po-navbar/po-navbar-items/po-navbar-items.module.js +15 -15
  336. package/esm2015/lib/components/po-navbar/po-navbar-logo/po-navbar-logo.component.js +13 -13
  337. package/esm2015/lib/components/po-navbar/po-navbar.component.js +213 -213
  338. package/esm2015/lib/components/po-navbar/po-navbar.module.js +57 -57
  339. package/esm2015/lib/components/po-page/index.js +15 -15
  340. package/esm2015/lib/components/po-page/po-page-action.interface.js +2 -2
  341. package/esm2015/lib/components/po-page/po-page-base.component.js +23 -23
  342. package/esm2015/lib/components/po-page/po-page-content/po-page-content-base.component.js +10 -10
  343. package/esm2015/lib/components/po-page/po-page-content/po-page-content.component.js +54 -54
  344. package/esm2015/lib/components/po-page/po-page-default/po-page-default-base.component.js +111 -111
  345. package/esm2015/lib/components/po-page/po-page-default/po-page-default-literals.interface.js +2 -2
  346. package/esm2015/lib/components/po-page/po-page-default/po-page-default.component.js +98 -98
  347. package/esm2015/lib/components/po-page/po-page-default/po-page-default.interface.js +2 -2
  348. package/esm2015/lib/components/po-page/po-page-detail/po-page-detail-base.component.js +141 -141
  349. package/esm2015/lib/components/po-page/po-page-detail/po-page-detail-literals.interface.js +2 -2
  350. package/esm2015/lib/components/po-page/po-page-detail/po-page-detail.component.js +62 -62
  351. package/esm2015/lib/components/po-page/po-page-edit/po-page-edit-base.component.js +146 -146
  352. package/esm2015/lib/components/po-page/po-page-edit/po-page-edit-literals.interface.js +2 -2
  353. package/esm2015/lib/components/po-page/po-page-edit/po-page-edit.component.js +65 -65
  354. package/esm2015/lib/components/po-page/po-page-filter.interface.js +2 -2
  355. package/esm2015/lib/components/po-page/po-page-header/po-page-header-base.component.js +26 -26
  356. package/esm2015/lib/components/po-page/po-page-header/po-page-header.component.js +15 -15
  357. package/esm2015/lib/components/po-page/po-page-list/po-page-list-base.component.js +137 -137
  358. package/esm2015/lib/components/po-page/po-page-list/po-page-list-literals.interface.js +2 -2
  359. package/esm2015/lib/components/po-page/po-page-list/po-page-list.component.js +188 -188
  360. package/esm2015/lib/components/po-page/po-page-slide/po-page-slide-base.component.js +135 -135
  361. package/esm2015/lib/components/po-page/po-page-slide/po-page-slide.component.js +121 -121
  362. package/esm2015/lib/components/po-page/po-page.component.js +16 -16
  363. package/esm2015/lib/components/po-page/po-page.interface.js +2 -2
  364. package/esm2015/lib/components/po-page/po-page.module.js +60 -60
  365. package/esm2015/lib/components/po-popover/index.js +3 -3
  366. package/esm2015/lib/components/po-popover/po-popover-base.component.js +113 -113
  367. package/esm2015/lib/components/po-popover/po-popover.component.js +138 -138
  368. package/esm2015/lib/components/po-popover/po-popover.module.js +17 -17
  369. package/esm2015/lib/components/po-popup/index.js +4 -4
  370. package/esm2015/lib/components/po-popup/po-popup-action.interface.js +2 -2
  371. package/esm2015/lib/components/po-popup/po-popup-base.component.js +186 -186
  372. package/esm2015/lib/components/po-popup/po-popup.component.js +169 -169
  373. package/esm2015/lib/components/po-popup/po-popup.module.js +21 -21
  374. package/esm2015/lib/components/po-progress/enums/po-progress-status.enum.js +17 -17
  375. package/esm2015/lib/components/po-progress/index.js +4 -4
  376. package/esm2015/lib/components/po-progress/po-progress-bar/po-progress-bar.component.js +18 -18
  377. package/esm2015/lib/components/po-progress/po-progress-base.component.js +107 -107
  378. package/esm2015/lib/components/po-progress/po-progress.component.js +56 -56
  379. package/esm2015/lib/components/po-progress/po-progress.module.js +19 -19
  380. package/esm2015/lib/components/po-slide/directives/po-slide-content-template.directive.js +59 -59
  381. package/esm2015/lib/components/po-slide/index.js +5 -5
  382. package/esm2015/lib/components/po-slide/interfaces/po-slide-item.interface.js +2 -2
  383. package/esm2015/lib/components/po-slide/po-slide-base.component.js +104 -104
  384. package/esm2015/lib/components/po-slide/po-slide-circles/po-slide-circles.component.js +26 -26
  385. package/esm2015/lib/components/po-slide/po-slide-control/po-slide-control.component.js +25 -25
  386. package/esm2015/lib/components/po-slide/po-slide-item/po-slide-item.component.js +37 -37
  387. package/esm2015/lib/components/po-slide/po-slide.component.js +256 -256
  388. package/esm2015/lib/components/po-slide/po-slide.module.js +58 -58
  389. package/esm2015/lib/components/po-stepper/enums/po-stepper-orientation.enum.js +18 -18
  390. package/esm2015/lib/components/po-stepper/enums/po-stepper-status.enum.js +23 -23
  391. package/esm2015/lib/components/po-stepper/index.js +7 -7
  392. package/esm2015/lib/components/po-stepper/po-step/po-step.component.js +78 -78
  393. package/esm2015/lib/components/po-stepper/po-stepper-base.component.js +144 -144
  394. package/esm2015/lib/components/po-stepper/po-stepper-circle/po-stepper-circle.component.js +47 -47
  395. package/esm2015/lib/components/po-stepper/po-stepper-item.interface.js +2 -2
  396. package/esm2015/lib/components/po-stepper/po-stepper-label/po-stepper-label.component.js +20 -20
  397. package/esm2015/lib/components/po-stepper/po-stepper-step/po-stepper-step.component.js +116 -116
  398. package/esm2015/lib/components/po-stepper/po-stepper.component.js +219 -219
  399. package/esm2015/lib/components/po-stepper/po-stepper.module.js +27 -27
  400. package/esm2015/lib/components/po-table/enums/po-table-column-sort-type.enum.js +14 -14
  401. package/esm2015/lib/components/po-table/enums/po-table-row-template-arrow-direction.enum.js +14 -14
  402. package/esm2015/lib/components/po-table/index.js +18 -18
  403. package/esm2015/lib/components/po-table/interfaces/po-table-action.interface.js +2 -2
  404. package/esm2015/lib/components/po-table/interfaces/po-table-boolean.interface.js +2 -2
  405. package/esm2015/lib/components/po-table/interfaces/po-table-column-sort.interface.js +2 -2
  406. package/esm2015/lib/components/po-table/interfaces/po-table-column.interface.js +2 -2
  407. package/esm2015/lib/components/po-table/interfaces/po-table-filter.interface.js +2 -2
  408. package/esm2015/lib/components/po-table/interfaces/po-table-filtered-items-params.interface.js +2 -2
  409. package/esm2015/lib/components/po-table/interfaces/po-table-literals.interface.js +2 -2
  410. package/esm2015/lib/components/po-table/interfaces/po-table-response-api.interface.js +2 -2
  411. package/esm2015/lib/components/po-table/po-table-base.component.js +860 -860
  412. package/esm2015/lib/components/po-table/po-table-cell-template/po-table-cell-template.directive.js +82 -82
  413. package/esm2015/lib/components/po-table/po-table-column-icon/po-table-column-icon.component.js +72 -72
  414. package/esm2015/lib/components/po-table/po-table-column-icon/po-table-column-icon.interface.js +2 -2
  415. package/esm2015/lib/components/po-table/po-table-column-label/po-table-column-label.component.js +38 -38
  416. package/esm2015/lib/components/po-table/po-table-column-label/po-table-column-label.interface.js +2 -2
  417. package/esm2015/lib/components/po-table/po-table-column-link/po-table-column-link.component.js +38 -38
  418. package/esm2015/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.js +250 -250
  419. package/esm2015/lib/components/po-table/po-table-column-template/po-table-column-template.directive.js +90 -90
  420. package/esm2015/lib/components/po-table/po-table-detail/po-table-detail-column.interface.js +2 -2
  421. package/esm2015/lib/components/po-table/po-table-detail/po-table-detail.component.js +88 -88
  422. package/esm2015/lib/components/po-table/po-table-detail/po-table-detail.interface.js +2 -2
  423. package/esm2015/lib/components/po-table/po-table-icon/po-table-icon.component.js +46 -46
  424. package/esm2015/lib/components/po-table/po-table-row-template/po-table-row-template.directive.js +128 -128
  425. package/esm2015/lib/components/po-table/po-table-show-subtitle/po-table-show-subtitle.component.js +21 -21
  426. package/esm2015/lib/components/po-table/po-table-subtitle-circle/po-table-subtitle-circle.component.js +41 -41
  427. package/esm2015/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-column.interface.js +2 -2
  428. package/esm2015/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-footer.component.js +70 -70
  429. package/esm2015/lib/components/po-table/po-table.component.js +542 -542
  430. package/esm2015/lib/components/po-table/po-table.module.js +75 -75
  431. package/esm2015/lib/components/po-table/services/po-table.service.js +38 -38
  432. package/esm2015/lib/components/po-tabs/index.js +5 -5
  433. package/esm2015/lib/components/po-tabs/po-tab/po-tab-base.component.js +82 -82
  434. package/esm2015/lib/components/po-tabs/po-tab/po-tab.component.js +27 -27
  435. package/esm2015/lib/components/po-tabs/po-tab/po-tab.interface.js +2 -2
  436. package/esm2015/lib/components/po-tabs/po-tab-button/po-tab-button.component.js +75 -75
  437. package/esm2015/lib/components/po-tabs/po-tab-dropdown/po-tab-dropdown.component.js +44 -44
  438. package/esm2015/lib/components/po-tabs/po-tabs-base.component.js +49 -49
  439. package/esm2015/lib/components/po-tabs/po-tabs.component.js +126 -126
  440. package/esm2015/lib/components/po-tabs/po-tabs.module.js +21 -21
  441. package/esm2015/lib/components/po-tag/enums/po-tag-icon.enum.js +19 -19
  442. package/esm2015/lib/components/po-tag/enums/po-tag-orientation.enum.js +15 -15
  443. package/esm2015/lib/components/po-tag/enums/po-tag-type.enum.js +19 -19
  444. package/esm2015/lib/components/po-tag/index.js +5 -5
  445. package/esm2015/lib/components/po-tag/interfaces/po-tag-item.interface.js +2 -2
  446. package/esm2015/lib/components/po-tag/po-tag-base.component.js +175 -175
  447. package/esm2015/lib/components/po-tag/po-tag.component.js +71 -71
  448. package/esm2015/lib/components/po-tag/po-tag.module.js +21 -21
  449. package/esm2015/lib/components/po-toolbar/index.js +5 -5
  450. package/esm2015/lib/components/po-toolbar/po-toolbar-action.interface.js +2 -2
  451. package/esm2015/lib/components/po-toolbar/po-toolbar-actions/po-toolbar-actions.component.js +35 -35
  452. package/esm2015/lib/components/po-toolbar/po-toolbar-base.component.js +43 -43
  453. package/esm2015/lib/components/po-toolbar/po-toolbar-notification/po-toolbar-notification.component.js +39 -39
  454. package/esm2015/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.component.js +28 -28
  455. package/esm2015/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.interface.js +2 -2
  456. package/esm2015/lib/components/po-toolbar/po-toolbar.component.js +46 -46
  457. package/esm2015/lib/components/po-toolbar/po-toolbar.module.js +32 -32
  458. package/esm2015/lib/components/po-tree-view/index.js +4 -4
  459. package/esm2015/lib/components/po-tree-view/po-tree-view-base.component.js +197 -197
  460. package/esm2015/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.component.js +58 -58
  461. package/esm2015/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.interface.js +2 -2
  462. package/esm2015/lib/components/po-tree-view/po-tree-view-item-header/po-tree-view-item-header.component.js +26 -26
  463. package/esm2015/lib/components/po-tree-view/po-tree-view.component.js +60 -60
  464. package/esm2015/lib/components/po-tree-view/po-tree-view.module.js +49 -49
  465. package/esm2015/lib/components/po-tree-view/services/po-tree-view.service.js +24 -24
  466. package/esm2015/lib/components/po-widget/index.js +3 -3
  467. package/esm2015/lib/components/po-widget/po-widget-base.component.js +216 -216
  468. package/esm2015/lib/components/po-widget/po-widget.component.js +114 -114
  469. package/esm2015/lib/components/po-widget/po-widget.module.js +19 -19
  470. package/esm2015/lib/decorators/index.js +3 -3
  471. package/esm2015/lib/decorators/input-boolean/input-boolean.decorator.js +18 -18
  472. package/esm2015/lib/decorators/input-required/input-required.decorator.js +34 -34
  473. package/esm2015/lib/decorators/property-decorator.interface.js +2 -2
  474. package/esm2015/lib/decorators/utils-decorators.js +64 -64
  475. package/esm2015/lib/directives/directives.module.js +14 -14
  476. package/esm2015/lib/directives/index.js +3 -3
  477. package/esm2015/lib/directives/po-tooltip/index.js +3 -3
  478. package/esm2015/lib/directives/po-tooltip/po-tooltip-base.directive.js +106 -106
  479. package/esm2015/lib/directives/po-tooltip/po-tooltip-control-position.service.js +8 -8
  480. package/esm2015/lib/directives/po-tooltip/po-tooltip.directive.js +147 -147
  481. package/esm2015/lib/directives/po-tooltip/po-tooltip.module.js +18 -18
  482. package/esm2015/lib/enums/po-color-palette.enum.js +35 -35
  483. package/esm2015/lib/enums/po-key-code.enum.js +31 -31
  484. package/esm2015/lib/guards/guards.module.js +13 -13
  485. package/esm2015/lib/guards/index.js +2 -2
  486. package/esm2015/lib/index.js +10 -10
  487. package/esm2015/lib/interceptors/index.js +4 -4
  488. package/esm2015/lib/interceptors/interceptors.module.js +15 -15
  489. package/esm2015/lib/interceptors/po-http-interceptor/index.js +3 -3
  490. package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-base.service.js +249 -249
  491. package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail-literals.interface.js +39 -39
  492. package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.component.js +83 -83
  493. package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.interface.js +2 -2
  494. package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-literals.js +23 -23
  495. package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor.module.js +28 -28
  496. package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor.service.js +28 -28
  497. package/esm2015/lib/interceptors/po-http-request/index.js +3 -3
  498. package/esm2015/lib/interceptors/po-http-request/po-http-request-control-service.js +23 -23
  499. package/esm2015/lib/interceptors/po-http-request/po-http-request-interceptor.service.js +169 -169
  500. package/esm2015/lib/interceptors/po-http-request/po-http-request.module.js +24 -24
  501. package/esm2015/lib/interfaces/index.js +2 -2
  502. package/esm2015/lib/interfaces/po-http/po-response-api.interface.js +2 -2
  503. package/esm2015/lib/pipes/index.js +3 -3
  504. package/esm2015/lib/pipes/pipes.module.js +14 -14
  505. package/esm2015/lib/pipes/po-time/index.js +3 -3
  506. package/esm2015/lib/pipes/po-time/po-time.module.js +19 -19
  507. package/esm2015/lib/pipes/po-time/po-time.pipe.js +55 -55
  508. package/esm2015/lib/po.module.js +34 -34
  509. package/esm2015/lib/services/index.js +11 -11
  510. package/esm2015/lib/services/po-active-overlay/index.js +3 -3
  511. package/esm2015/lib/services/po-active-overlay/po-active-overlay.module.js +16 -16
  512. package/esm2015/lib/services/po-active-overlay/po-active-overlay.service.js +14 -14
  513. package/esm2015/lib/services/po-color/po-color.service.js +60 -60
  514. package/esm2015/lib/services/po-color/po-colors.constant.js +43 -43
  515. package/esm2015/lib/services/po-color-palette/index.js +3 -3
  516. package/esm2015/lib/services/po-color-palette/po-color-palette.module.js +16 -16
  517. package/esm2015/lib/services/po-color-palette/po-color-palette.service.js +25 -25
  518. package/esm2015/lib/services/po-component-injector/index.js +3 -3
  519. package/esm2015/lib/services/po-component-injector/po-component-injector.module.js +14 -14
  520. package/esm2015/lib/services/po-component-injector/po-component-injector.service.js +34 -34
  521. package/esm2015/lib/services/po-control-position/index.js +3 -3
  522. package/esm2015/lib/services/po-control-position/po-control-position.constants.js +16 -16
  523. package/esm2015/lib/services/po-control-position/po-control-position.module.js +15 -15
  524. package/esm2015/lib/services/po-control-position/po-control-position.service.js +361 -361
  525. package/esm2015/lib/services/po-date/index.js +3 -3
  526. package/esm2015/lib/services/po-date/po-date.module.js +16 -16
  527. package/esm2015/lib/services/po-date/po-date.service.js +201 -201
  528. package/esm2015/lib/services/po-dialog/index.js +8 -8
  529. package/esm2015/lib/services/po-dialog/interfaces/po-dialog-alert-literals.interface.js +2 -2
  530. package/esm2015/lib/services/po-dialog/interfaces/po-dialog-confirm-literals.interface.js +2 -2
  531. package/esm2015/lib/services/po-dialog/interfaces/po-dialog.interface.js +2 -2
  532. package/esm2015/lib/services/po-dialog/po-dialog-base.service.js +18 -18
  533. package/esm2015/lib/services/po-dialog/po-dialog.component.js +115 -115
  534. package/esm2015/lib/services/po-dialog/po-dialog.enum.js +16 -16
  535. package/esm2015/lib/services/po-dialog/po-dialog.module.js +15 -15
  536. package/esm2015/lib/services/po-dialog/po-dialog.service.js +42 -42
  537. package/esm2015/lib/services/po-i18n/index.js +8 -8
  538. package/esm2015/lib/services/po-i18n/interfaces/po-i18n-config-default.interface.js +2 -2
  539. package/esm2015/lib/services/po-i18n/interfaces/po-i18n-config.interface.js +2 -2
  540. package/esm2015/lib/services/po-i18n/interfaces/po-i18n-literals.interface.js +2 -2
  541. package/esm2015/lib/services/po-i18n/po-i18n-base.pipe.js +40 -40
  542. package/esm2015/lib/services/po-i18n/po-i18n-base.service.js +439 -439
  543. package/esm2015/lib/services/po-i18n/po-i18n-config-injection-token.js +3 -3
  544. package/esm2015/lib/services/po-i18n/po-i18n.module.js +188 -188
  545. package/esm2015/lib/services/po-i18n/po-i18n.pipe.js +21 -21
  546. package/esm2015/lib/services/po-i18n/po-i18n.service.js +20 -20
  547. package/esm2015/lib/services/po-language/index.js +5 -5
  548. package/esm2015/lib/services/po-language/po-language.constant.js +75 -75
  549. package/esm2015/lib/services/po-language/po-language.interface.js +2 -2
  550. package/esm2015/lib/services/po-language/po-language.module.js +15 -15
  551. package/esm2015/lib/services/po-language/po-language.service.js +136 -136
  552. package/esm2015/lib/services/po-notification/index.js +6 -6
  553. package/esm2015/lib/services/po-notification/po-notification-base.service.js +111 -111
  554. package/esm2015/lib/services/po-notification/po-notification.interface.js +2 -2
  555. package/esm2015/lib/services/po-notification/po-notification.module.js +15 -15
  556. package/esm2015/lib/services/po-notification/po-notification.service.js +92 -92
  557. package/esm2015/lib/services/po-notification/po-toaster/po-toaster-base.component.js +15 -15
  558. package/esm2015/lib/services/po-notification/po-toaster/po-toaster-orientation.enum.js +13 -13
  559. package/esm2015/lib/services/po-notification/po-toaster/po-toaster-type.enum.js +17 -17
  560. package/esm2015/lib/services/po-notification/po-toaster/po-toaster.component.js +132 -132
  561. package/esm2015/lib/services/po-notification/po-toaster/po-toaster.interface.js +2 -2
  562. package/esm2015/lib/services/services.module.js +40 -40
  563. package/esm2015/lib/utils/util.js +508 -508
  564. package/esm2015/po-ui-ng-components.js +205 -205
  565. package/esm2015/public-api.js +2 -2
  566. package/fesm2015/po-ui-ng-components.js +35214 -35160
  567. package/fesm2015/po-ui-ng-components.js.map +1 -1
  568. package/lib/components/components.module.d.ts +2 -2
  569. package/lib/components/index.d.ts +37 -37
  570. package/lib/components/po-accordion/index.d.ts +3 -3
  571. package/lib/components/po-accordion/po-accordion-base.component.d.ts +28 -28
  572. package/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.d.ts +49 -49
  573. package/lib/components/po-accordion/po-accordion-item-body/po-accordion-item-body.component.d.ts +3 -3
  574. package/lib/components/po-accordion/po-accordion-item-header/po-accordion-item-header.component.d.ts +7 -7
  575. package/lib/components/po-accordion/po-accordion.component.d.ts +37 -37
  576. package/lib/components/po-accordion/po-accordion.module.d.ts +33 -33
  577. package/lib/components/po-accordion/services/po-accordion.service.d.ts +13 -13
  578. package/lib/components/po-avatar/index.d.ts +2 -2
  579. package/lib/components/po-avatar/po-avatar-base.component.d.ts +53 -53
  580. package/lib/components/po-avatar/po-avatar.component.d.ts +28 -28
  581. package/lib/components/po-avatar/po-avatar.module.d.ts +7 -7
  582. package/lib/components/po-badge/po-badge-base.component.d.ts +55 -55
  583. package/lib/components/po-badge/po-badge.component.d.ts +8 -8
  584. package/lib/components/po-badge/po-badge.module.d.ts +7 -7
  585. package/lib/components/po-breadcrumb/index.d.ts +4 -4
  586. package/lib/components/po-breadcrumb/po-breadcrumb-base.component.d.ts +104 -104
  587. package/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.d.ts +11 -11
  588. package/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.component.d.ts +29 -29
  589. package/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.service.d.ts +27 -27
  590. package/lib/components/po-breadcrumb/po-breadcrumb-item/po-breadcrumb-item.component.d.ts +13 -13
  591. package/lib/components/po-breadcrumb/po-breadcrumb-item.interface.d.ts +31 -31
  592. package/lib/components/po-breadcrumb/po-breadcrumb.component.d.ts +53 -53
  593. package/lib/components/po-breadcrumb/po-breadcrumb.interface.d.ts +42 -42
  594. package/lib/components/po-breadcrumb/po-breadcrumb.module.d.ts +8 -8
  595. package/lib/components/po-button/index.d.ts +2 -2
  596. package/lib/components/po-button/po-button-base.component.d.ts +120 -120
  597. package/lib/components/po-button/po-button.component.d.ts +49 -49
  598. package/lib/components/po-button/po-button.module.d.ts +7 -7
  599. package/lib/components/po-button-group/index.d.ts +4 -4
  600. package/lib/components/po-button-group/po-button-group-base.component.d.ts +53 -53
  601. package/lib/components/po-button-group/po-button-group-item.interface.d.ts +64 -64
  602. package/lib/components/po-button-group/po-button-group-toggle.enum.d.ts +15 -15
  603. package/lib/components/po-button-group/po-button-group.component.d.ts +31 -31
  604. package/lib/components/po-button-group/po-button-group.module.d.ts +7 -7
  605. package/lib/components/po-calendar/index.d.ts +3 -3
  606. package/lib/components/po-calendar/po-calendar-base.component.d.ts +129 -129
  607. package/lib/components/po-calendar/po-calendar-header/po-calendar-header.component.d.ts +8 -8
  608. package/lib/components/po-calendar/po-calendar-mode.enum.d.ts +11 -11
  609. package/lib/components/po-calendar/po-calendar-wrapper/po-calendar-wrapper.component.d.ts +77 -77
  610. package/lib/components/po-calendar/po-calendar.component.d.ts +53 -53
  611. package/lib/components/po-calendar/po-calendar.module.d.ts +6 -6
  612. package/lib/components/po-calendar/services/po-calendar.lang.service.d.ts +16 -16
  613. package/lib/components/po-calendar/services/po-calendar.service.d.ts +5 -5
  614. package/lib/components/po-chart/directives/po-resize-observer.directive.d.ts +12 -12
  615. package/lib/components/po-chart/enums/po-chart-type.enum.d.ts +49 -49
  616. package/lib/components/po-chart/helpers/po-chart-default-values.constant.d.ts +8 -8
  617. package/lib/components/po-chart/index.d.ts +7 -7
  618. package/lib/components/po-chart/interfaces/po-chart-axis-options.interface.d.ts +37 -37
  619. package/lib/components/po-chart/interfaces/po-chart-bar-coordinates.interface.d.ts +23 -23
  620. package/lib/components/po-chart/interfaces/po-chart-container-size.interface.d.ts +23 -23
  621. package/lib/components/po-chart/interfaces/po-chart-label-coordinates.interface.d.ts +19 -19
  622. package/lib/components/po-chart/interfaces/po-chart-min-max-values.interface.d.ts +19 -19
  623. package/lib/components/po-chart/interfaces/po-chart-options.interface.d.ts +20 -20
  624. package/lib/components/po-chart/interfaces/po-chart-path-coordinates.interface.d.ts +23 -23
  625. package/lib/components/po-chart/interfaces/po-chart-points-coordinates.interface.d.ts +26 -26
  626. package/lib/components/po-chart/interfaces/po-chart-serie.interface.d.ts +101 -101
  627. package/lib/components/po-chart/po-chart-base.component.d.ts +152 -152
  628. package/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-label/po-chart-axis-label.component.d.ts +10 -10
  629. package/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-path/po-chart-axis-path.component.d.ts +7 -7
  630. package/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis.component.d.ts +60 -60
  631. package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-base.component.d.ts +31 -31
  632. package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-path/po-chart-bar-path.component.d.ts +13 -13
  633. package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar.component.d.ts +13 -13
  634. package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-column/po-chart-column.component.d.ts +13 -13
  635. package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-label/po-chart-circular-label.component.d.ts +11 -11
  636. package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-circular-path.component.d.ts +13 -13
  637. package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-tooltip.directive.d.ts +20 -20
  638. package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular.component.d.ts +42 -42
  639. package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-donut/po-chart-donut.component.d.ts +16 -16
  640. package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-pie/po-chart-pie.component.d.ts +8 -8
  641. package/lib/components/po-chart/po-chart-container/po-chart-container.component.d.ts +43 -43
  642. package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-area/po-chart-area.component.d.ts +20 -20
  643. package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line-base.component.d.ts +46 -46
  644. package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line.component.d.ts +13 -13
  645. package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-path/po-chart-path.component.d.ts +19 -19
  646. package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-series-point/po-chart-series-point.component.d.ts +30 -30
  647. package/lib/components/po-chart/po-chart-legend/po-chart-legend.component.d.ts +7 -7
  648. package/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.constant.d.ts +7 -7
  649. package/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.d.ts +55 -55
  650. package/lib/components/po-chart/po-chart-types/po-chart-dynamic-type.component.d.ts +36 -36
  651. package/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-series.interface.d.ts +39 -39
  652. package/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-text-content/po-chart-gauge-text-content.component.d.ts +24 -24
  653. package/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge.component.d.ts +20 -20
  654. package/lib/components/po-chart/po-chart.component.d.ts +67 -67
  655. package/lib/components/po-chart/po-chart.module.d.ts +7 -7
  656. package/lib/components/po-chart/services/po-chart-maths.service.d.ts +63 -63
  657. package/lib/components/po-chart/services/po-chart-svg-container.service.d.ts +21 -21
  658. package/lib/components/po-container/index.d.ts +2 -2
  659. package/lib/components/po-container/po-container-base.component.d.ts +59 -59
  660. package/lib/components/po-container/po-container.component.d.ts +24 -24
  661. package/lib/components/po-container/po-container.module.d.ts +7 -7
  662. package/lib/components/po-disclaimer/index.d.ts +3 -3
  663. package/lib/components/po-disclaimer/po-disclaimer-base.component.d.ts +56 -56
  664. package/lib/components/po-disclaimer/po-disclaimer.component.d.ts +16 -16
  665. package/lib/components/po-disclaimer/po-disclaimer.interface.d.ts +17 -17
  666. package/lib/components/po-disclaimer/po-disclaimer.module.d.ts +6 -6
  667. package/lib/components/po-disclaimer-group/index.d.ts +4 -4
  668. package/lib/components/po-disclaimer-group/po-disclaimer-group-base.component.d.ts +114 -114
  669. package/lib/components/po-disclaimer-group/po-disclaimer-group-remove-action.interface.d.ts +18 -18
  670. package/lib/components/po-disclaimer-group/po-disclaimer-group.component.d.ts +28 -28
  671. package/lib/components/po-disclaimer-group/po-disclaimer-group.interface.d.ts +78 -78
  672. package/lib/components/po-disclaimer-group/po-disclaimer-group.module.d.ts +7 -7
  673. package/lib/components/po-disclaimer-group/po-disclaimer-remove/po-disclaimer-remove.component.d.ts +16 -16
  674. package/lib/components/po-divider/index.d.ts +2 -2
  675. package/lib/components/po-divider/po-divider-base.component.d.ts +10 -10
  676. package/lib/components/po-divider/po-divider.component.d.ts +23 -23
  677. package/lib/components/po-divider/po-divider.module.d.ts +7 -7
  678. package/lib/components/po-dropdown/index.d.ts +3 -3
  679. package/lib/components/po-dropdown/po-dropdown-action.interface.d.ts +11 -11
  680. package/lib/components/po-dropdown/po-dropdown-base.component.d.ts +54 -54
  681. package/lib/components/po-dropdown/po-dropdown.component.d.ts +41 -41
  682. package/lib/components/po-dropdown/po-dropdown.module.d.ts +6 -6
  683. package/lib/components/po-dynamic/index.d.ts +10 -10
  684. package/lib/components/po-dynamic/po-dynamic-field-type.enum.d.ts +23 -23
  685. package/lib/components/po-dynamic/po-dynamic-field.interface.d.ts +130 -130
  686. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-base.component.d.ts +215 -215
  687. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +249 -251
  688. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-field-internal.interface.d.ts +14 -14
  689. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields-base.component.d.ts +44 -44
  690. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.d.ts +36 -36
  691. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.interface.d.ts +20 -20
  692. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.service.d.ts +8 -8
  693. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-operation/po-dynamic-form-operation.d.ts +10 -10
  694. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-response.interface.d.ts +29 -29
  695. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-changed.interface.d.ts +13 -13
  696. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-validation.interface.d.ts +21 -21
  697. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.interface.d.ts +20 -20
  698. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.service.d.ts +12 -12
  699. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form.component.d.ts +83 -83
  700. package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-base.component.d.ts +134 -134
  701. package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-field.interface.d.ts +104 -104
  702. package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.component.d.ts +36 -36
  703. package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.service.d.ts +10 -10
  704. package/lib/components/po-dynamic/po-dynamic.module.d.ts +2 -2
  705. package/lib/components/po-dynamic/po-dynamic.util.d.ts +4 -4
  706. package/lib/components/po-field/index.d.ts +50 -50
  707. package/lib/components/po-field/po-checkbox/po-checkbox-base.component.d.ts +62 -62
  708. package/lib/components/po-field/po-checkbox/po-checkbox.component.d.ts +51 -51
  709. package/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option-view.interface.d.ts +14 -14
  710. package/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option.interface.d.ts +24 -24
  711. package/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.d.ts +184 -176
  712. package/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.d.ts +50 -50
  713. package/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.d.ts +7 -7
  714. package/lib/components/po-field/po-clean/po-clean-base.component.d.ts +30 -30
  715. package/lib/components/po-field/po-clean/po-clean.component.d.ts +17 -17
  716. package/lib/components/po-field/po-clean/po-clean.module.d.ts +7 -7
  717. package/lib/components/po-field/po-combo/interfaces/po-combo-filter.interface.d.ts +27 -27
  718. package/lib/components/po-field/po-combo/interfaces/po-combo-group.interface.d.ts +11 -11
  719. package/lib/components/po-field/po-combo/interfaces/po-combo-literals.interface.d.ts +11 -11
  720. package/lib/components/po-field/po-combo/interfaces/po-combo-option-group.interface.d.ts +14 -14
  721. package/lib/components/po-field/po-combo/interfaces/po-combo-option.interface.d.ts +21 -21
  722. package/lib/components/po-field/po-combo/interfaces/po-response.interface.d.ts +11 -11
  723. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +409 -401
  724. package/lib/components/po-field/po-combo/po-combo-filter-mode.enum.d.ts +15 -15
  725. package/lib/components/po-field/po-combo/po-combo-filter.service.d.ts +28 -28
  726. package/lib/components/po-field/po-combo/po-combo-option-template/po-combo-option-template.directive.d.ts +70 -70
  727. package/lib/components/po-field/po-combo/po-combo.component.d.ts +139 -139
  728. package/lib/components/po-field/po-datepicker/enums/po-datepicker-iso-format.enum.d.ts +15 -15
  729. package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +223 -223
  730. package/lib/components/po-field/po-datepicker/po-datepicker.component.d.ts +101 -101
  731. package/lib/components/po-field/po-datepicker/po-datepicker.module.d.ts +7 -7
  732. package/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range-literals.interface.d.ts +17 -17
  733. package/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range.interface.d.ts +16 -16
  734. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +269 -269
  735. package/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.d.ts +125 -124
  736. package/lib/components/po-field/po-datepicker-range/po-datepicker-range.literals.d.ts +7 -7
  737. package/lib/components/po-field/po-decimal/po-decimal.component.d.ts +180 -180
  738. package/lib/components/po-field/po-email/po-email.component.d.ts +42 -42
  739. package/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.d.ts +15 -15
  740. package/lib/components/po-field/po-field-container/po-field-container-literals.d.ts +14 -14
  741. package/lib/components/po-field/po-field-container/po-field-container.component.d.ts +18 -18
  742. package/lib/components/po-field/po-field-container/po-field-container.module.d.ts +7 -7
  743. package/lib/components/po-field/po-field-validate.model.d.ts +38 -38
  744. package/lib/components/po-field/po-field.model.d.ts +51 -51
  745. package/lib/components/po-field/po-field.module.d.ts +12 -12
  746. package/lib/components/po-field/po-input/po-input-base.component.d.ts +265 -265
  747. package/lib/components/po-field/po-input/po-input.component.d.ts +29 -29
  748. package/lib/components/po-field/po-input/po-mask.d.ts +49 -49
  749. package/lib/components/po-field/po-input-generic/po-input-generic.d.ts +35 -35
  750. package/lib/components/po-field/po-login/po-login.component.d.ts +34 -34
  751. package/lib/components/po-field/po-lookup/interfaces/po-lookup-advanced-filter.interface.d.ts +8 -8
  752. package/lib/components/po-field/po-lookup/interfaces/po-lookup-column.interface.d.ts +44 -44
  753. package/lib/components/po-field/po-lookup/interfaces/po-lookup-filter.interface.d.ts +29 -29
  754. package/lib/components/po-field/po-lookup/interfaces/po-lookup-filtered-items-params.interface.d.ts +40 -40
  755. package/lib/components/po-field/po-lookup/interfaces/po-lookup-literals.interface.d.ts +40 -40
  756. package/lib/components/po-field/po-lookup/interfaces/po-lookup-response-api.interface.d.ts +8 -8
  757. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +387 -387
  758. package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.d.ts +119 -119
  759. package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.d.ts +41 -41
  760. package/lib/components/po-field/po-lookup/po-lookup.component.d.ts +113 -113
  761. package/lib/components/po-field/po-lookup/services/po-lookup-filter.service.d.ts +25 -25
  762. package/lib/components/po-field/po-lookup/services/po-lookup-modal.service.d.ts +44 -44
  763. package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +345 -345
  764. package/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.d.ts +57 -57
  765. package/lib/components/po-field/po-multiselect/po-multiselect-filter-mode.enum.d.ts +15 -15
  766. package/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.d.ts +28 -28
  767. package/lib/components/po-field/po-multiselect/po-multiselect-filter.service.d.ts +18 -18
  768. package/lib/components/po-field/po-multiselect/po-multiselect-item/po-multiselect-item.component.d.ts +17 -17
  769. package/lib/components/po-field/po-multiselect/po-multiselect-literals.interface.d.ts +15 -15
  770. package/lib/components/po-field/po-multiselect/po-multiselect-option.interface.d.ts +13 -13
  771. package/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.d.ts +34 -34
  772. package/lib/components/po-field/po-multiselect/po-multiselect.component.d.ts +107 -107
  773. package/lib/components/po-field/po-number/po-number-base.component.d.ts +18 -18
  774. package/lib/components/po-field/po-number/po-number.component.d.ts +59 -59
  775. package/lib/components/po-field/po-password/po-password.component.d.ts +48 -48
  776. package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +119 -119
  777. package/lib/components/po-field/po-radio-group/po-radio-group-option.interface.d.ts +15 -15
  778. package/lib/components/po-field/po-radio-group/po-radio-group.component.d.ts +64 -64
  779. package/lib/components/po-field/po-rich-text/interfaces/po-rich-text-toolbar-button-group-item.interface.d.ts +4 -4
  780. package/lib/components/po-field/po-rich-text/po-rich-text-base.component.d.ts +144 -144
  781. package/lib/components/po-field/po-rich-text/po-rich-text-body/po-rich-text-body.component.d.ts +52 -52
  782. package/lib/components/po-field/po-rich-text/po-rich-text-image-modal/po-rich-text-image-modal.component.d.ts +34 -34
  783. package/lib/components/po-field/po-rich-text/po-rich-text-link-modal/po-rich-text-link-modal.component.d.ts +45 -45
  784. package/lib/components/po-field/po-rich-text/po-rich-text-literals.d.ts +82 -82
  785. package/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.d.ts +45 -45
  786. package/lib/components/po-field/po-rich-text/po-rich-text.component.d.ts +60 -60
  787. package/lib/components/po-field/po-rich-text/po-rich-text.service.d.ts +5 -5
  788. package/lib/components/po-field/po-select/po-select-option-template/po-select-option-template.directive.d.ts +48 -48
  789. package/lib/components/po-field/po-select/po-select-option.interface.d.ts +13 -13
  790. package/lib/components/po-field/po-select/po-select.component.d.ts +158 -151
  791. package/lib/components/po-field/po-switch/po-switch-label-position.enum.d.ts +13 -13
  792. package/lib/components/po-field/po-switch/po-switch.component.d.ts +102 -102
  793. package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +178 -178
  794. package/lib/components/po-field/po-textarea/po-textarea.component.d.ts +59 -59
  795. package/lib/components/po-field/po-upload/interfaces/po-upload-file-restriction.interface.d.ts +37 -37
  796. package/lib/components/po-field/po-upload/interfaces/po-upload-literals.interface.d.ts +45 -45
  797. package/lib/components/po-field/po-upload/po-upload-base.component.d.ts +333 -325
  798. package/lib/components/po-field/po-upload/po-upload-base.service.d.ts +32 -32
  799. package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area/po-upload-drag-drop-area.component.d.ts +14 -14
  800. package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area-overlay/po-upload-drag-drop-area-overlay.component.d.ts +14 -14
  801. package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.component.d.ts +24 -24
  802. package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.directive.d.ts +32 -32
  803. package/lib/components/po-field/po-upload/po-upload-file-restrictions/po-upload-file-restrictions.component.d.ts +21 -21
  804. package/lib/components/po-field/po-upload/po-upload-file.d.ts +15 -15
  805. package/lib/components/po-field/po-upload/po-upload-status.enum.d.ts +6 -6
  806. package/lib/components/po-field/po-upload/po-upload.component.d.ts +106 -106
  807. package/lib/components/po-field/po-upload/po-upload.service.d.ts +3 -3
  808. package/lib/components/po-field/po-url/po-url.component.d.ts +41 -41
  809. package/lib/components/po-field/validators.d.ts +7 -7
  810. package/lib/components/po-gauge/index.d.ts +3 -3
  811. package/lib/components/po-gauge/interfaces/po-gauge-coordinates.interface.d.ts +19 -19
  812. package/lib/components/po-gauge/interfaces/po-gauge-ranges.interface.d.ts +44 -44
  813. package/lib/components/po-gauge/interfaces/po-gauge-svg-container.interface.d.ts +15 -15
  814. package/lib/components/po-gauge/po-gauge-base.component.d.ts +98 -98
  815. package/lib/components/po-gauge/po-gauge-default-values.constant.d.ts +5 -5
  816. package/lib/components/po-gauge/po-gauge-description/po-gauge-description.component.d.ts +11 -11
  817. package/lib/components/po-gauge/po-gauge-legend/po-gauge-legend.component.d.ts +9 -9
  818. package/lib/components/po-gauge/po-gauge-svg/po-gauge-path/po-gauge-path.component.d.ts +9 -9
  819. package/lib/components/po-gauge/po-gauge-svg/po-gauge-pointer/po-gauge-pointer.component.d.ts +15 -15
  820. package/lib/components/po-gauge/po-gauge-svg/po-gauge-svg.component.d.ts +32 -32
  821. package/lib/components/po-gauge/po-gauge-title/po-gauge-title.component.d.ts +3 -3
  822. package/lib/components/po-gauge/po-gauge.component.d.ts +37 -37
  823. package/lib/components/po-gauge/po-gauge.module.d.ts +6 -6
  824. package/lib/components/po-grid/index.d.ts +3 -3
  825. package/lib/components/po-grid/po-grid-cell/po-grid-cell.component.d.ts +27 -27
  826. package/lib/components/po-grid/po-grid-cell-action/po-grid-cell-action.component.d.ts +6 -6
  827. package/lib/components/po-grid/po-grid-head/po-grid-head.component.d.ts +10 -10
  828. package/lib/components/po-grid/po-grid-row-actions.interface.d.ts +86 -86
  829. package/lib/components/po-grid/po-grid.component.d.ts +80 -80
  830. package/lib/components/po-grid/po-grid.module.d.ts +7 -7
  831. package/lib/components/po-icon/index.d.ts +2 -2
  832. package/lib/components/po-icon/po-icon.component.d.ts +39 -39
  833. package/lib/components/po-icon/po-icon.module.d.ts +7 -7
  834. package/lib/components/po-info/index.d.ts +3 -3
  835. package/lib/components/po-info/po-info-base.component.d.ts +46 -46
  836. package/lib/components/po-info/po-info-orietation.enum.d.ts +13 -13
  837. package/lib/components/po-info/po-info.component.d.ts +24 -24
  838. package/lib/components/po-info/po-info.module.d.ts +7 -7
  839. package/lib/components/po-list-view/index.d.ts +6 -6
  840. package/lib/components/po-list-view/interfaces/po-list-view-action.interface.d.ts +15 -15
  841. package/lib/components/po-list-view/interfaces/po-list-view-literals.interface.d.ts +19 -19
  842. package/lib/components/po-list-view/po-list-view-base.component.d.ts +165 -165
  843. package/lib/components/po-list-view/po-list-view-content-template/po-list-view-content-template.directive.d.ts +97 -97
  844. package/lib/components/po-list-view/po-list-view-detail-template/po-list-view-detail-template.directive.d.ts +60 -60
  845. package/lib/components/po-list-view/po-list-view.component.d.ts +53 -53
  846. package/lib/components/po-list-view/po-list-view.module.d.ts +33 -33
  847. package/lib/components/po-loading/index.d.ts +4 -4
  848. package/lib/components/po-loading/po-loading-base.component.d.ts +14 -14
  849. package/lib/components/po-loading/po-loading-icon/po-loading-icon.component.d.ts +22 -22
  850. package/lib/components/po-loading/po-loading-overlay/interfaces/po-loading-overlay-literals.interface.d.ts +13 -13
  851. package/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.d.ts +59 -59
  852. package/lib/components/po-loading/po-loading-overlay/po-loading-overlay.component.d.ts +28 -28
  853. package/lib/components/po-loading/po-loading.component.d.ts +8 -8
  854. package/lib/components/po-loading/po-loading.module.d.ts +8 -8
  855. package/lib/components/po-menu/index.d.ts +8 -8
  856. package/lib/components/po-menu/po-menu-base.component.d.ts +182 -182
  857. package/lib/components/po-menu/po-menu-filter/po-menu-filter-literals.interface.d.ts +14 -14
  858. package/lib/components/po-menu/po-menu-filter/po-menu-filter.component.d.ts +25 -25
  859. package/lib/components/po-menu/po-menu-filter/po-menu-filter.interface.d.ts +19 -19
  860. package/lib/components/po-menu/po-menu-header-template/po-menu-header-template.directive.d.ts +40 -40
  861. package/lib/components/po-menu/po-menu-item/po-menu-item-badge.interface.d.ts +49 -49
  862. package/lib/components/po-menu/po-menu-item/po-menu-item-filtered.interface.d.ts +13 -13
  863. package/lib/components/po-menu/po-menu-item/po-menu-item.component.d.ts +54 -54
  864. package/lib/components/po-menu/po-menu-item.interface.d.ts +78 -78
  865. package/lib/components/po-menu/po-menu.component.d.ts +178 -178
  866. package/lib/components/po-menu/po-menu.module.d.ts +7 -7
  867. package/lib/components/po-menu/services/po-menu-global.service.d.ts +14 -14
  868. package/lib/components/po-menu/services/po-menu-items.service.d.ts +16 -16
  869. package/lib/components/po-menu/services/po-menu.service.d.ts +20 -20
  870. package/lib/components/po-menu-panel/index.d.ts +3 -3
  871. package/lib/components/po-menu-panel/po-menu-panel-base.component.d.ts +33 -33
  872. package/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item-internal.interface.d.ts +16 -16
  873. package/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.component.d.ts +23 -23
  874. package/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.interface.d.ts +18 -18
  875. package/lib/components/po-menu-panel/po-menu-panel.component.d.ts +91 -91
  876. package/lib/components/po-menu-panel/po-menu-panel.module.d.ts +7 -7
  877. package/lib/components/po-menu-panel/services/po-menu-panel-items.service.d.ts +16 -16
  878. package/lib/components/po-modal/index.d.ts +4 -4
  879. package/lib/components/po-modal/po-modal-action.interface.d.ts +23 -23
  880. package/lib/components/po-modal/po-modal-base.component.d.ts +79 -79
  881. package/lib/components/po-modal/po-modal-footer/po-modal-footer.component.d.ts +30 -30
  882. package/lib/components/po-modal/po-modal.component.d.ts +46 -46
  883. package/lib/components/po-modal/po-modal.literals.d.ts +14 -14
  884. package/lib/components/po-modal/po-modal.module.d.ts +6 -6
  885. package/lib/components/po-navbar/index.d.ts +4 -4
  886. package/lib/components/po-navbar/interfaces/po-navbar-icon-action.interface.d.ts +55 -55
  887. package/lib/components/po-navbar/interfaces/po-navbar-item.interface.d.ts +21 -21
  888. package/lib/components/po-navbar/interfaces/po-navbar-literals.interface.d.ts +11 -11
  889. package/lib/components/po-navbar/po-navbar-actions/po-navbar-action/po-navbar-action.component.d.ts +13 -13
  890. package/lib/components/po-navbar/po-navbar-actions/po-navbar-action-popup/po-navbar-action-popup.component.d.ts +5 -5
  891. package/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.component.d.ts +6 -6
  892. package/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.module.d.ts +2 -2
  893. package/lib/components/po-navbar/po-navbar-base.component.d.ts +129 -129
  894. package/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation-icon/po-navbar-item-navigation-icon.component.d.ts +6 -6
  895. package/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.component.d.ts +6 -6
  896. package/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.module.d.ts +2 -2
  897. package/lib/components/po-navbar/po-navbar-items/po-navbar-item/po-navbar-item.component.d.ts +11 -11
  898. package/lib/components/po-navbar/po-navbar-items/po-navbar-items.component.d.ts +17 -17
  899. package/lib/components/po-navbar/po-navbar-items/po-navbar-items.module.d.ts +2 -2
  900. package/lib/components/po-navbar/po-navbar-logo/po-navbar-logo.component.d.ts +3 -3
  901. package/lib/components/po-navbar/po-navbar.component.d.ts +57 -57
  902. package/lib/components/po-navbar/po-navbar.module.d.ts +33 -33
  903. package/lib/components/po-page/index.d.ts +14 -14
  904. package/lib/components/po-page/po-page-action.interface.d.ts +16 -16
  905. package/lib/components/po-page/po-page-base.component.d.ts +22 -22
  906. package/lib/components/po-page/po-page-content/po-page-content-base.component.d.ts +10 -10
  907. package/lib/components/po-page/po-page-content/po-page-content.component.d.ts +20 -20
  908. package/lib/components/po-page/po-page-default/po-page-default-base.component.d.ts +75 -75
  909. package/lib/components/po-page/po-page-default/po-page-default-literals.interface.d.ts +11 -11
  910. package/lib/components/po-page/po-page-default/po-page-default.component.d.ts +45 -45
  911. package/lib/components/po-page/po-page-default/po-page-default.interface.d.ts +13 -13
  912. package/lib/components/po-page/po-page-detail/po-page-detail-base.component.d.ts +100 -100
  913. package/lib/components/po-page/po-page-detail/po-page-detail-literals.interface.d.ts +15 -15
  914. package/lib/components/po-page/po-page-detail/po-page-detail.component.d.ts +28 -28
  915. package/lib/components/po-page/po-page-edit/po-page-edit-base.component.d.ts +106 -106
  916. package/lib/components/po-page/po-page-edit/po-page-edit-literals.interface.d.ts +15 -15
  917. package/lib/components/po-page/po-page-edit/po-page-edit.component.d.ts +29 -29
  918. package/lib/components/po-page/po-page-filter.interface.d.ts +26 -26
  919. package/lib/components/po-page/po-page-header/po-page-header-base.component.d.ts +17 -17
  920. package/lib/components/po-page/po-page-header/po-page-header.component.d.ts +7 -7
  921. package/lib/components/po-page/po-page-list/po-page-list-base.component.d.ts +108 -108
  922. package/lib/components/po-page/po-page-list/po-page-list-literals.interface.d.ts +11 -11
  923. package/lib/components/po-page/po-page-list/po-page-list.component.d.ts +71 -71
  924. package/lib/components/po-page/po-page-slide/po-page-slide-base.component.d.ts +111 -111
  925. package/lib/components/po-page/po-page-slide/po-page-slide.component.d.ts +42 -42
  926. package/lib/components/po-page/po-page.component.d.ts +8 -8
  927. package/lib/components/po-page/po-page.interface.d.ts +14 -14
  928. package/lib/components/po-page/po-page.module.d.ts +7 -7
  929. package/lib/components/po-popover/index.d.ts +2 -2
  930. package/lib/components/po-popover/po-popover-base.component.d.ts +131 -131
  931. package/lib/components/po-popover/po-popover.component.d.ts +47 -47
  932. package/lib/components/po-popover/po-popover.module.d.ts +6 -6
  933. package/lib/components/po-popup/index.d.ts +3 -3
  934. package/lib/components/po-popup/po-popup-action.interface.d.ts +91 -91
  935. package/lib/components/po-popup/po-popup-base.component.d.ts +151 -151
  936. package/lib/components/po-popup/po-popup.component.d.ts +69 -69
  937. package/lib/components/po-popup/po-popup.module.d.ts +7 -7
  938. package/lib/components/po-progress/enums/po-progress-status.enum.d.ts +15 -15
  939. package/lib/components/po-progress/index.d.ts +3 -3
  940. package/lib/components/po-progress/po-progress-bar/po-progress-bar.component.d.ts +5 -5
  941. package/lib/components/po-progress/po-progress-base.component.d.ts +103 -103
  942. package/lib/components/po-progress/po-progress.component.d.ts +28 -28
  943. package/lib/components/po-progress/po-progress.module.d.ts +7 -7
  944. package/lib/components/po-slide/directives/po-slide-content-template.directive.d.ts +48 -48
  945. package/lib/components/po-slide/index.d.ts +4 -4
  946. package/lib/components/po-slide/interfaces/po-slide-item.interface.d.ts +17 -17
  947. package/lib/components/po-slide/po-slide-base.component.d.ts +75 -75
  948. package/lib/components/po-slide/po-slide-circles/po-slide-circles.component.d.ts +16 -16
  949. package/lib/components/po-slide/po-slide-control/po-slide-control.component.d.ts +14 -14
  950. package/lib/components/po-slide/po-slide-item/po-slide-item.component.d.ts +28 -28
  951. package/lib/components/po-slide/po-slide.component.d.ts +110 -110
  952. package/lib/components/po-slide/po-slide.module.d.ts +33 -33
  953. package/lib/components/po-stepper/enums/po-stepper-orientation.enum.d.ts +16 -16
  954. package/lib/components/po-stepper/enums/po-stepper-status.enum.d.ts +21 -21
  955. package/lib/components/po-stepper/index.d.ts +6 -6
  956. package/lib/components/po-stepper/po-step/po-step.component.d.ts +76 -76
  957. package/lib/components/po-stepper/po-stepper-base.component.d.ts +132 -132
  958. package/lib/components/po-stepper/po-stepper-circle/po-stepper-circle.component.d.ts +20 -20
  959. package/lib/components/po-stepper/po-stepper-item.interface.d.ts +14 -14
  960. package/lib/components/po-stepper/po-stepper-label/po-stepper-label.component.d.ts +10 -10
  961. package/lib/components/po-stepper/po-stepper-step/po-stepper-step.component.d.ts +37 -37
  962. package/lib/components/po-stepper/po-stepper.component.d.ts +80 -80
  963. package/lib/components/po-stepper/po-stepper.module.d.ts +6 -6
  964. package/lib/components/po-table/enums/po-table-column-sort-type.enum.d.ts +12 -12
  965. package/lib/components/po-table/enums/po-table-row-template-arrow-direction.enum.d.ts +12 -12
  966. package/lib/components/po-table/index.d.ts +17 -17
  967. package/lib/components/po-table/interfaces/po-table-action.interface.d.ts +8 -8
  968. package/lib/components/po-table/interfaces/po-table-boolean.interface.d.ts +13 -13
  969. package/lib/components/po-table/interfaces/po-table-column-sort.interface.d.ts +15 -15
  970. package/lib/components/po-table/interfaces/po-table-column.interface.d.ts +242 -242
  971. package/lib/components/po-table/interfaces/po-table-filter.interface.d.ts +16 -16
  972. package/lib/components/po-table/interfaces/po-table-filtered-items-params.interface.d.ts +33 -33
  973. package/lib/components/po-table/interfaces/po-table-literals.interface.d.ts +25 -25
  974. package/lib/components/po-table/interfaces/po-table-response-api.interface.d.ts +7 -7
  975. package/lib/components/po-table/po-table-base.component.d.ts +501 -501
  976. package/lib/components/po-table/po-table-cell-template/po-table-cell-template.directive.d.ts +71 -71
  977. package/lib/components/po-table/po-table-column-icon/po-table-column-icon.component.d.ts +26 -26
  978. package/lib/components/po-table/po-table-column-icon/po-table-column-icon.interface.d.ts +80 -80
  979. package/lib/components/po-table/po-table-column-label/po-table-column-label.component.d.ts +17 -17
  980. package/lib/components/po-table/po-table-column-label/po-table-column-label.interface.d.ts +42 -42
  981. package/lib/components/po-table/po-table-column-link/po-table-column-link.component.d.ts +15 -15
  982. package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +74 -74
  983. package/lib/components/po-table/po-table-column-template/po-table-column-template.directive.d.ts +86 -86
  984. package/lib/components/po-table/po-table-detail/po-table-detail-column.interface.d.ts +61 -61
  985. package/lib/components/po-table/po-table-detail/po-table-detail.component.d.ts +44 -44
  986. package/lib/components/po-table/po-table-detail/po-table-detail.interface.d.ts +36 -36
  987. package/lib/components/po-table/po-table-icon/po-table-icon.component.d.ts +27 -27
  988. package/lib/components/po-table/po-table-row-template/po-table-row-template.directive.d.ts +120 -120
  989. package/lib/components/po-table/po-table-show-subtitle/po-table-show-subtitle.component.d.ts +14 -14
  990. package/lib/components/po-table/po-table-subtitle-circle/po-table-subtitle-circle.component.d.ts +19 -19
  991. package/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-column.interface.d.ts +39 -39
  992. package/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-footer.component.d.ts +31 -31
  993. package/lib/components/po-table/po-table.component.d.ts +229 -229
  994. package/lib/components/po-table/po-table.module.d.ts +6 -6
  995. package/lib/components/po-table/services/po-table.service.d.ts +14 -14
  996. package/lib/components/po-tabs/index.d.ts +4 -4
  997. package/lib/components/po-tabs/po-tab/po-tab-base.component.d.ts +57 -57
  998. package/lib/components/po-tabs/po-tab/po-tab.component.d.ts +11 -11
  999. package/lib/components/po-tabs/po-tab/po-tab.interface.d.ts +45 -45
  1000. package/lib/components/po-tabs/po-tab-button/po-tab-button.component.d.ts +29 -29
  1001. package/lib/components/po-tabs/po-tab-dropdown/po-tab-dropdown.component.d.ts +23 -23
  1002. package/lib/components/po-tabs/po-tabs-base.component.d.ts +34 -34
  1003. package/lib/components/po-tabs/po-tabs.component.d.ts +50 -50
  1004. package/lib/components/po-tabs/po-tabs.module.d.ts +6 -6
  1005. package/lib/components/po-tag/enums/po-tag-icon.enum.d.ts +17 -17
  1006. package/lib/components/po-tag/enums/po-tag-orientation.enum.d.ts +13 -13
  1007. package/lib/components/po-tag/enums/po-tag-type.enum.d.ts +17 -17
  1008. package/lib/components/po-tag/index.d.ts +4 -4
  1009. package/lib/components/po-tag/interfaces/po-tag-item.interface.d.ts +13 -13
  1010. package/lib/components/po-tag/po-tag-base.component.d.ts +144 -144
  1011. package/lib/components/po-tag/po-tag.component.d.ts +32 -32
  1012. package/lib/components/po-tag/po-tag.module.d.ts +7 -7
  1013. package/lib/components/po-toolbar/index.d.ts +4 -4
  1014. package/lib/components/po-toolbar/po-toolbar-action.interface.d.ts +8 -8
  1015. package/lib/components/po-toolbar/po-toolbar-actions/po-toolbar-actions.component.d.ts +19 -19
  1016. package/lib/components/po-toolbar/po-toolbar-base.component.d.ts +75 -75
  1017. package/lib/components/po-toolbar/po-toolbar-notification/po-toolbar-notification.component.d.ts +22 -22
  1018. package/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.component.d.ts +18 -18
  1019. package/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.interface.d.ts +15 -15
  1020. package/lib/components/po-toolbar/po-toolbar.component.d.ts +29 -29
  1021. package/lib/components/po-toolbar/po-toolbar.module.d.ts +8 -8
  1022. package/lib/components/po-tree-view/index.d.ts +3 -3
  1023. package/lib/components/po-tree-view/po-tree-view-base.component.d.ts +86 -86
  1024. package/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.component.d.ts +12 -12
  1025. package/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.interface.d.ts +24 -24
  1026. package/lib/components/po-tree-view/po-tree-view-item-header/po-tree-view-item-header.component.d.ts +10 -10
  1027. package/lib/components/po-tree-view/po-tree-view.component.d.ts +35 -35
  1028. package/lib/components/po-tree-view/po-tree-view.module.d.ts +33 -33
  1029. package/lib/components/po-tree-view/services/po-tree-view.service.d.ts +9 -9
  1030. package/lib/components/po-widget/index.d.ts +2 -2
  1031. package/lib/components/po-widget/po-widget-base.component.d.ts +162 -162
  1032. package/lib/components/po-widget/po-widget.component.d.ts +41 -41
  1033. package/lib/components/po-widget/po-widget.module.d.ts +7 -7
  1034. package/lib/decorators/index.d.ts +2 -2
  1035. package/lib/decorators/input-boolean/input-boolean.decorator.d.ts +10 -10
  1036. package/lib/decorators/input-required/input-required.decorator.d.ts +22 -22
  1037. package/lib/decorators/property-decorator.interface.d.ts +13 -13
  1038. package/lib/decorators/utils-decorators.d.ts +27 -27
  1039. package/lib/directives/directives.module.d.ts +2 -2
  1040. package/lib/directives/index.d.ts +2 -2
  1041. package/lib/directives/po-tooltip/index.d.ts +2 -2
  1042. package/lib/directives/po-tooltip/po-tooltip-base.directive.d.ts +67 -67
  1043. package/lib/directives/po-tooltip/po-tooltip-control-position.service.d.ts +3 -3
  1044. package/lib/directives/po-tooltip/po-tooltip.directive.d.ts +52 -52
  1045. package/lib/directives/po-tooltip/po-tooltip.module.d.ts +7 -7
  1046. package/lib/enums/po-color-palette.enum.d.ts +33 -33
  1047. package/lib/enums/po-key-code.enum.d.ts +29 -29
  1048. package/lib/guards/guards.module.d.ts +2 -2
  1049. package/lib/guards/index.d.ts +1 -1
  1050. package/lib/index.d.ts +9 -9
  1051. package/lib/interceptors/index.d.ts +3 -3
  1052. package/lib/interceptors/interceptors.module.d.ts +2 -2
  1053. package/lib/interceptors/po-http-interceptor/index.d.ts +2 -2
  1054. package/lib/interceptors/po-http-interceptor/po-http-interceptor-base.service.d.ts +154 -154
  1055. package/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail-literals.interface.d.ts +6 -6
  1056. package/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.component.d.ts +39 -39
  1057. package/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.interface.d.ts +23 -23
  1058. package/lib/interceptors/po-http-interceptor/po-http-interceptor-literals.d.ts +6 -6
  1059. package/lib/interceptors/po-http-interceptor/po-http-interceptor.module.d.ts +2 -2
  1060. package/lib/interceptors/po-http-interceptor/po-http-interceptor.service.d.ts +16 -16
  1061. package/lib/interceptors/po-http-request/index.d.ts +2 -2
  1062. package/lib/interceptors/po-http-request/po-http-request-control-service.d.ts +12 -12
  1063. package/lib/interceptors/po-http-request/po-http-request-interceptor.service.d.ts +102 -102
  1064. package/lib/interceptors/po-http-request/po-http-request.module.d.ts +2 -2
  1065. package/lib/interfaces/index.d.ts +1 -1
  1066. package/lib/interfaces/po-http/po-response-api.interface.d.ts +13 -13
  1067. package/lib/pipes/index.d.ts +2 -2
  1068. package/lib/pipes/pipes.module.d.ts +2 -2
  1069. package/lib/pipes/po-time/index.d.ts +2 -2
  1070. package/lib/pipes/po-time/po-time.module.d.ts +7 -7
  1071. package/lib/pipes/po-time/po-time.pipe.d.ts +14 -14
  1072. package/lib/po.module.d.ts +2 -2
  1073. package/lib/services/index.d.ts +10 -10
  1074. package/lib/services/po-active-overlay/index.d.ts +2 -2
  1075. package/lib/services/po-active-overlay/po-active-overlay.module.d.ts +7 -7
  1076. package/lib/services/po-active-overlay/po-active-overlay.service.d.ts +3 -3
  1077. package/lib/services/po-color/po-color.service.d.ts +16 -16
  1078. package/lib/services/po-color/po-colors.constant.d.ts +2 -2
  1079. package/lib/services/po-color-palette/index.d.ts +2 -2
  1080. package/lib/services/po-color-palette/po-color-palette.module.d.ts +7 -7
  1081. package/lib/services/po-color-palette/po-color-palette.service.d.ts +7 -7
  1082. package/lib/services/po-component-injector/index.d.ts +2 -2
  1083. package/lib/services/po-component-injector/po-component-injector.module.d.ts +2 -2
  1084. package/lib/services/po-component-injector/po-component-injector.service.d.ts +9 -9
  1085. package/lib/services/po-control-position/index.d.ts +2 -2
  1086. package/lib/services/po-control-position/po-control-position.constants.d.ts +1 -1
  1087. package/lib/services/po-control-position/po-control-position.module.d.ts +7 -7
  1088. package/lib/services/po-control-position/po-control-position.service.d.ts +56 -56
  1089. package/lib/services/po-date/index.d.ts +2 -2
  1090. package/lib/services/po-date/po-date.module.d.ts +7 -7
  1091. package/lib/services/po-date/po-date.service.d.ts +94 -94
  1092. package/lib/services/po-dialog/index.d.ts +7 -7
  1093. package/lib/services/po-dialog/interfaces/po-dialog-alert-literals.interface.d.ts +11 -11
  1094. package/lib/services/po-dialog/interfaces/po-dialog-confirm-literals.interface.d.ts +13 -13
  1095. package/lib/services/po-dialog/interfaces/po-dialog.interface.d.ts +82 -82
  1096. package/lib/services/po-dialog/po-dialog-base.service.d.ts +15 -15
  1097. package/lib/services/po-dialog/po-dialog.component.d.ts +48 -48
  1098. package/lib/services/po-dialog/po-dialog.enum.d.ts +12 -12
  1099. package/lib/services/po-dialog/po-dialog.module.d.ts +2 -2
  1100. package/lib/services/po-dialog/po-dialog.service.d.ts +29 -29
  1101. package/lib/services/po-i18n/index.d.ts +7 -7
  1102. package/lib/services/po-i18n/interfaces/po-i18n-config-default.interface.d.ts +35 -35
  1103. package/lib/services/po-i18n/interfaces/po-i18n-config.interface.d.ts +78 -78
  1104. package/lib/services/po-i18n/interfaces/po-i18n-literals.interface.d.ts +15 -15
  1105. package/lib/services/po-i18n/po-i18n-base.pipe.d.ts +29 -29
  1106. package/lib/services/po-i18n/po-i18n-base.service.d.ts +212 -212
  1107. package/lib/services/po-i18n/po-i18n-config-injection-token.d.ts +3 -3
  1108. package/lib/services/po-i18n/po-i18n.module.d.ts +150 -150
  1109. package/lib/services/po-i18n/po-i18n.pipe.d.ts +15 -15
  1110. package/lib/services/po-i18n/po-i18n.service.d.ts +10 -10
  1111. package/lib/services/po-language/index.d.ts +4 -4
  1112. package/lib/services/po-language/po-language.constant.d.ts +58 -58
  1113. package/lib/services/po-language/po-language.interface.d.ts +43 -43
  1114. package/lib/services/po-language/po-language.module.d.ts +7 -7
  1115. package/lib/services/po-language/po-language.service.d.ts +95 -95
  1116. package/lib/services/po-notification/index.d.ts +5 -5
  1117. package/lib/services/po-notification/po-notification-base.service.d.ts +84 -84
  1118. package/lib/services/po-notification/po-notification.interface.d.ts +33 -33
  1119. package/lib/services/po-notification/po-notification.module.d.ts +2 -2
  1120. package/lib/services/po-notification/po-notification.service.d.ts +31 -31
  1121. package/lib/services/po-notification/po-toaster/po-toaster-base.component.d.ts +41 -41
  1122. package/lib/services/po-notification/po-toaster/po-toaster-orientation.enum.d.ts +11 -11
  1123. package/lib/services/po-notification/po-toaster/po-toaster-type.enum.d.ts +15 -15
  1124. package/lib/services/po-notification/po-toaster/po-toaster.component.d.ts +33 -33
  1125. package/lib/services/po-notification/po-toaster/po-toaster.interface.d.ts +15 -15
  1126. package/lib/services/services.module.d.ts +2 -2
  1127. package/lib/utils/util.d.ts +217 -217
  1128. package/package.json +5 -5
  1129. package/po-ui-ng-components-5.22.3.tgz +0 -0
  1130. package/po-ui-ng-components.d.ts +205 -205
  1131. package/po-ui-ng-components.metadata.json +1 -1
  1132. package/public-api.d.ts +1 -1
  1133. package/schematics/README.md +74 -74
  1134. package/schematics/collection.json +40 -40
  1135. package/schematics/migrations.json +25 -25
  1136. package/schematics/ng-add/index.d.ts +8 -8
  1137. package/schematics/ng-add/index.js +25 -25
  1138. package/schematics/ng-add/index.spec.d.ts +1 -1
  1139. package/schematics/ng-add/index.spec.js +91 -91
  1140. package/schematics/ng-add/schema.json +16 -16
  1141. package/schematics/ng-add/setup-project.d.ts +8 -8
  1142. package/schematics/ng-add/setup-project.js +55 -55
  1143. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
  1144. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +3 -3
  1145. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +32 -32
  1146. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +18 -18
  1147. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
  1148. package/schematics/ng-generate/po-page-default/index.d.ts +4 -4
  1149. package/schematics/ng-generate/po-page-default/index.js +12 -12
  1150. package/schematics/ng-generate/po-page-default/index.spec.d.ts +1 -1
  1151. package/schematics/ng-generate/po-page-default/index.spec.js +120 -120
  1152. package/schematics/ng-generate/po-page-default/schema.d.ts +3 -3
  1153. package/schematics/ng-generate/po-page-default/schema.js +2 -2
  1154. package/schematics/ng-generate/po-page-default/schema.json +67 -67
  1155. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
  1156. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +8 -8
  1157. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +32 -32
  1158. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +26 -26
  1159. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
  1160. package/schematics/ng-generate/po-page-detail/index.d.ts +4 -4
  1161. package/schematics/ng-generate/po-page-detail/index.js +12 -12
  1162. package/schematics/ng-generate/po-page-detail/index.spec.d.ts +1 -1
  1163. package/schematics/ng-generate/po-page-detail/index.spec.js +120 -120
  1164. package/schematics/ng-generate/po-page-detail/schema.d.ts +3 -3
  1165. package/schematics/ng-generate/po-page-detail/schema.js +2 -2
  1166. package/schematics/ng-generate/po-page-detail/schema.json +67 -67
  1167. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
  1168. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +8 -8
  1169. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +32 -32
  1170. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +26 -26
  1171. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
  1172. package/schematics/ng-generate/po-page-edit/index.d.ts +4 -4
  1173. package/schematics/ng-generate/po-page-edit/index.js +12 -12
  1174. package/schematics/ng-generate/po-page-edit/index.spec.d.ts +1 -1
  1175. package/schematics/ng-generate/po-page-edit/index.spec.js +120 -120
  1176. package/schematics/ng-generate/po-page-edit/schema.d.ts +3 -3
  1177. package/schematics/ng-generate/po-page-edit/schema.js +2 -2
  1178. package/schematics/ng-generate/po-page-edit/schema.json +67 -67
  1179. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
  1180. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +28 -28
  1181. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +35 -35
  1182. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +33 -33
  1183. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
  1184. package/schematics/ng-generate/po-page-list/index.d.ts +7 -7
  1185. package/schematics/ng-generate/po-page-list/index.js +15 -15
  1186. package/schematics/ng-generate/po-page-list/index.spec.d.ts +1 -1
  1187. package/schematics/ng-generate/po-page-list/index.spec.js +120 -120
  1188. package/schematics/ng-generate/po-page-list/schema.d.ts +5 -5
  1189. package/schematics/ng-generate/po-page-list/schema.js +2 -2
  1190. package/schematics/ng-generate/po-page-list/schema.json +78 -78
  1191. package/schematics/ng-generate/sidemenu/files/app.component.html.template +9 -9
  1192. package/schematics/ng-generate/sidemenu/files/app.component.spec.ts.template +30 -30
  1193. package/schematics/ng-generate/sidemenu/files/app.component.ts.template +20 -20
  1194. package/schematics/ng-generate/sidemenu/index.d.ts +8 -8
  1195. package/schematics/ng-generate/sidemenu/index.js +51 -51
  1196. package/schematics/ng-generate/sidemenu/index.spec.d.ts +1 -1
  1197. package/schematics/ng-generate/sidemenu/index.spec.js +62 -62
  1198. package/schematics/ng-generate/sidemenu/schema.d.ts +13 -13
  1199. package/schematics/ng-generate/sidemenu/schema.js +2 -2
  1200. package/schematics/ng-generate/sidemenu/schema.json +32 -32
  1201. package/schematics/ng-update/v2/changes.d.ts +19 -19
  1202. package/schematics/ng-update/v2/changes.js +58 -58
  1203. package/schematics/ng-update/v2/index.d.ts +1 -1
  1204. package/schematics/ng-update/v2/index.js +145 -145
  1205. package/schematics/ng-update/v3/changes.d.ts +4 -4
  1206. package/schematics/ng-update/v3/changes.js +20 -20
  1207. package/schematics/ng-update/v3/index.d.ts +1 -1
  1208. package/schematics/ng-update/v3/index.js +66 -66
  1209. package/schematics/ng-update/v4/changes.d.ts +4 -4
  1210. package/schematics/ng-update/v4/changes.js +20 -20
  1211. package/schematics/ng-update/v4/index.d.ts +1 -1
  1212. package/schematics/ng-update/v4/index.js +65 -65
  1213. package/schematics/ng-update/v5/changes.d.ts +4 -4
  1214. package/schematics/ng-update/v5/changes.js +25 -25
  1215. package/schematics/ng-update/v5/index.d.ts +1 -1
  1216. package/schematics/ng-update/v5/index.js +65 -65
  1217. package/po-ui-ng-components-5.21.0.tgz +0 -0
@@ -1,598 +1,598 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
- import { PoLanguageService } from '../../../services/po-language/po-language.service';
4
- import { minFailed, maxFailed } from '../validators';
5
- import { convertToInt } from '../../../utils/util';
6
- import { PoInputBaseComponent } from '../po-input/po-input-base.component';
7
- const poDecimalDefaultDecimalsLength = 2;
8
- const poDecimalDefaultThousandMaxlength = 13;
9
- const poDecimalMaxDecimalsLength = 15;
10
- const poDecimalTotalLengthLimit = 16;
11
- /**
12
- *
13
- * @docsExtends PoInputBaseComponent
14
- *
15
- * @description
16
- *
17
- * <br>
18
- * - O `po-decimal` é um *input* específico para receber apenas números decimais, por isso recebe as seguintes características:
19
- * + Aceita apenas números;
20
- * + Utiliza ',' como separador de decimal;
21
- * + Utiliza '.' para separação de milhar;
22
- * + É possível configurar a quantidade de casas decimais e a quantidade de digitos do campo.
23
- *
24
- * > **Importante:**
25
- * Atualmente o JavaScript limita-se a um conjunto de dados de `32 bits`, e para que os valores comportem-se devidamente,
26
- * o `po-decimal` contém um tratamento que limita em 16 o número total de casas antes e após a vírgula.
27
- * Veja abaixo as demais regras nas documentações de `p-decimals-length` e `p-thousand-maxlength`.
28
- *
29
- * @example
30
- *
31
- * <example name="po-decimal-basic" title="PO Decimal Basic">
32
- * <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.html"> </file>
33
- * <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.ts"> </file>
34
- * </example>
35
- *
36
- * <example name="po-decimal-labs" title="PO Decimal Labs">
37
- * <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.html"> </file>
38
- * <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.ts"> </file>
39
- * </example>
40
- *
41
- * <example name="po-decimal-hourly-wage" title="PO Decimal - Hourly Wage">
42
- * <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.html"> </file>
43
- * <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.ts"> </file>
44
- * </example>
45
- *
46
- * <example name="po-decimal-hourly-wage-reactive-form" title="PO Decimal - Hourly Wage Reactive Form">
47
- * <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.html"> </file>
48
- * <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.ts"> </file>
49
- * </example>
50
- */
51
- export class PoDecimalComponent extends PoInputBaseComponent {
52
- constructor(el, poLanguageService, cd) {
53
- super(cd);
54
- this.el = el;
55
- this.poLanguageService = poLanguageService;
56
- this._decimalsLength = poDecimalDefaultDecimalsLength;
57
- this._thousandMaxlength = poDecimalDefaultThousandMaxlength;
58
- this.fireChange = false;
59
- this.isKeyboardAndroid = false;
60
- this.minusSign = '-';
61
- this.oldDotsLength = null;
62
- this.regex = {
63
- thousand: new RegExp('\\' + ',', 'g'),
64
- decimal: new RegExp('\\' + '.', 'g')
65
- };
66
- this.isKeyboardAndroid = !!navigator.userAgent.match(/Android/i);
67
- }
68
- get autocomplete() {
69
- return this.noAutocomplete ? 'off' : 'on';
70
- }
71
- /**
72
- * @optional
73
- *
74
- * @description
75
- *
76
- * Quantidade máxima de casas decimais.
77
- *
78
- * > **Importante:**
79
- * - O valor máximo permitido é 15;
80
- * - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
81
- * - Esta propriedade sobrepõe apenas o valor **padrão** de `p-thousand-maxlength`;
82
- * - Caso `p-thousand-maxlength` tenha um valor definido, esta propriedade poderá receber apenas o valor restante do limite total (16).
83
- *
84
- * @default `2`
85
- */
86
- set decimalsLength(value) {
87
- let decimalsLength = convertToInt(value);
88
- decimalsLength = this.isValueBetweenAllowed(decimalsLength, poDecimalMaxDecimalsLength)
89
- ? decimalsLength
90
- : poDecimalDefaultDecimalsLength;
91
- if (this.isGreaterThanTotalLengthLimit(decimalsLength, this.thousandMaxlength)) {
92
- this.thousandMaxlength = poDecimalTotalLengthLimit - decimalsLength;
93
- }
94
- this._decimalsLength = decimalsLength;
95
- }
96
- get decimalsLength() {
97
- return this._decimalsLength;
98
- }
99
- /**
100
- * @optional
101
- *
102
- * @description
103
- *
104
- * Quantidade máxima de dígitos antes do separador decimal.
105
- *
106
- * > **Importante:**
107
- * - O valor máximo permitido é 13;
108
- * - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
109
- * - Esta propriedade sobrepõe o valor definido em `p-decimals-length`.
110
- *
111
- * @default `13`
112
- */
113
- set thousandMaxlength(value) {
114
- let thousandMaxlength = convertToInt(value);
115
- if (this.decimalsLength > poDecimalDefaultDecimalsLength && !thousandMaxlength) {
116
- thousandMaxlength = poDecimalTotalLengthLimit - this.decimalsLength;
117
- }
118
- thousandMaxlength = this.isValueBetweenAllowed(thousandMaxlength, poDecimalDefaultThousandMaxlength)
119
- ? thousandMaxlength
120
- : poDecimalDefaultThousandMaxlength;
121
- if (this.isGreaterThanTotalLengthLimit(this.decimalsLength, thousandMaxlength)) {
122
- this.decimalsLength = poDecimalTotalLengthLimit - thousandMaxlength;
123
- }
124
- this._thousandMaxlength = thousandMaxlength;
125
- }
126
- get thousandMaxlength() {
127
- return this._thousandMaxlength;
128
- }
129
- /**
130
- * @optional
131
- *
132
- * @description
133
- *
134
- * Informa o locale(país) para a formatação do valor.
135
- * Por padrão o valor será configurado segundo a o módulo [`I18n`](documentation/po-i18n)
136
- *
137
- * > Para ver quais linguagens suportadas acesse [`I18n`](documentation/po-i18n)
138
- *
139
- */
140
- set locale(locale) {
141
- this._locale = locale;
142
- this.setNumbersSeparators();
143
- }
144
- /**
145
- * @optional
146
- *
147
- * @description
148
- *
149
- * Valor mínimo.
150
- */
151
- set min(value) {
152
- if (!isNaN(value)) {
153
- this._min = value;
154
- this.validateModel();
155
- }
156
- else if (!value) {
157
- this._min = undefined;
158
- this.validateModel();
159
- }
160
- }
161
- get min() {
162
- return this._min;
163
- }
164
- /**
165
- * @optional
166
- *
167
- * @description
168
- *
169
- * Valor máximo.
170
- */
171
- set max(value) {
172
- if (!isNaN(value)) {
173
- this._max = value;
174
- this.validateModel();
175
- }
176
- else if (!value) {
177
- this._max = undefined;
178
- this.validateModel();
179
- }
180
- }
181
- get max() {
182
- return this._max;
183
- }
184
- ngOnInit() {
185
- this.setNumbersSeparators();
186
- }
187
- setNumbersSeparators() {
188
- const { decimalSeparator, thousandSeparator } = this.poLanguageService.getNumberSeparators(this._locale);
189
- this.decimalSeparator = decimalSeparator;
190
- this.thousandSeparator = thousandSeparator;
191
- this.regex = {
192
- thousand: new RegExp('\\' + thousandSeparator, 'g'),
193
- decimal: new RegExp('\\' + decimalSeparator, 'g')
194
- };
195
- }
196
- ngAfterViewInit() {
197
- this.verifyAutoFocus();
198
- this.setPaddingInput();
199
- }
200
- clear(value) {
201
- this.callOnChange(value);
202
- this.controlChangeEmitter();
203
- }
204
- extraValidation(abstractControl) {
205
- // Verifica se já possui algum error pattern padrão.
206
- this.errorPattern = this.errorPattern !== 'Valor Inválido' ? this.errorPattern : '';
207
- if (minFailed(this.min, abstractControl.value)) {
208
- return {
209
- min: {
210
- valid: false
211
- }
212
- };
213
- }
214
- if (maxFailed(this.max, abstractControl.value)) {
215
- return {
216
- max: {
217
- valid: false
218
- }
219
- };
220
- }
221
- return null;
222
- }
223
- focus() {
224
- if (!this.disabled) {
225
- this.inputEl.nativeElement.focus();
226
- }
227
- }
228
- getScreenValue() {
229
- return this.inputEl ? this.inputEl.nativeElement.value : '';
230
- }
231
- hasInvalidClass() {
232
- return (this.el.nativeElement.classList.contains('ng-invalid') &&
233
- this.el.nativeElement.classList.contains('ng-dirty') &&
234
- this.getScreenValue() !== '');
235
- }
236
- hasLetters(value = '') {
237
- return value.match(/[a-zA-Z:;+=_´`^~"'?!@#$%¨&*()><{}çÇ\[\]/\\|]+/);
238
- }
239
- isValidNumber(event) {
240
- // - event.key não existia em alguns browsers, como Samsung browser e Firefox.
241
- const keyValue = String.fromCharCode(event.which);
242
- const validKey = event.which !== 8 && event.which !== 0;
243
- return !this.hasLetters(keyValue) && validKey;
244
- }
245
- // função responsável por adicionar os zeroes com as casa decimais ao sair do campo.
246
- onBlur(event) {
247
- var _a;
248
- (_a = this.onTouched) === null || _a === void 0 ? void 0 : _a.call(this);
249
- const value = event.target.value;
250
- if (value) {
251
- if (this.hasLetters(value) || this.containsMoreThanOneDecimalSeparator(value)) {
252
- this.setViewValue('');
253
- this.callOnChange(undefined);
254
- return;
255
- }
256
- const valueWithoutThousandSeparator = this.formatValueWithoutThousandSeparator(value);
257
- this.setViewValue(this.formatToViewValue(valueWithoutThousandSeparator));
258
- }
259
- this.blur.emit();
260
- this.controlChangeEmitter();
261
- }
262
- onFocus(event) {
263
- // Atualiza valor da variável que será usada para verificar se o campo teve alteração
264
- this.valueBeforeChange = this.getScreenValue();
265
- // Dispara evento quando o usuário entrar no campo
266
- // Este evento também é disparado quando o campo inicia com foco.
267
- this.enter.emit();
268
- }
269
- onInput(event) {
270
- const selectionStart = event.target.selectionStart;
271
- const selectionEnd = event.target.selectionEnd;
272
- let modelValue;
273
- // - Browsers nativos do Android ex: Samsung Browser.
274
- if (this.isKeyboardAndroid) {
275
- this.onInputKeyboardAndroid(event);
276
- }
277
- modelValue = this.formatValueWithoutThousandSeparator(event.target.value);
278
- modelValue = this.addZeroBefore(modelValue);
279
- const viewValue = this.formatMask(modelValue);
280
- // validação para não quebrar IE com placeholder definido e Input vazio
281
- if (viewValue) {
282
- this.setViewValue(viewValue);
283
- this.setCursorInput(event, selectionStart, selectionEnd);
284
- }
285
- this.callOnChange(this.formatToModelValue(modelValue));
286
- }
287
- onInputKeyboardAndroid(event) {
288
- const inputValue = event.target.value;
289
- const selectionStart = event.target.selectionStart;
290
- const hasLetters = this.hasLetters(inputValue);
291
- if (hasLetters) {
292
- this.setViewValue(inputValue.replace(hasLetters[0], ''));
293
- return event.preventDefault();
294
- }
295
- else {
296
- const position = selectionStart - 1;
297
- const key = inputValue.charAt(position);
298
- this.setPositionValue(event);
299
- if (this.isValidKey(event, key)) {
300
- this.setViewValue(inputValue);
301
- }
302
- }
303
- }
304
- onKeyPress(event) {
305
- this.isValidKey(event);
306
- }
307
- setPaddingInput() {
308
- setTimeout(() => {
309
- const selectorIcons = '.po-field-icon-container:not(.po-field-icon-container-left) > .po-icon';
310
- let icons = this.el.nativeElement.querySelectorAll(selectorIcons).length;
311
- if (this.clean) {
312
- icons++;
313
- }
314
- if (icons) {
315
- this.inputEl.nativeElement.style.paddingRight = `${icons * 36}px`;
316
- }
317
- });
318
- }
319
- writeValueModel(value) {
320
- if (this.inputEl) {
321
- if (value || value === 0) {
322
- const formatedViewValue = this.formatToViewValue(value);
323
- this.setViewValue(formatedViewValue);
324
- }
325
- else {
326
- this.setViewValue('');
327
- }
328
- }
329
- if (value) {
330
- this.change.emit(value);
331
- }
332
- }
333
- getErrorPatternMessage() {
334
- return this.errorPattern !== '' && this.hasInvalidClass() ? this.errorPattern : '';
335
- }
336
- // responsável por adicionar 0 antes da virgula (decimalSeparator).
337
- addZeroBefore(value) {
338
- const isDecimalSeparator = value === this.decimalSeparator;
339
- return isDecimalSeparator ? `0${value}` : value;
340
- }
341
- containsComma(value) {
342
- return value.includes(this.decimalSeparator);
343
- }
344
- containsMoreThanOneDecimalSeparator(value = '') {
345
- const foundComma = value.match(this.regex.decimal);
346
- return !!(foundComma && foundComma.length > 1);
347
- }
348
- controlChangeEmitter() {
349
- const elementValue = this.getScreenValue();
350
- // Emite o evento change manualmente quando o campo é alterado
351
- // Este evento é controlado manualmente devido ao preventDefault existente na máscara
352
- // e devido ao controle do p-clean, que também precisa emitir change
353
- if (elementValue !== this.valueBeforeChange) {
354
- this.fireChange = true;
355
- setTimeout(() => {
356
- this.change.emit(elementValue);
357
- }, 200);
358
- }
359
- }
360
- formatMask(value) {
361
- // necessário para não adicionar . nas casa decimais.
362
- // por exemplo: 12.345,123.45 (errado)
363
- // 12.345,12345 (correto)
364
- if (value.match(this.regex.decimal)) {
365
- const regex = new RegExp(`(\\d)(?=(\\d{3})+(?!\\d)${this.decimalSeparator})`, 'g');
366
- return value.toString().replace(regex, `$1${this.thousandSeparator}`);
367
- }
368
- return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${this.thousandSeparator}`);
369
- }
370
- formatToModelValue(value) {
371
- const formattedValue = this.replaceCommaToDot(value);
372
- const parsedValue = formattedValue ? parseFloat(Number(formattedValue).toFixed(this.decimalsLength)) : undefined;
373
- return parsedValue === 0 || parsedValue ? parsedValue : undefined;
374
- }
375
- formatToViewValue(value) {
376
- // - Necessário para tratar valores que contenham decimalSeparator
377
- value = this.replaceCommaToDot(value);
378
- const numberValue = Number(value).toFixed(this.decimalsLength);
379
- const valueBeforeDot = this.getValueBeforeSeparator(numberValue, '.');
380
- const valueAfterDot = this.getValueAfterSeparator(numberValue, '.');
381
- const formatedNumber = this.formatMask(valueBeforeDot);
382
- if (this.decimalsLength === 0) {
383
- return formatedNumber;
384
- }
385
- else {
386
- return `${formatedNumber}${this.decimalSeparator}${valueAfterDot}`;
387
- }
388
- }
389
- formatValueWithoutThousandSeparator(value = '') {
390
- return value.toString().replace(this.regex.thousand, '');
391
- }
392
- getValueAfterSeparator(value = '', separator) {
393
- return value.split(separator)[1] || '';
394
- }
395
- getValueBeforeSeparator(value = '', separator) {
396
- return value.split(separator)[0] || '';
397
- }
398
- hasLessDot(value) {
399
- if (value) {
400
- const dots = value.match(this.regex.thousand);
401
- const dotsLength = dots && dots.length;
402
- if (dotsLength < this.oldDotsLength) {
403
- this.oldDotsLength = dotsLength;
404
- return true;
405
- }
406
- }
407
- if (!value) {
408
- this.oldDotsLength = null;
409
- }
410
- return false;
411
- }
412
- hasMoreDot(value) {
413
- if (value) {
414
- const dots = value.match(this.regex.thousand);
415
- const dotsLength = dots && dots.length;
416
- if (dotsLength > this.oldDotsLength) {
417
- this.oldDotsLength = dotsLength;
418
- return true;
419
- }
420
- }
421
- if (!value) {
422
- this.oldDotsLength = null;
423
- }
424
- return false;
425
- }
426
- hasMinusSignInvalidPosition(event) {
427
- const keyIsMinusSign = event.key === this.minusSign;
428
- const selectionStart = event.target.selectionStart;
429
- return keyIsMinusSign && selectionStart !== 0;
430
- }
431
- isInvalidKey(event, charCode) {
432
- const isInvalidNumber = !this.isValidNumber(event);
433
- return (this.verifyInsertComma(event) ||
434
- this.verifyThousandLength(event) ||
435
- this.verifyValueAfterComma(event) ||
436
- this.verifyInsertMinusSign(event) ||
437
- this.hasMinusSignInvalidPosition(event) ||
438
- isInvalidNumber ||
439
- this.validateCursorPositionBeforeSeparator(event) ||
440
- this.verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode));
441
- }
442
- isGreaterThanTotalLengthLimit(decimalsMaxLength, thousandMaxlength) {
443
- return decimalsMaxLength + thousandMaxlength > poDecimalTotalLengthLimit;
444
- }
445
- isKeyDecimalSeparator(event) {
446
- return event.key === this.decimalSeparator || event.char === this.decimalSeparator;
447
- }
448
- isPositionAfterDecimalSeparator(positionCursor, value) {
449
- const indexComma = value && value.indexOf(this.decimalSeparator);
450
- if (indexComma && this.decimalsLength > 0) {
451
- return positionCursor > indexComma;
452
- }
453
- }
454
- isSelectionStartDifferentSelectionEnd(target) {
455
- return target.selectionStart !== target.selectionEnd;
456
- }
457
- isValidKey(event, key) {
458
- const charCode = event.which || event.keyCode;
459
- const validKey = event.which === 8 || event.which === 0;
460
- if (validKey && !this.isKeyboardAndroid) {
461
- return;
462
- }
463
- if (key) {
464
- event.key = key;
465
- }
466
- if (this.isInvalidKey(event, charCode)) {
467
- event.preventDefault();
468
- return false;
469
- }
470
- return true;
471
- }
472
- isValueBetweenAllowed(value, maxAllowed) {
473
- return value >= 0 && value <= maxAllowed;
474
- }
475
- // Quando decimalsLength for 0 não deve permitir informar vírgula (decimalSeparator)
476
- verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode) {
477
- return charCode === 44 && this.decimalsLength === 0;
478
- }
479
- verifyAutoFocus() {
480
- if (this.autoFocus) {
481
- this.focus();
482
- }
483
- }
484
- setInitialSelectionRange(target, selectionStart, selectionEnd) {
485
- if (selectionStart === 1 && selectionEnd === 1) {
486
- return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
487
- }
488
- return target.setSelectionRange(selectionStart - 1, selectionEnd - 1);
489
- }
490
- replaceAt(value, index, replace) {
491
- return value.substring(0, index) + replace + value.substring(index + 1);
492
- }
493
- replaceCommaToDot(value = '') {
494
- if (this.decimalSeparator === ',') {
495
- value = value.toString().replace(this.regex.decimal, '.');
496
- }
497
- return value;
498
- }
499
- setCursorInput(event, selectionStart, selectionEnd) {
500
- const target = event.target;
501
- const viewValue = target.value;
502
- // Caso houver mais . do que anteriormente soma o valor com 1.
503
- if (this.hasMoreDot(viewValue) || viewValue === '0' + this.decimalSeparator) {
504
- return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
505
- }
506
- // Caso houver menos . do que anteriormente subtrai o valor por 1.
507
- if (this.hasLessDot(viewValue)) {
508
- this.setInitialSelectionRange(target, selectionStart, selectionEnd);
509
- }
510
- return target.setSelectionRange(selectionStart, selectionEnd);
511
- }
512
- setPositionValue(event) {
513
- const value = event.target.value;
514
- const position = event.target.selectionStart - 1;
515
- if (position > 0 && event.key === this.minusSign) {
516
- event.target.value = value.substring(0, position) + value.substr(position + 1);
517
- }
518
- }
519
- setViewValue(value) {
520
- this.inputEl.nativeElement.value = value;
521
- }
522
- validateCursorPositionBeforeSeparator(event) {
523
- const target = event.target;
524
- const originalValue = this.formatValueWithoutThousandSeparator(target.value);
525
- const valueBeforeSeparator = this.getValueBeforeSeparator(target.value, this.decimalSeparator);
526
- const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
527
- if (this.isSelectionStartDifferentSelectionEnd(target)) {
528
- return false;
529
- }
530
- return (target.selectionStart <= valueBeforeSeparator.length &&
531
- valueBeforeSeparatorOriginal.length === this.thousandMaxlength &&
532
- !this.isKeyDecimalSeparator(event));
533
- }
534
- verifyThousandLength(event) {
535
- const target = event.target;
536
- const originalValue = this.formatValueWithoutThousandSeparator(target.value);
537
- const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
538
- if (this.isSelectionStartDifferentSelectionEnd(target)) {
539
- return false;
540
- }
541
- return (valueBeforeSeparatorOriginal.length >= this.thousandMaxlength &&
542
- !this.isKeyDecimalSeparator(event) &&
543
- this.isPositionAfterDecimalSeparator(target.selectionStart - this.decimalsLength, target.value));
544
- }
545
- verifyInsertComma(e) {
546
- const hasComma = this.containsComma(e.target.value);
547
- return hasComma && e.key === this.decimalSeparator;
548
- }
549
- verifyInsertMinusSign(event) {
550
- const value = event.target.value;
551
- const indexMinusSign = value.lastIndexOf(this.minusSign) !== -1;
552
- const positionMinusSign = value.lastIndexOf('-');
553
- const occurancesMinusSign = value.match(new RegExp('-', 'g'));
554
- if (this.isKeyboardAndroid && indexMinusSign && occurancesMinusSign.length > 1) {
555
- event.target.value = this.replaceAt(value, positionMinusSign, '');
556
- }
557
- return indexMinusSign && event.key === this.minusSign;
558
- }
559
- verifyValueAfterComma(event) {
560
- const value = event.target.value;
561
- const selectionStart = event.target.selectionStart;
562
- const valueAfterSeparator = this.getValueAfterSeparator(value, this.decimalSeparator);
563
- return (this.isPositionAfterDecimalSeparator(selectionStart, value) && valueAfterSeparator.length >= this.decimalsLength);
564
- }
565
- }
566
- PoDecimalComponent.decorators = [
567
- { type: Component, args: [{
568
- selector: 'po-decimal',
569
- template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\n <div class=\"po-field-container-content\">\n <div *ngIf=\"icon\" class=\"po-field-icon-container-left\">\n <po-icon class=\"po-field-icon\" [class.po-field-icon-disabled]=\"disabled\" [p-icon]=\"icon\"></po-icon>\n </div>\n\n <input\n #inp\n class=\"po-input\"\n [attr.max]=\"max\"\n [attr.min]=\"min\"\n [attr.name]=\"name\"\n [autocomplete]=\"autocomplete\"\n [class.po-input-icon-left]=\"icon\"\n [class.po-input-icon-right]=\"clean\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n inputmode=\"decimal\"\n type=\"text\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event)\"\n (keypress)=\"onKeyPress($event)\"\n />\n\n <div class=\"po-field-icon-container-right\">\n <po-clean *ngIf=\"clean && !disabled && !readonly\" [p-element-ref]=\"inputEl\" (p-change-event)=\"clear($event)\">\n </po-clean>\n </div>\n </div>\n\n <po-field-container-bottom [p-error-pattern]=\"getErrorPatternMessage()\"> </po-field-container-bottom>\n</po-field-container>\n",
570
- changeDetection: ChangeDetectionStrategy.OnPush,
571
- providers: [
572
- {
573
- provide: NG_VALUE_ACCESSOR,
574
- useExisting: forwardRef(() => PoDecimalComponent),
575
- multi: true
576
- },
577
- {
578
- provide: NG_VALIDATORS,
579
- useExisting: forwardRef(() => PoDecimalComponent),
580
- multi: true
581
- }
582
- ]
583
- },] }
584
- ];
585
- PoDecimalComponent.ctorParameters = () => [
586
- { type: ElementRef },
587
- { type: PoLanguageService },
588
- { type: ChangeDetectorRef }
589
- ];
590
- PoDecimalComponent.propDecorators = {
591
- inputEl: [{ type: ViewChild, args: ['inp', { read: ElementRef, static: true },] }],
592
- decimalsLength: [{ type: Input, args: ['p-decimals-length',] }],
593
- thousandMaxlength: [{ type: Input, args: ['p-thousand-maxlength',] }],
594
- locale: [{ type: Input, args: ['p-locale',] }],
595
- min: [{ type: Input, args: ['p-min',] }],
596
- max: [{ type: Input, args: ['p-max',] }]
597
- };
598
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGVjaW1hbC9wby1kZWNpbWFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTNFLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0saUNBQWlDLEdBQUcsRUFBRSxDQUFDO0FBQzdDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7QUFrQkgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQTZKMUQsWUFBb0IsRUFBYyxFQUFVLGlCQUFvQyxFQUFFLEVBQXFCO1FBQ3JHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQURRLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBMUp4RSxvQkFBZSxH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QUMsY0FBYyxDQUFDO1FBQ25ELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RixPQUFPLENBQ0wsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FDakgsQ0FBQztJQUNKLENBQUM7OztZQXhwQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0Qix1d0NBQTBDO2dCQUMxQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7d0JBQ2pELEtBQUssRUFBRSxJQUFJO3FCQUNaO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3dCQUNqRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7WUEzRUMsVUFBVTtZQU9ILGlCQUFpQjtZQVR4QixpQkFBaUI7OztzQkErRWhCLFNBQVMsU0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7NkJBd0NuRCxLQUFLLFNBQUMsbUJBQW1CO2dDQWdDekIsS0FBSyxTQUFDLHNCQUFzQjtxQkFpQzVCLEtBQUssU0FBQyxVQUFVO2tCQVloQixLQUFLLFNBQUMsT0FBTztrQkF1QmIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IG1pbkZhaWxlZCwgbWF4RmFpbGVkIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbmltcG9ydCB7IGNvbnZlcnRUb0ludCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9JbnB1dEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9wby1pbnB1dC9wby1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XG5cbmNvbnN0IHBvRGVjaW1hbERlZmF1bHREZWNpbWFsc0xlbmd0aCA9IDI7XG5jb25zdCBwb0RlY2ltYWxEZWZhdWx0VGhvdXNhbmRNYXhsZW5ndGggPSAxMztcbmNvbnN0IHBvRGVjaW1hbE1heERlY2ltYWxzTGVuZ3RoID0gMTU7XG5jb25zdCBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0ID0gMTY7XG5cbi8qKlxuICpcbiAqIEBkb2NzRXh0ZW5kcyBQb0lucHV0QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIDxicj5cbiAqIC0gTyBgcG8tZGVjaW1hbGAgw6kgdW0gKmlucHV0KiBlc3BlY8OtZmljbyBwYXJhIHJlY2ViZXIgYXBlbmFzIG7Dum1lcm9zIGRlY2ltYWlzLCBwb3IgaXNzbyByZWNlYmUgYXMgc2VndWludGVzIGNhcmFjdGVyw61zdGljYXM6XG4gKiAgKyBBY2VpdGEgYXBlbmFzIG7Dum1lcm9zO1xuICogICsgVXRpbGl6YSAnLCcgY29tbyBzZXBhcmFkb3IgZGUgZGVjaW1hbDtcbiAqICArIFV0aWxpemEgJy4nIHBhcmEgc2VwYXJhw6fDo28gZGUgbWlsaGFyO1xuICogICsgw4kgcG9zc8OtdmVsIGNvbmZpZ3VyYXIgYSBxdWFudGlkYWRlIGRlIGNhc2FzIGRlY2ltYWlzIGUgYSBxdWFudGlkYWRlIGRlIGRpZ2l0b3MgZG8gY2FtcG8uXG4gKlxuICogPiAqKkltcG9ydGFudGU6KipcbiAqIEF0dWFsbWVudGUgbyBKYXZhU2NyaXB0IGxpbWl0YS1zZSBhIHVtIGNvbmp1bnRvIGRlIGRhZG9zIGRlIGAzMiBiaXRzYCwgZSBwYXJhIHF1ZSBvcyB2YWxvcmVzIGNvbXBvcnRlbS1zZSBkZXZpZGFtZW50ZSxcbiAqIG8gYHBvLWRlY2ltYWxgIGNvbnTDqW0gdW0gdHJhdGFtZW50byBxdWUgbGltaXRhIGVtIDE2IG8gbsO6bWVybyB0b3RhbCBkZSBjYXNhcyBhbnRlcyBlIGFww7NzIGEgdsOtcmd1bGEuXG4gKiBWZWphIGFiYWl4byBhcyBkZW1haXMgcmVncmFzIG5hcyBkb2N1bWVudGHDp8O1ZXMgZGUgYHAtZGVjaW1hbHMtbGVuZ3RoYCBlIGBwLXRob3VzYW5kLW1heGxlbmd0aGAuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1iYXNpY1wiIHRpdGxlPVwiUE8gRGVjaW1hbCBCYXNpY1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy9zYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWJhc2ljL3NhbXBsZS1wby1kZWNpbWFsLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtbGFic1wiIHRpdGxlPVwiUE8gRGVjaW1hbCBMYWJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWxhYnMvc2FtcGxlLXBvLWRlY2ltYWwtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWxhYnMvc2FtcGxlLXBvLWRlY2ltYWwtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWhvdXJseS13YWdlXCIgdGl0bGU9XCJQTyBEZWNpbWFsIC0gSG91cmx5IFdhZ2VcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2Uvc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm1cIiB0aXRsZT1cIlBPIERlY2ltYWwgLSBIb3VybHkgV2FnZSBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1kZWNpbWFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWRlY2ltYWwuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RlY2ltYWxDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RlY2ltYWxDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUG9EZWNpbWFsQ29tcG9uZW50IGV4dGVuZHMgUG9JbnB1dEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICBAVmlld0NoaWxkKCdpbnAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgX2RlY2ltYWxzTGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xuICBwcml2YXRlIF90aG91c2FuZE1heGxlbmd0aD86IG51bWJlciA9IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aDtcbiAgcHJpdmF0ZSBfbG9jYWxlPzogc3RyaW5nO1xuICBwcml2YXRlIF9taW4/OiBudW1iZXI7XG4gIHByaXZhdGUgX21heD86IG51bWJlcjtcblxuICBwcml2YXRlIGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcbiAgcHJpdmF0ZSBmaXJlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXNLZXlib2FyZEFuZHJvaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtaW51c1NpZ246IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBvbGREb3RzTGVuZ3RoID0gbnVsbDtcbiAgcHJpdmF0ZSB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nO1xuICBwcml2YXRlIHZhbHVlQmVmb3JlQ2hhbmdlOiBhbnk7XG5cbiAgcHJpdmF0ZSByZWdleCA9IHtcbiAgICB0aG91c2FuZDogbmV3IFJlZ0V4cCgnXFxcXCcgKyAnLCcsICdnJyksXG4gICAgZGVjaW1hbDogbmV3IFJlZ0V4cCgnXFxcXCcgKyAnLicsICdnJylcbiAgfTtcblxuICBnZXQgYXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLm5vQXV0b2NvbXBsZXRlID8gJ29mZicgOiAnb24nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUXVhbnRpZGFkZSBtw6F4aW1hIGRlIGNhc2FzIGRlY2ltYWlzLlxuICAgKlxuICAgKiA+ICoqSW1wb3J0YW50ZToqKlxuICAgKiAtIE8gdmFsb3IgbcOheGltbyBwZXJtaXRpZG8gw6kgMTU7XG4gICAqIC0gQSBzb21hIHRvdGFsIGRlIGBwLWRlY2ltYWxzLWxlbmd0aGAgY29tIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgbGltaXRhLXNlIMOgIDE2O1xuICAgKiAtIEVzdGEgcHJvcHJpZWRhZGUgc29icmVww7VlIGFwZW5hcyBvIHZhbG9yICoqcGFkcsOjbyoqIGRlIGBwLXRob3VzYW5kLW1heGxlbmd0aGA7XG4gICAqIC0gQ2FzbyBgcC10aG91c2FuZC1tYXhsZW5ndGhgIHRlbmhhIHVtIHZhbG9yIGRlZmluaWRvLCBlc3RhIHByb3ByaWVkYWRlIHBvZGVyw6EgcmVjZWJlciBhcGVuYXMgbyB2YWxvciByZXN0YW50ZSBkbyBsaW1pdGUgdG90YWwgKDE2KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDJgXG4gICAqL1xuICBASW5wdXQoJ3AtZGVjaW1hbHMtbGVuZ3RoJykgc2V0IGRlY2ltYWxzTGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBsZXQgZGVjaW1hbHNMZW5ndGggPSBjb252ZXJ0VG9JbnQodmFsdWUpO1xuXG4gICAgZGVjaW1hbHNMZW5ndGggPSB0aGlzLmlzVmFsdWVCZXR3ZWVuQWxsb3dlZChkZWNpbWFsc0xlbmd0aCwgcG9EZWNpbWFsTWF4RGVjaW1hbHNMZW5ndGgpXG4gICAgICA/IGRlY2ltYWxzTGVuZ3RoXG4gICAgICA6IHBvRGVjaW1hbERlZmF1bHREZWNpbWFsc0xlbmd0aDtcblxuICAgIGlmICh0aGlzLmlzR3JlYXRlclRoYW5Ub3RhbExlbmd0aExpbWl0KGRlY2ltYWxzTGVuZ3RoLCB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoKSkge1xuICAgICAgdGhpcy50aG91c2FuZE1heGxlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSBkZWNpbWFsc0xlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWNpbWFsc0xlbmd0aCA9IGRlY2ltYWxzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGRlY2ltYWxzTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWNpbWFsc0xlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFF1YW50aWRhZGUgbcOheGltYSBkZSBkw61naXRvcyBhbnRlcyBkbyBzZXBhcmFkb3IgZGVjaW1hbC5cbiAgICpcbiAgICogPiAqKkltcG9ydGFudGU6KipcbiAgICogLSBPIHZhbG9yIG3DoXhpbW8gcGVybWl0aWRvIMOpIDEzO1xuICAgKiAtIEEgc29tYSB0b3RhbCBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGNvbSBgcC10aG91c2FuZC1tYXhsZW5ndGhgIGxpbWl0YS1zZSDDoCAxNjtcbiAgICogLSBFc3RhIHByb3ByaWVkYWRlIHNvYnJlcMO1ZSBvIHZhbG9yIGRlZmluaWRvIGVtIGBwLWRlY2ltYWxzLWxlbmd0aGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxM2BcbiAgICovXG4gIEBJbnB1dCgncC10aG91c2FuZC1tYXhsZW5ndGgnKSBzZXQgdGhvdXNhbmRNYXhsZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGxldCB0aG91c2FuZE1heGxlbmd0aCA9IGNvbnZlcnRUb0ludCh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5kZWNpbWFsc0xlbmd0aCA+IHBvRGVjaW1hbERlZmF1bHREZWNpbWFsc0xlbmd0aCAmJiAhdGhvdXNhbmRNYXhsZW5ndGgpIHtcbiAgICAgIHRob3VzYW5kTWF4bGVuZ3RoID0gcG9EZWNpbWFsVG90YWxMZW5ndGhMaW1pdCAtIHRoaXMuZGVjaW1hbHNMZW5ndGg7XG4gICAgfVxuXG4gICAgdGhvdXNhbmRNYXhsZW5ndGggPSB0aGlzLmlzVmFsdWVCZXR3ZWVuQWxsb3dlZCh0aG91c2FuZE1heGxlbmd0aCwgcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoKVxuICAgICAgPyB0aG91c2FuZE1heGxlbmd0aFxuICAgICAgOiBwb0RlY2ltYWxEZWZhdWx0VGhvdXNhbmRNYXhsZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pc0dyZWF0ZXJUaGFuVG90YWxMZW5ndGhMaW1pdCh0aGlzLmRlY2ltYWxzTGVuZ3RoLCB0aG91c2FuZE1heGxlbmd0aCkpIHtcbiAgICAgIHRoaXMuZGVjaW1hbHNMZW5ndGggPSBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0IC0gdGhvdXNhbmRNYXhsZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5fdGhvdXNhbmRNYXhsZW5ndGggPSB0aG91c2FuZE1heGxlbmd0aDtcbiAgfVxuXG4gIGdldCB0aG91c2FuZE1heGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhvdXNhbmRNYXhsZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmZvcm1hIG8gbG9jYWxlKHBhw61zKSBwYXJhIGEgZm9ybWF0YcOnw6NvIGRvIHZhbG9yLlxuICAgKiBQb3IgcGFkcsOjbyBvIHZhbG9yIHNlcsOhIGNvbmZpZ3VyYWRvIHNlZ3VuZG8gYSBvIG3Ds2R1bG8gW2BJMThuYF0oZG9jdW1lbnRhdGlvbi9wby1pMThuKVxuICAgKlxuICAgKiA+IFBhcmEgdmVyIHF1YWlzIGxpbmd1YWdlbnMgc3Vwb3J0YWRhcyBhY2Vzc2UgW2BJMThuYF0oZG9jdW1lbnRhdGlvbi9wby1pMThuKVxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWxvY2FsZScpIHNldCBsb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgdGhpcy5zZXROdW1iZXJzU2VwYXJhdG9ycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVmFsb3IgbcOtbmltby5cbiAgICovXG4gIEBJbnB1dCgncC1taW4nKSBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl9taW4gPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVmFsb3IgbcOheGltby5cbiAgICovXG4gIEBJbnB1dCgncC1tYXgnKSBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWF4ID0gdmFsdWU7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl9tYXggPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKGNkKTtcbiAgICB0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXROdW1iZXJzU2VwYXJhdG9ycygpO1xuICB9XG5cbiAgc2V0TnVtYmVyc1NlcGFyYXRvcnMoKSB7XG4gICAgY29uc3QgeyBkZWNpbWFsU2VwYXJhdG9yLCB0aG91c2FuZFNlcGFyYXRvciB9ID0gdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXROdW1iZXJTZXBhcmF0b3JzKHRoaXMuX2xvY2FsZSk7XG4gICAgdGhpcy5kZWNpbWFsU2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvcjtcbiAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yID0gdGhvdXNhbmRTZXBhcmF0b3I7XG4gICAgdGhpcy5yZWdleCA9IHtcbiAgICAgIHRob3VzYW5kOiBuZXcgUmVnRXhwKCdcXFxcJyArIHRob3VzYW5kU2VwYXJhdG9yLCAnZycpLFxuICAgICAgZGVjaW1hbDogbmV3IFJlZ0V4cCgnXFxcXCcgKyBkZWNpbWFsU2VwYXJhdG9yLCAnZycpXG4gICAgfTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnZlcmlmeUF1dG9Gb2N1cygpO1xuICAgIHRoaXMuc2V0UGFkZGluZ0lucHV0KCk7XG4gIH1cblxuICBjbGVhcih2YWx1ZSkge1xuICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLmNvbnRyb2xDaGFuZ2VFbWl0dGVyKCk7XG4gIH1cblxuICBleHRyYVZhbGlkYXRpb24oYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAvLyBWZXJpZmljYSBzZSBqw6EgcG9zc3VpIGFsZ3VtIGVycm9yIHBhdHRlcm4gcGFkcsOjby5cbiAgICB0aGlzLmVycm9yUGF0dGVybiA9IHRoaXMuZXJyb3JQYXR0ZXJuICE9PSAnVmFsb3IgSW52w6FsaWRvJyA/IHRoaXMuZXJyb3JQYXR0ZXJuIDogJyc7XG5cbiAgICBpZiAobWluRmFpbGVkKHRoaXMubWluLCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtaW46IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWF4RmFpbGVkKHRoaXMubWF4LCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXg6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXRTY3JlZW5WYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsID8gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgOiAnJztcbiAgfVxuXG4gIGhhc0ludmFsaWRDbGFzcygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpICYmXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpICYmXG4gICAgICB0aGlzLmdldFNjcmVlblZhbHVlKCkgIT09ICcnXG4gICAgKTtcbiAgfVxuXG4gIGhhc0xldHRlcnModmFsdWU6IHN0cmluZyA9ICcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9bYS16QS1aOjsrPV/CtGBeflwiJz8hQCMkJcKoJiooKT48e33Dp8OHXFxbXFxdL1xcXFx8XSsvKTtcbiAgfVxuXG4gIGlzVmFsaWROdW1iZXIoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIC0gZXZlbnQua2V5IG7Do28gZXhpc3RpYSBlbSBhbGd1bnMgYnJvd3NlcnMsIGNvbW8gU2Ftc3VuZyBicm93c2VyIGUgRmlyZWZveC5cbiAgICBjb25zdCBrZXlWYWx1ZSA9IDxhbnk+U3RyaW5nLmZyb21DaGFyQ29kZShldmVudC53aGljaCk7XG4gICAgY29uc3QgdmFsaWRLZXkgPSBldmVudC53aGljaCAhPT0gOCAmJiBldmVudC53aGljaCAhPT0gMDtcblxuICAgIHJldHVybiAhdGhpcy5oYXNMZXR0ZXJzKGtleVZhbHVlKSAmJiB2YWxpZEtleTtcbiAgfVxuXG4gIC8vIGZ1bsOnw6NvIHJlc3BvbnPDoXZlbCBwb3IgYWRpY2lvbmFyIG9zIHplcm9lcyBjb20gYXMgY2FzYSBkZWNpbWFpcyBhbyBzYWlyIGRvIGNhbXBvLlxuICBvbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkPy4oKTtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuaGFzTGV0dGVycyh2YWx1ZSkgfHwgdGhpcy5jb250YWluc01vcmVUaGFuT25lRGVjaW1hbFNlcGFyYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoJycpO1xuICAgICAgICB0aGlzLmNhbGxPbkNoYW5nZSh1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcih2YWx1ZSk7XG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdFRvVmlld1ZhbHVlKHZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKSk7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgICB0aGlzLmNvbnRyb2xDaGFuZ2VFbWl0dGVyKCk7XG4gIH1cblxuICBvbkZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgLy8gQXR1YWxpemEgdmFsb3IgZGEgdmFyacOhdmVsIHF1ZSBzZXLDoSB1c2FkYSBwYXJhIHZlcmlmaWNhciBzZSBvIGNhbXBvIHRldmUgYWx0ZXJhw6fDo29cbiAgICB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlID0gdGhpcy5nZXRTY3JlZW5WYWx1ZSgpO1xuXG4gICAgLy8gRGlzcGFyYSBldmVudG8gcXVhbmRvIG8gdXN1w6FyaW8gZW50cmFyIG5vIGNhbXBvXG4gICAgLy8gRXN0ZSBldmVudG8gdGFtYsOpbSDDqSBkaXNwYXJhZG8gcXVhbmRvIG8gY2FtcG8gaW5pY2lhIGNvbSBmb2NvLlxuICAgIHRoaXMuZW50ZXIuZW1pdCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZDtcblxuICAgIGxldCBtb2RlbFZhbHVlO1xuXG4gICAgLy8gLSBCcm93c2VycyBuYXRpdm9zIGRvIEFuZHJvaWQgZXg6IFNhbXN1bmcgQnJvd3Nlci5cbiAgICBpZiAodGhpcy5pc0tleWJvYXJkQW5kcm9pZCkge1xuICAgICAgdGhpcy5vbklucHV0S2V5Ym9hcmRBbmRyb2lkKGV2ZW50KTtcbiAgICB9XG5cbiAgICBtb2RlbFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcihldmVudC50YXJnZXQudmFsdWUpO1xuICAgIG1vZGVsVmFsdWUgPSB0aGlzLmFkZFplcm9CZWZvcmUobW9kZWxWYWx1ZSk7XG4gICAgY29uc3Qgdmlld1ZhbHVlID0gdGhpcy5mb3JtYXRNYXNrKG1vZGVsVmFsdWUpO1xuXG4gICAgLy8gdmFsaWRhw6fDo28gcGFyYSBuw6NvIHF1ZWJyYXIgSUUgY29tIHBsYWNlaG9sZGVyIGRlZmluaWRvIGUgSW5wdXQgdmF6aW9cbiAgICBpZiAodmlld1ZhbHVlKSB7XG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh2aWV3VmFsdWUpO1xuICAgICAgdGhpcy5zZXRDdXJzb3JJbnB1dChldmVudCwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsT25DaGFuZ2UodGhpcy5mb3JtYXRUb01vZGVsVmFsdWUobW9kZWxWYWx1ZSkpO1xuICB9XG5cbiAgb25JbnB1dEtleWJvYXJkQW5kcm9pZChldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjb25zdCBoYXNMZXR0ZXJzID0gdGhpcy5oYXNMZXR0ZXJzKGlucHV0VmFsdWUpO1xuXG4gICAgaWYgKGhhc0xldHRlcnMpIHtcbiAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGlucHV0VmFsdWUucmVwbGFjZShoYXNMZXR0ZXJzWzBdLCAnJykpO1xuXG4gICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBzZWxlY3Rpb25TdGFydCAtIDE7XG4gICAgICBjb25zdCBrZXkgPSBpbnB1dFZhbHVlLmNoYXJBdChwb3NpdGlvbik7XG5cbiAgICAgIHRoaXMuc2V0UG9zaXRpb25WYWx1ZShldmVudCk7XG5cbiAgICAgIGlmICh0aGlzLmlzVmFsaWRLZXkoZXZlbnQsIGtleSkpIHtcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoaW5wdXRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuaXNWYWxpZEtleShldmVudCk7XG4gIH1cblxuICBzZXRQYWRkaW5nSW5wdXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rvckljb25zID0gJy5wby1maWVsZC1pY29uLWNvbnRhaW5lcjpub3QoLnBvLWZpZWxkLWljb24tY29udGFpbmVyLWxlZnQpID4gLnBvLWljb24nO1xuICAgICAgbGV0IGljb25zID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JJY29ucykubGVuZ3RoO1xuICAgICAgaWYgKHRoaXMuY2xlYW4pIHtcbiAgICAgICAgaWNvbnMrKztcbiAgICAgIH1cbiAgICAgIGlmIChpY29ucykge1xuICAgICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtpY29ucyAqIDM2fXB4YDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWVNb2RlbCh2YWx1ZSkge1xuICAgIGlmICh0aGlzLmlucHV0RWwpIHtcbiAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICBjb25zdCBmb3JtYXRlZFZpZXdWYWx1ZSA9IHRoaXMuZm9ybWF0VG9WaWV3VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZShmb3JtYXRlZFZpZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSgnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFcnJvclBhdHRlcm5NZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmVycm9yUGF0dGVybiAhPT0gJycgJiYgdGhpcy5oYXNJbnZhbGlkQ2xhc3MoKSA/IHRoaXMuZXJyb3JQYXR0ZXJuIDogJyc7XG4gIH1cblxuICAvLyByZXNwb25zw6F2ZWwgcG9yIGFkaWNpb25hciAwIGFudGVzIGRhIHZpcmd1bGEgKGRlY2ltYWxTZXBhcmF0b3IpLlxuICBwcml2YXRlIGFkZFplcm9CZWZvcmUodmFsdWUpIHtcbiAgICBjb25zdCBpc0RlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuXG4gICAgcmV0dXJuIGlzRGVjaW1hbFNlcGFyYXRvciA/IGAwJHt2YWx1ZX1gIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnRhaW5zQ29tbWEodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXModGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udGFpbnNNb3JlVGhhbk9uZURlY2ltYWxTZXBhcmF0b3IodmFsdWU6IHN0cmluZyA9ICcnKSB7XG4gICAgY29uc3QgZm91bmRDb21tYSA9IHZhbHVlLm1hdGNoKHRoaXMucmVnZXguZGVjaW1hbCk7XG5cbiAgICByZXR1cm4gISEoZm91bmRDb21tYSAmJiBmb3VuZENvbW1hLmxlbmd0aCA+IDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250cm9sQ2hhbmdlRW1pdHRlcigpIHtcbiAgICBjb25zdCBlbGVtZW50VmFsdWUgPSB0aGlzLmdldFNjcmVlblZhbHVlKCk7XG5cbiAgICAvLyBFbWl0ZSBvIGV2ZW50byBjaGFuZ2UgbWFudWFsbWVudGUgcXVhbmRvIG8gY2FtcG8gw6kgYWx0ZXJhZG9cbiAgICAvLyBFc3RlIGV2ZW50byDDqSBjb250cm9sYWRvIG1hbnVhbG1lbnRlIGRldmlkbyBhbyBwcmV2ZW50RGVmYXVsdCBleGlzdGVudGUgbmEgbcOhc2NhcmFcbiAgICAvLyBlIGRldmlkbyBhbyBjb250cm9sZSBkbyBwLWNsZWFuLCBxdWUgdGFtYsOpbSBwcmVjaXNhIGVtaXRpciBjaGFuZ2VcbiAgICBpZiAoZWxlbWVudFZhbHVlICE9PSB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmZpcmVDaGFuZ2UgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoZWxlbWVudFZhbHVlKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNYXNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyBuZWNlc3PDoXJpbyBwYXJhIG7Do28gYWRpY2lvbmFyIC4gbmFzIGNhc2EgZGVjaW1haXMuXG4gICAgLy8gcG9yIGV4ZW1wbG86IDEyLjM0NSwxMjMuNDUgKGVycmFkbylcbiAgICAvLyAxMi4zNDUsMTIzNDUgKGNvcnJldG8pXG5cbiAgICBpZiAodmFsdWUubWF0Y2godGhpcy5yZWdleC5kZWNpbWFsKSkge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoXFxcXGQpKD89KFxcXFxkezN9KSsoPyFcXFxcZCkke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn0pYCwgJ2cnKTtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UocmVnZXgsIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyg/IVxcZCkpL2csIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VG9Nb2RlbFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMucmVwbGFjZUNvbW1hVG9Eb3QodmFsdWUpO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWUgPyBwYXJzZUZsb2F0KE51bWJlcihmb3JtYXR0ZWRWYWx1ZSkudG9GaXhlZCh0aGlzLmRlY2ltYWxzTGVuZ3RoKSkgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gcGFyc2VkVmFsdWUgPT09IDAgfHwgcGFyc2VkVmFsdWUgPyBwYXJzZWRWYWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VG9WaWV3VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIC8vIC0gTmVjZXNzw6FyaW8gcGFyYSB0cmF0YXIgdmFsb3JlcyBxdWUgY29udGVuaGFtIGRlY2ltYWxTZXBhcmF0b3JcbiAgICB2YWx1ZSA9IHRoaXMucmVwbGFjZUNvbW1hVG9Eb3QodmFsdWUpO1xuXG4gICAgY29uc3QgbnVtYmVyVmFsdWUgPSBOdW1iZXIodmFsdWUpLnRvRml4ZWQodGhpcy5kZWNpbWFsc0xlbmd0aCk7XG5cbiAgICBjb25zdCB2YWx1ZUJlZm9yZURvdCA9IHRoaXMuZ2V0VmFsdWVCZWZvcmVTZXBhcmF0b3IobnVtYmVyVmFsdWUsICcuJyk7XG4gICAgY29uc3QgdmFsdWVBZnRlckRvdCA9IHRoaXMuZ2V0VmFsdWVBZnRlclNlcGFyYXRvcihudW1iZXJWYWx1ZSwgJy4nKTtcblxuICAgIGNvbnN0IGZvcm1hdGVkTnVtYmVyID0gdGhpcy5mb3JtYXRNYXNrKHZhbHVlQmVmb3JlRG90KTtcblxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm9ybWF0ZWROdW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtmb3JtYXRlZE51bWJlcn0ke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn0ke3ZhbHVlQWZ0ZXJEb3R9YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UodGhpcy5yZWdleC50aG91c2FuZCwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUFmdGVyU2VwYXJhdG9yKHZhbHVlID0gJycsIHNlcGFyYXRvcikge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpWzFdIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcih2YWx1ZSA9ICcnLCBzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoc2VwYXJhdG9yKVswXSB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgaGFzTGVzc0RvdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgZG90cyA9IHZhbHVlLm1hdGNoKHRoaXMucmVnZXgudGhvdXNhbmQpO1xuICAgICAgY29uc3QgZG90c0xlbmd0aCA9IGRvdHMgJiYgZG90cy5sZW5ndGg7XG5cbiAgICAgIGlmIChkb3RzTGVuZ3RoIDwgdGhpcy5vbGREb3RzTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub2xkRG90c0xlbmd0aCA9IGRvdHNMZW5ndGg7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMub2xkRG90c0xlbmd0aCA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNNb3JlRG90KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkb3RzID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC50aG91c2FuZCk7XG4gICAgICBjb25zdCBkb3RzTGVuZ3RoID0gZG90cyAmJiBkb3RzLmxlbmd0aDtcblxuICAgICAgaWYgKGRvdHNMZW5ndGggPiB0aGlzLm9sZERvdHNMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gZG90c0xlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhc01pbnVzU2lnbkludmFsaWRQb3NpdGlvbihldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5SXNNaW51c1NpZ24gPSBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgcmV0dXJuIGtleUlzTWludXNTaWduICYmIHNlbGVjdGlvblN0YXJ0ICE9PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ludmFsaWRLZXkoZXZlbnQ6IGFueSwgY2hhckNvZGU6IGFueSkge1xuICAgIGNvbnN0IGlzSW52YWxpZE51bWJlciA9ICF0aGlzLmlzVmFsaWROdW1iZXIoZXZlbnQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudmVyaWZ5SW5zZXJ0Q29tbWEoZXZlbnQpIHx8XG4gICAgICB0aGlzLnZlcmlmeVRob3VzYW5kTGVuZ3RoKGV2ZW50KSB8fFxuICAgICAgdGhpcy52ZXJpZnlWYWx1ZUFmdGVyQ29tbWEoZXZlbnQpIHx8XG4gICAgICB0aGlzLnZlcmlmeUluc2VydE1pbnVzU2lnbihldmVudCkgfHxcbiAgICAgIHRoaXMuaGFzTWludXNTaWduSW52YWxpZFBvc2l0aW9uKGV2ZW50KSB8fFxuICAgICAgaXNJbnZhbGlkTnVtYmVyIHx8XG4gICAgICB0aGlzLnZhbGlkYXRlQ3Vyc29yUG9zaXRpb25CZWZvcmVTZXBhcmF0b3IoZXZlbnQpIHx8XG4gICAgICB0aGlzLnZlcmlmeURlY2ltYWxMZW5ndGhJc1plcm9BbmRLZXlQcmVzc2VkSXNDb21tYShjaGFyQ29kZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0dyZWF0ZXJUaGFuVG90YWxMZW5ndGhMaW1pdChkZWNpbWFsc01heExlbmd0aDogbnVtYmVyLCB0aG91c2FuZE1heGxlbmd0aDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGRlY2ltYWxzTWF4TGVuZ3RoICsgdGhvdXNhbmRNYXhsZW5ndGggPiBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0tleURlY2ltYWxTZXBhcmF0b3IoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5ID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgfHwgZXZlbnQuY2hhciA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHBvc2l0aW9uQ3Vyc29yLCB2YWx1ZSkge1xuICAgIGNvbnN0IGluZGV4Q29tbWEgPSB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICBpZiAoaW5kZXhDb21tYSAmJiB0aGlzLmRlY2ltYWxzTGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHBvc2l0aW9uQ3Vyc29yID4gaW5kZXhDb21tYTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0OiBhbnkpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnNlbGVjdGlvblN0YXJ0ICE9PSB0YXJnZXQuc2VsZWN0aW9uRW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkS2V5KGV2ZW50OiBhbnksIGtleT86IHN0cmluZykge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCB2YWxpZEtleSA9IGV2ZW50LndoaWNoID09PSA4IHx8IGV2ZW50LndoaWNoID09PSAwO1xuXG4gICAgaWYgKHZhbGlkS2V5ICYmICF0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSkge1xuICAgICAgZXZlbnQua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzSW52YWxpZEtleShldmVudCwgY2hhckNvZGUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWx1ZUJldHdlZW5BbGxvd2VkKHZhbHVlOiBudW1iZXIsIG1heEFsbG93ZWQ6IG51bWJlcikge1xuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IG1heEFsbG93ZWQ7XG4gIH1cblxuICAvLyBRdWFuZG8gZGVjaW1hbHNMZW5ndGggZm9yIDAgbsOjbyBkZXZlIHBlcm1pdGlyIGluZm9ybWFyIHbDrXJndWxhIChkZWNpbWFsU2VwYXJhdG9yKVxuICBwcml2YXRlIHZlcmlmeURlY2ltYWxMZW5ndGhJc1plcm9BbmRLZXlQcmVzc2VkSXNDb21tYShjaGFyQ29kZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSA0NCAmJiB0aGlzLmRlY2ltYWxzTGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlBdXRvRm9jdXMoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsU2VsZWN0aW9uUmFuZ2UodGFyZ2V0OiBhbnksIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpIHtcbiAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPT09IDEgJiYgc2VsZWN0aW9uRW5kID09PSAxKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uRW5kICsgMSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgLSAxLCBzZWxlY3Rpb25FbmQgLSAxKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUF0KHZhbHVlLCBpbmRleCwgcmVwbGFjZSkge1xuICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZSArIHZhbHVlLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29tbWFUb0RvdCh2YWx1ZTogc3RyaW5nID0gJycpIHtcbiAgICBpZiAodGhpcy5kZWNpbWFsU2VwYXJhdG9yID09PSAnLCcpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHRoaXMucmVnZXguZGVjaW1hbCwgJy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnNvcklucHV0KGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IHZpZXdWYWx1ZSA9IHRhcmdldC52YWx1ZTtcblxuICAgIC8vIENhc28gaG91dmVyIG1haXMgLiBkbyBxdWUgYW50ZXJpb3JtZW50ZSBzb21hIG8gdmFsb3IgY29tIDEuXG4gICAgaWYgKHRoaXMuaGFzTW9yZURvdCh2aWV3VmFsdWUpIHx8IHZpZXdWYWx1ZSA9PT0gJzAnICsgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uRW5kICsgMSk7XG4gICAgfVxuXG4gICAgLy8gQ2FzbyBob3V2ZXIgbWVub3MgLiBkbyBxdWUgYW50ZXJpb3JtZW50ZSBzdWJ0cmFpIG8gdmFsb3IgcG9yIDEuXG4gICAgaWYgKHRoaXMuaGFzTGVzc0RvdCh2aWV3VmFsdWUpKSB7XG4gICAgICB0aGlzLnNldEluaXRpYWxTZWxlY3Rpb25SYW5nZSh0YXJnZXQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvblZhbHVlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDE7XG5cbiAgICBpZiAocG9zaXRpb24gPiAwICYmIGV2ZW50LmtleSA9PT0gdGhpcy5taW51c1NpZ24pIHtcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbikgKyB2YWx1ZS5zdWJzdHIocG9zaXRpb24gKyAxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpZXdWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDdXJzb3JQb3NpdGlvbkJlZm9yZVNlcGFyYXRvcihldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHRhcmdldC52YWx1ZSk7XG4gICAgY29uc3QgdmFsdWVCZWZvcmVTZXBhcmF0b3IgPSB0aGlzLmdldFZhbHVlQmVmb3JlU2VwYXJhdG9yKHRhcmdldC52YWx1ZSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25TdGFydERpZmZlcmVudFNlbGVjdGlvbkVuZCh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPD0gdmFsdWVCZWZvcmVTZXBhcmF0b3IubGVuZ3RoICYmXG4gICAgICB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsLmxlbmd0aCA9PT0gdGhpcy50aG91c2FuZE1heGxlbmd0aCAmJlxuICAgICAgIXRoaXMuaXNLZXlEZWNpbWFsU2VwYXJhdG9yKGV2ZW50KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVRob3VzYW5kTGVuZ3RoKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodGFyZ2V0LnZhbHVlKTtcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25TdGFydERpZmZlcmVudFNlbGVjdGlvbkVuZCh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsLmxlbmd0aCA+PSB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoICYmXG4gICAgICAhdGhpcy5pc0tleURlY2ltYWxTZXBhcmF0b3IoZXZlbnQpICYmXG4gICAgICB0aGlzLmlzUG9zaXRpb25BZnRlckRlY2ltYWxTZXBhcmF0b3IodGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gdGhpcy5kZWNpbWFsc0xlbmd0aCwgdGFyZ2V0LnZhbHVlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUluc2VydENvbW1hKGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0NvbW1hID0gdGhpcy5jb250YWluc0NvbW1hKGUudGFyZ2V0LnZhbHVlKTtcblxuICAgIHJldHVybiBoYXNDb21tYSAmJiBlLmtleSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlJbnNlcnRNaW51c1NpZ24oZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IGluZGV4TWludXNTaWduID0gdmFsdWUubGFzdEluZGV4T2YodGhpcy5taW51c1NpZ24pICE9PSAtMTtcbiAgICBjb25zdCBwb3NpdGlvbk1pbnVzU2lnbiA9IHZhbHVlLmxhc3RJbmRleE9mKCctJyk7XG4gICAgY29uc3Qgb2NjdXJhbmNlc01pbnVzU2lnbiA9IHZhbHVlLm1hdGNoKG5ldyBSZWdFeHAoJy0nLCAnZycpKTtcblxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkICYmIGluZGV4TWludXNTaWduICYmIG9jY3VyYW5jZXNNaW51c1NpZ24ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5yZXBsYWNlQXQodmFsdWUsIHBvc2l0aW9uTWludXNTaWduLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBpbmRleE1pbnVzU2lnbiAmJiBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlWYWx1ZUFmdGVyQ29tbWEoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IHZhbHVlQWZ0ZXJTZXBhcmF0b3IgPSB0aGlzLmdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IodmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHNlbGVjdGlvblN0YXJ0LCB2YWx1ZSkgJiYgdmFsdWVBZnRlclNlcGFyYXRvci5sZW5ndGggPj0gdGhpcy5kZWNpbWFsc0xlbmd0aFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
+ import { PoLanguageService } from '../../../services/po-language/po-language.service';
4
+ import { minFailed, maxFailed } from '../validators';
5
+ import { convertToInt } from '../../../utils/util';
6
+ import { PoInputBaseComponent } from '../po-input/po-input-base.component';
7
+ const poDecimalDefaultDecimalsLength = 2;
8
+ const poDecimalDefaultThousandMaxlength = 13;
9
+ const poDecimalMaxDecimalsLength = 15;
10
+ const poDecimalTotalLengthLimit = 16;
11
+ /**
12
+ *
13
+ * @docsExtends PoInputBaseComponent
14
+ *
15
+ * @description
16
+ *
17
+ * <br>
18
+ * - O `po-decimal` é um *input* específico para receber apenas números decimais, por isso recebe as seguintes características:
19
+ * + Aceita apenas números;
20
+ * + Utiliza ',' como separador de decimal;
21
+ * + Utiliza '.' para separação de milhar;
22
+ * + É possível configurar a quantidade de casas decimais e a quantidade de digitos do campo.
23
+ *
24
+ * > **Importante:**
25
+ * Atualmente o JavaScript limita-se a um conjunto de dados de `32 bits`, e para que os valores comportem-se devidamente,
26
+ * o `po-decimal` contém um tratamento que limita em 16 o número total de casas antes e após a vírgula.
27
+ * Veja abaixo as demais regras nas documentações de `p-decimals-length` e `p-thousand-maxlength`.
28
+ *
29
+ * @example
30
+ *
31
+ * <example name="po-decimal-basic" title="PO Decimal Basic">
32
+ * <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.html"> </file>
33
+ * <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.ts"> </file>
34
+ * </example>
35
+ *
36
+ * <example name="po-decimal-labs" title="PO Decimal Labs">
37
+ * <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.html"> </file>
38
+ * <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.ts"> </file>
39
+ * </example>
40
+ *
41
+ * <example name="po-decimal-hourly-wage" title="PO Decimal - Hourly Wage">
42
+ * <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.html"> </file>
43
+ * <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.ts"> </file>
44
+ * </example>
45
+ *
46
+ * <example name="po-decimal-hourly-wage-reactive-form" title="PO Decimal - Hourly Wage Reactive Form">
47
+ * <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.html"> </file>
48
+ * <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.ts"> </file>
49
+ * </example>
50
+ */
51
+ export class PoDecimalComponent extends PoInputBaseComponent {
52
+ constructor(el, poLanguageService, cd) {
53
+ super(cd);
54
+ this.el = el;
55
+ this.poLanguageService = poLanguageService;
56
+ this._decimalsLength = poDecimalDefaultDecimalsLength;
57
+ this._thousandMaxlength = poDecimalDefaultThousandMaxlength;
58
+ this.fireChange = false;
59
+ this.isKeyboardAndroid = false;
60
+ this.minusSign = '-';
61
+ this.oldDotsLength = null;
62
+ this.regex = {
63
+ thousand: new RegExp('\\' + ',', 'g'),
64
+ decimal: new RegExp('\\' + '.', 'g')
65
+ };
66
+ this.isKeyboardAndroid = !!navigator.userAgent.match(/Android/i);
67
+ }
68
+ get autocomplete() {
69
+ return this.noAutocomplete ? 'off' : 'on';
70
+ }
71
+ /**
72
+ * @optional
73
+ *
74
+ * @description
75
+ *
76
+ * Quantidade máxima de casas decimais.
77
+ *
78
+ * > **Importante:**
79
+ * - O valor máximo permitido é 15;
80
+ * - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
81
+ * - Esta propriedade sobrepõe apenas o valor **padrão** de `p-thousand-maxlength`;
82
+ * - Caso `p-thousand-maxlength` tenha um valor definido, esta propriedade poderá receber apenas o valor restante do limite total (16).
83
+ *
84
+ * @default `2`
85
+ */
86
+ set decimalsLength(value) {
87
+ let decimalsLength = convertToInt(value);
88
+ decimalsLength = this.isValueBetweenAllowed(decimalsLength, poDecimalMaxDecimalsLength)
89
+ ? decimalsLength
90
+ : poDecimalDefaultDecimalsLength;
91
+ if (this.isGreaterThanTotalLengthLimit(decimalsLength, this.thousandMaxlength)) {
92
+ this.thousandMaxlength = poDecimalTotalLengthLimit - decimalsLength;
93
+ }
94
+ this._decimalsLength = decimalsLength;
95
+ }
96
+ get decimalsLength() {
97
+ return this._decimalsLength;
98
+ }
99
+ /**
100
+ * @optional
101
+ *
102
+ * @description
103
+ *
104
+ * Quantidade máxima de dígitos antes do separador decimal.
105
+ *
106
+ * > **Importante:**
107
+ * - O valor máximo permitido é 13;
108
+ * - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
109
+ * - Esta propriedade sobrepõe o valor definido em `p-decimals-length`.
110
+ *
111
+ * @default `13`
112
+ */
113
+ set thousandMaxlength(value) {
114
+ let thousandMaxlength = convertToInt(value);
115
+ if (this.decimalsLength > poDecimalDefaultDecimalsLength && !thousandMaxlength) {
116
+ thousandMaxlength = poDecimalTotalLengthLimit - this.decimalsLength;
117
+ }
118
+ thousandMaxlength = this.isValueBetweenAllowed(thousandMaxlength, poDecimalDefaultThousandMaxlength)
119
+ ? thousandMaxlength
120
+ : poDecimalDefaultThousandMaxlength;
121
+ if (this.isGreaterThanTotalLengthLimit(this.decimalsLength, thousandMaxlength)) {
122
+ this.decimalsLength = poDecimalTotalLengthLimit - thousandMaxlength;
123
+ }
124
+ this._thousandMaxlength = thousandMaxlength;
125
+ }
126
+ get thousandMaxlength() {
127
+ return this._thousandMaxlength;
128
+ }
129
+ /**
130
+ * @optional
131
+ *
132
+ * @description
133
+ *
134
+ * Informa o locale(país) para a formatação do valor.
135
+ * Por padrão o valor será configurado segundo a o módulo [`I18n`](documentation/po-i18n)
136
+ *
137
+ * > Para ver quais linguagens suportadas acesse [`I18n`](documentation/po-i18n)
138
+ *
139
+ */
140
+ set locale(locale) {
141
+ this._locale = locale;
142
+ this.setNumbersSeparators();
143
+ }
144
+ /**
145
+ * @optional
146
+ *
147
+ * @description
148
+ *
149
+ * Valor mínimo.
150
+ */
151
+ set min(value) {
152
+ if (!isNaN(value)) {
153
+ this._min = value;
154
+ this.validateModel();
155
+ }
156
+ else if (!value) {
157
+ this._min = undefined;
158
+ this.validateModel();
159
+ }
160
+ }
161
+ get min() {
162
+ return this._min;
163
+ }
164
+ /**
165
+ * @optional
166
+ *
167
+ * @description
168
+ *
169
+ * Valor máximo.
170
+ */
171
+ set max(value) {
172
+ if (!isNaN(value)) {
173
+ this._max = value;
174
+ this.validateModel();
175
+ }
176
+ else if (!value) {
177
+ this._max = undefined;
178
+ this.validateModel();
179
+ }
180
+ }
181
+ get max() {
182
+ return this._max;
183
+ }
184
+ ngOnInit() {
185
+ this.setNumbersSeparators();
186
+ }
187
+ setNumbersSeparators() {
188
+ const { decimalSeparator, thousandSeparator } = this.poLanguageService.getNumberSeparators(this._locale);
189
+ this.decimalSeparator = decimalSeparator;
190
+ this.thousandSeparator = thousandSeparator;
191
+ this.regex = {
192
+ thousand: new RegExp('\\' + thousandSeparator, 'g'),
193
+ decimal: new RegExp('\\' + decimalSeparator, 'g')
194
+ };
195
+ }
196
+ ngAfterViewInit() {
197
+ this.verifyAutoFocus();
198
+ this.setPaddingInput();
199
+ }
200
+ clear(value) {
201
+ this.callOnChange(value);
202
+ this.controlChangeEmitter();
203
+ }
204
+ extraValidation(abstractControl) {
205
+ // Verifica se já possui algum error pattern padrão.
206
+ this.errorPattern = this.errorPattern !== 'Valor Inválido' ? this.errorPattern : '';
207
+ if (minFailed(this.min, abstractControl.value)) {
208
+ return {
209
+ min: {
210
+ valid: false
211
+ }
212
+ };
213
+ }
214
+ if (maxFailed(this.max, abstractControl.value)) {
215
+ return {
216
+ max: {
217
+ valid: false
218
+ }
219
+ };
220
+ }
221
+ return null;
222
+ }
223
+ focus() {
224
+ if (!this.disabled) {
225
+ this.inputEl.nativeElement.focus();
226
+ }
227
+ }
228
+ getScreenValue() {
229
+ return this.inputEl ? this.inputEl.nativeElement.value : '';
230
+ }
231
+ hasInvalidClass() {
232
+ return (this.el.nativeElement.classList.contains('ng-invalid') &&
233
+ this.el.nativeElement.classList.contains('ng-dirty') &&
234
+ this.getScreenValue() !== '');
235
+ }
236
+ hasLetters(value = '') {
237
+ return value.match(/[a-zA-Z:;+=_´`^~"'?!@#$%¨&*()><{}çÇ\[\]/\\|]+/);
238
+ }
239
+ isValidNumber(event) {
240
+ // - event.key não existia em alguns browsers, como Samsung browser e Firefox.
241
+ const keyValue = String.fromCharCode(event.which);
242
+ const validKey = event.which !== 8 && event.which !== 0;
243
+ return !this.hasLetters(keyValue) && validKey;
244
+ }
245
+ // função responsável por adicionar os zeroes com as casa decimais ao sair do campo.
246
+ onBlur(event) {
247
+ var _a;
248
+ (_a = this.onTouched) === null || _a === void 0 ? void 0 : _a.call(this);
249
+ const value = event.target.value;
250
+ if (value) {
251
+ if (this.hasLetters(value) || this.containsMoreThanOneDecimalSeparator(value)) {
252
+ this.setViewValue('');
253
+ this.callOnChange(undefined);
254
+ return;
255
+ }
256
+ const valueWithoutThousandSeparator = this.formatValueWithoutThousandSeparator(value);
257
+ this.setViewValue(this.formatToViewValue(valueWithoutThousandSeparator));
258
+ }
259
+ this.blur.emit();
260
+ this.controlChangeEmitter();
261
+ }
262
+ onFocus(event) {
263
+ // Atualiza valor da variável que será usada para verificar se o campo teve alteração
264
+ this.valueBeforeChange = this.getScreenValue();
265
+ // Dispara evento quando o usuário entrar no campo
266
+ // Este evento também é disparado quando o campo inicia com foco.
267
+ this.enter.emit();
268
+ }
269
+ onInput(event) {
270
+ const selectionStart = event.target.selectionStart;
271
+ const selectionEnd = event.target.selectionEnd;
272
+ let modelValue;
273
+ // - Browsers nativos do Android ex: Samsung Browser.
274
+ if (this.isKeyboardAndroid) {
275
+ this.onInputKeyboardAndroid(event);
276
+ }
277
+ modelValue = this.formatValueWithoutThousandSeparator(event.target.value);
278
+ modelValue = this.addZeroBefore(modelValue);
279
+ const viewValue = this.formatMask(modelValue);
280
+ // validação para não quebrar IE com placeholder definido e Input vazio
281
+ if (viewValue) {
282
+ this.setViewValue(viewValue);
283
+ this.setCursorInput(event, selectionStart, selectionEnd);
284
+ }
285
+ this.callOnChange(this.formatToModelValue(modelValue));
286
+ }
287
+ onInputKeyboardAndroid(event) {
288
+ const inputValue = event.target.value;
289
+ const selectionStart = event.target.selectionStart;
290
+ const hasLetters = this.hasLetters(inputValue);
291
+ if (hasLetters) {
292
+ this.setViewValue(inputValue.replace(hasLetters[0], ''));
293
+ return event.preventDefault();
294
+ }
295
+ else {
296
+ const position = selectionStart - 1;
297
+ const key = inputValue.charAt(position);
298
+ this.setPositionValue(event);
299
+ if (this.isValidKey(event, key)) {
300
+ this.setViewValue(inputValue);
301
+ }
302
+ }
303
+ }
304
+ onKeyPress(event) {
305
+ this.isValidKey(event);
306
+ }
307
+ setPaddingInput() {
308
+ setTimeout(() => {
309
+ const selectorIcons = '.po-field-icon-container:not(.po-field-icon-container-left) > .po-icon';
310
+ let icons = this.el.nativeElement.querySelectorAll(selectorIcons).length;
311
+ if (this.clean) {
312
+ icons++;
313
+ }
314
+ if (icons) {
315
+ this.inputEl.nativeElement.style.paddingRight = `${icons * 36}px`;
316
+ }
317
+ });
318
+ }
319
+ writeValueModel(value) {
320
+ if (this.inputEl) {
321
+ if (value || value === 0) {
322
+ const formatedViewValue = this.formatToViewValue(value);
323
+ this.setViewValue(formatedViewValue);
324
+ }
325
+ else {
326
+ this.setViewValue('');
327
+ }
328
+ }
329
+ if (value) {
330
+ this.change.emit(value);
331
+ }
332
+ }
333
+ getErrorPatternMessage() {
334
+ return this.errorPattern !== '' && this.hasInvalidClass() ? this.errorPattern : '';
335
+ }
336
+ // responsável por adicionar 0 antes da virgula (decimalSeparator).
337
+ addZeroBefore(value) {
338
+ const isDecimalSeparator = value === this.decimalSeparator;
339
+ return isDecimalSeparator ? `0${value}` : value;
340
+ }
341
+ containsComma(value) {
342
+ return value.includes(this.decimalSeparator);
343
+ }
344
+ containsMoreThanOneDecimalSeparator(value = '') {
345
+ const foundComma = value.match(this.regex.decimal);
346
+ return !!(foundComma && foundComma.length > 1);
347
+ }
348
+ controlChangeEmitter() {
349
+ const elementValue = this.getScreenValue();
350
+ // Emite o evento change manualmente quando o campo é alterado
351
+ // Este evento é controlado manualmente devido ao preventDefault existente na máscara
352
+ // e devido ao controle do p-clean, que também precisa emitir change
353
+ if (elementValue !== this.valueBeforeChange) {
354
+ this.fireChange = true;
355
+ setTimeout(() => {
356
+ this.change.emit(elementValue);
357
+ }, 200);
358
+ }
359
+ }
360
+ formatMask(value) {
361
+ // necessário para não adicionar . nas casa decimais.
362
+ // por exemplo: 12.345,123.45 (errado)
363
+ // 12.345,12345 (correto)
364
+ if (value.match(this.regex.decimal)) {
365
+ const regex = new RegExp(`(\\d)(?=(\\d{3})+(?!\\d)${this.decimalSeparator})`, 'g');
366
+ return value.toString().replace(regex, `$1${this.thousandSeparator}`);
367
+ }
368
+ return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${this.thousandSeparator}`);
369
+ }
370
+ formatToModelValue(value) {
371
+ const formattedValue = this.replaceCommaToDot(value);
372
+ const parsedValue = formattedValue ? parseFloat(Number(formattedValue).toFixed(this.decimalsLength)) : undefined;
373
+ return parsedValue === 0 || parsedValue ? parsedValue : undefined;
374
+ }
375
+ formatToViewValue(value) {
376
+ // - Necessário para tratar valores que contenham decimalSeparator
377
+ value = this.replaceCommaToDot(value);
378
+ const numberValue = Number(value).toFixed(this.decimalsLength);
379
+ const valueBeforeDot = this.getValueBeforeSeparator(numberValue, '.');
380
+ const valueAfterDot = this.getValueAfterSeparator(numberValue, '.');
381
+ const formatedNumber = this.formatMask(valueBeforeDot);
382
+ if (this.decimalsLength === 0) {
383
+ return formatedNumber;
384
+ }
385
+ else {
386
+ return `${formatedNumber}${this.decimalSeparator}${valueAfterDot}`;
387
+ }
388
+ }
389
+ formatValueWithoutThousandSeparator(value = '') {
390
+ return value.toString().replace(this.regex.thousand, '');
391
+ }
392
+ getValueAfterSeparator(value = '', separator) {
393
+ return value.split(separator)[1] || '';
394
+ }
395
+ getValueBeforeSeparator(value = '', separator) {
396
+ return value.split(separator)[0] || '';
397
+ }
398
+ hasLessDot(value) {
399
+ if (value) {
400
+ const dots = value.match(this.regex.thousand);
401
+ const dotsLength = dots && dots.length;
402
+ if (dotsLength < this.oldDotsLength) {
403
+ this.oldDotsLength = dotsLength;
404
+ return true;
405
+ }
406
+ }
407
+ if (!value) {
408
+ this.oldDotsLength = null;
409
+ }
410
+ return false;
411
+ }
412
+ hasMoreDot(value) {
413
+ if (value) {
414
+ const dots = value.match(this.regex.thousand);
415
+ const dotsLength = dots && dots.length;
416
+ if (dotsLength > this.oldDotsLength) {
417
+ this.oldDotsLength = dotsLength;
418
+ return true;
419
+ }
420
+ }
421
+ if (!value) {
422
+ this.oldDotsLength = null;
423
+ }
424
+ return false;
425
+ }
426
+ hasMinusSignInvalidPosition(event) {
427
+ const keyIsMinusSign = event.key === this.minusSign;
428
+ const selectionStart = event.target.selectionStart;
429
+ return keyIsMinusSign && selectionStart !== 0;
430
+ }
431
+ isInvalidKey(event, charCode) {
432
+ const isInvalidNumber = !this.isValidNumber(event);
433
+ return (this.verifyInsertComma(event) ||
434
+ this.verifyThousandLength(event) ||
435
+ this.verifyValueAfterComma(event) ||
436
+ this.verifyInsertMinusSign(event) ||
437
+ this.hasMinusSignInvalidPosition(event) ||
438
+ isInvalidNumber ||
439
+ this.validateCursorPositionBeforeSeparator(event) ||
440
+ this.verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode));
441
+ }
442
+ isGreaterThanTotalLengthLimit(decimalsMaxLength, thousandMaxlength) {
443
+ return decimalsMaxLength + thousandMaxlength > poDecimalTotalLengthLimit;
444
+ }
445
+ isKeyDecimalSeparator(event) {
446
+ return event.key === this.decimalSeparator || event.char === this.decimalSeparator;
447
+ }
448
+ isPositionAfterDecimalSeparator(positionCursor, value) {
449
+ const indexComma = value && value.indexOf(this.decimalSeparator);
450
+ if (indexComma && this.decimalsLength > 0) {
451
+ return positionCursor > indexComma;
452
+ }
453
+ }
454
+ isSelectionStartDifferentSelectionEnd(target) {
455
+ return target.selectionStart !== target.selectionEnd;
456
+ }
457
+ isValidKey(event, key) {
458
+ const charCode = event.which || event.keyCode;
459
+ const validKey = event.which === 8 || event.which === 0;
460
+ if (validKey && !this.isKeyboardAndroid) {
461
+ return;
462
+ }
463
+ if (key) {
464
+ event.key = key;
465
+ }
466
+ if (this.isInvalidKey(event, charCode)) {
467
+ event.preventDefault();
468
+ return false;
469
+ }
470
+ return true;
471
+ }
472
+ isValueBetweenAllowed(value, maxAllowed) {
473
+ return value >= 0 && value <= maxAllowed;
474
+ }
475
+ // Quando decimalsLength for 0 não deve permitir informar vírgula (decimalSeparator)
476
+ verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode) {
477
+ return charCode === 44 && this.decimalsLength === 0;
478
+ }
479
+ verifyAutoFocus() {
480
+ if (this.autoFocus) {
481
+ this.focus();
482
+ }
483
+ }
484
+ setInitialSelectionRange(target, selectionStart, selectionEnd) {
485
+ if (selectionStart === 1 && selectionEnd === 1) {
486
+ return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
487
+ }
488
+ return target.setSelectionRange(selectionStart - 1, selectionEnd - 1);
489
+ }
490
+ replaceAt(value, index, replace) {
491
+ return value.substring(0, index) + replace + value.substring(index + 1);
492
+ }
493
+ replaceCommaToDot(value = '') {
494
+ if (this.decimalSeparator === ',') {
495
+ value = value.toString().replace(this.regex.decimal, '.');
496
+ }
497
+ return value;
498
+ }
499
+ setCursorInput(event, selectionStart, selectionEnd) {
500
+ const target = event.target;
501
+ const viewValue = target.value;
502
+ // Caso houver mais . do que anteriormente soma o valor com 1.
503
+ if (this.hasMoreDot(viewValue) || viewValue === '0' + this.decimalSeparator) {
504
+ return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
505
+ }
506
+ // Caso houver menos . do que anteriormente subtrai o valor por 1.
507
+ if (this.hasLessDot(viewValue)) {
508
+ this.setInitialSelectionRange(target, selectionStart, selectionEnd);
509
+ }
510
+ return target.setSelectionRange(selectionStart, selectionEnd);
511
+ }
512
+ setPositionValue(event) {
513
+ const value = event.target.value;
514
+ const position = event.target.selectionStart - 1;
515
+ if (position > 0 && event.key === this.minusSign) {
516
+ event.target.value = value.substring(0, position) + value.substr(position + 1);
517
+ }
518
+ }
519
+ setViewValue(value) {
520
+ this.inputEl.nativeElement.value = value;
521
+ }
522
+ validateCursorPositionBeforeSeparator(event) {
523
+ const target = event.target;
524
+ const originalValue = this.formatValueWithoutThousandSeparator(target.value);
525
+ const valueBeforeSeparator = this.getValueBeforeSeparator(target.value, this.decimalSeparator);
526
+ const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
527
+ if (this.isSelectionStartDifferentSelectionEnd(target)) {
528
+ return false;
529
+ }
530
+ return (target.selectionStart <= valueBeforeSeparator.length &&
531
+ valueBeforeSeparatorOriginal.length === this.thousandMaxlength &&
532
+ !this.isKeyDecimalSeparator(event));
533
+ }
534
+ verifyThousandLength(event) {
535
+ const target = event.target;
536
+ const originalValue = this.formatValueWithoutThousandSeparator(target.value);
537
+ const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
538
+ if (this.isSelectionStartDifferentSelectionEnd(target)) {
539
+ return false;
540
+ }
541
+ return (valueBeforeSeparatorOriginal.length >= this.thousandMaxlength &&
542
+ !this.isKeyDecimalSeparator(event) &&
543
+ this.isPositionAfterDecimalSeparator(target.selectionStart - this.decimalsLength, target.value));
544
+ }
545
+ verifyInsertComma(e) {
546
+ const hasComma = this.containsComma(e.target.value);
547
+ return hasComma && e.key === this.decimalSeparator;
548
+ }
549
+ verifyInsertMinusSign(event) {
550
+ const value = event.target.value;
551
+ const indexMinusSign = value.lastIndexOf(this.minusSign) !== -1;
552
+ const positionMinusSign = value.lastIndexOf('-');
553
+ const occurancesMinusSign = value.match(new RegExp('-', 'g'));
554
+ if (this.isKeyboardAndroid && indexMinusSign && occurancesMinusSign.length > 1) {
555
+ event.target.value = this.replaceAt(value, positionMinusSign, '');
556
+ }
557
+ return indexMinusSign && event.key === this.minusSign;
558
+ }
559
+ verifyValueAfterComma(event) {
560
+ const value = event.target.value;
561
+ const selectionStart = event.target.selectionStart;
562
+ const valueAfterSeparator = this.getValueAfterSeparator(value, this.decimalSeparator);
563
+ return (this.isPositionAfterDecimalSeparator(selectionStart, value) && valueAfterSeparator.length >= this.decimalsLength);
564
+ }
565
+ }
566
+ PoDecimalComponent.decorators = [
567
+ { type: Component, args: [{
568
+ selector: 'po-decimal',
569
+ template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\r\n <div class=\"po-field-container-content\">\r\n <div *ngIf=\"icon\" class=\"po-field-icon-container-left\">\r\n <po-icon class=\"po-field-icon\" [class.po-field-icon-disabled]=\"disabled\" [p-icon]=\"icon\"></po-icon>\r\n </div>\r\n\r\n <input\r\n #inp\r\n class=\"po-input\"\r\n [attr.max]=\"max\"\r\n [attr.min]=\"min\"\r\n [attr.name]=\"name\"\r\n [autocomplete]=\"autocomplete\"\r\n [class.po-input-icon-left]=\"icon\"\r\n [class.po-input-icon-right]=\"clean\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [required]=\"required\"\r\n inputmode=\"decimal\"\r\n type=\"text\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\"\r\n (input)=\"onInput($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n />\r\n\r\n <div class=\"po-field-icon-container-right\">\r\n <po-clean *ngIf=\"clean && !disabled && !readonly\" [p-element-ref]=\"inputEl\" (p-change-event)=\"clear($event)\">\r\n </po-clean>\r\n </div>\r\n </div>\r\n\r\n <po-field-container-bottom [p-error-pattern]=\"getErrorPatternMessage()\"> </po-field-container-bottom>\r\n</po-field-container>\r\n",
570
+ changeDetection: ChangeDetectionStrategy.OnPush,
571
+ providers: [
572
+ {
573
+ provide: NG_VALUE_ACCESSOR,
574
+ useExisting: forwardRef(() => PoDecimalComponent),
575
+ multi: true
576
+ },
577
+ {
578
+ provide: NG_VALIDATORS,
579
+ useExisting: forwardRef(() => PoDecimalComponent),
580
+ multi: true
581
+ }
582
+ ]
583
+ },] }
584
+ ];
585
+ PoDecimalComponent.ctorParameters = () => [
586
+ { type: ElementRef },
587
+ { type: PoLanguageService },
588
+ { type: ChangeDetectorRef }
589
+ ];
590
+ PoDecimalComponent.propDecorators = {
591
+ inputEl: [{ type: ViewChild, args: ['inp', { read: ElementRef, static: true },] }],
592
+ decimalsLength: [{ type: Input, args: ['p-decimals-length',] }],
593
+ thousandMaxlength: [{ type: Input, args: ['p-thousand-maxlength',] }],
594
+ locale: [{ type: Input, args: ['p-locale',] }],
595
+ min: [{ type: Input, args: ['p-min',] }],
596
+ max: [{ type: Input, args: ['p-max',] }]
597
+ };
598
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGVjaW1hbC9wby1kZWNpbWFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTNFLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0saUNBQWlDLEdBQUcsRUFBRSxDQUFDO0FBQzdDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7QUFrQkgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQTZKMUQsWUFBb0IsRUFBYyxFQUFVLGlCQUFvQyxFQUFFLEVBQXFCO1FBQ3JHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQURRLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBMUp4RSxvQkFBZSxHQUFZLDhCQUE4QixDQUFDO1FBQzFELHVCQUFrQixHQUFZLGlDQUFpQyxDQUFDO1FBTWhFLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLGNBQVMsR0FBVyxHQUFHLENBQUM7UUFDeEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFJckIsVUFBSyxHQUFHO1lBQ2QsUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQztTQUNyQyxDQUFDO1FBMklBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQTFJRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILElBQWdDLGNBQWMsQ0FBQyxLQUFhO1FBQzFELElBQUksY0FBYyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSwwQkFBMEIsQ0FBQztZQUNyRixDQUFDLENBQUMsY0FBYztZQUNoQixDQUFDLENBQUMsOEJBQThCLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsNkJBQTZCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzlFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyx5QkFBeUIsR0FBRyxjQUFjLENBQUM7U0FDckU7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILElBQW1DLGlCQUFpQixDQUFDLEtBQWE7UUFDaEUsSUFBSSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUMsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLDhCQUE4QixJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDOUUsaUJBQWlCLEdBQUcseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUNyRTtRQUVELGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxpQ0FBaUMsQ0FBQztZQUNsRyxDQUFDLENBQUMsaUJBQWlCO1lBQ25CLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQztRQUV0QyxJQUFJLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEVBQUU7WUFDOUUsSUFBSSxDQUFDLGNBQWMsR0FBRyx5QkFBeUIsR0FBRyxpQkFBaUIsQ0FBQztTQUNyRTtRQUVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUF1QixNQUFNLENBQUMsTUFBYztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBb0IsR0FBRyxDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUVsQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7YUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBRXRCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQW9CLEdBQUcsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFFbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUV0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFPRCxRQUFRO1FBQ04sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLFFBQVEsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO1lBQ25ELE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDO1NBQ2xELENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsZUFBZSxDQUFDLGVBQWdDO1FBQzlDLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVwRixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxPQUFPO2dCQUNMLEdBQUcsRUFBRTtvQkFDSCxLQUFLLEVBQUUsS0FBSztpQkFDYjthQUNGLENBQUM7U0FDSDtRQUVELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlDLE9BQU87Z0JBQ0wsR0FBRyxFQUFFO29CQUNILEtBQUssRUFBRSxLQUFLO2lCQUNiO2FBQ0YsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxDQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ3RELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQ3BELElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWdCLEVBQUU7UUFDM0IsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLDhFQUE4RTtRQUM5RSxNQUFNLFFBQVEsR0FBUSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUV4RCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixNQUFNLENBQUMsS0FBVTs7UUFDZixNQUFBLElBQUksQ0FBQyxTQUFTLCtDQUFkLElBQUksQ0FBYyxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRWpDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDN0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0IsT0FBTzthQUNSO1lBRUQsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLHFGQUFxRjtRQUNyRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRS9DLGtEQUFrRDtRQUNsRCxpRUFBaUU7UUFDakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDbkQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFFL0MsSUFBSSxVQUFVLENBQUM7UUFFZixxREFBcUQ7UUFDckQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsVUFBVSxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFFLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsdUVBQXVFO1FBQ3ZFLElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFVO1FBQy9CLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0MsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFekQsT0FBTyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDL0I7YUFBTTtZQUNMLE1BQU0sUUFBUSxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMvQjtTQUNGO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ2IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sYUFBYSxHQUFHLHdFQUF3RSxDQUFDO1lBQy9GLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN6RSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsS0FBSyxFQUFFLENBQUM7YUFDVDtZQUNELElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUM7YUFDbkU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBSztRQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFFRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFFRCxtRUFBbUU7SUFDM0QsYUFBYSxDQUFDLEtBQUs7UUFDekIsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRTNELE9BQU8sa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNsRCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQUs7UUFDekIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxtQ0FBbUMsQ0FBQyxRQUFnQixFQUFFO1FBQzVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuRCxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTNDLDhEQUE4RDtRQUM5RCxxRkFBcUY7UUFDckYsb0VBQW9FO1FBQ3BFLElBQUksWUFBWSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzlCLHFEQUFxRDtRQUNyRCxzQ0FBc0M7UUFDdEMseUJBQXlCO1FBRXpCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLDJCQUEyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQWE7UUFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVqSCxPQUFPLFdBQVcsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRSxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBYTtRQUNyQyxrRUFBa0U7UUFDbEUsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFO1lBQzdCLE9BQU8sY0FBYyxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxPQUFPLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLEVBQUUsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFFTyxtQ0FBbUMsQ0FBQyxRQUFnQixFQUFFO1FBQzVELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxTQUFTO1FBQ2xELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsU0FBUztRQUNuRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBSztRQUN0QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUV2QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztnQkFDaEMsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzNCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQUs7UUFDdEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7WUFFdkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLDJCQUEyQixDQUFDLEtBQVU7UUFDNUMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBRW5ELE9BQU8sY0FBYyxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFVLEVBQUUsUUFBYTtRQUM1QyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkQsT0FBTyxDQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQztZQUN2QyxlQUFlO1lBQ2YsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLEtBQUssQ0FBQztZQUNqRCxJQUFJLENBQUMsNkNBQTZDLENBQUMsUUFBUSxDQUFDLENBQzdELENBQUM7SUFDSixDQUFDO0lBRU8sNkJBQTZCLENBQUMsaUJBQXlCLEVBQUUsaUJBQXlCO1FBQ3hGLE9BQU8saUJBQWlCLEdBQUcsaUJBQWlCLEdBQUcseUJBQXlCLENBQUM7SUFDM0UsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQUs7UUFDakMsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNyRixDQUFDO0lBRU8sK0JBQStCLENBQUMsY0FBYyxFQUFFLEtBQUs7UUFDM0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFakUsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUU7WUFDekMsT0FBTyxjQUFjLEdBQUcsVUFBVSxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVPLHFDQUFxQyxDQUFDLE1BQVc7UUFDdkQsT0FBTyxNQUFNLENBQUMsY0FBYyxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDdkQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFVLEVBQUUsR0FBWTtRQUN6QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFFeEQsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDdkMsT0FBTztTQUNSO1FBRUQsSUFBSSxHQUFHLEVBQUU7WUFDUCxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUNqQjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDdEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsVUFBa0I7UUFDN0QsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxVQUFVLENBQUM7SUFDM0MsQ0FBQztJQUVELG9GQUFvRjtJQUM1RSw2Q0FBNkMsQ0FBQyxRQUFnQjtRQUNwRSxPQUFPLFFBQVEsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUFDLE1BQVcsRUFBRSxjQUFjLEVBQUUsWUFBWTtRQUN4RSxJQUFJLGNBQWMsS0FBSyxDQUFDLElBQUksWUFBWSxLQUFLLENBQUMsRUFBRTtZQUM5QyxPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPO1FBQ3JDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFO1FBQzFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLEdBQUcsRUFBRTtZQUNqQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMzRDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLFlBQVk7UUFDeEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRS9CLDhEQUE4RDtRQUM5RCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0UsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdkU7UUFFRCxrRUFBa0U7UUFDbEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUVqRCxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hGO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUVPLHFDQUFxQyxDQUFDLEtBQVU7UUFDdEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0YsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXhHLElBQUksSUFBSSxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLENBQ0wsTUFBTSxDQUFDLGNBQWMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNO1lBQ3BELDRCQUE0QixDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsaUJBQWlCO1lBQzlELENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQVU7UUFDckMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdFLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV4RyxJQUFJLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0RCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxDQUNMLDRCQUE0QixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQzdELENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDaEcsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxDQUFNO1FBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRCxPQUFPLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNyRCxDQUFDO0lBRU8scUJBQXFCLENBQUMsS0FBVTtRQUN0QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTlELElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLGNBQWMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxjQUFjLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFVO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ25ELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RixPQUFPLENBQ0wsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FDakgsQ0FBQztJQUNKLENBQUM7OztZQXhwQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0Qiw2MENBQTBDO2dCQUMxQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7d0JBQ2pELEtBQUssRUFBRSxJQUFJO3FCQUNaO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3dCQUNqRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7WUEzRUMsVUFBVTtZQU9ILGlCQUFpQjtZQVR4QixpQkFBaUI7OztzQkErRWhCLFNBQVMsU0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7NkJBd0NuRCxLQUFLLFNBQUMsbUJBQW1CO2dDQWdDekIsS0FBSyxTQUFDLHNCQUFzQjtxQkFpQzVCLEtBQUssU0FBQyxVQUFVO2tCQVloQixLQUFLLFNBQUMsT0FBTztrQkF1QmIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBtaW5GYWlsZWQsIG1heEZhaWxlZCB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgY29udmVydFRvSW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XHJcbmltcG9ydCB7IFBvSW5wdXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8taW5wdXQvcG8taW5wdXQtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuY29uc3QgcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoID0gMjtcclxuY29uc3QgcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoID0gMTM7XHJcbmNvbnN0IHBvRGVjaW1hbE1heERlY2ltYWxzTGVuZ3RoID0gMTU7XHJcbmNvbnN0IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgPSAxNjtcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAZG9jc0V4dGVuZHMgUG9JbnB1dEJhc2VDb21wb25lbnRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIDxicj5cclxuICogLSBPIGBwby1kZWNpbWFsYCDDqSB1bSAqaW5wdXQqIGVzcGVjw61maWNvIHBhcmEgcmVjZWJlciBhcGVuYXMgbsO6bWVyb3MgZGVjaW1haXMsIHBvciBpc3NvIHJlY2ViZSBhcyBzZWd1aW50ZXMgY2FyYWN0ZXLDrXN0aWNhczpcclxuICogICsgQWNlaXRhIGFwZW5hcyBuw7ptZXJvcztcclxuICogICsgVXRpbGl6YSAnLCcgY29tbyBzZXBhcmFkb3IgZGUgZGVjaW1hbDtcclxuICogICsgVXRpbGl6YSAnLicgcGFyYSBzZXBhcmHDp8OjbyBkZSBtaWxoYXI7XHJcbiAqICArIMOJIHBvc3PDrXZlbCBjb25maWd1cmFyIGEgcXVhbnRpZGFkZSBkZSBjYXNhcyBkZWNpbWFpcyBlIGEgcXVhbnRpZGFkZSBkZSBkaWdpdG9zIGRvIGNhbXBvLlxyXG4gKlxyXG4gKiA+ICoqSW1wb3J0YW50ZToqKlxyXG4gKiBBdHVhbG1lbnRlIG8gSmF2YVNjcmlwdCBsaW1pdGEtc2UgYSB1bSBjb25qdW50byBkZSBkYWRvcyBkZSBgMzIgYml0c2AsIGUgcGFyYSBxdWUgb3MgdmFsb3JlcyBjb21wb3J0ZW0tc2UgZGV2aWRhbWVudGUsXHJcbiAqIG8gYHBvLWRlY2ltYWxgIGNvbnTDqW0gdW0gdHJhdGFtZW50byBxdWUgbGltaXRhIGVtIDE2IG8gbsO6bWVybyB0b3RhbCBkZSBjYXNhcyBhbnRlcyBlIGFww7NzIGEgdsOtcmd1bGEuXHJcbiAqIFZlamEgYWJhaXhvIGFzIGRlbWFpcyByZWdyYXMgbmFzIGRvY3VtZW50YcOnw7VlcyBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGUgYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtYmFzaWNcIiB0aXRsZT1cIlBPIERlY2ltYWwgQmFzaWNcIj5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy9zYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMvc2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKlxyXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1sYWJzXCIgdGl0bGU9XCJQTyBEZWNpbWFsIExhYnNcIj5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1sYWJzL3NhbXBsZS1wby1kZWNpbWFsLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWxhYnMvc2FtcGxlLXBvLWRlY2ltYWwtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWhvdXJseS13YWdlXCIgdGl0bGU9XCJQTyBEZWNpbWFsIC0gSG91cmx5IFdhZ2VcIj5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2Uvc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKlxyXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBEZWNpbWFsIC0gSG91cmx5IFdhZ2UgUmVhY3RpdmUgRm9ybVwiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncG8tZGVjaW1hbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWRlY2ltYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EZWNpbWFsQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGVjaW1hbENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9EZWNpbWFsQ29tcG9uZW50IGV4dGVuZHMgUG9JbnB1dEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgX2RlY2ltYWxzTGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xyXG4gIHByaXZhdGUgX3Rob3VzYW5kTWF4bGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoO1xyXG4gIHByaXZhdGUgX2xvY2FsZT86IHN0cmluZztcclxuICBwcml2YXRlIF9taW4/OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfbWF4PzogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcclxuICBwcml2YXRlIGZpcmVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlzS2V5Ym9hcmRBbmRyb2lkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBtaW51c1NpZ246IHN0cmluZyA9ICctJztcclxuICBwcml2YXRlIG9sZERvdHNMZW5ndGggPSBudWxsO1xyXG4gIHByaXZhdGUgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZztcclxuICBwcml2YXRlIHZhbHVlQmVmb3JlQ2hhbmdlOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgcmVnZXggPSB7XHJcbiAgICB0aG91c2FuZDogbmV3IFJlZ0V4cCgnXFxcXCcgKyAnLCcsICdnJyksXHJcbiAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArICcuJywgJ2cnKVxyXG4gIH07XHJcblxyXG4gIGdldCBhdXRvY29tcGxldGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBRdWFudGlkYWRlIG3DoXhpbWEgZGUgY2FzYXMgZGVjaW1haXMuXHJcbiAgICpcclxuICAgKiA+ICoqSW1wb3J0YW50ZToqKlxyXG4gICAqIC0gTyB2YWxvciBtw6F4aW1vIHBlcm1pdGlkbyDDqSAxNTtcclxuICAgKiAtIEEgc29tYSB0b3RhbCBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGNvbSBgcC10aG91c2FuZC1tYXhsZW5ndGhgIGxpbWl0YS1zZSDDoCAxNjtcclxuICAgKiAtIEVzdGEgcHJvcHJpZWRhZGUgc29icmVww7VlIGFwZW5hcyBvIHZhbG9yICoqcGFkcsOjbyoqIGRlIGBwLXRob3VzYW5kLW1heGxlbmd0aGA7XHJcbiAgICogLSBDYXNvIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgdGVuaGEgdW0gdmFsb3IgZGVmaW5pZG8sIGVzdGEgcHJvcHJpZWRhZGUgcG9kZXLDoSByZWNlYmVyIGFwZW5hcyBvIHZhbG9yIHJlc3RhbnRlIGRvIGxpbWl0ZSB0b3RhbCAoMTYpLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYDJgXHJcbiAgICovXHJcbiAgQElucHV0KCdwLWRlY2ltYWxzLWxlbmd0aCcpIHNldCBkZWNpbWFsc0xlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgZGVjaW1hbHNMZW5ndGggPSBjb252ZXJ0VG9JbnQodmFsdWUpO1xyXG5cclxuICAgIGRlY2ltYWxzTGVuZ3RoID0gdGhpcy5pc1ZhbHVlQmV0d2VlbkFsbG93ZWQoZGVjaW1hbHNMZW5ndGgsIHBvRGVjaW1hbE1heERlY2ltYWxzTGVuZ3RoKVxyXG4gICAgICA/IGRlY2ltYWxzTGVuZ3RoXHJcbiAgICAgIDogcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xyXG5cclxuICAgIGlmICh0aGlzLmlzR3JlYXRlclRoYW5Ub3RhbExlbmd0aExpbWl0KGRlY2ltYWxzTGVuZ3RoLCB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoKSkge1xyXG4gICAgICB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoID0gcG9EZWNpbWFsVG90YWxMZW5ndGhMaW1pdCAtIGRlY2ltYWxzTGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2RlY2ltYWxzTGVuZ3RoID0gZGVjaW1hbHNMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVjaW1hbHNMZW5ndGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjaW1hbHNMZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogUXVhbnRpZGFkZSBtw6F4aW1hIGRlIGTDrWdpdG9zIGFudGVzIGRvIHNlcGFyYWRvciBkZWNpbWFsLlxyXG4gICAqXHJcbiAgICogPiAqKkltcG9ydGFudGU6KipcclxuICAgKiAtIE8gdmFsb3IgbcOheGltbyBwZXJtaXRpZG8gw6kgMTM7XHJcbiAgICogLSBBIHNvbWEgdG90YWwgZGUgYHAtZGVjaW1hbHMtbGVuZ3RoYCBjb20gYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYCBsaW1pdGEtc2Ugw6AgMTY7XHJcbiAgICogLSBFc3RhIHByb3ByaWVkYWRlIHNvYnJlcMO1ZSBvIHZhbG9yIGRlZmluaWRvIGVtIGBwLWRlY2ltYWxzLWxlbmd0aGAuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgMTNgXHJcbiAgICovXHJcbiAgQElucHV0KCdwLXRob3VzYW5kLW1heGxlbmd0aCcpIHNldCB0aG91c2FuZE1heGxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgdGhvdXNhbmRNYXhsZW5ndGggPSBjb252ZXJ0VG9JbnQodmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID4gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoICYmICF0aG91c2FuZE1heGxlbmd0aCkge1xyXG4gICAgICB0aG91c2FuZE1heGxlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSB0aGlzLmRlY2ltYWxzTGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHRob3VzYW5kTWF4bGVuZ3RoID0gdGhpcy5pc1ZhbHVlQmV0d2VlbkFsbG93ZWQodGhvdXNhbmRNYXhsZW5ndGgsIHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aClcclxuICAgICAgPyB0aG91c2FuZE1heGxlbmd0aFxyXG4gICAgICA6IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aDtcclxuXHJcbiAgICBpZiAodGhpcy5pc0dyZWF0ZXJUaGFuVG90YWxMZW5ndGhMaW1pdCh0aGlzLmRlY2ltYWxzTGVuZ3RoLCB0aG91c2FuZE1heGxlbmd0aCkpIHtcclxuICAgICAgdGhpcy5kZWNpbWFsc0xlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSB0aG91c2FuZE1heGxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90aG91c2FuZE1heGxlbmd0aCA9IHRob3VzYW5kTWF4bGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRob3VzYW5kTWF4bGVuZ3RoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rob3VzYW5kTWF4bGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIEluZm9ybWEgbyBsb2NhbGUocGHDrXMpIHBhcmEgYSBmb3JtYXRhw6fDo28gZG8gdmFsb3IuXHJcbiAgICogUG9yIHBhZHLDo28gbyB2YWxvciBzZXLDoSBjb25maWd1cmFkbyBzZWd1bmRvIGEgbyBtw7NkdWxvIFtgSTE4bmBdKGRvY3VtZW50YXRpb24vcG8taTE4bilcclxuICAgKlxyXG4gICAqID4gUGFyYSB2ZXIgcXVhaXMgbGluZ3VhZ2VucyBzdXBvcnRhZGFzIGFjZXNzZSBbYEkxOG5gXShkb2N1bWVudGF0aW9uL3BvLWkxOG4pXHJcbiAgICpcclxuICAgKi9cclxuICBASW5wdXQoJ3AtbG9jYWxlJykgc2V0IGxvY2FsZShsb2NhbGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlO1xyXG4gICAgdGhpcy5zZXROdW1iZXJzU2VwYXJhdG9ycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIFZhbG9yIG3DrW5pbW8uXHJcbiAgICovXHJcbiAgQElucHV0KCdwLW1pbicpIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5fbWluID0gdmFsdWU7XHJcblxyXG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwoKTtcclxuICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX21pbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBWYWxvciBtw6F4aW1vLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1tYXgnKSBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xyXG5cclxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XHJcbiAgICB9IGVsc2UgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9tYXggPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBtYXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXg7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHBvTGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSwgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihjZCk7XHJcbiAgICB0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldE51bWJlcnNTZXBhcmF0b3JzKCk7XHJcbiAgfVxyXG5cclxuICBzZXROdW1iZXJzU2VwYXJhdG9ycygpIHtcclxuICAgIGNvbnN0IHsgZGVjaW1hbFNlcGFyYXRvciwgdGhvdXNhbmRTZXBhcmF0b3IgfSA9IHRoaXMucG9MYW5ndWFnZVNlcnZpY2UuZ2V0TnVtYmVyU2VwYXJhdG9ycyh0aGlzLl9sb2NhbGUpO1xyXG4gICAgdGhpcy5kZWNpbWFsU2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvcjtcclxuICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPSB0aG91c2FuZFNlcGFyYXRvcjtcclxuICAgIHRoaXMucmVnZXggPSB7XHJcbiAgICAgIHRob3VzYW5kOiBuZXcgUmVnRXhwKCdcXFxcJyArIHRob3VzYW5kU2VwYXJhdG9yLCAnZycpLFxyXG4gICAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArIGRlY2ltYWxTZXBhcmF0b3IsICdnJylcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnZlcmlmeUF1dG9Gb2N1cygpO1xyXG4gICAgdGhpcy5zZXRQYWRkaW5nSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKHZhbHVlKSB7XHJcbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB0aGlzLmNvbnRyb2xDaGFuZ2VFbWl0dGVyKCk7XHJcbiAgfVxyXG5cclxuICBleHRyYVZhbGlkYXRpb24oYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIC8vIFZlcmlmaWNhIHNlIGrDoSBwb3NzdWkgYWxndW0gZXJyb3IgcGF0dGVybiBwYWRyw6NvLlxyXG4gICAgdGhpcy5lcnJvclBhdHRlcm4gPSB0aGlzLmVycm9yUGF0dGVybiAhPT0gJ1ZhbG9yIEludsOhbGlkbycgPyB0aGlzLmVycm9yUGF0dGVybiA6ICcnO1xyXG5cclxuICAgIGlmIChtaW5GYWlsZWQodGhpcy5taW4sIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtaW46IHtcclxuICAgICAgICAgIHZhbGlkOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF4RmFpbGVkKHRoaXMubWF4LCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbWF4OiB7XHJcbiAgICAgICAgICB2YWxpZDogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsID8gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgOiAnJztcclxuICB9XHJcblxyXG4gIGhhc0ludmFsaWRDbGFzcygpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpICYmXHJcbiAgICAgIHRoaXMuZ2V0U2NyZWVuVmFsdWUoKSAhPT0gJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYXNMZXR0ZXJzKHZhbHVlOiBzdHJpbmcgPSAnJykge1xyXG4gICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9bYS16QS1aOjsrPV/CtGBeflwiJz8hQCMkJcKoJiooKT48e33Dp8OHXFxbXFxdL1xcXFx8XSsvKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWROdW1iZXIoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgLy8gLSBldmVudC5rZXkgbsOjbyBleGlzdGlhIGVtIGFsZ3VucyBicm93c2VycywgY29tbyBTYW1zdW5nIGJyb3dzZXIgZSBGaXJlZm94LlxyXG4gICAgY29uc3Qga2V5VmFsdWUgPSA8YW55PlN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQud2hpY2gpO1xyXG4gICAgY29uc3QgdmFsaWRLZXkgPSBldmVudC53aGljaCAhPT0gOCAmJiBldmVudC53aGljaCAhPT0gMDtcclxuXHJcbiAgICByZXR1cm4gIXRoaXMuaGFzTGV0dGVycyhrZXlWYWx1ZSkgJiYgdmFsaWRLZXk7XHJcbiAgfVxyXG5cclxuICAvLyBmdW7Dp8OjbyByZXNwb25zw6F2ZWwgcG9yIGFkaWNpb25hciBvcyB6ZXJvZXMgY29tIGFzIGNhc2EgZGVjaW1haXMgYW8gc2FpciBkbyBjYW1wby5cclxuICBvbkJsdXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQ/LigpO1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcblxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0xldHRlcnModmFsdWUpIHx8IHRoaXMuY29udGFpbnNNb3JlVGhhbk9uZURlY2ltYWxTZXBhcmF0b3IodmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoJycpO1xyXG4gICAgICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvciA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdFRvVmlld1ZhbHVlKHZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcclxuICAgIHRoaXMuY29udHJvbENoYW5nZUVtaXR0ZXIoKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIC8vIEF0dWFsaXphIHZhbG9yIGRhIHZhcmnDoXZlbCBxdWUgc2Vyw6EgdXNhZGEgcGFyYSB2ZXJpZmljYXIgc2UgbyBjYW1wbyB0ZXZlIGFsdGVyYcOnw6NvXHJcbiAgICB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlID0gdGhpcy5nZXRTY3JlZW5WYWx1ZSgpO1xyXG5cclxuICAgIC8vIERpc3BhcmEgZXZlbnRvIHF1YW5kbyBvIHVzdcOhcmlvIGVudHJhciBubyBjYW1wb1xyXG4gICAgLy8gRXN0ZSBldmVudG8gdGFtYsOpbSDDqSBkaXNwYXJhZG8gcXVhbmRvIG8gY2FtcG8gaW5pY2lhIGNvbSBmb2NvLlxyXG4gICAgdGhpcy5lbnRlci5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbklucHV0KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZDtcclxuXHJcbiAgICBsZXQgbW9kZWxWYWx1ZTtcclxuXHJcbiAgICAvLyAtIEJyb3dzZXJzIG5hdGl2b3MgZG8gQW5kcm9pZCBleDogU2Ftc3VuZyBCcm93c2VyLlxyXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZEFuZHJvaWQpIHtcclxuICAgICAgdGhpcy5vbklucHV0S2V5Ym9hcmRBbmRyb2lkKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlbFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgbW9kZWxWYWx1ZSA9IHRoaXMuYWRkWmVyb0JlZm9yZShtb2RlbFZhbHVlKTtcclxuICAgIGNvbnN0IHZpZXdWYWx1ZSA9IHRoaXMuZm9ybWF0TWFzayhtb2RlbFZhbHVlKTtcclxuXHJcbiAgICAvLyB2YWxpZGHDp8OjbyBwYXJhIG7Do28gcXVlYnJhciBJRSBjb20gcGxhY2Vob2xkZXIgZGVmaW5pZG8gZSBJbnB1dCB2YXppb1xyXG4gICAgaWYgKHZpZXdWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh2aWV3VmFsdWUpO1xyXG4gICAgICB0aGlzLnNldEN1cnNvcklucHV0KGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLmZvcm1hdFRvTW9kZWxWYWx1ZShtb2RlbFZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICBvbklucHV0S2V5Ym9hcmRBbmRyb2lkKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IGhhc0xldHRlcnMgPSB0aGlzLmhhc0xldHRlcnMoaW5wdXRWYWx1ZSk7XHJcblxyXG4gICAgaWYgKGhhc0xldHRlcnMpIHtcclxuICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoaW5wdXRWYWx1ZS5yZXBsYWNlKGhhc0xldHRlcnNbMF0sICcnKSk7XHJcblxyXG4gICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQgLSAxO1xyXG4gICAgICBjb25zdCBrZXkgPSBpbnB1dFZhbHVlLmNoYXJBdChwb3NpdGlvbik7XHJcblxyXG4gICAgICB0aGlzLnNldFBvc2l0aW9uVmFsdWUoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNWYWxpZEtleShldmVudCwga2V5KSkge1xyXG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGlucHV0VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICB0aGlzLmlzVmFsaWRLZXkoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFkZGluZ0lucHV0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdG9ySWNvbnMgPSAnLnBvLWZpZWxkLWljb24tY29udGFpbmVyOm5vdCgucG8tZmllbGQtaWNvbi1jb250YWluZXItbGVmdCkgPiAucG8taWNvbic7XHJcbiAgICAgIGxldCBpY29ucyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ySWNvbnMpLmxlbmd0aDtcclxuICAgICAgaWYgKHRoaXMuY2xlYW4pIHtcclxuICAgICAgICBpY29ucysrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpY29ucykge1xyXG4gICAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke2ljb25zICogMzZ9cHhgO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWVNb2RlbCh2YWx1ZSkge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRFbCkge1xyXG4gICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcclxuICAgICAgICBjb25zdCBmb3JtYXRlZFZpZXdWYWx1ZSA9IHRoaXMuZm9ybWF0VG9WaWV3VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGZvcm1hdGVkVmlld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSgnJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclBhdHRlcm5NZXNzYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JQYXR0ZXJuICE9PSAnJyAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5lcnJvclBhdHRlcm4gOiAnJztcclxuICB9XHJcblxyXG4gIC8vIHJlc3BvbnPDoXZlbCBwb3IgYWRpY2lvbmFyIDAgYW50ZXMgZGEgdmlyZ3VsYSAoZGVjaW1hbFNlcGFyYXRvcikuXHJcbiAgcHJpdmF0ZSBhZGRaZXJvQmVmb3JlKHZhbHVlKSB7XHJcbiAgICBjb25zdCBpc0RlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xyXG5cclxuICAgIHJldHVybiBpc0RlY2ltYWxTZXBhcmF0b3IgPyBgMCR7dmFsdWV9YCA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250YWluc0NvbW1hKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXModGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udGFpbnNNb3JlVGhhbk9uZURlY2ltYWxTZXBhcmF0b3IodmFsdWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBjb25zdCBmb3VuZENvbW1hID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC5kZWNpbWFsKTtcclxuXHJcbiAgICByZXR1cm4gISEoZm91bmRDb21tYSAmJiBmb3VuZENvbW1hLmxlbmd0aCA+IDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250cm9sQ2hhbmdlRW1pdHRlcigpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IHRoaXMuZ2V0U2NyZWVuVmFsdWUoKTtcclxuXHJcbiAgICAvLyBFbWl0ZSBvIGV2ZW50byBjaGFuZ2UgbWFudWFsbWVudGUgcXVhbmRvIG8gY2FtcG8gw6kgYWx0ZXJhZG9cclxuICAgIC8vIEVzdGUgZXZlbnRvIMOpIGNvbnRyb2xhZG8gbWFudWFsbWVudGUgZGV2aWRvIGFvIHByZXZlbnREZWZhdWx0IGV4aXN0ZW50ZSBuYSBtw6FzY2FyYVxyXG4gICAgLy8gZSBkZXZpZG8gYW8gY29udHJvbGUgZG8gcC1jbGVhbiwgcXVlIHRhbWLDqW0gcHJlY2lzYSBlbWl0aXIgY2hhbmdlXHJcbiAgICBpZiAoZWxlbWVudFZhbHVlICE9PSB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoZWxlbWVudFZhbHVlKTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0TWFzayh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAvLyBuZWNlc3PDoXJpbyBwYXJhIG7Do28gYWRpY2lvbmFyIC4gbmFzIGNhc2EgZGVjaW1haXMuXHJcbiAgICAvLyBwb3IgZXhlbXBsbzogMTIuMzQ1LDEyMy40NSAoZXJyYWRvKVxyXG4gICAgLy8gMTIuMzQ1LDEyMzQ1IChjb3JyZXRvKVxyXG5cclxuICAgIGlmICh2YWx1ZS5tYXRjaCh0aGlzLnJlZ2V4LmRlY2ltYWwpKSB7XHJcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgKFxcXFxkKSg/PShcXFxcZHszfSkrKD8hXFxcXGQpJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9KWAsICdnJyk7XHJcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UocmVnZXgsIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyg/IVxcZCkpL2csIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VG9Nb2RlbFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5yZXBsYWNlQ29tbWFUb0RvdCh2YWx1ZSk7XHJcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlID8gcGFyc2VGbG9hdChOdW1iZXIoZm9ybWF0dGVkVmFsdWUpLnRvRml4ZWQodGhpcy5kZWNpbWFsc0xlbmd0aCkpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiBwYXJzZWRWYWx1ZSA9PT0gMCB8fCBwYXJzZWRWYWx1ZSA/IHBhcnNlZFZhbHVlIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRUb1ZpZXdWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAvLyAtIE5lY2Vzc8OhcmlvIHBhcmEgdHJhdGFyIHZhbG9yZXMgcXVlIGNvbnRlbmhhbSBkZWNpbWFsU2VwYXJhdG9yXHJcbiAgICB2YWx1ZSA9IHRoaXMucmVwbGFjZUNvbW1hVG9Eb3QodmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IG51bWJlclZhbHVlID0gTnVtYmVyKHZhbHVlKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHNMZW5ndGgpO1xyXG5cclxuICAgIGNvbnN0IHZhbHVlQmVmb3JlRG90ID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihudW1iZXJWYWx1ZSwgJy4nKTtcclxuICAgIGNvbnN0IHZhbHVlQWZ0ZXJEb3QgPSB0aGlzLmdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IobnVtYmVyVmFsdWUsICcuJyk7XHJcblxyXG4gICAgY29uc3QgZm9ybWF0ZWROdW1iZXIgPSB0aGlzLmZvcm1hdE1hc2sodmFsdWVCZWZvcmVEb3QpO1xyXG5cclxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmb3JtYXRlZE51bWJlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHtmb3JtYXRlZE51bWJlcn0ke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn0ke3ZhbHVlQWZ0ZXJEb3R9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodmFsdWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHRoaXMucmVnZXgudGhvdXNhbmQsICcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVBZnRlclNlcGFyYXRvcih2YWx1ZSA9ICcnLCBzZXBhcmF0b3IpIHtcclxuICAgIHJldHVybiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpWzFdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcih2YWx1ZSA9ICcnLCBzZXBhcmF0b3IpIHtcclxuICAgIHJldHVybiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpWzBdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNMZXNzRG90KHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgZG90cyA9IHZhbHVlLm1hdGNoKHRoaXMucmVnZXgudGhvdXNhbmQpO1xyXG4gICAgICBjb25zdCBkb3RzTGVuZ3RoID0gZG90cyAmJiBkb3RzLmxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChkb3RzTGVuZ3RoIDwgdGhpcy5vbGREb3RzTGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gZG90c0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc01vcmVEb3QodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBkb3RzID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC50aG91c2FuZCk7XHJcbiAgICAgIGNvbnN0IGRvdHNMZW5ndGggPSBkb3RzICYmIGRvdHMubGVuZ3RoO1xyXG5cclxuICAgICAgaWYgKGRvdHNMZW5ndGggPiB0aGlzLm9sZERvdHNMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBkb3RzTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzTWludXNTaWduSW52YWxpZFBvc2l0aW9uKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGtleUlzTWludXNTaWduID0gZXZlbnQua2V5ID09PSB0aGlzLm1pbnVzU2lnbjtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG5cclxuICAgIHJldHVybiBrZXlJc01pbnVzU2lnbiAmJiBzZWxlY3Rpb25TdGFydCAhPT0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNJbnZhbGlkS2V5KGV2ZW50OiBhbnksIGNoYXJDb2RlOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzSW52YWxpZE51bWJlciA9ICF0aGlzLmlzVmFsaWROdW1iZXIoZXZlbnQpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudmVyaWZ5SW5zZXJ0Q29tbWEoZXZlbnQpIHx8XHJcbiAgICAgIHRoaXMudmVyaWZ5VGhvdXNhbmRMZW5ndGgoZXZlbnQpIHx8XHJcbiAgICAgIHRoaXMudmVyaWZ5VmFsdWVBZnRlckNvbW1hKGV2ZW50KSB8fFxyXG4gICAgICB0aGlzLnZlcmlmeUluc2VydE1pbnVzU2lnbihldmVudCkgfHxcclxuICAgICAgdGhpcy5oYXNNaW51c1NpZ25JbnZhbGlkUG9zaXRpb24oZXZlbnQpIHx8XHJcbiAgICAgIGlzSW52YWxpZE51bWJlciB8fFxyXG4gICAgICB0aGlzLnZhbGlkYXRlQ3Vyc29yUG9zaXRpb25CZWZvcmVTZXBhcmF0b3IoZXZlbnQpIHx8XHJcbiAgICAgIHRoaXMudmVyaWZ5RGVjaW1hbExlbmd0aElzWmVyb0FuZEtleVByZXNzZWRJc0NvbW1hKGNoYXJDb2RlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNHcmVhdGVyVGhhblRvdGFsTGVuZ3RoTGltaXQoZGVjaW1hbHNNYXhMZW5ndGg6IG51bWJlciwgdGhvdXNhbmRNYXhsZW5ndGg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIGRlY2ltYWxzTWF4TGVuZ3RoICsgdGhvdXNhbmRNYXhsZW5ndGggPiBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0tleURlY2ltYWxTZXBhcmF0b3IoZXZlbnQpIHtcclxuICAgIHJldHVybiBldmVudC5rZXkgPT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvciB8fCBldmVudC5jaGFyID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUG9zaXRpb25BZnRlckRlY2ltYWxTZXBhcmF0b3IocG9zaXRpb25DdXJzb3IsIHZhbHVlKSB7XHJcbiAgICBjb25zdCBpbmRleENvbW1hID0gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZih0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xyXG5cclxuICAgIGlmIChpbmRleENvbW1hICYmIHRoaXMuZGVjaW1hbHNMZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBwb3NpdGlvbkN1cnNvciA+IGluZGV4Q29tbWE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0OiBhbnkpIHtcclxuICAgIHJldHVybiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgIT09IHRhcmdldC5zZWxlY3Rpb25FbmQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmFsaWRLZXkoZXZlbnQ6IGFueSwga2V5Pzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7XHJcbiAgICBjb25zdCB2YWxpZEtleSA9IGV2ZW50LndoaWNoID09PSA4IHx8IGV2ZW50LndoaWNoID09PSAwO1xyXG5cclxuICAgIGlmICh2YWxpZEtleSAmJiAhdGhpcy5pc0tleWJvYXJkQW5kcm9pZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBldmVudC5rZXkgPSBrZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNJbnZhbGlkS2V5KGV2ZW50LCBjaGFyQ29kZSkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmFsdWVCZXR3ZWVuQWxsb3dlZCh2YWx1ZTogbnVtYmVyLCBtYXhBbGxvd2VkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IG1heEFsbG93ZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBRdWFuZG8gZGVjaW1hbHNMZW5ndGggZm9yIDAgbsOjbyBkZXZlIHBlcm1pdGlyIGluZm9ybWFyIHbDrXJndWxhIChkZWNpbWFsU2VwYXJhdG9yKVxyXG4gIHByaXZhdGUgdmVyaWZ5RGVjaW1hbExlbmd0aElzWmVyb0FuZEtleVByZXNzZWRJc0NvbW1hKGNoYXJDb2RlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gNDQgJiYgdGhpcy5kZWNpbWFsc0xlbmd0aCA9PT0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmVyaWZ5QXV0b0ZvY3VzKCkge1xyXG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5pdGlhbFNlbGVjdGlvblJhbmdlKHRhcmdldDogYW55LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7XHJcbiAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPT09IDEgJiYgc2VsZWN0aW9uRW5kID09PSAxKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgKyAxLCBzZWxlY3Rpb25FbmQgKyAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgLSAxLCBzZWxlY3Rpb25FbmQgLSAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVwbGFjZUF0KHZhbHVlLCBpbmRleCwgcmVwbGFjZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcGxhY2VDb21tYVRvRG90KHZhbHVlOiBzdHJpbmcgPSAnJykge1xyXG4gICAgaWYgKHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9PT0gJywnKSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHRoaXMucmVnZXguZGVjaW1hbCwgJy4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEN1cnNvcklucHV0KGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCB2aWV3VmFsdWUgPSB0YXJnZXQudmFsdWU7XHJcblxyXG4gICAgLy8gQ2FzbyBob3V2ZXIgbWFpcyAuIGRvIHF1ZSBhbnRlcmlvcm1lbnRlIHNvbWEgbyB2YWxvciBjb20gMS5cclxuICAgIGlmICh0aGlzLmhhc01vcmVEb3Qodmlld1ZhbHVlKSB8fCB2aWV3VmFsdWUgPT09ICcwJyArIHRoaXMuZGVjaW1hbFNlcGFyYXRvcikge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uRW5kICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FzbyBob3V2ZXIgbWVub3MgLiBkbyBxdWUgYW50ZXJpb3JtZW50ZSBzdWJ0cmFpIG8gdmFsb3IgcG9yIDEuXHJcbiAgICBpZiAodGhpcy5oYXNMZXNzRG90KHZpZXdWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5zZXRJbml0aWFsU2VsZWN0aW9uUmFuZ2UodGFyZ2V0LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBvc2l0aW9uVmFsdWUoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDE7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID4gMCAmJiBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduKSB7XHJcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbikgKyB2YWx1ZS5zdWJzdHIocG9zaXRpb24gKyAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Vmlld1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlQ3Vyc29yUG9zaXRpb25CZWZvcmVTZXBhcmF0b3IoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodGFyZ2V0LnZhbHVlKTtcclxuICAgIGNvbnN0IHZhbHVlQmVmb3JlU2VwYXJhdG9yID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcih0YXJnZXQudmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XHJcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPD0gdmFsdWVCZWZvcmVTZXBhcmF0b3IubGVuZ3RoICYmXHJcbiAgICAgIHZhbHVlQmVmb3JlU2VwYXJhdG9yT3JpZ2luYWwubGVuZ3RoID09PSB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmlzS2V5RGVjaW1hbFNlcGFyYXRvcihldmVudClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZlcmlmeVRob3VzYW5kTGVuZ3RoKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHRhcmdldC52YWx1ZSk7XHJcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsLmxlbmd0aCA+PSB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmlzS2V5RGVjaW1hbFNlcGFyYXRvcihldmVudCkgJiZcclxuICAgICAgdGhpcy5pc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHRhcmdldC5zZWxlY3Rpb25TdGFydCAtIHRoaXMuZGVjaW1hbHNMZW5ndGgsIHRhcmdldC52YWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZlcmlmeUluc2VydENvbW1hKGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaGFzQ29tbWEgPSB0aGlzLmNvbnRhaW5zQ29tbWEoZS50YXJnZXQudmFsdWUpO1xyXG5cclxuICAgIHJldHVybiBoYXNDb21tYSAmJiBlLmtleSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2ZXJpZnlJbnNlcnRNaW51c1NpZ24oZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBpbmRleE1pbnVzU2lnbiA9IHZhbHVlLmxhc3RJbmRleE9mKHRoaXMubWludXNTaWduKSAhPT0gLTE7XHJcbiAgICBjb25zdCBwb3NpdGlvbk1pbnVzU2lnbiA9IHZhbHVlLmxhc3RJbmRleE9mKCctJyk7XHJcbiAgICBjb25zdCBvY2N1cmFuY2VzTWludXNTaWduID0gdmFsdWUubWF0Y2gobmV3IFJlZ0V4cCgnLScsICdnJykpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkICYmIGluZGV4TWludXNTaWduICYmIG9jY3VyYW5jZXNNaW51c1NpZ24ubGVuZ3RoID4gMSkge1xyXG4gICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLnJlcGxhY2VBdCh2YWx1ZSwgcG9zaXRpb25NaW51c1NpZ24sICcnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleE1pbnVzU2lnbiAmJiBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2ZXJpZnlWYWx1ZUFmdGVyQ29tbWEoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IHZhbHVlQWZ0ZXJTZXBhcmF0b3IgPSB0aGlzLmdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IodmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5pc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHNlbGVjdGlvblN0YXJ0LCB2YWx1ZSkgJiYgdmFsdWVBZnRlclNlcGFyYXRvci5sZW5ndGggPj0gdGhpcy5kZWNpbWFsc0xlbmd0aFxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19