@angular/material 16.2.1 → 17.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (757) hide show
  1. package/_index.scss +19 -63
  2. package/autocomplete/index.d.ts +41 -72
  3. package/autocomplete/testing/index.d.ts +5 -23
  4. package/button/_fab-theme.scss +12 -0
  5. package/card/_card-theme.scss +86 -44
  6. package/checkbox/_checkbox-theme.scss +78 -43
  7. package/checkbox/index.d.ts +22 -42
  8. package/checkbox/testing/index.d.ts +6 -12
  9. package/core/index.d.ts +17 -28
  10. package/core/style/_validation.scss +43 -0
  11. package/core/theming/_inspection.scss +229 -0
  12. package/core/theming/_theming.scss +110 -10
  13. package/core/tokens/m2/mat/_form-field.scss +34 -1
  14. package/core/tokens/m2/mat/_slider.scss +43 -0
  15. package/core/tokens/m2/mdc/_filled-text-field.scss +1 -1
  16. package/core/tokens/m2/mdc/_outlined-text-field.scss +1 -1
  17. package/core/tokens/m2/mdc/_slider.scss +154 -0
  18. package/dialog/index.d.ts +44 -86
  19. package/dialog/testing/index.d.ts +6 -18
  20. package/esm2022/autocomplete/autocomplete-origin.mjs +9 -17
  21. package/esm2022/autocomplete/autocomplete-trigger.mjs +32 -41
  22. package/esm2022/autocomplete/autocomplete.mjs +59 -72
  23. package/esm2022/autocomplete/testing/autocomplete-harness.mjs +20 -33
  24. package/esm2022/button/fab.mjs +8 -8
  25. package/esm2022/card/card.mjs +2 -2
  26. package/esm2022/checkbox/checkbox.mjs +72 -79
  27. package/esm2022/checkbox/testing/checkbox-harness.mjs +41 -36
  28. package/esm2022/core/datetime/native-date-adapter.mjs +14 -11
  29. package/esm2022/core/option/optgroup.mjs +19 -26
  30. package/esm2022/core/option/option.mjs +25 -35
  31. package/esm2022/core/version.mjs +1 -1
  32. package/esm2022/dialog/dialog-container.mjs +50 -75
  33. package/esm2022/dialog/dialog-ref.mjs +1 -1
  34. package/esm2022/dialog/dialog.mjs +16 -46
  35. package/esm2022/dialog/public-api.mjs +2 -2
  36. package/esm2022/dialog/testing/dialog-harness.mjs +13 -16
  37. package/esm2022/dialog/testing/dialog-opener.mjs +17 -27
  38. package/esm2022/dialog/testing/index.mjs +2 -2
  39. package/esm2022/form-field/form-field.mjs +3 -3
  40. package/esm2022/form-field/testing/error-harness.mjs +10 -12
  41. package/esm2022/form-field/testing/form-field-harness.mjs +45 -48
  42. package/esm2022/list/action-list.mjs +2 -2
  43. package/esm2022/list/list.mjs +2 -2
  44. package/esm2022/list/nav-list.mjs +2 -2
  45. package/esm2022/list/selection-list.mjs +2 -2
  46. package/esm2022/menu/menu-content.mjs +9 -16
  47. package/esm2022/menu/menu-trigger.mjs +14 -25
  48. package/esm2022/menu/menu.mjs +15 -29
  49. package/esm2022/menu/public-api.mjs +3 -3
  50. package/esm2022/menu/testing/menu-harness.mjs +29 -43
  51. package/esm2022/paginator/paginator.mjs +24 -38
  52. package/esm2022/paginator/testing/paginator-harness.mjs +25 -27
  53. package/esm2022/progress-bar/progress-bar.mjs +2 -2
  54. package/esm2022/progress-spinner/progress-spinner.mjs +2 -2
  55. package/esm2022/radio/radio.mjs +58 -83
  56. package/esm2022/radio/testing/radio-harness.mjs +31 -38
  57. package/esm2022/select/select.mjs +194 -212
  58. package/esm2022/select/testing/select-harness.mjs +18 -23
  59. package/esm2022/slide-toggle/slide-toggle.mjs +43 -53
  60. package/esm2022/slide-toggle/testing/slide-toggle-harness.mjs +33 -40
  61. package/esm2022/slider/slider.mjs +2 -2
  62. package/esm2022/snack-bar/snack-bar-container.mjs +17 -32
  63. package/esm2022/snack-bar/snack-bar-ref.mjs +1 -1
  64. package/esm2022/snack-bar/snack-bar.mjs +11 -25
  65. package/esm2022/snack-bar/testing/snack-bar-harness.mjs +18 -31
  66. package/esm2022/table/table-data-source.mjs +15 -18
  67. package/esm2022/table/testing/cell-harness.mjs +4 -4
  68. package/esm2022/table/testing/row-harness.mjs +4 -4
  69. package/esm2022/table/testing/table-harness.mjs +22 -24
  70. package/esm2022/tabs/public-api.mjs +7 -8
  71. package/esm2022/tabs/tab-body.mjs +13 -29
  72. package/esm2022/tabs/tab-group.mjs +55 -79
  73. package/esm2022/tabs/tab-header.mjs +13 -34
  74. package/esm2022/tabs/tab-label-wrapper.mjs +6 -18
  75. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +119 -168
  76. package/esm2022/tabs/tab.mjs +25 -37
  77. package/esm2022/tooltip/testing/tooltip-harness.mjs +21 -23
  78. package/esm2022/tooltip/tooltip.mjs +68 -101
  79. package/fesm2022/autocomplete/testing.mjs +20 -33
  80. package/fesm2022/autocomplete/testing.mjs.map +1 -1
  81. package/fesm2022/autocomplete.mjs +97 -127
  82. package/fesm2022/autocomplete.mjs.map +1 -1
  83. package/fesm2022/button.mjs +8 -8
  84. package/fesm2022/button.mjs.map +1 -1
  85. package/fesm2022/card.mjs +2 -2
  86. package/fesm2022/card.mjs.map +1 -1
  87. package/fesm2022/checkbox/testing.mjs +41 -36
  88. package/fesm2022/checkbox/testing.mjs.map +1 -1
  89. package/fesm2022/checkbox.mjs +72 -79
  90. package/fesm2022/checkbox.mjs.map +1 -1
  91. package/fesm2022/core.mjs +49 -61
  92. package/fesm2022/core.mjs.map +1 -1
  93. package/fesm2022/dialog/testing.mjs +30 -43
  94. package/fesm2022/dialog/testing.mjs.map +1 -1
  95. package/fesm2022/dialog.mjs +65 -120
  96. package/fesm2022/dialog.mjs.map +1 -1
  97. package/fesm2022/form-field/testing.mjs +54 -59
  98. package/fesm2022/form-field/testing.mjs.map +1 -1
  99. package/fesm2022/form-field.mjs +2 -2
  100. package/fesm2022/form-field.mjs.map +1 -1
  101. package/fesm2022/list.mjs +8 -8
  102. package/fesm2022/list.mjs.map +1 -1
  103. package/fesm2022/menu/testing.mjs +30 -44
  104. package/fesm2022/menu/testing.mjs.map +1 -1
  105. package/fesm2022/menu.mjs +34 -66
  106. package/fesm2022/menu.mjs.map +1 -1
  107. package/fesm2022/paginator/testing.mjs +25 -27
  108. package/fesm2022/paginator/testing.mjs.map +1 -1
  109. package/fesm2022/paginator.mjs +24 -38
  110. package/fesm2022/paginator.mjs.map +1 -1
  111. package/fesm2022/progress-bar.mjs +2 -2
  112. package/fesm2022/progress-bar.mjs.map +1 -1
  113. package/fesm2022/progress-spinner.mjs +2 -2
  114. package/fesm2022/progress-spinner.mjs.map +1 -1
  115. package/fesm2022/radio/testing.mjs +31 -38
  116. package/fesm2022/radio/testing.mjs.map +1 -1
  117. package/fesm2022/radio.mjs +59 -84
  118. package/fesm2022/radio.mjs.map +1 -1
  119. package/fesm2022/select/testing.mjs +18 -23
  120. package/fesm2022/select/testing.mjs.map +1 -1
  121. package/fesm2022/select.mjs +196 -214
  122. package/fesm2022/select.mjs.map +1 -1
  123. package/fesm2022/slide-toggle/testing.mjs +33 -40
  124. package/fesm2022/slide-toggle/testing.mjs.map +1 -1
  125. package/fesm2022/slide-toggle.mjs +43 -53
  126. package/fesm2022/slide-toggle.mjs.map +1 -1
  127. package/fesm2022/slider.mjs +2 -2
  128. package/fesm2022/slider.mjs.map +1 -1
  129. package/fesm2022/snack-bar/testing.mjs +19 -32
  130. package/fesm2022/snack-bar/testing.mjs.map +1 -1
  131. package/fesm2022/snack-bar.mjs +26 -55
  132. package/fesm2022/snack-bar.mjs.map +1 -1
  133. package/fesm2022/table/testing.mjs +28 -30
  134. package/fesm2022/table/testing.mjs.map +1 -1
  135. package/fesm2022/table.mjs +15 -18
  136. package/fesm2022/table.mjs.map +1 -1
  137. package/fesm2022/tabs.mjs +234 -368
  138. package/fesm2022/tabs.mjs.map +1 -1
  139. package/fesm2022/tooltip/testing.mjs +21 -23
  140. package/fesm2022/tooltip/testing.mjs.map +1 -1
  141. package/fesm2022/tooltip.mjs +69 -102
  142. package/fesm2022/tooltip.mjs.map +1 -1
  143. package/form-field/_form-field-focus-overlay.scss +13 -18
  144. package/form-field/_form-field-native-select.scss +30 -67
  145. package/form-field/_form-field-subscript.scss +4 -8
  146. package/form-field/_form-field-theme.scss +15 -48
  147. package/form-field/_mdc-text-field-structure-overrides.scss +20 -0
  148. package/form-field/testing/index.d.ts +14 -44
  149. package/list/_list-theme.scss +9 -0
  150. package/menu/index.d.ts +22 -44
  151. package/menu/testing/index.d.ts +6 -23
  152. package/package.json +7 -286
  153. package/paginator/index.d.ts +6 -22
  154. package/paginator/testing/index.d.ts +9 -22
  155. package/prebuilt-themes/deeppurple-amber.css +1 -1
  156. package/prebuilt-themes/indigo-pink.css +1 -1
  157. package/prebuilt-themes/pink-bluegrey.css +1 -1
  158. package/prebuilt-themes/purple-green.css +1 -1
  159. package/progress-bar/_progress-bar-theme.scss +9 -0
  160. package/progress-spinner/_progress-spinner-theme.scss +11 -0
  161. package/radio/index.d.ts +22 -45
  162. package/radio/testing/index.d.ts +7 -23
  163. package/schematics/migration.json +4 -4
  164. package/schematics/ng-add/index.js +2 -2
  165. package/schematics/ng-add/index.mjs +2 -2
  166. package/schematics/ng-generate/mdc-migration/index_bundled.js +2 -2
  167. package/schematics/ng-generate/mdc-migration/index_bundled.js.map +2 -2
  168. package/schematics/ng-update/index_bundled.js +4 -4
  169. package/schematics/ng-update/index_bundled.js.map +1 -1
  170. package/select/index.d.ts +47 -68
  171. package/select/testing/index.d.ts +9 -22
  172. package/slide-toggle/index.d.ts +17 -27
  173. package/slide-toggle/testing/index.d.ts +6 -13
  174. package/slider/_slider-theme.scss +64 -64
  175. package/snack-bar/_snack-bar-theme.scss +8 -0
  176. package/snack-bar/index.d.ts +40 -62
  177. package/snack-bar/testing/index.d.ts +5 -20
  178. package/table/index.d.ts +2 -31
  179. package/table/testing/index.d.ts +17 -34
  180. package/tabs/index.d.ts +60 -144
  181. package/tooltip/_tooltip-theme.scss +12 -3
  182. package/tooltip/index.d.ts +26 -49
  183. package/tooltip/testing/index.d.ts +7 -17
  184. package/_theming.scss +0 -43
  185. package/_token-theming.scss +0 -2
  186. package/autocomplete/_autocomplete-theme.import.scss +0 -1
  187. package/badge/_badge-legacy-index.scss +0 -3
  188. package/badge/_badge-theme.import.scss +0 -11
  189. package/bottom-sheet/_bottom-sheet-legacy-index.scss +0 -2
  190. package/bottom-sheet/_bottom-sheet-theme.import.scss +0 -10
  191. package/button/_button-base.import.scss +0 -4
  192. package/button/_button-theme.import.scss +0 -13
  193. package/button-toggle/_button-toggle-legacy-index.scss +0 -2
  194. package/button-toggle/_button-toggle-theme.import.scss +0 -15
  195. package/button-toggle/_button-toggle-variables.import.scss +0 -1
  196. package/card/_card-theme.import.scss +0 -3
  197. package/checkbox/_checkbox-theme.import.scss +0 -10
  198. package/chips/_chips-theme.import.scss +0 -4
  199. package/core/_core-legacy-index.scss +0 -16
  200. package/core/_core.import.scss +0 -60
  201. package/core/color/_all-color.import.scss +0 -53
  202. package/core/color/_color-legacy-index.scss +0 -1
  203. package/core/density/private/_all-density.import.scss +0 -15
  204. package/core/density/private/_compatibility.import.scss +0 -4
  205. package/core/density/private/_density-legacy-index.scss +0 -5
  206. package/core/focus-indicators/_focus-indicators-legacy-index.scss +0 -5
  207. package/core/focus-indicators/_focus-indicators.import.scss +0 -23
  208. package/core/mdc-helpers/_mdc-helpers.import.scss +0 -9
  209. package/core/option/_optgroup-theme.import.scss +0 -4
  210. package/core/option/_option-legacy-index.scss +0 -5
  211. package/core/option/_option-theme.import.scss +0 -4
  212. package/core/ripple/_ripple-legacy-index.scss +0 -3
  213. package/core/ripple/_ripple.import.scss +0 -20
  214. package/core/selection/pseudo-checkbox/_pseudo-checkbox-legacy-index.scss +0 -2
  215. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.import.scss +0 -17
  216. package/core/style/_button-common.import.scss +0 -4
  217. package/core/style/_checkbox-common.import.scss +0 -11
  218. package/core/style/_elevation.import.scss +0 -17
  219. package/core/style/_form-common.import.scss +0 -16
  220. package/core/style/_layout-common.import.scss +0 -1
  221. package/core/style/_list-common.import.scss +0 -2
  222. package/core/style/_menu-common.import.scss +0 -18
  223. package/core/style/_private.import.scss +0 -15
  224. package/core/style/_style-legacy-index.scss +0 -24
  225. package/core/style/_variables.import.scss +0 -8
  226. package/core/style/_vendor-prefixes.import.scss +0 -1
  227. package/core/theming/_all-theme.import.scss +0 -86
  228. package/core/theming/_palette.import.scss +0 -12
  229. package/core/theming/_theming-legacy-index.scss +0 -22
  230. package/core/theming/_theming.import.scss +0 -24
  231. package/core/typography/_all-typography.import.scss +0 -76
  232. package/core/typography/_typography-legacy-index.scss +0 -18
  233. package/core/typography/_typography-utils.import.scss +0 -9
  234. package/core/typography/_typography.import.scss +0 -14
  235. package/datepicker/_datepicker-legacy-index.scss +0 -9
  236. package/datepicker/_datepicker-theme.import.scss +0 -17
  237. package/dialog/_dialog-legacy-padding.import.scss +0 -1
  238. package/dialog/_dialog-theme.import.scss +0 -1
  239. package/dialog/_mdc-dialog-structure-overrides.import.scss +0 -1
  240. package/divider/_divider-legacy-index.scss +0 -3
  241. package/divider/_divider-offset.import.scss +0 -1
  242. package/divider/_divider-theme.import.scss +0 -6
  243. package/esm2022/legacy-autocomplete/autocomplete-module.mjs +0 -51
  244. package/esm2022/legacy-autocomplete/autocomplete-origin.mjs +0 -28
  245. package/esm2022/legacy-autocomplete/autocomplete-trigger.mjs +0 -60
  246. package/esm2022/legacy-autocomplete/autocomplete.mjs +0 -40
  247. package/esm2022/legacy-autocomplete/index.mjs +0 -9
  248. package/esm2022/legacy-autocomplete/legacy-autocomplete_public_index.mjs +0 -5
  249. package/esm2022/legacy-autocomplete/public-api.mjs +0 -48
  250. package/esm2022/legacy-autocomplete/testing/autocomplete-harness-filters.mjs +0 -9
  251. package/esm2022/legacy-autocomplete/testing/autocomplete-harness.mjs +0 -39
  252. package/esm2022/legacy-autocomplete/testing/index.mjs +0 -9
  253. package/esm2022/legacy-autocomplete/testing/public-api.mjs +0 -9
  254. package/esm2022/legacy-button/button-module.mjs +0 -29
  255. package/esm2022/legacy-button/button.mjs +0 -177
  256. package/esm2022/legacy-button/index.mjs +0 -9
  257. package/esm2022/legacy-button/legacy-button_public_index.mjs +0 -5
  258. package/esm2022/legacy-button/public-api.mjs +0 -10
  259. package/esm2022/legacy-button/testing/button-harness.mjs +0 -82
  260. package/esm2022/legacy-button/testing/index.mjs +0 -9
  261. package/esm2022/legacy-button/testing/public-api.mjs +0 -9
  262. package/esm2022/legacy-card/card-module.mjs +0 -87
  263. package/esm2022/legacy-card/card.mjs +0 -276
  264. package/esm2022/legacy-card/index.mjs +0 -9
  265. package/esm2022/legacy-card/legacy-card_public_index.mjs +0 -5
  266. package/esm2022/legacy-card/public-api.mjs +0 -10
  267. package/esm2022/legacy-card/testing/card-harness-filters.mjs +0 -9
  268. package/esm2022/legacy-card/testing/card-harness.mjs +0 -47
  269. package/esm2022/legacy-card/testing/index.mjs +0 -9
  270. package/esm2022/legacy-card/testing/public-api.mjs +0 -9
  271. package/esm2022/legacy-checkbox/checkbox-module.mjs +0 -31
  272. package/esm2022/legacy-checkbox/checkbox.mjs +0 -137
  273. package/esm2022/legacy-checkbox/index.mjs +0 -9
  274. package/esm2022/legacy-checkbox/legacy-checkbox_public_index.mjs +0 -5
  275. package/esm2022/legacy-checkbox/public-api.mjs +0 -36
  276. package/esm2022/legacy-checkbox/testing/checkbox-harness.mjs +0 -46
  277. package/esm2022/legacy-checkbox/testing/index.mjs +0 -9
  278. package/esm2022/legacy-checkbox/testing/public-api.mjs +0 -9
  279. package/esm2022/legacy-chips/chip-default-options.mjs +0 -15
  280. package/esm2022/legacy-chips/chip-input.mjs +0 -198
  281. package/esm2022/legacy-chips/chip-list.mjs +0 -718
  282. package/esm2022/legacy-chips/chip-text-control.mjs +0 -9
  283. package/esm2022/legacy-chips/chip.mjs +0 -445
  284. package/esm2022/legacy-chips/chips-module.mjs +0 -68
  285. package/esm2022/legacy-chips/index.mjs +0 -9
  286. package/esm2022/legacy-chips/legacy-chips_public_index.mjs +0 -5
  287. package/esm2022/legacy-chips/public-api.mjs +0 -13
  288. package/esm2022/legacy-chips/testing/chip-avatar-harness.mjs +0 -26
  289. package/esm2022/legacy-chips/testing/chip-harness-filters.mjs +0 -2
  290. package/esm2022/legacy-chips/testing/chip-harness.mjs +0 -95
  291. package/esm2022/legacy-chips/testing/chip-input-harness.mjs +0 -86
  292. package/esm2022/legacy-chips/testing/chip-list-harness.mjs +0 -90
  293. package/esm2022/legacy-chips/testing/chip-listbox-harness.mjs +0 -48
  294. package/esm2022/legacy-chips/testing/chip-option-harness.mjs +0 -49
  295. package/esm2022/legacy-chips/testing/chip-remove-harness.mjs +0 -30
  296. package/esm2022/legacy-chips/testing/index.mjs +0 -9
  297. package/esm2022/legacy-chips/testing/public-api.mjs +0 -14
  298. package/esm2022/legacy-core/index.mjs +0 -9
  299. package/esm2022/legacy-core/legacy-core_public_index.mjs +0 -5
  300. package/esm2022/legacy-core/option/index.mjs +0 -69
  301. package/esm2022/legacy-core/option/optgroup.mjs +0 -30
  302. package/esm2022/legacy-core/option/option.mjs +0 -54
  303. package/esm2022/legacy-core/public-api.mjs +0 -170
  304. package/esm2022/legacy-core/testing/index.mjs +0 -9
  305. package/esm2022/legacy-core/testing/optgroup-harness-filters.mjs +0 -9
  306. package/esm2022/legacy-core/testing/optgroup-harness.mjs +0 -47
  307. package/esm2022/legacy-core/testing/option-harness-filters.mjs +0 -9
  308. package/esm2022/legacy-core/testing/option-harness.mjs +0 -58
  309. package/esm2022/legacy-core/testing/public-api.mjs +0 -12
  310. package/esm2022/legacy-dialog/dialog-animations.mjs +0 -17
  311. package/esm2022/legacy-dialog/dialog-config.mjs +0 -22
  312. package/esm2022/legacy-dialog/dialog-container.mjs +0 -85
  313. package/esm2022/legacy-dialog/dialog-content-directives.mjs +0 -209
  314. package/esm2022/legacy-dialog/dialog-module.mjs +0 -57
  315. package/esm2022/legacy-dialog/dialog-ref.mjs +0 -16
  316. package/esm2022/legacy-dialog/dialog.mjs +0 -106
  317. package/esm2022/legacy-dialog/index.mjs +0 -9
  318. package/esm2022/legacy-dialog/legacy-dialog_public_index.mjs +0 -5
  319. package/esm2022/legacy-dialog/public-api.mjs +0 -40
  320. package/esm2022/legacy-dialog/testing/dialog-harness.mjs +0 -36
  321. package/esm2022/legacy-dialog/testing/dialog-opener.mjs +0 -56
  322. package/esm2022/legacy-dialog/testing/index.mjs +0 -9
  323. package/esm2022/legacy-dialog/testing/public-api.mjs +0 -10
  324. package/esm2022/legacy-form-field/error.mjs +0 -46
  325. package/esm2022/legacy-form-field/form-field-module.mjs +0 -67
  326. package/esm2022/legacy-form-field/form-field.mjs +0 -530
  327. package/esm2022/legacy-form-field/hint.mjs +0 -56
  328. package/esm2022/legacy-form-field/index.mjs +0 -9
  329. package/esm2022/legacy-form-field/label.mjs +0 -25
  330. package/esm2022/legacy-form-field/legacy-form-field_public_index.mjs +0 -5
  331. package/esm2022/legacy-form-field/placeholder.mjs +0 -26
  332. package/esm2022/legacy-form-field/prefix.mjs +0 -27
  333. package/esm2022/legacy-form-field/public-api.mjs +0 -62
  334. package/esm2022/legacy-form-field/suffix.mjs +0 -27
  335. package/esm2022/legacy-form-field/testing/error-harness.mjs +0 -26
  336. package/esm2022/legacy-form-field/testing/form-field-harness.mjs +0 -73
  337. package/esm2022/legacy-form-field/testing/index.mjs +0 -9
  338. package/esm2022/legacy-form-field/testing/public-api.mjs +0 -19
  339. package/esm2022/legacy-input/index.mjs +0 -9
  340. package/esm2022/legacy-input/input-module.mjs +0 -45
  341. package/esm2022/legacy-input/input.mjs +0 -62
  342. package/esm2022/legacy-input/legacy-input_public_index.mjs +0 -5
  343. package/esm2022/legacy-input/public-api.mjs +0 -21
  344. package/esm2022/legacy-input/testing/index.mjs +0 -9
  345. package/esm2022/legacy-input/testing/public-api.mjs +0 -24
  346. package/esm2022/legacy-list/index.mjs +0 -9
  347. package/esm2022/legacy-list/legacy-list_public_index.mjs +0 -5
  348. package/esm2022/legacy-list/list-module.mjs +0 -75
  349. package/esm2022/legacy-list/list.mjs +0 -223
  350. package/esm2022/legacy-list/public-api.mjs +0 -22
  351. package/esm2022/legacy-list/selection-list.mjs +0 -619
  352. package/esm2022/legacy-list/testing/action-list-harness.mjs +0 -67
  353. package/esm2022/legacy-list/testing/index.mjs +0 -9
  354. package/esm2022/legacy-list/testing/list-harness-base.mjs +0 -97
  355. package/esm2022/legacy-list/testing/list-harness-filters.mjs +0 -9
  356. package/esm2022/legacy-list/testing/list-harness.mjs +0 -51
  357. package/esm2022/legacy-list/testing/list-item-harness-base.mjs +0 -74
  358. package/esm2022/legacy-list/testing/nav-list-harness.mjs +0 -71
  359. package/esm2022/legacy-list/testing/public-api.mjs +0 -12
  360. package/esm2022/legacy-list/testing/selection-list-harness.mjs +0 -129
  361. package/esm2022/legacy-menu/index.mjs +0 -9
  362. package/esm2022/legacy-menu/legacy-menu_public_index.mjs +0 -5
  363. package/esm2022/legacy-menu/menu-content.mjs +0 -27
  364. package/esm2022/legacy-menu/menu-item.mjs +0 -41
  365. package/esm2022/legacy-menu/menu-module.mjs +0 -50
  366. package/esm2022/legacy-menu/menu-trigger.mjs +0 -31
  367. package/esm2022/legacy-menu/menu.mjs +0 -40
  368. package/esm2022/legacy-menu/public-api.mjs +0 -49
  369. package/esm2022/legacy-menu/testing/index.mjs +0 -9
  370. package/esm2022/legacy-menu/testing/menu-harness.mjs +0 -56
  371. package/esm2022/legacy-menu/testing/public-api.mjs +0 -9
  372. package/esm2022/legacy-paginator/index.mjs +0 -9
  373. package/esm2022/legacy-paginator/legacy-paginator_public_index.mjs +0 -5
  374. package/esm2022/legacy-paginator/paginator-module.mjs +0 -49
  375. package/esm2022/legacy-paginator/paginator.mjs +0 -53
  376. package/esm2022/legacy-paginator/public-api.mjs +0 -36
  377. package/esm2022/legacy-paginator/testing/index.mjs +0 -9
  378. package/esm2022/legacy-paginator/testing/paginator-harness.mjs +0 -41
  379. package/esm2022/legacy-paginator/testing/public-api.mjs +0 -15
  380. package/esm2022/legacy-progress-bar/index.mjs +0 -9
  381. package/esm2022/legacy-progress-bar/legacy-progress-bar_public_index.mjs +0 -5
  382. package/esm2022/legacy-progress-bar/progress-bar-module.mjs +0 -30
  383. package/esm2022/legacy-progress-bar/progress-bar.mjs +0 -190
  384. package/esm2022/legacy-progress-bar/public-api.mjs +0 -11
  385. package/esm2022/legacy-progress-bar/testing/index.mjs +0 -9
  386. package/esm2022/legacy-progress-bar/testing/progress-bar-harness.mjs +0 -38
  387. package/esm2022/legacy-progress-bar/testing/public-api.mjs +0 -9
  388. package/esm2022/legacy-progress-spinner/index.mjs +0 -9
  389. package/esm2022/legacy-progress-spinner/legacy-progress-spinner_public_index.mjs +0 -5
  390. package/esm2022/legacy-progress-spinner/progress-spinner-module.mjs +0 -30
  391. package/esm2022/legacy-progress-spinner/progress-spinner.mjs +0 -286
  392. package/esm2022/legacy-progress-spinner/public-api.mjs +0 -19
  393. package/esm2022/legacy-progress-spinner/testing/index.mjs +0 -9
  394. package/esm2022/legacy-progress-spinner/testing/progress-spinner-harness.mjs +0 -39
  395. package/esm2022/legacy-progress-spinner/testing/public-api.mjs +0 -9
  396. package/esm2022/legacy-radio/index.mjs +0 -9
  397. package/esm2022/legacy-radio/legacy-radio_public_index.mjs +0 -5
  398. package/esm2022/legacy-radio/public-api.mjs +0 -31
  399. package/esm2022/legacy-radio/radio-module.mjs +0 -29
  400. package/esm2022/legacy-radio/radio.mjs +0 -112
  401. package/esm2022/legacy-radio/testing/index.mjs +0 -9
  402. package/esm2022/legacy-radio/testing/public-api.mjs +0 -9
  403. package/esm2022/legacy-radio/testing/radio-harness.mjs +0 -58
  404. package/esm2022/legacy-select/index.mjs +0 -9
  405. package/esm2022/legacy-select/legacy-select_public_index.mjs +0 -5
  406. package/esm2022/legacy-select/public-api.mjs +0 -37
  407. package/esm2022/legacy-select/select-animations.mjs +0 -56
  408. package/esm2022/legacy-select/select-errors.mjs +0 -39
  409. package/esm2022/legacy-select/select-module.mjs +0 -51
  410. package/esm2022/legacy-select/select.mjs +0 -447
  411. package/esm2022/legacy-select/testing/index.mjs +0 -9
  412. package/esm2022/legacy-select/testing/public-api.mjs +0 -9
  413. package/esm2022/legacy-select/testing/select-harness-filters.mjs +0 -9
  414. package/esm2022/legacy-select/testing/select-harness.mjs +0 -36
  415. package/esm2022/legacy-slide-toggle/index.mjs +0 -9
  416. package/esm2022/legacy-slide-toggle/legacy-slide-toggle_public_index.mjs +0 -5
  417. package/esm2022/legacy-slide-toggle/public-api.mjs +0 -32
  418. package/esm2022/legacy-slide-toggle/slide-toggle-config.mjs +0 -18
  419. package/esm2022/legacy-slide-toggle/slide-toggle-module.mjs +0 -42
  420. package/esm2022/legacy-slide-toggle/slide-toggle.mjs +0 -137
  421. package/esm2022/legacy-slide-toggle/testing/index.mjs +0 -9
  422. package/esm2022/legacy-slide-toggle/testing/public-api.mjs +0 -15
  423. package/esm2022/legacy-slide-toggle/testing/slide-toggle-harness.mjs +0 -50
  424. package/esm2022/legacy-slider/index.mjs +0 -9
  425. package/esm2022/legacy-slider/legacy-slider_public_index.mjs +0 -5
  426. package/esm2022/legacy-slider/public-api.mjs +0 -10
  427. package/esm2022/legacy-slider/slider-module.mjs +0 -30
  428. package/esm2022/legacy-slider/slider.mjs +0 -847
  429. package/esm2022/legacy-slider/testing/index.mjs +0 -9
  430. package/esm2022/legacy-slider/testing/public-api.mjs +0 -9
  431. package/esm2022/legacy-slider/testing/slider-harness-filters.mjs +0 -2
  432. package/esm2022/legacy-slider/testing/slider-harness.mjs +0 -122
  433. package/esm2022/legacy-snack-bar/index.mjs +0 -9
  434. package/esm2022/legacy-snack-bar/legacy-snack-bar_public_index.mjs +0 -5
  435. package/esm2022/legacy-snack-bar/public-api.mjs +0 -53
  436. package/esm2022/legacy-snack-bar/simple-snack-bar.mjs +0 -45
  437. package/esm2022/legacy-snack-bar/snack-bar-container.mjs +0 -39
  438. package/esm2022/legacy-snack-bar/snack-bar-module.mjs +0 -34
  439. package/esm2022/legacy-snack-bar/snack-bar.mjs +0 -47
  440. package/esm2022/legacy-snack-bar/testing/index.mjs +0 -9
  441. package/esm2022/legacy-snack-bar/testing/public-api.mjs +0 -9
  442. package/esm2022/legacy-snack-bar/testing/snack-bar-harness.mjs +0 -46
  443. package/esm2022/legacy-table/cell.mjs +0 -163
  444. package/esm2022/legacy-table/index.mjs +0 -9
  445. package/esm2022/legacy-table/legacy-table_public_index.mjs +0 -5
  446. package/esm2022/legacy-table/public-api.mjs +0 -20
  447. package/esm2022/legacy-table/row.mjs +0 -165
  448. package/esm2022/legacy-table/table-data-source.mjs +0 -27
  449. package/esm2022/legacy-table/table-module.mjs +0 -98
  450. package/esm2022/legacy-table/table.mjs +0 -72
  451. package/esm2022/legacy-table/testing/cell-harness.mjs +0 -62
  452. package/esm2022/legacy-table/testing/index.mjs +0 -9
  453. package/esm2022/legacy-table/testing/public-api.mjs +0 -27
  454. package/esm2022/legacy-table/testing/row-harness.mjs +0 -76
  455. package/esm2022/legacy-table/testing/table-harness.mjs +0 -34
  456. package/esm2022/legacy-table/text-column.mjs +0 -65
  457. package/esm2022/legacy-tabs/index.mjs +0 -9
  458. package/esm2022/legacy-tabs/ink-bar.mjs +0 -73
  459. package/esm2022/legacy-tabs/legacy-tabs_public_index.mjs +0 -5
  460. package/esm2022/legacy-tabs/public-api.mjs +0 -94
  461. package/esm2022/legacy-tabs/tab-body.mjs +0 -64
  462. package/esm2022/legacy-tabs/tab-content.mjs +0 -27
  463. package/esm2022/legacy-tabs/tab-group.mjs +0 -72
  464. package/esm2022/legacy-tabs/tab-header.mjs +0 -75
  465. package/esm2022/legacy-tabs/tab-label-wrapper.mjs +0 -30
  466. package/esm2022/legacy-tabs/tab-label.mjs +0 -27
  467. package/esm2022/legacy-tabs/tab-nav-bar/index.mjs +0 -9
  468. package/esm2022/legacy-tabs/tab-nav-bar/tab-nav-bar.mjs +0 -164
  469. package/esm2022/legacy-tabs/tab.mjs +0 -46
  470. package/esm2022/legacy-tabs/tabs-module.mjs +0 -99
  471. package/esm2022/legacy-tabs/testing/index.mjs +0 -9
  472. package/esm2022/legacy-tabs/testing/public-api.mjs +0 -12
  473. package/esm2022/legacy-tabs/testing/tab-group-harness.mjs +0 -61
  474. package/esm2022/legacy-tabs/testing/tab-harness-filters.mjs +0 -2
  475. package/esm2022/legacy-tabs/testing/tab-harness.mjs +0 -71
  476. package/esm2022/legacy-tabs/testing/tab-link-harness.mjs +0 -45
  477. package/esm2022/legacy-tabs/testing/tab-nav-bar-harness.mjs +0 -70
  478. package/esm2022/legacy-tabs/testing/tab-nav-panel-harness.mjs +0 -31
  479. package/esm2022/legacy-tooltip/index.mjs +0 -9
  480. package/esm2022/legacy-tooltip/legacy-tooltip_public_index.mjs +0 -5
  481. package/esm2022/legacy-tooltip/public-api.mjs +0 -47
  482. package/esm2022/legacy-tooltip/testing/index.mjs +0 -9
  483. package/esm2022/legacy-tooltip/testing/public-api.mjs +0 -9
  484. package/esm2022/legacy-tooltip/testing/tooltip-harness.mjs +0 -35
  485. package/esm2022/legacy-tooltip/tooltip-animations.mjs +0 -28
  486. package/esm2022/legacy-tooltip/tooltip-module.mjs +0 -35
  487. package/esm2022/legacy-tooltip/tooltip.mjs +0 -108
  488. package/expansion/_expansion-legacy-index.scss +0 -2
  489. package/expansion/_expansion-theme.import.scss +0 -12
  490. package/expansion/_expansion-variables.import.scss +0 -1
  491. package/fesm2022/legacy-autocomplete/testing.mjs +0 -35
  492. package/fesm2022/legacy-autocomplete/testing.mjs.map +0 -1
  493. package/fesm2022/legacy-autocomplete.mjs +0 -146
  494. package/fesm2022/legacy-autocomplete.mjs.map +0 -1
  495. package/fesm2022/legacy-button/testing.mjs +0 -78
  496. package/fesm2022/legacy-button/testing.mjs.map +0 -1
  497. package/fesm2022/legacy-button.mjs +0 -194
  498. package/fesm2022/legacy-button.mjs.map +0 -1
  499. package/fesm2022/legacy-card/testing.mjs +0 -43
  500. package/fesm2022/legacy-card/testing.mjs.map +0 -1
  501. package/fesm2022/legacy-card.mjs +0 -353
  502. package/fesm2022/legacy-card.mjs.map +0 -1
  503. package/fesm2022/legacy-checkbox/testing.mjs +0 -42
  504. package/fesm2022/legacy-checkbox/testing.mjs.map +0 -1
  505. package/fesm2022/legacy-checkbox.mjs +0 -157
  506. package/fesm2022/legacy-checkbox.mjs.map +0 -1
  507. package/fesm2022/legacy-chips/testing.mjs +0 -365
  508. package/fesm2022/legacy-chips/testing.mjs.map +0 -1
  509. package/fesm2022/legacy-chips.mjs +0 -1399
  510. package/fesm2022/legacy-chips.mjs.map +0 -1
  511. package/fesm2022/legacy-core/testing.mjs +0 -92
  512. package/fesm2022/legacy-core/testing.mjs.map +0 -1
  513. package/fesm2022/legacy-core.mjs +0 -92
  514. package/fesm2022/legacy-core.mjs.map +0 -1
  515. package/fesm2022/legacy-dialog/testing.mjs +0 -80
  516. package/fesm2022/legacy-dialog/testing.mjs.map +0 -1
  517. package/fesm2022/legacy-dialog.mjs +0 -449
  518. package/fesm2022/legacy-dialog.mjs.map +0 -1
  519. package/fesm2022/legacy-form-field/testing.mjs +0 -87
  520. package/fesm2022/legacy-form-field/testing.mjs.map +0 -1
  521. package/fesm2022/legacy-form-field.mjs +0 -726
  522. package/fesm2022/legacy-form-field.mjs.map +0 -1
  523. package/fesm2022/legacy-input/testing.mjs +0 -2
  524. package/fesm2022/legacy-input/testing.mjs.map +0 -1
  525. package/fesm2022/legacy-input.mjs +0 -97
  526. package/fesm2022/legacy-input.mjs.map +0 -1
  527. package/fesm2022/legacy-list/testing.mjs +0 -436
  528. package/fesm2022/legacy-list/testing.mjs.map +0 -1
  529. package/fesm2022/legacy-list.mjs +0 -891
  530. package/fesm2022/legacy-list.mjs.map +0 -1
  531. package/fesm2022/legacy-menu/testing.mjs +0 -52
  532. package/fesm2022/legacy-menu/testing.mjs.map +0 -1
  533. package/fesm2022/legacy-menu.mjs +0 -145
  534. package/fesm2022/legacy-menu.mjs.map +0 -1
  535. package/fesm2022/legacy-paginator/testing.mjs +0 -38
  536. package/fesm2022/legacy-paginator/testing.mjs.map +0 -1
  537. package/fesm2022/legacy-paginator.mjs +0 -92
  538. package/fesm2022/legacy-paginator.mjs.map +0 -1
  539. package/fesm2022/legacy-progress-bar/testing.mjs +0 -34
  540. package/fesm2022/legacy-progress-bar/testing.mjs.map +0 -1
  541. package/fesm2022/legacy-progress-bar.mjs +0 -210
  542. package/fesm2022/legacy-progress-bar.mjs.map +0 -1
  543. package/fesm2022/legacy-progress-spinner/testing.mjs +0 -35
  544. package/fesm2022/legacy-progress-spinner/testing.mjs.map +0 -1
  545. package/fesm2022/legacy-progress-spinner.mjs +0 -312
  546. package/fesm2022/legacy-progress-spinner.mjs.map +0 -1
  547. package/fesm2022/legacy-radio/testing.mjs +0 -54
  548. package/fesm2022/legacy-radio/testing.mjs.map +0 -1
  549. package/fesm2022/legacy-radio.mjs +0 -130
  550. package/fesm2022/legacy-radio.mjs.map +0 -1
  551. package/fesm2022/legacy-select/testing.mjs +0 -32
  552. package/fesm2022/legacy-select/testing.mjs.map +0 -1
  553. package/fesm2022/legacy-select.mjs +0 -541
  554. package/fesm2022/legacy-select.mjs.map +0 -1
  555. package/fesm2022/legacy-slide-toggle/testing.mjs +0 -47
  556. package/fesm2022/legacy-slide-toggle/testing.mjs.map +0 -1
  557. package/fesm2022/legacy-slide-toggle.mjs +0 -177
  558. package/fesm2022/legacy-slide-toggle.mjs.map +0 -1
  559. package/fesm2022/legacy-slider/testing.mjs +0 -118
  560. package/fesm2022/legacy-slider/testing.mjs.map +0 -1
  561. package/fesm2022/legacy-slider.mjs +0 -863
  562. package/fesm2022/legacy-slider.mjs.map +0 -1
  563. package/fesm2022/legacy-snack-bar/testing.mjs +0 -42
  564. package/fesm2022/legacy-snack-bar/testing.mjs.map +0 -1
  565. package/fesm2022/legacy-snack-bar.mjs +0 -128
  566. package/fesm2022/legacy-snack-bar.mjs.map +0 -1
  567. package/fesm2022/legacy-table/testing.mjs +0 -150
  568. package/fesm2022/legacy-table/testing.mjs.map +0 -1
  569. package/fesm2022/legacy-table.mjs +0 -538
  570. package/fesm2022/legacy-table.mjs.map +0 -1
  571. package/fesm2022/legacy-tabs/testing.mjs +0 -239
  572. package/fesm2022/legacy-tabs/testing.mjs.map +0 -1
  573. package/fesm2022/legacy-tabs.mjs +0 -549
  574. package/fesm2022/legacy-tabs.mjs.map +0 -1
  575. package/fesm2022/legacy-tooltip/testing.mjs +0 -31
  576. package/fesm2022/legacy-tooltip/testing.mjs.map +0 -1
  577. package/fesm2022/legacy-tooltip.mjs +0 -148
  578. package/fesm2022/legacy-tooltip.mjs.map +0 -1
  579. package/form-field/_form-field-theme.import.scss +0 -29
  580. package/form-field/_mdc-text-field-theme-variable-refresh.scss +0 -88
  581. package/grid-list/_grid-list-legacy-index.scss +0 -2
  582. package/grid-list/_grid-list-theme.import.scss +0 -10
  583. package/icon/_icon-legacy-index.scss +0 -2
  584. package/icon/_icon-theme.import.scss +0 -5
  585. package/input/_input-theme.import.scss +0 -1
  586. package/legacy-autocomplete/_autocomplete-legacy-index.scss +0 -2
  587. package/legacy-autocomplete/_autocomplete-theme.import.scss +0 -7
  588. package/legacy-autocomplete/_autocomplete-theme.scss +0 -57
  589. package/legacy-autocomplete/index.d.ts +0 -115
  590. package/legacy-autocomplete/testing/index.d.ts +0 -41
  591. package/legacy-button/_button-base.import.scss +0 -21
  592. package/legacy-button/_button-base.scss +0 -114
  593. package/legacy-button/_button-legacy-index.scss +0 -22
  594. package/legacy-button/_button-theme.import.scss +0 -11
  595. package/legacy-button/_button-theme.scss +0 -223
  596. package/legacy-button/index.d.ts +0 -87
  597. package/legacy-button/testing/index.d.ts +0 -49
  598. package/legacy-card/_card-legacy-index.scss +0 -2
  599. package/legacy-card/_card-theme.import.scss +0 -10
  600. package/legacy-card/_card-theme.scss +0 -78
  601. package/legacy-card/index.d.ts +0 -201
  602. package/legacy-card/testing/index.d.ts +0 -56
  603. package/legacy-checkbox/_checkbox-legacy-index.scss +0 -2
  604. package/legacy-checkbox/_checkbox-theme.import.scss +0 -7
  605. package/legacy-checkbox/_checkbox-theme.scss +0 -138
  606. package/legacy-checkbox/index.d.ts +0 -116
  607. package/legacy-checkbox/testing/index.d.ts +0 -30
  608. package/legacy-chips/_chips-legacy-index.scss +0 -7
  609. package/legacy-chips/_chips-theme.import.scss +0 -14
  610. package/legacy-chips/_chips-theme.scss +0 -133
  611. package/legacy-chips/index.d.ts +0 -705
  612. package/legacy-chips/testing/index.d.ts +0 -316
  613. package/legacy-core/_core-theme.scss +0 -65
  614. package/legacy-core/_core.import.scss +0 -5
  615. package/legacy-core/_core.scss +0 -18
  616. package/legacy-core/color/_all-color.import.scss +0 -4
  617. package/legacy-core/color/_all-color.scss +0 -28
  618. package/legacy-core/density/private/_all-density.import.scss +0 -3
  619. package/legacy-core/density/private/_all-density.scss +0 -46
  620. package/legacy-core/density/private/_compatibility.import.scss +0 -4
  621. package/legacy-core/density/private/_compatibility.scss +0 -74
  622. package/legacy-core/index.d.ts +0 -218
  623. package/legacy-core/option/_optgroup-theme.import.scss +0 -27
  624. package/legacy-core/option/_optgroup-theme.scss +0 -52
  625. package/legacy-core/option/_option-legacy-index.scss +0 -5
  626. package/legacy-core/option/_option-theme.import.scss +0 -27
  627. package/legacy-core/option/_option-theme.scss +0 -86
  628. package/legacy-core/testing/index.d.ts +0 -80
  629. package/legacy-core/theming/_all-theme.import.scss +0 -3
  630. package/legacy-core/theming/_all-theme.scss +0 -89
  631. package/legacy-core/typography/_all-typography.import.scss +0 -4
  632. package/legacy-core/typography/_all-typography.scss +0 -105
  633. package/legacy-dialog/_dialog-legacy-index.scss +0 -2
  634. package/legacy-dialog/_dialog-theme.import.scss +0 -10
  635. package/legacy-dialog/_dialog-theme.scss +0 -53
  636. package/legacy-dialog/index.d.ts +0 -271
  637. package/legacy-dialog/testing/index.d.ts +0 -63
  638. package/legacy-form-field/_form-field-fill-theme.import.scss +0 -13
  639. package/legacy-form-field/_form-field-fill-theme.scss +0 -136
  640. package/legacy-form-field/_form-field-legacy-index.scss +0 -29
  641. package/legacy-form-field/_form-field-legacy-theme.import.scss +0 -14
  642. package/legacy-form-field/_form-field-legacy-theme.scss +0 -204
  643. package/legacy-form-field/_form-field-outline-theme.import.scss +0 -13
  644. package/legacy-form-field/_form-field-outline-theme.scss +0 -167
  645. package/legacy-form-field/_form-field-standard-theme.import.scss +0 -11
  646. package/legacy-form-field/_form-field-standard-theme.scss +0 -55
  647. package/legacy-form-field/_form-field-theme.import.scss +0 -29
  648. package/legacy-form-field/_form-field-theme.scss +0 -278
  649. package/legacy-form-field/index.d.ts +0 -370
  650. package/legacy-form-field/testing/index.d.ts +0 -76
  651. package/legacy-input/_input-legacy-index.scss +0 -2
  652. package/legacy-input/_input-theme.import.scss +0 -11
  653. package/legacy-input/_input-theme.scss +0 -115
  654. package/legacy-input/index.d.ts +0 -41
  655. package/legacy-input/testing/index.d.ts +0 -20
  656. package/legacy-list/_list-legacy-index.scss +0 -2
  657. package/legacy-list/_list-theme.import.scss +0 -10
  658. package/legacy-list/_list-theme.scss +0 -124
  659. package/legacy-list/index.d.ts +0 -396
  660. package/legacy-list/testing/index.d.ts +0 -419
  661. package/legacy-menu/_menu-legacy-index.scss +0 -2
  662. package/legacy-menu/_menu-theme.import.scss +0 -10
  663. package/legacy-menu/_menu-theme.scss +0 -84
  664. package/legacy-menu/index.d.ts +0 -127
  665. package/legacy-menu/testing/index.d.ts +0 -47
  666. package/legacy-paginator/_paginator-legacy-index.scss +0 -2
  667. package/legacy-paginator/_paginator-theme.import.scss +0 -11
  668. package/legacy-paginator/_paginator-theme.scss +0 -92
  669. package/legacy-paginator/_paginator-variables.import.scss +0 -1
  670. package/legacy-paginator/_paginator-variables.scss +0 -13
  671. package/legacy-paginator/index.d.ts +0 -87
  672. package/legacy-paginator/testing/index.d.ts +0 -36
  673. package/legacy-prebuilt-themes/legacy-deeppurple-amber.css +0 -1
  674. package/legacy-prebuilt-themes/legacy-indigo-pink.css +0 -1
  675. package/legacy-prebuilt-themes/legacy-pink-bluegrey.css +0 -1
  676. package/legacy-prebuilt-themes/legacy-purple-green.css +0 -1
  677. package/legacy-progress-bar/_progress-bar-legacy-index.scss +0 -2
  678. package/legacy-progress-bar/_progress-bar-theme.import.scss +0 -6
  679. package/legacy-progress-bar/_progress-bar-theme.scss +0 -93
  680. package/legacy-progress-bar/index.d.ts +0 -131
  681. package/legacy-progress-bar/testing/index.d.ts +0 -28
  682. package/legacy-progress-spinner/_progress-spinner-legacy-index.scss +0 -3
  683. package/legacy-progress-spinner/_progress-spinner-theme.import.scss +0 -7
  684. package/legacy-progress-spinner/_progress-spinner-theme.scss +0 -52
  685. package/legacy-progress-spinner/index.d.ts +0 -129
  686. package/legacy-progress-spinner/testing/index.d.ts +0 -29
  687. package/legacy-radio/_radio-legacy-index.scss +0 -2
  688. package/legacy-radio/_radio-theme.import.scss +0 -8
  689. package/legacy-radio/_radio-theme.scss +0 -104
  690. package/legacy-radio/index.d.ts +0 -75
  691. package/legacy-radio/testing/index.d.ts +0 -50
  692. package/legacy-select/_select-legacy-index.scss +0 -2
  693. package/legacy-select/_select-theme.import.scss +0 -11
  694. package/legacy-select/_select-theme.scss +0 -107
  695. package/legacy-select/index.d.ts +0 -230
  696. package/legacy-select/testing/index.d.ts +0 -38
  697. package/legacy-slide-toggle/_slide-toggle-legacy-index.scss +0 -3
  698. package/legacy-slide-toggle/_slide-toggle-theme.import.scss +0 -11
  699. package/legacy-slide-toggle/_slide-toggle-theme.scss +0 -111
  700. package/legacy-slide-toggle/index.d.ts +0 -113
  701. package/legacy-slide-toggle/testing/index.d.ts +0 -34
  702. package/legacy-slider/_slider-legacy-index.scss +0 -3
  703. package/legacy-slider/_slider-theme.import.scss +0 -8
  704. package/legacy-slider/_slider-theme.scss +0 -210
  705. package/legacy-slider/index.d.ts +0 -303
  706. package/legacy-slider/testing/index.d.ts +0 -68
  707. package/legacy-snack-bar/_snack-bar-legacy-index.scss +0 -2
  708. package/legacy-snack-bar/_snack-bar-theme.import.scss +0 -11
  709. package/legacy-snack-bar/_snack-bar-theme.scss +0 -72
  710. package/legacy-snack-bar/index.d.ts +0 -118
  711. package/legacy-snack-bar/testing/index.d.ts +0 -28
  712. package/legacy-table/_table-legacy-index.scss +0 -3
  713. package/legacy-table/_table-theme.import.scss +0 -8
  714. package/legacy-table/_table-theme.scss +0 -78
  715. package/legacy-table/index.d.ts +0 -298
  716. package/legacy-table/testing/index.d.ts +0 -149
  717. package/legacy-tabs/_tabs-common.import.scss +0 -11
  718. package/legacy-tabs/_tabs-common.scss +0 -173
  719. package/legacy-tabs/_tabs-legacy-index.scss +0 -6
  720. package/legacy-tabs/_tabs-theme.import.scss +0 -9
  721. package/legacy-tabs/_tabs-theme.scss +0 -188
  722. package/legacy-tabs/index.d.ts +0 -338
  723. package/legacy-tabs/testing/index.d.ts +0 -195
  724. package/legacy-tooltip/_tooltip-legacy-index.scss +0 -3
  725. package/legacy-tooltip/_tooltip-theme.import.scss +0 -9
  726. package/legacy-tooltip/_tooltip-theme.scss +0 -67
  727. package/legacy-tooltip/index.d.ts +0 -117
  728. package/legacy-tooltip/testing/index.d.ts +0 -30
  729. package/list/_list-theme.import.scss +0 -1
  730. package/menu/_menu-theme.import.scss +0 -2
  731. package/paginator/_paginator-theme.import.scss +0 -6
  732. package/paginator/_paginator-variables.import.scss +0 -1
  733. package/progress-bar/_progress-bar-theme.import.scss +0 -3
  734. package/progress-spinner/_progress-spinner-theme.import.scss +0 -3
  735. package/radio/_radio-theme.import.scss +0 -4
  736. package/select/_select-theme.import.scss +0 -7
  737. package/sidenav/_sidenav-legacy-index.scss +0 -2
  738. package/sidenav/_sidenav-theme.import.scss +0 -8
  739. package/slide-toggle/_slide-toggle-theme.import.scss +0 -7
  740. package/slider/_slider-theme.import.scss +0 -2
  741. package/snack-bar/_snack-bar-theme.import.scss +0 -5
  742. package/sort/_sort-legacy-index.scss +0 -2
  743. package/sort/_sort-theme.import.scss +0 -5
  744. package/stepper/_stepper-legacy-index.scss +0 -7
  745. package/stepper/_stepper-theme.import.scss +0 -16
  746. package/stepper/_stepper-variables.import.scss +0 -6
  747. package/table/_table-flex-styles.import.scss +0 -1
  748. package/table/_table-theme.import.scss +0 -8
  749. package/tabs/_tabs-common.import.scss +0 -11
  750. package/tabs/_tabs-theme.import.scss +0 -5
  751. package/toolbar/_toolbar-legacy-index.scss +0 -4
  752. package/toolbar/_toolbar-theme.import.scss +0 -14
  753. package/toolbar/_toolbar-variables.import.scss +0 -1
  754. package/tooltip/_tooltip-theme.import.scss +0 -2
  755. package/tree/_tree-legacy-index.scss +0 -2
  756. package/tree/_tree-theme.import.scss +0 -9
  757. package/tree/_tree-variables.import.scss +0 -1
@@ -1,619 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { FocusKeyManager, FocusMonitor } from '@angular/cdk/a11y';
9
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
10
- import { SelectionModel } from '@angular/cdk/collections';
11
- import { A, DOWN_ARROW, ENTER, hasModifierKey, SPACE, UP_ARROW } from '@angular/cdk/keycodes';
12
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, Inject, Input, Output, QueryList, ViewChild, ViewEncapsulation, } from '@angular/core';
13
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
14
- import { MatLine, mixinDisableRipple, setLines, } from '@angular/material/core';
15
- import { Subject } from 'rxjs';
16
- import { startWith, takeUntil } from 'rxjs/operators';
17
- import { MatLegacyListAvatarCssMatStyler, MatLegacyListIconCssMatStyler } from './list';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/material/core";
20
- import * as i2 from "@angular/common";
21
- import * as i3 from "@angular/cdk/a11y";
22
- const _MatSelectionListBase = mixinDisableRipple(class {
23
- });
24
- const _MatListOptionBase = mixinDisableRipple(class {
25
- });
26
- /**
27
- * @docs-private
28
- * @deprecated Use `MAT_SELECTION_LIST_VALUE_ACCESSOR` from `@angular/material/list` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
29
- * @breaking-change 17.0.0
30
- */
31
- export const MAT_LEGACY_SELECTION_LIST_VALUE_ACCESSOR = {
32
- provide: NG_VALUE_ACCESSOR,
33
- useExisting: forwardRef(() => MatLegacySelectionList),
34
- multi: true,
35
- };
36
- /**
37
- * Change event that is being fired whenever the selected state of an option changes.
38
- * @deprecated Use `MatSelectionListChange` from `@angular/material/list` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
39
- * @breaking-change 17.0.0
40
- */
41
- export class MatLegacySelectionListChange {
42
- constructor(
43
- /** Reference to the selection list that emitted the event. */
44
- source,
45
- /** Reference to the options that have been changed. */
46
- options) {
47
- this.source = source;
48
- this.options = options;
49
- }
50
- }
51
- /**
52
- * Component for list-options of selection-list. Each list-option can automatically
53
- * generate a checkbox and can put current item into the selectionModel of selection-list
54
- * if the current item is selected.
55
- * @deprecated Use `MatListOption` from `@angular/material/list` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
56
- * @breaking-change 17.0.0
57
- */
58
- export class MatLegacyListOption extends _MatListOptionBase {
59
- /** Theme color of the list option. This sets the color of the checkbox. */
60
- get color() {
61
- return this._color || this.selectionList.color;
62
- }
63
- set color(newValue) {
64
- this._color = newValue;
65
- }
66
- /** Value of the option */
67
- get value() {
68
- return this._value;
69
- }
70
- set value(newValue) {
71
- if (this.selected &&
72
- !this.selectionList.compareWith(newValue, this.value) &&
73
- this._inputsInitialized) {
74
- this.selected = false;
75
- }
76
- this._value = newValue;
77
- }
78
- /** Whether the option is disabled. */
79
- get disabled() {
80
- return this._disabled || (this.selectionList && this.selectionList.disabled);
81
- }
82
- set disabled(value) {
83
- const newValue = coerceBooleanProperty(value);
84
- if (newValue !== this._disabled) {
85
- this._disabled = newValue;
86
- this._changeDetector.markForCheck();
87
- }
88
- }
89
- /** Whether the option is selected. */
90
- get selected() {
91
- return this.selectionList.selectedOptions.isSelected(this);
92
- }
93
- set selected(value) {
94
- const isSelected = coerceBooleanProperty(value);
95
- if (isSelected !== this._selected) {
96
- this._setSelected(isSelected);
97
- if (isSelected || this.selectionList.multiple) {
98
- this.selectionList._reportValueChange();
99
- }
100
- }
101
- }
102
- constructor(_element, _changeDetector,
103
- /** @docs-private */
104
- selectionList) {
105
- super();
106
- this._element = _element;
107
- this._changeDetector = _changeDetector;
108
- this.selectionList = selectionList;
109
- this._selected = false;
110
- this._disabled = false;
111
- this._hasFocus = false;
112
- /**
113
- * Emits when the selected state of the option has changed.
114
- * Use to facilitate two-data binding to the `selected` property.
115
- * @docs-private
116
- */
117
- this.selectedChange = new EventEmitter();
118
- /** Whether the label should appear before or after the checkbox. Defaults to 'after' */
119
- this.checkboxPosition = 'after';
120
- /**
121
- * This is set to true after the first OnChanges cycle so we don't clear the value of `selected`
122
- * in the first cycle.
123
- */
124
- this._inputsInitialized = false;
125
- }
126
- ngOnInit() {
127
- const list = this.selectionList;
128
- if (list._value && list._value.some(value => list.compareWith(this._value, value))) {
129
- this._setSelected(true);
130
- }
131
- const wasSelected = this._selected;
132
- // List options that are selected at initialization can't be reported properly to the form
133
- // control. This is because it takes some time until the selection-list knows about all
134
- // available options. Also it can happen that the ControlValueAccessor has an initial value
135
- // that should be used instead. Deferring the value change report to the next tick ensures
136
- // that the form control value is not being overwritten.
137
- Promise.resolve().then(() => {
138
- if (this._selected || wasSelected) {
139
- this.selected = true;
140
- this._changeDetector.markForCheck();
141
- }
142
- });
143
- this._inputsInitialized = true;
144
- }
145
- ngAfterContentInit() {
146
- setLines(this._lines, this._element);
147
- }
148
- ngOnDestroy() {
149
- if (this.selected) {
150
- // We have to delay this until the next tick in order
151
- // to avoid changed after checked errors.
152
- Promise.resolve().then(() => {
153
- this.selected = false;
154
- });
155
- }
156
- const hadFocus = this._hasFocus;
157
- const newActiveItem = this.selectionList._removeOptionFromList(this);
158
- // Only move focus if this option was focused at the time it was destroyed.
159
- if (hadFocus && newActiveItem) {
160
- newActiveItem.focus();
161
- }
162
- }
163
- /** Toggles the selection state of the option. */
164
- toggle() {
165
- this.selected = !this.selected;
166
- }
167
- /** Allows for programmatic focusing of the option. */
168
- focus() {
169
- this._element.nativeElement.focus();
170
- }
171
- /**
172
- * Returns the list item's text label. Implemented as a part of the FocusKeyManager.
173
- * @docs-private
174
- */
175
- getLabel() {
176
- return this._text ? this._text.nativeElement.textContent || '' : '';
177
- }
178
- /** Whether this list item should show a ripple effect when clicked. */
179
- _isRippleDisabled() {
180
- return this.disabled || this.disableRipple || this.selectionList.disableRipple;
181
- }
182
- _handleClick() {
183
- if (!this.disabled && (this.selectionList.multiple || !this.selected)) {
184
- this.toggle();
185
- // Emit a change event if the selected state of the option changed through user interaction.
186
- this.selectionList._emitChangeEvent([this]);
187
- }
188
- }
189
- _handleFocus() {
190
- this.selectionList._setFocusedOption(this);
191
- this._hasFocus = true;
192
- }
193
- _handleBlur() {
194
- this.selectionList._onTouched();
195
- this._hasFocus = false;
196
- }
197
- /** Retrieves the DOM element of the component host. */
198
- _getHostElement() {
199
- return this._element.nativeElement;
200
- }
201
- /** Sets the selected state of the option. Returns whether the value has changed. */
202
- _setSelected(selected) {
203
- if (selected === this._selected) {
204
- return false;
205
- }
206
- this._selected = selected;
207
- if (selected) {
208
- this.selectionList.selectedOptions.select(this);
209
- }
210
- else {
211
- this.selectionList.selectedOptions.deselect(this);
212
- }
213
- this.selectedChange.emit(selected);
214
- this._changeDetector.markForCheck();
215
- return true;
216
- }
217
- /**
218
- * Notifies Angular that the option needs to be checked in the next change detection run. Mainly
219
- * used to trigger an update of the list option if the disabled state of the selection list
220
- * changed.
221
- */
222
- _markForCheck() {
223
- this._changeDetector.markForCheck();
224
- }
225
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacyListOption, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: forwardRef(() => MatLegacySelectionList) }], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: MatLegacyListOption, selector: "mat-list-option", inputs: { disableRipple: "disableRipple", checkboxPosition: "checkboxPosition", color: "color", value: "value", disabled: "disabled", selected: "selected" }, outputs: { selectedChange: "selectedChange" }, host: { attributes: { "role": "option" }, listeners: { "focus": "_handleFocus()", "blur": "_handleBlur()", "click": "_handleClick()" }, properties: { "class.mat-list-item-disabled": "disabled", "class.mat-list-item-with-avatar": "_avatar || _icon", "class.mat-primary": "color === \"primary\"", "class.mat-accent": "color !== \"primary\" && color !== \"warn\"", "class.mat-warn": "color === \"warn\"", "class.mat-list-single-selected-option": "selected && !selectionList.multiple", "attr.aria-selected": "selected", "attr.aria-disabled": "disabled", "attr.tabindex": "-1" }, classAttribute: "mat-list-item mat-list-option mat-focus-indicator" }, queries: [{ propertyName: "_avatar", first: true, predicate: MatLegacyListAvatarCssMatStyler, descendants: true }, { propertyName: "_icon", first: true, predicate: MatLegacyListIconCssMatStyler, descendants: true }, { propertyName: "_lines", predicate: MatLine, descendants: true }], viewQueries: [{ propertyName: "_text", first: true, predicate: ["text"], descendants: true }], exportAs: ["matListOption"], usesInheritance: true, ngImport: i0, template: "<div class=\"mat-list-item-content\"\n [class.mat-list-item-content-reverse]=\"checkboxPosition == 'after'\">\n\n <div mat-ripple\n class=\"mat-list-item-ripple\"\n [matRippleTrigger]=\"_getHostElement()\"\n [matRippleDisabled]=\"_isRippleDisabled()\"></div>\n\n <mat-pseudo-checkbox\n *ngIf=\"selectionList.multiple\"\n [state]=\"selected ? 'checked' : 'unchecked'\"\n [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n <div class=\"mat-list-text\" #text><ng-content></ng-content></div>\n\n <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n </ng-content>\n\n</div>\n", dependencies: [{ kind: "directive", type: i1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i1.MatPseudoCheckbox, selector: "mat-pseudo-checkbox", inputs: ["state", "disabled", "appearance"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
227
- }
228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacyListOption, decorators: [{
229
- type: Component,
230
- args: [{ selector: 'mat-list-option', exportAs: 'matListOption', inputs: ['disableRipple'], host: {
231
- 'role': 'option',
232
- 'class': 'mat-list-item mat-list-option mat-focus-indicator',
233
- '(focus)': '_handleFocus()',
234
- '(blur)': '_handleBlur()',
235
- '(click)': '_handleClick()',
236
- '[class.mat-list-item-disabled]': 'disabled',
237
- '[class.mat-list-item-with-avatar]': '_avatar || _icon',
238
- // Manually set the "primary" or "warn" class if the color has been explicitly
239
- // set to "primary" or "warn". The pseudo checkbox picks up these classes for
240
- // its theme.
241
- '[class.mat-primary]': 'color === "primary"',
242
- // Even though accent is the default, we need to set this class anyway, because the list might
243
- // be placed inside a parent that has one of the other colors with a higher specificity.
244
- '[class.mat-accent]': 'color !== "primary" && color !== "warn"',
245
- '[class.mat-warn]': 'color === "warn"',
246
- '[class.mat-list-single-selected-option]': 'selected && !selectionList.multiple',
247
- '[attr.aria-selected]': 'selected',
248
- '[attr.aria-disabled]': 'disabled',
249
- '[attr.tabindex]': '-1',
250
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mat-list-item-content\"\n [class.mat-list-item-content-reverse]=\"checkboxPosition == 'after'\">\n\n <div mat-ripple\n class=\"mat-list-item-ripple\"\n [matRippleTrigger]=\"_getHostElement()\"\n [matRippleDisabled]=\"_isRippleDisabled()\"></div>\n\n <mat-pseudo-checkbox\n *ngIf=\"selectionList.multiple\"\n [state]=\"selected ? 'checked' : 'unchecked'\"\n [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n <div class=\"mat-list-text\" #text><ng-content></ng-content></div>\n\n <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n </ng-content>\n\n</div>\n" }]
251
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: MatLegacySelectionList, decorators: [{
252
- type: Inject,
253
- args: [forwardRef(() => MatLegacySelectionList)]
254
- }] }]; }, propDecorators: { _avatar: [{
255
- type: ContentChild,
256
- args: [MatLegacyListAvatarCssMatStyler]
257
- }], _icon: [{
258
- type: ContentChild,
259
- args: [MatLegacyListIconCssMatStyler]
260
- }], _lines: [{
261
- type: ContentChildren,
262
- args: [MatLine, { descendants: true }]
263
- }], selectedChange: [{
264
- type: Output
265
- }], _text: [{
266
- type: ViewChild,
267
- args: ['text']
268
- }], checkboxPosition: [{
269
- type: Input
270
- }], color: [{
271
- type: Input
272
- }], value: [{
273
- type: Input
274
- }], disabled: [{
275
- type: Input
276
- }], selected: [{
277
- type: Input
278
- }] } });
279
- /**
280
- * Material Design list component where each item is a selectable option. Behaves as a listbox.
281
- * @deprecated Use `MatSelectionList` from `@angular/material/list` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
282
- * @breaking-change 17.0.0
283
- */
284
- export class MatLegacySelectionList extends _MatSelectionListBase {
285
- /** Whether the selection list is disabled. */
286
- get disabled() {
287
- return this._disabled;
288
- }
289
- set disabled(value) {
290
- this._disabled = coerceBooleanProperty(value);
291
- // The `MatSelectionList` and `MatListOption` are using the `OnPush` change detection
292
- // strategy. Therefore the options will not check for any changes if the `MatSelectionList`
293
- // changed its state. Since we know that a change to `disabled` property of the list affects
294
- // the state of the options, we manually mark each option for check.
295
- this._markOptionsForCheck();
296
- }
297
- /** Whether selection is limited to one or multiple items (default multiple). */
298
- get multiple() {
299
- return this._multiple;
300
- }
301
- set multiple(value) {
302
- const newValue = coerceBooleanProperty(value);
303
- if (newValue !== this._multiple) {
304
- if (this._contentInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {
305
- throw new Error('Cannot change `multiple` mode of mat-selection-list after initialization.');
306
- }
307
- this._multiple = newValue;
308
- this.selectedOptions = new SelectionModel(this._multiple, this.selectedOptions.selected);
309
- }
310
- }
311
- constructor(_element, _changeDetector, _focusMonitor) {
312
- super();
313
- this._element = _element;
314
- this._changeDetector = _changeDetector;
315
- this._focusMonitor = _focusMonitor;
316
- this._multiple = true;
317
- this._contentInitialized = false;
318
- /** Emits a change event whenever the selected state of an option changes. */
319
- this.selectionChange = new EventEmitter();
320
- /** Theme color of the selection list. This sets the checkbox color for all list options. */
321
- this.color = 'accent';
322
- /**
323
- * Function used for comparing an option against the selected value when determining which
324
- * options should appear as selected. The first argument is the value of an options. The second
325
- * one is a value from the selected value. A boolean must be returned.
326
- */
327
- this.compareWith = (a1, a2) => a1 === a2;
328
- this._disabled = false;
329
- /** The currently selected options. */
330
- this.selectedOptions = new SelectionModel(this._multiple);
331
- /** The tabindex of the selection list. */
332
- this._tabIndex = -1;
333
- /** View to model callback that should be called whenever the selected options change. */
334
- this._onChange = (_) => { };
335
- /** Emits when the list has been destroyed. */
336
- this._destroyed = new Subject();
337
- /** View to model callback that should be called if the list or its options lost focus. */
338
- this._onTouched = () => { };
339
- }
340
- ngAfterContentInit() {
341
- this._contentInitialized = true;
342
- this._keyManager = new FocusKeyManager(this.options)
343
- .withWrap()
344
- .withTypeAhead()
345
- .withHomeAndEnd()
346
- // Allow disabled items to be focusable. For accessibility reasons, there must be a way for
347
- // screen reader users, that allows reading the different options of the list.
348
- .skipPredicate(() => false)
349
- .withAllowedModifierKeys(['shiftKey']);
350
- if (this._value) {
351
- this._setOptionsFromValues(this._value);
352
- }
353
- // If the user attempts to tab out of the selection list, allow focus to escape.
354
- this._keyManager.tabOut.subscribe(() => this._allowFocusEscape());
355
- // When the number of options change, update the tabindex of the selection list.
356
- this.options.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {
357
- this._updateTabIndex();
358
- });
359
- // Sync external changes to the model back to the options.
360
- this.selectedOptions.changed.pipe(takeUntil(this._destroyed)).subscribe(event => {
361
- if (event.added) {
362
- for (let item of event.added) {
363
- item.selected = true;
364
- }
365
- }
366
- if (event.removed) {
367
- for (let item of event.removed) {
368
- item.selected = false;
369
- }
370
- }
371
- });
372
- this._focusMonitor
373
- .monitor(this._element)
374
- .pipe(takeUntil(this._destroyed))
375
- .subscribe(origin => {
376
- if (origin === 'keyboard' || origin === 'program') {
377
- let toFocus = 0;
378
- for (let i = 0; i < this.options.length; i++) {
379
- if (this.options.get(i)?.selected) {
380
- toFocus = i;
381
- break;
382
- }
383
- }
384
- this._keyManager.setActiveItem(toFocus);
385
- }
386
- });
387
- }
388
- ngOnChanges(changes) {
389
- const disableRippleChanges = changes['disableRipple'];
390
- const colorChanges = changes['color'];
391
- if ((disableRippleChanges && !disableRippleChanges.firstChange) ||
392
- (colorChanges && !colorChanges.firstChange)) {
393
- this._markOptionsForCheck();
394
- }
395
- }
396
- ngOnDestroy() {
397
- this._keyManager?.destroy();
398
- this._focusMonitor.stopMonitoring(this._element);
399
- this._destroyed.next();
400
- this._destroyed.complete();
401
- this._isDestroyed = true;
402
- }
403
- /** Focuses the selection list. */
404
- focus(options) {
405
- this._element.nativeElement.focus(options);
406
- }
407
- /** Selects all of the options. Returns the options that changed as a result. */
408
- selectAll() {
409
- return this._setAllOptionsSelected(true);
410
- }
411
- /** Deselects all of the options. Returns the options that changed as a result. */
412
- deselectAll() {
413
- return this._setAllOptionsSelected(false);
414
- }
415
- /** Sets the focused option of the selection-list. */
416
- _setFocusedOption(option) {
417
- this._keyManager.updateActiveItem(option);
418
- }
419
- /**
420
- * Removes an option from the selection list and updates the active item.
421
- * @returns Currently-active item.
422
- */
423
- _removeOptionFromList(option) {
424
- const optionIndex = this._getOptionIndex(option);
425
- if (optionIndex > -1 && this._keyManager.activeItemIndex === optionIndex) {
426
- // Check whether the option is the last item
427
- if (optionIndex > 0) {
428
- this._keyManager.updateActiveItem(optionIndex - 1);
429
- }
430
- else if (optionIndex === 0 && this.options.length > 1) {
431
- this._keyManager.updateActiveItem(Math.min(optionIndex + 1, this.options.length - 1));
432
- }
433
- }
434
- return this._keyManager.activeItem;
435
- }
436
- /** Passes relevant key presses to our key manager. */
437
- _keydown(event) {
438
- const keyCode = event.keyCode;
439
- const manager = this._keyManager;
440
- const previousFocusIndex = manager.activeItemIndex;
441
- const hasModifier = hasModifierKey(event);
442
- switch (keyCode) {
443
- case SPACE:
444
- case ENTER:
445
- if (!hasModifier && !manager.isTyping()) {
446
- this._toggleFocusedOption();
447
- // Always prevent space from scrolling the page since the list has focus
448
- event.preventDefault();
449
- }
450
- break;
451
- default:
452
- // The "A" key gets special treatment, because it's used for the "select all" functionality.
453
- if (keyCode === A &&
454
- this.multiple &&
455
- hasModifierKey(event, 'ctrlKey') &&
456
- !manager.isTyping()) {
457
- const shouldSelect = this.options.some(option => !option.disabled && !option.selected);
458
- this._setAllOptionsSelected(shouldSelect, true, true);
459
- event.preventDefault();
460
- }
461
- else {
462
- manager.onKeydown(event);
463
- }
464
- }
465
- if (this.multiple &&
466
- (keyCode === UP_ARROW || keyCode === DOWN_ARROW) &&
467
- event.shiftKey &&
468
- manager.activeItemIndex !== previousFocusIndex) {
469
- this._toggleFocusedOption();
470
- }
471
- }
472
- /** Reports a value change to the ControlValueAccessor */
473
- _reportValueChange() {
474
- // Stop reporting value changes after the list has been destroyed. This avoids
475
- // cases where the list might wrongly reset its value once it is removed, but
476
- // the form control is still live.
477
- if (this.options && !this._isDestroyed) {
478
- const value = this._getSelectedOptionValues();
479
- this._onChange(value);
480
- this._value = value;
481
- }
482
- }
483
- /** Emits a change event if the selected state of an option changed. */
484
- _emitChangeEvent(options) {
485
- this.selectionChange.emit(new MatLegacySelectionListChange(this, options));
486
- }
487
- /** Implemented as part of ControlValueAccessor. */
488
- writeValue(values) {
489
- this._value = values;
490
- if (this.options) {
491
- this._setOptionsFromValues(values || []);
492
- }
493
- }
494
- /** Implemented as a part of ControlValueAccessor. */
495
- setDisabledState(isDisabled) {
496
- this.disabled = isDisabled;
497
- }
498
- /** Implemented as part of ControlValueAccessor. */
499
- registerOnChange(fn) {
500
- this._onChange = fn;
501
- }
502
- /** Implemented as part of ControlValueAccessor. */
503
- registerOnTouched(fn) {
504
- this._onTouched = fn;
505
- }
506
- /** Sets the selected options based on the specified values. */
507
- _setOptionsFromValues(values) {
508
- this.options.forEach(option => option._setSelected(false));
509
- values.forEach(value => {
510
- const correspondingOption = this.options.find(option => {
511
- // Skip options that are already in the model. This allows us to handle cases
512
- // where the same primitive value is selected multiple times.
513
- return option.selected ? false : this.compareWith(option.value, value);
514
- });
515
- if (correspondingOption) {
516
- correspondingOption._setSelected(true);
517
- }
518
- });
519
- }
520
- /** Returns the values of the selected options. */
521
- _getSelectedOptionValues() {
522
- return this.options.filter(option => option.selected).map(option => option.value);
523
- }
524
- /** Toggles the state of the currently focused option if enabled. */
525
- _toggleFocusedOption() {
526
- let focusedIndex = this._keyManager.activeItemIndex;
527
- if (focusedIndex != null && this._isValidIndex(focusedIndex)) {
528
- let focusedOption = this.options.toArray()[focusedIndex];
529
- if (focusedOption && !focusedOption.disabled && (this._multiple || !focusedOption.selected)) {
530
- focusedOption.toggle();
531
- // Emit a change event because the focused option changed its state through user
532
- // interaction.
533
- this._emitChangeEvent([focusedOption]);
534
- }
535
- }
536
- }
537
- /**
538
- * Sets the selected state on all of the options
539
- * and emits an event if anything changed.
540
- */
541
- _setAllOptionsSelected(isSelected, skipDisabled, isUserInput) {
542
- // Keep track of whether anything changed, because we only want to
543
- // emit the changed event when something actually changed.
544
- const changedOptions = [];
545
- this.options.forEach(option => {
546
- if ((!skipDisabled || !option.disabled) && option._setSelected(isSelected)) {
547
- changedOptions.push(option);
548
- }
549
- });
550
- if (changedOptions.length) {
551
- this._reportValueChange();
552
- if (isUserInput) {
553
- this._emitChangeEvent(changedOptions);
554
- }
555
- }
556
- return changedOptions;
557
- }
558
- /**
559
- * Utility to ensure all indexes are valid.
560
- * @param index The index to be checked.
561
- * @returns True if the index is valid for our list of options.
562
- */
563
- _isValidIndex(index) {
564
- return index >= 0 && index < this.options.length;
565
- }
566
- /** Returns the index of the specified list option. */
567
- _getOptionIndex(option) {
568
- return this.options.toArray().indexOf(option);
569
- }
570
- /** Marks all the options to be checked in the next change detection run. */
571
- _markOptionsForCheck() {
572
- if (this.options) {
573
- this.options.forEach(option => option._markForCheck());
574
- }
575
- }
576
- /**
577
- * Removes the tabindex from the selection list and resets it back afterwards, allowing the user
578
- * to tab out of it. This prevents the list from capturing focus and redirecting it back within
579
- * the list, creating a focus trap if it user tries to tab away.
580
- */
581
- _allowFocusEscape() {
582
- this._tabIndex = -1;
583
- setTimeout(() => {
584
- this._tabIndex = 0;
585
- this._changeDetector.markForCheck();
586
- });
587
- }
588
- /** Updates the tabindex based upon if the selection list is empty. */
589
- _updateTabIndex() {
590
- this._tabIndex = this.options.length === 0 ? -1 : 0;
591
- }
592
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacySelectionList, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i3.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component }); }
593
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: MatLegacySelectionList, selector: "mat-selection-list", inputs: { disableRipple: "disableRipple", color: "color", compareWith: "compareWith", disabled: "disabled", multiple: "multiple" }, outputs: { selectionChange: "selectionChange" }, host: { attributes: { "role": "listbox" }, listeners: { "keydown": "_keydown($event)" }, properties: { "attr.aria-multiselectable": "multiple", "attr.aria-disabled": "disabled.toString()", "attr.tabindex": "_tabIndex" }, classAttribute: "mat-selection-list mat-list-base" }, providers: [MAT_LEGACY_SELECTION_LIST_VALUE_ACCESSOR], queries: [{ propertyName: "options", predicate: MatLegacyListOption, descendants: true }], exportAs: ["matSelectionList"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}button.mat-list-item,button.mat-list-option{padding:0;width:100%;background:none;color:inherit;border:none;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:left}[dir=rtl] button.mat-list-item,[dir=rtl] button.mat-list-option{text-align:right}button.mat-list-item::-moz-focus-inner,button.mat-list-option::-moz-focus-inner{border:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:hover{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\"\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
594
- }
595
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacySelectionList, decorators: [{
596
- type: Component,
597
- args: [{ selector: 'mat-selection-list', exportAs: 'matSelectionList', inputs: ['disableRipple'], host: {
598
- 'role': 'listbox',
599
- 'class': 'mat-selection-list mat-list-base',
600
- '(keydown)': '_keydown($event)',
601
- '[attr.aria-multiselectable]': 'multiple',
602
- '[attr.aria-disabled]': 'disabled.toString()',
603
- '[attr.tabindex]': '_tabIndex',
604
- }, template: '<ng-content></ng-content>', encapsulation: ViewEncapsulation.None, providers: [MAT_LEGACY_SELECTION_LIST_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, styles: [".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}button.mat-list-item,button.mat-list-option{padding:0;width:100%;background:none;color:inherit;border:none;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:left}[dir=rtl] button.mat-list-item,[dir=rtl] button.mat-list-option{text-align:right}button.mat-list-item::-moz-focus-inner,button.mat-list-option::-moz-focus-inner{border:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:hover{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\"\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}"] }]
605
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i3.FocusMonitor }]; }, propDecorators: { options: [{
606
- type: ContentChildren,
607
- args: [MatLegacyListOption, { descendants: true }]
608
- }], selectionChange: [{
609
- type: Output
610
- }], color: [{
611
- type: Input
612
- }], compareWith: [{
613
- type: Input
614
- }], disabled: [{
615
- type: Input
616
- }], multiple: [{
617
- type: Input
618
- }] } });
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvbGVnYWN5LWxpc3Qvc2VsZWN0aW9uLWxpc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvbGVnYWN5LWxpc3QvbGlzdC1vcHRpb24uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWtCLGVBQWUsRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEVBQWUscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDNUYsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFFTCxPQUFPLEVBQ1Asa0JBQWtCLEVBQ2xCLFFBQVEsR0FFVCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsNkJBQTZCLEVBQUMsTUFBTSxRQUFR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LEVBQUUsa0NBQWtDO3dCQUMzQyxXQUFXLEVBQUUsa0JBQWtCO3dCQUMvQiw2QkFBNkIsRUFBRSxVQUFVO3dCQUN6QyxzQkFBc0IsRUFBRSxxQkFBcUI7d0JBQzdDLGlCQUFpQixFQUFFLFdBQVc7cUJBQy9CLFlBQ1MsMkJBQTJCLGlCQUV0QixpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsd0NBQXdDLENBQUMsbUJBQ3BDLHVCQUF1QixDQUFDLE1BQU07NEpBYy9DLE9BQU87c0JBRE4sZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBSXRDLGVBQWU7c0JBQWpDLE1BQU07Z0JBSUUsS0FBSztzQkFBYixLQUFLO2dCQU9HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUYsUUFBUTtzQkFEWCxLQUFLO2dCQWlCRixRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtGb2N1c2FibGVPcHRpb24sIEZvY3VzS2V5TWFuYWdlciwgRm9jdXNNb25pdG9yfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7QSwgRE9XTl9BUlJPVywgRU5URVIsIGhhc01vZGlmaWVyS2V5LCBTUEFDRSwgVVBfQVJST1d9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIENhbkRpc2FibGVSaXBwbGUsXG4gIE1hdExpbmUsXG4gIG1peGluRGlzYWJsZVJpcHBsZSxcbiAgc2V0TGluZXMsXG4gIFRoZW1lUGFsZXR0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzdGFydFdpdGgsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtNYXRMZWdhY3lMaXN0QXZhdGFyQ3NzTWF0U3R5bGVyLCBNYXRMZWdhY3lMaXN0SWNvbkNzc01hdFN0eWxlcn0gZnJvbSAnLi9saXN0JztcblxuY29uc3QgX01hdFNlbGVjdGlvbkxpc3RCYXNlID0gbWl4aW5EaXNhYmxlUmlwcGxlKGNsYXNzIHt9KTtcbmNvbnN0IF9NYXRMaXN0T3B0aW9uQmFzZSA9IG1peGluRGlzYWJsZVJpcHBsZShjbGFzcyB7fSk7XG5cbi8qKlxuICogQGRvY3MtcHJpdmF0ZVxuICogQGRlcHJlY2F0ZWQgVXNlIGBNQVRfU0VMRUNUSU9OX0xJU1RfVkFMVUVfQUNDRVNTT1JgIGZyb20gYEBhbmd1bGFyL21hdGVyaWFsL2xpc3RgIGluc3RlYWQuIFNlZSBodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vZ3VpZGUvbWRjLW1pZ3JhdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgbWlncmF0aW5nLlxuICogQGJyZWFraW5nLWNoYW5nZSAxNy4wLjBcbiAqL1xuZXhwb3J0IGNvbnN0IE1BVF9MRUdBQ1lfU0VMRUNUSU9OX0xJU1RfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdExlZ2FjeVNlbGVjdGlvbkxpc3QpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbi8qKlxuICogQ2hhbmdlIGV2ZW50IHRoYXQgaXMgYmVpbmcgZmlyZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIGFuIG9wdGlvbiBjaGFuZ2VzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBNYXRTZWxlY3Rpb25MaXN0Q2hhbmdlYCBmcm9tIGBAYW5ndWxhci9tYXRlcmlhbC9saXN0YCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXRMZWdhY3lTZWxlY3Rpb25MaXN0Q2hhbmdlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2VsZWN0aW9uIGxpc3QgdGhhdCBlbWl0dGVkIHRoZSBldmVudC4gKi9cbiAgICBwdWJsaWMgc291cmNlOiBNYXRMZWdhY3lTZWxlY3Rpb25MaXN0LFxuICAgIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG9wdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBwdWJsaWMgb3B0aW9uczogTWF0TGVnYWN5TGlzdE9wdGlvbltdLFxuICApIHt9XG59XG5cbi8qKlxuICogVHlwZSBkZXNjcmliaW5nIHBvc3NpYmxlIHBvc2l0aW9ucyBvZiBhIGNoZWNrYm94IGluIGEgbGlzdCBvcHRpb25cbiAqIHdpdGggcmVzcGVjdCB0byB0aGUgbGlzdCBpdGVtJ3MgdGV4dC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgTWF0TGlzdE9wdGlvblRvZ2dsZVBvc2l0aW9uYCBmcm9tIGBAYW5ndWxhci9tYXRlcmlhbC9saXN0YCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbmV4cG9ydCB0eXBlIE1hdExlZ2FjeUxpc3RPcHRpb25DaGVja2JveFBvc2l0aW9uID0gJ2JlZm9yZScgfCAnYWZ0ZXInO1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3IgbGlzdC1vcHRpb25zIG9mIHNlbGVjdGlvbi1saXN0LiBFYWNoIGxpc3Qtb3B0aW9uIGNhbiBhdXRvbWF0aWNhbGx5XG4gKiBnZW5lcmF0ZSBhIGNoZWNrYm94IGFuZCBjYW4gcHV0IGN1cnJlbnQgaXRlbSBpbnRvIHRoZSBzZWxlY3Rpb25Nb2RlbCBvZiBzZWxlY3Rpb24tbGlzdFxuICogaWYgdGhlIGN1cnJlbnQgaXRlbSBpcyBzZWxlY3RlZC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgTWF0TGlzdE9wdGlvbmAgZnJvbSBgQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdGAgaW5zdGVhZC4gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS9tZGMtbWlncmF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBtaWdyYXRpbmcuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE3LjAuMFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbGlzdC1vcHRpb24nLFxuICBleHBvcnRBczogJ21hdExpc3RPcHRpb24nLFxuICBpbnB1dHM6IFsnZGlzYWJsZVJpcHBsZSddLFxuICBob3N0OiB7XG4gICAgJ3JvbGUnOiAnb3B0aW9uJyxcbiAgICAnY2xhc3MnOiAnbWF0LWxpc3QtaXRlbSBtYXQtbGlzdC1vcHRpb24gbWF0LWZvY3VzLWluZGljYXRvcicsXG4gICAgJyhmb2N1cyknOiAnX2hhbmRsZUZvY3VzKCknLFxuICAgICcoYmx1ciknOiAnX2hhbmRsZUJsdXIoKScsXG4gICAgJyhjbGljayknOiAnX2hhbmRsZUNsaWNrKCknLFxuICAgICdbY2xhc3MubWF0LWxpc3QtaXRlbS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcl0nOiAnX2F2YXRhciB8fCBfaWNvbicsXG4gICAgLy8gTWFudWFsbHkgc2V0IHRoZSBcInByaW1hcnlcIiBvciBcIndhcm5cIiBjbGFzcyBpZiB0aGUgY29sb3IgaGFzIGJlZW4gZXhwbGljaXRseVxuICAgIC8vIHNldCB0byBcInByaW1hcnlcIiBvciBcIndhcm5cIi4gVGhlIHBzZXVkbyBjaGVja2JveCBwaWNrcyB1cCB0aGVzZSBjbGFzc2VzIGZvclxuICAgIC8vIGl0cyB0aGVtZS5cbiAgICAnW2NsYXNzLm1hdC1wcmltYXJ5XSc6ICdjb2xvciA9PT0gXCJwcmltYXJ5XCInLFxuICAgIC8vIEV2ZW4gdGhvdWdoIGFjY2VudCBpcyB0aGUgZGVmYXVsdCwgd2UgbmVlZCB0byBzZXQgdGhpcyBjbGFzcyBhbnl3YXksIGJlY2F1c2UgdGhlICBsaXN0IG1pZ2h0XG4gICAgLy8gYmUgcGxhY2VkIGluc2lkZSBhIHBhcmVudCB0aGF0IGhhcyBvbmUgb2YgdGhlIG90aGVyIGNvbG9ycyB3aXRoIGEgaGlnaGVyIHNwZWNpZmljaXR5LlxuICAgICdbY2xhc3MubWF0LWFjY2VudF0nOiAnY29sb3IgIT09IFwicHJpbWFyeVwiICYmIGNvbG9yICE9PSBcIndhcm5cIicsXG4gICAgJ1tjbGFzcy5tYXQtd2Fybl0nOiAnY29sb3IgPT09IFwid2FyblwiJyxcbiAgICAnW2NsYXNzLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb25dJzogJ3NlbGVjdGVkICYmICFzZWxlY3Rpb25MaXN0Lm11bHRpcGxlJyxcbiAgICAnW2F0dHIuYXJpYS1zZWxlY3RlZF0nOiAnc2VsZWN0ZWQnLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICctMScsXG4gIH0sXG4gIHRlbXBsYXRlVXJsOiAnbGlzdC1vcHRpb24uaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRMZWdhY3lMaXN0T3B0aW9uXG4gIGV4dGVuZHMgX01hdExpc3RPcHRpb25CYXNlXG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBPbkluaXQsIEZvY3VzYWJsZU9wdGlvbiwgQ2FuRGlzYWJsZVJpcHBsZVxue1xuICBwcml2YXRlIF9zZWxlY3RlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9oYXNGb2N1cyA9IGZhbHNlO1xuXG4gIEBDb250ZW50Q2hpbGQoTWF0TGVnYWN5TGlzdEF2YXRhckNzc01hdFN0eWxlcikgX2F2YXRhcjogTWF0TGVnYWN5TGlzdEF2YXRhckNzc01hdFN0eWxlcjtcbiAgQENvbnRlbnRDaGlsZChNYXRMZWdhY3lMaXN0SWNvbkNzc01hdFN0eWxlcikgX2ljb246IE1hdExlZ2FjeUxpc3RJY29uQ3NzTWF0U3R5bGVyO1xuICBAQ29udGVudENoaWxkcmVuKE1hdExpbmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9saW5lczogUXVlcnlMaXN0PE1hdExpbmU+O1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiB0aGUgb3B0aW9uIGhhcyBjaGFuZ2VkLlxuICAgKiBVc2UgdG8gZmFjaWxpdGF0ZSB0d28tZGF0YSBiaW5kaW5nIHRvIHRoZSBgc2VsZWN0ZWRgIHByb3BlcnR5LlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgc2VsZWN0ZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKiogRE9NIGVsZW1lbnQgY29udGFpbmluZyB0aGUgaXRlbSdzIHRleHQuICovXG4gIEBWaWV3Q2hpbGQoJ3RleHQnKSBfdGV4dDogRWxlbWVudFJlZjtcblxuICAvKiogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGFwcGVhciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoZWNrYm94LiBEZWZhdWx0cyB0byAnYWZ0ZXInICovXG4gIEBJbnB1dCgpIGNoZWNrYm94UG9zaXRpb246IE1hdExlZ2FjeUxpc3RPcHRpb25DaGVja2JveFBvc2l0aW9uID0gJ2FmdGVyJztcblxuICAvKiogVGhlbWUgY29sb3Igb2YgdGhlIGxpc3Qgb3B0aW9uLiBUaGlzIHNldHMgdGhlIGNvbG9yIG9mIHRoZSBjaGVja2JveC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGNvbG9yKCk6IFRoZW1lUGFsZXR0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yIHx8IHRoaXMuc2VsZWN0aW9uTGlzdC5jb2xvcjtcbiAgfVxuICBzZXQgY29sb3IobmV3VmFsdWU6IFRoZW1lUGFsZXR0ZSkge1xuICAgIHRoaXMuX2NvbG9yID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICAvKipcbiAgICogVGhpcyBpcyBzZXQgdG8gdHJ1ZSBhZnRlciB0aGUgZmlyc3QgT25DaGFuZ2VzIGN5Y2xlIHNvIHdlIGRvbid0IGNsZWFyIHRoZSB2YWx1ZSBvZiBgc2VsZWN0ZWRgXG4gICAqIGluIHRoZSBmaXJzdCBjeWNsZS5cbiAgICovXG4gIHByaXZhdGUgX2lucHV0c0luaXRpYWxpemVkID0gZmFsc2U7XG4gIC8qKiBWYWx1ZSBvZiB0aGUgb3B0aW9uICovXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWQgJiZcbiAgICAgICF0aGlzLnNlbGVjdGlvbkxpc3QuY29tcGFyZVdpdGgobmV3VmFsdWUsIHRoaXMudmFsdWUpICYmXG4gICAgICB0aGlzLl9pbnB1dHNJbml0aWFsaXplZFxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcblxuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8ICh0aGlzLnNlbGVjdGlvbkxpc3QgJiYgdGhpcy5zZWxlY3Rpb25MaXN0LmRpc2FibGVkKTtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuaXNTZWxlY3RlZCh0aGlzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQgIT09IHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9zZXRTZWxlY3RlZChpc1NlbGVjdGVkKTtcblxuICAgICAgaWYgKGlzU2VsZWN0ZWQgfHwgdGhpcy5zZWxlY3Rpb25MaXN0Lm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTGlzdC5fcmVwb3J0VmFsdWVDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTWF0TGVnYWN5U2VsZWN0aW9uTGlzdCkpIHB1YmxpYyBzZWxlY3Rpb25MaXN0OiBNYXRMZWdhY3lTZWxlY3Rpb25MaXN0LFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuc2VsZWN0aW9uTGlzdDtcblxuICAgIGlmIChsaXN0Ll92YWx1ZSAmJiBsaXN0Ll92YWx1ZS5zb21lKHZhbHVlID0+IGxpc3QuY29tcGFyZVdpdGgodGhpcy5fdmFsdWUsIHZhbHVlKSkpIHtcbiAgICAgIHRoaXMuX3NldFNlbGVjdGVkKHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHdhc1NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQ7XG5cbiAgICAvLyBMaXN0IG9wdGlvbnMgdGhhdCBhcmUgc2VsZWN0ZWQgYXQgaW5pdGlhbGl6YXRpb24gY2FuJ3QgYmUgcmVwb3J0ZWQgcHJvcGVybHkgdG8gdGhlIGZvcm1cbiAgICAvLyBjb250cm9sLiBUaGlzIGlzIGJlY2F1c2UgaXQgdGFrZXMgc29tZSB0aW1lIHVudGlsIHRoZSBzZWxlY3Rpb24tbGlzdCBrbm93cyBhYm91dCBhbGxcbiAgICAvLyBhdmFpbGFibGUgb3B0aW9ucy4gQWxzbyBpdCBjYW4gaGFwcGVuIHRoYXQgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGhhcyBhbiBpbml0aWFsIHZhbHVlXG4gICAgLy8gdGhhdCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiBEZWZlcnJpbmcgdGhlIHZhbHVlIGNoYW5nZSByZXBvcnQgdG8gdGhlIG5leHQgdGljayBlbnN1cmVzXG4gICAgLy8gdGhhdCB0aGUgZm9ybSBjb250cm9sIHZhbHVlIGlzIG5vdCBiZWluZyBvdmVyd3JpdHRlbi5cbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCB8fCB3YXNTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5faW5wdXRzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHNldExpbmVzKHRoaXMuX2xpbmVzLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAvLyBXZSBoYXZlIHRvIGRlbGF5IHRoaXMgdW50aWwgdGhlIG5leHQgdGljayBpbiBvcmRlclxuICAgICAgLy8gdG8gYXZvaWQgY2hhbmdlZCBhZnRlciBjaGVja2VkIGVycm9ycy5cbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYWRGb2N1cyA9IHRoaXMuX2hhc0ZvY3VzO1xuICAgIGNvbnN0IG5ld0FjdGl2ZUl0ZW0gPSB0aGlzLnNlbGVjdGlvbkxpc3QuX3JlbW92ZU9wdGlvbkZyb21MaXN0KHRoaXMpO1xuXG4gICAgLy8gT25seSBtb3ZlIGZvY3VzIGlmIHRoaXMgb3B0aW9uIHdhcyBmb2N1c2VkIGF0IHRoZSB0aW1lIGl0IHdhcyBkZXN0cm95ZWQuXG4gICAgaWYgKGhhZEZvY3VzICYmIG5ld0FjdGl2ZUl0ZW0pIHtcbiAgICAgIG5ld0FjdGl2ZUl0ZW0uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogVG9nZ2xlcyB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSBvcHRpb24uICovXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICAvKiogQWxsb3dzIGZvciBwcm9ncmFtbWF0aWMgZm9jdXNpbmcgb2YgdGhlIG9wdGlvbi4gKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBpdGVtJ3MgdGV4dCBsYWJlbC4gSW1wbGVtZW50ZWQgYXMgYSBwYXJ0IG9mIHRoZSBGb2N1c0tleU1hbmFnZXIuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIGdldExhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLl90ZXh0ID8gdGhpcy5fdGV4dC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50IHx8ICcnIDogJyc7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGlzIGxpc3QgaXRlbSBzaG91bGQgc2hvdyBhIHJpcHBsZSBlZmZlY3Qgd2hlbiBjbGlja2VkLiAqL1xuICBfaXNSaXBwbGVEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVSaXBwbGUgfHwgdGhpcy5zZWxlY3Rpb25MaXN0LmRpc2FibGVSaXBwbGU7XG4gIH1cblxuICBfaGFuZGxlQ2xpY2soKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICh0aGlzLnNlbGVjdGlvbkxpc3QubXVsdGlwbGUgfHwgIXRoaXMuc2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuXG4gICAgICAvLyBFbWl0IGEgY2hhbmdlIGV2ZW50IGlmIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiB0aGUgb3B0aW9uIGNoYW5nZWQgdGhyb3VnaCB1c2VyIGludGVyYWN0aW9uLlxuICAgICAgdGhpcy5zZWxlY3Rpb25MaXN0Ll9lbWl0Q2hhbmdlRXZlbnQoW3RoaXNdKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlRm9jdXMoKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25MaXN0Ll9zZXRGb2N1c2VkT3B0aW9uKHRoaXMpO1xuICAgIHRoaXMuX2hhc0ZvY3VzID0gdHJ1ZTtcbiAgfVxuXG4gIF9oYW5kbGVCbHVyKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdC5fb25Ub3VjaGVkKCk7XG4gICAgdGhpcy5faGFzRm9jdXMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBSZXRyaWV2ZXMgdGhlIERPTSBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgaG9zdC4gKi9cbiAgX2dldEhvc3RFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIHRoZSBvcHRpb24uIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgaGFzIGNoYW5nZWQuICovXG4gIF9zZXRTZWxlY3RlZChzZWxlY3RlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChzZWxlY3RlZCA9PT0gdGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5kZXNlbGVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIEFuZ3VsYXIgdGhhdCB0aGUgb3B0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgaW4gdGhlIG5leHQgY2hhbmdlIGRldGVjdGlvbiBydW4uIE1haW5seVxuICAgKiB1c2VkIHRvIHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBsaXN0IG9wdGlvbiBpZiB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbiBsaXN0XG4gICAqIGNoYW5nZWQuXG4gICAqL1xuICBfbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG5cbi8qKlxuICogTWF0ZXJpYWwgRGVzaWduIGxpc3QgY29tcG9uZW50IHdoZXJlIGVhY2ggaXRlbSBpcyBhIHNlbGVjdGFibGUgb3B0aW9uLiBCZWhhdmVzIGFzIGEgbGlzdGJveC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgTWF0U2VsZWN0aW9uTGlzdGAgZnJvbSBgQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdGAgaW5zdGVhZC4gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS9tZGMtbWlncmF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBtaWdyYXRpbmcuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE3LjAuMFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtc2VsZWN0aW9uLWxpc3QnLFxuICBleHBvcnRBczogJ21hdFNlbGVjdGlvbkxpc3QnLFxuICBpbnB1dHM6IFsnZGlzYWJsZVJpcHBsZSddLFxuICBob3N0OiB7XG4gICAgJ3JvbGUnOiAnbGlzdGJveCcsXG4gICAgJ2NsYXNzJzogJ21hdC1zZWxlY3Rpb24tbGlzdCBtYXQtbGlzdC1iYXNlJyxcbiAgICAnKGtleWRvd24pJzogJ19rZXlkb3duKCRldmVudCknLFxuICAgICdbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV0nOiAnbXVsdGlwbGUnLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZC50b1N0cmluZygpJyxcbiAgICAnW2F0dHIudGFiaW5kZXhdJzogJ190YWJJbmRleCcsXG4gIH0sXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIHN0eWxlVXJsczogWydsaXN0LmNzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtNQVRfTEVHQUNZX1NFTEVDVElPTl9MSVNUX1ZBTFVFX0FDQ0VTU09SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdExlZ2FjeVNlbGVjdGlvbkxpc3RcbiAgZXh0ZW5kcyBfTWF0U2VsZWN0aW9uTGlzdEJhc2VcbiAgaW1wbGVtZW50cyBDYW5EaXNhYmxlUmlwcGxlLCBBZnRlckNvbnRlbnRJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgcHJpdmF0ZSBfbXVsdGlwbGUgPSB0cnVlO1xuICBwcml2YXRlIF9jb250ZW50SW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvKiogVGhlIEZvY3VzS2V5TWFuYWdlciB3aGljaCBoYW5kbGVzIGZvY3VzLiAqL1xuICBfa2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPE1hdExlZ2FjeUxpc3RPcHRpb24+O1xuXG4gIC8qKiBUaGUgb3B0aW9uIGNvbXBvbmVudHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIHNlbGVjdGlvbi1saXN0LiAqL1xuICBAQ29udGVudENoaWxkcmVuKE1hdExlZ2FjeUxpc3RPcHRpb24sIHtkZXNjZW5kYW50czogdHJ1ZX0pXG4gIG9wdGlvbnM6IFF1ZXJ5TGlzdDxNYXRMZWdhY3lMaXN0T3B0aW9uPjtcblxuICAvKiogRW1pdHMgYSBjaGFuZ2UgZXZlbnQgd2hlbmV2ZXIgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIGFuIG9wdGlvbiBjaGFuZ2VzLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TWF0TGVnYWN5U2VsZWN0aW9uTGlzdENoYW5nZT4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8TWF0TGVnYWN5U2VsZWN0aW9uTGlzdENoYW5nZT4oKTtcblxuICAvKiogVGhlbWUgY29sb3Igb2YgdGhlIHNlbGVjdGlvbiBsaXN0LiBUaGlzIHNldHMgdGhlIGNoZWNrYm94IGNvbG9yIGZvciBhbGwgbGlzdCBvcHRpb25zLiAqL1xuICBASW5wdXQoKSBjb2xvcjogVGhlbWVQYWxldHRlID0gJ2FjY2VudCc7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHVzZWQgZm9yIGNvbXBhcmluZyBhbiBvcHRpb24gYWdhaW5zdCB0aGUgc2VsZWN0ZWQgdmFsdWUgd2hlbiBkZXRlcm1pbmluZyB3aGljaFxuICAgKiBvcHRpb25zIHNob3VsZCBhcHBlYXIgYXMgc2VsZWN0ZWQuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgYW4gb3B0aW9ucy4gVGhlIHNlY29uZFxuICAgKiBvbmUgaXMgYSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3RlZCB2YWx1ZS4gQSBib29sZWFuIG11c3QgYmUgcmV0dXJuZWQuXG4gICAqL1xuICBASW5wdXQoKSBjb21wYXJlV2l0aDogKG8xOiBhbnksIG8yOiBhbnkpID0+IGJvb2xlYW4gPSAoYTEsIGEyKSA9PiBhMSA9PT0gYTI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBsaXN0IGlzIGRpc2FibGVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgLy8gVGhlIGBNYXRTZWxlY3Rpb25MaXN0YCBhbmQgYE1hdExpc3RPcHRpb25gIGFyZSB1c2luZyB0aGUgYE9uUHVzaGAgY2hhbmdlIGRldGVjdGlvblxuICAgIC8vIHN0cmF0ZWd5LiBUaGVyZWZvcmUgdGhlIG9wdGlvbnMgd2lsbCBub3QgY2hlY2sgZm9yIGFueSBjaGFuZ2VzIGlmIHRoZSBgTWF0U2VsZWN0aW9uTGlzdGBcbiAgICAvLyBjaGFuZ2VkIGl0cyBzdGF0ZS4gU2luY2Ugd2Uga25vdyB0aGF0IGEgY2hhbmdlIHRvIGBkaXNhYmxlZGAgcHJvcGVydHkgb2YgdGhlIGxpc3QgYWZmZWN0c1xuICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGUgb3B0aW9ucywgd2UgbWFudWFsbHkgbWFyayBlYWNoIG9wdGlvbiBmb3IgY2hlY2suXG4gICAgdGhpcy5fbWFya09wdGlvbnNGb3JDaGVjaygpO1xuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgc2VsZWN0aW9uIGlzIGxpbWl0ZWQgdG8gb25lIG9yIG11bHRpcGxlIGl0ZW1zIChkZWZhdWx0IG11bHRpcGxlKS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fbXVsdGlwbGUpIHtcbiAgICAgIGlmICh0aGlzLl9jb250ZW50SW5pdGlhbGl6ZWQgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdDYW5ub3QgY2hhbmdlIGBtdWx0aXBsZWAgbW9kZSBvZiBtYXQtc2VsZWN0aW9uLWxpc3QgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbXVsdGlwbGUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gbmV3IFNlbGVjdGlvbk1vZGVsKHRoaXMuX211bHRpcGxlLCB0aGlzLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9ucy4gKi9cbiAgc2VsZWN0ZWRPcHRpb25zID0gbmV3IFNlbGVjdGlvbk1vZGVsPE1hdExlZ2FjeUxpc3RPcHRpb24+KHRoaXMuX211bHRpcGxlKTtcblxuICAvKiogVGhlIHRhYmluZGV4IG9mIHRoZSBzZWxlY3Rpb24gbGlzdC4gKi9cbiAgX3RhYkluZGV4ID0gLTE7XG5cbiAgLyoqIFZpZXcgdG8gbW9kZWwgY2FsbGJhY2sgdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzZWxlY3RlZCBvcHRpb25zIGNoYW5nZS4gKi9cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKF86IGFueSkgPT4ge307XG5cbiAgLyoqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgdmFsdWUuICovXG4gIF92YWx1ZTogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiogVmlldyB0byBtb2RlbCBjYWxsYmFjayB0aGF0IHNob3VsZCBiZSBjYWxsZWQgaWYgdGhlIGxpc3Qgb3IgaXRzIG9wdGlvbnMgbG9zdCBmb2N1cy4gKi9cbiAgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBsaXN0IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSBfaXNEZXN0cm95ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbnRlbnRJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICB0aGlzLl9rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcjxNYXRMZWdhY3lMaXN0T3B0aW9uPih0aGlzLm9wdGlvbnMpXG4gICAgICAud2l0aFdyYXAoKVxuICAgICAgLndpdGhUeXBlQWhlYWQoKVxuICAgICAgLndpdGhIb21lQW5kRW5kKClcbiAgICAgIC8vIEFsbG93IGRpc2FibGVkIGl0ZW1zIHRvIGJlIGZvY3VzYWJsZS4gRm9yIGFjY2Vzc2liaWxpdHkgcmVhc29ucywgdGhlcmUgbXVzdCBiZSBhIHdheSBmb3JcbiAgICAgIC8vIHNjcmVlbiByZWFkZXIgdXNlcnMsIHRoYXQgYWxsb3dzIHJlYWRpbmcgdGhlIGRpZmZlcmVudCBvcHRpb25zIG9mIHRoZSBsaXN0LlxuICAgICAgLnNraXBQcmVkaWNhdGUoKCkgPT4gZmFsc2UpXG4gICAgICAud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWydzaGlmdEtleSddKTtcblxuICAgIGlmICh0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fc2V0T3B0aW9uc0Zyb21WYWx1ZXModGhpcy5fdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHRhYiBvdXQgb2YgdGhlIHNlbGVjdGlvbiBsaXN0LCBhbGxvdyBmb2N1cyB0byBlc2NhcGUuXG4gICAgdGhpcy5fa2V5TWFuYWdlci50YWJPdXQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2FsbG93Rm9jdXNFc2NhcGUoKSk7XG5cbiAgICAvLyBXaGVuIHRoZSBudW1iZXIgb2Ygb3B0aW9ucyBjaGFuZ2UsIHVwZGF0ZSB0aGUgdGFiaW5kZXggb2YgdGhlIHNlbGVjdGlvbiBsaXN0LlxuICAgIHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG5cbiAgICAvLyBTeW5jIGV4dGVybmFsIGNoYW5nZXMgdG8gdGhlIG1vZGVsIGJhY2sgdG8gdGhlIG9wdGlvbnMuXG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmFkZGVkKSB7XG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZXZlbnQuYWRkZWQpIHtcbiAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQucmVtb3ZlZCkge1xuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGV2ZW50LnJlbW92ZWQpIHtcbiAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2ZvY3VzTW9uaXRvclxuICAgICAgLm1vbml0b3IodGhpcy5fZWxlbWVudClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgICBpZiAob3JpZ2luID09PSAna2V5Ym9hcmQnIHx8IG9yaWdpbiA9PT0gJ3Byb2dyYW0nKSB7XG4gICAgICAgICAgbGV0IHRvRm9jdXMgPSAwO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdldChpKT8uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgdG9Gb2N1cyA9IGk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odG9Gb2N1cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IGRpc2FibGVSaXBwbGVDaGFuZ2VzID0gY2hhbmdlc1snZGlzYWJsZVJpcHBsZSddO1xuICAgIGNvbnN0IGNvbG9yQ2hhbmdlcyA9IGNoYW5nZXNbJ2NvbG9yJ107XG5cbiAgICBpZiAoXG4gICAgICAoZGlzYWJsZVJpcHBsZUNoYW5nZXMgJiYgIWRpc2FibGVSaXBwbGVDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB8fFxuICAgICAgKGNvbG9yQ2hhbmdlcyAmJiAhY29sb3JDaGFuZ2VzLmZpcnN0Q2hhbmdlKVxuICAgICkge1xuICAgICAgdGhpcy5fbWFya09wdGlvbnNGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2tleU1hbmFnZXI/LmRlc3Ryb3koKTtcbiAgICB0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgc2VsZWN0aW9uIGxpc3QuICovXG4gIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpIHtcbiAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgb2YgdGhlIG9wdGlvbnMuIFJldHVybnMgdGhlIG9wdGlvbnMgdGhhdCBjaGFuZ2VkIGFzIGEgcmVzdWx0LiAqL1xuICBzZWxlY3RBbGwoKTogTWF0TGVnYWN5TGlzdE9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKHRydWUpO1xuICB9XG5cbiAgLyoqIERlc2VsZWN0cyBhbGwgb2YgdGhlIG9wdGlvbnMuIFJldHVybnMgdGhlIG9wdGlvbnMgdGhhdCBjaGFuZ2VkIGFzIGEgcmVzdWx0LiAqL1xuICBkZXNlbGVjdEFsbCgpOiBNYXRMZWdhY3lMaXN0T3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9zZXRBbGxPcHRpb25zU2VsZWN0ZWQoZmFsc2UpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIGZvY3VzZWQgb3B0aW9uIG9mIHRoZSBzZWxlY3Rpb24tbGlzdC4gKi9cbiAgX3NldEZvY3VzZWRPcHRpb24ob3B0aW9uOiBNYXRMZWdhY3lMaXN0T3B0aW9uKSB7XG4gICAgdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbiBvcHRpb24gZnJvbSB0aGUgc2VsZWN0aW9uIGxpc3QgYW5kIHVwZGF0ZXMgdGhlIGFjdGl2ZSBpdGVtLlxuICAgKiBAcmV0dXJucyBDdXJyZW50bHktYWN0aXZlIGl0ZW0uXG4gICAqL1xuICBfcmVtb3ZlT3B0aW9uRnJvbUxpc3Qob3B0aW9uOiBNYXRMZWdhY3lMaXN0T3B0aW9uKTogTWF0TGVnYWN5TGlzdE9wdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5fZ2V0T3B0aW9uSW5kZXgob3B0aW9uKTtcblxuICAgIGlmIChvcHRpb25JbmRleCA+IC0xICYmIHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ID09PSBvcHRpb25JbmRleCkge1xuICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgb3B0aW9uIGlzIHRoZSBsYXN0IGl0ZW1cbiAgICAgIGlmIChvcHRpb25JbmRleCA+IDApIHtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKG9wdGlvbkluZGV4IC0gMSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbkluZGV4ID09PSAwICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShNYXRoLm1pbihvcHRpb25JbmRleCArIDEsIHRoaXMub3B0aW9ucy5sZW5ndGggLSAxKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgfVxuXG4gIC8qKiBQYXNzZXMgcmVsZXZhbnQga2V5IHByZXNzZXMgdG8gb3VyIGtleSBtYW5hZ2VyLiAqL1xuICBfa2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLl9rZXlNYW5hZ2VyO1xuICAgIGNvbnN0IHByZXZpb3VzRm9jdXNJbmRleCA9IG1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O1xuICAgIGNvbnN0IGhhc01vZGlmaWVyID0gaGFzTW9kaWZpZXJLZXkoZXZlbnQpO1xuXG4gICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICBjYXNlIFNQQUNFOlxuICAgICAgY2FzZSBFTlRFUjpcbiAgICAgICAgaWYgKCFoYXNNb2RpZmllciAmJiAhbWFuYWdlci5pc1R5cGluZygpKSB7XG4gICAgICAgICAgdGhpcy5fdG9nZ2xlRm9jdXNlZE9wdGlvbigpO1xuICAgICAgICAgIC8vIEFsd2F5cyBwcmV2ZW50IHNwYWNlIGZyb20gc2Nyb2xsaW5nIHRoZSBwYWdlIHNpbmNlIHRoZSBsaXN0IGhhcyBmb2N1c1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBUaGUgXCJBXCIga2V5IGdldHMgc3BlY2lhbCB0cmVhdG1lbnQsIGJlY2F1c2UgaXQncyB1c2VkIGZvciB0aGUgXCJzZWxlY3QgYWxsXCIgZnVuY3Rpb25hbGl0eS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleUNvZGUgPT09IEEgJiZcbiAgICAgICAgICB0aGlzLm11bHRpcGxlICYmXG4gICAgICAgICAgaGFzTW9kaWZpZXJLZXkoZXZlbnQsICdjdHJsS2V5JykgJiZcbiAgICAgICAgICAhbWFuYWdlci5pc1R5cGluZygpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHNob3VsZFNlbGVjdCA9IHRoaXMub3B0aW9ucy5zb21lKG9wdGlvbiA9PiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uc2VsZWN0ZWQpO1xuICAgICAgICAgIHRoaXMuX3NldEFsbE9wdGlvbnNTZWxlY3RlZChzaG91bGRTZWxlY3QsIHRydWUsIHRydWUpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5tdWx0aXBsZSAmJlxuICAgICAgKGtleUNvZGUgPT09IFVQX0FSUk9XIHx8IGtleUNvZGUgPT09IERPV05fQVJST1cpICYmXG4gICAgICBldmVudC5zaGlmdEtleSAmJlxuICAgICAgbWFuYWdlci5hY3RpdmVJdGVtSW5kZXggIT09IHByZXZpb3VzRm9jdXNJbmRleFxuICAgICkge1xuICAgICAgdGhpcy5fdG9nZ2xlRm9jdXNlZE9wdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXBvcnRzIGEgdmFsdWUgY2hhbmdlIHRvIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciAqL1xuICBfcmVwb3J0VmFsdWVDaGFuZ2UoKSB7XG4gICAgLy8gU3RvcCByZXBvcnRpbmcgdmFsdWUgY2hhbmdlcyBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBkZXN0cm95ZWQuIFRoaXMgYXZvaWRzXG4gICAgLy8gY2FzZXMgd2hlcmUgdGhlIGxpc3QgbWlnaHQgd3JvbmdseSByZXNldCBpdHMgdmFsdWUgb25jZSBpdCBpcyByZW1vdmVkLCBidXRcbiAgICAvLyB0aGUgZm9ybSBjb250cm9sIGlzIHN0aWxsIGxpdmUuXG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiAhdGhpcy5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0U2VsZWN0ZWRPcHRpb25WYWx1ZXMoKTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEVtaXRzIGEgY2hhbmdlIGV2ZW50IGlmIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiBhbiBvcHRpb24gY2hhbmdlZC4gKi9cbiAgX2VtaXRDaGFuZ2VFdmVudChvcHRpb25zOiBNYXRMZWdhY3lMaXN0T3B0aW9uW10pIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBNYXRMZWdhY3lTZWxlY3Rpb25MaXN0Q2hhbmdlKHRoaXMsIG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLiAqL1xuICB3cml0ZVZhbHVlKHZhbHVlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlcztcblxuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHZhbHVlcyB8fCBbXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEltcGxlbWVudGVkIGFzIGEgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci4gKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKiogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci4gKi9cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKiogU2V0cyB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHZhbHVlcy4gKi9cbiAgcHJpdmF0ZSBfc2V0T3B0aW9uc0Zyb21WYWx1ZXModmFsdWVzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiBvcHRpb24uX3NldFNlbGVjdGVkKGZhbHNlKSk7XG5cbiAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IHtcbiAgICAgICAgLy8gU2tpcCBvcHRpb25zIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIG1vZGVsLiBUaGlzIGFsbG93cyB1cyB0byBoYW5kbGUgY2FzZXNcbiAgICAgICAgLy8gd2hlcmUgdGhlIHNhbWUgcHJpbWl0aXZlIHZhbHVlIGlzIHNlbGVjdGVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICByZXR1cm4gb3B0aW9uLnNlbGVjdGVkID8gZmFsc2UgOiB0aGlzLmNvbXBhcmVXaXRoKG9wdGlvbi52YWx1ZSwgdmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChjb3JyZXNwb25kaW5nT3B0aW9uKSB7XG4gICAgICAgIGNvcnJlc3BvbmRpbmdPcHRpb24uX3NldFNlbGVjdGVkKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHZhbHVlcyBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucy4gKi9cbiAgcHJpdmF0ZSBfZ2V0U2VsZWN0ZWRPcHRpb25WYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUb2dnbGVzIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudGx5IGZvY3VzZWQgb3B0aW9uIGlmIGVuYWJsZWQuICovXG4gIHByaXZhdGUgX3RvZ2dsZUZvY3VzZWRPcHRpb24oKTogdm9pZCB7XG4gICAgbGV0IGZvY3VzZWRJbmRleCA9IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O1xuXG4gICAgaWYgKGZvY3VzZWRJbmRleCAhPSBudWxsICYmIHRoaXMuX2lzVmFsaWRJbmRleChmb2N1c2VkSW5kZXgpKSB7XG4gICAgICBsZXQgZm9jdXNlZE9wdGlvbjogTWF0TGVnYWN5TGlzdE9wdGlvbiA9IHRoaXMub3B0aW9ucy50b0FycmF5KClbZm9jdXNlZEluZGV4XTtcblxuICAgICAgaWYgKGZvY3VzZWRPcHRpb24gJiYgIWZvY3VzZWRPcHRpb24uZGlzYWJsZWQgJiYgKHRoaXMuX211bHRpcGxlIHx8ICFmb2N1c2VkT3B0aW9uLnNlbGVjdGVkKSkge1xuICAgICAgICBmb2N1c2VkT3B0aW9uLnRvZ2dsZSgpO1xuXG4gICAgICAgIC8vIEVtaXQgYSBjaGFuZ2UgZXZlbnQgYmVjYXVzZSB0aGUgZm9jdXNlZCBvcHRpb24gY2hhbmdlZCBpdHMgc3RhdGUgdGhyb3VnaCB1c2VyXG4gICAgICAgIC8vIGludGVyYWN0aW9uLlxuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoW2ZvY3VzZWRPcHRpb25dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgc3RhdGUgb24gYWxsIG9mIHRoZSBvcHRpb25zXG4gICAqIGFuZCBlbWl0cyBhbiBldmVudCBpZiBhbnl0aGluZyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0QWxsT3B0aW9uc1NlbGVjdGVkKFxuICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgc2tpcERpc2FibGVkPzogYm9vbGVhbixcbiAgICBpc1VzZXJJbnB1dD86IGJvb2xlYW4sXG4gICk6IE1hdExlZ2FjeUxpc3RPcHRpb25bXSB7XG4gICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFueXRoaW5nIGNoYW5nZWQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvXG4gICAgLy8gZW1pdCB0aGUgY2hhbmdlZCBldmVudCB3aGVuIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkLlxuICAgIGNvbnN0IGNoYW5nZWRPcHRpb25zOiBNYXRMZWdhY3lMaXN0T3B0aW9uW10gPSBbXTtcblxuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICBpZiAoKCFza2lwRGlzYWJsZWQgfHwgIW9wdGlvbi5kaXNhYmxlZCkgJiYgb3B0aW9uLl9zZXRTZWxlY3RlZChpc1NlbGVjdGVkKSkge1xuICAgICAgICBjaGFuZ2VkT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoY2hhbmdlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9yZXBvcnRWYWx1ZUNoYW5nZSgpO1xuXG4gICAgICBpZiAoaXNVc2VySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fZW1pdENoYW5nZUV2ZW50KGNoYW5nZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVXRpbGl0eSB0byBlbnN1cmUgYWxsIGluZGV4ZXMgYXJlIHZhbGlkLlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGluZGV4IGlzIHZhbGlkIGZvciBvdXIgbGlzdCBvZiBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBfaXNWYWxpZEluZGV4KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHNwZWNpZmllZCBsaXN0IG9wdGlvbi4gKi9cbiAgcHJpdmF0ZSBfZ2V0T3B0aW9uSW5kZXgob3B0aW9uOiBNYXRMZWdhY3lMaXN0T3B0aW9uKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKG9wdGlvbik7XG4gIH1cblxuICAvKiogTWFya3MgYWxsIHRoZSBvcHRpb25zIHRvIGJlIGNoZWNrZWQgaW4gdGhlIG5leHQgY2hhbmdlIGRldGVjdGlvbiBydW4uICovXG4gIHByaXZhdGUgX21hcmtPcHRpb25zRm9yQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi5fbWFya0ZvckNoZWNrKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSB0YWJpbmRleCBmcm9tIHRoZSBzZWxlY3Rpb24gbGlzdCBhbmQgcmVzZXRzIGl0IGJhY2sgYWZ0ZXJ3YXJkcywgYWxsb3dpbmcgdGhlIHVzZXJcbiAgICogdG8gdGFiIG91dCBvZiBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgbGlzdCBmcm9tIGNhcHR1cmluZyBmb2N1cyBhbmQgcmVkaXJlY3RpbmcgaXQgYmFjayB3aXRoaW5cbiAgICogdGhlIGxpc3QsIGNyZWF0aW5nIGEgZm9jdXMgdHJhcCBpZiBpdCB1c2VyIHRyaWVzIHRvIHRhYiBhd2F5LlxuICAgKi9cbiAgcHJpdmF0ZSBfYWxsb3dGb2N1c0VzY2FwZSgpIHtcbiAgICB0aGlzLl90YWJJbmRleCA9IC0xO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl90YWJJbmRleCA9IDA7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBVcGRhdGVzIHRoZSB0YWJpbmRleCBiYXNlZCB1cG9uIGlmIHRoZSBzZWxlY3Rpb24gbGlzdCBpcyBlbXB0eS4gKi9cbiAgcHJpdmF0ZSBfdXBkYXRlVGFiSW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy5fdGFiSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwID8gLTEgOiAwO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWF0LWxpc3QtaXRlbS1jb250ZW50XCJcbiAgW2NsYXNzLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlXT1cImNoZWNrYm94UG9zaXRpb24gPT0gJ2FmdGVyJ1wiPlxuXG4gIDxkaXYgbWF0LXJpcHBsZVxuICAgIGNsYXNzPVwibWF0LWxpc3QtaXRlbS1yaXBwbGVcIlxuICAgIFttYXRSaXBwbGVUcmlnZ2VyXT1cIl9nZXRIb3N0RWxlbWVudCgpXCJcbiAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPVwiX2lzUmlwcGxlRGlzYWJsZWQoKVwiPjwvZGl2PlxuXG4gIDxtYXQtcHNldWRvLWNoZWNrYm94XG4gICAgKm5nSWY9XCJzZWxlY3Rpb25MaXN0Lm11bHRpcGxlXCJcbiAgICBbc3RhdGVdPVwic2VsZWN0ZWQgPyAnY2hlY2tlZCcgOiAndW5jaGVja2VkJ1wiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+PC9tYXQtcHNldWRvLWNoZWNrYm94PlxuXG4gIDxkaXYgY2xhc3M9XCJtYXQtbGlzdC10ZXh0XCIgI3RleHQ+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXQtbGlzdC1hdmF0YXJdLCBbbWF0LWxpc3QtaWNvbl0sIFttYXRMaXN0QXZhdGFyXSwgW21hdExpc3RJY29uXVwiPlxuICA8L25nLWNvbnRlbnQ+XG5cbjwvZGl2PlxuIl19