@dev-tcloud/tcloud-ui 2.4.14 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +3 -1
  2. package/esm2022/dev-tcloud-tcloud-ui.mjs +4 -4
  3. package/esm2022/lib/_directives/align/align.directive.mjs +42 -42
  4. package/esm2022/lib/_directives/currency/currency.directive.mjs +160 -160
  5. package/esm2022/lib/_directives/directives.module.mjs +39 -39
  6. package/esm2022/lib/_directives/el-copy/el-copy.directive.mjs +68 -68
  7. package/esm2022/lib/_directives/hover-parent/hover-parent.directive.mjs +58 -58
  8. package/esm2022/lib/_directives/tooltip/tooltip.directive.mjs +151 -151
  9. package/esm2022/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.mjs +34 -34
  10. package/esm2022/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.mjs +54 -54
  11. package/esm2022/lib/_modules/tcloud-ui-accordion/services/tcloud-ui-accordion.service.mjs +37 -37
  12. package/esm2022/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.mjs +75 -75
  13. package/esm2022/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.module.mjs +34 -34
  14. package/esm2022/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.component.mjs +87 -87
  15. package/esm2022/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.module.mjs +31 -31
  16. package/esm2022/lib/_modules/tcloud-ui-data-list/services/data-list.service.mjs +37 -37
  17. package/esm2022/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list-option/tcloud-ui-data-list-option.component.mjs +65 -65
  18. package/esm2022/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.mjs +317 -317
  19. package/esm2022/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.mjs +2 -2
  20. package/esm2022/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.module.mjs +36 -36
  21. package/esm2022/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.mjs +440 -440
  22. package/esm2022/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.module.mjs +31 -31
  23. package/esm2022/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.mjs +320 -320
  24. package/esm2022/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.module.mjs +39 -39
  25. package/esm2022/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.mjs +213 -213
  26. package/esm2022/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.mjs +537 -534
  27. package/esm2022/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.mjs +19 -19
  28. package/esm2022/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.module.mjs +44 -44
  29. package/esm2022/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.component.mjs +142 -142
  30. package/esm2022/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.module.mjs +31 -31
  31. package/esm2022/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.mjs +66 -66
  32. package/esm2022/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.module.mjs +31 -31
  33. package/esm2022/lib/_modules/tcloud-ui-label-token/tcloud-ui-label-token.component.mjs +36 -36
  34. package/esm2022/lib/_modules/tcloud-ui-label-token/tcloud-ui-label-token.module.mjs +30 -30
  35. package/esm2022/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.component.mjs +93 -93
  36. package/esm2022/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.module.mjs +24 -24
  37. package/esm2022/lib/_modules/tcloud-ui-line-step-title/tcloud-ui-line-step-title.component.mjs +42 -42
  38. package/esm2022/lib/_modules/tcloud-ui-line-step-title/tcloud-ui-line-step-title.mjs +1 -1
  39. package/esm2022/lib/_modules/tcloud-ui-line-step-title/tcloud-ui-line-step-title.module.mjs +18 -18
  40. package/esm2022/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component.mjs +65 -65
  41. package/esm2022/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.module.mjs +24 -24
  42. package/esm2022/lib/_modules/tcloud-ui-loading/components/tcloud-ui-cubes/tcloud-ui-cubes.component.mjs +10 -10
  43. package/esm2022/lib/_modules/tcloud-ui-loading/tcloud-ui-loading.component.mjs +29 -29
  44. package/esm2022/lib/_modules/tcloud-ui-loading/tcloud-ui-loading.module.mjs +20 -20
  45. package/esm2022/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-body/tcloud-ui-modal-body.component.mjs +13 -13
  46. package/esm2022/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-footer/tcloud-ui-modal-footer.component.mjs +61 -61
  47. package/esm2022/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-header/tcloud-ui-modal-header.component.mjs +24 -24
  48. package/esm2022/lib/_modules/tcloud-ui-modal/services/tcloud-modal.service.mjs +63 -63
  49. package/esm2022/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.component.mjs +203 -203
  50. package/esm2022/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.mjs +1 -1
  51. package/esm2022/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.module.mjs +46 -46
  52. package/esm2022/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.mjs +152 -152
  53. package/esm2022/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.module.mjs +27 -27
  54. package/esm2022/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.component.mjs +167 -167
  55. package/esm2022/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.module.mjs +27 -27
  56. package/esm2022/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.mjs +348 -348
  57. package/esm2022/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.module.mjs +35 -35
  58. package/esm2022/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.component.mjs +19 -19
  59. package/esm2022/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.module.mjs +24 -24
  60. package/esm2022/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.mjs +99 -99
  61. package/esm2022/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.module.mjs +24 -24
  62. package/esm2022/lib/_modules/tcloud-ui-progress-bar/tcloud-ui-progress-bar.component.mjs +165 -161
  63. package/esm2022/lib/_modules/tcloud-ui-progress-bar/tcloud-ui-progress-bar.module.mjs +20 -20
  64. package/esm2022/lib/_modules/tcloud-ui-reorder-items/tcloud-ui-reorder-items.component.mjs +105 -105
  65. package/esm2022/lib/_modules/tcloud-ui-reorder-items/tcloud-ui-reorder-items.mjs +1 -1
  66. package/esm2022/lib/_modules/tcloud-ui-reorder-items/tcloud-ui-reorder-items.module.mjs +23 -23
  67. package/esm2022/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.mjs +46 -46
  68. package/esm2022/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.module.mjs +24 -24
  69. package/esm2022/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-content/tcloud-ui-tab-content.component.mjs +36 -36
  70. package/esm2022/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-head/tcloud-ui-tab-head.component.mjs +85 -85
  71. package/esm2022/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-subtitle/tcloud-ui-tab-subtitle.component.mjs +69 -69
  72. package/esm2022/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-title/tcloud-ui-tab-title.component.mjs +71 -71
  73. package/esm2022/lib/_modules/tcloud-ui-tab-menu/services/tab-menu.service.mjs +104 -104
  74. package/esm2022/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.component.mjs +64 -64
  75. package/esm2022/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.mjs +1 -1
  76. package/esm2022/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.module.mjs +44 -44
  77. package/esm2022/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.mjs +21 -21
  78. package/esm2022/lib/_modules/tcloud-ui-table/tcloud-ui-table.module.mjs +24 -24
  79. package/esm2022/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.mjs +37 -37
  80. package/esm2022/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.module.mjs +24 -24
  81. package/esm2022/lib/_pipes/array-to-text.mjs +29 -29
  82. package/esm2022/lib/_pipes/bytes.mjs +31 -31
  83. package/esm2022/lib/_pipes/cnpj.mjs +37 -37
  84. package/esm2022/lib/_pipes/cpf.mjs +37 -37
  85. package/esm2022/lib/_pipes/datebr.mjs +102 -102
  86. package/esm2022/lib/_pipes/index.mjs +8 -8
  87. package/esm2022/lib/_pipes/monthname.mjs +25 -25
  88. package/esm2022/lib/_pipes/respective.mjs +73 -73
  89. package/esm2022/lib/_pipes/statusinfo.mjs +78 -78
  90. package/esm2022/lib/_pipes/tcloud-pipes.module.mjs +74 -74
  91. package/esm2022/lib/_services/loading-transitions.service.mjs +52 -52
  92. package/esm2022/lib/_services/search-in-object.service.mjs +99 -99
  93. package/esm2022/lib/tcloud-ui.module.mjs +222 -222
  94. package/esm2022/public-api.mjs +107 -107
  95. package/fesm2022/dev-tcloud-tcloud-ui.mjs +6284 -6277
  96. package/fesm2022/dev-tcloud-tcloud-ui.mjs.map +1 -1
  97. package/index.d.ts +5 -5
  98. package/lib/_directives/align/align.directive.d.ts +13 -13
  99. package/lib/_directives/currency/currency.directive.d.ts +24 -24
  100. package/lib/_directives/directives.module.d.ts +11 -11
  101. package/lib/_directives/el-copy/el-copy.directive.d.ts +13 -13
  102. package/lib/_directives/hover-parent/hover-parent.directive.d.ts +15 -15
  103. package/lib/_directives/tooltip/tooltip.directive.d.ts +18 -18
  104. package/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.d.ts +11 -11
  105. package/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.d.ts +20 -20
  106. package/lib/_modules/tcloud-ui-accordion/services/tcloud-ui-accordion.service.d.ts +20 -20
  107. package/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.d.ts +27 -27
  108. package/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.module.d.ts +10 -10
  109. package/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.component.d.ts +27 -27
  110. package/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.module.d.ts +9 -9
  111. package/lib/_modules/tcloud-ui-data-list/services/data-list.service.d.ts +20 -20
  112. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list-option/tcloud-ui-data-list-option.component.d.ts +23 -23
  113. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.d.ts +74 -74
  114. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.d.ts +5 -5
  115. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.module.d.ts +10 -10
  116. package/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.d.ts +59 -59
  117. package/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.module.d.ts +9 -9
  118. package/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.d.ts +52 -52
  119. package/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.module.d.ts +11 -11
  120. package/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.d.ts +41 -41
  121. package/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.d.ts +64 -63
  122. package/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.d.ts +40 -40
  123. package/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.module.d.ts +12 -12
  124. package/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.component.d.ts +36 -36
  125. package/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.module.d.ts +9 -9
  126. package/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.d.ts +28 -28
  127. package/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.module.d.ts +9 -9
  128. package/lib/_modules/tcloud-ui-label-token/tcloud-ui-label-token.component.d.ts +14 -14
  129. package/lib/_modules/tcloud-ui-label-token/tcloud-ui-label-token.module.d.ts +9 -9
  130. package/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.component.d.ts +28 -28
  131. package/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.module.d.ts +8 -8
  132. package/lib/_modules/tcloud-ui-line-step-title/tcloud-ui-line-step-title.component.d.ts +12 -12
  133. package/lib/_modules/tcloud-ui-line-step-title/tcloud-ui-line-step-title.d.ts +5 -5
  134. package/lib/_modules/tcloud-ui-line-step-title/tcloud-ui-line-step-title.module.d.ts +8 -8
  135. package/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component.d.ts +17 -17
  136. package/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.module.d.ts +8 -8
  137. package/lib/_modules/tcloud-ui-loading/components/tcloud-ui-cubes/tcloud-ui-cubes.component.d.ts +5 -5
  138. package/lib/_modules/tcloud-ui-loading/tcloud-ui-loading.component.d.ts +11 -11
  139. package/lib/_modules/tcloud-ui-loading/tcloud-ui-loading.module.d.ts +9 -9
  140. package/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-body/tcloud-ui-modal-body.component.d.ts +8 -8
  141. package/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-footer/tcloud-ui-modal-footer.component.d.ts +26 -26
  142. package/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-header/tcloud-ui-modal-header.component.d.ts +12 -12
  143. package/lib/_modules/tcloud-ui-modal/services/tcloud-modal.service.d.ts +28 -28
  144. package/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.component.d.ts +68 -68
  145. package/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.d.ts +4 -4
  146. package/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.module.d.ts +12 -12
  147. package/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.d.ts +39 -39
  148. package/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.module.d.ts +9 -9
  149. package/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.component.d.ts +39 -39
  150. package/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.module.d.ts +9 -9
  151. package/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.d.ts +69 -69
  152. package/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.module.d.ts +10 -10
  153. package/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.component.d.ts +8 -8
  154. package/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.module.d.ts +8 -8
  155. package/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.d.ts +29 -29
  156. package/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.module.d.ts +8 -8
  157. package/lib/_modules/tcloud-ui-progress-bar/tcloud-ui-progress-bar.component.d.ts +31 -29
  158. package/lib/_modules/tcloud-ui-progress-bar/tcloud-ui-progress-bar.module.d.ts +8 -8
  159. package/lib/_modules/tcloud-ui-reorder-items/tcloud-ui-reorder-items.component.d.ts +17 -17
  160. package/lib/_modules/tcloud-ui-reorder-items/tcloud-ui-reorder-items.d.ts +4 -4
  161. package/lib/_modules/tcloud-ui-reorder-items/tcloud-ui-reorder-items.module.d.ts +8 -8
  162. package/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.d.ts +13 -13
  163. package/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.module.d.ts +8 -8
  164. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-content/tcloud-ui-tab-content.component.d.ts +15 -15
  165. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-head/tcloud-ui-tab-head.component.d.ts +24 -24
  166. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-subtitle/tcloud-ui-tab-subtitle.component.d.ts +21 -21
  167. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-title/tcloud-ui-tab-title.component.d.ts +22 -22
  168. package/lib/_modules/tcloud-ui-tab-menu/services/tab-menu.service.d.ts +38 -38
  169. package/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.component.d.ts +23 -23
  170. package/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.d.ts +4 -4
  171. package/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.module.d.ts +12 -12
  172. package/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.d.ts +10 -10
  173. package/lib/_modules/tcloud-ui-table/tcloud-ui-table.module.d.ts +8 -8
  174. package/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.d.ts +17 -17
  175. package/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.module.d.ts +8 -8
  176. package/lib/_pipes/array-to-text.d.ts +8 -8
  177. package/lib/_pipes/bytes.d.ts +8 -8
  178. package/lib/_pipes/cnpj.d.ts +9 -9
  179. package/lib/_pipes/cpf.d.ts +9 -9
  180. package/lib/_pipes/datebr.d.ts +11 -11
  181. package/lib/_pipes/index.d.ts +8 -8
  182. package/lib/_pipes/monthname.d.ts +8 -8
  183. package/lib/_pipes/respective.d.ts +11 -11
  184. package/lib/_pipes/statusinfo.d.ts +15 -15
  185. package/lib/_pipes/tcloud-pipes.module.d.ts +15 -15
  186. package/lib/_services/loading-transitions.service.d.ts +16 -16
  187. package/lib/_services/search-in-object.service.d.ts +19 -19
  188. package/lib/tcloud-ui.module.d.ts +33 -33
  189. package/package.json +1 -1
  190. package/public-api.d.ts +76 -76
@@ -1,320 +1,320 @@
1
- import { Component, forwardRef, EventEmitter, Output, Input, ViewChild } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "../tcloud-ui-datepicker/tcloud-ui-datepicker.component";
6
- import * as i3 from "@angular/forms";
7
- import * as i4 from "../tcloud-ui-data-list/tcloud-ui-data-list.component";
8
- const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
9
- provide: NG_VALUE_ACCESSOR,
10
- useExisting: forwardRef(() => TCloudUiDatepickerTimeComponent),
11
- multi: true
12
- };
13
- const noop = () => {
14
- };
15
- export class TCloudUiDatepickerTimeComponent {
16
- constructor() {
17
- this.show_date_picker = true;
18
- this.ngModelChange = new EventEmitter();
19
- this.onChange = new EventEmitter();
20
- this.eventChange = new EventEmitter();
21
- // minDate - Data minima para exibicao do calendario - ex: 01/01/2020
22
- this.minDate = '';
23
- // maxDate - Data maxima para exibicao do calendario - ex: 31/12/2020
24
- this.maxDate = '';
25
- this.useOptionsDateTime = false;
26
- this.DD_MM_YYYY = '';
27
- this.HH = '00';
28
- this.MM = '00';
29
- this.ID = '';
30
- this.options_date_time = [];
31
- this.open_options_date_time = false;
32
- this.description_options_date_time = '';
33
- this.value_options_date_time = '';
34
- //Placeholders for the callbacks which are later providesd
35
- //by the Control Value Accessor
36
- this.onTouchedCallback = noop;
37
- this.onChangeCallback = noop;
38
- }
39
- set ngModel(v) {
40
- if (v && v !== this.innerValue) {
41
- this.innerValue = v;
42
- }
43
- }
44
- ngOnInit() {
45
- this.setOptionsDateTime();
46
- this.ID = this.generateID();
47
- this.option_HH = this.getListTIME(23);
48
- this.option_MM = this.getListTIME(59);
49
- }
50
- setOptionsDateTime() {
51
- this.options_date_time = [
52
- { value: '7-days', description: '7 dias' },
53
- { value: '15-days', description: '15 dias' },
54
- { value: '30-days', description: '30 dias' },
55
- { value: 'current-month', description: 'Mês atual até agora' },
56
- { value: 'current-year', description: 'Ano atual até agora' }
57
- ];
58
- }
59
- generateID() {
60
- return `tcloud-ui-datepicker-time-${Math.floor(Math.random() * Math.floor(Math.random() * Date.now()))}`;
61
- }
62
- getListTIME(v) {
63
- let mm = [];
64
- for (let i = 0; i <= v; i++) {
65
- if (i < 10) {
66
- (mm).push(`0${i}`);
67
- }
68
- else {
69
- (mm).push(`${i}`);
70
- }
71
- }
72
- return mm;
73
- }
74
- toSetDate(date) {
75
- this.set_date_by_datepicker(date);
76
- }
77
- toSetTime() {
78
- if (this.DD_MM_YYYY && ((this.DD_MM_YYYY).trim()).length === 10) {
79
- const date = (this.DD_MM_YYYY).replace(/-/g, '/');
80
- let date_part = (date).split('/');
81
- let dd = date_part[0];
82
- let mm = date_part[1];
83
- let yy = date_part[2];
84
- const datetime = new Date(`${yy}-${mm}-${dd}`);
85
- if (this.checkIsDate(datetime)) {
86
- this.set_date_by_datepicker(date);
87
- }
88
- }
89
- }
90
- set_date_by_datepicker(date) {
91
- if (date) {
92
- date = (date).replace(/-/g, '/');
93
- let date_part = (date).split('/');
94
- let dia = date_part[0];
95
- let mes = date_part[1];
96
- let ano = date_part[2];
97
- let hh = this.HH;
98
- if (!hh) {
99
- hh = '00';
100
- }
101
- else {
102
- if ((+(hh) >= 0 && +(hh) < 24)) {
103
- hh = (+(hh) < 10) ? `0${+(hh)}` : `${+(hh)}`;
104
- }
105
- else {
106
- hh = '00';
107
- }
108
- }
109
- let mm = this.MM;
110
- if (!mm) {
111
- mm = '00';
112
- }
113
- else {
114
- if ((+(mm) >= 0 && +(mm) < 60)) {
115
- mm = (+(mm) < 10) ? `0${+(mm)}` : `${+(mm)}`;
116
- }
117
- else {
118
- mm = '00';
119
- }
120
- }
121
- if (hh === '00') {
122
- this.HH = hh;
123
- }
124
- if (mm === '00') {
125
- this.MM = mm;
126
- }
127
- const notation = '00';
128
- const str_date = `${ano}-${mes}-${dia}T${hh}:${mm}:${notation}`;
129
- const datetime = new Date(str_date);
130
- if (this.checkIsDate(datetime)) {
131
- this.innerValue = datetime;
132
- }
133
- else {
134
- this.innerValue = undefined;
135
- }
136
- // console.log('this.datepickertime?.nativeElement', this.datepickertime?.nativeElement);
137
- // if(this.datepickertime && this.datepickertime.nativeElement){
138
- // const elem = <any> this.datepickertime.nativeElement;
139
- // elem.value = this.innerValue;
140
- // }
141
- this.ngModelChange.emit(this.innerValue);
142
- this.onChange.emit(this.innerValue);
143
- this.eventChange.emit(this.datepickertime?.nativeElement);
144
- }
145
- else {
146
- this.description_options_date_time = '';
147
- this.value_options_date_time = '';
148
- this.innerValue = undefined;
149
- this.ngModelChange.emit(this.innerValue);
150
- this.onChange.emit(this.innerValue);
151
- this.eventChange.emit(this.datepickertime?.nativeElement);
152
- }
153
- if (`${this.last_options_date_time}` !== `${this.innerValue}`) {
154
- // this.description_options_date_time = '';
155
- // this.value_options_date_time = '';
156
- }
157
- }
158
- // Distribuir os valores da data por pedaços: data - hora - min
159
- to_date_hh_mm(d) {
160
- let dia = `${(d).getDate()}`;
161
- dia = (+(dia) < 10) ? `0${+dia}` : dia;
162
- let mes = `${(d).getMonth() + 1}`;
163
- mes = (+(mes) < 10) ? `0${+mes}` : mes;
164
- let ano = `${(d).getFullYear()}`;
165
- let hh = `${(d).getHours()}`;
166
- let mm = `${(d).getMinutes()}`;
167
- if (hh && (+(hh) < 0 || +(hh) > 23)) {
168
- hh = '00';
169
- }
170
- hh = (hh) ? ((+(hh) < 10) ? `0${hh}` : hh) : '00';
171
- if (mm && (+(mm) < 0 || +(mm) > 59)) {
172
- mm = '00';
173
- }
174
- mm = (mm) ? ((+(mm) < 10) ? `0${mm}` : mm) : '00';
175
- this.MM = mm;
176
- this.HH = hh;
177
- this.DD_MM_YYYY = `${dia}/${mes}/${ano}`;
178
- }
179
- checkIsDate(d) {
180
- if (Object.prototype.toString.call(d) === "[object Date]") {
181
- if (isNaN(d)) {
182
- return false;
183
- }
184
- else {
185
- return true;
186
- }
187
- }
188
- return false;
189
- }
190
- clean() {
191
- this.DD_MM_YYYY = '';
192
- this.HH = '00';
193
- this.MM = '00';
194
- this.description_options_date_time = '';
195
- this.value_options_date_time = '';
196
- }
197
- toClickIn(id) {
198
- document.getElementById(id)?.focus();
199
- }
200
- onClosedOptionsDateTime() {
201
- this.open_options_date_time = false;
202
- }
203
- onChangeOptionsDateTime(event) {
204
- // this.description_options_date_time = '';
205
- // this.value_options_date_time = '';
206
- this.show_date_picker = false;
207
- let now = new Date();
208
- let filter_date = undefined;
209
- if (event === '7-days') {
210
- filter_date = new Date((new Date(now)).setDate(now.getDate() - 7));
211
- filter_date = new Date((filter_date).setSeconds(0));
212
- }
213
- if (event === '15-days') {
214
- filter_date = new Date((new Date(now)).setDate(now.getDate() - 15));
215
- filter_date = new Date((filter_date).setSeconds(0));
216
- }
217
- if (event === '30-days') {
218
- filter_date = new Date((new Date(now)).setDate(now.getDate() - 30));
219
- filter_date = new Date((filter_date).setSeconds(0));
220
- }
221
- if (event === 'current-month') {
222
- filter_date = new Date(now.getFullYear(), now.getMonth(), 1);
223
- }
224
- if (event === 'current-year') {
225
- filter_date = new Date(now.getFullYear(), 0, 1);
226
- }
227
- if (filter_date) {
228
- this.innerValue = filter_date;
229
- if (this.checkIsDate(filter_date)) {
230
- setTimeout(() => {
231
- this.to_date_hh_mm(filter_date);
232
- this.toSetDate(this.DD_MM_YYYY);
233
- this.show_date_picker = true;
234
- this.value_options_date_time = event;
235
- this.last_options_date_time = filter_date;
236
- this.description_options_date_time = this.get_description_options_date_time(event);
237
- });
238
- }
239
- }
240
- }
241
- get_description_options_date_time(value) {
242
- if (this.options_date_time && (this.options_date_time).length > 0) {
243
- for (let i = 0; i < (this.options_date_time).length; i++) {
244
- const item = this.options_date_time[i];
245
- if (item.value === value) {
246
- return item.description;
247
- }
248
- }
249
- }
250
- return '';
251
- }
252
- closedTimeDescription() {
253
- this.value_options_date_time = '';
254
- this.description_options_date_time = '';
255
- }
256
- //get accessor
257
- get value() {
258
- return this.innerValue;
259
- }
260
- ;
261
- //set accessor including call the onchange callback
262
- set value(v) {
263
- if (v !== this.innerValue) {
264
- this.innerValue = v;
265
- this.onChangeCallback(v);
266
- }
267
- }
268
- //Set touched on blur
269
- onBlur() {
270
- this.onTouchedCallback();
271
- }
272
- //From ControlValueAccessor interface
273
- writeValue(value) {
274
- if (value !== this.innerValue) {
275
- try {
276
- value = new Date(`${value}`);
277
- }
278
- catch (error) { }
279
- this.innerValue = value;
280
- if (this.checkIsDate(value)) {
281
- this.to_date_hh_mm(value);
282
- }
283
- else {
284
- this.clean();
285
- }
286
- }
287
- }
288
- //From ControlValueAccessor interface
289
- registerOnChange(fn) {
290
- this.onChangeCallback = fn;
291
- }
292
- //From ControlValueAccessor interface
293
- registerOnTouched(fn) {
294
- this.onTouchedCallback = fn;
295
- }
296
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TCloudUiDatepickerTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
297
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TCloudUiDatepickerTimeComponent, selector: "tcloud-ui-datepicker-time", inputs: { ngModel: "ngModel", minDate: "minDate", maxDate: "maxDate", useOptionsDateTime: "useOptionsDateTime" }, outputs: { ngModelChange: "ngModelChange", onChange: "onChange", eventChange: "eventChange" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datepickertime", first: true, predicate: ["_datepickertime"], descendants: true }], ngImport: i0, template: "<div class=\"tcloud-ui-datepicker-time\">\r\n <input type=\"hidden\" value=\"{{ innerValue }}\" #_datepickertime >\r\n <form #_formulario=\"ngForm\">\r\n <div class=\"input-control-time\">\r\n <div class=\"form-control-time\">\r\n\r\n <table style=\"width: 100%;\">\r\n <tr>\r\n <td>\r\n\r\n <div class=\"input-options-date\">\r\n <table class=\"form-time\">\r\n <tr>\r\n <!-- <td class=\"area-icon\"><div class=\"delimiter-time-icon\" (click)=\"toClickIn(ID)\" ><i class=\"fas fa-calendar-alt\"></i></div></td> -->\r\n <td class=\"area-input-date\">\r\n <ng-container *ngIf=\"show_date_picker\">\r\n <tcloud-ui-datepicker [minDate]=\"minDate\" [maxDate]=\"maxDate\" #_tclouddatepickertime [childInputDateTime]=\"true\" [modeInput]=\"true\" name=\"date\" [useBorder]=\"false\" [(ngModel)]=\"DD_MM_YYYY\" (onChange)=\"toSetDate($event)\" ></tcloud-ui-datepicker>\r\n </ng-container>\r\n </td>\r\n \r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\"></div></td>\r\n <td class=\"area-input-hour\">\r\n <!--<input type=\"text\" placeholder=\"HH\" (keyup)=\"toSetTime()\" [(ngModel)]=\"HH\" maxlength=\"2\" name=\"hh\" pattern=\"[0][0-9]|[1][0-9]|2[0-3]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"HH\" name=\"hh\">\r\n <ng-container *ngFor=\"let hh of option_HH\">\r\n <option [ngValue]=\"hh\">{{ hh }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\">:</div></td>\r\n <td class=\"area-input-minute\">\r\n <!--<input type=\"text\" placeholder=\"MM\" (keyup)=\"toSetTime()\" [(ngModel)]=\"MM\" maxlength=\"2\" name=\"mm\" pattern=\"[012345][0-9]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"MM\" name=\"mm\">\r\n <ng-container *ngFor=\"let mm of option_MM\">\r\n <option [value]=\"mm\">{{ mm }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-clean\"></td>\r\n </tr>\r\n </table>\r\n\r\n <div class=\"description-options-date\" *ngIf=\"value_options_date_time !== ''\">\r\n <strong>{{ description_options_date_time }}</strong>\r\n\r\n <!-- <div class=\"area-action-date-time-selected\">\r\n <button class=\"btn-icon\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </div> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </td>\r\n <td *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0\" style=\"width: 20px\">\r\n <button type=\"button\" class=\"icon-short-time\" (click)=\"open_options_date_time = !open_options_date_time\" [title]=\"description_options_date_time\" >\r\n <i *ngIf=\"!open_options_date_time\" class=\"fas fa-caret-down\"></i>\r\n <i *ngIf=\"open_options_date_time\" class=\"fas fa-caret-up\"></i>\r\n </button>\r\n\r\n <ng-container *ngIf=\"value_options_date_time !== ''\">\r\n <button class=\"btn-icon-close\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0 && open_options_date_time\">\r\n <td colspan=\"2\">\r\n <tcloud-ui-data-list \r\n name=\"value_options_date_time\"\r\n [showInput]=\"false\" \r\n [search]=\"false\" \r\n [open]=\"true\" \r\n [listItems]=\"options_date_time\" \r\n (onClosed)=\"onClosedOptionsDateTime()\"\r\n [ngModel]=\"value_options_date_time\"\r\n (ngModelChange)=\"onChangeOptionsDateTime($event)\"\r\n >\r\n </tcloud-ui-data-list>\r\n\r\n \r\n\r\n\r\n \r\n </td>\r\n </tr>\r\n </table>\r\n\r\n \r\n </div>\r\n </div>\r\n </form>\r\n</div>", styles: ["@charset \"UTF-8\";.input-control-time{background-color:#fff;border:1px solid #ccc;border-radius:3px;width:100%;height:40px}.form-control-time{max-width:220px;border:none}.form-control-time input{text-align:center}.form-time{width:100%}.form-time td:first-child{overflow:hidden}.delimiter-time{width:100%;text-align:center}.delimiter-time-icon{border:none;height:35px;width:10px;padding:4px;font-size:17px;text-align:center;opacity:.6}.area-icon{width:25px}.area-input-date{width:100px}.area-delimiter{width:2px;text-align:center}.area-input-hour,.area-input-minute{text-align:center;width:28px}.area-input-hour input,.area-input-minute input{height:35px;width:28px;text-align:center;color:#999;font-weight:600;font-style:italic}.area-input-hour input:focus,.area-input-minute input:focus{outline:none}.area-clean{width:12px}input,.datepicker-input{border:none!important}.select-time-date{border:none;background-color:transparent;width:40px;height:35px;padding:0;text-align:center;font-size:13px;color:#777;position:relative;top:-2px;appearance:none}.select-time-date:focus{box-shadow:0 0;border:0 none;outline:0}.btn-icon-close{border:none;background-color:#fff;cursor:pointer;padding:0;color:#aaa;width:17px;position:relative;top:-20px;z-index:1}.btn-icon-close:hover{color:#c43a3a!important}.icon-short-time{border:none;background:none;cursor:pointer;font-size:15px;color:#8a8a8a}.input-options-date{position:relative}.input-options-date .description-options-date{position:absolute;left:0;top:0;padding:5px 10px;background-color:#fff;width:100%;height:34px;overflow:hidden}.input-options-date .description-options-date strong{font-size:14px;font-weight:400;padding-left:5px}.input-options-date .area-action-date-time-selected{width:20px;display:block;float:right;text-align:right;position:relative;top:-2px;left:30px;z-index:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TCloudUiDatepickerComponent, selector: "tcloud-ui-datepicker", inputs: ["multiple", "maxNumberOfDates", "daysOfWeekDisabled", "minDate", "maxDate", "datesDisabled", "modeInput", "useBorder", "childInputDateTime", "startViewInMinDate", "startViewInMaxDate", "disabled", "ngModel", "code"], outputs: ["onChange", "ngModelChange", "onCheckDate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.TCloudUiDataListComponent, selector: "tcloud-ui-data-list", inputs: ["placeholder", "disabled", "loading", "showInput", "search", "listItems", "open", "border", "ngModel"], outputs: ["onInputChange", "onChange", "onOpened", "onClosed", "ngModelChange"] }] }); }
298
- }
299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TCloudUiDatepickerTimeComponent, decorators: [{
300
- type: Component,
301
- args: [{ selector: 'tcloud-ui-datepicker-time', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], template: "<div class=\"tcloud-ui-datepicker-time\">\r\n <input type=\"hidden\" value=\"{{ innerValue }}\" #_datepickertime >\r\n <form #_formulario=\"ngForm\">\r\n <div class=\"input-control-time\">\r\n <div class=\"form-control-time\">\r\n\r\n <table style=\"width: 100%;\">\r\n <tr>\r\n <td>\r\n\r\n <div class=\"input-options-date\">\r\n <table class=\"form-time\">\r\n <tr>\r\n <!-- <td class=\"area-icon\"><div class=\"delimiter-time-icon\" (click)=\"toClickIn(ID)\" ><i class=\"fas fa-calendar-alt\"></i></div></td> -->\r\n <td class=\"area-input-date\">\r\n <ng-container *ngIf=\"show_date_picker\">\r\n <tcloud-ui-datepicker [minDate]=\"minDate\" [maxDate]=\"maxDate\" #_tclouddatepickertime [childInputDateTime]=\"true\" [modeInput]=\"true\" name=\"date\" [useBorder]=\"false\" [(ngModel)]=\"DD_MM_YYYY\" (onChange)=\"toSetDate($event)\" ></tcloud-ui-datepicker>\r\n </ng-container>\r\n </td>\r\n \r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\"></div></td>\r\n <td class=\"area-input-hour\">\r\n <!--<input type=\"text\" placeholder=\"HH\" (keyup)=\"toSetTime()\" [(ngModel)]=\"HH\" maxlength=\"2\" name=\"hh\" pattern=\"[0][0-9]|[1][0-9]|2[0-3]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"HH\" name=\"hh\">\r\n <ng-container *ngFor=\"let hh of option_HH\">\r\n <option [ngValue]=\"hh\">{{ hh }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\">:</div></td>\r\n <td class=\"area-input-minute\">\r\n <!--<input type=\"text\" placeholder=\"MM\" (keyup)=\"toSetTime()\" [(ngModel)]=\"MM\" maxlength=\"2\" name=\"mm\" pattern=\"[012345][0-9]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"MM\" name=\"mm\">\r\n <ng-container *ngFor=\"let mm of option_MM\">\r\n <option [value]=\"mm\">{{ mm }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-clean\"></td>\r\n </tr>\r\n </table>\r\n\r\n <div class=\"description-options-date\" *ngIf=\"value_options_date_time !== ''\">\r\n <strong>{{ description_options_date_time }}</strong>\r\n\r\n <!-- <div class=\"area-action-date-time-selected\">\r\n <button class=\"btn-icon\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </div> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </td>\r\n <td *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0\" style=\"width: 20px\">\r\n <button type=\"button\" class=\"icon-short-time\" (click)=\"open_options_date_time = !open_options_date_time\" [title]=\"description_options_date_time\" >\r\n <i *ngIf=\"!open_options_date_time\" class=\"fas fa-caret-down\"></i>\r\n <i *ngIf=\"open_options_date_time\" class=\"fas fa-caret-up\"></i>\r\n </button>\r\n\r\n <ng-container *ngIf=\"value_options_date_time !== ''\">\r\n <button class=\"btn-icon-close\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0 && open_options_date_time\">\r\n <td colspan=\"2\">\r\n <tcloud-ui-data-list \r\n name=\"value_options_date_time\"\r\n [showInput]=\"false\" \r\n [search]=\"false\" \r\n [open]=\"true\" \r\n [listItems]=\"options_date_time\" \r\n (onClosed)=\"onClosedOptionsDateTime()\"\r\n [ngModel]=\"value_options_date_time\"\r\n (ngModelChange)=\"onChangeOptionsDateTime($event)\"\r\n >\r\n </tcloud-ui-data-list>\r\n\r\n \r\n\r\n\r\n \r\n </td>\r\n </tr>\r\n </table>\r\n\r\n \r\n </div>\r\n </div>\r\n </form>\r\n</div>", styles: ["@charset \"UTF-8\";.input-control-time{background-color:#fff;border:1px solid #ccc;border-radius:3px;width:100%;height:40px}.form-control-time{max-width:220px;border:none}.form-control-time input{text-align:center}.form-time{width:100%}.form-time td:first-child{overflow:hidden}.delimiter-time{width:100%;text-align:center}.delimiter-time-icon{border:none;height:35px;width:10px;padding:4px;font-size:17px;text-align:center;opacity:.6}.area-icon{width:25px}.area-input-date{width:100px}.area-delimiter{width:2px;text-align:center}.area-input-hour,.area-input-minute{text-align:center;width:28px}.area-input-hour input,.area-input-minute input{height:35px;width:28px;text-align:center;color:#999;font-weight:600;font-style:italic}.area-input-hour input:focus,.area-input-minute input:focus{outline:none}.area-clean{width:12px}input,.datepicker-input{border:none!important}.select-time-date{border:none;background-color:transparent;width:40px;height:35px;padding:0;text-align:center;font-size:13px;color:#777;position:relative;top:-2px;appearance:none}.select-time-date:focus{box-shadow:0 0;border:0 none;outline:0}.btn-icon-close{border:none;background-color:#fff;cursor:pointer;padding:0;color:#aaa;width:17px;position:relative;top:-20px;z-index:1}.btn-icon-close:hover{color:#c43a3a!important}.icon-short-time{border:none;background:none;cursor:pointer;font-size:15px;color:#8a8a8a}.input-options-date{position:relative}.input-options-date .description-options-date{position:absolute;left:0;top:0;padding:5px 10px;background-color:#fff;width:100%;height:34px;overflow:hidden}.input-options-date .description-options-date strong{font-size:14px;font-weight:400;padding-left:5px}.input-options-date .area-action-date-time-selected{width:20px;display:block;float:right;text-align:right;position:relative;top:-2px;left:30px;z-index:1}\n"] }]
302
- }], propDecorators: { ngModel: [{
303
- type: Input
304
- }], ngModelChange: [{
305
- type: Output
306
- }], onChange: [{
307
- type: Output
308
- }], eventChange: [{
309
- type: Output
310
- }], minDate: [{
311
- type: Input
312
- }], maxDate: [{
313
- type: Input
314
- }], useOptionsDateTime: [{
315
- type: Input
316
- }], datepickertime: [{
317
- type: ViewChild,
318
- args: ['_datepickertime', { static: false }]
319
- }] } });
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Y2xvdWQtdWkvc3JjL2xpYi9fbW9kdWxlcy90Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lL3RjbG91ZC11aS1kYXRlcGlja2VyLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZS90Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBR25ELE1BQU0sbUNBQW1DLEdBQVE7SUFDL0MsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLCtCQUErQixDQUFDO0lBQzlELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUNsQixDQUFDLENBQUM7QUFRRixNQUFNLE9BQU8sK0JBQStCO0lBTjVDO1FBUUUscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBUXZCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV6QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFaEQscUVBQXFFO1FBQzVELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFOUIscUVBQXFFO1FBQzVELFlBQU8s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RUFBRTtvQkFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUMvQztxQkFBSTtvQkFDSCxFQUFFLEdBQUcsSUFBSSxDQUFDO2lCQUNYO2FBQ0Y7WUFFRCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsRUFBRSxHQUFHLElBQUksQ0FBQzthQUNYO2lCQUFJO2dCQUNILElBQUksQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUUsRUFBRTtvQkFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUMvQztxQkFBSTtvQkFDSCxFQUFFLEdBQUcsSUFBSSxDQUFDO2lCQUNYO2FBQ0Y7WUFFRCxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFBRTtZQUNsQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFBRTtZQUVsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFFdEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFFLFFBQVEsQ0FBRSxDQUFDO1lBRXRDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDNUI7aUJBQUk7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7YUFDN0I7WUFFRCx5RkFBeUY7WUFFekYsZ0VBQWdFO1lBQ2hFLDBEQUEwRDtZQUMxRCxrQ0FBa0M7WUFDbEMsSUFBSTtZQUVKLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxVQUFVLENBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsVUFBVSxDQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUUsQ0FBQztTQUU3RDthQUFJO1lBRUgsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxVQUFVLENBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsVUFBVSxDQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUUsQ0FBQztTQUM3RDtRQUVELElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM3RCwyQ0FBMkM7WUFDM0MscUNBQXFDO1NBQ3RDO0lBRUgsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxhQUFhLENBQUMsQ0FBTztRQUNuQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUM3QixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRXhDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLElBQUksRUFBRSxHQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQzlCLElBQUksRUFBRSxHQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBRWhDLElBQUksRUFBRSxJQUFJLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFFLEVBQUU7WUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO1NBQUU7UUFDckQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFckQsSUFBSSxFQUFFLElBQUksQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdB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Q0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtpQkFBSTtnQkFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7YUFDYjtTQUNGO0lBQ0gsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0FqV1UsK0JBQStCO21HQUEvQiwrQkFBK0IscVFBRi9CLENBQUMsbUNBQW1DLENBQUMsNklDakJsRCw4dUpBZ0dNOzs0RkQ3RU8sK0JBQStCO2tCQU4zQyxTQUFTOytCQUNFLDJCQUEyQixhQUcxQixDQUFDLG1DQUFtQyxDQUFDOzhCQU9uQyxPQUFPO3NCQUFuQixLQUFLO2dCQUtJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdFLE9BQU87c0JBQWYsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQVd5QyxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgT25Jbml0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSVNlbGVjdE9wdGlvbnMgfSBmcm9tICcuLi90Y2xvdWQtdWktZGF0YS1saXN0L3RjbG91ZC11aS1kYXRhLWxpc3QnO1xyXG5cclxuY29uc3QgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcclxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUQ2xvdWRVaURhdGVwaWNrZXJUaW1lQ29tcG9uZW50KSxcclxuICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuY29uc3Qgbm9vcCA9ICgpID0+IHtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RjbG91ZC11aS1kYXRlcGlja2VyLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RjbG91ZC11aS1kYXRlcGlja2VyLXRpbWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRDbG91ZFVpRGF0ZXBpY2tlclRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBzaG93X2RhdGVfcGlja2VyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfbmdNb2RlbDogYW55IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNldCBuZ01vZGVsKHY6IGFueSl7XHJcbiAgICBpZiggdiAmJiB2ICE9PSB0aGlzLmlubmVyVmFsdWUgKXtcclxuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdjsgXHJcbiAgICB9IFxyXG4gIH1cclxuICBAT3V0cHV0KCkgbmdNb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG4gIEBPdXRwdXQoKSBldmVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvLyBtaW5EYXRlIC0gRGF0YSBtaW5pbWEgcGFyYSBleGliaWNhbyBkbyBjYWxlbmRhcmlvIC0gZXg6IDAxLzAxLzIwMjBcclxuICBASW5wdXQoKSBtaW5EYXRlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLy8gbWF4RGF0ZSAtIERhdGEgbWF4aW1hIHBhcmEgZXhpYmljYW8gZG8gY2FsZW5kYXJpbyAtIGV4OiAzMS8xMi8yMDIwXHJcbiAgQElucHV0KCkgbWF4RGF0ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIHVzZU9wdGlvbnNEYXRlVGltZSA9IGZhbHNlO1xyXG5cclxuICBERF9NTV9ZWVlZOiBzdHJpbmcgPSAnJztcclxuICBISDogc3RyaW5nID0gJzAwJztcclxuICBNTTogc3RyaW5nID0gJzAwJztcclxuXHJcbiAgSUQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBvcHRpb25fSEg6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xyXG4gIG9wdGlvbl9NTTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ19kYXRlcGlja2VydGltZScsIHtzdGF0aWM6IGZhbHNlfSkgZGF0ZXBpY2tlcnRpbWU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBvcHRpb25zX2RhdGVfdGltZSA6IElTZWxlY3RPcHRpb25zW10gPSBbXTtcclxuICBvcGVuX29wdGlvbnNfZGF0ZV90aW1lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGxhc3Rfb3B0aW9uc19kYXRlX3RpbWU6IGFueTtcclxuICBkZXNjcmlwdGlvbl9vcHRpb25zX2RhdGVfdGltZTogYW55ID0gJyc7XHJcbiAgdmFsdWVfb3B0aW9uc19kYXRlX3RpbWU6IGFueSA9ICcnO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcblxyXG4gICAgdGhpcy5zZXRPcHRpb25zRGF0ZVRpbWUoKTtcclxuXHJcbiAgICB0aGlzLklEID0gdGhpcy5nZW5lcmF0ZUlEKCk7XHJcbiAgICB0aGlzLm9wdGlvbl9ISCA9IHRoaXMuZ2V0TGlzdFRJTUUoMjMpO1xyXG4gICAgdGhpcy5vcHRpb25fTU0gPSB0aGlzLmdldExpc3RUSU1FKDU5KTtcclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnNEYXRlVGltZSgpe1xyXG4gICAgdGhpcy5vcHRpb25zX2RhdGVfdGltZSA9IFtcclxuICAgICAge3ZhbHVlOic3LWRheXMnLCBkZXNjcmlwdGlvbjogJzcgZGlhcyd9LFxyXG4gICAgICB7dmFsdWU6JzE1LWRheXMnLCBkZXNjcmlwdGlvbjogJzE1IGRpYXMnfSxcclxuICAgICAge3ZhbHVlOiczMC1kYXlzJywgZGVzY3JpcHRpb246ICczMCBkaWFzJ30sXHJcbiAgICAgIHt2YWx1ZTonY3VycmVudC1tb250aCcsIGRlc2NyaXB0aW9uOiAnTcOqcyBhdHVhbCBhdMOpIGFnb3JhJ30sXHJcbiAgICAgIHt2YWx1ZTonY3VycmVudC15ZWFyJywgZGVzY3JpcHRpb246ICdBbm8gYXR1YWwgYXTDqSBhZ29yYSd9XHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUlEKCk6IHN0cmluZ3tcclxuICAgIHJldHVybiBgdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIERhdGUubm93KCkpKX1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdFRJTUUodjogbnVtYmVyKXtcclxuICAgIGxldCBtbSA9IFtdO1xyXG4gICAgZm9yKGxldCBpID0gMDsgaSA8PSB2OyBpKysgKXtcclxuICAgICAgaWYoIGkgPCAxMCApe1xyXG4gICAgICAgIChtbSkucHVzaChgMCR7aX1gKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgKG1tKS5wdXNoKGAke2l9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtbTtcclxuICB9XHJcblxyXG4gIHRvU2V0RGF0ZShkYXRlOiBzdHJpbmcpeyAgICBcclxuICAgIHRoaXMuc2V0X2RhdGVfYnlfZGF0ZXBpY2tlcihkYXRlKTtcclxuICB9XHJcblxyXG4gIHRvU2V0VGltZSgpe1xyXG4gICAgaWYoIHRoaXMuRERfTU1fWVlZWSAmJiAoKHRoaXMuRERfTU1fWVlZWSkudHJpbSgpKS5sZW5ndGggPT09IDEwKXtcclxuICAgICAgY29uc3QgZGF0ZSA9ICh0aGlzLkREX01NX1lZWVkpLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgbGV0IGRhdGVfcGFydCA9IChkYXRlKS5zcGxpdCgnLycpO1xyXG4gICAgICBsZXQgZGQgPSBkYXRlX3BhcnRbMF07XHJcbiAgICAgIGxldCBtbSA9IGRhdGVfcGFydFsxXTtcclxuICAgICAgbGV0IHl5ID0gZGF0ZV9wYXJ0WzJdO1xyXG4gICAgICBjb25zdCBkYXRldGltZSA9IG5ldyBEYXRlKGAke3l5fS0ke21tfS0ke2RkfWApO1xyXG4gICAgICBpZiggdGhpcy5jaGVja0lzRGF0ZShkYXRldGltZSkgKXtcclxuICAgICAgICB0aGlzLnNldF9kYXRlX2J5X2RhdGVwaWNrZXIoZGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldF9kYXRlX2J5X2RhdGVwaWNrZXIoZGF0ZTogc3RyaW5nKXtcclxuXHJcbiAgICBpZiggZGF0ZSApe1xyXG4gICAgICBkYXRlID0gKGRhdGUpLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgbGV0IGRhdGVfcGFydCA9IChkYXRlKS5zcGxpdCgnLycpO1xyXG4gICAgICBsZXQgZGlhID0gZGF0ZV9wYXJ0WzBdO1xyXG4gICAgICBsZXQgbWVzID0gZGF0ZV9wYXJ0WzFdO1xyXG4gICAgICBsZXQgYW5vID0gZGF0ZV9wYXJ0WzJdO1xyXG5cclxuICAgICAgbGV0IGhoID0gdGhpcy5ISDtcclxuICAgICAgaWYoICFoaCApe1xyXG4gICAgICAgIGhoID0gJzAwJztcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgaWYoICggKyhoaCkgPj0gMCAmJiArKGhoKSA8IDI0ICkgKXtcclxuICAgICAgICAgIGhoID0gKCsoaGgpIDwgMTAgKSA/IGAwJHsrKGhoKX1gIDogYCR7KyhoaCl9YDtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGhoID0gJzAwJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBtbSA9IHRoaXMuTU07XHJcbiAgICAgIGlmKCAhbW0gKXtcclxuICAgICAgICBtbSA9ICcwMCc7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGlmKCAoICsobW0pID49IDAgJiYgKyhtbSkgPCA2MCApICl7XHJcbiAgICAgICAgICBtbSA9ICgrKG1tKSA8IDEwICkgPyBgMCR7KyhtbSl9YCA6IGAkeysobW0pfWA7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBtbSA9ICcwMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiggaGggPT09ICcwMCcgKXsgdGhpcy5ISCA9IGhoOyB9XHJcbiAgICAgIGlmKCBtbSA9PT0gJzAwJyApeyB0aGlzLk1NID0gbW07IH1cclxuXHJcbiAgICAgIGNvbnN0IG5vdGF0aW9uID0gJzAwJztcclxuXHJcbiAgICAgIGNvbnN0IHN0cl9kYXRlID0gYCR7YW5vfS0ke21lc30tJHtkaWF9VCR7aGh9OiR7bW19OiR7bm90YXRpb259YDtcclxuICAgICAgY29uc3QgZGF0ZXRpbWUgPSBuZXcgRGF0ZSggc3RyX2RhdGUgKTtcclxuICAgICAgXHJcbiAgICAgIGlmKCB0aGlzLmNoZWNrSXNEYXRlKGRhdGV0aW1lKSApe1xyXG4gICAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IGRhdGV0aW1lO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmlubmVyVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmRhdGVwaWNrZXJ0aW1lPy5uYXRpdmVFbGVtZW50JywgdGhpcy5kYXRlcGlja2VydGltZT8ubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgICAvLyBpZih0aGlzLmRhdGVwaWNrZXJ0aW1lICYmIHRoaXMuZGF0ZXBpY2tlcnRpbWUubmF0aXZlRWxlbWVudCl7XHJcbiAgICAgIC8vICAgY29uc3QgZWxlbSA9IDxhbnk+IHRoaXMuZGF0ZXBpY2tlcnRpbWUubmF0aXZlRWxlbWVudDtcclxuICAgICAgLy8gICBlbGVtLnZhbHVlID0gdGhpcy5pbm5lclZhbHVlO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICB0aGlzLm5nTW9kZWxDaGFuZ2UuZW1pdCggdGhpcy5pbm5lclZhbHVlICk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCggdGhpcy5pbm5lclZhbHVlICk7XHJcbiAgICAgIHRoaXMuZXZlbnRDaGFuZ2UuZW1pdCggdGhpcy5kYXRlcGlja2VydGltZT8ubmF0aXZlRWxlbWVudCApO1xyXG5cclxuICAgIH1lbHNle1xyXG5cclxuICAgICAgdGhpcy5kZXNjcmlwdGlvbl9vcHRpb25zX2RhdGVfdGltZSA9ICcnO1xyXG4gICAgICB0aGlzLnZhbHVlX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7XHJcblxyXG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMubmdNb2RlbENoYW5nZS5lbWl0KCB0aGlzLmlubmVyVmFsdWUgKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KCB0aGlzLmlubmVyVmFsdWUgKTtcclxuICAgICAgdGhpcy5ldmVudENoYW5nZS5lbWl0KCB0aGlzLmRhdGVwaWNrZXJ0aW1lPy5uYXRpdmVFbGVtZW50ICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGAke3RoaXMubGFzdF9vcHRpb25zX2RhdGVfdGltZX1gICE9PSBgJHt0aGlzLmlubmVyVmFsdWV9YCApe1xyXG4gICAgICAvLyB0aGlzLmRlc2NyaXB0aW9uX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7XHJcbiAgICAgIC8vIHRoaXMudmFsdWVfb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLyBEaXN0cmlidWlyIG9zIHZhbG9yZXMgZGEgZGF0YSBwb3IgcGVkYcOnb3M6IGRhdGEgLSBob3JhIC0gbWluXHJcbiAgdG9fZGF0ZV9oaF9tbShkOiBEYXRlKXtcclxuICAgIGxldCBkaWEgPSBgJHsoZCkuZ2V0RGF0ZSgpfWA7XHJcbiAgICBkaWEgPSAoKyhkaWEpIDwgMTAgKSA/IGAwJHsrZGlhfWAgOiBkaWE7XHJcbiAgICBsZXQgbWVzID0gYCR7KGQpLmdldE1vbnRoKCkrMX1gO1xyXG4gICAgbWVzID0gKCsobWVzKSA8IDEwICkgPyBgMCR7K21lc31gIDogbWVzOyAgXHJcblxyXG4gICAgbGV0IGFubyA9IGAkeyhkKS5nZXRGdWxsWWVhcigpfWA7XHJcbiAgICBsZXQgaGggID0gYCR7KGQpLmdldEhvdXJzKCl9YDtcclxuICAgIGxldCBtbSAgPSBgJHsoZCkuZ2V0TWludXRlcygpfWA7XHJcblxyXG4gICAgaWYoIGhoICYmICggKyhoaCkgPCAwIHx8ICsoaGgpID4gMjMgKSApeyBoaCA9ICcwMCc7IH1cclxuICAgIGhoID0gKGhoKSA/ICggKCsoaGgpIDwgMTAgKSA/IGAwJHtoaH1gIDogaGggKSA6ICcwMCc7XHJcblxyXG4gICAgaWYoIG1tICYmICggKyhtbSkgPCAwIHx8ICsobW0pID4gNTkgKSApeyBtbSA9ICcwMCc7IH1cclxuICAgIG1tID0gKG1tKSA/ICggKCsobW0pIDwgMTAgKSA/IGAwJHttbX1gIDogbW0gKSA6ICcwMCc7XHJcblxyXG4gICAgdGhpcy5NTSA9IG1tO1xyXG4gICAgdGhpcy5ISCA9IGhoO1xyXG5cclxuICAgIHRoaXMuRERfTU1fWVlZWSA9IGAke2RpYX0vJHttZXN9LyR7YW5vfWA7XHJcbiAgfVxyXG5cclxuICBjaGVja0lzRGF0ZShkOiBhbnkpOiBib29sZWFue1xyXG5cclxuICAgIGlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSA9PT0gXCJbb2JqZWN0IERhdGVdXCIpIHtcclxuICAgICAgaWYoaXNOYU4oZCkpIHsgcmV0dXJuIGZhbHNlOyB9IGVsc2UgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgfSBcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBjbGVhbigpe1xyXG4gICAgdGhpcy5ERF9NTV9ZWVlZID0gJyc7XHJcbiAgICB0aGlzLkhIID0gJzAwJztcclxuICAgIHRoaXMuTU0gPSAnMDAnO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbl9vcHRpb25zX2RhdGVfdGltZSA9ICcnO1xyXG4gICAgdGhpcy52YWx1ZV9vcHRpb25zX2RhdGVfdGltZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgdG9DbGlja0luKGlkOiBzdHJpbmcpe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpPy5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZWRPcHRpb25zRGF0ZVRpbWUoKXtcclxuICAgIHRoaXMub3Blbl9vcHRpb25zX2RhdGVfdGltZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBcclxuICBvbkNoYW5nZU9wdGlvbnNEYXRlVGltZShldmVudDogYW55KXtcclxuICAgIC8vIHRoaXMuZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIC8vIHRoaXMudmFsdWVfb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIHRoaXMuc2hvd19kYXRlX3BpY2tlciA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgbGV0IGZpbHRlcl9kYXRlOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiggZXZlbnQgPT09ICc3LWRheXMnICl7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoIChuZXcgRGF0ZShub3cpKS5zZXREYXRlKCBub3cuZ2V0RGF0ZSgpIC0gNyApICk7ICBcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKGZpbHRlcl9kYXRlKS5zZXRTZWNvbmRzKDApICk7ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGV2ZW50ID09PSAnMTUtZGF5cycgKXtcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKG5ldyBEYXRlKG5vdykpLnNldERhdGUoIG5vdy5nZXREYXRlKCkgLSAxNSApICk7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoIChmaWx0ZXJfZGF0ZSkuc2V0U2Vjb25kcygwKSApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBldmVudCA9PT0gJzMwLWRheXMnICl7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoIChuZXcgRGF0ZShub3cpKS5zZXREYXRlKCBub3cuZ2V0RGF0ZSgpIC0gMzAgKSApO1xyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAoZmlsdGVyX2RhdGUpLnNldFNlY29uZHMoMCkgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggZXZlbnQgPT09ICdjdXJyZW50LW1vbnRoJyApe1xyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGV2ZW50ID09PSAnY3VycmVudC15ZWFyJyApe1xyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCAwLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihmaWx0ZXJfZGF0ZSl7ICAgICAgXHJcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IGZpbHRlcl9kYXRlO1xyXG4gICAgICBpZiggdGhpcy5jaGVja0lzRGF0ZShmaWx0ZXJfZGF0ZSkgKXsgICAgICAgICAgICAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b19kYXRlX2hoX21tKGZpbHRlcl9kYXRlKTtcclxuICAgICAgICAgIHRoaXMudG9TZXREYXRlKHRoaXMuRERfTU1fWVlZWSk7ICBcclxuICAgICAgICAgIHRoaXMuc2hvd19kYXRlX3BpY2tlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlX29wdGlvbnNfZGF0ZV90aW1lID0gZXZlbnQ7XHJcbiAgICAgICAgICB0aGlzLmxhc3Rfb3B0aW9uc19kYXRlX3RpbWUgPSBmaWx0ZXJfZGF0ZSBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uX29wdGlvbnNfZGF0ZV90aW1lID0gdGhpcy5nZXRfZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUoZXZlbnQpO1xyXG4gICAgICAgIH0pOyAgICAgICBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBnZXRfZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUodmFsdWU6IHN0cmluZyl7XHJcbiAgICBpZiggdGhpcy5vcHRpb25zX2RhdGVfdGltZSAmJiAodGhpcy5vcHRpb25zX2RhdGVfdGltZSkubGVuZ3RoID4gMCApe1xyXG4gICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLm9wdGlvbnNfZGF0ZV90aW1lKS5sZW5ndGg7IGkrKyApe1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm9wdGlvbnNfZGF0ZV90aW1lW2ldO1xyXG4gICAgICAgIGlmKCBpdGVtLnZhbHVlID09PSB2YWx1ZSApe1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0uZGVzY3JpcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VkVGltZURlc2NyaXB0aW9uKCl7XHJcbiAgICB0aGlzLnZhbHVlX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7XHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7IFxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBcclxuICBpbm5lclZhbHVlOiBhbnkgfCB1bmRlZmluZWQ7XHJcbiAgLy9QbGFjZWhvbGRlcnMgZm9yIHRoZSBjYWxsYmFja3Mgd2hpY2ggYXJlIGxhdGVyIHByb3ZpZGVzZFxyXG4gIC8vYnkgdGhlIENvbnRyb2wgVmFsdWUgQWNjZXNzb3JcclxuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcclxuICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xyXG5cclxuICAvL2dldCBhY2Nlc3NvclxyXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbm5lclZhbHVlO1xyXG4gIH07XHJcblxyXG4gIC8vc2V0IGFjY2Vzc29yIGluY2x1ZGluZyBjYWxsIHRoZSBvbmNoYW5nZSBjYWxsYmFja1xyXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcclxuICAgIGlmICh2ICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdjsgICAgICBcclxuICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9TZXQgdG91Y2hlZCBvbiBibHVyXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSggYCR7dmFsdWV9YCApO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cclxuXHJcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICBpZiggdGhpcy5jaGVja0lzRGF0ZSh2YWx1ZSkgKXtcclxuICAgICAgICB0aGlzLnRvX2RhdGVfaGhfbW0odmFsdWUpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmNsZWFuKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICAvL0Zyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRjbG91ZC11aS1kYXRlcGlja2VyLXRpbWVcIj5cclxuICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHZhbHVlPVwie3sgaW5uZXJWYWx1ZSB9fVwiICNfZGF0ZXBpY2tlcnRpbWUgPlxyXG4gIDxmb3JtICNfZm9ybXVsYXJpbz1cIm5nRm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRyb2wtdGltZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLXRpbWVcIj5cclxuXHJcbiAgICAgICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW9wdGlvbnMtZGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImZvcm0tdGltZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDx0ZCBjbGFzcz1cImFyZWEtaWNvblwiPjxkaXYgY2xhc3M9XCJkZWxpbWl0ZXItdGltZS1pY29uXCIgKGNsaWNrKT1cInRvQ2xpY2tJbihJRClcIiA+PGkgY2xhc3M9XCJmYXMgZmEtY2FsZW5kYXItYWx0XCI+PC9pPjwvZGl2PjwvdGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhcmVhLWlucHV0LWRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd19kYXRlX3BpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRjbG91ZC11aS1kYXRlcGlja2VyIFttaW5EYXRlXT1cIm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgI190Y2xvdWRkYXRlcGlja2VydGltZSBbY2hpbGRJbnB1dERhdGVUaW1lXT1cInRydWVcIiBbbW9kZUlucHV0XT1cInRydWVcIiBuYW1lPVwiZGF0ZVwiIFt1c2VCb3JkZXJdPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cIkREX01NX1lZWVlcIiAob25DaGFuZ2UpPVwidG9TZXREYXRlKCRldmVudClcIiA+PC90Y2xvdWQtdWktZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFyZWEtZGVsaW1pdGVyXCI+PGRpdiBjbGFzcz1cImRlbGltaXRlci10aW1lXCI+PC9kaXY+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJlYS1pbnB1dC1ob3VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiSEhcIiAoa2V5dXApPVwidG9TZXRUaW1lKClcIiBbKG5nTW9kZWwpXT1cIkhIXCIgbWF4bGVuZ3RoPVwiMlwiIG5hbWU9XCJoaFwiIHBhdHRlcm49XCJbMF1bMC05XXxbMV1bMC05XXwyWzAtM11cIj4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0LXRpbWUtZGF0ZVwiIChjaGFuZ2UpPVwidG9TZXRUaW1lKClcIiBbKG5nTW9kZWwpXT1cIkhIXCIgbmFtZT1cImhoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoaCBvZiBvcHRpb25fSEhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJoaFwiPnt7IGhoIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJlYS1kZWxpbWl0ZXJcIj48ZGl2IGNsYXNzPVwiZGVsaW1pdGVyLXRpbWVcIj46PC9kaXY+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJlYS1pbnB1dC1taW51dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJNTVwiIChrZXl1cCk9XCJ0b1NldFRpbWUoKVwiIFsobmdNb2RlbCldPVwiTU1cIiBtYXhsZW5ndGg9XCIyXCIgbmFtZT1cIm1tXCIgcGF0dGVybj1cIlswMTIzNDVdWzAtOV1cIj4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0LXRpbWUtZGF0ZVwiIChjaGFuZ2UpPVwidG9TZXRUaW1lKClcIiBbKG5nTW9kZWwpXT1cIk1NXCIgbmFtZT1cIm1tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtbSBvZiBvcHRpb25fTU1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibW1cIj57eyBtbSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFyZWEtY2xlYW5cIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb24tb3B0aW9ucy1kYXRlXCIgKm5nSWY9XCJ2YWx1ZV9vcHRpb25zX2RhdGVfdGltZSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUgfX08L3N0cm9uZz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImFyZWEtYWN0aW9uLWRhdGUtdGltZS1zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4taWNvblwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VkVGltZURlc2NyaXB0aW9uKClcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwidXNlT3B0aW9uc0RhdGVUaW1lICYmIG9wdGlvbnNfZGF0ZV90aW1lICYmIChvcHRpb25zX2RhdGVfdGltZSkubGVuZ3RoID4gMFwiIHN0eWxlPVwid2lkdGg6IDIwcHhcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImljb24tc2hvcnQtdGltZVwiIChjbGljayk9XCJvcGVuX29wdGlvbnNfZGF0ZV90aW1lID0gIW9wZW5fb3B0aW9uc19kYXRlX3RpbWVcIiBbdGl0bGVdPVwiZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWVcIiA+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFvcGVuX29wdGlvbnNfZGF0ZV90aW1lXCIgY2xhc3M9XCJmYXMgZmEtY2FyZXQtZG93blwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwib3Blbl9vcHRpb25zX2RhdGVfdGltZVwiIGNsYXNzPVwiZmFzIGZhLWNhcmV0LXVwXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVfb3B0aW9uc19kYXRlX3RpbWUgIT09ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWljb24tY2xvc2VcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlZFRpbWVEZXNjcmlwdGlvbigpXCIgPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwidXNlT3B0aW9uc0RhdGVUaW1lICYmIG9wdGlvbnNfZGF0ZV90aW1lICYmIChvcHRpb25zX2RhdGVfdGltZSkubGVuZ3RoID4gMCAmJiBvcGVuX29wdGlvbnNfZGF0ZV90aW1lXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgPHRjbG91ZC11aS1kYXRhLWxpc3QgXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZV9vcHRpb25zX2RhdGVfdGltZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93SW5wdXRdPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICAgICAgICBbb3Blbl09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtsaXN0SXRlbXNdPVwib3B0aW9uc19kYXRlX3RpbWVcIiBcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xvc2VkKT1cIm9uQ2xvc2VkT3B0aW9uc0RhdGVUaW1lKClcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZV9vcHRpb25zX2RhdGVfdGltZVwiXHJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlT3B0aW9uc0RhdGVUaW1lKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3RjbG91ZC11aS1kYXRhLWxpc3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgXHJcblxyXG5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj4iXX0=
1
+ import { Component, forwardRef, EventEmitter, Output, Input, ViewChild } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../tcloud-ui-datepicker/tcloud-ui-datepicker.component";
6
+ import * as i3 from "@angular/forms";
7
+ import * as i4 from "../tcloud-ui-data-list/tcloud-ui-data-list.component";
8
+ const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
9
+ provide: NG_VALUE_ACCESSOR,
10
+ useExisting: forwardRef(() => TCloudUiDatepickerTimeComponent),
11
+ multi: true
12
+ };
13
+ const noop = () => {
14
+ };
15
+ export class TCloudUiDatepickerTimeComponent {
16
+ constructor() {
17
+ this.show_date_picker = true;
18
+ this.ngModelChange = new EventEmitter();
19
+ this.onChange = new EventEmitter();
20
+ this.eventChange = new EventEmitter();
21
+ // minDate - Data minima para exibicao do calendario - ex: 01/01/2020
22
+ this.minDate = '';
23
+ // maxDate - Data maxima para exibicao do calendario - ex: 31/12/2020
24
+ this.maxDate = '';
25
+ this.useOptionsDateTime = false;
26
+ this.DD_MM_YYYY = '';
27
+ this.HH = '00';
28
+ this.MM = '00';
29
+ this.ID = '';
30
+ this.options_date_time = [];
31
+ this.open_options_date_time = false;
32
+ this.description_options_date_time = '';
33
+ this.value_options_date_time = '';
34
+ //Placeholders for the callbacks which are later providesd
35
+ //by the Control Value Accessor
36
+ this.onTouchedCallback = noop;
37
+ this.onChangeCallback = noop;
38
+ }
39
+ set ngModel(v) {
40
+ if (v && v !== this.innerValue) {
41
+ this.innerValue = v;
42
+ }
43
+ }
44
+ ngOnInit() {
45
+ this.setOptionsDateTime();
46
+ this.ID = this.generateID();
47
+ this.option_HH = this.getListTIME(23);
48
+ this.option_MM = this.getListTIME(59);
49
+ }
50
+ setOptionsDateTime() {
51
+ this.options_date_time = [
52
+ { value: '7-days', description: '7 dias' },
53
+ { value: '15-days', description: '15 dias' },
54
+ { value: '30-days', description: '30 dias' },
55
+ { value: 'current-month', description: 'Mês atual até agora' },
56
+ { value: 'current-year', description: 'Ano atual até agora' }
57
+ ];
58
+ }
59
+ generateID() {
60
+ return `tcloud-ui-datepicker-time-${Math.floor(Math.random() * Math.floor(Math.random() * Date.now()))}`;
61
+ }
62
+ getListTIME(v) {
63
+ let mm = [];
64
+ for (let i = 0; i <= v; i++) {
65
+ if (i < 10) {
66
+ (mm).push(`0${i}`);
67
+ }
68
+ else {
69
+ (mm).push(`${i}`);
70
+ }
71
+ }
72
+ return mm;
73
+ }
74
+ toSetDate(date) {
75
+ this.set_date_by_datepicker(date);
76
+ }
77
+ toSetTime() {
78
+ if (this.DD_MM_YYYY && ((this.DD_MM_YYYY).trim()).length === 10) {
79
+ const date = (this.DD_MM_YYYY).replace(/-/g, '/');
80
+ let date_part = (date).split('/');
81
+ let dd = date_part[0];
82
+ let mm = date_part[1];
83
+ let yy = date_part[2];
84
+ const datetime = new Date(`${yy}-${mm}-${dd}`);
85
+ if (this.checkIsDate(datetime)) {
86
+ this.set_date_by_datepicker(date);
87
+ }
88
+ }
89
+ }
90
+ set_date_by_datepicker(date) {
91
+ if (date) {
92
+ date = (date).replace(/-/g, '/');
93
+ let date_part = (date).split('/');
94
+ let dia = date_part[0];
95
+ let mes = date_part[1];
96
+ let ano = date_part[2];
97
+ let hh = this.HH;
98
+ if (!hh) {
99
+ hh = '00';
100
+ }
101
+ else {
102
+ if ((+(hh) >= 0 && +(hh) < 24)) {
103
+ hh = (+(hh) < 10) ? `0${+(hh)}` : `${+(hh)}`;
104
+ }
105
+ else {
106
+ hh = '00';
107
+ }
108
+ }
109
+ let mm = this.MM;
110
+ if (!mm) {
111
+ mm = '00';
112
+ }
113
+ else {
114
+ if ((+(mm) >= 0 && +(mm) < 60)) {
115
+ mm = (+(mm) < 10) ? `0${+(mm)}` : `${+(mm)}`;
116
+ }
117
+ else {
118
+ mm = '00';
119
+ }
120
+ }
121
+ if (hh === '00') {
122
+ this.HH = hh;
123
+ }
124
+ if (mm === '00') {
125
+ this.MM = mm;
126
+ }
127
+ const notation = '00';
128
+ const str_date = `${ano}-${mes}-${dia}T${hh}:${mm}:${notation}`;
129
+ const datetime = new Date(str_date);
130
+ if (this.checkIsDate(datetime)) {
131
+ this.innerValue = datetime;
132
+ }
133
+ else {
134
+ this.innerValue = undefined;
135
+ }
136
+ // console.log('this.datepickertime?.nativeElement', this.datepickertime?.nativeElement);
137
+ // if(this.datepickertime && this.datepickertime.nativeElement){
138
+ // const elem = <any> this.datepickertime.nativeElement;
139
+ // elem.value = this.innerValue;
140
+ // }
141
+ this.ngModelChange.emit(this.innerValue);
142
+ this.onChange.emit(this.innerValue);
143
+ this.eventChange.emit(this.datepickertime?.nativeElement);
144
+ }
145
+ else {
146
+ this.description_options_date_time = '';
147
+ this.value_options_date_time = '';
148
+ this.innerValue = undefined;
149
+ this.ngModelChange.emit(this.innerValue);
150
+ this.onChange.emit(this.innerValue);
151
+ this.eventChange.emit(this.datepickertime?.nativeElement);
152
+ }
153
+ if (`${this.last_options_date_time}` !== `${this.innerValue}`) {
154
+ // this.description_options_date_time = '';
155
+ // this.value_options_date_time = '';
156
+ }
157
+ }
158
+ // Distribuir os valores da data por pedaços: data - hora - min
159
+ to_date_hh_mm(d) {
160
+ let dia = `${(d).getDate()}`;
161
+ dia = (+(dia) < 10) ? `0${+dia}` : dia;
162
+ let mes = `${(d).getMonth() + 1}`;
163
+ mes = (+(mes) < 10) ? `0${+mes}` : mes;
164
+ let ano = `${(d).getFullYear()}`;
165
+ let hh = `${(d).getHours()}`;
166
+ let mm = `${(d).getMinutes()}`;
167
+ if (hh && (+(hh) < 0 || +(hh) > 23)) {
168
+ hh = '00';
169
+ }
170
+ hh = (hh) ? ((+(hh) < 10) ? `0${hh}` : hh) : '00';
171
+ if (mm && (+(mm) < 0 || +(mm) > 59)) {
172
+ mm = '00';
173
+ }
174
+ mm = (mm) ? ((+(mm) < 10) ? `0${mm}` : mm) : '00';
175
+ this.MM = mm;
176
+ this.HH = hh;
177
+ this.DD_MM_YYYY = `${dia}/${mes}/${ano}`;
178
+ }
179
+ checkIsDate(d) {
180
+ if (Object.prototype.toString.call(d) === "[object Date]") {
181
+ if (isNaN(d)) {
182
+ return false;
183
+ }
184
+ else {
185
+ return true;
186
+ }
187
+ }
188
+ return false;
189
+ }
190
+ clean() {
191
+ this.DD_MM_YYYY = '';
192
+ this.HH = '00';
193
+ this.MM = '00';
194
+ this.description_options_date_time = '';
195
+ this.value_options_date_time = '';
196
+ }
197
+ toClickIn(id) {
198
+ document.getElementById(id)?.focus();
199
+ }
200
+ onClosedOptionsDateTime() {
201
+ this.open_options_date_time = false;
202
+ }
203
+ onChangeOptionsDateTime(event) {
204
+ // this.description_options_date_time = '';
205
+ // this.value_options_date_time = '';
206
+ this.show_date_picker = false;
207
+ let now = new Date();
208
+ let filter_date = undefined;
209
+ if (event === '7-days') {
210
+ filter_date = new Date((new Date(now)).setDate(now.getDate() - 7));
211
+ filter_date = new Date((filter_date).setSeconds(0));
212
+ }
213
+ if (event === '15-days') {
214
+ filter_date = new Date((new Date(now)).setDate(now.getDate() - 15));
215
+ filter_date = new Date((filter_date).setSeconds(0));
216
+ }
217
+ if (event === '30-days') {
218
+ filter_date = new Date((new Date(now)).setDate(now.getDate() - 30));
219
+ filter_date = new Date((filter_date).setSeconds(0));
220
+ }
221
+ if (event === 'current-month') {
222
+ filter_date = new Date(now.getFullYear(), now.getMonth(), 1);
223
+ }
224
+ if (event === 'current-year') {
225
+ filter_date = new Date(now.getFullYear(), 0, 1);
226
+ }
227
+ if (filter_date) {
228
+ this.innerValue = filter_date;
229
+ if (this.checkIsDate(filter_date)) {
230
+ setTimeout(() => {
231
+ this.to_date_hh_mm(filter_date);
232
+ this.toSetDate(this.DD_MM_YYYY);
233
+ this.show_date_picker = true;
234
+ this.value_options_date_time = event;
235
+ this.last_options_date_time = filter_date;
236
+ this.description_options_date_time = this.get_description_options_date_time(event);
237
+ });
238
+ }
239
+ }
240
+ }
241
+ get_description_options_date_time(value) {
242
+ if (this.options_date_time && (this.options_date_time).length > 0) {
243
+ for (let i = 0; i < (this.options_date_time).length; i++) {
244
+ const item = this.options_date_time[i];
245
+ if (item.value === value) {
246
+ return item.description;
247
+ }
248
+ }
249
+ }
250
+ return '';
251
+ }
252
+ closedTimeDescription() {
253
+ this.value_options_date_time = '';
254
+ this.description_options_date_time = '';
255
+ }
256
+ //get accessor
257
+ get value() {
258
+ return this.innerValue;
259
+ }
260
+ ;
261
+ //set accessor including call the onchange callback
262
+ set value(v) {
263
+ if (v !== this.innerValue) {
264
+ this.innerValue = v;
265
+ this.onChangeCallback(v);
266
+ }
267
+ }
268
+ //Set touched on blur
269
+ onBlur() {
270
+ this.onTouchedCallback();
271
+ }
272
+ //From ControlValueAccessor interface
273
+ writeValue(value) {
274
+ if (value !== this.innerValue) {
275
+ try {
276
+ value = new Date(`${value}`);
277
+ }
278
+ catch (error) { }
279
+ this.innerValue = value;
280
+ if (this.checkIsDate(value)) {
281
+ this.to_date_hh_mm(value);
282
+ }
283
+ else {
284
+ this.clean();
285
+ }
286
+ }
287
+ }
288
+ //From ControlValueAccessor interface
289
+ registerOnChange(fn) {
290
+ this.onChangeCallback = fn;
291
+ }
292
+ //From ControlValueAccessor interface
293
+ registerOnTouched(fn) {
294
+ this.onTouchedCallback = fn;
295
+ }
296
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TCloudUiDatepickerTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
297
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TCloudUiDatepickerTimeComponent, selector: "tcloud-ui-datepicker-time", inputs: { ngModel: "ngModel", minDate: "minDate", maxDate: "maxDate", useOptionsDateTime: "useOptionsDateTime" }, outputs: { ngModelChange: "ngModelChange", onChange: "onChange", eventChange: "eventChange" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datepickertime", first: true, predicate: ["_datepickertime"], descendants: true }], ngImport: i0, template: "<div class=\"tcloud-ui-datepicker-time\">\r\n <input type=\"hidden\" value=\"{{ innerValue }}\" #_datepickertime >\r\n <form #_formulario=\"ngForm\">\r\n <div class=\"input-control-time\">\r\n <div class=\"form-control-time\">\r\n\r\n <table style=\"width: 100%;\">\r\n <tr>\r\n <td>\r\n\r\n <div class=\"input-options-date\">\r\n <table class=\"form-time\">\r\n <tr>\r\n <!-- <td class=\"area-icon\"><div class=\"delimiter-time-icon\" (click)=\"toClickIn(ID)\" ><i class=\"fas fa-calendar-alt\"></i></div></td> -->\r\n <td class=\"area-input-date\">\r\n <ng-container *ngIf=\"show_date_picker\">\r\n <tcloud-ui-datepicker [minDate]=\"minDate\" [maxDate]=\"maxDate\" #_tclouddatepickertime [childInputDateTime]=\"true\" [modeInput]=\"true\" name=\"date\" [useBorder]=\"false\" [(ngModel)]=\"DD_MM_YYYY\" (onChange)=\"toSetDate($event)\" ></tcloud-ui-datepicker>\r\n </ng-container>\r\n </td>\r\n \r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\"></div></td>\r\n <td class=\"area-input-hour\">\r\n <!--<input type=\"text\" placeholder=\"HH\" (keyup)=\"toSetTime()\" [(ngModel)]=\"HH\" maxlength=\"2\" name=\"hh\" pattern=\"[0][0-9]|[1][0-9]|2[0-3]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"HH\" name=\"hh\">\r\n <ng-container *ngFor=\"let hh of option_HH\">\r\n <option [ngValue]=\"hh\">{{ hh }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\">:</div></td>\r\n <td class=\"area-input-minute\">\r\n <!--<input type=\"text\" placeholder=\"MM\" (keyup)=\"toSetTime()\" [(ngModel)]=\"MM\" maxlength=\"2\" name=\"mm\" pattern=\"[012345][0-9]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"MM\" name=\"mm\">\r\n <ng-container *ngFor=\"let mm of option_MM\">\r\n <option [value]=\"mm\">{{ mm }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-clean\"></td>\r\n </tr>\r\n </table>\r\n\r\n <div class=\"description-options-date\" *ngIf=\"value_options_date_time !== ''\">\r\n <strong>{{ description_options_date_time }}</strong>\r\n\r\n <!-- <div class=\"area-action-date-time-selected\">\r\n <button class=\"btn-icon\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </div> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </td>\r\n <td *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0\" style=\"width: 20px\">\r\n <button type=\"button\" class=\"icon-short-time\" (click)=\"open_options_date_time = !open_options_date_time\" [title]=\"description_options_date_time\" >\r\n <i *ngIf=\"!open_options_date_time\" class=\"fas fa-caret-down\"></i>\r\n <i *ngIf=\"open_options_date_time\" class=\"fas fa-caret-up\"></i>\r\n </button>\r\n\r\n <ng-container *ngIf=\"value_options_date_time !== ''\">\r\n <button class=\"btn-icon-close\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0 && open_options_date_time\">\r\n <td colspan=\"2\">\r\n <tcloud-ui-data-list \r\n name=\"value_options_date_time\"\r\n [showInput]=\"false\" \r\n [search]=\"false\" \r\n [open]=\"true\" \r\n [listItems]=\"options_date_time\" \r\n (onClosed)=\"onClosedOptionsDateTime()\"\r\n [ngModel]=\"value_options_date_time\"\r\n (ngModelChange)=\"onChangeOptionsDateTime($event)\"\r\n >\r\n </tcloud-ui-data-list>\r\n\r\n \r\n\r\n\r\n \r\n </td>\r\n </tr>\r\n </table>\r\n\r\n \r\n </div>\r\n </div>\r\n </form>\r\n</div>", styles: ["@charset \"UTF-8\";.input-control-time{background-color:#fff;border:1px solid #ccc;border-radius:3px;width:100%;height:40px}.form-control-time{max-width:220px;border:none}.form-control-time input{text-align:center}.form-time{width:100%}.form-time td:first-child{overflow:hidden}.delimiter-time{width:100%;text-align:center}.delimiter-time-icon{border:none;height:35px;width:10px;padding:4px;font-size:17px;text-align:center;opacity:.6}.area-icon{width:25px}.area-input-date{width:100px}.area-delimiter{width:2px;text-align:center}.area-input-hour,.area-input-minute{text-align:center;width:28px}.area-input-hour input,.area-input-minute input{height:35px;width:28px;text-align:center;color:#999;font-weight:600;font-style:italic}.area-input-hour input:focus,.area-input-minute input:focus{outline:none}.area-clean{width:12px}input,.datepicker-input{border:none!important}.select-time-date{border:none;background-color:transparent;width:40px;height:35px;padding:0;text-align:center;font-size:13px;color:#777;position:relative;top:-2px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.select-time-date:focus{box-shadow:0 0;border:0 none;outline:0}.btn-icon-close{border:none;background-color:#fff;cursor:pointer;padding:0;color:#aaa;width:17px;position:relative;top:-20px;z-index:1}.btn-icon-close:hover{color:#c43a3a!important}.icon-short-time{border:none;background:none;cursor:pointer;font-size:15px;color:#8a8a8a}.input-options-date{position:relative}.input-options-date .description-options-date{position:absolute;left:0;top:0;padding:5px 10px;background-color:#fff;width:100%;height:34px;overflow:hidden}.input-options-date .description-options-date strong{font-size:14px;font-weight:400;padding-left:5px}.input-options-date .area-action-date-time-selected{width:20px;display:block;float:right;text-align:right;position:relative;top:-2px;left:30px;z-index:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TCloudUiDatepickerComponent, selector: "tcloud-ui-datepicker", inputs: ["multiple", "maxNumberOfDates", "daysOfWeekDisabled", "minDate", "maxDate", "datesDisabled", "modeInput", "useBorder", "childInputDateTime", "startViewInMinDate", "startViewInMaxDate", "disabled", "ngModel", "code"], outputs: ["onChange", "ngModelChange", "onCheckDate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.TCloudUiDataListComponent, selector: "tcloud-ui-data-list", inputs: ["placeholder", "disabled", "loading", "showInput", "search", "listItems", "open", "border", "ngModel"], outputs: ["onInputChange", "onChange", "onOpened", "onClosed", "ngModelChange"] }] }); }
298
+ }
299
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TCloudUiDatepickerTimeComponent, decorators: [{
300
+ type: Component,
301
+ args: [{ selector: 'tcloud-ui-datepicker-time', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], template: "<div class=\"tcloud-ui-datepicker-time\">\r\n <input type=\"hidden\" value=\"{{ innerValue }}\" #_datepickertime >\r\n <form #_formulario=\"ngForm\">\r\n <div class=\"input-control-time\">\r\n <div class=\"form-control-time\">\r\n\r\n <table style=\"width: 100%;\">\r\n <tr>\r\n <td>\r\n\r\n <div class=\"input-options-date\">\r\n <table class=\"form-time\">\r\n <tr>\r\n <!-- <td class=\"area-icon\"><div class=\"delimiter-time-icon\" (click)=\"toClickIn(ID)\" ><i class=\"fas fa-calendar-alt\"></i></div></td> -->\r\n <td class=\"area-input-date\">\r\n <ng-container *ngIf=\"show_date_picker\">\r\n <tcloud-ui-datepicker [minDate]=\"minDate\" [maxDate]=\"maxDate\" #_tclouddatepickertime [childInputDateTime]=\"true\" [modeInput]=\"true\" name=\"date\" [useBorder]=\"false\" [(ngModel)]=\"DD_MM_YYYY\" (onChange)=\"toSetDate($event)\" ></tcloud-ui-datepicker>\r\n </ng-container>\r\n </td>\r\n \r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\"></div></td>\r\n <td class=\"area-input-hour\">\r\n <!--<input type=\"text\" placeholder=\"HH\" (keyup)=\"toSetTime()\" [(ngModel)]=\"HH\" maxlength=\"2\" name=\"hh\" pattern=\"[0][0-9]|[1][0-9]|2[0-3]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"HH\" name=\"hh\">\r\n <ng-container *ngFor=\"let hh of option_HH\">\r\n <option [ngValue]=\"hh\">{{ hh }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-delimiter\"><div class=\"delimiter-time\">:</div></td>\r\n <td class=\"area-input-minute\">\r\n <!--<input type=\"text\" placeholder=\"MM\" (keyup)=\"toSetTime()\" [(ngModel)]=\"MM\" maxlength=\"2\" name=\"mm\" pattern=\"[012345][0-9]\">-->\r\n <select class=\"select-time-date\" (change)=\"toSetTime()\" [(ngModel)]=\"MM\" name=\"mm\">\r\n <ng-container *ngFor=\"let mm of option_MM\">\r\n <option [value]=\"mm\">{{ mm }}</option>\r\n </ng-container>\r\n </select>\r\n </td>\r\n <td class=\"area-clean\"></td>\r\n </tr>\r\n </table>\r\n\r\n <div class=\"description-options-date\" *ngIf=\"value_options_date_time !== ''\">\r\n <strong>{{ description_options_date_time }}</strong>\r\n\r\n <!-- <div class=\"area-action-date-time-selected\">\r\n <button class=\"btn-icon\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </div> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </td>\r\n <td *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0\" style=\"width: 20px\">\r\n <button type=\"button\" class=\"icon-short-time\" (click)=\"open_options_date_time = !open_options_date_time\" [title]=\"description_options_date_time\" >\r\n <i *ngIf=\"!open_options_date_time\" class=\"fas fa-caret-down\"></i>\r\n <i *ngIf=\"open_options_date_time\" class=\"fas fa-caret-up\"></i>\r\n </button>\r\n\r\n <ng-container *ngIf=\"value_options_date_time !== ''\">\r\n <button class=\"btn-icon-close\" type=\"button\" (click)=\"closedTimeDescription()\" >\r\n <i class=\"fas fa-times\"></i>\r\n </button> \r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"useOptionsDateTime && options_date_time && (options_date_time).length > 0 && open_options_date_time\">\r\n <td colspan=\"2\">\r\n <tcloud-ui-data-list \r\n name=\"value_options_date_time\"\r\n [showInput]=\"false\" \r\n [search]=\"false\" \r\n [open]=\"true\" \r\n [listItems]=\"options_date_time\" \r\n (onClosed)=\"onClosedOptionsDateTime()\"\r\n [ngModel]=\"value_options_date_time\"\r\n (ngModelChange)=\"onChangeOptionsDateTime($event)\"\r\n >\r\n </tcloud-ui-data-list>\r\n\r\n \r\n\r\n\r\n \r\n </td>\r\n </tr>\r\n </table>\r\n\r\n \r\n </div>\r\n </div>\r\n </form>\r\n</div>", styles: ["@charset \"UTF-8\";.input-control-time{background-color:#fff;border:1px solid #ccc;border-radius:3px;width:100%;height:40px}.form-control-time{max-width:220px;border:none}.form-control-time input{text-align:center}.form-time{width:100%}.form-time td:first-child{overflow:hidden}.delimiter-time{width:100%;text-align:center}.delimiter-time-icon{border:none;height:35px;width:10px;padding:4px;font-size:17px;text-align:center;opacity:.6}.area-icon{width:25px}.area-input-date{width:100px}.area-delimiter{width:2px;text-align:center}.area-input-hour,.area-input-minute{text-align:center;width:28px}.area-input-hour input,.area-input-minute input{height:35px;width:28px;text-align:center;color:#999;font-weight:600;font-style:italic}.area-input-hour input:focus,.area-input-minute input:focus{outline:none}.area-clean{width:12px}input,.datepicker-input{border:none!important}.select-time-date{border:none;background-color:transparent;width:40px;height:35px;padding:0;text-align:center;font-size:13px;color:#777;position:relative;top:-2px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.select-time-date:focus{box-shadow:0 0;border:0 none;outline:0}.btn-icon-close{border:none;background-color:#fff;cursor:pointer;padding:0;color:#aaa;width:17px;position:relative;top:-20px;z-index:1}.btn-icon-close:hover{color:#c43a3a!important}.icon-short-time{border:none;background:none;cursor:pointer;font-size:15px;color:#8a8a8a}.input-options-date{position:relative}.input-options-date .description-options-date{position:absolute;left:0;top:0;padding:5px 10px;background-color:#fff;width:100%;height:34px;overflow:hidden}.input-options-date .description-options-date strong{font-size:14px;font-weight:400;padding-left:5px}.input-options-date .area-action-date-time-selected{width:20px;display:block;float:right;text-align:right;position:relative;top:-2px;left:30px;z-index:1}\n"] }]
302
+ }], propDecorators: { ngModel: [{
303
+ type: Input
304
+ }], ngModelChange: [{
305
+ type: Output
306
+ }], onChange: [{
307
+ type: Output
308
+ }], eventChange: [{
309
+ type: Output
310
+ }], minDate: [{
311
+ type: Input
312
+ }], maxDate: [{
313
+ type: Input
314
+ }], useOptionsDateTime: [{
315
+ type: Input
316
+ }], datepickertime: [{
317
+ type: ViewChild,
318
+ args: ['_datepickertime', { static: false }]
319
+ }] } });
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Y2xvdWQtdWkvc3JjL2xpYi9fbW9kdWxlcy90Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lL3RjbG91ZC11aS1kYXRlcGlja2VyLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZS90Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBR25ELE1BQU0sbUNBQW1DLEdBQVE7SUFDL0MsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLCtCQUErQixDQUFDO0lBQzlELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUNsQixDQUFDLENBQUM7QUFRRixNQUFNLE9BQU8sK0JBQStCO0lBTjVDO1FBUUUscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBUXZCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV6QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFaEQscUVBQXFFO1FBQzVELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFOUIscUVBQXFFO1FBQzVELFlBQU8s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UTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdFLE9BQU87c0JBQWYsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQVd5QyxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgT25Jbml0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSVNlbGVjdE9wdGlvbnMgfSBmcm9tICcuLi90Y2xvdWQtdWktZGF0YS1saXN0L3RjbG91ZC11aS1kYXRhLWxpc3QnO1xyXG5cclxuY29uc3QgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcclxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUQ2xvdWRVaURhdGVwaWNrZXJUaW1lQ29tcG9uZW50KSxcclxuICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuY29uc3Qgbm9vcCA9ICgpID0+IHtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RjbG91ZC11aS1kYXRlcGlja2VyLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RjbG91ZC11aS1kYXRlcGlja2VyLXRpbWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRDbG91ZFVpRGF0ZXBpY2tlclRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBzaG93X2RhdGVfcGlja2VyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfbmdNb2RlbDogYW55IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNldCBuZ01vZGVsKHY6IGFueSl7XHJcbiAgICBpZiggdiAmJiB2ICE9PSB0aGlzLmlubmVyVmFsdWUgKXtcclxuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdjsgXHJcbiAgICB9IFxyXG4gIH1cclxuICBAT3V0cHV0KCkgbmdNb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG4gIEBPdXRwdXQoKSBldmVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvLyBtaW5EYXRlIC0gRGF0YSBtaW5pbWEgcGFyYSBleGliaWNhbyBkbyBjYWxlbmRhcmlvIC0gZXg6IDAxLzAxLzIwMjBcclxuICBASW5wdXQoKSBtaW5EYXRlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLy8gbWF4RGF0ZSAtIERhdGEgbWF4aW1hIHBhcmEgZXhpYmljYW8gZG8gY2FsZW5kYXJpbyAtIGV4OiAzMS8xMi8yMDIwXHJcbiAgQElucHV0KCkgbWF4RGF0ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIHVzZU9wdGlvbnNEYXRlVGltZSA9IGZhbHNlO1xyXG5cclxuICBERF9NTV9ZWVlZOiBzdHJpbmcgPSAnJztcclxuICBISDogc3RyaW5nID0gJzAwJztcclxuICBNTTogc3RyaW5nID0gJzAwJztcclxuXHJcbiAgSUQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBvcHRpb25fSEg6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xyXG4gIG9wdGlvbl9NTTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ19kYXRlcGlja2VydGltZScsIHtzdGF0aWM6IGZhbHNlfSkgZGF0ZXBpY2tlcnRpbWU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBvcHRpb25zX2RhdGVfdGltZSA6IElTZWxlY3RPcHRpb25zW10gPSBbXTtcclxuICBvcGVuX29wdGlvbnNfZGF0ZV90aW1lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGxhc3Rfb3B0aW9uc19kYXRlX3RpbWU6IGFueTtcclxuICBkZXNjcmlwdGlvbl9vcHRpb25zX2RhdGVfdGltZTogYW55ID0gJyc7XHJcbiAgdmFsdWVfb3B0aW9uc19kYXRlX3RpbWU6IGFueSA9ICcnO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcblxyXG4gICAgdGhpcy5zZXRPcHRpb25zRGF0ZVRpbWUoKTtcclxuXHJcbiAgICB0aGlzLklEID0gdGhpcy5nZW5lcmF0ZUlEKCk7XHJcbiAgICB0aGlzLm9wdGlvbl9ISCA9IHRoaXMuZ2V0TGlzdFRJTUUoMjMpO1xyXG4gICAgdGhpcy5vcHRpb25fTU0gPSB0aGlzLmdldExpc3RUSU1FKDU5KTtcclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnNEYXRlVGltZSgpe1xyXG4gICAgdGhpcy5vcHRpb25zX2RhdGVfdGltZSA9IFtcclxuICAgICAge3ZhbHVlOic3LWRheXMnLCBkZXNjcmlwdGlvbjogJzcgZGlhcyd9LFxyXG4gICAgICB7dmFsdWU6JzE1LWRheXMnLCBkZXNjcmlwdGlvbjogJzE1IGRpYXMnfSxcclxuICAgICAge3ZhbHVlOiczMC1kYXlzJywgZGVzY3JpcHRpb246ICczMCBkaWFzJ30sXHJcbiAgICAgIHt2YWx1ZTonY3VycmVudC1tb250aCcsIGRlc2NyaXB0aW9uOiAnTcOqcyBhdHVhbCBhdMOpIGFnb3JhJ30sXHJcbiAgICAgIHt2YWx1ZTonY3VycmVudC15ZWFyJywgZGVzY3JpcHRpb246ICdBbm8gYXR1YWwgYXTDqSBhZ29yYSd9XHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUlEKCk6IHN0cmluZ3tcclxuICAgIHJldHVybiBgdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIERhdGUubm93KCkpKX1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdFRJTUUodjogbnVtYmVyKXtcclxuICAgIGxldCBtbSA9IFtdO1xyXG4gICAgZm9yKGxldCBpID0gMDsgaSA8PSB2OyBpKysgKXtcclxuICAgICAgaWYoIGkgPCAxMCApe1xyXG4gICAgICAgIChtbSkucHVzaChgMCR7aX1gKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgKG1tKS5wdXNoKGAke2l9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtbTtcclxuICB9XHJcblxyXG4gIHRvU2V0RGF0ZShkYXRlOiBzdHJpbmcpeyAgICBcclxuICAgIHRoaXMuc2V0X2RhdGVfYnlfZGF0ZXBpY2tlcihkYXRlKTtcclxuICB9XHJcblxyXG4gIHRvU2V0VGltZSgpe1xyXG4gICAgaWYoIHRoaXMuRERfTU1fWVlZWSAmJiAoKHRoaXMuRERfTU1fWVlZWSkudHJpbSgpKS5sZW5ndGggPT09IDEwKXtcclxuICAgICAgY29uc3QgZGF0ZSA9ICh0aGlzLkREX01NX1lZWVkpLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgbGV0IGRhdGVfcGFydCA9IChkYXRlKS5zcGxpdCgnLycpO1xyXG4gICAgICBsZXQgZGQgPSBkYXRlX3BhcnRbMF07XHJcbiAgICAgIGxldCBtbSA9IGRhdGVfcGFydFsxXTtcclxuICAgICAgbGV0IHl5ID0gZGF0ZV9wYXJ0WzJdO1xyXG4gICAgICBjb25zdCBkYXRldGltZSA9IG5ldyBEYXRlKGAke3l5fS0ke21tfS0ke2RkfWApO1xyXG4gICAgICBpZiggdGhpcy5jaGVja0lzRGF0ZShkYXRldGltZSkgKXtcclxuICAgICAgICB0aGlzLnNldF9kYXRlX2J5X2RhdGVwaWNrZXIoZGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldF9kYXRlX2J5X2RhdGVwaWNrZXIoZGF0ZTogc3RyaW5nKXtcclxuXHJcbiAgICBpZiggZGF0ZSApe1xyXG4gICAgICBkYXRlID0gKGRhdGUpLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgbGV0IGRhdGVfcGFydCA9IChkYXRlKS5zcGxpdCgnLycpO1xyXG4gICAgICBsZXQgZGlhID0gZGF0ZV9wYXJ0WzBdO1xyXG4gICAgICBsZXQgbWVzID0gZGF0ZV9wYXJ0WzFdO1xyXG4gICAgICBsZXQgYW5vID0gZGF0ZV9wYXJ0WzJdO1xyXG5cclxuICAgICAgbGV0IGhoID0gdGhpcy5ISDtcclxuICAgICAgaWYoICFoaCApe1xyXG4gICAgICAgIGhoID0gJzAwJztcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgaWYoICggKyhoaCkgPj0gMCAmJiArKGhoKSA8IDI0ICkgKXtcclxuICAgICAgICAgIGhoID0gKCsoaGgpIDwgMTAgKSA/IGAwJHsrKGhoKX1gIDogYCR7KyhoaCl9YDtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGhoID0gJzAwJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBtbSA9IHRoaXMuTU07XHJcbiAgICAgIGlmKCAhbW0gKXtcclxuICAgICAgICBtbSA9ICcwMCc7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGlmKCAoICsobW0pID49IDAgJiYgKyhtbSkgPCA2MCApICl7XHJcbiAgICAgICAgICBtbSA9ICgrKG1tKSA8IDEwICkgPyBgMCR7KyhtbSl9YCA6IGAkeysobW0pfWA7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBtbSA9ICcwMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiggaGggPT09ICcwMCcgKXsgdGhpcy5ISCA9IGhoOyB9XHJcbiAgICAgIGlmKCBtbSA9PT0gJzAwJyApeyB0aGlzLk1NID0gbW07IH1cclxuXHJcbiAgICAgIGNvbnN0IG5vdGF0aW9uID0gJzAwJztcclxuXHJcbiAgICAgIGNvbnN0IHN0cl9kYXRlID0gYCR7YW5vfS0ke21lc30tJHtkaWF9VCR7aGh9OiR7bW19OiR7bm90YXRpb259YDtcclxuICAgICAgY29uc3QgZGF0ZXRpbWUgPSBuZXcgRGF0ZSggc3RyX2RhdGUgKTtcclxuICAgICAgXHJcbiAgICAgIGlmKCB0aGlzLmNoZWNrSXNEYXRlKGRhdGV0aW1lKSApe1xyXG4gICAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IGRhdGV0aW1lO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmlubmVyVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmRhdGVwaWNrZXJ0aW1lPy5uYXRpdmVFbGVtZW50JywgdGhpcy5kYXRlcGlja2VydGltZT8ubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgICAvLyBpZih0aGlzLmRhdGVwaWNrZXJ0aW1lICYmIHRoaXMuZGF0ZXBpY2tlcnRpbWUubmF0aXZlRWxlbWVudCl7XHJcbiAgICAgIC8vICAgY29uc3QgZWxlbSA9IDxhbnk+IHRoaXMuZGF0ZXBpY2tlcnRpbWUubmF0aXZlRWxlbWVudDtcclxuICAgICAgLy8gICBlbGVtLnZhbHVlID0gdGhpcy5pbm5lclZhbHVlO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICB0aGlzLm5nTW9kZWxDaGFuZ2UuZW1pdCggdGhpcy5pbm5lclZhbHVlICk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCggdGhpcy5pbm5lclZhbHVlICk7XHJcbiAgICAgIHRoaXMuZXZlbnRDaGFuZ2UuZW1pdCggdGhpcy5kYXRlcGlja2VydGltZT8ubmF0aXZlRWxlbWVudCApO1xyXG5cclxuICAgIH1lbHNle1xyXG5cclxuICAgICAgdGhpcy5kZXNjcmlwdGlvbl9vcHRpb25zX2RhdGVfdGltZSA9ICcnO1xyXG4gICAgICB0aGlzLnZhbHVlX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7XHJcblxyXG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMubmdNb2RlbENoYW5nZS5lbWl0KCB0aGlzLmlubmVyVmFsdWUgKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KCB0aGlzLmlubmVyVmFsdWUgKTtcclxuICAgICAgdGhpcy5ldmVudENoYW5nZS5lbWl0KCB0aGlzLmRhdGVwaWNrZXJ0aW1lPy5uYXRpdmVFbGVtZW50ICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGAke3RoaXMubGFzdF9vcHRpb25zX2RhdGVfdGltZX1gICE9PSBgJHt0aGlzLmlubmVyVmFsdWV9YCApe1xyXG4gICAgICAvLyB0aGlzLmRlc2NyaXB0aW9uX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7XHJcbiAgICAgIC8vIHRoaXMudmFsdWVfb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLyBEaXN0cmlidWlyIG9zIHZhbG9yZXMgZGEgZGF0YSBwb3IgcGVkYcOnb3M6IGRhdGEgLSBob3JhIC0gbWluXHJcbiAgdG9fZGF0ZV9oaF9tbShkOiBEYXRlKXtcclxuICAgIGxldCBkaWEgPSBgJHsoZCkuZ2V0RGF0ZSgpfWA7XHJcbiAgICBkaWEgPSAoKyhkaWEpIDwgMTAgKSA/IGAwJHsrZGlhfWAgOiBkaWE7XHJcbiAgICBsZXQgbWVzID0gYCR7KGQpLmdldE1vbnRoKCkrMX1gO1xyXG4gICAgbWVzID0gKCsobWVzKSA8IDEwICkgPyBgMCR7K21lc31gIDogbWVzOyAgXHJcblxyXG4gICAgbGV0IGFubyA9IGAkeyhkKS5nZXRGdWxsWWVhcigpfWA7XHJcbiAgICBsZXQgaGggID0gYCR7KGQpLmdldEhvdXJzKCl9YDtcclxuICAgIGxldCBtbSAgPSBgJHsoZCkuZ2V0TWludXRlcygpfWA7XHJcblxyXG4gICAgaWYoIGhoICYmICggKyhoaCkgPCAwIHx8ICsoaGgpID4gMjMgKSApeyBoaCA9ICcwMCc7IH1cclxuICAgIGhoID0gKGhoKSA/ICggKCsoaGgpIDwgMTAgKSA/IGAwJHtoaH1gIDogaGggKSA6ICcwMCc7XHJcblxyXG4gICAgaWYoIG1tICYmICggKyhtbSkgPCAwIHx8ICsobW0pID4gNTkgKSApeyBtbSA9ICcwMCc7IH1cclxuICAgIG1tID0gKG1tKSA/ICggKCsobW0pIDwgMTAgKSA/IGAwJHttbX1gIDogbW0gKSA6ICcwMCc7XHJcblxyXG4gICAgdGhpcy5NTSA9IG1tO1xyXG4gICAgdGhpcy5ISCA9IGhoO1xyXG5cclxuICAgIHRoaXMuRERfTU1fWVlZWSA9IGAke2RpYX0vJHttZXN9LyR7YW5vfWA7XHJcbiAgfVxyXG5cclxuICBjaGVja0lzRGF0ZShkOiBhbnkpOiBib29sZWFue1xyXG5cclxuICAgIGlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSA9PT0gXCJbb2JqZWN0IERhdGVdXCIpIHtcclxuICAgICAgaWYoaXNOYU4oZCkpIHsgcmV0dXJuIGZhbHNlOyB9IGVsc2UgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgfSBcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBjbGVhbigpe1xyXG4gICAgdGhpcy5ERF9NTV9ZWVlZID0gJyc7XHJcbiAgICB0aGlzLkhIID0gJzAwJztcclxuICAgIHRoaXMuTU0gPSAnMDAnO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbl9vcHRpb25zX2RhdGVfdGltZSA9ICcnO1xyXG4gICAgdGhpcy52YWx1ZV9vcHRpb25zX2RhdGVfdGltZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgdG9DbGlja0luKGlkOiBzdHJpbmcpe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpPy5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZWRPcHRpb25zRGF0ZVRpbWUoKXtcclxuICAgIHRoaXMub3Blbl9vcHRpb25zX2RhdGVfdGltZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBcclxuICBvbkNoYW5nZU9wdGlvbnNEYXRlVGltZShldmVudDogYW55KXtcclxuICAgIC8vIHRoaXMuZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIC8vIHRoaXMudmFsdWVfb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIHRoaXMuc2hvd19kYXRlX3BpY2tlciA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgbGV0IGZpbHRlcl9kYXRlOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiggZXZlbnQgPT09ICc3LWRheXMnICl7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoIChuZXcgRGF0ZShub3cpKS5zZXREYXRlKCBub3cuZ2V0RGF0ZSgpIC0gNyApICk7ICBcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKGZpbHRlcl9kYXRlKS5zZXRTZWNvbmRzKDApICk7ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGV2ZW50ID09PSAnMTUtZGF5cycgKXtcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKG5ldyBEYXRlKG5vdykpLnNldERhdGUoIG5vdy5nZXREYXRlKCkgLSAxNSApICk7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoIChmaWx0ZXJfZGF0ZSkuc2V0U2Vjb25kcygwKSApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBldmVudCA9PT0gJzMwLWRheXMnICl7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoIChuZXcgRGF0ZShub3cpKS5zZXREYXRlKCBub3cuZ2V0RGF0ZSgpIC0gMzAgKSApO1xyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAoZmlsdGVyX2RhdGUpLnNldFNlY29uZHMoMCkgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggZXZlbnQgPT09ICdjdXJyZW50LW1vbnRoJyApe1xyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGV2ZW50ID09PSAnY3VycmVudC15ZWFyJyApe1xyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCAwLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihmaWx0ZXJfZGF0ZSl7ICAgICAgXHJcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IGZpbHRlcl9kYXRlO1xyXG4gICAgICBpZiggdGhpcy5jaGVja0lzRGF0ZShmaWx0ZXJfZGF0ZSkgKXsgICAgICAgICAgICAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b19kYXRlX2hoX21tKGZpbHRlcl9kYXRlKTtcclxuICAgICAgICAgIHRoaXMudG9TZXREYXRlKHRoaXMuRERfTU1fWVlZWSk7ICBcclxuICAgICAgICAgIHRoaXMuc2hvd19kYXRlX3BpY2tlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlX29wdGlvbnNfZGF0ZV90aW1lID0gZXZlbnQ7XHJcbiAgICAgICAgICB0aGlzLmxhc3Rfb3B0aW9uc19kYXRlX3RpbWUgPSBmaWx0ZXJfZGF0ZSBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uX29wdGlvbnNfZGF0ZV90aW1lID0gdGhpcy5nZXRfZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUoZXZlbnQpO1xyXG4gICAgICAgIH0pOyAgICAgICBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBnZXRfZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUodmFsdWU6IHN0cmluZyl7XHJcbiAgICBpZiggdGhpcy5vcHRpb25zX2RhdGVfdGltZSAmJiAodGhpcy5vcHRpb25zX2RhdGVfdGltZSkubGVuZ3RoID4gMCApe1xyXG4gICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLm9wdGlvbnNfZGF0ZV90aW1lKS5sZW5ndGg7IGkrKyApe1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm9wdGlvbnNfZGF0ZV90aW1lW2ldO1xyXG4gICAgICAgIGlmKCBpdGVtLnZhbHVlID09PSB2YWx1ZSApe1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0uZGVzY3JpcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VkVGltZURlc2NyaXB0aW9uKCl7XHJcbiAgICB0aGlzLnZhbHVlX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7XHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7IFxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBcclxuICBpbm5lclZhbHVlOiBhbnkgfCB1bmRlZmluZWQ7XHJcbiAgLy9QbGFjZWhvbGRlcnMgZm9yIHRoZSBjYWxsYmFja3Mgd2hpY2ggYXJlIGxhdGVyIHByb3ZpZGVzZFxyXG4gIC8vYnkgdGhlIENvbnRyb2wgVmFsdWUgQWNjZXNzb3JcclxuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcclxuICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xyXG5cclxuICAvL2dldCBhY2Nlc3NvclxyXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbm5lclZhbHVlO1xyXG4gIH07XHJcblxyXG4gIC8vc2V0IGFjY2Vzc29yIGluY2x1ZGluZyBjYWxsIHRoZSBvbmNoYW5nZSBjYWxsYmFja1xyXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcclxuICAgIGlmICh2ICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdjsgICAgICBcclxuICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9TZXQgdG91Y2hlZCBvbiBibHVyXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSggYCR7dmFsdWV9YCApO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cclxuXHJcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICBpZiggdGhpcy5jaGVja0lzRGF0ZSh2YWx1ZSkgKXtcclxuICAgICAgICB0aGlzLnRvX2RhdGVfaGhfbW0odmFsdWUpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmNsZWFuKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICAvL0Zyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRjbG91ZC11aS1kYXRlcGlja2VyLXRpbWVcIj5cclxuICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHZhbHVlPVwie3sgaW5uZXJWYWx1ZSB9fVwiICNfZGF0ZXBpY2tlcnRpbWUgPlxyXG4gIDxmb3JtICNfZm9ybXVsYXJpbz1cIm5nRm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRyb2wtdGltZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLXRpbWVcIj5cclxuXHJcbiAgICAgICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW9wdGlvbnMtZGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImZvcm0tdGltZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDx0ZCBjbGFzcz1cImFyZWEtaWNvblwiPjxkaXYgY2xhc3M9XCJkZWxpbWl0ZXItdGltZS1pY29uXCIgKGNsaWNrKT1cInRvQ2xpY2tJbihJRClcIiA+PGkgY2xhc3M9XCJmYXMgZmEtY2FsZW5kYXItYWx0XCI+PC9pPjwvZGl2PjwvdGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhcmVhLWlucHV0LWRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd19kYXRlX3BpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRjbG91ZC11aS1kYXRlcGlja2VyIFttaW5EYXRlXT1cIm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgI190Y2xvdWRkYXRlcGlja2VydGltZSBbY2hpbGRJbnB1dERhdGVUaW1lXT1cInRydWVcIiBbbW9kZUlucHV0XT1cInRydWVcIiBuYW1lPVwiZGF0ZVwiIFt1c2VCb3JkZXJdPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cIkREX01NX1lZWVlcIiAob25DaGFuZ2UpPVwidG9TZXREYXRlKCRldmVudClcIiA+PC90Y2xvdWQtdWktZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFyZWEtZGVsaW1pdGVyXCI+PGRpdiBjbGFzcz1cImRlbGltaXRlci10aW1lXCI+PC9kaXY+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJlYS1pbnB1dC1ob3VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiSEhcIiAoa2V5dXApPVwidG9TZXRUaW1lKClcIiBbKG5nTW9kZWwpXT1cIkhIXCIgbWF4bGVuZ3RoPVwiMlwiIG5hbWU9XCJoaFwiIHBhdHRlcm49XCJbMF1bMC05XXxbMV1bMC05XXwyWzAtM11cIj4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0LXRpbWUtZGF0ZVwiIChjaGFuZ2UpPVwidG9TZXRUaW1lKClcIiBbKG5nTW9kZWwpXT1cIkhIXCIgbmFtZT1cImhoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoaCBvZiBvcHRpb25fSEhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJoaFwiPnt7IGhoIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJlYS1kZWxpbWl0ZXJcIj48ZGl2IGNsYXNzPVwiZGVsaW1pdGVyLXRpbWVcIj46PC9kaXY+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJlYS1pbnB1dC1taW51dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJNTVwiIChrZXl1cCk9XCJ0b1NldFRpbWUoKVwiIFsobmdNb2RlbCldPVwiTU1cIiBtYXhsZW5ndGg9XCIyXCIgbmFtZT1cIm1tXCIgcGF0dGVybj1cIlswMTIzNDVdWzAtOV1cIj4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0LXRpbWUtZGF0ZVwiIChjaGFuZ2UpPVwidG9TZXRUaW1lKClcIiBbKG5nTW9kZWwpXT1cIk1NXCIgbmFtZT1cIm1tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtbSBvZiBvcHRpb25fTU1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibW1cIj57eyBtbSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFyZWEtY2xlYW5cIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb24tb3B0aW9ucy1kYXRlXCIgKm5nSWY9XCJ2YWx1ZV9vcHRpb25zX2RhdGVfdGltZSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUgfX08L3N0cm9uZz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImFyZWEtYWN0aW9uLWRhdGUtdGltZS1zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4taWNvblwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VkVGltZURlc2NyaXB0aW9uKClcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwidXNlT3B0aW9uc0RhdGVUaW1lICYmIG9wdGlvbnNfZGF0ZV90aW1lICYmIChvcHRpb25zX2RhdGVfdGltZSkubGVuZ3RoID4gMFwiIHN0eWxlPVwid2lkdGg6IDIwcHhcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImljb24tc2hvcnQtdGltZVwiIChjbGljayk9XCJvcGVuX29wdGlvbnNfZGF0ZV90aW1lID0gIW9wZW5fb3B0aW9uc19kYXRlX3RpbWVcIiBbdGl0bGVdPVwiZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWVcIiA+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFvcGVuX29wdGlvbnNfZGF0ZV90aW1lXCIgY2xhc3M9XCJmYXMgZmEtY2FyZXQtZG93blwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwib3Blbl9vcHRpb25zX2RhdGVfdGltZVwiIGNsYXNzPVwiZmFzIGZhLWNhcmV0LXVwXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVfb3B0aW9uc19kYXRlX3RpbWUgIT09ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWljb24tY2xvc2VcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlZFRpbWVEZXNjcmlwdGlvbigpXCIgPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwidXNlT3B0aW9uc0RhdGVUaW1lICYmIG9wdGlvbnNfZGF0ZV90aW1lICYmIChvcHRpb25zX2RhdGVfdGltZSkubGVuZ3RoID4gMCAmJiBvcGVuX29wdGlvbnNfZGF0ZV90aW1lXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgPHRjbG91ZC11aS1kYXRhLWxpc3QgXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZV9vcHRpb25zX2RhdGVfdGltZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93SW5wdXRdPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICAgICAgICBbb3Blbl09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtsaXN0SXRlbXNdPVwib3B0aW9uc19kYXRlX3RpbWVcIiBcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xvc2VkKT1cIm9uQ2xvc2VkT3B0aW9uc0RhdGVUaW1lKClcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZV9vcHRpb25zX2RhdGVfdGltZVwiXHJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlT3B0aW9uc0RhdGVUaW1lKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3RjbG91ZC11aS1kYXRhLWxpc3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgXHJcblxyXG5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj4iXX0=