@po-ui/ng-components 18.19.0 → 18.19.1

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 (44) hide show
  1. package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +41 -41
  2. package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +23 -23
  3. package/esm2022/lib/components/po-field/po-lookup/po-lookup.component.mjs +38 -47
  4. package/esm2022/lib/po.module.mjs +3 -12
  5. package/esm2022/lib/services/po-theme/enum/po-theme-type.enum.mjs +1 -4
  6. package/esm2022/lib/services/po-theme/helpers/po-theme-dark-defaults.constant.mjs +203 -0
  7. package/esm2022/lib/services/po-theme/helpers/po-theme-light-defaults.constant.mjs +134 -0
  8. package/esm2022/lib/services/po-theme/helpers/po-theme-poui.constant.mjs +13 -29
  9. package/esm2022/lib/services/po-theme/index.mjs +4 -7
  10. package/esm2022/lib/services/po-theme/interfaces/po-theme.interface.mjs +1 -1
  11. package/esm2022/lib/services/po-theme/po-theme.service.mjs +32 -216
  12. package/fesm2022/po-ui-ng-components.mjs +555 -816
  13. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  14. package/lib/po.module.d.ts +0 -3
  15. package/lib/services/po-theme/enum/po-theme-type.enum.d.ts +0 -3
  16. package/lib/services/po-theme/helpers/{types/po-theme-dark-defaults.constant.d.ts → po-theme-dark-defaults.constant.d.ts} +11 -4
  17. package/lib/services/po-theme/helpers/po-theme-light-defaults.constant.d.ts +41 -0
  18. package/lib/services/po-theme/helpers/po-theme-poui.constant.d.ts +1 -5
  19. package/lib/services/po-theme/index.d.ts +3 -6
  20. package/lib/services/po-theme/interfaces/po-theme.interface.d.ts +5 -18
  21. package/lib/services/po-theme/po-theme.service.d.ts +10 -90
  22. package/package.json +4 -4
  23. package/po-ui-ng-components-18.19.1.tgz +0 -0
  24. package/schematics/ng-add/index.js +1 -1
  25. package/schematics/ng-update/v14/index.js +1 -1
  26. package/schematics/ng-update/v15/index.js +1 -1
  27. package/schematics/ng-update/v16/index.js +1 -1
  28. package/schematics/ng-update/v17/index.js +1 -1
  29. package/schematics/ng-update/v18/index.js +2 -2
  30. package/schematics/ng-update/v2/index.js +1 -1
  31. package/schematics/ng-update/v3/index.js +1 -1
  32. package/schematics/ng-update/v4/index.js +1 -1
  33. package/schematics/ng-update/v5/index.js +1 -1
  34. package/schematics/ng-update/v6/index.js +1 -1
  35. package/esm2022/lib/services/po-theme/enum/po-theme-a11y.enum.mjs +0 -30
  36. package/esm2022/lib/services/po-theme/helpers/accessibilities/po-theme-default-aa.constant.mjs +0 -14
  37. package/esm2022/lib/services/po-theme/helpers/accessibilities/po-theme-default-aaa.constant.mjs +0 -18
  38. package/esm2022/lib/services/po-theme/helpers/types/po-theme-dark-defaults.constant.mjs +0 -210
  39. package/esm2022/lib/services/po-theme/helpers/types/po-theme-light-defaults.constant.mjs +0 -114
  40. package/lib/services/po-theme/enum/po-theme-a11y.enum.d.ts +0 -28
  41. package/lib/services/po-theme/helpers/accessibilities/po-theme-default-aa.constant.d.ts +0 -10
  42. package/lib/services/po-theme/helpers/accessibilities/po-theme-default-aaa.constant.d.ts +0 -14
  43. package/lib/services/po-theme/helpers/types/po-theme-light-defaults.constant.d.ts +0 -25
  44. package/po-ui-ng-components-18.19.0.tgz +0 -0
@@ -25,9 +25,9 @@ const _c2 = ["contentElement"];
25
25
  const _c3 = ["iconArrow"];
26
26
  const _c4 = ["inp"];
27
27
  const _c5 = ["poListbox"];
28
- function PoComboComponent_div_7_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "div", 20);
30
- i0.ɵɵelement(1, "po-icon", 21);
28
+ function PoComboComponent_div_5_Template(rf, ctx) { if (rf & 1) {
29
+ i0.ɵɵelementStart(0, "div", 19);
30
+ i0.ɵɵelement(1, "po-icon", 20);
31
31
  i0.ɵɵelementEnd();
32
32
  } if (rf & 2) {
33
33
  const ctx_r1 = i0.ɵɵnextContext();
@@ -35,50 +35,50 @@ function PoComboComponent_div_7_Template(rf, ctx) { if (rf & 1) {
35
35
  i0.ɵɵclassProp("po-field-icon-disabled", ctx_r1.disabled);
36
36
  i0.ɵɵproperty("p-icon", ctx_r1.icon);
37
37
  } }
38
- function PoComboComponent_po_clean_11_Template(rf, ctx) { if (rf & 1) {
38
+ function PoComboComponent_po_clean_9_Template(rf, ctx) { if (rf & 1) {
39
39
  const _r3 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "po-clean", 22);
41
- i0.ɵɵlistener("p-change-event", function PoComboComponent_po_clean_11_Template_po_clean_p_change_event_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clear($event)); })("click", function PoComboComponent_po_clean_11_Template_po_clean_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.clear(null); return i0.ɵɵresetView($event.preventDefault()); })("keydown.enter", function PoComboComponent_po_clean_11_Template_po_clean_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.clearAndFocus(); return i0.ɵɵresetView($event.preventDefault()); });
40
+ i0.ɵɵelementStart(0, "po-clean", 21);
41
+ i0.ɵɵlistener("p-change-event", function PoComboComponent_po_clean_9_Template_po_clean_p_change_event_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clear($event)); })("click", function PoComboComponent_po_clean_9_Template_po_clean_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.clear(null); return i0.ɵɵresetView($event.preventDefault()); })("keydown.enter", function PoComboComponent_po_clean_9_Template_po_clean_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.clearAndFocus(); return i0.ɵɵresetView($event.preventDefault()); });
42
42
  i0.ɵɵelementEnd();
43
43
  } if (rf & 2) {
44
44
  const ctx_r1 = i0.ɵɵnextContext();
45
45
  i0.ɵɵproperty("p-element-ref", ctx_r1.inputEl);
46
46
  i0.ɵɵattribute("aria-label", ctx_r1.literals.clean);
47
47
  } }
48
- function PoComboComponent_ng_container_15_Template(rf, ctx) { if (rf & 1) {
48
+ function PoComboComponent_ng_container_13_Template(rf, ctx) { if (rf & 1) {
49
49
  i0.ɵɵelementContainer(0);
50
50
  } }
51
- function PoComboComponent_ng_template_16_ng_container_0_Template(rf, ctx) { if (rf & 1) {
51
+ function PoComboComponent_ng_template_14_ng_container_0_Template(rf, ctx) { if (rf & 1) {
52
52
  i0.ɵɵelementContainer(0);
53
53
  } }
54
- function PoComboComponent_ng_template_16_Template(rf, ctx) { if (rf & 1) {
55
- i0.ɵɵtemplate(0, PoComboComponent_ng_template_16_ng_container_0_Template, 1, 0, "ng-container", 23);
54
+ function PoComboComponent_ng_template_14_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵtemplate(0, PoComboComponent_ng_template_14_ng_container_0_Template, 1, 0, "ng-container", 22);
56
56
  } if (rf & 2) {
57
57
  i0.ɵɵnextContext();
58
- const dropdownListbox_r4 = i0.ɵɵreference(22);
58
+ const dropdownListbox_r4 = i0.ɵɵreference(20);
59
59
  i0.ɵɵproperty("ngTemplateOutlet", dropdownListbox_r4);
60
60
  } }
61
- function PoComboComponent_ng_template_18_ng_template_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
61
+ function PoComboComponent_ng_template_16_ng_template_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
62
62
  i0.ɵɵelementContainer(0);
63
63
  } }
64
- function PoComboComponent_ng_template_18_ng_template_0_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵtemplate(0, PoComboComponent_ng_template_18_ng_template_0_ng_container_0_Template, 1, 0, "ng-container", 23);
64
+ function PoComboComponent_ng_template_16_ng_template_0_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵtemplate(0, PoComboComponent_ng_template_16_ng_template_0_ng_container_0_Template, 1, 0, "ng-container", 22);
66
66
  } if (rf & 2) {
67
67
  i0.ɵɵnextContext(2);
68
- const dropdownListbox_r4 = i0.ɵɵreference(22);
68
+ const dropdownListbox_r4 = i0.ɵɵreference(20);
69
69
  i0.ɵɵproperty("ngTemplateOutlet", dropdownListbox_r4);
70
70
  } }
71
- function PoComboComponent_ng_template_18_Template(rf, ctx) { if (rf & 1) {
72
- i0.ɵɵtemplate(0, PoComboComponent_ng_template_18_ng_template_0_Template, 1, 1, "ng-template", 24);
71
+ function PoComboComponent_ng_template_16_Template(rf, ctx) { if (rf & 1) {
72
+ i0.ɵɵtemplate(0, PoComboComponent_ng_template_16_ng_template_0_Template, 1, 1, "ng-template", 23);
73
73
  } if (rf & 2) {
74
74
  i0.ɵɵnextContext();
75
- const trigger_r5 = i0.ɵɵreference(5);
75
+ const trigger_r5 = i0.ɵɵreference(4);
76
76
  i0.ɵɵproperty("cdkConnectedOverlayOrigin", trigger_r5)("cdkConnectedOverlayOpen", true);
77
77
  } }
78
- function PoComboComponent_ng_template_21_Template(rf, ctx) { if (rf & 1) {
78
+ function PoComboComponent_ng_template_19_Template(rf, ctx) { if (rf & 1) {
79
79
  const _r6 = i0.ɵɵgetCurrentView();
80
- i0.ɵɵelementStart(0, "div", 25, 7)(2, "po-listbox", 26, 8);
81
- i0.ɵɵlistener("p-selectcombo-item", function PoComboComponent_ng_template_21_Template_po_listbox_p_selectcombo_item_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOptionClick($event, $event.event)); })("p-update-infinite-scroll", function PoComboComponent_ng_template_21_Template_po_listbox_p_update_infinite_scroll_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showMoreInfiniteScroll()); })("p-close", function PoComboComponent_ng_template_21_Template_po_listbox_p_close_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCloseCombo()); });
80
+ i0.ɵɵelementStart(0, "div", 24, 7)(2, "po-listbox", 25, 8);
81
+ i0.ɵɵlistener("p-selectcombo-item", function PoComboComponent_ng_template_19_Template_po_listbox_p_selectcombo_item_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOptionClick($event, $event.event)); })("p-update-infinite-scroll", function PoComboComponent_ng_template_19_Template_po_listbox_p_update_infinite_scroll_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showMoreInfiniteScroll()); })("p-close", function PoComboComponent_ng_template_19_Template_po_listbox_p_close_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCloseCombo()); });
82
82
  i0.ɵɵelementEnd()();
83
83
  } if (rf & 2) {
84
84
  const ctx_r1 = i0.ɵɵnextContext();
@@ -658,31 +658,31 @@ export class PoComboComponent extends PoComboBaseComponent {
658
658
  useExisting: forwardRef(() => PoComboComponent),
659
659
  multi: true
660
660
  }
661
- ]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 23, vars: 31, consts: [["outerContainer", ""], ["searchContainer", "", "trigger", "cdkOverlayOrigin"], ["inp", ""], ["iconArrow", ""], ["dropdownDefault", ""], ["dropdownCDK", ""], ["dropdownListbox", ""], ["containerElement", ""], ["poListbox", "", "contentElement", ""], [3, "p-disabled", "p-id", "p-label", "p-optional", "p-required", "p-show-required"], ["cdkOverlayOrigin", "", 1, "po-field-container-content", "po-combo-container-content"], [1, "po-combo-container-wrapper"], ["class", "po-field-icon-container-left", 4, "ngIf"], ["autocomplete", "off", "type", "text", 1, "po-combo-input", 3, "click", "keyup", "blur", "keydown", "ngClass", "disabled", "id", "placeholder", "required"], [1, "po-field-icon-container-right"], ["tabindex", "0", "role", "button", "class", "po-combo-clean po-icon-input", 3, "p-element-ref", "p-change-event", "click", "keydown.enter", 4, "ngIf"], [1, "po-combo-arrow", "po-field-icon", 3, "click"], [3, "p-icon"], [4, "ngIf", "ngIfThen", "ngIfElse"], [3, "p-help", "p-disabled", "p-error-pattern"], [1, "po-field-icon-container-left"], [1, "po-field-icon", "po-icon-input", 3, "p-icon"], ["tabindex", "0", "role", "button", 1, "po-combo-clean", "po-icon-input", 3, "p-change-event", "click", "keydown.enter", "p-element-ref"], [4, "ngTemplateOutlet"], ["cdkConnectedOverlay", "", 3, "cdkConnectedOverlayOrigin", "cdkConnectedOverlayOpen"], [1, "po-combo-container", 3, "hidden"], ["p-type", "option", 3, "p-selectcombo-item", "p-update-infinite-scroll", "p-close", "p-items", "p-field-value", "p-field-label", "p-template", "p-search-value", "p-infinite-loading", "p-infinite-scroll", "p-filtering", "p-cache", "p-filter-mode", "p-visible", "p-is-searching", "p-should-mark-letter", "p-compare-cache", "p-combo-service", "p-infinite-scroll-distance", "p-container-width"]], template: function PoComboComponent_Template(rf, ctx) { if (rf & 1) {
661
+ ]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 21, vars: 31, consts: [["outerContainer", ""], ["trigger", "cdkOverlayOrigin"], ["inp", ""], ["iconArrow", ""], ["dropdownDefault", ""], ["dropdownCDK", ""], ["dropdownListbox", ""], ["containerElement", ""], ["poListbox", "", "contentElement", ""], [3, "p-disabled", "p-id", "p-label", "p-optional", "p-required", "p-show-required"], ["cdkOverlayOrigin", "", 1, "po-field-container-content", "po-combo-container-content"], ["class", "po-field-icon-container-left", 4, "ngIf"], ["autocomplete", "off", "type", "text", 1, "po-combo-input", 3, "click", "keyup", "blur", "keydown", "ngClass", "disabled", "id", "placeholder", "required"], [1, "po-field-icon-container-right"], ["tabindex", "0", "role", "button", "class", "po-combo-clean po-icon-input", 3, "p-element-ref", "p-change-event", "click", "keydown.enter", 4, "ngIf"], [1, "po-combo-arrow", "po-field-icon", 3, "click"], [3, "p-icon"], [4, "ngIf", "ngIfThen", "ngIfElse"], [3, "p-help", "p-disabled", "p-error-pattern"], [1, "po-field-icon-container-left"], [1, "po-field-icon", "po-icon-input", 3, "p-icon"], ["tabindex", "0", "role", "button", 1, "po-combo-clean", "po-icon-input", 3, "p-change-event", "click", "keydown.enter", "p-element-ref"], [4, "ngTemplateOutlet"], ["cdkConnectedOverlay", "", 3, "cdkConnectedOverlayOrigin", "cdkConnectedOverlayOpen"], [1, "po-combo-container", 3, "hidden"], ["p-type", "option", 3, "p-selectcombo-item", "p-update-infinite-scroll", "p-close", "p-items", "p-field-value", "p-field-label", "p-template", "p-search-value", "p-infinite-loading", "p-infinite-scroll", "p-filtering", "p-cache", "p-filter-mode", "p-visible", "p-is-searching", "p-should-mark-letter", "p-compare-cache", "p-combo-service", "p-infinite-scroll-distance", "p-container-width"]], template: function PoComboComponent_Template(rf, ctx) { if (rf & 1) {
662
662
  const _r1 = i0.ɵɵgetCurrentView();
663
- i0.ɵɵelementStart(0, "div", null, 0)(2, "po-field-container", 9)(3, "div", 10, 1)(6, "div", 11);
664
- i0.ɵɵtemplate(7, PoComboComponent_div_7_Template, 2, 3, "div", 12);
665
- i0.ɵɵelementStart(8, "input", 13, 2);
666
- i0.ɵɵlistener("click", function PoComboComponent_Template_input_click_8_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleComboVisibility()); })("keyup", function PoComboComponent_Template_input_keyup_8_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyUp($event)); })("blur", function PoComboComponent_Template_input_blur_8_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur()); })("keyup", function PoComboComponent_Template_input_keyup_8_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.searchOnEnterOrArrow($event, $event.target.value)); })("keydown", function PoComboComponent_Template_input_keydown_8_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyDown($event)); });
663
+ i0.ɵɵelementStart(0, "div", null, 0)(2, "po-field-container", 9)(3, "div", 10, 1);
664
+ i0.ɵɵtemplate(5, PoComboComponent_div_5_Template, 2, 3, "div", 11);
665
+ i0.ɵɵelementStart(6, "input", 12, 2);
666
+ i0.ɵɵlistener("click", function PoComboComponent_Template_input_click_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleComboVisibility()); })("keyup", function PoComboComponent_Template_input_keyup_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyUp($event)); })("blur", function PoComboComponent_Template_input_blur_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur()); })("keyup", function PoComboComponent_Template_input_keyup_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.searchOnEnterOrArrow($event, $event.target.value)); })("keydown", function PoComboComponent_Template_input_keydown_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyDown($event)); });
667
667
  i0.ɵɵelementEnd();
668
- i0.ɵɵelementStart(10, "div", 14);
669
- i0.ɵɵtemplate(11, PoComboComponent_po_clean_11_Template, 1, 2, "po-clean", 15);
670
- i0.ɵɵelementStart(12, "div", 16, 3);
671
- i0.ɵɵlistener("click", function PoComboComponent_Template_div_click_12_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleComboVisibility(true)); });
672
- i0.ɵɵelement(14, "po-icon", 17);
673
- i0.ɵɵelementEnd()()()();
674
- i0.ɵɵtemplate(15, PoComboComponent_ng_container_15_Template, 1, 0, "ng-container", 18)(16, PoComboComponent_ng_template_16_Template, 1, 1, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor)(18, PoComboComponent_ng_template_18_Template, 1, 2, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
675
- i0.ɵɵelement(20, "po-field-container-bottom", 19);
668
+ i0.ɵɵelementStart(8, "div", 13);
669
+ i0.ɵɵtemplate(9, PoComboComponent_po_clean_9_Template, 1, 2, "po-clean", 14);
670
+ i0.ɵɵelementStart(10, "div", 15, 3);
671
+ i0.ɵɵlistener("click", function PoComboComponent_Template_div_click_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleComboVisibility(true)); });
672
+ i0.ɵɵelement(12, "po-icon", 16);
673
+ i0.ɵɵelementEnd()()();
674
+ i0.ɵɵtemplate(13, PoComboComponent_ng_container_13_Template, 1, 0, "ng-container", 17)(14, PoComboComponent_ng_template_14_Template, 1, 1, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor)(16, PoComboComponent_ng_template_16_Template, 1, 2, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
675
+ i0.ɵɵelement(18, "po-field-container-bottom", 18);
676
676
  i0.ɵɵelementEnd();
677
- i0.ɵɵtemplate(21, PoComboComponent_ng_template_21_Template, 5, 18, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
677
+ i0.ɵɵtemplate(19, PoComboComponent_ng_template_19_Template, 5, 18, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
678
678
  i0.ɵɵelementEnd();
679
679
  } if (rf & 2) {
680
- const inp_r7 = i0.ɵɵreference(9);
681
- const dropdownDefault_r8 = i0.ɵɵreference(17);
682
- const dropdownCDK_r9 = i0.ɵɵreference(19);
680
+ const inp_r7 = i0.ɵɵreference(7);
681
+ const dropdownDefault_r8 = i0.ɵɵreference(15);
682
+ const dropdownCDK_r9 = i0.ɵɵreference(17);
683
683
  i0.ɵɵadvance(2);
684
684
  i0.ɵɵproperty("p-disabled", ctx.disabled)("p-id", ctx.id)("p-label", ctx.label)("p-optional", ctx.optional)("p-required", ctx.required)("p-show-required", ctx.showRequired);
685
- i0.ɵɵadvance(5);
685
+ i0.ɵɵadvance(3);
686
686
  i0.ɵɵproperty("ngIf", ctx.icon);
687
687
  i0.ɵɵadvance();
688
688
  i0.ɵɵclassProp("po-input-icon-left", ctx.icon);
@@ -716,7 +716,7 @@ export class PoComboComponent extends PoComboBaseComponent {
716
716
  useExisting: forwardRef(() => PoComboComponent),
717
717
  multi: true
718
718
  }
719
- ], template: "<div #outerContainer>\n <po-field-container\n [p-disabled]=\"disabled\"\n [p-id]=\"id\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n >\n <div\n #searchContainer\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"po-field-container-content po-combo-container-content\"\n >\n <div class=\"po-combo-container-wrapper\">\n <div *ngIf=\"icon\" class=\"po-field-icon-container-left\">\n <po-icon\n class=\"po-field-icon po-icon-input\"\n [class.po-field-icon-disabled]=\"disabled\"\n [p-icon]=\"icon\"\n ></po-icon>\n </div>\n\n <input\n #inp\n class=\"po-combo-input\"\n [ngClass]=\"clean && inp.value ? 'po-input-double-icon-right' : 'po-input-icon-right'\"\n [class.po-input-icon-left]=\"icon\"\n autocomplete=\"off\"\n type=\"text\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [placeholder]=\"disabled ? '' : placeholder\"\n [required]=\"required\"\n (click)=\"toggleComboVisibility()\"\n (keyup)=\"onKeyUp($event)\"\n (blur)=\"onBlur()\"\n (keyup)=\"searchOnEnterOrArrow($event, $event.target.value)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <div class=\"po-field-icon-container-right\">\n <po-clean\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"literals.clean\"\n class=\"po-combo-clean po-icon-input\"\n *ngIf=\"clean && !disabled && inp.value\"\n [p-element-ref]=\"inputEl\"\n (p-change-event)=\"clear($event)\"\n (click)=\"clear(null); $event.preventDefault()\"\n (keydown.enter)=\"clearAndFocus(); $event.preventDefault()\"\n >\n </po-clean>\n\n <div\n #iconArrow\n class=\"po-combo-arrow po-field-icon\"\n [class.po-field-icon-disabled]=\"disabled\"\n (click)=\"toggleComboVisibility(true)\"\n >\n <po-icon\n [p-icon]=\"comboOpen ? 'ICON_ARROW_UP po-icon-input' : 'ICON_ARROW_DOWN po-icon-input'\"\n [class.po-field-icon]=\"!disabled\"\n [class.po-combo-default-border]=\"!disabled && inp.value\"\n [class.po-combo-background-arrow-up]=\"!disabled && comboOpen\"\n ></po-icon>\n </div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"appendBox; then dropdownCDK; else dropdownDefault\"> </ng-container>\n\n <ng-template #dropdownDefault>\n <ng-container *ngTemplateOutlet=\"dropdownListbox\"> </ng-container>\n </ng-template>\n\n <ng-template #dropdownCDK>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"true\">\n <ng-container *ngTemplateOutlet=\"dropdownListbox\"></ng-container>\n </ng-template>\n </ng-template>\n\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorPattern()\"\n ></po-field-container-bottom>\n </po-field-container>\n\n <ng-template #dropdownListbox>\n <div #containerElement class=\"po-combo-container\" [hidden]=\"!comboOpen && !isServerSearching\">\n <po-listbox\n #poListbox\n #contentElement\n p-type=\"option\"\n [p-items]=\"visibleOptions\"\n [p-field-value]=\"dynamicValue\"\n [p-field-label]=\"dynamicLabel\"\n [p-template]=\"comboOptionTemplate\"\n [p-search-value]=\"getInputValue()\"\n [p-infinite-loading]=\"infiniteLoading\"\n [p-infinite-scroll]=\"infiniteScroll\"\n [p-filtering]=\"isFiltering\"\n [p-cache]=\"cache\"\n (p-selectcombo-item)=\"onOptionClick($event, $event.event)\"\n [p-filter-mode]=\"filterMode\"\n [p-visible]=\"comboOpen\"\n [p-is-searching]=\"isServerSearching\"\n [p-should-mark-letter]=\"shouldMarkLetters\"\n [p-compare-cache]=\"compareObjects(cacheOptions, visibleOptions)\"\n [p-combo-service]=\"service\"\n [p-infinite-scroll-distance]=\"infiniteScrollDistance\"\n (p-update-infinite-scroll)=\"showMoreInfiniteScroll()\"\n (p-close)=\"onCloseCombo()\"\n [p-container-width]=\"containerWidth\"\n ></po-listbox>\n </div>\n </ng-template>\n</div>\n" }]
719
+ ], template: "<div #outerContainer>\n <po-field-container\n [p-disabled]=\"disabled\"\n [p-id]=\"id\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n >\n <div cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" class=\"po-field-container-content po-combo-container-content\">\n <div *ngIf=\"icon\" class=\"po-field-icon-container-left\">\n <po-icon\n class=\"po-field-icon po-icon-input\"\n [class.po-field-icon-disabled]=\"disabled\"\n [p-icon]=\"icon\"\n ></po-icon>\n </div>\n\n <input\n #inp\n class=\"po-combo-input\"\n [ngClass]=\"clean && inp.value ? 'po-input-double-icon-right' : 'po-input-icon-right'\"\n [class.po-input-icon-left]=\"icon\"\n autocomplete=\"off\"\n type=\"text\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [placeholder]=\"disabled ? '' : placeholder\"\n [required]=\"required\"\n (click)=\"toggleComboVisibility()\"\n (keyup)=\"onKeyUp($event)\"\n (blur)=\"onBlur()\"\n (keyup)=\"searchOnEnterOrArrow($event, $event.target.value)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <div class=\"po-field-icon-container-right\">\n <po-clean\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"literals.clean\"\n class=\"po-combo-clean po-icon-input\"\n *ngIf=\"clean && !disabled && inp.value\"\n [p-element-ref]=\"inputEl\"\n (p-change-event)=\"clear($event)\"\n (click)=\"clear(null); $event.preventDefault()\"\n (keydown.enter)=\"clearAndFocus(); $event.preventDefault()\"\n >\n </po-clean>\n\n <div\n #iconArrow\n class=\"po-combo-arrow po-field-icon\"\n [class.po-field-icon-disabled]=\"disabled\"\n (click)=\"toggleComboVisibility(true)\"\n >\n <po-icon\n [p-icon]=\"comboOpen ? 'ICON_ARROW_UP po-icon-input' : 'ICON_ARROW_DOWN po-icon-input'\"\n [class.po-field-icon]=\"!disabled\"\n [class.po-combo-default-border]=\"!disabled && inp.value\"\n [class.po-combo-background-arrow-up]=\"!disabled && comboOpen\"\n ></po-icon>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"appendBox; then dropdownCDK; else dropdownDefault\"> </ng-container>\n\n <ng-template #dropdownDefault>\n <ng-container *ngTemplateOutlet=\"dropdownListbox\"> </ng-container>\n </ng-template>\n\n <ng-template #dropdownCDK>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"true\">\n <ng-container *ngTemplateOutlet=\"dropdownListbox\"></ng-container>\n </ng-template>\n </ng-template>\n\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorPattern()\"\n ></po-field-container-bottom>\n </po-field-container>\n\n <ng-template #dropdownListbox>\n <div #containerElement class=\"po-combo-container\" [hidden]=\"!comboOpen && !isServerSearching\">\n <po-listbox\n #poListbox\n #contentElement\n p-type=\"option\"\n [p-items]=\"visibleOptions\"\n [p-field-value]=\"dynamicValue\"\n [p-field-label]=\"dynamicLabel\"\n [p-template]=\"comboOptionTemplate\"\n [p-search-value]=\"getInputValue()\"\n [p-infinite-loading]=\"infiniteLoading\"\n [p-infinite-scroll]=\"infiniteScroll\"\n [p-filtering]=\"isFiltering\"\n [p-cache]=\"cache\"\n (p-selectcombo-item)=\"onOptionClick($event, $event.event)\"\n [p-filter-mode]=\"filterMode\"\n [p-visible]=\"comboOpen\"\n [p-is-searching]=\"isServerSearching\"\n [p-should-mark-letter]=\"shouldMarkLetters\"\n [p-compare-cache]=\"compareObjects(cacheOptions, visibleOptions)\"\n [p-combo-service]=\"service\"\n [p-infinite-scroll-distance]=\"infiniteScrollDistance\"\n (p-update-infinite-scroll)=\"showMoreInfiniteScroll()\"\n (p-close)=\"onCloseCombo()\"\n [p-container-width]=\"containerWidth\"\n ></po-listbox>\n </div>\n </ng-template>\n</div>\n" }]
720
720
  }], () => [{ type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: i1.PoComboFilterService }, { type: i0.Renderer2 }, { type: i2.PoControlPositionService }, { type: i0.ChangeDetectorRef }, { type: i3.PoLanguageService }], { comboOptionTemplate: [{
721
721
  type: ContentChild,
722
722
  args: [PoComboOptionTemplateDirective, { static: true }]
@@ -740,4 +740,4 @@ export class PoComboComponent extends PoComboBaseComponent {
740
740
  args: ['poListbox']
741
741
  }] }); })();
742
742
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoComboComponent, { className: "PoComboComponent", filePath: "lib/components/po-field/po-combo/po-combo.component.ts", lineNumber: 102 }); })();
743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL3BvLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jb21iby9wby1jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFNVixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDYm5DLCtCQUF1RDtJQUNyRCw4QkFJVztJQUNiLGlCQUFNOzs7SUFIRixjQUF5QztJQUF6Qyx5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RSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDNUIsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXOztrRkFQWCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9LZXlDb2RlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vZW51bXMvcG8ta2V5LWNvZGUuZW51bSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0NvbWJvQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tY29tYm8tYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9Db21ib0ZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3BvLWNvbWJvLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvQ29tYm9Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1ncm91cC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlL3BvLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9MaXN0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi8uLi8uLi9wby1saXN0Ym94L3BvLWxpc3Rib3guY29tcG9uZW50JztcblxuY29uc3QgcG9Db21ib0NvbnRhaW5lck9mZnNldCA9IDg7XG5jb25zdCBwb0NvbWJvQ29udGFpbmVyUG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvQ29tYm9CYXNlQ29tcG9uZW50XG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWJhc2ljXCIgdGl0bGU9XCJQTyBDb21ibyBCYXNpY1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWJhc2ljL3NhbXBsZS1wby1jb21iby1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tYmFzaWMvc2FtcGxlLXBvLWNvbWJvLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWxhYnNcIiB0aXRsZT1cIlBPIENvbWJvIExhYnNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1sYWJzL3NhbXBsZS1wby1jb21iby1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1sYWJzL3NhbXBsZS1wby1jb21iby1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLXNjaGVkdWxpbmdcIiB0aXRsZT1cIlBPIENvbWJvIC0gU2NoZWR1bGluZ1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nL3NhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby10cmFuc2ZlclwiIHRpdGxlPVwiUE8gQ29tYm8gLSBCYW5raW5nIFRyYW5zZmVyXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIvc2FtcGxlLXBvLWNvbWJvLXRyYW5zZmVyLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby10cmFuc2Zlci9zYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8taGVyb2VzXCIgdGl0bGU9XCJQTyBDb21ibyAtIEhlcm9lc1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy9zYW1wbGUtcG8tY29tYm8taGVyb2VzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1oZXJvZXMvc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gQ29tYm8gLSBIZXJvZXMgUmVhY3RpdmUgRm9ybVwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWluZmluaXR5LXNjcm9sbFwiIHRpdGxlPVwiUE8gQ29tYm8gLSBJbmlmaXR5IFNjcm9sbFwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC9zYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1pbmZpbml0eS1zY3JvbGwvc2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1ob3RlbHNcIiB0aXRsZT1cIlBPIENvbWJvIC0gQm9va2luZyBIb3RlbFwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhvdGVscy9zYW1wbGUtcG8tY29tYm8taG90ZWxzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1ob3RlbHMvc2FtcGxlLXBvLWNvbWJvLWhvdGVscy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1jb21ibycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1jb21iby5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBQb0NvbWJvRmlsdGVyU2VydmljZSxcbiAgICBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0NvbWJvQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9Db21ib0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb0NvbWJvQ29tcG9uZW50IGV4dGVuZHMgUG9Db21ib0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGQoUG9Db21ib09wdGlvblRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb21ib09wdGlvblRlbXBsYXRlOiBQb0NvbWJvT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoJ291dGVyQ29udGFpbmVyICcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBvdXRlckNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb250ZW50RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb250ZW50RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaWNvbkFycm93JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaWNvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvTGlzdGJveCcpIHBvTGlzdGJveDogUG9MaXN0Qm94Q29tcG9uZW50O1xuXG4gIGNvbWJvSWNvbjogc3RyaW5nID0gJ0lDT05fQVJST1dfRE9XTic7XG4gIGNvbWJvT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWZmZXI6IGFueTtcbiAgaWQgPSBgcG8tY29tYm9bJHt1dWlkKCl9XWA7XG4gIGlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2Nyb2xsVG9wID0gMDtcbiAgc2hvdWxkTWFya0xldHRlcnM6IGJvb2xlYW4gPSB0cnVlO1xuICBpbmZpbml0ZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9pc1NlcnZlclNlYXJjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RLZXk7XG5cbiAgcHJpdmF0ZSBjbGlja291dExpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBmaWx0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvblNjcm9sbEV2ZW50OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwdWJsaWMgZGVmYXVsdFNlcnZpY2U6IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxhbmd1YWdlU2VydmljZSwgY2hhbmdlRGV0ZWN0b3IpO1xuXG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIHNldCBpc1NlcnZlclNlYXJjaGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5faXNTZXJ2ZXJTZWFyY2hpbmcgPSB2YWx1ZTtcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pc1NlcnZlclNlYXJjaGluZyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1NlcnZlclNlYXJjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTZXJ2ZXJTZWFyY2hpbmc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDb250YWluZXJXaWR0aCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmRlYm91bmNlVGltZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUtleXVwT2JzZXJ2YWJsZSgpO1xuICAgICAgdGhpcy5pbml0SW5wdXRPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5jb25maWdBZnRlclNldEZpbHRlclNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudD8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIGF0cmlidWkgZm9jbyBhbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpesOhLWxhIMOpIG5lY2Vzc8OhcmlvIHRlciBhIGluc3TDom5jaWEgZG8gY29tcG9uZW50ZSBubyBET00sIHBvZGVuZG8gc2VyIHV0aWxpemFkbyBvIFZpZXdDaGlsZCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIGltcG9ydCB7IFBvQ29tYm9Db21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvQ29tYm9Db21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGNvbWJvOiBQb0NvbWJvQ29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0NvbWJvKCkge1xuICAgKiAgIHRoaXMuY29tYm8uZm9jdXMoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZD8uKCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYga2V5ID09PSBQb0tleUNvZGVFbnVtLnRhYikge1xuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBidXNjYSB1bSByZWdpc3RybyBxdWFuZG8gYWNpb25hciBvIHRhYlxuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYga2V5ID09PSBQb0tleUNvZGVFbnVtLnRhYiAmJiBpbnB1dFZhbHVlICYmICF0aGlzLmRpc2FibGVkVGFiRmlsdGVyKSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlWYWx1ZShpbnB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmFycm93RG93bikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgICB0aGlzLmlzRmlsdGVyaW5nID0gdGhpcy5jaGFuZ2VPbkVudGVyID8gdGhpcy5pc0ZpbHRlcmluZyA6IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRlY2xhIFwiZW50ZXJcIlxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiYgdGhpcy5zZWxlY3RlZFZpZXcgJiYgdGhpcy5jb21ib09wZW4pIHtcbiAgICAgIGNvbnN0IGlzVXBkYXRlTW9kZWwgPSB0aGlzLnNlbGVjdGVkVmlldy52YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlIHx8IGlucHV0VmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWaWV3LmxhYmVsO1xuXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUodGhpcy5zZWxlY3RlZFZpZXcsIGlzVXBkYXRlTW9kZWwpO1xuICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZVN0YXRpY09wdGlvbnNdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmVudGVyKSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gUG9LZXlDb2RlRW51bS5lc2MpIHtcbiAgICAgIGlmIChrZXkgPT09IHRoaXMubGFzdEtleSkge1xuICAgICAgICB0aGlzLmxhc3RLZXkgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbmRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25DbG9zZUNvbWJvKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0S2V5ID0gZXZlbnQua2V5Q29kZTtcbiAgfVxuXG4gIG9uS2V5VXAoZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBjb25zdCBpc1ZhbGlkS2V5ID1cbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5hcnJvd1VwICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uYXJyb3dEb3duICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5lc2MgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS50YWI7XG5cbiAgICBpZiAoaXNWYWxpZEtleSkge1xuICAgICAgaWYgKGlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UgJiYgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zaG91bGRNYXJrTGV0dGVycyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JMYWJlbChpbnB1dFZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QsIHRoaXMuZmlsdGVyTW9kZSk7XG4gICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KGlucHV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBxdWFuZG8gYXBhZ2FyIHJhcGlkbyBvIGNhbXBvIGUgY29udGVyIHNlcnZpw6dvLCB2YWxvciwgbsOjbyBkaXNwYXJhdmEgbyBrZXl1cCBvYnNlcnZhYmxlXG4gICAgICAgIC8vIG5lY2Vzc2FyaW8gZXN0ZSB0cmF0YW1lbnRvIHBhcmEgcmV0b3JuYXIgYSBsaXN0YSAnZGVmYXVsdCcuXG4gICAgICAgIGNvbnN0IHVzZURlZmF1bHRPcHRpb25zU2VydmljZSA9XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsID09PSB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1c2VEZWZhdWx0T3B0aW9uc1NlcnZpY2UpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZU9wdGlvbnNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gY2FzbyBvIHZhbG9yIHBlc3F1aXNhZG8gZm9yIGRpZmVyZW50ZSBkbyBhbnRlcmlvciBkZXZlIGFicmlyIG8gY29tYm9cbiAgICAgIGlmICh0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgIT09IGlucHV0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IGlucHV0VmFsdWU7XG4gIH1cblxuICBpbml0SW5wdXRPYnNlcnZhYmxlKCkge1xuICAgIGlmICh0aGlzLnNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGtleXVwT2JzZXJ2YWJsZSA9IGZyb21FdmVudCh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgJ2tleXVwJykucGlwZShcbiAgICAgICAgZmlsdGVyKChlOiBhbnkpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlclRvU2VhcmNoKGUua2V5Q29kZSkpLFxuICAgICAgICBtYXAoKGU6IGFueSkgPT4gZS5jdXJyZW50VGFyZ2V0LnZhbHVlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmtleXVwU3Vic2NyaWJlID0ga2V5dXBPYnNlcnZhYmxlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gdGhpcy5maWx0ZXJNaW5sZW5ndGggfHwgIXZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5jb250cm9sQXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb250cm9sQXBwbHlGaWx0ZXIodmFsdWUsIGlzQXJyb3dEb3duPzogYm9vbGVhbikge1xuICAgIGlmIChcbiAgICAgICghdGhpcy5pc1Byb2Nlc3NpbmdWYWx1ZUJ5VGFiICYmICghdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCB2YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0pKSB8fFxuICAgICAgIXRoaXMuY2FjaGVcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2UuaGFzTmV4dCA9IHRydWU7XG4gICAgICB0aGlzLnBhZ2UgPSB0aGlzLnNldFBhZ2UoKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgdHJ1ZSwgaXNBcnJvd0Rvd24pO1xuICAgIH1cbiAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSBmYWxzZTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBzdHJpbmcsIHJlc2V0OiBib29sZWFuID0gZmFsc2UsIGlzQXJyb3dEb3duPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSwgcmVzZXQpO1xuICAgICAgdGhpcy5pc1NlcnZlclNlYXJjaGluZyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5pbmZpbml0ZVNjcm9sbFxuICAgICAgICA/IHsgcHJvcGVydHk6IHRoaXMuZmllbGRMYWJlbCwgdmFsdWUsIHBhZ2U6IHRoaXMucGFnZSwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfVxuICAgICAgICA6IHsgcHJvcGVydHk6IHRoaXMuZmllbGRMYWJlbCwgdmFsdWUgfTtcblxuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuZ2V0RmlsdGVyZWREYXRhKHBhcmFtLCB0aGlzLmZpbHRlclBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICBpdGVtcyA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRPcHRpb25zQnlBcHBseUZpbHRlcih2YWx1ZSwgaXRlbXMsIHJlc2V0KTtcbiAgICAgICAgICBpZiAoaXNBcnJvd0Rvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB0aGlzLm9uRXJyb3JGaWx0ZXJlZERhdGEoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zQnlBcHBseUZpbHRlcih2YWx1ZSwgaXRlbXMsIHJlc2V0OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gdHJ1ZTtcbiAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbmZpbml0ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnByZXBhcmVPcHRpb25zKGl0ZW1zKTtcblxuICAgIHRoaXMuc2VhcmNoRm9yTGFiZWwodmFsdWUsIGl0ZW1zLCB0aGlzLmZpbHRlck1vZGUpO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSwgcmVzZXQpO1xuXG4gICAgaWYgKHRoaXMuaXNGaXJzdEZpbHRlcikge1xuICAgICAgdGhpcy5pc0ZpcnN0RmlsdGVyID0gIXRoaXMuaXNGaXJzdEZpbHRlcjtcblxuICAgICAgdGhpcy5jYWNoZU9wdGlvbnMgPSB0aGlzLmNvbWJvT3B0aW9uc0xpc3Q7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXJyb3JQYXR0ZXJuKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlIDogJyc7XG4gIH1cblxuICBoYXNJbnZhbGlkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpICYmXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JylcbiAgICApO1xuICB9XG5cbiAgZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgIT09IHZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24/Llt0aGlzLmR5bmFtaWNMYWJlbF0gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSB0cnVlO1xuXG4gICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5nZXRPYmplY3RCeVZhbHVlKHZhbHVlLCB0aGlzLmZpbHRlclBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICBpdGVtID0+IHRoaXMudXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKGl0ZW0pLFxuICAgICAgICBlcnJvciA9PiB0aGlzLm9uRXJyb3JHZXRPYmplY3RCeVZhbHVlKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5vcHRpb25zID0gW2l0ZW1dO1xuICAgICAgdGhpcy5vbk9wdGlvbkNsaWNrKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSBmYWxzZTtcbiAgICB9LCB0aGlzLmRlYm91bmNlVGltZSk7XG4gIH1cblxuICBzZXRTaG91bGRBcHBseUZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG91bGRBcHBseUZvY3VzID0gdmFsdWU7XG4gIH1cblxuICB0b2dnbGVDb21ib1Zpc2liaWxpdHkoaXNCdXR0b24/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNob3VsZEFwcGx5Rm9jdXModHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLmRpc2FibGVkSW5pdEZpbHRlcikge1xuICAgICAgdGhpcy5hcHBseUZpbHRlckluRmlyc3RDbGljaygpO1xuICAgIH1cblxuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSghdGhpcy5jb21ib09wZW4sIGZhbHNlLCBpc0J1dHRvbik7XG4gIH1cblxuICBhcHBseUZpbHRlckluRmlyc3RDbGljaygpIHtcbiAgICBpZiAodGhpcy5pc0ZpcnN0RmlsdGVyICYmICF0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgY29uc3Qgc2Nyb2xsaW5nQ29udHJvbCA9IHRoaXMuc2V0U2Nyb2xsaW5nQ29udHJvbCgpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcignJywgc2Nyb2xsaW5nQ29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgY29udHJvbENvbWJvVmlzaWJpbGl0eSh0b09wZW46IGJvb2xlYW4sIHJlc2V0OiBib29sZWFuID0gZmFsc2UsIGlzQnV0dG9uPzogYm9vbGVhbikge1xuICAgIHRvT3BlbiA/IHRoaXMub3BlbihyZXNldCwgaXNCdXR0b24pIDogdGhpcy5jbG9zZShyZXNldCk7XG4gIH1cblxuICBvbkNsb3NlQ29tYm8oKSB7XG4gICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25PcHRpb25DbGljayhvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXAsIGV2ZW50PzogYW55KSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0SW5wdXRWYWx1ZSgpO1xuICAgIGNvbnN0IGlzVXBkYXRlTW9kZWwgPVxuICAgICAgb3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlIHx8XG4gICAgICAhISh0aGlzLnNlbGVjdGVkVmlldyAmJiBpbnB1dFZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmlld1t0aGlzLmR5bmFtaWNMYWJlbF0pO1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uLCBpc1VwZGF0ZU1vZGVsKTtcbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZVN0YXRpY09wdGlvbnNdKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmlld1t0aGlzLmR5bmFtaWNMYWJlbF07XG5cbiAgICBpZiAodGhpcy5zaG91bGRBcHBseUZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVNjcm9sbFRvcChzZWxlY3RlZEl0ZW0sIGluZGV4KSB7XG4gICAgaWYgKCFzZWxlY3RlZEl0ZW0ubGVuZ3RoIHx8IGluZGV4IDw9IDEpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtWzBdLm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICBjbGVhbkxpc3Rib3goKSB7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgIHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IChvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICB9XG5cbiAgZ2V0SW5wdXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXRJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNsZWFuTGlzdGJveCgpO1xuICAgIH1cbiAgfVxuXG4gIHdhc0NsaWNrZWRPblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tYm9PcGVuICYmXG4gICAgICAhdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAoIXRoaXMuY29udGVudEVsZW1lbnQgfHwgIXRoaXMuY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICkge1xuICAgICAgLy8gRXNjb25kZSBDb250ZW50IGRvIENvbWJvIHF1YW5kbyBmb3IgY2xpY2FkbyBmb3JhXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuXG4gICAgICB0aGlzLnZlcmlmeVZhbGlkT3B0aW9uKCk7XG5cbiAgICAgIC8vIGNhc28gZm9yIGNoYW5nZU9uRW50ZXIgZGV2ZSBsaW1wYXIgbyBzZWxlY3RlZFZpZXcgcGFyYSByZWluaWNpYS1sb1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB0aGlzLmNoYW5nZU9uRW50ZXIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSA/IHVuZGVmaW5lZCA6IHRoaXMuc2VsZWN0ZWRWaWV3O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLmdldElucHV0VmFsdWUoKSAmJiAhdGhpcy5pc0ZpcnN0RmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGluZ0NvbnRyb2wgPSB0aGlzLnNldFNjcm9sbGluZ0NvbnRyb2woKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcignJywgc2Nyb2xsaW5nQ29udHJvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZENoYXJhY3RlclRvU2VhcmNoKGtleUNvZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAga2V5Q29kZSAhPT0gOSAmJiAvLyB0YWJcbiAgICAgIGtleUNvZGUgIT09IDEzICYmIC8vIGVudGV0XG4gICAgICBrZXlDb2RlICE9PSAxNiAmJiAvLyBzaGlmdFxuICAgICAga2V5Q29kZSAhPT0gMTcgJiYgLy8gY3RybFxuICAgICAga2V5Q29kZSAhPT0gMTggJiYgLy8gYWx0XG4gICAgICBrZXlDb2RlICE9PSAyMCAmJiAvLyBjYXBzbG9ja1xuICAgICAga2V5Q29kZSAhPT0gMjcgJiYgLy8gZXNjXG4gICAgICBrZXlDb2RlICE9PSAzNyAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOSAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA0MCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA5M1xuICAgICk7IC8vIHdpbmRvd3MgbWVudVxuICB9XG5cbiAgc2VhcmNoT25FbnRlck9yQXJyb3coZXZlbnQsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpICYmXG4gICAgICB0aGlzLnNlcnZpY2UgJiZcbiAgICAgICF0aGlzLnNlbGVjdGVkVmlldyAmJlxuICAgICAgdmFsdWUubGVuZ3RoID49IHRoaXMuZmlsdGVyTWlubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd01vcmVJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0KSB7XG4gICAgICB0aGlzLmluZmluaXRlTG9hZGluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucGFnZSsrO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycsIHRydWUpO1xuICB9XG5cbiAgY2xlYXJBbmRGb2N1cygpIHtcbiAgICB0aGlzLmNsZWFyKG51bGwpO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ29tYm9Db250YWluZXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZShyZXNldDogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gZmFsc2U7XG5cbiAgICBpZiAoIXJlc2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZ2V0SW5wdXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMuc2V0UGFnZSgpO1xuICAgICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbWJvSWNvbiA9ICdJQ09OX0FSUk9XX0RPV04nO1xuXG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICB0aGlzLmNsaWNrb3V0TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgLy8gdGltZW91dCBuZWNlc3NhcmlvIHBvaXMgYSBhbmltYcOnw6NvIGRvIHBvLW1lbnUgaW1wYWN0YSBubyBhanVzdGUgZGEgcG9zacOnw6NvIGRvIGNvbnRhaW5lci5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpLCAyNTApO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkVycm9yR2V0T2JqZWN0QnlWYWx1ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZU9wdGlvbkJ5RmlsdGVyZWRWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICB9O1xuXG4gIHByaXZhdGUgb25FcnJvckZpbHRlcmVkRGF0YSgpIHtcbiAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbXSk7XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW4ocmVzZXQ6IGJvb2xlYW4sIGlzQnV0dG9uPzogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gdHJ1ZTtcbiAgICBpZiAoIXJlc2V0ICYmIHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIGlmICghdGhpcy5nZXRJbnB1dFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucygpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5jb21ib0ljb24gPSAnSUNPTl9BUlJPV19VUCc7XG5cbiAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcblxuICAgIGlzQnV0dG9uXG4gICAgICA/IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpXG4gICAgICA6IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICB0aGlzLnNldENvbnRhaW5lclBvc2l0aW9uKCk7XG4gICAgaWYgKHRoaXMuY29tYm9PcGVuKSB7XG4gICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb250YWluZXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9Db21ib0NvbnRhaW5lck9mZnNldCxcbiAgICAgIHRoaXMuaW5wdXRFbCxcbiAgICAgIFsndG9wJywgJ2JvdHRvbSddLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm91dGVyQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gdGhpcy5vdXRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnB1dFZhbHVlKCkgPyB0aGlzLm9wdGlvbnMgOiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZU9wdGlvbnMoaXRlbXMpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IFsuLi50aGlzLm9wdGlvbnMsIC4uLml0ZW1zXSA6IGl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gMSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2Nyb2xsaW5nQ29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNJdGVtKCkge1xuICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxldCBpdGVtO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvLWxpc3Rib3gtaXRlbVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wby1saXN0Ym94LWl0ZW0nKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgaXRlbT8uZm9jdXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiAjb3V0ZXJDb250YWluZXI+XG4gIDxwby1maWVsZC1jb250YWluZXJcbiAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3AtaWRdPVwiaWRcIlxuICAgIFtwLWxhYmVsXT1cImxhYmVsXCJcbiAgICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gICAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtwLXNob3ctcmVxdWlyZWRdPVwic2hvd1JlcXVpcmVkXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICNzZWFyY2hDb250YWluZXJcbiAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50IHBvLWNvbWJvLWNvbnRhaW5lci1jb250ZW50XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicG8tY29tYm8tY29udGFpbmVyLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImljb25cIiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLWxlZnRcIj5cbiAgICAgICAgICA8cG8taWNvblxuICAgICAgICAgICAgY2xhc3M9XCJwby1maWVsZC1pY29uIHBvLWljb24taW5wdXRcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3AtaWNvbl09XCJpY29uXCJcbiAgICAgICAgICA+PC9wby1pY29uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjaW5wXG4gICAgICAgICAgY2xhc3M9XCJwby1jb21iby1pbnB1dFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY2xlYW4gJiYgaW5wLnZhbHVlID8gJ3BvLWlucHV0LWRvdWJsZS1pY29uLXJpZ2h0JyA6ICdwby1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICAgICAgW2NsYXNzLnBvLWlucHV0LWljb24tbGVmdF09XCJpY29uXCJcbiAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGlzYWJsZWQgPyAnJyA6IHBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21ib1Zpc2liaWxpdHkoKVwiXG4gICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2hPbkVudGVyT3JBcnJvdygkZXZlbnQsICRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgICAgPHBvLWNsZWFuXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxpdGVyYWxzLmNsZWFuXCJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tY29tYm8tY2xlYW4gcG8taWNvbi1pbnB1dFwiXG4gICAgICAgICAgICAqbmdJZj1cImNsZWFuICYmICFkaXNhYmxlZCAmJiBpbnAudmFsdWVcIlxuICAgICAgICAgICAgW3AtZWxlbWVudC1yZWZdPVwiaW5wdXRFbFwiXG4gICAgICAgICAgICAocC1jaGFuZ2UtZXZlbnQpPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIobnVsbCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsZWFyQW5kRm9jdXMoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3BvLWNsZWFuPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2ljb25BcnJvd1xuICAgICAgICAgICAgY2xhc3M9XCJwby1jb21iby1hcnJvdyBwby1maWVsZC1pY29uXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21ib1Zpc2liaWxpdHkodHJ1ZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwby1pY29uXG4gICAgICAgICAgICAgIFtwLWljb25dPVwiY29tYm9PcGVuID8gJ0lDT05fQVJST1dfVVAgcG8taWNvbi1pbnB1dCcgOiAnSUNPTl9BUlJPV19ET1dOIHBvLWljb24taW5wdXQnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb25dPVwiIWRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLWNvbWJvLWRlZmF1bHQtYm9yZGVyXT1cIiFkaXNhYmxlZCAmJiBpbnAudmFsdWVcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tY29tYm8tYmFja2dyb3VuZC1hcnJvdy11cF09XCIhZGlzYWJsZWQgJiYgY29tYm9PcGVuXCJcbiAgICAgICAgICAgID48L3BvLWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwZW5kQm94OyB0aGVuIGRyb3Bkb3duQ0RLOyBlbHNlIGRyb3Bkb3duRGVmYXVsdFwiPiA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25EZWZhdWx0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duTGlzdGJveFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkNESz5cbiAgICAgIDxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5IFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIiBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwidHJ1ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25MaXN0Ym94XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbVxuICAgICAgW3AtaGVscF09XCJoZWxwXCJcbiAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtwLWVycm9yLXBhdHRlcm5dPVwiZ2V0RXJyb3JQYXR0ZXJuKClcIlxuICAgID48L3BvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+XG4gIDwvcG8tZmllbGQtY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25MaXN0Ym94PlxuICAgIDxkaXYgI2NvbnRhaW5lckVsZW1lbnQgY2xhc3M9XCJwby1jb21iby1jb250YWluZXJcIiBbaGlkZGVuXT1cIiFjb21ib09wZW4gJiYgIWlzU2VydmVyU2VhcmNoaW5nXCI+XG4gICAgICA8cG8tbGlzdGJveFxuICAgICAgICAjcG9MaXN0Ym94XG4gICAgICAgICNjb250ZW50RWxlbWVudFxuICAgICAgICBwLXR5cGU9XCJvcHRpb25cIlxuICAgICAgICBbcC1pdGVtc109XCJ2aXNpYmxlT3B0aW9uc1wiXG4gICAgICAgIFtwLWZpZWxkLXZhbHVlXT1cImR5bmFtaWNWYWx1ZVwiXG4gICAgICAgIFtwLWZpZWxkLWxhYmVsXT1cImR5bmFtaWNMYWJlbFwiXG4gICAgICAgIFtwLXRlbXBsYXRlXT1cImNvbWJvT3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICBbcC1zZWFyY2gtdmFsdWVdPVwiZ2V0SW5wdXRWYWx1ZSgpXCJcbiAgICAgICAgW3AtaW5maW5pdGUtbG9hZGluZ109XCJpbmZpbml0ZUxvYWRpbmdcIlxuICAgICAgICBbcC1pbmZpbml0ZS1zY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxuICAgICAgICBbcC1maWx0ZXJpbmddPVwiaXNGaWx0ZXJpbmdcIlxuICAgICAgICBbcC1jYWNoZV09XCJjYWNoZVwiXG4gICAgICAgIChwLXNlbGVjdGNvbWJvLWl0ZW0pPVwib25PcHRpb25DbGljaygkZXZlbnQsICRldmVudC5ldmVudClcIlxuICAgICAgICBbcC1maWx0ZXItbW9kZV09XCJmaWx0ZXJNb2RlXCJcbiAgICAgICAgW3AtdmlzaWJsZV09XCJjb21ib09wZW5cIlxuICAgICAgICBbcC1pcy1zZWFyY2hpbmddPVwiaXNTZXJ2ZXJTZWFyY2hpbmdcIlxuICAgICAgICBbcC1zaG91bGQtbWFyay1sZXR0ZXJdPVwic2hvdWxkTWFya0xldHRlcnNcIlxuICAgICAgICBbcC1jb21wYXJlLWNhY2hlXT1cImNvbXBhcmVPYmplY3RzKGNhY2hlT3B0aW9ucywgdmlzaWJsZU9wdGlvbnMpXCJcbiAgICAgICAgW3AtY29tYm8tc2VydmljZV09XCJzZXJ2aWNlXCJcbiAgICAgICAgW3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlXT1cImluZmluaXRlU2Nyb2xsRGlzdGFuY2VcIlxuICAgICAgICAocC11cGRhdGUtaW5maW5pdGUtc2Nyb2xsKT1cInNob3dNb3JlSW5maW5pdGVTY3JvbGwoKVwiXG4gICAgICAgIChwLWNsb3NlKT1cIm9uQ2xvc2VDb21ibygpXCJcbiAgICAgICAgW3AtY29udGFpbmVyLXdpZHRoXT1cImNvbnRhaW5lcldpZHRoXCJcbiAgICAgID48L3BvLWxpc3Rib3g+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
743
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL3BvLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jb21iby9wby1jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFNVixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDbkJyQywrQkFBdUQ7SUFDckQsOEJBSVc7SUFDYixpQkFBTTs7O0lBSEYsY0FBeUM7SUFBekMs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QUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDNUIsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXOztrRkFQWCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9LZXlDb2RlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vZW51bXMvcG8ta2V5LWNvZGUuZW51bSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0NvbWJvQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tY29tYm8tYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9Db21ib0ZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3BvLWNvbWJvLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvQ29tYm9Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1ncm91cC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlL3BvLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9MaXN0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi8uLi8uLi9wby1saXN0Ym94L3BvLWxpc3Rib3guY29tcG9uZW50JztcblxuY29uc3QgcG9Db21ib0NvbnRhaW5lck9mZnNldCA9IDg7XG5jb25zdCBwb0NvbWJvQ29udGFpbmVyUG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvQ29tYm9CYXNlQ29tcG9uZW50XG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWJhc2ljXCIgdGl0bGU9XCJQTyBDb21ibyBCYXNpY1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWJhc2ljL3NhbXBsZS1wby1jb21iby1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tYmFzaWMvc2FtcGxlLXBvLWNvbWJvLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWxhYnNcIiB0aXRsZT1cIlBPIENvbWJvIExhYnNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1sYWJzL3NhbXBsZS1wby1jb21iby1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1sYWJzL3NhbXBsZS1wby1jb21iby1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLXNjaGVkdWxpbmdcIiB0aXRsZT1cIlBPIENvbWJvIC0gU2NoZWR1bGluZ1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nL3NhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby10cmFuc2ZlclwiIHRpdGxlPVwiUE8gQ29tYm8gLSBCYW5raW5nIFRyYW5zZmVyXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIvc2FtcGxlLXBvLWNvbWJvLXRyYW5zZmVyLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby10cmFuc2Zlci9zYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8taGVyb2VzXCIgdGl0bGU9XCJQTyBDb21ibyAtIEhlcm9lc1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy9zYW1wbGUtcG8tY29tYm8taGVyb2VzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1oZXJvZXMvc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gQ29tYm8gLSBIZXJvZXMgUmVhY3RpdmUgRm9ybVwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWluZmluaXR5LXNjcm9sbFwiIHRpdGxlPVwiUE8gQ29tYm8gLSBJbmlmaXR5IFNjcm9sbFwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC9zYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1pbmZpbml0eS1zY3JvbGwvc2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1ob3RlbHNcIiB0aXRsZT1cIlBPIENvbWJvIC0gQm9va2luZyBIb3RlbFwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhvdGVscy9zYW1wbGUtcG8tY29tYm8taG90ZWxzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1ob3RlbHMvc2FtcGxlLXBvLWNvbWJvLWhvdGVscy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1jb21ibycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1jb21iby5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBQb0NvbWJvRmlsdGVyU2VydmljZSxcbiAgICBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0NvbWJvQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9Db21ib0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb0NvbWJvQ29tcG9uZW50IGV4dGVuZHMgUG9Db21ib0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGQoUG9Db21ib09wdGlvblRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb21ib09wdGlvblRlbXBsYXRlOiBQb0NvbWJvT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoJ291dGVyQ29udGFpbmVyICcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBvdXRlckNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb250ZW50RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb250ZW50RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaWNvbkFycm93JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaWNvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvTGlzdGJveCcpIHBvTGlzdGJveDogUG9MaXN0Qm94Q29tcG9uZW50O1xuXG4gIGNvbWJvSWNvbjogc3RyaW5nID0gJ0lDT05fQVJST1dfRE9XTic7XG4gIGNvbWJvT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWZmZXI6IGFueTtcbiAgaWQgPSBgcG8tY29tYm9bJHt1dWlkKCl9XWA7XG4gIGlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2Nyb2xsVG9wID0gMDtcbiAgc2hvdWxkTWFya0xldHRlcnM6IGJvb2xlYW4gPSB0cnVlO1xuICBpbmZpbml0ZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9pc1NlcnZlclNlYXJjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RLZXk7XG5cbiAgcHJpdmF0ZSBjbGlja291dExpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBmaWx0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvblNjcm9sbEV2ZW50OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwdWJsaWMgZGVmYXVsdFNlcnZpY2U6IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxhbmd1YWdlU2VydmljZSwgY2hhbmdlRGV0ZWN0b3IpO1xuXG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIHNldCBpc1NlcnZlclNlYXJjaGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5faXNTZXJ2ZXJTZWFyY2hpbmcgPSB2YWx1ZTtcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pc1NlcnZlclNlYXJjaGluZyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1NlcnZlclNlYXJjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTZXJ2ZXJTZWFyY2hpbmc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDb250YWluZXJXaWR0aCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmRlYm91bmNlVGltZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUtleXVwT2JzZXJ2YWJsZSgpO1xuICAgICAgdGhpcy5pbml0SW5wdXRPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5jb25maWdBZnRlclNldEZpbHRlclNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudD8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIGF0cmlidWkgZm9jbyBhbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpesOhLWxhIMOpIG5lY2Vzc8OhcmlvIHRlciBhIGluc3TDom5jaWEgZG8gY29tcG9uZW50ZSBubyBET00sIHBvZGVuZG8gc2VyIHV0aWxpemFkbyBvIFZpZXdDaGlsZCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIGltcG9ydCB7IFBvQ29tYm9Db21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvQ29tYm9Db21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGNvbWJvOiBQb0NvbWJvQ29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0NvbWJvKCkge1xuICAgKiAgIHRoaXMuY29tYm8uZm9jdXMoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZD8uKCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYga2V5ID09PSBQb0tleUNvZGVFbnVtLnRhYikge1xuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBidXNjYSB1bSByZWdpc3RybyBxdWFuZG8gYWNpb25hciBvIHRhYlxuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYga2V5ID09PSBQb0tleUNvZGVFbnVtLnRhYiAmJiBpbnB1dFZhbHVlICYmICF0aGlzLmRpc2FibGVkVGFiRmlsdGVyKSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlWYWx1ZShpbnB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmFycm93RG93bikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgICB0aGlzLmlzRmlsdGVyaW5nID0gdGhpcy5jaGFuZ2VPbkVudGVyID8gdGhpcy5pc0ZpbHRlcmluZyA6IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRlY2xhIFwiZW50ZXJcIlxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiYgdGhpcy5zZWxlY3RlZFZpZXcgJiYgdGhpcy5jb21ib09wZW4pIHtcbiAgICAgIGNvbnN0IGlzVXBkYXRlTW9kZWwgPSB0aGlzLnNlbGVjdGVkVmlldy52YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlIHx8IGlucHV0VmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWaWV3LmxhYmVsO1xuXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUodGhpcy5zZWxlY3RlZFZpZXcsIGlzVXBkYXRlTW9kZWwpO1xuICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZVN0YXRpY09wdGlvbnNdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmVudGVyKSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gUG9LZXlDb2RlRW51bS5lc2MpIHtcbiAgICAgIGlmIChrZXkgPT09IHRoaXMubGFzdEtleSkge1xuICAgICAgICB0aGlzLmxhc3RLZXkgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbmRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25DbG9zZUNvbWJvKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0S2V5ID0gZXZlbnQua2V5Q29kZTtcbiAgfVxuXG4gIG9uS2V5VXAoZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBjb25zdCBpc1ZhbGlkS2V5ID1cbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5hcnJvd1VwICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uYXJyb3dEb3duICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5lc2MgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS50YWI7XG5cbiAgICBpZiAoaXNWYWxpZEtleSkge1xuICAgICAgaWYgKGlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UgJiYgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zaG91bGRNYXJrTGV0dGVycyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JMYWJlbChpbnB1dFZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QsIHRoaXMuZmlsdGVyTW9kZSk7XG4gICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KGlucHV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBxdWFuZG8gYXBhZ2FyIHJhcGlkbyBvIGNhbXBvIGUgY29udGVyIHNlcnZpw6dvLCB2YWxvciwgbsOjbyBkaXNwYXJhdmEgbyBrZXl1cCBvYnNlcnZhYmxlXG4gICAgICAgIC8vIG5lY2Vzc2FyaW8gZXN0ZSB0cmF0YW1lbnRvIHBhcmEgcmV0b3JuYXIgYSBsaXN0YSAnZGVmYXVsdCcuXG4gICAgICAgIGNvbnN0IHVzZURlZmF1bHRPcHRpb25zU2VydmljZSA9XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsID09PSB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1c2VEZWZhdWx0T3B0aW9uc1NlcnZpY2UpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZU9wdGlvbnNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gY2FzbyBvIHZhbG9yIHBlc3F1aXNhZG8gZm9yIGRpZmVyZW50ZSBkbyBhbnRlcmlvciBkZXZlIGFicmlyIG8gY29tYm9cbiAgICAgIGlmICh0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgIT09IGlucHV0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IGlucHV0VmFsdWU7XG4gIH1cblxuICBpbml0SW5wdXRPYnNlcnZhYmxlKCkge1xuICAgIGlmICh0aGlzLnNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGtleXVwT2JzZXJ2YWJsZSA9IGZyb21FdmVudCh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgJ2tleXVwJykucGlwZShcbiAgICAgICAgZmlsdGVyKChlOiBhbnkpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlclRvU2VhcmNoKGUua2V5Q29kZSkpLFxuICAgICAgICBtYXAoKGU6IGFueSkgPT4gZS5jdXJyZW50VGFyZ2V0LnZhbHVlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmtleXVwU3Vic2NyaWJlID0ga2V5dXBPYnNlcnZhYmxlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gdGhpcy5maWx0ZXJNaW5sZW5ndGggfHwgIXZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5jb250cm9sQXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb250cm9sQXBwbHlGaWx0ZXIodmFsdWUsIGlzQXJyb3dEb3duPzogYm9vbGVhbikge1xuICAgIGlmIChcbiAgICAgICghdGhpcy5pc1Byb2Nlc3NpbmdWYWx1ZUJ5VGFiICYmICghdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCB2YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0pKSB8fFxuICAgICAgIXRoaXMuY2FjaGVcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2UuaGFzTmV4dCA9IHRydWU7XG4gICAgICB0aGlzLnBhZ2UgPSB0aGlzLnNldFBhZ2UoKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgdHJ1ZSwgaXNBcnJvd0Rvd24pO1xuICAgIH1cbiAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSBmYWxzZTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBzdHJpbmcsIHJlc2V0OiBib29sZWFuID0gZmFsc2UsIGlzQXJyb3dEb3duPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSwgcmVzZXQpO1xuICAgICAgdGhpcy5pc1NlcnZlclNlYXJjaGluZyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5pbmZpbml0ZVNjcm9sbFxuICAgICAgICA/IHsgcHJvcGVydHk6IHRoaXMuZmllbGRMYWJlbCwgdmFsdWUsIHBhZ2U6IHRoaXMucGFnZSwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfVxuICAgICAgICA6IHsgcHJvcGVydHk6IHRoaXMuZmllbGRMYWJlbCwgdmFsdWUgfTtcblxuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuZ2V0RmlsdGVyZWREYXRhKHBhcmFtLCB0aGlzLmZpbHRlclBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICBpdGVtcyA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRPcHRpb25zQnlBcHBseUZpbHRlcih2YWx1ZSwgaXRlbXMsIHJlc2V0KTtcbiAgICAgICAgICBpZiAoaXNBcnJvd0Rvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB0aGlzLm9uRXJyb3JGaWx0ZXJlZERhdGEoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zQnlBcHBseUZpbHRlcih2YWx1ZSwgaXRlbXMsIHJlc2V0OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gdHJ1ZTtcbiAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbmZpbml0ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnByZXBhcmVPcHRpb25zKGl0ZW1zKTtcblxuICAgIHRoaXMuc2VhcmNoRm9yTGFiZWwodmFsdWUsIGl0ZW1zLCB0aGlzLmZpbHRlck1vZGUpO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSwgcmVzZXQpO1xuXG4gICAgaWYgKHRoaXMuaXNGaXJzdEZpbHRlcikge1xuICAgICAgdGhpcy5pc0ZpcnN0RmlsdGVyID0gIXRoaXMuaXNGaXJzdEZpbHRlcjtcblxuICAgICAgdGhpcy5jYWNoZU9wdGlvbnMgPSB0aGlzLmNvbWJvT3B0aW9uc0xpc3Q7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXJyb3JQYXR0ZXJuKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlIDogJyc7XG4gIH1cblxuICBoYXNJbnZhbGlkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpICYmXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JylcbiAgICApO1xuICB9XG5cbiAgZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgIT09IHZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24/Llt0aGlzLmR5bmFtaWNMYWJlbF0gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSB0cnVlO1xuXG4gICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5nZXRPYmplY3RCeVZhbHVlKHZhbHVlLCB0aGlzLmZpbHRlclBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICBpdGVtID0+IHRoaXMudXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKGl0ZW0pLFxuICAgICAgICBlcnJvciA9PiB0aGlzLm9uRXJyb3JHZXRPYmplY3RCeVZhbHVlKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5vcHRpb25zID0gW2l0ZW1dO1xuICAgICAgdGhpcy5vbk9wdGlvbkNsaWNrKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSBmYWxzZTtcbiAgICB9LCB0aGlzLmRlYm91bmNlVGltZSk7XG4gIH1cblxuICBzZXRTaG91bGRBcHBseUZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG91bGRBcHBseUZvY3VzID0gdmFsdWU7XG4gIH1cblxuICB0b2dnbGVDb21ib1Zpc2liaWxpdHkoaXNCdXR0b24/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNob3VsZEFwcGx5Rm9jdXModHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLmRpc2FibGVkSW5pdEZpbHRlcikge1xuICAgICAgdGhpcy5hcHBseUZpbHRlckluRmlyc3RDbGljaygpO1xuICAgIH1cblxuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSghdGhpcy5jb21ib09wZW4sIGZhbHNlLCBpc0J1dHRvbik7XG4gIH1cblxuICBhcHBseUZpbHRlckluRmlyc3RDbGljaygpIHtcbiAgICBpZiAodGhpcy5pc0ZpcnN0RmlsdGVyICYmICF0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgY29uc3Qgc2Nyb2xsaW5nQ29udHJvbCA9IHRoaXMuc2V0U2Nyb2xsaW5nQ29udHJvbCgpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcignJywgc2Nyb2xsaW5nQ29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgY29udHJvbENvbWJvVmlzaWJpbGl0eSh0b09wZW46IGJvb2xlYW4sIHJlc2V0OiBib29sZWFuID0gZmFsc2UsIGlzQnV0dG9uPzogYm9vbGVhbikge1xuICAgIHRvT3BlbiA/IHRoaXMub3BlbihyZXNldCwgaXNCdXR0b24pIDogdGhpcy5jbG9zZShyZXNldCk7XG4gIH1cblxuICBvbkNsb3NlQ29tYm8oKSB7XG4gICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25PcHRpb25DbGljayhvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXAsIGV2ZW50PzogYW55KSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0SW5wdXRWYWx1ZSgpO1xuICAgIGNvbnN0IGlzVXBkYXRlTW9kZWwgPVxuICAgICAgb3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlIHx8XG4gICAgICAhISh0aGlzLnNlbGVjdGVkVmlldyAmJiBpbnB1dFZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmlld1t0aGlzLmR5bmFtaWNMYWJlbF0pO1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uLCBpc1VwZGF0ZU1vZGVsKTtcbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZVN0YXRpY09wdGlvbnNdKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmlld1t0aGlzLmR5bmFtaWNMYWJlbF07XG5cbiAgICBpZiAodGhpcy5zaG91bGRBcHBseUZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVNjcm9sbFRvcChzZWxlY3RlZEl0ZW0sIGluZGV4KSB7XG4gICAgaWYgKCFzZWxlY3RlZEl0ZW0ubGVuZ3RoIHx8IGluZGV4IDw9IDEpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtWzBdLm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICBjbGVhbkxpc3Rib3goKSB7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgIHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IChvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICB9XG5cbiAgZ2V0SW5wdXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXRJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNsZWFuTGlzdGJveCgpO1xuICAgIH1cbiAgfVxuXG4gIHdhc0NsaWNrZWRPblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tYm9PcGVuICYmXG4gICAgICAhdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAoIXRoaXMuY29udGVudEVsZW1lbnQgfHwgIXRoaXMuY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICkge1xuICAgICAgLy8gRXNjb25kZSBDb250ZW50IGRvIENvbWJvIHF1YW5kbyBmb3IgY2xpY2FkbyBmb3JhXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuXG4gICAgICB0aGlzLnZlcmlmeVZhbGlkT3B0aW9uKCk7XG5cbiAgICAgIC8vIGNhc28gZm9yIGNoYW5nZU9uRW50ZXIgZGV2ZSBsaW1wYXIgbyBzZWxlY3RlZFZpZXcgcGFyYSByZWluaWNpYS1sb1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB0aGlzLmNoYW5nZU9uRW50ZXIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSA/IHVuZGVmaW5lZCA6IHRoaXMuc2VsZWN0ZWRWaWV3O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLmdldElucHV0VmFsdWUoKSAmJiAhdGhpcy5pc0ZpcnN0RmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGluZ0NvbnRyb2wgPSB0aGlzLnNldFNjcm9sbGluZ0NvbnRyb2woKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcignJywgc2Nyb2xsaW5nQ29udHJvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZENoYXJhY3RlclRvU2VhcmNoKGtleUNvZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAga2V5Q29kZSAhPT0gOSAmJiAvLyB0YWJcbiAgICAgIGtleUNvZGUgIT09IDEzICYmIC8vIGVudGV0XG4gICAgICBrZXlDb2RlICE9PSAxNiAmJiAvLyBzaGlmdFxuICAgICAga2V5Q29kZSAhPT0gMTcgJiYgLy8gY3RybFxuICAgICAga2V5Q29kZSAhPT0gMTggJiYgLy8gYWx0XG4gICAgICBrZXlDb2RlICE9PSAyMCAmJiAvLyBjYXBzbG9ja1xuICAgICAga2V5Q29kZSAhPT0gMjcgJiYgLy8gZXNjXG4gICAgICBrZXlDb2RlICE9PSAzNyAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOSAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA0MCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA5M1xuICAgICk7IC8vIHdpbmRvd3MgbWVudVxuICB9XG5cbiAgc2VhcmNoT25FbnRlck9yQXJyb3coZXZlbnQsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpICYmXG4gICAgICB0aGlzLnNlcnZpY2UgJiZcbiAgICAgICF0aGlzLnNlbGVjdGVkVmlldyAmJlxuICAgICAgdmFsdWUubGVuZ3RoID49IHRoaXMuZmlsdGVyTWlubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd01vcmVJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0KSB7XG4gICAgICB0aGlzLmluZmluaXRlTG9hZGluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucGFnZSsrO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycsIHRydWUpO1xuICB9XG5cbiAgY2xlYXJBbmRGb2N1cygpIHtcbiAgICB0aGlzLmNsZWFyKG51bGwpO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ29tYm9Db250YWluZXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZShyZXNldDogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gZmFsc2U7XG5cbiAgICBpZiAoIXJlc2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZ2V0SW5wdXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMuc2V0UGFnZSgpO1xuICAgICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbWJvSWNvbiA9ICdJQ09OX0FSUk9XX0RPV04nO1xuXG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICB0aGlzLmNsaWNrb3V0TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgLy8gdGltZW91dCBuZWNlc3NhcmlvIHBvaXMgYSBhbmltYcOnw6NvIGRvIHBvLW1lbnUgaW1wYWN0YSBubyBhanVzdGUgZGEgcG9zacOnw6NvIGRvIGNvbnRhaW5lci5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpLCAyNTApO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkVycm9yR2V0T2JqZWN0QnlWYWx1ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZU9wdGlvbkJ5RmlsdGVyZWRWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICB9O1xuXG4gIHByaXZhdGUgb25FcnJvckZpbHRlcmVkRGF0YSgpIHtcbiAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbXSk7XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW4ocmVzZXQ6IGJvb2xlYW4sIGlzQnV0dG9uPzogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gdHJ1ZTtcbiAgICBpZiAoIXJlc2V0ICYmIHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIGlmICghdGhpcy5nZXRJbnB1dFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucygpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5jb21ib0ljb24gPSAnSUNPTl9BUlJPV19VUCc7XG5cbiAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcblxuICAgIGlzQnV0dG9uXG4gICAgICA/IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpXG4gICAgICA6IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICB0aGlzLnNldENvbnRhaW5lclBvc2l0aW9uKCk7XG4gICAgaWYgKHRoaXMuY29tYm9PcGVuKSB7XG4gICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb250YWluZXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9Db21ib0NvbnRhaW5lck9mZnNldCxcbiAgICAgIHRoaXMuaW5wdXRFbCxcbiAgICAgIFsndG9wJywgJ2JvdHRvbSddLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm91dGVyQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gdGhpcy5vdXRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnB1dFZhbHVlKCkgPyB0aGlzLm9wdGlvbnMgOiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZU9wdGlvbnMoaXRlbXMpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IFsuLi50aGlzLm9wdGlvbnMsIC4uLml0ZW1zXSA6IGl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gMSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2Nyb2xsaW5nQ29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNJdGVtKCkge1xuICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxldCBpdGVtO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvLWxpc3Rib3gtaXRlbVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wby1saXN0Ym94LWl0ZW0nKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgaXRlbT8uZm9jdXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiAjb3V0ZXJDb250YWluZXI+XG4gIDxwby1maWVsZC1jb250YWluZXJcbiAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3AtaWRdPVwiaWRcIlxuICAgIFtwLWxhYmVsXT1cImxhYmVsXCJcbiAgICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gICAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtwLXNob3ctcmVxdWlyZWRdPVwic2hvd1JlcXVpcmVkXCJcbiAgPlxuICAgIDxkaXYgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIiBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50IHBvLWNvbWJvLWNvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaWNvblwiIGNsYXNzPVwicG8tZmllbGQtaWNvbi1jb250YWluZXItbGVmdFwiPlxuICAgICAgICA8cG8taWNvblxuICAgICAgICAgIGNsYXNzPVwicG8tZmllbGQtaWNvbiBwby1pY29uLWlucHV0XCJcbiAgICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW3AtaWNvbl09XCJpY29uXCJcbiAgICAgICAgPjwvcG8taWNvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2lucFxuICAgICAgICBjbGFzcz1cInBvLWNvbWJvLWlucHV0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY2xlYW4gJiYgaW5wLnZhbHVlID8gJ3BvLWlucHV0LWRvdWJsZS1pY29uLXJpZ2h0JyA6ICdwby1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICAgIFtjbGFzcy5wby1pbnB1dC1pY29uLWxlZnRdPVwiaWNvblwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRpc2FibGVkID8gJycgOiBwbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21ib1Zpc2liaWxpdHkoKVwiXG4gICAgICAgIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgIChrZXl1cCk9XCJzZWFyY2hPbkVudGVyT3JBcnJvdygkZXZlbnQsICRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgIDxwby1jbGVhblxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaXRlcmFscy5jbGVhblwiXG4gICAgICAgICAgY2xhc3M9XCJwby1jb21iby1jbGVhbiBwby1pY29uLWlucHV0XCJcbiAgICAgICAgICAqbmdJZj1cImNsZWFuICYmICFkaXNhYmxlZCAmJiBpbnAudmFsdWVcIlxuICAgICAgICAgIFtwLWVsZW1lbnQtcmVmXT1cImlucHV0RWxcIlxuICAgICAgICAgIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigkZXZlbnQpXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXIobnVsbCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbGVhckFuZEZvY3VzKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3BvLWNsZWFuPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjaWNvbkFycm93XG4gICAgICAgICAgY2xhc3M9XCJwby1jb21iby1hcnJvdyBwby1maWVsZC1pY29uXCJcbiAgICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbWJvVmlzaWJpbGl0eSh0cnVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cG8taWNvblxuICAgICAgICAgICAgW3AtaWNvbl09XCJjb21ib09wZW4gPyAnSUNPTl9BUlJPV19VUCBwby1pY29uLWlucHV0JyA6ICdJQ09OX0FSUk9XX0RPV04gcG8taWNvbi1pbnB1dCdcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb25dPVwiIWRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby1jb21iby1kZWZhdWx0LWJvcmRlcl09XCIhZGlzYWJsZWQgJiYgaW5wLnZhbHVlXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby1jb21iby1iYWNrZ3JvdW5kLWFycm93LXVwXT1cIiFkaXNhYmxlZCAmJiBjb21ib09wZW5cIlxuICAgICAgICAgID48L3BvLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwZW5kQm94OyB0aGVuIGRyb3Bkb3duQ0RLOyBlbHNlIGRyb3Bkb3duRGVmYXVsdFwiPiA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25EZWZhdWx0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duTGlzdGJveFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkNESz5cbiAgICAgIDxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5IFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIiBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwidHJ1ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25MaXN0Ym94XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbVxuICAgICAgW3AtaGVscF09XCJoZWxwXCJcbiAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtwLWVycm9yLXBhdHRlcm5dPVwiZ2V0RXJyb3JQYXR0ZXJuKClcIlxuICAgID48L3BvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+XG4gIDwvcG8tZmllbGQtY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25MaXN0Ym94PlxuICAgIDxkaXYgI2NvbnRhaW5lckVsZW1lbnQgY2xhc3M9XCJwby1jb21iby1jb250YWluZXJcIiBbaGlkZGVuXT1cIiFjb21ib09wZW4gJiYgIWlzU2VydmVyU2VhcmNoaW5nXCI+XG4gICAgICA8cG8tbGlzdGJveFxuICAgICAgICAjcG9MaXN0Ym94XG4gICAgICAgICNjb250ZW50RWxlbWVudFxuICAgICAgICBwLXR5cGU9XCJvcHRpb25cIlxuICAgICAgICBbcC1pdGVtc109XCJ2aXNpYmxlT3B0aW9uc1wiXG4gICAgICAgIFtwLWZpZWxkLXZhbHVlXT1cImR5bmFtaWNWYWx1ZVwiXG4gICAgICAgIFtwLWZpZWxkLWxhYmVsXT1cImR5bmFtaWNMYWJlbFwiXG4gICAgICAgIFtwLXRlbXBsYXRlXT1cImNvbWJvT3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICBbcC1zZWFyY2gtdmFsdWVdPVwiZ2V0SW5wdXRWYWx1ZSgpXCJcbiAgICAgICAgW3AtaW5maW5pdGUtbG9hZGluZ109XCJpbmZpbml0ZUxvYWRpbmdcIlxuICAgICAgICBbcC1pbmZpbml0ZS1zY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxuICAgICAgICBbcC1maWx0ZXJpbmddPVwiaXNGaWx0ZXJpbmdcIlxuICAgICAgICBbcC1jYWNoZV09XCJjYWNoZVwiXG4gICAgICAgIChwLXNlbGVjdGNvbWJvLWl0ZW0pPVwib25PcHRpb25DbGljaygkZXZlbnQsICRldmVudC5ldmVudClcIlxuICAgICAgICBbcC1maWx0ZXItbW9kZV09XCJmaWx0ZXJNb2RlXCJcbiAgICAgICAgW3AtdmlzaWJsZV09XCJjb21ib09wZW5cIlxuICAgICAgICBbcC1pcy1zZWFyY2hpbmddPVwiaXNTZXJ2ZXJTZWFyY2hpbmdcIlxuICAgICAgICBbcC1zaG91bGQtbWFyay1sZXR0ZXJdPVwic2hvdWxkTWFya0xldHRlcnNcIlxuICAgICAgICBbcC1jb21wYXJlLWNhY2hlXT1cImNvbXBhcmVPYmplY3RzKGNhY2hlT3B0aW9ucywgdmlzaWJsZU9wdGlvbnMpXCJcbiAgICAgICAgW3AtY29tYm8tc2VydmljZV09XCJzZXJ2aWNlXCJcbiAgICAgICAgW3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlXT1cImluZmluaXRlU2Nyb2xsRGlzdGFuY2VcIlxuICAgICAgICAocC11cGRhdGUtaW5maW5pdGUtc2Nyb2xsKT1cInNob3dNb3JlSW5maW5pdGVTY3JvbGwoKVwiXG4gICAgICAgIChwLWNsb3NlKT1cIm9uQ2xvc2VDb21ibygpXCJcbiAgICAgICAgW3AtY29udGFpbmVyLXdpZHRoXT1cImNvbnRhaW5lcldpZHRoXCJcbiAgICAgID48L3BvLWxpc3Rib3g+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==