@sapui5/sap.fe.macros 1.142.0 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
  4. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
  5. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  6. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  7. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  8. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  9. package/src/sap/fe/macros/Field.js +5 -5
  10. package/src/sap/fe/macros/Field.ts +5 -3
  11. package/src/sap/fe/macros/FooterContent.js +3 -2
  12. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  13. package/src/sap/fe/macros/KPITag.js +6 -6
  14. package/src/sap/fe/macros/KPITag.tsx +5 -5
  15. package/src/sap/fe/macros/MacroAPI.js +2 -2
  16. package/src/sap/fe/macros/MacroAPI.ts +1 -1
  17. package/src/sap/fe/macros/MessageButton.js +3 -3
  18. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  19. package/src/sap/fe/macros/MicroChart.js +3 -2
  20. package/src/sap/fe/macros/MicroChart.tsx +1 -1
  21. package/src/sap/fe/macros/Share.js +7 -7
  22. package/src/sap/fe/macros/Share.tsx +9 -6
  23. package/src/sap/fe/macros/Status.js +6 -5
  24. package/src/sap/fe/macros/Status.tsx +3 -4
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  27. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  28. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
  33. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  34. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  35. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  36. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  37. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  38. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  39. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  40. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  41. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
  42. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
  43. package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
  44. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  45. package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
  46. package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
  47. package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
  48. package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
  49. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
  50. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
  51. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
  52. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
  53. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  54. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  55. package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
  56. package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
  57. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  58. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  59. package/src/sap/fe/macros/library.js +5 -6
  60. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  61. package/src/sap/fe/macros/messagebundle.properties +6 -0
  62. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  63. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  64. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  65. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  66. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  67. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  68. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  69. package/src/sap/fe/macros/table/Action.js +7 -4
  70. package/src/sap/fe/macros/table/Action.ts +3 -3
  71. package/src/sap/fe/macros/table/Column.js +3 -2
  72. package/src/sap/fe/macros/table/Column.ts +1 -1
  73. package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
  74. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
  75. package/src/sap/fe/macros/table/Table.block.js +6 -3
  76. package/src/sap/fe/macros/table/Table.block.tsx +13 -3
  77. package/src/sap/fe/macros/table/TableAPI.js +13 -8
  78. package/src/sap/fe/macros/table/TableAPI.ts +10 -3
  79. package/src/sap/fe/macros/table/TableDefinition.js +2 -2
  80. package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
  81. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
  82. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
  83. package/src/sap/fe/macros/table/TableRuntime.js +24 -12
  84. package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
  85. package/src/sap/fe/macros/table/Utils.js +9 -3
  86. package/src/sap/fe/macros/table/Utils.ts +14 -8
  87. package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
  88. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
  89. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  90. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  91. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
  92. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
  93. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  94. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  95. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
  96. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
  97. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  98. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  99. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  100. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  101. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  102. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
@@ -393,15 +393,31 @@ width="100%"
393
393
  />` : "";
394
394
  const computedIdPrefix = this.id ? StableIDHelper.generate([this.id, "SemanticFormElement", formElement.key, connectedField.originalObject?.Value.path]) : "";
395
395
  const computedVhIdPrefix = this.id ? StableIDHelper.generate([this.id, formElement.key, "FieldValueHelp"]) : "";
396
+
397
+ // if there is a label on the connected field, we create an invisible text for aria-labelledby for proper screen reading
398
+ const connectedFieldPath = connectedField.originalObject?.Value?.path?.valueOf();
399
+ const connectedFieldLabel = connectedField.originalObject?.Value?.$target?.annotations?.Common?.Label?.valueOf();
400
+ let ariaLabelId = "";
401
+ let ariaLabelText = "";
402
+ if (this.id && connectedFieldPath && connectedFieldLabel) {
403
+ ariaLabelId = StableIDHelper.generate([this.id, "AriaText", formElement.key, connectedFieldPath]);
404
+ ariaLabelText = xml`
405
+ <core:InvisibleText
406
+ text="${connectedFieldLabel}"
407
+ id="${ariaLabelId}"
408
+ />
409
+ `;
410
+ }
396
411
  let connectedFieldElement = "";
397
412
  connectedFieldElement = xml`
398
- <macro:Field
413
+ ${ariaLabelText}
414
+ <macro:Field
399
415
  idPrefix="${computedIdPrefix}"
400
416
  vhIdPrefix="${computedVhIdPrefix}"
401
417
  contextPath="${this.entitySet?.getPath()}"
402
418
  metaPath="${bindingContext.getPath()}"
403
419
  onChange="${this.onChange}"
404
- ariaLabelledBy="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
420
+ ariaLabelledBy="${this.id ? [StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]), ariaLabelId] : ""}"
405
421
  >
406
422
  <formatOptions
407
423
  textLinesEdit="${formElement.formatOptions?.textLinesEdit}"
@@ -451,10 +467,10 @@ width="100%"
451
467
 
452
468
  />
453
469
  </f:label>
454
- <f:fields>
470
+ <f:fields>
455
471
  <controls:FieldWrapper required="${isRequired}">
456
472
  <HBox wrap="Wrap">
457
- ${connectedFieldElements}
473
+ ${connectedFieldElements}
458
474
  </HBox>
459
475
  </controls:FieldWrapper>
460
476
  </f:fields>
@@ -658,7 +674,7 @@ width="100%"
658
674
  dt:designtime="${designtime}"
659
675
  id="${formElementId}"
660
676
  label="${formElement.label}"
661
- visible="${formElement.visible}"
677
+ ${this.attr("visible", formElement.visible)}
662
678
  ${this.attr("binding", bindingString)}
663
679
  >
664
680
  <f:fields>
@@ -828,4 +844,4 @@ width="100%"
828
844
  _exports = FormContainerBlock;
829
845
  return _exports;
830
846
  }, false);
831
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsIl9kZWMzIiwicmVxdWlyZWQiLCJpc1B1YmxpYyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJibG9ja0FnZ3JlZ2F0aW9uIiwiX2RlYzE3IiwiYmxvY2tFdmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja1RlbXBsYXQiLCJwcm9wcyIsImV4dGVybmFsQ29uZmlndXJhdGlvbiIsInNldHRpbmdzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZvcm1FbGVtZW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJvQ29udGV4dE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJtZXRhUGF0aCIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsIiRUeXBlIiwiTGFiZWwiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicGF0aCIsInRlcm0iLCJ2YWx1ZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJhbm5vdGF0aW9ucyIsImZpZWxkcyIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsInVuZGVmaW5lZCIsIm9Gb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiY29udGVudElkIiwidmlld0lkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwib3ZlcmZsb3dUb29sYmFySUQiLCJpZCIsIlN0YWJsZUlESGVscGVyIiwiZ2VuZXJhdGUiLCJkYXRhTW9kZWxPYmplY3QiLCJiaW5kaW5nU3RyaW5nIiwiRm9ybUhlbHBlciIsImdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24iLCJuYXZpZ2F0aW9uUGF0aCIsInhtbCIsImRlc2lnbnRpbWVTZXR0aW5ncyIsInZpc2libGUiLCJnZXRPYmplY3QiLCJoYXNVaUhpZGRlbkFubm90YXRpb24iLCJ0aXRsZSIsInRpdGxlTGV2ZWwiLCJhY3Rpb25zIiwiYXR0ciIsImdldFRlbXBsYXRlZEZvcm1FbGVtZW50cyIsImdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzIiwiZ2V0RGF0YVBvaW50VGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGgiLCJmaW5kIiwiZGYiLCJhbm5vdGF0aW9uUGF0aCIsImlkUHJlZml4IiwiaXNFZGl0YWJsZUhlYWRlciIsImluY2x1ZGVzIiwiZm9ybUVsZW1lbnRJZCIsImtleSIsImNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRlc2lnbnRpbWUiLCJVSSIsIkFkYXB0YXRpb25IaWRkZW4iLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdldFBhdGgiLCJkaXNwbGF5TW9kZSIsIm9uQ2hhbmdlIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zIiwiZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudHMiLCJzb3J0ZWRDb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHMiLCJ0ZW1wbGF0ZVN0cmluZyIsIm9yaWdpbmFsVGVtcGxhdGUiLCJwbGFjZWhvbGRlcnMiLCJBcnJheSIsImZyb20iLCJtYXRjaEFsbCIsIm1hcCIsIm0iLCJTdHJpbmciLCJ0cmltIiwiZmlsdGVyIiwicCIsImdldEZpZWxkSWRlbnRpZmllciIsImNmIiwib3JpZ2luYWxPYmplY3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpZWxkSWRzIiwidW5pcXVlUGxhY2Vob2xkZXJzIiwiU2V0IiwiaXNQZXJmZWN0TWF0Y2giLCJzaXplIiwiZXZlcnkiLCJoYXMiLCJtYXBCeUlkIiwiTWFwIiwicGgiLCJnZXQiLCJjb25uZWN0ZWRGaWVsZCIsIm1vZGVsIiwidGVtcE5hbWUiLCJiaW5kaW5nQ29udGV4dCIsImRlbGltaXRlciIsIkNvbW1vbkhlbHBlciIsImdldERlbGltaXRlciIsIm5vdExhc3RJbmRleENvbmRpdGlvbiIsImluZGV4T2YiLCJjb21wdXRlZElkUHJlZml4IiwiVmFsdWUiLCJjb21wdXRlZFZoSWRQcmVmaXgiLCJjb25uZWN0ZWRGaWVsZEVsZW1lbnQiLCJmb3JtYXRPcHRpb25zIiwidGV4dExpbmVzRWRpdCIsInRleHRNYXhMaW5lcyIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsInRleHRNYXhMZW5ndGgiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwiZmllbGRFZGl0U3R5bGUiLCJyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0IiwiZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIiwidmlzaWJsZUV4cHJlc3Npb24iLCJpc1BhcnRPZlByZXZpZXciLCJpc1JlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkIiwidG9TdHJpbmciLCJsYWJlbCIsImdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50IiwibXVsdGlWYWx1ZUZpZWxkSWQiLCJ2aElkUHJlZml4IiwiZ2V0RmllbGRHcm91cEZvcm1FbGVtZW50IiwiZmllbGRHcm91cEVsZW1lbnRzIiwiZ3JvdXBFbGVtZW50IiwiZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0IiwiaXNCb29sZWFuRmllbGRHcm91cCIsImZpZWxkR3JvdXBFbGVtZW50IiwiZmllbGRHcm91cEZvcm1FbGVtZW50SWQiLCJsYWJlbElEIiwiZmllbGRHcm91cEhvcml6b250YWxMYXlvdXQiLCJnZXRGaWVsZEZvcm1FbGVtZW50IiwicmVhZE9ubHkiLCJzZW1hbnRpY09iamVjdCIsInBhdHRlcm4iLCJ1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuIiwiZ2V0Q3VzdG9tRm9ybUVsZW1lbnQiLCJwcm9wZXJ0eVBhdGgiLCJmb3JtRWxlbWVudEtleSIsInRlbXBsYXRlIiwiZ2V0U2xvdENvbHVtbiIsImlzTXVsdGlWYWx1ZURhdGFGaWVsZCIsImRhdGFGaWVsZCIsImlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uIiwidmFsdWVQYXRoIiwiJFBhdGgiLCJpc011bHRpVmFsdWVGaWVsZCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicmV0dXJuU3RyaW5nIiwiQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGb3JtQ29udGFpbmVyLmJsb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcyxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnRUeXBlLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YmxvY2tBZ2dyZWdhdGlvbixcblx0YmxvY2tBdHRyaWJ1dGUsXG5cdGJsb2NrRXZlbnQsXG5cdGRlZmluZUJ1aWxkaW5nQmxvY2tcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB7IHhtbCwgdHlwZSBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25Gb3JtRWxlbWVudCwgQ3VzdG9tRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlESGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCwgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCIuLi9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEZvcm1IZWxwZXIgZnJvbSBcIi4vRm9ybUhlbHBlclwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIEZvcm1Db250YWluZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE9EYXRhIFY0IG1ldGFkYXRhLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6Rm9ybUNvbnRhaW5lclxuICogaWQ9XCJTb21lSWRcIlxuICogZW50aXR5U2V0PVwie2VudGl0eVNldD59XCJcbiAqIGRhdGFGaWVsZENvbGxlY3Rpb24gPVwie2RhdGFGaWVsZENvbGxlY3Rpb24+fVwiXG4gKiB0aXRsZT1cInNvbWVUaXRsZVwiXG4gKiBuYXZpZ2F0aW9uUGF0aD1cIntUb1N1cHBsaWVyfVwiXG4gKiB2aXNpYmxlPXRydWVcbiAqIG9uQ2hhbmdlPVwiLmhhbmRsZXJzLm9uRmllbGRWYWx1ZUNoYW5nZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiBAcHJpdmF0ZVxuICovXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7IG5hbWU6IFwiRm9ybUNvbnRhaW5lclwiLCBuYW1lc3BhY2U6IFwic2FwLmZlLm1hY3Jvc1wiIH0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtQ29udGFpbmVyQmxvY2sgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2Uge1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkPzogc3RyaW5nO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGlzUHVibGljOiB0cnVlLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIkVudGl0eVR5cGVcIiwgXCJTaW5nbGV0b25cIl1cblx0fSlcblx0Y29udGV4dFBhdGghOiBDb250ZXh0O1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiXG5cdH0pXG5cdGVudGl0eVNldD86IENvbnRleHQ7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0bWV0YVBhdGghOiBDb250ZXh0O1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhRmllbGRDb2xsZWN0aW9uXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRkYXRhRmllbGRDb2xsZWN0aW9uPzogRm9ybUVsZW1lbnRbXTtcblxuXHQvKipcblx0ICogQ29udHJvbCB3aGV0aGVyIHRoZSBmb3JtIGlzIGluIGRpc3BsYXlNb2RlIG9yIG5vdFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRkaXNwbGF5TW9kZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaXRsZSBvZiB0aGUgZm9ybSBjb250YWluZXJcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dGl0bGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIFwiYXJpYS1sZXZlbFwiIG9mIHRoZSBmb3JtIHRpdGxlLCB0aXRsZXMgb2YgaW50ZXJuYWxseSB1c2VkIGZvcm0gY29udGFpbmVycyBhcmUgbmVzdGVkIHN1YnNlcXVlbnRseVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzYXAudWkuY29yZS5UaXRsZUxldmVsXCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdHRpdGxlTGV2ZWwgPSBcIkF1dG9cIjtcblxuXHQvKipcblx0ICogQmluZGluZyB0aGUgZm9ybSBjb250YWluZXIgdXNpbmcgYSBuYXZpZ2F0aW9uIHBhdGhcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bmF2aWdhdGlvblBhdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEJpbmRpbmcgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZvcm0gY29udGFpbmVyIHVzaW5nIGFuIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZpc2libGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIFVJIGhpZGRlbiBhbm5vdGF0aW9uIGlzIHByZXNlbnQgb3Igbm90XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRoYXNVaUhpZGRlbkFubm90YXRpb24/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBGbGV4IGRlc2lnbnRpbWUgc2V0dGluZ3MgdG8gYmUgYXBwbGllZFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRkZXNpZ250aW1lU2V0dGluZ3MgPSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQ29udGFpbmVyLmRlc2lnbnRpbWVcIjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXTtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG5cblx0QGJsb2NrQWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtRWxlbWVudFwiIH0pXG5cdGZvcm1FbGVtZW50czogUmVjb3JkPHN0cmluZywgQ29uZmlndXJhYmxlT2JqZWN0PiA9IHt9O1xuXG5cdC8vIEp1c3QgcHJveGllZCBkb3duIHRvIHRoZSBGaWVsZCBtYXkgbmVlZCB0byBzZWUgaWYgbmVlZGVkIG9yIG5vdFxuXHRAYmxvY2tFdmVudCgpXG5cdG9uQ2hhbmdlPzogc3RyaW5nO1xuXG5cdGNvbnRlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Rm9ybUNvbnRhaW5lckJsb2NrPiwgZXh0ZXJuYWxDb25maWd1cmF0aW9uOiB1bmtub3duLCBzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmVudGl0eVNldCA9IHRoaXMuY29udGV4dFBhdGghO1xuXHRcdGlmICh0aGlzLmZvcm1FbGVtZW50cyAmJiBPYmplY3Qua2V5cyh0aGlzLmZvcm1FbGVtZW50cykubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFJlZmVyZW5jZUZhY2V0Pih0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRcdGNvbnN0IG1FeHRyYVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0bGV0IG9GYWNldERlZmluaXRpb24gPSBvQ29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0Ly8gV3JhcCB0aGUgZmFjZXQgaW4gYSBmYWtlIEZhY2V0IGFubm90YXRpb25cblx0XHRcdG9GYWNldERlZmluaXRpb24gPSB7XG5cdFx0XHRcdCRUeXBlOiBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCxcblx0XHRcdFx0TGFiZWw6IG9GYWNldERlZmluaXRpb24/LkxhYmVsLFxuXHRcdFx0XHRUYXJnZXQ6IHtcblx0XHRcdFx0XHQkdGFyZ2V0OiBvRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0dGVybTogXCJcIixcblx0XHRcdFx0XHR0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsXG5cdFx0XHRcdFx0dmFsdWU6IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0NvbnRleHRPYmplY3RQYXRoKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbm5vdGF0aW9uczoge30sXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHR9IGFzIHVua25vd24gYXMgUmVmZXJlbmNlRmFjZXQ7XG5cdFx0XHRtRXh0cmFTZXR0aW5nc1tvRmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZV0gPSB7IGZpZWxkczogdGhpcy5mb3JtRWxlbWVudHMgfTtcblx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5nZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHRvQ29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdC8qdGhpcy5jb250ZXh0UGF0aCovIHVuZGVmaW5lZCxcblx0XHRcdFx0c2V0dGluZ3MsXG5cdFx0XHRcdG1FeHRyYVNldHRpbmdzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb0Zvcm1EZWZpbml0aW9uID0gY3JlYXRlRm9ybURlZmluaXRpb24ob0ZhY2V0RGVmaW5pdGlvbiwgXCJ0cnVlXCIsIG9Db252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdFx0dGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uID0gb0Zvcm1EZWZpbml0aW9uLmZvcm1Db250YWluZXJzWzBdLmZvcm1FbGVtZW50cztcblx0XHR9XG5cdFx0Ly8gV2UgbmVlZCB0aGUgdmlldyBpZCBmb3IgdGhlIGZvcm0gZWxlbWVudHMgc3RhYmxlIGlkcyBnZW5lcmF0aW9uXG5cdFx0dGhpcy5jb250ZW50SWQgPSBzZXR0aW5ncy52aWV3SWQgYXMgc3RyaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGZvciB0aGUgRm9ybUNvbnRhaW5lci5cblx0ICogQHJldHVybnMgVGhlIFhNTCB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdmVyZmxvd1Rvb2xiYXJJRCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtQWN0aW9uc1Rvb2xiYXJcIl0pIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyh0aGlzLmNvbnRleHRQYXRoLCB0aGlzLm1ldGFQYXRoKSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBkYXRhTW9kZWxPYmplY3QpO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHQ8ZjpGb3JtQ29udGFpbmVyXG5cdFx0XHR4bWxucz1cInNhcC5tXCJcblx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0eG1sbnM6bWFjcm89XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdHhtbG5zOm1hY3JvRm9ybT1cInNhcC5mZS5tYWNyb3MuZm9ybVwiXG5cdFx0XHR4bWxuczppbnRlcm5hbE1hY3JvPVwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiXG5cdFx0XHR4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIlxuXHRcdFx0eG1sbnM6Y29udHJvbHM9XCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzXCJcblx0XHRcdHhtbG5zOmR0PVwic2FwLnVpLmR0XCJcblx0XHRcdHhtbG5zOm1hY3JvZGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIlxuXHRcdFx0eG1sbnM6ZnBtPVwic2FwLmZlLm1hY3Jvcy5mcG1cIlxuXHRcdFx0eG1sbnM6dGVtcGxhdGU9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUudGVtcGxhdGUvMVwiXG5cdFx0XHR0ZW1wbGF0ZTpyZXF1aXJlPVwie1xuXHRcdFx0XHRNT0RFTDogJ3NhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyJyxcblx0XHRcdFx0SUQ6ICdzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyJyxcblx0XHRcdFx0Q09NTU9OOiAnc2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXInLFxuXHRcdFx0XHRGT1JNOiAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1IZWxwZXInLFxuXHRcdFx0XHRVSTogJ3NhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RGF0YUZpZWxkOiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhRmllbGRGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RmllbGRUZW1wbGF0aW5nOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmcnLFxuXHRcdFx0XHRQcm9wZXJ0eTogJ3NhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RklFTEQ6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyJyxcblx0XHRcdFx0TUFDUk86ICdzYXAvZmUvbWFjcm9zL01hY3JvVGVtcGxhdGluZydcblx0XHRcdH1cIlxuXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7Rm9ybUNvbnRhaW5lclJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUNvbnRhaW5lckFQSSd9XCJcblx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke3RoaXMuZGVzaWdudGltZVNldHRpbmdzfVwiXG5cdFx0XHRpZD1cIiR7dGhpcy5pZCB8fCB1bmRlZmluZWR9XCJcblx0XHRcdHZpc2libGU9XCIke3RoaXMudmlzaWJsZX1cIlxuXHRcdFx0bWFjcm9kYXRhOm5hdmlnYXRpb25QYXRoPVwiJHt0aGlzLm5hdmlnYXRpb25QYXRofVwiXG5cdFx0XHRtYWNyb2RhdGE6ZXROYW1lPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldE9iamVjdChcIi4vQHNhcHVpLm5hbWVcIil9XCJcblx0XHRcdG1hY3JvZGF0YTpVaUhpZGRlblByZXNlbnQ9XCIke3RoaXMuaGFzVWlIaWRkZW5Bbm5vdGF0aW9ufVwiXG5cdFx0PlxuXG5cdFx0XHQ8dGVtcGxhdGU6aWYgdGVzdD1cIiR7dGhpcy50aXRsZX1cIj5cblx0XHRcdFx0PGY6dGl0bGU+XG5cdFx0XHRcdFx0PGNvcmU6VGl0bGUgbGV2ZWw9XCIke3RoaXMudGl0bGVMZXZlbH1cIiB0ZXh0PVwiJHt0aGlzLnRpdGxlfVwiIC8+XG5cdFx0XHRcdDwvZjp0aXRsZT5cblx0XHRcdDwvdGVtcGxhdGU6aWY+XG5cblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiJHt0aGlzLmFjdGlvbnN9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdDxmOnRvb2xiYXI+XG5cdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyXG5cdFx0XHRcdFx0XHRcdGlkPVwiJHtvdmVyZmxvd1Rvb2xiYXJJRH1cIlxuXHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0PHRlbXBsYXRlOnJlcGVhdCBsaXN0PVwie2FjdGlvbnM+fVwiIHZhcj1cImFjdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQWN0aW9uQnV0dG9uc1wiIHR5cGU9XCJYTUxcIiAvPlxuXHRcdFx0XHRcdFx0XHQ8L3RlbXBsYXRlOnJlcGVhdD5cblx0XHRcdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdDwvZjp0b29sYmFyPlxuXHRcdFx0XHQ8L3RlbXBsYXRlOnRoZW4+XG5cdFx0XHQ8L3RlbXBsYXRlOmlmPlxuXG5cdFx0XHQ8ZjpkZXBlbmRlbnRzPlxuXHRcdFx0XHQ8bWFjcm9Gb3JtOkZvcm1Db250YWluZXJBUEkgZm9ybUNvbnRhaW5lcklkPVwiJHt0aGlzLmlkfVwiIHNob3dEZXRhaWxzPVwie2ludGVybmFsPnNob3dEZXRhaWxzfVwiIC8+XG5cdFx0XHQ8L2Y6ZGVwZW5kZW50cz5cblxuXHRcdFx0PGY6Zm9ybUVsZW1lbnRzPlxuXHRcdFx0XHQke3RoaXMuZ2V0VGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L2Y6Zm9ybUVsZW1lbnRzPlxuXG5cdFx0PC9mOkZvcm1Db250YWluZXI+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHVibGljIGdldFRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZGF0YUZpZWxkQ29sbGVjdGlvbj5cIiB2YXI9XCJmb3JtRWxlbWVudHNcIj5cblx0XHRcdFx0JHt0aGlzLmdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbm5lciB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cywgaW5jbHVkaW5nIERhdGFQb2ludCBhbmQgQ29udGFjdCB0ZW1wbGF0ZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgaW5uZXIgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdHB1YmxpYyBnZXRJbm5lclRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdGxldCBnZXREYXRhUG9pbnRUZW1wbGF0ZSA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uICYmIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGFuIGFubm90YXRpb25QYXRoXG5cdFx0XHRjb25zdCBmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGggPSB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24uZmluZCgoZGYpID0+ICEhZGYuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0bGV0IGlkUHJlZml4ID0gXCJcIjtcblx0XHRcdGNvbnN0IGlzRWRpdGFibGVIZWFkZXIgPSB0aGlzLmlkPy5pbmNsdWRlcyhcIkhlYWRlckZhY2V0OjpGb3JtQ29udGFpbmVyXCIpID09PSB0cnVlO1xuXHRcdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdFx0aWYgKGlzRWRpdGFibGVIZWFkZXIpIHtcblx0XHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5pZH06OkZvcm1FbGVtZW50YDtcblx0XHRcdFx0XHRpZFByZWZpeCA9IGAke3RoaXMuaWR9OjpGb3JtRWxlbWVudGA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvblswXS5rZXldKX1gO1xuXHRcdFx0XHRcdGlkUHJlZml4ID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uWzBdLmtleV0pfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoIHx8IFwiXCIpXG5cdFx0XHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRcdFx0Y29uc3QgZGVzaWdudGltZSA9IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0XHRcdGdldERhdGFQb2ludFRlbXBsYXRlID0geG1sYFxuXHRcdFx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cImRhdGFQb2ludFwiPlxuXHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRsYWJlbD1cIntkYXRhUG9pbnQ+QEBGSUVMRC5jb21wdXRlTGFiZWxUZXh0fVwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke2dldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0aWRQcmVmaXg9XCIke2lkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHt0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0uYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdGVkaXRNb2RlPVwiJHt0aGlzLmRpc3BsYXlNb2RlID09PSB0cnVlID8gXCJEaXNwbGF5XCIgOiB1bmRlZmluZWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblxuXHRcdFx0YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBnZXRDb250YWN0VGVtcGxhdGUgPSB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGhcIiB2YXI9XCJtZXRhUGF0aFwiPlxuXHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJ7PSBcXCR7bWV0YVBhdGg+Li9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlbn0gPyAnbm90LWFkYXB0YWJsZS10cmVlJyA6ICAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWUnIH1cIlxuXHRcdFx0XHRcdGJpbmRpbmc9XCJ7PSBGT1JNLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24oXFwke3RoaXMubmF2aWdhdGlvblBhdGh9LFxcJHtjb250ZXh0UGF0aD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0dGV4dD1cInttZXRhUGF0aD5mbi8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWx9XCJcblx0XHRcdFx0XHRcdHZpc2libGU9XCJ7PSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oXFwke2RhdGFGaWVsZD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHQ8bGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdDxmOkNvbHVtbkVsZW1lbnREYXRhIGNlbGxzTGFyZ2U9XCIxMlwiIC8+XG5cdFx0XHRcdFx0PC9sYXlvdXREYXRhPlxuXHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHQ8L2Y6bGFiZWw+XG5cdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PG1hY3JvOkNvbnRhY3Rcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCJ7bWV0YVBhdGg+QEBDT01NT04uZ2V0TWV0YVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIntjb250ZXh0UGF0aD5AQENPTU1PTi5nZXRNZXRhUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6aWYgdGVzdD1cIns9IFxcJHtmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aH0uaW5kZXhPZignY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50JykgPiAtMSB9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdCR7Z2V0RGF0YVBvaW50VGVtcGxhdGV9XG5cdFx0XHRcdDwvdGVtcGxhdGU6dGhlbj5cblx0XHRcdFx0PHRlbXBsYXRlOmVsc2VpZlxuXHRcdFx0XHRcdHRlc3Q9XCJ7PSBcXCR7Zm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGh9LmluZGV4T2YoJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdCcpID4gLTEgfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQke2dldENvbnRhY3RUZW1wbGF0ZX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlaWY+XG5cdFx0XHRcdDx0ZW1wbGF0ZTplbHNlPlxuXHRcdFx0XHRcdCR7dGhpcy5nZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHdpdGggY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY29ubmVjdGVkIGZpZWxkcyBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgY29ubmVjdGVkRmllbGRFbGVtZW50cyA9IFwiXCI7XG5cblx0XHQvLyBDcmVhdGUgYSBzb3J0ZWQgY29weSBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcyBiYXNlZCBvbiB0aGUgcGxhY2Vob2xkZXIgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIHN0cmluZy5cblx0XHQvLyBUaGUgdGVtcGxhdGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sgbGlrZSBcIntGaWVsZEF9IC8ge0ZpZWxkQn1cIiBldGMuIFdlIGV4dHJhY3QgdGhlIHBsYWNlaG9sZGVyXG5cdFx0Ly8gc2VxdWVuY2UgYW5kIHNvcnQgdGhlIGNvbm5lY3RlZCBmaWVsZHMgYWNjb3JkaW5nbHkgKGZhbGxpbmcgYmFjayB0byBvcmlnaW5hbCBvcmRlciBmb3IgdW5tYXRjaGVkIGZpZWxkcykuXG5cdFx0bGV0IHNvcnRlZENvbm5lY3RlZEZpZWxkcyA9IGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyA/IFsuLi5mb3JtRWxlbWVudC5jb25uZWN0ZWRGaWVsZHNdIDogW107XG5cdFx0aWYgKHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVN0cmluZyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkc1swXS5vcmlnaW5hbFRlbXBsYXRlIHx8IFwiXCI7XG5cdFx0XHQvLyBFeHRyYWN0IHBsYWNlaG9sZGVycyBpbiB0aGUgc2VxdWVuY2UgZGVmaW5lZCBieSB0aGUgdGVtcGxhdGUgKGUuZy4gXCJ7RmllbGRBfSAvIHtGaWVsZEJ9XCIpXG5cdFx0XHRjb25zdCBwbGFjZWhvbGRlcnMgPSBBcnJheS5mcm9tKHRlbXBsYXRlU3RyaW5nLm1hdGNoQWxsKC9cXHsoW159XSspXFx9L2cpKVxuXHRcdFx0XHQubWFwKChtKSA9PiBTdHJpbmcobVsxXSkudHJpbSgpKVxuXHRcdFx0XHQuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xuXG5cdFx0XHQvLyBIZWxwZXIgdG8gZGVyaXZlIHRoZSBpZGVudGlmaWVyIGZyb20gdGhlIGNvbm5lY3RlZCBmaWVsZCAobGFzdCBzZWdtZW50IG9mIGZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHRcdGNvbnN0IGdldEZpZWxkSWRlbnRpZmllciA9IChjZjogKHR5cGVvZiBzb3J0ZWRDb25uZWN0ZWRGaWVsZHMpW251bWJlcl0pOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5hbE9iamVjdCA9IGNmLm9yaWdpbmFsT2JqZWN0O1xuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gb3JpZ2luYWxPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cmluZyhvcmlnaW5hbE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSlcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmaWVsZElkcyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5tYXAoZ2V0RmllbGRJZGVudGlmaWVyKTtcblx0XHRcdGNvbnN0IHVuaXF1ZVBsYWNlaG9sZGVycyA9IG5ldyBTZXQocGxhY2Vob2xkZXJzKTtcblxuXHRcdFx0Ly8gV2Ugb25seSByZW9yZGVyIGlmIHRoZSB0ZW1wbGF0ZSBpcyBwZXJmZWN0bHkgYW5ub3RhdGVkOlxuXHRcdFx0Ly8gMS4gU2FtZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzIGFzIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdC8vIDIuIEFsbCBwbGFjZWhvbGRlcnMgYXJlIHVuaXF1ZVxuXHRcdFx0Ly8gMy4gRXZlcnkgY29ubmVjdGVkIGZpZWxkIGlkIGlzIHJlZmVyZW5jZWQgZXhhY3RseSBvbmNlXG5cdFx0XHRjb25zdCBpc1BlcmZlY3RNYXRjaCA9XG5cdFx0XHRcdHBsYWNlaG9sZGVycy5sZW5ndGggPT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggJiZcblx0XHRcdFx0dW5pcXVlUGxhY2Vob2xkZXJzLnNpemUgPT09IHBsYWNlaG9sZGVycy5sZW5ndGggJiZcblx0XHRcdFx0ZmllbGRJZHMuZXZlcnkoKGlkKSA9PiB1bmlxdWVQbGFjZWhvbGRlcnMuaGFzKGlkKSk7XG5cblx0XHRcdC8vIFJldmlldyBmZWVkYmFjazogRG8gTk9UIFwiZml4XCIgYmFkbHkgYW5ub3RhdGVkIGNvbm5lY3RlZCBmaWVsZHMuXG5cdFx0XHQvLyBJZiB0aGUgYW5ub3RhdGlvbiBpcyBub3QgcGVyZmVjdCwgd2Uga2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuXG5cdFx0XHRpZiAoaXNQZXJmZWN0TWF0Y2gpIHtcblx0XHRcdFx0Y29uc3QgbWFwQnlJZCA9IG5ldyBNYXAoc29ydGVkQ29ubmVjdGVkRmllbGRzLm1hcCgoY2YpID0+IFtnZXRGaWVsZElkZW50aWZpZXIoY2YpLCBjZl0pKTtcblx0XHRcdFx0c29ydGVkQ29ubmVjdGVkRmllbGRzID0gcGxhY2Vob2xkZXJzLm1hcCgocGgpID0+IG1hcEJ5SWQuZ2V0KHBoKSEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29ubmVjdGVkRmllbGQgb2Ygc29ydGVkQ29ubmVjdGVkRmllbGRzKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHRlbXBOYW1lID0gY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IHBhdGggPSB0ZW1wTmFtZT8uc3Vic3RyaW5nKHRlbXBOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCArIFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiICsgcGF0aCk7XG5cdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSBDb21tb25IZWxwZXIuZ2V0RGVsaW1pdGVyKGNvbm5lY3RlZEZpZWxkLm9yaWdpbmFsVGVtcGxhdGUgPz8gXCJcIik7XG5cdFx0XHRjb25zdCBub3RMYXN0SW5kZXhDb25kaXRpb24gPVxuXHRcdFx0XHRzb3J0ZWRDb25uZWN0ZWRGaWVsZHMuaW5kZXhPZihjb25uZWN0ZWRGaWVsZCkgIT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggLSAxXG5cdFx0XHRcdFx0PyB4bWxgPFRleHRcbnRleHQ9XCIke2RlbGltaXRlcn1cIlxuY2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5FbmRcIlxud2lkdGg9XCIxMDAlXCJcbi8+YFxuXHRcdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWUucGF0aFxuXHRcdFx0XHQgIF0pXG5cdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXB1dGVkVmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5LCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IFwiXCI7XG5cblx0XHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSBcIlwiO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSB4bWxgXG4gICAgICAgICAgICAgICAgPG1hY3JvOkZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG4gICAgICAgICAgICAgICAgICAgIHZoSWRQcmVmaXg9XCIke2NvbXB1dGVkVmhJZFByZWZpeH1cIlxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGF0aD1cIiR7dGhpcy5lbnRpdHlTZXQ/LmdldFBhdGgoKX1cIlxuICAgICAgICAgICAgICAgICAgICBtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lc0VkaXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRNYXhMaW5lcz1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1heExlbmd0aD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0VtcHR5SW5kaWNhdG9yPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVkaXRTdHlsZT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8uZmllbGRFZGl0U3R5bGV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hY3JvOmxheW91dERhdGE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCJ7PSAle3VpPi9pc0VkaXRhYmxlfSA/IDEgOiAwfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWFjcm86bGF5b3V0RGF0YT5cbiAgICAgICAgICAgICAgICA8L21hY3JvOkZpZWxkPlxuICAgICAgICAgICAgICAgICR7bm90TGFzdEluZGV4Q29uZGl0aW9ufVxuICAgICAgICAgICAgICAgIGA7XG5cblx0XHRcdGNvbm5lY3RlZEZpZWxkRWxlbWVudHMgKz0gY29ubmVjdGVkRmllbGRFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT5cblx0XHRcdCAgKVxuXHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+c2hvd0RldGFpbHN9ID09PSB0cnVlfVwiO1xuXHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzKTtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0XG5cdFx0XHQ/LiR0YXJnZXQgYXMgQW5ub3RhdGlvblRlcm08Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzPjtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHM/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxBbm5vdGF0aW9uUGF0aDxDb25uZWN0ZWRGaWVsZHNUeXBlPj5cblx0XHQpPy50b1N0cmluZygpO1xuXG5cdFx0cmV0dXJuIHhtbGBcbiAgICAgICAgICAgIDxmOkZvcm1FbGVtZW50XG4gICAgICAgICAgICAgICAgeG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG4gICAgICAgICAgICAgICAgZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuICAgICAgICAgICAgICAgIGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG4gICAgICAgICAgICAgICAgdmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcbiAgICAgICAgICAgICAgICAke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGY6bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9mOmxhYmVsPlxuICAgICAgICAgICAgICAgIDxmOmZpZWxkcz5cbiAgICAgICAgICAgICAgICAgICAgPGNvbnRyb2xzOkZpZWxkV3JhcHBlciByZXF1aXJlZD1cIiR7aXNSZXF1aXJlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxIQm94IHdyYXA9XCJXcmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb25uZWN0ZWRGaWVsZEVsZW1lbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9IQm94PlxuICAgICAgICAgICAgICAgICAgICA8L2NvbnRyb2xzOkZpZWxkV3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8L2Y6ZmllbGRzPlxuICAgICAgICAgICAgPC9mOkZvcm1FbGVtZW50PlxuICAgICAgICBgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHJlcHJlc2VudGluZyBhIG11bHRpdmFsdWUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIG11bHRpLXZhbHVlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBmb3JtRWxlbWVudElkID0gdGhpcy5pZCA/IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWAgOiBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IG11bHRpVmFsdWVGaWVsZElkID0gdGhpcy5pZFxuXHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXksIFwiTXVsdGlWYWx1ZUZpZWxkXCJdKX1gXG5cdFx0XHQ6IFwidW5kZWZpbmVkXCI7XG5cdFx0Y29uc3QgdmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSkgOiBcIlwiO1xuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6bWFjcm9zPVwic2FwLmZlLm1hY3Jvc1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOm11bHRpdmFsdWVmaWVsZD1cInNhcC5mZS5tYWNyb3MubXVsdGl2YWx1ZWZpZWxkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvczpNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHttdWx0aVZhbHVlRmllbGRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7dmhJZFByZWZpeH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG11bHRpdmFsdWVmaWVsZDpGb3JtYXRPcHRpb25zIHNob3dFbXB0eUluZGljYXRvcj1cInRydWVcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvczpNdWx0aVZhbHVlRmllbGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBmb3JtIGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIGNoZWNrYm94IGdyb3VwLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjaGVja2JveCBncm91cCBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0Z2V0RmllbGRHcm91cEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGxldCBmaWVsZEdyb3VwRWxlbWVudHMgPSBcIlwiO1xuXHRcdC8vV2UgdGVtcGxhdGUgZWFjaCBlbGVtZW50IG9mIHRoZSBjaGVja2JveCBncm91cFxuXHRcdGZvciAoY29uc3QgZ3JvdXBFbGVtZW50IG9mIGZvcm1FbGVtZW50LmZpZWxkR3JvdXBFbGVtZW50cyEpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdGVtcE5hbWUgPSBncm91cEVsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgcGF0aCA9IHRlbXBOYW1lPy5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoICsgXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCIgKyBwYXRoKTtcblx0XHRcdGNvbnN0IGdyb3VwRWxlbWVudERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZT4oYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJDaGVja0JveEdyb3VwXCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LnBhdGhcblx0XHRcdFx0ICBdKX1gXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgaXNCb29sZWFuRmllbGRHcm91cCA9XG5cdFx0XHRcdChncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGUpPy5WYWx1ZT8uJHRhcmdldD8udHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiO1xuXG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRWxlbWVudCA9IGlzQm9vbGVhbkZpZWxkR3JvdXBcblx0XHRcdFx0PyB4bWxgXG5cdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgaXNGaWVsZEdyb3VwSXRlbT1cInRydWVcIiB0ZXh0QWxpZ25Nb2RlPVwiRm9ybVwiIC8+XG5cdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRgXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0ZmllbGRHcm91cEVsZW1lbnRzICs9IGZpZWxkR3JvdXBFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRsZXQgZmllbGRHcm91cEZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGxldCBsYWJlbElEID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFtcblx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnQua2V5XG5cdFx0XHRcdF0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZEdyb3VwRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cDtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2ZpZWxkR3JvdXBGb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke3Zpc2libGVFeHByZXNzaW9ufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7bGFiZWxJRH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjb250cm9sczpSZXF1aXJlZEZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBIb3Jpem9udGFsTGF5b3V0ID09PSB0cnVlID8gXCJSb3dcIiA6IFwiQ29sdW1uXCJ9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD1cIldyYXBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5HYXA9XCIxcmVtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGl0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7ZmllbGRHcm91cEVsZW1lbnRzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2l0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvY29udHJvbHM6UmVxdWlyZWRGbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgYSBmb3JtIGVsZW1lbnQgcmVwcmVzZW50aW5nIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldEZpZWxkRm9ybUVsZW1lbnQoZm9ybUVsZW1lbnQ6IEFubm90YXRpb25Gb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGggPz8gXCJcIilcblx0XHQpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBjb21wdXRlZFZoSWRQcmVmaXggPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWQgPyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gIDogXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm86RmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHtjb21wdXRlZFZoSWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCIke2Zvcm1FbGVtZW50LmFubm90YXRpb25QYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT1cIiR7dGhpcy5vbkNoYW5nZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVhZE9ubHk9XCIke2Zvcm1FbGVtZW50LnJlYWRPbmx5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdD1cIiR7Zm9ybUVsZW1lbnQuc2VtYW50aWNPYmplY3R9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dExpbmVzRWRpdD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGluZXM9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lc31cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGVuZ3RoPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRFZGl0U3R5bGU9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkRWRpdFN0eWxlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZVRpbWVQYXR0ZXJuPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5wYXR0ZXJufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW49XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW59XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNybzpGaWVsZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgY3VzdG9tIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBjdXN0b20gZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGN1c3RvbSBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDdXN0b21Gb3JtRWxlbWVudChmb3JtRWxlbWVudDogQ3VzdG9tRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHRoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpICsgXCIvXCIgKyBmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGg7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHModGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5UGF0aCkpIGFzXG5cdFx0XHR8IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PlxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRpZiAodGhpcy5jb250ZW50SWQpIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQuaWRdKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBmb3JtRWxlbWVudC5pZF0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRLZXkgPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5XSk7XG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHtmb3JtRWxlbWVudC52aXNpYmxlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRLZXk9XCIke2Zvcm1FbGVtZW50S2V5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZwbTpDdXN0b21GcmFnbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRLZXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJhZ21lbnROYW1lPVwiJHtmb3JtRWxlbWVudC50ZW1wbGF0ZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBmb3IgYSBzbG90IGNvbHVtbiBmb3IgdGhlIGdpdmVuIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgc2xvdCBjb2x1bW4uXG5cdCAqL1xuXHRnZXRTbG90Q29sdW1uKGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHhtbGA8c2xvdCBuYW1lPVwiJHtmb3JtRWxlbWVudC5rZXl9XCIgLz5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGRhdGEgZmllbGQgaXMgYSBtdWx0aXZhbHVlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhIGZpZWxkIGlzIGEgbXVsdGl2YWx1ZSBmaWVsZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0aXNNdWx0aVZhbHVlRGF0YUZpZWxkKGRhdGFGaWVsZDogRm9ybUVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRsZXQgaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBmYWxzZTtcblx0XHRpZiAoZGF0YUZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdmFsdWVQYXRoID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk/LlZhbHVlPy4kUGF0aDtcblx0XHRcdGlmICh2YWx1ZVBhdGgpIHtcblx0XHRcdFx0aXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBpc011bHRpVmFsdWVGaWVsZChcblx0XHRcdFx0XHRlbmhhbmNlRGF0YU1vZGVsUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYmluZGluZ0NvbnRleHQpLCB2YWx1ZVBhdGgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGFsbCBkYXRhIGZpZWxkcyBmb3IgYW5ub3RhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgZGF0YSBmaWVsZHMuXG5cdCAqL1xuXHRnZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKTogc3RyaW5nIHtcblx0XHRsZXQgcmV0dXJuU3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5jb25uZWN0ZWRGaWVsZHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzTXVsdGlWYWx1ZURhdGFGaWVsZChkYXRhRmllbGQpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuZmllbGRHcm91cEVsZW1lbnRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5maWVsZEdyb3VwRWxlbWVudHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRGaWVsZEdyb3VwRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldEZpZWxkRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDdXN0b21Gb3JtRWxlbWVudChkYXRhRmllbGQgYXMgQ3VzdG9tRm9ybUVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldFNsb3RDb2x1bW4oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHhtbGAke3JldHVyblN0cmluZ31gO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWpCQSxJQW1CcUJBLGtCQUFrQixJQUFBQyxJQUFBLEdBRHRDQyxtQkFBbUIsQ0FBQztJQUFFQyxJQUFJLEVBQUUsZUFBZTtJQUFFQyxTQUFTLEVBQUU7RUFBZ0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FFekVDLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdsQ0YsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJFLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsV0FBVztFQUM3RSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdETixjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHRFAsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJHLFFBQVEsRUFBRSxJQUFJO0lBQ2RELFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBTURSLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUU7RUFDUCxDQUFD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
847
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsIl9kZWMzIiwicmVxdWlyZWQiLCJpc1B1YmxpYyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJibG9ja0FnZ3JlZ2F0aW9uIiwiX2RlYzE3IiwiYmxvY2tFdmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja1RlbXBsYXQiLCJwcm9wcyIsImV4dGVybmFsQ29uZmlndXJhdGlvbiIsInNldHRpbmdzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZvcm1FbGVtZW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJvQ29udGV4dE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJtZXRhUGF0aCIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsIiRUeXBlIiwiTGFiZWwiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicGF0aCIsInRlcm0iLCJ2YWx1ZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJhbm5vdGF0aW9ucyIsImZpZWxkcyIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsInVuZGVmaW5lZCIsIm9Gb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiY29udGVudElkIiwidmlld0lkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwib3ZlcmZsb3dUb29sYmFySUQiLCJpZCIsIlN0YWJsZUlESGVscGVyIiwiZ2VuZXJhdGUiLCJkYXRhTW9kZWxPYmplY3QiLCJiaW5kaW5nU3RyaW5nIiwiRm9ybUhlbHBlciIsImdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24iLCJuYXZpZ2F0aW9uUGF0aCIsInhtbCIsImRlc2lnbnRpbWVTZXR0aW5ncyIsInZpc2libGUiLCJnZXRPYmplY3QiLCJoYXNVaUhpZGRlbkFubm90YXRpb24iLCJ0aXRsZSIsInRpdGxlTGV2ZWwiLCJhY3Rpb25zIiwiYXR0ciIsImdldFRlbXBsYXRlZEZvcm1FbGVtZW50cyIsImdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzIiwiZ2V0RGF0YVBvaW50VGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGgiLCJmaW5kIiwiZGYiLCJhbm5vdGF0aW9uUGF0aCIsImlkUHJlZml4IiwiaXNFZGl0YWJsZUhlYWRlciIsImluY2x1ZGVzIiwiZm9ybUVsZW1lbnRJZCIsImtleSIsImNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRlc2lnbnRpbWUiLCJVSSIsIkFkYXB0YXRpb25IaWRkZW4iLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdldFBhdGgiLCJkaXNwbGF5TW9kZSIsIm9uQ2hhbmdlIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zIiwiZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudHMiLCJzb3J0ZWRDb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHMiLCJ0ZW1wbGF0ZVN0cmluZyIsIm9yaWdpbmFsVGVtcGxhdGUiLCJwbGFjZWhvbGRlcnMiLCJBcnJheSIsImZyb20iLCJtYXRjaEFsbCIsIm1hcCIsIm0iLCJTdHJpbmciLCJ0cmltIiwiZmlsdGVyIiwicCIsImdldEZpZWxkSWRlbnRpZmllciIsImNmIiwib3JpZ2luYWxPYmplY3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpZWxkSWRzIiwidW5pcXVlUGxhY2Vob2xkZXJzIiwiU2V0IiwiaXNQZXJmZWN0TWF0Y2giLCJzaXplIiwiZXZlcnkiLCJoYXMiLCJtYXBCeUlkIiwiTWFwIiwicGgiLCJnZXQiLCJjb25uZWN0ZWRGaWVsZCIsIm1vZGVsIiwidGVtcE5hbWUiLCJiaW5kaW5nQ29udGV4dCIsImRlbGltaXRlciIsIkNvbW1vbkhlbHBlciIsImdldERlbGltaXRlciIsIm5vdExhc3RJbmRleENvbmRpdGlvbiIsImluZGV4T2YiLCJjb21wdXRlZElkUHJlZml4IiwiVmFsdWUiLCJjb21wdXRlZFZoSWRQcmVmaXgiLCJjb25uZWN0ZWRGaWVsZFBhdGgiLCJ2YWx1ZU9mIiwiY29ubmVjdGVkRmllbGRMYWJlbCIsIkNvbW1vbiIsImFyaWFMYWJlbElkIiwiYXJpYUxhYmVsVGV4dCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudCIsImZvcm1hdE9wdGlvbnMiLCJ0ZXh0TGluZXNFZGl0IiwidGV4dE1heExpbmVzIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsInRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXkiLCJmaWVsZEVkaXRTdHlsZSIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMiLCJ2aXNpYmxlRXhwcmVzc2lvbiIsImlzUGFydE9mUHJldmlldyIsImlzUmVxdWlyZWQiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJ0b1N0cmluZyIsImxhYmVsIiwiZ2V0TXVsdGlWYWx1ZUZpZWxkRm9ybUVsZW1lbnQiLCJtdWx0aVZhbHVlRmllbGRJZCIsInZoSWRQcmVmaXgiLCJnZXRGaWVsZEdyb3VwRm9ybUVsZW1lbnQiLCJmaWVsZEdyb3VwRWxlbWVudHMiLCJncm91cEVsZW1lbnQiLCJncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QiLCJpc0Jvb2xlYW5GaWVsZEdyb3VwIiwiZmllbGRHcm91cEVsZW1lbnQiLCJmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCIsImxhYmVsSUQiLCJmaWVsZEdyb3VwSG9yaXpvbnRhbExheW91dCIsImdldEZpZWxkRm9ybUVsZW1lbnQiLCJyZWFkT25seSIsInNlbWFudGljT2JqZWN0IiwicGF0dGVybiIsInVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW4iLCJnZXRDdXN0b21Gb3JtRWxlbWVudCIsInByb3BlcnR5UGF0aCIsImZvcm1FbGVtZW50S2V5IiwidGVtcGxhdGUiLCJnZXRTbG90Q29sdW1uIiwiaXNNdWx0aVZhbHVlRGF0YUZpZWxkIiwiZGF0YUZpZWxkIiwiaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24iLCJ2YWx1ZVBhdGgiLCIkUGF0aCIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJyZXR1cm5TdHJpbmciLCJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvcm1Db250YWluZXIuYmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29ubmVjdGVkRmllbGRzVHlwZSxcblx0Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludFR5cGUsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRibG9ja0FnZ3JlZ2F0aW9uLFxuXHRibG9ja0F0dHJpYnV0ZSxcblx0YmxvY2tFdmVudCxcblx0ZGVmaW5lQnVpbGRpbmdCbG9ja1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrU3VwcG9ydFwiO1xuaW1wb3J0IHsgeG1sLCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkZvcm1FbGVtZW50LCBDdXN0b21Gb3JtRWxlbWVudCwgRm9ybUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSURIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkLCBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcIi4uL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgRm9ybUhlbHBlciBmcm9tIFwiLi9Gb3JtSGVscGVyXCI7XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRm9ybUNvbnRhaW5lciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgT0RhdGEgVjQgbWV0YWRhdGEuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGb3JtQ29udGFpbmVyXG4gKiBpZD1cIlNvbWVJZFwiXG4gKiBlbnRpdHlTZXQ9XCJ7ZW50aXR5U2V0Pn1cIlxuICogZGF0YUZpZWxkQ29sbGVjdGlvbiA9XCJ7ZGF0YUZpZWxkQ29sbGVjdGlvbj59XCJcbiAqIHRpdGxlPVwic29tZVRpdGxlXCJcbiAqIG5hdmlnYXRpb25QYXRoPVwie1RvU3VwcGxpZXJ9XCJcbiAqIHZpc2libGU9dHJ1ZVxuICogb25DaGFuZ2U9XCIuaGFuZGxlcnMub25GaWVsZFZhbHVlQ2hhbmdlXCJcbiAqIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBwcml2YXRlXG4gKi9cbkBkZWZpbmVCdWlsZGluZ0Jsb2NrKHsgbmFtZTogXCJGb3JtQ29udGFpbmVyXCIsIG5hbWVzcGFjZTogXCJzYXAuZmUubWFjcm9zXCIgfSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1Db250YWluZXJCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSB7XG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQ/OiBzdHJpbmc7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiXVxuXHR9KVxuXHRjb250ZXh0UGF0aCE6IENvbnRleHQ7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCJcblx0fSlcblx0ZW50aXR5U2V0PzogQ29udGV4dDtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIixcblx0XHRpc1B1YmxpYzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRtZXRhUGF0aCE6IENvbnRleHQ7XG5cblx0LyoqXG5cdCAqIE1ldGFkYXRhIHBhdGggdG8gdGhlIGRhdGFGaWVsZENvbGxlY3Rpb25cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJhcnJheVwiXG5cdH0pXG5cdGRhdGFGaWVsZENvbGxlY3Rpb24/OiBGb3JtRWxlbWVudFtdO1xuXG5cdC8qKlxuXHQgKiBDb250cm9sIHdoZXRoZXIgdGhlIGZvcm0gaXMgaW4gZGlzcGxheU1vZGUgb3Igbm90XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGRpc3BsYXlNb2RlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFRpdGxlIG9mIHRoZSBmb3JtIGNvbnRhaW5lclxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHR0aXRsZT86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgXCJhcmlhLWxldmVsXCIgb2YgdGhlIGZvcm0gdGl0bGUsIHRpdGxlcyBvZiBpbnRlcm5hbGx5IHVzZWQgZm9ybSBjb250YWluZXJzIGFyZSBuZXN0ZWQgc3Vic2VxdWVudGx5XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInNhcC51aS5jb3JlLlRpdGxlTGV2ZWxcIiwgaXNQdWJsaWM6IHRydWUgfSlcblx0dGl0bGVMZXZlbCA9IFwiQXV0b1wiO1xuXG5cdC8qKlxuXHQgKiBCaW5kaW5nIHRoZSBmb3JtIGNvbnRhaW5lciB1c2luZyBhIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRuYXZpZ2F0aW9uUGF0aD86IHN0cmluZztcblxuXHQvKipcblx0ICogQmluZGluZyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZm9ybSBjb250YWluZXIgdXNpbmcgYW4gZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dmlzaWJsZT86IHN0cmluZztcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgVUkgaGlkZGVuIGFubm90YXRpb24gaXMgcHJlc2VudCBvciBub3Rcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc1VpSGlkZGVuQW5ub3RhdGlvbj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEZsZXggZGVzaWdudGltZSBzZXR0aW5ncyB0byBiZSBhcHBsaWVkXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGRlc2lnbnRpbWVTZXR0aW5ncyA9IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1Db250YWluZXIuZGVzaWdudGltZVwiO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcblxuXHRAYmxvY2tBZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1FbGVtZW50XCIgfSlcblx0Zm9ybUVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDb25maWd1cmFibGVPYmplY3Q+ID0ge307XG5cblx0Ly8gSnVzdCBwcm94aWVkIGRvd24gdG8gdGhlIEZpZWxkIG1heSBuZWVkIHRvIHNlZSBpZiBuZWVkZWQgb3Igbm90XG5cdEBibG9ja0V2ZW50KClcblx0b25DaGFuZ2U/OiBzdHJpbmc7XG5cblx0Y29udGVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IFByb3BlcnRpZXNPZjxGb3JtQ29udGFpbmVyQmxvY2s+LCBleHRlcm5hbENvbmZpZ3VyYXRpb246IHVua25vd24sIHNldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuZW50aXR5U2V0ID0gdGhpcy5jb250ZXh0UGF0aCE7XG5cdFx0aWYgKHRoaXMuZm9ybUVsZW1lbnRzICYmIE9iamVjdC5rZXlzKHRoaXMuZm9ybUVsZW1lbnRzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UmVmZXJlbmNlRmFjZXQ+KHRoaXMubWV0YVBhdGgsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdFx0Y29uc3QgbUV4dHJhU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRsZXQgb0ZhY2V0RGVmaW5pdGlvbiA9IG9Db250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHQvLyBXcmFwIHRoZSBmYWNldCBpbiBhIGZha2UgRmFjZXQgYW5ub3RhdGlvblxuXHRcdFx0b0ZhY2V0RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0JFR5cGU6IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0LFxuXHRcdFx0XHRMYWJlbDogb0ZhY2V0RGVmaW5pdGlvbj8uTGFiZWwsXG5cdFx0XHRcdFRhcmdldDoge1xuXHRcdFx0XHRcdCR0YXJnZXQ6IG9GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBvRmFjZXREZWZpbml0aW9uPy5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0XHR0ZXJtOiBcIlwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0XHR2YWx1ZTogZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvQ29udGV4dE9iamVjdFBhdGgpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFubm90YXRpb25zOiB7fSxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBvRmFjZXREZWZpbml0aW9uPy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdH0gYXMgdW5rbm93biBhcyBSZWZlcmVuY2VGYWNldDtcblx0XHRcdG1FeHRyYVNldHRpbmdzW29GYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlXSA9IHsgZmllbGRzOiB0aGlzLmZvcm1FbGVtZW50cyB9O1xuXHRcdFx0Y29uc3Qgb0NvbnZlcnRlckNvbnRleHQgPSB0aGlzLmdldENvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdG9Db250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0Lyp0aGlzLmNvbnRleHRQYXRoKi8gdW5kZWZpbmVkLFxuXHRcdFx0XHRzZXR0aW5ncyxcblx0XHRcdFx0bUV4dHJhU2V0dGluZ3Ncblx0XHRcdCk7XG5cdFx0XHRjb25zdCBvRm9ybURlZmluaXRpb24gPSBjcmVhdGVGb3JtRGVmaW5pdGlvbihvRmFjZXREZWZpbml0aW9uLCBcInRydWVcIiwgb0NvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0XHR0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gPSBvRm9ybURlZmluaXRpb24uZm9ybUNvbnRhaW5lcnNbMF0uZm9ybUVsZW1lbnRzO1xuXHRcdH1cblx0XHQvLyBXZSBuZWVkIHRoZSB2aWV3IGlkIGZvciB0aGUgZm9ybSBlbGVtZW50cyBzdGFibGUgaWRzIGdlbmVyYXRpb25cblx0XHR0aGlzLmNvbnRlbnRJZCA9IHNldHRpbmdzLnZpZXdJZCBhcyBzdHJpbmc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBGb3JtQ29udGFpbmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHRlbXBsYXRlIHN0cmluZy5cblx0ICovXG5cdHB1YmxpYyBnZXRUZW1wbGF0ZSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG92ZXJmbG93VG9vbGJhcklEID0gdGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1BY3Rpb25zVG9vbGJhclwiXSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRoaXMuY29udGV4dFBhdGgsIHRoaXMubWV0YVBhdGgpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGRhdGFNb2RlbE9iamVjdCk7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdDxmOkZvcm1Db250YWluZXJcblx0XHRcdHhtbG5zPVwic2FwLm1cIlxuXHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHR4bWxuczptYWNybz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0eG1sbnM6bWFjcm9Gb3JtPVwic2FwLmZlLm1hY3Jvcy5mb3JtXCJcblx0XHRcdHhtbG5zOmludGVybmFsTWFjcm89XCJzYXAuZmUubWFjcm9zLmludGVybmFsXCJcblx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHR4bWxuczpjb250cm9scz1cInNhcC5mZS5tYWNyb3MuY29udHJvbHNcIlxuXHRcdFx0eG1sbnM6ZHQ9XCJzYXAudWkuZHRcIlxuXHRcdFx0eG1sbnM6bWFjcm9kYXRhPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiXG5cdFx0XHR4bWxuczpmcG09XCJzYXAuZmUubWFjcm9zLmZwbVwiXG5cdFx0XHR4bWxuczp0ZW1wbGF0ZT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS50ZW1wbGF0ZS8xXCJcblx0XHRcdHRlbXBsYXRlOnJlcXVpcmU9XCJ7XG5cdFx0XHRcdE1PREVMOiAnc2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXInLFxuXHRcdFx0XHRJRDogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXInLFxuXHRcdFx0XHRDT01NT046ICdzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlcicsXG5cdFx0XHRcdEZPUk06ICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUhlbHBlcicsXG5cdFx0XHRcdFVJOiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnMnLFxuXHRcdFx0XHREYXRhRmllbGQ6ICdzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnMnLFxuXHRcdFx0XHRGaWVsZFRlbXBsYXRpbmc6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZycsXG5cdFx0XHRcdFByb3BlcnR5OiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnMnLFxuXHRcdFx0XHRGSUVMRDogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXInLFxuXHRcdFx0XHRNQUNSTzogJ3NhcC9mZS9tYWNyb3MvTWFjcm9UZW1wbGF0aW5nJ1xuXHRcdFx0fVwiXG5cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntGb3JtQ29udGFpbmVyUnVudGltZTogJ3NhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQ29udGFpbmVyQVBJJ31cIlxuXHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7dGhpcy5kZXNpZ250aW1lU2V0dGluZ3N9XCJcblx0XHRcdGlkPVwiJHt0aGlzLmlkIHx8IHVuZGVmaW5lZH1cIlxuXHRcdFx0dmlzaWJsZT1cIiR7dGhpcy52aXNpYmxlfVwiXG5cdFx0XHRtYWNyb2RhdGE6bmF2aWdhdGlvblBhdGg9XCIke3RoaXMubmF2aWdhdGlvblBhdGh9XCJcblx0XHRcdG1hY3JvZGF0YTpldE5hbWU9XCIke3RoaXMuY29udGV4dFBhdGguZ2V0T2JqZWN0KFwiLi9Ac2FwdWkubmFtZVwiKX1cIlxuXHRcdFx0bWFjcm9kYXRhOlVpSGlkZGVuUHJlc2VudD1cIiR7dGhpcy5oYXNVaUhpZGRlbkFubm90YXRpb259XCJcblx0XHQ+XG5cblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiJHt0aGlzLnRpdGxlfVwiPlxuXHRcdFx0XHQ8Zjp0aXRsZT5cblx0XHRcdFx0XHQ8Y29yZTpUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdFx0PC9mOnRpdGxlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5cblxuXHRcdFx0PHRlbXBsYXRlOmlmIHRlc3Q9XCIke3RoaXMuYWN0aW9uc31cIj5cblx0XHRcdFx0PHRlbXBsYXRlOnRoZW4+XG5cdFx0XHRcdFx0PGY6dG9vbGJhcj5cblx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJcblx0XHRcdFx0XHRcdFx0aWQ9XCIke292ZXJmbG93VG9vbGJhcklEfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PFRpdGxlIGxldmVsPVwiJHt0aGlzLnRpdGxlTGV2ZWx9XCIgdGV4dD1cIiR7dGhpcy50aXRsZX1cIiAvPlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHQ8dGVtcGxhdGU6cmVwZWF0IGxpc3Q9XCJ7YWN0aW9ucz59XCIgdmFyPVwiYWN0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BY3Rpb25CdXR0b25zXCIgdHlwZT1cIlhNTFwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvdGVtcGxhdGU6cmVwZWF0PlxuXHRcdFx0XHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHRcdFx0PC9mOnRvb2xiYXI+XG5cdFx0XHRcdDwvdGVtcGxhdGU6dGhlbj5cblx0XHRcdDwvdGVtcGxhdGU6aWY+XG5cblx0XHRcdDxmOmRlcGVuZGVudHM+XG5cdFx0XHRcdDxtYWNyb0Zvcm06Rm9ybUNvbnRhaW5lckFQSSBmb3JtQ29udGFpbmVySWQ9XCIke3RoaXMuaWR9XCIgc2hvd0RldGFpbHM9XCJ7aW50ZXJuYWw+c2hvd0RldGFpbHN9XCIgLz5cblx0XHRcdDwvZjpkZXBlbmRlbnRzPlxuXG5cdFx0XHQ8Zjpmb3JtRWxlbWVudHM+XG5cdFx0XHRcdCR7dGhpcy5nZXRUZW1wbGF0ZWRGb3JtRWxlbWVudHMoKX1cblx0XHRcdDwvZjpmb3JtRWxlbWVudHM+XG5cblx0XHQ8L2Y6Rm9ybUNvbnRhaW5lcj5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlZCBmb3JtIGVsZW1lbnRzLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGZvcm0gZWxlbWVudHMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VGVtcGxhdGVkRm9ybUVsZW1lbnRzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJkYXRhRmllbGRDb2xsZWN0aW9uPlwiIHZhcj1cImZvcm1FbGVtZW50c1wiPlxuXHRcdFx0XHQke3RoaXMuZ2V0SW5uZXJUZW1wbGF0ZWRGb3JtRWxlbWVudHMoKX1cblx0XHRcdDwvdGVtcGxhdGU6d2l0aD5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGlubmVyIHRlbXBsYXRlZCBmb3JtIGVsZW1lbnRzLCBpbmNsdWRpbmcgRGF0YVBvaW50IGFuZCBDb250YWN0IHRlbXBsYXRlcy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBpbm5lciBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHVibGljIGdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzKCk6IHN0cmluZyB7XG5cdFx0bGV0IGdldERhdGFQb2ludFRlbXBsYXRlID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gJiYgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgYW4gYW5ub3RhdGlvblBhdGhcblx0XHRcdGNvbnN0IGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aCA9IHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbi5maW5kKChkZikgPT4gISFkZi5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRsZXQgaWRQcmVmaXggPSBcIlwiO1xuXHRcdFx0Y29uc3QgaXNFZGl0YWJsZUhlYWRlciA9IHRoaXMuaWQ/LmluY2x1ZGVzKFwiSGVhZGVyRmFjZXQ6OkZvcm1Db250YWluZXJcIikgPT09IHRydWU7XG5cdFx0XHRsZXQgZm9ybUVsZW1lbnRJZCA9IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0XHRpZiAoaXNFZGl0YWJsZUhlYWRlcikge1xuXHRcdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmlkfTo6Rm9ybUVsZW1lbnRgO1xuXHRcdFx0XHRcdGlkUHJlZml4ID0gYCR7dGhpcy5pZH06OkZvcm1FbGVtZW50YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uWzBdLmtleV0pfWA7XG5cdFx0XHRcdFx0aWRQcmVmaXggPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0ua2V5XSl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aD8uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aD8uYW5ub3RhdGlvblBhdGggfHwgXCJcIilcblx0XHRcdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QpO1xuXHRcdFx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRcdFx0Z2V0RGF0YVBvaW50VGVtcGxhdGUgPSB4bWxgXG5cdFx0XHRcdFx0PHRlbXBsYXRlOndpdGggcGF0aD1cImZvcm1FbGVtZW50cz4wL2Fubm90YXRpb25QYXRoXCIgdmFyPVwiZGF0YVBvaW50XCI+XG5cdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdGxhYmVsPVwie2RhdGFQb2ludD5AQEZJRUxELmNvbXB1dGVMYWJlbFRleHR9XCJcblx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7Z2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pil9XCJcblx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0PG1hY3JvOkZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRpZFByZWZpeD1cIiR7aWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdHZoSWRQcmVmaXg9XCIke3RoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSkgOiBcIlwifVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5lbnRpdHlTZXQ/LmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCIke3RoaXMuZGF0YUZpZWxkQ29sbGVjdGlvblswXS5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWRpdE1vZGU9XCIke3RoaXMuZGlzcGxheU1vZGUgPT09IHRydWUgPyBcIkRpc3BsYXlcIiA6IHVuZGVmaW5lZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Zm9ybWF0T3B0aW9ucyB0ZXh0QWxpZ25Nb2RlPVwiRm9ybVwiIHNob3dFbXB0eUluZGljYXRvcj1cInRydWVcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0PC90ZW1wbGF0ZTp3aXRoPlxuXG5cdFx0XHRgO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGdldENvbnRhY3RUZW1wbGF0ZSA9IHhtbGBcblx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cIm1ldGFQYXRoXCI+XG5cdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIns9IFxcJHttZXRhUGF0aD4uL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5BZGFwdGF0aW9uSGlkZGVufSA/ICdub3QtYWRhcHRhYmxlLXRyZWUnIDogICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZScgfVwiXG5cdFx0XHRcdFx0YmluZGluZz1cIns9IEZPUk0uZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbihcXCR7dGhpcy5uYXZpZ2F0aW9uUGF0aH0sXFwke2NvbnRleHRQYXRoPkBAVUkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aH0pfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0PGY6bGFiZWw+XG5cdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHR0ZXh0PVwie21ldGFQYXRoPmZuLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbH1cIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT1cIns9IEZpZWxkVGVtcGxhdGluZy5nZXRWaXNpYmxlRXhwcmVzc2lvbihcXCR7ZGF0YUZpZWxkPkBAVUkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aH0pfVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdDxsYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0PGY6Q29sdW1uRWxlbWVudERhdGEgY2VsbHNMYXJnZT1cIjEyXCIgLz5cblx0XHRcdFx0XHQ8L2xheW91dERhdGE+XG5cdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHQ8bWFjcm86Q29udGFjdFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cInttZXRhUGF0aD5AQENPTU1PTi5nZXRNZXRhUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwie2NvbnRleHRQYXRoPkBAQ09NTU9OLmdldE1ldGFQYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdDwvdGVtcGxhdGU6d2l0aD5gO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiez0gXFwke2Zvcm1FbGVtZW50cz4wL2Fubm90YXRpb25QYXRofS5pbmRleE9mKCdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnQnKSA+IC0xIH1cIj5cblx0XHRcdFx0PHRlbXBsYXRlOnRoZW4+XG5cdFx0XHRcdFx0JHtnZXREYXRhUG9pbnRUZW1wbGF0ZX1cblx0XHRcdFx0PC90ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHQ8dGVtcGxhdGU6ZWxzZWlmXG5cdFx0XHRcdFx0dGVzdD1cIns9IFxcJHtmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aH0uaW5kZXhPZignY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0JykgPiAtMSB9XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdCR7Z2V0Q29udGFjdFRlbXBsYXRlfVxuXHRcdFx0XHQ8L3RlbXBsYXRlOmVsc2VpZj5cblx0XHRcdFx0PHRlbXBsYXRlOmVsc2U+XG5cdFx0XHRcdFx0JHt0aGlzLmdldERhdGFGaWVsZHNGb3JBbm5vdGF0aW9ucygpfVxuXHRcdFx0XHQ8L3RlbXBsYXRlOmVsc2U+XG5cdFx0XHQ8L3RlbXBsYXRlOmlmPmA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgYSBmb3JtIGVsZW1lbnQgd2l0aCBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjb25uZWN0ZWQgZmllbGRzIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldENvbm5lY3RlZEZpZWxkc0Zvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnRzID0gXCJcIjtcblxuXHRcdC8vIENyZWF0ZSBhIHNvcnRlZCBjb3B5IG9mIHRoZSBjb25uZWN0ZWQgZmllbGRzIGJhc2VkIG9uIHRoZSBwbGFjZWhvbGRlciBvcmRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHRcdC8vIFRoZSB0ZW1wbGF0ZSBzdHJpbmcgaXMgZXhwZWN0ZWQgdG8gbG9vayBsaWtlIFwie0ZpZWxkQX0gLyB7RmllbGRCfVwiIGV0Yy4gV2UgZXh0cmFjdCB0aGUgcGxhY2Vob2xkZXJcblx0XHQvLyBzZXF1ZW5jZSBhbmQgc29ydCB0aGUgY29ubmVjdGVkIGZpZWxkcyBhY2NvcmRpbmdseSAoZmFsbGluZyBiYWNrIHRvIG9yaWdpbmFsIG9yZGVyIGZvciB1bm1hdGNoZWQgZmllbGRzKS5cblx0XHRsZXQgc29ydGVkQ29ubmVjdGVkRmllbGRzID0gZm9ybUVsZW1lbnQuY29ubmVjdGVkRmllbGRzID8gWy4uLmZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkc10gOiBbXTtcblx0XHRpZiAoc29ydGVkQ29ubmVjdGVkRmllbGRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGNvbnN0IHRlbXBsYXRlU3RyaW5nID0gc29ydGVkQ29ubmVjdGVkRmllbGRzWzBdLm9yaWdpbmFsVGVtcGxhdGUgfHwgXCJcIjtcblx0XHRcdC8vIEV4dHJhY3QgcGxhY2Vob2xkZXJzIGluIHRoZSBzZXF1ZW5jZSBkZWZpbmVkIGJ5IHRoZSB0ZW1wbGF0ZSAoZS5nLiBcIntGaWVsZEF9IC8ge0ZpZWxkQn1cIilcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVycyA9IEFycmF5LmZyb20odGVtcGxhdGVTdHJpbmcubWF0Y2hBbGwoL1xceyhbXn1dKylcXH0vZykpXG5cdFx0XHRcdC5tYXAoKG0pID0+IFN0cmluZyhtWzFdKS50cmltKCkpXG5cdFx0XHRcdC5maWx0ZXIoKHApID0+IHAubGVuZ3RoID4gMCk7XG5cblx0XHRcdC8vIEhlbHBlciB0byBkZXJpdmUgdGhlIGlkZW50aWZpZXIgZnJvbSB0aGUgY29ubmVjdGVkIGZpZWxkIChsYXN0IHNlZ21lbnQgb2YgZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdFx0Y29uc3QgZ2V0RmllbGRJZGVudGlmaWVyID0gKGNmOiAodHlwZW9mIHNvcnRlZENvbm5lY3RlZEZpZWxkcylbbnVtYmVyXSk6IHN0cmluZyA9PiB7XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsT2JqZWN0ID0gY2Yub3JpZ2luYWxPYmplY3Q7XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBvcmlnaW5hbE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKG9yaWdpbmFsT2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKVxuXHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGZpZWxkSWRzID0gc29ydGVkQ29ubmVjdGVkRmllbGRzLm1hcChnZXRGaWVsZElkZW50aWZpZXIpO1xuXHRcdFx0Y29uc3QgdW5pcXVlUGxhY2Vob2xkZXJzID0gbmV3IFNldChwbGFjZWhvbGRlcnMpO1xuXG5cdFx0XHQvLyBXZSBvbmx5IHJlb3JkZXIgaWYgdGhlIHRlbXBsYXRlIGlzIHBlcmZlY3RseSBhbm5vdGF0ZWQ6XG5cdFx0XHQvLyAxLiBTYW1lIG51bWJlciBvZiBwbGFjZWhvbGRlcnMgYXMgY29ubmVjdGVkIGZpZWxkc1xuXHRcdFx0Ly8gMi4gQWxsIHBsYWNlaG9sZGVycyBhcmUgdW5pcXVlXG5cdFx0XHQvLyAzLiBFdmVyeSBjb25uZWN0ZWQgZmllbGQgaWQgaXMgcmVmZXJlbmNlZCBleGFjdGx5IG9uY2Vcblx0XHRcdGNvbnN0IGlzUGVyZmVjdE1hdGNoID1cblx0XHRcdFx0cGxhY2Vob2xkZXJzLmxlbmd0aCA9PT0gc29ydGVkQ29ubmVjdGVkRmllbGRzLmxlbmd0aCAmJlxuXHRcdFx0XHR1bmlxdWVQbGFjZWhvbGRlcnMuc2l6ZSA9PT0gcGxhY2Vob2xkZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRmaWVsZElkcy5ldmVyeSgoaWQpID0+IHVuaXF1ZVBsYWNlaG9sZGVycy5oYXMoaWQpKTtcblxuXHRcdFx0Ly8gUmV2aWV3IGZlZWRiYWNrOiBEbyBOT1QgXCJmaXhcIiBiYWRseSBhbm5vdGF0ZWQgY29ubmVjdGVkIGZpZWxkcy5cblx0XHRcdC8vIElmIHRoZSBhbm5vdGF0aW9uIGlzIG5vdCBwZXJmZWN0LCB3ZSBrZWVwIHRoZSBvcmlnaW5hbCBvcmRlci5cblx0XHRcdGlmIChpc1BlcmZlY3RNYXRjaCkge1xuXHRcdFx0XHRjb25zdCBtYXBCeUlkID0gbmV3IE1hcChzb3J0ZWRDb25uZWN0ZWRGaWVsZHMubWFwKChjZikgPT4gW2dldEZpZWxkSWRlbnRpZmllcihjZiksIGNmXSkpO1xuXHRcdFx0XHRzb3J0ZWRDb25uZWN0ZWRGaWVsZHMgPSBwbGFjZWhvbGRlcnMubWFwKChwaCkgPT4gbWFwQnlJZC5nZXQocGgpISk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb25uZWN0ZWRGaWVsZCBvZiBzb3J0ZWRDb25uZWN0ZWRGaWVsZHMpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdGVtcE5hbWUgPSBjb25uZWN0ZWRGaWVsZC5vcmlnaW5hbE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgcGF0aCA9IHRlbXBOYW1lPy5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoICsgXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCIgKyBwYXRoKTtcblx0XHRcdGNvbnN0IGRlbGltaXRlciA9IENvbW1vbkhlbHBlci5nZXREZWxpbWl0ZXIoY29ubmVjdGVkRmllbGQub3JpZ2luYWxUZW1wbGF0ZSA/PyBcIlwiKTtcblx0XHRcdGNvbnN0IG5vdExhc3RJbmRleENvbmRpdGlvbiA9XG5cdFx0XHRcdHNvcnRlZENvbm5lY3RlZEZpZWxkcy5pbmRleE9mKGNvbm5lY3RlZEZpZWxkKSAhPT0gc29ydGVkQ29ubmVjdGVkRmllbGRzLmxlbmd0aCAtIDFcblx0XHRcdFx0XHQ/IHhtbGA8VGV4dFxudGV4dD1cIiR7ZGVsaW1pdGVyfVwiXG5jbGFzcz1cInNhcFVpU21hbGxNYXJnaW5CZWdpbkVuZFwiXG53aWR0aD1cIjEwMCVcIlxuLz5gXG5cdFx0XHRcdFx0OiBcIlwiO1xuXG5cdFx0XHRjb25zdCBjb21wdXRlZElkUHJlZml4ID0gdGhpcy5pZFxuXHRcdFx0XHQ/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFtcblx0XHRcdFx0XHRcdHRoaXMuaWQsXG5cdFx0XHRcdFx0XHRcIlNlbWFudGljRm9ybUVsZW1lbnRcIixcblx0XHRcdFx0XHRcdGZvcm1FbGVtZW50LmtleSxcblx0XHRcdFx0XHRcdChjb25uZWN0ZWRGaWVsZC5vcmlnaW5hbE9iamVjdCBhcyBEYXRhRmllbGQpPy5WYWx1ZS5wYXRoXG5cdFx0XHRcdCAgXSlcblx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0Y29uc3QgY29tcHV0ZWRWaElkUHJlZml4ID0gdGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBmb3JtRWxlbWVudC5rZXksIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIjtcblxuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSBsYWJlbCBvbiB0aGUgY29ubmVjdGVkIGZpZWxkLCB3ZSBjcmVhdGUgYW4gaW52aXNpYmxlIHRleHQgZm9yIGFyaWEtbGFiZWxsZWRieSBmb3IgcHJvcGVyIHNjcmVlbiByZWFkaW5nXG5cdFx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZFBhdGggPSAoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg/LnZhbHVlT2YoKTtcblx0XHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkTGFiZWwgPSAoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCk7XG5cdFx0XHRsZXQgYXJpYUxhYmVsSWQgPSBcIlwiO1xuXHRcdFx0bGV0IGFyaWFMYWJlbFRleHQgPSBcIlwiO1xuXHRcdFx0aWYgKHRoaXMuaWQgJiYgY29ubmVjdGVkRmllbGRQYXRoICYmIGNvbm5lY3RlZEZpZWxkTGFiZWwpIHtcblx0XHRcdFx0YXJpYUxhYmVsSWQgPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJBcmlhVGV4dFwiLCBmb3JtRWxlbWVudC5rZXksIGNvbm5lY3RlZEZpZWxkUGF0aF0pO1xuXHRcdFx0XHRhcmlhTGFiZWxUZXh0ID0geG1sYFxuXHRcdFx0XHRcdDxjb3JlOkludmlzaWJsZVRleHRcblx0XHRcdFx0XHRcdHRleHQ9XCIke2Nvbm5lY3RlZEZpZWxkTGFiZWx9XCJcblx0XHRcdFx0XHRcdGlkPVwiJHthcmlhTGFiZWxJZH1cIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdGA7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSBcIlwiO1xuXHRcdFx0Y29ubmVjdGVkRmllbGRFbGVtZW50ID0geG1sYFxuICAgICAgICAgICAgICAgICR7YXJpYUxhYmVsVGV4dH1cblx0XHRcdFx0PG1hY3JvOkZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG4gICAgICAgICAgICAgICAgICAgIHZoSWRQcmVmaXg9XCIke2NvbXB1dGVkVmhJZFByZWZpeH1cIlxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGF0aD1cIiR7dGhpcy5lbnRpdHlTZXQ/LmdldFBhdGgoKX1cIlxuICAgICAgICAgICAgICAgICAgICBtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PVwiJHtcblx0XHRcdFx0XHRcdHRoaXMuaWQgPyBbU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pLCBhcmlhTGFiZWxJZF0gOiBcIlwiXG5cdFx0XHRcdFx0fVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExpbmVzRWRpdD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1heExpbmVzPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXN9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4TGVuZ3RoPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RofVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25Nb2RlPVwiRm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRWRpdFN0eWxlPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5maWVsZEVkaXRTdHlsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8ucmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dH1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bWFjcm86bGF5b3V0RGF0YT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIns9ICV7dWk+L2lzRWRpdGFibGV9ID8gMSA6IDB9XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYWNybzpsYXlvdXREYXRhPlxuICAgICAgICAgICAgICAgIDwvbWFjcm86RmllbGQ+XG4gICAgICAgICAgICAgICAgJHtub3RMYXN0SW5kZXhDb25kaXRpb259XG4gICAgICAgICAgICAgICAgYDtcblxuXHRcdFx0Y29ubmVjdGVkRmllbGRFbGVtZW50cyArPSBjb25uZWN0ZWRGaWVsZEVsZW1lbnQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRpZiAodGhpcy5jb250ZW50SWQpIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB2aXNpYmxlRXhwcmVzc2lvbiA9IGZvcm1FbGVtZW50LmlzUGFydE9mUHJldmlld1xuXHRcdFx0PyBnZXRWaXNpYmxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5PlxuXHRcdFx0ICApXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMpO1xuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IChkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHM/LnRhcmdldE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXRcblx0XHRcdD8uJHRhcmdldCBhcyBBbm5vdGF0aW9uVGVybTxDb25uZWN0ZWRGaWVsZHNUeXBlVHlwZXM+O1xuXG5cdFx0Y29uc3QgZGVzaWdudGltZSA9IGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcz8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cdFx0Y29uc3QgaXNSZXF1aXJlZCA9IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZChcblx0XHRcdGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEFubm90YXRpb25QYXRoPENvbm5lY3RlZEZpZWxkc1R5cGU+PlxuXHRcdCk/LnRvU3RyaW5nKCk7XG5cblx0XHRyZXR1cm4geG1sYFxuICAgICAgICAgICAgPGY6Rm9ybUVsZW1lbnRcbiAgICAgICAgICAgICAgICB4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcbiAgICAgICAgICAgICAgICBkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG4gICAgICAgICAgICAgICAgaWQ9XCIke2Zvcm1FbGVtZW50SWR9XCJcbiAgICAgICAgICAgICAgICB2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuICAgICAgICAgICAgICAgICR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZjpsYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCIke3RhcmdldE9iamVjdD8uTGFiZWwgPz8gZm9ybUVsZW1lbnQubGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCIke3RoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJTZW1hbnRpY0Zvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSkgOiBcIlwifVwiXG5cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Y6bGFiZWw+XG5cdFx0XHRcdDxmOmZpZWxkcz5cbiAgICAgICAgICAgICAgICAgICAgPGNvbnRyb2xzOkZpZWxkV3JhcHBlciByZXF1aXJlZD1cIiR7aXNSZXF1aXJlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxIQm94IHdyYXA9XCJXcmFwXCI+XG5cdFx0XHRcdFx0XHRcdCR7Y29ubmVjdGVkRmllbGRFbGVtZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvSEJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9jb250cm9sczpGaWVsZFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgPC9mOmZpZWxkcz5cbiAgICAgICAgICAgIDwvZjpGb3JtRWxlbWVudD5cbiAgICAgICAgYDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhIGZvcm0gZWxlbWVudCByZXByZXNlbnRpbmcgYSBtdWx0aXZhbHVlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBtdWx0aS12YWx1ZSBmaWVsZCBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRNdWx0aVZhbHVlRmllbGRGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRJZCA9IHRoaXMuaWQgPyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gIDogXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCBtdWx0aVZhbHVlRmllbGRJZCA9IHRoaXMuaWRcblx0XHRcdD8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5LCBcIk11bHRpVmFsdWVGaWVsZFwiXSl9YFxuXHRcdFx0OiBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHZoSWRQcmVmaXggPSB0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIjtcblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOm1hY3Jvcz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR4bWxuczptdWx0aXZhbHVlZmllbGQ9XCJzYXAuZmUubWFjcm9zLm11bHRpdmFsdWVmaWVsZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2Zvcm1FbGVtZW50SWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9XCIke2Zvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke3Zpc2libGVFeHByZXNzaW9ufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb3M6TXVsdGlWYWx1ZUZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7bXVsdGlWYWx1ZUZpZWxkSWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZoSWRQcmVmaXg9XCIke3ZoSWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmVudGl0eVNldD8uZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7Zm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm9zOmZvcm1hdE9wdGlvbnM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtdWx0aXZhbHVlZmllbGQ6Rm9ybWF0T3B0aW9ucyBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm9zOmZvcm1hdE9wdGlvbnM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb3M6TXVsdGlWYWx1ZUZpZWxkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PmA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgZm9ybSBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBjaGVja2JveCBncm91cC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY2hlY2tib3ggZ3JvdXAgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdGdldEZpZWxkR3JvdXBGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgZmllbGRHcm91cEVsZW1lbnRzID0gXCJcIjtcblx0XHQvL1dlIHRlbXBsYXRlIGVhY2ggZWxlbWVudCBvZiB0aGUgY2hlY2tib3ggZ3JvdXBcblx0XHRmb3IgKGNvbnN0IGdyb3VwRWxlbWVudCBvZiBmb3JtRWxlbWVudC5maWVsZEdyb3VwRWxlbWVudHMhKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHRlbXBOYW1lID0gZ3JvdXBFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IHBhdGggPSB0ZW1wTmFtZT8uc3Vic3RyaW5nKHRlbXBOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCArIFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiICsgcGF0aCk7XG5cdFx0XHRjb25zdCBncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGU+KGJpbmRpbmdDb250ZXh0KTtcblx0XHRcdGNvbnN0IGNvbXB1dGVkSWRQcmVmaXggPSB0aGlzLmlkXG5cdFx0XHRcdD8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW1xuXHRcdFx0XHRcdFx0dGhpcy5pZCxcblx0XHRcdFx0XHRcdFwiQ2hlY2tCb3hHcm91cFwiLFxuXHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnQua2V5LFxuXHRcdFx0XHRcdFx0KGdyb3VwRWxlbWVudERhdGFNb2RlbE9iamVjdC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZSk/LlZhbHVlPy5wYXRoXG5cdFx0XHRcdCAgXSl9YFxuXHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlzQm9vbGVhbkZpZWxkR3JvdXAgPVxuXHRcdFx0XHQoZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIjtcblxuXHRcdFx0Y29uc3QgZmllbGRHcm91cEVsZW1lbnQgPSBpc0Jvb2xlYW5GaWVsZEdyb3VwXG5cdFx0XHRcdD8geG1sYFxuXHRcdFx0XHQ8bWFjcm86RmllbGRcblx0XHRcdFx0XHRpZFByZWZpeD1cIiR7Y29tcHV0ZWRJZFByZWZpeH1cIlxuXHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmVudGl0eVNldD8uZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0bWV0YVBhdGg9XCIke2JpbmRpbmdDb250ZXh0LmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9XCIke3RoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZEdyb3VwRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKSA6IFwiXCJ9XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zIGlzRmllbGRHcm91cEl0ZW09XCJ0cnVlXCIgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiAvPlxuXHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0YFxuXHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdGZpZWxkR3JvdXBFbGVtZW50cyArPSBmaWVsZEdyb3VwRWxlbWVudDtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0bGV0IGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRsZXQgbGFiZWxJRCA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0dGhpcy5pZCxcblx0XHRcdFx0XHRcIkZpZWxkR3JvdXBGb3JtRWxlbWVudFwiLFxuXHRcdFx0XHRcdGZvcm1FbGVtZW50LmtleVxuXHRcdFx0XHRdKX1gO1xuXHRcdFx0XHRsYWJlbElEID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0XHRsYWJlbElEID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXA7XG5cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD1cIiR7dGFyZ2V0T2JqZWN0Py5MYWJlbCA/PyBmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2xhYmVsSUR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y29udHJvbHM6UmVxdWlyZWRGbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwSG9yaXpvbnRhbExheW91dCA9PT0gdHJ1ZSA/IFwiUm93XCIgOiBcIkNvbHVtblwifVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXA9XCJXcmFwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uR2FwPVwiMXJlbVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpdGVtcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke2ZpZWxkR3JvdXBFbGVtZW50c31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9pdGVtcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2NvbnRyb2xzOlJlcXVpcmVkRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHJlcHJlc2VudGluZyBhIGZpZWxkLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBmaWVsZCBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRGaWVsZEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0Y29uc3QgY29tcHV0ZWRWaElkUHJlZml4ID0gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCB2aXNpYmxlRXhwcmVzc2lvbiA9IGZvcm1FbGVtZW50LmlzUGFydE9mUHJldmlld1xuXHRcdFx0PyBnZXRWaXNpYmxlRXhwcmVzc2lvbihjb21wdXRlZERhdGFNb2RlbE9iamVjdCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlIHwgUHJvcGVydHk+KVxuXHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+c2hvd0RldGFpbHN9ID09PSB0cnVlfVwiO1xuXHRcdGNvbnN0IGNvbXB1dGVkSWRQcmVmaXggPSB0aGlzLmlkID8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YCA6IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgZGVzaWdudGltZSA9IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ6IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWVcIjtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvOkZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZFByZWZpeD1cIiR7Y29tcHV0ZWRJZFByZWZpeH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7Y29tcHV0ZWRWaElkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlYWRPbmx5PVwiJHtmb3JtRWxlbWVudC5yZWFkT25seX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q9XCIke2Zvcm1FbGVtZW50LnNlbWFudGljT2JqZWN0fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRMaW5lc0VkaXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE1heExpbmVzPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXN9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE1heExlbmd0aD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRBbGlnbk1vZGU9XCJGb3JtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0VtcHR5SW5kaWNhdG9yPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkRWRpdFN0eWxlPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5maWVsZEVkaXRTdHlsZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5yYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGVUaW1lUGF0dGVybj1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8ucGF0dGVybn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhIGN1c3RvbSBmb3JtIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgY3VzdG9tIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjdXN0b20gZm9ybSBlbGVtZW50LlxuXHQgKi9cblx0Z2V0Q3VzdG9tRm9ybUVsZW1lbnQoZm9ybUVsZW1lbnQ6IEN1c3RvbUZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSB0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKSArIFwiL1wiICsgZm9ybUVsZW1lbnQucHJvcGVydHlQYXRoO1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChwcm9wZXJ0eVBhdGgpKSBhc1xuXHRcdFx0fCBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD5cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QpO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIGZvcm1FbGVtZW50LmlkXSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQuaWRdKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXHRcdGNvbnN0IGZvcm1FbGVtZW50S2V5ID0gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIGZvcm1FbGVtZW50LmtleV0pO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcInZpc2libGVcIiwgZm9ybUVsZW1lbnQudmlzaWJsZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRLZXk9XCIke2Zvcm1FbGVtZW50S2V5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZwbTpDdXN0b21GcmFnbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRLZXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJhZ21lbnROYW1lPVwiJHtmb3JtRWxlbWVudC50ZW1wbGF0ZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBmb3IgYSBzbG90IGNvbHVtbiBmb3IgdGhlIGdpdmVuIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgc2xvdCBjb2x1bW4uXG5cdCAqL1xuXHRnZXRTbG90Q29sdW1uKGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHhtbGA8c2xvdCBuYW1lPVwiJHtmb3JtRWxlbWVudC5rZXl9XCIgLz5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGRhdGEgZmllbGQgaXMgYSBtdWx0aXZhbHVlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhIGZpZWxkIGlzIGEgbXVsdGl2YWx1ZSBmaWVsZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0aXNNdWx0aVZhbHVlRGF0YUZpZWxkKGRhdGFGaWVsZDogRm9ybUVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRsZXQgaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBmYWxzZTtcblx0XHRpZiAoZGF0YUZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdmFsdWVQYXRoID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk/LlZhbHVlPy4kUGF0aDtcblx0XHRcdGlmICh2YWx1ZVBhdGgpIHtcblx0XHRcdFx0aXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBpc011bHRpVmFsdWVGaWVsZChcblx0XHRcdFx0XHRlbmhhbmNlRGF0YU1vZGVsUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYmluZGluZ0NvbnRleHQpLCB2YWx1ZVBhdGgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGFsbCBkYXRhIGZpZWxkcyBmb3IgYW5ub3RhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgZGF0YSBmaWVsZHMuXG5cdCAqL1xuXHRnZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKTogc3RyaW5nIHtcblx0XHRsZXQgcmV0dXJuU3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5jb25uZWN0ZWRGaWVsZHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzTXVsdGlWYWx1ZURhdGFGaWVsZChkYXRhRmllbGQpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuZmllbGRHcm91cEVsZW1lbnRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5maWVsZEdyb3VwRWxlbWVudHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRGaWVsZEdyb3VwRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldEZpZWxkRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDdXN0b21Gb3JtRWxlbWVudChkYXRhRmllbGQgYXMgQ3VzdG9tRm9ybUVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldFNsb3RDb2x1bW4oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHhtbGAke3JldHVyblN0cmluZ31gO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWpCQSxJQW1CcUJBLGtCQUFrQixJQUFBQyxJQUFBLEdBRHRDQyxtQkFBbUIsQ0FBQztJQUFFQyxJQUFJLEVBQUUsZUFBZTtJQUFFQyxTQUFTLEVBQUU7RUFBZ0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FFekVDLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdsQ0YsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJFLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsV0FBVztFQUM3RSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdETixjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHRFAsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJHLFFBQVEsRUFBRSxJQUFJO0lBQ2RELFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBTURS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
@@ -442,16 +442,33 @@ width="100%"
442
442
  : "";
443
443
  const computedVhIdPrefix = this.id ? StableIDHelper.generate([this.id, formElement.key, "FieldValueHelp"]) : "";
444
444
 
445
- let connectedFieldElement = "";
445
+ // if there is a label on the connected field, we create an invisible text for aria-labelledby for proper screen reading
446
+ const connectedFieldPath = (connectedField.originalObject as DataField)?.Value?.path?.valueOf();
447
+ const connectedFieldLabel = (connectedField.originalObject as DataField)?.Value?.$target?.annotations?.Common?.Label?.valueOf();
448
+ let ariaLabelId = "";
449
+ let ariaLabelText = "";
450
+ if (this.id && connectedFieldPath && connectedFieldLabel) {
451
+ ariaLabelId = StableIDHelper.generate([this.id, "AriaText", formElement.key, connectedFieldPath]);
452
+ ariaLabelText = xml`
453
+ <core:InvisibleText
454
+ text="${connectedFieldLabel}"
455
+ id="${ariaLabelId}"
456
+ />
457
+ `;
458
+ }
446
459
 
460
+ let connectedFieldElement = "";
447
461
  connectedFieldElement = xml`
448
- <macro:Field
462
+ ${ariaLabelText}
463
+ <macro:Field
449
464
  idPrefix="${computedIdPrefix}"
450
465
  vhIdPrefix="${computedVhIdPrefix}"
451
466
  contextPath="${this.entitySet?.getPath()}"
452
467
  metaPath="${bindingContext.getPath()}"
453
468
  onChange="${this.onChange}"
454
- ariaLabelledBy="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
469
+ ariaLabelledBy="${
470
+ this.id ? [StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]), ariaLabelId] : ""
471
+ }"
455
472
  >
456
473
  <formatOptions
457
474
  textLinesEdit="${formElement.formatOptions?.textLinesEdit}"
@@ -516,10 +533,10 @@ width="100%"
516
533
 
517
534
  />
518
535
  </f:label>
519
- <f:fields>
536
+ <f:fields>
520
537
  <controls:FieldWrapper required="${isRequired}">
521
538
  <HBox wrap="Wrap">
522
- ${connectedFieldElements}
539
+ ${connectedFieldElements}
523
540
  </HBox>
524
541
  </controls:FieldWrapper>
525
542
  </f:fields>
@@ -764,12 +781,13 @@ width="100%"
764
781
  ? "not-adaptable-tree"
765
782
  : "sap/fe/macros/form/FormElement.designtime";
766
783
  const formElementKey = StableIDHelper.generate([this.id, formElement.key]);
784
+
767
785
  return xml`
768
786
  <f:FormElement
769
787
  dt:designtime="${designtime}"
770
788
  id="${formElementId}"
771
789
  label="${formElement.label}"
772
- visible="${formElement.visible}"
790
+ ${this.attr("visible", formElement.visible)}
773
791
  ${this.attr("binding", bindingString)}
774
792
  >
775
793
  <f:fields>