@sapui5/sap.fe.templates 1.146.0 → 1.148.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
  4. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +1 -1
  5. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
  6. package/src/sap/fe/templates/ListReport/ListReport.view.xml +45 -10
  7. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +43 -16
  8. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +51 -15
  9. package/src/sap/fe/templates/ListReport/ListReportTemplating.js +39 -3
  10. package/src/sap/fe/templates/ListReport/ListReportTemplating.ts +35 -1
  11. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +4 -1
  12. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +3 -0
  13. package/src/sap/fe/templates/ListReport/manifest.json +1 -1
  14. package/src/sap/fe/templates/ListReport/overrides/MessageHandler.js +3 -2
  15. package/src/sap/fe/templates/ListReport/overrides/MessageHandler.ts +2 -1
  16. package/src/sap/fe/templates/ObjectPage/Component.js +4 -2
  17. package/src/sap/fe/templates/ObjectPage/Component.ts +3 -1
  18. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +163 -28
  19. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +163 -23
  20. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +246 -35
  21. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +286 -42
  22. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +32 -16
  23. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +46 -33
  24. package/src/sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog.js +4 -1
  25. package/src/sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog.tsx +1 -0
  26. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +15 -4
  27. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +11 -2
  28. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +28 -1
  29. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.ts +31 -0
  30. package/src/sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper.js +72 -0
  31. package/src/sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper.ts +75 -0
  32. package/src/sap/fe/templates/ObjectPage/manifest.json +1 -15
  33. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.js +29 -20
  34. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.ts +28 -21
  35. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +4 -3
  36. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +4 -4
  37. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +2 -2
  38. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
  39. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +93 -17
  40. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +108 -22
  41. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +12 -2
  42. package/src/sap/fe/templates/ObjectPage/view/fragments/EmphasizedFirstHeaderAction.fragment.xml +182 -0
  43. package/src/sap/fe/templates/ObjectPage/view/fragments/ExpandedHeading.fragment.xml +4 -4
  44. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +4 -4
  45. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +1 -1
  46. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +1 -1
  47. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +1 -0
  48. package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +2 -0
  49. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +18 -12
  50. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +2 -0
  51. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +2 -0
  52. package/src/sap/fe/templates/library.js +1 -1
  53. package/src/sap/fe/templates/messagebundle.properties +1 -1
  54. package/src/sap/fe/templates/messagebundle_ar.properties +1 -1
  55. package/src/sap/fe/templates/messagebundle_bg.properties +1 -1
  56. package/src/sap/fe/templates/messagebundle_ca.properties +1 -1
  57. package/src/sap/fe/templates/messagebundle_cnr.properties +1 -1
  58. package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
  59. package/src/sap/fe/templates/messagebundle_cy.properties +1 -1
  60. package/src/sap/fe/templates/messagebundle_da.properties +1 -1
  61. package/src/sap/fe/templates/messagebundle_de.properties +1 -1
  62. package/src/sap/fe/templates/messagebundle_el.properties +1 -1
  63. package/src/sap/fe/templates/messagebundle_en.properties +1 -1
  64. package/src/sap/fe/templates/messagebundle_en_GB.properties +1 -1
  65. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +1 -1
  66. package/src/sap/fe/templates/messagebundle_es.properties +1 -1
  67. package/src/sap/fe/templates/messagebundle_es_MX.properties +1 -1
  68. package/src/sap/fe/templates/messagebundle_et.properties +1 -1
  69. package/src/sap/fe/templates/messagebundle_fi.properties +1 -1
  70. package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
  71. package/src/sap/fe/templates/messagebundle_fr_CA.properties +1 -1
  72. package/src/sap/fe/templates/messagebundle_hi.properties +1 -1
  73. package/src/sap/fe/templates/messagebundle_hr.properties +1 -1
  74. package/src/sap/fe/templates/messagebundle_hu.properties +1 -1
  75. package/src/sap/fe/templates/messagebundle_id.properties +1 -1
  76. package/src/sap/fe/templates/messagebundle_it.properties +1 -1
  77. package/src/sap/fe/templates/messagebundle_iw.properties +2 -2
  78. package/src/sap/fe/templates/messagebundle_ja.properties +1 -1
  79. package/src/sap/fe/templates/messagebundle_kk.properties +1 -1
  80. package/src/sap/fe/templates/messagebundle_ko.properties +1 -1
  81. package/src/sap/fe/templates/messagebundle_lt.properties +1 -1
  82. package/src/sap/fe/templates/messagebundle_lv.properties +1 -1
  83. package/src/sap/fe/templates/messagebundle_mk.properties +1 -1
  84. package/src/sap/fe/templates/messagebundle_ms.properties +1 -1
  85. package/src/sap/fe/templates/messagebundle_nl.properties +1 -1
  86. package/src/sap/fe/templates/messagebundle_no.properties +2 -2
  87. package/src/sap/fe/templates/messagebundle_pl.properties +1 -1
  88. package/src/sap/fe/templates/messagebundle_pt.properties +1 -1
  89. package/src/sap/fe/templates/messagebundle_pt_PT.properties +1 -1
  90. package/src/sap/fe/templates/messagebundle_ro.properties +1 -1
  91. package/src/sap/fe/templates/messagebundle_ru.properties +1 -1
  92. package/src/sap/fe/templates/messagebundle_sh.properties +1 -1
  93. package/src/sap/fe/templates/messagebundle_sk.properties +1 -1
  94. package/src/sap/fe/templates/messagebundle_sl.properties +1 -1
  95. package/src/sap/fe/templates/messagebundle_sr.properties +1 -1
  96. package/src/sap/fe/templates/messagebundle_sv.properties +1 -1
  97. package/src/sap/fe/templates/messagebundle_th.properties +1 -1
  98. package/src/sap/fe/templates/messagebundle_tr.properties +1 -1
  99. package/src/sap/fe/templates/messagebundle_uk.properties +3 -3
  100. package/src/sap/fe/templates/messagebundle_vi.properties +1 -1
  101. package/src/sap/fe/templates/messagebundle_zh_CN.properties +1 -1
  102. package/src/sap/fe/templates/messagebundle_zh_TW.properties +1 -1
@@ -44,7 +44,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
44
44
  _this = _PageController.call(this, ...args) || this;
45
45
  _initializerDefineProperty(_this, "_routing", _descriptor, _this);
46
46
  _initializerDefineProperty(_this, "_intentBasedNavigation", _descriptor2, _this);
47
- _initializerDefineProperty(_this, "_sideEffects", _descriptor3, _this);
47
+ _initializerDefineProperty(_this, "sideEffects", _descriptor3, _this);
48
48
  _initializerDefineProperty(_this, "intentBasedNavigation", _descriptor4, _this);
49
49
  _initializerDefineProperty(_this, "share", _descriptor5, _this);
50
50
  _initializerDefineProperty(_this, "viewState", _descriptor6, _this);
@@ -74,16 +74,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
74
74
  controlVariantControls.forEach(variantControl => {
75
75
  variantControl.setVisible(isVisible);
76
76
  });
77
- } else {
78
- // Page variant management
79
- const variantManagement = this._getControlFromPageModelProperty("/variantManagement/pageId");
80
- if (variantManagement) {
81
- if (currentKey === "ai") {
82
- variantManagement.setVisible(false);
83
- } else {
84
- variantManagement.setVisible(true);
85
- }
86
- }
87
77
  }
88
78
  },
89
79
  onInlineEditSave() {
@@ -339,10 +329,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
339
329
  this.pageReady.waitFor(this._applyAppState());
340
330
  internalModelContext.setProperty("initialVariantApplied", true);
341
331
  }
342
- await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
332
+ await this.getAppComponent().getRootViewController().waitForEditCleanup();
343
333
  const aTables = this._getControls("table");
344
334
  let updateActions = true;
345
335
  if (EditState.isEditStateDirty()) {
336
+ // Terminate any lingering ABAP draft session when returning from an edit session
337
+ // This handles the case where the user navigates back via browser back button,
338
+ // which doesn't trigger the draft data loss dialog
339
+ const model = this.getModel();
340
+ if (model) {
341
+ this.editFlow.terminateDraftSession(model);
342
+ }
346
343
  this._getMultiModeControl()?.invalidateContent();
347
344
  const table = this._getTable();
348
345
  const oTableBinding = table?.getRowBinding();
@@ -510,10 +507,36 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
510
507
  }
511
508
 
512
509
  /**
513
- * This method sets the initial focus in a list report based on the User Experience guidelines.
514
- *
510
+ * Tries to focus the emphasized (primary) header action in the DynamicPageTitle actions.
511
+ * This is used when no FilterBar is rendered so that the first actionable control receives focus.
512
+ * @returns True if an emphasized and focusable action is found and focused
513
+ */;
514
+ _proto.setFocusOnEmphasizedHeaderAction = function setFocusOnEmphasizedHeaderAction() {
515
+ const dynamicPage = this._getDynamicListReportControl();
516
+ const title = dynamicPage.getTitle();
517
+ const actions = title.getActions();
518
+ const emphasizedButton = actions.find(control => {
519
+ return control && control.isA?.("sap.m.Button") && control.getType() === "Emphasized" && control.getVisible() && control.getEnabled() !== false;
520
+ });
521
+ if (emphasizedButton) {
522
+ emphasizedButton.focus();
523
+ return true;
524
+ }
525
+ return false;
526
+ }
527
+
528
+ /**
529
+ * Sets the initial focus in the ListReport based on the UX focus rules.
515
530
  */;
516
531
  _proto._setInitialFocus = async function _setInitialFocus() {
532
+ // In FCL, when navigating forward to an Object Page (e.g. after Create), the routeMatched event
533
+ // fires first for the parent route (LR only) before the child route (LR+OP). This causes
534
+ // onPageReady to be called on the LR with forceFocus=true, stealing focus from the OP.
535
+ // Guard: skip focus if the FCL is showing more than one column (deeper page is visible).
536
+ const rootViewController = this.getAppComponent().getRootViewController();
537
+ if (rootViewController.isFclEnabled() && rootViewController.getVisibleViews().length > 1) {
538
+ return;
539
+ }
517
540
  const dynamicPage = this._getDynamicListReportControl(),
518
541
  isHeaderExpanded = dynamicPage.getHeaderExpanded(),
519
542
  filterBar = this._getFilterBarControl();
@@ -534,6 +557,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
534
557
  });
535
558
  }
536
559
  } else {
560
+ // No FilterBar rendered: focus the emphasized (primary) header action if available
561
+ if (this.setFocusOnEmphasizedHeaderAction()) {
562
+ return;
563
+ }
537
564
  await this._getTable()?.focusRow(0).catch(function (error) {
538
565
  if (error) {
539
566
  // if there is no error it can just be that there are no lines to focus
@@ -930,7 +957,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
930
957
  enumerable: true,
931
958
  writable: true,
932
959
  initializer: null
933
- }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "_sideEffects", [_dec4], {
960
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "sideEffects", [_dec4], {
934
961
  configurable: true,
935
962
  enumerable: true,
936
963
  writable: true,
@@ -968,4 +995,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
968
995
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype), _class2)) || _class);
969
996
  return ListReportController;
970
997
  }, false);
971
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbkZpbHRlckxheW91dFN3aXRjaCIsIm9FdmVudCIsImN1cnJlbnRLZXkiLCJnZXRTb3VyY2UiLCJzZWxlY3RlZEtleSIsImNvbnRyb2xWYXJpYW50Q29udHJvbHMiLCJfZ2V0Q29udHJvbFZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbHMiLCJpc1Zpc2libGUiLCJmb3JFYWNoIiwidmFyaWFudENvbnRyb2wiLCJzZXRWaXNpYmxlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eSIsIm9uSW5saW5lRWRpdFNhdmUiLCJpbmxpbmVFZGl0RmxvdyIsImlubGluZUVkaXRTYXZlIiwib25GaWx0ZXJTZWFyY2giLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJ0cmlnZ2VyU2VhcmNoIiwib25GaWx0ZXJzQ2hhbmdlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib25QZW5kaW5nRmlsdGVycyIsImdldFBhcmFtZXRlciIsInNldFByb3BlcnR5IiwiX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIm9uVmFyaWFudFNlbGVjdGVkIiwicGFyYW1ldGVycyIsImdldFBhcmFtZXRlcnMiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJwaG9uZSIsIm9EeW5hbWljUGFnZSIsIl9pc0luaXRMb2FkRW5hYmxlZCIsInNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiX2dldFRhYmxlIiwiYURhdGEiLCJDaGFydFV0aWxzIiwic2V0Q2hhcnRGaWx0ZXJzIiwicmViaW5kIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwiZm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbiIsIm9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCIsImV2ZW50IiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiYW5ub3VuY2UiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZXh0ZW5zaW9uQVBJIiwiRXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiUGFnZUNvbnRyb2xsZXIiLCJhcHBseSIsImdldE93bmVyQ29tcG9uZW50IiwidWlNb2RlbENvbnRleHQiLCJfaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsImFscENvbnRlbnRWaWV3IiwiX2dldERlZmF1bHRQYXRoIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um91dGVyUHJveHkiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJfc2V0SW5pdExvYWQiLCJpc0VkaXRhYmxlIiwib25CZWZvcmVSZW5kZXJpbmciLCJkeW5taWNQYWdlSGVhZGVyVGl0bGUiLCJnZXRUaXRsZSIsImJyZWFkY3J1bWJzQkIiLCJnZXRCcmVhZGNydW1icyIsInNldEJyZWFkY3J1bWJMaW5rcyIsIm9uRXhpdCIsImRlc3Ryb3kiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJfYXBwbHlBcHBTdGF0ZSIsIkNvbW1vblV0aWxzIiwiaXNBcHBDb21wb25lbnRCdXN5IiwiYVRhYmxlcyIsIl9nZXRDb250cm9scyIsInVwZGF0ZUFjdGlvbnMiLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5IiwidGFibGUiLCJvVGFibGVCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInRhYmxlQVBJIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJ3YWl0Rm9yQmluZGluZ0NsZWFudXAiLCJhdHRhY2hFdmVudE9uY2UiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInR5cGUiLCJnZXRNb2RlbCIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJlIiwid2FybmluZyIsInNldEVkaXRTdGF0ZVByb2Nlc3NlZCIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJpc0luc2lnaHRzRW5hYmxlZCIsIm9uUGFnZVJlYWR5IiwibVBhcmFtZXRlcnMiLCJmb3JjZUZvY3VzIiwiX3NldEluaXRpYWxGb2N1cyIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInVuZGVmaW5lZCIsIm9uVmlld05lZWRzUmVmcmVzaCIsInNsaWNlIiwib25BZnRlckNsZWFyIiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9mb2N1c1NpbGVudCIsImZpbHRlckZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkIiwib0ZpbHRlckl0ZW0iLCJiYXNpY1NlYXJjaEZpZWxkIiwiZ2V0QmFzaWNTZWFyY2hGaWVsZCIsImZpZWxkVG9Gb2N1cyIsImlzRm9jdXNhYmxlIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsIndoZW5Jbml0aWFsaXplZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsImZvY3VzUm93IiwiaW5mbyIsIl9nZXRCcm93c2VyVGl0bGUiLCJfcGFnZVRpdGxlSW5mb3JtYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInRpdGxlIiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJlbmFibGVSZXF1ZXN0cyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiY29udHJvbFZhcmlhbnRJZHMiLCJfZ2V0UGFnZU1vZGVsIiwidmFyaWFudENvbnRyb2xzIiwidmFyaWFudElkQXJyYXkiLCJzcGxpdCIsInZhcmlhbnRJZCIsInRyaW0iLCJwdXNoIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsImNvbnRlbnRTd2l0Y2hlciIsIiRzZWdtZW50ZWRCdXR0b24iLCJjdXJyZW50Iiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsInNWaXN1YWxGaWx0ZXJCYXJJZCIsIlN0YWJsZUlkSGVscGVyIiwiZ2VuZXJhdGUiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJfZ2V0SWNvblRhYkJhciIsIm9Db250cm9sIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJjb250ZW50Iiwic0tleSIsImFDb250cm9scyIsIm9UYWJNdWx0aU1vZGUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZ2V0S2V5IiwiaW5jbHVkZXMiLCJkZWZhdWx0UGF0aCIsIkxpc3RSZXBvcnRUZW1wbGF0aW5nIiwiZ2V0RGVmYXVsdFBhdGgiLCJpbml0TG9hZE1vZGUiLCJnZXRWaWV3RGF0YSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJ2YXJpYW50TWFuYWdlbWVudElkIiwiZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJnZXREYXRhIiwicmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsImJpbmQiLCJfc2V0U2hhcmVNb2RlbCIsImZuR2V0VXNlciIsIk9iamVjdFBhdGgiLCJnZXQiLCJvU2hhcmVJbmZvIiwiYm9va21hcmtUaXRsZSIsImRvY3VtZW50IiwiYm9va21hcmtDdXN0b21VcmwiLCJzSGFzaCIsImhhc2hlciIsImdldEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpc1NoYXJlSW5KYW1BY3RpdmUiLCJpc0phbUFjdGl2ZSIsIm9UZW1wbGF0ZVByaXZhdGVNb2RlbCIsIm1DYWNoZSIsImlnbm9yZWRGaWVsZHMiLCJhQ2hhcnRzIiwic0NoYXJ0RW50aXR5UGF0aCIsInNDaGFydEVudGl0eVNldCIsInNDYWNoZUtleSIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwiaGlkZUZpbHRlckJhciIsInVzZUhpZGRlbkZpbHRlckJhciIsInZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnQiLCJvVk0iLCJBdXRvIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJvQ29uZGl0aW9ucyIsInN0YXJ0c1dpdGgiLCJzdGFuZGFyZFZhcmlhbnQiLCJnZXRFeGVjdXRlT25TZWxlY3QiLCJpc1RhYmxlQm91bmQiLCJvSW5uZXJDaGFydCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImlzQm91bmQiLCJnZXRCaW5kaW5nSW5mbyIsImJ1dHRvblZpc2libGUiLCJnZXRTZWdtZW50ZWRCdXR0b24iLCJzZWdtZW50ZWRCdXR0b24iLCJldmVudERlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJhZGRFdmVudERlbGVnYXRlIiwic3YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiZ2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJoYW5kbGVNZXNzYWdlQnV0dG9uVmlzaWJpbGl0eSIsInNldFNob3dGb290ZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlVGl0bGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgS1BJTWFuYWdlbWVudCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvS1BJTWFuYWdlbWVudFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnREZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvdGVtcGxhdGVzL0xpc3RSZXBvcnRDb252ZXJ0ZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSWRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUluZm9ybWF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEJyZWFkY3J1bWJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL0JyZWFkY3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL01lc3NhZ2VCdXR0b25cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCB0eXBlIENvbnRlbnRTd2l0Y2hlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250ZW50U3dpdGNoZXIvQ29udGVudFN3aXRjaGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNPdmVycmlkZSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L292ZXJyaWRlcy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IHR5cGUgVGFiQ29udGFpbmVySXRlbSBmcm9tIFwic2FwL20vVGFiQ29udGFpbmVySXRlbVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUFkZGl0aW9uYWxJbmZvIH0gZnJvbSBcInNhcC91c2hlbGwvdWk1c2VydmljZS9TaGVsbFVJU2VydmljZVwiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5jb25zdCBUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gQ29yZUxpYnJhcnkuVGVtcGxhdGVDb250ZW50Vmlldyxcblx0SW5pdGlhbExvYWRNb2RlID0gQ29yZUxpYnJhcnkuSW5pdGlhbExvYWRNb2RlO1xuXG4vKipcbiAqIENvbnRyb2xsZXIgY2xhc3MgZm9yIHRoZSBsaXN0IHJlcG9ydCBwYWdlLCB1c2VkIGluc2lkZSBhbiBTQVAgRmlvcmkgZWxlbWVudHMgYXBwbGljYXRpb24uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2lkZUVmZmVjdHMub3ZlcnJpZGUoU2lkZUVmZmVjdHNPdmVycmlkZSkpXG5cdF9zaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCB1aU1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0dWlNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZSA9IGR5bmFtaWNQYWdlPy5nZXRUaXRsZSgpO1xuXHRcdGNvbnN0IGJyZWFkY3J1bWJzQkIgPSBkeW5taWNQYWdlSGVhZGVyVGl0bGUuZ2V0QnJlYWRjcnVtYnMoKSBhcyBCcmVhZGNydW1icyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYnJlYWRjcnVtYnNCQikge1xuXHRcdFx0YnJlYWRjcnVtYnNCQi5zZXRCcmVhZGNydW1iTGlua3MoXCJcIik7XG5cdFx0fVxuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdGFzeW5jIF9vbkFmdGVyQmluZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLl9hcHBseUFwcFN0YXRlKCkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGF3YWl0IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuaXNBcHBDb21wb25lbnRCdXN5KCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cdFx0Y29uc3QgZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcblx0XHRcdC5pc0luc2lnaHRzRW5hYmxlZCgpXG5cdFx0XHQudGhlbigoaXNJbnNpZ2h0c0VuYWJsZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzU3VwcG9ydGVkXCIsIGlzSW5zaWdodHNFbmFibGVkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgaW5zaWdodHMgYXJlIGVuYWJsZWRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKFxuXHRcdFx0dGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRhSWdub3JlZEZpZWxkczogc3RyaW5nW10sXG5cdFx0XHRiSXNDaGFydDogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRcdG9BcHBseVN1cHBvcnRlZD86IHsgZW5hYmxlU2VhcmNoOiBib29sZWFuIH1cblx0XHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHRnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkPy5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlclwiKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdHRoaXMuX3NldEluaXRpYWxGb2N1cygpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBjdXN0b20gdmlldyB1c2VkIGluIGEgbGlzdCByZXBvcnQgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZCxcblx0ICogb3Igd2hlbiB0aGUgdmlldyBpcyBmb3JjZWQgdG8gYmUgcmVmcmVzaGVkIHRocm91Z2ggdGhlIEV4dGVuc2lvbiBBUEkgZm9yIHRoZSBsaXN0IHJlcG9ydCdzIHB1YmxpYyBtZXRob2Qgc2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSUQsXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlIHN1Y2ggYXMgdGFiQ2hhbmdlZCwgc2VhcmNoLCBvciBmb3JjZWRSZWZyZXNoLlxuXHQgKiBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlIG9mIGEgbWFwOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiIHwgXCJmb3JjZWRSZWZyZXNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiB1bmtub3duKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgd2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24uXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgY3VzdG9taXphdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYWJsZSgpPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBvbiB0aGUgRmlsdGVyQmFyIGlzIHByZXNzZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25BZnRlckNsZWFyKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBUYWJsZVtdKTogdm9pZCB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShhSUJOQWN0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqIEBwYXJhbSBzUm93UGF0aCBUaGUgcGF0aCBvZiB0aGUgdGFibGUgcm93IGNvbnRleHQgdG8gYmUgc2Nyb2xsZWQgdG9cblx0ICovXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IENvbnRyb2wpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUgYXMgVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgc2lsZW50IGZvY3VzIG9uIHRoZSBmaWx0ZXIgZmllbGQuIFN1cHByZXNzZXMgdGhlIG9wZW5pbmcgb2YgdGhlIHR5cGUtYWhlYWQgcG9wdXAuXG5cdCAqIEBwYXJhbSBmaWx0ZXJGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZSBzZXQgYWZ0ZXIgdGhlIGluaXRpYWwgbG9hZFxuXHQgKi9cblx0X2ZvY3VzU2lsZW50KGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpbHRlckZpZWxkLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdGZpbHRlckZpZWxkLmZvY3VzKGZvY3VzSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZm9jdXMgd2hlbiB0aGUgaGVhZGVyIGlzIGV4cGFuZGVkLlxuXHQgKiBUaGUgcHJpb3JpdGllcyBhcmU6ICgxKSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCAoMikgc2VhcmNoIGZpZWxkIGlmIGZvY3VzYWJsZSBvciBmaXJzdCBmaWx0ZXIgZmllbGQsIGFuZCAoMykgR28gYnV0dG9uLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIF9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9GaWx0ZXJJdGVtOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHR9KTtcblx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCBvciBvbiB0aGUgZmlyc3QgZmlsdGVyIGZpZWxkIGlmIHRoZSB0YWJsZSBkYXRhIGlzIGxvYWRlZFxuXHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpICYmIGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIHNldCBzaWxlbnQgZm9jdXMgb24gc2VhcmNoIGZpZWxkIChpZiBmb2N1c2FibGUpLCBvdGhlcndpc2Ugb24gZmlyc3QgZmlsdGVyIGZpZWxkXG5cdFx0XHRjb25zdCBiYXNpY1NlYXJjaEZpZWxkID0gZmlsdGVyQmFyLmdldEJhc2ljU2VhcmNoRmllbGQoKTtcblx0XHRcdGNvbnN0IGZpZWxkVG9Gb2N1cyA9IGJhc2ljU2VhcmNoRmllbGQ/LmlzRm9jdXNhYmxlKCkgPyBiYXNpY1NlYXJjaEZpZWxkIDogZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKClbMF07XG5cdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpZWxkVG9Gb2N1cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCk/LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGluaXRpYWwgZm9jdXMgaW4gYSBsaXN0IHJlcG9ydCBiYXNlZCBvbiB0aGUgVXNlciBFeHBlcmllbmNlIGd1aWRlbGluZXMuXG5cdCAqXG5cdCAqL1xuXHRhc3luYyBfc2V0SW5pdGlhbEZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7XG5cdFx0aWYgKGZpbHRlckJhciAmJiAhdGhpcy5faXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCkpIHtcblx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdGF3YWl0IGZpbHRlckJhci53aGVuSW5pdGlhbGl6ZWQoKTtcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHR0aGlzLl9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXIpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgdGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGUgdG8gZ2V0IHRoZSBicm93c2VyIHRpdGxlIG9mIHRoZSBMUiBwYWdlLlxuXHQgKiBAcGFyYW0gX3BhZ2VUaXRsZUluZm9ybWF0aW9uIFByZXNlbnQgcGFnZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKiBAcmV0dXJucyBUaXRsZSBpbmZvcm1hdGlvbiB0byBiZSB1c2VkIGJ5IHNoZWxsIHNlcnZpY2VzIGZvciBicm93c2VyIHRpdGxlXG5cdCAqL1xuXHRhc3luYyBfZ2V0QnJvd3NlclRpdGxlKF9wYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbik6IFByb21pc2U8VGl0bGVBZGRpdGlvbmFsSW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIFdlIHNoYWxsIGZhbGxiYWNrIHRvIGRlZmF1bCBhcHAgdGl0bGUgaW4gY2FzZSBvZiBsaXN0IHJlcG9ydC5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYWxsIGNvbnRyb2wtbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50IGNvbnRyb2xzIChGaWx0ZXJCYXIsIFRhYmxlcywgQ2hhcnRzKS5cblx0ICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgd2hlbiB2YXJpYW50IG1hbmFnZW1lbnQgaXMgc2V0IHRvIFwiQ29udHJvbFwiIG1vZGUuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xzLCBvciBlbXB0eSBhcnJheSBpZiBjb250cm9sIHZhcmlhbnQgSURzIGRvbid0IGV4aXN0XG5cdCAqL1xuXHRfZ2V0Q29udHJvbFZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbHMoKTogVmFyaWFudE1hbmFnZW1lbnRbXSB7XG5cdFx0Y29uc3QgY29udHJvbFZhcmlhbnRJZHMgPSB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvY29udHJvbFZhcmlhbnRJZHNcIik7XG5cblx0XHRpZiAoIWNvbnRyb2xWYXJpYW50SWRzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFyaWFudENvbnRyb2xzOiBWYXJpYW50TWFuYWdlbWVudFtdID0gW107XG5cdFx0Y29uc3QgdmFyaWFudElkQXJyYXkgPSBjb250cm9sVmFyaWFudElkcy5zcGxpdChcIixcIik7XG5cblx0XHR2YXJpYW50SWRBcnJheS5mb3JFYWNoKCh2YXJpYW50SWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0Y29uc3QgdmFyaWFudENvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRJZC50cmltKCkpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0aWYgKHZhcmlhbnRDb250cm9sKSB7XG5cdFx0XHRcdHZhcmlhbnRDb250cm9scy5wdXNoKHZhcmlhbnRDb250cm9sKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB2YXJpYW50Q29udHJvbHM7XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRlbnRTd2l0Y2hlciA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Q29udGVudFN3aXRjaGVyXCIpIGFzIFVJNUVsZW1lbnQgJiB7ICRzZWdtZW50ZWRCdXR0b24/OiB7IGN1cnJlbnQ/OiBVSTVFbGVtZW50IH0gfTtcblx0XHRyZXR1cm4gY29udGVudFN3aXRjaGVyPy4kc2VnbWVudGVkQnV0dG9uPy5jdXJyZW50O1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZyk6IENvbnRyb2wgfCBNYWNyb0FQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkID8gKHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKSBhcyBDb250cm9sKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpIGFzIENoYXJ0VHlwZTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNWaXN1YWxGaWx0ZXJCYXJJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtcInZpc3VhbEZpbHRlclwiLCB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKV0pO1xuXHRcdHJldHVybiBzVmlzdWFsRmlsdGVyQmFySWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKTogTXVsdGlwbGVNb2RlQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0SWNvblRhYkJhcigpOiBJY29uVGFiQmFyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IHN0cmluZyk6IENvbnRyb2xbXSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogQ29udHJvbFtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IHVua25vd24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKSkgYXMgQ29udHJvbDtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpLmluY2x1ZGVzKGBmZTo6JHtzS2V5fWApKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXREZWZhdWx0UGF0aCh0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmlld3NcIikgfHwgW10pO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgYnkgZmxleCB0byBkZXRlcm1pbmUgaWYgdGhlIGFwcGx5QXV0b21hdGljYWxseSBzZXR0aW5nIG9uIHRoZSB2YXJpYW50IGlzIHZhbGlkLlxuXHQgKiBDYWxsZWQgb25seSBmb3IgU3RhbmRhcmQgVmFyaWFudCBhbmQgb25seSB3aGVuIHRoZXJlIGlzIGRpc3BsYXkgdGV4dCBzZXQgZm9yIGFwcGx5QXV0b21hdGljYWxseSAoRkUgb25seSBzZXRzIGl0IGZvciBBdXRvKS5cblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCgpOiBib29sZWFuIHtcblx0XHQvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIGFuZCB0YWtlIGNhcmUgb2YgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdGhlIHNldHRpbmdzIGZvciBpbml0aWFsIGxvYWQgYmFzZWQgb25cblx0ICogLSBtYW5pZmVzdCBzZXR0aW5nIGluaXRMb2FkIC0gRW5hYmxlZC9EaXNhYmxlZC9BdXRvXG5cdCAqIC0gdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHZhcmlhbnRcblx0ICogLSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzXG5cdCAqIFdlIGRpc2FibGUgdGhlIGZpbHRlciBiYXIgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuYWJsZSBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0LlxuXHQgKi9cblx0X3NldEluaXRMb2FkKCk6IHZvaWQge1xuXHRcdC8vIGlmIGluaXRMb2FkIGlzIERpc2FibGVkIG9yIEF1dG8sIHN3aXRjaCBvZmYgZmlsdGVyIGJhciBzZWFyY2ggdGVtcG9yYXJpbHkgYXQgc3RhcnRcblx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVJbml0TG9hZCgpO1xuXHRcdH1cblx0XHQvLyBzZXQgaG9vayBmb3IgZmxleCBmb3Igd2hlbiBzdGFuZGFyZCB2YXJpYW50IGlzIHNldCAoYXQgc3RhcnQgb3IgYnkgdXNlciBhdCBydW50aW1lKVxuXHRcdC8vIHJlcXVpcmVkIHRvIG92ZXJyaWRlIHRoZSB1c2VyIHNldHRpbmcgJ2FwcGx5IGF1dG9tYXRpY2FsbHknIGJlaGF2aW91ciBpZiB0aGVyZSBhcmUgbm8gZmlsdGVyc1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50SWQgPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXRWYXJpYW50QmFja1JlZmVyZW5jZShcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0RGF0YSgpIGFzIExpc3RSZXBvcnREZWZpbml0aW9uXG5cdFx0KTtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHZhcmlhbnRNYW5hZ2VtZW50SWQgJiYgKHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudE1hbmFnZW1lbnRJZCkgYXMgVmFyaWFudE1hbmFnZW1lbnQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0KFxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCBhcyB7IHJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/OiBGdW5jdGlvbiB9XG5cdFx0XHQpPy5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50Py4odGhpcy5fYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFNoYXJlTW9kZWwoKTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogZGVhY3RpdmF0ZWQgZm9yIG5vdyAtIGN1cnJlbnRseSB0aGVyZSBpcyBubyBfdGVtcGxQcml2IGFueW1vcmUsIHRvIGJlIGRpc2N1c3NlZFxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSBub3QgY2FsbGVkIGFueW1vcmUgZnJvbSB0aGUgaW5pdCBtZXRob2RcblxuXHRcdGNvbnN0IGZuR2V0VXNlciA9IE9iamVjdFBhdGguZ2V0KFwic2FwLnVzaGVsbC5Db250YWluZXIuZ2V0VXNlclwiKTtcblx0XHQvL3ZhciBvTWFuaWZlc3QgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpXCIpO1xuXHRcdC8vdmFyIHNCb29rbWFya0ljb24gPSAob01hbmlmZXN0ICYmIG9NYW5pZmVzdC5pY29ucyAmJiBvTWFuaWZlc3QuaWNvbnMuaWNvbikgfHwgXCJcIjtcblxuXHRcdC8vc2hhcmVNb2RlbDogSG9sZHMgYWxsIHRoZSBzaGFyaW5nIHJlbGV2YW50IGluZm9ybWF0aW9uIGFuZCBpbmZvIHVzZWQgaW4gWE1MIHZpZXdcblx0XHRjb25zdCBvU2hhcmVJbmZvID0ge1xuXHRcdFx0Ym9va21hcmtUaXRsZTogZG9jdW1lbnQudGl0bGUsIC8vVG8gbmFtZSB0aGUgYm9va21hcmsgYWNjb3JkaW5nIHRvIHRoZSBhcHAgdGl0bGUuXG5cdFx0XHRib29rbWFya0N1c3RvbVVybDogZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IG1DYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydCkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IGAke3NDaGFydEVudGl0eVNldH1DaGFydGA7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc0NhY2hlS2V5XSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL2lnbm9yZWRGaWVsZHNcIiwgaWdub3JlZEZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICdoaWRlRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIGFzIGl0IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhpcyBzZXR0aW5nLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaGlkZUZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYnV0IHN0aWxsIGV4aXN0cyBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAndXNlSGlkZGVuRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW4gYXMgaXQgY2FuIGFsc28gaGlkZSB0aGUgRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnVzZUhpZGRlbkZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBCb29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50IHx8ICFrZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudHMgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRWYXJpYW50cygpO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudHMuZmluZChmdW5jdGlvbiAodmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgJiYgdmFyaWFudC5nZXRLZXkoKSA9PT0ga2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiAoY3VycmVudFZhcmlhbnQgJiYgY3VycmVudFZhcmlhbnQuZ2V0UHJvcGVydHkoXCJleGVjdXRlT25TZWxlY3RcIikpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogVmFyaWFudE1hbmFnZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKG9WTSAmJiAhc0tleS5zdGFydHNXaXRoKFwiJFwiKSAmJiBBcnJheS5pc0FycmF5KG9Db25kaXRpb25zW3NLZXldKSAmJiBvQ29uZGl0aW9uc1tzS2V5XS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIGxvYWQgZGF0YSBhcyBwZXIgdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHRoZSB2YXJpYW50XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFuZGFyZFZhcmlhbnQgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmdldEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZ2V0RXhlY3V0ZU9uU2VsZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF91cGRhdGVUYWJsZShvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBDaGFydCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuX2dldENoYXJ0KG9DaGFydCk7XG5cdFx0aWYgKCEob0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuaXNCb3VuZChcImRhdGFcIikpIHx8IHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcykge1xuXHRcdFx0KG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpbHRlciB0b2dnbGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gYnV0dG9uVmlzaWJsZSBGaWx0ZXIgdG9nZ2xlIGJ1dHRvbiB2aXNpYmlsaXR5XG5cdCAqL1xuXHRzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGJ1dHRvblZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0ZmlsdGVyQmFyPy5nZXRTZWdtZW50ZWRCdXR0b24oKT8uc2V0VmlzaWJsZShidXR0b25WaXNpYmxlKTtcblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uRmlsdGVyTGF5b3V0U3dpdGNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHt9LCBDb250ZW50U3dpdGNoZXI+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBjdXJyZW50S2V5ID0gb0V2ZW50LmdldFNvdXJjZSgpLnNlbGVjdGVkS2V5O1xuXHRcdFx0Y29uc3QgY29udHJvbFZhcmlhbnRDb250cm9scyA9IHRoaXMuX2dldENvbnRyb2xWYXJpYW50TWFuYWdlbWVudENvbnRyb2xzKCk7XG5cblx0XHRcdGlmIChjb250cm9sVmFyaWFudENvbnRyb2xzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29udHJvbCB2YXJpYW50IG1hbmFnZW1lbnQgaXMgY29uZmlndXJlZFxuXHRcdFx0XHRjb25zdCBpc1Zpc2libGUgPSBjdXJyZW50S2V5ICE9PSBcImFpXCI7XG5cdFx0XHRcdGNvbnRyb2xWYXJpYW50Q29udHJvbHMuZm9yRWFjaCgodmFyaWFudENvbnRyb2wpID0+IHtcblx0XHRcdFx0XHR2YXJpYW50Q29udHJvbC5zZXRWaXNpYmxlKGlzVmlzaWJsZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gUGFnZSB2YXJpYW50IG1hbmFnZW1lbnRcblx0XHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L3BhZ2VJZFwiKTtcblx0XHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRLZXkgPT09IFwiYWlcIikge1xuXHRcdFx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbklubGluZUVkaXRTYXZlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRGbG93LmlubGluZUVkaXRTYXZlKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlclNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBQZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXIgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHZpZXdzXG5cdFx0XHRcdHRoaXMub25QZW5kaW5nRmlsdGVycygpO1xuXG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQob0ZpbHRlckJhciwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSAob0V2ZW50IGFzIFVJNUV2ZW50KS5nZXRQYXJhbWV0ZXJzKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHBhcmFtZXRlcnMub3JpZ2luYWxTb3VyY2UgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBtdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXG5cdFx0XHRpZiAobXVsdGlNb2RlQ29udHJvbCAmJiAhdmFyaWFudE1hbmFnZW1lbnQ/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0Ly9Ob3QgYSBDb250cm9sIFZhcmlhbnRcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHRzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXI/LmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAoZmlsdGVySXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBmaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgZmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCh2YXJpYW50TWFuYWdlbWVudCkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7IC8vIG9uc2VhcmNoIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBmaWx0ZXJiYXIgZXhpc3RzXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGJIaWRlRHJhZnQgPSBGaWx0ZXJVdGlscy5nZXRFZGl0U3RhdGVJc0hpZGVEcmFmdChvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGJIaWRlRHJhZnQpO1xuXHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly9sb2dpYyBmb3IgZXhwYW5zaW9uIG9yIGNvbGxhcHNlIG9mIGZpbHRlciBiYXIgc3RhcnRzXG5cdFx0XHRpZiAoIURldmljZS5zeXN0ZW0uZGVza3RvcCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL3NldHRpbmcgaXQgdG8gZmFsc2Ugc28gdGhhdCBmdXJ0aGVyIHNlYXJjaCBvciAnR28nIHRyaWdnZXJzIHdvbid0IGNvbGxhcHNlIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdG9yZSBmaWx0ZXIgYmFyIGNvbmRpdGlvbnMgdG8gdXNlIGxhdGVyIHdoaWxlIG5hdmlnYXRpb25cblx0XHRcdFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0ZpbHRlckJhcilcblx0XHRcdFx0LnRoZW4oKG9FeHRlcm5hbFN0YXRlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGlmIChEZXZpY2Uuc3lzdGVtLnBob25lKSB7XG5cdFx0XHRcdGNvbnN0IG9EeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRcdG9Db250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgZGF0YTogdW5rbm93biB9LCBDaGFydFR5cGU+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0Q29udGVudCgpIGFzIENoYXJ0LFxuXHRcdFx0XHRvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpLFxuXHRcdFx0XHRhRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKGFEYXRhKSB7XG5cdFx0XHRcdENoYXJ0VXRpbHMuc2V0Q2hhcnRGaWx0ZXJzKG9NZGNDaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZSkge1xuXHRcdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEtleTogc3RyaW5nID1cblx0XHRcdFx0KG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pLnNlbGVjdGVkS2V5IHx8IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsga2V5OiBzdHJpbmcgfSkua2V5O1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIHNlbGVjdGVkS2V5KTtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXG5cdFx0XHRzd2l0Y2ggKHNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0OlxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmdGb3JTZWdtZW50ZWRCdXR0b24oKTtcblx0XHR9LFxuXHRcdG9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZXZlbnQ6IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoISFldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpKTtcblx0XHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpLmFubm91bmNlKFxuXHRcdFx0XHRcdFx0ZmlsdGVyQmFyLmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKS5maWx0ZXJzVGV4dCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGZvY3VzIGZvciB0aGUgc2VnbWVudGVkIGJ1dHRvbi5cblx0ICovXG5cdGZvY3VzSGFuZGxpbmdGb3JTZWdtZW50ZWRCdXR0b24oKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VnbWVudGVkQnV0dG9uID0gdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKCk7XG5cdFx0aWYgKHNlZ21lbnRlZEJ1dHRvbikge1xuXHRcdFx0Y29uc3QgZXZlbnREZWxlZ2F0ZSA9IHtcblx0XHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5mb2N1cygpO1xuXHRcdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5yZW1vdmVFdmVudERlbGVnYXRlKGV2ZW50RGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0c2VnbWVudGVkQnV0dG9uLmFkZEV2ZW50RGVsZWdhdGUoZXZlbnREZWxlZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIFNlbGVjdGlvbiBWYXJpYW50LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKi9cblx0YXN5bmMgX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXI6IEZpbHRlckJhciwgaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRjb25zdCBzdiA9IGF3YWl0IGZpbHRlckJhckFQSS5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIiwgc3YpO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBFcnJvciBmZXRjaGluZyBzZWxlY3Rpb24gdmFyaWFudCBvbiBmaWx0ZXIgY2hhbmdlOiAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIFNlbGVjdGlvbiBWYXJpYW50IGZyb20gaW50ZXJuYWwgbW9kZWwuXG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvblZhcmlhbnRcblx0ICovXG5cdGdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdHJldHVybiAoaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiKSBhcyBTZWxlY3Rpb25WYXJpYW50KSB8fCBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG1lc3NhZ2UgYnV0dG9uIGluIHRoZSBmb290ZXIgaW4gY2FzZSB0aGVyZSBpcyBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRoYW5kbGVNZXNzYWdlQnV0dG9uVmlzaWJpbGl0eShldmVudDogVUk1RXZlbnQ8eyB2aXNpYmxlOiBib29sZWFuIH0sIE1lc3NhZ2VCdXR0b24+KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcInZpc2libGVcIikpIHtcblx0XHRcdHRoaXMuc2V0U2hvd0Zvb3RlcihldmVudC5nZXRQYXJhbWV0ZXIoXCJ2aXNpYmxlXCIpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtFQSxNQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTUMsb0JBQW9C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
998
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbkZpbHRlckxheW91dFN3aXRjaCIsIm9FdmVudCIsImN1cnJlbnRLZXkiLCJnZXRTb3VyY2UiLCJzZWxlY3RlZEtleSIsImNvbnRyb2xWYXJpYW50Q29udHJvbHMiLCJfZ2V0Q29udHJvbFZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbHMiLCJpc1Zpc2libGUiLCJmb3JFYWNoIiwidmFyaWFudENvbnRyb2wiLCJzZXRWaXNpYmxlIiwib25JbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXRGbG93IiwiaW5saW5lRWRpdFNhdmUiLCJvbkZpbHRlclNlYXJjaCIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsInRyaWdnZXJTZWFyY2giLCJvbkZpbHRlcnNDaGFuZ2VkIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvblBlbmRpbmdGaWx0ZXJzIiwiZ2V0UGFyYW1ldGVyIiwic2V0UHJvcGVydHkiLCJfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50Iiwib25WYXJpYW50U2VsZWN0ZWQiLCJwYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwib3JpZ2luYWxTb3VyY2UiLCJjdXJyZW50VmFyaWFudEtleSIsIm11bHRpTW9kZUNvbnRyb2wiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsImlzQSIsImludmFsaWRhdGVDb250ZW50Iiwic2V0RnJlZXplQ29udGVudCIsInNldFRpbWVvdXQiLCJmaWx0ZXJCYXIiLCJkeW5hbWljUGFnZSIsIl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2wiLCJmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQiLCJnZXRGaWx0ZXJJdGVtcyIsImZpbmQiLCJmaWx0ZXJJdGVtIiwiZ2V0UmVxdWlyZWQiLCJnZXRDb25kaXRpb25zIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2giLCJfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJvblZhcmlhbnRTYXZlZCIsIm9uU2VhcmNoIiwib01kY0NoYXJ0IiwiZ2V0Q2hhcnRDb250cm9sIiwiYkhpZGVEcmFmdCIsIkZpbHRlclV0aWxzIiwiZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQiLCJfdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyIsIm9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzVGVtcGxhdGVDb250ZW50VmlldyIsImdldFByb3BlcnR5IiwiZ2V0UGF0aCIsIkNoYXJ0IiwiaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyIsIlRhYmxlIiwiaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRIZWFkZXJFeHBhbmRlZCIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInRoZW4iLCJvRXh0ZXJuYWxTdGF0ZSIsImZpbHRlckJhckNvbmRpdGlvbnMiLCJmaWx0ZXIiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImtleSIsIm9DaGFydCIsIl91cGRhdGVUYWJsZSIsIl91cGRhdGVDaGFydCIsIkh5YnJpZCIsImZvY3VzSGFuZGxpbmdGb3JTZWdtZW50ZWRCdXR0b24iLCJvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQiLCJldmVudCIsIkludmlzaWJsZU1lc3NhZ2UiLCJnZXRJbnN0YW5jZSIsImFubm91bmNlIiwiZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCIsImZpbHRlcnNUZXh0IiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImV4dGVuc2lvbkFQSSIsIkV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIlBhZ2VDb250cm9sbGVyIiwiYXBwbHkiLCJnZXRPd25lckNvbXBvbmVudCIsInVpTW9kZWxDb250ZXh0IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwiaXNFZGl0YWJsZSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiZHlubWljUGFnZUhlYWRlclRpdGxlIiwiZ2V0VGl0bGUiLCJicmVhZGNydW1ic0JCIiwiZ2V0QnJlYWRjcnVtYnMiLCJzZXRCcmVhZGNydW1iTGlua3MiLCJvbkV4aXQiLCJkZXN0cm95IiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwiX2FwcGx5QXBwU3RhdGUiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJ3YWl0Rm9yRWRpdENsZWFudXAiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJtb2RlbCIsImdldE1vZGVsIiwiZWRpdEZsb3ciLCJ0ZXJtaW5hdGVEcmFmdFNlc3Npb24iLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJDb21tb25VdGlscyIsImdldFJvdXRpbmdTZXJ2aWNlIiwid2FpdEZvckJpbmRpbmdDbGVhbnVwIiwiYXR0YWNoRXZlbnRPbmNlIiwiX3VwZGF0ZVRhYmxlQWN0aW9ucyIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsImUiLCJ3YXJuaW5nIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImlzSW5zaWdodHNFbmFibGVkIiwib25QYWdlUmVhZHkiLCJtUGFyYW1ldGVycyIsImZvcmNlRm9jdXMiLCJfc2V0SW5pdGlhbEZvY3VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwidW5kZWZpbmVkIiwib25WaWV3TmVlZHNSZWZyZXNoIiwic2xpY2UiLCJvbkFmdGVyQ2xlYXIiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsInVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2ZvY3VzU2lsZW50IiwiZmlsdGVyRmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJfZm9jdXNXaGVuSGVhZGVyRXhwYW5kZWQiLCJvRmlsdGVySXRlbSIsImJhc2ljU2VhcmNoRmllbGQiLCJnZXRCYXNpY1NlYXJjaEZpZWxkIiwiZmllbGRUb0ZvY3VzIiwiaXNGb2N1c2FibGUiLCJieUlkIiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsInNldEZvY3VzT25FbXBoYXNpemVkSGVhZGVyQWN0aW9uIiwidGl0bGUiLCJhY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImVtcGhhc2l6ZWRCdXR0b24iLCJnZXRUeXBlIiwiZ2V0VmlzaWJsZSIsImdldEVuYWJsZWQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJnZXRWaXNpYmxlVmlld3MiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsIndoZW5Jbml0aWFsaXplZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsImZvY3VzUm93IiwiaW5mbyIsIl9nZXRCcm93c2VyVGl0bGUiLCJfcGFnZVRpdGxlSW5mb3JtYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInN1YnRpdGxlIiwic3ViVGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkIiwiX2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sIiwiYWRhcHRhdGlvbkZpbHRlckJhciIsImdldEluYnVpbHRGaWx0ZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZW5hYmxlUmVxdWVzdHMiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJfaXNNdWx0aU1vZGUiLCJzZXRDb3VudHNPdXREYXRlZCIsImNvbnRyb2xWYXJpYW50SWRzIiwiX2dldFBhZ2VNb2RlbCIsInZhcmlhbnRDb250cm9scyIsInZhcmlhbnRJZEFycmF5Iiwic3BsaXQiLCJ2YXJpYW50SWQiLCJ0cmltIiwicHVzaCIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJjb250ZW50U3dpdGNoZXIiLCIkc2VnbWVudGVkQnV0dG9uIiwiY3VycmVudCIsIl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5Iiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsInNWaXN1YWxGaWx0ZXJCYXJJZCIsIlN0YWJsZUlkSGVscGVyIiwiZ2VuZXJhdGUiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJfZ2V0SWNvblRhYkJhciIsIm9Db250cm9sIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJjb250ZW50Iiwic0tleSIsImFDb250cm9scyIsIm9UYWJNdWx0aU1vZGUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZ2V0S2V5IiwiaW5jbHVkZXMiLCJkZWZhdWx0UGF0aCIsIkxpc3RSZXBvcnRUZW1wbGF0aW5nIiwiZ2V0RGVmYXVsdFBhdGgiLCJpbml0TG9hZE1vZGUiLCJnZXRWaWV3RGF0YSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJ2YXJpYW50TWFuYWdlbWVudElkIiwiZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJnZXREYXRhIiwicmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsImJpbmQiLCJfc2V0U2hhcmVNb2RlbCIsImZuR2V0VXNlciIsIk9iamVjdFBhdGgiLCJnZXQiLCJvU2hhcmVJbmZvIiwiYm9va21hcmtUaXRsZSIsImRvY3VtZW50IiwiYm9va21hcmtDdXN0b21VcmwiLCJzSGFzaCIsImhhc2hlciIsImdldEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpc1NoYXJlSW5KYW1BY3RpdmUiLCJpc0phbUFjdGl2ZSIsIm9UZW1wbGF0ZVByaXZhdGVNb2RlbCIsIm1DYWNoZSIsImlnbm9yZWRGaWVsZHMiLCJhQ2hhcnRzIiwic0NoYXJ0RW50aXR5UGF0aCIsInNDaGFydEVudGl0eVNldCIsInNDYWNoZUtleSIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwiaGlkZUZpbHRlckJhciIsInVzZUhpZGRlbkZpbHRlckJhciIsInZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnQiLCJvVk0iLCJBdXRvIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJvQ29uZGl0aW9ucyIsInN0YXJ0c1dpdGgiLCJzdGFuZGFyZFZhcmlhbnQiLCJnZXRFeGVjdXRlT25TZWxlY3QiLCJpc1RhYmxlQm91bmQiLCJvSW5uZXJDaGFydCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImlzQm91bmQiLCJnZXRCaW5kaW5nSW5mbyIsImJ1dHRvblZpc2libGUiLCJnZXRTZWdtZW50ZWRCdXR0b24iLCJzZWdtZW50ZWRCdXR0b24iLCJldmVudERlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJhZGRFdmVudERlbGVnYXRlIiwic3YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiZ2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJoYW5kbGVNZXNzYWdlQnV0dG9uVmlzaWJpbGl0eSIsInNldFNob3dGb290ZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlVGl0bGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgS1BJTWFuYWdlbWVudCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvS1BJTWFuYWdlbWVudFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnREZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvdGVtcGxhdGVzL0xpc3RSZXBvcnRDb252ZXJ0ZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSWRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUluZm9ybWF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEJyZWFkY3J1bWJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL0JyZWFkY3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL01lc3NhZ2VCdXR0b25cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCB0eXBlIENvbnRlbnRTd2l0Y2hlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250ZW50U3dpdGNoZXIvQ29udGVudFN3aXRjaGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBTaWRlRWZmZWN0c092ZXJyaWRlIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvb3ZlcnJpZGVzL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IHR5cGUgVGFiQ29udGFpbmVySXRlbSBmcm9tIFwic2FwL20vVGFiQ29udGFpbmVySXRlbVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgaGFzaGVyIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9oYXNoZXJcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVBZGRpdGlvbmFsSW5mbyB9IGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCAqIGFzIExpc3RSZXBvcnRUZW1wbGF0aW5nIGZyb20gXCIuL0xpc3RSZXBvcnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuLyoqXG4gKiBDb250cm9sbGVyIGNsYXNzIGZvciB0aGUgbGlzdCByZXBvcnQgcGFnZSwgdXNlZCBpbnNpZGUgYW4gU0FQIEZpb3JpIGVsZW1lbnRzIGFwcGxpY2F0aW9uLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIilcbmNsYXNzIExpc3RSZXBvcnRDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKHtcblx0XHRcdG9uQWZ0ZXJCaW5kaW5nOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxSb3V0aW5nKSB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9vbkFmdGVyQmluZGluZygpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzLm92ZXJyaWRlKFNpZGVFZmZlY3RzT3ZlcnJpZGUpKVxuXHRzaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCB1aU1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0dWlNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZSA9IGR5bmFtaWNQYWdlPy5nZXRUaXRsZSgpO1xuXHRcdGNvbnN0IGJyZWFkY3J1bWJzQkIgPSBkeW5taWNQYWdlSGVhZGVyVGl0bGUuZ2V0QnJlYWRjcnVtYnMoKSBhcyBCcmVhZGNydW1icyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYnJlYWRjcnVtYnNCQikge1xuXHRcdFx0YnJlYWRjcnVtYnNCQi5zZXRCcmVhZGNydW1iTGlua3MoXCJcIik7XG5cdFx0fVxuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdGFzeW5jIF9vbkFmdGVyQmluZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLl9hcHBseUFwcFN0YXRlKCkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkud2FpdEZvckVkaXRDbGVhbnVwKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdC8vIFRlcm1pbmF0ZSBhbnkgbGluZ2VyaW5nIEFCQVAgZHJhZnQgc2Vzc2lvbiB3aGVuIHJldHVybmluZyBmcm9tIGFuIGVkaXQgc2Vzc2lvblxuXHRcdFx0Ly8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIHZpYSBicm93c2VyIGJhY2sgYnV0dG9uLFxuXHRcdFx0Ly8gd2hpY2ggZG9lc24ndCB0cmlnZ2VyIHRoZSBkcmFmdCBkYXRhIGxvc3MgZGlhbG9nXG5cdFx0XHRjb25zdCBtb2RlbDogT0RhdGFNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcblx0XHRcdGlmIChtb2RlbCkge1xuXHRcdFx0XHR0aGlzLmVkaXRGbG93LnRlcm1pbmF0ZURyYWZ0U2Vzc2lvbihtb2RlbCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cdFx0Y29uc3QgZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcblx0XHRcdC5pc0luc2lnaHRzRW5hYmxlZCgpXG5cdFx0XHQudGhlbigoaXNJbnNpZ2h0c0VuYWJsZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzU3VwcG9ydGVkXCIsIGlzSW5zaWdodHNFbmFibGVkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgaW5zaWdodHMgYXJlIGVuYWJsZWRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKFxuXHRcdFx0dGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRhSWdub3JlZEZpZWxkczogc3RyaW5nW10sXG5cdFx0XHRiSXNDaGFydDogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRcdG9BcHBseVN1cHBvcnRlZD86IHsgZW5hYmxlU2VhcmNoOiBib29sZWFuIH1cblx0XHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHRnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkPy5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlclwiKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdHRoaXMuX3NldEluaXRpYWxGb2N1cygpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBjdXN0b20gdmlldyB1c2VkIGluIGEgbGlzdCByZXBvcnQgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZCxcblx0ICogb3Igd2hlbiB0aGUgdmlldyBpcyBmb3JjZWQgdG8gYmUgcmVmcmVzaGVkIHRocm91Z2ggdGhlIEV4dGVuc2lvbiBBUEkgZm9yIHRoZSBsaXN0IHJlcG9ydCdzIHB1YmxpYyBtZXRob2Qgc2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSUQsXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlIHN1Y2ggYXMgdGFiQ2hhbmdlZCwgc2VhcmNoLCBvciBmb3JjZWRSZWZyZXNoLlxuXHQgKiBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlIG9mIGEgbWFwOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiIHwgXCJmb3JjZWRSZWZyZXNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiB1bmtub3duKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgd2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24uXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgY3VzdG9taXphdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYWJsZSgpPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBvbiB0aGUgRmlsdGVyQmFyIGlzIHByZXNzZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25BZnRlckNsZWFyKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBUYWJsZVtdKTogdm9pZCB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShhSUJOQWN0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqIEBwYXJhbSBzUm93UGF0aCBUaGUgcGF0aCBvZiB0aGUgdGFibGUgcm93IGNvbnRleHQgdG8gYmUgc2Nyb2xsZWQgdG9cblx0ICovXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IENvbnRyb2wpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUgYXMgVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgc2lsZW50IGZvY3VzIG9uIHRoZSBmaWx0ZXIgZmllbGQuIFN1cHByZXNzZXMgdGhlIG9wZW5pbmcgb2YgdGhlIHR5cGUtYWhlYWQgcG9wdXAuXG5cdCAqIEBwYXJhbSBmaWx0ZXJGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZSBzZXQgYWZ0ZXIgdGhlIGluaXRpYWwgbG9hZFxuXHQgKi9cblx0X2ZvY3VzU2lsZW50KGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpbHRlckZpZWxkLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdGZpbHRlckZpZWxkLmZvY3VzKGZvY3VzSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZm9jdXMgd2hlbiB0aGUgaGVhZGVyIGlzIGV4cGFuZGVkLlxuXHQgKiBUaGUgcHJpb3JpdGllcyBhcmU6ICgxKSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCAoMikgc2VhcmNoIGZpZWxkIGlmIGZvY3VzYWJsZSBvciBmaXJzdCBmaWx0ZXIgZmllbGQsIGFuZCAoMykgR28gYnV0dG9uLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIF9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9GaWx0ZXJJdGVtOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHR9KTtcblx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCBvciBvbiB0aGUgZmlyc3QgZmlsdGVyIGZpZWxkIGlmIHRoZSB0YWJsZSBkYXRhIGlzIGxvYWRlZFxuXHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpICYmIGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIHNldCBzaWxlbnQgZm9jdXMgb24gc2VhcmNoIGZpZWxkIChpZiBmb2N1c2FibGUpLCBvdGhlcndpc2Ugb24gZmlyc3QgZmlsdGVyIGZpZWxkXG5cdFx0XHRjb25zdCBiYXNpY1NlYXJjaEZpZWxkID0gZmlsdGVyQmFyLmdldEJhc2ljU2VhcmNoRmllbGQoKTtcblx0XHRcdGNvbnN0IGZpZWxkVG9Gb2N1cyA9IGJhc2ljU2VhcmNoRmllbGQ/LmlzRm9jdXNhYmxlKCkgPyBiYXNpY1NlYXJjaEZpZWxkIDogZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKClbMF07XG5cdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpZWxkVG9Gb2N1cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCk/LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWVzIHRvIGZvY3VzIHRoZSBlbXBoYXNpemVkIChwcmltYXJ5KSBoZWFkZXIgYWN0aW9uIGluIHRoZSBEeW5hbWljUGFnZVRpdGxlIGFjdGlvbnMuXG5cdCAqIFRoaXMgaXMgdXNlZCB3aGVuIG5vIEZpbHRlckJhciBpcyByZW5kZXJlZCBzbyB0aGF0IHRoZSBmaXJzdCBhY3Rpb25hYmxlIGNvbnRyb2wgcmVjZWl2ZXMgZm9jdXMuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYW4gZW1waGFzaXplZCBhbmQgZm9jdXNhYmxlIGFjdGlvbiBpcyBmb3VuZCBhbmQgZm9jdXNlZFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRGb2N1c09uRW1waGFzaXplZEhlYWRlckFjdGlvbigpOiBib29sZWFuIHtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IHRpdGxlID0gZHluYW1pY1BhZ2UuZ2V0VGl0bGUoKTtcblx0XHRjb25zdCBhY3Rpb25zID0gdGl0bGUuZ2V0QWN0aW9ucygpO1xuXHRcdGNvbnN0IGVtcGhhc2l6ZWRCdXR0b24gPSBhY3Rpb25zLmZpbmQoKGNvbnRyb2wpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGNvbnRyb2wgJiZcblx0XHRcdFx0Y29udHJvbC5pc0E/LihcInNhcC5tLkJ1dHRvblwiKSAmJlxuXHRcdFx0XHQoY29udHJvbCBhcyBCdXR0b24pLmdldFR5cGUoKSA9PT0gXCJFbXBoYXNpemVkXCIgJiZcblx0XHRcdFx0Y29udHJvbC5nZXRWaXNpYmxlKCkgJiZcblx0XHRcdFx0KGNvbnRyb2wgYXMgQnV0dG9uKS5nZXRFbmFibGVkKCkgIT09IGZhbHNlXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdGlmIChlbXBoYXNpemVkQnV0dG9uKSB7XG5cdFx0XHRlbXBoYXNpemVkQnV0dG9uLmZvY3VzKCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGluaXRpYWwgZm9jdXMgaW4gdGhlIExpc3RSZXBvcnQgYmFzZWQgb24gdGhlIFVYIGZvY3VzIHJ1bGVzLlxuXHQgKi9cblx0YXN5bmMgX3NldEluaXRpYWxGb2N1cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBJbiBGQ0wsIHdoZW4gbmF2aWdhdGluZyBmb3J3YXJkIHRvIGFuIE9iamVjdCBQYWdlIChlLmcuIGFmdGVyIENyZWF0ZSksIHRoZSByb3V0ZU1hdGNoZWQgZXZlbnRcblx0XHQvLyBmaXJlcyBmaXJzdCBmb3IgdGhlIHBhcmVudCByb3V0ZSAoTFIgb25seSkgYmVmb3JlIHRoZSBjaGlsZCByb3V0ZSAoTFIrT1ApLiBUaGlzIGNhdXNlc1xuXHRcdC8vIG9uUGFnZVJlYWR5IHRvIGJlIGNhbGxlZCBvbiB0aGUgTFIgd2l0aCBmb3JjZUZvY3VzPXRydWUsIHN0ZWFsaW5nIGZvY3VzIGZyb20gdGhlIE9QLlxuXHRcdC8vIEd1YXJkOiBza2lwIGZvY3VzIGlmIHRoZSBGQ0wgaXMgc2hvd2luZyBtb3JlIHRoYW4gb25lIGNvbHVtbiAoZGVlcGVyIHBhZ2UgaXMgdmlzaWJsZSkuXG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAocm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpICYmIHJvb3RWaWV3Q29udHJvbGxlci5nZXRWaXNpYmxlVmlld3MoKS5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7XG5cdFx0aWYgKGZpbHRlckJhciAmJiAhdGhpcy5faXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCkpIHtcblx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdGF3YWl0IGZpbHRlckJhci53aGVuSW5pdGlhbGl6ZWQoKTtcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHR0aGlzLl9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXIpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gRmlsdGVyQmFyIHJlbmRlcmVkOiBmb2N1cyB0aGUgZW1waGFzaXplZCAocHJpbWFyeSkgaGVhZGVyIGFjdGlvbiBpZiBhdmFpbGFibGVcblx0XHRcdGlmICh0aGlzLnNldEZvY3VzT25FbXBoYXNpemVkSGVhZGVyQWN0aW9uKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGUgdG8gZ2V0IHRoZSBicm93c2VyIHRpdGxlIG9mIHRoZSBMUiBwYWdlLlxuXHQgKiBAcGFyYW0gX3BhZ2VUaXRsZUluZm9ybWF0aW9uIFByZXNlbnQgcGFnZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKiBAcmV0dXJucyBUaXRsZSBpbmZvcm1hdGlvbiB0byBiZSB1c2VkIGJ5IHNoZWxsIHNlcnZpY2VzIGZvciBicm93c2VyIHRpdGxlXG5cdCAqL1xuXHRhc3luYyBfZ2V0QnJvd3NlclRpdGxlKF9wYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbik6IFByb21pc2U8VGl0bGVBZGRpdGlvbmFsSW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIFdlIHNoYWxsIGZhbGxiYWNrIHRvIGRlZmF1bCBhcHAgdGl0bGUgaW4gY2FzZSBvZiBsaXN0IHJlcG9ydC5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYWxsIGNvbnRyb2wtbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50IGNvbnRyb2xzIChGaWx0ZXJCYXIsIFRhYmxlcywgQ2hhcnRzKS5cblx0ICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgd2hlbiB2YXJpYW50IG1hbmFnZW1lbnQgaXMgc2V0IHRvIFwiQ29udHJvbFwiIG1vZGUuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xzLCBvciBlbXB0eSBhcnJheSBpZiBjb250cm9sIHZhcmlhbnQgSURzIGRvbid0IGV4aXN0XG5cdCAqL1xuXHRfZ2V0Q29udHJvbFZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbHMoKTogVmFyaWFudE1hbmFnZW1lbnRbXSB7XG5cdFx0Y29uc3QgY29udHJvbFZhcmlhbnRJZHMgPSB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvY29udHJvbFZhcmlhbnRJZHNcIik7XG5cblx0XHRpZiAoIWNvbnRyb2xWYXJpYW50SWRzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFyaWFudENvbnRyb2xzOiBWYXJpYW50TWFuYWdlbWVudFtdID0gW107XG5cdFx0Y29uc3QgdmFyaWFudElkQXJyYXkgPSBjb250cm9sVmFyaWFudElkcy5zcGxpdChcIixcIik7XG5cblx0XHR2YXJpYW50SWRBcnJheS5mb3JFYWNoKCh2YXJpYW50SWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0Y29uc3QgdmFyaWFudENvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRJZC50cmltKCkpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0aWYgKHZhcmlhbnRDb250cm9sKSB7XG5cdFx0XHRcdHZhcmlhbnRDb250cm9scy5wdXNoKHZhcmlhbnRDb250cm9sKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB2YXJpYW50Q29udHJvbHM7XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRlbnRTd2l0Y2hlciA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Q29udGVudFN3aXRjaGVyXCIpIGFzIFVJNUVsZW1lbnQgJiB7ICRzZWdtZW50ZWRCdXR0b24/OiB7IGN1cnJlbnQ/OiBVSTVFbGVtZW50IH0gfTtcblx0XHRyZXR1cm4gY29udGVudFN3aXRjaGVyPy4kc2VnbWVudGVkQnV0dG9uPy5jdXJyZW50O1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZyk6IENvbnRyb2wgfCBNYWNyb0FQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkID8gKHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKSBhcyBDb250cm9sKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpIGFzIENoYXJ0VHlwZTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNWaXN1YWxGaWx0ZXJCYXJJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtcInZpc3VhbEZpbHRlclwiLCB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKV0pO1xuXHRcdHJldHVybiBzVmlzdWFsRmlsdGVyQmFySWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKTogTXVsdGlwbGVNb2RlQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0SWNvblRhYkJhcigpOiBJY29uVGFiQmFyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IHN0cmluZyk6IENvbnRyb2xbXSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogQ29udHJvbFtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IHVua25vd24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKSkgYXMgQ29udHJvbDtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpLmluY2x1ZGVzKGBmZTo6JHtzS2V5fWApKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXREZWZhdWx0UGF0aCh0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmlld3NcIikgfHwgW10pO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgYnkgZmxleCB0byBkZXRlcm1pbmUgaWYgdGhlIGFwcGx5QXV0b21hdGljYWxseSBzZXR0aW5nIG9uIHRoZSB2YXJpYW50IGlzIHZhbGlkLlxuXHQgKiBDYWxsZWQgb25seSBmb3IgU3RhbmRhcmQgVmFyaWFudCBhbmQgb25seSB3aGVuIHRoZXJlIGlzIGRpc3BsYXkgdGV4dCBzZXQgZm9yIGFwcGx5QXV0b21hdGljYWxseSAoRkUgb25seSBzZXRzIGl0IGZvciBBdXRvKS5cblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCgpOiBib29sZWFuIHtcblx0XHQvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIGFuZCB0YWtlIGNhcmUgb2YgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdGhlIHNldHRpbmdzIGZvciBpbml0aWFsIGxvYWQgYmFzZWQgb25cblx0ICogLSBtYW5pZmVzdCBzZXR0aW5nIGluaXRMb2FkIC0gRW5hYmxlZC9EaXNhYmxlZC9BdXRvXG5cdCAqIC0gdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHZhcmlhbnRcblx0ICogLSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzXG5cdCAqIFdlIGRpc2FibGUgdGhlIGZpbHRlciBiYXIgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuYWJsZSBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0LlxuXHQgKi9cblx0X3NldEluaXRMb2FkKCk6IHZvaWQge1xuXHRcdC8vIGlmIGluaXRMb2FkIGlzIERpc2FibGVkIG9yIEF1dG8sIHN3aXRjaCBvZmYgZmlsdGVyIGJhciBzZWFyY2ggdGVtcG9yYXJpbHkgYXQgc3RhcnRcblx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVJbml0TG9hZCgpO1xuXHRcdH1cblx0XHQvLyBzZXQgaG9vayBmb3IgZmxleCBmb3Igd2hlbiBzdGFuZGFyZCB2YXJpYW50IGlzIHNldCAoYXQgc3RhcnQgb3IgYnkgdXNlciBhdCBydW50aW1lKVxuXHRcdC8vIHJlcXVpcmVkIHRvIG92ZXJyaWRlIHRoZSB1c2VyIHNldHRpbmcgJ2FwcGx5IGF1dG9tYXRpY2FsbHknIGJlaGF2aW91ciBpZiB0aGVyZSBhcmUgbm8gZmlsdGVyc1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50SWQgPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXRWYXJpYW50QmFja1JlZmVyZW5jZShcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0RGF0YSgpIGFzIExpc3RSZXBvcnREZWZpbml0aW9uXG5cdFx0KTtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHZhcmlhbnRNYW5hZ2VtZW50SWQgJiYgKHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudE1hbmFnZW1lbnRJZCkgYXMgVmFyaWFudE1hbmFnZW1lbnQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0KFxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCBhcyB7IHJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/OiBGdW5jdGlvbiB9XG5cdFx0XHQpPy5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50Py4odGhpcy5fYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFNoYXJlTW9kZWwoKTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogZGVhY3RpdmF0ZWQgZm9yIG5vdyAtIGN1cnJlbnRseSB0aGVyZSBpcyBubyBfdGVtcGxQcml2IGFueW1vcmUsIHRvIGJlIGRpc2N1c3NlZFxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSBub3QgY2FsbGVkIGFueW1vcmUgZnJvbSB0aGUgaW5pdCBtZXRob2RcblxuXHRcdGNvbnN0IGZuR2V0VXNlciA9IE9iamVjdFBhdGguZ2V0KFwic2FwLnVzaGVsbC5Db250YWluZXIuZ2V0VXNlclwiKTtcblx0XHQvL3ZhciBvTWFuaWZlc3QgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpXCIpO1xuXHRcdC8vdmFyIHNCb29rbWFya0ljb24gPSAob01hbmlmZXN0ICYmIG9NYW5pZmVzdC5pY29ucyAmJiBvTWFuaWZlc3QuaWNvbnMuaWNvbikgfHwgXCJcIjtcblxuXHRcdC8vc2hhcmVNb2RlbDogSG9sZHMgYWxsIHRoZSBzaGFyaW5nIHJlbGV2YW50IGluZm9ybWF0aW9uIGFuZCBpbmZvIHVzZWQgaW4gWE1MIHZpZXdcblx0XHRjb25zdCBvU2hhcmVJbmZvID0ge1xuXHRcdFx0Ym9va21hcmtUaXRsZTogZG9jdW1lbnQudGl0bGUsIC8vVG8gbmFtZSB0aGUgYm9va21hcmsgYWNjb3JkaW5nIHRvIHRoZSBhcHAgdGl0bGUuXG5cdFx0XHRib29rbWFya0N1c3RvbVVybDogZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IG1DYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydCkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IGAke3NDaGFydEVudGl0eVNldH1DaGFydGA7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc0NhY2hlS2V5XSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL2lnbm9yZWRGaWVsZHNcIiwgaWdub3JlZEZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICdoaWRlRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIGFzIGl0IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhpcyBzZXR0aW5nLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaGlkZUZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYnV0IHN0aWxsIGV4aXN0cyBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAndXNlSGlkZGVuRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW4gYXMgaXQgY2FuIGFsc28gaGlkZSB0aGUgRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnVzZUhpZGRlbkZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBCb29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50IHx8ICFrZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudHMgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRWYXJpYW50cygpO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudHMuZmluZChmdW5jdGlvbiAodmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgJiYgdmFyaWFudC5nZXRLZXkoKSA9PT0ga2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiAoY3VycmVudFZhcmlhbnQgJiYgY3VycmVudFZhcmlhbnQuZ2V0UHJvcGVydHkoXCJleGVjdXRlT25TZWxlY3RcIikpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogVmFyaWFudE1hbmFnZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKG9WTSAmJiAhc0tleS5zdGFydHNXaXRoKFwiJFwiKSAmJiBBcnJheS5pc0FycmF5KG9Db25kaXRpb25zW3NLZXldKSAmJiBvQ29uZGl0aW9uc1tzS2V5XS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIGxvYWQgZGF0YSBhcyBwZXIgdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHRoZSB2YXJpYW50XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFuZGFyZFZhcmlhbnQgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmdldEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZ2V0RXhlY3V0ZU9uU2VsZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF91cGRhdGVUYWJsZShvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBDaGFydCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuX2dldENoYXJ0KG9DaGFydCk7XG5cdFx0aWYgKCEob0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuaXNCb3VuZChcImRhdGFcIikpIHx8IHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcykge1xuXHRcdFx0KG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpbHRlciB0b2dnbGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gYnV0dG9uVmlzaWJsZSBGaWx0ZXIgdG9nZ2xlIGJ1dHRvbiB2aXNpYmlsaXR5XG5cdCAqL1xuXHRzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGJ1dHRvblZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0ZmlsdGVyQmFyPy5nZXRTZWdtZW50ZWRCdXR0b24oKT8uc2V0VmlzaWJsZShidXR0b25WaXNpYmxlKTtcblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uRmlsdGVyTGF5b3V0U3dpdGNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHt9LCBDb250ZW50U3dpdGNoZXI+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBjdXJyZW50S2V5ID0gb0V2ZW50LmdldFNvdXJjZSgpLnNlbGVjdGVkS2V5O1xuXHRcdFx0Y29uc3QgY29udHJvbFZhcmlhbnRDb250cm9scyA9IHRoaXMuX2dldENvbnRyb2xWYXJpYW50TWFuYWdlbWVudENvbnRyb2xzKCk7XG5cblx0XHRcdGlmIChjb250cm9sVmFyaWFudENvbnRyb2xzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29udHJvbCB2YXJpYW50IG1hbmFnZW1lbnQgaXMgY29uZmlndXJlZFxuXHRcdFx0XHRjb25zdCBpc1Zpc2libGUgPSBjdXJyZW50S2V5ICE9PSBcImFpXCI7XG5cdFx0XHRcdGNvbnRyb2xWYXJpYW50Q29udHJvbHMuZm9yRWFjaCgodmFyaWFudENvbnRyb2wpID0+IHtcblx0XHRcdFx0XHR2YXJpYW50Q29udHJvbC5zZXRWaXNpYmxlKGlzVmlzaWJsZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25JbmxpbmVFZGl0U2F2ZSh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KG9GaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0UGFyYW1ldGVycygpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBwYXJhbWV0ZXJzLm9yaWdpbmFsU291cmNlIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdFx0Y29uc3QgbXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG11bHRpTW9kZUNvbnRyb2wgJiYgIXZhcmlhbnRNYW5hZ2VtZW50Py5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdC8vTm90IGEgQ29udHJvbCBWYXJpYW50XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyPy5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKGZpbHRlckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIGZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godmFyaWFudE1hbmFnZW1lbnQpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KSkge1xuXHRcdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyOyAvLyBvbnNlYXJjaCBpcyBjYWxsZWQgb25seSBpZiB0aGUgZmlsdGVyYmFyIGV4aXN0c1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBiSGlkZURyYWZ0ID0gRmlsdGVyVXRpbHMuZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQob0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCkpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBiSGlkZURyYWZ0KTtcblx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRpZiAoIXRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vbG9naWMgZm9yIGV4cGFuc2lvbiBvciBjb2xsYXBzZSBvZiBmaWx0ZXIgYmFyIHN0YXJ0c1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9zZXR0aW5nIGl0IHRvIGZhbHNlIHNvIHRoYXQgZnVydGhlciBzZWFyY2ggb3IgJ0dvJyB0cmlnZ2VycyB3b24ndCBjb2xsYXBzZSB0aGUgZmlsdGVyIGJhclxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoRGV2aWNlLnN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IGRhdGE6IHVua25vd24gfSwgQ2hhcnRUeXBlPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSBhcyBDaGFydCxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRLZXk6IHN0cmluZyA9XG5cdFx0XHRcdChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KS5zZWxlY3RlZEtleSB8fCAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IGtleTogc3RyaW5nIH0pLmtleTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzZWxlY3RlZEtleSk7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblxuXHRcdFx0c3dpdGNoIChzZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGV2ZW50OiBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KCEhZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSk7XG5cdFx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShcblx0XHRcdFx0XHRcdGZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogSGFuZGxlcyBmb2N1cyBmb3IgdGhlIHNlZ21lbnRlZCBidXR0b24uXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNlZ21lbnRlZEJ1dHRvbiA9IHRoaXMuX2dldFNlZ21lbnRlZEJ1dHRvbigpO1xuXHRcdGlmIChzZWdtZW50ZWRCdXR0b24pIHtcblx0XHRcdGNvbnN0IGV2ZW50RGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24uZm9jdXMoKTtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShldmVudERlbGVnYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5hZGRFdmVudERlbGVnYXRlKGV2ZW50RGVsZWdhdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBTZWxlY3Rpb24gVmFyaWFudC5cblx0ICogQHBhcmFtIGZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICovXG5cdGFzeW5jIF9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0Y29uc3Qgc3YgPSBhd2FpdCBmaWx0ZXJCYXJBUEkuZ2V0U2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIsIHN2KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogRXJyb3IgZmV0Y2hpbmcgc2VsZWN0aW9uIHZhcmlhbnQgb24gZmlsdGVyIGNoYW5nZTogJHttZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb25WYXJpYW50XG5cdCAqL1xuXHRnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KCk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKGludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIikgYXMgU2VsZWN0aW9uVmFyaWFudCkgfHwgbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBtZXNzYWdlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyIGluIGNhc2UgdGhlcmUgaXMgaW5saW5lIGVkaXQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZUJ1dHRvblZpc2liaWxpdHkoZXZlbnQ6IFVJNUV2ZW50PHsgdmlzaWJsZTogYm9vbGVhbiB9LCBNZXNzYWdlQnV0dG9uPik6IHZvaWQge1xuXHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJ2aXNpYmxlXCIpKSB7XG5cdFx0XHR0aGlzLnNldFNob3dGb290ZXIoZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlzaWJsZVwiKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RSZXBvcnRDb250cm9s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