@sapui5/sap.fe.macros 1.139.0 → 1.139.4

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 (67) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +1 -1
  4. package/src/sap/fe/macros/Chart.tsx +1 -1
  5. package/src/sap/fe/macros/RichTextEditor.js +1 -2
  6. package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
  7. package/src/sap/fe/macros/ValueHelp.js +4 -28
  8. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  9. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  10. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  11. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  12. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  13. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  14. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  15. package/src/sap/fe/macros/controls/Section.js +3 -2
  16. package/src/sap/fe/macros/controls/Section.ts +2 -1
  17. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  18. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  19. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +8 -8
  20. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +7 -7
  21. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
  22. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
  23. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  24. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  25. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  26. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  27. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  28. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  29. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -3
  30. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +13 -3
  31. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  32. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  33. package/src/sap/fe/macros/form/Form.block.js +6 -2
  34. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  35. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  36. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  37. package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
  38. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
  39. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  40. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  41. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  42. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  43. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
  44. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
  45. package/src/sap/fe/macros/library.js +1 -1
  46. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  47. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  48. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  49. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
  50. package/src/sap/fe/macros/table/Table.js +7 -1
  51. package/src/sap/fe/macros/table/Table.tsx +7 -1
  52. package/src/sap/fe/macros/table/TableAPI.js +8 -1
  53. package/src/sap/fe/macros/table/TableAPI.ts +15 -2
  54. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  55. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  56. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  57. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  58. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
  59. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
  60. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  61. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  62. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  63. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  64. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
  65. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
  66. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  67. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
@@ -1126,9 +1126,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
1126
1126
  }
1127
1127
  checkPersonalizationInChartProperties(personalization, chartBlock);
1128
1128
  chartBlock.visible = chartBlock.chartDefinition.visible;
1129
- let contextPath = chartBlock._context.getPath();
1130
- contextPath = contextPath[contextPath.length - 1] === "/" ? contextPath.slice(0, -1) : contextPath;
1131
- chartBlock.draftSupported = ModelHelper.isDraftSupported(chartBlock._metaModel, contextPath);
1129
+ chartBlock.draftSupported = ModelHelper.isMetaPathDraftSupported(metaContextPath);
1132
1130
  chartBlock._chartType = ChartHelper.formatChartType(chartBlock._chart.ChartType);
1133
1131
  const operationAvailableMap = ChartHelper.getOperationAvailableMap(chartBlock._chart, {
1134
1132
  context: chartBlock._chartContext
@@ -1301,4 +1299,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
1301
1299
  _exports.getMdcChartTemplate = getMdcChartTemplate;
1302
1300
  return _exports;
1303
1301
  }, false);
1304
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZWFzdXJlUm9sZSIsInBlcnNvbmFsaXphdGlvblZhbHVlcyIsImNyZWF0ZUNoYXJ0RGVmaW5pdGlvbiIsImNoYXJ0QmxvY2siLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29udGV4dE9iamVjdFBhdGgiLCJjb250cm9sUGF0aCIsInZpc3VhbGl6YXRpb25QYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInZpc3VhbGl6YXRpb25zIiwiX21ldGFQYXRoQ29udGV4dCIsImdldE9iamVjdCIsIiRUeXBlIiwiVmlzdWFsaXphdGlvbnMiLCJQcmVzZW50YXRpb25WYXJpYW50IiwibGVuZ3RoIiwiY2hlY2tDaGFydEV4aXN0cyIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic29tZSIsInZpc3VhbGl6YXRpb24iLCJpbmNsdWRlcyIsIiRBbm5vdGF0aW9uUGF0aCIsImdldENvbnRlbnRJZCIsIm1hY3JvSWQiLCJnZXRFeHRyYVBhcmFtcyIsImV4dHJhUGFyYW1zIiwiY3VzdG9tQWN0aW9ucyIsImFjdGlvbnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwiYWN0aW9uIiwiaXNBIiwia2V5IiwiZ2V0QWN0aW9uUHJvcGVydGllcyIsInRleHQiLCJwbGFjZW1lbnQiLCJhbmNob3IiLCJtYXAiLCJfIiwiaW5kZXgiLCJhY3QiLCJhY3Rpb25LZXkiLCJjb25jYXQiLCJwcmVzcyIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlZCIsInVuZGVmaW5lZCIsInBvc2l0aW9uIiwibWVudSIsImFjdGlvblByb3BlcnRpZXMiLCJfX25vV3JhcCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZGF0YSIsImNvbnRleHRQYXRoIiwidWlkIiwiYWN0aW9uc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0UHJvcGVydHkiLCJnZXRDaGFydE1lYXN1cmVzIiwiY2hhcnRBbm5vdGF0aW9uUGF0aCIsImNoYXJ0RGVmaW5pdGlvbiIsImFubm90YXRpb25QYXRoIiwic3BsaXQiLCJmaWx0ZXIiLCJpdGVtIiwicG9zIiwiaW5kZXhPZiIsInRvU3RyaW5nIiwicmVwbGFjZUFsbCIsIm9DaGFydCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIl9tZXRhTW9kZWwiLCJfY29udGV4dCIsInRhcmdldE9iamVjdCIsIm1lYXN1cmVzIiwiYW5ub1BhdGgiLCJnZXRQYXRoIiwiY2hhcnRNZWFzdXJlcyIsIk1lYXN1cmVzIiwiY2hhcnREeW5hbWljTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJlbnRpdHlTZXRQYXRoIiwicmVwbGFjZSIsInRyYW5zQWdncmVnYXRpb25zIiwidHJhbnNBZ2ciLCJjdXN0b21BZ2dyZWdhdGlvbnMiLCJjdXN0b21BZ2ciLCJjb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsImNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzIiwiTG9nIiwid2FybmluZyIsImlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlIiwib0NoYXJ0TWVhc3VyZSIsIm9DdXN0b21BZ2dNZWFzdXJlIiwiZ2V0Q3VzdG9tQWdnTWVhc3VyZSIsIkVycm9yIiwiZHluYW1pY01lYXN1cmUiLCJnZXREeW5hbWljTWVhc3VyZXMiLCJjaGFydE1lYXN1cmUiLCJ2YWx1ZSIsImN1c3RvbUFnZ01lYXN1cmUiLCJtZWFzdXJlVHlwZSIsInNldEN1c3RvbUFnZ01lYXN1cmUiLCJzZXRUcmFuc0FnZ01lYXN1cmUiLCJzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzIiwiX2NoYXJ0IiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlc01vZGVsIiwiJCR2YWx1ZUFzUHJvbWlzZSIsIm1lYXN1cmUiLCJlcnJvciIsInJvbGUiLCJsYWJlbCIsInByb3BlcnR5UGF0aCIsInB1c2giLCJ0cmFuc0FnZ01lYXN1cmUiLCJuYW1lIiwiYWdncmVnYXRpb25NZXRob2QiLCJjaGFydER5bmFtaWNNZWFzdXJlIiwiY2hhcnQiLCJhZ2dyZWdhdGVkUHJvcGVydHkiLCJzdGFydHNXaXRoIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiQWdncmVnYXRpb25NZXRob2QiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCIkdGFyZ2V0IiwibWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiX3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZSIsInBhdGgiLCJEeW5hbWljTWVhc3VyZSIsIk1lYXN1cmUiLCJtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50IiwiRGF0YVBvaW50IiwiUm9sZSIsImRhdGFQb2ludCIsInNldE1lYXN1cmVSb2xlIiwic2V0TWVhc3VyZURhdGFQb2ludCIsImNyZWF0ZURhdGFQb2ludFByb3BlcnR5Iiwib0RhdGFQb2ludEFubm8iLCJvRGF0YVBvaW50IiwiVGFyZ2V0VmFsdWUiLCJ0YXJnZXRWYWx1ZSIsIiRQYXRoIiwiRm9yZWNhc3RWYWx1ZSIsImZvcmVDYXN0VmFsdWUiLCJvQ3JpdGljYWxpdHkiLCJDcml0aWNhbGl0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiQ2FsY3VsYXRlZCIsIlN0YXRpYyIsIiRFbnVtTWVtYmVyIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsIm9UaHJlc2hvbGRzIiwiYkNvbnN0YW50IiwiYnVpbGRUaHJlc2hvbGRzIiwiQ29uc3RhbnRUaHJlc2hvbGRzIiwiRHluYW1pY1RocmVzaG9sZHMiLCJjcml0aWNhbGl0eSIsInRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwia2V5cyIsIkltcHJvdmVtZW50RGlyZWN0aW9uIiwiZHluYW1pY1RocmVzaG9sZHMiLCJvbmVTdXBwbGllZCIsInVzZWRNZWFzdXJlcyIsImNvbnN0YW50VGhyZXNob2xkcyIsImluaXRpYWxpc2VUaHJlc2hvbGRzIiwicHJvY2Vzc1RocmVzaG9sZHMiLCJBZ2dyZWdhdGlvbkxldmVscyIsInByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyIsIm9BZ2dyZWdhdGlvbkxldmVsIiwiVmlzaWJsZURpbWVuc2lvbnMiLCJzS2V5IiwicHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzIiwiYWdncmVnYXRpb25MZXZlbCIsImFnZ3JlZ2F0aW9uTGV2ZWxJbmZvIiwidmlzaWJsZURpbWVuc2lvbnMiLCJBZ2dyZWdhdGlvbkxldmVsIiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlIiwiQ2hhcnRIZWxwZXIiLCJmb3JtYXRKU09OVG9TdHJpbmciLCJnZXREZXBlbmRlbnRzIiwiY2hhcnRDb250ZXh0IiwiX2NvbW1hbmRBY3Rpb25zIiwiY29tbWFuZEFjdGlvbiIsImdldEFjdGlvbkNvbW1hbmQiLCJjaGVja1BlcnNvbmFsaXphdGlvbkluQ2hhcnRQcm9wZXJ0aWVzIiwicGVyc29uYWxpemF0aW9uIiwiX3BlcnNvbmFsaXphdGlvbiIsImpvaW4iLCJ2ZXJpZnlWYWxpZFBlcnNvbmFsaXphdGlvbiIsInZhbGlkIiwic3BsaXRBcnJheSIsImFjY2VwdGVkVmFsdWVzIiwiYXJyYXlFbGVtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50TWFuYWdlbWVudCIsImNyZWF0ZVZhcmlhbnRNYW5hZ2VtZW50IiwiX2pzeCIsIlZhcmlhbnRNYW5hZ2VtZW50IiwiaWQiLCJnZW5lcmF0ZSIsIl9ibG9ja0lkIiwiZm9yIiwic2hvd1NldEFzRGVmYXVsdCIsImhlYWRlckxldmVsIiwic2VsZWN0IiwiZXZlbnQiLCJmaXJlVmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsImZpcmVWYXJpYW50U2F2ZWQiLCJnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsInB1c2hBY3Rpb25Db21tYW5kIiwiYWN0aW9uQ29udGV4dCIsImRhdGFGaWVsZCIsImNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwib25FeGVjdXRlQWN0aW9uIiwiZ2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsIm9uRXhlY3V0ZUlCTiIsIkNvbW1vbkhlbHBlciIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsIm9uRXhlY3V0ZU1hbmlmZXN0IiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwiZGF0YUZpZWxkQ29udGV4dCIsImRhdGFGaWVsZEFjdGlvbiIsImdldEFjdGlvbkNvbnRleHQiLCJpc0JvdW5kUGF0aCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJpc0JvdW5kIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJjb250ZXh0IiwiaXNBY3Rpb25FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25FbmFibGVkIiwiJElzQm91bmQiLCJBY3Rpb24iLCJlbmFibGVPblNlbGVjdCIsImlzSUJORW5hYmxlZCIsIlJlcXVpcmVzQ29udGV4dCIsImNvbW1hbmRFbmFibGVkIiwidHlwZSIsImFjdGlvbkNvbW1hbmQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImNvbW1hbmRFeGVjdXRlIiwidmlzaWJsZSIsImdldFZpc2libGUiLCJjb21tYW5kIiwiSXNCb3VuZCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNJbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJwYXJhbXMiLCJjb250ZXh0cyIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJjb250cm9sSWQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJtb2RlbCIsImdldE1vZGVsIiwiZWRpdEZsb3ciLCJpbnZva2VBY3Rpb24iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm5hdmlnYXRlIiwiU2VtYW50aWNPYmplY3QiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJnZXRJdGVtcyIsImRpbWVuc2lvbnMiLCJEaW1lbnNpb25zIiwiZm9ybWF0RGltZW5zaW9ucyIsIl9jaGFydENvbnRleHQiLCJkaW1lbnNpb24iLCJnZXRJdGVtIiwiZm9ybWF0TWVhc3VyZXMiLCJwcmVmaXgiLCJNZGNDaGFydEl0ZW0iLCJwcm9wZXJ0eUtleSIsImdldFRvb2xiYXJBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImdldFNlZ21lbnRlZEJ1dHRvbiIsImlzSW5zaWdodHNFbmFibGVkIiwiZ2V0U3RhbmRhcmRBY3Rpb25zIiwiaXNJbnNpZ2h0c1Zpc2libGUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiY2hpbGRyZW4iLCJCdXR0b24iLCJvbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCIsImxheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJyZW1vdmVNZW51SXRlbXMiLCJjaGFydEFjdGlvbnMiLCJnZXRBY3Rpb24iLCJoYXNPd25Qcm9wZXJ0eSIsImdldEN1c3RvbUFjdGlvbnMiLCJpZHgiLCJzcGxpY2UiLCJhY3Rpb25FbmFibGVkIiwiZ2V0QWN0aW9uVG9vbGJhckFjdGlvbiIsInVuaXR0ZXN0aWQiLCJhcmlhSGFzUG9wdXAiLCJnZXRBY3Rpb25Ub29sYmFyTWVudUFjdGlvbiIsInVzZURlZmF1bHRBY3Rpb25Pbmx5IiwiRGVmYXVsdEFjdGlvbkhhbmRsZXIiLCJnZXRVc2VEZWZhdWx0QWN0aW9uT25seSIsImJ1dHRvbk1vZGUiLCJnZXRCdXR0b25Nb2RlIiwiZGVmYXVsdEFjdGlvbiIsImdyb3VwIiwiZ2V0TWVudUl0ZW1Gcm9tTWVudSIsIm1lbnVJdGVtQWN0aW9uIiwicHJlc3NIYW5kbGVyIiwibm9XcmFwIiwiZnVuY3Rpb25OYW1lIiwic2VsZWN0ZWRDb250ZXh0cyIsIk1lbnVJdGVtIiwicHJvcHMiLCJhTWVudUl0ZW1zIiwiaXNBSU9wZXJhdGlvbiIsImlzTWVudUFJT3BlcmF0aW9uIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIkRvY2siLCJCZWdpbkJvdHRvbSIsImljb24iLCJhaUljb24iLCJNZW51IiwiaXNNZW51SXRlbSIsImdldE5hdmlnYXRpb25BY3Rpb25zIiwiZ2V0QW5ub3RhdGlvbkFjdGlvbnMiLCJtZW51SXRlbXMiLCJtZW51QWN0aW9uIiwiYWN0aW9uT2JqZWN0IiwiZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkIiwiZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoIiwiaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyIsInRvb2xiYXJBY3Rpb24iLCJwcmVzc0V2ZW50IiwiYnVpbGRBY3Rpb24iLCJnZXRBY3Rpb25QcmVzcyIsImFjdGlvblByZXNzIiwiZ2V0Q3VzdG9tQWN0aW9uUHJlc3MiLCJnZXRBY3Rpb25QcmVzc1dpdGhBbm5vdGF0aW9uUGF0aCIsImdldFN0YW5kYXJkQWN0aW9uUHJlc3NXaXRoTm9Db21tYW5kIiwibGF5b3V0SW5mb3JtYXRpb24iLCJhZ2dyZWdhdGlvbk5hbWUiLCJhbGlnbm1lbnQiLCJTZWdtZW50ZWRCdXR0b24iLCJzZWxlY3Rpb25DaGFuZ2UiLCJmaXJlU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsIm1lcmdlIiwiZ2V0UGFyYW1ldGVycyIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJub3RFcXVhbCIsInBhdGhJbk1vZGVsIiwiaXRlbXMiLCJnZXRTZWdtZW50ZWRCdXR0b25JdGVtcyIsInNlZ21lbnRlZEJ1dHRvbkl0ZW1zIiwiaXNEZXNrdG9wIiwiZ2V0U2VnbWVudGVkQnV0dG9uSXRlbSIsInRvb2x0aXAiLCJTZWdtZW50ZWRCdXR0b25JdGVtIiwiZ2V0VmlzdWFsaXphdGlvblBhdGgiLCJtZXRhUGF0aCIsInRlcm0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbiIsImNoYXJ0Vml6IiwiZmluZCIsInZpeiIsImhpZGRlblBhdGhDb250ZXh0IiwiZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb25Gb3JUYWJsZUFjdGlvbnNBbmRJQk4iLCJnZXRDaGFydENvbnZlcnRlckNvbnRleHQiLCJwcm9wZXJ0aWVzIiwib3JpZ2luYWxWaWV3RGF0YSIsImRpYWdub3N0aWNzIiwidmlld0RhdGEiLCJhc3NpZ24iLCJyZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiZGVlcENsb25lIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJyZWxhdGl2ZVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiY29udGV4dExvY2F0aW9uIiwiZW50aXR5U2V0TmFtZSIsInRhcmdldEVudGl0eVNldCIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJzdGFydGluZ0VudGl0eVNldCIsIk1hbmlmZXN0V3JhcHBlciIsImdldENvbnZlcnRlckNvbnRleHQiLCJpbml0aWFsQ29udmVydGVyQ29udGV4dCIsIm1vZGlmeUlkZW50aWZpZXJzIiwiX2FwcGx5SWRUb0NvbnRlbnQiLCJfY29udGVudElkIiwiaW5pdGlhbGlzZSIsIm1ldGFDb250ZXh0UGF0aCIsImdldE1ldGFQYXRoT2JqZWN0IiwiX3Jlc29sdmVkQ29udGV4dFBhdGgiLCJfZ2V0T3duZXIiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwibW9kZWxzIiwibWV0YU1vZGVsIiwiZ2V0Q29udGV4dFBhdGgiLCJ2aWV3Q29uZmlnIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJpc011bHRpVGFicyIsInBhdGhzIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImdldFVpQ2hhcnQiLCJfYmxvY2tBY3Rpb25zIiwiY29sbGVjdGlvbiIsIm5hdmlnYXRpb25QYXRoIiwiYXV0b0JpbmRPbkluaXQiLCJ2aXpQcm9wZXJ0aWVzIiwiZ2V0RmlsdGVyQmFyIiwic2xpY2UiLCJkcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsIl9jaGFydFR5cGUiLCJmb3JtYXRDaGFydFR5cGUiLCJDaGFydFR5cGUiLCJjb21tYW5kQWN0aW9ucyIsInByZXNlbnRhdGlvblBhdGgiLCJjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dCIsIl9zb3J0Q29uZGl0aW9ucyIsImdldFNvcnRDb25kaXRpb25zIiwiYXBwbHlTdXBwb3J0ZWQiLCJjaGFydEFjdGlvbnNDb250ZXh0IiwiQWN0aW9ucyIsInRhcmdldENvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJ0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQiLCJhY3Rpb25zT2JqZWN0IiwiY29udmVydGVkVHlwZXMiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsIl9jdXN0b21EYXRhIiwiZW50aXR5VHlwZSIsInBhcnNlIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsInNlZ21lbnRlZEJ1dHRvbklkIiwibXVsdGlWaWV3cyIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlIiwiY2hhcnRNZWFzdXJlS2V5QW5kUm9sZSIsImlzUGFyYW1ldGVyaXplZEVudGl0eVNldCIsInN1YnN0cmluZyIsImZpbHRlckJhciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldERlbGVnYXRlIiwiY2hhcnREZWxlZ2F0ZSIsInBheWxvYWQiLCJzZWxlY3Rpb25Nb2RlIiwidG9VcHBlckNhc2UiLCJjaGFydENvbnRleHRQYXRoIiwicGFyYW1ldGVycyIsIiQkZ3JvdXBJZCIsImdldEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZ2V0Tm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJBdXRvIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJCZWZvcmVTZWFyY2giLCJ0aXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0IiwiZGVzY3JpcHRpb24iLCJlbmFibGVEZWZhdWx0VGl0bGVBbmREZXNjcmlwdGlvbiIsImVuYWJsZVZlcnRpY2FsUmVzcG9uc2l2ZW5lc3MiLCJnZXRNZGNDaGFydFRlbXBsYXRlIiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsInNocmlua0ZhY3RvciIsIk1kY0NoYXJ0IiwiYmluZGluZyIsImludGVybmFsIiwiY2hhcnRUeXBlIiwic29ydENvbmRpdGlvbnMiLCJoZWFkZXIiLCJUaXRsZSIsImhlYWRlclZpc2libGUiLCJtaW5IZWlnaHQiLCJEZXZpY2UiLCJzeXN0ZW0iLCJwaG9uZSIsImhlaWdodCIsIndpZHRoIiwiaGVhZGVyU3R5bGUiLCJwMTNuTW9kZSIsIm5vRGF0YVRleHQiLCJkZWxlZ2F0ZSIsImN1c3RvbURhdGEiLCJkZXBlbmRlbnRzIiwidmFyaWFudCIsIm5vRGF0YSIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZGNDaGFydFRlbXBsYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGVkUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHsgQW5hbHl0aWNzQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB7IENvcmVBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0Q2hhcnRNZWFzdXJlUm9sZVR5cGUsXG5cdENoYXJ0IGFzIENoYXJ0VHlwZSxcblx0Q3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGUsXG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFQb2ludCxcblx0SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlLFxuXHRMZXZlbFRocmVzaG9sZHNUeXBlLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IE9wZXJhdGlvbkdyb3VwaW5nVHlwZSwgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHtcblx0bm90RXF1YWwsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZyxcblx0dHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YU1vZGVsT2JqZWN0UGF0aEZvckFjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGFpSWNvbixcblx0aXNNZW51QUlPcGVyYXRpb24sXG5cdHR5cGUgQW5ub3RhdGlvbkFjdGlvbixcblx0dHlwZSBCYXNlQWN0aW9uLFxuXHR0eXBlIEN1c3RvbUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0UDEzblR5cGUsIENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxpemF0aW9uQW5kUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0Z2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uLFxuXHRnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQWN0aW9uR3JvdXBcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCB0eXBlIHsgU2VnbWVudGVkQnV0dG9uJFNlbGVjdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uSXRlbSBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uSXRlbVwiO1xuaW1wb3J0IHR5cGUgeyBPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHsgRG9jayB9IGZyb20gXCJzYXAvdWkvY29yZS9Qb3B1cFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50TWFuYWdlbWVudCRTYXZlRXZlbnQsIFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBNZGNDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCBNZGNDaGFydEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvY2hhcnQvSXRlbVwiO1xuaW1wb3J0IFBlcnNpc3RlbmNlUHJvdmlkZXIgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9QZXJzaXN0ZW5jZVByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV4cGFuZFBhdGhUeXBlLCBNZXRhTW9kZWxFbnVtLCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ2hhcnRCbG9jayBmcm9tIFwiLi4vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCBEZWZhdWx0QWN0aW9uSGFuZGxlciBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9EZWZhdWx0QWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gXCIuL0NoYXJ0SGVscGVyXCI7XG5cbmNvbnN0IG1lYXN1cmVSb2xlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXMxXCI6IFwiYXhpczFcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzMlwiOiBcImF4aXMyXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczNcIjogXCJheGlzM1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXM0XCI6IFwiYXhpczRcIlxufTtcbnR5cGUgRXh0ZW5kZWRBY3Rpb25Hcm91cCA9IEFjdGlvbkdyb3VwICYgeyBtZW51Q29udGVudEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBBY3Rpb24+IH07XG50eXBlIENoYXJ0UGF5bG9hZCA9IHtcblx0Y2hhcnRDb250ZXh0UGF0aDogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBvYmplY3Q7XG5cdHNlbGVjdGlvbk1vZGU6IHN0cmluZztcbn07XG50eXBlIENoYXJ0RGVsZWdhdGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0cGF5bG9hZDogQ2hhcnRQYXlsb2FkO1xufTtcbmV4cG9ydCB0eXBlIEFjdGlvbk9yQWN0aW9uR3JvdXAgPSBSZWNvcmQ8c3RyaW5nLCBBY3Rpb24gfCBFeHRlbmRlZEFjdGlvbkdyb3VwPjtcbmV4cG9ydCB0eXBlIEN1c3RvbUFuZEFjdGlvbiA9IEN1c3RvbUFjdGlvbiAmIChBY3Rpb24gfCBBY3Rpb25Hcm91cCk7XG50eXBlIEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHZpc2libGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHVzZURlZmF1bHRBY3Rpb25Pbmx5PzogYm9vbGVhbjtcblx0YnV0dG9uTW9kZT86IHN0cmluZztcblx0ZGVmYXVsdEFjdGlvbj86IHN0cmluZztcblx0YWN0aW9ucz86IEN1c3RvbUFjdGlvbjtcblx0cHJpb3JpdHk/OiBPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eTtcblx0Z3JvdXA/OiBudW1iZXI7XG59O1xuXG5lbnVtIHBlcnNvbmFsaXphdGlvblZhbHVlcyB7XG5cdFNvcnQgPSBcIlNvcnRcIixcblx0VHlwZSA9IFwiVHlwZVwiLFxuXHRJdGVtID0gXCJJdGVtXCIsXG5cdEZpbHRlciA9IFwiRmlsdGVyXCJcbn1cblxuZXhwb3J0IHR5cGUgTWVhc3VyZVR5cGUgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdHJvbGU/OiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcblx0YWdncmVnYXRpb25NZXRob2Q/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+O1xuXHR2YWx1ZT86IHN0cmluZztcblx0ZGF0YVBvaW50Pzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBEaW1lbnNpb25UeXBlID0ge1xuXHRpZD86IHN0cmluZztcblx0a2V5Pzogc3RyaW5nO1xuXHRyb2xlPzogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+O1xuXHR2YWx1ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbW1hbmRBY3Rpb24gPSB7XG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQ7XG5cdG9uRXhlY3V0ZUFjdGlvbjogc3RyaW5nO1xuXHRvbkV4ZWN1dGVJQk4/OiBzdHJpbmc7XG5cdG9uRXhlY3V0ZU1hbmlmZXN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG59O1xuXG50eXBlIFRvb2xCYXJBY3Rpb24gPSB7XG5cdHVuaXR0ZXN0aWQ6IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGFyaWFIYXNQb3B1cD86IHN0cmluZztcblx0cHJlc3M/OiBzdHJpbmc7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHR2aXNpYmxlOiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDdXN0b21EYXRhID0ge1xuXHR0YXJnZXRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRlbnRpdHlTZXQ6IHN0cmluZztcblx0ZW50aXR5VHlwZTogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0bXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IHN0cmluZztcblx0c2VnbWVudGVkQnV0dG9uSWQ6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdGFwcGx5U3VwcG9ydGVkOiBvYmplY3Q7XG5cdHZpelByb3BlcnRpZXM6IG9iamVjdDtcblx0ZHJhZnRTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRtdWx0aVZpZXdzPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBvYmplY3Q7XG5cdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZT86IG9iamVjdDtcblx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZT86IG9iamVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIENoYXJ0Q29udGV4dE9iamVjdFBhdGggPSBDaGFydFR5cGUgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudDtcblxudHlwZSBBY3Rpb25Qcm9wZXJ0aWVzID0ge1xuXHRrZXk6IHN0cmluZztcblx0dGV4dDogc3RyaW5nO1xuXHRfX25vV3JhcDogYm9vbGVhbjtcblx0cHJlc3M6IHN0cmluZyB8IG51bGw7XG5cdHJlcXVpcmVzU2VsZWN0aW9uOiBib29sZWFuO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRwb3NpdGlvbj86IG9iamVjdDtcblx0bWVudT86IHN0cmluZ1tdO1xufTtcblxudHlwZSBUb29sYmFyQWN0aW9uID0gTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFydERlZmluaXRpb24oXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29udHJvbFBhdGg6IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0bGV0IHZpc3VhbGl6YXRpb25QYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGxldCB2aXN1YWxpemF0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW107XG5cdGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5WaXN1YWxpemF0aW9ucztcblx0fSBlbHNlIGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5QcmVzZW50YXRpb25WYXJpYW50Py5WaXN1YWxpemF0aW9ucztcblx0fVxuXHRpZiAodmlzdWFsaXphdGlvbnM/Lmxlbmd0aCAmJiAhY2hlY2tDaGFydEV4aXN0cyh2aXN1YWxpemF0aW9ucywgY29udHJvbFBhdGgpKSB7XG5cdFx0dmlzdWFsaXphdGlvblBhdGggPSBcIlwiO1xuXHR9XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiB2aXN1YWxpemF0aW9uUGF0aCBpcyBtaXNzaW5nIG9yIHZpc3VhbGl6YXRpb25QYXRoIGlzIG5vdCBmb3VuZCBpbiBjb250cm9sIChpbiBjYXNlIG9mIFByZXNlbnRhdGlvblZhcmlhbnQpXG5cdGlmICghdmlzdWFsaXphdGlvblBhdGgpIHtcblx0XHR2aXN1YWxpemF0aW9uUGF0aCA9IGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBjaGFydEJsb2NrLnVzZUNvbmRlbnNlZExheW91dCxcblx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRydWUsXG5cdFx0c2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb246IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gdmlzdWFsaXphdGlvbkRlZmluaXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBjaGVja0NoYXJ0RXhpc3RzKHZpc3VhbGl6YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuIHZpc3VhbGl6YXRpb25zLnNvbWUoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb25QYXRoPy5pbmNsdWRlcyh2aXN1YWxpemF0aW9uLiRBbm5vdGF0aW9uUGF0aCkpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50SWQobWFjcm9JZDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGAke21hY3JvSWR9LWNvbnRlbnRgO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHVzZWQgdG8gZ2V0IGRldGFpbHMgV1JUIGFjdGlvbihzKSBzaG93biBpbiB0aGUgY2hhcnQncyB0b29sYmFyLlxuICogQHBhcmFtIGNoYXJ0QmxvY2sgQ2hhcnQgYmxvY2sgcHJvcGVydGllc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFZpc3VhbGl6YXRpb24gcGF0aFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggYWxsIHRoZSByZXF1aXJlZCBhY3Rpb24ocykgZGV0YWlsc1xuICovXG5mdW5jdGlvbiBnZXRFeHRyYVBhcmFtcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgb2JqZWN0PiB7XG5cdGNvbnN0IGV4dHJhUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblxuXHRpZiAoY2hhcnRCbG9jay5hY3Rpb25zKSB7XG5cdFx0T2JqZWN0LnZhbHVlcyhjaGFydEJsb2NrLmFjdGlvbnMpPy5mb3JFYWNoKChhY3Rpb246IEFjdGlvbiB8IEFjdGlvbkdyb3VwKSA9PiB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxBY3Rpb25Hcm91cD4oXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkFjdGlvbkdyb3VwXCIpKSB7XG5cdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uLmtleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGFjdGlvbi5rZXksXG5cdFx0XHRcdFx0YWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBsYWNlbWVudDogYWN0aW9uLnBsYWNlbWVudCxcblx0XHRcdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YWN0aW9uLmFjdGlvbnMubWFwKChfLCBpbmRleCkgPT4gYWN0aW9uLmtleSArIFwiX01lbnVfXCIgKyBpbmRleClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRhY3Rpb24uYWN0aW9ucz8uZm9yRWFjaCgoYWN0OiBBY3Rpb24sIGluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25LZXkgPSBhY3Rpb24ua2V5LmNvbmNhdChcIl9NZW51X1wiLCBpbmRleCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb25LZXldID0gZ2V0QWN0aW9uUHJvcGVydGllcyhcblx0XHRcdFx0XHRcdGFjdGlvbktleSxcblx0XHRcdFx0XHRcdGFjdC50ZXh0LFxuXHRcdFx0XHRcdFx0YWN0LnByZXNzLFxuXHRcdFx0XHRcdFx0ISFhY3QucmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3QuZW5hYmxlZCA9PT0gbnVsbCB8fCBhY3QuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFjdC5lbmFibGVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5pc0E8QWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uXCIpKSB7XG5cdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uLmtleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGFjdGlvbi5rZXksXG5cdFx0XHRcdFx0YWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uLnByZXNzLFxuXHRcdFx0XHRcdCEhYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID09PSBudWxsIHx8IGFjdGlvbi5lbmFibGVkID09IHVuZGVmaW5lZCA/IHRydWUgOiBhY3Rpb24uZW5hYmxlZCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IGFjdGlvbi5wbGFjZW1lbnQsXG5cdFx0XHRcdFx0XHRhbmNob3I6IGFjdGlvbi5hbmNob3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKHZpc3VhbGl6YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suYWN0aW9ucykge1xuXHRcdGV4dHJhUGFyYW1zW3Zpc3VhbGl6YXRpb25QYXRoXSA9IHtcblx0XHRcdGFjdGlvbnM6IGN1c3RvbUFjdGlvbnNcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGV4dHJhUGFyYW1zO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRrZXk6IHN0cmluZyxcblx0dGV4dDogc3RyaW5nLFxuXHRwcmVzczogc3RyaW5nIHwgbnVsbCxcblx0cmVxdWlyZXNTZWxlY3Rpb246IGJvb2xlYW4sXG5cdGVuYWJsZWQ6IGJvb2xlYW4sXG5cdHBvc2l0aW9uPzogb2JqZWN0LFxuXHRtZW51Pzogc3RyaW5nW11cbik6IEFjdGlvblByb3BlcnRpZXMge1xuXHRjb25zdCBhY3Rpb25Qcm9wZXJ0aWVzOiBBY3Rpb25Qcm9wZXJ0aWVzID0ge1xuXHRcdGtleSxcblx0XHR0ZXh0LFxuXHRcdF9fbm9XcmFwOiB0cnVlLFxuXHRcdHByZXNzLFxuXHRcdHJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdGVuYWJsZWRcblx0fTtcblxuXHRpZiAocG9zaXRpb24pIHtcblx0XHRhY3Rpb25Qcm9wZXJ0aWVzLnBvc2l0aW9uID0gcG9zaXRpb247XG5cdH1cblx0aWYgKG1lbnUpIHtcblx0XHRhY3Rpb25Qcm9wZXJ0aWVzLm1lbnUgPSBtZW51O1xuXHR9XG5cblx0cmV0dXJuIGFjdGlvblByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGE6IG9iamVjdCB8IEJhc2VBY3Rpb25bXSB8IEN1c3RvbUFjdGlvbik6IENvbnRleHQge1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IGAvJHt1aWQoKX1gO1xuXHRjb25zdCBhY3Rpb25zTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdGFjdGlvbnNNb2RlbC5zZXRQcm9wZXJ0eShjb250ZXh0UGF0aCwgZGF0YSk7XG5cdHJldHVybiBhY3Rpb25zTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY29udGV4dFBhdGgpITtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRNZWFzdXJlcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQ29udGV4dCB7XG5cdGNvbnN0IGNoYXJ0QW5ub3RhdGlvblBhdGggPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hbm5vdGF0aW9uUGF0aC5zcGxpdChcIi9cIik7XG5cdC8vIHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBnZXRBYnNvbHV0ZVBhdGggaW4gY29udmVydGVyQ29udGV4dCByZXR1cm5zIFwiL1NhbGVzT3JkZXJNYW5hZ2UvX0l0ZW0vX0l0ZW0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLnYxLkNoYXJ0XCIgYXMgYW5ub3RhdGlvblBhdGhcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjaGFydEFubm90YXRpb25QYXRoXG5cdFx0LmZpbHRlcihmdW5jdGlvbiAoaXRlbTogc3RyaW5nLCBwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGNoYXJ0QW5ub3RhdGlvblBhdGguaW5kZXhPZihpdGVtKSA9PSBwb3M7XG5cdFx0fSlcblx0XHQudG9TdHJpbmcoKVxuXHRcdC5yZXBsYWNlQWxsKFwiLFwiLCBcIi9cIik7XG5cdGNvbnN0IG9DaGFydCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxDaGFydFR5cGU+KFxuXHRcdGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhbm5vdGF0aW9uUGF0aCkhLFxuXHRcdGNoYXJ0QmxvY2suX2NvbnRleHRcblx0KS50YXJnZXRPYmplY3Q7XG5cdGxldCBtZWFzdXJlczogTWVhc3VyZVR5cGVbXSA9IFtdO1xuXHRjb25zdCBhbm5vUGF0aCA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRQYXRoKCk7XG5cdGNvbnN0IGNoYXJ0TWVhc3VyZXMgPSBvQ2hhcnQ/Lk1lYXN1cmVzID8gb0NoYXJ0Lk1lYXN1cmVzIDogW107XG5cdGNvbnN0IGNoYXJ0RHluYW1pY01lYXN1cmVzID0gb0NoYXJ0Py5EeW5hbWljTWVhc3VyZXMgPyBvQ2hhcnQuRHluYW1pY01lYXN1cmVzIDogW107XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBhbm5vUGF0aC5yZXBsYWNlKC9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuKENoYXJ0fFByZXNlbnRhdGlvblZhcmlhbnR8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkuKi8sIFwiXCIpO1xuXHRjb25zdCB0cmFuc0FnZ3JlZ2F0aW9ucyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnRyYW5zQWdnIGFzIFJlY29yZDxzdHJpbmcsIE1lYXN1cmVUeXBlPjtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRpb25zID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY3VzdG9tQWdnIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuXHQvLyBpbnRpbWF0ZSB0aGUgdXNlciBpZiB0aGVyZSBpcyBBZ2dyZWdhdGVQcm9wZXJ0eSBjb25maWd1cmVkIHdpdGggbm8gRHluYW1pY01lYXN1cmVzLCBidXQgdGhlcmUgYXJlIG1lYXN1cmVzIHdpdGggQWdncmVnYXRlZFByb3BlcnRpZXNcblx0aWYgKFxuXHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmXG5cdFx0IWNoYXJ0RHluYW1pY01lYXN1cmVzICYmXG5cdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNUcmFuc0FnZ0luTWVhc3VyZXNcblx0KSB7XG5cdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcIlRoZSB0cmFuc2Zvcm1hdGlvbmFsIGFnZ3JlZ2F0ZSBtZWFzdXJlcyBhcmUgY29uZmlndXJlZCBhcyBDaGFydC5NZWFzdXJlcyBidXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgYXMgQ2hhcnQuRHluYW1pY01lYXN1cmVzIGluc3RlYWQuIFBsZWFzZSBjaGVjayB0aGUgU0FQIEhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgY29ycmVjdCB0aGUgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgaXNDdXN0b21BZ2dyZWdhdGVJc01lYXN1cmUgPSBjaGFydE1lYXN1cmVzLnNvbWUoKG9DaGFydE1lYXN1cmU6IE1lYXN1cmVUeXBlKSA9PiB7XG5cdFx0Y29uc3Qgb0N1c3RvbUFnZ01lYXN1cmUgPSBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9ucywgb0NoYXJ0TWVhc3VyZSk7XG5cdFx0cmV0dXJuICEhb0N1c3RvbUFnZ01lYXN1cmU7XG5cdH0pO1xuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiYgIWNoYXJ0RHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgIWlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIGNvbmZpZ3VyZSBEeW5hbWljTWVhc3VyZXMgZm9yIHRoZSBjaGFydFwiKTtcblx0fVxuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiYgb0NoYXJ0KSB7XG5cdFx0Zm9yIChjb25zdCBkeW5hbWljTWVhc3VyZSBvZiBjaGFydER5bmFtaWNNZWFzdXJlcykge1xuXHRcdFx0bWVhc3VyZXMgPSBnZXREeW5hbWljTWVhc3VyZXMobWVhc3VyZXMsIGR5bmFtaWNNZWFzdXJlLCBlbnRpdHlTZXRQYXRoLCBvQ2hhcnQsIGNoYXJ0QmxvY2spO1xuXHRcdH1cblx0fVxuXHRmb3IgKGNvbnN0IGNoYXJ0TWVhc3VyZSBvZiBjaGFydE1lYXN1cmVzKSB7XG5cdFx0Y29uc3Qga2V5ID0gY2hhcnRNZWFzdXJlLnZhbHVlO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ01lYXN1cmUgPSBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9ucywgY2hhcnRNZWFzdXJlKTtcblx0XHRjb25zdCBtZWFzdXJlVHlwZTogTWVhc3VyZVR5cGUgPSB7fTtcblx0XHRpZiAoY3VzdG9tQWdnTWVhc3VyZSkge1xuXHRcdFx0bWVhc3VyZXMgPSBzZXRDdXN0b21BZ2dNZWFzdXJlKG1lYXN1cmVzLCBtZWFzdXJlVHlwZSwgY3VzdG9tQWdnTWVhc3VyZSwga2V5KTtcblx0XHRcdC8vaWYgdGhlcmUgaXMgbmVpdGhlciBhZ2dyZWdhdGVkUHJvcGVydHkgbm9yIG1lYXN1cmVzIHBvaW50aW5nIHRvIGN1c3RvbUFnZ3JlZ2F0ZXMsIGJ1dCB3ZSBoYXZlIG5vcm1hbCBtZWFzdXJlcy4gTm93IGNoZWNrIGlmIHRoZXNlIG1lYXN1cmVzIGFyZSBwYXJ0IG9mIEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIE9ialxuXHRcdH0gZWxzZSBpZiAoIWNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmIHRyYW5zQWdncmVnYXRpb25zW2tleV0pIHtcblx0XHRcdG1lYXN1cmVzID0gc2V0VHJhbnNBZ2dNZWFzdXJlKG1lYXN1cmVzLCBtZWFzdXJlVHlwZSwgdHJhbnNBZ2dyZWdhdGlvbnMsIGtleSk7XG5cdFx0fVxuXHRcdHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoY2hhcnRCbG9jay5fY2hhcnQuTWVhc3VyZUF0dHJpYnV0ZXMsIGVudGl0eVNldFBhdGgsIG1lYXN1cmVUeXBlLCBjaGFydEJsb2NrKTtcblx0fVxuXHRjb25zdCBtZWFzdXJlc01vZGVsOiBKU09OTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1lYXN1cmVzKTtcblx0KG1lYXN1cmVzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0cmV0dXJuIG1lYXN1cmVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xufVxuXG5mdW5jdGlvbiBzZXRDdXN0b21BZ2dNZWFzdXJlKG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLCBtZWFzdXJlOiBNZWFzdXJlVHlwZSwgY3VzdG9tQWdnTWVhc3VyZTogTWVhc3VyZVR5cGUsIGtleTogc3RyaW5nKTogTWVhc3VyZVR5cGVbXSB7XG5cdGlmIChrZXkuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBNZWFzdXJlOiAke2tleX0gZnJvbSBhbiBhc3NvY2lhdGlvbiBjYW5ub3QgYmUgdXNlZGApO1xuXHR9XG5cdG1lYXN1cmUua2V5ID0gY3VzdG9tQWdnTWVhc3VyZS52YWx1ZTtcblx0bWVhc3VyZS5yb2xlID0gXCJheGlzMVwiO1xuXHRtZWFzdXJlLmxhYmVsID0gY3VzdG9tQWdnTWVhc3VyZS5sYWJlbDtcblx0bWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBjdXN0b21BZ2dNZWFzdXJlLnZhbHVlO1xuXHRtZWFzdXJlcy5wdXNoKG1lYXN1cmUpO1xuXHRyZXR1cm4gbWVhc3VyZXM7XG59XG5cbmZ1bmN0aW9uIHNldFRyYW5zQWdnTWVhc3VyZShcblx0bWVhc3VyZXM6IE1lYXN1cmVUeXBlW10sXG5cdG1lYXN1cmU6IE1lYXN1cmVUeXBlLFxuXHR0cmFuc0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgTWVhc3VyZVR5cGU+LFxuXHRrZXk6IHN0cmluZ1xuKTogTWVhc3VyZVR5cGVbXSB7XG5cdGNvbnN0IHRyYW5zQWdnTWVhc3VyZSA9IHRyYW5zQWdncmVnYXRpb25zW2tleV07XG5cdG1lYXN1cmUua2V5ID0gdHJhbnNBZ2dNZWFzdXJlLm5hbWU7XG5cdG1lYXN1cmUucm9sZSA9IFwiYXhpczFcIjtcblx0bWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBrZXk7XG5cdG1lYXN1cmUuYWdncmVnYXRpb25NZXRob2QgPSB0cmFuc0FnZ01lYXN1cmUuYWdncmVnYXRpb25NZXRob2Q7XG5cdG1lYXN1cmUubGFiZWwgPSB0cmFuc0FnZ01lYXN1cmUubGFiZWwgfHwgbWVhc3VyZS5sYWJlbDtcblx0bWVhc3VyZXMucHVzaChtZWFzdXJlKTtcblx0cmV0dXJuIG1lYXN1cmVzO1xufVxuXG5mdW5jdGlvbiBnZXREeW5hbWljTWVhc3VyZXMoXG5cdG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLFxuXHRjaGFydER5bmFtaWNNZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRjaGFydDogQ2hhcnRUeXBlLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiBNZWFzdXJlVHlwZVtdIHtcblx0Y29uc3Qga2V5ID0gY2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZSB8fCBcIlwiO1xuXHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZW50aXR5U2V0UGF0aCArIGtleSkgYXMgQ29udGV4dCxcblx0XHRjaGFydEJsb2NrLl9jb250ZXh0XG5cdCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoa2V5LmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gTWVhc3VyZTogJHtrZXl9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHQvLyBjaGVjayBpZiB0aGUgYW5ub3RhdGlvbiBwYXRoIGlzIHdyb25nXG5cdH0gZWxzZSBpZiAoIWFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgdGhlIHJpZ2h0IEFubm90YXRpb25QYXRoIHRvIHRoZSBEeW5hbWljIE1lYXN1cmUgJHtjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlfWApO1xuXHRcdC8vIGNoZWNrIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIEBcblx0fSBlbHNlIGlmIChjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlPy5zdGFydHNXaXRoKGBAJHtBbmFseXRpY3NBbm5vdGF0aW9uVGVybXMuQWdncmVnYXRlZFByb3BlcnR5fWApID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgcHJvdmlkZSB0aGUgcmlnaHQgQW5ub3RhdGlvblBhdGggdG8gdGhlIER5bmFtaWMgTWVhc3VyZSAke2NoYXJ0RHluYW1pY01lYXN1cmUudmFsdWV9YCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gY2hlY2sgaWYgQWdncmVnYXRlZFByb3BlcnR5IGlzIGRlZmluZWQgaW4gZ2l2ZW4gRHluYW1pY01lYXN1cmVcblx0XHRjb25zdCBkeW5hbWljTWVhc3VyZTogTWVhc3VyZVR5cGUgPSB7XG5cdFx0XHRrZXk6IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5OYW1lLnRvU3RyaW5nKCksXG5cdFx0XHRyb2xlOiBcImF4aXMxXCJcblx0XHR9O1xuXHRcdGR5bmFtaWNNZWFzdXJlLnByb3BlcnR5UGF0aCA9IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGFibGVQcm9wZXJ0eS52YWx1ZTtcblx0XHRkeW5hbWljTWVhc3VyZS5hZ2dyZWdhdGlvbk1ldGhvZCA9IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGlvbk1ldGhvZC50b1N0cmluZygpO1xuXHRcdGR5bmFtaWNNZWFzdXJlLmxhYmVsID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcoXG5cdFx0XHRhZ2dyZWdhdGVkUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdFx0YWdncmVnYXRlZFByb3BlcnR5LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/XG5cdFx0XHRcdFwiXCJcblx0XHQpO1xuXHRcdHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoY2hhcnQuTWVhc3VyZUF0dHJpYnV0ZXMsIGVudGl0eVNldFBhdGgsIGR5bmFtaWNNZWFzdXJlLCBjaGFydEJsb2NrKTtcblx0XHRtZWFzdXJlcy5wdXNoKGR5bmFtaWNNZWFzdXJlKTtcblx0fVxuXHRyZXR1cm4gbWVhc3VyZXM7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFnZ01lYXN1cmUoY3VzdG9tQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBNZWFzdXJlVHlwZSB8IHVuZGVmaW5lZD4sIG1lYXN1cmU6IE1lYXN1cmVUeXBlKTogTWVhc3VyZVR5cGUgfCBudWxsIHtcblx0aWYgKG1lYXN1cmUudmFsdWUgJiYgY3VzdG9tQWdncmVnYXRpb25zW21lYXN1cmUudmFsdWVdKSB7XG5cdFx0bWVhc3VyZS5sYWJlbCA9IGN1c3RvbUFnZ3JlZ2F0aW9uc1ttZWFzdXJlLnZhbHVlXT8ubGFiZWw7XG5cdFx0cmV0dXJuIG1lYXN1cmU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoXG5cdG1lYXN1cmVBdHRyaWJ1dGVzOiBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlW10sXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0bWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IHZvaWQge1xuXHRpZiAobWVhc3VyZUF0dHJpYnV0ZXM/Lmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgbWVhc3VyZUF0dHJpYnV0ZSBvZiBtZWFzdXJlQXR0cmlidXRlcykge1xuXHRcdFx0X3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZShtZWFzdXJlQXR0cmlidXRlLCBlbnRpdHlTZXRQYXRoLCBtZWFzdXJlLCBjaGFydEJsb2NrKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gX3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZShcblx0bWVhc3VyZUF0dHJpYnV0ZTogQ2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRtZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogdm9pZCB7XG5cdGNvbnN0IHBhdGggPSBtZWFzdXJlQXR0cmlidXRlLkR5bmFtaWNNZWFzdXJlID8gbWVhc3VyZUF0dHJpYnV0ZT8uRHluYW1pY01lYXN1cmU/LnZhbHVlIDogbWVhc3VyZUF0dHJpYnV0ZT8uTWVhc3VyZT8udmFsdWU7XG5cdGNvbnN0IG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQgPSBtZWFzdXJlQXR0cmlidXRlLkRhdGFQb2ludCA/IG1lYXN1cmVBdHRyaWJ1dGU/LkRhdGFQb2ludD8udmFsdWUgOiBudWxsO1xuXHRjb25zdCByb2xlID0gbWVhc3VyZUF0dHJpYnV0ZS5Sb2xlO1xuXHRjb25zdCBkYXRhUG9pbnQ6IERhdGFQb2ludCB8IHVuZGVmaW5lZCA9IG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnRcblx0XHQ/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhUG9pbnQ+KFxuXHRcdFx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZW50aXR5U2V0UGF0aCArIG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQpIGFzIENvbnRleHQsXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2NvbnRleHRcblx0XHQgICkudGFyZ2V0T2JqZWN0XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGlmIChtZWFzdXJlLmtleSA9PT0gcGF0aCkge1xuXHRcdHNldE1lYXN1cmVSb2xlKG1lYXN1cmUsIHJvbGUgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPENoYXJ0TWVhc3VyZVJvbGVUeXBlPik7XG5cdFx0Ly9zdGlsbCB0byBhZGQgZGF0YSBwb2ludCwgYnV0IFVJNSBDaGFydCBBUEkgaXMgbWlzc2luZ1xuXHRcdHNldE1lYXN1cmVEYXRhUG9pbnQobWVhc3VyZSwgZGF0YVBvaW50KTtcblx0fVxufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgZGF0YSBwb2ludCBhcyBhIEpTT04gb2JqZWN0LlxuICogQHBhcmFtIG9EYXRhUG9pbnRBbm5vXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGpzb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURhdGFQb2ludFByb3BlcnR5KG9EYXRhUG9pbnRBbm5vOiBEYXRhUG9pbnQpOiB7XG5cdHRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRmb3JlQ2FzdFZhbHVlPzogc3RyaW5nO1xuXHRjcml0aWNhbGl0eT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufSB7XG5cdGNvbnN0IG9EYXRhUG9pbnQ6IHsgdGFyZ2V0VmFsdWU/OiBzdHJpbmc7IGZvcmVDYXN0VmFsdWU/OiBzdHJpbmc7IGNyaXRpY2FsaXR5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSA9IHt9O1xuXG5cdGlmIChvRGF0YVBvaW50QW5uby5UYXJnZXRWYWx1ZSkge1xuXHRcdG9EYXRhUG9pbnQudGFyZ2V0VmFsdWUgPSBvRGF0YVBvaW50QW5uby5UYXJnZXRWYWx1ZS4kUGF0aDtcblx0fVxuXG5cdGlmIChvRGF0YVBvaW50QW5uby5Gb3JlY2FzdFZhbHVlKSB7XG5cdFx0b0RhdGFQb2ludC5mb3JlQ2FzdFZhbHVlID0gb0RhdGFQb2ludEFubm8uRm9yZWNhc3RWYWx1ZS4kUGF0aDtcblx0fVxuXG5cdGxldCBvQ3JpdGljYWxpdHkgPSBudWxsO1xuXHRpZiAob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkpIHtcblx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkpICYmIG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5LnBhdGgpIHtcblx0XHRcdC8vd2lsbCBiZSBhbiBhZ2dyZWdhdGVkIHByb3BlcnR5IG9yIGN1c3RvbSBhZ2dyZWdhdGVcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0Q2FsY3VsYXRlZDogb0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkucGF0aFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHRTdGF0aWM6IChvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eSBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08Q3JpdGljYWxpdHlUeXBlPikuJEVudW1NZW1iZXIucmVwbGFjZShcblx0XHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZS9cIixcblx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdClcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pIHtcblx0XHRjb25zdCBvVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0gPSB7fTtcblx0XHRjb25zdCBiQ29uc3RhbnQgPSBidWlsZFRocmVzaG9sZHMob1RocmVzaG9sZHMsIG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXG5cdFx0aWYgKGJDb25zdGFudCkge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHRDb25zdGFudFRocmVzaG9sZHM6IG9UaHJlc2hvbGRzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQ3JpdGljYWxpdHkgPSB7XG5cdFx0XHRcdER5bmFtaWNUaHJlc2hvbGRzOiBvVGhyZXNob2xkc1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRpZiAob0NyaXRpY2FsaXR5KSB7XG5cdFx0b0RhdGFQb2ludC5jcml0aWNhbGl0eSA9IG9Dcml0aWNhbGl0eTtcblx0fVxuXG5cdHJldHVybiBvRGF0YVBvaW50O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB0aHJlc2hvbGRzIGFyZSBkeW5hbWljIG9yIGNvbnN0YW50LlxuICogQHBhcmFtIHRocmVzaG9sZHMgVGhlIHRocmVzaG9sZCBza2VsZXRvblxuICogQHBhcmFtIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24gVGhlIFVJLkRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uIGFubm90YXRpb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGhyZXNob2xkIHNob3VsZCBiZSBzdXBwbGllZCBhcyBDb25zdGFudFRocmVzaG9sZHMsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGUgdGhyZXNob2xkIHNob3VsZFxuICogYmUgc3VwcGxpZWQgYXMgRHluYW1pY1RocmVzaG9sZHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVGhyZXNob2xkcyhcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiBib29sZWFuIHtcblx0Y29uc3Qga2V5cyA9IFtcblx0XHRcIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcIixcblx0XHRcIlRvbGVyYW5jZVJhbmdlTG93VmFsdWVcIixcblx0XHRcIlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXCIsXG5cdFx0XCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVwiXG5cdF07XG5cdHRocmVzaG9sZHMuSW1wcm92ZW1lbnREaXJlY3Rpb24gPSAoXG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbi5JbXByb3ZlbWVudERpcmVjdGlvbiBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlPlxuXHQpPy4kRW51bU1lbWJlci5yZXBsYWNlKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL1wiLCBcIlwiKTtcblxuXHRjb25zdCBkeW5hbWljVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IHVzZWRNZWFzdXJlczogdW5rbm93bltdIH0gPSB7XG5cdFx0b25lU3VwcGxpZWQ6IGZhbHNlLFxuXHRcdHVzZWRNZWFzdXJlczogW11cblx0XHQvLyBjb21iaW5hdGlvbiB0byBjaGVjayB3aGV0aGVyIGF0IGxlYXN0IG9uZSBpcyBzdXBwbGllZFxuXHR9O1xuXHRjb25zdCBjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuXHRcdG9uZVN1cHBsaWVkOiBmYWxzZVxuXHRcdC8vIGNvbWJpbmF0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYXQgbGVhc3Qgb25lIGlzIHN1cHBsaWVkXG5cdH07XG5cblx0aW5pdGlhbGlzZVRocmVzaG9sZHMoa2V5cywgZHluYW1pY1RocmVzaG9sZHMsIGNvbnN0YW50VGhyZXNob2xkcywgY3JpdGljYWxpdHlDYWxjdWxhdGlvbik7XG5cdHByb2Nlc3NUaHJlc2hvbGRzKGtleXMsIHRocmVzaG9sZHMsIGR5bmFtaWNUaHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXG5cdHJldHVybiAhZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQ7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2VUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0ZHluYW1pY1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyB1c2VkTWVhc3VyZXM6IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkeW5hbWljVGhyZXNob2xkc1trZXldID0gY3JpdGljYWxpdHlDYWxjdWxhdGlvbltrZXkgYXMga2V5b2YgQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVdXG5cdFx0XHQ/IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXS4kUGF0aFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0ZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQgPSBkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCB8fCBkeW5hbWljVGhyZXNob2xkc1trZXldO1xuXG5cdFx0aWYgKCFkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCkge1xuXHRcdFx0Ly8gb25seSBjb25zaWRlciBpbiBjYXNlIG5vIGR5bmFtaWMgdGhyZXNob2xkIGlzIHN1cHBsaWVkXG5cdFx0XHRjb25zdGFudFRocmVzaG9sZHNba2V5XSA9IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXTtcblx0XHRcdGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCA9IGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCB8fCBjb25zdGFudFRocmVzaG9sZHNba2V5XTtcblx0XHR9IGVsc2UgaWYgKGR5bmFtaWNUaHJlc2hvbGRzW2tleV0pIHtcblx0XHRcdGR5bmFtaWNUaHJlc2hvbGRzLnVzZWRNZWFzdXJlcy5wdXNoKGR5bmFtaWNUaHJlc2hvbGRzW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRkeW5hbWljVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IHVzZWRNZWFzdXJlczogdW5rbm93bltdIH0sXG5cdGNvbnN0YW50VGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiB2b2lkIHtcblx0Ly8gZHluYW1pYyBkZWZpbml0aW9uIHNoYWxsIG92ZXJydWxlIGNvbnN0YW50IGRlZmluaXRpb25cblx0aWYgKGR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0aWYgKGR5bmFtaWNUaHJlc2hvbGRzW2tleV0pIHtcblx0XHRcdFx0dGhyZXNob2xkc1trZXldID0gZHluYW1pY1RocmVzaG9sZHNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyZXNob2xkcy51c2VkTWVhc3VyZXMgPSBkeW5hbWljVGhyZXNob2xkcy51c2VkTWVhc3VyZXM7XG5cdH0gZWxzZSB7XG5cdFx0dGhyZXNob2xkcy5BZ2dyZWdhdGlvbkxldmVscyA9IFtdO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyhrZXlzLCB0aHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdGxldCBvQWdncmVnYXRpb25MZXZlbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0Ly8gY2hlY2sgaWYgYXQgbGVhc3Qgb25lIHN0YXRpYyB2YWx1ZSBpcyBzdXBwbGllZFxuXHRpZiAoY29uc3RhbnRUaHJlc2hvbGRzLm9uZVN1cHBsaWVkKSB7XG5cdFx0Ly8gYWRkIG9uZSBlbnRyeSBpbiB0aGUgYWdncmVnYXRpb24gbGV2ZWxcblx0XHRvQWdncmVnYXRpb25MZXZlbCA9IHtcblx0XHRcdFZpc2libGVEaW1lbnNpb25zOiBudWxsXG5cdFx0fTtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBvZiBrZXlzKSB7XG5cdFx0XHRpZiAoY29uc3RhbnRUaHJlc2hvbGRzW3NLZXldKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkxldmVsW3NLZXldID0gY29uc3RhbnRUaHJlc2hvbGRzW3NLZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHM/LnB1c2gob0FnZ3JlZ2F0aW9uTGV2ZWwpO1xuXHR9XG5cblx0cHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzKGtleXMsIHRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24sIG9BZ2dyZWdhdGlvbkxldmVsKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlLFxuXHRhZ2dyZWdhdGlvbkxldmVsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCB7XG5cdGlmIChjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcyAmJiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGlvbkxldmVsSW5mbyBvZiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcykge1xuXHRcdFx0Y29uc3QgdmlzaWJsZURpbWVuc2lvbnM6IHN0cmluZ1tdIHwgbnVsbCA9IGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwgPyBbXSA6IG51bGw7XG5cblx0XHRcdGlmICh2aXNpYmxlRGltZW5zaW9ucyAmJiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsICYmIGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3BlcnR5UGF0aCBvZiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsKSB7XG5cdFx0XHRcdFx0dmlzaWJsZURpbWVuc2lvbnMucHVzaCgocHJvcGVydHlQYXRoIGFzIHVua25vd24gYXMgRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPikuJFByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YWdncmVnYXRpb25MZXZlbCA9IHtcblx0XHRcdFx0VmlzaWJsZURpbWVuc2lvbnM6IHZpc2libGVEaW1lbnNpb25zXG5cdFx0XHR9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYWdncmVnYXRpb25MZXZlbEluZm9ba2V5IGFzIHVua25vd24gYXMga2V5b2YgTGV2ZWxUaHJlc2hvbGRzVHlwZV07XG5cdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTGV2ZWxba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHM/LnB1c2goYWdncmVnYXRpb25MZXZlbCk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldE1lYXN1cmVEYXRhUG9pbnQobWVhc3VyZTogTWVhc3VyZVR5cGUsIGRhdGFQb2ludDogRGF0YVBvaW50IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGlmIChkYXRhUG9pbnQgJiYgZGF0YVBvaW50LlZhbHVlLiRQYXRoID09IG1lYXN1cmUua2V5KSB7XG5cdFx0bWVhc3VyZS5kYXRhUG9pbnQgPSBDaGFydEhlbHBlci5mb3JtYXRKU09OVG9TdHJpbmcoY3JlYXRlRGF0YVBvaW50UHJvcGVydHkoZGF0YVBvaW50KSkgfHwgXCJcIjtcblx0fVxufVxuXG5mdW5jdGlvbiBzZXRNZWFzdXJlUm9sZShtZWFzdXJlOiBNZWFzdXJlVHlwZSwgcm9sZTogTWV0YU1vZGVsRW51bTxDaGFydE1lYXN1cmVSb2xlVHlwZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0aWYgKHJvbGUgIT0gbnVsbCkge1xuXHRcdGNvbnN0IGluZGV4ID0gcm9sZS4kRW51bU1lbWJlcjtcblx0XHRtZWFzdXJlLnJvbGUgPSBtZWFzdXJlUm9sZVtpbmRleF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyhjaGFydEJsb2NrOiBDaGFydEJsb2NrLCBjaGFydENvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdGlmIChjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zLm1hcCgoY29tbWFuZEFjdGlvbjogQ29tbWFuZEFjdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGdldEFjdGlvbkNvbW1hbmQoY29tbWFuZEFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHBlcnNvbmFsaXphdGlvbiBTcGVjaWZpZXMgdGhlIGNoYXJ0IHBlcnNvbmFsaXphdGlvblxuICovXG5cbmZ1bmN0aW9uIGNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMocGVyc29uYWxpemF0aW9uOiBDaGFydFAxM25UeXBlLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogdm9pZCB7XG5cdGlmIChwZXJzb25hbGl6YXRpb24pIHtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSBcImZhbHNlXCIgfHwgKHBlcnNvbmFsaXphdGlvbiBhcyBib29sZWFuKSA9PT0gZmFsc2UpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gXCJ0cnVlXCIgfHwgKHBlcnNvbmFsaXphdGlvbiBhcyBib29sZWFuKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpLmpvaW4oXCIsXCIpO1xuXHRcdH0gZWxzZSBpZiAodmVyaWZ5VmFsaWRQZXJzb25hbGl6YXRpb24ocGVyc29uYWxpemF0aW9uIGFzIHN0cmluZykgPT09IHRydWUpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHBlcnNvbmFsaXphdGlvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gcGVyc29uYWxpemF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgcGVyc29uYWxpemF0aW9uIGlzIHZhbGlkIG9yIG5vdCB2YWxpZFxuICovXG5mdW5jdGlvbiB2ZXJpZnlWYWxpZFBlcnNvbmFsaXphdGlvbihwZXJzb25hbGl6YXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgdmFsaWQgPSB0cnVlO1xuXHRjb25zdCBzcGxpdEFycmF5ID0gcGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgYWNjZXB0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpO1xuXHRzcGxpdEFycmF5LmZvckVhY2goKGFycmF5RWxlbWVudCkgPT4ge1xuXHRcdGlmICghYWNjZXB0ZWRWYWx1ZXMuaW5jbHVkZXMoYXJyYXlFbGVtZW50KSkge1xuXHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdmFsaWQ7XG59XG5cbmZ1bmN0aW9uIGdldFZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IGNoYXJ0QmxvY2sudmFyaWFudE1hbmFnZW1lbnQgPyBjaGFydEJsb2NrLnZhcmlhbnRNYW5hZ2VtZW50IDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24udmFyaWFudE1hbmFnZW1lbnQ7XG5cdHJldHVybiBjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbiA9PT0gdW5kZWZpbmVkID8gXCJOb25lXCIgOiB2YXJpYW50TWFuYWdlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB7XG5cdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uO1xuXHRpZiAocGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBnZXRWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiVk1cIl0pfVxuXHRcdFx0XHRcdGZvcj17W2NoYXJ0QmxvY2suX2Jsb2NrSWQhXX1cblx0XHRcdFx0XHRzaG93U2V0QXNEZWZhdWx0PXt0cnVlfVxuXHRcdFx0XHRcdGhlYWRlckxldmVsPXtjaGFydEJsb2NrLmhlYWRlckxldmVsfVxuXHRcdFx0XHRcdHNlbGVjdD17KGV2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y2hhcnRCbG9jay5maXJlVmFyaWFudFNlbGVjdGVkPy4oZXZlbnQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0c2F2ZT17KGV2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTYXZlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVZhcmlhbnRTYXZlZD8uKGV2ZW50KTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIk5vbmVcIiB8fCB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fSBlbHNlIGlmICghcGVyc29uYWxpemF0aW9uKSB7XG5cdFx0TG9nLndhcm5pbmcoXCJWYXJpYW50IE1hbmFnZW1lbnQgY2Fubm90IGJlIGVuYWJsZWQgd2hlbiBwZXJzb25hbGl6YXRpb24gaXMgZGlzYWJsZWRcIik7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldFBlcnNpc3RlbmNlUHJvdmlkZXIoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFBlcnNpc3RlbmNlUHJvdmlkZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoZ2V0VmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jaykgPT09IFwiTm9uZVwiKSB7XG5cdFx0cmV0dXJuIDxQZXJzaXN0ZW5jZVByb3ZpZGVyIGlkPXtnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJQZXJzaXN0ZW5jZVByb3ZpZGVyXCJdKX0gZm9yPXtjaGFydEJsb2NrLl9ibG9ja0lkfSAvPjtcblx0fVxufVxuXG5mdW5jdGlvbiBwdXNoQWN0aW9uQ29tbWFuZChcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0ZGF0YUZpZWxkOiAoTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+ICYgeyBJbnZvY2F0aW9uR3JvdXBpbmc6IE1ldGFNb2RlbEVudW08T3BlcmF0aW9uR3JvdXBpbmdUeXBlPiB9KSB8IHVuZGVmaW5lZCxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiB2b2lkIHtcblx0aWYgKGRhdGFGaWVsZCkge1xuXHRcdGNvbnN0IGNvbW1hbmRBY3Rpb24gPSB7XG5cdFx0XHRhY3Rpb25Db250ZXh0OiBhY3Rpb25Db250ZXh0LFxuXHRcdFx0b25FeGVjdXRlQWN0aW9uOiBDaGFydEhlbHBlci5nZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uKFxuXHRcdFx0XHRjaGFydEJsb2NrLl9ibG9ja0lkISxcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcIlwiXG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKFxuXHRcdFx0XHRkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdGBcXCR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31gLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KSxcblx0XHRcdG9uRXhlY3V0ZU1hbmlmZXN0OiBDb21tb25IZWxwZXIuYnVpbGRBY3Rpb25XcmFwcGVyKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIGNoYXJ0QmxvY2spLFxuXHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXBcblx0XHR9O1xuXHRcdGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zLnB1c2goY29tbWFuZEFjdGlvbik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChjb21tYW5kQWN0aW9uOiBDb21tYW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCBhY3Rpb24gPSBjb21tYW5kQWN0aW9uLmFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGggJiYgY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCk7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQgJiYgZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb24pO1xuXHRjb25zdCBpc0JvdW5kUGF0aCA9IENvbW1vbkhlbHBlci5nZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkKGRhdGFGaWVsZEFjdGlvbik7XG5cdGNvbnN0IGlzQm91bmQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoaXNCb3VuZFBhdGgpIS5nZXRPYmplY3QoKTtcblx0Y29uc3QgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgPSBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShcblx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRjb250ZXh0OiBjaGFydENvbnRleHRcblx0XHR9KVxuXHQpO1xuXHRjb25zdCBpc0FjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZFxuXHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHQ6IENoYXJ0SGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uRW5hYmxlZChcblx0XHRcdFx0aXNCb3VuZCAmJiBpc0JvdW5kLiRJc0JvdW5kLFxuXHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRjaGFydEJsb2NrLl9jb250ZXh0LFxuXHRcdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcIlwiLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QgfHwgXCJcIlxuXHRcdCAgKTtcblx0bGV0IGlzSUJORW5hYmxlZDtcblx0aWYgKGFjdGlvbi5lbmFibGVkKSB7XG5cdFx0aXNJQk5FbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdGlzSUJORW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblxuXHRsZXQgY29tbWFuZEVuYWJsZWQ6IGJvb2xlYW47XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGlzQWN0aW9uRW5hYmxlZCA/PyBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGlzSUJORW5hYmxlZCA/PyBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25Db21tYW5kID0gKFxuXHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRleGVjdXRlPXsoZXZlbnQ6IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50KTogdm9pZCA9PlxuXHRcdFx0XHRjb21tYW5kRXhlY3V0ZShldmVudCwgYWN0aW9uLCBjaGFydEJsb2NrLl9ibG9ja0lkISwgY29tbWFuZEFjdGlvbi5jaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCEsIGRhdGFGaWVsZClcblx0XHRcdH1cblx0XHRcdGVuYWJsZWQ9e2NvbW1hbmRFbmFibGVkfVxuXHRcdFx0dmlzaWJsZT17KGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dCwgY2hhcnRCbG9jaykgYXMgYm9vbGVhbikgPz8gYWN0aW9uLnZpc2libGV9XG5cdFx0XHRjb21tYW5kPXthY3Rpb24uY29tbWFuZH1cblx0XHQvPlxuXHQpO1xuXG5cdGlmIChcblx0XHRhY3Rpb24udHlwZSA9PSBcIkZvckFjdGlvblwiICYmXG5cdFx0KCFpc0JvdW5kIHx8XG5cdFx0XHRpc0JvdW5kLklzQm91bmQgIT09IHRydWUgfHxcblx0XHRcdChhY3Rpb25Db250ZXh0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2BAJHtDb3JlQW5ub3RhdGlvblRlcm1zLk9wZXJhdGlvbkF2YWlsYWJsZX1gXSAhPT0gZmFsc2UpXG5cdCkge1xuXHRcdHJldHVybiBhY3Rpb25Db21tYW5kO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09IFwiRm9yQWN0aW9uXCIpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29tbWFuZDtcblx0fVxufVxuXG5mdW5jdGlvbiBjb21tYW5kRXhlY3V0ZShcblx0ZXZlbnQ6IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50LFxuXHRhY3Rpb246IHsgSW52b2NhdGlvbkdyb3VwaW5nOiB7ICRFbnVtTWVtYmVyOiBzdHJpbmcgfTsgYWN0aW9uOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaGFuZGxlck1vZHVsZTogc3RyaW5nOyBoYW5kbGVyTWV0aG9kOiBzdHJpbmcgfSxcblx0aWQ6IHN0cmluZyxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbik6IHZvaWQge1xuXHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhldmVudC5nZXRTb3VyY2UoKSk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3Py5nZXRDb250cm9sbGVyKCk7XG5cblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJGb3JBY3Rpb25cIjpcblx0XHRcdGNvbnN0IHNJbnZvY2F0aW9uR3JvdXBpbmcgPVxuXHRcdFx0XHRhY3Rpb24uSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRcdGFjdGlvbi5JbnZvY2F0aW9uR3JvdXBpbmcuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0OiBcIklzb2xhdGVkXCI7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdGNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSxcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBzSW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRjb250cm9sSWQ6IGlkLFxuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZ1xuXHRcdFx0fTtcblx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nLCBwYXJhbXMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0fTtcblx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZykge1xuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeSgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZyk7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0SXRlbXMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0KSB7XG5cdFx0Y29uc3QgZGltZW5zaW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBtZWFzdXJlczogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAoY2hhcnRCbG9jay5fY2hhcnQuRGltZW5zaW9ucykge1xuXHRcdFx0Q2hhcnRIZWxwZXIuZm9ybWF0RGltZW5zaW9ucyhjaGFydEJsb2NrLl9jaGFydENvbnRleHQpXG5cdFx0XHRcdC5nZXRPYmplY3QoKVxuXHRcdFx0XHQuZm9yRWFjaCgoZGltZW5zaW9uOiBEaW1lbnNpb25UeXBlKSA9PiB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uLmlkID0gZ2VuZXJhdGUoW2NoYXJ0QmxvY2suaWQsIFwiZGltZW5zaW9uXCIsIGRpbWVuc2lvbi5rZXldKTtcblx0XHRcdFx0XHRkaW1lbnNpb25zLnB1c2goXG5cdFx0XHRcdFx0XHRnZXRJdGVtKFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aWQ6IGRpbWVuc2lvbi5pZCxcblx0XHRcdFx0XHRcdFx0XHRrZXk6IGRpbWVuc2lvbi5rZXksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGRpbWVuc2lvbi5sYWJlbCxcblx0XHRcdFx0XHRcdFx0XHRyb2xlOiBkaW1lbnNpb24ucm9sZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcIl9mZV9ncm91cGFibGVfXCIsXG5cdFx0XHRcdFx0XHRcdFwiZ3JvdXBhYmxlXCJcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGNoYXJ0QmxvY2subWVhc3VyZXMpIHtcblx0XHRcdENoYXJ0SGVscGVyLmZvcm1hdE1lYXN1cmVzKGNoYXJ0QmxvY2subWVhc3VyZXMpLmZvckVhY2goKG1lYXN1cmU6IE1lYXN1cmVUeXBlKSA9PiB7XG5cdFx0XHRcdG1lYXN1cmUuaWQgPSBnZW5lcmF0ZShbY2hhcnRCbG9jay5pZCwgXCJtZWFzdXJlXCIsIG1lYXN1cmUua2V5XSk7XG5cdFx0XHRcdG1lYXN1cmVzLnB1c2goXG5cdFx0XHRcdFx0Z2V0SXRlbShcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWQ6IG1lYXN1cmUuaWQsXG5cdFx0XHRcdFx0XHRcdGtleTogbWVhc3VyZS5rZXksXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBtZWFzdXJlLmxhYmVsLFxuXHRcdFx0XHRcdFx0XHRyb2xlOiBtZWFzdXJlLnJvbGVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcIl9mZV9hZ2dyZWdhdGFibGVfXCIsXG5cdFx0XHRcdFx0XHRcImFnZ3JlZ2F0YWJsZVwiXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChkaW1lbnNpb25zLmxlbmd0aCAmJiBtZWFzdXJlcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBkaW1lbnNpb25zLmNvbmNhdChtZWFzdXJlcyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGl0ZW06IE1lYXN1cmVUeXBlIHwgRGltZW5zaW9uVHlwZSwgcHJlZml4OiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiAoXG5cdFx0PE1kY0NoYXJ0SXRlbVxuXHRcdFx0aWQ9e2l0ZW0uaWR9XG5cdFx0XHRwcm9wZXJ0eUtleT17cHJlZml4ICsgaXRlbS5rZXl9XG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0bGFiZWw9e3Jlc29sdmVCaW5kaW5nU3RyaW5nKGl0ZW0ubGFiZWwgYXMgc3RyaW5nLCBcInN0cmluZ1wiKX1cblx0XHRcdHJvbGU9e2l0ZW0ucm9sZX1cblx0XHQvPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRUb29sYmFyQWN0aW9ucyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbltdIHtcblx0Y29uc3QgYWN0aW9ucyA9IGdldEFjdGlvbnMoY2hhcnRCbG9jayk7XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKSB7XG5cdFx0YWN0aW9ucy5wdXNoKGdldFNlZ21lbnRlZEJ1dHRvbihjaGFydEJsb2NrKSk7XG5cdH1cblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmlzSW5zaWdodHNFbmFibGVkKSB7XG5cdFx0YWN0aW9ucy5wdXNoKFxuXHRcdFx0Z2V0U3RhbmRhcmRBY3Rpb25zKFxuXHRcdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc0luc2lnaHRzRW5hYmxlZCxcblx0XHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNJbnNpZ2h0c1Zpc2libGUsXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQhLFxuXHRcdFx0XHRjaGFydEJsb2NrXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRpZiAoYWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbnMoXG5cdGlzSW5zaWdodHNFbmFibGVkOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlzSW5zaWdodHNWaXNpYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlkOiBzdHJpbmcsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gdmlzaWJsZT17aXNJbnNpZ2h0c1Zpc2libGV9PlxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2lkLCBcIlN0YW5kYXJkQWN0aW9uOjpJbnNpZ2h0c1wiXSl9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSU5TSUdIVFNfQ0FSRH1cIlxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNoYXJ0QmxvY2sub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17aXNJbnNpZ2h0c0VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9XCJBbHdheXNPdmVyZmxvd1wiIC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvbnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFRvb2xiYXJBY3Rpb25bXSB7XG5cdGNvbnN0IGFjdGlvbnMgPSByZW1vdmVNZW51SXRlbXMoY2hhcnRCbG9jay5jaGFydEFjdGlvbnMgPz8gW10pO1xuXHRyZXR1cm4gYWN0aW9ucy5tYXAoKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24uYW5ub3RhdGlvblBhdGggfHwgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIiAmJiAhYWN0aW9uLmlkPy5zdGFydHNXaXRoKFwiQ3VzdG9tQWN0aW9uXCIpKSkge1xuXHRcdFx0Ly8gTG9hZCBhbm5vdGF0aW9uIGJhc2VkIGFjdGlvbnNcblx0XHRcdHJldHVybiBnZXRBY3Rpb24oYWN0aW9uLCBjaGFydEJsb2NrLl9jaGFydENvbnRleHQsIGZhbHNlLCBjaGFydEJsb2NrKTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdFx0Ly8gTG9hZCBYTUwgb3IgbWFuaWZlc3QgYmFzZWQgYWN0aW9ucyAvIGFjdGlvbiBncm91cHNcblx0XHRcdHJldHVybiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbiBhcyBDdXN0b21BbmRBY3Rpb24sIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVudUl0ZW1zKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSB7XG5cdC8vIElmIGFjdGlvbiBpcyBhbHJlYWR5IHBhcnQgb2YgbWVudSBpbiBhY3Rpb24gZ3JvdXAsIHRoZW4gaXQgd2lsbFxuXHQvLyBiZSByZW1vdmVkIGZyb20gdGhlIG1haW4gYWN0aW9ucyBsaXN0XG5cdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRpZiAoYWN0aW9uLm1lbnUpIHtcblx0XHRcdGFjdGlvbi5tZW51LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gYWN0aW9ucy5tYXAoKGFjdCkgPT4gYWN0LmtleSkuaW5kZXhPZihpdGVtLmtleSk7XG5cdFx0XHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRcdFx0YWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbjogQ3VzdG9tQW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IGFjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA/PyBmYWxzZSkgJiYgYWN0aW9uLmVuYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0YWN0aW9uRW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdC8vIExvYWQgWE1MIG9yIG1hbmlmZXN0IGJhc2VkIHRvb2xiYXIgYWN0aW9uc1xuXHRcdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR1bml0dGVzdGlkOiBcIkRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkFjdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogYWN0aW9uLnRleHQgPyBhY3Rpb24udGV4dCA6IFwiXCIsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcmVzczogYWN0aW9uLnByZXNzID8gYWN0aW9uLnByZXNzIDogXCJcIixcblx0XHRcdFx0ZW5hYmxlZDogYWN0aW9uRW5hYmxlZCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZSA6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRjaGFydEJsb2NrXG5cdFx0KTtcblx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIpIHtcblx0XHQvLyBMb2FkIGFjdGlvbiBncm91cHMgKE1lbnUpXG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUsXG5cdFx0XHRcdGVuYWJsZWQ6IGFjdGlvbkVuYWJsZWQsXG5cdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5OiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRVc2VEZWZhdWx0QWN0aW9uT25seShhY3Rpb24pLFxuXHRcdFx0XHRidXR0b25Nb2RlOiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRCdXR0b25Nb2RlKGFjdGlvbiksXG5cdFx0XHRcdGRlZmF1bHRBY3Rpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0YWN0aW9uczogYWN0aW9uLFxuXHRcdFx0XHRwcmlvcml0eTogYWN0aW9uLnByaW9yaXR5LFxuXHRcdFx0XHRncm91cDogYWN0aW9uLmdyb3VwXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnRDb250ZXh0LFxuXHRcdFx0Y2hhcnRCbG9ja1xuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gcm9tTWVudShtZW51SXRlbUFjdGlvbjogQ3VzdG9tQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IHByZXNzSGFuZGxlcjogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH07XG5cdGlmIChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdC8vQW5ub3RhdGlvbiBiYXNlZCBhY3Rpb24gaXMgcGFzc2VkIGFzIG1lbnUgaXRlbSBmb3IgbWVudSBidXR0b25cblx0XHRyZXR1cm4gZ2V0QWN0aW9uKG1lbnVJdGVtQWN0aW9uLCBjaGFydENvbnRleHQsIHRydWUsIGNoYXJ0QmxvY2spO1xuXHR9XG5cdGlmIChtZW51SXRlbUFjdGlvbi5jb21tYW5kKSB7XG5cdFx0cHJlc3NIYW5kbGVyID0geyBcImpzeDpjb21tYW5kXCI6IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0fSBlbHNlIGlmIChtZW51SXRlbUFjdGlvbi5ub1dyYXAgPz8gZmFsc2UpIHtcblx0XHRwcmVzc0hhbmRsZXIgPSB7XG5cdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmdW5jdGlvbk5hbWUgPSBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kPy5zcGxpdChcIi5cIilbMV0gYXMgc3RyaW5nO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0XHRbdGVtcDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXJbZnVuY3Rpb25OYW1lXSkgY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHByZXNzSGFuZGxlciA9IHtcblx0XHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKVxuXHRcdFx0XHRcdC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpXG5cdFx0XHRcdFx0Py5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIik7XG5cdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTW9kdWxlLCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kLCB7IGNvbnRleHRzOiBzZWxlY3RlZENvbnRleHRzIH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e21lbnVJdGVtQWN0aW9uLnRleHR9IHsuLi5wcmVzc0hhbmRsZXJ9IHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9IGVuYWJsZWQ9e21lbnVJdGVtQWN0aW9uLmVuYWJsZWR9IC8+O1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Ub29sYmFyTWVudUFjdGlvbihcblx0cHJvcHM6IEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uLFxuXHRjaGFydENvbnRleHQ6IENvbnRleHQsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGFNZW51SXRlbXMgPSAocHJvcHMuYWN0aW9ucz8ubWVudSBhcyBDdXN0b21BY3Rpb25bXSkubWFwKChhY3Rpb246IEN1c3RvbUFjdGlvbikgPT4ge1xuXHRcdHJldHVybiBnZXRNZW51SXRlbUZyb21NZW51KGFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0fSk7XG5cdGNvbnN0IGlzQUlPcGVyYXRpb24gPSBpc01lbnVBSU9wZXJhdGlvbihwcm9wcy5hY3Rpb25zPy5tZW51IGFzIEN1c3RvbUFjdGlvbltdKTtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3Byb3BzLnRleHR9XG5cdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdGlkPXtwcm9wcy5pZH1cblx0XHRcdFx0dmlzaWJsZT17cHJvcHMudmlzaWJsZX1cblx0XHRcdFx0ZW5hYmxlZD17cHJvcHMuZW5hYmxlZH1cblx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk9e3Byb3BzLnVzZURlZmF1bHRBY3Rpb25Pbmx5fVxuXHRcdFx0XHRidXR0b25Nb2RlPXtwcm9wcy5idXR0b25Nb2RlfVxuXHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdGRlZmF1bHRBY3Rpb249e1wicHJvcHMuZGVmYXVsdEFjdGlvblwiIGFzIHVua25vd24gYXMgKCkgPT4gdm9pZH1cblx0XHRcdFx0aWNvbj17aXNBSU9wZXJhdGlvbiA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRtZW51OiA8TWVudT57YU1lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtwcm9wcy5wcmlvcml0eX0gZ3JvdXA9e3Byb3BzLmdyb3VwfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uKGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbiwgY2hhcnRDb250ZXh0OiBDb250ZXh0LCBpc01lbnVJdGVtOiBib29sZWFuLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoID8/IFwiXCIpITtcblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdHJldHVybiBnZXROYXZpZ2F0aW9uQWN0aW9ucyhhY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0cmV0dXJuIGdldEFubm90YXRpb25BY3Rpb25zKGNoYXJ0Q29udGV4dCwgYWN0aW9uIGFzIEFubm90YXRpb25BY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIikge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGFjdGlvbi5tZW51Py5tYXAoKG1lbnVBY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiBnZXRBY3Rpb24obWVudUFjdGlvbiwgY2hhcnRDb250ZXh0LCB0cnVlLCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRpZD17YWN0aW9uLmtleX1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvbkFjdGlvbnMoXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0ZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCxcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0bGV0IGVuYWJsZWQgPSBcInRydWVcIjtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRlbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdGVuYWJsZWQgPSBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxfVwiO1xuXHR9XG5cdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdGFjdGlvbixcblx0XHR7XG5cdFx0XHRpZDogdW5kZWZpbmVkLFxuXHRcdFx0dW5pdHRlc3RpZDogXCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25CdXR0b25BY3Rpb25cIixcblx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRhcmlhSGFzUG9wdXA6IHVuZGVmaW5lZCxcblx0XHRcdHByZXNzOiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKGRhdGFGaWVsZCwgYFxcJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfWAsIGZhbHNlKSEsXG5cdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0dmlzaWJsZTogZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0LCBjaGFydEJsb2NrKVxuXHRcdH0sXG5cdFx0aXNNZW51SXRlbSxcblx0XHRjaGFydEJsb2NrLFxuXHRcdGRhdGFGaWVsZFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBbm5vdGF0aW9uQWN0aW9ucyhcblx0Y2hhcnRDb250ZXh0OiBDb250ZXh0LFxuXHRhY3Rpb246IEFubm90YXRpb25BY3Rpb24sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IFRvb2xiYXJBY3Rpb24ge1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb24gPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb24pKTtcblx0Y29uc3QgYWN0aW9uT2JqZWN0ID0gYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGlzQm91bmRQYXRoID0gQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQoZGF0YUZpZWxkQWN0aW9uKTtcblx0Y29uc3QgaXNCb3VuZCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChpc0JvdW5kUGF0aCkhLmdldE9iamVjdCgpO1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIWlzQm91bmQgfHwgaXNCb3VuZC4kSXNCb3VuZCAhPT0gdHJ1ZSB8fCBhY3Rpb25PYmplY3RbYEAke0NvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlfWBdICE9PSBmYWxzZSkge1xuXHRcdGNvbnN0IGVuYWJsZWQgPSBnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQoYWN0aW9uLCBpc0JvdW5kLCBkYXRhRmllbGQsIGNoYXJ0Q29udGV4dCwgY2hhcnRCbG9jay5fY29udGV4dCk7XG5cdFx0Y29uc3QgZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KFxuXHRcdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkgYXMgQ29udGV4dFxuXHRcdCk7XG5cdFx0Y29uc3QgYXJpYUhhc1BvcHVwID0gaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGRNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID1cblx0XHRcdGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKFxuXHRcdFx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRcdFx0Y29udGV4dDogY2hhcnRDb250ZXh0XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHx8IFwiXCI7XG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJBY3Rpb24oXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGRhdGFGaWVsZENvbnRleHQpXSksXG5cdFx0XHRcdHVuaXR0ZXN0aWQ6IFwiRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uQWN0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogYXJpYUhhc1BvcHVwLFxuXHRcdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0XHR2aXNpYmxlOiBnZXRWaXNpYmxlKGRhdGFGaWVsZENvbnRleHQsIGNoYXJ0QmxvY2spXG5cdFx0XHR9LFxuXHRcdFx0aXNNZW51SXRlbSxcblx0XHRcdGNoYXJ0QmxvY2ssXG5cdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uVG9vbGJhckFjdGlvbihcblx0YWN0aW9uOiAoQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbikgJiB7IG5vV3JhcD86IGJvb2xlYW4gfSxcblx0dG9vbGJhckFjdGlvbjogVG9vbEJhckFjdGlvbixcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0aWYgKGlzTWVudUl0ZW0pIHtcblx0XHRjb25zdCBwcmVzc0V2ZW50OiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IHtcblx0XHRcdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jay5fYmxvY2tJZCxcblx0XHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiB2aWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZD8uTGFiZWwgYXMgc3RyaW5nXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZD8uQWN0aW9uIGFzIHN0cmluZywgcGFyYW1zKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/Lk1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5NYXBwaW5nXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHQgIH07XG5cblx0XHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e3Rvb2xiYXJBY3Rpb24ubGFiZWx9IHsuLi5wcmVzc0V2ZW50fSBlbmFibGVkPXt0b29sYmFyQWN0aW9uLmVuYWJsZWR9IHZpc2libGU9e3Rvb2xiYXJBY3Rpb24udmlzaWJsZX0gLz47XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGJ1aWxkQWN0aW9uKGFjdGlvbiwgdG9vbGJhckFjdGlvbiwgY2hhcnRCbG9jaywgZGF0YUZpZWxkLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dG9vbGJhckFjdGlvbjogVG9vbEJhckFjdGlvbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uLmlkfVxuXHRcdFx0XHR0ZXh0PXt0b29sYmFyQWN0aW9uLmxhYmVsfVxuXHRcdFx0XHRhcmlhSGFzUG9wdXA9e3Rvb2xiYXJBY3Rpb24uYXJpYUhhc1BvcHVwfVxuXHRcdFx0XHR7Li4uZ2V0QWN0aW9uUHJlc3MoYWN0aW9uLCBkYXRhRmllbGQsIGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjaGFydEJsb2NrKX1cblx0XHRcdFx0ZW5hYmxlZD17dG9vbGJhckFjdGlvbi5lbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXt0b29sYmFyQWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdGljb249e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblByZXNzKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGRhdGFGaWVsZD86IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmcsXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrXG4pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSB7XG5cdGxldCBhY3Rpb25QcmVzczogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0gPSB7XG5cdFx0cHJlc3M6IFwiXCIgYXMgdW5rbm93biBhcyAoKSA9PiB2b2lkXG5cdH07XG5cblx0aWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdGlmIChhY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0YWN0aW9uUHJlc3MgPSB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0XHR9IGVsc2UgaWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5ub1dyYXAgPT09IHRydWUpIHtcblx0XHRcdGFjdGlvblByZXNzID0gZ2V0Q3VzdG9tQWN0aW9uUHJlc3MoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbik7XG5cdFx0fSBlbHNlIGlmICghYWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRhY3Rpb25QcmVzcyA9IGdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRhY3Rpb25QcmVzcyA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IGdldFN0YW5kYXJkQWN0aW9uUHJlc3NXaXRoTm9Db21tYW5kKGFjdGlvbiwgZGF0YUZpZWxkLCBjaGFydEJsb2NrLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9uUHJlc3M7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFjdGlvblByZXNzKGFjdGlvbjogQ3VzdG9tQWN0aW9uKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25OYW1lID0gYWN0aW9uLmhhbmRsZXJNZXRob2Q/LnNwbGl0KFwiLlwiKVsxXSBhcyBzdHJpbmc7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0W21ldGhvZDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdH07XG5cdFx0XHRpZiAoY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKSBjb250cm9sbGVyW2Z1bmN0aW9uTmFtZV0oZXZlbnQpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUHJlc3NXaXRoQW5ub3RhdGlvblBhdGgoYWN0aW9uOiBDdXN0b21BY3Rpb24pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0ge1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gZXZlbnQuZ2V0U291cmNlKCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRjb250ZXh0czogc2VsZWN0ZWRDb250ZXh0c1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblByZXNzV2l0aE5vQ29tbWFuZChcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jaz8uX2Jsb2NrSWQsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQ/LkxhYmVsIGFzIHN0cmluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihkYXRhRmllbGQ/LkFjdGlvbiBhcyBzdHJpbmcsIHBhcmFtcyk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5NYXBwaW5nKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gSlNPTi5zdHJpbmdpZnkoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdGlzQm91bmQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0Y2hhcnRDb250ZXh0OiBDb250ZXh0LFxuXHRjb250ZXh0OiBDb250ZXh0XG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gYWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHQ6IENoYXJ0SGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uRW5hYmxlZChcblx0XHRcdFx0aXNCb3VuZCAmJiBpc0JvdW5kLiRJc0JvdW5kLFxuXHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0Q2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBjaGFydENvbnRleHQgfSksXG5cdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCB8fCBcIlwiXG5cdFx0ICApO1xufVxuXG5mdW5jdGlvbiBnZXRTZWdtZW50ZWRCdXR0b24oY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IEFjdGlvblRvb2xiYXJBY3Rpb24ge1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRsYXlvdXRJbmZvcm1hdGlvbj17e1xuXHRcdFx0XHRhZ2dyZWdhdGlvbk5hbWU6IFwiZW5kXCIsXG5cdFx0XHRcdGFsaWdubWVudDogXCJFbmRcIlxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKX1cblx0XHRcdFx0c2VsZWN0aW9uQ2hhbmdlPXsoZXZlbnQ6IFNlZ21lbnRlZEJ1dHRvbiRTZWxlY3Rpb25DaGFuZ2VFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVNlZ21lbnRlZEJ1dHRvblByZXNzZWQ/Lihcblx0XHRcdFx0XHRcdG1lcmdlKGV2ZW50LmdldFBhcmFtZXRlcnMoKSwgeyBzZWxlY3RlZEtleTogZXZlbnQuZ2V0U291cmNlKCkuZ2V0U2VsZWN0ZWRLZXkoKSB9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdHZpc2libGU9e25vdEVxdWFsKHBhdGhJbk1vZGVsKFwiYWxwQ29udGVudFZpZXdcIiwgXCJwYWdlSW50ZXJuYWxcIiksIFwiVGFibGVcIil9XG5cdFx0XHRcdHNlbGVjdGVkS2V5PXtwYXRoSW5Nb2RlbChcImFscENvbnRlbnRWaWV3XCIsIFwicGFnZUludGVybmFsXCIpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBnZXRTZWdtZW50ZWRCdXR0b25JdGVtcygpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1NlZ21lbnRlZEJ1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zKCk6IHN0cmluZ1tdIHtcblx0Y29uc3Qgc2VnbWVudGVkQnV0dG9uSXRlbXMgPSBbXTtcblx0aWYgKENvbW1vbkhlbHBlci5pc0Rlc2t0b3AoKSkge1xuXHRcdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHRnZXRTZWdtZW50ZWRCdXR0b25JdGVtKFwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0hZQlJJRF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJIeWJyaWRcIiwgXCJzYXAtaWNvbjovL2NoYXJ0LXRhYmxlLXZpZXdcIilcblx0XHQpO1xuXHR9XG5cdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0Z2V0U2VnbWVudGVkQnV0dG9uSXRlbShcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9DSEFSVF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJDaGFydFwiLCBcInNhcC1pY29uOi8vYmFyLWNoYXJ0XCIpXG5cdCk7XG5cdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0Z2V0U2VnbWVudGVkQnV0dG9uSXRlbShcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJUYWJsZVwiLCBcInNhcC1pY29uOi8vdGFibGUtdmlld1wiKVxuXHQpO1xuXHRyZXR1cm4gc2VnbWVudGVkQnV0dG9uSXRlbXM7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW0odG9vbHRpcDogc3RyaW5nLCBrZXk6IHN0cmluZywgaWNvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIDxTZWdtZW50ZWRCdXR0b25JdGVtIHRvb2x0aXA9e3Rvb2x0aXB9IGtleT17a2V5fSBpY29uPXtpY29ufSAvPjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbm5vdGF0aW9uIHBhdGggcG9pbnRpbmcgdG8gdGhlIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiAoQ2hhcnQpLlxuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoIFRoZSBkYXRhbW9kZWwgb2JqZWN0IHBhdGggZm9yIHRoZSBjaGFydFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldFZpc3VhbGl6YXRpb25QYXRoKFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydFR5cGUgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG1ldGFQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCk7XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiBtZXRhUGF0aCBpcyBub3Qgc2V0XG5cdGlmICghbWV0YVBhdGgpIHtcblx0XHRMb2cuZXJyb3IoYE1pc3NpbmcgbWV0YVBhdGggcGFyYW1ldGVyIGZvciBDaGFydGApO1xuXHRcdHJldHVybiBgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YDtcblx0fVxuXG5cdGlmIChjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0KSB7XG5cdFx0cmV0dXJuIG1ldGFQYXRoOyAvLyBNZXRhUGF0aCBpcyBhbHJlYWR5IHBvaW50aW5nIHRvIGEgQ2hhcnRcblx0fVxuXG5cdC8vTmVlZCB0byBzd2l0Y2ggdG8gdGhlIGNvbnRleHQgcmVsYXRlZCB0aGUgUFYgb3IgU1BWXG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhUGF0aCk7XG5cblx0bGV0IHZpc3VhbGl6YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdHN3aXRjaCAoY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50ZXJtKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0aWYgKGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdC5QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsXG5cdFx0XHRcdFx0bWV0YVBhdGgsXG5cdFx0XHRcdFx0cmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHR2aXN1YWxpemF0aW9ucyA9IGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0bWV0YVBhdGgsXG5cdFx0XHRcdHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRjb25zdCBjaGFydFZpeiA9IHZpc3VhbGl6YXRpb25zLmZpbmQoKHZpeikgPT4ge1xuXHRcdHJldHVybiB2aXoudmlzdWFsaXphdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydDtcblx0fSk7XG5cblx0aWYgKGNoYXJ0Vml6KSB7XG5cdFx0cmV0dXJuIGNoYXJ0Vml6LmFubm90YXRpb25QYXRoO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgQ2hhcnQgaWYgYW5ub3RhdGlvbiBtaXNzaW5nIGluIFBWXG5cdFx0TG9nLmVycm9yKGBCYWQgbWV0YVBhdGggcGFyYW1ldGVyIGZvciBjaGFydDogJHtjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm19YCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0gJiYgZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGgpIHtcblx0XHRjb25zdCBoaWRkZW5QYXRoQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgYC9AJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59LyRQYXRoYCxcblx0XHRcdGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdLiRQYXRoXG5cdFx0KTtcblx0XHRyZXR1cm4gQ2hhcnRIZWxwZXIuZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb25Gb3JUYWJsZUFjdGlvbnNBbmRJQk4oZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGgsIHtcblx0XHRcdGNvbnRleHQ6IGhpZGRlblBhdGhDb250ZXh0XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0pIHtcblx0XHRyZXR1cm4gIWRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0Q29udmVydGVyQ29udGV4dChcblx0cHJvcGVydGllczogQ2hhcnRCbG9jayxcblx0b3JpZ2luYWxWaWV3RGF0YTogUGFydGlhbDxWaWV3RGF0YT4sXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+LFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGV4dHJhUGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGxldCB2aWV3RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsVmlld0RhdGEpO1xuXHRkZWxldGUgdmlld0RhdGEucmVzb3VyY2VNb2RlbDtcblx0ZGVsZXRlIHZpZXdEYXRhLmFwcENvbXBvbmVudDtcblx0dmlld0RhdGEgPSBkZWVwQ2xvbmUodmlld0RhdGEpO1xuXHRsZXQgY29udHJvbENvbmZpZ3VyYXRpb24gPSB7fTtcblxuXHQvLyBPbmx5IG1lcmdlIGluIHBhZ2UgY29udHJvbCBjb25maWd1cmF0aW9uIGlmIHRoZSBidWlsZGluZyBibG9jayBpcyBvbiB0aGUgc2FtZSBjb250ZXh0XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoY29udGV4dE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uID8/IGNvbnRleHRPYmplY3RQYXRoKTtcblx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGNvbnRleHRPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5U2V0Py5uYW1lID8/IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldD8ubmFtZTtcblx0aWYgKFxuXHRcdHJlbGF0aXZlUGF0aCA9PT0gb3JpZ2luYWxWaWV3RGF0YT8uY29udGV4dFBhdGggfHxcblx0XHRyZWxhdGl2ZVBhdGggPT09IGAvJHtvcmlnaW5hbFZpZXdEYXRhPy5lbnRpdHlTZXR9YCB8fFxuXHRcdGVudGl0eVNldE5hbWUgPT09IG9yaWdpbmFsVmlld0RhdGE/LmVudGl0eVNldFxuXHQpIHtcblx0XHRjb250cm9sQ29uZmlndXJhdGlvbiA9IHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uITtcblx0fVxuXHR2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiA9IG1lcmdlKGNvbnRyb2xDb25maWd1cmF0aW9uLCBleHRyYVBhcmFtcyB8fCB7fSkgYXMgQ29udHJvbENvbmZpZ3VyYXRpb247XG5cblx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQuY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0cHJvcGVydGllcy5fbWV0YU1vZGVsLFxuXHRcdGRpYWdub3N0aWNzLFxuXHRcdG1lcmdlLFxuXHRcdGNvbnRleHRPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKHZpZXdEYXRhIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+LFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGNvbnN0IGluaXRpYWxDb252ZXJ0ZXJDb250ZXh0ID0gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MpO1xuXHRjb25zdCB2aXN1YWxpemF0aW9uUGF0aCA9IGdldFZpc3VhbGl6YXRpb25QYXRoKGNvbnRleHRPYmplY3RQYXRoLCBpbml0aWFsQ29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGV4dHJhUGFyYW1zID0gZ2V0RXh0cmFQYXJhbXMoY2hhcnRCbG9jaywgdmlzdWFsaXphdGlvblBhdGgpO1xuXHRyZXR1cm4gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MsIGV4dHJhUGFyYW1zKTtcbn1cblxuZnVuY3Rpb24gbW9kaWZ5SWRlbnRpZmllcnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHZvaWQge1xuXHRpZiAoY2hhcnRCbG9jay5fYXBwbHlJZFRvQ29udGVudCkge1xuXHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQgPSBjaGFydEJsb2NrLmlkLnJlcGxhY2UoLzo6Q2hhcnQkLywgXCJcIik7XG5cdFx0Y2hhcnRCbG9jay5fY29udGVudElkID0gY2hhcnRCbG9jay5fYmxvY2tJZDtcblx0fSBlbHNlIHtcblx0XHRjaGFydEJsb2NrLl9ibG9ja0lkID0gY2hhcnRCbG9jay5pZDtcblx0XHRjaGFydEJsb2NrLl9jb250ZW50SWQgPSBnZXRDb250ZW50SWQoY2hhcnRCbG9jay5pZCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZShcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+XG4pOiB2b2lkIHtcblx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gY2hhcnRCbG9jay5nZXRNZXRhUGF0aE9iamVjdChjaGFydEJsb2NrLm1ldGFQYXRoLCBjaGFydEJsb2NrLl9yZXNvbHZlZENvbnRleHRQYXRoKTtcblx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsID0gY2hhcnRCbG9jay5fZ2V0T3duZXIoKT8ucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLm1ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFDb250ZXh0UGF0aCEuZ2V0UGF0aCgpKSE7XG5cdGNoYXJ0QmxvY2suX2NvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY2hhcnRCbG9jay5jb250ZXh0UGF0aCA/PyBtZXRhQ29udGV4dFBhdGg/LmdldENvbnRleHRQYXRoKCkpITtcblxuXHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gZ2V0Q29udmVydGVyQ29udGV4dChjaGFydEJsb2NrLCB2aWV3RGF0YSwgY29udGV4dE9iamVjdFBhdGgsIGRpYWdub3N0aWNzKTtcblx0Y29uc3Qgdmlld0NvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk/LmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGlzTXVsdGlUYWJzID0gKHZpZXdDb25maWc/LnBhdGhzPy5sZW5ndGggYXMgbnVtYmVyKSA+IDE7XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk/Lmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cblx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0ID0gQ2hhcnRIZWxwZXIuZ2V0VWlDaGFydChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQpITtcblx0Y2hhcnRCbG9jay5fY2hhcnQgPSBjaGFydEJsb2NrLl9jaGFydENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgQ2hhcnRUeXBlO1xuXHRjaGFydEJsb2NrLl9ibG9ja0FjdGlvbnMgPSBbXTtcblx0Y2hhcnRCbG9jay5fY29tbWFuZEFjdGlvbnMgPSBbXTtcblx0bW9kaWZ5SWRlbnRpZmllcnMoY2hhcnRCbG9jayk7XG5cblx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0KSB7XG5cdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24gPSBjcmVhdGVDaGFydERlZmluaXRpb24oXG5cdFx0XHRjaGFydEJsb2NrLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LmdldFBhdGgoKVxuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbiA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uKSBhcyBDb250ZXh0O1xuXHRcdC8vIEFQSSBQcm9wZXJ0aWVzXG5cdFx0Y2hhcnRCbG9jay5uYXZpZ2F0aW9uUGF0aCA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLm5hdmlnYXRpb25QYXRoO1xuXHRcdGNoYXJ0QmxvY2suYXV0b0JpbmRPbkluaXQgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hdXRvQmluZE9uSW5pdDtcblx0XHRjaGFydEJsb2NrLnZpelByb3BlcnRpZXMgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi52aXpQcm9wZXJ0aWVzO1xuXHRcdGNoYXJ0QmxvY2suY2hhcnRBY3Rpb25zID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYWN0aW9ucztcblx0XHRjaGFydEJsb2NrLmZpbHRlciA9IGdldEZpbHRlckJhcihjaGFydEJsb2NrKTtcblx0XHRsZXQgcGVyc29uYWxpemF0aW9uOiBDaGFydFAxM25UeXBlO1xuXHRcdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnBlcnNvbmFsaXphdGlvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3dpdGNoIChjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRjYXNlIFwiZmFsc2VcIjpcblx0XHRcdFx0XHRwZXJzb25hbGl6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ0cnVlXCI6XG5cdFx0XHRcdFx0cGVyc29uYWxpemF0aW9uID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpLmpvaW4oXCIsXCIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uIGFzIHN0cmluZztcblx0XHRcdH1cblx0XHR9XG5cdFx0Y2hlY2tQZXJzb25hbGl6YXRpb25JbkNoYXJ0UHJvcGVydGllcyhwZXJzb25hbGl6YXRpb24sIGNoYXJ0QmxvY2spO1xuXHRcdGNoYXJ0QmxvY2sudmlzaWJsZSA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnZpc2libGU7XG5cdFx0bGV0IGNvbnRleHRQYXRoID0gY2hhcnRCbG9jay5fY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29udGV4dFBhdGggPSBjb250ZXh0UGF0aFtjb250ZXh0UGF0aC5sZW5ndGggLSAxXSA9PT0gXCIvXCIgPyBjb250ZXh0UGF0aC5zbGljZSgwLCAtMSkgOiBjb250ZXh0UGF0aDtcblx0XHRjaGFydEJsb2NrLmRyYWZ0U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChjaGFydEJsb2NrLl9tZXRhTW9kZWwsIGNvbnRleHRQYXRoKTtcblx0XHRjaGFydEJsb2NrLl9jaGFydFR5cGUgPSBDaGFydEhlbHBlci5mb3JtYXRDaGFydFR5cGUoY2hhcnRCbG9jay5fY2hhcnQuQ2hhcnRUeXBlKTtcblxuXHRcdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IENoYXJ0SGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChjaGFydEJsb2NrLl9jaGFydCwge1xuXHRcdFx0Y29udGV4dDogY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0XG5cdFx0fSk7XG5cblx0XHRpZiAoT2JqZWN0LmtleXMoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zIGFzIG9iamVjdCkubGVuZ3RoID4gMCkge1xuXHRcdFx0T2JqZWN0LmtleXMoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zIGFzIG9iamVjdCkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zW2tleV07XG5cdFx0XHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBjcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24pO1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gYWN0aW9uLmFubm90YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0ICYmIGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUob3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRcdFx0cHVzaEFjdGlvbkNvbW1hbmQoYWN0aW9uQ29udGV4dCwgZGF0YUZpZWxkLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aW9uLCBjaGFydEJsb2NrKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjaGFydEJsb2NrLm1lYXN1cmVzID0gZ2V0Q2hhcnRNZWFzdXJlcyhjaGFydEJsb2NrKTtcblx0XHRjb25zdCBwcmVzZW50YXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0KGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCk7XG5cdFx0Y2hhcnRCbG9jay5fc29ydENvbmRpdGlvbnMgPSBDaGFydEhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyhcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCxcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdHByZXNlbnRhdGlvblBhdGguZ2V0UGF0aCgpLFxuXHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYXBwbHlTdXBwb3J0ZWRcblx0XHQpO1xuXHRcdGNvbnN0IGNoYXJ0QWN0aW9uc0NvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0XHRjaGFydEJsb2NrLl9jaGFydENvbnRleHQuZ2V0UGF0aCgpICsgXCIvQWN0aW9uc1wiLFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnQuQWN0aW9ucyBhcyB1bmtub3duIGFzIENvbnRleHRcblx0XHQpO1xuXHRcdGNvbnN0IHRhcmdldENvbGxlY3Rpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldFRhcmdldENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb24pO1xuXHRcdGNvbnN0IHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRDb2xsZWN0aW9uUGF0aCwgY29sbGVjdGlvbikhO1xuXHRcdGNvbnN0IGFjdGlvbnNPYmplY3QgPSBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChjaGFydEFjdGlvbnNDb250ZXh0LmdldFBhdGgoKSk/LnRhcmdldDtcblxuXHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEgPSB7XG5cdFx0XHR0YXJnZXRDb2xsZWN0aW9uUGF0aDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbixcblx0XHRcdGVudGl0eVNldDpcblx0XHRcdFx0dHlwZW9mIHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dC5nZXRPYmplY3QoKSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdD8gdGFyZ2V0Q29sbGVjdGlvblBhdGhDb250ZXh0LmdldE9iamVjdCgpXG5cdFx0XHRcdFx0OiB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiksXG5cdFx0XHRlbnRpdHlUeXBlOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uICsgXCIvXCIsXG5cdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04ucGFyc2Uob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zOiBBY3Rpb25IZWxwZXIuZ2V0TXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMoYWN0aW9uc09iamVjdCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10pICsgXCJcIixcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbklkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKSxcblx0XHRcdGN1c3RvbUFnZzogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmN1c3RvbUFnZyxcblx0XHRcdHRyYW5zQWdnOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8udHJhbnNBZ2csXG5cdFx0XHRhcHBseVN1cHBvcnRlZDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmFwcGx5U3VwcG9ydGVkLFxuXHRcdFx0dml6UHJvcGVydGllczogSlNPTi5wYXJzZShjaGFydEJsb2NrLnZpelByb3BlcnRpZXMpLFxuXHRcdFx0ZHJhZnRTdXBwb3J0ZWQ6IGNoYXJ0QmxvY2suZHJhZnRTdXBwb3J0ZWQsXG5cdFx0XHRtdWx0aVZpZXdzOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ubXVsdGlWaWV3cyB8fCAoIWhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgJiYgaXNNdWx0aVRhYnMpLFxuXHRcdFx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHtcblx0XHRcdFx0ZGF0YTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LnNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlLFxuXHRcdFx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNoYXJ0TWVhc3VyZUtleUFuZFJvbGVcblx0XHR9O1xuXHRcdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQpIHtcblx0XHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5U2V0ID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbi5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRpc3BsYXkgZW1wdHkgY2hhcnRcblx0XHRjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdFx0Y2hhcnRCbG9jay52aXNpYmxlID0gXCJ0cnVlXCI7XG5cdFx0Y2hhcnRCbG9jay5uYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cblx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhID0ge1xuXHRcdFx0dGFyZ2V0Q29sbGVjdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRlbnRpdHlTZXQ6IFwiXCIsXG5cdFx0XHRlbnRpdHlUeXBlOiBcIlwiLFxuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBcIlwiLFxuXHRcdFx0bXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IFwiXCIsXG5cdFx0XHRzZWdtZW50ZWRCdXR0b25JZDogXCJcIixcblx0XHRcdGN1c3RvbUFnZzoge30sXG5cdFx0XHR0cmFuc0FnZzoge30sXG5cdFx0XHRhcHBseVN1cHBvcnRlZDoge30sXG5cdFx0XHR2aXpQcm9wZXJ0aWVzOiB7fVxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQmFyKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBmaWx0ZXJCYXIgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0aWYgKGNoYXJ0QmxvY2suZmlsdGVyQmFyICYmIGZpbHRlckJhcj8uaXNBPE1hY3JvQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdHJldHVybiBnZXRDb250ZW50SWQoY2hhcnRCbG9jay5maWx0ZXJCYXIpO1xuXHR9IGVsc2UgaWYgKGZpbHRlckJhcj8uaXNBPENvbnRyb2w+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRyZXR1cm4gY2hhcnRCbG9jay5maWx0ZXJCYXI7XG5cdH0gZWxzZSBpZiAoY2hhcnRCbG9jay5maWx0ZXJCYXIpIHtcblx0XHRyZXR1cm4gZ2V0Q29udGVudElkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREZWxlZ2F0ZShjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogb2JqZWN0IHtcblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZSkge1xuXHRcdChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUgYXMgQ2hhcnREZWxlZ2F0ZSkucGF5bG9hZC5zZWxlY3Rpb25Nb2RlID1cblx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnNlbGVjdGlvbk1vZGU/LnRvVXBwZXJDYXNlKCkgPz9cblx0XHRcdChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUgYXMgQ2hhcnREZWxlZ2F0ZSkucGF5bG9hZC5zZWxlY3Rpb25Nb2RlID8/XG5cdFx0XHRcIk1VTFRJUExFXCI7XG5cdH1cblx0cmV0dXJuIGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZVxuXHRcdD8gY2hhcnRCbG9jay5jaGFydERlbGVnYXRlXG5cdFx0OiB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydERlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRjaGFydENvbnRleHRQYXRoOiBjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5Xb3JrZXJzXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNlbGVjdGlvbk1vZGU6XG5cdFx0XHRcdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5zZWxlY3Rpb25Nb2RlPy50b1VwcGVyQ2FzZSgpID8/IGNoYXJ0QmxvY2suc2VsZWN0aW9uTW9kZT8udG9VcHBlckNhc2UoKSA/PyBcIk1VTFRJUExFXCJcblx0XHRcdFx0fVxuXHRcdCAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VzdG9tRGF0YShjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQ3VzdG9tRGF0YVtdIHtcblx0cmV0dXJuIFtcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widGFyZ2V0Q29sbGVjdGlvblBhdGhcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudGFyZ2V0Q29sbGVjdGlvblBhdGh9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJlbnRpdHlTZXRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5U2V0fSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiZW50aXR5VHlwZVwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5lbnRpdHlUeXBlfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLm9wZXJhdGlvbkF2YWlsYWJsZU1hcH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcIm11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLm11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wic2VnbWVudGVkQnV0dG9uSWRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuc2VnbWVudGVkQnV0dG9uSWR9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJjdXN0b21BZ2dcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY3VzdG9tQWdnfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widHJhbnNBZ2dcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudHJhbnNBZ2d9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJhcHBseVN1cHBvcnRlZFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5hcHBseVN1cHBvcnRlZH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInZpelByb3BlcnRpZXNcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudml6UHJvcGVydGllc30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImRyYWZ0U3VwcG9ydGVkXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmRyYWZ0U3VwcG9ydGVkfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wibXVsdGlWaWV3c1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5tdWx0aVZpZXdzfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGh9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJjaGFydERpbWVuc2lvbktleUFuZFJvbGVcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiY2hhcnRNZWFzdXJlS2V5QW5kUm9sZVwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5jaGFydE1lYXN1cmVLZXlBbmRSb2xlfSAvPlxuXHRdO1xufVxuXG5mdW5jdGlvbiBnZXROb0RhdGEoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IElsbHVzdHJhdGVkTWVzc2FnZSB8IHVuZGVmaW5lZCB7XG5cdGlmIChjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoID09PSBcIlwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5BdXRvfVxuXHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5CZWZvcmVTZWFyY2h9XG5cdFx0XHR0aXRsZT17Y2hhcnRCbG9jay5nZXRUcmFuc2xhdGVkVGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVElUTEVfVEVYVFwiKX1cblx0XHRcdGRlc2NyaXB0aW9uPXtjaGFydEJsb2NrLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIpfVxuXHRcdFx0ZW5hYmxlRGVmYXVsdFRpdGxlQW5kRGVzY3JpcHRpb249e2ZhbHNlfVxuXHRcdFx0ZW5hYmxlVmVydGljYWxSZXNwb25zaXZlbmVzcz17dHJ1ZX1cblx0XHQ+PC9JbGx1c3RyYXRlZE1lc3NhZ2U+XG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZGNDaGFydFRlbXBsYXRlKFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD5cbik6IE1kY0NoYXJ0IHtcblx0aW5pdGlhbGlzZShjaGFydEJsb2NrLCB2aWV3RGF0YSwgZGlhZ25vc3RpY3MsIGNvbnRleHRPYmplY3RQYXRoKTtcblx0Y2hhcnRCbG9jay5sYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiMVwiIHNocmlua0ZhY3Rvcj1cIjFcIiAvPjtcblxuXHRyZXR1cm4gKFxuXHRcdDxNZGNDaGFydFxuXHRcdFx0YmluZGluZz17eyBpbnRlcm5hbDogXCJjb250cm9scy9cIiArIGNoYXJ0QmxvY2suX2Jsb2NrSWQgfX1cblx0XHRcdGlkPXtjaGFydEJsb2NrLl9jb250ZW50SWR9XG5cdFx0XHRjaGFydFR5cGU9e2NoYXJ0QmxvY2suX2NoYXJ0VHlwZX1cblx0XHRcdHNvcnRDb25kaXRpb25zPXtjaGFydEJsb2NrLl9zb3J0Q29uZGl0aW9uc31cblx0XHRcdGhlYWRlcj17Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaGVhZGVyID8/IGNoYXJ0QmxvY2suaGVhZGVyID8/IGNoYXJ0QmxvY2suX2NoYXJ0Py5UaXRsZT8udG9TdHJpbmcoKSA/PyBcIlwifVxuXHRcdFx0aGVhZGVyVmlzaWJsZT17Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaGVhZGVyVmlzaWJsZSA/PyBjaGFydEJsb2NrLmhlYWRlclZpc2libGV9XG5cdFx0XHRtaW5IZWlnaHQ9e0RldmljZS5zeXN0ZW0ucGhvbmUgPyBcIjgwdmhcIiA6IFwiNDAwcHhcIn1cblx0XHRcdGhlaWdodD1cIjEwMCVcIlxuXHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdGhlYWRlckxldmVsPXtjaGFydEJsb2NrLmhlYWRlckxldmVsfVxuXHRcdFx0aGVhZGVyU3R5bGU9e2NoYXJ0QmxvY2suaGVhZGVyU3R5bGV9XG5cdFx0XHRwMTNuTW9kZT17KGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiEgYXMgc3RyaW5nKT8uc3BsaXQoXCIsXCIpfVxuXHRcdFx0ZmlsdGVyPXtjaGFydEJsb2NrLmZpbHRlcn1cblx0XHRcdG5vRGF0YVRleHQ9e1xuXHRcdFx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoID09PSBcIlwiXG5cdFx0XHRcdFx0PyBjaGFydEJsb2NrLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DSEFSVF9OT19BTk5PVEFUSU9OX1NFVF9URVhUXCIpXG5cdFx0XHRcdFx0OiBjaGFydEJsb2NrLm5vRGF0YVRleHRcblx0XHRcdH1cblx0XHRcdGF1dG9CaW5kT25Jbml0PXtjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0fVxuXHRcdFx0ZGVsZWdhdGU9e2dldERlbGVnYXRlKGNoYXJ0QmxvY2spfVxuXHRcdFx0dmlzaWJsZT17Y2hhcnRCbG9jay52aXNpYmxlfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IGdldEN1c3RvbURhdGEoY2hhcnRCbG9jayksXG5cdFx0XHRcdGRlcGVuZGVudHM6IFtnZXREZXBlbmRlbnRzKGNoYXJ0QmxvY2ssIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCksIGdldFBlcnNpc3RlbmNlUHJvdmlkZXIoY2hhcnRCbG9jayldLFxuXHRcdFx0XHRpdGVtczogZ2V0SXRlbXMoY2hhcnRCbG9jayksXG5cdFx0XHRcdGFjdGlvbnM6IGNoYXJ0QmxvY2suY2hhcnRBY3Rpb25zID8gZ2V0VG9vbGJhckFjdGlvbnMoY2hhcnRCbG9jaykgOiBjaGFydEJsb2NrLl9ibG9ja0FjdGlvbnMsXG5cdFx0XHRcdHZhcmlhbnQ6IGNyZWF0ZVZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRub0RhdGE6IGdldE5vRGF0YShjaGFydEJsb2NrKVxuXHRcdFx0fX1cblx0XHQ8L01kY0NoYXJ0PlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1R0EsTUFBTUEsV0FBc0MsR0FBRztJQUM5Qyx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLHVEQUF1RCxFQUFFLE9BQU87SUFDaEUsdURBQXVELEVBQUUsT0FBTztJQUNoRSx1REFBdUQsRUFBRTtFQUMxRCxDQUFDO0VBQUMsSUEwQkdDLHFCQUFxQiwwQkFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQUEsT0FBckJBLHFCQUFxQjtFQUFBLEVBQXJCQSxxQkFBcUI7RUErRTFCLFNBQVNDLHFCQUFxQkEsQ0FDN0JDLFVBQXNCLEVBQ3RCQyxnQkFBa0MsRUFDbENDLGlCQUFzRyxFQUN0R0MsV0FBbUIsRUFDRTtJQUNyQixJQUFJQyxpQkFBaUIsR0FBR0Msa0NBQWtDLENBQUNILGlCQUFpQixDQUFDO0lBQzdFLElBQUlJLGNBQXdDLEdBQUcsRUFBRTtJQUNqRCxJQUFJTixVQUFVLENBQUNPLGdCQUFnQixFQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxLQUFLLHlEQUE4QyxFQUFFO01BQ2xHSCxjQUFjLEdBQUdOLFVBQVUsQ0FBQ08sZ0JBQWdCLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUNFLGNBQWM7SUFDeEUsQ0FBQyxNQUFNLElBQUlWLFVBQVUsQ0FBQ08sZ0JBQWdCLEVBQUVDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLEtBQUssa0VBQXVELEVBQUU7TUFDbEhILGNBQWMsR0FBR04sVUFBVSxDQUFDTyxnQkFB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
1302
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZWFzdXJlUm9sZSIsInBlcnNvbmFsaXphdGlvblZhbHVlcyIsImNyZWF0ZUNoYXJ0RGVmaW5pdGlvbiIsImNoYXJ0QmxvY2siLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29udGV4dE9iamVjdFBhdGgiLCJjb250cm9sUGF0aCIsInZpc3VhbGl6YXRpb25QYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInZpc3VhbGl6YXRpb25zIiwiX21ldGFQYXRoQ29udGV4dCIsImdldE9iamVjdCIsIiRUeXBlIiwiVmlzdWFsaXphdGlvbnMiLCJQcmVzZW50YXRpb25WYXJpYW50IiwibGVuZ3RoIiwiY2hlY2tDaGFydEV4aXN0cyIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic29tZSIsInZpc3VhbGl6YXRpb24iLCJpbmNsdWRlcyIsIiRBbm5vdGF0aW9uUGF0aCIsImdldENvbnRlbnRJZCIsIm1hY3JvSWQiLCJnZXRFeHRyYVBhcmFtcyIsImV4dHJhUGFyYW1zIiwiY3VzdG9tQWN0aW9ucyIsImFjdGlvbnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwiYWN0aW9uIiwiaXNBIiwia2V5IiwiZ2V0QWN0aW9uUHJvcGVydGllcyIsInRleHQiLCJwbGFjZW1lbnQiLCJhbmNob3IiLCJtYXAiLCJfIiwiaW5kZXgiLCJhY3QiLCJhY3Rpb25LZXkiLCJjb25jYXQiLCJwcmVzcyIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlZCIsInVuZGVmaW5lZCIsInBvc2l0aW9uIiwibWVudSIsImFjdGlvblByb3BlcnRpZXMiLCJfX25vV3JhcCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZGF0YSIsImNvbnRleHRQYXRoIiwidWlkIiwiYWN0aW9uc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0UHJvcGVydHkiLCJnZXRDaGFydE1lYXN1cmVzIiwiY2hhcnRBbm5vdGF0aW9uUGF0aCIsImNoYXJ0RGVmaW5pdGlvbiIsImFubm90YXRpb25QYXRoIiwic3BsaXQiLCJmaWx0ZXIiLCJpdGVtIiwicG9zIiwiaW5kZXhPZiIsInRvU3RyaW5nIiwicmVwbGFjZUFsbCIsIm9DaGFydCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIl9tZXRhTW9kZWwiLCJfY29udGV4dCIsInRhcmdldE9iamVjdCIsIm1lYXN1cmVzIiwiYW5ub1BhdGgiLCJnZXRQYXRoIiwiY2hhcnRNZWFzdXJlcyIsIk1lYXN1cmVzIiwiY2hhcnREeW5hbWljTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJlbnRpdHlTZXRQYXRoIiwicmVwbGFjZSIsInRyYW5zQWdncmVnYXRpb25zIiwidHJhbnNBZ2ciLCJjdXN0b21BZ2dyZWdhdGlvbnMiLCJjdXN0b21BZ2ciLCJjb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsImNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzIiwiTG9nIiwid2FybmluZyIsImlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlIiwib0NoYXJ0TWVhc3VyZSIsIm9DdXN0b21BZ2dNZWFzdXJlIiwiZ2V0Q3VzdG9tQWdnTWVhc3VyZSIsIkVycm9yIiwiZHluYW1pY01lYXN1cmUiLCJnZXREeW5hbWljTWVhc3VyZXMiLCJjaGFydE1lYXN1cmUiLCJ2YWx1ZSIsImN1c3RvbUFnZ01lYXN1cmUiLCJtZWFzdXJlVHlwZSIsInNldEN1c3RvbUFnZ01lYXN1cmUiLCJzZXRUcmFuc0FnZ01lYXN1cmUiLCJzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzIiwiX2NoYXJ0IiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlc01vZGVsIiwiJCR2YWx1ZUFzUHJvbWlzZSIsIm1lYXN1cmUiLCJlcnJvciIsInJvbGUiLCJsYWJlbCIsInByb3BlcnR5UGF0aCIsInB1c2giLCJ0cmFuc0FnZ01lYXN1cmUiLCJuYW1lIiwiYWdncmVnYXRpb25NZXRob2QiLCJjaGFydER5bmFtaWNNZWFzdXJlIiwiY2hhcnQiLCJhZ2dyZWdhdGVkUHJvcGVydHkiLCJzdGFydHNXaXRoIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiQWdncmVnYXRpb25NZXRob2QiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCIkdGFyZ2V0IiwibWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiX3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZSIsInBhdGgiLCJEeW5hbWljTWVhc3VyZSIsIk1lYXN1cmUiLCJtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50IiwiRGF0YVBvaW50IiwiUm9sZSIsImRhdGFQb2ludCIsInNldE1lYXN1cmVSb2xlIiwic2V0TWVhc3VyZURhdGFQb2ludCIsImNyZWF0ZURhdGFQb2ludFByb3BlcnR5Iiwib0RhdGFQb2ludEFubm8iLCJvRGF0YVBvaW50IiwiVGFyZ2V0VmFsdWUiLCJ0YXJnZXRWYWx1ZSIsIiRQYXRoIiwiRm9yZWNhc3RWYWx1ZSIsImZvcmVDYXN0VmFsdWUiLCJvQ3JpdGljYWxpdHkiLCJDcml0aWNhbGl0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiQ2FsY3VsYXRlZCIsIlN0YXRpYyIsIiRFbnVtTWVtYmVyIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsIm9UaHJlc2hvbGRzIiwiYkNvbnN0YW50IiwiYnVpbGRUaHJlc2hvbGRzIiwiQ29uc3RhbnRUaHJlc2hvbGRzIiwiRHluYW1pY1RocmVzaG9sZHMiLCJjcml0aWNhbGl0eSIsInRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwia2V5cyIsIkltcHJvdmVtZW50RGlyZWN0aW9uIiwiZHluYW1pY1RocmVzaG9sZHMiLCJvbmVTdXBwbGllZCIsInVzZWRNZWFzdXJlcyIsImNvbnN0YW50VGhyZXNob2xkcyIsImluaXRpYWxpc2VUaHJlc2hvbGRzIiwicHJvY2Vzc1RocmVzaG9sZHMiLCJBZ2dyZWdhdGlvbkxldmVscyIsInByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyIsIm9BZ2dyZWdhdGlvbkxldmVsIiwiVmlzaWJsZURpbWVuc2lvbnMiLCJzS2V5IiwicHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzIiwiYWdncmVnYXRpb25MZXZlbCIsImFnZ3JlZ2F0aW9uTGV2ZWxJbmZvIiwidmlzaWJsZURpbWVuc2lvbnMiLCJBZ2dyZWdhdGlvbkxldmVsIiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlIiwiQ2hhcnRIZWxwZXIiLCJmb3JtYXRKU09OVG9TdHJpbmciLCJnZXREZXBlbmRlbnRzIiwiY2hhcnRDb250ZXh0IiwiX2NvbW1hbmRBY3Rpb25zIiwiY29tbWFuZEFjdGlvbiIsImdldEFjdGlvbkNvbW1hbmQiLCJjaGVja1BlcnNvbmFsaXphdGlvbkluQ2hhcnRQcm9wZXJ0aWVzIiwicGVyc29uYWxpemF0aW9uIiwiX3BlcnNvbmFsaXphdGlvbiIsImpvaW4iLCJ2ZXJpZnlWYWxpZFBlcnNvbmFsaXphdGlvbiIsInZhbGlkIiwic3BsaXRBcnJheSIsImFjY2VwdGVkVmFsdWVzIiwiYXJyYXlFbGVtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50TWFuYWdlbWVudCIsImNyZWF0ZVZhcmlhbnRNYW5hZ2VtZW50IiwiX2pzeCIsIlZhcmlhbnRNYW5hZ2VtZW50IiwiaWQiLCJnZW5lcmF0ZSIsIl9ibG9ja0lkIiwiZm9yIiwic2hvd1NldEFzRGVmYXVsdCIsImhlYWRlckxldmVsIiwic2VsZWN0IiwiZXZlbnQiLCJmaXJlVmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsImZpcmVWYXJpYW50U2F2ZWQiLCJnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsInB1c2hBY3Rpb25Db21tYW5kIiwiYWN0aW9uQ29udGV4dCIsImRhdGFGaWVsZCIsImNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwib25FeGVjdXRlQWN0aW9uIiwiZ2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsIm9uRXhlY3V0ZUlCTiIsIkNvbW1vbkhlbHBlciIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsIm9uRXhlY3V0ZU1hbmlmZXN0IiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwiZGF0YUZpZWxkQ29udGV4dCIsImRhdGFGaWVsZEFjdGlvbiIsImdldEFjdGlvbkNvbnRleHQiLCJpc0JvdW5kUGF0aCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJpc0JvdW5kIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJjb250ZXh0IiwiaXNBY3Rpb25FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25FbmFibGVkIiwiJElzQm91bmQiLCJBY3Rpb24iLCJlbmFibGVPblNlbGVjdCIsImlzSUJORW5hYmxlZCIsIlJlcXVpcmVzQ29udGV4dCIsImNvbW1hbmRFbmFibGVkIiwidHlwZSIsImFjdGlvbkNvbW1hbmQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImNvbW1hbmRFeGVjdXRlIiwidmlzaWJsZSIsImdldFZpc2libGUiLCJjb21tYW5kIiwiSXNCb3VuZCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNJbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJwYXJhbXMiLCJjb250ZXh0cyIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJjb250cm9sSWQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJtb2RlbCIsImdldE1vZGVsIiwiZWRpdEZsb3ciLCJpbnZva2VBY3Rpb24iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm5hdmlnYXRlIiwiU2VtYW50aWNPYmplY3QiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJnZXRJdGVtcyIsImRpbWVuc2lvbnMiLCJEaW1lbnNpb25zIiwiZm9ybWF0RGltZW5zaW9ucyIsIl9jaGFydENvbnRleHQiLCJkaW1lbnNpb24iLCJnZXRJdGVtIiwiZm9ybWF0TWVhc3VyZXMiLCJwcmVmaXgiLCJNZGNDaGFydEl0ZW0iLCJwcm9wZXJ0eUtleSIsImdldFRvb2xiYXJBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImdldFNlZ21lbnRlZEJ1dHRvbiIsImlzSW5zaWdodHNFbmFibGVkIiwiZ2V0U3RhbmRhcmRBY3Rpb25zIiwiaXNJbnNpZ2h0c1Zpc2libGUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiY2hpbGRyZW4iLCJCdXR0b24iLCJvbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCIsImxheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJyZW1vdmVNZW51SXRlbXMiLCJjaGFydEFjdGlvbnMiLCJnZXRBY3Rpb24iLCJoYXNPd25Qcm9wZXJ0eSIsImdldEN1c3RvbUFjdGlvbnMiLCJpZHgiLCJzcGxpY2UiLCJhY3Rpb25FbmFibGVkIiwiZ2V0QWN0aW9uVG9vbGJhckFjdGlvbiIsInVuaXR0ZXN0aWQiLCJhcmlhSGFzUG9wdXAiLCJnZXRBY3Rpb25Ub29sYmFyTWVudUFjdGlvbiIsInVzZURlZmF1bHRBY3Rpb25Pbmx5IiwiRGVmYXVsdEFjdGlvbkhhbmRsZXIiLCJnZXRVc2VEZWZhdWx0QWN0aW9uT25seSIsImJ1dHRvbk1vZGUiLCJnZXRCdXR0b25Nb2RlIiwiZGVmYXVsdEFjdGlvbiIsImdyb3VwIiwiZ2V0TWVudUl0ZW1Gcm9tTWVudSIsIm1lbnVJdGVtQWN0aW9uIiwicHJlc3NIYW5kbGVyIiwibm9XcmFwIiwiZnVuY3Rpb25OYW1lIiwic2VsZWN0ZWRDb250ZXh0cyIsIk1lbnVJdGVtIiwicHJvcHMiLCJhTWVudUl0ZW1zIiwiaXNBSU9wZXJhdGlvbiIsImlzTWVudUFJT3BlcmF0aW9uIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIkRvY2siLCJCZWdpbkJvdHRvbSIsImljb24iLCJhaUljb24iLCJNZW51IiwiaXNNZW51SXRlbSIsImdldE5hdmlnYXRpb25BY3Rpb25zIiwiZ2V0QW5ub3RhdGlvbkFjdGlvbnMiLCJtZW51SXRlbXMiLCJtZW51QWN0aW9uIiwiYWN0aW9uT2JqZWN0IiwiZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkIiwiZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoIiwiaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyIsInRvb2xiYXJBY3Rpb24iLCJwcmVzc0V2ZW50IiwiYnVpbGRBY3Rpb24iLCJnZXRBY3Rpb25QcmVzcyIsImFjdGlvblByZXNzIiwiZ2V0Q3VzdG9tQWN0aW9uUHJlc3MiLCJnZXRBY3Rpb25QcmVzc1dpdGhBbm5vdGF0aW9uUGF0aCIsImdldFN0YW5kYXJkQWN0aW9uUHJlc3NXaXRoTm9Db21tYW5kIiwibGF5b3V0SW5mb3JtYXRpb24iLCJhZ2dyZWdhdGlvbk5hbWUiLCJhbGlnbm1lbnQiLCJTZWdtZW50ZWRCdXR0b24iLCJzZWxlY3Rpb25DaGFuZ2UiLCJmaXJlU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsIm1lcmdlIiwiZ2V0UGFyYW1ldGVycyIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJub3RFcXVhbCIsInBhdGhJbk1vZGVsIiwiaXRlbXMiLCJnZXRTZWdtZW50ZWRCdXR0b25JdGVtcyIsInNlZ21lbnRlZEJ1dHRvbkl0ZW1zIiwiaXNEZXNrdG9wIiwiZ2V0U2VnbWVudGVkQnV0dG9uSXRlbSIsInRvb2x0aXAiLCJTZWdtZW50ZWRCdXR0b25JdGVtIiwiZ2V0VmlzdWFsaXphdGlvblBhdGgiLCJtZXRhUGF0aCIsInRlcm0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbiIsImNoYXJ0Vml6IiwiZmluZCIsInZpeiIsImhpZGRlblBhdGhDb250ZXh0IiwiZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb25Gb3JUYWJsZUFjdGlvbnNBbmRJQk4iLCJnZXRDaGFydENvbnZlcnRlckNvbnRleHQiLCJwcm9wZXJ0aWVzIiwib3JpZ2luYWxWaWV3RGF0YSIsImRpYWdub3N0aWNzIiwidmlld0RhdGEiLCJhc3NpZ24iLCJyZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiZGVlcENsb25lIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJyZWxhdGl2ZVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiY29udGV4dExvY2F0aW9uIiwiZW50aXR5U2V0TmFtZSIsInRhcmdldEVudGl0eVNldCIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJzdGFydGluZ0VudGl0eVNldCIsIk1hbmlmZXN0V3JhcHBlciIsImdldENvbnZlcnRlckNvbnRleHQiLCJpbml0aWFsQ29udmVydGVyQ29udGV4dCIsIm1vZGlmeUlkZW50aWZpZXJzIiwiX2FwcGx5SWRUb0NvbnRlbnQiLCJfY29udGVudElkIiwiaW5pdGlhbGlzZSIsIm1ldGFDb250ZXh0UGF0aCIsImdldE1ldGFQYXRoT2JqZWN0IiwiX3Jlc29sdmVkQ29udGV4dFBhdGgiLCJfZ2V0T3duZXIiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwibW9kZWxzIiwibWV0YU1vZGVsIiwiZ2V0Q29udGV4dFBhdGgiLCJ2aWV3Q29uZmlnIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJpc011bHRpVGFicyIsInBhdGhzIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImdldFVpQ2hhcnQiLCJfYmxvY2tBY3Rpb25zIiwiY29sbGVjdGlvbiIsIm5hdmlnYXRpb25QYXRoIiwiYXV0b0JpbmRPbkluaXQiLCJ2aXpQcm9wZXJ0aWVzIiwiZ2V0RmlsdGVyQmFyIiwiZHJhZnRTdXBwb3J0ZWQiLCJNb2RlbEhlbHBlciIsImlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZCIsIl9jaGFydFR5cGUiLCJmb3JtYXRDaGFydFR5cGUiLCJDaGFydFR5cGUiLCJjb21tYW5kQWN0aW9ucyIsInByZXNlbnRhdGlvblBhdGgiLCJjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dCIsIl9zb3J0Q29uZGl0aW9ucyIsImdldFNvcnRDb25kaXRpb25zIiwiYXBwbHlTdXBwb3J0ZWQiLCJjaGFydEFjdGlvbnNDb250ZXh0IiwiQWN0aW9ucyIsInRhcmdldENvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJ0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQiLCJhY3Rpb25zT2JqZWN0IiwiY29udmVydGVkVHlwZXMiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsIl9jdXN0b21EYXRhIiwiZW50aXR5VHlwZSIsInBhcnNlIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsInNlZ21lbnRlZEJ1dHRvbklkIiwibXVsdGlWaWV3cyIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlIiwiY2hhcnRNZWFzdXJlS2V5QW5kUm9sZSIsImlzUGFyYW1ldGVyaXplZEVudGl0eVNldCIsInN1YnN0cmluZyIsImZpbHRlckJhciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldERlbGVnYXRlIiwiY2hhcnREZWxlZ2F0ZSIsInBheWxvYWQiLCJzZWxlY3Rpb25Nb2RlIiwidG9VcHBlckNhc2UiLCJjaGFydENvbnRleHRQYXRoIiwicGFyYW1ldGVycyIsIiQkZ3JvdXBJZCIsImdldEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZ2V0Tm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJBdXRvIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJCZWZvcmVTZWFyY2giLCJ0aXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0IiwiZGVzY3JpcHRpb24iLCJlbmFibGVEZWZhdWx0VGl0bGVBbmREZXNjcmlwdGlvbiIsImVuYWJsZVZlcnRpY2FsUmVzcG9uc2l2ZW5lc3MiLCJnZXRNZGNDaGFydFRlbXBsYXRlIiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsInNocmlua0ZhY3RvciIsIk1kY0NoYXJ0IiwiYmluZGluZyIsImludGVybmFsIiwiY2hhcnRUeXBlIiwic29ydENvbmRpdGlvbnMiLCJoZWFkZXIiLCJUaXRsZSIsImhlYWRlclZpc2libGUiLCJtaW5IZWlnaHQiLCJEZXZpY2UiLCJzeXN0ZW0iLCJwaG9uZSIsImhlaWdodCIsIndpZHRoIiwiaGVhZGVyU3R5bGUiLCJwMTNuTW9kZSIsIm5vRGF0YVRleHQiLCJkZWxlZ2F0ZSIsImN1c3RvbURhdGEiLCJkZXBlbmRlbnRzIiwidmFyaWFudCIsIm5vRGF0YSIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZGNDaGFydFRlbXBsYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGVkUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHsgQW5hbHl0aWNzQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB7IENvcmVBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0Q2hhcnRNZWFzdXJlUm9sZVR5cGUsXG5cdENoYXJ0IGFzIENoYXJ0VHlwZSxcblx0Q3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGUsXG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFQb2ludCxcblx0SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlLFxuXHRMZXZlbFRocmVzaG9sZHNUeXBlLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IE9wZXJhdGlvbkdyb3VwaW5nVHlwZSwgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHtcblx0bm90RXF1YWwsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZyxcblx0dHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YU1vZGVsT2JqZWN0UGF0aEZvckFjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGFpSWNvbixcblx0aXNNZW51QUlPcGVyYXRpb24sXG5cdHR5cGUgQW5ub3RhdGlvbkFjdGlvbixcblx0dHlwZSBCYXNlQWN0aW9uLFxuXHR0eXBlIEN1c3RvbUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0UDEzblR5cGUsIENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxpemF0aW9uQW5kUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0Z2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uLFxuXHRnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQWN0aW9uR3JvdXBcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCB0eXBlIHsgU2VnbWVudGVkQnV0dG9uJFNlbGVjdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uSXRlbSBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uSXRlbVwiO1xuaW1wb3J0IHR5cGUgeyBPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHsgRG9jayB9IGZyb20gXCJzYXAvdWkvY29yZS9Qb3B1cFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50TWFuYWdlbWVudCRTYXZlRXZlbnQsIFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBNZGNDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCBNZGNDaGFydEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvY2hhcnQvSXRlbVwiO1xuaW1wb3J0IFBlcnNpc3RlbmNlUHJvdmlkZXIgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9QZXJzaXN0ZW5jZVByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV4cGFuZFBhdGhUeXBlLCBNZXRhTW9kZWxFbnVtLCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ2hhcnRCbG9jayBmcm9tIFwiLi4vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCBEZWZhdWx0QWN0aW9uSGFuZGxlciBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9EZWZhdWx0QWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gXCIuL0NoYXJ0SGVscGVyXCI7XG5cbmNvbnN0IG1lYXN1cmVSb2xlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXMxXCI6IFwiYXhpczFcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzMlwiOiBcImF4aXMyXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczNcIjogXCJheGlzM1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXM0XCI6IFwiYXhpczRcIlxufTtcbnR5cGUgRXh0ZW5kZWRBY3Rpb25Hcm91cCA9IEFjdGlvbkdyb3VwICYgeyBtZW51Q29udGVudEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBBY3Rpb24+IH07XG50eXBlIENoYXJ0UGF5bG9hZCA9IHtcblx0Y2hhcnRDb250ZXh0UGF0aDogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBvYmplY3Q7XG5cdHNlbGVjdGlvbk1vZGU6IHN0cmluZztcbn07XG50eXBlIENoYXJ0RGVsZWdhdGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0cGF5bG9hZDogQ2hhcnRQYXlsb2FkO1xufTtcbmV4cG9ydCB0eXBlIEFjdGlvbk9yQWN0aW9uR3JvdXAgPSBSZWNvcmQ8c3RyaW5nLCBBY3Rpb24gfCBFeHRlbmRlZEFjdGlvbkdyb3VwPjtcbmV4cG9ydCB0eXBlIEN1c3RvbUFuZEFjdGlvbiA9IEN1c3RvbUFjdGlvbiAmIChBY3Rpb24gfCBBY3Rpb25Hcm91cCk7XG50eXBlIEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHZpc2libGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHVzZURlZmF1bHRBY3Rpb25Pbmx5PzogYm9vbGVhbjtcblx0YnV0dG9uTW9kZT86IHN0cmluZztcblx0ZGVmYXVsdEFjdGlvbj86IHN0cmluZztcblx0YWN0aW9ucz86IEN1c3RvbUFjdGlvbjtcblx0cHJpb3JpdHk/OiBPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eTtcblx0Z3JvdXA/OiBudW1iZXI7XG59O1xuXG5lbnVtIHBlcnNvbmFsaXphdGlvblZhbHVlcyB7XG5cdFNvcnQgPSBcIlNvcnRcIixcblx0VHlwZSA9IFwiVHlwZVwiLFxuXHRJdGVtID0gXCJJdGVtXCIsXG5cdEZpbHRlciA9IFwiRmlsdGVyXCJcbn1cblxuZXhwb3J0IHR5cGUgTWVhc3VyZVR5cGUgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdHJvbGU/OiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcblx0YWdncmVnYXRpb25NZXRob2Q/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+O1xuXHR2YWx1ZT86IHN0cmluZztcblx0ZGF0YVBvaW50Pzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBEaW1lbnNpb25UeXBlID0ge1xuXHRpZD86IHN0cmluZztcblx0a2V5Pzogc3RyaW5nO1xuXHRyb2xlPzogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+O1xuXHR2YWx1ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbW1hbmRBY3Rpb24gPSB7XG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQ7XG5cdG9uRXhlY3V0ZUFjdGlvbjogc3RyaW5nO1xuXHRvbkV4ZWN1dGVJQk4/OiBzdHJpbmc7XG5cdG9uRXhlY3V0ZU1hbmlmZXN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG59O1xuXG50eXBlIFRvb2xCYXJBY3Rpb24gPSB7XG5cdHVuaXR0ZXN0aWQ6IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGFyaWFIYXNQb3B1cD86IHN0cmluZztcblx0cHJlc3M/OiBzdHJpbmc7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHR2aXNpYmxlOiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDdXN0b21EYXRhID0ge1xuXHR0YXJnZXRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRlbnRpdHlTZXQ6IHN0cmluZztcblx0ZW50aXR5VHlwZTogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0bXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IHN0cmluZztcblx0c2VnbWVudGVkQnV0dG9uSWQ6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdGFwcGx5U3VwcG9ydGVkOiBvYmplY3Q7XG5cdHZpelByb3BlcnRpZXM6IG9iamVjdDtcblx0ZHJhZnRTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRtdWx0aVZpZXdzPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBvYmplY3Q7XG5cdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZT86IG9iamVjdDtcblx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZT86IG9iamVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIENoYXJ0Q29udGV4dE9iamVjdFBhdGggPSBDaGFydFR5cGUgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudDtcblxudHlwZSBBY3Rpb25Qcm9wZXJ0aWVzID0ge1xuXHRrZXk6IHN0cmluZztcblx0dGV4dDogc3RyaW5nO1xuXHRfX25vV3JhcDogYm9vbGVhbjtcblx0cHJlc3M6IHN0cmluZyB8IG51bGw7XG5cdHJlcXVpcmVzU2VsZWN0aW9uOiBib29sZWFuO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRwb3NpdGlvbj86IG9iamVjdDtcblx0bWVudT86IHN0cmluZ1tdO1xufTtcblxudHlwZSBUb29sYmFyQWN0aW9uID0gTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFydERlZmluaXRpb24oXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29udHJvbFBhdGg6IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0bGV0IHZpc3VhbGl6YXRpb25QYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGxldCB2aXN1YWxpemF0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW107XG5cdGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5WaXN1YWxpemF0aW9ucztcblx0fSBlbHNlIGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5QcmVzZW50YXRpb25WYXJpYW50Py5WaXN1YWxpemF0aW9ucztcblx0fVxuXHRpZiAodmlzdWFsaXphdGlvbnM/Lmxlbmd0aCAmJiAhY2hlY2tDaGFydEV4aXN0cyh2aXN1YWxpemF0aW9ucywgY29udHJvbFBhdGgpKSB7XG5cdFx0dmlzdWFsaXphdGlvblBhdGggPSBcIlwiO1xuXHR9XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiB2aXN1YWxpemF0aW9uUGF0aCBpcyBtaXNzaW5nIG9yIHZpc3VhbGl6YXRpb25QYXRoIGlzIG5vdCBmb3VuZCBpbiBjb250cm9sIChpbiBjYXNlIG9mIFByZXNlbnRhdGlvblZhcmlhbnQpXG5cdGlmICghdmlzdWFsaXphdGlvblBhdGgpIHtcblx0XHR2aXN1YWxpemF0aW9uUGF0aCA9IGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBjaGFydEJsb2NrLnVzZUNvbmRlbnNlZExheW91dCxcblx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRydWUsXG5cdFx0c2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb246IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gdmlzdWFsaXphdGlvbkRlZmluaXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBjaGVja0NoYXJ0RXhpc3RzKHZpc3VhbGl6YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuIHZpc3VhbGl6YXRpb25zLnNvbWUoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb25QYXRoPy5pbmNsdWRlcyh2aXN1YWxpemF0aW9uLiRBbm5vdGF0aW9uUGF0aCkpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50SWQobWFjcm9JZDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGAke21hY3JvSWR9LWNvbnRlbnRgO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHVzZWQgdG8gZ2V0IGRldGFpbHMgV1JUIGFjdGlvbihzKSBzaG93biBpbiB0aGUgY2hhcnQncyB0b29sYmFyLlxuICogQHBhcmFtIGNoYXJ0QmxvY2sgQ2hhcnQgYmxvY2sgcHJvcGVydGllc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFZpc3VhbGl6YXRpb24gcGF0aFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggYWxsIHRoZSByZXF1aXJlZCBhY3Rpb24ocykgZGV0YWlsc1xuICovXG5mdW5jdGlvbiBnZXRFeHRyYVBhcmFtcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgb2JqZWN0PiB7XG5cdGNvbnN0IGV4dHJhUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblxuXHRpZiAoY2hhcnRCbG9jay5hY3Rpb25zKSB7XG5cdFx0T2JqZWN0LnZhbHVlcyhjaGFydEJsb2NrLmFjdGlvbnMpPy5mb3JFYWNoKChhY3Rpb246IEFjdGlvbiB8IEFjdGlvbkdyb3VwKSA9PiB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxBY3Rpb25Hcm91cD4oXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkFjdGlvbkdyb3VwXCIpKSB7XG5cdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uLmtleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGFjdGlvbi5rZXksXG5cdFx0XHRcdFx0YWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBsYWNlbWVudDogYWN0aW9uLnBsYWNlbWVudCxcblx0XHRcdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YWN0aW9uLmFjdGlvbnMubWFwKChfLCBpbmRleCkgPT4gYWN0aW9uLmtleSArIFwiX01lbnVfXCIgKyBpbmRleClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRhY3Rpb24uYWN0aW9ucz8uZm9yRWFjaCgoYWN0OiBBY3Rpb24sIGluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25LZXkgPSBhY3Rpb24ua2V5LmNvbmNhdChcIl9NZW51X1wiLCBpbmRleCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb25LZXldID0gZ2V0QWN0aW9uUHJvcGVydGllcyhcblx0XHRcdFx0XHRcdGFjdGlvbktleSxcblx0XHRcdFx0XHRcdGFjdC50ZXh0LFxuXHRcdFx0XHRcdFx0YWN0LnByZXNzLFxuXHRcdFx0XHRcdFx0ISFhY3QucmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3QuZW5hYmxlZCA9PT0gbnVsbCB8fCBhY3QuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFjdC5lbmFibGVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5pc0E8QWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uXCIpKSB7XG5cdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uLmtleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGFjdGlvbi5rZXksXG5cdFx0XHRcdFx0YWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uLnByZXNzLFxuXHRcdFx0XHRcdCEhYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID09PSBudWxsIHx8IGFjdGlvbi5lbmFibGVkID09IHVuZGVmaW5lZCA/IHRydWUgOiBhY3Rpb24uZW5hYmxlZCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IGFjdGlvbi5wbGFjZW1lbnQsXG5cdFx0XHRcdFx0XHRhbmNob3I6IGFjdGlvbi5hbmNob3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKHZpc3VhbGl6YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suYWN0aW9ucykge1xuXHRcdGV4dHJhUGFyYW1zW3Zpc3VhbGl6YXRpb25QYXRoXSA9IHtcblx0XHRcdGFjdGlvbnM6IGN1c3RvbUFjdGlvbnNcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGV4dHJhUGFyYW1zO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRrZXk6IHN0cmluZyxcblx0dGV4dDogc3RyaW5nLFxuXHRwcmVzczogc3RyaW5nIHwgbnVsbCxcblx0cmVxdWlyZXNTZWxlY3Rpb246IGJvb2xlYW4sXG5cdGVuYWJsZWQ6IGJvb2xlYW4sXG5cdHBvc2l0aW9uPzogb2JqZWN0LFxuXHRtZW51Pzogc3RyaW5nW11cbik6IEFjdGlvblByb3BlcnRpZXMge1xuXHRjb25zdCBhY3Rpb25Qcm9wZXJ0aWVzOiBBY3Rpb25Qcm9wZXJ0aWVzID0ge1xuXHRcdGtleSxcblx0XHR0ZXh0LFxuXHRcdF9fbm9XcmFwOiB0cnVlLFxuXHRcdHByZXNzLFxuXHRcdHJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdGVuYWJsZWRcblx0fTtcblxuXHRpZiAocG9zaXRpb24pIHtcblx0XHRhY3Rpb25Qcm9wZXJ0aWVzLnBvc2l0aW9uID0gcG9zaXRpb247XG5cdH1cblx0aWYgKG1lbnUpIHtcblx0XHRhY3Rpb25Qcm9wZXJ0aWVzLm1lbnUgPSBtZW51O1xuXHR9XG5cblx0cmV0dXJuIGFjdGlvblByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGE6IG9iamVjdCB8IEJhc2VBY3Rpb25bXSB8IEN1c3RvbUFjdGlvbik6IENvbnRleHQge1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IGAvJHt1aWQoKX1gO1xuXHRjb25zdCBhY3Rpb25zTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdGFjdGlvbnNNb2RlbC5zZXRQcm9wZXJ0eShjb250ZXh0UGF0aCwgZGF0YSk7XG5cdHJldHVybiBhY3Rpb25zTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY29udGV4dFBhdGgpITtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRNZWFzdXJlcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQ29udGV4dCB7XG5cdGNvbnN0IGNoYXJ0QW5ub3RhdGlvblBhdGggPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hbm5vdGF0aW9uUGF0aC5zcGxpdChcIi9cIik7XG5cdC8vIHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBnZXRBYnNvbHV0ZVBhdGggaW4gY29udmVydGVyQ29udGV4dCByZXR1cm5zIFwiL1NhbGVzT3JkZXJNYW5hZ2UvX0l0ZW0vX0l0ZW0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLnYxLkNoYXJ0XCIgYXMgYW5ub3RhdGlvblBhdGhcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjaGFydEFubm90YXRpb25QYXRoXG5cdFx0LmZpbHRlcihmdW5jdGlvbiAoaXRlbTogc3RyaW5nLCBwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGNoYXJ0QW5ub3RhdGlvblBhdGguaW5kZXhPZihpdGVtKSA9PSBwb3M7XG5cdFx0fSlcblx0XHQudG9TdHJpbmcoKVxuXHRcdC5yZXBsYWNlQWxsKFwiLFwiLCBcIi9cIik7XG5cdGNvbnN0IG9DaGFydCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxDaGFydFR5cGU+KFxuXHRcdGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhbm5vdGF0aW9uUGF0aCkhLFxuXHRcdGNoYXJ0QmxvY2suX2NvbnRleHRcblx0KS50YXJnZXRPYmplY3Q7XG5cdGxldCBtZWFzdXJlczogTWVhc3VyZVR5cGVbXSA9IFtdO1xuXHRjb25zdCBhbm5vUGF0aCA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRQYXRoKCk7XG5cdGNvbnN0IGNoYXJ0TWVhc3VyZXMgPSBvQ2hhcnQ/Lk1lYXN1cmVzID8gb0NoYXJ0Lk1lYXN1cmVzIDogW107XG5cdGNvbnN0IGNoYXJ0RHluYW1pY01lYXN1cmVzID0gb0NoYXJ0Py5EeW5hbWljTWVhc3VyZXMgPyBvQ2hhcnQuRHluYW1pY01lYXN1cmVzIDogW107XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBhbm5vUGF0aC5yZXBsYWNlKC9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuKENoYXJ0fFByZXNlbnRhdGlvblZhcmlhbnR8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkuKi8sIFwiXCIpO1xuXHRjb25zdCB0cmFuc0FnZ3JlZ2F0aW9ucyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnRyYW5zQWdnIGFzIFJlY29yZDxzdHJpbmcsIE1lYXN1cmVUeXBlPjtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRpb25zID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY3VzdG9tQWdnIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuXHQvLyBpbnRpbWF0ZSB0aGUgdXNlciBpZiB0aGVyZSBpcyBBZ2dyZWdhdGVQcm9wZXJ0eSBjb25maWd1cmVkIHdpdGggbm8gRHluYW1pY01lYXN1cmVzLCBidXQgdGhlcmUgYXJlIG1lYXN1cmVzIHdpdGggQWdncmVnYXRlZFByb3BlcnRpZXNcblx0aWYgKFxuXHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmXG5cdFx0IWNoYXJ0RHluYW1pY01lYXN1cmVzICYmXG5cdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNUcmFuc0FnZ0luTWVhc3VyZXNcblx0KSB7XG5cdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcIlRoZSB0cmFuc2Zvcm1hdGlvbmFsIGFnZ3JlZ2F0ZSBtZWFzdXJlcyBhcmUgY29uZmlndXJlZCBhcyBDaGFydC5NZWFzdXJlcyBidXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgYXMgQ2hhcnQuRHluYW1pY01lYXN1cmVzIGluc3RlYWQuIFBsZWFzZSBjaGVjayB0aGUgU0FQIEhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgY29ycmVjdCB0aGUgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgaXNDdXN0b21BZ2dyZWdhdGVJc01lYXN1cmUgPSBjaGFydE1lYXN1cmVzLnNvbWUoKG9DaGFydE1lYXN1cmU6IE1lYXN1cmVUeXBlKSA9PiB7XG5cdFx0Y29uc3Qgb0N1c3RvbUFnZ01lYXN1cmUgPSBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9ucywgb0NoYXJ0TWVhc3VyZSk7XG5cdFx0cmV0dXJuICEhb0N1c3RvbUFnZ01lYXN1cmU7XG5cdH0pO1xuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiYgIWNoYXJ0RHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgIWlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIGNvbmZpZ3VyZSBEeW5hbWljTWVhc3VyZXMgZm9yIHRoZSBjaGFydFwiKTtcblx0fVxuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiYgb0NoYXJ0KSB7XG5cdFx0Zm9yIChjb25zdCBkeW5hbWljTWVhc3VyZSBvZiBjaGFydER5bmFtaWNNZWFzdXJlcykge1xuXHRcdFx0bWVhc3VyZXMgPSBnZXREeW5hbWljTWVhc3VyZXMobWVhc3VyZXMsIGR5bmFtaWNNZWFzdXJlLCBlbnRpdHlTZXRQYXRoLCBvQ2hhcnQsIGNoYXJ0QmxvY2spO1xuXHRcdH1cblx0fVxuXHRmb3IgKGNvbnN0IGNoYXJ0TWVhc3VyZSBvZiBjaGFydE1lYXN1cmVzKSB7XG5cdFx0Y29uc3Qga2V5ID0gY2hhcnRNZWFzdXJlLnZhbHVlO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ01lYXN1cmUgPSBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9ucywgY2hhcnRNZWFzdXJlKTtcblx0XHRjb25zdCBtZWFzdXJlVHlwZTogTWVhc3VyZVR5cGUgPSB7fTtcblx0XHRpZiAoY3VzdG9tQWdnTWVhc3VyZSkge1xuXHRcdFx0bWVhc3VyZXMgPSBzZXRDdXN0b21BZ2dNZWFzdXJlKG1lYXN1cmVzLCBtZWFzdXJlVHlwZSwgY3VzdG9tQWdnTWVhc3VyZSwga2V5KTtcblx0XHRcdC8vaWYgdGhlcmUgaXMgbmVpdGhlciBhZ2dyZWdhdGVkUHJvcGVydHkgbm9yIG1lYXN1cmVzIHBvaW50aW5nIHRvIGN1c3RvbUFnZ3JlZ2F0ZXMsIGJ1dCB3ZSBoYXZlIG5vcm1hbCBtZWFzdXJlcy4gTm93IGNoZWNrIGlmIHRoZXNlIG1lYXN1cmVzIGFyZSBwYXJ0IG9mIEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIE9ialxuXHRcdH0gZWxzZSBpZiAoIWNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmIHRyYW5zQWdncmVnYXRpb25zW2tleV0pIHtcblx0XHRcdG1lYXN1cmVzID0gc2V0VHJhbnNBZ2dNZWFzdXJlKG1lYXN1cmVzLCBtZWFzdXJlVHlwZSwgdHJhbnNBZ2dyZWdhdGlvbnMsIGtleSk7XG5cdFx0fVxuXHRcdHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoY2hhcnRCbG9jay5fY2hhcnQuTWVhc3VyZUF0dHJpYnV0ZXMsIGVudGl0eVNldFBhdGgsIG1lYXN1cmVUeXBlLCBjaGFydEJsb2NrKTtcblx0fVxuXHRjb25zdCBtZWFzdXJlc01vZGVsOiBKU09OTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1lYXN1cmVzKTtcblx0KG1lYXN1cmVzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0cmV0dXJuIG1lYXN1cmVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xufVxuXG5mdW5jdGlvbiBzZXRDdXN0b21BZ2dNZWFzdXJlKG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLCBtZWFzdXJlOiBNZWFzdXJlVHlwZSwgY3VzdG9tQWdnTWVhc3VyZTogTWVhc3VyZVR5cGUsIGtleTogc3RyaW5nKTogTWVhc3VyZVR5cGVbXSB7XG5cdGlmIChrZXkuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBNZWFzdXJlOiAke2tleX0gZnJvbSBhbiBhc3NvY2lhdGlvbiBjYW5ub3QgYmUgdXNlZGApO1xuXHR9XG5cdG1lYXN1cmUua2V5ID0gY3VzdG9tQWdnTWVhc3VyZS52YWx1ZTtcblx0bWVhc3VyZS5yb2xlID0gXCJheGlzMVwiO1xuXHRtZWFzdXJlLmxhYmVsID0gY3VzdG9tQWdnTWVhc3VyZS5sYWJlbDtcblx0bWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBjdXN0b21BZ2dNZWFzdXJlLnZhbHVlO1xuXHRtZWFzdXJlcy5wdXNoKG1lYXN1cmUpO1xuXHRyZXR1cm4gbWVhc3VyZXM7XG59XG5cbmZ1bmN0aW9uIHNldFRyYW5zQWdnTWVhc3VyZShcblx0bWVhc3VyZXM6IE1lYXN1cmVUeXBlW10sXG5cdG1lYXN1cmU6IE1lYXN1cmVUeXBlLFxuXHR0cmFuc0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgTWVhc3VyZVR5cGU+LFxuXHRrZXk6IHN0cmluZ1xuKTogTWVhc3VyZVR5cGVbXSB7XG5cdGNvbnN0IHRyYW5zQWdnTWVhc3VyZSA9IHRyYW5zQWdncmVnYXRpb25zW2tleV07XG5cdG1lYXN1cmUua2V5ID0gdHJhbnNBZ2dNZWFzdXJlLm5hbWU7XG5cdG1lYXN1cmUucm9sZSA9IFwiYXhpczFcIjtcblx0bWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBrZXk7XG5cdG1lYXN1cmUuYWdncmVnYXRpb25NZXRob2QgPSB0cmFuc0FnZ01lYXN1cmUuYWdncmVnYXRpb25NZXRob2Q7XG5cdG1lYXN1cmUubGFiZWwgPSB0cmFuc0FnZ01lYXN1cmUubGFiZWwgfHwgbWVhc3VyZS5sYWJlbDtcblx0bWVhc3VyZXMucHVzaChtZWFzdXJlKTtcblx0cmV0dXJuIG1lYXN1cmVzO1xufVxuXG5mdW5jdGlvbiBnZXREeW5hbWljTWVhc3VyZXMoXG5cdG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLFxuXHRjaGFydER5bmFtaWNNZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRjaGFydDogQ2hhcnRUeXBlLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiBNZWFzdXJlVHlwZVtdIHtcblx0Y29uc3Qga2V5ID0gY2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZSB8fCBcIlwiO1xuXHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZW50aXR5U2V0UGF0aCArIGtleSkgYXMgQ29udGV4dCxcblx0XHRjaGFydEJsb2NrLl9jb250ZXh0XG5cdCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoa2V5LmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gTWVhc3VyZTogJHtrZXl9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHQvLyBjaGVjayBpZiB0aGUgYW5ub3RhdGlvbiBwYXRoIGlzIHdyb25nXG5cdH0gZWxzZSBpZiAoIWFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgdGhlIHJpZ2h0IEFubm90YXRpb25QYXRoIHRvIHRoZSBEeW5hbWljIE1lYXN1cmUgJHtjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlfWApO1xuXHRcdC8vIGNoZWNrIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIEBcblx0fSBlbHNlIGlmIChjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlPy5zdGFydHNXaXRoKGBAJHtBbmFseXRpY3NBbm5vdGF0aW9uVGVybXMuQWdncmVnYXRlZFByb3BlcnR5fWApID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgcHJvdmlkZSB0aGUgcmlnaHQgQW5ub3RhdGlvblBhdGggdG8gdGhlIER5bmFtaWMgTWVhc3VyZSAke2NoYXJ0RHluYW1pY01lYXN1cmUudmFsdWV9YCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gY2hlY2sgaWYgQWdncmVnYXRlZFByb3BlcnR5IGlzIGRlZmluZWQgaW4gZ2l2ZW4gRHluYW1pY01lYXN1cmVcblx0XHRjb25zdCBkeW5hbWljTWVhc3VyZTogTWVhc3VyZVR5cGUgPSB7XG5cdFx0XHRrZXk6IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5OYW1lLnRvU3RyaW5nKCksXG5cdFx0XHRyb2xlOiBcImF4aXMxXCJcblx0XHR9O1xuXHRcdGR5bmFtaWNNZWFzdXJlLnByb3BlcnR5UGF0aCA9IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGFibGVQcm9wZXJ0eS52YWx1ZTtcblx0XHRkeW5hbWljTWVhc3VyZS5hZ2dyZWdhdGlvbk1ldGhvZCA9IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGlvbk1ldGhvZC50b1N0cmluZygpO1xuXHRcdGR5bmFtaWNNZWFzdXJlLmxhYmVsID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcoXG5cdFx0XHRhZ2dyZWdhdGVkUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdFx0YWdncmVnYXRlZFByb3BlcnR5LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/XG5cdFx0XHRcdFwiXCJcblx0XHQpO1xuXHRcdHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoY2hhcnQuTWVhc3VyZUF0dHJpYnV0ZXMsIGVudGl0eVNldFBhdGgsIGR5bmFtaWNNZWFzdXJlLCBjaGFydEJsb2NrKTtcblx0XHRtZWFzdXJlcy5wdXNoKGR5bmFtaWNNZWFzdXJlKTtcblx0fVxuXHRyZXR1cm4gbWVhc3VyZXM7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFnZ01lYXN1cmUoY3VzdG9tQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBNZWFzdXJlVHlwZSB8IHVuZGVmaW5lZD4sIG1lYXN1cmU6IE1lYXN1cmVUeXBlKTogTWVhc3VyZVR5cGUgfCBudWxsIHtcblx0aWYgKG1lYXN1cmUudmFsdWUgJiYgY3VzdG9tQWdncmVnYXRpb25zW21lYXN1cmUudmFsdWVdKSB7XG5cdFx0bWVhc3VyZS5sYWJlbCA9IGN1c3RvbUFnZ3JlZ2F0aW9uc1ttZWFzdXJlLnZhbHVlXT8ubGFiZWw7XG5cdFx0cmV0dXJuIG1lYXN1cmU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoXG5cdG1lYXN1cmVBdHRyaWJ1dGVzOiBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlW10sXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0bWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IHZvaWQge1xuXHRpZiAobWVhc3VyZUF0dHJpYnV0ZXM/Lmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgbWVhc3VyZUF0dHJpYnV0ZSBvZiBtZWFzdXJlQXR0cmlidXRlcykge1xuXHRcdFx0X3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZShtZWFzdXJlQXR0cmlidXRlLCBlbnRpdHlTZXRQYXRoLCBtZWFzdXJlLCBjaGFydEJsb2NrKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gX3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZShcblx0bWVhc3VyZUF0dHJpYnV0ZTogQ2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRtZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogdm9pZCB7XG5cdGNvbnN0IHBhdGggPSBtZWFzdXJlQXR0cmlidXRlLkR5bmFtaWNNZWFzdXJlID8gbWVhc3VyZUF0dHJpYnV0ZT8uRHluYW1pY01lYXN1cmU/LnZhbHVlIDogbWVhc3VyZUF0dHJpYnV0ZT8uTWVhc3VyZT8udmFsdWU7XG5cdGNvbnN0IG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQgPSBtZWFzdXJlQXR0cmlidXRlLkRhdGFQb2ludCA/IG1lYXN1cmVBdHRyaWJ1dGU/LkRhdGFQb2ludD8udmFsdWUgOiBudWxsO1xuXHRjb25zdCByb2xlID0gbWVhc3VyZUF0dHJpYnV0ZS5Sb2xlO1xuXHRjb25zdCBkYXRhUG9pbnQ6IERhdGFQb2ludCB8IHVuZGVmaW5lZCA9IG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnRcblx0XHQ/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhUG9pbnQ+KFxuXHRcdFx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZW50aXR5U2V0UGF0aCArIG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQpIGFzIENvbnRleHQsXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2NvbnRleHRcblx0XHQgICkudGFyZ2V0T2JqZWN0XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGlmIChtZWFzdXJlLmtleSA9PT0gcGF0aCkge1xuXHRcdHNldE1lYXN1cmVSb2xlKG1lYXN1cmUsIHJvbGUgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPENoYXJ0TWVhc3VyZVJvbGVUeXBlPik7XG5cdFx0Ly9zdGlsbCB0byBhZGQgZGF0YSBwb2ludCwgYnV0IFVJNSBDaGFydCBBUEkgaXMgbWlzc2luZ1xuXHRcdHNldE1lYXN1cmVEYXRhUG9pbnQobWVhc3VyZSwgZGF0YVBvaW50KTtcblx0fVxufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgZGF0YSBwb2ludCBhcyBhIEpTT04gb2JqZWN0LlxuICogQHBhcmFtIG9EYXRhUG9pbnRBbm5vXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGpzb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURhdGFQb2ludFByb3BlcnR5KG9EYXRhUG9pbnRBbm5vOiBEYXRhUG9pbnQpOiB7XG5cdHRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRmb3JlQ2FzdFZhbHVlPzogc3RyaW5nO1xuXHRjcml0aWNhbGl0eT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufSB7XG5cdGNvbnN0IG9EYXRhUG9pbnQ6IHsgdGFyZ2V0VmFsdWU/OiBzdHJpbmc7IGZvcmVDYXN0VmFsdWU/OiBzdHJpbmc7IGNyaXRpY2FsaXR5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSA9IHt9O1xuXG5cdGlmIChvRGF0YVBvaW50QW5uby5UYXJnZXRWYWx1ZSkge1xuXHRcdG9EYXRhUG9pbnQudGFyZ2V0VmFsdWUgPSBvRGF0YVBvaW50QW5uby5UYXJnZXRWYWx1ZS4kUGF0aDtcblx0fVxuXG5cdGlmIChvRGF0YVBvaW50QW5uby5Gb3JlY2FzdFZhbHVlKSB7XG5cdFx0b0RhdGFQb2ludC5mb3JlQ2FzdFZhbHVlID0gb0RhdGFQb2ludEFubm8uRm9yZWNhc3RWYWx1ZS4kUGF0aDtcblx0fVxuXG5cdGxldCBvQ3JpdGljYWxpdHkgPSBudWxsO1xuXHRpZiAob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkpIHtcblx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkpICYmIG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5LnBhdGgpIHtcblx0XHRcdC8vd2lsbCBiZSBhbiBhZ2dyZWdhdGVkIHByb3BlcnR5IG9yIGN1c3RvbSBhZ2dyZWdhdGVcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0Q2FsY3VsYXRlZDogb0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkucGF0aFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHRTdGF0aWM6IChvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eSBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08Q3JpdGljYWxpdHlUeXBlPikuJEVudW1NZW1iZXIucmVwbGFjZShcblx0XHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZS9cIixcblx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdClcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pIHtcblx0XHRjb25zdCBvVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0gPSB7fTtcblx0XHRjb25zdCBiQ29uc3RhbnQgPSBidWlsZFRocmVzaG9sZHMob1RocmVzaG9sZHMsIG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXG5cdFx0aWYgKGJDb25zdGFudCkge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHRDb25zdGFudFRocmVzaG9sZHM6IG9UaHJlc2hvbGRzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQ3JpdGljYWxpdHkgPSB7XG5cdFx0XHRcdER5bmFtaWNUaHJlc2hvbGRzOiBvVGhyZXNob2xkc1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRpZiAob0NyaXRpY2FsaXR5KSB7XG5cdFx0b0RhdGFQb2ludC5jcml0aWNhbGl0eSA9IG9Dcml0aWNhbGl0eTtcblx0fVxuXG5cdHJldHVybiBvRGF0YVBvaW50O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB0aHJlc2hvbGRzIGFyZSBkeW5hbWljIG9yIGNvbnN0YW50LlxuICogQHBhcmFtIHRocmVzaG9sZHMgVGhlIHRocmVzaG9sZCBza2VsZXRvblxuICogQHBhcmFtIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24gVGhlIFVJLkRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uIGFubm90YXRpb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGhyZXNob2xkIHNob3VsZCBiZSBzdXBwbGllZCBhcyBDb25zdGFudFRocmVzaG9sZHMsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGUgdGhyZXNob2xkIHNob3VsZFxuICogYmUgc3VwcGxpZWQgYXMgRHluYW1pY1RocmVzaG9sZHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVGhyZXNob2xkcyhcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiBib29sZWFuIHtcblx0Y29uc3Qga2V5cyA9IFtcblx0XHRcIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcIixcblx0XHRcIlRvbGVyYW5jZVJhbmdlTG93VmFsdWVcIixcblx0XHRcIlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXCIsXG5cdFx0XCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVwiXG5cdF07XG5cdHRocmVzaG9sZHMuSW1wcm92ZW1lbnREaXJlY3Rpb24gPSAoXG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbi5JbXByb3ZlbWVudERpcmVjdGlvbiBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlPlxuXHQpPy4kRW51bU1lbWJlci5yZXBsYWNlKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL1wiLCBcIlwiKTtcblxuXHRjb25zdCBkeW5hbWljVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IHVzZWRNZWFzdXJlczogdW5rbm93bltdIH0gPSB7XG5cdFx0b25lU3VwcGxpZWQ6IGZhbHNlLFxuXHRcdHVzZWRNZWFzdXJlczogW11cblx0XHQvLyBjb21iaW5hdGlvbiB0byBjaGVjayB3aGV0aGVyIGF0IGxlYXN0IG9uZSBpcyBzdXBwbGllZFxuXHR9O1xuXHRjb25zdCBjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuXHRcdG9uZVN1cHBsaWVkOiBmYWxzZVxuXHRcdC8vIGNvbWJpbmF0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYXQgbGVhc3Qgb25lIGlzIHN1cHBsaWVkXG5cdH07XG5cblx0aW5pdGlhbGlzZVRocmVzaG9sZHMoa2V5cywgZHluYW1pY1RocmVzaG9sZHMsIGNvbnN0YW50VGhyZXNob2xkcywgY3JpdGljYWxpdHlDYWxjdWxhdGlvbik7XG5cdHByb2Nlc3NUaHJlc2hvbGRzKGtleXMsIHRocmVzaG9sZHMsIGR5bmFtaWNUaHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXG5cdHJldHVybiAhZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQ7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2VUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0ZHluYW1pY1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyB1c2VkTWVhc3VyZXM6IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkeW5hbWljVGhyZXNob2xkc1trZXldID0gY3JpdGljYWxpdHlDYWxjdWxhdGlvbltrZXkgYXMga2V5b2YgQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVdXG5cdFx0XHQ/IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXS4kUGF0aFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0ZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQgPSBkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCB8fCBkeW5hbWljVGhyZXNob2xkc1trZXldO1xuXG5cdFx0aWYgKCFkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCkge1xuXHRcdFx0Ly8gb25seSBjb25zaWRlciBpbiBjYXNlIG5vIGR5bmFtaWMgdGhyZXNob2xkIGlzIHN1cHBsaWVkXG5cdFx0XHRjb25zdGFudFRocmVzaG9sZHNba2V5XSA9IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXTtcblx0XHRcdGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCA9IGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCB8fCBjb25zdGFudFRocmVzaG9sZHNba2V5XTtcblx0XHR9IGVsc2UgaWYgKGR5bmFtaWNUaHJlc2hvbGRzW2tleV0pIHtcblx0XHRcdGR5bmFtaWNUaHJlc2hvbGRzLnVzZWRNZWFzdXJlcy5wdXNoKGR5bmFtaWNUaHJlc2hvbGRzW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRkeW5hbWljVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IHVzZWRNZWFzdXJlczogdW5rbm93bltdIH0sXG5cdGNvbnN0YW50VGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiB2b2lkIHtcblx0Ly8gZHluYW1pYyBkZWZpbml0aW9uIHNoYWxsIG92ZXJydWxlIGNvbnN0YW50IGRlZmluaXRpb25cblx0aWYgKGR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0aWYgKGR5bmFtaWNUaHJlc2hvbGRzW2tleV0pIHtcblx0XHRcdFx0dGhyZXNob2xkc1trZXldID0gZHluYW1pY1RocmVzaG9sZHNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyZXNob2xkcy51c2VkTWVhc3VyZXMgPSBkeW5hbWljVGhyZXNob2xkcy51c2VkTWVhc3VyZXM7XG5cdH0gZWxzZSB7XG5cdFx0dGhyZXNob2xkcy5BZ2dyZWdhdGlvbkxldmVscyA9IFtdO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyhrZXlzLCB0aHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdGxldCBvQWdncmVnYXRpb25MZXZlbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0Ly8gY2hlY2sgaWYgYXQgbGVhc3Qgb25lIHN0YXRpYyB2YWx1ZSBpcyBzdXBwbGllZFxuXHRpZiAoY29uc3RhbnRUaHJlc2hvbGRzLm9uZVN1cHBsaWVkKSB7XG5cdFx0Ly8gYWRkIG9uZSBlbnRyeSBpbiB0aGUgYWdncmVnYXRpb24gbGV2ZWxcblx0XHRvQWdncmVnYXRpb25MZXZlbCA9IHtcblx0XHRcdFZpc2libGVEaW1lbnNpb25zOiBudWxsXG5cdFx0fTtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBvZiBrZXlzKSB7XG5cdFx0XHRpZiAoY29uc3RhbnRUaHJlc2hvbGRzW3NLZXldKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkxldmVsW3NLZXldID0gY29uc3RhbnRUaHJlc2hvbGRzW3NLZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHM/LnB1c2gob0FnZ3JlZ2F0aW9uTGV2ZWwpO1xuXHR9XG5cblx0cHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzKGtleXMsIHRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24sIG9BZ2dyZWdhdGlvbkxldmVsKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlLFxuXHRhZ2dyZWdhdGlvbkxldmVsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCB7XG5cdGlmIChjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcyAmJiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGlvbkxldmVsSW5mbyBvZiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcykge1xuXHRcdFx0Y29uc3QgdmlzaWJsZURpbWVuc2lvbnM6IHN0cmluZ1tdIHwgbnVsbCA9IGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwgPyBbXSA6IG51bGw7XG5cblx0XHRcdGlmICh2aXNpYmxlRGltZW5zaW9ucyAmJiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsICYmIGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3BlcnR5UGF0aCBvZiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsKSB7XG5cdFx0XHRcdFx0dmlzaWJsZURpbWVuc2lvbnMucHVzaCgocHJvcGVydHlQYXRoIGFzIHVua25vd24gYXMgRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPikuJFByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YWdncmVnYXRpb25MZXZlbCA9IHtcblx0XHRcdFx0VmlzaWJsZURpbWVuc2lvbnM6IHZpc2libGVEaW1lbnNpb25zXG5cdFx0XHR9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYWdncmVnYXRpb25MZXZlbEluZm9ba2V5IGFzIHVua25vd24gYXMga2V5b2YgTGV2ZWxUaHJlc2hvbGRzVHlwZV07XG5cdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTGV2ZWxba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHM/LnB1c2goYWdncmVnYXRpb25MZXZlbCk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldE1lYXN1cmVEYXRhUG9pbnQobWVhc3VyZTogTWVhc3VyZVR5cGUsIGRhdGFQb2ludDogRGF0YVBvaW50IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGlmIChkYXRhUG9pbnQgJiYgZGF0YVBvaW50LlZhbHVlLiRQYXRoID09IG1lYXN1cmUua2V5KSB7XG5cdFx0bWVhc3VyZS5kYXRhUG9pbnQgPSBDaGFydEhlbHBlci5mb3JtYXRKU09OVG9TdHJpbmcoY3JlYXRlRGF0YVBvaW50UHJvcGVydHkoZGF0YVBvaW50KSkgfHwgXCJcIjtcblx0fVxufVxuXG5mdW5jdGlvbiBzZXRNZWFzdXJlUm9sZShtZWFzdXJlOiBNZWFzdXJlVHlwZSwgcm9sZTogTWV0YU1vZGVsRW51bTxDaGFydE1lYXN1cmVSb2xlVHlwZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0aWYgKHJvbGUgIT0gbnVsbCkge1xuXHRcdGNvbnN0IGluZGV4ID0gcm9sZS4kRW51bU1lbWJlcjtcblx0XHRtZWFzdXJlLnJvbGUgPSBtZWFzdXJlUm9sZVtpbmRleF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyhjaGFydEJsb2NrOiBDaGFydEJsb2NrLCBjaGFydENvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdGlmIChjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zLm1hcCgoY29tbWFuZEFjdGlvbjogQ29tbWFuZEFjdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGdldEFjdGlvbkNvbW1hbmQoY29tbWFuZEFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHBlcnNvbmFsaXphdGlvbiBTcGVjaWZpZXMgdGhlIGNoYXJ0IHBlcnNvbmFsaXphdGlvblxuICovXG5cbmZ1bmN0aW9uIGNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMocGVyc29uYWxpemF0aW9uOiBDaGFydFAxM25UeXBlLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogdm9pZCB7XG5cdGlmIChwZXJzb25hbGl6YXRpb24pIHtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSBcImZhbHNlXCIgfHwgKHBlcnNvbmFsaXphdGlvbiBhcyBib29sZWFuKSA9PT0gZmFsc2UpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gXCJ0cnVlXCIgfHwgKHBlcnNvbmFsaXphdGlvbiBhcyBib29sZWFuKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpLmpvaW4oXCIsXCIpO1xuXHRcdH0gZWxzZSBpZiAodmVyaWZ5VmFsaWRQZXJzb25hbGl6YXRpb24ocGVyc29uYWxpemF0aW9uIGFzIHN0cmluZykgPT09IHRydWUpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHBlcnNvbmFsaXphdGlvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gcGVyc29uYWxpemF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgcGVyc29uYWxpemF0aW9uIGlzIHZhbGlkIG9yIG5vdCB2YWxpZFxuICovXG5mdW5jdGlvbiB2ZXJpZnlWYWxpZFBlcnNvbmFsaXphdGlvbihwZXJzb25hbGl6YXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgdmFsaWQgPSB0cnVlO1xuXHRjb25zdCBzcGxpdEFycmF5ID0gcGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgYWNjZXB0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpO1xuXHRzcGxpdEFycmF5LmZvckVhY2goKGFycmF5RWxlbWVudCkgPT4ge1xuXHRcdGlmICghYWNjZXB0ZWRWYWx1ZXMuaW5jbHVkZXMoYXJyYXlFbGVtZW50KSkge1xuXHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdmFsaWQ7XG59XG5cbmZ1bmN0aW9uIGdldFZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IGNoYXJ0QmxvY2sudmFyaWFudE1hbmFnZW1lbnQgPyBjaGFydEJsb2NrLnZhcmlhbnRNYW5hZ2VtZW50IDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24udmFyaWFudE1hbmFnZW1lbnQ7XG5cdHJldHVybiBjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbiA9PT0gdW5kZWZpbmVkID8gXCJOb25lXCIgOiB2YXJpYW50TWFuYWdlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB7XG5cdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uO1xuXHRpZiAocGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBnZXRWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiVk1cIl0pfVxuXHRcdFx0XHRcdGZvcj17W2NoYXJ0QmxvY2suX2Jsb2NrSWQhXX1cblx0XHRcdFx0XHRzaG93U2V0QXNEZWZhdWx0PXt0cnVlfVxuXHRcdFx0XHRcdGhlYWRlckxldmVsPXtjaGFydEJsb2NrLmhlYWRlckxldmVsfVxuXHRcdFx0XHRcdHNlbGVjdD17KGV2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y2hhcnRCbG9jay5maXJlVmFyaWFudFNlbGVjdGVkPy4oZXZlbnQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0c2F2ZT17KGV2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTYXZlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVZhcmlhbnRTYXZlZD8uKGV2ZW50KTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIk5vbmVcIiB8fCB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fSBlbHNlIGlmICghcGVyc29uYWxpemF0aW9uKSB7XG5cdFx0TG9nLndhcm5pbmcoXCJWYXJpYW50IE1hbmFnZW1lbnQgY2Fubm90IGJlIGVuYWJsZWQgd2hlbiBwZXJzb25hbGl6YXRpb24gaXMgZGlzYWJsZWRcIik7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldFBlcnNpc3RlbmNlUHJvdmlkZXIoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFBlcnNpc3RlbmNlUHJvdmlkZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoZ2V0VmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jaykgPT09IFwiTm9uZVwiKSB7XG5cdFx0cmV0dXJuIDxQZXJzaXN0ZW5jZVByb3ZpZGVyIGlkPXtnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJQZXJzaXN0ZW5jZVByb3ZpZGVyXCJdKX0gZm9yPXtjaGFydEJsb2NrLl9ibG9ja0lkfSAvPjtcblx0fVxufVxuXG5mdW5jdGlvbiBwdXNoQWN0aW9uQ29tbWFuZChcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0ZGF0YUZpZWxkOiAoTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+ICYgeyBJbnZvY2F0aW9uR3JvdXBpbmc6IE1ldGFNb2RlbEVudW08T3BlcmF0aW9uR3JvdXBpbmdUeXBlPiB9KSB8IHVuZGVmaW5lZCxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiB2b2lkIHtcblx0aWYgKGRhdGFGaWVsZCkge1xuXHRcdGNvbnN0IGNvbW1hbmRBY3Rpb24gPSB7XG5cdFx0XHRhY3Rpb25Db250ZXh0OiBhY3Rpb25Db250ZXh0LFxuXHRcdFx0b25FeGVjdXRlQWN0aW9uOiBDaGFydEhlbHBlci5nZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uKFxuXHRcdFx0XHRjaGFydEJsb2NrLl9ibG9ja0lkISxcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcIlwiXG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKFxuXHRcdFx0XHRkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdGBcXCR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31gLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KSxcblx0XHRcdG9uRXhlY3V0ZU1hbmlmZXN0OiBDb21tb25IZWxwZXIuYnVpbGRBY3Rpb25XcmFwcGVyKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIGNoYXJ0QmxvY2spLFxuXHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXBcblx0XHR9O1xuXHRcdGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zLnB1c2goY29tbWFuZEFjdGlvbik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChjb21tYW5kQWN0aW9uOiBDb21tYW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCBhY3Rpb24gPSBjb21tYW5kQWN0aW9uLmFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGggJiYgY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCk7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQgJiYgZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb24pO1xuXHRjb25zdCBpc0JvdW5kUGF0aCA9IENvbW1vbkhlbHBlci5nZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkKGRhdGFGaWVsZEFjdGlvbik7XG5cdGNvbnN0IGlzQm91bmQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoaXNCb3VuZFBhdGgpIS5nZXRPYmplY3QoKTtcblx0Y29uc3QgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgPSBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShcblx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRjb250ZXh0OiBjaGFydENvbnRleHRcblx0XHR9KVxuXHQpO1xuXHRjb25zdCBpc0FjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZFxuXHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHQ6IENoYXJ0SGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uRW5hYmxlZChcblx0XHRcdFx0aXNCb3VuZCAmJiBpc0JvdW5kLiRJc0JvdW5kLFxuXHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRjaGFydEJsb2NrLl9jb250ZXh0LFxuXHRcdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcIlwiLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QgfHwgXCJcIlxuXHRcdCAgKTtcblx0bGV0IGlzSUJORW5hYmxlZDtcblx0aWYgKGFjdGlvbi5lbmFibGVkKSB7XG5cdFx0aXNJQk5FbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdGlzSUJORW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblxuXHRsZXQgY29tbWFuZEVuYWJsZWQ6IGJvb2xlYW47XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGlzQWN0aW9uRW5hYmxlZCA/PyBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGlzSUJORW5hYmxlZCA/PyBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25Db21tYW5kID0gKFxuXHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRleGVjdXRlPXsoZXZlbnQ6IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50KTogdm9pZCA9PlxuXHRcdFx0XHRjb21tYW5kRXhlY3V0ZShldmVudCwgYWN0aW9uLCBjaGFydEJsb2NrLl9ibG9ja0lkISwgY29tbWFuZEFjdGlvbi5jaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCEsIGRhdGFGaWVsZClcblx0XHRcdH1cblx0XHRcdGVuYWJsZWQ9e2NvbW1hbmRFbmFibGVkfVxuXHRcdFx0dmlzaWJsZT17KGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dCwgY2hhcnRCbG9jaykgYXMgYm9vbGVhbikgPz8gYWN0aW9uLnZpc2libGV9XG5cdFx0XHRjb21tYW5kPXthY3Rpb24uY29tbWFuZH1cblx0XHQvPlxuXHQpO1xuXG5cdGlmIChcblx0XHRhY3Rpb24udHlwZSA9PSBcIkZvckFjdGlvblwiICYmXG5cdFx0KCFpc0JvdW5kIHx8XG5cdFx0XHRpc0JvdW5kLklzQm91bmQgIT09IHRydWUgfHxcblx0XHRcdChhY3Rpb25Db250ZXh0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2BAJHtDb3JlQW5ub3RhdGlvblRlcm1zLk9wZXJhdGlvbkF2YWlsYWJsZX1gXSAhPT0gZmFsc2UpXG5cdCkge1xuXHRcdHJldHVybiBhY3Rpb25Db21tYW5kO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09IFwiRm9yQWN0aW9uXCIpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29tbWFuZDtcblx0fVxufVxuXG5mdW5jdGlvbiBjb21tYW5kRXhlY3V0ZShcblx0ZXZlbnQ6IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50LFxuXHRhY3Rpb246IHsgSW52b2NhdGlvbkdyb3VwaW5nOiB7ICRFbnVtTWVtYmVyOiBzdHJpbmcgfTsgYWN0aW9uOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaGFuZGxlck1vZHVsZTogc3RyaW5nOyBoYW5kbGVyTWV0aG9kOiBzdHJpbmcgfSxcblx0aWQ6IHN0cmluZyxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbik6IHZvaWQge1xuXHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhldmVudC5nZXRTb3VyY2UoKSk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3Py5nZXRDb250cm9sbGVyKCk7XG5cblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJGb3JBY3Rpb25cIjpcblx0XHRcdGNvbnN0IHNJbnZvY2F0aW9uR3JvdXBpbmcgPVxuXHRcdFx0XHRhY3Rpb24uSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRcdGFjdGlvbi5JbnZvY2F0aW9uR3JvdXBpbmcuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0OiBcIklzb2xhdGVkXCI7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdGNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSxcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBzSW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRjb250cm9sSWQ6IGlkLFxuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZ1xuXHRcdFx0fTtcblx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nLCBwYXJhbXMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0fTtcblx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZykge1xuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeSgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZyk7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0SXRlbXMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0KSB7XG5cdFx0Y29uc3QgZGltZW5zaW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBtZWFzdXJlczogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAoY2hhcnRCbG9jay5fY2hhcnQuRGltZW5zaW9ucykge1xuXHRcdFx0Q2hhcnRIZWxwZXIuZm9ybWF0RGltZW5zaW9ucyhjaGFydEJsb2NrLl9jaGFydENvbnRleHQpXG5cdFx0XHRcdC5nZXRPYmplY3QoKVxuXHRcdFx0XHQuZm9yRWFjaCgoZGltZW5zaW9uOiBEaW1lbnNpb25UeXBlKSA9PiB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uLmlkID0gZ2VuZXJhdGUoW2NoYXJ0QmxvY2suaWQsIFwiZGltZW5zaW9uXCIsIGRpbWVuc2lvbi5rZXldKTtcblx0XHRcdFx0XHRkaW1lbnNpb25zLnB1c2goXG5cdFx0XHRcdFx0XHRnZXRJdGVtKFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aWQ6IGRpbWVuc2lvbi5pZCxcblx0XHRcdFx0XHRcdFx0XHRrZXk6IGRpbWVuc2lvbi5rZXksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGRpbWVuc2lvbi5sYWJlbCxcblx0XHRcdFx0XHRcdFx0XHRyb2xlOiBkaW1lbnNpb24ucm9sZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcIl9mZV9ncm91cGFibGVfXCIsXG5cdFx0XHRcdFx0XHRcdFwiZ3JvdXBhYmxlXCJcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGNoYXJ0QmxvY2subWVhc3VyZXMpIHtcblx0XHRcdENoYXJ0SGVscGVyLmZvcm1hdE1lYXN1cmVzKGNoYXJ0QmxvY2subWVhc3VyZXMpLmZvckVhY2goKG1lYXN1cmU6IE1lYXN1cmVUeXBlKSA9PiB7XG5cdFx0XHRcdG1lYXN1cmUuaWQgPSBnZW5lcmF0ZShbY2hhcnRCbG9jay5pZCwgXCJtZWFzdXJlXCIsIG1lYXN1cmUua2V5XSk7XG5cdFx0XHRcdG1lYXN1cmVzLnB1c2goXG5cdFx0XHRcdFx0Z2V0SXRlbShcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWQ6IG1lYXN1cmUuaWQsXG5cdFx0XHRcdFx0XHRcdGtleTogbWVhc3VyZS5rZXksXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBtZWFzdXJlLmxhYmVsLFxuXHRcdFx0XHRcdFx0XHRyb2xlOiBtZWFzdXJlLnJvbGVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcIl9mZV9hZ2dyZWdhdGFibGVfXCIsXG5cdFx0XHRcdFx0XHRcImFnZ3JlZ2F0YWJsZVwiXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChkaW1lbnNpb25zLmxlbmd0aCAmJiBtZWFzdXJlcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBkaW1lbnNpb25zLmNvbmNhdChtZWFzdXJlcyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGl0ZW06IE1lYXN1cmVUeXBlIHwgRGltZW5zaW9uVHlwZSwgcHJlZml4OiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiAoXG5cdFx0PE1kY0NoYXJ0SXRlbVxuXHRcdFx0aWQ9e2l0ZW0uaWR9XG5cdFx0XHRwcm9wZXJ0eUtleT17cHJlZml4ICsgaXRlbS5rZXl9XG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0bGFiZWw9e3Jlc29sdmVCaW5kaW5nU3RyaW5nKGl0ZW0ubGFiZWwgYXMgc3RyaW5nLCBcInN0cmluZ1wiKX1cblx0XHRcdHJvbGU9e2l0ZW0ucm9sZX1cblx0XHQvPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRUb29sYmFyQWN0aW9ucyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbltdIHtcblx0Y29uc3QgYWN0aW9ucyA9IGdldEFjdGlvbnMoY2hhcnRCbG9jayk7XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKSB7XG5cdFx0YWN0aW9ucy5wdXNoKGdldFNlZ21lbnRlZEJ1dHRvbihjaGFydEJsb2NrKSk7XG5cdH1cblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmlzSW5zaWdodHNFbmFibGVkKSB7XG5cdFx0YWN0aW9ucy5wdXNoKFxuXHRcdFx0Z2V0U3RhbmRhcmRBY3Rpb25zKFxuXHRcdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc0luc2lnaHRzRW5hYmxlZCxcblx0XHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNJbnNpZ2h0c1Zpc2libGUsXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQhLFxuXHRcdFx0XHRjaGFydEJsb2NrXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRpZiAoYWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbnMoXG5cdGlzSW5zaWdodHNFbmFibGVkOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlzSW5zaWdodHNWaXNpYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlkOiBzdHJpbmcsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gdmlzaWJsZT17aXNJbnNpZ2h0c1Zpc2libGV9PlxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2lkLCBcIlN0YW5kYXJkQWN0aW9uOjpJbnNpZ2h0c1wiXSl9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSU5TSUdIVFNfQ0FSRH1cIlxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNoYXJ0QmxvY2sub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17aXNJbnNpZ2h0c0VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9XCJBbHdheXNPdmVyZmxvd1wiIC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvbnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFRvb2xiYXJBY3Rpb25bXSB7XG5cdGNvbnN0IGFjdGlvbnMgPSByZW1vdmVNZW51SXRlbXMoY2hhcnRCbG9jay5jaGFydEFjdGlvbnMgPz8gW10pO1xuXHRyZXR1cm4gYWN0aW9ucy5tYXAoKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24uYW5ub3RhdGlvblBhdGggfHwgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIiAmJiAhYWN0aW9uLmlkPy5zdGFydHNXaXRoKFwiQ3VzdG9tQWN0aW9uXCIpKSkge1xuXHRcdFx0Ly8gTG9hZCBhbm5vdGF0aW9uIGJhc2VkIGFjdGlvbnNcblx0XHRcdHJldHVybiBnZXRBY3Rpb24oYWN0aW9uLCBjaGFydEJsb2NrLl9jaGFydENvbnRleHQsIGZhbHNlLCBjaGFydEJsb2NrKTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdFx0Ly8gTG9hZCBYTUwgb3IgbWFuaWZlc3QgYmFzZWQgYWN0aW9ucyAvIGFjdGlvbiBncm91cHNcblx0XHRcdHJldHVybiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbiBhcyBDdXN0b21BbmRBY3Rpb24sIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVudUl0ZW1zKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSB7XG5cdC8vIElmIGFjdGlvbiBpcyBhbHJlYWR5IHBhcnQgb2YgbWVudSBpbiBhY3Rpb24gZ3JvdXAsIHRoZW4gaXQgd2lsbFxuXHQvLyBiZSByZW1vdmVkIGZyb20gdGhlIG1haW4gYWN0aW9ucyBsaXN0XG5cdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRpZiAoYWN0aW9uLm1lbnUpIHtcblx0XHRcdGFjdGlvbi5tZW51LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gYWN0aW9ucy5tYXAoKGFjdCkgPT4gYWN0LmtleSkuaW5kZXhPZihpdGVtLmtleSk7XG5cdFx0XHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRcdFx0YWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbjogQ3VzdG9tQW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IGFjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA/PyBmYWxzZSkgJiYgYWN0aW9uLmVuYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0YWN0aW9uRW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdC8vIExvYWQgWE1MIG9yIG1hbmlmZXN0IGJhc2VkIHRvb2xiYXIgYWN0aW9uc1xuXHRcdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR1bml0dGVzdGlkOiBcIkRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkFjdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogYWN0aW9uLnRleHQgPyBhY3Rpb24udGV4dCA6IFwiXCIsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcmVzczogYWN0aW9uLnByZXNzID8gYWN0aW9uLnByZXNzIDogXCJcIixcblx0XHRcdFx0ZW5hYmxlZDogYWN0aW9uRW5hYmxlZCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZSA6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRjaGFydEJsb2NrXG5cdFx0KTtcblx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIpIHtcblx0XHQvLyBMb2FkIGFjdGlvbiBncm91cHMgKE1lbnUpXG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUsXG5cdFx0XHRcdGVuYWJsZWQ6IGFjdGlvbkVuYWJsZWQsXG5cdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5OiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRVc2VEZWZhdWx0QWN0aW9uT25seShhY3Rpb24pLFxuXHRcdFx0XHRidXR0b25Nb2RlOiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRCdXR0b25Nb2RlKGFjdGlvbiksXG5cdFx0XHRcdGRlZmF1bHRBY3Rpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0YWN0aW9uczogYWN0aW9uLFxuXHRcdFx0XHRwcmlvcml0eTogYWN0aW9uLnByaW9yaXR5LFxuXHRcdFx0XHRncm91cDogYWN0aW9uLmdyb3VwXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnRDb250ZXh0LFxuXHRcdFx0Y2hhcnRCbG9ja1xuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gcm9tTWVudShtZW51SXRlbUFjdGlvbjogQ3VzdG9tQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IHByZXNzSGFuZGxlcjogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH07XG5cdGlmIChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdC8vQW5ub3RhdGlvbiBiYXNlZCBhY3Rpb24gaXMgcGFzc2VkIGFzIG1lbnUgaXRlbSBmb3IgbWVudSBidXR0b25cblx0XHRyZXR1cm4gZ2V0QWN0aW9uKG1lbnVJdGVtQWN0aW9uLCBjaGFydENvbnRleHQsIHRydWUsIGNoYXJ0QmxvY2spO1xuXHR9XG5cdGlmIChtZW51SXRlbUFjdGlvbi5jb21tYW5kKSB7XG5cdFx0cHJlc3NIYW5kbGVyID0geyBcImpzeDpjb21tYW5kXCI6IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0fSBlbHNlIGlmIChtZW51SXRlbUFjdGlvbi5ub1dyYXAgPz8gZmFsc2UpIHtcblx0XHRwcmVzc0hhbmRsZXIgPSB7XG5cdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmdW5jdGlvbk5hbWUgPSBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kPy5zcGxpdChcIi5cIilbMV0gYXMgc3RyaW5nO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0XHRbdGVtcDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXJbZnVuY3Rpb25OYW1lXSkgY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHByZXNzSGFuZGxlciA9IHtcblx0XHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKVxuXHRcdFx0XHRcdC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpXG5cdFx0XHRcdFx0Py5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIik7XG5cdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTW9kdWxlLCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kLCB7IGNvbnRleHRzOiBzZWxlY3RlZENvbnRleHRzIH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e21lbnVJdGVtQWN0aW9uLnRleHR9IHsuLi5wcmVzc0hhbmRsZXJ9IHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9IGVuYWJsZWQ9e21lbnVJdGVtQWN0aW9uLmVuYWJsZWR9IC8+O1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Ub29sYmFyTWVudUFjdGlvbihcblx0cHJvcHM6IEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uLFxuXHRjaGFydENvbnRleHQ6IENvbnRleHQsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGFNZW51SXRlbXMgPSAocHJvcHMuYWN0aW9ucz8ubWVudSBhcyBDdXN0b21BY3Rpb25bXSkubWFwKChhY3Rpb246IEN1c3RvbUFjdGlvbikgPT4ge1xuXHRcdHJldHVybiBnZXRNZW51SXRlbUZyb21NZW51KGFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0fSk7XG5cdGNvbnN0IGlzQUlPcGVyYXRpb24gPSBpc01lbnVBSU9wZXJhdGlvbihwcm9wcy5hY3Rpb25zPy5tZW51IGFzIEN1c3RvbUFjdGlvbltdKTtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3Byb3BzLnRleHR9XG5cdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdGlkPXtwcm9wcy5pZH1cblx0XHRcdFx0dmlzaWJsZT17cHJvcHMudmlzaWJsZX1cblx0XHRcdFx0ZW5hYmxlZD17cHJvcHMuZW5hYmxlZH1cblx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk9e3Byb3BzLnVzZURlZmF1bHRBY3Rpb25Pbmx5fVxuXHRcdFx0XHRidXR0b25Nb2RlPXtwcm9wcy5idXR0b25Nb2RlfVxuXHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdGRlZmF1bHRBY3Rpb249e1wicHJvcHMuZGVmYXVsdEFjdGlvblwiIGFzIHVua25vd24gYXMgKCkgPT4gdm9pZH1cblx0XHRcdFx0aWNvbj17aXNBSU9wZXJhdGlvbiA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRtZW51OiA8TWVudT57YU1lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtwcm9wcy5wcmlvcml0eX0gZ3JvdXA9e3Byb3BzLmdyb3VwfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uKGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbiwgY2hhcnRDb250ZXh0OiBDb250ZXh0LCBpc01lbnVJdGVtOiBib29sZWFuLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoID8/IFwiXCIpITtcblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdHJldHVybiBnZXROYXZpZ2F0aW9uQWN0aW9ucyhhY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0cmV0dXJuIGdldEFubm90YXRpb25BY3Rpb25zKGNoYXJ0Q29udGV4dCwgYWN0aW9uIGFzIEFubm90YXRpb25BY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIikge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGFjdGlvbi5tZW51Py5tYXAoKG1lbnVBY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiBnZXRBY3Rpb24obWVudUFjdGlvbiwgY2hhcnRDb250ZXh0LCB0cnVlLCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRpZD17YWN0aW9uLmtleX1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvbkFjdGlvbnMoXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0ZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCxcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0bGV0IGVuYWJsZWQgPSBcInRydWVcIjtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRlbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdGVuYWJsZWQgPSBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxfVwiO1xuXHR9XG5cdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdGFjdGlvbixcblx0XHR7XG5cdFx0XHRpZDogdW5kZWZpbmVkLFxuXHRcdFx0dW5pdHRlc3RpZDogXCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25CdXR0b25BY3Rpb25cIixcblx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRhcmlhSGFzUG9wdXA6IHVuZGVmaW5lZCxcblx0XHRcdHByZXNzOiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKGRhdGFGaWVsZCwgYFxcJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfWAsIGZhbHNlKSEsXG5cdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0dmlzaWJsZTogZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0LCBjaGFydEJsb2NrKVxuXHRcdH0sXG5cdFx0aXNNZW51SXRlbSxcblx0XHRjaGFydEJsb2NrLFxuXHRcdGRhdGFGaWVsZFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBbm5vdGF0aW9uQWN0aW9ucyhcblx0Y2hhcnRDb250ZXh0OiBDb250ZXh0LFxuXHRhY3Rpb246IEFubm90YXRpb25BY3Rpb24sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IFRvb2xiYXJBY3Rpb24ge1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb24gPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb24pKTtcblx0Y29uc3QgYWN0aW9uT2JqZWN0ID0gYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGlzQm91bmRQYXRoID0gQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQoZGF0YUZpZWxkQWN0aW9uKTtcblx0Y29uc3QgaXNCb3VuZCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChpc0JvdW5kUGF0aCkhLmdldE9iamVjdCgpO1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIWlzQm91bmQgfHwgaXNCb3VuZC4kSXNCb3VuZCAhPT0gdHJ1ZSB8fCBhY3Rpb25PYmplY3RbYEAke0NvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlfWBdICE9PSBmYWxzZSkge1xuXHRcdGNvbnN0IGVuYWJsZWQgPSBnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQoYWN0aW9uLCBpc0JvdW5kLCBkYXRhRmllbGQsIGNoYXJ0Q29udGV4dCwgY2hhcnRCbG9jay5fY29udGV4dCk7XG5cdFx0Y29uc3QgZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KFxuXHRcdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkgYXMgQ29udGV4dFxuXHRcdCk7XG5cdFx0Y29uc3QgYXJpYUhhc1BvcHVwID0gaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGRNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID1cblx0XHRcdGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKFxuXHRcdFx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRcdFx0Y29udGV4dDogY2hhcnRDb250ZXh0XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHx8IFwiXCI7XG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJBY3Rpb24oXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGRhdGFGaWVsZENvbnRleHQpXSksXG5cdFx0XHRcdHVuaXR0ZXN0aWQ6IFwiRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uQWN0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogYXJpYUhhc1BvcHVwLFxuXHRcdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0XHR2aXNpYmxlOiBnZXRWaXNpYmxlKGRhdGFGaWVsZENvbnRleHQsIGNoYXJ0QmxvY2spXG5cdFx0XHR9LFxuXHRcdFx0aXNNZW51SXRlbSxcblx0XHRcdGNoYXJ0QmxvY2ssXG5cdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uVG9vbGJhckFjdGlvbihcblx0YWN0aW9uOiAoQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbikgJiB7IG5vV3JhcD86IGJvb2xlYW4gfSxcblx0dG9vbGJhckFjdGlvbjogVG9vbEJhckFjdGlvbixcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0aWYgKGlzTWVudUl0ZW0pIHtcblx0XHRjb25zdCBwcmVzc0V2ZW50OiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IHtcblx0XHRcdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jay5fYmxvY2tJZCxcblx0XHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiB2aWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZD8uTGFiZWwgYXMgc3RyaW5nXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZD8uQWN0aW9uIGFzIHN0cmluZywgcGFyYW1zKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/Lk1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5NYXBwaW5nXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHQgIH07XG5cblx0XHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e3Rvb2xiYXJBY3Rpb24ubGFiZWx9IHsuLi5wcmVzc0V2ZW50fSBlbmFibGVkPXt0b29sYmFyQWN0aW9uLmVuYWJsZWR9IHZpc2libGU9e3Rvb2xiYXJBY3Rpb24udmlzaWJsZX0gLz47XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGJ1aWxkQWN0aW9uKGFjdGlvbiwgdG9vbGJhckFjdGlvbiwgY2hhcnRCbG9jaywgZGF0YUZpZWxkLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dG9vbGJhckFjdGlvbjogVG9vbEJhckFjdGlvbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uLmlkfVxuXHRcdFx0XHR0ZXh0PXt0b29sYmFyQWN0aW9uLmxhYmVsfVxuXHRcdFx0XHRhcmlhSGFzUG9wdXA9e3Rvb2xiYXJBY3Rpb24uYXJpYUhhc1BvcHVwfVxuXHRcdFx0XHR7Li4uZ2V0QWN0aW9uUHJlc3MoYWN0aW9uLCBkYXRhRmllbGQsIGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjaGFydEJsb2NrKX1cblx0XHRcdFx0ZW5hYmxlZD17dG9vbGJhckFjdGlvbi5lbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXt0b29sYmFyQWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdGljb249e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblByZXNzKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGRhdGFGaWVsZD86IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmcsXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrXG4pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSB7XG5cdGxldCBhY3Rpb25QcmVzczogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0gPSB7XG5cdFx0cHJlc3M6IFwiXCIgYXMgdW5rbm93biBhcyAoKSA9PiB2b2lkXG5cdH07XG5cblx0aWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdGlmIChhY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0YWN0aW9uUHJlc3MgPSB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0XHR9IGVsc2UgaWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5ub1dyYXAgPT09IHRydWUpIHtcblx0XHRcdGFjdGlvblByZXNzID0gZ2V0Q3VzdG9tQWN0aW9uUHJlc3MoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbik7XG5cdFx0fSBlbHNlIGlmICghYWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRhY3Rpb25QcmVzcyA9IGdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRhY3Rpb25QcmVzcyA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IGdldFN0YW5kYXJkQWN0aW9uUHJlc3NXaXRoTm9Db21tYW5kKGFjdGlvbiwgZGF0YUZpZWxkLCBjaGFydEJsb2NrLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9uUHJlc3M7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFjdGlvblByZXNzKGFjdGlvbjogQ3VzdG9tQWN0aW9uKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25OYW1lID0gYWN0aW9uLmhhbmRsZXJNZXRob2Q/LnNwbGl0KFwiLlwiKVsxXSBhcyBzdHJpbmc7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0W21ldGhvZDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdH07XG5cdFx0XHRpZiAoY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKSBjb250cm9sbGVyW2Z1bmN0aW9uTmFtZV0oZXZlbnQpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUHJlc3NXaXRoQW5ub3RhdGlvblBhdGgoYWN0aW9uOiBDdXN0b21BY3Rpb24pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0ge1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gZXZlbnQuZ2V0U291cmNlKCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRjb250ZXh0czogc2VsZWN0ZWRDb250ZXh0c1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblByZXNzV2l0aE5vQ29tbWFuZChcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jaz8uX2Jsb2NrSWQsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQ/LkxhYmVsIGFzIHN0cmluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihkYXRhRmllbGQ/LkFjdGlvbiBhcyBzdHJpbmcsIHBhcmFtcyk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5NYXBwaW5nKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gSlNPTi5zdHJpbmdpZnkoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdGlzQm91bmQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0Y2hhcnRDb250ZXh0OiBDb250ZXh0LFxuXHRjb250ZXh0OiBDb250ZXh0XG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gYWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHQ6IENoYXJ0SGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uRW5hYmxlZChcblx0XHRcdFx0aXNCb3VuZCAmJiBpc0JvdW5kLiRJc0JvdW5kLFxuXHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0Q2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBjaGFydENvbnRleHQgfSksXG5cdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCB8fCBcIlwiXG5cdFx0ICApO1xufVxuXG5mdW5jdGlvbiBnZXRTZWdtZW50ZWRCdXR0b24oY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IEFjdGlvblRvb2xiYXJBY3Rpb24ge1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRsYXlvdXRJbmZvcm1hdGlvbj17e1xuXHRcdFx0XHRhZ2dyZWdhdGlvbk5hbWU6IFwiZW5kXCIsXG5cdFx0XHRcdGFsaWdubWVudDogXCJFbmRcIlxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKX1cblx0XHRcdFx0c2VsZWN0aW9uQ2hhbmdlPXsoZXZlbnQ6IFNlZ21lbnRlZEJ1dHRvbiRTZWxlY3Rpb25DaGFuZ2VFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVNlZ21lbnRlZEJ1dHRvblByZXNzZWQ/Lihcblx0XHRcdFx0XHRcdG1lcmdlKGV2ZW50LmdldFBhcmFtZXRlcnMoKSwgeyBzZWxlY3RlZEtleTogZXZlbnQuZ2V0U291cmNlKCkuZ2V0U2VsZWN0ZWRLZXkoKSB9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdHZpc2libGU9e25vdEVxdWFsKHBhdGhJbk1vZGVsKFwiYWxwQ29udGVudFZpZXdcIiwgXCJwYWdlSW50ZXJuYWxcIiksIFwiVGFibGVcIil9XG5cdFx0XHRcdHNlbGVjdGVkS2V5PXtwYXRoSW5Nb2RlbChcImFscENvbnRlbnRWaWV3XCIsIFwicGFnZUludGVybmFsXCIpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBnZXRTZWdtZW50ZWRCdXR0b25JdGVtcygpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1NlZ21lbnRlZEJ1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zKCk6IHN0cmluZ1tdIHtcblx0Y29uc3Qgc2VnbWVudGVkQnV0dG9uSXRlbXMgPSBbXTtcblx0aWYgKENvbW1vbkhlbHBlci5pc0Rlc2t0b3AoKSkge1xuXHRcdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHRnZXRTZWdtZW50ZWRCdXR0b25JdGVtKFwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0hZQlJJRF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJIeWJyaWRcIiwgXCJzYXAtaWNvbjovL2NoYXJ0LXRhYmxlLXZpZXdcIilcblx0XHQpO1xuXHR9XG5cdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0Z2V0U2VnbWVudGVkQnV0dG9uSXRlbShcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9DSEFSVF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJDaGFydFwiLCBcInNhcC1pY29uOi8vYmFyLWNoYXJ0XCIpXG5cdCk7XG5cdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0Z2V0U2VnbWVudGVkQnV0dG9uSXRlbShcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJUYWJsZVwiLCBcInNhcC1pY29uOi8vdGFibGUtdmlld1wiKVxuXHQpO1xuXHRyZXR1cm4gc2VnbWVudGVkQnV0dG9uSXRlbXM7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW0odG9vbHRpcDogc3RyaW5nLCBrZXk6IHN0cmluZywgaWNvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIDxTZWdtZW50ZWRCdXR0b25JdGVtIHRvb2x0aXA9e3Rvb2x0aXB9IGtleT17a2V5fSBpY29uPXtpY29ufSAvPjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbm5vdGF0aW9uIHBhdGggcG9pbnRpbmcgdG8gdGhlIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiAoQ2hhcnQpLlxuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoIFRoZSBkYXRhbW9kZWwgb2JqZWN0IHBhdGggZm9yIHRoZSBjaGFydFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldFZpc3VhbGl6YXRpb25QYXRoKFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydFR5cGUgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG1ldGFQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCk7XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiBtZXRhUGF0aCBpcyBub3Qgc2V0XG5cdGlmICghbWV0YVBhdGgpIHtcblx0XHRMb2cuZXJyb3IoYE1pc3NpbmcgbWV0YVBhdGggcGFyYW1ldGVyIGZvciBDaGFydGApO1xuXHRcdHJldHVybiBgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YDtcblx0fVxuXG5cdGlmIChjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0KSB7XG5cdFx0cmV0dXJuIG1ldGFQYXRoOyAvLyBNZXRhUGF0aCBpcyBhbHJlYWR5IHBvaW50aW5nIHRvIGEgQ2hhcnRcblx0fVxuXG5cdC8vTmVlZCB0byBzd2l0Y2ggdG8gdGhlIGNvbnRleHQgcmVsYXRlZCB0aGUgUFYgb3IgU1BWXG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhUGF0aCk7XG5cblx0bGV0IHZpc3VhbGl6YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdHN3aXRjaCAoY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50ZXJtKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0aWYgKGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdC5QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsXG5cdFx0XHRcdFx0bWV0YVBhdGgsXG5cdFx0XHRcdFx0cmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHR2aXN1YWxpemF0aW9ucyA9IGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0bWV0YVBhdGgsXG5cdFx0XHRcdHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRjb25zdCBjaGFydFZpeiA9IHZpc3VhbGl6YXRpb25zLmZpbmQoKHZpeikgPT4ge1xuXHRcdHJldHVybiB2aXoudmlzdWFsaXphdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydDtcblx0fSk7XG5cblx0aWYgKGNoYXJ0Vml6KSB7XG5cdFx0cmV0dXJuIGNoYXJ0Vml6LmFubm90YXRpb25QYXRoO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgQ2hhcnQgaWYgYW5ub3RhdGlvbiBtaXNzaW5nIGluIFBWXG5cdFx0TG9nLmVycm9yKGBCYWQgbWV0YVBhdGggcGFyYW1ldGVyIGZvciBjaGFydDogJHtjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm19YCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0gJiYgZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGgpIHtcblx0XHRjb25zdCBoaWRkZW5QYXRoQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgYC9AJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59LyRQYXRoYCxcblx0XHRcdGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdLiRQYXRoXG5cdFx0KTtcblx0XHRyZXR1cm4gQ2hhcnRIZWxwZXIuZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb25Gb3JUYWJsZUFjdGlvbnNBbmRJQk4oZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGgsIHtcblx0XHRcdGNvbnRleHQ6IGhpZGRlblBhdGhDb250ZXh0XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0pIHtcblx0XHRyZXR1cm4gIWRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0Q29udmVydGVyQ29udGV4dChcblx0cHJvcGVydGllczogQ2hhcnRCbG9jayxcblx0b3JpZ2luYWxWaWV3RGF0YTogUGFydGlhbDxWaWV3RGF0YT4sXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+LFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGV4dHJhUGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGxldCB2aWV3RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsVmlld0RhdGEpO1xuXHRkZWxldGUgdmlld0RhdGEucmVzb3VyY2VNb2RlbDtcblx0ZGVsZXRlIHZpZXdEYXRhLmFwcENvbXBvbmVudDtcblx0dmlld0RhdGEgPSBkZWVwQ2xvbmUodmlld0RhdGEpO1xuXHRsZXQgY29udHJvbENvbmZpZ3VyYXRpb24gPSB7fTtcblxuXHQvLyBPbmx5IG1lcmdlIGluIHBhZ2UgY29udHJvbCBjb25maWd1cmF0aW9uIGlmIHRoZSBidWlsZGluZyBibG9jayBpcyBvbiB0aGUgc2FtZSBjb250ZXh0XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoY29udGV4dE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uID8/IGNvbnRleHRPYmplY3RQYXRoKTtcblx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGNvbnRleHRPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5U2V0Py5uYW1lID8/IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldD8ubmFtZTtcblx0aWYgKFxuXHRcdHJlbGF0aXZlUGF0aCA9PT0gb3JpZ2luYWxWaWV3RGF0YT8uY29udGV4dFBhdGggfHxcblx0XHRyZWxhdGl2ZVBhdGggPT09IGAvJHtvcmlnaW5hbFZpZXdEYXRhPy5lbnRpdHlTZXR9YCB8fFxuXHRcdGVudGl0eVNldE5hbWUgPT09IG9yaWdpbmFsVmlld0RhdGE/LmVudGl0eVNldFxuXHQpIHtcblx0XHRjb250cm9sQ29uZmlndXJhdGlvbiA9IHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uITtcblx0fVxuXHR2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiA9IG1lcmdlKGNvbnRyb2xDb25maWd1cmF0aW9uLCBleHRyYVBhcmFtcyB8fCB7fSkgYXMgQ29udHJvbENvbmZpZ3VyYXRpb247XG5cblx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQuY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0cHJvcGVydGllcy5fbWV0YU1vZGVsLFxuXHRcdGRpYWdub3N0aWNzLFxuXHRcdG1lcmdlLFxuXHRcdGNvbnRleHRPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKHZpZXdEYXRhIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+LFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGNvbnN0IGluaXRpYWxDb252ZXJ0ZXJDb250ZXh0ID0gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MpO1xuXHRjb25zdCB2aXN1YWxpemF0aW9uUGF0aCA9IGdldFZpc3VhbGl6YXRpb25QYXRoKGNvbnRleHRPYmplY3RQYXRoLCBpbml0aWFsQ29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGV4dHJhUGFyYW1zID0gZ2V0RXh0cmFQYXJhbXMoY2hhcnRCbG9jaywgdmlzdWFsaXphdGlvblBhdGgpO1xuXHRyZXR1cm4gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MsIGV4dHJhUGFyYW1zKTtcbn1cblxuZnVuY3Rpb24gbW9kaWZ5SWRlbnRpZmllcnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHZvaWQge1xuXHRpZiAoY2hhcnRCbG9jay5fYXBwbHlJZFRvQ29udGVudCkge1xuXHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQgPSBjaGFydEJsb2NrLmlkLnJlcGxhY2UoLzo6Q2hhcnQkLywgXCJcIik7XG5cdFx0Y2hhcnRCbG9jay5fY29udGVudElkID0gY2hhcnRCbG9jay5fYmxvY2tJZDtcblx0fSBlbHNlIHtcblx0XHRjaGFydEJsb2NrLl9ibG9ja0lkID0gY2hhcnRCbG9jay5pZDtcblx0XHRjaGFydEJsb2NrLl9jb250ZW50SWQgPSBnZXRDb250ZW50SWQoY2hhcnRCbG9jay5pZCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZShcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+XG4pOiB2b2lkIHtcblx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gY2hhcnRCbG9jay5nZXRNZXRhUGF0aE9iamVjdChjaGFydEJsb2NrLm1ldGFQYXRoLCBjaGFydEJsb2NrLl9yZXNvbHZlZENvbnRleHRQYXRoKTtcblx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsID0gY2hhcnRCbG9jay5fZ2V0T3duZXIoKT8ucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLm1ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFDb250ZXh0UGF0aCEuZ2V0UGF0aCgpKSE7XG5cdGNoYXJ0QmxvY2suX2NvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY2hhcnRCbG9jay5jb250ZXh0UGF0aCA/PyBtZXRhQ29udGV4dFBhdGg/LmdldENvbnRleHRQYXRoKCkpITtcblxuXHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gZ2V0Q29udmVydGVyQ29udGV4dChjaGFydEJsb2NrLCB2aWV3RGF0YSwgY29udGV4dE9iamVjdFBhdGgsIGRpYWdub3N0aWNzKTtcblx0Y29uc3Qgdmlld0NvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk/LmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGlzTXVsdGlUYWJzID0gKHZpZXdDb25maWc/LnBhdGhzPy5sZW5ndGggYXMgbnVtYmVyKSA+IDE7XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk/Lmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cblx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0ID0gQ2hhcnRIZWxwZXIuZ2V0VWlDaGFydChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQpITtcblx0Y2hhcnRCbG9jay5fY2hhcnQgPSBjaGFydEJsb2NrLl9jaGFydENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgQ2hhcnRUeXBlO1xuXHRjaGFydEJsb2NrLl9ibG9ja0FjdGlvbnMgPSBbXTtcblx0Y2hhcnRCbG9jay5fY29tbWFuZEFjdGlvbnMgPSBbXTtcblx0bW9kaWZ5SWRlbnRpZmllcnMoY2hhcnRCbG9jayk7XG5cdGlmIChjaGFydEJsb2NrLl9jaGFydCkge1xuXHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uID0gY3JlYXRlQ2hhcnREZWZpbml0aW9uKFxuXHRcdFx0Y2hhcnRCbG9jayxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRjb250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dC5nZXRQYXRoKClcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb24gPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbikgYXMgQ29udGV4dDtcblx0XHQvLyBBUEkgUHJvcGVydGllc1xuXHRcdGNoYXJ0QmxvY2submF2aWdhdGlvblBhdGggPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0XHRjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0ID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYXV0b0JpbmRPbkluaXQ7XG5cdFx0Y2hhcnRCbG9jay52aXpQcm9wZXJ0aWVzID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24udml6UHJvcGVydGllcztcblx0XHRjaGFydEJsb2NrLmNoYXJ0QWN0aW9ucyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmFjdGlvbnM7XG5cdFx0Y2hhcnRCbG9jay5maWx0ZXIgPSBnZXRGaWx0ZXJCYXIoY2hhcnRCbG9jayk7XG5cdFx0bGV0IHBlcnNvbmFsaXphdGlvbjogQ2hhcnRQMTNuVHlwZTtcblx0XHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwZXJzb25hbGl6YXRpb24gPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5wZXJzb25hbGl6YXRpb247XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAoY2hhcnRCbG9jay5wZXJzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0Y2FzZSBcImZhbHNlXCI6XG5cdFx0XHRcdFx0cGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwidHJ1ZVwiOlxuXHRcdFx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IE9iamVjdC52YWx1ZXMocGVyc29uYWxpemF0aW9uVmFsdWVzKS5qb2luKFwiLFwiKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRwZXJzb25hbGl6YXRpb24gPSBjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbiBhcyBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMocGVyc29uYWxpemF0aW9uLCBjaGFydEJsb2NrKTtcblx0XHRjaGFydEJsb2NrLnZpc2libGUgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi52aXNpYmxlO1xuXHRcdGNoYXJ0QmxvY2suZHJhZnRTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc01ldGFQYXRoRHJhZnRTdXBwb3J0ZWQobWV0YUNvbnRleHRQYXRoISk7XG5cdFx0Y2hhcnRCbG9jay5fY2hhcnRUeXBlID0gQ2hhcnRIZWxwZXIuZm9ybWF0Q2hhcnRUeXBlKGNoYXJ0QmxvY2suX2NoYXJ0LkNoYXJ0VHlwZSk7XG5cblx0XHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRCbG9jay5fY2hhcnQsIHtcblx0XHRcdGNvbnRleHQ6IGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dFxuXHRcdH0pO1xuXG5cdFx0aWYgKE9iamVjdC5rZXlzKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jb21tYW5kQWN0aW9ucyBhcyBvYmplY3QpLmxlbmd0aCA+IDApIHtcblx0XHRcdE9iamVjdC5rZXlzKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jb21tYW5kQWN0aW9ucyBhcyBvYmplY3QpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jb21tYW5kQWN0aW9uc1trZXldO1xuXHRcdFx0XHRjb25zdCBhY3Rpb25Db250ZXh0ID0gY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uKTtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkQ29udGV4dCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aCAmJiBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dCAmJiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdHB1c2hBY3Rpb25Db21tYW5kKGFjdGlvbkNvbnRleHQsIGRhdGFGaWVsZCwgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAsIGFjdGlvbiwgY2hhcnRCbG9jayk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y2hhcnRCbG9jay5tZWFzdXJlcyA9IGdldENoYXJ0TWVhc3VyZXMoY2hhcnRCbG9jayk7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5jcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQpO1xuXHRcdGNoYXJ0QmxvY2suX3NvcnRDb25kaXRpb25zID0gQ2hhcnRIZWxwZXIuZ2V0U29ydENvbmRpdGlvbnMoXG5cdFx0XHRjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQsXG5cdFx0XHRjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRwcmVzZW50YXRpb25QYXRoLmdldFBhdGgoKSxcblx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmFwcGx5U3VwcG9ydGVkXG5cdFx0KTtcblx0XHRjb25zdCBjaGFydEFjdGlvbnNDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LmdldFBhdGgoKSArIFwiL0FjdGlvbnNcIixcblx0XHRcdGNoYXJ0QmxvY2suX2NoYXJ0LkFjdGlvbnMgYXMgdW5rbm93biBhcyBDb250ZXh0XG5cdFx0KTtcblx0XHRjb25zdCB0YXJnZXRDb2xsZWN0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRUYXJnZXRDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uKTtcblx0XHRjb25zdCB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0Q29sbGVjdGlvblBhdGgsIGNvbGxlY3Rpb24pITtcblx0XHRjb25zdCBhY3Rpb25zT2JqZWN0ID0gY29udGV4dE9iamVjdFBhdGguY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGgoY2hhcnRBY3Rpb25zQ29udGV4dC5nZXRQYXRoKCkpPy50YXJnZXQ7XG5cblx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhID0ge1xuXHRcdFx0dGFyZ2V0Q29sbGVjdGlvblBhdGg6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbGxlY3Rpb24sXG5cdFx0XHRlbnRpdHlTZXQ6XG5cdFx0XHRcdHR5cGVvZiB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQuZ2V0T2JqZWN0KCkgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHQ/IHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dC5nZXRPYmplY3QoKVxuXHRcdFx0XHRcdDogdGFyZ2V0Q29sbGVjdGlvblBhdGhDb250ZXh0LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpLFxuXHRcdFx0ZW50aXR5VHlwZTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbiArIFwiL1wiLFxuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnBhcnNlKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uczogQWN0aW9uSGVscGVyLmdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zKGFjdGlvbnNPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdKSArIFwiXCIsXG5cdFx0XHRzZWdtZW50ZWRCdXR0b25JZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSksXG5cdFx0XHRjdXN0b21BZ2c6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jdXN0b21BZ2csXG5cdFx0XHR0cmFuc0FnZzogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LnRyYW5zQWdnLFxuXHRcdFx0YXBwbHlTdXBwb3J0ZWQ6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5hcHBseVN1cHBvcnRlZCxcblx0XHRcdHZpelByb3BlcnRpZXM6IEpTT04ucGFyc2UoY2hhcnRCbG9jay52aXpQcm9wZXJ0aWVzKSxcblx0XHRcdGRyYWZ0U3VwcG9ydGVkOiBjaGFydEJsb2NrLmRyYWZ0U3VwcG9ydGVkLFxuXHRcdFx0bXVsdGlWaWV3czogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/Lm11bHRpVmlld3MgfHwgKCFoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zICYmIGlzTXVsdGlUYWJzKSxcblx0XHRcdHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoOiB7XG5cdFx0XHRcdGRhdGE6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5zZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuXHRcdFx0fSxcblx0XHRcdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZSxcblx0XHRcdGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jaGFydE1lYXN1cmVLZXlBbmRSb2xlXG5cdFx0fTtcblx0XHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0KSB7XG5cdFx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhLmVudGl0eVNldCA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbGxlY3Rpb24uc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBmYWxsYmFjayB0byBkaXNwbGF5IGVtcHR5IGNoYXJ0XG5cdFx0Y2hhcnRCbG9jay5hdXRvQmluZE9uSW5pdCA9IGZhbHNlO1xuXHRcdGNoYXJ0QmxvY2sudmlzaWJsZSA9IFwidHJ1ZVwiO1xuXHRcdGNoYXJ0QmxvY2submF2aWdhdGlvblBhdGggPSBcIlwiO1xuXG5cdFx0Y2hhcnRCbG9jay5fY3VzdG9tRGF0YSA9IHtcblx0XHRcdHRhcmdldENvbGxlY3Rpb25QYXRoOiBcIlwiLFxuXHRcdFx0ZW50aXR5U2V0OiBcIlwiLFxuXHRcdFx0ZW50aXR5VHlwZTogXCJcIixcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogXCJcIixcblx0XHRcdG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zOiBcIlwiLFxuXHRcdFx0c2VnbWVudGVkQnV0dG9uSWQ6IFwiXCIsXG5cdFx0XHRjdXN0b21BZ2c6IHt9LFxuXHRcdFx0dHJhbnNBZ2c6IHt9LFxuXHRcdFx0YXBwbHlTdXBwb3J0ZWQ6IHt9LFxuXHRcdFx0dml6UHJvcGVydGllczoge31cblx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlckJhcihjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZmlsdGVyQmFyID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChjaGFydEJsb2NrLmZpbHRlckJhcik7XG5cdGlmIChjaGFydEJsb2NrLmZpbHRlckJhciAmJiBmaWx0ZXJCYXI/LmlzQTxNYWNyb0FQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikpIHtcblx0XHRyZXR1cm4gZ2V0Q29udGVudElkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0fSBlbHNlIGlmIChmaWx0ZXJCYXI/LmlzQTxDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0cmV0dXJuIGNoYXJ0QmxvY2suZmlsdGVyQmFyO1xuXHR9IGVsc2UgaWYgKGNoYXJ0QmxvY2suZmlsdGVyQmFyKSB7XG5cdFx0cmV0dXJuIGdldENvbnRlbnRJZChjaGFydEJsb2NrLmZpbHRlckJhcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVsZWdhdGUoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IG9iamVjdCB7XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUpIHtcblx0XHQoY2hhcnRCbG9jay5jaGFydERlbGVnYXRlIGFzIENoYXJ0RGVsZWdhdGUpLnBheWxvYWQuc2VsZWN0aW9uTW9kZSA9XG5cdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5zZWxlY3Rpb25Nb2RlPy50b1VwcGVyQ2FzZSgpID8/XG5cdFx0XHQoY2hhcnRCbG9jay5jaGFydERlbGVnYXRlIGFzIENoYXJ0RGVsZWdhdGUpLnBheWxvYWQuc2VsZWN0aW9uTW9kZSA/P1xuXHRcdFx0XCJNVUxUSVBMRVwiO1xuXHR9XG5cdHJldHVybiBjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGVcblx0XHQ/IGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZVxuXHRcdDoge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0Y2hhcnRDb250ZXh0UGF0aDogY2hhcnRCbG9jay5fY3VzdG9tRGF0YS50YXJnZXRDb2xsZWN0aW9uUGF0aCxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uV29ya2Vyc1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxlY3Rpb25Nb2RlOlxuXHRcdFx0XHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uc2VsZWN0aW9uTW9kZT8udG9VcHBlckNhc2UoKSA/PyBjaGFydEJsb2NrLnNlbGVjdGlvbk1vZGU/LnRvVXBwZXJDYXNlKCkgPz8gXCJNVUxUSVBMRVwiXG5cdFx0XHRcdH1cblx0XHQgIH07XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbURhdGEoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IEN1c3RvbURhdGFbXSB7XG5cdHJldHVybiBbXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInRhcmdldENvbGxlY3Rpb25QYXRoXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRofSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiZW50aXR5U2V0XCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmVudGl0eVNldH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImVudGl0eVR5cGVcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5VHlwZX0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5vcGVyYXRpb25BdmFpbGFibGVNYXB9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uc1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5tdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uc30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInNlZ21lbnRlZEJ1dHRvbklkXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnNlZ21lbnRlZEJ1dHRvbklkfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiY3VzdG9tQWdnXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmN1c3RvbUFnZ30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInRyYW5zQWdnXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRyYW5zQWdnfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiYXBwbHlTdXBwb3J0ZWRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuYXBwbHlTdXBwb3J0ZWR9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJ2aXpQcm9wZXJ0aWVzXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnZpelByb3BlcnRpZXN9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJkcmFmdFN1cHBvcnRlZFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5kcmFmdFN1cHBvcnRlZH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcIm11bHRpVmlld3NcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEubXVsdGlWaWV3c30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRofSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZX0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImNoYXJ0TWVhc3VyZUtleUFuZFJvbGVcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY2hhcnRNZWFzdXJlS2V5QW5kUm9sZX0gLz5cblx0XTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9EYXRhKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBJbGx1c3RyYXRlZE1lc3NhZ2UgfCB1bmRlZmluZWQge1xuXHRpZiAoY2hhcnRCbG9jay5fY3VzdG9tRGF0YS50YXJnZXRDb2xsZWN0aW9uUGF0aCA9PT0gXCJcIikge1xuXHRcdHJldHVybjtcblx0fVxuXHRyZXR1cm4gKFxuXHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuQXV0b31cblx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuQmVmb3JlU2VhcmNofVxuXHRcdFx0dGl0bGU9e2NoYXJ0QmxvY2suZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RJVExFX1RFWFRcIil9XG5cdFx0XHRkZXNjcmlwdGlvbj17Y2hhcnRCbG9jay5nZXRUcmFuc2xhdGVkVGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiKX1cblx0XHRcdGVuYWJsZURlZmF1bHRUaXRsZUFuZERlc2NyaXB0aW9uPXtmYWxzZX1cblx0XHRcdGVuYWJsZVZlcnRpY2FsUmVzcG9uc2l2ZW5lc3M9e3RydWV9XG5cdFx0PjwvSWxsdXN0cmF0ZWRNZXNzYWdlPlxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWRjQ2hhcnRUZW1wbGF0ZShcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+XG4pOiBNZGNDaGFydCB7XG5cdGluaXRpYWxpc2UoY2hhcnRCbG9jaywgdmlld0RhdGEsIGRpYWdub3N0aWNzLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGNoYXJ0QmxvY2subGF5b3V0RGF0YSA9IDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIjFcIiBzaHJpbmtGYWN0b3I9XCIxXCIgLz47XG5cblx0cmV0dXJuIChcblx0XHQ8TWRjQ2hhcnRcblx0XHRcdGJpbmRpbmc9e3sgaW50ZXJuYWw6IFwiY29udHJvbHMvXCIgKyBjaGFydEJsb2NrLl9ibG9ja0lkIH19XG5cdFx0XHRpZD17Y2hhcnRCbG9jay5fY29udGVudElkfVxuXHRcdFx0Y2hhcnRUeXBlPXtjaGFydEJsb2NrLl9jaGFydFR5cGV9XG5cdFx0XHRzb3J0Q29uZGl0aW9ucz17Y2hhcnRCbG9jay5fc29ydENvbmRpdGlvbnN9XG5cdFx0XHRoZWFkZXI9e2NoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmhlYWRlciA/PyBjaGFydEJsb2NrLmhlYWRlciA/PyBjaGFydEJsb2NrLl9jaGFydD8uVGl0bGU/LnRvU3RyaW5nKCkgPz8gXCJcIn1cblx0XHRcdGhlYWRlclZpc2libGU9e2NoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmhlYWRlclZpc2libGUgPz8gY2hhcnRCbG9jay5oZWFkZXJWaXNpYmxlfVxuXHRcdFx0bWluSGVpZ2h0PXtEZXZpY2Uuc3lzdGVtLnBob25lID8gXCI4MHZoXCIgOiBcIjQwMHB4XCJ9XG5cdFx0XHRoZWlnaHQ9XCIxMDAlXCJcblx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRoZWFkZXJMZXZlbD17Y2hhcnRCbG9jay5oZWFkZXJMZXZlbH1cblx0XHRcdGhlYWRlclN0eWxlPXtjaGFydEJsb2NrLmhlYWRlclN0eWxlfVxuXHRcdFx0cDEzbk1vZGU9eyhjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24hIGFzIHN0cmluZyk/LnNwbGl0KFwiLFwiKX1cblx0XHRcdGZpbHRlcj17Y2hhcnRCbG9jay5maWx0ZXJ9XG5cdFx0XHRub0RhdGFUZXh0PXtcblx0XHRcdFx0Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS50YXJnZXRDb2xsZWN0aW9uUGF0aCA9PT0gXCJcIlxuXHRcdFx0XHRcdD8gY2hhcnRCbG9jay5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ0hBUlRfTk9fQU5OT1RBVElPTl9TRVRfVEVYVFwiKVxuXHRcdFx0XHRcdDogY2hhcnRCbG9jay5ub0RhdGFUZXh0XG5cdFx0XHR9XG5cdFx0XHRhdXRvQmluZE9uSW5pdD17Y2hhcnRCbG9jay5hdXRvQmluZE9uSW5pdH1cblx0XHRcdGRlbGVnYXRlPXtnZXREZWxlZ2F0ZShjaGFydEJsb2NrKX1cblx0XHRcdHZpc2libGU9e2NoYXJ0QmxvY2sudmlzaWJsZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBnZXRDdXN0b21EYXRhKGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRkZXBlbmRlbnRzOiBbZ2V0RGVwZW5kZW50cyhjaGFydEJsb2NrLCBjaGFydEJsb2NrLl9jaGFydENvbnRleHQpLCBnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyKGNoYXJ0QmxvY2spXSxcblx0XHRcdFx0aXRlbXM6IGdldEl0ZW1zKGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRhY3Rpb25zOiBjaGFydEJsb2NrLmNoYXJ0QWN0aW9ucyA/IGdldFRvb2xiYXJBY3Rpb25zKGNoYXJ0QmxvY2spIDogY2hhcnRCbG9jay5fYmxvY2tBY3Rpb25zLFxuXHRcdFx0XHR2YXJpYW50OiBjcmVhdGVWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKSxcblx0XHRcdFx0bm9EYXRhOiBnZXROb0RhdGEoY2hhcnRCbG9jaylcblx0XHRcdH19XG5cdFx0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