mis-crystal-design-system 14.0.55-test-v6 → 14.0.56

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 (471) hide show
  1. package/dynamic-form/dynamic-form.component.d.ts +10 -2
  2. package/esm2020/dynamic-form/dynamic-form.component.mjs +471 -213
  3. package/esm2020/table/table.component.mjs +2 -2
  4. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs +524 -212
  5. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  6. package/fesm2015/mis-crystal-design-system-table.mjs +2 -2
  7. package/fesm2015/mis-crystal-design-system-table.mjs.map +1 -1
  8. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs +470 -212
  9. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  10. package/fesm2020/mis-crystal-design-system-table.mjs +2 -2
  11. package/fesm2020/mis-crystal-design-system-table.mjs.map +1 -1
  12. package/package.json +1 -9
  13. package/datepicker/base/bs-datepicker-container.d.ts +0 -44
  14. package/datepicker/bs-datepicker-inline.component.d.ts +0 -64
  15. package/datepicker/bs-datepicker-inline.config.d.ts +0 -6
  16. package/datepicker/bs-datepicker-input.directive.d.ts +0 -33
  17. package/datepicker/bs-datepicker.component.d.ts +0 -126
  18. package/datepicker/bs-datepicker.config.d.ts +0 -143
  19. package/datepicker/bs-datepicker.module.d.ts +0 -29
  20. package/datepicker/bs-daterangepicker-inline.component.d.ts +0 -64
  21. package/datepicker/bs-daterangepicker-inline.config.d.ts +0 -9
  22. package/datepicker/bs-daterangepicker-input.directive.d.ts +0 -33
  23. package/datepicker/bs-daterangepicker.component.d.ts +0 -118
  24. package/datepicker/bs-daterangepicker.config.d.ts +0 -7
  25. package/datepicker/bs-locale.service.d.ts +0 -13
  26. package/datepicker/chronos/create/check-overflow.d.ts +0 -2
  27. package/datepicker/chronos/create/clone.d.ts +0 -1
  28. package/datepicker/chronos/create/date-from-array.d.ts +0 -2
  29. package/datepicker/chronos/create/from-anything.d.ts +0 -4
  30. package/datepicker/chronos/create/from-array.d.ts +0 -2
  31. package/datepicker/chronos/create/from-object.d.ts +0 -2
  32. package/datepicker/chronos/create/from-string-and-array.d.ts +0 -2
  33. package/datepicker/chronos/create/from-string-and-format.d.ts +0 -4
  34. package/datepicker/chronos/create/from-string.d.ts +0 -4
  35. package/datepicker/chronos/create/local.d.ts +0 -3
  36. package/datepicker/chronos/create/parsing-flags.d.ts +0 -2
  37. package/datepicker/chronos/create/parsing.types.d.ts +0 -64
  38. package/datepicker/chronos/create/valid.d.ts +0 -6
  39. package/datepicker/chronos/duration/bubble.d.ts +0 -4
  40. package/datepicker/chronos/duration/constructor.d.ts +0 -21
  41. package/datepicker/chronos/duration/create.d.ts +0 -8
  42. package/datepicker/chronos/duration/humanize.d.ts +0 -5
  43. package/datepicker/chronos/duration/valid.d.ts +0 -2
  44. package/datepicker/chronos/format/format.d.ts +0 -11
  45. package/datepicker/chronos/format.d.ts +0 -5
  46. package/datepicker/chronos/i18n/ar.d.ts +0 -2
  47. package/datepicker/chronos/i18n/bg.d.ts +0 -2
  48. package/datepicker/chronos/i18n/ca.d.ts +0 -2
  49. package/datepicker/chronos/i18n/cs.d.ts +0 -2
  50. package/datepicker/chronos/i18n/da.d.ts +0 -2
  51. package/datepicker/chronos/i18n/de.d.ts +0 -2
  52. package/datepicker/chronos/i18n/en-gb.d.ts +0 -2
  53. package/datepicker/chronos/i18n/es-do.d.ts +0 -2
  54. package/datepicker/chronos/i18n/es-us.d.ts +0 -2
  55. package/datepicker/chronos/i18n/es.d.ts +0 -2
  56. package/datepicker/chronos/i18n/et.d.ts +0 -2
  57. package/datepicker/chronos/i18n/fi.d.ts +0 -2
  58. package/datepicker/chronos/i18n/fr.d.ts +0 -2
  59. package/datepicker/chronos/i18n/gl.d.ts +0 -2
  60. package/datepicker/chronos/i18n/he.d.ts +0 -2
  61. package/datepicker/chronos/i18n/hi.d.ts +0 -2
  62. package/datepicker/chronos/i18n/hr.d.ts +0 -2
  63. package/datepicker/chronos/i18n/hu.d.ts +0 -2
  64. package/datepicker/chronos/i18n/id.d.ts +0 -2
  65. package/datepicker/chronos/i18n/it.d.ts +0 -2
  66. package/datepicker/chronos/i18n/ja.d.ts +0 -2
  67. package/datepicker/chronos/i18n/ka.d.ts +0 -2
  68. package/datepicker/chronos/i18n/kk.d.ts +0 -2
  69. package/datepicker/chronos/i18n/ko.d.ts +0 -2
  70. package/datepicker/chronos/i18n/lt.d.ts +0 -2
  71. package/datepicker/chronos/i18n/lv.d.ts +0 -2
  72. package/datepicker/chronos/i18n/mn.d.ts +0 -2
  73. package/datepicker/chronos/i18n/nb.d.ts +0 -2
  74. package/datepicker/chronos/i18n/nl-be.d.ts +0 -2
  75. package/datepicker/chronos/i18n/nl.d.ts +0 -2
  76. package/datepicker/chronos/i18n/pl.d.ts +0 -2
  77. package/datepicker/chronos/i18n/pt-br.d.ts +0 -2
  78. package/datepicker/chronos/i18n/ro.d.ts +0 -2
  79. package/datepicker/chronos/i18n/ru.d.ts +0 -2
  80. package/datepicker/chronos/i18n/sk.d.ts +0 -2
  81. package/datepicker/chronos/i18n/sl.d.ts +0 -2
  82. package/datepicker/chronos/i18n/sq.d.ts +0 -2
  83. package/datepicker/chronos/i18n/sv.d.ts +0 -2
  84. package/datepicker/chronos/i18n/th-be.d.ts +0 -2
  85. package/datepicker/chronos/i18n/th.d.ts +0 -2
  86. package/datepicker/chronos/i18n/tr.d.ts +0 -2
  87. package/datepicker/chronos/i18n/uk.d.ts +0 -2
  88. package/datepicker/chronos/i18n/vi.d.ts +0 -2
  89. package/datepicker/chronos/i18n/zh-cn.d.ts +0 -2
  90. package/datepicker/chronos/index.d.ts +0 -1
  91. package/datepicker/chronos/locale/calendar.d.ts +0 -8
  92. package/datepicker/chronos/locale/locale.class.d.ts +0 -143
  93. package/datepicker/chronos/locale/locale.defaults.d.ts +0 -11
  94. package/datepicker/chronos/locale/locales.d.ts +0 -7
  95. package/datepicker/chronos/moment/add-subtract.d.ts +0 -5
  96. package/datepicker/chronos/moment/calendar.d.ts +0 -15
  97. package/datepicker/chronos/moment/diff.d.ts +0 -3
  98. package/datepicker/chronos/moment/min-max.d.ts +0 -2
  99. package/datepicker/chronos/parse/regex.d.ts +0 -22
  100. package/datepicker/chronos/parse/token.d.ts +0 -5
  101. package/datepicker/chronos/public_api.d.ts +0 -57
  102. package/datepicker/chronos/test/chain.d.ts +0 -214
  103. package/datepicker/chronos/types.d.ts +0 -36
  104. package/datepicker/chronos/units/aliases.d.ts +0 -7
  105. package/datepicker/chronos/units/constants.d.ts +0 -9
  106. package/datepicker/chronos/units/day-of-month.d.ts +0 -1
  107. package/datepicker/chronos/units/day-of-week.d.ts +0 -20
  108. package/datepicker/chronos/units/day-of-year.d.ts +0 -3
  109. package/datepicker/chronos/units/hour.d.ts +0 -1
  110. package/datepicker/chronos/units/index.d.ts +0 -18
  111. package/datepicker/chronos/units/millisecond.d.ts +0 -1
  112. package/datepicker/chronos/units/minute.d.ts +0 -1
  113. package/datepicker/chronos/units/month.d.ts +0 -2
  114. package/datepicker/chronos/units/offset.d.ts +0 -10
  115. package/datepicker/chronos/units/priorities.d.ts +0 -1
  116. package/datepicker/chronos/units/quarter.d.ts +0 -3
  117. package/datepicker/chronos/units/second.d.ts +0 -1
  118. package/datepicker/chronos/units/timestamp.d.ts +0 -1
  119. package/datepicker/chronos/units/timezone.d.ts +0 -3
  120. package/datepicker/chronos/units/week-calendar-utils.d.ts +0 -9
  121. package/datepicker/chronos/units/week-year.d.ts +0 -8
  122. package/datepicker/chronos/units/week.d.ts +0 -6
  123. package/datepicker/chronos/units/year.d.ts +0 -4
  124. package/datepicker/chronos/utils/abs-ceil.d.ts +0 -1
  125. package/datepicker/chronos/utils/abs-round.d.ts +0 -1
  126. package/datepicker/chronos/utils/compare-arrays.d.ts +0 -1
  127. package/datepicker/chronos/utils/date-compare.d.ts +0 -9
  128. package/datepicker/chronos/utils/date-getters.d.ts +0 -18
  129. package/datepicker/chronos/utils/date-setters.d.ts +0 -12
  130. package/datepicker/chronos/utils/defaults.d.ts +0 -1
  131. package/datepicker/chronos/utils/start-end-of.d.ts +0 -3
  132. package/datepicker/chronos/utils/type-checks.d.ts +0 -12
  133. package/datepicker/chronos/utils/zero-fill.d.ts +0 -1
  134. package/datepicker/chronos/utils.d.ts +0 -2
  135. package/datepicker/component-loader/bs-component-ref.class.d.ts +0 -5
  136. package/datepicker/component-loader/component-loader.class.d.ts +0 -75
  137. package/datepicker/component-loader/component-loader.factory.d.ts +0 -21
  138. package/datepicker/component-loader/content-ref.class.d.ts +0 -7
  139. package/datepicker/component-loader/index.d.ts +0 -1
  140. package/datepicker/component-loader/listen-options.model.d.ts +0 -11
  141. package/datepicker/component-loader/public_api.d.ts +0 -4
  142. package/datepicker/date-formatter.d.ts +0 -3
  143. package/datepicker/datepicker-animations.d.ts +0 -3
  144. package/datepicker/datepicker-inner.component.d.ts +0 -78
  145. package/datepicker/datepicker.component.d.ts +0 -81
  146. package/datepicker/datepicker.config.d.ts +0 -22
  147. package/datepicker/datepicker.module.d.ts +0 -15
  148. package/datepicker/daypicker.component.d.ts +0 -17
  149. package/datepicker/engine/calc-days-calendar.d.ts +0 -2
  150. package/datepicker/engine/flag-days-calendar.d.ts +0 -17
  151. package/datepicker/engine/flag-months-calendar.d.ts +0 -12
  152. package/datepicker/engine/flag-years-calendar.d.ts +0 -12
  153. package/datepicker/engine/format-days-calendar.d.ts +0 -4
  154. package/datepicker/engine/format-months-calendar.d.ts +0 -2
  155. package/datepicker/engine/format-years-calendar.d.ts +0 -4
  156. package/datepicker/engine/view-mode.d.ts +0 -2
  157. package/datepicker/index.d.ts +0 -1
  158. package/datepicker/mini-ngrx/index.d.ts +0 -1
  159. package/datepicker/mini-ngrx/public_api.d.ts +0 -7
  160. package/datepicker/mini-ngrx/state.class.d.ts +0 -8
  161. package/datepicker/mini-ngrx/store.class.d.ts +0 -16
  162. package/datepicker/models/index.d.ts +0 -102
  163. package/datepicker/monthpicker.component.d.ts +0 -14
  164. package/datepicker/positioning/index.d.ts +0 -1
  165. package/datepicker/positioning/models/index.d.ts +0 -41
  166. package/datepicker/positioning/modifiers/arrow.d.ts +0 -2
  167. package/datepicker/positioning/modifiers/flip.d.ts +0 -2
  168. package/datepicker/positioning/modifiers/index.d.ts +0 -5
  169. package/datepicker/positioning/modifiers/initData.d.ts +0 -2
  170. package/datepicker/positioning/modifiers/preventOverflow.d.ts +0 -2
  171. package/datepicker/positioning/modifiers/shift.d.ts +0 -2
  172. package/datepicker/positioning/ng-positioning.d.ts +0 -8
  173. package/datepicker/positioning/positioning.service.d.ts +0 -48
  174. package/datepicker/positioning/public_api.d.ts +0 -2
  175. package/datepicker/positioning/utils/computeAutoPlacement.d.ts +0 -2
  176. package/datepicker/positioning/utils/findCommonOffsetParent.d.ts +0 -1
  177. package/datepicker/positioning/utils/getBordersSize.d.ts +0 -4
  178. package/datepicker/positioning/utils/getBoundaries.d.ts +0 -1
  179. package/datepicker/positioning/utils/getBoundingClientRect.d.ts +0 -2
  180. package/datepicker/positioning/utils/getClientRect.d.ts +0 -5
  181. package/datepicker/positioning/utils/getFixedPositionOffsetParent.d.ts +0 -4
  182. package/datepicker/positioning/utils/getOffsetParent.d.ts +0 -1
  183. package/datepicker/positioning/utils/getOffsetRectRelativeToArbitraryNode.d.ts +0 -2
  184. package/datepicker/positioning/utils/getOffsets.d.ts +0 -2
  185. package/datepicker/positioning/utils/getOppositePlacement.d.ts +0 -4
  186. package/datepicker/positioning/utils/getOppositeVariation.d.ts +0 -4
  187. package/datepicker/positioning/utils/getOuterSizes.d.ts +0 -7
  188. package/datepicker/positioning/utils/getParentNode.d.ts +0 -4
  189. package/datepicker/positioning/utils/getReferenceOffsets.d.ts +0 -2
  190. package/datepicker/positioning/utils/getRoot.d.ts +0 -4
  191. package/datepicker/positioning/utils/getScroll.d.ts +0 -4
  192. package/datepicker/positioning/utils/getScrollParent.d.ts +0 -1
  193. package/datepicker/positioning/utils/getStyleComputedProperty.d.ts +0 -4
  194. package/datepicker/positioning/utils/getTargetOffsets.d.ts +0 -2
  195. package/datepicker/positioning/utils/getViewportOffsetRectRelativeToArtbitraryNode.d.ts +0 -2
  196. package/datepicker/positioning/utils/getWindowSizes.d.ts +0 -4
  197. package/datepicker/positioning/utils/includeScroll.d.ts +0 -2
  198. package/datepicker/positioning/utils/index.d.ts +0 -23
  199. package/datepicker/positioning/utils/isBrowser.d.ts +0 -1
  200. package/datepicker/positioning/utils/isFixed.d.ts +0 -1
  201. package/datepicker/positioning/utils/isIE.d.ts +0 -1
  202. package/datepicker/positioning/utils/isModifierEnabled.d.ts +0 -4
  203. package/datepicker/positioning/utils/isNumeric.d.ts +0 -4
  204. package/datepicker/positioning/utils/isOffsetContainer.d.ts +0 -1
  205. package/datepicker/positioning/utils/setStyles.d.ts +0 -5
  206. package/datepicker/positioning/utils/updateContainerClass.d.ts +0 -6
  207. package/datepicker/public_api.d.ts +0 -25
  208. package/datepicker/reducer/_defaults.d.ts +0 -2
  209. package/datepicker/reducer/bs-datepicker.actions.d.ts +0 -46
  210. package/datepicker/reducer/bs-datepicker.effects.d.ts +0 -41
  211. package/datepicker/reducer/bs-datepicker.reducer.d.ts +0 -3
  212. package/datepicker/reducer/bs-datepicker.state.d.ts +0 -43
  213. package/datepicker/reducer/bs-datepicker.store.d.ts +0 -8
  214. package/datepicker/themes/bs/bs-calendar-layout.component.d.ts +0 -5
  215. package/datepicker/themes/bs/bs-current-date-view.component.d.ts +0 -6
  216. package/datepicker/themes/bs/bs-custom-dates-view.component.d.ts +0 -17
  217. package/datepicker/themes/bs/bs-datepicker-container.component.d.ts +0 -36
  218. package/datepicker/themes/bs/bs-datepicker-day-decorator.directive.d.ts +0 -14
  219. package/datepicker/themes/bs/bs-datepicker-inline-container.component.d.ts +0 -13
  220. package/datepicker/themes/bs/bs-datepicker-navigation-view.component.d.ts +0 -12
  221. package/datepicker/themes/bs/bs-daterangepicker-container.component.d.ts +0 -40
  222. package/datepicker/themes/bs/bs-daterangepicker-inline-container.component.d.ts +0 -13
  223. package/datepicker/themes/bs/bs-days-calendar-view.component.d.ts +0 -26
  224. package/datepicker/themes/bs/bs-months-calendar-view.component.d.ts +0 -16
  225. package/datepicker/themes/bs/bs-timepicker-view.component.d.ts +0 -8
  226. package/datepicker/themes/bs/bs-years-calendar-view.component.d.ts +0 -16
  227. package/datepicker/utils/bs-calendar-utils.d.ts +0 -10
  228. package/datepicker/utils/matrix-utils.d.ts +0 -9
  229. package/datepicker/utils-v2/decorators.d.ts +0 -1
  230. package/datepicker/utils-v2/facade/browser.d.ts +0 -23
  231. package/datepicker/utils-v2/index.d.ts +0 -1
  232. package/datepicker/utils-v2/linked-list.class.d.ts +0 -26
  233. package/datepicker/utils-v2/public_api.d.ts +0 -10
  234. package/datepicker/utils-v2/theme-provider.d.ts +0 -2
  235. package/datepicker/utils-v2/trigger.class.d.ts +0 -6
  236. package/datepicker/utils-v2/triggers.d.ts +0 -18
  237. package/datepicker/utils-v2/utils.class.d.ts +0 -4
  238. package/datepicker/utils-v2/warn-once.d.ts +0 -1
  239. package/datepicker/yearpicker.component.d.ts +0 -14
  240. package/esm2020/datepicker/base/bs-datepicker-container.mjs +0 -47
  241. package/esm2020/datepicker/bs-datepicker-inline.component.mjs +0 -137
  242. package/esm2020/datepicker/bs-datepicker-inline.config.mjs +0 -14
  243. package/esm2020/datepicker/bs-datepicker-input.directive.mjs +0 -160
  244. package/esm2020/datepicker/bs-datepicker.component.mjs +0 -254
  245. package/esm2020/datepicker/bs-datepicker.config.mjs +0 -87
  246. package/esm2020/datepicker/bs-datepicker.module.mjs +0 -126
  247. package/esm2020/datepicker/bs-daterangepicker-inline.component.mjs +0 -134
  248. package/esm2020/datepicker/bs-daterangepicker-inline.config.mjs +0 -21
  249. package/esm2020/datepicker/bs-daterangepicker-input.directive.mjs +0 -192
  250. package/esm2020/datepicker/bs-daterangepicker.component.mjs +0 -240
  251. package/esm2020/datepicker/bs-daterangepicker.config.mjs +0 -19
  252. package/esm2020/datepicker/bs-locale.service.mjs +0 -32
  253. package/esm2020/datepicker/chronos/create/check-overflow.mjs +0 -30
  254. package/esm2020/datepicker/chronos/create/clone.mjs +0 -6
  255. package/esm2020/datepicker/chronos/create/date-from-array.mjs +0 -17
  256. package/esm2020/datepicker/chronos/create/from-anything.mjs +0 -107
  257. package/esm2020/datepicker/chronos/create/from-array.mjs +0 -136
  258. package/esm2020/datepicker/chronos/create/from-object.mjs +0 -17
  259. package/esm2020/datepicker/chronos/create/from-string-and-array.mjs +0 -38
  260. package/esm2020/datepicker/chronos/create/from-string-and-format.mjs +0 -106
  261. package/esm2020/datepicker/chronos/create/from-string.mjs +0 -227
  262. package/esm2020/datepicker/chronos/create/local.mjs +0 -16
  263. package/esm2020/datepicker/chronos/create/parsing-flags.mjs +0 -26
  264. package/esm2020/datepicker/chronos/create/parsing.types.mjs +0 -2
  265. package/esm2020/datepicker/chronos/create/valid.mjs +0 -42
  266. package/esm2020/datepicker/chronos/duration/bubble.mjs +0 -47
  267. package/esm2020/datepicker/chronos/duration/constructor.mjs +0 -130
  268. package/esm2020/datepicker/chronos/duration/create.mjs +0 -113
  269. package/esm2020/datepicker/chronos/duration/humanize.mjs +0 -80
  270. package/esm2020/datepicker/chronos/duration/valid.mjs +0 -43
  271. package/esm2020/datepicker/chronos/format/format.mjs +0 -51
  272. package/esm2020/datepicker/chronos/format.mjs +0 -46
  273. package/esm2020/datepicker/chronos/i18n/ar.mjs +0 -128
  274. package/esm2020/datepicker/chronos/i18n/bg.mjs +0 -94
  275. package/esm2020/datepicker/chronos/i18n/ca.mjs +0 -91
  276. package/esm2020/datepicker/chronos/i18n/cs.mjs +0 -179
  277. package/esm2020/datepicker/chronos/i18n/da.mjs +0 -50
  278. package/esm2020/datepicker/chronos/i18n/de.mjs +0 -72
  279. package/esm2020/datepicker/chronos/i18n/en-gb.mjs +0 -61
  280. package/esm2020/datepicker/chronos/i18n/es-do.mjs +0 -85
  281. package/esm2020/datepicker/chronos/i18n/es-us.mjs +0 -79
  282. package/esm2020/datepicker/chronos/i18n/es.mjs +0 -84
  283. package/esm2020/datepicker/chronos/i18n/et.mjs +0 -73
  284. package/esm2020/datepicker/chronos/i18n/fi.mjs +0 -100
  285. package/esm2020/datepicker/chronos/i18n/fr.mjs +0 -76
  286. package/esm2020/datepicker/chronos/i18n/gl.mjs +0 -84
  287. package/esm2020/datepicker/chronos/i18n/he.mjs +0 -98
  288. package/esm2020/datepicker/chronos/i18n/hi.mjs +0 -124
  289. package/esm2020/datepicker/chronos/i18n/hr.mjs +0 -62
  290. package/esm2020/datepicker/chronos/i18n/hu.mjs +0 -104
  291. package/esm2020/datepicker/chronos/i18n/id.mjs +0 -83
  292. package/esm2020/datepicker/chronos/i18n/it.mjs +0 -65
  293. package/esm2020/datepicker/chronos/i18n/ja.mjs +0 -75
  294. package/esm2020/datepicker/chronos/i18n/ka.mjs +0 -87
  295. package/esm2020/datepicker/chronos/i18n/kk.mjs +0 -76
  296. package/esm2020/datepicker/chronos/i18n/ko.mjs +0 -77
  297. package/esm2020/datepicker/chronos/i18n/lt.mjs +0 -116
  298. package/esm2020/datepicker/chronos/i18n/lv.mjs +0 -56
  299. package/esm2020/datepicker/chronos/i18n/mn.mjs +0 -99
  300. package/esm2020/datepicker/chronos/i18n/nb.mjs +0 -53
  301. package/esm2020/datepicker/chronos/i18n/nl-be.mjs +0 -81
  302. package/esm2020/datepicker/chronos/i18n/nl.mjs +0 -80
  303. package/esm2020/datepicker/chronos/i18n/pl.mjs +0 -126
  304. package/esm2020/datepicker/chronos/i18n/pt-br.mjs +0 -56
  305. package/esm2020/datepicker/chronos/i18n/ro.mjs +0 -66
  306. package/esm2020/datepicker/chronos/i18n/ru.mjs +0 -181
  307. package/esm2020/datepicker/chronos/i18n/sk.mjs +0 -157
  308. package/esm2020/datepicker/chronos/i18n/sl.mjs +0 -184
  309. package/esm2020/datepicker/chronos/i18n/sq.mjs +0 -54
  310. package/esm2020/datepicker/chronos/i18n/sv.mjs +0 -63
  311. package/esm2020/datepicker/chronos/i18n/th-be.mjs +0 -74
  312. package/esm2020/datepicker/chronos/i18n/th.mjs +0 -59
  313. package/esm2020/datepicker/chronos/i18n/tr.mjs +0 -82
  314. package/esm2020/datepicker/chronos/i18n/uk.mjs +0 -147
  315. package/esm2020/datepicker/chronos/i18n/vi.mjs +0 -74
  316. package/esm2020/datepicker/chronos/i18n/zh-cn.mjs +0 -114
  317. package/esm2020/datepicker/chronos/index.mjs +0 -2
  318. package/esm2020/datepicker/chronos/locale/calendar.mjs +0 -9
  319. package/esm2020/datepicker/chronos/locale/locale.class.mjs +0 -532
  320. package/esm2020/datepicker/chronos/locale/locale.defaults.mjs +0 -40
  321. package/esm2020/datepicker/chronos/locale/locales.mjs +0 -229
  322. package/esm2020/datepicker/chronos/moment/add-subtract.mjs +0 -35
  323. package/esm2020/datepicker/chronos/moment/calendar.mjs +0 -41
  324. package/esm2020/datepicker/chronos/moment/diff.mjs +0 -70
  325. package/esm2020/datepicker/chronos/moment/min-max.mjs +0 -38
  326. package/esm2020/datepicker/chronos/parse/regex.mjs +0 -49
  327. package/esm2020/datepicker/chronos/parse/token.mjs +0 -32
  328. package/esm2020/datepicker/chronos/public_api.mjs +0 -56
  329. package/esm2020/datepicker/chronos/test/chain.mjs +0 -711
  330. package/esm2020/datepicker/chronos/types.mjs +0 -2
  331. package/esm2020/datepicker/chronos/units/aliases.mjs +0 -35
  332. package/esm2020/datepicker/chronos/units/constants.mjs +0 -11
  333. package/esm2020/datepicker/chronos/units/day-of-month.mjs +0 -31
  334. package/esm2020/datepicker/chronos/units/day-of-week.mjs +0 -129
  335. package/esm2020/datepicker/chronos/units/day-of-year.mjs +0 -37
  336. package/esm2020/datepicker/chronos/units/hour.mjs +0 -127
  337. package/esm2020/datepicker/chronos/units/index.mjs +0 -19
  338. package/esm2020/datepicker/chronos/units/millisecond.mjs +0 -60
  339. package/esm2020/datepicker/chronos/units/minute.mjs +0 -23
  340. package/esm2020/datepicker/chronos/units/month.mjs +0 -63
  341. package/esm2020/datepicker/chronos/units/offset.mjs +0 -210
  342. package/esm2020/datepicker/chronos/units/priorities.mjs +0 -21
  343. package/esm2020/datepicker/chronos/units/quarter.mjs +0 -39
  344. package/esm2020/datepicker/chronos/units/second.mjs +0 -23
  345. package/esm2020/datepicker/chronos/units/timestamp.mjs +0 -28
  346. package/esm2020/datepicker/chronos/units/timezone.mjs +0 -19
  347. package/esm2020/datepicker/chronos/units/week-calendar-utils.mjs +0 -70
  348. package/esm2020/datepicker/chronos/units/week-year.mjs +0 -101
  349. package/esm2020/datepicker/chronos/units/week.mjs +0 -58
  350. package/esm2020/datepicker/chronos/units/year.mjs +0 -60
  351. package/esm2020/datepicker/chronos/utils/abs-ceil.mjs +0 -4
  352. package/esm2020/datepicker/chronos/utils/abs-round.mjs +0 -4
  353. package/esm2020/datepicker/chronos/utils/compare-arrays.mjs +0 -16
  354. package/esm2020/datepicker/chronos/utils/date-compare.mjs +0 -55
  355. package/esm2020/datepicker/chronos/utils/date-getters.mjs +0 -67
  356. package/esm2020/datepicker/chronos/utils/date-setters.mjs +0 -75
  357. package/esm2020/datepicker/chronos/utils/defaults.mjs +0 -11
  358. package/esm2020/datepicker/chronos/utils/start-end-of.mjs +0 -57
  359. package/esm2020/datepicker/chronos/utils/type-checks.mjs +0 -56
  360. package/esm2020/datepicker/chronos/utils/zero-fill.mjs +0 -10
  361. package/esm2020/datepicker/chronos/utils.mjs +0 -7
  362. package/esm2020/datepicker/component-loader/bs-component-ref.class.mjs +0 -3
  363. package/esm2020/datepicker/component-loader/component-loader.class.mjs +0 -272
  364. package/esm2020/datepicker/component-loader/component-loader.factory.mjs +0 -29
  365. package/esm2020/datepicker/component-loader/content-ref.class.mjs +0 -12
  366. package/esm2020/datepicker/component-loader/index.mjs +0 -2
  367. package/esm2020/datepicker/component-loader/listen-options.model.mjs +0 -2
  368. package/esm2020/datepicker/component-loader/public_api.mjs +0 -5
  369. package/esm2020/datepicker/date-formatter.mjs +0 -7
  370. package/esm2020/datepicker/datepicker-animations.mjs +0 -16
  371. package/esm2020/datepicker/datepicker-inner.component.mjs +0 -323
  372. package/esm2020/datepicker/datepicker.component.mjs +0 -182
  373. package/esm2020/datepicker/datepicker.config.mjs +0 -32
  374. package/esm2020/datepicker/datepicker.module.mjs +0 -49
  375. package/esm2020/datepicker/daypicker.component.mjs +0 -314
  376. package/esm2020/datepicker/engine/calc-days-calendar.mjs +0 -19
  377. package/esm2020/datepicker/engine/flag-days-calendar.mjs +0 -91
  378. package/esm2020/datepicker/engine/flag-months-calendar.mjs +0 -41
  379. package/esm2020/datepicker/engine/flag-years-calendar.mjs +0 -39
  380. package/esm2020/datepicker/engine/format-days-calendar.mjs +0 -29
  381. package/esm2020/datepicker/engine/format-months-calendar.mjs +0 -19
  382. package/esm2020/datepicker/engine/format-years-calendar.mjs +0 -35
  383. package/esm2020/datepicker/engine/view-mode.mjs +0 -4
  384. package/esm2020/datepicker/index.mjs +0 -2
  385. package/esm2020/datepicker/mini-ngrx/index.mjs +0 -2
  386. package/esm2020/datepicker/mini-ngrx/public_api.mjs +0 -3
  387. package/esm2020/datepicker/mini-ngrx/state.class.mjs +0 -16
  388. package/esm2020/datepicker/mini-ngrx/store.class.mjs +0 -43
  389. package/esm2020/datepicker/mis-crystal-design-system-datepicker.mjs +0 -5
  390. package/esm2020/datepicker/models/index.mjs +0 -9
  391. package/esm2020/datepicker/monthpicker.component.mjs +0 -145
  392. package/esm2020/datepicker/positioning/index.mjs +0 -2
  393. package/esm2020/datepicker/positioning/models/index.mjs +0 -2
  394. package/esm2020/datepicker/positioning/modifiers/arrow.mjs +0 -56
  395. package/esm2020/datepicker/positioning/modifiers/flip.mjs +0 -66
  396. package/esm2020/datepicker/positioning/modifiers/index.mjs +0 -6
  397. package/esm2020/datepicker/positioning/modifiers/initData.mjs +0 -42
  398. package/esm2020/datepicker/positioning/modifiers/preventOverflow.mjs +0 -59
  399. package/esm2020/datepicker/positioning/modifiers/shift.mjs +0 -24
  400. package/esm2020/datepicker/positioning/ng-positioning.mjs +0 -30
  401. package/esm2020/datepicker/positioning/positioning.service.mjs +0 -75
  402. package/esm2020/datepicker/positioning/public_api.mjs +0 -3
  403. package/esm2020/datepicker/positioning/utils/computeAutoPlacement.mjs +0 -57
  404. package/esm2020/datepicker/positioning/utils/findCommonOffsetParent.mjs +0 -40
  405. package/esm2020/datepicker/positioning/utils/getBordersSize.mjs +0 -10
  406. package/esm2020/datepicker/positioning/utils/getBoundaries.mjs +0 -56
  407. package/esm2020/datepicker/positioning/utils/getBoundingClientRect.mjs +0 -55
  408. package/esm2020/datepicker/positioning/utils/getClientRect.mjs +0 -8
  409. package/esm2020/datepicker/positioning/utils/getFixedPositionOffsetParent.mjs +0 -17
  410. package/esm2020/datepicker/positioning/utils/getOffsetParent.mjs +0 -32
  411. package/esm2020/datepicker/positioning/utils/getOffsetRectRelativeToArbitraryNode.mjs +0 -51
  412. package/esm2020/datepicker/positioning/utils/getOffsets.mjs +0 -11
  413. package/esm2020/datepicker/positioning/utils/getOppositePlacement.mjs +0 -8
  414. package/esm2020/datepicker/positioning/utils/getOppositeVariation.mjs +0 -13
  415. package/esm2020/datepicker/positioning/utils/getOuterSizes.mjs +0 -14
  416. package/esm2020/datepicker/positioning/utils/getParentNode.mjs +0 -10
  417. package/esm2020/datepicker/positioning/utils/getReferenceOffsets.mjs +0 -13
  418. package/esm2020/datepicker/positioning/utils/getRoot.mjs +0 -10
  419. package/esm2020/datepicker/positioning/utils/getScroll.mjs +0 -14
  420. package/esm2020/datepicker/positioning/utils/getScrollParent.mjs +0 -26
  421. package/esm2020/datepicker/positioning/utils/getStyleComputedProperty.mjs +0 -13
  422. package/esm2020/datepicker/positioning/utils/getTargetOffsets.mjs +0 -30
  423. package/esm2020/datepicker/positioning/utils/getViewportOffsetRectRelativeToArtbitraryNode.mjs +0 -19
  424. package/esm2020/datepicker/positioning/utils/getWindowSizes.mjs +0 -18
  425. package/esm2020/datepicker/positioning/utils/includeScroll.mjs +0 -15
  426. package/esm2020/datepicker/positioning/utils/index.mjs +0 -24
  427. package/esm2020/datepicker/positioning/utils/isBrowser.mjs +0 -2
  428. package/esm2020/datepicker/positioning/utils/isFixed.mjs +0 -16
  429. package/esm2020/datepicker/positioning/utils/isIE.mjs +0 -16
  430. package/esm2020/datepicker/positioning/utils/isModifierEnabled.mjs +0 -10
  431. package/esm2020/datepicker/positioning/utils/isNumeric.mjs +0 -7
  432. package/esm2020/datepicker/positioning/utils/isOffsetContainer.mjs +0 -9
  433. package/esm2020/datepicker/positioning/utils/setStyles.mjs +0 -17
  434. package/esm2020/datepicker/positioning/utils/updateContainerClass.mjs +0 -22
  435. package/esm2020/datepicker/public_api.mjs +0 -25
  436. package/esm2020/datepicker/reducer/_defaults.mjs +0 -5
  437. package/esm2020/datepicker/reducer/bs-datepicker.actions.mjs +0 -136
  438. package/esm2020/datepicker/reducer/bs-datepicker.effects.mjs +0 -169
  439. package/esm2020/datepicker/reducer/bs-datepicker.reducer.mjs +0 -302
  440. package/esm2020/datepicker/reducer/bs-datepicker.state.mjs +0 -12
  441. package/esm2020/datepicker/reducer/bs-datepicker.store.mjs +0 -21
  442. package/esm2020/datepicker/themes/bs/bs-calendar-layout.component.mjs +0 -54
  443. package/esm2020/datepicker/themes/bs/bs-current-date-view.component.mjs +0 -23
  444. package/esm2020/datepicker/themes/bs/bs-custom-dates-view.component.mjs +0 -78
  445. package/esm2020/datepicker/themes/bs/bs-datepicker-container.component.mjs +0 -319
  446. package/esm2020/datepicker/themes/bs/bs-datepicker-day-decorator.directive.mjs +0 -52
  447. package/esm2020/datepicker/themes/bs/bs-datepicker-inline-container.component.mjs +0 -203
  448. package/esm2020/datepicker/themes/bs/bs-datepicker-navigation-view.component.mjs +0 -111
  449. package/esm2020/datepicker/themes/bs/bs-daterangepicker-container.component.mjs +0 -362
  450. package/esm2020/datepicker/themes/bs/bs-daterangepicker-inline-container.component.mjs +0 -203
  451. package/esm2020/datepicker/themes/bs/bs-days-calendar-view.component.mjs +0 -308
  452. package/esm2020/datepicker/themes/bs/bs-months-calendar-view.component.mjs +0 -106
  453. package/esm2020/datepicker/themes/bs/bs-timepicker-view.component.mjs +0 -64
  454. package/esm2020/datepicker/themes/bs/bs-years-calendar-view.component.mjs +0 -107
  455. package/esm2020/datepicker/utils/bs-calendar-utils.mjs +0 -43
  456. package/esm2020/datepicker/utils/matrix-utils.mjs +0 -14
  457. package/esm2020/datepicker/utils-v2/decorators.mjs +0 -25
  458. package/esm2020/datepicker/utils-v2/facade/browser.mjs +0 -24
  459. package/esm2020/datepicker/utils-v2/index.mjs +0 -2
  460. package/esm2020/datepicker/utils-v2/linked-list.class.mjs +0 -240
  461. package/esm2020/datepicker/utils-v2/public_api.mjs +0 -11
  462. package/esm2020/datepicker/utils-v2/theme-provider.mjs +0 -35
  463. package/esm2020/datepicker/utils-v2/trigger.class.mjs +0 -10
  464. package/esm2020/datepicker/utils-v2/triggers.mjs +0 -110
  465. package/esm2020/datepicker/utils-v2/utils.class.mjs +0 -21
  466. package/esm2020/datepicker/utils-v2/warn-once.mjs +0 -12
  467. package/esm2020/datepicker/yearpicker.component.mjs +0 -147
  468. package/fesm2015/mis-crystal-design-system-datepicker.mjs +0 -14950
  469. package/fesm2015/mis-crystal-design-system-datepicker.mjs.map +0 -1
  470. package/fesm2020/mis-crystal-design-system-datepicker.mjs +0 -14572
  471. package/fesm2020/mis-crystal-design-system-datepicker.mjs.map +0 -1
@@ -1,711 +0,0 @@
1
- // tslint:disable:max-line-length max-file-line-count
2
- import { add, subtract } from '../index';
3
- import { getDate, getFullYear, getHours, getMilliseconds, getMinutes, getMonth, getSeconds } from '../utils/date-getters';
4
- import { setDate, setFullYear, setHours, setMilliseconds, setMinutes, setMonth, setSeconds } from '../utils/date-setters';
5
- import { cloneDate } from '../create/clone';
6
- import { isArray, isBoolean, isDate, isDateValid, isFunction, isNumber, isObject, isString, isUndefined } from '../utils/type-checks';
7
- import { formatDate } from '../format';
8
- import { ISO_8601, RFC_2822 } from '../create/from-string-and-format';
9
- import { getDateOffset, getUTCOffset, hasAlignedHourOffset, isDaylightSavingTime, setOffsetToParsedOffset, setUTCOffset } from '../units/offset';
10
- import { isLeapYear, parseTwoDigitYear } from '../units/year';
11
- import { isAfter, isBefore, isBetween, isSame, isSameOrAfter, isSameOrBefore } from '../utils/date-compare';
12
- import { daysInMonth } from '../units/month';
13
- import { getDayOfWeek, getISODayOfWeek, getLocaleDayOfWeek, parseWeekday, setDayOfWeek, setISODayOfWeek, setLocaleDayOfWeek } from '../units/day-of-week';
14
- import { getISOWeek, getWeek, setISOWeek, setWeek } from '../units/week';
15
- import { getISOWeeksInYear, getISOWeekYear, getSetISOWeekYear, getSetWeekYear, getWeeksInYear, getWeekYear } from '../units/week-year';
16
- import { endOf, startOf } from '../utils/start-end-of';
17
- import { getQuarter, setQuarter } from '../units/quarter';
18
- import { getDayOfYear, setDayOfYear } from '../units/day-of-year';
19
- import { getZoneAbbr, getZoneName } from '../units/timezone';
20
- import { diff } from '../moment/diff';
21
- import { calendar } from '../moment/calendar';
22
- import { defineLocale, getLocale, getSetGlobalLocale, listLocales } from '../locale/locales';
23
- import { max, min } from '../moment/min-max';
24
- import { isDuration } from '../duration/constructor';
25
- import { createLocalOrUTC } from '../create/from-anything';
26
- import { createDuration } from '../duration/create';
27
- export const moment = _moment;
28
- function _moment(input, format, localeKey, strict, isUTC) {
29
- if (input instanceof Khronos) {
30
- const _date = input.clone();
31
- return isUTC ? _date.utc() : _date;
32
- }
33
- if (isBoolean(localeKey)) {
34
- return new Khronos(input, format, null, localeKey, isUTC);
35
- }
36
- return new Khronos(input, format, localeKey, strict, isUTC);
37
- }
38
- moment.utc = (input, format, localeKey, strict) => {
39
- return _moment(input, format, localeKey, strict, true);
40
- };
41
- moment.parseZone = (input, format, localeKey, strict) => {
42
- return _moment(input, format, localeKey, strict, true).parseZone();
43
- };
44
- moment.locale = getSetGlobalLocale;
45
- moment.localeData = (key) => {
46
- if (key instanceof Khronos) {
47
- return key.localeData();
48
- }
49
- return getLocale(key);
50
- };
51
- // moment.utc = createUTC;
52
- moment.unix = (inp) => new Khronos(inp * 1000);
53
- moment.ISO_8601 = ISO_8601;
54
- moment.RFC_2822 = RFC_2822;
55
- moment.defineLocale = defineLocale;
56
- moment.parseTwoDigitYear = parseTwoDigitYear;
57
- moment.isDate = isDate;
58
- moment.invalid = function _invalid() {
59
- return new Khronos(new Date(NaN));
60
- };
61
- // duration(inp?: Duration | DateInput | Khronos, unit?: MomentUnitOfTime): Duration;
62
- moment.duration = (input, unit) => {
63
- const _unit = mapUnitOfTime(unit);
64
- if (isDate(input)) {
65
- throw new Error('todo implement');
66
- }
67
- if (input == null) {
68
- return createDuration();
69
- }
70
- if (isDuration(input)) {
71
- return createDuration(input, _unit, { _locale: input._locale });
72
- }
73
- if (isString(input) || isNumber(input) || isDuration(input) || isObject(input)) {
74
- return createDuration(input, _unit);
75
- }
76
- throw new Error('todo implement');
77
- };
78
- moment.min = function _min(...dates) {
79
- const _firstArg = dates[0];
80
- const _dates = (isArray(_firstArg) ? _firstArg : dates)
81
- // tslint:disable-next-line
82
- .map((date) => _moment(date))
83
- .map(date => date.toDate());
84
- const _date = min(..._dates);
85
- return new Khronos(_date);
86
- };
87
- moment.max = function _max(...dates) {
88
- const _firstArg = dates[0];
89
- const _dates = (isArray(_firstArg) ? _firstArg : dates)
90
- // tslint:disable-next-line
91
- .map((date) => _moment(date))
92
- .map(date => date.toDate());
93
- const _date = max(..._dates);
94
- return new Khronos(_date);
95
- };
96
- moment.locales = () => {
97
- return listLocales();
98
- };
99
- const _unitsPriority = {
100
- year: 1,
101
- month: 8,
102
- week: 5,
103
- isoWeek: 5,
104
- day: 11,
105
- weekday: 11,
106
- isoWeekday: 11,
107
- hours: 13,
108
- weekYear: 1,
109
- isoWeekYear: 1,
110
- quarter: 7,
111
- date: 9,
112
- dayOfYear: 4,
113
- minutes: 14,
114
- seconds: 15,
115
- milliseconds: 16
116
- };
117
- // todo: do I need 2 mappers?
118
- const _timeHashMap = {
119
- y: 'year',
120
- years: 'year',
121
- year: 'year',
122
- M: 'month',
123
- months: 'month',
124
- month: 'month',
125
- w: 'week',
126
- weeks: 'week',
127
- week: 'week',
128
- d: 'day',
129
- days: 'day',
130
- day: 'day',
131
- date: 'date',
132
- dates: 'date',
133
- D: 'date',
134
- h: 'hours',
135
- hour: 'hours',
136
- hours: 'hours',
137
- m: 'minutes',
138
- minute: 'minutes',
139
- minutes: 'minutes',
140
- s: 'seconds',
141
- second: 'seconds',
142
- seconds: 'seconds',
143
- ms: 'milliseconds',
144
- millisecond: 'milliseconds',
145
- milliseconds: 'milliseconds',
146
- quarter: 'quarter',
147
- quarters: 'quarter',
148
- q: 'quarter',
149
- Q: 'quarter',
150
- isoWeek: 'isoWeek',
151
- isoWeeks: 'isoWeek',
152
- W: 'isoWeek',
153
- weekYear: 'weekYear',
154
- weekYears: 'weekYear',
155
- gg: 'weekYears',
156
- isoWeekYear: 'isoWeekYear',
157
- isoWeekYears: 'isoWeekYear',
158
- GG: 'isoWeekYear',
159
- dayOfYear: 'dayOfYear',
160
- dayOfYears: 'dayOfYear',
161
- DDD: 'dayOfYear',
162
- weekday: 'weekday',
163
- weekdays: 'weekday',
164
- e: 'weekday',
165
- isoWeekday: 'isoWeekday',
166
- isoWeekdays: 'isoWeekday',
167
- E: 'isoWeekday'
168
- };
169
- function mapUnitOfTime(period) {
170
- return _timeHashMap[period];
171
- }
172
- function mapMomentInputObject(obj) {
173
- const _res = {};
174
- return Object.keys(obj)
175
- .reduce((res, key) => {
176
- res[mapUnitOfTime(key)] = obj[key];
177
- return res;
178
- }, _res);
179
- }
180
- export class Khronos {
181
- constructor(input, format, localeKey, strict = false, isUTC = false, offset) {
182
- this._date = new Date();
183
- this._isUTC = false;
184
- // locale will be needed to format invalid date message
185
- this._locale = getLocale(localeKey);
186
- // parse invalid input
187
- if (input === '' || input === null || (isNumber(input) && isNaN(input))) {
188
- this._date = new Date(NaN);
189
- return this;
190
- }
191
- this._isUTC = isUTC;
192
- if (this._isUTC) {
193
- this._offset = 0;
194
- }
195
- if (offset || offset === 0) {
196
- this._offset = offset;
197
- }
198
- this._isStrict = strict;
199
- this._format = format;
200
- if (!input && input !== 0 && !format) {
201
- this._date = new Date();
202
- return this;
203
- }
204
- if (isDate(input)) {
205
- this._date = cloneDate(input);
206
- return this;
207
- }
208
- // this._date = parseDate(input, format, localeKey, strict, isUTC);
209
- const config = createLocalOrUTC(input, format, localeKey, strict, isUTC);
210
- this._date = config._d;
211
- this._offset = isNumber(config._offset) ? config._offset : this._offset;
212
- this._isUTC = config._isUTC;
213
- this._isStrict = config._strict;
214
- this._format = config._f;
215
- this._tzm = config._tzm;
216
- }
217
- _toConfig() {
218
- return { _isUTC: this._isUTC, _locale: this._locale, _offset: this._offset, _tzm: this._tzm };
219
- }
220
- locale(localeKey) {
221
- if (isUndefined(localeKey)) {
222
- return this._locale._abbr;
223
- }
224
- if (localeKey instanceof Khronos) {
225
- this._locale = localeKey._locale;
226
- return this;
227
- }
228
- const newLocaleData = getLocale(localeKey);
229
- if (newLocaleData != null) {
230
- this._locale = newLocaleData;
231
- }
232
- return this;
233
- }
234
- localeData() {
235
- return this._locale;
236
- }
237
- // Basic
238
- add(val, period) {
239
- if (isString(val)) {
240
- this._date = add(this._date, parseInt(val, 10), mapUnitOfTime(period));
241
- }
242
- if (isNumber(val)) {
243
- this._date = add(this._date, val, mapUnitOfTime(period));
244
- }
245
- if (isObject(val)) {
246
- const _mapped = mapMomentInputObject(val);
247
- Object.keys(_mapped)
248
- .forEach((key) => add(this._date, _mapped[key], key));
249
- }
250
- return this;
251
- }
252
- // fixme: for some reason here 'null' for time is fine
253
- calendar(time, formats) {
254
- const _time = time instanceof Khronos ? time : new Khronos(time || new Date());
255
- const _offset = (this._offset || 0) - (_time._offset || 0);
256
- const _config = Object.assign(this._toConfig(), { _offset });
257
- return calendar(this._date, _time._date, formats, this._locale, _config);
258
- }
259
- clone() {
260
- const localeKey = this._locale && this._locale._abbr || 'en';
261
- // return new Khronos(cloneDate(this._date), this._format, localeKey, this._isStrict, this._isUTC);
262
- // fails if isUTC and offset
263
- // return new Khronos(new Date(this.valueOf()),
264
- return new Khronos(this._date, this._format, localeKey, this._isStrict, this._isUTC, this._offset);
265
- }
266
- diff(b, unitOfTime, precise) {
267
- const unit = mapUnitOfTime(unitOfTime);
268
- const _b = b instanceof Khronos ? b : new Khronos(b);
269
- // const zoneDelta = (_b.utcOffset() - this.utcOffset());
270
- // const config = Object.assign(this._toConfig(), {
271
- // _offset: 0,
272
- // _isUTC: true,
273
- // _zoneDelta: zoneDelta
274
- // });
275
- // return diff(new Date(this.valueOf()), new Date(_b.valueOf()), unit, precise, config);
276
- return diff(this._date, _b.toDate(), unit, precise, this._toConfig());
277
- }
278
- endOf(period) {
279
- const _per = mapUnitOfTime(period);
280
- this._date = endOf(this._date, _per, this._isUTC);
281
- return this;
282
- }
283
- format(format) {
284
- return formatDate(this._date, format, this._locale && this._locale._abbr, this._isUTC, this._offset);
285
- }
286
- // todo: implement
287
- from(time, withoutSuffix) {
288
- const _time = _moment(time);
289
- if (this.isValid() && _time.isValid()) {
290
- return createDuration({ to: this.toDate(), from: _time.toDate() })
291
- .locale(this.locale())
292
- .humanize(!withoutSuffix);
293
- }
294
- return this.localeData().invalidDate;
295
- }
296
- fromNow(withoutSuffix) {
297
- return this.from(new Date(), withoutSuffix);
298
- }
299
- to(inp, suffix) {
300
- throw new Error(`TODO: Implement`);
301
- }
302
- toNow(withoutPrefix) {
303
- throw new Error(`TODO: Implement`);
304
- }
305
- subtract(val, period) {
306
- if (isString(val)) {
307
- this._date = subtract(this._date, parseInt(val, 10), mapUnitOfTime(period));
308
- return this;
309
- }
310
- if (isNumber(val)) {
311
- this._date = subtract(this._date, val, mapUnitOfTime(period));
312
- }
313
- if (isObject(val)) {
314
- const _mapped = mapMomentInputObject(val);
315
- Object.keys(_mapped)
316
- .forEach((key) => subtract(this._date, _mapped[key], key));
317
- }
318
- return this;
319
- }
320
- get(period) {
321
- if (period === 'dayOfYear') {
322
- return this.dayOfYear();
323
- }
324
- const unit = mapUnitOfTime(period);
325
- switch (unit) {
326
- case 'year':
327
- return this.year();
328
- case 'month':
329
- return this.month();
330
- // | 'week'
331
- case 'date':
332
- return this.date();
333
- case 'day':
334
- return this.day();
335
- case 'hours':
336
- return this.hours();
337
- case 'minutes':
338
- return this.minutes();
339
- case 'seconds':
340
- return this.seconds();
341
- case 'milliseconds':
342
- return this.milliseconds();
343
- case 'week':
344
- return this.week();
345
- case 'isoWeek':
346
- return this.isoWeek();
347
- case 'weekYear':
348
- return this.weekYear();
349
- case 'isoWeekYear':
350
- return this.isoWeekYear();
351
- case 'weekday':
352
- return this.weekday();
353
- case 'isoWeekday':
354
- return this.isoWeekday();
355
- case 'quarter':
356
- return this.quarter();
357
- default:
358
- throw new Error(`Unknown moment.get('${period}')`);
359
- }
360
- }
361
- set(period, input) {
362
- if (isString(period)) {
363
- const unit = mapUnitOfTime(period);
364
- switch (unit) {
365
- case 'year':
366
- return this.year(input);
367
- case 'month':
368
- return this.month(input);
369
- // | 'week'
370
- case 'day':
371
- return this.day(input);
372
- case 'date':
373
- return this.date(input);
374
- case 'hours':
375
- return this.hours(input);
376
- case 'minutes':
377
- return this.minutes(input);
378
- case 'seconds':
379
- return this.seconds(input);
380
- case 'milliseconds':
381
- return this.milliseconds(input);
382
- case 'week':
383
- return this.week(input);
384
- case 'isoWeek':
385
- return this.isoWeek(input);
386
- case 'weekYear':
387
- return this.weekYear(input);
388
- case 'isoWeekYear':
389
- return this.isoWeekYear(input);
390
- case 'weekday':
391
- return this.weekday(input);
392
- case 'isoWeekday':
393
- return this.isoWeekday(input);
394
- case 'quarter':
395
- return this.quarter(input);
396
- default:
397
- throw new Error(`Unknown moment.get('${period}')`);
398
- }
399
- }
400
- if (isObject(period)) {
401
- const _mapped = mapMomentInputObject(period);
402
- Object.keys(_mapped)
403
- .sort(function (a, b) {
404
- return _unitsPriority[a] - _unitsPriority[b];
405
- })
406
- .forEach((key) => this.set(key, _mapped[key]));
407
- }
408
- return this;
409
- }
410
- toString() {
411
- return this.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
412
- }
413
- toISOString() {
414
- if (!this.isValid()) {
415
- return null;
416
- }
417
- if (getFullYear(this._date, true) < 0 || getFullYear(this._date, true) > 9999) {
418
- return this.format('YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
419
- }
420
- if (isFunction(Date.prototype.toISOString)) {
421
- // native implementation is ~50x faster, use it when we can
422
- return this.toDate().toISOString();
423
- }
424
- return this.format('YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
425
- }
426
- inspect() {
427
- throw new Error('TODO: implement');
428
- }
429
- toJSON() {
430
- return this.toISOString();
431
- }
432
- toDate() {
433
- return new Date(this.valueOf());
434
- }
435
- toObject() {
436
- return {
437
- // years: getFullYear(this._date, this._isUTC),
438
- // months: getMonth(this._date, this._isUTC),
439
- year: getFullYear(this._date, this._isUTC),
440
- month: getMonth(this._date, this._isUTC),
441
- date: getDate(this._date, this._isUTC),
442
- hours: getHours(this._date, this._isUTC),
443
- minutes: getMinutes(this._date, this._isUTC),
444
- seconds: getSeconds(this._date, this._isUTC),
445
- milliseconds: getMilliseconds(this._date, this._isUTC)
446
- };
447
- }
448
- toArray() {
449
- return [this.year(), this.month(), this.date(), this.hour(), this.minute(), this.second(), this.millisecond()];
450
- }
451
- // Dates boolean algebra
452
- isAfter(date, unit) {
453
- const _unit = unit ? mapUnitOfTime(unit) : void 0;
454
- return isAfter(this._date, date.toDate(), _unit);
455
- }
456
- isBefore(date, unit) {
457
- const _unit = unit ? mapUnitOfTime(unit) : void 0;
458
- return isBefore(this.toDate(), date.toDate(), _unit);
459
- }
460
- isBetween(from, to, unit, inclusivity) {
461
- const _unit = unit ? mapUnitOfTime(unit) : void 0;
462
- return isBetween(this.toDate(), from.toDate(), to.toDate(), _unit, inclusivity);
463
- }
464
- isSame(date, unit) {
465
- const _unit = unit ? mapUnitOfTime(unit) : void 0;
466
- return isSame(this._date, date.toDate(), _unit);
467
- }
468
- isSameOrAfter(date, unit) {
469
- const _unit = unit ? mapUnitOfTime(unit) : void 0;
470
- return isSameOrAfter(this._date, date.toDate(), _unit);
471
- }
472
- isSameOrBefore(date, unit) {
473
- const _unit = unit ? mapUnitOfTime(unit) : void 0;
474
- return isSameOrBefore(this._date, date.toDate(), _unit);
475
- }
476
- isValid() {
477
- return isDateValid(this._date);
478
- }
479
- valueOf() {
480
- return this._date.valueOf() - ((this._offset || 0) * 60000);
481
- }
482
- unix() {
483
- // return getUnixTime(this._date);
484
- return Math.floor(this.valueOf() / 1000);
485
- }
486
- utcOffset(b, keepLocalTime) {
487
- const _config = this._toConfig();
488
- if (!b && b !== 0) {
489
- return getUTCOffset(this._date, _config);
490
- }
491
- this._date = setUTCOffset(this._date, b, keepLocalTime, false, _config);
492
- this._offset = _config._offset;
493
- this._isUTC = _config._isUTC;
494
- return this;
495
- }
496
- utc(keepLocalTime) {
497
- return this.utcOffset(0, keepLocalTime);
498
- }
499
- local(keepLocalTime) {
500
- if (this._isUTC) {
501
- this.utcOffset(0, keepLocalTime);
502
- this._isUTC = false;
503
- if (keepLocalTime) {
504
- this.subtract(getDateOffset(this._date), 'm');
505
- }
506
- }
507
- return this;
508
- }
509
- parseZone(input) {
510
- const _config = this._toConfig();
511
- this._date = setOffsetToParsedOffset(this._date, input, _config);
512
- this._offset = _config._offset;
513
- this._isUTC = _config._isUTC;
514
- return this;
515
- }
516
- hasAlignedHourOffset(input) {
517
- return hasAlignedHourOffset(this._date, input ? input._date : void 0);
518
- }
519
- isDST() {
520
- return isDaylightSavingTime(this._date);
521
- }
522
- isLocal() {
523
- return !this._isUTC;
524
- }
525
- isUtcOffset() {
526
- return this._isUTC;
527
- }
528
- isUTC() {
529
- return this.isUtc();
530
- }
531
- isUtc() {
532
- return this._isUTC && this._offset === 0;
533
- }
534
- // Timezone
535
- zoneAbbr() {
536
- return getZoneAbbr(this._isUTC);
537
- }
538
- zoneName() {
539
- return getZoneName(this._isUTC);
540
- }
541
- year(year) {
542
- if (!year && year !== 0) {
543
- return getFullYear(this._date, this._isUTC);
544
- }
545
- this._date = cloneDate(setFullYear(this._date, year));
546
- return this;
547
- }
548
- weekYear(val) {
549
- if (!val && val !== 0) {
550
- return getWeekYear(this._date, this._locale, this.isUTC());
551
- }
552
- const date = getSetWeekYear(this._date, val, this._locale, this.isUTC());
553
- if (isDate(date)) {
554
- this._date = date;
555
- }
556
- return this;
557
- }
558
- isoWeekYear(val) {
559
- if (!val && val !== 0) {
560
- return getISOWeekYear(this._date, this.isUTC());
561
- }
562
- const date = getSetISOWeekYear(this._date, val, this.isUtc());
563
- if (isDate(date)) {
564
- this._date = date;
565
- }
566
- return this;
567
- }
568
- isLeapYear() {
569
- return isLeapYear(getFullYear(this.toDate(), this.isUTC()));
570
- }
571
- month(month) {
572
- if (!month && month !== 0) {
573
- return getMonth(this._date, this._isUTC);
574
- }
575
- let _month = month;
576
- if (isString(month)) {
577
- const locale = this._locale || getLocale();
578
- _month = locale.monthsParse(month);
579
- }
580
- if (isNumber(_month)) {
581
- this._date = cloneDate(setMonth(this._date, _month, this._isUTC));
582
- }
583
- return this;
584
- }
585
- hour(hours) {
586
- return this.hours(hours);
587
- }
588
- hours(hours) {
589
- if (!hours && hours !== 0) {
590
- return getHours(this._date, this._isUTC);
591
- }
592
- this._date = cloneDate(setHours(this._date, hours, this._isUTC));
593
- return this;
594
- }
595
- minute(minutes) {
596
- return this.minutes(minutes);
597
- }
598
- minutes(minutes) {
599
- if (!minutes && minutes !== 0) {
600
- return getMinutes(this._date, this._isUTC);
601
- }
602
- this._date = cloneDate(setMinutes(this._date, minutes, this._isUTC));
603
- return this;
604
- }
605
- second(seconds) {
606
- return this.seconds(seconds);
607
- }
608
- seconds(seconds) {
609
- if (!seconds && seconds !== 0) {
610
- return getSeconds(this._date, this._isUTC);
611
- }
612
- this._date = cloneDate(setSeconds(this._date, seconds, this._isUTC));
613
- return this;
614
- }
615
- millisecond(ms) {
616
- return this.milliseconds(ms);
617
- }
618
- milliseconds(seconds) {
619
- if (!seconds && seconds !== 0) {
620
- return getMilliseconds(this._date, this._isUTC);
621
- }
622
- this._date = cloneDate(setMilliseconds(this._date, seconds, this._isUTC));
623
- return this;
624
- }
625
- date(date) {
626
- if (!date && date !== 0) {
627
- return getDate(this._date, this._isUTC);
628
- }
629
- this._date = cloneDate(setDate(this._date, date, this._isUTC));
630
- return this;
631
- }
632
- day(input) {
633
- if (!input && input !== 0) {
634
- return getDayOfWeek(this._date, this._isUTC);
635
- }
636
- let _input = input;
637
- if (isString(input)) {
638
- _input = parseWeekday(input, this._locale);
639
- }
640
- if (isNumber(_input)) {
641
- this._date = setDayOfWeek(this._date, _input, this._locale, this._isUTC);
642
- }
643
- return this;
644
- }
645
- weekday(val) {
646
- if (!val && val !== 0) {
647
- return getLocaleDayOfWeek(this._date, this._locale, this._isUTC);
648
- }
649
- this._date = setLocaleDayOfWeek(this._date, val, { locale: this._locale, isUTC: this._isUTC });
650
- return this;
651
- }
652
- isoWeekday(val) {
653
- if (!val && val !== 0) {
654
- return getISODayOfWeek(this._date);
655
- }
656
- this._date = setISODayOfWeek(this._date, val);
657
- return this;
658
- }
659
- dayOfYear(val) {
660
- if (!val && val !== 0) {
661
- return getDayOfYear(this._date);
662
- }
663
- this._date = setDayOfYear(this._date, val);
664
- return this;
665
- }
666
- week(input) {
667
- if (!input && input !== 0) {
668
- return getWeek(this._date, this._locale);
669
- }
670
- this._date = setWeek(this._date, input, this._locale);
671
- return this;
672
- }
673
- weeks(input) {
674
- return this.week(input);
675
- }
676
- isoWeek(val) {
677
- if (!val && val !== 0) {
678
- return getISOWeek(this._date);
679
- }
680
- this._date = setISOWeek(this._date, val);
681
- return this;
682
- }
683
- isoWeeks(val) {
684
- return this.isoWeek(val);
685
- }
686
- weeksInYear() {
687
- return getWeeksInYear(this._date, this._isUTC, this._locale);
688
- }
689
- isoWeeksInYear() {
690
- return getISOWeeksInYear(this._date, this._isUTC);
691
- }
692
- daysInMonth() {
693
- return daysInMonth(getFullYear(this._date, this._isUTC), getMonth(this._date, this._isUTC));
694
- }
695
- quarter(val) {
696
- if (!val && val !== 0) {
697
- return getQuarter(this._date, this._isUTC);
698
- }
699
- this._date = setQuarter(this._date, val, this._isUTC);
700
- return this;
701
- }
702
- quarters(val) {
703
- return this.quarter(val);
704
- }
705
- startOf(period) {
706
- const _per = mapUnitOfTime(period);
707
- this._date = startOf(this._date, _per, this._isUTC);
708
- return this;
709
- }
710
- }
711
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcGlja2VyL2Nocm9ub3MvdGVzdC9jaGFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBYSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFcEQsT0FBTyxFQUNMLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFFbEYsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQ3JFLFVBQVUsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFDeEUsV0FBVyxFQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUNqRixZQUFZLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUs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LE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggbWF4LWZpbGUtbGluZS1jb3VudFxuaW1wb3J0IHsgYWRkLCBwYXJzZURhdGUsIHN1YnRyYWN0IH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgRGF0ZUFycmF5LCBEYXRlT2JqZWN0LCBVbml0T2ZUaW1lIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0RGF0ZSwgZ2V0RnVsbFllYXIsIGdldEhvdXJzLCBnZXRNaWxsaXNlY29uZHMsIGdldE1pbnV0ZXMsIGdldE1vbnRoLCBnZXRTZWNvbmRzLFxuICBnZXRVbml4VGltZVxufSBmcm9tICcuLi91dGlscy9kYXRlLWdldHRlcnMnO1xuaW1wb3J0IHtcbiAgc2V0RGF0ZSwgc2V0RnVsbFllYXIsIHNldEhvdXJzLCBzZXRNaWxsaXNlY29uZHMsIHNldE1pbnV0ZXMsIHNldE1vbnRoLFxuICBzZXRTZWNvbmRzXG59IGZyb20gJy4uL3V0aWxzL2RhdGUtc2V0dGVycyc7XG5pbXBvcnQgeyBjbG9uZURhdGUgfSBmcm9tICcuLi9jcmVhdGUvY2xvbmUnO1xuaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgaXNCb29sZWFuLCBpc0RhdGUsIGlzRGF0ZVZhbGlkLCBpc0Z1bmN0aW9uLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLFxuICBpc1VuZGVmaW5lZFxufSBmcm9tICcuLi91dGlscy90eXBlLWNoZWNrcyc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi4vZm9ybWF0JztcbmltcG9ydCB7IElTT184NjAxLCBSRkNfMjgyMiB9IGZyb20gJy4uL2NyZWF0ZS9mcm9tLXN0cmluZy1hbmQtZm9ybWF0JztcbmltcG9ydCB7IExvY2FsZSwgTG9jYWxlRGF0YSB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGUuY2xhc3MnO1xuaW1wb3J0IHtcbiAgZ2V0RGF0ZU9mZnNldCxcbiAgZ2V0VVRDT2Zmc2V0LCBoYXNBbGlnbmVkSG91ck9mZnNldCwgaXNEYXlsaWdodFNhdmluZ1RpbWUsIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0LFxuICBzZXRVVENPZmZzZXRcbn0gZnJvbSAnLi4vdW5pdHMvb2Zmc2V0JztcbmltcG9ydCB7IGlzTGVhcFllYXIsIHBhcnNlVHdvRGlnaXRZZWFyIH0gZnJvbSAnLi4vdW5pdHMveWVhcic7XG5pbXBvcnQgeyBpc0FmdGVyLCBpc0JlZm9yZSwgaXNCZXR3ZWVuLCBpc1NhbWUsIGlzU2FtZU9yQWZ0ZXIsIGlzU2FtZU9yQmVmb3JlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS1jb21wYXJlJztcbmltcG9ydCB7IGRheXNJbk1vbnRoIH0gZnJvbSAnLi4vdW5pdHMvbW9udGgnO1xuaW1wb3J0IHtcbiAgZ2V0RGF5T2ZXZWVrLCBnZXRJU09EYXlPZldlZWssIGdldExvY2FsZURheU9mV2VlaywgcGFyc2VXZWVrZGF5LCBzZXREYXlPZldlZWssIHNldElTT0RheU9mV2VlayxcbiAgc2V0TG9jYWxlRGF5T2ZXZWVrXG59IGZyb20gJy4uL3VuaXRzL2RheS1vZi13ZWVrJztcbmltcG9ydCB7IGdldElTT1dlZWssIGdldFdlZWssIHNldElTT1dlZWssIHNldFdlZWsgfSBmcm9tICcuLi91bml0cy93ZWVrJztcbmltcG9ydCB7XG4gIGdldElTT1dlZWtzSW5ZZWFyLCBnZXRJU09XZWVrWWVhciwgZ2V0U2V0SVNPV2Vla1llYXIsIGdldFNldFdlZWtZZWFyLCBnZXRXZWVrc0luWWVhcixcbiAgZ2V0V2Vla1llYXJcbn0gZnJvbSAnLi4vdW5pdHMvd2Vlay15ZWFyJztcbmltcG9ydCB7IGVuZE9mLCBzdGFydE9mIH0gZnJvbSAnLi4vdXRpbHMvc3RhcnQtZW5kLW9mJztcbmltcG9ydCB7IGdldFF1YXJ0ZXIsIHNldFF1YXJ0ZXIgfSBmcm9tICcuLi91bml0cy9xdWFydGVyJztcbmltcG9ydCB7IGdldERheU9mWWVhciwgc2V0RGF5T2ZZZWFyIH0gZnJvbSAnLi4vdW5pdHMvZGF5LW9mLXllYXInO1xuaW1wb3J0IHsgZ2V0Wm9uZUFiYnIsIGdldFpvbmVOYW1lIH0gZnJvbSAnLi4vdW5pdHMvdGltZXpvbmUnO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gJy4uL21vbWVudC9kaWZmJztcbmltcG9ydCB7IERhdGVQYXJzaW5nQ29uZmlnIH0gZnJvbSAnLi4vY3JlYXRlL3BhcnNpbmcudHlwZXMnO1xuaW1wb3J0IHsgY2FsZW5kYXIsIENhbGVuZGFyU3BlYyB9IGZyb20gJy4uL21vbWVudC9jYWxlbmRhcic7XG5pbXBvcnQgeyBkZWZpbmVMb2NhbGUsIGdldExvY2FsZSwgZ2V0U2V0R2xvYmFsTG9jYWxlLCBsaXN0TG9jYWxlcyB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGVzJztcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSAnLi4vbW9tZW50L21pbi1tYXgnO1xuaW1wb3J0IHsgRHVyYXRpb24sIGlzRHVyYXRpb24gfSBmcm9tICcuLi9kdXJhdGlvbi9jb25zdHJ1Y3Rvcic7XG5pbXBvcnQgeyBjcmVhdGVMb2NhbE9yVVRDIH0gZnJvbSAnLi4vY3JlYXRlL2Zyb20tYW55dGhpbmcnO1xuaW1wb3J0IHsgY3JlYXRlRHVyYXRpb24gfSBmcm9tICcuLi9kdXJhdGlvbi9jcmVhdGUnO1xuXG5leHBvcnQgdHlwZSBEYXRlSW5wdXQgPSBzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgc3RyaW5nW10gfCBEYXRlQXJyYXkgfCBNb21lbnRJbnB1dE9iamVjdDtcblxuZXhwb3J0IGNvbnN0IG1vbWVudDogTW9tZW50Rm4gPSAoX21vbWVudCBhcyBNb21lbnRGbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9tZW50Rm4ge1xuICAoaW5wdXQ/OiBEYXRlSW5wdXQgfCBLaHJvbm9zLCBmb3JtYXQ/OiBzdHJpbmcgfCBzdHJpbmdbXSwgbG9jYWxlS2V5Pzogc3RyaW5nIHwgYm9vbGVhbiwgc3RyaWN0PzogYm9vbGVhbiwgaXNVVEM/OiBib29sZWFuKTogS2hyb25vcztcblxuICBJU09fODYwMTogc3RyaW5nO1xuICBSRkNfMjgyMjogc3RyaW5nO1xuXG4gIHV0YyhpbnB1dD86IERhdGVJbnB1dCB8IEtocm9ub3MsIGZvcm1hdD86IHN0cmluZyB8IHN0cmluZ1tdLCBsb2NhbGVLZXk/OiBzdHJpbmcgfCBib29sZWFuLCBzdHJpY3Q/OiBib29sZWFuKTogS2hyb25vcztcblxuICBwYXJzZVpvbmUoaW5wdXQ/OiBEYXRlSW5wdXQgfCBLaHJvbm9zLCBmb3JtYXQ/OiBzdHJpbmcgfCBzdHJpbmdbXSwgbG9jYWxlS2V5Pzogc3RyaW5nIHwgYm9vbGVhbiwgc3RyaWN0PzogYm9vbGVhbik6IEtocm9ub3M7XG5cbiAgdW5peChudW06IG51bWJlcik6IEtocm9ub3M7XG5cbiAgbG9jYWxlKGtleT86IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZXM/OiBMb2NhbGVEYXRhKTogc3RyaW5nO1xuXG4gIGR1cmF0aW9uKGlucD86IER1cmF0aW9uIHwgRGF0ZUlucHV0IHwgS2hyb25vcywgdW5pdD86IE1vbWVudFVuaXRPZlRpbWUpOiBEdXJhdGlvbjtcblxuICBkZWZpbmVMb2NhbGUobmFtZTogc3RyaW5nLCBjb25maWc/OiBMb2NhbGVEYXRhKTogTG9jYWxlO1xuXG4gIHBhcnNlVHdvRGlnaXRZZWFyKGlucHV0OiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgaXNEYXRlKGlucHV0PzogYW55KTogaW5wdXQgaXMgRGF0ZTtcblxuICBtb250aHMoKTogc3RyaW5nW107XG5cbiAgbW9udGhzKGluZGV4OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgbW9udGhzKGZvcm1hdDogc3RyaW5nKTogc3RyaW5nW107XG5cbiAgbW9udGhzKGZvcm1hdDogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nO1xuXG4gIG1vbnRoc1Nob3J0KCk6IHN0cmluZ1tdO1xuXG4gIG1vbnRoc1Nob3J0KGluZGV4OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgbW9udGhzU2hvcnQoZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmdbXTtcblxuICBtb250aHNTaG9ydChmb3JtYXQ6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZztcblxuICB3ZWVrZGF5cygpOiBzdHJpbmdbXTtcblxuICB3ZWVrZGF5cyhpbmRleDogbnVtYmVyKTogc3RyaW5nO1xuXG4gIHdlZWtkYXlzKGZvcm1hdDogc3RyaW5nKTogc3RyaW5nW107XG5cbiAgd2Vla2RheXMoZm9ybWF0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgd2Vla2RheXMobG9jYWxlU29ydGVkOiBib29sZWFuKTogc3RyaW5nW107XG5cbiAgd2Vla2RheXMobG9jYWxlU29ydGVkOiBib29sZWFuLCBpbmRleDogbnVtYmVyKTogc3RyaW5nO1xuXG4gIHdlZWtkYXlzKGxvY2FsZVNvcnRlZDogYm9vbGVhbiwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmdbXTtcblxuICB3ZWVrZGF5cyhsb2NhbGVTb3J0ZWQ6IGJvb2xlYW4sIGZvcm1hdDogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nO1xuXG4gIHdlZWtkYXlzU2hvcnQoKTogc3RyaW5nW107XG5cbiAgd2Vla2RheXNTaG9ydChpbmRleDogbnVtYmVyKTogc3RyaW5nO1xuXG4gIHdlZWtkYXlzU2hvcnQoZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmdbXTtcblxuICB3ZWVrZGF5c1Nob3J0KGZvcm1hdDogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nO1xuXG4gIHdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkOiBib29sZWFuKTogc3RyaW5nW107XG5cbiAgd2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQ6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgd2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQ6IGJvb2xlYW4sIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nW107XG5cbiAgd2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQ6IGJvb2xlYW4sIGZvcm1hdDogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nO1xuXG4gIHdlZWtkYXlzTWluKCk6IHN0cmluZ1tdO1xuXG4gIHdlZWtkYXlzTWluKGluZGV4OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgd2Vla2RheXNNaW4oZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmdbXTtcblxuICB3ZWVrZGF5c01pbihmb3JtYXQ6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZztcblxuICB3ZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQ6IGJvb2xlYW4pOiBzdHJpbmdbXTtcblxuICB3ZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQ6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgd2Vla2RheXNNaW4obG9jYWxlU29ydGVkOiBib29sZWFuLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZ1tdO1xuXG4gIHdlZWtkYXlzTWluKGxvY2FsZVNvcnRlZDogYm9vbGVhbiwgZm9ybWF0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgcmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZDogc3RyaW5nKTogbnVtYmVyIHwgYm9vbGVhbjtcblxuICByZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIpOiBib29sZWFuO1xuXG4gIG1pbiguLi5kYXRlczogKChEYXRlSW5wdXQgfCBLaHJvbm9zKVtdIHwgKERhdGVJbnB1dCB8IEtocm9ub3MpKVtdKTogS2hyb25vcztcblxuICBtYXgoLi4uZGF0ZXM6ICgoRGF0ZUlucHV0IHwgS2hyb25vcylbXSB8IChEYXRlSW5wdXQgfCBLaHJvbm9zKSlbXSk6IEtocm9ub3M7XG5cbiAgbG9jYWxlRGF0YShrZXk/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IEtocm9ub3MpOiBMb2NhbGU7XG5cbiAgdXBkYXRlTG9jYWxlKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZVNwZWM/OiBMb2NhbGVEYXRhKTogTG9jYWxlO1xuXG4gIGNhbGVuZGFyRm9ybWF0KG06IERhdGUsIG5vdzogRGF0ZSk6IHN0cmluZztcblxuICAvLyB0b2RvOiByZW1vdmUgdGhpc1xuICBjYWxlbmRhckZvcm1hdChtOiBLaHJvbm9zLCBub3c6IEtocm9ub3MpOiBzdHJpbmc7XG5cbiAgLy8gdG9kbzogaW1wbGVtZW50XG4gIGludmFsaWQoKTogS2hyb25vcztcblxuICBsb2NhbGVzKCk6IHN0cmluZ1tdO1xuXG4gIC8vIHRvZG86IGltcGxlbWVudFxuICB1cGRhdGVPZmZzZXQobTogS2hyb25vcywga2VlcFRpbWU/OiBib29sZWFuKTogdm9pZDtcbn1cblxuZnVuY3Rpb24gX21vbWVudChpbnB1dD86IERhdGVJbnB1dCB8IEtocm9ub3MsIGZvcm1hdD86IHN0cmluZyB8IHN0cmluZ1tdLCBsb2NhbGVLZXk/OiBzdHJpbmcgfCBib29sZWFuLCBzdHJpY3Q/OiBib29sZWFuLCBpc1VUQz86IGJvb2xlYW4pOiBLaHJvbm9zIHtcbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgS2hyb25vcykge1xuICAgIGNvbnN0IF9kYXRlID0gaW5wdXQuY2xvbmUoKTtcblxuICAgIHJldHVybiBpc1VUQyA/IF9kYXRlLnV0YygpIDogX2RhdGU7XG4gIH1cblxuICBpZiAoaXNCb29sZWFuKGxvY2FsZUtleSkpIHtcbiAgICByZXR1cm4gbmV3IEtocm9ub3MoaW5wdXQsIGZvcm1hdCwgbnVsbCwgbG9jYWxlS2V5LCBpc1VUQyk7XG4gIH1cblxuICByZXR1cm4gbmV3IEtocm9ub3MoaW5wdXQsIGZvcm1hdCwgbG9jYWxlS2V5LCBzdHJpY3QsIGlzVVRDKTtcbn1cblxubW9tZW50LnV0YyA9IChpbnB1dD86IERhdGVJbnB1dCB8IEtocm9ub3MsIGZvcm1hdD86IHN0cmluZywgbG9jYWxlS2V5Pzogc3RyaW5nIHwgYm9vbGVhbiwgc3RyaWN0PzogYm9vbGVhbik6IEtocm9ub3MgPT4ge1xuICByZXR1cm4gX21vbWVudChpbnB1dCwgZm9ybWF0LCBsb2NhbGVLZXksIHN0cmljdCwgdHJ1ZSk7XG59O1xuXG5tb21lbnQucGFyc2Vab25lID0gKGlucHV0PzogRGF0ZUlucHV0IHwgS2hyb25vcywgZm9ybWF0Pzogc3RyaW5nLCBsb2NhbGVLZXk/OiBzdHJpbmcgfCBib29sZWFuLCBzdHJpY3Q/OiBib29sZWFuKTogS2hyb25vcyA9PiB7XG4gIHJldHVybiBfbW9tZW50KGlucHV0LCBmb3JtYXQsIGxvY2FsZUtleSwgc3RyaWN0LCB0cnVlKS5wYXJzZVpvbmUoKTtcbn07XG5cbm1vbWVudC5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG5tb21lbnQubG9jYWxlRGF0YSA9IChrZXk/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IEtocm9ub3MpOiBMb2NhbGUgPT4ge1xuICBpZiAoa2V5IGluc3RhbmNlb2YgS2hyb25vcykge1xuICAgIHJldHVybiBrZXkubG9jYWxlRGF0YSgpO1xuICB9XG5cbiAgcmV0dXJuIGdldExvY2FsZShrZXkpO1xufTtcblxuLy8gbW9tZW50LnV0YyA9IGNyZWF0ZVVUQztcbm1vbWVudC51bml4ID0gKGlucDogbnVtYmVyKSA9PiBuZXcgS2hyb25vcyhpbnAgKiAxMDAwKTtcbm1vbWVudC5JU09fODYwMSA9IElTT184NjAxO1xubW9tZW50LlJGQ18yODIyID0gUkZDXzI4MjI7XG5tb21lbnQuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xubW9tZW50LnBhcnNlVHdvRGlnaXRZZWFyID0gcGFyc2VUd29EaWdpdFllYXI7XG5tb21lbnQuaXNEYXRlID0gaXNEYXRlO1xubW9tZW50LmludmFsaWQgPSBmdW5jdGlvbiBfaW52YWxpZCgpOiBLaHJvbm9zIHtcbiAgcmV0dXJuIG5ldyBLaHJvbm9zKG5ldyBEYXRlKE5hTikpO1xufTtcblxuLy8gZHVyYXRpb24oaW5wPzogRHVyYXRpb24gfCBEYXRlSW5wdXQgfCBLaHJvbm9zLCB1bml0PzogTW9tZW50VW5pdE9mVGltZSk6IER1cmF0aW9uO1xubW9tZW50LmR1cmF0aW9uID0gKGlucHV0PzogRHVyYXRpb24gfCBEYXRlSW5wdXQgfCBLaHJvbm9zLCB1bml0PzogTW9tZW50VW5pdE9mVGltZSk6IER1cmF0aW9uID0+IHtcbiAgY29uc3QgX3VuaXQgPSBtYXBVbml0T2ZUaW1lKHVuaXQpO1xuICBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9kbyBpbXBsZW1lbnQnKTtcbiAgfVxuXG4gIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKCk7XG4gIH1cblxuICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oaW5wdXQsIF91bml0LCB7IF9sb2NhbGU6IGlucHV0Ll9sb2NhbGUgfSk7XG4gIH1cblxuICBpZiAoaXNTdHJpbmcoaW5wdXQpIHx8IGlzTnVtYmVyKGlucHV0KSB8fCBpc0R1cmF0aW9uKGlucHV0KSB8fCBpc09iamVjdDxEYXRlT2JqZWN0PihpbnB1dCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oaW5wdXQsIF91bml0KTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcigndG9kbyBpbXBsZW1lbnQnKTtcbn07XG5cbm1vbWVudC5taW4gPSBmdW5jdGlvbiBfbWluKC4uLmRhdGVzOiAoKERhdGVJbnB1dCB8IEtocm9ub3MpW10gfCAoRGF0ZUlucHV0IHwgS2hyb25vcykpW10pOiBLaHJvbm9zIHtcbiAgY29uc3QgX2ZpcnN0QXJnID0gZGF0ZXNbMF07XG4gIGNvbnN0IF9kYXRlcyA9IChpc0FycmF5KF9maXJzdEFyZykgPyBfZmlyc3RBcmcgOiBkYXRlcylcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgLm1hcCgoZGF0ZTogS2hyb25vcykgPT4gX21vbWVudChkYXRlKSlcbiAgICAubWFwKGRhdGUgPT4gZGF0ZS50b0RhdGUoKSk7XG5cbiAgY29uc3QgX2RhdGUgPSBtaW4oLi4uX2RhdGVzKTtcblxuICByZXR1cm4gbmV3IEtocm9ub3MoX2RhdGUpO1xufTtcblxubW9tZW50Lm1heCA9IGZ1bmN0aW9uIF9tYXgoLi4uZGF0ZXM6ICgoRGF0ZUlucHV0IHwgS2hyb25vcylbXSB8IChEYXRlSW5wdXQgfCBLaHJvbm9zKSlbXSk6IEtocm9ub3Mge1xuICBjb25zdCBfZmlyc3RBcmcgPSBkYXRlc1swXTtcbiAgY29uc3QgX2RhdGVzID0gKGlzQXJyYXkoX2ZpcnN0QXJnKSA/IF9maXJzdEFyZyA6IGRhdGVzKVxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAubWFwKChkYXRlOiBLaHJvbm9zKSA9PiBfbW9tZW50KGRhdGUpKVxuICAgIC5tYXAoZGF0ZSA9PiBkYXRlLnRvRGF0ZSgpKTtcblxuICBjb25zdCBfZGF0ZSA9IG1heCguLi5fZGF0ZXMpO1xuXG4gIHJldHVybiBuZXcgS2hyb25vcyhfZGF0ZSk7XG59O1xuXG5tb21lbnQubG9jYWxlcyA9ICgpOiBzdHJpbmdbXSA9PiB7XG4gIHJldHVybiBsaXN0TG9jYWxlcygpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBNb21lbnRJbnB1dE9iamVjdCB7XG4gIHllYXJzPzogbnVtYmVyO1xuICB5ZWFyPzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xuXG4gIG1vbnRocz86IG51bWJlcjtcbiAgbW9udGg/OiBudW1iZXI7XG4gIE0/OiBudW1iZXI7XG5cbiAgZGF5cz86IG51bWJlcjtcbiAgZGF5PzogbnVtYmVyO1xuICBkPzogbnVtYmVyO1xuXG4gIGRhdGVzPzogbnVtYmVyO1xuICBkYXRlPzogbnVtYmVyO1xuICBEPzogbnVtYmVyO1xuXG4gIGhvdXJzPzogbnVtYmVyO1xuICBob3VyPzogbnVtYmVyO1xuICBoPzogbnVtYmVyO1xuXG4gIG1pbnV0ZXM/OiBudW1iZXI7XG4gIG1pbnV0ZT86IG51bWJlcjtcbiAgbT86IG51bWJlcjtcblxuICBzZWNvbmRzPzogbnVtYmVyO1xuICBzZWNvbmQ/OiBudW1iZXI7XG4gIHM/OiBudW1iZXI7XG5cbiAgbWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuICBtaWxsaXNlY29uZD86IG51bWJlcjtcbiAgbXM/OiBudW1iZXI7XG5cbiAgdz86IG51bWJlcjtcbiAgd2Vlaz86IG51bWJlcjtcbiAgd2Vla3M/OiBudW1iZXI7XG5cbiAgUT86IG51bWJlcjtcbiAgcXVhcnRlcj86IG51bWJlcjtcbiAgcXVhcnRlcnM/OiBudW1iZXI7XG5cbiAgd2Vla1llYXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIE1vbWVudFVuaXRPZlRpbWUgPSAoXG4gICd5ZWFyJyB8ICd5ZWFycycgfCAneScgfFxuICAnbW9udGgnIHwgJ21vbnRocycgfCAnTScgfFxuICAnd2VlaycgfCAnd2Vla3MnIHwgJ3cnIHxcbiAgJ2RheScgfCAnZGF5cycgfCAnZCcgfFxuICAnaG91cicgfCAnaG91cnMnIHwgJ2gnIHxcbiAgJ21pbnV0ZScgfCAnbWludXRlcycgfCAnbScgfFxuICAnc2Vjb25kJyB8ICdzZWNvbmRzJyB8ICdzJyB8XG4gICdtaWxsaXNlY29uZCcgfCAnbWlsbGlzZWNvbmRzJyB8ICdtcycgfFxuICAncScgfCAncXVhcnRlcicgfCAncXVhcnRlcnMnIHwgJ1EnIHxcbiAgJ2lzb1dlZWsnIHwgJ2lzb1dlZWtzJyB8ICdXJyB8XG4gICdkYXRlJyB8ICdkYXRlcycgfCAnRCdcbiAgKTtcblxuZXhwb3J0IHR5cGUgTW9tZW50QWxsID0gTW9tZW50VW5pdE9mVGltZSB8XG4gICd3ZWVrWWVhcicgfCAnd2Vla1llYXJzJyB8ICdnZycgfFxuICAnaXNvV2Vla1llYXInIHwgJ2lzb1dlZWtZZWFycycgfCAnR0cnIHxcbiAgJ2RheU9mWWVhcicgfCAnZGF5T2ZZZWFycycgfCAnREREJyB8XG4gICd3ZWVrZGF5JyB8ICd3ZWVrZGF5cycgfCAnZScgfFxuICAnaXNvV2Vla2RheScgfCAnaXNvV2Vla2RheXMnIHwgJ0UnO1xuXG5jb25zdCBfdW5pdHNQcmlvcml0eToge1trZXkgaW4gVW5pdE9mVGltZV06IG51bWJlcn0gPSB7XG4gIHllYXI6IDEsXG4gIG1vbnRoOiA4LFxuICB3ZWVrOiA1LFxuICBpc29XZWVrOiA1LFxuICBkYXk6IDExLFxuICB3ZWVrZGF5OiAxMSxcbiAgaXNvV2Vla2RheTogMTEsXG4gIGhvdXJzOiAxMyxcbiAgd2Vla1llYXI6IDEsXG4gIGlzb1dlZWtZZWFyOiAxLFxuICBxdWFydGVyOiA3LFxuICBkYXRlOiA5LFxuICBkYXlPZlllYXI6IDQsXG4gIG1pbnV0ZXM6IDE0LFxuICBzZWNvbmRzOiAxNSxcbiAgbWlsbGlzZWNvbmRzOiAxNlxufTtcblxuLy8gdG9kbzogZG8gSSBuZWVkIDIgbWFwcGVycz9cbmNvbnN0IF90aW1lSGFzaE1hcDogeyBba2V5IGluIE1vbWVudEFsbF06IFVuaXRPZlRpbWUgfCBzdHJpbmcgfSA9IHtcbiAgeTogJ3llYXInLFxuICB5ZWFyczogJ3llYXInLFxuICB5ZWFyOiAneWVhcicsXG4gIE06ICdtb250aCcsXG4gIG1vbnRoczogJ21vbnRoJyxcbiAgbW9udGg6ICdtb250aCcsXG4gIHc6ICd3ZWVrJyxcbiAgd2Vla3M6ICd3ZWVrJyxcbiAgd2VlazogJ3dlZWsnLFxuXG4gIGQ6ICdkYXknLFxuICBkYXlzOiAnZGF5JyxcbiAgZGF5OiAnZGF5JyxcblxuICBkYXRlOiAnZGF0ZScsXG4gIGRhdGVzOiAnZGF0ZScsXG4gIEQ6ICdkYXRlJyxcblxuICBoOiAnaG91cnMnLFxuICBob3VyOiAnaG91cnMnLFxuICBob3VyczogJ2hvdXJzJyxcbiAgbTogJ21pbnV0ZXMnLFxuICBtaW51dGU6ICdtaW51dGVzJyxcbiAgbWludXRlczogJ21pbnV0ZXMnLFxuICBzOiAnc2Vjb25kcycsXG4gIHNlY29uZDogJ3NlY29uZHMnLFxuICBzZWNvbmRzOiAnc2Vjb25kcycsXG4gIG1zOiAnbWlsbGlzZWNvbmRzJyxcbiAgbWlsbGlzZWNvbmQ6ICdtaWxsaXNlY29uZHMnLFxuICBtaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZHMnLFxuICBxdWFydGVyOiAncXVhcnRlcicsXG4gIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gIHE6ICdxdWFydGVyJyxcbiAgUTogJ3F1YXJ0ZXInLFxuICBpc29XZWVrOiAnaXNvV2VlaycsXG4gIGlzb1dlZWtzOiAnaXNvV2VlaycsXG4gIFc6ICdpc29XZWVrJyxcbiAgd2Vla1llYXI6ICd3ZWVrWWVhcicsXG4gIHdlZWtZZWFyczogJ3dlZWtZZWFyJyxcbiAgZ2c6ICd3ZWVrWWVhcnMnLFxuICBpc29XZWVrWWVhcjogJ2lzb1dlZWtZZWFyJyxcbiAgaXNvV2Vla1llYXJzOiAnaXNvV2Vla1llYXInLFxuICBHRzogJ2lzb1dlZWtZZWFyJyxcbiAgZGF5T2ZZZWFyOiAnZGF5T2ZZZWFyJyxcbiAgZGF5T2ZZZWFyczogJ2RheU9mWWVhcicsXG4gIERERDogJ2RheU9mWWVhcicsXG4gIHdlZWtkYXk6ICd3ZWVrZGF5JyxcbiAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgZTogJ3dlZWtkYXknLFxuICBpc29XZWVrZGF5OiAnaXNvV2Vla2RheScsXG4gIGlzb1dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gIEU6ICdpc29XZWVrZGF5J1xufTtcblxuZnVuY3Rpb24gbWFwVW5pdE9mVGltZShwZXJpb2Q6IE1vbWVudEFsbCk6IFVuaXRPZlRpbWUge1xuICByZXR1cm4gX3RpbWVIYXNoTWFwW3BlcmlvZF0gYXMgVW5pdE9mVGltZTtcbn1cblxuZnVuY3Rpb24gbWFwTW9tZW50SW5wdXRPYmplY3Qob2JqOiBNb21lbnRJbnB1dE9iamVjdCk6IHtba2V5IGluIFVuaXRPZlRpbWVdPzogbnVtYmVyfSB7XG4gIGNvbnN0IF9yZXM6IHtba2V5IGluIFVuaXRPZlRpbWVdPzogbnVtYmVyfSA9IHt9O1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLnJlZHVjZSgocmVzLCBrZXk6IGtleW9mIE1vbWVudElucHV0T2JqZWN0KSA9PiB7XG4gICAgICByZXNbbWFwVW5pdE9mVGltZShrZXkpXSA9IG9ialtrZXldO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIF9yZXMpO1xufVxuXG5leHBvcnQgY2xhc3MgS2hyb25vcyB7XG4gIF9kYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgX2lzVVRDID0gZmFsc2U7XG4gIF9pc1N0cmljdDogYm9vbGVhbjtcbiAgX2xvY2FsZTogTG9jYWxlO1xuICBfZm9ybWF0OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgX29mZnNldDogbnVtYmVyO1xuICBfdHptOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaW5wdXQ/OiBEYXRlSW5wdXQsXG4gICAgICAgICAgICAgIGZvcm1hdD86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICAgICAgICBsb2NhbGVLZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICAgIHN0cmljdCA9IGZhbHNlLFxuICAgICAgICAgICAgICBpc1VUQyA9IGZhbHNlLFxuICAgICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXIpIHtcbiAgICAvLyBsb2NhbGUgd2lsbCBiZSBuZWVkZWQgdG8gZm9ybWF0IGludmFsaWQgZGF0ZSBtZXNzYWdlXG4gICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKGxvY2FsZUtleSk7XG4gICAgLy8gcGFyc2UgaW52YWxpZCBpbnB1dFxuICAgIGlmIChpbnB1dCA9PT0gJycgfHwgaW5wdXQgPT09IG51bGwgfHwgKGlzTnVtYmVyKGlucHV0KSAmJiBpc05hTihpbnB1dCkpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gbmV3IERhdGUoTmFOKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5faXNVVEMgPSBpc1VUQztcbiAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgIHRoaXMuX29mZnNldCA9IDA7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIHRoaXMuX2lzU3RyaWN0ID0gc3RyaWN0O1xuICAgIHRoaXMuX2Zvcm1hdCA9IGZvcm1hdDtcblxuICAgIGlmICghaW5wdXQgJiYgaW5wdXQgIT09IDAgJiYgIWZvcm1hdCkge1xuICAgICAgdGhpcy5fZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gY2xvbmVEYXRlKGlucHV0KTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gdGhpcy5fZGF0ZSA9IHBhcnNlRGF0ZShpbnB1dCwgZm9ybWF0LCBsb2NhbGVLZXksIHN0cmljdCwgaXNVVEMpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlS2V5LCBzdHJpY3QsIGlzVVRDKTtcbiAgICB0aGlzLl9kYXRlID0gY29uZmlnLl9kO1xuICAgIHRoaXMuX29mZnNldCA9IGlzTnVtYmVyKGNvbmZpZy5fb2Zmc2V0KSA/IGNvbmZpZy5fb2Zmc2V0IDogdGhpcy5fb2Zmc2V0O1xuICAgIHRoaXMuX2lzVVRDID0gY29uZmlnLl9pc1VUQztcbiAgICB0aGlzLl9pc1N0cmljdCA9IGNvbmZpZy5fc3RyaWN0O1xuICAgIHRoaXMuX2Zvcm1hdCA9IGNvbmZpZy5fZjtcbiAgICB0aGlzLl90em0gPSBjb25maWcuX3R6bTtcbiAgfVxuXG4gIF90b0NvbmZpZygpOiBEYXRlUGFyc2luZ0NvbmZpZyB7XG4gICAgcmV0dXJuIHsgX2lzVVRDOiB0aGlzLl9pc1VUQywgX2xvY2FsZTogdGhpcy5fbG9jYWxlLCBfb2Zmc2V0OiB0aGlzLl9vZmZzZXQsIF90em06IHRoaXMuX3R6bSB9O1xuICB9XG5cbiAgLy8gTG9jYWxlXG4gIGxvY2FsZSgpOiBzdHJpbmc7XG4gIGxvY2FsZShsb2NhbGVLZXk6IHN0cmluZyB8IHN0cmluZ1tdIHwgS2hyb25vcyk6IEtocm9ub3M7XG4gIGxvY2FsZShsb2NhbGVLZXk/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IEtocm9ub3MpOiBLaHJvbm9zIHwgc3RyaW5nIHtcbiAgICBpZiAoaXNVbmRlZmluZWQobG9jYWxlS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBpZiAobG9jYWxlS2V5IGluc3RhbmNlb2YgS2hyb25vcykge1xuICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlS2V5Ll9sb2NhbGU7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUobG9jYWxlS2V5KTtcbiAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9jYWxlRGF0YSgpOiBMb2NhbGUge1xuICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gIH1cblxuICAvLyBCYXNpY1xuXG4gIGFkZCh2YWw6IG51bWJlciB8IHN0cmluZyB8IE1vbWVudElucHV0T2JqZWN0LCBwZXJpb2Q/OiBVbml0T2ZUaW1lIHwgTW9tZW50VW5pdE9mVGltZSk6IEtocm9ub3Mge1xuICAgIGlmIChpc1N0cmluZyh2YWwpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gYWRkKHRoaXMuX2RhdGUsIHBhcnNlSW50KHZhbCwgMTApLCBtYXBVbml0T2ZUaW1lKHBlcmlvZCkpO1xuICAgIH1cblxuICAgIGlmIChpc051bWJlcih2YWwpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gYWRkKHRoaXMuX2RhdGUsIHZhbCwgbWFwVW5pdE9mVGltZShwZXJpb2QpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3Q8TW9tZW50SW5wdXRPYmplY3Q+KHZhbCkpIHtcbiAgICAgIGNvbnN0IF9tYXBwZWQgPSBtYXBNb21lbnRJbnB1dE9iamVjdCh2YWwpO1xuICAgICAgT2JqZWN0LmtleXMoX21hcHBlZClcbiAgICAgICAgLmZvckVhY2goKGtleTogVW5pdE9mVGltZSkgPT4gYWRkKHRoaXMuX2RhdGUsIF9tYXBwZWRba2V5XSwga2V5KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBmaXhtZTogZm9yIHNvbWUgcmVhc29uIGhlcmUgJ251bGwnIGZvciB0aW1lIGlzIGZpbmVcbiAgY2FsZW5kYXIodGltZT86IERhdGVJbnB1dCB8IEtocm9ub3MsIGZvcm1hdHM/OiBDYWxlbmRhclNwZWMpOiBzdHJpbmcge1xuICAgIGNvbnN0IF90aW1lID0gdGltZSBpbnN0YW5jZW9mIEtocm9ub3MgPyB0aW1lIDogbmV3IEtocm9ub3ModGltZSB8fCBuZXcgRGF0ZSgpKTtcbiAgICBjb25zdCBfb2Zmc2V0ID0gKHRoaXMuX29mZnNldCB8fCAwKSAtIChfdGltZS5fb2Zmc2V0IHx8IDApO1xuICAgIGNvbnN0IF9jb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMuX3RvQ29uZmlnKCksIHsgX29mZnNldCB9KTtcblxuICAgIHJldHVybiBjYWxlbmRhcih0aGlzLl9kYXRlLCBfdGltZS5fZGF0ZSxcbiAgICAgIGZvcm1hdHMsIHRoaXMuX2xvY2FsZSwgX2NvbmZpZyk7XG4gIH1cblxuICBjbG9uZSgpOiBLaHJvbm9zIHtcbiAgICBjb25zdCBsb2NhbGVLZXkgPSB0aGlzLl9sb2NhbGUgJiYgdGhpcy5fbG9jYWxlLl9hYmJyIHx8ICdlbic7XG5cbiAgICAvLyByZXR1cm4gbmV3IEtocm9ub3MoY2xvbmVEYXRlKHRoaXMuX2RhdGUpLCB0aGlzLl9mb3JtYXQsIGxvY2FsZUtleSwgdGhpcy5faXNTdHJpY3QsIHRoaXMuX2lzVVRDKTtcbiAgICAvLyBmYWlscyBpZiBpc1VUQyBhbmQgb2Zmc2V0XG4gICAgLy8gcmV0dXJuIG5ldyBLaHJvbm9zKG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKSxcbiAgICByZXR1cm4gbmV3IEtocm9ub3ModGhpcy5fZGF0ZSxcbiAgICAgIHRoaXMuX2Zvcm1hdCxcbiAgICAgIGxvY2FsZUtleSxcbiAgICAgIHRoaXMuX2lzU3RyaWN0LFxuICAgICAgdGhpcy5faXNVVEMsXG4gICAgICB0aGlzLl9vZmZzZXQpO1xuICB9XG5cbiAgZGlmZihiOiBEYXRlSW5wdXQgfCBLaHJvbm9zLCB1bml0T2ZUaW1lPzogTW9tZW50VW5pdE9mVGltZSwgcHJlY2lzZT86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGNvbnN0IHVuaXQgPSBtYXBVbml0T2ZUaW1lKHVuaXRPZlRpbWUpO1xuICAgIGNvbnN0IF9iID0gYiBpbnN0YW5jZW9mIEtocm9ub3MgPyBiIDogbmV3IEtocm9ub3MoYik7XG4gICAgLy8gY29uc3Qgem9uZURlbHRhID0gKF9iLnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSk7XG4gICAgLy8gY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih0aGlzLl90b0NvbmZpZygpLCB7XG4gICAgLy8gICBfb2Zmc2V0OiAwLFxuICAgIC8vICAgX2lzVVRDOiB0cnVlLFxuICAgIC8vICAgX3pvbmVEZWx0YTogem9uZURlbHRhXG4gICAgLy8gfSk7XG4gICAgLy8gcmV0dXJuIGRpZmYobmV3IERhdGUodGhpcy52YWx1ZU9mKCkpLCBuZXcgRGF0ZShfYi52YWx1ZU9mKCkpLCB1bml0LCBwcmVjaXNlLCBjb25maWcpO1xuXG4gICAgcmV0dXJuIGRpZmYodGhpcy5fZGF0ZSwgX2IudG9EYXRlKCksIHVuaXQsIHByZWNpc2UsIHRoaXMuX3RvQ29uZmlnKCkpO1xuICB9XG5cbiAgZW5kT2YocGVyaW9kPzogTW9tZW50VW5pdE9mVGltZSk6IEtocm9ub3Mge1xuICAgIGNvbnN0IF9wZXIgPSBtYXBVbml0T2ZUaW1lKHBlcmlvZCk7XG4gICAgdGhpcy5fZGF0ZSA9IGVuZE9mKHRoaXMuX2RhdGUsIF9wZXIsIHRoaXMuX2lzVVRDKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9ybWF0KGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZvcm1hdERhdGUodGhpcy5fZGF0ZSwgZm9ybWF0LCB0aGlzLl9sb2NhbGUgJiYgdGhpcy5fbG9jYWxlLl9hYmJyLCB0aGlzLl9pc1VUQywgdGhpcy5fb2Zmc2V0KTtcbiAgfVxuXG4gIC8vIHRvZG86IGltcGxlbWVudFxuICBmcm9tKHRpbWU/OiBEYXRlSW5wdXQgfCBLaHJvbm9zLCB3aXRob3V0U3VmZml4PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3QgX3RpbWUgPSBfbW9tZW50KHRpbWUpO1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBfdGltZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLnRvRGF0ZSgpLCBmcm9tOiBfdGltZS50b0RhdGUoKSB9KVxuICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlO1xuICB9XG5cbiAgZnJvbU5vdyh3aXRob3V0U3VmZml4PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbShuZXcgRGF0ZSgpLCB3aXRob3V0U3VmZml4KTtcbiAgfVxuXG4gIHRvKGlucDogRGF0ZUlucHV0IHwgS2hyb25vcywgc3VmZml4PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUT0RPOiBJbXBsZW1lbnRgKTtcbiAgfVxuXG4gIHRvTm93KHdpdGhvdXRQcmVmaXg/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRPRE86IEltcGxlbWVudGApO1xuICB9XG5cbiAgc3VidHJhY3QodmFsOiBudW1iZXIgfCBzdHJpbmcgfCBNb21lbnRJbnB1dE9iamVjdCwgcGVyaW9kPzogVW5pdE9mVGltZSB8IE1vbWVudFVuaXRPZlRpbWUpOiBLaHJvbm9zIHtcbiAgICBpZiAoaXNTdHJpbmcodmFsKSkge1xuICAgICAgdGhpcy5fZGF0ZSA9IHN1YnRyYWN0KHRoaXMuX2RhdGUsIHBhcnNlSW50KHZhbCwgMTApLCBtYXBVbml0T2ZUaW1lKHBlcmlvZCkpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAoaXNOdW1iZXIodmFsKSkge1xuICAgICAgdGhpcy5fZGF0ZSA9IHN1YnRyYWN0KHRoaXMuX2RhdGUsIHZhbCwgbWFwVW5pdE9mVGltZShwZXJpb2QpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3Q8TW9tZW50SW5wdXRPYmplY3Q+KHZhbCkpIHtcbiAgICAgIGNvbnN0IF9tYXBwZWQgPSBtYXBNb21lbnRJbnB1dE9iamVjdCh2YWwpO1xuICAgICAgT2JqZWN0LmtleXMoX21hcHBlZClcbiAgICAgICAgLmZvckVhY2goKGtleTogVW5pdE9mVGltZSkgPT4gc3VidHJhY3QodGhpcy5fZGF0ZSwgX21hcHBlZFtrZXldLCBrZXkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChwZXJpb2Q6IE1vbWVudEFsbCk6IG51bWJlciB7XG4gICAgaWYgKHBlcmlvZCA9PT0gJ2RheU9mWWVhcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmRheU9mWWVhcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaXQgPSBtYXBVbml0T2ZUaW1lKHBlcmlvZCk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpO1xuICAgICAgLy8gfCAnd2VlaydcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlKCk7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXkoKTtcbiAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKTtcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5taW51dGVzKCk7XG4gICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kcygpO1xuICAgICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzKCk7XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgcmV0dXJuIHRoaXMud2VlaygpO1xuICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWsoKTtcbiAgICAgIGNhc2UgJ3dlZWtZZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKTtcbiAgICAgIGNhc2UgJ2lzb1dlZWtZZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKTtcbiAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICByZXR1cm4gdGhpcy53ZWVrZGF5KCk7XG4gICAgICBjYXNlICdpc29XZWVrZGF5JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla2RheSgpO1xuICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgIHJldHVybiB0aGlzLnF1YXJ0ZXIoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb21lbnQuZ2V0KCcke3BlcmlvZH0nKWApO1xuICAgIH1cbiAgfVxuXG4gIHNldChwZXJpb2Q6IE1vbWVudEFsbCB8IE1vbWVudElucHV0T2JqZWN0LCBpbnB1dD86IG51bWJlcik6IEtocm9ub3Mge1xuXG4gICAgaWYgKGlzU3RyaW5nKHBlcmlvZCkpIHtcbiAgICAgIGNvbnN0IHVuaXQgPSBtYXBVbml0T2ZUaW1lKHBlcmlvZCk7XG4gICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMueWVhcihpbnB1dCk7XG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb250aChpbnB1dCk7XG4gICAgICAgIC8vIHwgJ3dlZWsnXG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KGlucHV0KTtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZShpbnB1dCk7XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5ob3VycyhpbnB1dCk7XG4gICAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICAgIHJldHVybiB0aGlzLm1pbnV0ZXMoaW5wdXQpO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWNvbmRzKGlucHV0KTtcbiAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZHMoaW5wdXQpO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWVrKGlucHV0KTtcbiAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2VlayhpbnB1dCk7XG4gICAgICAgIGNhc2UgJ3dlZWtZZWFyJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcihpbnB1dCk7XG4gICAgICAgIGNhc2UgJ2lzb1dlZWtZZWFyJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcihpbnB1dCk7XG4gICAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICAgIHJldHVybiB0aGlzLndlZWtkYXkoaW5wdXQpO1xuICAgICAgICBjYXNlICdpc29XZWVrZGF5JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrZGF5KGlucHV0KTtcbiAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMucXVhcnRlcihpbnB1dCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vbWVudC5nZXQoJyR7cGVyaW9kfScpYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0PE1vbWVudElucHV0T2JqZWN0PihwZXJpb2QpKSB7XG4gICAgICBjb25zdCBfbWFwcGVkID0gbWFwTW9tZW50SW5wdXRPYmplY3QocGVyaW9kKTtcbiAgICAgIE9iamVjdC5rZXlzKF9tYXBwZWQpXG4gICAgICAgIC5zb3J0KGZ1bmN0aW9uKGE6IFVuaXRPZlRpbWUsIGI6IFVuaXRPZlRpbWUpOiBudW1iZXIge1xuICAgICAgICAgIHJldHVybiBfdW5pdHNQcmlvcml0eVthXSAtIF91bml0c1ByaW9yaXR5W2JdO1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaCgoa2V5OiBVbml0T2ZUaW1lKSA9PiB0aGlzLnNldChrZXksIF9tYXBwZWRba2V5XSkpO1xuICAgIH1cblxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgfVxuXG4gIHRvSVNPU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGdldEZ1bGxZZWFyKHRoaXMuX2RhdGUsIHRydWUpIDwgMCB8fCBnZXRGdWxsWWVhcih0aGlzLl9kYXRlLCB0cnVlKSA+IDk5OTkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdCgnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtYXQoJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nKTtcbiAgfVxuXG4gIGluc3BlY3QoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE86IGltcGxlbWVudCcpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHRvRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICB9XG5cbiAgdG9PYmplY3QoKToge1trZXkgaW4gTW9tZW50VW5pdE9mVGltZV0/OiBudW1iZXJ9IHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8geWVhcnM6IGdldEZ1bGxZZWFyKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKSxcbiAgICAgIC8vIG1vbnRoczogZ2V0TW9udGgodGhpcy5fZGF0ZSwgdGhpcy5faXNVVEMpLFxuXG4gICAgICB5ZWFyOiBnZXRGdWxsWWVhcih0aGlzLl9kYXRlLCB0aGlzLl9pc1VUQyksXG4gICAgICBtb250aDogZ2V0TW9udGgodGhpcy5fZGF0ZSwgdGhpcy5faXNVVEMpLFxuICAgICAgZGF0ZTogZ2V0RGF0ZSh0aGlzLl9kYXRlLCB0aGlzLl9pc1VUQyksXG4gICAgICBob3VyczogZ2V0SG91cnModGhpcy5fZGF0ZSwgdGhpcy5faXNVVEMpLFxuICAgICAgbWludXRlczogZ2V0TWludXRlcyh0aGlzLl9kYXRlLCB0aGlzLl9pc1VUQyksXG4gICAgICBzZWNvbmRzOiBnZXRTZWNvbmRzKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKSxcbiAgICAgIG1pbGxpc2Vjb25kczogZ2V0TWlsbGlzZWNvbmRzKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKVxuICAgIH07XG4gIH1cblxuICB0b0FycmF5KCk6IERhdGVBcnJheSB7XG4gICAgcmV0dXJuIFt0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSwgdGhpcy5ob3VyKCksIHRoaXMubWludXRlKCksIHRoaXMuc2Vjb25kKCksIHRoaXMubWlsbGlzZWNvbmQoKV07XG4gIH1cblxuXG4gIC8vIERhdGVzIGJvb2xlYW4gYWxnZWJyYVxuXG4gIGlzQWZ0ZXIoZGF0ZTogS2hyb25vcywgdW5pdD86IE1vbWVudFVuaXRPZlRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBfdW5pdCA9IHVuaXQgPyBtYXBVbml0T2ZUaW1lKHVuaXQpIDogdm9pZCAwO1xuXG4gICAgcmV0dXJuIGlzQWZ0ZXIodGhpcy5fZGF0ZSwgZGF0ZS50b0RhdGUoKSwgX3VuaXQpO1xuICB9XG5cbiAgaXNCZWZvcmUoZGF0ZTogS2hyb25vcywgdW5pdD86IE1vbWVudFVuaXRPZlRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBfdW5pdCA9IHVuaXQgPyBtYXBVbml0T2ZUaW1lKHVuaXQpIDogdm9pZCAwO1xuXG4gICAgcmV0dXJuIGlzQmVmb3JlKHRoaXMudG9EYXRlKCksIGRhdGUudG9EYXRlKCksIF91bml0KTtcbiAgfVxuXG4gIGlzQmV0d2Vlbihmcm9tOiBLaHJvbm9zLCB0bzogS2hyb25vcywgdW5pdD86IE1vbWVudFVuaXRPZlRpbWUsIGluY2x1c2l2aXR5Pzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgX3VuaXQgPSB1bml0ID8gbWFwVW5pdE9mVGltZSh1bml0KSA6IHZvaWQgMDtcblxuICAgIHJldHVybiBpc0JldHdlZW4odGhpcy50b0RhdGUoKSwgZnJvbS50b0RhdGUoKSwgdG8udG9EYXRlKCksIF91bml0LCBpbmNsdXNpdml0eSk7XG4gIH1cblxuICBpc1NhbWUoZGF0ZTogS2hyb25vcywgdW5pdD86IE1vbWVudFVuaXRPZlRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBfdW5pdCA9IHVuaXQgPyBtYXBVbml0T2ZUaW1lKHVuaXQpIDogdm9pZCAwO1xuXG4gICAgcmV0dXJuIGlzU2FtZSh0aGlzLl9kYXRlLCBkYXRlLnRvRGF0ZSgpLCBfdW5pdCk7XG4gIH1cblxuICBpc1NhbWVPckFmdGVyKGRhdGU6IEtocm9ub3MsIHVuaXQ/OiBNb21lbnRVbml0T2ZUaW1lKTogYm9vbGVhbiB7XG4gICAgY29uc3QgX3VuaXQgPSB1bml0ID8gbWFwVW5pdE9mVGltZSh1bml0KSA6IHZvaWQgMDtcblxuICAgIHJldHVybiBpc1NhbWVPckFmdGVyKHRoaXMuX2RhdGUsIGRhdGUudG9EYXRlKCksIF91bml0KTtcbiAgfVxuXG4gIGlzU2FtZU9yQmVmb3JlKGRhdGU6IEtocm9ub3MsIHVuaXQ/OiBNb21lbnRVbml0T2ZUaW1lKTogYm9vbGVhbiB7XG4gICAgY29uc3QgX3VuaXQgPSB1bml0ID8gbWFwVW5pdE9mVGltZSh1bml0KSA6IHZvaWQgMDtcblxuICAgIHJldHVybiBpc1NhbWVPckJlZm9yZSh0aGlzLl9kYXRlLCBkYXRlLnRvRGF0ZSgpLCBfdW5pdCk7XG4gIH1cblxuICBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0RhdGVWYWxpZCh0aGlzLl9kYXRlKTtcbiAgfVxuXG4gIHZhbHVlT2YoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS52YWx1ZU9mKCkgLSAoKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwKTtcbiAgfVxuXG4gIHVuaXgoKTogbnVtYmVyIHtcbiAgICAvLyByZXR1cm4gZ2V0VW5peFRpbWUodGhpcy5fZGF0ZSk7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgfVxuXG5cbiAgLy8gT2Zmc2V0XG5cbiAgdXRjT2Zmc2V0KCk6IG51bWJlcjtcbiAgdXRjT2Zmc2V0KGI6IG51bWJlciB8IHN0cmluZywga2VlcExvY2FsVGltZT86IGJvb2xlYW4pOiBLaHJvbm9zO1xuICB1dGNPZmZzZXQoYj86IG51bWJlciB8IHN0cmluZywga2VlcExvY2FsVGltZT86IGJvb2xlYW4pOiBudW1iZXIgfCBLaHJvbm9zIHtcbiAgICBjb25zdCBfY29uZmlnID0gdGhpcy5fdG9Db25maWcoKTtcblxuICAgIGlmICghYiAmJiBiICE9PSAwKSB7XG4gICAgICByZXR1cm4gZ2V0VVRDT2Zmc2V0KHRoaXMuX2RhdGUsIF9jb25maWcpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGUgPSBzZXRVVENPZmZzZXQodGhpcy5fZGF0ZSwgYiwga2VlcExvY2FsVGltZSwgZmFsc2UsIF9jb25maWcpO1xuXG4gICAgdGhpcy5fb2Zmc2V0ID0gX2NvbmZpZy5fb2Zmc2V0O1xuICAgIHRoaXMuX2lzVVRDID0gX2NvbmZpZy5faXNVVEM7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHV0YyhrZWVwTG9jYWxUaW1lPzogYm9vbGVhbik6IEtocm9ub3Mge1xuICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgfVxuXG4gIGxvY2FsKGtlZXBMb2NhbFRpbWU/OiBib29sZWFuKTogS2hyb25vcyB7XG4gICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzLl9kYXRlKSwgJ20nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhcnNlWm9uZShpbnB1dD86IHN0cmluZyk6IEtocm9ub3Mge1xuICAgIGNvbnN0IF9jb25maWcgPSB0aGlzLl90b0NvbmZpZygpO1xuICAgIHRoaXMuX2RhdGUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCh0aGlzLl9kYXRlLCBpbnB1dCwgX2NvbmZpZyk7XG5cbiAgICB0aGlzLl9vZmZzZXQgPSBfY29uZmlnLl9vZmZzZXQ7XG4gICAgdGhpcy5faXNVVEMgPSBfY29uZmlnLl9pc1VUQztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQ/OiBLaHJvbm9zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGhhc0FsaWduZWRIb3VyT2Zmc2V0KHRoaXMuX2RhdGUsIGlucHV0ID8gaW5wdXQuX2RhdGUgOiB2b2lkIDApO1xuICB9XG5cbiAgaXNEU1QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRGF5bGlnaHRTYXZpbmdUaW1lKHRoaXMuX2RhdGUpO1xuICB9XG5cbiAgaXNMb2NhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2lzVVRDO1xuICB9XG5cbiAgaXNVdGNPZmZzZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVVRDO1xuICB9XG5cbiAgaXNVVEMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNVdGMoKTtcbiAgfVxuXG4gIGlzVXRjKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDA7XG4gIH1cblxuICAvLyBUaW1lem9uZVxuXG4gIHpvbmVBYmJyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldFpvbmVBYmJyKHRoaXMuX2lzVVRDKTtcbiAgfVxuXG4gIHpvbmVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldFpvbmVOYW1lKHRoaXMuX2lzVVRDKTtcbiAgfVxuXG4gIC8vIFllYXJcblxuICB5ZWFyKCk6IG51bWJlcjtcbiAgeWVhcih5ZWFyOiBudW1iZXIpOiBLaHJvbm9zO1xuICB5ZWFyKHllYXI/OiBudW1iZXIpOiBLaHJvbm9zIHwgbnVtYmVyIHtcbiAgICBpZiAoIXllYXIgJiYgeWVhciAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldEZ1bGxZZWFyKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlID0gY2xvbmVEYXRlKHNldEZ1bGxZZWFyKHRoaXMuX2RhdGUsIHllYXIpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2Vla1llYXIoKTogbnVtYmVyO1xuICB3ZWVrWWVhcih2YWw6IG51bWJlcik6IEtocm9ub3M7XG4gIHdlZWtZZWFyKHZhbD86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldFdlZWtZZWFyKHRoaXMuX2RhdGUsIHRoaXMuX2xvY2FsZSwgdGhpcy5pc1VUQygpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gZ2V0U2V0V2Vla1llYXIodGhpcy5fZGF0ZSwgdmFsLCB0aGlzLl9sb2NhbGUsIHRoaXMuaXNVVEMoKSk7XG4gICAgaWYgKGlzRGF0ZShkYXRlKSkge1xuICAgICAgdGhpcy5fZGF0ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpc29XZWVrWWVhcigpOiBudW1iZXIgO1xuICBpc29XZWVrWWVhcih2YWw6IG51bWJlcik6IEtocm9ub3MgO1xuICBpc29XZWVrWWVhcih2YWw/OiBudW1iZXIpOiBLaHJvbm9zIHwgbnVtYmVyIHtcbiAgICBpZiAoIXZhbCAmJiB2YWwgIT09IDApIHtcbiAgICAgIHJldHVybiBnZXRJU09XZWVrWWVhcih0aGlzLl9kYXRlLCB0aGlzLmlzVVRDKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGUgPSBnZXRTZXRJU09XZWVrWWVhcih0aGlzLl9kYXRlLCB2YWwsIHRoaXMuaXNVdGMoKSk7XG5cbiAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlzTGVhcFllYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIoZ2V0RnVsbFllYXIodGhpcy50b0RhdGUoKSwgdGhpcy5pc1VUQygpKSk7XG4gIH1cblxuICAvLyBNb250aFxuXG4gIG1vbnRoKCk6IG51bWJlcjtcbiAgbW9udGgobW9udGg6IG51bWJlciB8IHN0cmluZyk6IEtocm9ub3M7XG4gIG1vbnRoKG1vbnRoPzogbnVtYmVyIHwgc3RyaW5nKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgaWYgKCFtb250aCAmJiBtb250aCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldE1vbnRoKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKTtcbiAgICB9XG5cbiAgICBsZXQgX21vbnRoID0gbW9udGg7XG5cbiAgICBpZiAoaXNTdHJpbmcobW9udGgpKSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKCk7XG4gICAgICBfbW9udGggPSBsb2NhbGUubW9udGhzUGFyc2UobW9udGgpO1xuICAgIH1cblxuICAgIGlmIChpc051bWJlcihfbW9udGgpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gY2xvbmVEYXRlKHNldE1vbnRoKHRoaXMuX2RhdGUsIF9tb250aCwgdGhpcy5faXNVVEMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBob3VyKCk6IG51bWJlcjtcbiAgaG91cihob3VyczogbnVtYmVyKTogS2hyb25vcztcbiAgaG91cihob3Vycz86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmhvdXJzKGhvdXJzKTtcbiAgfVxuXG4gIGhvdXJzKCk6IG51bWJlcjtcbiAgaG91cnMoaG91cnM6IG51bWJlcik6IEtocm9ub3M7XG4gIGhvdXJzKGhvdXJzPzogbnVtYmVyKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgaWYgKCFob3VycyAmJiBob3VycyAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldEhvdXJzKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlID0gY2xvbmVEYXRlKHNldEhvdXJzKHRoaXMuX2RhdGUsIGhvdXJzLCB0aGlzLl9pc1VUQykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgbWludXRlKCk6IG51bWJlcjtcbiAgbWludXRlKG1pbnV0ZXM6IG51bWJlcik6IEtocm9ub3M7XG4gIG1pbnV0ZShtaW51dGVzPzogbnVtYmVyKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWludXRlcyhtaW51dGVzKTtcbiAgfVxuXG4gIG1pbnV0ZXMoKTogbnVtYmVyO1xuICBtaW51dGVzKG1pbnV0ZXM6IG51bWJlcik6IEtocm9ub3M7XG4gIG1pbnV0ZXMobWludXRlcz86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIGlmICghbWludXRlcyAmJiBtaW51dGVzICE9PSAwKSB7XG4gICAgICByZXR1cm4gZ2V0TWludXRlcyh0aGlzLl9kYXRlLCB0aGlzLl9pc1VUQyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0ZSA9IGNsb25lRGF0ZShzZXRNaW51dGVzKHRoaXMuX2RhdGUsIG1pbnV0ZXMsIHRoaXMuX2lzVVRDKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBzZWNvbmQoKTogbnVtYmVyO1xuICBzZWNvbmQoc2Vjb25kczogbnVtYmVyKTogS2hyb25vcztcbiAgc2Vjb25kKHNlY29uZHM/OiBudW1iZXIpOiBLaHJvbm9zIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWNvbmRzKHNlY29uZHMpO1xuICB9XG5cbiAgc2Vjb25kcygpOiBudW1iZXI7XG4gIHNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogS2hyb25vcztcbiAgc2Vjb25kcyhzZWNvbmRzPzogbnVtYmVyKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgaWYgKCFzZWNvbmRzICYmIHNlY29uZHMgIT09IDApIHtcbiAgICAgIHJldHVybiBnZXRTZWNvbmRzKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlID0gY2xvbmVEYXRlKHNldFNlY29uZHModGhpcy5fZGF0ZSwgc2Vjb25kcywgdGhpcy5faXNVVEMpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIG1pbGxpc2Vjb25kKCk6IG51bWJlcjtcbiAgbWlsbGlzZWNvbmQobXM6IG51bWJlcik6IEtocm9ub3M7XG4gIG1pbGxpc2Vjb25kKG1zPzogbnVtYmVyKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzKG1zKTtcbiAgfVxuXG4gIG1pbGxpc2Vjb25kcygpOiBudW1iZXI7XG4gIG1pbGxpc2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBLaHJvbm9zO1xuICBtaWxsaXNlY29uZHMoc2Vjb25kcz86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIGlmICghc2Vjb25kcyAmJiBzZWNvbmRzICE9PSAwKSB7XG4gICAgICByZXR1cm4gZ2V0TWlsbGlzZWNvbmRzKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlID0gY2xvbmVEYXRlKHNldE1pbGxpc2Vjb25kcyh0aGlzLl9kYXRlLCBzZWNvbmRzLCB0aGlzLl9pc1VUQykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBEYXlcblxuICBkYXRlKCk6IG51bWJlcjtcbiAgZGF0ZShkYXRlOiBudW1iZXIpOiBLaHJvbm9zO1xuICBkYXRlKGRhdGU/OiBudW1iZXIpOiBLaHJvbm9zIHwgbnVtYmVyIHtcbiAgICBpZiAoIWRhdGUgJiYgZGF0ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldERhdGUodGhpcy5fZGF0ZSwgdGhpcy5faXNVVEMpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGUgPSBjbG9uZURhdGUoc2V0RGF0ZSh0aGlzLl9kYXRlLCBkYXRlLCB0aGlzLl9pc1VUQykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkYXkoKTogbnVtYmVyIDtcbiAgZGF5KGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBLaHJvbm9zIDtcbiAgZGF5KGlucHV0PzogbnVtYmVyIHwgc3RyaW5nKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgaWYgKCFpbnB1dCAmJiBpbnB1dCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldERheU9mV2Vlayh0aGlzLl9kYXRlLCB0aGlzLl9pc1VUQyk7XG4gICAgfVxuXG4gICAgbGV0IF9pbnB1dCA9IGlucHV0O1xuXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0KSkge1xuICAgICAgX2lucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIGlmIChpc051bWJlcihfaW5wdXQpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gc2V0RGF5T2ZXZWVrKHRoaXMuX2RhdGUsIF9pbnB1dCwgdGhpcy5fbG9jYWxlLCB0aGlzLl9pc1VUQyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3ZWVrZGF5KCk6IG51bWJlciA7XG4gIHdlZWtkYXkodmFsOiBudW1iZXIpOiBLaHJvbm9zIDtcbiAgd2Vla2RheSh2YWw/OiBudW1iZXIpOiBLaHJvbm9zIHwgbnVtYmVyIHtcbiAgICBpZiAoIXZhbCAmJiB2YWwgIT09IDApIHtcbiAgICAgIHJldHVybiBnZXRMb2NhbGVEYXlPZldlZWsodGhpcy5fZGF0ZSwgdGhpcy5fbG9jYWxlLCB0aGlzLl9pc1VUQyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0ZSA9IHNldExvY2FsZURheU9mV2Vlayh0aGlzLl9kYXRlLCB2YWwsIHsgbG9jYWxlOiB0aGlzLl9sb2NhbGUsIGlzVVRDOiB0aGlzLl9pc1VUQyB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaXNvV2Vla2RheSgpOiBudW1iZXIgO1xuICBpc29XZWVrZGF5KHZhbDogbnVtYmVyIHwgc3RyaW5nKTogS2hyb25vcyA7XG4gIGlzb1dlZWtkYXkodmFsPzogbnVtYmVyIHwgc3RyaW5nKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgaWYgKCF2YWwgJiYgdmFsICE9PSAwKSB7XG4gICAgICByZXR1cm4gZ2V0SVNPRGF5T2ZXZWVrKHRoaXMuX2RhdGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGUgPSBzZXRJU09EYXlPZldlZWsodGhpcy5fZGF0ZSwgdmFsKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZGF5T2ZZZWFyKCk6IG51bWJlcjtcbiAgZGF5T2ZZZWFyKHZhbDogbnVtYmVyKTogS2hyb25vcztcbiAgZGF5T2ZZZWFyKHZhbD86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldERheU9mWWVhcih0aGlzLl9kYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlID0gc2V0RGF5T2ZZZWFyKHRoaXMuX2RhdGUsIHZhbCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdlZWtcblxuICB3ZWVrKCk6IG51bWJlcjtcbiAgd2VlayhpbnB1dDogbnVtYmVyKTogS2hyb25vcztcbiAgd2VlayhpbnB1dD86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIGlmICghaW5wdXQgJiYgaW5wdXQgIT09IDApIHtcbiAgICAgIHJldHVybiBnZXRXZWVrKHRoaXMuX2RhdGUsIHRoaXMuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0ZSA9IHNldFdlZWsodGhpcy5fZGF0ZSwgaW5wdXQsIHRoaXMuX2xvY2FsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB3ZWVrcygpOiBudW1iZXI7XG4gIHdlZWtzKGlucHV0OiBudW1iZXIpOiBLaHJvbm9zO1xuICB3ZWVrcyhpbnB1dD86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndlZWsoaW5wdXQpO1xuICB9XG5cbiAgaXNvV2VlaygpOiBudW1iZXIgO1xuICBpc29XZWVrKHZhbDogbnVtYmVyKTogS2hyb25vcyA7XG4gIGlzb1dlZWsodmFsPzogbnVtYmVyKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgaWYgKCF2YWwgJiYgdmFsICE9PSAwKSB7XG4gICAgICByZXR1cm4gZ2V0SVNPV2Vlayh0aGlzLl9kYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlID0gc2V0SVNPV2Vlayh0aGlzLl9kYXRlLCB2YWwpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgaXNvV2Vla3MoKTogbnVtYmVyIDtcbiAgaXNvV2Vla3ModmFsOiBudW1iZXIpOiBLaHJvbm9zIDtcbiAgaXNvV2Vla3ModmFsPzogbnVtYmVyKTogS2hyb25vcyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNvV2Vlayh2YWwpO1xuICB9XG5cbiAgd2Vla3NJblllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZ2V0V2Vla3NJblllYXIodGhpcy5fZGF0ZSwgdGhpcy5faXNVVEMsIHRoaXMuX2xvY2FsZSk7XG4gIH1cblxuICBpc29XZWVrc0luWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRJU09XZWVrc0luWWVhcih0aGlzLl9kYXRlLCB0aGlzLl9pc1VUQyk7XG4gIH1cblxuXG4gIGRheXNJbk1vbnRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRheXNJbk1vbnRoKGdldEZ1bGxZZWFyKHRoaXMuX2RhdGUsIHRoaXMuX2lzVVRDKSwgZ2V0TW9udGgodGhpcy5fZGF0ZSwgdGhpcy5faXNVVEMpKTtcbiAgfVxuXG5cbiAgcXVhcnRlcigpOiBudW1iZXI7XG4gIHF1YXJ0ZXIodmFsOiBudW1iZXIpOiBLaHJvbm9zO1xuICBxdWFydGVyKHZhbD86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGdldFF1YXJ0ZXIodGhpcy5fZGF0ZSwgdGhpcy5faXNVVEMpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGUgPSBzZXRRdWFydGVyKHRoaXMuX2RhdGUsIHZhbCwgdGhpcy5faXNVVEMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgcXVhcnRlcnMoKTogbnVtYmVyO1xuICBxdWFydGVycyh2YWw6IG51bWJlcik6IEtocm9ub3M7XG4gIHF1YXJ0ZXJzKHZhbD86IG51bWJlcik6IEtocm9ub3MgfCBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnF1YXJ0ZXIodmFsKTtcbiAgfVxuXG4gIHN0YXJ0T2YocGVyaW9kPzogTW9tZW50VW5pdE9mVGltZSk6IEtocm9ub3Mge1xuICAgIGNvbnN0IF9wZXIgPSBtYXBVbml0T2ZUaW1lKHBlcmlvZCk7XG4gICAgdGhpcy5fZGF0ZSA9IHN0YXJ0T2YodGhpcy5fZGF0ZSwgX3BlciwgdGhpcy5faXNVVEMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxufVxuIl19