@sapui5/sap.fe.macros 1.142.0 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +5 -5
  4. package/src/sap/fe/macros/Field.ts +5 -3
  5. package/src/sap/fe/macros/FooterContent.js +3 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  7. package/src/sap/fe/macros/MessageButton.js +3 -3
  8. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  9. package/src/sap/fe/macros/Page.js +8 -4
  10. package/src/sap/fe/macros/Page.tsx +13 -4
  11. package/src/sap/fe/macros/RichTextEditor.js +12 -14
  12. package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
  13. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  14. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  15. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  16. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  17. package/src/sap/fe/macros/chart/Action.js +19 -7
  18. package/src/sap/fe/macros/chart/Action.ts +8 -0
  19. package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
  20. package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
  21. package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
  22. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
  23. package/src/sap/fe/macros/controls/FilterBar.js +1 -1
  24. package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
  25. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  26. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  27. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
  28. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
  29. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
  30. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
  31. package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
  32. package/src/sap/fe/macros/field/FieldTemplating.ts +7 -2
  33. package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
  34. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
  35. package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
  36. package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
  37. package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
  38. package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
  39. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
  40. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
  41. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  42. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  43. package/src/sap/fe/macros/library.js +5 -6
  44. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  45. package/src/sap/fe/macros/messagebundle.properties +6 -0
  46. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  47. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  48. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +4 -3
  49. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +5 -2
  50. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  51. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  52. package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
  53. package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
  54. package/src/sap/fe/macros/table/MdcTableTemplate.js +27 -10
  55. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +31 -4
  56. package/src/sap/fe/macros/table/Table.block.js +3 -1
  57. package/src/sap/fe/macros/table/Table.block.tsx +7 -4
  58. package/src/sap/fe/macros/table/TableAPI.js +49 -28
  59. package/src/sap/fe/macros/table/TableAPI.ts +58 -32
  60. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -4
  61. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +6 -3
  62. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
  63. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
  64. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  65. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  66. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  67. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  68. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -3
  69. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +7 -4
@@ -624,7 +624,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
624
624
  setTimeout(() => {
625
625
  oInternalModelContext.setProperty("dataRequestedTimeoutSet", false);
626
626
  const oTableAPI = oTable ? oTable.getParent() : null;
627
- if (oTableAPI) {
627
+ if (oTableAPI && CommonUtils.getIsEditable(oTable)) {
628
628
  oTableAPI.tableDefaultsPromise = oTableAPI.getTableDefaults(oTable) ?? Promise.resolve({});
629
629
  }
630
630
  }, 0);
@@ -1136,7 +1136,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
1136
1136
  return Fragment.load({
1137
1137
  type: "XML",
1138
1138
  definition: resultXML,
1139
- controller: view.getController()
1139
+ controller: view.getController().getExtensionAPI()
1140
1140
  });
1141
1141
  },
1142
1142
  _getExportFormat: function (dataType) {
@@ -1453,4 +1453,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
1453
1453
  }
1454
1454
  });
1455
1455
  }, false);
1456
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiZGVsYXlGb3IiLCJkZWxheSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsIk9iamVjdCIsImFzc2lnbiIsIlRhYmxlRGVsZWdhdGVCYXNlIiwiYXBpVmVyc2lvbiIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwIiwidGFibGUiLCJwcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9zIiwia2V5IiwiaW5kZXhPZiIsImNvbHVtbiIsImdldENvbHVtbnMiLCJmaW5kIiwiY29sIiwiZ2V0UHJvcGVydHlLZXkiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiZGF0YSIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnZlcnRlZE1ldGFEYXRhIiwiY29udmVydGVkVHlwZXMiLCJvRGF0YUZpZWxkIiwidGFyZ2V0T2JqZWN0Iiwib0ZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiYUZpZWxkV2lkdGgiLCJEYXRhIiwiZm9yRWFjaCIsIm9EYXRhIiwib0RhdGFGaWVsZFdpZHRoIiwiJFR5cGUiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJnZXRXaWR0aEZvckRhdGFGaWVsZCIsImxhYmVsV2lkdGgiLCJwcm9wZXJ0eVdpZHRoIiwiU2l6ZUhlbHBlciIsImdldEJ1dHRvbldpZHRoIiwiTGFiZWwiLCJ0b1N0cmluZyIsInB1c2giLCJuV2lkZXN0IiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJNYXRoIiwibWF4IiwidmlzdWFsU2V0dGluZ3MiLCJkZWVwRXh0ZW5kIiwid2lkdGhDYWxjdWxhdGlvbiIsInZlcnRpY2FsQXJyYW5nZW1lbnQiLCJtaW5XaWR0aCIsImNlaWwiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yQ29ubmVjdGVkRmllbGQiLCJtZXRhTW9kZWwiLCJkYXRhRmllbGQiLCJjb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHNTZXBhcmF0b3IiLCJnZXRDb25uZWN0ZWRGaWVsZHNTZXBhcmF0b3IiLCJmaWVsZFdpZHRocyIsImdldENvbm5lY3RlZEZpZWxkc0RhdGEiLCJkYXRhRmllbGRXaWR0aCIsInNlcGFyYXRvcldpZHRoIiwiY29sdW1uV2lkdGgiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwIiwicHJvcGVydHkiLCJ0YWJsZUFQSSIsIl9nZXRUYWJsZUFQSSIsImdldE9iamVjdCIsImdhcCIsImdldFByb3BlcnR5IiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQiLCJ1bml0IiwidW5pdFRleHQiLCJ0aW1lem9uZVRleHQiLCJvVGFibGVBUEkiLCJ0ZXh0IiwiZ2V0UmVhZE9ubHkiLCJfY29tcHV0ZUxhYmVsIiwibGFiZWxNYXAiLCJsYWJlbCIsInByb3BlcnRpZXNXaXRoU2FtZUxhYmVsIiwiaXNQcm9wZXJ0eVVzZWRBc1RleHRPbmx5UHJvcGVydHkiLCJzb21lIiwicHJvcCIsInBhdGgiLCJtb2RlIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJhZGRpdGlvbmFsTGFiZWxzIiwiZmlsdGVyYWJsZSIsImpvaW4iLCJfdXBkYXRlUHJvcGVydHlJbmZvIiwicHJvcGVydGllcyIsInAxM25Nb2RlIiwiZ2V0UDEzbk1vZGUiLCJzb3J0YWJsZSIsImdyb3VwYWJsZSIsInVuZGVmaW5lZCIsImNvbmNhdCIsIm5hbWUiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJkYXRhVHlwZSIsInZpc2libGUiLCJnZXRQYXJlbnQiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRJZCIsImdldENvbHVtbnNGb3IiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwiZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXMiLCJvVGFibGUiLCJvQ2FwYWJpbGl0aWVzIiwiWExTWCIsIm9Nb2RlbCIsIkRlbGVnYXRlVXRpbCIsImZldGNoTW9kZWwiLCJ0aGVuIiwibW9kZWwiLCJhU3VwcG9ydGVkRm9ybWF0cyIsImFMb3dlckZvcm1hdHMiLCJtYXAiLCJlbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvQW5ub3RhdGlvbiIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiY29sdW1uSW5mbyIsImNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0ZpbHRlcmFibGUiLCJpc1BhdGhGaWx0ZXJhYmxlIiwicmVsYXRpdmVQYXRoIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImlzUGFydE9mQ3VzdG9tQ29sdW1uIiwiaXNDb25zdGFudCIsIl9mZXRjaFByb3BlcnR5SW5mbyIsImFwcENvbXBvbmVudCIsInNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25Db250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NvbXBsZXhUeXBlIiwidHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsImJGaWx0ZXJhYmxlIiwiQ29tbW9uSGVscGVyIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJiSXNBbmFseXRpY2FsVGFibGUiLCJnZXRDdXN0b21EYXRhIiwiZ2V0TG9jYWxpemVkVGV4dCIsInRvb2x0aXAiLCJfZ2V0VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlEYXRhTW9kZWwiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIm1heENvbmRpdGlvbnMiLCJpc011bHRpVmFsdWUiLCJFcnJvciIsInNldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJnZXRQcm9wZXJ0eUluZm9zIiwiX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcyIsImRlbGF5VGltZSIsInN1YkZldGNoZWRQcm9wZXJ0aWVzIiwic2V0Q2FjaGVkUHJvcGVydHlJbmZvcyIsInNldE5vRGF0YUluZm9ybWF0aW9uIiwiaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24iLCJub0RhdGFBZ2dyZWdhdGlvbiIsImdldE5vRGF0YSIsImlzQSIsImN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2UiLCJzZXRUaXRsZSIsInRpdGxlIiwic2V0RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldElsbHVzdHJhdGlvblR5cGUiLCJpbGx1c3RyYXRpb25UeXBlIiwic2V0SWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGlvblNpemUiLCJpbGx1c3RyYXRlZE1lc3NhZ2UiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJzZXROb0RhdGEiLCJzZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSIsImJpbmRpbmdJbmZvIiwidGFibGVGaWx0ZXJJbmZvIiwiVGFibGVVdGlscyIsImdldEFsbEZpbHRlckluZm8iLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInN1ZmZpeFJlc291cmNlS2V5Iiwic3Vic3RyaW5nIiwiaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiIsImdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzIiwiZ2V0UXVpY2tGaWx0ZXIiLCJnZXRUZXh0IiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRmlsdGVyUmVzdWx0cyIsImZpbHRlckFzc29jaWF0aW9uIiwiZ2V0RmlsdGVyIiwiaGFzRmlsdGVyT3JTZWFyY2giLCJzZWFyY2giLCJmaWx0ZXJzIiwidGVzdCIsIk5vRW50cmllcyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZXF1ZXN0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJiRGF0YVJlcXVlc3RlZEF0dGFjaGVkIiwiYXR0YWNoRGF0YVJlcXVlc3RlZCIsInRhYmxlRGVmYXVsdHNQcm9taXNlIiwiZ2V0VGFibGVEZWZhdWx0cyIsImhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkIiwiYkRhdGFSZWNlaXZlZEF0dGFjaGVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsInRhYmxlRGVmaW5pdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWwiLCJjb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwiLCJlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlIiwiZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUiLCJpc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSIsImlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyIiwiaXNPcHRpbWlzdGljQmF0Y2hEaXNhYmxlZCIsIm9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsInByb21pc2UiLCJyZWJpbmQiLCJvQmluZGluZ0luZm8iLCJiSXNTdXNwZW5kZWQiLCJUYWJsZVJ1bnRpbWUiLCJjbGVhclNlbGVjdGlvbiIsImFwcGx5Iiwib25UYWJsZUJvdW5kIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiZmV0Y2hQcm9wZXJ0aWVzIiwicHJlSW5pdCIsImZhc3RDcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJxdWlja0ZpbHRlciIsImNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIkNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00iLCJfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyIsIl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsIl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCIsImZpcmVFdmVudCIsImNvbGxlY3Rpb25CaW5kaW5nSW5mbyIsInF1aWNrRmlsdGVyS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJhdHRhY2hlZEV2ZW50cyIsImdldEF0dGFjaGVkRXZlbnRzIiwiY29udGV4dCIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93Iiwic2V0QXR0YWNoRXZlbnRzIiwiZSIsInNvcnRlcnMiLCJzb3J0ZXIiLCJuZXdTb3J0ZXJzVG9CZUFwcGxpZWQiLCJ0YWJsZVByb3BlcnRpZXMiLCJ0YWJsZVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwidW5pdFNvcnRlckF2YWlsYWJsZSIsInNvcnQiLCJTb3J0ZXIiLCJnZXRGaWx0ZXJzIiwidXBkYXRlRmlsdGVyc0ZvckV4dGVybmFsSUQiLCJnZXRQYWdlQ29udHJvbGxlciIsInJlY29tbWVuZGF0aW9ucyIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwidGFibGVEZWYiLCJyZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsImFubm90YXRpb24iLCJlbnRpdHlUeXBlTmFtZSIsInBhcmFtZXRlcnMiLCIkc2VsZWN0IiwiZ2V0VmlldyIsImNvbnZlcnRlclR5cGUiLCJjYXJkcyIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJjYXJkT2JqZWN0IiwidXBkYXRlQ2FyZHMiLCJwYXJlbnRBcHBJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJiaW5kaW5nUGF0aCIsIm9EYXRhU3RhdGVJbmRpY2F0b3IiLCJnZXREYXRhU3RhdGVJbmRpY2F0b3IiLCJpc0ZpbHRlcmluZyIsInVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5IiwiYWRkRmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlckluZm8iLCJub3JtYWxpemVTZWFyY2hUZXJtIiwicGF5bG9hZCIsImdldFBheWxvYWQiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZmlsdGVyT25BY3RpdmUiLCJvcGVyYXRvciIsInZhbHVlMSIsIl90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudCIsIm1vZGlmaWVyIiwidGFibGVJZCIsInNsb3RDb2x1bW5zWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRTbG90Q29sdW1uIiwic2xvdFhNTCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwib1RlbXBsYXRlIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJub2RlTmFtZSIsInJlcGxhY2VXaXRoIiwicmVtb3ZlIiwicmVzdWx0WE1MIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm1vZGVscyIsImdldENvbnRyb2xsZXIiLCJnZXRPd25lckNvbXBvbmVudCIsImdldFByZXByb2Nlc3NvckNvbnRleHQiLCJ0YXJnZXRzIiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsIkV4Y2VsRm9ybWF0IiwiZ2V0RXhjZWxEYXRlZnJvbUpTRGF0ZSIsImdldEV4Y2VsRGF0ZVRpbWVmcm9tSlNEYXRlVGltZSIsImdldEV4Y2VsVGltZWZyb21KU1RpbWUiLCJfZ2V0VkhSZWxldmFudEZpZWxkcyIsInNNZXRhZGF0YVBhdGgiLCJzQmluZGluZ1BhdGgiLCJhRmllbGRzIiwib0RhdGFGaWVsZERhdGEiLCIka2luZCIsIm9WYWx1ZSIsImlJbmRleCIsImdldE5hdmlnYXRpb25QYXRoIiwiX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uIiwiYUNvbHVtbnMiLCJhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvciIsIm9Db2x1bW4iLCJzQWRkVmlzaWJsZUNvbHVtbk5hbWUiLCJzVmlzaWJsZUNvbHVtbk5hbWUiLCJiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0Iiwic0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IiLCJpIiwiaiIsInJlbW92ZUl0ZW0iLCJvUHJvcGVydHlJbmZvTmFtZSIsIm1Qcm9wZXJ0eUJhZyIsImRvUmVtb3ZlSXRlbSIsIm9Nb2RpZmllciIsInNEYXRhUHJvcGVydHkiLCJpbnNlcnRBZ2dyZWdhdGlvbiIsIl9zZXREcmFmdEluZGljYXRvclN0YXR1cyIsIl9nZXRNZXRhTW9kZWwiLCJfZ2V0R3JvdXBJZCIsInNSZXRyaWV2ZWRHcm91cElkIiwiX2luc2VydEFnZ3JlZ2F0aW9uIiwib1ZhbHVlSGVscCIsImFkZEl0ZW0iLCJwcm9wZXJ0eUluZm9OYW1lIiwic1RhYmxlSWQiLCJ3YXJuaW5nIiwic1BhdGgiLCJnZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyIiwib1RhYmxlQ29udGV4dCIsImdldEN1cnJlbnRQYWdlVmlldyIsImdldENvbXB1dGVkQ29sdW1uIiwiZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsInByb3BJbmZvIiwib1Byb3BlcnR5Q29udGV4dCIsImZuVGVtcGxhdGVGcmFnbWVudCIsIm9JblByb3BlcnR5SW5mbyIsIm9WaWV3IiwiYkRpc3BsYXlNb2RlIiwic1RhYmxlVHlwZUN1c3RvbURhdGEiLCJzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSIsImFsbCIsImFDdXN0b21EYXRhIiwib1RoaXMiLCJKU09OTW9kZWwiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJyZWFkT25seSIsInRhYmxlVHlwZSIsImlkIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImNvbGxlY3Rpb24iLCJjcmVhdGlvbk1vZGUiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsImJpbmRpbmdDb250ZXh0cyIsImVudGl0eVNldCIsInRoaXMiLCJ0YWJsZUNvbGxlY3Rpb24iLCJoYW5kbGVyUHJvdmlkZXIiLCJUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIiwiY29sbGVjdGlvbkVudGl0eSIsImNvbXB1dGVkQ29sdW1uWE1MIiwiZ2V0Q29sdW1uVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsImRlc3Ryb3kiLCJnZXRGaWx0ZXJEZWxlZ2F0ZSIsIkZpbHRlckJhckRlbGVnYXRlIiwib1BhcmVudENvbnRyb2wiLCJzUHJvcGVydHlJbmZvTmFtZSIsInJlcGxhY2UiLCJnZXRUeXBlTWFwIiwiZm9ybWF0R3JvdXBIZWFkZXIiLCJvYmoiLCJkYXRhQmFzZVR5cGUiLCJleHRlcm5hbEZvcm1hdCIsIlZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0V2l0aEJyYWNrZXRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbm5lY3RlZEZpZWxkcyxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnRUeXBlLFxuXHRGaWVsZEdyb3VwVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXh0ZW5kXCI7XG5pbXBvcnQgeyBpc0NvbnN0YW50IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jYXJkcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IEZpbHRlclJlc3RyaWN0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbHVtbkV4cG9ydFNldHRpbmdzLFxuXHRDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21CYXNlZFRhYmxlQ29sdW1uLFxuXHRUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q29ubmVjdGVkRmllbGRzRGF0YSwgZ2V0Q29ubmVjdGVkRmllbGRzU2VwYXJhdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9EYXRhRmllbGRIZWxwZXJcIjtcbmltcG9ydCBWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IERlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCBFeGNlbEZvcm1hdCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FeGNlbEZvcm1hdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1R5cGVGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJCYXJEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyRGVsZWdhdGVcIjtcbmltcG9ydCB7IGdldENvbHVtblRlbXBsYXRlLCBnZXRDb21wdXRlZENvbHVtbiwgZ2V0U2xvdENvbHVtbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL01kY1RhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZVwiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgTGlzdFJlcG9ydENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBKc0NvbnRyb2xUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvLCBkZWZhdWx0IGFzIFRhYmxlLCBWaXN1YWxTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIHY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBRdWlja0ZpbHRlclNlbGVjdG9yIGZyb20gXCIuLi9RdWlja0ZpbHRlclNlbGVjdG9yXCI7XG5pbXBvcnQgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuY29uc3QgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SID0gXCIvc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiO1xuY29uc3QgU0VBUkNIX0hBU19CRUVOX0ZJUkVEID0gXCJzZWFyY2hGaXJlZFwiO1xuY29uc3QgQ09MVU1OX0hBU19CRUVOX0FEREVEID0gXCJjb2x1bW5BZGRlZFwiO1xuY29uc3QgUFJFVklPVVNfU09SVEVSUyA9IFwicHJldmlvdXNTb3J0ZXJzXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGF5Rm9yKGRlbGF5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCBkZWxheSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3Igc2FwLnVpLm1kYy5UYWJsZS5cbiAqIDxoMz48Yj5Ob3RlOjwvYj48L2gzPlxuICogVGhlIGNsYXNzIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIEFQSSBhbmQgdGhlIGJlaGF2aW9yIGFyZSBub3QgZmluYWxpemVkLiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCBmb3IgcHJvZHVjdGl2ZSB1c2FnZS5cbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuNjkuMFxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBUYWJsZURlbGVnYXRlQmFzZSwge1xuXHRhcGlWZXJzaW9uOiAyLFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiBhIEZpZWxkR3JvdXAgY29sdW1uLlxuXHQgKiBUaGUgd2lkdGggb2YgdGhlIEZpZWxkR3JvdXAgaXMgdGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgcHJvcGVydHkgY29udGFpbmVkIGluIHRoZSBGaWVsZEdyb3VwIChpbmNsdWRpbmcgdGhlIGxhYmVsIGlmIHNob3dEYXRhRmllbGRzTGFiZWwgaXMgdHJ1ZSlcblx0ICogVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGN1bGF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbi5taW5XaWR0aCBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZCBieSB0aGUgTURDdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mbyBDdXJyZW50IHByb3BlcnR5SW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0aWVzXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcblx0ICovXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwOiBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyxcblx0XHRwcm9wZXJ0eUluZm9zOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW11cblx0KSB7XG5cdFx0aWYgKHByb3BlcnR5SW5mby5rZXkuaW5kZXhPZihcIkRhdGFGaWVsZEZvckFubm90YXRpb246OkZpZWxkR3JvdXA6OlwiKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gdGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoKGNvbCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sLmdldFByb3BlcnR5S2V5KCkgPT09IHByb3BlcnR5SW5mby5rZXk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHNob3dEYXRhRmllbGRzTGFiZWwgPSBjb2x1bW4gPyBjb2x1bW4uZGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIikgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHByb3BlcnR5SW5mby5hbm5vdGF0aW9uUGF0aCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YURhdGEgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMuY29udmVydGVkVHlwZXM7XG5cdFx0XHRjb25zdCBvRGF0YUZpZWxkID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3Qgb0ZpZWxkR3JvdXAgPSBvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0Y29uc3QgYUZpZWxkV2lkdGg6IG51bWJlcltdID0gW107XG5cdFx0XHRvRmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKG9EYXRhOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdGxldCBvRGF0YUZpZWxkV2lkdGg6IHsgbGFiZWxXaWR0aDogbnVtYmVyOyBwcm9wZXJ0eVdpZHRoOiBudW1iZXIgfTtcblx0XHRcdFx0c3dpdGNoIChvRGF0YS4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlPixcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBDb25uZWN0ZWRGaWVsZHMgY29sdW1uLlxuXHQgKiBUaGUgd2lkdGggb2YgdGhlIENvbm5lY3RlZEZpZWxkcyBpcyB0aGUgc3VtIG9mIHRoZSB3aWR0aCBvZiB0aGUgMiBwcm9wZXJ0aWVzIGNvbnRhaW5lZCBpbiB0aGUgQ29ubmVjdGVkRmllbGRzXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yQ29ubmVjdGVkRmllbGQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLFxuXHRcdHByb3BlcnR5SW5mb3M6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXVxuXHQpIHtcblx0XHRpZiAocHJvcGVydHlJbmZvLmtleS5pbmRleE9mKFwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjo6Q29ubmVjdGVkRmllbGRzOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KHByb3BlcnR5SW5mby5hbm5vdGF0aW9uUGF0aCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YURhdGEgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMuY29udmVydGVkVHlwZXM7XG5cdFx0XHRjb25zdCBkYXRhRmllbGQgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb247XG5cdFx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQgYXMgQ29ubmVjdGVkRmllbGRzO1xuXHRcdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzU2VwYXJhdG9yID0gZ2V0Q29ubmVjdGVkRmllbGRzU2VwYXJhdG9yKGNvbm5lY3RlZEZpZWxkcyk7XG5cdFx0XHRjb25zdCBmaWVsZFdpZHRoczogbnVtYmVyW10gPSBbXTtcblx0XHRcdGdldENvbm5lY3RlZEZpZWxkc0RhdGEoY29ubmVjdGVkRmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkKFxuXHRcdFx0XHRcdGRhdGEgYXMgRGF0YUZpZWxkLFxuXHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZT5cblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZFdpZHRoKSB7XG5cdFx0XHRcdFx0ZmllbGRXaWR0aHMucHVzaChkYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzZXBhcmF0b3JXaWR0aCA9IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoY29ubmVjdGVkRmllbGRzU2VwYXJhdG9yKTtcblx0XHRcdGZpZWxkV2lkdGhzLnB1c2goc2VwYXJhdG9yV2lkdGgpO1xuXHRcdFx0Y29uc3QgY29sdW1uV2lkdGggPSBmaWVsZFdpZHRocy5yZWR1Y2UoZnVuY3Rpb24gKGFjYzogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG5cdFx0XHRcdHJldHVybiBhY2MgKyB2YWx1ZTtcblx0XHRcdH0sIDApO1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgb2JqZWN0LCB7XG5cdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHR2ZXJ0aWNhbEFycmFuZ2VtZW50OiB0cnVlLFxuXHRcdFx0XHRcdG1pbldpZHRoOiBNYXRoLmNlaWwoY29sdW1uV2lkdGgpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpZiAoIXByb3BlcnR5LnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0aWYgKHByb3BlcnR5LmFubm90YXRpb25QYXRoICYmIG1ldGFNb2RlbCkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5LmFubm90YXRpb25QYXRofUBgKTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZCAmJiBkYXRhRmllbGRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSkge1xuXHRcdFx0XHRcdHByb3BlcnR5LnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyB8fCB7fSwge1xuXHRcdFx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdFx0XHRnYXA6IHRhYmxlQVBJLmdldFByb3BlcnR5KFwicmVhZE9ubHlcIikgPyAwIDogNFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSkgYXMgRW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+KSA6IG51bGw7XG5cdFx0Ly8gdXBkYXRlIGdhcCBmb3IgcHJvcGVydGllcyB3aXRoIHN0cmluZyB1bml0XG5cdFx0Y29uc3QgdGV4dCA9IHVuaXRUZXh0IHx8IHRpbWV6b25lVGV4dDtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdGdhcDogTWF0aC5jZWlsKFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgodGV4dCkpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodW5pdCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdC8vIEZvciBwcm9wZXJ0aWVzIHdpdGggdW5pdCwgYSBnYXAgbmVlZHMgdG8gYmUgYWRkZWQgdG8gcHJvcGVybHkgcmVuZGVyIHRoZSBjb2x1bW4gd2lkdGggb24gZWRpdCBtb2RlXG5cdFx0XHRcdFx0Z2FwOiBvVGFibGVBUEkgJiYgb1RhYmxlQVBJLmdldFJlYWRPbmx5KCkgPyAwIDogNlxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdF9jb21wdXRlTGFiZWw6IGZ1bmN0aW9uIChwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbywgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSkge1xuXHRcdGlmIChwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc1dpdGhTYW1lTGFiZWwgPSBsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF07XG5cdFx0XHQvLyBUaGlzIGNvbXB1dGF0aW9uIGlzIG9ubHkgZm9yIGR1cGxpY2F0ZSBsYWJlbHMgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuXHRcdFx0Ly8gRXhjbHVkZSB0ZXh0IG5hdmlnYXRpb24gcHJvcGVydGllcyByZWZlcmVuY2VkIGFzIHRleHQgb24gYSBwcm9wZXJ0eSBhbm5vdGF0ZWQgd2l0aCB0ZXh0IGFycmFuZ2VtZW50IHNldCBhcyBUZXh0T25seS5cblx0XHRcdC8vIEV4Y2x1ZGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGNyZWF0ZWQgb25seSBmb3IgZmlsdGVyaW5nIHB1cnBvc2VzIHdpdGggYSB0ZXh0IGFycmFuZ2VtZW50IHNldCB0byBUZXh0T25seS5cblx0XHRcdGNvbnN0IGlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ID0gcHJvcGVydGllc1dpdGhTYW1lTGFiZWw/LnNvbWUoXG5cdFx0XHRcdChwcm9wKSA9PiBwcm9wLnRleHQgPT09IHByb3BlcnR5LnBhdGggJiYgcHJvcD8ubW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiXG5cdFx0XHQpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbD8ubGVuZ3RoID4gMSAmJlxuXHRcdFx0XHRwcm9wZXJ0eS5wYXRoPy5pbmNsdWRlcyhcIi9cIikgJiZcblx0XHRcdFx0cHJvcGVydHkuYWRkaXRpb25hbExhYmVscyAmJlxuXHRcdFx0XHQhaXNQcm9wZXJ0eVVzZWRBc1RleHRPbmx5UHJvcGVydHkgJiZcblx0XHRcdFx0IShwcm9wZXJ0eT8ubW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiICYmIHByb3BlcnR5LmZpbHRlcmFibGUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvcGVydHkubGFiZWwgPSBwcm9wZXJ0eS5sYWJlbCArIFwiIChcIiArIHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMuam9pbihcIiAvIFwiKSArIFwiKVwiO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHM7XG5cdFx0fVxuXHR9LFxuXHQvL1VwZGF0ZSBWaXN1YWxTZXR0aW5nIGZvciBjb2x1bW5XaWR0aCBjYWxjdWxhdGlvbiBhbmQgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRfdXBkYXRlUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0aWVzOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pIHtcblx0XHRjb25zdCBsYWJlbE1hcDogeyBbbGFiZWw6IHN0cmluZ106IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSB9ID0ge307XG5cdFx0Ly8gQ2hlY2sgYXZhaWxhYmxlIHAxM24gbW9kZXNcblx0XHRjb25zdCBwMTNuTW9kZSA9IHRhYmxlLmdldFAxM25Nb2RlKCk7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zICYmIHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRcdC8vIE9ubHkgZm9yIG5vbi1jb21wbGV4IHByb3BlcnRpZXNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChwMTNuTW9kZT8uaW5jbHVkZXMoXCJTb3J0XCIpICYmIHByb3BlcnR5LnNvcnRhYmxlKSB8fFxuXHRcdFx0XHRcdChwMTNuTW9kZT8uaW5jbHVkZXMoXCJGaWx0ZXJcIikgJiYgcHJvcGVydHkuZmlsdGVyYWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiR3JvdXBcIikgJiYgcHJvcGVydHkuZ3JvdXBhYmxlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF0gPVxuXHRcdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdICE9PSB1bmRlZmluZWQgPyBsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF0uY29uY2F0KFtwcm9wZXJ0eV0pIDogW3Byb3BlcnR5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAodGFibGUsIHByb3BlcnR5LCBwcm9wZXJ0aWVzKTtcblx0XHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckNvbm5lY3RlZEZpZWxkKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdGdyb3VwTGFiZWw6IFwiXCIsXG5cdFx0XHRncm91cDogXCJcIixcblx0XHRcdGxhYmVsOiBcIlwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZVxuXHRcdH0gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdH0sXG5cdF9nZXRUYWJsZUFQSSh0YWJsZTogVGFibGUpOiBUYWJsZUFQSSB7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZCA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghdGFibGVBUEkpIHtcblx0XHRcdHRhYmxlQVBJID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZS5nZXRJZCgpICsgXCI6OlRhYmxlXCIpIGFzIFRhYmxlQVBJO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFibGVBUEk7XG5cdH0sXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBUYWJsZUNvbHVtbltdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRyZXR1cm4gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucztcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgZm9yIHRoZSBnaXZlbiBzYXAudWkubWRjLlRhYmxlIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBvZiB0aGUgdGFibGUgaW5zdGFuY2Vcblx0ICovXG5cdGZldGNoRXhwb3J0Q2FwYWJpbGl0aWVzOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IFByb21pc2U8eyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9PiB7XG5cdFx0Y29uc3Qgb0NhcGFiaWxpdGllczogeyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9ID0geyBYTFNYOiB7fSB9O1xuXHRcdGxldCBvTW9kZWwhOiBPRGF0YU1vZGVsO1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbChvVGFibGUpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAobW9kZWw6IE1vZGVsKSB7XG5cdFx0XHRcdG9Nb2RlbCA9IG1vZGVsIGFzIE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TdXBwb3J0ZWRGb3JtYXRzXCIpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhU3VwcG9ydGVkRm9ybWF0czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgYUxvd2VyRm9ybWF0cyA9IChhU3VwcG9ydGVkRm9ybWF0cyB8fCBbXSkubWFwKChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChhTG93ZXJGb3JtYXRzLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vcGRmXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lckBjb20uc2FwLnZvY2FidWxhcmllcy5QREYudjEuRmVhdHVyZXNcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0Fubm90YXRpb246IHVua25vd24pIHtcblx0XHRcdFx0aWYgKG9Bbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1tcIlBERlwiXSA9IE9iamVjdC5hc3NpZ24oe30sIG9Bbm5vdGF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcHV0aW5nIGV4cG9ydCBjYXBhYmlsaXRpZXM6ICR7ZXJyfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIG9DYXBhYmlsaXRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblx0X2ZldGNoUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoXG5cdFx0bWV0YU1vZGVsOiBNZXRhTW9kZWwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIHtcblx0XHRjb25zdCBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCA9IGNvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRvRGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpIGFzIENvbnRleHQsXG5cdFx0XHRpc0NvbXBsZXhUeXBlID0gY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZT8uaW5kZXhPZihcIkVkbS5cIikgIT09IDAsXG5cdFx0XHRiRmlsdGVyYWJsZSA9IENvbW1vbkhlbHBlci5pc1Byb3BlcnR5RmlsdGVyYWJsZShvTmF2aWdhdGlvbkNvbnRleHQsIG9EYXRhRmllbGQpLFxuXHRcdFx0YklzQW5hbHl0aWNhbFRhYmxlID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwiZW5hYmxlQW5hbHl0aWNzXCIpID09PSBcInRydWVcIixcblx0XHRcdGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsID8/IFwiXCIsIGFwcENvbXBvbmVudCA/PyB0YWJsZSksXG5cdFx0XHR0b29sdGlwID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLnRvb2x0aXAgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHR5cGVDb25maWcgPSB0aGlzLl9nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm8sIGlzQ29tcGxleFR5cGUpLFxuXHRcdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRuYW1lOiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogc0Fic29sdXRlTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGNvbHVtbkluZm8uZ3JvdXBMYWJlbCxcblx0XHRcdFx0Z3JvdXA6IGNvbHVtbkluZm8uZ3JvdXAsXG5cdFx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdFx0dG9vbHRpcDogdG9vbHRpcCxcblx0XHRcdFx0ZGF0YVR5cGU6IHR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOlxuXHRcdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJcblx0XHRcdFx0XHRcdD8geyBzdHlsZTogXCJtZWRpdW0vc2hvcnRcIiB9IC8qIFRoaXMgY29uZGl0aW9uIGRvZXNuJ3QgaGF2ZSBhbnkgaW1wYWN0LCB0byBiZSByZXZpZXdlZCAqL1xuXHRcdFx0XHRcdFx0OiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNvbnN0cmFpbnRzLFxuXHRcdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIiAmJiAhaXNDb21wbGV4VHlwZSxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IHRoaXMuX3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzKGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsIGNvbHVtbkluZm8pLFxuXHRcdFx0XHR1bml0OiBjb2x1bW5JbmZvLnVuaXQsXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aFxuXHRcdFx0fTtcblx0XHRpZiAocHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzPy50ZW1wbGF0ZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmNsaXBib2FyZFNldHRpbmdzID0geyB0ZW1wbGF0ZTogcHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlIH07XG5cdFx0XHQvLyBpZiBJIHNldCB0aGlzIGNsaXBCb2FyZFNldHRpbmdzIHRoZSBjb3B5IHByb3ZpZGVyIGV4dHJhY3QgdGhlIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgaHRtbCBwcm9wZXJ0eSBhbmQgaXQgaXMgcHJvcGVybHkgY29waWVkIGluIGV4Y2VsXG5cdFx0XHQvLyBidXQgd2hlbiB3ZSBjb3B5IGVsc2V3aGVyZSB3ZSBvbmx5IGdldCB0aGUgcmF3IGRhdGEgYW5kIG5vdCB0aGUgdGVtcGxhdGVkIGRhdGFcblx0XHR9XG5cdFx0Ly8gU2V0IHZpc3VhbFNldHRpbmdzIG9ubHkgaWYgaXQgZXhpc3RzXG5cdFx0aWYgKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MgJiYgT2JqZWN0LmtleXMoY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncztcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXHRcdC8vIE1EQyBleHBlY3RzICAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblx0XHRcdC8vZ2V0IHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIGZvciB0aGUgY29sdW1uXG5cdFx0XHRjb25zdCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0Q29udGV4dChjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoKSxcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwibWV0YVBhdGhcIikhKVxuXHRcdFx0KTtcblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHQvLyBUT0RPIHdpdGggdGhlIG5ldyBjb21wbGV4IHByb3BlcnR5IGluZm8sIGEgbG90IG9mIFwiRGVzY3JpcHRpb25cIiBmaWVsZHMgYXJlIGFkZGVkIGFzIGZpbHRlci9zb3J0IGZpZWxkc1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gY29sdW1uSW5mby5zb3J0YWJsZTtcblx0XHRcdGlmIChiSXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvKTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID1cblx0XHRcdFx0Y29sdW1uSW5mby5maWx0ZXJhYmxlICE9PSBmYWxzZSAmJlxuXHRcdFx0XHQhIWJGaWx0ZXJhYmxlICYmXG5cdFx0XHRcdHRoaXMuX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShjb2x1bW5JbmZvLCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRcdHByb3BlcnR5SW5mby5pc0tleSA9IGNvbHVtbkluZm8uaXNLZXk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZ3JvdXBhYmxlID0gY29sdW1uSW5mby5pc0dyb3VwYWJsZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHR0aGlzLl9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbywgdGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5SW5mby5pc0tleSkge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0ge1xuXHRcdFx0XHRcdC8vIE1EQyBuZWVkcyB0byBmaXggdGhpcywgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZvciBhIG5vbiBBbmFseXRpY2FsIFRhYmxlXG5cdFx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY29sdW1uSW5mby5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscykge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uYWRkaXRpb25hbExhYmVscyA9IGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscy5tYXAoKGFkZGl0aW9uYWxMYWJlbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldExvY2FsaXplZFRleHQoYWRkaXRpb25hbExhYmVsLCBhcHBDb21wb25lbnQgfHwgdGFibGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIGV4cG9ydCBzZXR0aW5ncyB0byBiZSBleHRlbmRlZFxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGV4dGVuZGVkIGV4cG9ydCBzZXR0aW5nc1xuXHQgKi9cblx0X3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzOiBmdW5jdGlvbiAoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5cblx0KTogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCB1bmRlZmluZWQgfCBudWxsIHtcblx0XHRjb25zdCBleHBvcnRGb3JtYXQgPSB0aGlzLl9nZXRFeHBvcnRGb3JtYXQoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUpO1xuXHRcdGlmIChleHBvcnRGb3JtYXQgJiYgZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLmZvcm1hdCA9IGV4cG9ydEZvcm1hdDtcblx0XHR9XG5cdFx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblx0X3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pIHtcblx0XHRpZiAoY29sdW1uSW5mby5hZ2dyZWdhdGFibGUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5hZ2dyZWdhdGFibGUgPSBjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uZXh0ZW5zaW9uKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0gY29sdW1uSW5mby5leHRlbnNpb247XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKGNvbHVtbkluZm86IENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSkge1xuXHRcdGNvbnN0IGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsLCB0YWJsZSk7IC8vIFRvZG86IFRvIGJlIHJlbW92ZWQgb25jZSBNREMgcHJvdmlkZXMgdHJhbnNsYXRpb24gc3VwcG9ydFxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRsYWJlbDogbGFiZWwudG9TdHJpbmcoKSxcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdGNsaXBib2FyZFNldHRpbmdzOiBjb2x1bW5JbmZvLmNsaXBib2FyZFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcImNsaXBib2FyZFNldHRpbmdzXCJdXG5cdFx0fTtcblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICE9PSB1bmRlZmluZWQgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblx0XHQvLyBNREMgZXhwZWN0cyAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5uYW1lO1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yOiBmdW5jdGlvbiAob0NvbHVtbkluZm86IFRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvcikgfHxcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoKVxuXHRcdCk7XG5cdH0sXG5cdF91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsOiBmdW5jdGlvbiAoX29UYWJsZTogVGFibGUsIF9vQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBfb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IF9vVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChhVmlzaWJsZUNvbHVtbnMgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGZvciAoY29uc3QgaW5kZXggaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IoX29Db2x1bW5JbmZvKSAmJlxuXHRcdFx0XHRcdF9vQ29sdW1uSW5mby5uYW1lID09PSBhVmlzaWJsZUNvbHVtbnNbaW5kZXhdLmdldFByb3BlcnR5S2V5KClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aWYgKG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIF9vQ29sdW1uSW5mby5uYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2ZldGNoUHJvcGVydGllc0ZvckVudGl0eTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdC8vIHdoZW4gZmV0Y2hpbmcgcHJvcGVydGllcywgdGhpcyBiaW5kaW5nIGNvbnRleHQgaXMgbmVlZGVkIC0gc28gbGV0cyBjcmVhdGUgaXQgb25seSBvbmNlIGFuZCB1c2UgaWYgZm9yIGFsbCBwcm9wZXJ0aWVzL2RhdGEtZmllbGRzL2xpbmUtaXRlbXNcblx0XHRsZXQgZmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdFx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlUeXBlUGF0aCkpO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKFxuXHRcdFx0ZGF0YU1vZGVsIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuXHRcdCkuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmdldENvbHVtbnNGb3IodGFibGUpKVxuXHRcdFx0LnRoZW4oKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pID0+IHtcblx0XHRcdFx0Ly8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZG9lcyBub3Qgd29yayB2aWEgJ2VudGl0eVNldC8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YSdcblx0XHRcdFx0aWYgKGNvbHVtbnMpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHlJbmZvO1xuXHRcdFx0XHRcdGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uSW5mbykgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbCh0YWJsZSwgY29sdW1uSW5mbyk7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGNvbHVtbkluZm8udHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoUHJvcGVydHlJbmZvKG1ldGFNb2RlbCwgY29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eUluZm8gJiYgIW5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKChwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBEZWxlZ2F0ZVV0aWwuaXNNdWx0aVZhbHVlKHByb3BlcnR5SW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pID8gLTEgOiAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkNvbXB1dGVkXCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIlNsb3RcIjpcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRlZmF1bHRcIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHN3aXRjaCBjYXNlICR7Y29sdW1uSW5mby50eXBlfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eUluZm8gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMgPSB0aGlzLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGUsIGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKGZldGNoZWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdGlmIChhcHBDb21wb25lbnQuZGVsYXlUaW1lID4gMCkge1xuXHRcdFx0Ly8gRmlyc3QgY2FsbCBsZXQncyBhZGQgYSBzbWFsbCBkZWxheSB0byBlbnN1cmUgdGhpcyBkb2Vzbid0IGJsb2NrIHRoZSBpbml0aWFsIHZpZXcgY3JlYXRpb25cblx0XHRcdGF3YWl0IGRlbGF5Rm9yKGFwcENvbXBvbmVudC5kZWxheVRpbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXHRzZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHJpbmcoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRcdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3M7XG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0ZpbHRlclJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblx0XHRjb25zdCBmaWx0ZXJBc3NvY2lhdGlvbiA9IHRhYmxlLmdldEZpbHRlcigpO1xuXHRcdGNvbnN0IGhhc0ZpbHRlck9yU2VhcmNoID0gdGFibGVGaWx0ZXJJbmZvLnNlYXJjaCB8fCB0YWJsZUZpbHRlckluZm8uZmlsdGVycz8ubGVuZ3RoO1xuXHRcdGlmIChmaWx0ZXJBc3NvY2lhdGlvbiAmJiAhL0Jhc2ljU2VhcmNoJC8udGVzdChmaWx0ZXJBc3NvY2lhdGlvbikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGEgRmlsdGVyQmFyIGlzIGFzc29jaWF0ZWQgdG8gdGhlIFRhYmxlIChiYXNpYyBzZWFyY2ggb24gdG9vbEJhciBpcyBleGNsdWRlZClcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHQvLyBjaGVjayBpZiB0YWJsZSBoYXMgYW55IEZpbHRlcmJhciBmaWx0ZXJzIG9yIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0YWJsZSBoYXMgYW55IHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT0RBVEFcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXNcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKS5nZXRWaWV3RGF0YSgpLmxpdmVNb2RlKSB7XG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRmlsdGVyUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPSB0YWJsZUFQSS5nZXROb0RhdGFNZXNzYWdlTW9kZSgpO1xuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBkYXRhUmVxdWVzdGVkIGV2ZW50IGZvciB0aGUgdGFibGUgYmluZGluZyB0byBzZXQgdXAgdGFibGUgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSBvVGFibGUgVGhlIE1EQyB0YWJsZSBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGZvciB0aGUgdGFibGVcblx0ICovXG5cdGhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZXF1ZXN0ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkQXR0YWNoZWRcIik7XG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiAhYkRhdGFSZXF1ZXN0ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZCgoKSA9PiB7XG5cdFx0XHRcdGlmICghb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlcXVlc3RlZFRpbWVvdXRTZXRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRUaW1lb3V0U2V0XCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZSA/IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpIDogbnVsbDtcblx0XHRcdFx0XHRcdGlmIChvVGFibGVBUEkpIHtcblx0XHRcdFx0XHRcdFx0b1RhYmxlQVBJLnRhYmxlRGVmYXVsdHNQcm9taXNlID0gKG9UYWJsZUFQSS5nZXRUYWJsZURlZmF1bHRzKG9UYWJsZSkgPz8gUHJvbWlzZS5yZXNvbHZlKHt9KSkgYXMgUHJvbWlzZTxvYmplY3Q+O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRBdHRhY2hlZFwiLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cdGhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRiRGF0YVJlY2VpdmVkQXR0YWNoZWQgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIik7XG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiAhYkRhdGFSZWNlaXZlZEF0dGFjaGVkKSB7XG5cdFx0XHRvQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoKCkgPT4ge1xuXHRcdFx0XHQvLyBhcyB0aGUgZGF0YVJlY2VpdmVkIGV2ZW50IGlzIGZpcmVkIG11bHRpcGxlIHRpbWVzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBldmVudCBpcyBvbmx5IGhhbmRsZWQgb25jZVxuXHRcdFx0XHRpZiAoIW9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIsIHRydWUpO1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIHRoZSBzZWxlY3RlZCBjb250ZXh0cyB0byB0cmlnZ2VyIHJlLWNhbGN1bGF0aW9uIG9mIGVuYWJsZWQgc3RhdGUgb2YgYWN0aW9ucy5cblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIGFTZWxlY3RlZENvbnRleHRzKTtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSShvVGFibGUpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uXG5cdFx0XHRcdFx0XHREZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdGFibGVEZWZhdWx0RGF0YSA9IGF3YWl0IHRhYmxlQVBJLnRhYmxlRGVmYXVsdHNQcm9taXNlPy5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdFx0XHRhd2FpdCB0YWJsZUFQSS5zZXRVcEVtcHR5Um93cyhvVGFibGUsIGZhbHNlLCB0YWJsZURlZmF1bHREYXRhKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKG9UYWJsZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogU2V0IHRoZSBvcHRpbWlzdGljIGJhdGNoIHByb21pc2UgZm9yIHRoZSBlbmFibGVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIFRhYmxlQVBJXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWw6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKCk7XG5cdFx0aWYgKG1vZGVsKSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZShuZXcgUHJvbWlzZUtlZXBlcjxib29sZWFuPigpKTtcblx0XHRcdHRoaXMuc2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwoY29udHJvbGxlciwgbW9kZWwsIHRhYmxlQVBJKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIG9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpZiBhdmFpbGFibGUuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblx0ZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZTogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSA9XG5cdFx0XHR0YWJsZSAmJiBUYWJsZVV0aWxzLmlzRmlsdGVyRWxpZ2libGVGb3JPcHRpbWlzdGljQmF0Y2godGFibGUsIGNvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXIpO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdHRhYmxlQVBJLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKCk/LnJlc29sdmUoIWZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlKTtcblx0fSxcblx0LyoqXG5cdCAqIFNldHRlciBmb3IgdGhlIG9wdGltaXN0aWMgYmF0Y2ggZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIGRhdGFNb2RlbCBUaGUgT0RhdGEgTW9kZWxcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKiBAc2VlIHtzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbCNzZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyfSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGRhdGFNb2RlbDogT0RhdGFNb2RlbCwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpLmlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk7XG5cdFx0aWYgKGRhdGFNb2RlbC5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyKCkgPT09IG51bGwgJiYgIXRhYmxlQVBJLmlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQoKSAmJiBpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkKSB7XG5cdFx0XHRjb25zdCBvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciA9IHRhYmxlQVBJLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKCk7XG5cdFx0XHRkYXRhTW9kZWwuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcihmdW5jdGlvbiAoKTogUHJvbWlzZTxib29sZWFuPiB8IHVuZGVmaW5lZCB7XG5cdFx0XHRcdHJldHVybiBvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlcj8ucHJvbWlzZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdHRhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24ob1RhYmxlKTtcblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnJlYmluZC5hcHBseSh0aGlzLCBbb1RhYmxlLCBvQmluZGluZ0luZm9dKTtcblx0XHRcdFRhYmxlVXRpbHMub25UYWJsZUJvdW5kKG9UYWJsZSk7XG5cdFx0XHRyZXR1cm4gVGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHQudGhlbigodGFibGU6IFRhYmxlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVUYWJsZURhdGFSZXF1ZXN0ZWQodGFibGUsIHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQodGFibGUsIHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuXHQgKi9cblx0ZmV0Y2hQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbCh0YWJsZSlcblx0XHRcdC50aGVuKGFzeW5jIChtb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+ID0+IHtcblx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRhYmxlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwiZW50aXR5VHlwZVwiKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChwcm9wZXJ0aWVzKSA9PiB7XG5cdFx0XHRcdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblx0cHJlSW5pdDogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiAoVGFibGVEZWxlZ2F0ZUJhc2UucHJlSW5pdCBhcyAodGFibGU6IFRhYmxlKSA9PiBQcm9taXNlPHZvaWQ+KS5hcHBseSh0aGlzLCBbdGFibGVdKS50aGVuKCgpID0+IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgb24gdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFNldCB0aGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgZmFzdENyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChmYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgdW5rbm93biBhcyBDb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXIgPSB0YWJsZS5nZXRRdWlja0ZpbHRlcigpIGFzIFF1aWNrRmlsdGVyU2VsZWN0b3IgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJID0gbmV3IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSShiaW5kaW5nSW5mbyk7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCB0cnVlKTtcblx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvXSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5zZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0YWJsZUFQST8uZmlyZUV2ZW50KFwiYmVmb3JlUmViaW5kVGFibGVcIiwge1xuXHRcdFx0XHRjb2xsZWN0aW9uQmluZGluZ0luZm86IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSxcblx0XHRcdFx0cXVpY2tGaWx0ZXJLZXk6IHF1aWNrRmlsdGVyPy5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGF0dGFjaGVkRXZlbnRzID0gY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJLmdldEF0dGFjaGVkRXZlbnRzKCk7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaXQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgZm9yIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBUaGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaXMgc2V0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGNvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRpZiAodGFibGUuZ2V0Q3JlYXRpb25Sb3coKT8uZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gbnVsbCAmJiBiaW5kaW5nSW5mby5wYXRoICYmIGNvbnRleHQpIHtcblx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0XHRcdHRhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0YmluZGluZ0luZm8ucGF0aCxcblx0XHRcdFx0XHRjb250ZXh0IGFzIHY0Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwsXG5cdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQVBJLnNldEF0dGFjaEV2ZW50cyhhdHRhY2hlZEV2ZW50cyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgdXBkYXRpbmcgdGhlIGJpbmRpbmcgaW5mb1wiLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9LFxuXHRfaGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlcltdIHwgdW5kZWZpbmVkID0gYmluZGluZ0luZm8uc29ydGVyO1xuXHRcdGNvbnN0IG5ld1NvcnRlcnNUb0JlQXBwbGllZDogU29ydGVyW10gPSBbXTtcblx0XHRpZiAoc29ydGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRcdGNvbnN0IHRhYmxlUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldENhY2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRcdGZvciAoY29uc3Qgc29ydGVyIG9mIHNvcnRlcnMpIHtcblx0XHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0eSA9IHRhYmxlUHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LnBhdGggPT09IHNvcnRlci5nZXRQYXRoKCkpO1xuXHRcdFx0XHRpZiAodGFibGVQcm9wZXJ0eT8udW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IHRhYmxlUHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LmtleSA9PT0gdGFibGVQcm9wZXJ0eT8udW5pdCk7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFNvcnRlckF2YWlsYWJsZSA9IHVuaXRQcm9wZXJ0eT8ucGF0aCAmJiBzb3J0ZXJzLnNvbWUoKHNvcnQpID0+IHNvcnQuZ2V0UGF0aCgpID09PSB1bml0UHJvcGVydHkucGF0aCk7XG5cdFx0XHRcdFx0aWYgKCF1bml0U29ydGVyQXZhaWxhYmxlICYmIHVuaXRQcm9wZXJ0eT8uc29ydGFibGUgIT09IGZhbHNlICYmIHVuaXRQcm9wZXJ0eT8ucGF0aCkge1xuXHRcdFx0XHRcdFx0bmV3U29ydGVyc1RvQmVBcHBsaWVkLnB1c2gobmV3IFNvcnRlcih1bml0UHJvcGVydHkucGF0aCwgZmFsc2UpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bmV3U29ydGVyc1RvQmVBcHBsaWVkLnB1c2goc29ydGVyKTtcblx0XHRcdH1cblx0XHRcdGJpbmRpbmdJbmZvLnNvcnRlciA9IG5ld1NvcnRlcnNUb0JlQXBwbGllZDtcblx0XHR9XG5cdH0sXG5cdF9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXHRfaGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRpZiAoY29udHJvbGxlcj8ucmVjb21tZW5kYXRpb25zLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZURlZiA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHQuZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGVEZWYuYW5ub3RhdGlvbi5lbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzICYmIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5sZW5ndGggPiAwICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlbGVjdD8uY29uY2F0KFwiLFwiLCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMuam9pbigpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKi9cblx0X3VwZGF0ZUF2YWlsYWJsZUNhcmRzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWYgKHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCBjYXJkczogV3JhcHBlZENhcmRbXSA9IFtdO1xuXHRcdFx0YXdhaXQgdGFibGVBUEkuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyID0gbmV3IENvbGxhYm9yYXRpb25NYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSBhcHBDb21wb25lbnQuZ2V0SWQoKTtcblx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKClcblx0XHRcdFx0LmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCwgdGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCkuZ2V0SWQoKSk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFRoZSBob29rIGltcGxlbWVudGVkIGJ5IE1EQyB0aGF0IHdlIGNhbiBvdmVycmlkZS5cblx0ICogVGhpcyBhbGxvd3MgdXMgdG8gZGVmaW5lIHByb3BlcnRpZXMgdG8gYmUgcmVxdWVzdGVkIGluIHRoZSBNREMgdGFibGUgKE1haW4gY2FzZSBpcyBmb3IgdGhlIGFuYWx5dGljYWwgdGFibGUpLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lIHRvIGJlIHJlcXVlc3RlZC5cblx0ICovXG5cdGdldEluUmVzdWx0UHJvcGVydHlLZXlzOiBmdW5jdGlvbiAodGFibGU6IE1EQ1RhYmxlKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0Y29uc3QgYWxsS2tleXNSZXF1ZXN0ZWQgPSB0aGlzLmNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCh0YWJsZUFQSSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdC8vIGlmIGEgcm93cHJlc3MgaXMgb3ZlcnJpZGRlbiwgd2UgIHNob3VsZCBlbmFibGUgdGhlIG5hdmlnYXRpb24gYXQgdGhlIG5vZGUgbGV2ZWxcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNOb2RlTGV2ZWxOYXZpZ2FibGVcIiwgdGFibGVBUEkub3ZlcnJpZGVSb3dQcmVzcyA/IHRydWUgOiBhbGxLa2V5c1JlcXVlc3RlZCk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QpXG5cdFx0XHRcdFx0Ly8gZm9yIGFuYWx5dGljIHRhYmxlcyB3aXRoIGFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgd2Ugc2hvdWxkIG5vdCByZXF1ZXN0IHRoZSBzZW1hbnRpY0tleSBleHBlY3RlZCB3aGVuIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQgLT4gIGl0IHdpbGwgcGVybWl0cyB0byBuYXZpZ2F0ZSBmcm9tIGEgbm9kZSBsZXZlbCB3aGVuIHNlbWFudGljS2V5IGFyZSBlbmFibGVkXG5cdFx0XHRcdFx0Ly8gcmVzdHJpY3Rpb24gYXJlIGFsc28gZXhjbHVkZWQgYXMgd2UgY2Fubm90IGRlc3Rpbmd1aXNoIGJldHdlZW4gYSBub2RlIGFuZCBhIGFnZ3JlZ2F0aW9uIGxldmVsXG5cdFx0XHRcdFx0LmZpbHRlcigoZmllbGROYW1lOiBzdHJpbmcpID0+XG5cdFx0XHRcdFx0XHQhYWxsS2tleXNSZXF1ZXN0ZWRcblx0XHRcdFx0XHRcdFx0PyB0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3RbZmllbGROYW1lXS5zb21lKFxuXHRcdFx0XHRcdFx0XHRcdFx0KG9yaWdpbikgPT4gb3JpZ2luICE9PSBcInJlc3RyaWN0aW9uXCIgJiYgb3JpZ2luICE9PSBcInNlbWFudGljS2V5XCJcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZVxuXHRcdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QgPz8ge30pO1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWxsIGtleXMoKSBleGNlcHRlZCBJc0FjdGl2ZUVudGl0eSkgYXJlIHJlcXVlc3RlZCBpbiB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgdGFibGUgQVBJXG5cdCAqIEByZXR1cm5zICBUcnVlIGlmIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkOiBmdW5jdGlvbiAodGFibGVBUEk6IFRhYmxlQVBJKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0YWJsZUFQSS5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYWxsQ29sdW1ucyA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMgYXMgKFRhYmxlQ29sdW1uICYgeyBpc0tleTogYm9vbGVhbjsgcmVsYXRpdmVQYXRoOiBzdHJpbmcgfSlbXTtcblx0XHRjb25zdCBrZXlQcm9wZXJ0eU5hbWVzID0gYWxsQ29sdW1uc1xuXHRcdFx0LmZpbHRlcigoYykgPT4gYy5pc0tleSAmJiBjLnJlbGF0aXZlUGF0aCAmJiBjLnJlbGF0aXZlUGF0aCAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0Lm1hcCgoYykgPT4gYy5yZWxhdGl2ZVBhdGgpO1xuXHRcdGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0YWJsZVxuXHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0Lm1hcCgoY29sdW1uKSA9PiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblx0XHQvLyBTdG9yZSBhbGwgcHJvcGVydGllcyByZWZlcmVuY2VkIGJ5IGRpc3BsYXllZCBjb2x1bW5zIGluIGEgU2V0XG5cdFx0Y29uc3QgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRmdW5jdGlvbiBwcm9jZXNzQ29sdW1uKGNvbDogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdFx0XHQvLyBBZGQgdGhlIHByb3BlcnR5IG5hbWUgZnJvbSBjb2x1bW4gaXRzZWxmIGlmIGl0J3Mgbm90IGEgY29tcGxleCBwcm9wZXJ0eUluZm9cblx0XHRcdGlmIChjb2wucmVsYXRpdmVQYXRoICYmIGNvbC5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGNvbC5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWRkIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2wuZXh0ZW5zaW9uPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uZm9yRWFjaCgoYWRkaXRpb25hbENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkaXRpb25hbENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBhZGRpdGlvbmFsQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChhZGRpdGlvbmFsQ29sdW1uPy5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoYWRkaXRpb25hbENvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZGlzcGxheWVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghY29sdW1uKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbiBpdHNlbGZcblx0XHRcdHByb2Nlc3NDb2x1bW4oY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3M/LmZvckVhY2goKHJlbGF0ZWRDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gcmVsYXRlZENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAocmVsYXRlZENvbHVtbikge1xuXHRcdFx0XHRcdHByb2Nlc3NDb2x1bW4ocmVsYXRlZENvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4ga2V5UHJvcGVydHlOYW1lcy5ldmVyeSgocHJvcE5hbWUpID0+IHByb3BOYW1lICYmIHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmhhcyhwcm9wTmFtZSkpO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgc2VhcmNoIHF1ZXJ5IGZvciBhbmFseXRpY2FsIGFuZCBub24gYW5hbHl0aWNhbCBvZGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZyBUaGUgb0RhdGFMaXN0QmluZGluZyBpbnN0YW5jZS5cblx0ICogQHJldHVybnMgVGhlIHNlYXJjaCBxdWVyeSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXRTZWFyY2hRdWVyeTogZnVuY3Rpb24gKGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gYmluZGluZy5nZXRBZ2dyZWdhdGlvbj8uKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uPy5zZWFyY2ggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gRm9yIGFuYWx5dGljYWwgdGFibGVzLCB0aGUgc2VhcmNoIHF1ZXJ5IGlzIHN0b3JlZCBpbiB0aGUgYWdncmVnYXRpb25cblx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbi5zZWFyY2ggYXMgc3RyaW5nO1xuXHRcdH1cblx0XHQvLyBJZiBub3QgZm91bmQgaW4gYWdncmVnYXRpb24sIGNoZWNrIHRoZSBxdWVyeSBvcHRpb25zXG5cdFx0cmV0dXJuIGJpbmRpbmcuZ2V0UXVlcnlPcHRpb25zRnJvbVBhcmFtZXRlcnMoKS4kc2VhcmNoO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nOiBmdW5jdGlvbiAodGFibGU6IE1EQ1RhYmxlLCBiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbywgYmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgbmVlZE1hbnVhbFJlZnJlc2ggPSBmYWxzZTtcblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKTtcblx0XHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0Y29uc3QgbWFudWFsVXBkYXRlUHJvcGVydHlLZXkgPSBcInBlbmRpbmdNYW51YWxCaW5kaW5nVXBkYXRlXCI7XG5cdFx0XHRjb25zdCBwZW5kaW5nTWFudWFsVXBkYXRlID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXkpIGFzIGJvb2xlYW47XG5cdFx0XHRjb25zdCBuZXdTb3J0ZXJzID0gSlNPTi5zdHJpbmdpZnkoYmluZGluZ0luZm8uc29ydGVyID8/IFtdKTtcblx0XHRcdGlmIChiaW5kaW5nKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHRcdFx0ICogaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGEgYmF0Y2ggcmVxdWVzdC5cblx0XHRcdFx0ICogUmVtb3ZpbmcgY29sdW1ucyBjcmVhdGVzIG9uZSBiYXRjaCByZXF1ZXN0IHRoYXQgd2FzIG5vdCBleGVjdXRlZCBiZWZvcmVcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncztcblx0XHRcdFx0Y29uc3Qgb2xkRmlsdGVycyA9IGJpbmRpbmcuZ2V0RmlsdGVycyhcIkFwcGxpY2F0aW9uXCIpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91c1NvcnRlcnMgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTKSA/PyBcIltdXCI7XG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXHRcdFx0XHRuZWVkTWFudWFsUmVmcmVzaCA9XG5cdFx0XHRcdFx0ZmlsdGVyTm90Q2hhbmdlZCAmJlxuXHRcdFx0XHRcdChpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShTRUFSQ0hfSEFTX0JFRU5fRklSRUQpIHx8IC8vIGNoZWNrIGlmIHRoZSBzZWFyY2ggaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdFx0XHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQpIHx8IC8vIGNoZWNrIGlmIGEgY29sdW1uIGhhcyBiZWVuIGFkZGVkXG5cdFx0XHRcdFx0XHRMUk11bHRpVmlld0VuYWJsZWQpICYmIC8vIGlmIHRoZSBtdWx0aSB2aWV3IGlzIGVuYWJsZWQgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIHJlZnJlc2hlZCBhcyB3ZSBkb24ndCBrbm93biBpZiB0aGUgY29udGVudCBvZiB0aGUgdGFibGUgaXMgb3V0ZGF0ZWQgZHVlIHRvIGFuIGFjdGlvbiBvbiBhbm90aGVyIHRhYmxlXG5cdFx0XHRcdFx0IXBlbmRpbmdNYW51YWxVcGRhdGU7XG5cdFx0XHR9XG5cdFx0XHQvLyBDbGVhbnVwIGdyb3VwQ29uZGl0aW9ucyBhbmQgYWdncmVnYXRlQ29uZGl0aW9ucyBpZiB0aGV5IGRvbid0IG1ha2Ugc2Vuc2Vcblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3MgIT09IHRydWUpIHtcblx0XHRcdFx0Ly8gQWdncmVnYXRlIGNvbmRpdGlvbnMgbmV2ZXIgbWFrZSBzZW5zZSBvdXRzaWRlIG9mIGFuIGFuYWx5dGljYWwgdGFibGVcblx0XHRcdFx0dGFibGUuc2V0QWdncmVnYXRlQ29uZGl0aW9ucygpO1xuXHRcdFx0XHQvLyBHcm91cCBjb25kaXRpb25zIGRvbid0IG1ha2Ugc2Vuc2UgaW4gYSBUcmVlIG9yIEdyaWQgdGFibGVcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJHcmlkVGFibGVcIiB8fFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZS5zZXRHcm91cENvbmRpdGlvbnMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZy5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvLCBiaW5kaW5nXSk7XG5cdFx0XHQvLyB3ZSBzdG9yZSB0aGUgdGFibGUgYmluZGluZyBpbmZvIHRoYXQgd2FzIHVzZWQgdG8gYmluZCB0aGUgdGFibGUgaW4gdGhlIHRhYmxlIEFQSVxuXHRcdFx0Ly8gdGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRoZSBjYWxsIHRvIFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcgb3RoZXIgd2lzZSB3ZSBkb24ndCBnZXQgdGhlIGFnZ3JlZ2F0ZSBwYXJhbWV0ZXJzXG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJldHJpZXZlIHNvcnRlcnMgYWRkZWQgaW4gdGhlIG9uQmVmb3JlUmViaW5kVGFibGUgZXZlbnRcblx0XHRcdHRhYmxlQVBJLnNldFRhYmxlQmluZGluZ0luZm8oYmluZGluZ0luZm8pO1xuXHRcdFx0Ly8gd2UgbWFrZSB0aGUgY2FsbCB0byB1cGRhdGUgdGhlIGRvd25sb2FkIHVybCBidXQgZG8gbm90IGF3YWl0IGl0XG5cdFx0XHR0YWJsZUFQSS5zZXREb3dubG9hZFVybCgpO1xuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblx0XHRcdC8vZm9yIFRyZWV0YWJsZSwgaXQncyBuZWNlc3NhcnkgdG8gY2xlYXIgdGhlIHBhc3RhYmxlQ29udGV4dHMgc2luY2UgdGhlIGJpbmRpbmcgZGVzdHJveXMgcHJldmlvdXMgY29udGV4dHMuXG5cdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwicGFzdGFibGVDb250ZXh0c1wiLCBbXSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IHRhYmxlQVBJLnN0b3JlZEV2ZW50cyA/PyBbXTtcblx0XHRcdGF0dGFjaGVkRXZlbnRzLmZvckVhY2goKHsgZXZlbnRJZCwgY2FsbGJhY2ssIGxpc3RlbmVyLCBkYXRhIH0pID0+IHtcblx0XHRcdFx0dGFibGUuZ2V0Um93QmluZGluZygpPy5hdHRhY2hFdmVudChldmVudElkLCBkYXRhLCBjYWxsYmFjaywgbGlzdGVuZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHR9LFxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblx0XHRjb25zdCByb3dCaW5kaW5nSW5mbyA9IHRhYmxlQVBJLmdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbygpO1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9PT0gdW5kZWZpbmVkICYmXG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJ1aVwiKT8uZ2V0UHJvcGVydHkoXCJpc0VkaXRhYmxlXCIpID09PSBmYWxzZSAmJlxuXHRcdFx0b1RhYmxlLmdldE1vZGVsKFwidmlld0RhdGFcIik/LmdldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEVuYWJsZWRcIilcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoYmluZGluZ0NvbnRleHQgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRCaW5kaW5nKCkuZ2V0VXBkYXRlR3JvdXBJZCgpID09IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRFxuXHRcdCkge1xuXHRcdFx0dGFibGVDYW5CZUluSW5saW5lRWRpdCA9IHRydWU7XG5cdFx0fVxuXHRcdGlmICh0YWJsZUNhbkJlSW5JbmxpbmVFZGl0KSB7XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCR1cGRhdGVHcm91cElkID0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEO1xuXHRcdH1cblx0XHRyZXR1cm4gcm93QmluZGluZ0luZm87XG5cdH0sXG5cdF9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmFzc2lnbihvQmluZGluZ0luZm8sIHRoaXMuX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZShvVGFibGUpKTtcblx0XHQvKipcblx0XHQgKiBCaW5kaW5nIGluZm8gbWlnaHQgYmUgc3VzcGVuZGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGUgZmlyc3QgYmluZFJvd3MgaXMgY2FsbGVkOlxuXHRcdCAqIFRvIGF2b2lkIGR1cGxpY2F0ZSByZXF1ZXN0cyBidXQgc3RpbGwgaGF2ZSBhIGJpbmRpbmcgdG8gY3JlYXRlIG5ldyBlbnRyaWVzLlx0XHRcdFx0ICpcblx0XHQgKiBBZnRlciB0aGUgaW5pdGlhbCBiaW5kaW5nIHN0ZXAsIGZvbGxvdyB1cCBiaW5kaW5ncyBzaG91bGQgbm8gbG9uZ2VyIGJlIHN1c3BlbmRlZC5cblx0XHQgKi9cblx0XHRpZiAob1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnN1c3BlbmRlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHQvLyBUaGUgcHJldmlvdXNseSBhZGRlZCBoYW5kbGVyIGZvciB0aGUgZXZlbnQgJ2RhdGFSZWNlaXZlZCcgaXMgbm90IGFueW1vcmUgdGhlcmVcblx0XHQvLyBzaW5jZSB0aGUgYmluZGluZ0luZm8gaXMgcmVjcmVhdGVkIGZyb20gc2NyYXRjaCBzbyB3ZSBuZWVkIHRvIHNldCB0aGUgZmxhZyB0byBmYWxzZSBpbiBvcmRlclxuXHRcdC8vIHRvIGFnYWluIGFkZCB0aGUgaGFuZGxlciBvbiB0aGlzIGV2ZW50IGlmIG5lZWRlZFxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIGZhbHNlKTtcblx0XHR9XG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IG9EYXRhU3RhdGVJbmRpY2F0b3IgPSBvVGFibGUuZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKCk7XG5cdFx0aWYgKG9EYXRhU3RhdGVJbmRpY2F0b3IgJiYgb0RhdGFTdGF0ZUluZGljYXRvci5pc0ZpbHRlcmluZygpKSB7XG5cdFx0XHQvLyBJbmNsdWRlIGZpbHRlcnMgb24gbWVzc2FnZVN0cmlwXG5cdFx0XHRpZiAoKG9CaW5kaW5nSW5mby5maWx0ZXJzIGFzIHVua25vd24gYXMgRmlsdGVyW10pLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlciA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiAob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkuY29uY2F0KG9GaWx0ZXJJbmZvLmZpbHRlcnMpLCBhbmQ6IHRydWUgfSk7XG5cdFx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0fVxuXHRcdHRoaXMuYWRkRmlsdGVyT25BY3RpdmVFbnRpdGllcyhvVGFibGUsIG9CaW5kaW5nSW5mbyk7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoXG5cdFx0YmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8sXG5cdFx0ZmlsdGVySW5mbzogSW50ZXJuYWxCaW5kaW5nSW5mbyxcblx0XHRmaWx0ZXI/OiBGaWx0ZXJcblx0KSB7XG5cdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlcjtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRpZiAoZmlsdGVySW5mby5zZWFyY2gpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVySW5mby5zZWFyY2gpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogSWYgc3BlY2lmaWVkIGluIHRoZSBwYXlsb2FkLCBhZGRzIGEgZmlsdGVyIHRvIGRpc3BsYXkgb25seSBhY3RpdmUgZW50aXRpZXMuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm9cblx0ICovXG5cdGFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRhYmxlLmdldFBheWxvYWQoKSBhcyB7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuIH07XG5cdFx0aWYgKHBheWxvYWQ/LmZpbHRlck9uQWN0aXZlRW50aXRpZXMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGZpbHRlck9uQWN0aXZlID0gbmV3IEZpbHRlcih7IHBhdGg6IFwiSXNBY3RpdmVFbnRpdHlcIiwgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiB0cnVlIH0pO1xuXHRcdFx0aWYgKGJpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBbZmlsdGVyT25BY3RpdmUsIGJpbmRpbmdJbmZvLmZpbHRlcnNdLCBhbmQ6IHRydWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gZmlsdGVyT25BY3RpdmU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gdGhlIGZyYWdtZW50IG9mIGEgc2xvdCBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjdXN0b20gdGFibGUgY29sdW1uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1vZGlmaWVyIFRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIHRhYmxlSWQgVGhlIGlkIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZnJhZ21lbnRcblx0ICovXG5cdF90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0dmlldzogVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblx0XHRpZiAoY29sdW1uSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0aWYgKHNsb3RYTUwpIHtcblx0XHRcdFx0Y29uc3Qgb1RlbXBsYXRlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhjb2x1bW5JbmZvLnRlbXBsYXRlIGFzIHN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCAmJiBvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUgIT09IFwiaHRtbFwiKSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZXBsYWNlV2l0aChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKGBQbGVhc2UgcHJvdmlkZSBjb250ZW50IGluc2lkZSB0aGlzIEJ1aWxkaW5nIEJsb2NrIENvbHVtbjogJHtjb2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0c2xvdENvbHVtbnNYTUwuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdCh2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PikuZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCgpXG5cdFx0KTtcblx0XHRpZiAobW9kaWZpZXI/LnRhcmdldHMgIT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WE1MLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0Y29udHJvbGxlcjogdmlldy5nZXRDb250cm9sbGVyKClcblx0XHR9KSBhcyBQcm9taXNlPENvbnRyb2wgfCBDb250cm9sW10+O1xuXHR9LFxuXHRfZ2V0RXhwb3J0Rm9ybWF0OiBmdW5jdGlvbiAoZGF0YVR5cGU/OiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZWZyb21KU0RhdGUoKTtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZVRpbWVmcm9tSlNEYXRlVGltZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsVGltZWZyb21KU1RpbWUoKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogdW5rbm93biwgaUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzQmluZGluZ1BhdGggJiYgc01ldGFkYXRhUGF0aC5pbmRleE9mKHNCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRhRmllbGRzLnB1c2goc01ldGFkYXRhUGF0aC5zdWJzdHJpbmcoc0JpbmRpbmdQYXRoLmxlbmd0aCArIDEpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRhRmllbGRzLnB1c2goQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNNZXRhZGF0YVBhdGgsIHRydWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhRmllbGRzO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW46IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29sdW1uczogVGFibGVDb2x1bW5bXSwgb0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKCFvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnMuZmlsdGVyKChvQ29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0b1Byb3BlcnR5SW5mb05hbWU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUluZm9OYW1lKSB7XG5cdFx0XHQvLyAxLiBBcHBsaWNhdGlvbiByZW1vdmVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZWlyIGRhdGEgbW9kZWxcblx0XHRcdC8vIDIuIGFkZEl0ZW0gZmFpbGVkIGJlZm9yZSByZXZlcnREYXRhIGNyZWF0ZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBhd2FpdCBvTW9kaWZpZXIuZ2V0UHJvcGVydHk8c3RyaW5nPihvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzKFwiSW5saW5lWE1MXCIpKSB7XG5cdFx0XHRvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0ZG9SZW1vdmVJdGVtID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgob1RhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlIGFzIFRhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRhQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uXG5cdCkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSBhcyBUYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IHN0cmluZykge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUhlbHA6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvVmFsdWVIZWxwKSB7XG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9WYWx1ZUhlbHAsIDApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cdC8qKlxuXHQgKiBJbnZva2VkIHdoZW4gYSBjb2x1bW4gaXMgYWRkZWQgdXNpbmcgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUgYXMgVGFibGUpO1xuXHRcdGlmICghYUNvbHVtbnMpIHtcblx0XHRcdC8vIFdlIHJldHVybiBudWxsIGhlcmUgYmVjYXVzZSBldmVyeXRoaW5nIHNob3VsZCBhcHBseSBhdCBydW50aW1lXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIlNsb3RcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50KGNvbHVtbkluZm8gYXMgQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiwgdmlldywgb01vZGlmaWVyLCBzVGFibGVJZCk7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUgYXMgVGFibGUpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblx0XHQvLyBmYWxsLWJhY2tcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGxldCBwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eUluZm9zIGFyZSBub3QgZmV0Y2hlZCB5ZXQsIHdlIG5lZWQgdG8gZmV0Y2ggdGhlbVxuXHRcdFx0Ly8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB0YWJsZSBpcyBub3QgY3JlYXRlZCB5ZXRcblx0XHRcdGF3YWl0IHRoaXMuZmV0Y2hQcm9wZXJ0aWVzKHRhYmxlIGFzIE1EQ1RhYmxlKTtcblx0XHRcdHByb3BlcnR5SW5mb3MgPSB0YWJsZUFQSS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3MuZmluZChmdW5jdGlvbiAocHJvcEluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdHJldHVybiBwcm9wSW5mby5uYW1lID09PSBwcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblx0XHRjb25zdCBmblRlbXBsYXRlRnJhZ21lbnQgPSBhc3luYyAoXG5cdFx0XHRvSW5Qcm9wZXJ0eUluZm86IHVua25vd24sXG5cdFx0XHRvVmlldzogRkVWaWV3XG5cdFx0KTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT4gPT4ge1xuXHRcdFx0bGV0IGJEaXNwbGF5TW9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBzVGFibGVUeXBlQ3VzdG9tRGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmcgfCBib29sZWFuPih0YWJsZSwgXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcInRhYmxlVHlwZVwiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcImNyZWF0aW9uTW9kZVwiLCBvTW9kaWZpZXIpXG5cdFx0XHRdKS50aGVuKGFzeW5jIChhQ3VzdG9tRGF0YTogKHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpW10pID0+IHtcblx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYUN1c3RvbURhdGFbMF0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0c1RhYmxlVHlwZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsxXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBSZWFkIE9ubHkgYW5kIENvbHVtbiBFZGl0IE1vZGUgY2FuIGJvdGggaGF2ZSB0aHJlZSBzdGF0ZVxuXHRcdFx0XHQvLyBVbmRlZmluZWQgbWVhbnMgdGhhdCB0aGUgZnJhbWV3b3JrIGRlY2lkZXMgd2hhdCB0byBkb1xuXHRcdFx0XHQvLyBUcnVlIC8gRGlzcGxheSBtZWFucyBhbHdheXMgcmVhZCBvbmx5XG5cdFx0XHRcdC8vIEZhbHNlIC8gRWRpdGFibGUgbWVhbnMgZWRpdGFibGUgYnV0IHdoaWxlIHN0aWxsIHJlc3BlY3RpbmcgdGhlIGxvdyBsZXZlbCBwcmluY2lwbGUgKGltbXV0YWJsZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBlZGl0YWJsZSlcblx0XHRcdFx0aWYgKGJEaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiRGlzcGxheU1vZGUgIT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYkRpc3BsYXlNb2RlID09PSBcInRydWVcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRcdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRcdFx0XHRcdHJlYWRPbmx5OiBiRGlzcGxheU1vZGUsXG5cdFx0XHRcdFx0XHR0YWJsZVR5cGU6IHNUYWJsZVR5cGVDdXN0b21EYXRhLFxuXHRcdFx0XHRcdFx0aWQ6IHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aDogcHJvcGVydHlJbmZvTmFtZSxcblx0XHRcdFx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISksXG5cdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHsgbmFtZTogc0NyZWF0aW9uTW9kZUN1c3RvbURhdGEgfSxcblx0XHRcdFx0XHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyOiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb1RhYmxlQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb1RhYmxlQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkOiBvUHJvcGVydHlDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdFx0XHRcdGNvbHVtbjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvY29sdW1uSW5mb1wiKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHR0aGlzOiBvVGhpcyxcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IHRhYmxlQ29sbGVjdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IG5ldyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKFxuXHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbkVudGl0eTogdGFibGVDb2xsZWN0aW9uLnRhcmdldE9iamVjdCEsIG1ldGFNb2RlbDogb01ldGFNb2RlbCB9LFxuXHRcdFx0XHRcdHRhYmxlQVBJXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkQ29sdW1uWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChnZXRDb2x1bW5UZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0c1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpISxcblx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHQpID8/IFwiXCIpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFwidGV4dC94bWxcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdFx0XHRcdGNvbXB1dGVkQ29sdW1uWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRcdFx0b01vZGlmaWVyXG5cdFx0XHRcdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXHQvKipcblx0ICogUHJvdmlkZSB0aGUgVGFibGUncyBmaWx0ZXIgZGVsZWdhdGUgdG8gcHJvdmlkZSBiYXNpYyBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGFkZGluZyBGaWx0ZXJGaWVsZHMuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBmb3IgdGhlIFRhYmxlcyBmaWx0ZXIgcGVyc29uYWxpemF0aW9uLlxuXHQgKi9cblx0Z2V0RmlsdGVyRGVsZWdhdGU6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMlxuXHRcdFx0fSxcblx0XHRcdEZpbHRlckJhckRlbGVnYXRlLFxuXHRcdFx0e1xuXHRcdFx0XHRhZGRJdGVtOiBhc3luYyBmdW5jdGlvbiAob1BhcmVudENvbnRyb2w6IENvbnRyb2wsIHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5SW5mb05hbWUuaW5kZXhPZihcIlByb3BlcnR5OjpcIikgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIENvcnJlY3QgdGhlIG5hbWUgb2YgY29tcGxleCBwcm9wZXJ0eSBpbmZvIHJlZmVyZW5jZXMuXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlJbmZvTmFtZSA9IHNQcm9wZXJ0eUluZm9OYW1lLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gRmlsdGVyQmFyRGVsZWdhdGUuYWRkSXRlbShvUGFyZW50Q29udHJvbCBhcyBGaWx0ZXJCYXIsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlTWFwIGF0dGFjaGVkIHRvIHRoaXMgZGVsZWdhdGUuXG5cdCAqIEByZXR1cm5zIEFueSBpbnN0YW5jZSBvZiBUeXBlTWFwXG5cdCAqL1xuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3M/LmZpbmQoKG9iaikgPT4ge1xuXHRcdFx0cmV0dXJuIG9iai5uYW1lID09PSBwcm9wZXJ0eTtcblx0XHR9KTtcblx0XHQvKkZvciBhIERhdGUsIERhdGVUaW1lLCBCb29sZWFuIG9yIERlY2ltYWwgcHJvcGVydHksIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCBpbiBleHRlcm5hbCBmb3JtYXQgdXNpbmcgYSBVSTUgdHlwZSBmb3IgdGhlXG5cdCAgICAgICAgZ2l2ZW4gcHJvcGVydHkgcGF0aCB0aGF0IGZvcm1hdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkncyBFRE0gdHlwZSBhbmQgY29uc3RyYWludHMqL1xuXHRcdGNvbnN0IGRhdGFCYXNlVHlwZSA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eUluZm8/LmRhdGFUeXBlKS5iYXNlVHlwZTtcblx0XHRjb25zdCBleHRlcm5hbEZvcm1hdCA9XG5cdFx0XHRkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJCb29sZWFuXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIk51bWVyaWNcIjtcblx0XHRsZXQgdmFsdWU7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHR2YWx1ZSA9IGdldFJlc291cmNlTW9kZWwoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRV9WQUxVRVwiKTtcblx0XHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdFx0fVxuXHRcdGlmIChwcm9wZXJ0eUluZm8/Lm1vZGUpIHtcblx0XHRcdHN3aXRjaCAocHJvcGVydHlJbmZvLm1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8/LnBhdGggPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5wYXRoLCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdHZhbHVlID0gZ2V0UmVzb3VyY2VNb2RlbChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFX1ZBTFVFXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJGQSxNQUFNQSw4QkFBOEIsR0FBRywrQkFBK0I7RUFDdEUsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLGdCQUFnQixHQUFHLGlCQUFpQjtFQUUxQyxlQUFlQyxRQUFRQSxDQUFDQyxLQUFhLEVBQWlCO0lBQ3JELE9BQU8sSUFBSUMsT0FBTyxDQUFRQyxPQUFPLElBQUs7TUFDckNDLFVBQVUsQ0FBQ0QsT0FBTyxFQUFFRixLQUFLLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0VBQ0g7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUkEsT0FTZUksTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVB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
1456
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiZGVsYXlGb3IiLCJkZWxheSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsIk9iamVjdCIsImFzc2lnbiIsIlRhYmxlRGVsZWdhdGVCYXNlIiwiYXBpVmVyc2lvbiIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwIiwidGFibGUiLCJwcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9zIiwia2V5IiwiaW5kZXhPZiIsImNvbHVtbiIsImdldENvbHVtbnMiLCJmaW5kIiwiY29sIiwiZ2V0UHJvcGVydHlLZXkiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiZGF0YSIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnZlcnRlZE1ldGFEYXRhIiwiY29udmVydGVkVHlwZXMiLCJvRGF0YUZpZWxkIiwidGFyZ2V0T2JqZWN0Iiwib0ZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiYUZpZWxkV2lkdGgiLCJEYXRhIiwiZm9yRWFjaCIsIm9EYXRhIiwib0RhdGFGaWVsZFdpZHRoIiwiJFR5cGUiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJnZXRXaWR0aEZvckRhdGFGaWVsZCIsImxhYmVsV2lkdGgiLCJwcm9wZXJ0eVdpZHRoIiwiU2l6ZUhlbHBlciIsImdldEJ1dHRvbldpZHRoIiwiTGFiZWwiLCJ0b1N0cmluZyIsInB1c2giLCJuV2lkZXN0IiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJNYXRoIiwibWF4IiwidmlzdWFsU2V0dGluZ3MiLCJkZWVwRXh0ZW5kIiwid2lkdGhDYWxjdWxhdGlvbiIsInZlcnRpY2FsQXJyYW5nZW1lbnQiLCJtaW5XaWR0aCIsImNlaWwiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yQ29ubmVjdGVkRmllbGQiLCJtZXRhTW9kZWwiLCJkYXRhRmllbGQiLCJjb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHNTZXBhcmF0b3IiLCJnZXRDb25uZWN0ZWRGaWVsZHNTZXBhcmF0b3IiLCJmaWVsZFdpZHRocyIsImdldENvbm5lY3RlZEZpZWxkc0RhdGEiLCJkYXRhRmllbGRXaWR0aCIsInNlcGFyYXRvcldpZHRoIiwiY29sdW1uV2lkdGgiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwIiwicHJvcGVydHkiLCJ0YWJsZUFQSSIsIl9nZXRUYWJsZUFQSSIsImdldE9iamVjdCIsImdhcCIsImdldFByb3BlcnR5IiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQiLCJ1bml0IiwidW5pdFRleHQiLCJ0aW1lem9uZVRleHQiLCJvVGFibGVBUEkiLCJ0ZXh0IiwiZ2V0UmVhZE9ubHkiLCJfY29tcHV0ZUxhYmVsIiwibGFiZWxNYXAiLCJsYWJlbCIsInByb3BlcnRpZXNXaXRoU2FtZUxhYmVsIiwiaXNQcm9wZXJ0eVVzZWRBc1RleHRPbmx5UHJvcGVydHkiLCJzb21lIiwicHJvcCIsInBhdGgiLCJtb2RlIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJhZGRpdGlvbmFsTGFiZWxzIiwiZmlsdGVyYWJsZSIsImpvaW4iLCJfdXBkYXRlUHJvcGVydHlJbmZvIiwicHJvcGVydGllcyIsInAxM25Nb2RlIiwiZ2V0UDEzbk1vZGUiLCJzb3J0YWJsZSIsImdyb3VwYWJsZSIsInVuZGVmaW5lZCIsImNvbmNhdCIsIm5hbWUiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJkYXRhVHlwZSIsInZpc2libGUiLCJnZXRQYXJlbnQiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRJZCIsImdldENvbHVtbnNGb3IiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwiZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXMiLCJvVGFibGUiLCJvQ2FwYWJpbGl0aWVzIiwiWExTWCIsIm9Nb2RlbCIsIkRlbGVnYXRlVXRpbCIsImZldGNoTW9kZWwiLCJ0aGVuIiwibW9kZWwiLCJhU3VwcG9ydGVkRm9ybWF0cyIsImFMb3dlckZvcm1hdHMiLCJtYXAiLCJlbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvQW5ub3RhdGlvbiIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiY29sdW1uSW5mbyIsImNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0ZpbHRlcmFibGUiLCJpc1BhdGhGaWx0ZXJhYmxlIiwicmVsYXRpdmVQYXRoIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImlzUGFydE9mQ3VzdG9tQ29sdW1uIiwiaXNDb25zdGFudCIsIl9mZXRjaFByb3BlcnR5SW5mbyIsImFwcENvbXBvbmVudCIsInNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25Db250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NvbXBsZXhUeXBlIiwidHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsImJGaWx0ZXJhYmxlIiwiQ29tbW9uSGVscGVyIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJiSXNBbmFseXRpY2FsVGFibGUiLCJnZXRDdXN0b21EYXRhIiwiZ2V0TG9jYWxpemVkVGV4dCIsInRvb2x0aXAiLCJfZ2V0VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlEYXRhTW9kZWwiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIm1heENvbmRpdGlvbnMiLCJpc011bHRpVmFsdWUiLCJFcnJvciIsInNldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJnZXRQcm9wZXJ0eUluZm9zIiwiX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcyIsImRlbGF5VGltZSIsInN1YkZldGNoZWRQcm9wZXJ0aWVzIiwic2V0Q2FjaGVkUHJvcGVydHlJbmZvcyIsInNldE5vRGF0YUluZm9ybWF0aW9uIiwiaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24iLCJub0RhdGFBZ2dyZWdhdGlvbiIsImdldE5vRGF0YSIsImlzQSIsImN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2UiLCJzZXRUaXRsZSIsInRpdGxlIiwic2V0RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldElsbHVzdHJhdGlvblR5cGUiLCJpbGx1c3RyYXRpb25UeXBlIiwic2V0SWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGlvblNpemUiLCJpbGx1c3RyYXRlZE1lc3NhZ2UiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJzZXROb0RhdGEiLCJzZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSIsImJpbmRpbmdJbmZvIiwidGFibGVGaWx0ZXJJbmZvIiwiVGFibGVVdGlscyIsImdldEFsbEZpbHRlckluZm8iLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInN1ZmZpeFJlc291cmNlS2V5Iiwic3Vic3RyaW5nIiwiaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiIsImdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzIiwiZ2V0UXVpY2tGaWx0ZXIiLCJnZXRUZXh0IiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRmlsdGVyUmVzdWx0cyIsImZpbHRlckFzc29jaWF0aW9uIiwiZ2V0RmlsdGVyIiwiaGFzRmlsdGVyT3JTZWFyY2giLCJzZWFyY2giLCJmaWx0ZXJzIiwidGVzdCIsIk5vRW50cmllcyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZXF1ZXN0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJiRGF0YVJlcXVlc3RlZEF0dGFjaGVkIiwiYXR0YWNoRGF0YVJlcXVlc3RlZCIsImdldElzRWRpdGFibGUiLCJ0YWJsZURlZmF1bHRzUHJvbWlzZSIsImdldFRhYmxlRGVmYXVsdHMiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJKU09OIiwicGFyc2UiLCJ0YWJsZURlZmluaXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIkRlbGV0ZUhlbHBlciIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwidGFibGVEZWZhdWx0RGF0YSIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwicXVpY2tGaWx0ZXIiLCJjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkiLCJDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkiLCJfaGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NIiwiX2ludGVybmFsVXBkYXRlQmluZGluZ0luZm8iLCJfaGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQiLCJmaXJlRXZlbnQiLCJjb2xsZWN0aW9uQmluZGluZ0luZm8iLCJxdWlja0ZpbHRlcktleSIsImdldFNlbGVjdGVkS2V5IiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiZ2V0SW5SZXN1bHRQcm9wZXJ0eUtleXMiLCJjb250cm9sIiwiYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24iLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIiwiYWxsS2tleXNSZXF1ZXN0ZWQiLCJjaGVja0FsbEtleXNBcmVSZXF1ZXN0ZWQiLCJvdmVycmlkZVJvd1ByZXNzIiwicmVxdWVzdEF0TGVhc3QiLCJmaWx0ZXIiLCJmaWVsZE5hbWUiLCJvcmlnaW4iLCJnZXRDb250ZW50IiwiYWxsQ29sdW1ucyIsImtleVByb3BlcnR5TmFtZXMiLCJjIiwiZGlzcGxheWVkQ29sdW1ucyIsInJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzIiwiU2V0IiwicHJvY2Vzc0NvbHVtbiIsImFkZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYWRkaXRpb25hbENvbHVtbk5hbWUiLCJhZGRpdGlvbmFsQ29sdW1uIiwicmVsYXRlZENvbHVtbk5hbWUiLCJyZWxhdGVkQ29sdW1uIiwiZXZlcnkiLCJwcm9wTmFtZSIsImhhcyIsImdldFNlYXJjaFF1ZXJ5IiwiYmluZGluZyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJnZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycyIsIiRzZWFyY2giLCJ1cGRhdGVCaW5kaW5nIiwiJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiY29sbGVjdGlvblBhdGgiLCJpbnRlcm5hbE1vZGVsIiwia2VwdEFsaXZlTGlzdHMiLCJuZWVkTWFudWFsUmVmcmVzaCIsInZpZXciLCJtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSIsInBlbmRpbmdNYW51YWxVcGRhdGUiLCJuZXdTb3J0ZXJzIiwic3RyaW5naWZ5Iiwidmlld0RhdGEiLCJvbGRGaWx0ZXJzIiwicHJldmlvdXNTb3J0ZXJzIiwiZmlsdGVyTm90Q2hhbmdlZCIsImRlZXBFcXVhbCIsIkxSTXVsdGlWaWV3RW5hYmxlZCIsInZpZXdzIiwiZW5hYmxlQW5hbHl0aWNzIiwic2V0QWdncmVnYXRlQ29uZGl0aW9ucyIsInNldEdyb3VwQ29uZGl0aW9ucyIsInNldFRhYmxlQmluZGluZ0luZm8iLCJzZXREb3dubG9hZFVybCIsInJlcXVlc3RSZWZyZXNoIiwiZ2V0R3JvdXBJZCIsImZpbmFsbHkiLCJzdG9yZWRFdmVudHMiLCJfcmVmIiwiZXZlbnRJZCIsImNhbGxiYWNrIiwibGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsIl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUiLCJyb3dCaW5kaW5nSW5mbyIsImdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbyIsImJpbmRpbmdDb250ZXh0IiwidGFibGVDYW5CZUluSW5saW5lRWRpdCIsImdldEJpbmRpbmciLCJnZXRVcGRhdGVHcm91cElkIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwiJCR1cGRhdGVHcm91cElkIiwic3VzcGVuZGVkIiwib0ZpbHRlciIsIm9GaWx0ZXJJbmZvIiwiRmlsdGVyIiwiYW5kIiwiYmluZGluZ1BhdGgiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJnZXRFeHRlbnNpb25BUEkiLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDb25uZWN0ZWRGaWVsZHMsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YVBvaW50VHlwZSxcblx0RmllbGRHcm91cFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBGaWx0ZXJSZXN0cmljdGlvbnMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL2ZpbHRlci9GaWx0ZXJSZXN0cmljdGlvbnNcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRDb2x1bW5FeHBvcnRTZXR0aW5ncyxcblx0Q29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbixcblx0VGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGdldENvbm5lY3RlZEZpZWxkc0RhdGEsIGdldENvbm5lY3RlZEZpZWxkc1NlcGFyYXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBKc0NvbnRyb2xUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvLCBkZWZhdWx0IGFzIFRhYmxlLCBWaXN1YWxTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIHY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBRdWlja0ZpbHRlclNlbGVjdG9yIGZyb20gXCIuLi9RdWlja0ZpbHRlclNlbGVjdG9yXCI7XG5pbXBvcnQgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuY29uc3QgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SID0gXCIvc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiO1xuY29uc3QgU0VBUkNIX0hBU19CRUVOX0ZJUkVEID0gXCJzZWFyY2hGaXJlZFwiO1xuY29uc3QgQ09MVU1OX0hBU19CRUVOX0FEREVEID0gXCJjb2x1bW5BZGRlZFwiO1xuY29uc3QgUFJFVklPVVNfU09SVEVSUyA9IFwicHJldmlvdXNTb3J0ZXJzXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGF5Rm9yKGRlbGF5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCBkZWxheSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3Igc2FwLnVpLm1kYy5UYWJsZS5cbiAqIDxoMz48Yj5Ob3RlOjwvYj48L2gzPlxuICogVGhlIGNsYXNzIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIEFQSSBhbmQgdGhlIGJlaGF2aW9yIGFyZSBub3QgZmluYWxpemVkLiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCBmb3IgcHJvZHVjdGl2ZSB1c2FnZS5cbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuNjkuMFxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBUYWJsZURlbGVnYXRlQmFzZSwge1xuXHRhcGlWZXJzaW9uOiAyLFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiBhIEZpZWxkR3JvdXAgY29sdW1uLlxuXHQgKiBUaGUgd2lkdGggb2YgdGhlIEZpZWxkR3JvdXAgaXMgdGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgcHJvcGVydHkgY29udGFpbmVkIGluIHRoZSBGaWVsZEdyb3VwIChpbmNsdWRpbmcgdGhlIGxhYmVsIGlmIHNob3dEYXRhRmllbGRzTGFiZWwgaXMgdHJ1ZSlcblx0ICogVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGN1bGF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbi5taW5XaWR0aCBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZCBieSB0aGUgTURDdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mbyBDdXJyZW50IHByb3BlcnR5SW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0aWVzXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcblx0ICovXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwOiBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyxcblx0XHRwcm9wZXJ0eUluZm9zOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW11cblx0KSB7XG5cdFx0aWYgKHByb3BlcnR5SW5mby5rZXkuaW5kZXhPZihcIkRhdGFGaWVsZEZvckFubm90YXRpb246OkZpZWxkR3JvdXA6OlwiKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gdGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoKGNvbCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sLmdldFByb3BlcnR5S2V5KCkgPT09IHByb3BlcnR5SW5mby5rZXk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHNob3dEYXRhRmllbGRzTGFiZWwgPSBjb2x1bW4gPyBjb2x1bW4uZGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIikgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHByb3BlcnR5SW5mby5hbm5vdGF0aW9uUGF0aCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YURhdGEgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMuY29udmVydGVkVHlwZXM7XG5cdFx0XHRjb25zdCBvRGF0YUZpZWxkID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3Qgb0ZpZWxkR3JvdXAgPSBvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0Y29uc3QgYUZpZWxkV2lkdGg6IG51bWJlcltdID0gW107XG5cdFx0XHRvRmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKG9EYXRhOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdGxldCBvRGF0YUZpZWxkV2lkdGg6IHsgbGFiZWxXaWR0aDogbnVtYmVyOyBwcm9wZXJ0eVdpZHRoOiBudW1iZXIgfTtcblx0XHRcdFx0c3dpdGNoIChvRGF0YS4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlPixcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBDb25uZWN0ZWRGaWVsZHMgY29sdW1uLlxuXHQgKiBUaGUgd2lkdGggb2YgdGhlIENvbm5lY3RlZEZpZWxkcyBpcyB0aGUgc3VtIG9mIHRoZSB3aWR0aCBvZiB0aGUgMiBwcm9wZXJ0aWVzIGNvbnRhaW5lZCBpbiB0aGUgQ29ubmVjdGVkRmllbGRzXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yQ29ubmVjdGVkRmllbGQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLFxuXHRcdHByb3BlcnR5SW5mb3M6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXVxuXHQpIHtcblx0XHRpZiAocHJvcGVydHlJbmZvLmtleS5pbmRleE9mKFwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjo6Q29ubmVjdGVkRmllbGRzOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KHByb3BlcnR5SW5mby5hbm5vdGF0aW9uUGF0aCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YURhdGEgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMuY29udmVydGVkVHlwZXM7XG5cdFx0XHRjb25zdCBkYXRhRmllbGQgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb247XG5cdFx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQgYXMgQ29ubmVjdGVkRmllbGRzO1xuXHRcdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzU2VwYXJhdG9yID0gZ2V0Q29ubmVjdGVkRmllbGRzU2VwYXJhdG9yKGNvbm5lY3RlZEZpZWxkcyk7XG5cdFx0XHRjb25zdCBmaWVsZFdpZHRoczogbnVtYmVyW10gPSBbXTtcblx0XHRcdGdldENvbm5lY3RlZEZpZWxkc0RhdGEoY29ubmVjdGVkRmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkKFxuXHRcdFx0XHRcdGRhdGEgYXMgRGF0YUZpZWxkLFxuXHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZT5cblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZFdpZHRoKSB7XG5cdFx0XHRcdFx0ZmllbGRXaWR0aHMucHVzaChkYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzZXBhcmF0b3JXaWR0aCA9IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoY29ubmVjdGVkRmllbGRzU2VwYXJhdG9yKTtcblx0XHRcdGZpZWxkV2lkdGhzLnB1c2goc2VwYXJhdG9yV2lkdGgpO1xuXHRcdFx0Y29uc3QgY29sdW1uV2lkdGggPSBmaWVsZFdpZHRocy5yZWR1Y2UoZnVuY3Rpb24gKGFjYzogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG5cdFx0XHRcdHJldHVybiBhY2MgKyB2YWx1ZTtcblx0XHRcdH0sIDApO1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgb2JqZWN0LCB7XG5cdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHR2ZXJ0aWNhbEFycmFuZ2VtZW50OiB0cnVlLFxuXHRcdFx0XHRcdG1pbldpZHRoOiBNYXRoLmNlaWwoY29sdW1uV2lkdGgpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpZiAoIXByb3BlcnR5LnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0aWYgKHByb3BlcnR5LmFubm90YXRpb25QYXRoICYmIG1ldGFNb2RlbCkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5LmFubm90YXRpb25QYXRofUBgKTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZCAmJiBkYXRhRmllbGRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSkge1xuXHRcdFx0XHRcdHByb3BlcnR5LnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyB8fCB7fSwge1xuXHRcdFx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdFx0XHRnYXA6IHRhYmxlQVBJLmdldFByb3BlcnR5KFwicmVhZE9ubHlcIikgPyAwIDogNFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSkgYXMgRW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+KSA6IG51bGw7XG5cdFx0Ly8gdXBkYXRlIGdhcCBmb3IgcHJvcGVydGllcyB3aXRoIHN0cmluZyB1bml0XG5cdFx0Y29uc3QgdGV4dCA9IHVuaXRUZXh0IHx8IHRpbWV6b25lVGV4dDtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdGdhcDogTWF0aC5jZWlsKFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgodGV4dCkpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodW5pdCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdC8vIEZvciBwcm9wZXJ0aWVzIHdpdGggdW5pdCwgYSBnYXAgbmVlZHMgdG8gYmUgYWRkZWQgdG8gcHJvcGVybHkgcmVuZGVyIHRoZSBjb2x1bW4gd2lkdGggb24gZWRpdCBtb2RlXG5cdFx0XHRcdFx0Z2FwOiBvVGFibGVBUEkgJiYgb1RhYmxlQVBJLmdldFJlYWRPbmx5KCkgPyAwIDogNlxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdF9jb21wdXRlTGFiZWw6IGZ1bmN0aW9uIChwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbywgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSkge1xuXHRcdGlmIChwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc1dpdGhTYW1lTGFiZWwgPSBsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF07XG5cdFx0XHQvLyBUaGlzIGNvbXB1dGF0aW9uIGlzIG9ubHkgZm9yIGR1cGxpY2F0ZSBsYWJlbHMgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuXHRcdFx0Ly8gRXhjbHVkZSB0ZXh0IG5hdmlnYXRpb24gcHJvcGVydGllcyByZWZlcmVuY2VkIGFzIHRleHQgb24gYSBwcm9wZXJ0eSBhbm5vdGF0ZWQgd2l0aCB0ZXh0IGFycmFuZ2VtZW50IHNldCBhcyBUZXh0T25seS5cblx0XHRcdC8vIEV4Y2x1ZGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGNyZWF0ZWQgb25seSBmb3IgZmlsdGVyaW5nIHB1cnBvc2VzIHdpdGggYSB0ZXh0IGFycmFuZ2VtZW50IHNldCB0byBUZXh0T25seS5cblx0XHRcdGNvbnN0IGlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ID0gcHJvcGVydGllc1dpdGhTYW1lTGFiZWw/LnNvbWUoXG5cdFx0XHRcdChwcm9wKSA9PiBwcm9wLnRleHQgPT09IHByb3BlcnR5LnBhdGggJiYgcHJvcD8ubW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiXG5cdFx0XHQpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbD8ubGVuZ3RoID4gMSAmJlxuXHRcdFx0XHRwcm9wZXJ0eS5wYXRoPy5pbmNsdWRlcyhcIi9cIikgJiZcblx0XHRcdFx0cHJvcGVydHkuYWRkaXRpb25hbExhYmVscyAmJlxuXHRcdFx0XHQhaXNQcm9wZXJ0eVVzZWRBc1RleHRPbmx5UHJvcGVydHkgJiZcblx0XHRcdFx0IShwcm9wZXJ0eT8ubW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiICYmIHByb3BlcnR5LmZpbHRlcmFibGUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvcGVydHkubGFiZWwgPSBwcm9wZXJ0eS5sYWJlbCArIFwiIChcIiArIHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMuam9pbihcIiAvIFwiKSArIFwiKVwiO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHM7XG5cdFx0fVxuXHR9LFxuXHQvL1VwZGF0ZSBWaXN1YWxTZXR0aW5nIGZvciBjb2x1bW5XaWR0aCBjYWxjdWxhdGlvbiBhbmQgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRfdXBkYXRlUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0aWVzOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pIHtcblx0XHRjb25zdCBsYWJlbE1hcDogeyBbbGFiZWw6IHN0cmluZ106IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSB9ID0ge307XG5cdFx0Ly8gQ2hlY2sgYXZhaWxhYmxlIHAxM24gbW9kZXNcblx0XHRjb25zdCBwMTNuTW9kZSA9IHRhYmxlLmdldFAxM25Nb2RlKCk7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zICYmIHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRcdC8vIE9ubHkgZm9yIG5vbi1jb21wbGV4IHByb3BlcnRpZXNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChwMTNuTW9kZT8uaW5jbHVkZXMoXCJTb3J0XCIpICYmIHByb3BlcnR5LnNvcnRhYmxlKSB8fFxuXHRcdFx0XHRcdChwMTNuTW9kZT8uaW5jbHVkZXMoXCJGaWx0ZXJcIikgJiYgcHJvcGVydHkuZmlsdGVyYWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiR3JvdXBcIikgJiYgcHJvcGVydHkuZ3JvdXBhYmxlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF0gPVxuXHRcdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdICE9PSB1bmRlZmluZWQgPyBsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF0uY29uY2F0KFtwcm9wZXJ0eV0pIDogW3Byb3BlcnR5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAodGFibGUsIHByb3BlcnR5LCBwcm9wZXJ0aWVzKTtcblx0XHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckNvbm5lY3RlZEZpZWxkKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdGdyb3VwTGFiZWw6IFwiXCIsXG5cdFx0XHRncm91cDogXCJcIixcblx0XHRcdGxhYmVsOiBcIlwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZVxuXHRcdH0gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdH0sXG5cdF9nZXRUYWJsZUFQSSh0YWJsZTogVGFibGUpOiBUYWJsZUFQSSB7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZCA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghdGFibGVBUEkpIHtcblx0XHRcdHRhYmxlQVBJID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZS5nZXRJZCgpICsgXCI6OlRhYmxlXCIpIGFzIFRhYmxlQVBJO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFibGVBUEk7XG5cdH0sXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBUYWJsZUNvbHVtbltdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRyZXR1cm4gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucztcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgZm9yIHRoZSBnaXZlbiBzYXAudWkubWRjLlRhYmxlIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBvZiB0aGUgdGFibGUgaW5zdGFuY2Vcblx0ICovXG5cdGZldGNoRXhwb3J0Q2FwYWJpbGl0aWVzOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IFByb21pc2U8eyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9PiB7XG5cdFx0Y29uc3Qgb0NhcGFiaWxpdGllczogeyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9ID0geyBYTFNYOiB7fSB9O1xuXHRcdGxldCBvTW9kZWwhOiBPRGF0YU1vZGVsO1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbChvVGFibGUpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAobW9kZWw6IE1vZGVsKSB7XG5cdFx0XHRcdG9Nb2RlbCA9IG1vZGVsIGFzIE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TdXBwb3J0ZWRGb3JtYXRzXCIpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhU3VwcG9ydGVkRm9ybWF0czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgYUxvd2VyRm9ybWF0cyA9IChhU3VwcG9ydGVkRm9ybWF0cyB8fCBbXSkubWFwKChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChhTG93ZXJGb3JtYXRzLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vcGRmXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lckBjb20uc2FwLnZvY2FidWxhcmllcy5QREYudjEuRmVhdHVyZXNcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0Fubm90YXRpb246IHVua25vd24pIHtcblx0XHRcdFx0aWYgKG9Bbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1tcIlBERlwiXSA9IE9iamVjdC5hc3NpZ24oe30sIG9Bbm5vdGF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcHV0aW5nIGV4cG9ydCBjYXBhYmlsaXRpZXM6ICR7ZXJyfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIG9DYXBhYmlsaXRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblx0X2ZldGNoUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoXG5cdFx0bWV0YU1vZGVsOiBNZXRhTW9kZWwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIHtcblx0XHRjb25zdCBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCA9IGNvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRvRGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpIGFzIENvbnRleHQsXG5cdFx0XHRpc0NvbXBsZXhUeXBlID0gY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZT8uaW5kZXhPZihcIkVkbS5cIikgIT09IDAsXG5cdFx0XHRiRmlsdGVyYWJsZSA9IENvbW1vbkhlbHBlci5pc1Byb3BlcnR5RmlsdGVyYWJsZShvTmF2aWdhdGlvbkNvbnRleHQsIG9EYXRhRmllbGQpLFxuXHRcdFx0YklzQW5hbHl0aWNhbFRhYmxlID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwiZW5hYmxlQW5hbHl0aWNzXCIpID09PSBcInRydWVcIixcblx0XHRcdGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsID8/IFwiXCIsIGFwcENvbXBvbmVudCA/PyB0YWJsZSksXG5cdFx0XHR0b29sdGlwID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLnRvb2x0aXAgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHR5cGVDb25maWcgPSB0aGlzLl9nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm8sIGlzQ29tcGxleFR5cGUpLFxuXHRcdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRuYW1lOiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogc0Fic29sdXRlTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGNvbHVtbkluZm8uZ3JvdXBMYWJlbCxcblx0XHRcdFx0Z3JvdXA6IGNvbHVtbkluZm8uZ3JvdXAsXG5cdFx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdFx0dG9vbHRpcDogdG9vbHRpcCxcblx0XHRcdFx0ZGF0YVR5cGU6IHR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOlxuXHRcdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJcblx0XHRcdFx0XHRcdD8geyBzdHlsZTogXCJtZWRpdW0vc2hvcnRcIiB9IC8qIFRoaXMgY29uZGl0aW9uIGRvZXNuJ3QgaGF2ZSBhbnkgaW1wYWN0LCB0byBiZSByZXZpZXdlZCAqL1xuXHRcdFx0XHRcdFx0OiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNvbnN0cmFpbnRzLFxuXHRcdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIiAmJiAhaXNDb21wbGV4VHlwZSxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IHRoaXMuX3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzKGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsIGNvbHVtbkluZm8pLFxuXHRcdFx0XHR1bml0OiBjb2x1bW5JbmZvLnVuaXQsXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aFxuXHRcdFx0fTtcblx0XHRpZiAocHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzPy50ZW1wbGF0ZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmNsaXBib2FyZFNldHRpbmdzID0geyB0ZW1wbGF0ZTogcHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlIH07XG5cdFx0XHQvLyBpZiBJIHNldCB0aGlzIGNsaXBCb2FyZFNldHRpbmdzIHRoZSBjb3B5IHByb3ZpZGVyIGV4dHJhY3QgdGhlIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgaHRtbCBwcm9wZXJ0eSBhbmQgaXQgaXMgcHJvcGVybHkgY29waWVkIGluIGV4Y2VsXG5cdFx0XHQvLyBidXQgd2hlbiB3ZSBjb3B5IGVsc2V3aGVyZSB3ZSBvbmx5IGdldCB0aGUgcmF3IGRhdGEgYW5kIG5vdCB0aGUgdGVtcGxhdGVkIGRhdGFcblx0XHR9XG5cdFx0Ly8gU2V0IHZpc3VhbFNldHRpbmdzIG9ubHkgaWYgaXQgZXhpc3RzXG5cdFx0aWYgKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MgJiYgT2JqZWN0LmtleXMoY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncztcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXHRcdC8vIE1EQyBleHBlY3RzICAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblx0XHRcdC8vZ2V0IHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIGZvciB0aGUgY29sdW1uXG5cdFx0XHRjb25zdCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0Q29udGV4dChjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoKSxcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwibWV0YVBhdGhcIikhKVxuXHRcdFx0KTtcblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHQvLyBUT0RPIHdpdGggdGhlIG5ldyBjb21wbGV4IHByb3BlcnR5IGluZm8sIGEgbG90IG9mIFwiRGVzY3JpcHRpb25cIiBmaWVsZHMgYXJlIGFkZGVkIGFzIGZpbHRlci9zb3J0IGZpZWxkc1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gY29sdW1uSW5mby5zb3J0YWJsZTtcblx0XHRcdGlmIChiSXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvKTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID1cblx0XHRcdFx0Y29sdW1uSW5mby5maWx0ZXJhYmxlICE9PSBmYWxzZSAmJlxuXHRcdFx0XHQhIWJGaWx0ZXJhYmxlICYmXG5cdFx0XHRcdHRoaXMuX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShjb2x1bW5JbmZvLCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRcdHByb3BlcnR5SW5mby5pc0tleSA9IGNvbHVtbkluZm8uaXNLZXk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZ3JvdXBhYmxlID0gY29sdW1uSW5mby5pc0dyb3VwYWJsZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHR0aGlzLl9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbywgdGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5SW5mby5pc0tleSkge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0ge1xuXHRcdFx0XHRcdC8vIE1EQyBuZWVkcyB0byBmaXggdGhpcywgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZvciBhIG5vbiBBbmFseXRpY2FsIFRhYmxlXG5cdFx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY29sdW1uSW5mby5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscykge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uYWRkaXRpb25hbExhYmVscyA9IGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscy5tYXAoKGFkZGl0aW9uYWxMYWJlbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldExvY2FsaXplZFRleHQoYWRkaXRpb25hbExhYmVsLCBhcHBDb21wb25lbnQgfHwgdGFibGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIGV4cG9ydCBzZXR0aW5ncyB0byBiZSBleHRlbmRlZFxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGV4dGVuZGVkIGV4cG9ydCBzZXR0aW5nc1xuXHQgKi9cblx0X3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzOiBmdW5jdGlvbiAoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5cblx0KTogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCB1bmRlZmluZWQgfCBudWxsIHtcblx0XHRjb25zdCBleHBvcnRGb3JtYXQgPSB0aGlzLl9nZXRFeHBvcnRGb3JtYXQoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUpO1xuXHRcdGlmIChleHBvcnRGb3JtYXQgJiYgZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLmZvcm1hdCA9IGV4cG9ydEZvcm1hdDtcblx0XHR9XG5cdFx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblx0X3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pIHtcblx0XHRpZiAoY29sdW1uSW5mby5hZ2dyZWdhdGFibGUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5hZ2dyZWdhdGFibGUgPSBjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uZXh0ZW5zaW9uKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0gY29sdW1uSW5mby5leHRlbnNpb247XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKGNvbHVtbkluZm86IENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSkge1xuXHRcdGNvbnN0IGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsLCB0YWJsZSk7IC8vIFRvZG86IFRvIGJlIHJlbW92ZWQgb25jZSBNREMgcHJvdmlkZXMgdHJhbnNsYXRpb24gc3VwcG9ydFxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRsYWJlbDogbGFiZWwudG9TdHJpbmcoKSxcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdGNsaXBib2FyZFNldHRpbmdzOiBjb2x1bW5JbmZvLmNsaXBib2FyZFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcImNsaXBib2FyZFNldHRpbmdzXCJdXG5cdFx0fTtcblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICE9PSB1bmRlZmluZWQgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblx0XHQvLyBNREMgZXhwZWN0cyAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5uYW1lO1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yOiBmdW5jdGlvbiAob0NvbHVtbkluZm86IFRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvcikgfHxcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoKVxuXHRcdCk7XG5cdH0sXG5cdF91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsOiBmdW5jdGlvbiAoX29UYWJsZTogVGFibGUsIF9vQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBfb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IF9vVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChhVmlzaWJsZUNvbHVtbnMgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGZvciAoY29uc3QgaW5kZXggaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IoX29Db2x1bW5JbmZvKSAmJlxuXHRcdFx0XHRcdF9vQ29sdW1uSW5mby5uYW1lID09PSBhVmlzaWJsZUNvbHVtbnNbaW5kZXhdLmdldFByb3BlcnR5S2V5KClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aWYgKG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIF9vQ29sdW1uSW5mby5uYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2ZldGNoUHJvcGVydGllc0ZvckVudGl0eTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdC8vIHdoZW4gZmV0Y2hpbmcgcHJvcGVydGllcywgdGhpcyBiaW5kaW5nIGNvbnRleHQgaXMgbmVlZGVkIC0gc28gbGV0cyBjcmVhdGUgaXQgb25seSBvbmNlIGFuZCB1c2UgaWYgZm9yIGFsbCBwcm9wZXJ0aWVzL2RhdGEtZmllbGRzL2xpbmUtaXRlbXNcblx0XHRsZXQgZmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdFx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlUeXBlUGF0aCkpO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKFxuXHRcdFx0ZGF0YU1vZGVsIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuXHRcdCkuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmdldENvbHVtbnNGb3IodGFibGUpKVxuXHRcdFx0LnRoZW4oKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pID0+IHtcblx0XHRcdFx0Ly8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZG9lcyBub3Qgd29yayB2aWEgJ2VudGl0eVNldC8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YSdcblx0XHRcdFx0aWYgKGNvbHVtbnMpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHlJbmZvO1xuXHRcdFx0XHRcdGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uSW5mbykgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbCh0YWJsZSwgY29sdW1uSW5mbyk7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGNvbHVtbkluZm8udHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoUHJvcGVydHlJbmZvKG1ldGFNb2RlbCwgY29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eUluZm8gJiYgIW5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKChwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBEZWxlZ2F0ZVV0aWwuaXNNdWx0aVZhbHVlKHByb3BlcnR5SW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pID8gLTEgOiAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkNvbXB1dGVkXCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIlNsb3RcIjpcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRlZmF1bHRcIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHN3aXRjaCBjYXNlICR7Y29sdW1uSW5mby50eXBlfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eUluZm8gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMgPSB0aGlzLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGUsIGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKGZldGNoZWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdGlmIChhcHBDb21wb25lbnQuZGVsYXlUaW1lID4gMCkge1xuXHRcdFx0Ly8gRmlyc3QgY2FsbCBsZXQncyBhZGQgYSBzbWFsbCBkZWxheSB0byBlbnN1cmUgdGhpcyBkb2Vzbid0IGJsb2NrIHRoZSBpbml0aWFsIHZpZXcgY3JlYXRpb25cblx0XHRcdGF3YWl0IGRlbGF5Rm9yKGFwcENvbXBvbmVudC5kZWxheVRpbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXHRzZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHJpbmcoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRcdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3M7XG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0ZpbHRlclJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblx0XHRjb25zdCBmaWx0ZXJBc3NvY2lhdGlvbiA9IHRhYmxlLmdldEZpbHRlcigpO1xuXHRcdGNvbnN0IGhhc0ZpbHRlck9yU2VhcmNoID0gdGFibGVGaWx0ZXJJbmZvLnNlYXJjaCB8fCB0YWJsZUZpbHRlckluZm8uZmlsdGVycz8ubGVuZ3RoO1xuXHRcdGlmIChmaWx0ZXJBc3NvY2lhdGlvbiAmJiAhL0Jhc2ljU2VhcmNoJC8udGVzdChmaWx0ZXJBc3NvY2lhdGlvbikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGEgRmlsdGVyQmFyIGlzIGFzc29jaWF0ZWQgdG8gdGhlIFRhYmxlIChiYXNpYyBzZWFyY2ggb24gdG9vbEJhciBpcyBleGNsdWRlZClcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHQvLyBjaGVjayBpZiB0YWJsZSBoYXMgYW55IEZpbHRlcmJhciBmaWx0ZXJzIG9yIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0YWJsZSBoYXMgYW55IHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT0RBVEFcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXNcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKS5nZXRWaWV3RGF0YSgpLmxpdmVNb2RlKSB7XG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRmlsdGVyUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPSB0YWJsZUFQSS5nZXROb0RhdGFNZXNzYWdlTW9kZSgpO1xuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBkYXRhUmVxdWVzdGVkIGV2ZW50IGZvciB0aGUgdGFibGUgYmluZGluZyB0byBzZXQgdXAgdGFibGUgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSBvVGFibGUgVGhlIE1EQyB0YWJsZSBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGZvciB0aGUgdGFibGVcblx0ICovXG5cdGhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZXF1ZXN0ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkQXR0YWNoZWRcIik7XG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiAhYkRhdGFSZXF1ZXN0ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZCgoKSA9PiB7XG5cdFx0XHRcdGlmICghb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlcXVlc3RlZFRpbWVvdXRTZXRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRUaW1lb3V0U2V0XCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZSA/IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpIDogbnVsbDtcblx0XHRcdFx0XHRcdGlmIChvVGFibGVBUEkgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVGFibGUpKSB7XG5cdFx0XHRcdFx0XHRcdG9UYWJsZUFQSS50YWJsZURlZmF1bHRzUHJvbWlzZSA9IChvVGFibGVBUEkuZ2V0VGFibGVEZWZhdWx0cyhvVGFibGUpID8/IFByb21pc2UucmVzb2x2ZSh7fSkpIGFzIFByb21pc2U8b2JqZWN0Pjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkQXR0YWNoZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXHRoYW5kbGVUYWJsZURhdGFSZWNlaXZlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZWNlaXZlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIpO1xuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlRGVmYXVsdERhdGEgPSBhd2FpdCB0YWJsZUFQSS50YWJsZURlZmF1bHRzUHJvbWlzZT8uY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGFibGVBUEkuc2V0VXBFbXB0eVJvd3Mob1RhYmxlLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhvVGFibGUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFNldCB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwcm9taXNlIGZvciB0aGUgZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdGlmIChtb2RlbCkge1xuXHRcdFx0dGFibGVBUEkuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UobmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKSk7XG5cdFx0XHR0aGlzLnNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsKGNvbnRyb2xsZXIsIG1vZGVsLCB0YWJsZUFQSSk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogRW5hYmxlIHRoZSBvcHRpbWlzdGljIGJhdGNoIG1vZGUgaWYgYXZhaWxhYmxlLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICovXG5cdGVuYWJsZU9wdGltaXN0aWNCYXRjaE1vZGU6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUgPVxuXHRcdFx0dGFibGUgJiYgVGFibGVVdGlscy5pc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoKHRhYmxlLCBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHR0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpPy5yZXNvbHZlKCFmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHJlYmluZDogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKG9UYWJsZSk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gdGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0VGFibGVSdW50aW1lLmNsZWFyU2VsZWN0aW9uKG9UYWJsZSk7XG5cdFx0XHRUYWJsZURlbGVnYXRlQmFzZS5yZWJpbmQuYXBwbHkodGhpcywgW29UYWJsZSwgb0JpbmRpbmdJbmZvXSk7XG5cdFx0XHRUYWJsZVV0aWxzLm9uVGFibGVCb3VuZChvVGFibGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0LnRoZW4oKHRhYmxlOiBUYWJsZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlVGFibGVEYXRhUmVxdWVzdGVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cblx0ICovXG5cdGZldGNoUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwodGFibGUpXG5cdFx0XHQudGhlbihhc3luYyAobW9kZWwpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcImVudGl0eVR5cGVcIikgPz8gXCJcIixcblx0XHRcdFx0XHRtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocHJvcGVydGllcykgPT4ge1xuXHRcdFx0XHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cdHByZUluaXQ6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gKFRhYmxlRGVsZWdhdGVCYXNlLnByZUluaXQgYXMgKHRhYmxlOiBUYWJsZSkgPT4gUHJvbWlzZTx2b2lkPikuYXBwbHkodGhpcywgW3RhYmxlXSkudGhlbigoKSA9PiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIG9uIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBTZXQgdGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGZhc3RDcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAoZmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdGZhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIHVua25vd24gYXMgQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyID0gdGFibGUuZ2V0UXVpY2tGaWx0ZXIoKSBhcyBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSA9IG5ldyBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkoYmluZGluZ0luZm8pO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c0VuYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mb10pO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2ludGVybmFsVXBkYXRlQmluZGluZ0luZm8odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuc2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UodGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGFibGVBUEk/LmZpcmVFdmVudChcImJlZm9yZVJlYmluZFRhYmxlXCIsIHtcblx0XHRcdFx0Y29sbGVjdGlvbkJpbmRpbmdJbmZvOiBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEksXG5cdFx0XHRcdHF1aWNrRmlsdGVyS2V5OiBxdWlja0ZpbHRlcj8uZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSS5nZXRBdHRhY2hlZEV2ZW50cygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGl0IGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIGZvciB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogVGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGlzIHNldCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0aWYgKHRhYmxlLmdldENyZWF0aW9uUm93KCk/LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG51bGwgJiYgYmluZGluZ0luZm8ucGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdFx0XHR0YWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dCBhcyB2NENvbnRleHQsXG5cdFx0XHRcdFx0dGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUFQSS5zZXRBdHRhY2hFdmVudHMoYXR0YWNoZWRFdmVudHMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHVwZGF0aW5nIHRoZSBiaW5kaW5nIGluZm9cIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fSxcblx0X2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJbXSB8IHVuZGVmaW5lZCA9IGJpbmRpbmdJbmZvLnNvcnRlcjtcblx0XHRjb25zdCBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ6IFNvcnRlcltdID0gW107XG5cdFx0aWYgKHNvcnRlcnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0XHRjb25zdCB0YWJsZVByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlUHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5wYXRoID09PSBzb3J0ZXIuZ2V0UGF0aCgpKTtcblx0XHRcdFx0aWYgKHRhYmxlUHJvcGVydHk/LnVuaXQpIHtcblx0XHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5rZXkgPT09IHRhYmxlUHJvcGVydHk/LnVuaXQpO1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRTb3J0ZXJBdmFpbGFibGUgPSB1bml0UHJvcGVydHk/LnBhdGggJiYgc29ydGVycy5zb21lKChzb3J0KSA9PiBzb3J0LmdldFBhdGgoKSA9PT0gdW5pdFByb3BlcnR5LnBhdGgpO1xuXHRcdFx0XHRcdGlmICghdW5pdFNvcnRlckF2YWlsYWJsZSAmJiB1bml0UHJvcGVydHk/LnNvcnRhYmxlICE9PSBmYWxzZSAmJiB1bml0UHJvcGVydHk/LnBhdGgpIHtcblx0XHRcdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKG5ldyBTb3J0ZXIodW5pdFByb3BlcnR5LnBhdGgsIGZhbHNlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKHNvcnRlcik7XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgPSBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ7XG5cdFx0fVxuXHR9LFxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gYmluZGluZ0luZm8ucGF0aCArIFwiL1wiO1xuXHRcdGNvbnN0IGZpbHRlcnMgPSBiaW5kaW5nSW5mby5maWx0ZXJzPy5nZXRGaWx0ZXJzKCk7XG5cdFx0aWYgKGZpbHRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0VGFibGVVdGlscy51cGRhdGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRChtZXRhTW9kZWwsIGZpbHRlcnMgYXMgdW5rbm93biBhcyBDb25kaXRpb25PYmplY3RbXSwgZW50aXR5VHlwZVBhdGgpO1xuXHRcdH1cblx0fSxcblx0X2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0aWYgKGNvbnRyb2xsZXI/LnJlY29tbWVuZGF0aW9ucy5pc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGVEZWYgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmdldFJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlRGVmLmFubm90YXRpb24uZW50aXR5VHlwZU5hbWUpO1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyAmJiByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWxlY3Q/LmNvbmNhdChcIixcIiwgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmpvaW4oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF91cGRhdGVBdmFpbGFibGVDYXJkczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdGlmICh0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgY2FyZHM6IFdyYXBwZWRDYXJkW10gPSBbXTtcblx0XHRcdGF3YWl0IHRhYmxlQVBJLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlciA9IG5ldyBDb2xsYWJvcmF0aW9uTWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IGNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gYXBwQ29tcG9uZW50LmdldElkKCk7XG5cdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpXG5cdFx0XHRcdC5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLnNoYXJlQXZhaWxhYmxlQ2FyZHMoKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGUgaG9vayBpbXBsZW1lbnRlZCBieSBNREMgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUuXG5cdCAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlZmluZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVlc3RlZCBpbiB0aGUgTURDIHRhYmxlIChNYWluIGNhc2UgaXMgZm9yIHRoZSBhbmFseXRpY2FsIHRhYmxlKS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZSB0byBiZSByZXF1ZXN0ZWQuXG5cdCAqL1xuXHRnZXRJblJlc3VsdFByb3BlcnR5S2V5czogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpZiAodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRcdGNvbnN0IGFsbEtrZXlzUmVxdWVzdGVkID0gdGhpcy5jaGVja0FsbEtleXNBcmVSZXF1ZXN0ZWQodGFibGVBUEkpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHQvLyBpZiBhIHJvd3ByZXNzIGlzIG92ZXJyaWRkZW4sIHdlICBzaG91bGQgZW5hYmxlIHRoZSBuYXZpZ2F0aW9uIGF0IHRoZSBub2RlIGxldmVsXG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzTm9kZUxldmVsTmF2aWdhYmxlXCIsIHRhYmxlQVBJLm92ZXJyaWRlUm93UHJlc3MgPyB0cnVlIDogYWxsS2tleXNSZXF1ZXN0ZWQpO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0T2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0KVxuXHRcdFx0XHRcdC8vIGZvciBhbmFseXRpYyB0YWJsZXMgd2l0aCBhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIHdlIHNob3VsZCBub3QgcmVxdWVzdCB0aGUgc2VtYW50aWNLZXkgZXhwZWN0ZWQgd2hlbiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkIC0+ICBpdCB3aWxsIHBlcm1pdHMgdG8gbmF2aWdhdGUgZnJvbSBhIG5vZGUgbGV2ZWwgd2hlbiBzZW1hbnRpY0tleSBhcmUgZW5hYmxlZFxuXHRcdFx0XHRcdC8vIHJlc3RyaWN0aW9uIGFyZSBhbHNvIGV4Y2x1ZGVkIGFzIHdlIGNhbm5vdCBkZXN0aW5ndWlzaCBiZXR3ZWVuIGEgbm9kZSBhbmQgYSBhZ2dyZWdhdGlvbiBsZXZlbFxuXHRcdFx0XHRcdC5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0XHRcdFx0IWFsbEtrZXlzUmVxdWVzdGVkXG5cdFx0XHRcdFx0XHRcdD8gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0W2ZpZWxkTmFtZV0uc29tZShcblx0XHRcdFx0XHRcdFx0XHRcdChvcmlnaW4pID0+IG9yaWdpbiAhPT0gXCJyZXN0cmljdGlvblwiICYmIG9yaWdpbiAhPT0gXCJzZW1hbnRpY0tleVwiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0ID8/IHt9KTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrIGlmIGFsbCBrZXlzKCkgZXhjZXB0ZWQgSXNBY3RpdmVFbnRpdHkpIGFyZSByZXF1ZXN0ZWQgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIHRhYmxlIEFQSVxuXHQgKiBAcmV0dXJucyAgVHJ1ZSBpZiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZDogZnVuY3Rpb24gKHRhYmxlQVBJOiBUYWJsZUFQSSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFsbENvbHVtbnMgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zIGFzIChUYWJsZUNvbHVtbiAmIHsgaXNLZXk6IGJvb2xlYW47IHJlbGF0aXZlUGF0aDogc3RyaW5nIH0pW107XG5cdFx0Y29uc3Qga2V5UHJvcGVydHlOYW1lcyA9IGFsbENvbHVtbnNcblx0XHRcdC5maWx0ZXIoKGMpID0+IGMuaXNLZXkgJiYgYy5yZWxhdGl2ZVBhdGggJiYgYy5yZWxhdGl2ZVBhdGggIT09IFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdC5tYXAoKGMpID0+IGMucmVsYXRpdmVQYXRoKTtcblx0XHRjb25zdCBkaXNwbGF5ZWRDb2x1bW5zID0gdGFibGVcblx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdC5tYXAoKGNvbHVtbikgPT4gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpKSk7XG5cdFx0Ly8gU3RvcmUgYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSBkaXNwbGF5ZWQgY29sdW1ucyBpbiBhIFNldFxuXHRcdGNvbnN0IHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0ZnVuY3Rpb24gcHJvY2Vzc0NvbHVtbihjb2w6IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdFx0Ly8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gY29sdW1uIGl0c2VsZiBpZiBpdCdzIG5vdCBhIGNvbXBsZXggcHJvcGVydHlJbmZvXG5cdFx0XHRpZiAoY29sLnJlbGF0aXZlUGF0aCAmJiBjb2wucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChjb2wucmVsYXRpdmVQYXRoKTtcblx0XHRcdH1cblx0XHRcdC8vIEFkZCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sLmV4dGVuc2lvbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmZvckVhY2goKGFkZGl0aW9uYWxDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZGl0aW9uYWxDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gYWRkaXRpb25hbENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWRkaXRpb25hbENvbHVtbj8ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGFkZGl0aW9uYWxDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIWNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW4gaXRzZWxmXG5cdFx0XHRwcm9jZXNzQ29sdW1uKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0Ly8gUHJvY2VzcyB0aGUgY29sdW1ucyByZWZlcmVuY2VkIGJ5IHRoZSBjb2x1bW5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5mb3JFYWNoKChyZWxhdGVkQ29sdW1uTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1uID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IHJlbGF0ZWRDb2x1bW5OYW1lKTtcblx0XHRcdFx0aWYgKHJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdFx0XHRwcm9jZXNzQ29sdW1uKHJlbGF0ZWRDb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGtleVByb3BlcnR5TmFtZXMuZXZlcnkoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAmJiByZWZlcmVuY2VkUHJvcGVydHlQYXRocy5oYXMocHJvcE5hbWUpKTtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlYXJjaCBxdWVyeSBmb3IgYW5hbHl0aWNhbCBhbmQgbm9uIGFuYWx5dGljYWwgb2RhdGFMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIG9EYXRhTGlzdEJpbmRpbmcgaW5zdGFuY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcXVlcnkgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0U2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IGJpbmRpbmcuZ2V0QWdncmVnYXRpb24/LigpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhZ2dyZWdhdGlvbj8uc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEZvciBhbmFseXRpY2FsIHRhYmxlcywgdGhlIHNlYXJjaCBxdWVyeSBpcyBzdG9yZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRyZXR1cm4gYWdncmVnYXRpb24uc2VhcmNoIGFzIHN0cmluZztcblx0XHR9XG5cdFx0Ly8gSWYgbm90IGZvdW5kIGluIGFnZ3JlZ2F0aW9uLCBjaGVjayB0aGUgcXVlcnkgb3B0aW9uc1xuXHRcdHJldHVybiBiaW5kaW5nLmdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzKCkuJHNlYXJjaDtcblx0fSxcblx0dXBkYXRlQmluZGluZzogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gdGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0Ly8gaWYgdGhlIHJvd0JpbmRpbmdJbmZvIGhhcyBhICQkZ2V0S2VlcEFsaXZlQ29udGV4dCBwYXJhbWV0ZXIgd2UgbmVlZCB0byBjaGVjayBpdCBpcyB0aGUgb25seSBUYWJsZSB3aXRoIHN1Y2ggYVxuXHRcdFx0Ly8gcGFyYW1ldGVyIGZvciB0aGUgY29sbGVjdGlvbk1ldGFQYXRoXG5cdFx0XHRpZiAoYmluZGluZ0luZm8ucGFyYW1ldGVycz8uJCRnZXRLZWVwQWxpdmVDb250ZXh0ID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPih0YWJsZSwgXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSA/PyBcIlwiO1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdGNvbnN0IGtlcHRBbGl2ZUxpc3RzID0gaW50ZXJuYWxNb2RlbD8uZ2V0T2JqZWN0KFwiL2tlcHRBbGl2ZUxpc3RzXCIpID8/IHt9O1xuXHRcdFx0XHRpZiAoIWtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSkge1xuXHRcdFx0XHRcdGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSA9IHRhYmxlLmdldElkKCk7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIva2VwdEFsaXZlTGlzdHNcIiwga2VwdEFsaXZlTGlzdHMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSAhPT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkZ2V0S2VlcEFsaXZlQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IG5lZWRNYW51YWxSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRcdFx0Y29uc3QgcGVuZGluZ01hbnVhbFVwZGF0ZSA9IGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5KSBhcyBib29sZWFuO1xuXHRcdFx0Y29uc3QgbmV3U29ydGVycyA9IEpTT04uc3RyaW5naWZ5KGJpbmRpbmdJbmZvLnNvcnRlciA/PyBbXSk7XG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJOb3RDaGFuZ2VkID1cblx0XHRcdFx0XHQoKGJpbmRpbmdJbmZvLmZpbHRlcnMgPT09IG51bGwgJiYgb2xkRmlsdGVycy5sZW5ndGggPT09IDApIHx8IC8vIG9uIGFuYWx5dGljYWwgdGFibGVzLCB0aGUgZmlsdGVycyBhcmUgc2V0IHRvIG51bGwgd2hlbiBubyBmaWx0ZXJzXG5cdFx0XHRcdFx0XHRkZWVwRXF1YWwoYmluZGluZ0luZm8uZmlsdGVycywgb2xkRmlsdGVyc1swXSkpICYmXG5cdFx0XHRcdFx0bmV3U29ydGVycyA9PT0gcHJldmlvdXNTb3J0ZXJzICYmXG5cdFx0XHRcdFx0YmluZGluZ0luZm8ucGF0aCA9PT0gYmluZGluZy5nZXRQYXRoKCkgJiYgLy8gVGhlIHBhdGggY2FuIGJlIGNoYW5nZWQgaW4gY2FzZSBvZiBhIHBhcmFtZXRyaXplZCBlbnRpdHlcblx0XHRcdFx0XHR0aGlzLmdldFNlYXJjaFF1ZXJ5KGJpbmRpbmcpID09PSBiaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJHNlYXJjaDtcblx0XHRcdFx0Y29uc3QgTFJNdWx0aVZpZXdFbmFibGVkID0gISF2aWV3RGF0YS52aWV3cztcblx0XHRcdFx0bmVlZE1hbnVhbFJlZnJlc2ggPVxuXHRcdFx0XHRcdGZpbHRlck5vdENoYW5nZWQgJiZcblx0XHRcdFx0XHQoaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVEKSB8fCAvLyBjaGVjayBpZiB0aGUgc2VhcmNoIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVEKSB8fCAvLyBjaGVjayBpZiBhIGNvbHVtbiBoYXMgYmVlbiBhZGRlZFxuXHRcdFx0XHRcdFx0TFJNdWx0aVZpZXdFbmFibGVkKSAmJiAvLyBpZiB0aGUgbXVsdGkgdmlldyBpcyBlbmFibGVkIHRoZSByZXF1ZXN0IHNob3VsZCBiZSByZWZyZXNoZWQgYXMgd2UgZG9uJ3Qga25vd24gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIGlzIG91dGRhdGVkIGR1ZSB0byBhbiBhY3Rpb24gb24gYW5vdGhlciB0YWJsZVxuXHRcdFx0XHRcdCFwZW5kaW5nTWFudWFsVXBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2xlYW51cCBncm91cENvbmRpdGlvbnMgYW5kIGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgaWYgdGhleSBkb24ndCBtYWtlIHNlbnNlXG5cdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBjb25kaXRpb25zIG5ldmVyIG1ha2Ugc2Vuc2Ugb3V0c2lkZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlXG5cdFx0XHRcdHRhYmxlLnNldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoKTtcblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblx0XHRcdHRhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHRcdFx0aWYgKG5lZWRNYW51YWxSZWZyZXNoICYmIHRhYmxlLmdldEZpbHRlcigpICYmIGJpbmRpbmcpIHtcblx0XHRcdFx0YmluZGluZ1xuXHRcdFx0XHRcdC5yZXF1ZXN0UmVmcmVzaChiaW5kaW5nLmdldEdyb3VwSWQoKSlcblx0XHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlZnJlc2hpbmcgdGhlIHRhYmxlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShTRUFSQ0hfSEFTX0JFRU5fRklSRUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUywgbmV3U29ydGVycyk7XG5cdFx0XHQvL2ZvciBUcmVldGFibGUsIGl0J3MgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBwYXN0YWJsZUNvbnRleHRzIHNpbmNlIHRoZSBiaW5kaW5nIGRlc3Ryb3lzIHByZXZpb3VzIGNvbnRleHRzLlxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblx0X2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZTogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKG9UYWJsZSk7XG5cdFx0Y29uc3Qgcm93QmluZGluZ0luZm8gPSB0YWJsZUFQSS5nZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8oKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCB0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UgJiZcblx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInZpZXdEYXRhXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KGJpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0QmluZGluZygpLmdldFVwZGF0ZUdyb3VwSWQoKSA9PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSURcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAodGFibGVDYW5CZUluSW5saW5lRWRpdCkge1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkdXBkYXRlR3JvdXBJZCA9IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRDtcblx0XHR9XG5cdFx0cmV0dXJuIHJvd0JpbmRpbmdJbmZvO1xuXHR9LFxuXHRfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXHRcdGxldCBvRmlsdGVyO1xuXHRcdGNvbnN0IG9GaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKG9UYWJsZSk7XG5cdFx0Ly8gUHJlcGFyZSBiaW5kaW5nIGluZm8gd2l0aCBmaWx0ZXIvc2VhcmNoIHBhcmFtZXRlcnNcblx0XHRpZiAob0ZpbHRlckluZm8uZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IG9GaWx0ZXJJbmZvLmZpbHRlcnMsIGFuZDogdHJ1ZSB9KTtcblx0XHR9XG5cdFx0aWYgKG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoKSB7XG5cdFx0XHRvQmluZGluZ0luZm8ucGF0aCA9IG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoO1xuXHRcdH1cblx0XHRjb25zdCBvRGF0YVN0YXRlSW5kaWNhdG9yID0gb1RhYmxlLmdldERhdGFTdGF0ZUluZGljYXRvcigpO1xuXHRcdGlmIChvRGF0YVN0YXRlSW5kaWNhdG9yICYmIG9EYXRhU3RhdGVJbmRpY2F0b3IuaXNGaWx0ZXJpbmcoKSkge1xuXHRcdFx0Ly8gSW5jbHVkZSBmaWx0ZXJzIG9uIG1lc3NhZ2VTdHJpcFxuXHRcdFx0aWYgKChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogKG9CaW5kaW5nSW5mby5maWx0ZXJzIGFzIHVua25vd24gYXMgRmlsdGVyW10pLmNvbmNhdChvRmlsdGVySW5mby5maWx0ZXJzKSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdH1cblx0XHR0aGlzLmFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeTogZnVuY3Rpb24gKFxuXHRcdGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvLFxuXHRcdGZpbHRlckluZm86IEludGVybmFsQmluZGluZ0luZm8sXG5cdFx0ZmlsdGVyPzogRmlsdGVyXG5cdCkge1xuXHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXI7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0aWYgKGZpbHRlckluZm8uc2VhcmNoKSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckluZm8uc2VhcmNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHNwZWNpZmllZCBpbiB0aGUgcGF5bG9hZCwgYWRkcyBhIGZpbHRlciB0byBkaXNwbGF5IG9ubHkgYWN0aXZlIGVudGl0aWVzLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvXG5cdCAqL1xuXHRhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHBheWxvYWQgPSB0YWJsZS5nZXRQYXlsb2FkKCkgYXMgeyBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzPzogYm9vbGVhbiB9O1xuXHRcdGlmIChwYXlsb2FkPy5maWx0ZXJPbkFjdGl2ZUVudGl0aWVzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJPbkFjdGl2ZSA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIklzQWN0aXZlRW50aXR5XCIsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogdHJ1ZSB9KTtcblx0XHRcdGlmIChiaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogW2ZpbHRlck9uQWN0aXZlLCBiaW5kaW5nSW5mby5maWx0ZXJzXSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlck9uQWN0aXZlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIHRoZSBmcmFnbWVudCBvZiBhIHNsb3QgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY3VzdG9tIHRhYmxlIGNvbHVtblxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBtb2RpZmllciBUaGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSB0YWJsZUlkIFRoZSBpZCBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGZyYWdtZW50XG5cdCAqL1xuXHRfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LFxuXHRcdHZpZXc6IEZFVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblx0XHRpZiAoY29sdW1uSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0aWYgKHNsb3RYTUwpIHtcblx0XHRcdFx0Y29uc3Qgb1RlbXBsYXRlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhjb2x1bW5JbmZvLnRlbXBsYXRlIGFzIHN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCAmJiBvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUgIT09IFwiaHRtbFwiKSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZXBsYWNlV2l0aChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKGBQbGVhc2UgcHJvdmlkZSBjb250ZW50IGluc2lkZSB0aGlzIEJ1aWxkaW5nIEJsb2NrIENvbHVtbjogJHtjb2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0c2xvdENvbHVtbnNYTUwuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdCh2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PikuZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCgpXG5cdFx0KTtcblx0XHRpZiAobW9kaWZpZXI/LnRhcmdldHMgIT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WE1MLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0Y29udHJvbGxlcjogdmlldy5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKClcblx0XHR9KSBhcyBQcm9taXNlPENvbnRyb2wgfCBDb250cm9sW10+O1xuXHR9LFxuXHRfZ2V0RXhwb3J0Rm9ybWF0OiBmdW5jdGlvbiAoZGF0YVR5cGU/OiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZWZyb21KU0RhdGUoKTtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZVRpbWVmcm9tSlNEYXRlVGltZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsVGltZWZyb21KU1RpbWUoKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogdW5rbm93biwgaUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzQmluZGluZ1BhdGggJiYgc01ldGFkYXRhUGF0aC5pbmRleE9mKHNCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRhRmllbGRzLnB1c2goc01ldGFkYXRhUGF0aC5zdWJzdHJpbmcoc0JpbmRpbmdQYXRoLmxlbmd0aCArIDEpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRhRmllbGRzLnB1c2goQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNNZXRhZGF0YVBhdGgsIHRydWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhRmllbGRzO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW46IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29sdW1uczogVGFibGVDb2x1bW5bXSwgb0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKCFvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnMuZmlsdGVyKChvQ29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0b1Byb3BlcnR5SW5mb05hbWU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUluZm9OYW1lKSB7XG5cdFx0XHQvLyAxLiBBcHBsaWNhdGlvbiByZW1vdmVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZWlyIGRhdGEgbW9kZWxcblx0XHRcdC8vIDIuIGFkZEl0ZW0gZmFpbGVkIGJlZm9yZSByZXZlcnREYXRhIGNyZWF0ZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBhd2FpdCBvTW9kaWZpZXIuZ2V0UHJvcGVydHk8c3RyaW5nPihvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzKFwiSW5saW5lWE1MXCIpKSB7XG5cdFx0XHRvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0ZG9SZW1vdmVJdGVtID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgob1RhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlIGFzIFRhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRhQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uXG5cdCkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSBhcyBUYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IHN0cmluZykge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUhlbHA6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvVmFsdWVIZWxwKSB7XG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9WYWx1ZUhlbHAsIDApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cdC8qKlxuXHQgKiBJbnZva2VkIHdoZW4gYSBjb2x1bW4gaXMgYWRkZWQgdXNpbmcgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUgYXMgVGFibGUpO1xuXHRcdGlmICghYUNvbHVtbnMpIHtcblx0XHRcdC8vIFdlIHJldHVybiBudWxsIGhlcmUgYmVjYXVzZSBldmVyeXRoaW5nIHNob3VsZCBhcHBseSBhdCBydW50aW1lXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIlNsb3RcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50KGNvbHVtbkluZm8gYXMgQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiwgdmlldywgb01vZGlmaWVyLCBzVGFibGVJZCk7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUgYXMgVGFibGUpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblx0XHQvLyBmYWxsLWJhY2tcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGxldCBwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eUluZm9zIGFyZSBub3QgZmV0Y2hlZCB5ZXQsIHdlIG5lZWQgdG8gZmV0Y2ggdGhlbVxuXHRcdFx0Ly8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB0YWJsZSBpcyBub3QgY3JlYXRlZCB5ZXRcblx0XHRcdGF3YWl0IHRoaXMuZmV0Y2hQcm9wZXJ0aWVzKHRhYmxlIGFzIE1EQ1RhYmxlKTtcblx0XHRcdHByb3BlcnR5SW5mb3MgPSB0YWJsZUFQSS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3MuZmluZChmdW5jdGlvbiAocHJvcEluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdHJldHVybiBwcm9wSW5mby5uYW1lID09PSBwcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblx0XHRjb25zdCBmblRlbXBsYXRlRnJhZ21lbnQgPSBhc3luYyAoXG5cdFx0XHRvSW5Qcm9wZXJ0eUluZm86IHVua25vd24sXG5cdFx0XHRvVmlldzogRkVWaWV3XG5cdFx0KTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT4gPT4ge1xuXHRcdFx0bGV0IGJEaXNwbGF5TW9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBzVGFibGVUeXBlQ3VzdG9tRGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmcgfCBib29sZWFuPih0YWJsZSwgXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcInRhYmxlVHlwZVwiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcImNyZWF0aW9uTW9kZVwiLCBvTW9kaWZpZXIpXG5cdFx0XHRdKS50aGVuKGFzeW5jIChhQ3VzdG9tRGF0YTogKHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpW10pID0+IHtcblx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYUN1c3RvbURhdGFbMF0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0c1RhYmxlVHlwZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsxXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBSZWFkIE9ubHkgYW5kIENvbHVtbiBFZGl0IE1vZGUgY2FuIGJvdGggaGF2ZSB0aHJlZSBzdGF0ZVxuXHRcdFx0XHQvLyBVbmRlZmluZWQgbWVhbnMgdGhhdCB0aGUgZnJhbWV3b3JrIGRlY2lkZXMgd2hhdCB0byBkb1xuXHRcdFx0XHQvLyBUcnVlIC8gRGlzcGxheSBtZWFucyBhbHdheXMgcmVhZCBvbmx5XG5cdFx0XHRcdC8vIEZhbHNlIC8gRWRpdGFibGUgbWVhbnMgZWRpdGFibGUgYnV0IHdoaWxlIHN0aWxsIHJlc3BlY3RpbmcgdGhlIGxvdyBsZXZlbCBwcmluY2lwbGUgKGltbXV0YWJsZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBlZGl0YWJsZSlcblx0XHRcdFx0aWYgKGJEaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiRGlzcGxheU1vZGUgIT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYkRpc3BsYXlNb2RlID09PSBcInRydWVcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRcdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRcdFx0XHRcdHJlYWRPbmx5OiBiRGlzcGxheU1vZGUsXG5cdFx0XHRcdFx0XHR0YWJsZVR5cGU6IHNUYWJsZVR5cGVDdXN0b21EYXRhLFxuXHRcdFx0XHRcdFx0aWQ6IHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aDogcHJvcGVydHlJbmZvTmFtZSxcblx0XHRcdFx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISksXG5cdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHsgbmFtZTogc0NyZWF0aW9uTW9kZUN1c3RvbURhdGEgfSxcblx0XHRcdFx0XHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyOiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb1RhYmxlQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb1RhYmxlQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkOiBvUHJvcGVydHlDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdFx0XHRcdGNvbHVtbjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvY29sdW1uSW5mb1wiKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHR0aGlzOiBvVGhpcyxcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IHRhYmxlQ29sbGVjdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IG5ldyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKFxuXHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbkVudGl0eTogdGFibGVDb2xsZWN0aW9uLnRhcmdldE9iamVjdCEsIG1ldGFNb2RlbDogb01ldGFNb2RlbCB9LFxuXHRcdFx0XHRcdHRhYmxlQVBJXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkQ29sdW1uWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChnZXRDb2x1bW5UZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0c1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpISxcblx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHQpID8/IFwiXCIpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFwidGV4dC94bWxcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdFx0XHRcdGNvbXB1dGVkQ29sdW1uWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRcdFx0b01vZGlmaWVyXG5cdFx0XHRcdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXHQvKipcblx0ICogUHJvdmlkZSB0aGUgVGFibGUncyBmaWx0ZXIgZGVsZWdhdGUgdG8gcHJvdmlkZSBiYXNpYyBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGFkZGluZyBGaWx0ZXJGaWVsZHMuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBmb3IgdGhlIFRhYmxlcyBmaWx0ZXIgcGVyc29uYWxpemF0aW9uLlxuXHQgKi9cblx0Z2V0RmlsdGVyRGVsZWdhdGU6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMlxuXHRcdFx0fSxcblx0XHRcdEZpbHRlckJhckRlbGVnYXRlLFxuXHRcdFx0e1xuXHRcdFx0XHRhZGRJdGVtOiBhc3luYyBmdW5jdGlvbiAob1BhcmVudENvbnRyb2w6IENvbnRyb2wsIHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5SW5mb05hbWUuaW5kZXhPZihcIlByb3BlcnR5OjpcIikgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIENvcnJlY3QgdGhlIG5hbWUgb2YgY29tcGxleCBwcm9wZXJ0eSBpbmZvIHJlZmVyZW5jZXMuXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlJbmZvTmFtZSA9IHNQcm9wZXJ0eUluZm9OYW1lLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gRmlsdGVyQmFyRGVsZWdhdGUuYWRkSXRlbShvUGFyZW50Q29udHJvbCBhcyBGaWx0ZXJCYXIsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlTWFwIGF0dGFjaGVkIHRvIHRoaXMgZGVsZWdhdGUuXG5cdCAqIEByZXR1cm5zIEFueSBpbnN0YW5jZSBvZiBUeXBlTWFwXG5cdCAqL1xuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3M/LmZpbmQoKG9iaikgPT4ge1xuXHRcdFx0cmV0dXJuIG9iai5uYW1lID09PSBwcm9wZXJ0eTtcblx0XHR9KTtcblx0XHQvKkZvciBhIERhdGUsIERhdGVUaW1lLCBCb29sZWFuIG9yIERlY2ltYWwgcHJvcGVydHksIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCBpbiBleHRlcm5hbCBmb3JtYXQgdXNpbmcgYSBVSTUgdHlwZSBmb3IgdGhlXG5cdCAgICAgICAgZ2l2ZW4gcHJvcGVydHkgcGF0aCB0aGF0IGZvcm1hdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkncyBFRE0gdHlwZSBhbmQgY29uc3RyYWludHMqL1xuXHRcdGNvbnN0IGRhdGFCYXNlVHlwZSA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eUluZm8/LmRhdGFUeXBlKS5iYXNlVHlwZTtcblx0XHRjb25zdCBleHRlcm5hbEZvcm1hdCA9XG5cdFx0XHRkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJCb29sZWFuXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIk51bWVyaWNcIjtcblx0XHRsZXQgdmFsdWU7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHR2YWx1ZSA9IGdldFJlc291cmNlTW9kZWwoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRV9WQUxVRVwiKTtcblx0XHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdFx0fVxuXHRcdGlmIChwcm9wZXJ0eUluZm8/Lm1vZGUpIHtcblx0XHRcdHN3aXRjaCAocHJvcGVydHlJbmZvLm1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8/LnBhdGggPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5wYXRoLCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdHZhbHVlID0gZ2V0UmVzb3VyY2VNb2RlbChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFX1ZBTFVFXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBGQSxNQUFNQSw4QkFBOEIsR0FBRywrQkFBK0I7RUFDdEUsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLGdCQUFnQixHQUFHLGlCQUFpQjtFQUUxQyxlQUFlQyxRQUFRQSxDQUFDQyxLQUFhLEVBQWlCO0lBQ3JELE9BQU8sSUFBSUMsT0FBTyxDQUFRQyxPQUFPLElBQUs7TUFDckNDLFVBQVUsQ0FBQ0QsT0FBTyxFQUFFRixLQUFLLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0VBQ0g7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VB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