@microsoft/windows-admin-center-sdk 2.186.0 → 2.297.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 (236) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/strings.json +1 -1
  15. package/angular/assets/strings/sv-SE/strings.json +1 -1
  16. package/angular/assets/strings/tr-TR/strings.json +1 -1
  17. package/angular/assets/strings/zh-CN/strings.json +1 -1
  18. package/angular/assets/strings/zh-TW/strings.json +1 -1
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +1103 -1209
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
  22. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  23. package/angular/esm2015/src/controls/actions/actions.module.js +2 -2
  24. package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -2
  25. package/angular/esm2015/src/controls/actions/items/action-button/action-button-renderer.component.js +5 -5
  26. package/angular/esm2015/src/controls/actions/items/action-dropdown/action-dropdown.component.js +31 -13
  27. package/angular/esm2015/src/controls/actions/items/action-item.component.js +7 -3
  28. package/angular/esm2015/src/controls/badge/badge-base.component.js +2 -13
  29. package/angular/esm2015/src/controls/badge/bugfixes-feature-badge.component.js +42 -70
  30. package/angular/esm2015/src/controls/badge/coming-soon-badge.component.js +42 -70
  31. package/angular/esm2015/src/controls/badge/credssp-enabled-badge.component.js +42 -70
  32. package/angular/esm2015/src/controls/badge/critical-badge.component.js +42 -70
  33. package/angular/esm2015/src/controls/badge/custom-badge.component.js +42 -70
  34. package/angular/esm2015/src/controls/badge/feedback-badge.component.js +42 -70
  35. package/angular/esm2015/src/controls/badge/improvement-feature-badge.component.js +42 -70
  36. package/angular/esm2015/src/controls/badge/new-badge.component.js +42 -70
  37. package/angular/esm2015/src/controls/badge/new-feature-badge.component.js +42 -70
  38. package/angular/esm2015/src/controls/badge/preview-badge.component.js +42 -70
  39. package/angular/esm2015/src/controls/badge/warning-badge.component.js +42 -70
  40. package/angular/esm2015/src/controls/breadcrumb/breadcrumb.component.js +6 -6
  41. package/angular/esm2015/src/controls/breadcrumb-header/breadcrumb-header.component.js +2 -2
  42. package/angular/esm2015/src/controls/data-table/data-table-column.component.js +5 -3
  43. package/angular/esm2015/src/controls/data-table/data-table.component.js +20 -26
  44. package/angular/esm2015/src/controls/data-table/extensions/data-table-column-picker-extension.js +2 -1
  45. package/angular/esm2015/src/controls/details/details.component.js +2 -2
  46. package/angular/esm2015/src/controls/dialog/base-dialog.component.js +1 -1
  47. package/angular/esm2015/src/controls/dialog/confirmation-dialog/confirmation-dialog.component.js +20 -30
  48. package/angular/esm2015/src/controls/dialog/dialog.service.js +7 -3
  49. package/angular/esm2015/src/controls/dropdown/dropdown.component.js +2 -2
  50. package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +50 -40
  51. package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +3 -3
  52. package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +14 -13
  53. package/angular/esm2015/src/controls/form/form-field/datetime/datetime-form-field.component.js +2 -2
  54. package/angular/esm2015/src/controls/form/form-field/form-field.component.js +16 -4
  55. package/angular/esm2015/src/controls/form/form-field/options-form-field/form-field-option.component.js +5 -3
  56. package/angular/esm2015/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.js +25 -21
  57. package/angular/esm2015/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.js +5 -5
  58. package/angular/esm2015/src/controls/form/form-field/search/search-form-field.component.js +2 -2
  59. package/angular/esm2015/src/controls/form/form-field/tags/tags-form-field.component.js +2 -2
  60. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +4 -10
  61. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.js +1 -1
  62. package/angular/esm2015/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.js +17 -1
  63. package/angular/esm2015/src/controls/icon/layered-icon/layered-icon.component.js +12 -1
  64. package/angular/esm2015/src/controls/icon/layered-icon/status/status-icon.component.js +53 -9
  65. package/angular/esm2015/src/controls/loading-wheel/loading-wheel.component.js +17 -1
  66. package/angular/esm2015/src/controls/master-view/master-view.component.js +34 -30
  67. package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
  68. package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
  69. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +13 -29
  70. package/angular/esm2015/src/controls/schema-form/schema-form-content.component.js +7 -4
  71. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +23 -35
  72. package/angular/esm2015/src/controls/settings/settings.component.js +28 -1
  73. package/angular/esm2015/src/controls/settings/settings.module.js +8 -3
  74. package/angular/esm2015/src/controls/tooltip/tooltip-host.component.js +16 -5
  75. package/angular/esm2015/src/controls/wizard/wizard.component.js +38 -6
  76. package/angular/esm2015/src/directives/clamp/clamp.directive.js +26 -7
  77. package/angular/esm2015/src/directives/discard/discard.directive.js +2 -2
  78. package/angular/esm2015/src/directives/markdown/markdown.directive.js +5 -18
  79. package/angular/esm2015/src/generated/strings.js +1 -1
  80. package/angular/esm2015/src/guards/experiment.guard.service.js +14 -1
  81. package/angular/esm2015/src/pipes/boolean-converter-pipe.js +11 -1
  82. package/angular/esm2015/src/pipes/byte-unit-converter-pipe.js +11 -1
  83. package/angular/esm2015/src/pipes/enum-converter-pipe.js +16 -1
  84. package/angular/esm2015/src/pipes/format-pipe.js +11 -1
  85. package/angular/esm2015/src/pipes/highlight-pipe.js +11 -1
  86. package/angular/esm2015/src/pipes/yesno-converter-pipe.js +11 -1
  87. package/angular/esm2015/src/service/gateway.service.js +8 -5
  88. package/angular/esm2015/src/service/notification.service.js +23 -1
  89. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +1042 -1069
  90. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  91. package/angular/package.json +0 -1
  92. package/angular/src/controls/actions/items/action-dropdown/action-dropdown.component.d.ts +2 -0
  93. package/angular/src/controls/actions/items/action-item.component.d.ts +11 -1
  94. package/angular/src/controls/badge/badge-base.component.d.ts +0 -4
  95. package/angular/src/controls/data-table/data-table-column.component.d.ts +2 -1
  96. package/angular/src/controls/data-table/data-table.component.d.ts +4 -0
  97. package/angular/src/controls/dialog/base-dialog.component.d.ts +1 -1
  98. package/angular/src/controls/form/form-field/form-field.component.d.ts +10 -1
  99. package/angular/src/controls/form/form-field/options-form-field/form-field-option.component.d.ts +5 -1
  100. package/angular/src/controls/form/validation-alert/validation-alert.component.d.ts +0 -4
  101. package/angular/src/controls/form/validation-alert/validation-alert.d.ts +0 -1
  102. package/angular/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.d.ts +16 -0
  103. package/angular/src/controls/icon/layered-icon/layered-icon.component.d.ts +11 -0
  104. package/angular/src/controls/icon/layered-icon/status/status-icon.component.d.ts +13 -2
  105. package/angular/src/controls/loading-wheel/loading-wheel.component.d.ts +16 -0
  106. package/angular/src/controls/master-view/master-view.component.d.ts +1 -0
  107. package/angular/src/controls/pivot/pivot-tab.component.d.ts +0 -1
  108. package/angular/src/controls/pivot/pivot.component.d.ts +4 -0
  109. package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +6 -5
  110. package/angular/src/controls/settings/settings.component.d.ts +27 -0
  111. package/angular/src/controls/settings/settings.module.d.ts +7 -6
  112. package/angular/src/controls/tooltip/tooltip-host.component.d.ts +1 -1
  113. package/angular/src/controls/wizard/wizard.component.d.ts +23 -0
  114. package/angular/src/directives/clamp/clamp.directive.d.ts +5 -0
  115. package/angular/src/directives/markdown/markdown.directive.d.ts +2 -3
  116. package/angular/src/generated/strings.d.ts +9 -0
  117. package/angular/src/guards/experiment.guard.service.d.ts +13 -0
  118. package/angular/src/pipes/boolean-converter-pipe.d.ts +10 -0
  119. package/angular/src/pipes/byte-unit-converter-pipe.d.ts +10 -0
  120. package/angular/src/pipes/enum-converter-pipe.d.ts +15 -0
  121. package/angular/src/pipes/format-pipe.d.ts +10 -0
  122. package/angular/src/pipes/highlight-pipe.d.ts +10 -0
  123. package/angular/src/pipes/yesno-converter-pipe.d.ts +10 -0
  124. package/angular/src/service/gateway.service.d.ts +3 -1
  125. package/angular/src/service/notification.service.d.ts +22 -0
  126. package/core/base/environment.d.ts +7 -0
  127. package/core/base/environment.js.map +1 -1
  128. package/core/base/versioned-object.js +2 -2
  129. package/core/base/versioned-object.js.map +1 -1
  130. package/core/data/cim-stream.js +8 -1
  131. package/core/data/cim-stream.js.map +1 -1
  132. package/core/data/core-environment.d.ts +4 -0
  133. package/core/data/core-environment.js +1 -0
  134. package/core/data/core-environment.js.map +1 -1
  135. package/core/data/crypto.js +10 -9
  136. package/core/data/crypto.js.map +1 -1
  137. package/core/data/file-transfer.js +5 -1
  138. package/core/data/file-transfer.js.map +1 -1
  139. package/core/data/gateway-connection.d.ts +11 -1
  140. package/core/data/gateway-connection.js +51 -9
  141. package/core/data/gateway-connection.js.map +1 -1
  142. package/core/data/http-constants.d.ts +5 -1
  143. package/core/data/http-constants.js +5 -1
  144. package/core/data/http-constants.js.map +1 -1
  145. package/core/data/net.d.ts +15 -11
  146. package/core/data/net.js +44 -41
  147. package/core/data/net.js.map +1 -1
  148. package/core/data/node-connection.d.ts +2 -2
  149. package/core/data/node-connection.js.map +1 -1
  150. package/core/data/powershell-stream.js +11 -3
  151. package/core/data/powershell-stream.js.map +1 -1
  152. package/core/data/powershell.d.ts +17 -1
  153. package/core/data/powershell.js +35 -9
  154. package/core/data/powershell.js.map +1 -1
  155. package/core/data/settings-manager.d.ts +9 -0
  156. package/core/data/settings-manager.js +18 -1
  157. package/core/data/settings-manager.js.map +1 -1
  158. package/core/generated/powershell-scripts.d.ts +5 -4
  159. package/core/generated/powershell-scripts.js +5 -4
  160. package/core/generated/powershell-scripts.js.map +1 -1
  161. package/core/host/host-core-manager.d.ts +36 -0
  162. package/core/host/host-core-manager.js +134 -0
  163. package/core/host/host-core-manager.js.map +1 -0
  164. package/core/host/host-core-message-type.d.ts +12 -0
  165. package/core/host/host-core-message-type.js +17 -0
  166. package/core/host/host-core-message-type.js.map +1 -0
  167. package/core/host/host-core-messages.d.ts +14 -0
  168. package/core/host/host-core-messages.js +3 -0
  169. package/core/host/host-core-messages.js.map +1 -0
  170. package/core/manifest/manifest-loader.d.ts +2 -1
  171. package/core/manifest/manifest-loader.js +27 -18
  172. package/core/manifest/manifest-loader.js.map +1 -1
  173. package/core/notification/notification.js +4 -0
  174. package/core/notification/notification.js.map +1 -1
  175. package/core/security/authorization-manager.d.ts +44 -0
  176. package/core/security/authorization-manager.js +111 -5
  177. package/core/security/authorization-manager.js.map +1 -1
  178. package/core/security/sign-on-manager.d.ts +109 -0
  179. package/core/security/sign-on-manager.js +119 -0
  180. package/core/security/sign-on-manager.js.map +1 -0
  181. package/core/security/tag-manager.js.map +1 -1
  182. package/core/shared/cluster-inventory/cluster-inventory-cache.js +3 -2
  183. package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
  184. package/core/shared/gateway-inventory/gateway-inventory-cache.d.ts +1 -1
  185. package/core/shared/gateway-inventory/gateway-inventory-cache.js +1 -1
  186. package/core/shared/gateway-inventory/gateway-inventory-cache.js.map +1 -1
  187. package/core/shared/server-inventory/server-inventory-cache.js +2 -1
  188. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  189. package/core/shared/tool-inventory/tool-inventory-cache.js +1 -1
  190. package/core/shared/tool-inventory/tool-inventory-cache.js.map +1 -1
  191. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  192. package/e2e/assets/strings/de-DE/strings.json +1 -1
  193. package/e2e/assets/strings/es-ES/strings.json +1 -1
  194. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  195. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  196. package/e2e/assets/strings/it-IT/strings.json +1 -1
  197. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  198. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  199. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  200. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  201. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  202. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  203. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  204. package/e2e/assets/strings/strings.json +1 -1
  205. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  206. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  207. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  208. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  209. package/package.json +5 -5
  210. package/styles/css/fonts.css +2 -2
  211. package/styles/css/main.css +1 -1
  212. package/styles/fonts/ServMDL2/ServMDL2-4.62.woff +0 -0
  213. package/styles/fonts/ServMDL2/ServMDL2.json +238 -2039
  214. package/styles/fonts/ServMDL2/ServMDL2.scss +238 -2039
  215. package/tools/gulp-manifest-resource/index.js +3 -1
  216. package/tools/gulp-manifest-resource/index.js.map +1 -1
  217. package/tools/gulp-ps-cim/index.js +1 -1
  218. package/tools/gulp-ps-cim/index.js.map +1 -1
  219. package/tools/gulp-ps-cim/powershell-cim-config-schema.json +1 -1
  220. package/tools/gulp-ps-code/index.js +36 -2
  221. package/tools/gulp-ps-code/index.js.map +1 -1
  222. package/tools/gulp-ps-code/ps-code-convert.js +4 -8
  223. package/tools/gulp-ps-code/ps-code-convert.js.map +1 -1
  224. package/tools/gulp-ps-resjson/index.js +79 -74
  225. package/tools/gulp-ps-resjson/index.js.map +1 -1
  226. package/tools/module-template/build/pipelines/codeinspector.yml +27 -0
  227. package/tools/module-template/gulpfile.ts/common/lint.ts +3 -3
  228. package/tools/module-template/gulpfile.ts/common/pack.ts +14 -14
  229. package/tools/module-template/gulpfile.ts/common/ui-test-automation.ts +40 -0
  230. package/tools/module-template/gulpfile.ts/common/utilities.ts +10 -10
  231. package/tools/module-template/gulpfile.ts/common/validate.ts +14 -4
  232. package/tools/module-template/gulpfile.ts/index.ts +20 -8
  233. package/tools/wac-cli/src/upgrade/file-updater.d.ts +1 -0
  234. package/tools/wac-cli/src/upgrade/file-updater.js +7 -1
  235. package/tools/wac-cli/src/upgrade/file-updater.js.map +1 -1
  236. package/styles/fonts/ServMDL2/ServMDL2-4.33.woff +0 -0
@@ -78,7 +78,7 @@ function ChecklistFormFieldComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1)
78
78
  const ctx_r1 = i0.ɵɵnextContext(2);
79
79
  i0.ɵɵadvance(2);
80
80
  i0.ɵɵproperty("id", ctx_r1.idBag.selectAllCheckbox)("checked", ctx_r1.isAllOptionsSelected)("disabled", ctx_r1.loadingOrDisabled);
81
- i0.ɵɵattribute("aria-label", ctx_r1.selectAllLabel)("aria-describedby", ctx_r1.idBag.selectAllCheckboxDescription)("aria-checked", ctx_r1.isAllOptionsSelected);
81
+ i0.ɵɵattribute("aria-label", ctx_r1.selectAllLabel)("aria-describedby", ctx_r1.idBag.selectAllCheckboxDescription)("aria-checked", ctx_r1.isAllOptionsSelected)("aria-required", ctx_r1.required);
82
82
  i0.ɵɵadvance(2);
83
83
  i0.ɵɵtextInterpolate(ctx_r1.selectAllLabel);
84
84
  i0.ɵɵadvance(1);
@@ -135,7 +135,7 @@ function ChecklistFormFieldComponent_div_1_ng_container_2_Template(rf, ctx) { if
135
135
  } }
136
136
  function ChecklistFormFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
137
137
  i0.ɵɵelementStart(0, "div", 3);
138
- i0.ɵɵtemplate(1, ChecklistFormFieldComponent_div_1_div_1_Template, 7, 9, "div", 4);
138
+ i0.ɵɵtemplate(1, ChecklistFormFieldComponent_div_1_div_1_Template, 7, 10, "div", 4);
139
139
  i0.ɵɵtemplate(2, ChecklistFormFieldComponent_div_1_ng_container_2_Template, 9, 11, "ng-container", 5);
140
140
  i0.ɵɵelementEnd();
141
141
  } if (rf & 2) {
@@ -560,4 +560,4 @@ export { ChecklistFormFieldComponent };
560
560
  type: HostBinding,
561
561
  args: ['attr.aria-label']
562
562
  }] }); })();
563
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tsaXN0LWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2NoZWNrbGlzdC9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY2hlY2tsaXN0L2NoZWNrbGlzdC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZ0IsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFFOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUE2QyxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7SUFnQjlGLGdDQUVhOzs7O0lBRmdELHFDQUFvQix5Q0FBQSw4QkFBQTs7OztJQU16RSxnREFFd0I7SUFEcEIsb1hBQStEO0lBRW5FLGlCQUF3Qjs7OztJQUhELGtGQUEwRCwrRUFBQSwyQkFBQTs7O0lBSHpGLHFDQUMyQjtJQUN2QiwySEFLYztJQUNsQixpQkFBYTs7OztJQVIrQyxxQ0FBb0IseUNB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QUUsbUJBQW1CLENBQUMsS0FBSztnQkFDL0IsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSw2RkFBNkY7Z0JBQ3BHLElBQUksRUFBd0I7b0JBQ3hCLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNO29CQUNoQyxNQUFNLEVBQUUsU0FBUztvQkFDakIsVUFBVSxFQUFFO3dCQUNSOzRCQUNJLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNOzRCQUNoQyxNQUFNLEVBQUUsd0JBQXdCOzRCQUNoQyxJQUFJLEVBQUUsT0FBTzs0QkFDYixLQUFLLEVBQUUscUZBQXFGOzRCQUM1RixRQUFRLEVBQUUsSUFBSTt5QkFDakI7d0JBQ0Q7NEJBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07NEJBQ2hDLE1BQU0sRUFBRSxTQUFTOzRCQUNqQixJQUFJLEVBQUUsT0FBTzs0QkFDYixLQUFLLEVBQUUscUZBQXFGOzRCQUM1RixRQUFRLEVBQUUsSUFBSTt5QkFDakI7cUJBQ0o7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLFdBQVcsRUFBRSxDQUFDO3FCQUNqQjtpQkFDSjthQUNKO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07Z0JBQ2hDLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLDhGQUE4RjthQUN4RztTQUNKO0tBQ0osQ0FBQztxQ0FrQ2dCLFFBQVE7R0E3QmIsMkJBQTJCLENBb092QztTQXBPWSwyQkFBMkI7dUZBQTNCLDJCQUEyQjtjQUp2QyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGtDQUFrQztnQkFDNUMsV0FBVyxFQUFFLHVDQUF1QzthQUN2RDsyREFnQlUsdUJBQXVCO2tCQUQ3QixLQUFLO1lBT0ssU0FBUztrQkFEbkIsV0FBVzttQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2FjY2Vzc2liaWxpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYUFycmF5UHJvcGVydHksIFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFEYXRhVHlwZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1zdG9yZSc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy1mb3JtLWZpZWxkL2Zvcm0tZmllbGQtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNtZUludGVybmFsT3B0aW9uc0Zvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMtZm9ybS1maWVsZC9vcHRpb25zLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJjaGVja2xpc3RcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCIgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiIFtzaG91bGRVc2VPd25PcHRpb25zTGlzdF09XCJ0cnVlXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nSWY9XCIhZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICA8L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0lmPVwiZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWUtc2NoZW1hLWZpZWxkLWhvc3QgW3Byb3BlcnR5U2NoZW1hXT1cImdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihpdGVtLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoZGF0YSldPVwiZGF0YS5vYmplY3RPcHRpb25zICYmIGRhdGEub2JqZWN0T3B0aW9uc1tpdGVtLnZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NtZS1zY2hlbWEtZmllbGQtaG9zdD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc21lLW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcbi8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjbGFzcyBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogYW55W10ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc3Qgc3RhdGljT3B0aW9uczogYW55W10gPSB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLml0ZW1zIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGR5bmFtaWNPcHRpb25zOiBhbnlbXSA9IHRoaXMucmVzb2x2ZUNvbXBvbmVudE1lbWJlcih0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRpY09wdGlvbnMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzdGF0aWNPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGR5bmFtaWNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZHluYW1pY09wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRGF0YVR5cGUoKSB7XHJcbiAgICAgICAgU2NoZW1hRGF0YVR5cGVTdG9yZS5yZWdpc3RlckRhdGFUeXBlKHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3QsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjaGVjayBsaXN0IGNvbnRyb2wgYmluZGluZyB0byBjaGVjayBsaXN0IG9iamVjdCBkYXRhLicsXHJcbiAgICAgICAgICAgIGxvYWRlckNvbXBvbmVudDogQ2hlY2tsaXN0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihtYWluT3B0aW9uVmFsdWU6IHN0cmluZyk6IFNjaGVtYU9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBjb25zdCBvYmplY3RPcHRpb25zID0gPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZSh0aGlzLnByb3BlcnR5U2NoZW1hLCAnb2JqZWN0T3B0aW9ucycpO1xyXG4gICAgICAgIGlmIChvYmplY3RPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbjogU2NoZW1hT2JqZWN0UHJvcGVydHkgPVxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZShvYmplY3RPcHRpb25zLCBtYWluT3B0aW9uVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0T3B0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlTY2hlbWEucmVxdWlyZWQgJiYgdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnRzID0gdGhpcy5maWVsZEhvc3RDb21wb25lbnRzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5vYmplY3RPcHRpb25zW3RoaXMuZGF0YS5vcHRpb25zW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSB0aGlzLmRhdGEub3B0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uLmlzVmFsaWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBJbXBsZW1lbnRhdGlvbiBvZiBhIGZvcm0gZmllbGQgZm9yIGEgc2V0IG9mIC5zbWUtY2hlY2tib3hcclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICBkZXNjcmlwdGlvbjogJ0EgY2hlY2sgbGlzdCBjb250cm9sIGJpbmRpbmcgdG8gY2hlY2sgbGlzdCBvYmplY3QgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQsXHJcbiAgICBwcmVkZWZpbmVkT2JqZWN0UHJvcGVydGllczogW1xyXG4gICAgICAgIDxTY2hlbWFBcnJheVByb3BlcnR5PntcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpdGVtOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgbmFtZTogJ29iamVjdE9wdGlvbnMnLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAxPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAyPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAzPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgPFNjaGVtYUFycmF5UHJvcGVydHk+e1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLkFycmF5LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtcycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuU3RhdGljT3B0aW9ucycsXHJcbiAgICAgICAgICAgIGl0ZW06IDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkxhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLlZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnaXRlbXNCaW5kaW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5EeW5hbWljT3B0aW9ucydcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiY2hlY2tsaXN0XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudDxUVmFsdWU+IGV4dGVuZHMgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50PFRWYWx1ZVtdPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0NoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIG1vZGUgb2YgdGhlIGNoZWNrbGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbXVsdGlwbGUgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvdWxkVXNlT3duT3B0aW9uc0xpc3QgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VPd25PcHRpb25zTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLmlzU2VsZWN0ZWQgPSB2YWx1ZS5vcHRpb25zICYmIHZhbHVlLm9wdGlvbnMuaW5kZXhPZihvcHRpb24udmFsdWUpICE9PSAtMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVPcHRpb24ob3B0aW9uOiBGb3JtRmllbGRPcHRpb25Db21wb25lbnQsIHNlbGVjdDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uLmlzU2VsZWN0ZWQgPT09IHNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlLm9wdGlvbnMucHVzaChvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUub3B0aW9ucy5zcGxpY2UodmFsdWUub3B0aW9ucy5pbmRleE9mKG9wdGlvbi52YWx1ZSksIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIG9wdGlvbi5pc1NlbGVjdGVkID0gc2VsZWN0O1xyXG5cclxuICAgICAgICAgICAgc3VwZXIuc3luY1NlbGVjdGlvbkNoYW5nZWQodmFsdWUub3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50b2dnbGVPcHRpb24ob3B0aW9uLCBzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3Q6IGJvb2xlYW4gPSAhdGhpcy5pc0FsbE9wdGlvbnNTZWxlY3RlZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsT3B0aW9uc1NlbGVjdGVkID09PSBzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IGFsbCBpcyBub3Qgc3VwcG9ydGVkIGluIHNpbmdsZSBzZWxlY3QgbW9kZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdmFsdWUub3B0aW9ucyA9IHNlbGVjdCA/IDxhbnk+dGhpcy5vcHRpb25zLnJlZHVjZSgoZW5hYmxlZFZhbHVlcywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgIWN1cnJlbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkVmFsdWVzLnB1c2goY3VycmVudC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZFZhbHVlcztcclxuICAgICAgICAgICAgfSwgW10pIDogPGFueT5bXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hlY2tib3hJZChmaXJzdDogYm9vbGVhbiwgbGFzdDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChmaXJzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5maXJzdENoZWNrYm94O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGFzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5sYXN0Q2hlY2tib3g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzeW5jU2VsZWN0aW9uQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25DaGVja2JveEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGdvVG9JbmRleDogbnVtYmVyID0gbnVsbDtcclxuICAgICAgICBsZXQgZW5kSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgZW5kSW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Ib21lOiB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FbmQ6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gZW5kSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVXBBcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdvVG9JbmRleCA9IGluZGV4IC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsKGdvVG9JbmRleCkpIHtcclxuICAgICAgICAgICAgbGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwgJiYgZ29Ub0luZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja2JveCA9IDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3h9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBnb1RvSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoZWNrYm94ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5pZEJhZy5jaGVja2JveH0ke2dvVG9JbmRleH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrYm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgY2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoZWNrYm94Q291bnQoaW5kZXg/OiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgdG90YWwgPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGxldCBjdXJyZW50SW5kZXggPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGluZGV4KSA/IDAgOiBpbmRleCArIDE7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdEFsbCkge1xyXG4gICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICBjdXJyZW50SW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkNoZWNrbGlzdC5pbmRleERlc2NyaXB0aW9uLmZvcm1hdChjdXJyZW50SW5kZXgsIHRvdGFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwIHx8IGtleXMuZXZlcnkoayA9PiAhdGhpcy52YWx1ZVtrXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIj5cclxuICA8ZGl2ICpuZ0lmPVwidmFsdWVcIiByb2xlPVwiZ3JvdXBcIiBjbGFzcz1cInNtZS1mb3JtLWZpZWxkLWVkaXRvciBzbWUtZm9ybS1maWVsZC13aWR0aFwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIm11bHRpcGxlICYmIHNob3dTZWxlY3RBbGxcIiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtY2hlY2tib3gtaGVhZGVyXCI+XHJcbiAgICAgIDxsYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cImlkQmFnLnNlbGVjdEFsbENoZWNrYm94XCIgKGtleWRvd24pPVwib25DaGVja2JveEtleWRvd24oJGV2ZW50LCAtMSlcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWxlY3RBbGxMYWJlbFwiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvblwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsT3B0aW9ucygpXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCIgLz5cclxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e3NlbGVjdEFsbExhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPGRpdiBbaWRdPVwiaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvblwiIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj57eyBnZXRDaGVja2JveENvdW50KCkgfX08L2Rpdj5cclxuICAgICAgPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtbWFyZ2luLWJvdHRvbS14eHNcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cImlkQmFnLmNoZWNrYm94ICsgaVwiIChrZXlkb3duKT1cIm9uQ2hlY2tib3hLZXlkb3duKCRldmVudCwgaSlcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50b1N0cmluZygpXCIgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZEJhZy5jaGVja2JveERlc2NyaXB0aW9uICsgaVwiIChjaGFuZ2UpPVwidG9nZ2xlT3B0aW9uKG9wdGlvbiwgIW9wdGlvbi5pc1NlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZCB8fCBvcHRpb24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7b3B0aW9uLnRvU3RyaW5nKCl9fTwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXYgW2lkXT1cImlkQmFnLmNoZWNrYm94RGVzY3JpcHRpb24gKyBpXCIgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiPnt7IGdldENoZWNrYm94Q291bnQoaSkgfX08L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmaWVsZHNldCAqbmdJZj1cIm9wdGlvbi5zdWJGb3JtVGVtcGxhdGVcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgIW9wdGlvbi5pc1NlbGVjdGVkIHx8IG9wdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICAgIDxzbWUtb3B0aW9uLXRlbXBsYXRlLWxvYWRlciBbdGVtcGxhdGVdPVwib3B0aW9uLnN1YkZvcm1UZW1wbGF0ZVwiIFtkYXRhXT1cIm9wdGlvblwiIFtvcHRpb25JbmRleF09XCJpXCI+XHJcbiAgICAgICAgPC9zbWUtb3B0aW9uLXRlbXBsYXRlLWxvYWRlcj5cclxuICAgICAgPC9maWVsZHNldD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tsaXN0LWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2NoZWNrbGlzdC9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY2hlY2tsaXN0L2NoZWNrbGlzdC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZ0IsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFFOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUE2QyxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7SUFnQjlGLGdDQUVhOzs7O0lBRmdELHFDQUFvQix5Q0FBQSw4QkFBQTs7OztJQU16RSxnREFFd0I7SUFEcEIsb1hBQStEO0lBRW5FLGlCQUF3Qjs7OztJQUhELGtGQUEwRCwrRUFBQSwyQkFBQTs7O0lBSHpGLHFDQUMyQjtJQUN2QiwySEFLYztJQUNsQixpQkFBYTs7OztJQVIrQyxxQ0FBb0IseUNB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IEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2FjY2Vzc2liaWxpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYUFycmF5UHJvcGVydHksIFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFEYXRhVHlwZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1zdG9yZSc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy1mb3JtLWZpZWxkL2Zvcm0tZmllbGQtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNtZUludGVybmFsT3B0aW9uc0Zvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMtZm9ybS1maWVsZC9vcHRpb25zLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJjaGVja2xpc3RcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCIgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiIFtzaG91bGRVc2VPd25PcHRpb25zTGlzdF09XCJ0cnVlXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nSWY9XCIhZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICA8L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0lmPVwiZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWUtc2NoZW1hLWZpZWxkLWhvc3QgW3Byb3BlcnR5U2NoZW1hXT1cImdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihpdGVtLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoZGF0YSldPVwiZGF0YS5vYmplY3RPcHRpb25zICYmIGRhdGEub2JqZWN0T3B0aW9uc1tpdGVtLnZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NtZS1zY2hlbWEtZmllbGQtaG9zdD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc21lLW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcbi8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjbGFzcyBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogYW55W10ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc3Qgc3RhdGljT3B0aW9uczogYW55W10gPSB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLml0ZW1zIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGR5bmFtaWNPcHRpb25zOiBhbnlbXSA9IHRoaXMucmVzb2x2ZUNvbXBvbmVudE1lbWJlcih0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRpY09wdGlvbnMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzdGF0aWNPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGR5bmFtaWNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZHluYW1pY09wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRGF0YVR5cGUoKSB7XHJcbiAgICAgICAgU2NoZW1hRGF0YVR5cGVTdG9yZS5yZWdpc3RlckRhdGFUeXBlKHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3QsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjaGVjayBsaXN0IGNvbnRyb2wgYmluZGluZyB0byBjaGVjayBsaXN0IG9iamVjdCBkYXRhLicsXHJcbiAgICAgICAgICAgIGxvYWRlckNvbXBvbmVudDogQ2hlY2tsaXN0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihtYWluT3B0aW9uVmFsdWU6IHN0cmluZyk6IFNjaGVtYU9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBjb25zdCBvYmplY3RPcHRpb25zID0gPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZSh0aGlzLnByb3BlcnR5U2NoZW1hLCAnb2JqZWN0T3B0aW9ucycpO1xyXG4gICAgICAgIGlmIChvYmplY3RPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbjogU2NoZW1hT2JqZWN0UHJvcGVydHkgPVxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZShvYmplY3RPcHRpb25zLCBtYWluT3B0aW9uVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0T3B0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlTY2hlbWEucmVxdWlyZWQgJiYgdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnRzID0gdGhpcy5maWVsZEhvc3RDb21wb25lbnRzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5vYmplY3RPcHRpb25zW3RoaXMuZGF0YS5vcHRpb25zW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSB0aGlzLmRhdGEub3B0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uLmlzVmFsaWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBJbXBsZW1lbnRhdGlvbiBvZiBhIGZvcm0gZmllbGQgZm9yIGEgc2V0IG9mIC5zbWUtY2hlY2tib3hcclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICBkZXNjcmlwdGlvbjogJ0EgY2hlY2sgbGlzdCBjb250cm9sIGJpbmRpbmcgdG8gY2hlY2sgbGlzdCBvYmplY3QgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQsXHJcbiAgICBwcmVkZWZpbmVkT2JqZWN0UHJvcGVydGllczogW1xyXG4gICAgICAgIDxTY2hlbWFBcnJheVByb3BlcnR5PntcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpdGVtOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgbmFtZTogJ29iamVjdE9wdGlvbnMnLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAxPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAyPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAzPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgPFNjaGVtYUFycmF5UHJvcGVydHk+e1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLkFycmF5LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtcycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuU3RhdGljT3B0aW9ucycsXHJcbiAgICAgICAgICAgIGl0ZW06IDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkxhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLlZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnaXRlbXNCaW5kaW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5EeW5hbWljT3B0aW9ucydcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiY2hlY2tsaXN0XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudDxUVmFsdWU+IGV4dGVuZHMgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50PFRWYWx1ZVtdPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0NoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIG1vZGUgb2YgdGhlIGNoZWNrbGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbXVsdGlwbGUgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvdWxkVXNlT3duT3B0aW9uc0xpc3QgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VPd25PcHRpb25zTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLmlzU2VsZWN0ZWQgPSB2YWx1ZS5vcHRpb25zICYmIHZhbHVlLm9wdGlvbnMuaW5kZXhPZihvcHRpb24udmFsdWUpICE9PSAtMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVPcHRpb24ob3B0aW9uOiBGb3JtRmllbGRPcHRpb25Db21wb25lbnQsIHNlbGVjdDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uLmlzU2VsZWN0ZWQgPT09IHNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlLm9wdGlvbnMucHVzaChvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUub3B0aW9ucy5zcGxpY2UodmFsdWUub3B0aW9ucy5pbmRleE9mKG9wdGlvbi52YWx1ZSksIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIG9wdGlvbi5pc1NlbGVjdGVkID0gc2VsZWN0O1xyXG5cclxuICAgICAgICAgICAgc3VwZXIuc3luY1NlbGVjdGlvbkNoYW5nZWQodmFsdWUub3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50b2dnbGVPcHRpb24ob3B0aW9uLCBzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3Q6IGJvb2xlYW4gPSAhdGhpcy5pc0FsbE9wdGlvbnNTZWxlY3RlZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsT3B0aW9uc1NlbGVjdGVkID09PSBzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IGFsbCBpcyBub3Qgc3VwcG9ydGVkIGluIHNpbmdsZSBzZWxlY3QgbW9kZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdmFsdWUub3B0aW9ucyA9IHNlbGVjdCA/IDxhbnk+dGhpcy5vcHRpb25zLnJlZHVjZSgoZW5hYmxlZFZhbHVlcywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgIWN1cnJlbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkVmFsdWVzLnB1c2goY3VycmVudC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZFZhbHVlcztcclxuICAgICAgICAgICAgfSwgW10pIDogPGFueT5bXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hlY2tib3hJZChmaXJzdDogYm9vbGVhbiwgbGFzdDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChmaXJzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5maXJzdENoZWNrYm94O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGFzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5sYXN0Q2hlY2tib3g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzeW5jU2VsZWN0aW9uQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25DaGVja2JveEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGdvVG9JbmRleDogbnVtYmVyID0gbnVsbDtcclxuICAgICAgICBsZXQgZW5kSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgZW5kSW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Ib21lOiB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FbmQ6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gZW5kSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVXBBcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdvVG9JbmRleCA9IGluZGV4IC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsKGdvVG9JbmRleCkpIHtcclxuICAgICAgICAgICAgbGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwgJiYgZ29Ub0luZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja2JveCA9IDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3h9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBnb1RvSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoZWNrYm94ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5pZEJhZy5jaGVja2JveH0ke2dvVG9JbmRleH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrYm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgY2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoZWNrYm94Q291bnQoaW5kZXg/OiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgdG90YWwgPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGxldCBjdXJyZW50SW5kZXggPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGluZGV4KSA/IDAgOiBpbmRleCArIDE7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdEFsbCkge1xyXG4gICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICBjdXJyZW50SW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkNoZWNrbGlzdC5pbmRleERlc2NyaXB0aW9uLmZvcm1hdChjdXJyZW50SW5kZXgsIHRvdGFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwIHx8IGtleXMuZXZlcnkoayA9PiAhdGhpcy52YWx1ZVtrXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIj5cclxuICA8ZGl2ICpuZ0lmPVwidmFsdWVcIiByb2xlPVwiZ3JvdXBcIiBjbGFzcz1cInNtZS1mb3JtLWZpZWxkLWVkaXRvciBzbWUtZm9ybS1maWVsZC13aWR0aFwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIm11bHRpcGxlICYmIHNob3dTZWxlY3RBbGxcIiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtY2hlY2tib3gtaGVhZGVyXCI+XHJcbiAgICAgIDxsYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cImlkQmFnLnNlbGVjdEFsbENoZWNrYm94XCIgKGtleWRvd24pPVwib25DaGVja2JveEtleWRvd24oJGV2ZW50LCAtMSlcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWxlY3RBbGxMYWJlbFwiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvblwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsT3B0aW9ucygpXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiIC8+XHJcbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3tzZWxlY3RBbGxMYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgW2lkXT1cImlkQmFnLnNlbGVjdEFsbENoZWNrYm94RGVzY3JpcHRpb25cIiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCI+e3sgZ2V0Q2hlY2tib3hDb3VudCgpIH19PC9kaXY+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtY2hlY2tib3ggc21lLW1hcmdpbi1ib3R0b20teHhzXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJpZEJhZy5jaGVja2JveCArIGlcIiAoa2V5ZG93bik9XCJvbkNoZWNrYm94S2V5ZG93bigkZXZlbnQsIGkpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udG9TdHJpbmcoKVwiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWRCYWcuY2hlY2tib3hEZXNjcmlwdGlvbiArIGlcIiAoY2hhbmdlKT1cInRvZ2dsZU9wdGlvbihvcHRpb24sICFvcHRpb24uaXNTZWxlY3RlZClcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiIFthdHRyLmFyaWEtY2hlY2tlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgb3B0aW9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e29wdGlvbi50b1N0cmluZygpfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2IFtpZF09XCJpZEJhZy5jaGVja2JveERlc2NyaXB0aW9uICsgaVwiIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj57eyBnZXRDaGVja2JveENvdW50KGkpIH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZmllbGRzZXQgKm5nSWY9XCJvcHRpb24uc3ViRm9ybVRlbXBsYXRlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkIHx8ICFvcHRpb24uaXNTZWxlY3RlZCB8fCBvcHRpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICA8c21lLW9wdGlvbi10ZW1wbGF0ZS1sb2FkZXIgW3RlbXBsYXRlXT1cIm9wdGlvbi5zdWJGb3JtVGVtcGxhdGVcIiBbZGF0YV09XCJvcHRpb25cIiBbb3B0aW9uSW5kZXhdPVwiaVwiPlxyXG4gICAgICAgIDwvc21lLW9wdGlvbi10ZW1wbGF0ZS1sb2FkZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8c21lLXZhbGlkYXRpb24tYWxlcnQgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtdmFsaWRhdGlvbi1hbGVydD5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==
@@ -140,14 +140,14 @@ function ComboboxFormFieldComponent_ng_template_16_Template(rf, ctx) { if (rf &
140
140
  const ctx_r9 = i0.ɵɵnextContext();
141
141
  i0.ɵɵclassProp("sme-selected", option_r22.isSelected);
142
142
  i0.ɵɵproperty("disabled", option_r22.disabled);
143
- i0.ɵɵattribute("aria-selected", option_r22.isSelected)("aria-label", option_r22.toString());
143
+ i0.ɵɵattribute("aria-selected", option_r22.isSelected)("aria-label", option_r22.toString())("data-uta-id", option_r22.utaId ? option_r22.utaId : option_r22.value);
144
144
  i0.ɵɵadvance(1);
145
145
  i0.ɵɵproperty("smeTooltip", option_r22.disabled ? null : option_r22.resolvedTooltipTemplate)("smeTooltipContext", option_r22.disabled ? null : option_r22.tooltipContext || option_r22);
146
146
  i0.ɵɵadvance(1);
147
147
  i0.ɵɵclassProp("sme-arrange-ellipsis", !ctx_r9.overflowWrap)("sme-combobox-option-wrap", ctx_r9.overflowWrap);
148
148
  i0.ɵɵproperty("title", option_r22.resolvedTitle);
149
149
  i0.ɵɵadvance(1);
150
- i0.ɵɵtextInterpolate(option_r22.toString());
150
+ i0.ɵɵtextInterpolate1("", option_r22.toString(), " ");
151
151
  } }
152
152
  function ComboboxFormFieldComponent_ng_template_18_Template(rf, ctx) { if (rf & 1) {
153
153
  const _r27 = i0.ɵɵgetCurrentView();
@@ -156,9 +156,10 @@ function ComboboxFormFieldComponent_ng_template_18_Template(rf, ctx) { if (rf &
156
156
  i0.ɵɵelementStart(2, "input", 28);
157
157
  i0.ɵɵlistener("change", function ComboboxFormFieldComponent_ng_template_18_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r27); const option_r25 = ctx.$implicit; const ctx_r26 = i0.ɵɵnextContext(); return ctx_r26.toggleOption(option_r25, !option_r25.isSelected); });
158
158
  i0.ɵɵelementEnd();
159
- i0.ɵɵelementStart(3, "span", 29);
160
- i0.ɵɵelementStart(4, "span", 30);
161
- i0.ɵɵtext(5);
159
+ i0.ɵɵtext(3, " [disabled]=\"option.disabled\" class=\"sme-layout-absolute sme-position-inset-none\" /> ");
160
+ i0.ɵɵelementStart(4, "span", 29);
161
+ i0.ɵɵelementStart(5, "span", 30);
162
+ i0.ɵɵtext(6);
162
163
  i0.ɵɵelementEnd();
163
164
  i0.ɵɵelementEnd();
164
165
  i0.ɵɵelementEnd();
@@ -167,15 +168,15 @@ function ComboboxFormFieldComponent_ng_template_18_Template(rf, ctx) { if (rf &
167
168
  const option_r25 = ctx.$implicit;
168
169
  const ctx_r11 = i0.ɵɵnextContext();
169
170
  i0.ɵɵadvance(2);
170
- i0.ɵɵproperty("checked", option_r25.isSelected)("disabled", option_r25.disabled);
171
- i0.ɵɵattribute("aria-checked", option_r25.isSelected)("aria-label", option_r25.toString());
172
- i0.ɵɵadvance(1);
171
+ i0.ɵɵproperty("checked", option_r25.isSelected);
172
+ i0.ɵɵattribute("aria-checked", option_r25.isSelected)("aria-label", option_r25.toString())("data-uta-id", option_r25.utaId ? option_r25.utaId : option_r25.value);
173
+ i0.ɵɵadvance(2);
173
174
  i0.ɵɵclassProp("sme-combobox-option-wrap", ctx_r11.overflowWrap);
174
175
  i0.ɵɵproperty("smeTooltip", option_r25.disabled ? null : option_r25.resolvedTooltipTemplate)("title", option_r25.resolvedTitle)("smeTooltipContext", option_r25.disabled ? null : option_r25.tooltipContext || option_r25);
175
176
  i0.ɵɵadvance(1);
176
177
  i0.ɵɵclassProp("sme-arrange-ellipsis", !ctx_r11.overflowWrap);
177
178
  i0.ɵɵadvance(1);
178
- i0.ɵɵtextInterpolate(option_r25.toString());
179
+ i0.ɵɵtextInterpolate1("", option_r25.toString(), " ");
179
180
  } }
180
181
  const _c5 = function (a0) { return { "max-width.px": a0 }; };
181
182
  const _c6 = function () { return { "max-width": "initial" }; };
@@ -488,7 +489,7 @@ let ComboboxFormFieldComponent = class ComboboxFormFieldComponent extends SmeInt
488
489
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.multiSelectTemplate = _t.first);
489
490
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listboxElement = _t.first);
490
491
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropDown = _t.first);
491
- } }, inputs: { multiple: "multiple", overflowWrap: "overflowWrap", maintainSearch: "maintainSearch", dropdownApplyFormFieldOffsetWidth: "dropdownApplyFormFieldOffsetWidth" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c4, decls: 20, vars: 30, consts: [[3, "formField"], [1, "sme-combobox", "sme-focus-zone", "sme-form-field-editor", 3, "autoToggle", "disabled", "calculateHeight", "dropdownApplyFormFieldOffsetWidth", "toggled"], ["dropDown", ""], [1, "sme-combobox-header", "sme-dropdown-toggle", 3, "keydown", "keypress"], ["dropdownHeader", ""], ["type", "text", "role", "combobox", "readonly", "", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "value", "placeholder", "click"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], [1, "sme-icon", "sme-icon-chevronDown"], ["role", "listbox", 1, "sme-dropdown-content", "sme-dropdown-content-inherit-container-height", 3, "ngStyle", "id", "keydown"], ["listbox", ""], [3, "sme-padding-squish-v-xs", "keydown", 4, "ngIf"], ["class", "sme-checkbox sme-dropdown-interaction-enabled", "role", "option", 3, "sme-layout-none", 4, "ngIf"], [4, "ngIf"], [3, "alert"], ["singleSelectTemplate", ""], ["multiSelectTemplate", ""], [3, "keydown"], ["name", "searchStringValue", "type", "search", 3, "disableSearchButton", "placeholder", "label", "id", "count", "ngModel", "ngModelChange"], ["role", "option", 1, "sme-checkbox", "sme-dropdown-interaction-enabled"], [1, "sme-position-stretch-h", "sme-arrange-word-break-all"], ["type", "checkbox", "role", "checkbox", 1, "sme-layout-absolute", "sme-position-inset-none", 3, "checked", "change"], ["aria-hidden", "true"], [4, "ngFor", "ngForOf", "ngForTrackBy"], ["smeTemplateOutlet", "", 3, "template", "data"], ["type", "button", "role", "option", 3, "disabled", "click"], [3, "smeTooltip", "smeTooltipContext"], [1, "sme-layout-float-left", 3, "title"], ["type", "checkbox", "role", "checkbox", 1, "sme-layout-absolute", "sme-position-inset-none", 3, "checked", "disabled", "change"], ["aria-hidden", "true", 1, "sme-position-stretch-h", "sme-layout-float-left", 3, "smeTooltip", "title", "smeTooltipContext"], [1, "sme-position-stretch-h", "sme-layout-float-left"]], template: function ComboboxFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
492
+ } }, inputs: { multiple: "multiple", overflowWrap: "overflowWrap", maintainSearch: "maintainSearch", dropdownApplyFormFieldOffsetWidth: "dropdownApplyFormFieldOffsetWidth" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c4, decls: 20, vars: 30, consts: [[3, "formField"], [1, "sme-combobox", "sme-focus-zone", "sme-form-field-editor", 3, "autoToggle", "disabled", "calculateHeight", "dropdownApplyFormFieldOffsetWidth", "toggled"], ["dropDown", ""], [1, "sme-combobox-header", "sme-dropdown-toggle", 3, "keydown", "keypress"], ["dropdownHeader", ""], ["type", "text", "role", "combobox", "readonly", "", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "value", "placeholder", "click"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], [1, "sme-icon", "sme-icon-chevronDown"], ["role", "listbox", 1, "sme-dropdown-content", "sme-dropdown-content-inherit-container-height", 3, "ngStyle", "id", "keydown"], ["listbox", ""], [3, "sme-padding-squish-v-xs", "keydown", 4, "ngIf"], ["class", "sme-checkbox sme-dropdown-interaction-enabled", "role", "option", 3, "sme-layout-none", 4, "ngIf"], [4, "ngIf"], [3, "alert"], ["singleSelectTemplate", ""], ["multiSelectTemplate", ""], [3, "keydown"], ["name", "searchStringValue", "type", "search", 3, "disableSearchButton", "placeholder", "label", "id", "count", "ngModel", "ngModelChange"], ["role", "option", 1, "sme-checkbox", "sme-dropdown-interaction-enabled"], [1, "sme-position-stretch-h", "sme-arrange-word-break-all"], ["type", "checkbox", "role", "checkbox", 1, "sme-layout-absolute", "sme-position-inset-none", 3, "checked", "change"], ["aria-hidden", "true"], [4, "ngFor", "ngForOf", "ngForTrackBy"], ["smeTemplateOutlet", "", 3, "template", "data"], ["type", "button", "role", "option", 3, "disabled", "click"], [3, "smeTooltip", "smeTooltipContext"], [1, "sme-layout-float-left", 3, "title"], ["type", "checkbox", "role", "checkbox", 3, "checked", "change"], ["aria-hidden", "true", 1, "sme-position-stretch-h", "sme-layout-float-left", 3, "smeTooltip", "title", "smeTooltipContext"], [1, "sme-position-stretch-h", "sme-layout-float-left"]], template: function ComboboxFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
492
493
  const _r28 = i0.ɵɵgetCurrentView();
493
494
  i0.ɵɵelementStart(0, "sme-form-field-layout", 0);
494
495
  i0.ɵɵelementStart(1, "sme-dropdown", 1, 2);
@@ -512,8 +513,8 @@ let ComboboxFormFieldComponent = class ComboboxFormFieldComponent extends SmeInt
512
513
  i0.ɵɵelementEnd();
513
514
  i0.ɵɵelementEnd();
514
515
  i0.ɵɵelement(15, "sme-validation-alert", 14);
515
- i0.ɵɵtemplate(16, ComboboxFormFieldComponent_ng_template_16_Template, 4, 13, "ng-template", null, 15, i0.ɵɵtemplateRefExtractor);
516
- i0.ɵɵtemplate(18, ComboboxFormFieldComponent_ng_template_18_Template, 6, 12, "ng-template", null, 16, i0.ɵɵtemplateRefExtractor);
516
+ i0.ɵɵtemplate(16, ComboboxFormFieldComponent_ng_template_16_Template, 4, 14, "ng-template", null, 15, i0.ɵɵtemplateRefExtractor);
517
+ i0.ɵɵtemplate(18, ComboboxFormFieldComponent_ng_template_18_Template, 7, 12, "ng-template", null, 16, i0.ɵɵtemplateRefExtractor);
517
518
  i0.ɵɵelementEnd();
518
519
  } if (rf & 2) {
519
520
  const _r0 = i0.ɵɵreference(2);
@@ -644,4 +645,4 @@ export { ComboboxFormFieldComponent };
644
645
  }], dropdownApplyFormFieldOffsetWidth: [{
645
646
  type: Input
646
647
  }], dropdownService: [], onSearchStringChange: [], updatePosition: [] }); })();
647
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkMsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0Qs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QU9DLGNBQWM7a0JBRHBCLEtBQUs7WUFPQyxpQ0FBaUM7a0JBRHZDLEtBQUs7WUFJRSxlQUFlLE1BMk1oQixvQkFBb0IsTUFNbkIsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERlYm91bmNlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgS2V5Q29kZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9hY2Nlc3NpYmlsaXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBTbWVJbmplY3QgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGVjb3JhdG9ycy9pbmplY3Rpb24uZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBTaW1wbGVQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYUFycmF5UHJvcGVydHksIFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTbWVJbnRlcm5hbE9wdGlvbnNGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zLWZvcm0tZmllbGQvb3B0aW9ucy1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBWYWx1ZU9yQXJyYXk8VD4gPSBUIHwgVFtdO1xyXG4vLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNtZS1mb3JtLWZpZWxkICNmaWVsZCB0eXBlPVwiY29tYm9ib3hcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiIFtyZXF1aXJlZF09XCJwcm9wZXJ0eVNjaGVtYS5yZXF1aXJlZFwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiEhKGV2YWxFeHByZXNzaW9uKHByb3BlcnR5U2NoZW1hLnJlYWRvbmx5Q29uZGl0aW9uKSlcIlxyXG4gICAgICAgIFtsb2FkaW5nXT1cIiEhKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uICYmIGV2YWxFeHByZXNzaW9uKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuYnVzeUNvbmRpdGlvbikpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiISEocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24gJiYgZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24pKSB8fCAhIShwcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuYnVzeUNvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmJ1c3lDb25kaXRpb24pKVwiXHJcbiAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cInJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21WYWxpZGF0aW9uKSgkZXZlbnQpXCJcclxuICAgICAgICAoY3VzdG9tQXN5bmNWYWxpZGF0ZSk9XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgcmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyKSgkZXZlbnQpXCJcclxuICAgICAgICBbcGVuZGluZ01lc3NhZ2VdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIGxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5wZW5kaW5nTWVzc2FnZSlcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWRdPVwic2hvdWxkQ3VzdG9tQXN5bmNWYWxpZGF0aW9uQmVEaXNhYmxlZCgpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURlYm91bmNlVGltZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgK3Byb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEub3B0aW9ucyAmJiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLnBsYWNlaG9sZGVyKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c21lLW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLml0ZW1zXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIj48L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLml0ZW1zQmluZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVzb2x2ZUNvbXBvbmVudE1lbWJlcihwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLml0ZW1zQmluZGluZylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgW2xhYmVsXT1cImxvY2FsaXplKGl0ZW0ubGFiZWwpXCI+PC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcbi8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjbGFzcyBDb21ib2JveEZvcm1GaWVsZExvYWRlckNvbXBvbmVudCBleHRlbmRzIFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQge1xyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBJbXBsZW1lbnRhdGlvbiBvZiBhIGZvcm0gZmllbGQgY29tYm8gYm94XHJcbiAqL1xyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICBmb3JtYXQ6ICdjb21ib2JveCcsXHJcbiAgICBkZXNjcmlwdGlvbjogJ2EgY29tYm9ib3ggY29udHJvbCBiaW5kaW5nIHRvIHN0cmluZyBkYXRhLicsXHJcbiAgICBsb2FkZXJDb21wb25lbnQ6IENvbWJvYm94Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgb3B0aW9uUHJvcGVydGllczogW1xyXG4gICAgICAgIDxTY2hlbWFBcnJheVByb3BlcnR5PntcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICBuYW1lOiAnaXRlbXMnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLlN0YXRpY09wdGlvbnMnLFxyXG4gICAgICAgICAgICBpdGVtOiA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3QsXHJcbiAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdyZXNvdXJjZS1zdHJpbmctcGlja2VyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5MYWJlbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5WYWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db3VudDogMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgbmFtZTogJ2l0ZW1zQmluZGluZycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuRHluYW1pY09wdGlvbnMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgbmFtZTogJ2J1c3lDb25kaXRpb24nLFxyXG4gICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6QnVzeSBDb25kaXRpb24nXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdyZXNvdXJjZS1zdHJpbmctcGlja2VyJyxcclxuICAgICAgICAgICAgbmFtZTogJ3BsYWNlaG9sZGVyJyxcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOlBsYWNlaG9sZGVyJ1xyXG4gICAgICAgIH1cclxuICAgIF1cclxufSlcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1mb3JtLWZpZWxkW3R5cGU9XCJjb21ib2JveFwiXSxzbWUtZm9ybS1maWVsZFt0eXBlPVwic2VsZWN0XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hGb3JtRmllbGRDb21wb25lbnQ8VD4gZXh0ZW5kcyBTbWVJbnRlcm5hbE9wdGlvbnNGb3JtRmllbGRDb21wb25lbnQ8QXJyYXk8VD4+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnQ29tYm9ib3hGb3JtRmllbGRDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3NpbmdsZVNlbGVjdFRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIHB1YmxpYyBzaW5nbGVTZWxlY3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdtdWx0aVNlbGVjdFRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIHB1YmxpYyBtdWx0aVNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2xpc3Rib3gnKVxyXG4gICAgcHVibGljIGxpc3Rib3hFbGVtZW50OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2Ryb3BEb3duJylcclxuICAgIHB1YmxpYyBkcm9wRG93bjogRHJvcGRvd25Db21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtdWx0aXBsZTogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBieSBkZWZhdWx0IHdpbGwgc2hvdyBlbGxpcHNpc1xyXG4gICAgLy8gb3RoZXJ3aXNlIHNob3cgd3JhcHBlZCB0ZXh0XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG92ZXJmbG93V3JhcDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZSBpZiByZXNldCBzZWFyY2ggc3RyaW5nIG9uIGNvbGxhcHNlIGRyb3Bkb3duXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWFpbnRhaW5TZWFyY2g6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGRyb3Bkb3duIHdpbGwgdXNlIHRoZSBzbWUtZm9ybS1maWVsZCB0byBsaW1pdCBpdHMgbWF4LXdpZHRoXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoID0gdHJ1ZTtcclxuXHJcbiAgICBAU21lSW5qZWN0KERyb3Bkb3duU2VydmljZSlcclxuICAgIHByaXZhdGUgZHJvcGRvd25TZXJ2aWNlOiBEcm9wZG93blNlcnZpY2U7XHJcblxyXG4gICAgcHVibGljIGdldCBpc0ZpbHRlcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFN0cmluZyAmJiB0aGlzLnNlYXJjaFN0cmluZy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXRlbVRlbXBsYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gdGhpcy5tdWx0aVNlbGVjdFRlbXBsYXRlIDogdGhpcy5zaW5nbGVTZWxlY3RUZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBDb21ib2JveEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWFpbnRhaW5TZWFyY2ggPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMga2V5cHJlc3MgZXZlbnRzIG9uIHRoZSBkcm9wZG93biB0b2dnbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uVG9nZ2xlS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICAvLyBmb3IgYWxsIG90aGVyIGNhc2VzLCBzZW5kIHRvIGF1dG9jb21wbGV0ZVxyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVBdXRvQ29tcGxldGUoZXZlbnQua2V5Q29kZSk7XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBhbGwga2V5c1xyXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRvZ2dsZWQgc3RhdGUgY2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Ecm9wZG93blRvZ2dsZWQoZXhwYW5kZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoZXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgLy8gU2luZ2xlIHNlbGVjdGlvbiBvcHRpb24gd2lkdGggbmVlZCB0byBiZSByZXN0cmljdGVkIGJ5IHRoZSBkcm9wZG93blxyXG4gICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaW5nbGVPcHRpb25XaWR0aCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaGFibGUgJiYgIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuc2VhcmNoU3RyaW5nKSAmJiAhdGhpcy5tYWludGFpblNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZm9jdXNPbiA9IHRoaXMubGlzdGJveEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cIm9wdGlvblwiXVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScpO1xyXG4gICAgICAgICAgICBpZiAoIWZvY3VzT24pIHtcclxuICAgICAgICAgICAgICAgIGZvY3VzT24gPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5saXN0Ym94RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZpcnN0T3B0aW9uKCk6IEhUTUxFbGVtZW50IHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGVja2JveGVzID0gKDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrYm94ID0gPEhUTUxFbGVtZW50PmNoZWNrYm94ZXMuaXRlbShpKTtcclxuICAgICAgICAgICAgICAgIGlmIChEb20uaXNGb2N1c2FibGUoY2hlY2tib3gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrYm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b25bcm9sZT1cIm9wdGlvblwiXScpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IDxIVE1MRWxlbWVudD5vcHRpb25zLml0ZW0oaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoRG9tLmlzRm9jdXNhYmxlKG9wdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBrZXlkb3duIGV2ZW50cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblRvZ2dsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVudGVyOlxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuU3BhY2U6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24ub25Ub2dnbGVDbGljayhldmVudCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVXBBcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmICF0aGlzLmRyb3BEb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRG93bkFycm93OiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5vblRvZ2dsZUNsaWNrKGV2ZW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUgJiYgIXRoaXMuZHJvcERvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROZXh0T3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoYW5kbGUgYWxsIGtleXNcclxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMga2V5ZG93biBldmVudHMgb24gb3B0aW9uIGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uTGlzdGJveEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlVwQXJyb3c6XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5MZWZ0QXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hlY2tib3ggPSB0aGlzLmdldEZpcnN0T3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGVja2JveCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdENoZWNrYm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKDxIVE1MRWxlbWVudD4oPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cInNlYXJjaFwiXScpKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWFyY2hGb3JtS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRG93bkFycm93OlxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuUmlnaHRBcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RPcHRpb24gPSB0aGlzLmdldEZpcnN0T3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdE9wdGlvbi5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHsgcmV0dXJuOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoYW5kbGUgYWxsIGtleXNcclxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnLFxyXG4gICAgICAgICAgICBkcm9wRG93bkNvbnRlbnQ6ICcnLFxyXG4gICAgICAgICAgICBzZWFyY2hJbnB1dDogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xyXG4gICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCB8fCBrZXlzLmV2ZXJ5KGsgPT4gIXRoaXMudmFsdWVba10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKGMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT24gc2VhcmNoU3RyaW5nIG1vZGVsIGNoYW5nZVxyXG4gICAgICovXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHVibGljIG9uU2VhcmNoU3RyaW5nQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9uQnlTZWFyY2hTdHJpbmcoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgdXBkYXRlUG9zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93blNlcnZpY2UudXBkYXRlUG9zaXRpb24odGhpcy5kcm9wRG93biwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIGNhbGN1bGF0aW5nIGFuZCB1cGRhdGluZyB0aGUgc3R5bGVzIGZvciBlYWNoIG9mIHRoZSBvcHRpb25zIGluc2lkZVxyXG4gICAgICogb2YgdGhlIGRyb3Bkb3duIGNvbnRhaW5lciwgYmVjYXVzZSB0aGUgZHJvcGRvd24gY29udGFpbmVyJ3Mgd2lkdGggaXMgZHluYW1pYyxcclxuICAgICAqIGhhdmUgdG8gY2FsY3VsYXRlIG9wdGlvbiBhcyB3ZWxsLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFwcGx5U2luZ2xlT3B0aW9uV2lkdGgoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFNpbmdsZURyb3Bkb3duT3B0aW9uV2lkdGgoKTtcclxuICAgICAgICBpZiAod2lkdGggPT09IG51bGwpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b25bcm9sZT1cIm9wdGlvblwiXScpO1xyXG4gICAgICAgIGlmICghb3B0aW9ucykgeyByZXR1cm47IH1cclxuICAgICAgICAvLyBUT0RPOiB3aGVuIGRlY2lkZWQgdG8gZG8gdmlydHVhbGl6YXRpb24gZm9yIHRoaXMgcG9ydGlvblxyXG4gICAgICAgIC8vIG5lZWQgdG8gb25seSBjYWxjdWxhdGUgdGhlIG9uZXMgdGhhdCBhcmUgaW5zaWRlIG9mIHZpZXcgcG9ydFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSA8SFRNTEVsZW1lbnQ+b3B0aW9ucy5pdGVtKGkpO1xyXG4gICAgICAgICAgICBjb25zdCBzcGFuID0gPEhUTUxFbGVtZW50Pm9wdGlvbi5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XHJcbiAgICAgICAgICAgIGlmICghc3BhbikgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgY29uc3QgaW5uZXJTcGFuID0gPEhUTUxFbGVtZW50PnNwYW4ucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgICAgICAgICBpZiAoIWlubmVyU3BhbikgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgc3Bhbi5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcclxuICAgICAgICAgICAgLy8gMjQgaXMgdGhlIGJ1dHRvbidzIHBhZGRpbmcgbGVmdCBhbmQgcmlnaHRcclxuICAgICAgICAgICAgLy8gdGhlIGlubmVyIHBhcnQgb2YgdGhlIHNwYW4gbmVlZCB0byBiZSB0aGUgdG90YWwgZHJvcGRvd24gdmFsdWUgbWludXNcclxuICAgICAgICAgICAgLy8gYnV0dG9uJ3MgcGFkZGluZyBsZWZ0IGFuZCByaWdodCB0byBtYWtlIHRoZSBlbGxpcHNpcyB3b3JraW5nXHJcbiAgICAgICAgICAgIGNvbnN0IGlubmVyU3BhbldpZHRoID0gd2lkdGggLSAyNDtcclxuICAgICAgICAgICAgaW5uZXJTcGFuLnN0eWxlLndpZHRoID0gaW5uZXJTcGFuV2lkdGggKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBoYW5kbGVzIGdldHRpbmcgdGhlIGN1cnJlbnQgd2lkdGggYmVpbmcgYXBwbGllZCBieSB0aGUgZHJvcGRvd24gc2VydmljZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFNpbmdsZURyb3Bkb3duT3B0aW9uV2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5kcm9wRG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBpZiAoIWNvbnRlbnRFbGVtZW50KSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgY29uc3QgZmlyc3RPcHRpb24gPSBEb20uZ2V0Rmlyc3RFbGVtZW50KGNvbnRlbnRFbGVtZW50LCBlbGVtZW50ID0+IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0JVVFRPTicpO1xyXG4gICAgICAgIGlmICghZmlyc3RPcHRpb24pIHsgcmV0dXJuIG51bGw7IH1cclxuICAgICAgICByZXR1cm4gZmlyc3RPcHRpb24ub2Zmc2V0V2lkdGg7XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIj5cclxuICA8c21lLWRyb3Bkb3duICNkcm9wRG93biBbYXV0b1RvZ2dsZV09XCJmYWxzZVwiIGNsYXNzPVwic21lLWNvbWJvYm94IHNtZS1mb2N1cy16b25lIHNtZS1mb3JtLWZpZWxkLWVkaXRvclwiXHJcbiAgICBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIiBbY2FsY3VsYXRlSGVpZ2h0XT1cInRydWVcIiAodG9nZ2xlZCk9XCJvbkRyb3Bkb3duVG9nZ2xlZCgkZXZlbnQpXCJcclxuICAgIFtkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGhdPVwiZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoXCI+XHJcbiAgICA8ZGl2ICNkcm9wZG93bkhlYWRlciBjbGFzcz1cInNtZS1jb21ib2JveC1oZWFkZXIgc21lLWRyb3Bkb3duLXRvZ2dsZVwiIChrZXlkb3duKT1cIm9uVG9nZ2xlS2V5ZG93bigkZXZlbnQpXCJcclxuICAgICAgKGtleXByZXNzKT1cIm9uVG9nZ2xlS2V5UHJlc3MoJGV2ZW50KVwiPlxyXG4gICAgICA8aW5wdXQgI3RleHRJbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJjb21ib2JveFwiIFt2YWx1ZV09XCJzZWxlY3RlZE9wdGlvbnNEaXNwbGF5VmFsdWVcIiByZWFkb25seVxyXG4gICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImlkQmFnLmRyb3BEb3duQ29udGVudFwiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZHJvcERvd24uaXNPcGVuXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCInbm9uZSdcIiAoY2xpY2spPVwiZHJvcERvd24ub25Ub2dnbGVDbGljaygkZXZlbnQsIHRydWUpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIi8+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFthdHRyLmRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImRyb3BEb3duLmlzT3BlblwiIFtjbGFzcy5zbWUtdG9nZ2xlZF09XCJkcm9wRG93bi5pc09wZW5cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aFwiIChjbGljayk9XCJkcm9wRG93bi5vblRvZ2dsZUNsaWNrKCRldmVudCwgdHJ1ZSlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWNoZXZyb25Eb3duXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBUaGUgbWluaW11bSBvZiB3aWR0aCB0aGF0IGEgZHJvcGRvd24gY2FuIGJlIGlzIHNldCBhdCAyMjBweCAtLT5cclxuICAgIDwhLS0gR3VyYW50ZWUgZHJvcGRvd24gY29udGVudCB3aWR0aCBjYW4gbm90IGdvIGJlbG93IHRoaXMgdmFsdWUgbm8gbWF0dGVyIGhvdyBzbWFsbCB0aGUgd2luZG93IGlzIHNldCBhdCAtLT5cclxuICAgIDwhLS0gT3RoZXJ3aXNlIHdpbGwgZGlzcGxheSBncmF5IG1hcmdpbiB0byB0aGUgcmlnaHQgb2YgdGhlIGRyb3Bkb3duIGNvbnRlbnQgb24gc21hbGwgd2luZG93IC0tPlxyXG4gICAgPGRpdiAjbGlzdGJveCByb2xlPVwibGlzdGJveFwiIGNsYXNzPVwic21lLWRyb3Bkb3duLWNvbnRlbnQgc21lLWRyb3Bkb3duLWNvbnRlbnQtaW5oZXJpdC1jb250YWluZXItaGVpZ2h0XCJcclxuICAgICAgW2NsYXNzLnNtZS1wYWRkaW5nLXNxdWlzaC12LXhzXT1cIm11bHRpcGxlXCIgKGtleWRvd24pPVwib25MaXN0Ym94S2V5ZG93bigkZXZlbnQpXCJcclxuICAgICAgW25nU3R5bGVdPVwiZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoICYmIHsgJ21heC13aWR0aC5weCc6IGRyb3Bkb3duSGVhZGVyLm9mZnNldFdpZHRoID4gMjIwID8gZHJvcGRvd25IZWFkZXIub2Zmc2V0V2lkdGggOiAyMjB9IHx8ICFkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGggJiYgeyAnbWF4LXdpZHRoJzogJ2luaXRpYWwnIH1cIlxyXG4gICAgICBbaWRdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCI+XHJcbiAgICAgIDxmb3JtICpuZ0lmPVwic2VhcmNoYWJsZVwiIChrZXlkb3duKT1cIm9uU2VhcmNoRm9ybUtleWRvd24oJGV2ZW50KVwiIFtjbGFzcy5zbWUtcGFkZGluZy1zcXVpc2gtdi14c109XCIhbXVsdGlwbGVcIj5cclxuICAgICAgICA8c21lLWZvcm0tZmllbGQgbmFtZT1cInNlYXJjaFN0cmluZ1ZhbHVlXCIgdHlwZT1cInNlYXJjaFwiIFtkaXNhYmxlU2VhcmNoQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNlYXJjaFwiXHJcbiAgICAgICAgICBbbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uc2VhcmNoXCIgW2lkXT1cImlkQmFnLnNlYXJjaElucHV0XCJcclxuICAgICAgICAgIFtjb3VudF09XCJvcHRpb25zRmlsdGVyZWQubGVuZ3RoID8gb3B0aW9uc0ZpbHRlcmVkLmxlbmd0aCA6IDBcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFN0cmluZ1wiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaFN0cmluZ0NoYW5nZSgpXCI+PC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgc2hvd1NlbGVjdEFsbFwiIGNsYXNzPVwic21lLWNoZWNrYm94IHNtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkXCJcclxuICAgICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cImlzRmlsdGVyZWRcIiByb2xlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtYXJyYW5nZS13b3JkLWJyZWFrLWFsbFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsT3B0aW9ucygpXCIgW2NoZWNrZWRdPVwiaXNBbGxPcHRpb25zU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaXNBbGxPcHRpb25zU2VsZWN0ZWRcIiByb2xlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNlbGVjdEFsbExhYmVsXCIgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCIvPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3tzZWxlY3RBbGxMYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoYWJsZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zRmlsdGVyZWQ7dHJhY2tCeTogdHJhY2tPcHRpb25cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgc21lVGVtcGxhdGVPdXRsZXQgW3RlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiIFtkYXRhXT1cIm9wdGlvblwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWFyY2hhYmxlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7dHJhY2tCeTogdHJhY2tPcHRpb25cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgc21lVGVtcGxhdGVPdXRsZXQgW3RlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiIFtkYXRhXT1cIm9wdGlvblwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvc21lLWRyb3Bkb3duPlxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3NpbmdsZVNlbGVjdFRlbXBsYXRlIGxldC1vcHRpb24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiByb2xlPVwib3B0aW9uXCIgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiIFthdHRyLmFyaWEtbGFiZWxdPVwib3B0aW9uLnRvU3RyaW5nKClcIlxyXG4gICAgICBbY2xhc3Muc21lLXNlbGVjdGVkXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCIgKGNsaWNrKT1cInRvZ2dsZU9wdGlvbihvcHRpb24sIHRydWUpOyB0ZXh0SW5wdXQuZm9jdXMoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cclxuICAgICAgPHNwYW4gW3NtZVRvb2x0aXBdPVwib3B0aW9uLmRpc2FibGVkID8gbnVsbCA6IG9wdGlvbi5yZXNvbHZlZFRvb2x0aXBUZW1wbGF0ZVwiXHJcbiAgICAgICAgW3NtZVRvb2x0aXBDb250ZXh0XT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiAob3B0aW9uLnRvb2x0aXBDb250ZXh0IHx8IG9wdGlvbilcIj5cclxuICAgICAgICA8c3BhbiBbY2xhc3Muc21lLWFycmFuZ2UtZWxsaXBzaXNdPVwiIW92ZXJmbG93V3JhcFwiIFt0aXRsZV09XCJvcHRpb24ucmVzb2x2ZWRUaXRsZVwiXHJcbiAgICAgICAgICBbY2xhc3Muc21lLWNvbWJvYm94LW9wdGlvbi13cmFwXT1cIm92ZXJmbG93V3JhcFwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1sYXlvdXQtZmxvYXQtbGVmdFwiPnt7b3B0aW9uLnRvU3RyaW5nKCl9fTwvc3Bhbj48L3NwYW4+XHJcblxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNtdWx0aVNlbGVjdFRlbXBsYXRlIGxldC1vcHRpb24+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWNoZWNrYm94IHNtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkXCIgIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtYXJyYW5nZS13b3JkLWJyZWFrLWFsbFwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cInRvZ2dsZU9wdGlvbihvcHRpb24sICFvcHRpb24uaXNTZWxlY3RlZClcIiBbY2hlY2tlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwib3B0aW9uLmlzU2VsZWN0ZWRcIiByb2xlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udG9TdHJpbmcoKVwiIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCIgLz5cclxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgW2NsYXNzLnNtZS1jb21ib2JveC1vcHRpb24td3JhcF09XCJvdmVyZmxvd1dyYXBcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLWggc21lLWxheW91dC1mbG9hdC1sZWZ0XCJcclxuICAgICAgICAgIFtzbWVUb29sdGlwXT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiBvcHRpb24ucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGVcIiBbdGl0bGVdPVwib3B0aW9uLnJlc29sdmVkVGl0bGVcIlxyXG4gICAgICAgICAgW3NtZVRvb2x0aXBDb250ZXh0XT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiAob3B0aW9uLnRvb2x0aXBDb250ZXh0IHx8IG9wdGlvbilcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIiBbY2xhc3Muc21lLWFycmFuZ2UtZWxsaXBzaXNdPVwiIW92ZXJmbG93V3JhcFwiPnt7b3B0aW9uLnRvU3RyaW5nKCl9fTwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19
648
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkMsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0Qs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QVk7a0JBRGxCLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBT0MsaUNBQWlDO2tCQUR2QyxLQUFLO1lBSUUsZUFBZSxNQTJNaEIsb0JBQW9CLE1BTW5CLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEtleUNvZGUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvYWNjZXNzaWJpbGl0eS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU21lSW5qZWN0IH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2RlY29yYXRvcnMvaW5qZWN0aW9uLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vLi4vLi4vZm9ybS92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBTbWVTY2hlbWFQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZmllbGQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFBcnJheVByb3BlcnR5LCBTY2hlbWFPYmplY3RQcm9wZXJ0eSwgU2NoZW1hUHJpbWl0aXZlVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy1mb3JtLWZpZWxkL29wdGlvbnMtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVmFsdWVPckFycmF5PFQ+ID0gVCB8IFRbXTtcclxuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cImNvbWJvYm94XCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5sYWJlbClcIlxyXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5kZXNjcmlwdGlvbilcIiBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIlxyXG4gICAgICAgIFtyZWFkb25seV09XCIhIShldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbikpXCJcclxuICAgICAgICBbbG9hZGluZ109XCIhIShwcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuYnVzeUNvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmJ1c3lDb25kaXRpb24pKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiEhKHByb3BlcnR5U2NoZW1hLmRpc2FibGVkQ29uZGl0aW9uICYmIGV2YWxFeHByZXNzaW9uKHByb3BlcnR5U2NoZW1hLmRpc2FibGVkQ29uZGl0aW9uKSkgfHwgISEocHJvcGVydHlTY2hlbWEub3B0aW9ucyAmJiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmJ1c3lDb25kaXRpb24gJiYgZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uKSlcIlxyXG4gICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJyZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tVmFsaWRhdGlvbikoJGV2ZW50KVwiXHJcbiAgICAgICAgKGN1c3RvbUFzeW5jVmFsaWRhdGUpPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIHJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlcikoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BlbmRpbmdNZXNzYWdlXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiBsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24ucGVuZGluZ01lc3NhZ2UpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURpc2FibGVkXT1cInNob3VsZEN1c3RvbUFzeW5jVmFsaWRhdGlvbkJlRGlzYWJsZWQoKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEZWJvdW5jZVRpbWVdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmICtwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlclwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5wbGFjZWhvbGRlcilcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgW2xhYmVsXT1cImxvY2FsaXplKGl0ZW0ubGFiZWwpXCI+PC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc0JpbmRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc29sdmVDb21wb25lbnRNZW1iZXIocHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc0JpbmRpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShpdGVtLmxhYmVsKVwiPjwvc21lLW9wdGlvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgYFxyXG59KVxyXG4vLyB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aFxyXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBTaW1wbGVQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjY2Vzc2libGUgSW1wbGVtZW50YXRpb24gb2YgYSBmb3JtIGZpZWxkIGNvbWJvIGJveFxyXG4gKi9cclxuQFNtZVNjaGVtYVByb3BlcnR5KHtcclxuICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgZm9ybWF0OiAnY29tYm9ib3gnLFxyXG4gICAgZGVzY3JpcHRpb246ICdhIGNvbWJvYm94IGNvbnRyb2wgYmluZGluZyB0byBzdHJpbmcgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBDb21ib2JveEZvcm1GaWVsZExvYWRlckNvbXBvbmVudCxcclxuICAgIG9wdGlvblByb3BlcnRpZXM6IFtcclxuICAgICAgICA8U2NoZW1hQXJyYXlQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3NpbXBsZS1saXN0JyxcclxuICAgICAgICAgICAgbmFtZTogJ2l0ZW1zJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5TdGF0aWNPcHRpb25zJyxcclxuICAgICAgICAgICAgaXRlbTogPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdsYWJlbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuTGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuVmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQ6IDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtc0JpbmRpbmcnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkR5bmFtaWNPcHRpb25zJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdidXN5Q29uZGl0aW9uJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOkJ1c3kgQ29uZGl0aW9uJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcicsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpQbGFjZWhvbGRlcidcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiY29tYm9ib3hcIl0sc21lLWZvcm0tZmllbGRbdHlwZT1cInNlbGVjdFwiXScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbWJvYm94Rm9ybUZpZWxkQ29tcG9uZW50PFQ+IGV4dGVuZHMgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50PEFycmF5PFQ+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0NvbWJvYm94Rm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdzaW5nbGVTZWxlY3RUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgc2luZ2xlU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbXVsdGlTZWxlY3RUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgbXVsdGlTZWxlY3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdsaXN0Ym94JylcclxuICAgIHB1YmxpYyBsaXN0Ym94RWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcm9wRG93bicpXHJcbiAgICBwdWJsaWMgZHJvcERvd246IERyb3Bkb3duQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW47XHJcblxyXG4gICAgLy8gYnkgZGVmYXVsdCB3aWxsIHNob3cgZWxsaXBzaXNcclxuICAgIC8vIG90aGVyd2lzZSBzaG93IHdyYXBwZWQgdGV4dFxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvdmVyZmxvd1dyYXA6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgaWYgcmVzZXQgc2VhcmNoIHN0cmluZyBvbiBjb2xsYXBzZSBkcm9wZG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1haW50YWluU2VhcmNoOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBkcm9wZG93biB3aWxsIHVzZSB0aGUgc21lLWZvcm0tZmllbGQgdG8gbGltaXQgaXRzIG1heC13aWR0aFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aCA9IHRydWU7XHJcblxyXG4gICAgQFNtZUluamVjdChEcm9wZG93blNlcnZpY2UpXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNGaWx0ZXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hTdHJpbmcgJiYgdGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IHRoaXMubXVsdGlTZWxlY3RUZW1wbGF0ZSA6IHRoaXMuc2luZ2xlU2VsZWN0VGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQ29tYm9ib3hGb3JtRmllbGRDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1haW50YWluU2VhcmNoID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIE9uSW5pdCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGtleXByZXNzIGV2ZW50cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblRvZ2dsZUtleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgLy8gZm9yIGFsbCBvdGhlciBjYXNlcywgc2VuZCB0byBhdXRvY29tcGxldGVcclxuICAgICAgICB0aGlzLnByb2dyZXNzaXZlQXV0b0NvbXBsZXRlKGV2ZW50LmtleUNvZGUpO1xyXG5cclxuICAgICAgICAvLyBoYW5kbGUgYWxsIGtleXNcclxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0b2dnbGVkIHN0YXRlIGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRHJvcGRvd25Ub2dnbGVkKGV4cGFuZGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gb3B0aW9uIHdpZHRoIG5lZWQgdG8gYmUgcmVzdHJpY3RlZCBieSB0aGUgZHJvcGRvd25cclxuICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5U2luZ2xlT3B0aW9uV2lkdGgoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hhYmxlICYmICFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLnNlYXJjaFN0cmluZykgJiYgIXRoaXMubWFpbnRhaW5TZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGZvY3VzT24gPSB0aGlzLmxpc3Rib3hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9XCJvcHRpb25cIl1bYXJpYS1zZWxlY3RlZD1cInRydWVcIl0nKTtcclxuICAgICAgICAgICAgaWYgKCFmb2N1c09uKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c09uID0gRG9tLmdldE5leHRGb2N1c2FibGVFbGVtZW50KHRoaXMubGlzdGJveEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaXJzdE9wdGlvbigpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hlY2tib3hlcyA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IDxIVE1MRWxlbWVudD5jaGVja2JveGVzLml0ZW0oaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoRG9tLmlzRm9jdXNhYmxlKGNoZWNrYm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2JveDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3JvbGU9XCJvcHRpb25cIl0nKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSA8SFRNTEVsZW1lbnQ+b3B0aW9ucy5pdGVtKGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKERvbS5pc0ZvY3VzYWJsZShvcHRpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMga2V5ZG93biBldmVudHMgb24gdGhlIGRyb3Bkb3duIHRvZ2dsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Ub2dnbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FbnRlcjpcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlNwYWNlOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlVwQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5kcm9wRG93bi5pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzT3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkRvd25BcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24ub25Ub2dnbGVDbGljayhldmVudCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlICYmICF0aGlzLmRyb3BEb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGtleWRvd24gZXZlbnRzIG9uIG9wdGlvbiBjaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkxpc3Rib3hLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5VcEFycm93OlxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuTGVmdEFycm93OiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENoZWNrYm94ID0gdGhpcy5nZXRGaXJzdE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hlY2tib3ggJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZmlyc3RDaGVja2JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJzZWFyY2hcIl0nKSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBhbGwga2V5c1xyXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VhcmNoRm9ybUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkRvd25BcnJvdzpcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlJpZ2h0QXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5nZXRGaXJzdE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RPcHRpb24uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7IHJldHVybjsgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJyxcclxuICAgICAgICAgICAgZHJvcERvd25Db250ZW50OiAnJyxcclxuICAgICAgICAgICAgc2VhcmNoSW5wdXQ6ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDAgfHwga2V5cy5ldmVyeShrID0+ICF0aGlzLnZhbHVlW2tdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9uIHNlYXJjaFN0cmluZyBtb2RlbCBjaGFuZ2VcclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyBvblNlYXJjaFN0cmluZ0NoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbkJ5U2VhcmNoU3RyaW5nKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd25TZXJ2aWNlLnVwZGF0ZVBvc2l0aW9uKHRoaXMuZHJvcERvd24sIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaGFuZGxlcyBjYWxjdWxhdGluZyBhbmQgdXBkYXRpbmcgdGhlIHN0eWxlcyBmb3IgZWFjaCBvZiB0aGUgb3B0aW9ucyBpbnNpZGVcclxuICAgICAqIG9mIHRoZSBkcm9wZG93biBjb250YWluZXIsIGJlY2F1c2UgdGhlIGRyb3Bkb3duIGNvbnRhaW5lcidzIHdpZHRoIGlzIGR5bmFtaWMsXHJcbiAgICAgKiBoYXZlIHRvIGNhbGN1bGF0ZSBvcHRpb24gYXMgd2VsbC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhcHBseVNpbmdsZU9wdGlvbldpZHRoKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRTaW5nbGVEcm9wZG93bk9wdGlvbldpZHRoKCk7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSBudWxsKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3JvbGU9XCJvcHRpb25cIl0nKTtcclxuICAgICAgICBpZiAoIW9wdGlvbnMpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgLy8gVE9ETzogd2hlbiBkZWNpZGVkIHRvIGRvIHZpcnR1YWxpemF0aW9uIGZvciB0aGlzIHBvcnRpb25cclxuICAgICAgICAvLyBuZWVkIHRvIG9ubHkgY2FsY3VsYXRlIHRoZSBvbmVzIHRoYXQgYXJlIGluc2lkZSBvZiB2aWV3IHBvcnRcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gPEhUTUxFbGVtZW50Pm9wdGlvbnMuaXRlbShpKTtcclxuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IDxIVE1MRWxlbWVudD5vcHRpb24ucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgICAgICAgICBpZiAoIXNwYW4pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlubmVyU3BhbiA9IDxIVE1MRWxlbWVudD5zcGFuLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcclxuICAgICAgICAgICAgaWYgKCFpbm5lclNwYW4pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIHNwYW4uc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XHJcbiAgICAgICAgICAgIC8vIDI0IGlzIHRoZSBidXR0b24ncyBwYWRkaW5nIGxlZnQgYW5kIHJpZ2h0XHJcbiAgICAgICAgICAgIC8vIHRoZSBpbm5lciBwYXJ0IG9mIHRoZSBzcGFuIG5lZWQgdG8gYmUgdGhlIHRvdGFsIGRyb3Bkb3duIHZhbHVlIG1pbnVzXHJcbiAgICAgICAgICAgIC8vIGJ1dHRvbidzIHBhZGRpbmcgbGVmdCBhbmQgcmlnaHQgdG8gbWFrZSB0aGUgZWxsaXBzaXMgd29ya2luZ1xyXG4gICAgICAgICAgICBjb25zdCBpbm5lclNwYW5XaWR0aCA9IHdpZHRoIC0gMjQ7XHJcbiAgICAgICAgICAgIGlubmVyU3Bhbi5zdHlsZS53aWR0aCA9IGlubmVyU3BhbldpZHRoICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaGFuZGxlcyBnZXR0aW5nIHRoZSBjdXJyZW50IHdpZHRoIGJlaW5nIGFwcGxpZWQgYnkgdGhlIGRyb3Bkb3duIHNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRTaW5nbGVEcm9wZG93bk9wdGlvbldpZHRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSAoPEhUTUxFbGVtZW50PnRoaXMuZHJvcERvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKCFjb250ZW50RWxlbWVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gRG9tLmdldEZpcnN0RWxlbWVudChjb250ZW50RWxlbWVudCwgZWxlbWVudCA9PiBlbGVtZW50LnRhZ05hbWUgPT09ICdCVVRUT04nKTtcclxuICAgICAgICBpZiAoIWZpcnN0T3B0aW9uKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0T3B0aW9uLm9mZnNldFdpZHRoO1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcbiAgPHNtZS1kcm9wZG93biAjZHJvcERvd24gW2F1dG9Ub2dnbGVdPVwiZmFsc2VcIiBjbGFzcz1cInNtZS1jb21ib2JveCBzbWUtZm9jdXMtem9uZSBzbWUtZm9ybS1maWVsZC1lZGl0b3JcIlxyXG4gICAgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCIgW2NhbGN1bGF0ZUhlaWdodF09XCJ0cnVlXCIgKHRvZ2dsZWQpPVwib25Ecm9wZG93blRvZ2dsZWQoJGV2ZW50KVwiXHJcbiAgICBbZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoXT1cImRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aFwiPlxyXG4gICAgPGRpdiAjZHJvcGRvd25IZWFkZXIgY2xhc3M9XCJzbWUtY29tYm9ib3gtaGVhZGVyIHNtZS1kcm9wZG93bi10b2dnbGVcIiAoa2V5ZG93bik9XCJvblRvZ2dsZUtleWRvd24oJGV2ZW50KVwiXHJcbiAgICAgIChrZXlwcmVzcyk9XCJvblRvZ2dsZUtleVByZXNzKCRldmVudClcIj5cclxuICAgICAgPGlucHV0ICN0ZXh0SW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBbdmFsdWVdPVwic2VsZWN0ZWRPcHRpb25zRGlzcGxheVZhbHVlXCIgcmVhZG9ubHlcclxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlkQmFnLmRyb3BEb3duQ29udGVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIlxyXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIiBbYXR0ci5hcmlhLW93bnNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImRyb3BEb3duLmlzT3BlblwiIFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cIidub25lJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soJGV2ZW50LCB0cnVlKVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jYXBpdGFsaXplPVwib2ZmXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCIgLz5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2F0dHIuZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZHJvcERvd24uaXNPcGVuXCIgW2NsYXNzLnNtZS10b2dnbGVkXT1cImRyb3BEb3duLmlzT3BlblwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCIgKGNsaWNrKT1cImRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soJGV2ZW50LCB0cnVlKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2hldnJvbkRvd25cIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFRoZSBtaW5pbXVtIG9mIHdpZHRoIHRoYXQgYSBkcm9wZG93biBjYW4gYmUgaXMgc2V0IGF0IDIyMHB4IC0tPlxyXG4gICAgPCEtLSBHdWFyYW50ZWUgZHJvcGRvd24gY29udGVudCB3aWR0aCBjYW4gbm90IGdvIGJlbG93IHRoaXMgdmFsdWUgbm8gbWF0dGVyIGhvdyBzbWFsbCB0aGUgd2luZG93IGlzIHNldCBhdCAtLT5cclxuICAgIDwhLS0gT3RoZXJ3aXNlIHdpbGwgZGlzcGxheSBncmF5IG1hcmdpbiB0byB0aGUgcmlnaHQgb2YgdGhlIGRyb3Bkb3duIGNvbnRlbnQgb24gc21hbGwgd2luZG93IC0tPlxyXG4gICAgPGRpdiAjbGlzdGJveCByb2xlPVwibGlzdGJveFwiIGNsYXNzPVwic21lLWRyb3Bkb3duLWNvbnRlbnQgc21lLWRyb3Bkb3duLWNvbnRlbnQtaW5oZXJpdC1jb250YWluZXItaGVpZ2h0XCJcclxuICAgICAgW2NsYXNzLnNtZS1wYWRkaW5nLXNxdWlzaC12LXhzXT1cIm11bHRpcGxlXCIgKGtleWRvd24pPVwib25MaXN0Ym94S2V5ZG93bigkZXZlbnQpXCJcclxuICAgICAgW25nU3R5bGVdPVwiZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoICYmIHsgJ21heC13aWR0aC5weCc6IGRyb3Bkb3duSGVhZGVyLm9mZnNldFdpZHRoID4gMjIwID8gZHJvcGRvd25IZWFkZXIub2Zmc2V0V2lkdGggOiAyMjB9IHx8ICFkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGggJiYgeyAnbWF4LXdpZHRoJzogJ2luaXRpYWwnIH1cIlxyXG4gICAgICBbaWRdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCI+XHJcbiAgICAgIDxmb3JtICpuZ0lmPVwic2VhcmNoYWJsZVwiIChrZXlkb3duKT1cIm9uU2VhcmNoRm9ybUtleWRvd24oJGV2ZW50KVwiIFtjbGFzcy5zbWUtcGFkZGluZy1zcXVpc2gtdi14c109XCIhbXVsdGlwbGVcIj5cclxuICAgICAgICA8c21lLWZvcm0tZmllbGQgbmFtZT1cInNlYXJjaFN0cmluZ1ZhbHVlXCIgdHlwZT1cInNlYXJjaFwiIFtkaXNhYmxlU2VhcmNoQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNlYXJjaFwiXHJcbiAgICAgICAgICBbbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uc2VhcmNoXCIgW2lkXT1cImlkQmFnLnNlYXJjaElucHV0XCJcclxuICAgICAgICAgIFtjb3VudF09XCJvcHRpb25zRmlsdGVyZWQubGVuZ3RoID8gb3B0aW9uc0ZpbHRlcmVkLmxlbmd0aCA6IDBcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFN0cmluZ1wiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaFN0cmluZ0NoYW5nZSgpXCI+PC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgc2hvd1NlbGVjdEFsbFwiIGNsYXNzPVwic21lLWNoZWNrYm94IHNtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkXCJcclxuICAgICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cImlzRmlsdGVyZWRcIiByb2xlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtYXJyYW5nZS13b3JkLWJyZWFrLWFsbFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsT3B0aW9ucygpXCIgW2NoZWNrZWRdPVwiaXNBbGxPcHRpb25zU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaXNBbGxPcHRpb25zU2VsZWN0ZWRcIiByb2xlPVwiY2hlY2tib3hcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNlbGVjdEFsbExhYmVsXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCIgLz5cclxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7c2VsZWN0QWxsTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaGFibGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc0ZpbHRlcmVkO3RyYWNrQnk6IHRyYWNrT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBbZGF0YV09XCJvcHRpb25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoYWJsZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zO3RyYWNrQnk6IHRyYWNrT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBbZGF0YV09XCJvcHRpb25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NtZS1kcm9wZG93bj5cclxuICA8c21lLXZhbGlkYXRpb24tYWxlcnQgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtdmFsaWRhdGlvbi1hbGVydD5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNzaW5nbGVTZWxlY3RUZW1wbGF0ZSBsZXQtb3B0aW9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cIm9wdGlvblwiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwib3B0aW9uLmlzU2VsZWN0ZWRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50b1N0cmluZygpXCJcclxuICAgICAgW2NsYXNzLnNtZS1zZWxlY3RlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiIChjbGljayk9XCJ0b2dnbGVPcHRpb24ob3B0aW9uLCB0cnVlKTsgdGV4dElucHV0LmZvY3VzKClcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCIgW2F0dHIuZGF0YS11dGEtaWRdPVwib3B0aW9uLnV0YUlkID8gb3B0aW9uLnV0YUlkIDogb3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgIDxzcGFuIFtzbWVUb29sdGlwXT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiBvcHRpb24ucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGVcIlxyXG4gICAgICAgIFtzbWVUb29sdGlwQ29udGV4dF09XCJvcHRpb24uZGlzYWJsZWQgPyBudWxsIDogKG9wdGlvbi50b29sdGlwQ29udGV4dCB8fCBvcHRpb24pXCI+XHJcbiAgICAgICAgPHNwYW4gW2NsYXNzLnNtZS1hcnJhbmdlLWVsbGlwc2lzXT1cIiFvdmVyZmxvd1dyYXBcIiBbdGl0bGVdPVwib3B0aW9uLnJlc29sdmVkVGl0bGVcIlxyXG4gICAgICAgICAgW2NsYXNzLnNtZS1jb21ib2JveC1vcHRpb24td3JhcF09XCJvdmVyZmxvd1dyYXBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIj57e29wdGlvbi50b1N0cmluZygpfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbXVsdGlTZWxlY3RUZW1wbGF0ZSBsZXQtb3B0aW9uPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZFwiIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtYXJyYW5nZS13b3JkLWJyZWFrLWFsbFwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cInRvZ2dsZU9wdGlvbihvcHRpb24sICFvcHRpb24uaXNTZWxlY3RlZClcIiBbY2hlY2tlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwib3B0aW9uLmlzU2VsZWN0ZWRcIiByb2xlPVwiY2hlY2tib3hcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50b1N0cmluZygpXCIgW2F0dHIuZGF0YS11dGEtaWRdPVwib3B0aW9uLnV0YUlkID8gb3B0aW9uLnV0YUlkIDogb3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCIgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCIgLz5cclxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbY2xhc3Muc21lLWNvbWJvYm94LW9wdGlvbi13cmFwXT1cIm92ZXJmbG93V3JhcFwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLWggc21lLWxheW91dC1mbG9hdC1sZWZ0XCJcclxuICAgICAgICAgIFtzbWVUb29sdGlwXT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiBvcHRpb24ucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGVcIiBbdGl0bGVdPVwib3B0aW9uLnJlc29sdmVkVGl0bGVcIlxyXG4gICAgICAgICAgW3NtZVRvb2x0aXBDb250ZXh0XT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiAob3B0aW9uLnRvb2x0aXBDb250ZXh0IHx8IG9wdGlvbilcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIlxyXG4gICAgICAgICAgICBbY2xhc3Muc21lLWFycmFuZ2UtZWxsaXBzaXNdPVwiIW92ZXJmbG93V3JhcFwiPnt7b3B0aW9uLnRvU3RyaW5nKCl9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvc21lLWZvcm0tZmllbGQtbGF5b3V0PlxyXG4iXX0=