@sapui5/sap.fe.core 1.141.2 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -794,21 +794,25 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
794
794
  callBack(undefined);
795
795
  }
796
796
  function showMessageBoxPerType(formattedText, close, message) {
797
+ const parameters = {
798
+ ...close,
799
+ closeOnNavigation: false
800
+ };
797
801
  switch (message.getType()) {
798
802
  case MessageType.Error:
799
- MessageBox.error(formattedText, close);
803
+ MessageBox.error(formattedText, parameters);
800
804
  break;
801
805
  case MessageType.Warning:
802
- MessageBox.warning(formattedText, close);
806
+ MessageBox.warning(formattedText, parameters);
803
807
  break;
804
808
  case MessageType.Success:
805
- MessageBox.success(formattedText, close);
809
+ MessageBox.success(formattedText, parameters);
806
810
  break;
807
811
  case MessageType.Information:
808
- MessageBox.information(formattedText, close);
812
+ MessageBox.information(formattedText, parameters);
809
813
  break;
810
814
  default:
811
- MessageBox.show(formattedText, close);
815
+ MessageBox.show(formattedText, parameters);
812
816
  }
813
817
  }
814
818
 
@@ -1600,4 +1604,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1600
1604
  };
1601
1605
  return messageHandling;
1602
1606
  }, false);
1603
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwibXNnVmlldyIsImdldENvbnRlbnQiLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiZ2V0TW9kZWwiLCJzZXREYXRhIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiYk1lc3NhZ2VEaWFsb2ciLCJkTm93IiwiRGF0ZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImdldE1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic29tZSIsIm1lc3NhZ2UiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwibXVsdGk0MTIiLCJvTWVzc2FnZVRlbXBsYXRlIiwiZGVzY3JpcHRpb25CaW5kaW5nIiwidGVjaG5pY2FsRGV0YWlsc0JpbmRpbmciLCJNZXNzYWdlSXRlbSIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbiIsInNob3dCb3VuZFRyYW5zaXRpb24iLCJfY29udGV4dCIsInRyYW5zaXRpb25NZXNzYWdlcyIsImNvbmNhdCIsImV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlc1RvU2hvdyIsInVpRWxlbWVudFRvVXNlIiwiZm5HZXRNc2dTdWJ0aXRsZSIsInNob3dCb3VuZE1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiZ2V0VUlEZWNpc2lvbnMiLCJjdXN0b21NZXNzYWdlcyIsImNvbnRleHQiLCJhcmd1bWVudHMiLCJjb250cm9sIiwiYWN0aW9uTmFtZSIsInZpZXdUeXBlIiwic2hvd1N0YXRlTWVzc2FnZXMiLCJtZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwicmVzb3VyY2VNb2RlbCIsIm1lc3NhZ2VIYW5kbGRlciIsImFkZEN1c3RvbU1lc3NhZ2VzIiwiY2FsbCIsInVpRGVjaXNpb25JbnRlcm1pdHRlbnQiLCJmaWx0ZXJzIiwiZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXNUb1Nob3ciLCJmaWx0ZXJDb250ZXh0Qm91bmRNZXNzYWdlcyIsInByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlIiwiaGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMiLCJnZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJtZXNzYWdlVG9TaG93IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsInNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwic2VsZWN0aW9uQ29udGV4dHMiLCJhU2VsZWN0ZWRDb250ZXh0cyIsIkFycmF5IiwiaXNBcnJheSIsImJvdW5kQWN0aW9uTmFtZSIsImVudGl0eVNldE5hbWUiLCJlbnRpdHlTZXQiLCJpbmNsdWRlcyIsInNwbGl0Iiwic3VmZml4UmVzb3VyY2VLZXkiLCJNZXNzYWdlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImNvZGUiLCJyZWZlcmVuY2VNc2ciLCJjaGVja0ZhaWxlZCIsIm1zZyIsImlkeCIsImdldE1lc3NhZ2UiLCJnZXRBZGRpdGlvbmFsVGV4dCIsInNob3dNZXNzYWdlc0luVUkiLCJ1aURlY2lzaW9ucyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvd01lc3NhZ2VUb2FzdCIsInNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCIsInNob3dNZXNzYWdlQm94Q29udHJvbCIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciIsInRlc3QiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nIiwicHVzaCIsImNhc2VTZW5zaXRpdmUiLCJFUSIsImdldFRhcmdldHMiLCJhbmQiLCJfcmVmIiwicmV0TWVzc2FnZXMiLCJnZW5lcmljTXNncyIsIm5vbkdlbmVyaWNNc2dzIiwiZmUiLCJmZVRlY2huaWNhbERldGFpbHMiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJwcmVUZXh0IiwidGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZSIsInNpbmdsZUVycm9yUHJlVGV4dCIsInNpbmdsZUdlbmVyaWNNZXNzYWdlSWQiLCJnZXRJZCIsImV4aXN0aW5nVGVjaERldGFpbHMiLCJzZXRUZWNobmljYWxEZXRhaWxzIiwibWVzc2FnZUNvZGUiLCJ0ZXh0IiwiZ2V0U29ydGVyRm9yTWVzc2FnZXMiLCJTb3J0ZXIiLCJvYmoxIiwib2JqMiIsInJhbmtBIiwiZ2V0TWVzc2FnZVJhbmsiLCJyYW5rQiIsInRyYW5zaXN0aW9uTWVzc2FnZXMiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiY3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZXMiLCJtYXAiLCJjdXJyZW50Q29udGV4dCIsIm9VbmlxdWVPYmoiLCJmaWx0ZXIiLCJvYmoiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwidWlEZWNpc2lvbiIsInJ1blRvVGVzdCIsImhpZ2hlc3RQcmlvcml0eSIsImhpZ2hlc3RQcmlvcml0eVRleHQiLCJyZXNvdXJjZUJ1bmRsZSIsInN0cmljdEhhbmRsaW5nRmxvdyIsIm1lc3NhZ2VEaWFsb2dNb2RlbCIsIkpTT05Nb2RlbCIsIm1lc3NhZ2VPYmplY3QiLCJzb3J0ZXIiLCJnZXRCaW5kaW5nIiwic29ydCIsImlzT3BlbiIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImVuZEJ1dHRvbiIsImVzY2FwZUhhbmRsZXIiLCJjb21wbGV0aW9uUHJvbWlzZSIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJjbG9zZU9uTmF2aWdhdGlvbiIsImFmdGVyQ2xvc2UiLCJpdGVtIiwicmVtb3ZlQWxsQ29udGVudCIsImFkZENvbnRlbnQiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJyZXRyeUFmdGVyTWVzc2FnZSIsInN0YXJ0VGFnIiwiY2xvc2VUYWciLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwibWVzc2FnZUhlYWRlciIsIm1lc3NhZ2VGb3JtYXR0ZWQiLCJyZXBsYWNlQWxsIiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1hbmFnZWRPYmplY3QiLCJlc2NhcGVTZXR0aW5nc1ZhbHVlIiwic2hvd01lc3NhZ2VCb3hQZXJUeXBlIiwib25DbG9zZSIsImNsb3NlTWVzc2FnZUJveCIsImJpbmQiLCJtZXNzYWdlU2hvd24iLCJjYWxsQmFjayIsIm1lc3NhZ2VzVG9SZW1vdmUiLCJhbGxNc2dzIiwiZ2V0RGF0YSIsImdlbmVyaWNNZXNzYWdlIiwiZmluZCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIndhcm5pbmciLCJzdWNjZXNzIiwiaW5mb3JtYXRpb24iLCJhTW9kZWxEYXRhQXJyYXkiLCJzQWN0aW9uTmFtZSIsImFNb2RlbERhdGEiLCJnZW5lcmFsR3JvdXBUZXh0IiwiaXNBIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsImluZGV4T2YiLCJhbGxSb3dDb250ZXh0cyIsInJvd0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImlkZW50aWZpZXJDb2x1bW4iLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwicm93SWRlbnRpZmllciIsImNvbHVtblByb3BlcnR5TmFtZSIsImdldFRhYmxlQ29sUHJvcGVydHkiLCJzVGFibGVUYXJnZXRDb2xOYW1lIiwiZ2V0VGFibGVDb2xJbmZvIiwiZ2V0SGVhZGVyIiwidXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGUiLCJtZGNUYWJsZSIsInRhcmdldFRhYmxlSW5mbyIsImdldENvbnRleHRzIiwiY29sdW1uTmFtZVN1ZmZpeCIsInNldEFkZGl0aW9uYWxUZXh0IiwidXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUiLCJzdWJzZWN0aW9uIiwiaGVhZGVyTmFtZSIsImdldEhlYWRlclZpc2libGUiLCJ0YWJsZUhlYWRlciIsImdldFRpdGxlIiwic2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlIiwidmlld0NvbnRleHQiLCJncm91cE5hbWVJc0dlbmVyYWwiLCJzZXRTZWN0aW9uTmFtZUluR3JvdXAiLCJjaGlsZFRhYmxlRWxlbWVudCIsImZpbmRFbGVtZW50cyIsIm9FbGVtZW50IiwiZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSIsImZuQ2FsbGJhY2tTZXRHcm91cE5hbWUiLCJvVGFyZ2V0VGFibGVJbmZvIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCIsIm9TZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwic0xhc3RBY3Rpb25UZXh0IiwidG9TdHJpbmciLCJhTWVzc2FnZSIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJzSWQiLCJpc0NvbnRyb2xJblRhYmxlIiwib0NvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyIsImdldFBlcnNpc3RlbnQiLCJzdWJUaXRsZSIsImdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyIsInRhYmxlUm93QmluZGluZ0NvbnRleHRzIiwidGFibGVSb3dDb250ZXh0IiwidGFibGVUYXJnZXRDb2xOYW1lIiwidGFibGUiLCJpc0NyZWF0aW9uUm93IiwidGFyZ2V0ZWRDb250cm9sIiwibWVzc2FnZVN1YnRpdGxlIiwicm93U3VidGl0bGVWYWx1ZSIsImdldFJlc291cmNlTW9kZWwiLCJ0YWJsZUNvbFByb3BlcnR5IiwiZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyIsImNvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwiaXNJbmFjdGl2ZSIsImxhYmVsIiwidGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uIiwiZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwidGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJ0YWJsZUNvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiZ2V0VGFibGVDb2xWYWx1ZSIsIm9Db2x1bW5JbmZvIiwiZGV0ZXJtaW5lQ29sdW1uSW5mbyIsInNDb2x1bW5JbmRpY2F0b3IiLCJzQ29sdW1uVmFsdWUiLCJiaW5kaW5nQ29udGV4dCIsImtleSIsIm9Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic0NvbE5hbWVGcm9tTWVzc2FnZU9iaiIsInBvcCIsImdldEtleUNvbHVtbkluZm8iLCJvQ29sRnJvbVRhYmxlU2V0dGluZ3MiLCJhdmFpbGFiaWxpdHkiLCJvUGFyZW50Q29udHJvbCIsInNIaWdoZXN0UHJpb3JpdHkiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwic3RhcnRzV2l0aCIsIm9Db250ZXh0IiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYmFja2VuZE1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJhQ29udGV4dHMiLCJhZGRpdGlvbmFsVGV4dCIsInN1YnRpdGxlQ29sdW1uIiwiZXJyb3JDb250ZXh0Iiwib09iamVjdFBhZ2VMYXlvdXQiLCJnZXRTZWN0aW9ucyIsImdldFZpc2libGUiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsInN1YlNlY3Rpb24iLCJvTWVzc2FnZU9iamVjdCIsImZuRmlsdGVyVXBvbklkcyIsImEiLCJiIiwib0NvbnRleHRQYXRoIiwiZm5SZWdFeHBlc2NhcGUiLCJzIiwicmVwbGFjZSIsImNvbnRleHRQYXRoVG9Fc2NhcGUiLCJSZWdFeHAiLCJzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSIsIm9UYWJsZVRhcmdldENvbCIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJnZXRQcm9wZXJ0eUtleSIsIm9DdXN0b21Db2x1bW4iLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRDb2x1bW5zRm9yIiwib0NvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJuYW1lIiwiYUNvbHVtbnMiLCJjb2x1bW5EZWZpbml0aW9uIiwicHJvcGVydHlJbmZvIiwiYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlIiwib1RhYmxlQ29sSW5mbyIsIm9JdGVtIiwiY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSIsInNlY3Rpb24iLCJiTXVsdGlwbGVTdWJTZWN0aW9ucyIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsImJJc09ycGhhbkVsZW1lbnQiLCJhRWxlbWVudHMiLCJvUGFyZW50RWxlbWVudCIsImdldE1lc3NhZ2VzRm9yQ29udGV4dCIsImNvbnRyb2xJZHMiLCJlcnJvckZpZWxkQ29udHJvbCIsImluZGV4IiwiSW5maW5pdHkiLCJlcnJvckNvbnRyb2xJZCIsImNvbnRyb2xJZCIsImZpZWxkUmFua2luRGlhbG9nIiwiZm9jdXMiLCJyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0IiwibWVzc2FnZXNJbk1vZGVsIiwiaXNNZXNzYWdlU3RyaXBNZXNzYWdlIiwiaXNTaW5nbGVUYXJnZXQiLCJpc1RhcmdldE1hdGNoaW5nIiwiaXNUcmFuc2l0aW9uTWVzc2FnZSIsInJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCIsImNvbnRleHRzIiwiYm91bmRDb250ZXh0TWVzc2FnZXMiLCJyZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyIsIm1lc3NhZ2VzVG9CZVJlbW92ZWQiLCJyZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0IiwibWVzc2FnZVRhcmdldHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU1lc3NhZ2UsIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQ29sdW1uUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZURlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IE1MaWIgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL21lc3NhZ2UvTWVzc2FnZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBVSVRhYmxlIGZyb20gXCJzYXAvdWkvdGFibGUvVGFibGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiwgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuXG5jb25zdCBCdXR0b25UeXBlID0gTUxpYi5CdXR0b25UeXBlO1xubGV0IGFSZXNvbHZlRnVuY3Rpb25zOiAoKHBhcmFtMTogdm9pZCB8IERpYWxvZykgPT4gdm9pZClbXSA9IFtdO1xubGV0IGRpYWxvZ0NvbnRyb2w6IERpYWxvZztcbmxldCBvQmFja0J1dHRvbjogQnV0dG9uO1xubGV0IG1lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVdpdGhIZWFkZXIgPSBNZXNzYWdlICYge1xuXHRoZWFkZXJOYW1lPzogc3RyaW5nO1xuXHR0YXJnZXQ/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxUZXh0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR0YWJsZUhlYWRlcj86IHN0cmluZztcbn07XG5cbnR5cGUgQ29sSW5mb0FuZFN1YnRpdGxlVHlwZSA9IHtcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0c3ViVGl0bGU/OiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBDb2x1bW5JbmZvVHlwZSA9IHtcblx0c0NvbHVtblZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNDb2x1bW5JbmRpY2F0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN1cHBvcnRlZFVJRWxlbWVudCA9IFwiRGlhbG9nXCIgfCBcIkJveFwiIHwgXCJUb2FzdFwiIHwgXCJOb25lXCI7XG5cbi8vIEZFIHJlbGF0ZWQgdGVjaG5pY2FsIGluZm9ybWF0aW9uIHRvIGJlIHN0b3JlZCB3aXRoIHRoZSBtZXNzYWdlLlxuLy8gTGlrZSwgdGhpcyB3b3VsZCBiZSB1c2VkIHRvIHN0b3JlIHByZS10ZXh0IHdpdGggdGhlIG1lc3NhZ2Ugd2hlbiBpdCBpcyB0aGUgb25seSBtZXNzYWdlIHRvIGJlIHNob3duIGluIFVJLlxudHlwZSBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0gb2JqZWN0ICYge1xuXHRmZT86IHtcblx0XHRjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3I/OiBzdHJpbmc7XG5cdFx0c2luZ2xlRXJyb3JQcmVUZXh0Pzogc3RyaW5nO1xuXHRcdHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ/OiBzdHJpbmc7XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlVUlEZWNpc2lvbnMgPSB7XG5cdHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQ7XG5cdG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlW107XG5cdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBib29sZWFuO1xuXHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaD86IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0aXNOb25UZWNobmljYWxNZXNzYWdlOiAobWVzc2FnZTogTWVzc2FnZSkgPT4gYm9vbGVhbjtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGJvb2xlYW4sIGJUcmFuc2l0aW9uT25seT86IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IE1lc3NhZ2VbXTtcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKTogYm9vbGVhbjtcblx0Z2V0VUlEZWNpc2lvbnM6IChcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRcdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW4sXG5cdFx0Y29udHJvbD86IENvbnRyb2wsXG5cdFx0YWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnMsXG5cdFx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdFx0c2hvd1N0YXRlTWVzc2FnZXM/OiBib29sZWFuLFxuXHRcdG1lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcixcblx0XHRyZXNvdXJjZU1vZGVsPzogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcj86IE1lc3NhZ2VIYW5kbGVyXG5cdCkgPT4gTWVzc2FnZVVJRGVjaXNpb25zO1xuXHRzaG93TWVzc2FnZXNJblVJOiAodWlEZWNpc2lvbjogTWVzc2FnZVVJRGVjaXNpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogdHJ1ZSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdFx0YlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbixcblx0XHRpc011bHRpNDEyPzogYm9vbGVhblxuXHQpID0+IHtcblx0XHRtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdFx0b0JhY2tCdXR0b246IEJ1dHRvbjtcblx0fTtcblx0c2V0TWVzc2FnZVN1YnRpdGxlOiAob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB2b2lkO1xuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogKG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sKSA9PiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdGluY2x1ZGVUYWJsZUdyb3VwTmFtZT86IGJvb2xlYW5cblx0KSA9PiBzdHJpbmc7XG5cdGJJc09ycGhhbkVsZW1lbnQ6IChvRWxlbWVudDogVUk1RWxlbWVudCwgYUVsZW1lbnRzOiBVSTVFbGVtZW50W10pID0+IGJvb2xlYW47XG5cdGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZTogKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHN0cmluZztcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogKFxuXHRcdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IEZ1bmN0aW9uXG5cdCkgPT4gQ29sSW5mb0FuZFN1YnRpdGxlVHlwZTtcblx0Z2V0VGFibGVDb2xJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nXG5cdCkgPT4geyBzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogKG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBzdHJpbmcgfCBSZWdFeHApID0+IHN0cmluZztcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiAoXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRcdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG5cdCkgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogKG9Db2xGcm9tVGFibGVTZXR0aW5nczogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpID0+IENvbHVtbkluZm9UeXBlO1xuXHRmZXRjaENvbHVtbkluZm86IChvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpID0+IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IChcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcblx0KSA9PiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0Z2V0TWVzc2FnZVJhbms6IChvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBudW1iZXI7XG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBib29sZWFuKSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IFZpZXcpID0+IHZvaWQ7XG5cdHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWU6IChcblx0XHRtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogTURDVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcblx0Z2V0RmlsdGVyc0Zvck1lc3NhZ2VzOiAoc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgc2hvd1N0YXRlTWVzc2FnZXM/OiBib29sZWFuKSA9PiBGaWx0ZXJbXTtcblx0c2hvd01lc3NhZ2VUb2FzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IFByb21pc2U8dm9pZD47XG5cdHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbDogKHVpRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMsIHJ1blRvVGVzdD86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZCB8IERpYWxvZz47XG5cdHNob3dNZXNzYWdlQm94Q29udHJvbDogKHVpRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMpID0+IFByb21pc2U8dm9pZD47XG5cdGdldE1lc3NhZ2VzRm9yQ29udGV4dDogKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSA9PiBNZXNzYWdlW107XG5cdGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKSA9PiBib29sZWFuO1xuXHRyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWw6IChtZXNzYWdlcz86IE1lc3NhZ2VbXSwgY29udGV4dD86IENvbnRleHRbXSkgPT4gdm9pZDtcblx0cmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IChNZXNzYWdlczogTWVzc2FnZVtdKSA9PiBNZXNzYWdlW107XG5cdHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0XHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRtZGNUYWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0dmlld0NvbnRleHQ6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGdyb3VwTmFtZUlzR2VuZXJhbDogYm9vbGVhbixcblx0XHRhY3Rpb25OYW1lPzogc3RyaW5nXG5cdCk6IGJvb2xlYW47XG5cdHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlOiBNRENUYWJsZSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHRhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSk6IHZvaWQ7XG5cdHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlKFxuXHRcdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0XHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcblx0KTogdm9pZDtcblx0Y2xvc2VNZXNzYWdlQm94KG1lc3NhZ2VTaG93bjogTWVzc2FnZVdpdGhIZWFkZXIsIGNhbGxCYWNrOiAodmFsdWU6IHZvaWQpID0+IHZvaWQsIHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ6IHN0cmluZyk6IHZvaWQ7XG5cdHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQ6IChvQ29udGV4dDogQ29udGV4dCkgPT4gdm9pZDtcblx0Y2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXM6IChtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSkgPT4gYm9vbGVhbjtcblx0YWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlOiAoXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcj86IFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG5cdCkgPT4gTWVzc2FnZVdpdGhIZWFkZXIgfCB1bmRlZmluZWQ7XG5cdHJlbW92ZUFsbFRyYW5zaXRpb25NZXNzYWdlc0ZvckNvbnRleHQ6IChjb250ZXh0OiBDb250ZXh0KSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCk6IHN0cmluZyB7XG5cdGxldCBzUHJldmlvdXNHcm91cE5hbWU6IHN0cmluZztcblxuXHQvLyBJbnNlcnQgdGVjaG5pY2FsIGRldGFpbCBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cmluZyhNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRsZXQgc0hUTUwgPSBcIlwiO1xuXHRcdGlmIChvUHJvcGVydHkuZ3JvdXBOYW1lICYmIG9Qcm9wZXJ0eS5wcm9wZXJ0eSAmJiBvUHJvcGVydHkuZ3JvdXBOYW1lICE9PSBzUHJldmlvdXNHcm91cE5hbWUpIHtcblx0XHRcdHNIVE1MICs9IFwiKCAke1wiICsgb1Byb3BlcnR5LnByb3BlcnR5ICsgJ30gPyBcIjxicj48aDM+JyArIG9Qcm9wZXJ0eS5ncm91cE5hbWUgKyAnPC9oMz5cIiA6IFwiXCIgKSArICc7XG5cdFx0XHRzUHJldmlvdXNHcm91cE5hbWUgPSBvUHJvcGVydHkuZ3JvdXBOYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gc0hUTUw7XG5cdH1cblxuXHQvLyBMaXN0IG9mIHRlY2huaWNhbCBkZXRhaWxzIHRvIGJlIHNob3duXG5cdGZ1bmN0aW9uIGdldFBhdGhzKCk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfVtdIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzVGV4dGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVJlcG9zaXRvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25gIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9BbmFseXNpc2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL05vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkV4Y2VwdGlvbkNhdGVnb3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UaW1lU3RhbXBgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9jb2RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvbWVzc2FnZWAgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBgJHtzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpfSR7aW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eSl9ICsgYDtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcblx0cmV0dXJuIFwiKCR7XCIgKyBcImRlc2NyaXB0aW9ufSA/ICgke1wiICsgJ2Rlc2NyaXB0aW9ufSkgOiBcIlwiKSc7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSB0eXBlKEVycm9yL1dhcm5pbmcvU3VjY2Vzcy9JbmZvcm1hdGlvbikgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzLlxuICogQHBhcmFtIFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogTWVzc2FnZUl0ZW1bXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRjb25zdCBpTGVuZ3RoID0gYU1lc3NhZ2VzLmxlbmd0aDtcblx0Y29uc3Qgb01lc3NhZ2VDb3VudCA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpTGVuZ3RoOyBpKyspIHtcblx0XHQrK29NZXNzYWdlQ291bnRbYU1lc3NhZ2VzW2ldLmdldFR5cGUoKSBhcyBrZXlvZiB0eXBlb2Ygb01lc3NhZ2VDb3VudF07XG5cdH1cblx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHR9XG5cdHJldHVybiBzTWVzc2FnZVByaW9yaXR5O1xufVxuLy8gZnVuY3Rpb24gd2hpY2ggbW9kaWZ5IGUtVGFnIG1lc3NhZ2VzIG9ubHkuXG4vLyByZXR1cm5zIDogdHJ1ZSwgaWYgYW55IGUtVGFnIG1lc3NhZ2UgaXMgbW9kaWZpZWQsIG90aGVyd2lzZSBmYWxzZS5cbmZ1bmN0aW9uIGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0Y29uc3QgYU1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldE9iamVjdChcIi9cIik7XG5cdGxldCBiTWVzc2FnZXNNb2RpZmllZCA9IGZhbHNlO1xuXHRsZXQgc0V0YWdNZXNzYWdlID0gXCJcIjtcblx0YU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlLCBpOiBudW1iZXIpIHtcblx0XHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMgJiYgKG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMiAmJiBvVGVjaG5pY2FsRGV0YWlscy5pc0NvbmN1cnJlbnRNb2RpZmljYXRpb24pIHtcblx0XHRcdGlmIChjb25jdXJyZW50RWRpdEZsYWcpIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID1cblx0XHRcdFx0XHRzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTX0NPTkNVUlJFTlRfTU9ESUZJQ0FUSU9OXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdH1cblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2Uuc2V0VGFyZ2V0cyhbXCJcIl0pO1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdGJNZXNzYWdlc01vZGlmaWVkID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYk1lc3NhZ2VzTW9kaWZpZWQ7XG59XG4vLyBEaWFsb2cgY2xvc2UgSGFuZGxpbmdcbmZ1bmN0aW9uIGRpYWxvZ0Nsb3NlSGFuZGxlcigpOiB2b2lkIHtcblx0ZGlhbG9nQ29udHJvbC5jbG9zZSgpO1xuXHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTtcblx0Y29uc3QgbXNnVmlldyA9IGRpYWxvZ0NvbnRyb2wuZ2V0Q29udGVudCgpWzBdIGFzIE1lc3NhZ2VWaWV3O1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gbXNnVmlldy5nZXRNb2RlbCgpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBNZXNzYWdlLCBiTWVzc2FnZURpYWxvZz86IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBkTm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdGxldCBzUmV0cnlBZnRlck1lc3NhZ2U7XG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdGNvbnN0IGRSZXRyeUFmdGVyID0gb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcjtcblx0XHRsZXQgb0RhdGVGb3JtYXQ7XG5cdFx0aWYgKGROb3cuZ2V0RnVsbFllYXIoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9kaWZmZXJlbnQgeWVhcnNcblx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkLCB5eXl5ICdhdCcgaGg6bW0gYVwiXG5cdFx0XHR9KTtcblx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRGdWxsWWVhcigpID09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vc2FtZSB5ZWFyXG5cdFx0XHRpZiAoYk1lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0Ly9sZXNzIHRoYW4gMiBtaW5cblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX1RJVExFXCIpfSAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19ERVNDXCJcblx0XHRcdFx0KX1gO1xuXHRcdFx0fSBlbHNlIGlmIChkTm93LmdldE1vbnRoKCkgIT09IGRSZXRyeUFmdGVyLmdldE1vbnRoKCkgfHwgZE5vdy5nZXREYXRlKCkgIT09IGRSZXRyeUFmdGVyLmdldERhdGUoKSkge1xuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkICdhdCcgaGg6bW0gYVwiXG5cdFx0XHRcdH0pOyAvL2RpZmZlcmVudCBtb250aHMgb3IgZGlmZmVyZW50IGRheXMgb2Ygc2FtZSBtb250aFxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vc2FtZSBkYXlcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiaGg6bW0gYVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfREFZXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiAhb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9OT19SRVRSWV9BRlRFUlwiKTtcblx0fVxuXHRyZXR1cm4gc1JldHJ5QWZ0ZXJNZXNzYWdlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBhcmUgYW55IHdhcm5pbmcgb3IgZXJyb3IgbWVzc2FnZXMoYm91bmQgYW5kIHVuYm91bmQpLi5cbiAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBleGlzdGVuY2Ugb2YgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKTogYm9vbGVhbiB7XG5cdHJldHVybiBbLi4uZ2V0TWVzc2FnZXModW5kZWZpbmVkLCB0cnVlKSwgLi4uZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSldLnNvbWUoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2coXG5cdG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCxcblx0YlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbixcblx0bXVsdGk0MTI/OiBib29sZWFuXG4pOiB7XG5cdG1lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblx0b0JhY2tCdXR0b246IEJ1dHRvbjtcbn0ge1xuXHRsZXQgb01lc3NhZ2VUZW1wbGF0ZTogTWVzc2FnZUl0ZW07XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQmluZGluZyA9ICd7PSAke2Rlc2NyaXB0aW9ufSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXREZXNjcmlwdGlvbigpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcgPVxuXHRcdFx0J3s9ICR7dGVjaG5pY2FsRGV0YWlsc30gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0Z3JvdXBOYW1lOiBcIntoZWFkZXJOYW1lfVwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uQmluZGluZyArIHRlY2huaWNhbERldGFpbHNCaW5kaW5nLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIGlmIChtdWx0aTQxMikge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIntkZXNjcmlwdGlvbn1cIixcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG1lc3NhZ2VWaWV3ID0gbmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRzaG93RGV0YWlsc1BhZ2VIZWFkZXI6IGZhbHNlLFxuXHRcdGl0ZW1TZWxlY3Q6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdG9CYWNrQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fSxcblx0XHRpdGVtczoge1xuXHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZSxcblx0XHRcdGxlbmd0aDogOTk5OVxuXHRcdH1cblx0fSk7XG5cdG1lc3NhZ2VWaWV3LnNldEdyb3VwSXRlbXModHJ1ZSk7XG5cdG9CYWNrQnV0dG9uID1cblx0XHRvQmFja0J1dHRvbiB8fFxuXHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0aWNvbjogSWNvblBvb2wuZ2V0SWNvblVSSShcIm5hdi1iYWNrXCIpLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRwcmVzczogZnVuY3Rpb24gKHRoaXM6IEJ1dHRvbik6IHZvaWQge1xuXHRcdFx0XHRtZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0Ly8gVXBkYXRlIHByb3BlciBFVGFnIE1pc21hdGNoIGVycm9yXG5cdG1lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VWaWV3LFxuXHRcdG9CYWNrQnV0dG9uXG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlUGFyYW1ldGVycyA9IHtcblx0c2hvd01lc3NhZ2VCb3g/OiBib29sZWFuO1xuXHRzaG93TWVzc2FnZURpYWxvZz86IGJvb2xlYW47XG5cdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZz86IGJvb2xlYW47XG5cdGZpbHRlcmVkTWVzc2FnZXM/OiBNZXNzYWdlW107XG5cdGZuR2V0TWVzc2FnZVN1YnRpdGxlPzogRnVuY3Rpb247XG5cdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbj86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBpc05vblRlY2huaWNhbE1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuXHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gbWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHQodGVjaG5pY2FsRGV0YWlscyAmJlxuXHRcdFx0KCh0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSBudWxsKSB8fFxuXHRcdFx0XHQodGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzICE9PSB1bmRlZmluZWQgJiYgdGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzICE9PSBudWxsKSkpIHx8XG5cdFx0bWVzc2FnZS5nZXRDb2RlKClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGZvciBjcmVhdGluZyB0aGUgVUkgZGVjaXNpb24gdG8gc2hvdyBtZXNzYWdlcy5cbiAqIEBwYXJhbSBzaG93Qm91bmRUcmFuc2l0aW9uIFNob3VsZCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIF9jb250ZXh0IEJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZS5cbiAqIEByZXR1cm5zIFRyYW5zaXRpb24gbWVzc2FnZXMgcmVsZXZhbnQgdG8gc2hvdyBpbiBVSS5cbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbih0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLCBzaG93Qm91bmRUcmFuc2l0aW9uOiBib29sZWFuLCBfY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRsZXQgdHJhbnNpdGlvbk1lc3NhZ2VzID0gdGhpcy5nZXRNZXNzYWdlcygpO1xuXHRpZiAoc2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdC8vYm91bmQgVHJhbnNpc3Rpb24gTWVzc2FnZXNcblx0XHR0cmFuc2l0aW9uTWVzc2FnZXMgPSB0cmFuc2l0aW9uTWVzc2FnZXMuY29uY2F0KHRoaXMuZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSkpO1xuXHR9XG5cdHJldHVybiB0cmFuc2l0aW9uTWVzc2FnZXM7XG59XG5cbi8qKlxuICogRXhlY3V0ZSAnb25CZWZvcmVTaG93TWVzc2FnZXMnIGNhbGxiYWNrIHRvIGxldCB0aGUgY2FsbGVyIGluZmx1ZW5jZSB0aGUgVUkgZGVjaXNpb24gdG8gc2hvdyBtZXNzYWdlcy5cbiAqIEBwYXJhbSB0cmFuc2l0aW9uTWVzc2FnZXMgVHJhbnNpdGlvbiBtZXNzYWdlcy5cbiAqIEBwYXJhbSBvbkJlZm9yZVNob3dNZXNzYWdlIENhbGxiYWNrLlxuICogQHJldHVybnMgU2hvd01lc3NhZ2VQYXJhbWV0ZXJzIEluZnJvbWF0aW9uIHRvIGNoYW5nZSBVSSBkZWNpc2lvbiBiYXNlZCBvbiBvbkJlZm9yZVNob3dNZXNzYWdlcyBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZU9uQmVmb3JlU2hvd01lc3NhZ2VzKFxuXHR0cmFuc2l0aW9uTWVzc2FnZXM6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVyc1xuKToge1xuXHR1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50O1xuXHRtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXTtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU/OiBGdW5jdGlvbjtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nPzogYm9vbGVhbjtcblx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuO1xufSB7XG5cdGxldCBtZXNzYWdlc1RvU2hvdyA9IFsuLi50cmFuc2l0aW9uTWVzc2FnZXNdO1xuXHRsZXQgdWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudCA9XG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiB0cmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0Q29kZSgpID09PSBcIjUwM1wiID8gXCJCb3hcIiA6IFwiRGlhbG9nXCI7XG5cdGxldCBmbkdldE1zZ1N1YnRpdGxlOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDtcblx0bGV0IHNob3dCb3VuZE1lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChvbkJlZm9yZVNob3dNZXNzYWdlKSB7XG5cdFx0Ly8gVGhlIGNhbGxiYWNrIG9uQmVmb3JlU2hvd01lc3NhZ2UgYWx0ZXJzIHRoZSBVSUVsZW1lbnQgdG8gdXNlIGluIGEgZGlmZmVyZW50IGZvcm1hdChzaG93TWVzc2FnZURpYWxvZyBhbmQgc2hvd01lc3NhZ2VCb3gpLlxuXHRcdGNvbnN0IHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0ge1xuXHRcdFx0c2hvd01lc3NhZ2VEaWFsb2c6IHVpRWxlbWVudFRvVXNlID09PSBcIkRpYWxvZ1wiLFxuXHRcdFx0c2hvd01lc3NhZ2VCb3g6IHVpRWxlbWVudFRvVXNlID09PSBcIkJveFwiXG5cdFx0fTtcblx0XHRjb25zdCB7XG5cdFx0XHRzaG93TWVzc2FnZUJveCxcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nLFxuXHRcdFx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nLFxuXHRcdFx0ZmlsdGVyZWRNZXNzYWdlcyxcblx0XHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRcdFx0Y29udGFpbnNCb3VuZFRyYW5zaXN0aW9uXG5cdFx0fSA9IG9uQmVmb3JlU2hvd01lc3NhZ2UodHJhbnNpdGlvbk1lc3NhZ2VzLCBzaG93TWVzc2FnZVBhcmFtZXRlcnMpO1xuXHRcdGlmIChzaG93TWVzc2FnZUJveCA9PT0gdHJ1ZSkge1xuXHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VEaWFsb2cgPT09IHRydWUpIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIk5vbmVcIjtcblx0XHR9XG5cdFx0c2hvd0JvdW5kTWVzc2FnZXMgPSBjb250YWluc0JvdW5kVHJhbnNpc3Rpb247XG5cdFx0Zm5HZXRNc2dTdWJ0aXRsZSA9IGZuR2V0TWVzc2FnZVN1YnRpdGxlO1xuXHRcdGlmIChzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cgfHwgY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uID09PSBmYWxzZSkge1xuXHRcdFx0bWVzc2FnZXNUb1Nob3cgPSBmaWx0ZXJlZE1lc3NhZ2VzID8/IFtdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0bWVzc2FnZXNUb1Nob3csXG5cdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6IGZuR2V0TXNnU3VidGl0bGUsXG5cdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IHNob3dCb3VuZE1lc3NhZ2VzXG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlIFVJIGRlY2lzaW9ucyBmb3Igc2hvd2luZyBtZXNzYWdlcy5cbiAqXG4gKiBUaGVzZSBzaGFsbCBjb250YWluIHRoZSBtZXNzYWdlcyB0byBzaG93IGFuZCB0aGUgVUkgZWxlbWVudCB0byB1c2UuXG4gKiBJdCB3b3VsZCBhbHNvIGhvbGQgaW5mb3JtYXRpb24gZm9yIGFmdGVyIHByb2Nlc3MgbGlrZS4uXG4gKiAxLiByZWZyZXNoIGNvbnRleHQgZHVlIHRvIGV0YWcgbWlzbWF0Y2guXG4gKiAyLiBkbyB3ZSBzaG93IGJvdW5kIG1lc3NhZ2VzIGFuZCBoZW5jZSBjbGVhciB0aGVtIGFmdGVyIHdlIHNob3cgdGhlIFVJIGVsZW1lbnQuXG4gKiBAcGFyYW0gY3VzdG9tTWVzc2FnZXMgQ3VzdG9tIG1lc3NhZ2VzIHRvIGFkZCB0byBtZXNzYWdlIG1vZGVsIGFuZCBzaG93LlxuICogQHBhcmFtIGNvbnRleHQgQmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gY29uY3VycmVudEVkaXRGbGFnIElzIHRoaXMgYSBjb25jdXJyZW50IGVkaXQgc2NlbmFyaW8uXG4gKiBAcGFyYW0gY29udHJvbCBTb3VyY2UgY29udHJvbC5cbiAqIEBwYXJhbSBhY3Rpb25OYW1lIE5hbWUgb2YgdGhlIGFjdGlvbiB3aG9zZSBwcm9jZXNzIHJlcXVlc3RlZCBmb3IgbWVzc2FnZXMgdG8gYmUgc2hvd24uXG4gKiBAcGFyYW0gb25CZWZvcmVTaG93TWVzc2FnZSBDYWxsYmFjayB0byBpbmZsdWVuY2UgVUkgZGVjaXNpb24gYmVmb3JlIGNyZWF0aW5nIGZpbmFsIFVJIGRlY2lzaW9uLlxuICogQHBhcmFtIHZpZXdUeXBlIFZpZXcgdHlwZSwgbGlzdCByZXBvcnQgb3Igb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gc2hvd1N0YXRlTWVzc2FnZXMgU2hvdWxkIHN0YXRlIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIG1lc3NhZ2VEaWFsb2dQYXJhbWV0ZXJcbiAqIEByZXR1cm5zIFVJIGRlY2lzaW9ucyB1c2VkIHRvIHNob3cgbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFVJRGVjaXNpb25zKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0c2hvd0JvdW5kVHJhbnNpdGlvbiA9IGZhbHNlLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRjb250cm9sPzogQ29udHJvbCxcblx0YWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHR2aWV3VHlwZT86IHN0cmluZyxcblx0c2hvd1N0YXRlTWVzc2FnZXMgPSBmYWxzZSxcblx0bWVzc2FnZURpYWxvZ1BhcmFtZXRlcj86IFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyLFxuXHRyZXNvdXJjZU1vZGVsPzogUmVzb3VyY2VNb2RlbCxcblx0bWVzc2FnZUhhbmRsZGVyPzogTWVzc2FnZUhhbmRsZXJcbik6IE1lc3NhZ2VVSURlY2lzaW9ucyB7XG5cdC8vIEFkZCBDdXN0b20gbWVzc2FnZXNcblx0Ly8gVE9ETzogV2lsbCB0aGVzZSBtZXNzYWdlcyBiZSBwYXJ0IG9mIHRyYW5zaXRpb25NZXNzYWdlcz9cblx0aWYgKGN1c3RvbU1lc3NhZ2VzICYmIGN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzKTtcblx0fVxuXG5cdC8vIEdldCB0cmFuc2l0aW9uIE1lc3NhZ2VzXG5cdGNvbnN0IHRyYW5zaXRpb25NZXNzYWdlcyA9IGdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24uY2FsbCh0aGlzLCBzaG93Qm91bmRUcmFuc2l0aW9uLCBjb250ZXh0KTtcblxuXHQvLyBVSSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGlhbG9nXG5cdGNvbnN0IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQgPSBleGVjdXRlT25CZWZvcmVTaG93TWVzc2FnZXMuY2FsbCh0aGlzLCB0cmFuc2l0aW9uTWVzc2FnZXMsIG9uQmVmb3JlU2hvd01lc3NhZ2UpO1xuXHRsZXQgeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgPSBcIkRpYWxvZ1wiIH0gPSB1aURlY2lzaW9uSW50ZXJtaXR0ZW50O1xuXHQvLyBHZXQgRmlsdGVycyBmb3IgVW5ib3VuZCBNZXNzYWdlc1xuXHRzaG93Qm91bmRUcmFuc2l0aW9uID0gdWlEZWNpc2lvbkludGVybWl0dGVudC5jb250YWluc0JvdW5kVHJhbnNpdGlvbiA/PyBzaG93Qm91bmRUcmFuc2l0aW9uO1xuXHRjb25zdCBmaWx0ZXJzID0gZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzKHNob3dCb3VuZFRyYW5zaXRpb24sIHNob3dTdGF0ZU1lc3NhZ2VzKTtcblx0bWVzc2FnZXNUb1Nob3cgPSBnZXRNZXNzYWdlc1RvU2hvdyhmaWx0ZXJzLCBtZXNzYWdlc1RvU2hvdyA/PyBbXSk7XG5cdC8vIGhhbmRsZSBjb250ZXh0IGJvdW5kIG1lc3NhZ2VzLCBJZiB0aGVyZSBpcyBhIHNpbmdsZSBtZXNzYWdlIG9mIHdoaWNoIGlzIGJvdW5kZWQgdG8gdGhlIGNvbnRleHQgdGhlbiByZW1vdmUgdGhhdCBmcm9tIHRoZSBkaWFsb2dcblx0bWVzc2FnZXNUb1Nob3cgPSBtZXNzYWdlSGFuZGxkZXI/LmZpbHRlckNvbnRleHRCb3VuZE1lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93LCBjb250ZXh0KSB8fCBtZXNzYWdlc1RvU2hvdztcblx0KHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlIH0gPSBwcm9jZXNzTWVzc2FnZXNGcm9tQ2hhbmdlc2V0RmFpbHVyZSh7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9KSk7XG5cdC8vIE1vZGlmeSBFVGFnIE1lc3NhZ2VzXG5cdGNvbnN0IGhhc0V0YWdNZXNzYWdlID0gdGhpcy5tb2RpZnlFVGFnTWVzc2FnZXNPbmx5KExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsIGNvbmN1cnJlbnRFZGl0RmxhZyk7XG5cblx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA+IDAgJiYgdWlFbGVtZW50VG9Vc2UgIT09IFwiTm9uZVwiKSB7XG5cdFx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA+IDEgJiYgcmVzb3VyY2VNb2RlbCAmJiBjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdykpIHtcblx0XHRcdGNvbnN0IGdlbmVyaWNTdWNjZXNzTWVzc2FnZSA9IGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZShyZXNvdXJjZU1vZGVsLCBtZXNzYWdlRGlhbG9nUGFyYW1ldGVyKTtcblx0XHRcdG1lc3NhZ2VzVG9TaG93ID0gZ2VuZXJpY1N1Y2Nlc3NNZXNzYWdlID8gW2dlbmVyaWNTdWNjZXNzTWVzc2FnZV0gOiBbbWVzc2FnZXNUb1Nob3dbMF1dO1xuXHRcdH1cblx0XHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlVG9TaG93ID0gbWVzc2FnZXNUb1Nob3dbMF07XG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIlRvYXN0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc0V0YWdNZXNzYWdlIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb24oKT8ubGVuZ3RoIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb25VcmwoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIHdvdWxkIHNob3cgc2luZ2xlIG1lc3NhZ2UgaW4gbWVzc2FnZSBib3ggb25seSB3aGVuOlxuXHRcdFx0XHQvLyAxLiBJdCBpcyBub3QgYW4gRXRhZyBtZXNzYWdlLlxuXHRcdFx0XHQvLyAyLiBUaGVyZSBpcyBubyBtZXNzYWdlIGRlc2NyaXB0aW9uIG9yIGRlc2NyaXB0aW9uIHVybCBhdmFpbGFibGUgZm9yIGxvbmcgdGV4dC5cblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKG1lc3NhZ2VzVG9TaG93LCBjb250cm9sLCBhY3Rpb25OYW1lLCB2aWV3VHlwZSk7XG5cdFx0fVxuXHRcdGNvbnN0IGZuR2V0TWVzc2FnZVN1YnRpdGxlID0gdWlEZWNpc2lvbkludGVybWl0dGVudC5mbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlKG9NZXNzYWdlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZXNUb1Nob3csXG5cdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g6IGhhc0V0YWdNZXNzYWdlID8gY29udGV4dCA6IHVuZGVmaW5lZCxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogc2hvd0JvdW5kVHJhbnNpdGlvblxuXHR9O1xufVxuXG4vKipcbiAqIEFkZGluZyBhIGdlbmVyaWMgc3VjY2VzcyBtZXNzYWdlIHRvIG1lc3NhZ2UgbW9kZWwgZm9yIHJlYWRhYmlsaXR5LlxuICogQHBhcmFtIHJlc291cmNlTW9kZWwgUmVzb3VyY2UgbW9kZWwgZm9yIG1lc3NhZ2UgdGV4dFxuICogQHBhcmFtIHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIFNlbGVjdGVkIGNvbnRleHRzIGZvciB3aGljaCB0aGUgbWVzc2FnZSBpcyBzaG93bi5cbiAqIEByZXR1cm5zIE1lc3NhZ2Ugd2l0aCBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gYWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlKFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcj86IFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG4pOiBNZXNzYWdlV2l0aEhlYWRlciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNlbGVjdGlvbkNvbnRleHRzID0gc2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/LmFTZWxlY3RlZENvbnRleHRzO1xuXHRpZiAoc2VsZWN0aW9uQ29udGV4dHMgJiYgQXJyYXkuaXNBcnJheShzZWxlY3Rpb25Db250ZXh0cykgJiYgc2VsZWN0aW9uQ29udGV4dHM/Lmxlbmd0aCA+IDEgJiYgcmVzb3VyY2VNb2RlbCkge1xuXHRcdGxldCBhY3Rpb25OYW1lID0gc2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/LmJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gc2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/LmVudGl0eVNldDtcblx0XHRhY3Rpb25OYW1lID0gYWN0aW9uTmFtZT8uaW5jbHVkZXMoXCIuXCIpID8gYWN0aW9uTmFtZT8uc3BsaXQoXCIuXCIpW2FjdGlvbk5hbWU/LnNwbGl0KFwiLlwiKS5sZW5ndGggLSAxXSA6IGFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBhY3Rpb25OYW1lICYmIGVudGl0eVNldE5hbWUgPyBgJHtlbnRpdHlTZXROYW1lfXwke2FjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiLCBbc2VsZWN0aW9uQ29udGV4dHM/Lmxlbmd0aF0sIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MsXG5cdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0Y29kZTogXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIlxuXHRcdH0pO1xuXHR9XG59XG4vKipcbiAqIENoZWNrIGlzIGFsbCBhcmUgc2FtZSBzdWNjZXNzIG1lc3NhZ2VzLlxuICogQHBhcmFtIG1lc3NhZ2VzVG9TaG93IEluaXRpYWwgbWVzc2FnZXMgdG8gc2hvdy5cbiAqIEByZXR1cm5zIElmIGFsbCBhcmUgc2FtZSBzdWNjZXNzIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSk6IGJvb2xlYW4ge1xuXHRsZXQgcmVmZXJlbmNlTXNnOiBNZXNzYWdlV2l0aEhlYWRlcjtcblx0Y29uc3QgY2hlY2tGYWlsZWQgPSBtZXNzYWdlc1RvU2hvdy5zb21lKChtc2csIGlkeCkgPT4ge1xuXHRcdGlmIChtc2cuZ2V0VHlwZSgpICE9PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHQvLyBOb24gc3VjY2VzcyBtZXNzYWdlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKGlkeCA9PT0gMCkge1xuXHRcdFx0Ly8gMXN0IE1lc3NhZ2Vcblx0XHRcdHJlZmVyZW5jZU1zZyA9IG1zZztcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldENvZGUoKSA9PT0gbXNnLmdldENvZGUoKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldE1lc3NhZ2UoKSA9PT0gbXNnLmdldE1lc3NhZ2UoKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldERlc2NyaXB0aW9uKCkgPT09IG1zZy5nZXREZXNjcmlwdGlvbigpICYmXG5cdFx0XHRyZWZlcmVuY2VNc2cuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gbXNnLmdldERlc2NyaXB0aW9uVXJsKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRBZGRpdGlvbmFsVGV4dCgpID09PSBtc2cuZ2V0QWRkaXRpb25hbFRleHQoKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG5cblx0cmV0dXJuICFjaGVja0ZhaWxlZDtcbn1cblxuLyoqXG4gKiBTaG93IG1lc3NhZ2VzIGluIHRoZSBkZWNpZGVkIFVJIEVsZW1lbnQuXG4gKiBAcGFyYW0gdWlEZWNpc2lvbnMgVUkgRGVjaXNpb24gdG8gYmUgdXNlZCB0byBzaG93IHRoZSBtZXNzYWdlcy5cbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyBvciByZWplY3RzIGJhc2VkIG9uIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVUkgZWxlbWVudC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VzSW5VSSh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlIH0gPSB1aURlY2lzaW9ucztcblxuXHQvLyBTaG93IERpYWxvZyAvIE1lc3NhZ2VCb3ggLyBNZXNzYWdlVG9hc3Rcblx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyBtZXNzYWdlc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fSBlbHNlIGlmICh1aUVsZW1lbnRUb1VzZSA9PT0gXCJUb2FzdFwiKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZVRvYXN0KG1lc3NhZ2VzVG9TaG93WzBdKTtcblx0fSBlbHNlIGlmICh1aUVsZW1lbnRUb1VzZSA9PT0gXCJEaWFsb2dcIikge1xuXHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wodWlEZWNpc2lvbnMpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fSBlbHNlIGlmICh1aUVsZW1lbnRUb1VzZSA9PT0gXCJCb3hcIikge1xuXHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VCb3hDb250cm9sKHVpRGVjaXNpb25zKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXQgbW9kZWwgZmlsdGVycyBmb3IgZ2V0dGluZyB0aGUgcmVsZXZhbnQgbWVzc2FnZXMuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBzaG93U3RhdGVNZXNzYWdlcyBTaG91bGQgc3RhdGUgbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcmV0dXJucyBNb2RlbCBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIGdldEZpbHRlcnNGb3JNZXNzYWdlcyhzaG93Qm91bmRUcmFuc2l0aW9uOiBib29sZWFuLCBzaG93U3RhdGVNZXNzYWdlcyA9IGZhbHNlKTogRmlsdGVyW10ge1xuXHRjb25zdCBmaWx0ZXJzID0gc2hvd1N0YXRlTWVzc2FnZXMgPyBbXSA6IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGNvbnN0IGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIlwiLCB0ZXN0OiBpc05vblRlY2huaWNhbE1lc3NhZ2UgfSk7XG5cblx0aWYgKHNob3dTdGF0ZU1lc3NhZ2VzIHx8IHNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHQvLyBBZGQgdGhlIGZpbHRlciBmb3IgYm90aCBzdGF0ZSBtZXNzYWdlcyBvciBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhhQ29udHJvbElkcyk7XG5cdFx0fTtcblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0aWYgKHNob3dCb3VuZFRyYW5zaXRpb24gJiYgIXNob3dTdGF0ZU1lc3NhZ2VzKSB7XG5cdFx0XHQvLyBBZGQgZXh0cmEgZmlsdGVyIGlmIG9ubHkgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgc2hvd25cblx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRcdGZpbHRlcnMucHVzaChpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBPbmx5IHVuYm91bmQgbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duXG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdGZpbHRlcnM6IFtcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0XHR0ZXN0OiAobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBcIlwiXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0aXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIGZpbHRlcnM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlKHtcblx0bWVzc2FnZXNUb1Nob3csXG5cdHVpRWxlbWVudFRvVXNlXG59OiBQaWNrPE1lc3NhZ2VVSURlY2lzaW9ucywgXCJ1aUVsZW1lbnRUb1VzZVwiIHwgXCJtZXNzYWdlc1RvU2hvd1wiPik6IFBpY2s8TWVzc2FnZVVJRGVjaXNpb25zLCBcInVpRWxlbWVudFRvVXNlXCIgfCBcIm1lc3NhZ2VzVG9TaG93XCI+IHtcblx0bGV0IHJldE1lc3NhZ2VzID0gWy4uLm1lc3NhZ2VzVG9TaG93XTtcblx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMikge1xuXHRcdC8vIFRoZXJlIGFyZSAyIG1lc3NhZ2U6XG5cdFx0Ly8gMS4gR2VuZXJpYyBlcnJvciBjaGFuZ2VzZXQgbWVzc2FnZSBhZGRlZCBieSBGRS5cblx0XHQvLyAyLiBNYWluIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgaW50ZXJhY3Rpb24uXG5cdFx0Ly8gV2UgcmVtb3ZlIHRoZSBnZW5lcmljIG1lc3NhZ2UsIHNob3cgb25seSBhbiBlbmhhbmNlZCAnTWFpbiBlcnJvciBtZXNzYWdlJyB3aXRoIGEgZ2VuZXJpYyBtZXNzc2FnZSBwcmUtdGV4dCBpbiB0aGUgbWVzc2FnZSBib3guXG5cdFx0Y29uc3QgZ2VuZXJpY01zZ3M6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkdlbmVyaWNNc2dzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRtZXNzYWdlc1RvU2hvdy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZS5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0XHRnZW5lcmljTXNncy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bm9uR2VuZXJpY01zZ3MucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAoZ2VuZXJpY01zZ3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCB7IGZlOiBmZVRlY2huaWNhbERldGFpbHMgfSA9IChnZW5lcmljTXNnc1swXS5nZXRUZWNobmljYWxEZXRhaWxzKCkgfHwge30pIGFzIEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHM7XG5cdFx0XHRpZiAoZmVUZWNobmljYWxEZXRhaWxzPy5jaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IpIHtcblx0XHRcdFx0Y29uc3QgcHJlVGV4dCA9IGZlVGVjaG5pY2FsRGV0YWlscz8uY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yO1xuXHRcdFx0XHRpZiAocHJlVGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IHRlY2hEZXRhaWxzRm9yTm9uR2VuZXJpY01lc3NhZ2U6IEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdFx0XHRcdFx0XHRmZToge1xuXHRcdFx0XHRcdFx0XHRzaW5nbGVFcnJvclByZVRleHQ6IHByZVRleHQsXG5cdFx0XHRcdFx0XHRcdHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ6IGdlbmVyaWNNc2dzWzBdLmdldElkKClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGV4aXN0aW5nVGVjaERldGFpbHMgPSBub25HZW5lcmljTXNnc1swXS5nZXRUZWNobmljYWxEZXRhaWxzKCkgPz8ge307XG5cdFx0XHRcdFx0Ly8gY29tYmluZSBleGlzdGluZyB0ZWNobmljYWwgZGV0YWlscyBpZiBhbnksIHdpdGggdGhlIGNoYW5nZSBzZXQgaW5mb3JtYXRpb24gd2Ugd2FudCB0byBhZGQuXG5cdFx0XHRcdFx0bm9uR2VuZXJpY01zZ3NbMF0uc2V0VGVjaG5pY2FsRGV0YWlscyh7IC4uLmV4aXN0aW5nVGVjaERldGFpbHMsIC4uLnRlY2hEZXRhaWxzRm9yTm9uR2VuZXJpY01lc3NhZ2UgfSk7XG5cdFx0XHRcdFx0cmV0TWVzc2FnZXMgPSBub25HZW5lcmljTXNncztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VzVG9TaG93OiByZXRNZXNzYWdlcyxcblx0XHR1aUVsZW1lbnRUb1VzZTogcmV0TWVzc2FnZXMubGVuZ3RoID09PSAxICYmIHVpRWxlbWVudFRvVXNlICE9PSBcIk5vbmVcIiA/IFwiQm94XCIgOiB1aUVsZW1lbnRUb1VzZVxuXHR9O1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY3VzdG9tIG1lc3NhZ2VzIHRvIG1lc3NhZ2UgbW9kZWwuXG4gKiBAcGFyYW0gY3VzdG9tTWVzc2FnZXMgQ3VzdG9tIG1lc3NhZ2VzIHRvIGFkZC5cbiAqL1xuZnVuY3Rpb24gYWRkQ3VzdG9tTWVzc2FnZXMoY3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSk6IHZvaWQge1xuXHRjdXN0b21NZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogQ3VzdG9tTWVzc2FnZSkge1xuXHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFNvcnRlckZvck1lc3NhZ2VzKCk6IFNvcnRlciB7XG5cdHJldHVybiBuZXcgU29ydGVyKFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAob2JqMTogTWVzc2FnZVdpdGhIZWFkZXIsIG9iajI6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0Y29uc3QgcmFua0EgPSBnZXRNZXNzYWdlUmFuayhvYmoxKTtcblx0XHRjb25zdCByYW5rQiA9IGdldE1lc3NhZ2VSYW5rKG9iajIpO1xuXG5cdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzVG9TaG93KGZpbHRlcnM6IEZpbHRlcltdLCB0cmFuc2lzdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10pOiBNZXNzYWdlV2l0aEhlYWRlcltdIHtcblx0bGV0IG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlV2l0aEhlYWRlcltdID0gWy4uLnRyYW5zaXN0aW9uTWVzc2FnZXNdO1xuXHRjb25zdCBsaXN0QmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZpbHRlcnMpLFxuXHRcdGN1cnJlbnRDb250ZXh0cyA9IGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRpZiAoY3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBpZiBmYWxzZSwgc2hvdyBtZXNzYWdlcyBpbiBkaWFsb2dcblx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0Ly8gdXNpbmcgdGhlIG1lc3NhZ2UgbW9kZWwgYWdhaW4gZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3IGFuZCB0aGVuIGZpbHRlcmluZyBvbiB0aGF0IGJpbmRpbmcgYWdhaW4gaXMgdW5uZWNlc3NhcnkuXG5cdFx0Ly8gU28gd2UgY3JlYXRlIG5ldyBqc29uIG1vZGVsIHRvIHVzZSBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcuXG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBjdXJyZW50Q29udGV4dHMubWFwKChjdXJyZW50Q29udGV4dCkgPT4gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCkpO1xuXHRcdGNvbnN0IG9VbmlxdWVPYmo6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cblx0XHRtZXNzYWdlc1RvU2hvdyA9IG1lc3NhZ2VzLmNvbmNhdChtZXNzYWdlc1RvU2hvdykuZmlsdGVyKGZ1bmN0aW9uIChvYmo6IE1lc3NhZ2UpIHtcblx0XHRcdC8vIHJlbW92ZSBlbnRyaWVzIGhhdmluZyBkdXBsaWNhdGUgbWVzc2FnZSBpZHNcblx0XHRcdHJldHVybiAhb1VuaXF1ZU9ialtvYmouZ2V0SWQoKV0gJiYgKG9VbmlxdWVPYmpbb2JqLmdldElkKCldID0gdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG1lc3NhZ2VzVG9TaG93O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZVRvYXN0KHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsIG1lc3NhZ2U6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3cobWVzc2FnZS5nZXRNZXNzYWdlKCkpO1xuXHRcdHRoaXMucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdHJlc29sdmUodW5kZWZpbmVkKTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCh1aURlY2lzaW9uOiBNZXNzYWdlVUlEZWNpc2lvbnMsIHJ1blRvVGVzdCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgRGlhbG9nPiB7XG5cdGxldCBoaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBoaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IChwYXJhbTE6IHZvaWQgfCBEaWFsb2cpID0+IHZvaWQpIHtcblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucy5wdXNoKHJlc29sdmUpO1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCBjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCB9ID0gdWlEZWNpc2lvbjtcblx0XHRjb25zdCBtZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRjb25zdCBtZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG1lc3NhZ2VEaWFsb2dNb2RlbCwgc3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRjb25zdCBzb3J0ZXIgPSBnZXRTb3J0ZXJGb3JNZXNzYWdlcygpO1xuXHRcdChtZXNzYWdlT2JqZWN0Lm1lc3NhZ2VWaWV3LmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5zb3J0KHNvcnRlcik7XG5cblx0XHRpZiAoIWRpYWxvZ0NvbnRyb2wgfHwgIWRpYWxvZ0NvbnRyb2wuaXNPcGVuKCkpIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wgPSBuZXcgRGlhbG9nKHtcblx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0fSksXG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI6IGZ1bmN0aW9uIChjb21wbGV0aW9uUHJvbWlzZTogeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9KTogdm9pZCB7XG5cdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdyk7XG5cdFx0XHRcdFx0Y29tcGxldGlvblByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdG5ldyBUZXh0KHtcblx0XHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0fSksXG5cdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIzNy41ZW1cIixcblx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG5cdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJlc29sdmVGdW5jdGlvbnMpIHtcblx0XHRcdFx0XHRcdGl0ZW0oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGlhbG9nQ29udHJvbC5yZW1vdmVBbGxDb250ZW50KCk7XG5cdFx0ZGlhbG9nQ29udHJvbC5hZGRDb250ZW50KG1lc3NhZ2VWaWV3KTtcblxuXHRcdGlmIChjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCkge1xuXHRcdFx0ZGlhbG9nQ29udHJvbC5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRleHROZWVkc0V0YWdSZWZyZXNoLmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2guZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2gucmVmcmVzaCgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZS5FbXBoYXNpemVkXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaWFsb2dDb250cm9sLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdH1cblx0XHRoaWdoZXN0UHJpb3JpdHkgPSBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkobWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0aGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhoaWdoZXN0UHJpb3JpdHkpO1xuXHRcdGRpYWxvZ0NvbnRyb2wuc2V0U3RhdGUoaGlnaGVzdFByaW9yaXR5KTtcblx0XHQoKGRpYWxvZ0NvbnRyb2wuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgQmFyKS5nZXRDb250ZW50TWlkZGxlKClbMF0gYXMgVGV4dCkuc2V0VGV4dChoaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRtZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRkaWFsb2dDb250cm9sLm9wZW4oKTtcblx0XHRpZiAocnVuVG9UZXN0KSB7XG5cdFx0XHRyZXNvbHZlKGRpYWxvZ0NvbnRyb2wpO1xuXHRcdH1cblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlQm94Q29udHJvbCh1aURlY2lzaW9uOiBNZXNzYWdlVUlEZWNpc2lvbnMpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0Y29uc3QgeyBtZXNzYWdlc1RvU2hvdyB9ID0gdWlEZWNpc2lvbjtcblx0XHRjb25zdCBtZXNzYWdlVG9TaG93ID0gbWVzc2FnZXNUb1Nob3dbMF07XG5cdFx0Y29uc3QgbWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSBtZXNzYWdlVG9TaG93LmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB7IHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQsIHNpbmdsZUVycm9yUHJlVGV4dCB9ID0gKG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIGFzIEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHMpPy5mZSA/PyB7fTtcblx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRSZXRyeUFmdGVyTWVzc2FnZShtZXNzYWdlVG9TaG93LCB0cnVlKTtcblx0XHQvLyBJZiBpdCBpcyBhIHJldHJ5IG1lc3NhZ2UsIHRoZW4gaXQgbmVlZHMgdG8gaGF2ZSB0ZWNobmljYWwgZGV0YWlscyB0byBzaG93IGl0LlxuXHRcdGNvbnN0IHNob3dNZXNzYWdlQm94ID0gcmV0cnlBZnRlck1lc3NhZ2UgPyBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA6IHRydWU7XG5cdFx0aWYgKHNob3dNZXNzYWdlQm94KSB7XG5cdFx0XHRjb25zdCBzdGFydFRhZyA9IFwiPGh0bWw+PGJvZHk+PHNwYW4gc3R5bGU9J3doaXRlLXNwYWNlOnByZS13cmFwJz5cIixcblx0XHRcdFx0Y2xvc2VUYWcgPSBcIjwvc3Bhbj48L2JvZHk+PC9odG1sPlwiO1xuXHRcdFx0bGV0IGZvcm1hdHRlZFRleHRTdHJpbmcgPSBzdGFydFRhZztcblxuXHRcdFx0Ly8gQWRkaW5nIHByZS10ZXh0IGZvciB0aGUgbWVzc2FnZXNcblx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZ308aDY+JHtyZXRyeUFmdGVyTWVzc2FnZX08L2g2Pjxicj48L2JyPmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoc2luZ2xlRXJyb3JQcmVUZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZUhlYWRlciA9IChtZXNzYWdlVG9TaG93IGFzIE1lc3NhZ2VXaXRoSGVhZGVyKT8uW1wiaGVhZGVyTmFtZVwiXVxuXHRcdFx0XHRcdFx0PyBgJHsobWVzc2FnZVRvU2hvdyBhcyBNZXNzYWdlV2l0aEhlYWRlcik/LltcImhlYWRlck5hbWVcIl19OmBcblx0XHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZ30ke3NpbmdsZUVycm9yUHJlVGV4dH08YnIvPjxici8+JHttZXNzYWdlSGVhZGVyfSBgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1lc3NhZ2VGb3JtYXR0ZWQgPSBtZXNzYWdlVG9TaG93LmdldE1lc3NhZ2UoKS5yZXBsYWNlQWxsKFwiPFwiLCBcIiZsdDtcIikucmVwbGFjZUFsbChcIj5cIiwgXCImZ3Q7XCIpO1xuXHRcdFx0Ly8gQWRkaW5nIHRoZSBtYWluIGVycm9yIG1lc3NhZ2UuXG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgbWVzc2FnZVRvU2hvdy5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBtZXNzYWdlVG9TaG93LmdldEFkZGl0aW9uYWxUZXh0KCl9OiAke21lc3NhZ2VGb3JtYXR0ZWR9JHtjbG9zZVRhZ31gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBtZXNzYWdlRm9ybWF0dGVkfSR7Y2xvc2VUYWd9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdGh0bWxUZXh0OiBNYW5hZ2VkT2JqZWN0LmVzY2FwZVNldHRpbmdzVmFsdWUoZm9ybWF0dGVkVGV4dFN0cmluZylcblx0XHRcdH0pO1xuXG5cdFx0XHRzaG93TWVzc2FnZUJveFBlclR5cGUoXG5cdFx0XHRcdGZvcm1hdHRlZFRleHQgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRvbkNsb3NlOiBjbG9zZU1lc3NhZ2VCb3guYmluZChudWxsLCBtZXNzYWdlVG9TaG93LCByZXNvbHZlLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXNzYWdlVG9TaG93XG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkPzogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzVG9SZW1vdmUgPSBbbWVzc2FnZVNob3duXTtcblx0aWYgKHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpIHtcblx0XHRjb25zdCBhbGxNc2dzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBnZW5lcmljTWVzc2FnZSA9IGFsbE1zZ3MuZmluZCgobXNnOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbXNnLmdldElkKCkgPT09IHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpO1xuXHRcdGlmIChnZW5lcmljTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZXNUb1JlbW92ZS5wdXNoKGdlbmVyaWNNZXNzYWdlKTtcblx0XHR9XG5cdH1cblx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9SZW1vdmUpO1xuXHRjYWxsQmFjayh1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBzaG93TWVzc2FnZUJveFBlclR5cGUoZm9ybWF0dGVkVGV4dDogc3RyaW5nLCBjbG9zZTogeyBvbkNsb3NlOiBGdW5jdGlvbiB9LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdHN3aXRjaCAobWVzc2FnZS5nZXRUeXBlKCkpIHtcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLldhcm5pbmc6XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBNZXNzYWdlVHlwZS5TdWNjZXNzOlxuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuSW5mb3JtYXRpb246XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRNZXNzYWdlQm94LnNob3coZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBncm91cCBuYW1lIGZvciBhbGwgbWVzc2FnZXMgaW4gYSBkaWFsb2cuXG4gKiBAcGFyYW0gYU1vZGVsRGF0YUFycmF5IE1lc3NhZ2VzIGFycmF5XG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gdmlld1R5cGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShcblx0YU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0YU1vZGVsRGF0YUFycmF5LmZvckVhY2goKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIlwiO1xuXHRcdGlmICghYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCAmJiBhTW9kZWxEYXRhLmdldENvZGU/LigpICE9PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdC8vIHVuYm91bmQgdHJhbnNpaXRvbiBtZXNzYWdlc1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH0gZWxzZSBpZiAoYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCkge1xuXHRcdFx0Ly8gTFIgZmxvd1xuXHRcdFx0aWYgKHZpZXdUeXBlID09PSBcIkxpc3RSZXBvcnRcIiAmJiBjb250cm9sPy5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lTFJUYWJsZShjb250cm9sLCBhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZpZXdUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHQvLyBPUCBEaXNwbGF5IG1vZGVcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUoYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUsIGNvbnRyb2wgYXMgVmlldyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBmb3IgTFIgdGFibGUuXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtIGFzIE1EQ1RhYmxlLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgTURDVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShcblx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG4pOiB2b2lkIHtcblx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChtZGNUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0aWYgKGlkZW50aWZpZXJDb2x1bW4pIHtcblx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlLmdldFRhcmdldHMoKT8uWzBdPy5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gPyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dIDogXCJcIjtcblx0XHRcdFx0Y29uc3QgY29sdW1uTmFtZVN1ZmZpeCA9IHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID8gYCwgJHt0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gIDogXCJcIjtcblx0XHRcdFx0bWVzc2FnZS5zZXRBZGRpdGlvbmFsVGV4dChgJHtyb3dJZGVudGlmaWVyfSR7Y29sdW1uTmFtZVN1ZmZpeH1gKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmICh0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdG1lc3NhZ2Uuc2V0QWRkaXRpb25hbFRleHQoYCR7dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRsZXQgaGVhZGVyTmFtZSA9IG1kY1RhYmxlLmdldEhlYWRlclZpc2libGUoKSAmJiB0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXI7XG5cdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdGhlYWRlck5hbWUgPSBzdWJzZWN0aW9uLmdldFRpdGxlKCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRoZWFkZXJOYW1lID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke2hlYWRlck5hbWV9YDtcblx0fVxuXHRtZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gc3Vic2VjdGlvbiBTdWJzZWN0aW9uXG4gKiBAcGFyYW0gbWRjVGFibGUgIE1EQyB0YWJsZVxuICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHZpZXdDb250ZXh0IFZpZXcncyBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBncm91cE5hbWVJc0dlbmVyYWwgSXMgcHJlc2VudCBncm91cCBuYW1lICdHZW5lcmFsJ1xuICogQHBhcmFtIGFjdGlvbk5hbWUgQWN0aW9uIG5hbWVcbiAqIEByZXR1cm5zIElmIGdyb3VwIG5hbWUgaXMgJ0dlbmVyYWwnXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRhY3Rpb25OYW1lPzogc3RyaW5nXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdG1kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKChvRWxlbWVudCkgPT4ge1xuXHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdH1cblx0fSk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7dmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHttZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChtZXNzYWdlLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRtZGNUYWJsZSxcblx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQsXG5cdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlLCBtZXNzYWdlLCBvVGFyZ2V0VGFibGVJbmZvKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShzdWJzZWN0aW9uLCBtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRncm91cE5hbWVJc0dlbmVyYWwgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdyb3VwTmFtZUlzR2VuZXJhbDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YSxcblx0XHRcdFx0XHRcdFx0b1ZpZXdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7b1ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBPUCBjb250ZXh0IHBhdGggaXMgcGFydCBvZiB0YXJnZXQsIHNldCBMYXN0IEFjdGlvbiBhcyBncm91cCBuYW1lXG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMjtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gNDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gc2V0U2VjdGlvbk5hbWVJbkdyb3VwXG4gKiBAcGFyYW0gZm5TZXRHcm91cE5hbWVcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gYW5kIFN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZyxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRmblNldEdyb3VwTmFtZTogRnVuY3Rpb25cbik6IHsgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTsgc3ViVGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm8gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVBbmRUYXJnZXRJbmZvKG9UYWJsZSwgYU1lc3NhZ2UsIG9FbGVtZW50LCBvUm93QmluZGluZyk7XG5cdG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSBvVGFibGUuZ2V0SGVhZGVyKCk7XG5cblx0bGV0IHNDb250cm9sSWQsIGJJc0NyZWF0aW9uUm93O1xuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdHNDb250cm9sSWQgPSBhTWVzc2FnZS5nZXRDb250cm9sSWRzKCkuZmluZChmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sSW5UYWJsZShvVGFibGUsIHNJZCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoYU1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpICYmIHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRmblNldEdyb3VwTmFtZShhTWVzc2FnZSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3ViVGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdGFNZXNzYWdlLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0b1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93XG5cdCk7XG5cblx0cmV0dXJuIHsgb1RhcmdldFRhYmxlSW5mbywgc3ViVGl0bGUgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIHRoZSBzdWJ0aXRsZSBiYXNlZCBvbiBUYWJsZSBSb3cvQ29sdW1uIGRhdGEuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHRhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBpc0NyZWF0aW9uUm93XG4gKiBAcGFyYW0gdGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHRpc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHJvd1N1YnRpdGxlVmFsdWU7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0Y29uc3QgdGFibGVDb2xQcm9wZXJ0eSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8odGFibGVSb3dDb250ZXh0KTtcblx0Y29uc3QgY29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1lc3NhZ2UsIHRhYmxlKTtcblx0aWYgKGlzQ3JlYXRpb25Sb3cgfHwgdGFibGVSb3dDb250ZXh0Py5pc0luYWN0aXZlKCkpIHtcblx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0dGFibGVUYXJnZXRDb2xOYW1lID8gdGFibGVUYXJnZXRDb2xOYW1lIDogKGNvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0dGFibGUsXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCA9IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoICYmIHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmICh0YWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmICh0YXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhcmdldGVkQ29udHJvbCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gR2V0dGluZyB0aGUgY29sdW1uIGxhYmVsIGFuZCBpdHMgdmFsdWUgb2YgYSBzaW5nbGUgcm93XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbFZhbHVlKFxuXHRcdFx0XHRcdHRhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcm93cywgdGhlIHN1YnRpdGxlIGlzIGRpc3BsYXllZCBhcyDigJhTZWUgbWVzc2FnZSBkZXRhaWxz4oCZXG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9ERVRBSUxFRF9ST1dfSU5GT1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKGNvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbcm93U3VidGl0bGVWYWx1ZSwgdGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pfSwgJHtcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWVcblx0XHRcdFx0fWA7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAocm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgdGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtZXNzYWdlU3VidGl0bGU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSB0YWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSB0YWJsZUNvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IGJpbmRpbmdDb250ZXh0O1xuXHRpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCB7IGtleSB9ID0gdGFibGVDb2xQcm9wZXJ0eVswXTtcblx0XHRjb25zdCBvTW9kZWwgPSB0YWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aCh0YWJsZVJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRpZiAob01ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtrZXl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRLZXlDb2x1bW5JbmZvKHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmopO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzQ29udHJvbElkXG4gKiBAcmV0dXJucyBUcnVlIGlmIGNvbnRyb2wgaXMgcGFydCBvZiB0YWJsZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sSW5UYWJsZShvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpOiBVSTVFbGVtZW50W10gfCBib29sZWFuIHtcblx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpKSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGxldCBvUGFyZW50Q29udHJvbCA9IG9Db250cm9sPy5nZXRQYXJlbnQoKTtcblx0d2hpbGUgKFxuXHRcdG9QYXJlbnRDb250cm9sICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC5tLkNvbHVtbkxpc3RJdGVtXCIpXG5cdCkge1xuXHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRyZXR1cm4gISFvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0aWYgKHNQYXRoVG9CZVJlbW92ZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblxuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnN0YXJ0c1dpdGgoc1BhdGhUb0JlUmVtb3ZlZCkpXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIGJCb3VuZE1lc3NhZ2VzIFRvIGdldCBvbmx5IGJvdW5kIG1lc3NhZ2VzXG4gKiBAcGFyYW0gYlRyYW5zaXRpb25Pbmx5IFRvIGdldCBvbmx5IHRyYW5zaXRpb24gbWVzc2FnZXNcbiAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkIEZpbHRlciBvdXQgYm91bmQgbWVzc2FnZXMgd2l0aCBwYXRoXG4gKiBAcmV0dXJucyBNZXNzYWdlc1xuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcyA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHkgPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLmdldFBlcnNpc3RlbnQoKSkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIikgfHxcblx0XHRcdFx0KCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gfHwgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldENvZGUoKSA9PT0gXCI1MDNcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkgIT09IFwiXCIgJiZcblx0XHRcdCFhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKS5pbmNsdWRlcyhvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnNldE1lc3NhZ2UoXG5cdFx0XHRcdGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke2FUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpfWBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8vRmlsdGVyaW5nIG1lc3NhZ2VzIGFnYWluIGhlcmUgdG8gYXZvaWQgc2hvd2luZyBwdXJlIHRlY2huaWNhbCBtZXNzYWdlcyByYWlzZWQgYnkgdGhlIG1vZGVsXG5cdGNvbnN0IGJhY2tlbmRNZXNzYWdlczogTWVzc2FnZVtdID0gYVRyYW5zaXRpb25NZXNzYWdlcy5maWx0ZXIoaXNOb25UZWNobmljYWxNZXNzYWdlKTtcblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKTogc3RyaW5nIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb0VzY2FwZSA9IGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoYCR7Zm5SZWdFeHBlc2NhcGUoY29udGV4dFBhdGhUb0VzY2FwZSl9XFxcXCguKlxcXFwpL2ApO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIG1hdGNoaW5nIHRoZSBtZXNzYWdlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbmRUYXJnZXRJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZ1xuKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0Y29uc3Qgb1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gb0VsZW1lbnQ/LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChyb3dDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gcm93Q29udGV4dCAmJiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihyb3dDb250ZXh0LmdldFBhdGgoKSkgPT09IDA7XG5cdFx0fSlcblx0fTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKiBAcGFyYW0gc2VjdGlvblxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBiTXVsdGlwbGVTdWJTZWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRUYWJsZUluZm9cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcGFyYW0gaW5jbHVkZVRhYmxlR3JvdXBOYW1lXG4gKiBAcmV0dXJucyBHcm91cCBuYW1lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRpbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlXG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdHNlY3Rpb24uZ2V0VGl0bGUoKSArXG5cdFx0KHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSAmJiBiTXVsdGlwbGVTdWJTZWN0aW9ucyA/IGAsICR7c3ViU2VjdGlvbi5nZXRUaXRsZSgpfWAgOiBcIlwiKSArXG5cdFx0KG9UYXJnZXRUYWJsZUluZm8gJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciAmJiBpbmNsdWRlVGFibGVHcm91cE5hbWVcblx0XHRcdD8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YFxuXHRcdFx0OiBcIlwiKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBiSXNPcnBoYW5FbGVtZW50KG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIWFFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChvRWxlbSkge1xuXHRcdGxldCBvUGFyZW50RWxlbWVudCA9IG9FbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdHdoaWxlIChvUGFyZW50RWxlbWVudCAmJiBvUGFyZW50RWxlbWVudCAhPT0gb0VsZW0pIHtcblx0XHRcdG9QYXJlbnRFbGVtZW50ID0gb1BhcmVudEVsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyZW50RWxlbWVudCA/IHRydWUgOiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBmaWx0ZXJzIGFuZCBnaXZlcyBiYWNrIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgY29udGV4dCBwYXNzZWQuXG4gKiBAcGFyYW0gY29udGV4dFxuICogQHJldHVybnMgTWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzRm9yQ29udGV4dChjb250ZXh0OiBDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPiAwICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLnN0YXJ0c1dpdGgoY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0fSlcblx0KTtcblx0Y29uc3QgY3VycmVudENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdHJldHVybiBjdXJyZW50Q29udGV4dHMubWFwKChjdXJyZW50Q29udGV4dCkgPT4gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCkpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYm9vbGVhbiB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIHByZXNlbnQgaW4gdGhlIGRpYWxvZyBiYXNlZCBvbiB0aGUgY29udHJvbCBJZHMuXG4gKiBAcGFyYW0gY29udHJvbElkcyBBcnJheSBvZiBjb250cm9sIElkc1xuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgdGFyZ2V0IHByZXNlbnQgaW4gdGhlIGRpYWxvZy5cbiAqL1xuZnVuY3Rpb24gaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coY29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0bGV0IG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCwgZXJyb3JGaWVsZENvbnRyb2w7XG5cdGNvbnN0IGluZGV4ID0gSW5maW5pdHk7XG5cdGlmIChjb250cm9sSWRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWRzWzBdKTtcblx0XHRlcnJvckZpZWxkQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkc1swXSkgYXMgVUk1RWxlbWVudDtcblx0fSBlbHNlIHtcblx0XHRsZXQgZXJyb3JDb250cm9sSWQ7XG5cdFx0Y29udHJvbElkcy5mb3JFYWNoKChjb250cm9sSWQpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZCk7XG5cdFx0XHRpZiAoY29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRlcnJvckNvbnRyb2xJZCA9IGNvbnRyb2xJZDtcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGVycm9yQ29udHJvbElkKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9IEluZmluaXR5O1xuXHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbD8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdC8vIG1lc3NhZ2VzIHdpdGggdGFyZ2V0IGluc2lkZSBzYXAubS5EaWFsb2cgc2hvdWxkIG5vdCBicmluZyB1cCB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIFRyYW5zaXRpb24gbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQgcGF0aCB3aGVuIHRoZSBvYmplY3QgcGFnZSBpcyBjbG9zZWQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dCBmb3Igd2hpY2ggdGhlIG1lc3NhZ2VzIGFyZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiByZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0KG9Db250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGNvbnN0IGlzTWVzc2FnZVN0cmlwTWVzc2FnZTogTWVzc2FnZVtdID0gW107XG5cblx0bWVzc2FnZXNJbk1vZGVsPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0Y29uc3QgaXNTaW5nbGVUYXJnZXQgPSBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDE7XG5cdFx0Y29uc3QgaXNUYXJnZXRNYXRjaGluZyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBvQ29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpdGlvbk1lc3NhZ2UgPSBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZTtcblxuXHRcdGlmIChpc1NpbmdsZVRhcmdldCAmJiBpc1RhcmdldE1hdGNoaW5nICYmIGlzVHJhbnNpdGlvbk1lc3NhZ2UpIHtcblx0XHRcdGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5wdXNoKG1lc3NhZ2UpO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5sZW5ndGggPT09IDEpIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoaXNNZXNzYWdlU3RyaXBNZXNzYWdlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBjb250ZXh0IGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwgd2hlbiB0aGVyZSBpcyBlcnJvciBvbiB0aGUgZGlhbG9nIGFuZCB3aGVuIHRoZSBkaWFsb2cgaXMgb3Blbi5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbChtZXNzYWdlcz86IE1lc3NhZ2VbXSwgY29udGV4dHM/OiBDb250ZXh0W10pOiB2b2lkIHtcblx0Y29uc3QgYm91bmRDb250ZXh0TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoY29udGV4dHM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdG1lc3NhZ2VzPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gY29udGV4dHM/LlswXT8uZ2V0UGF0aCgpICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhib3VuZENvbnRleHRNZXNzYWdlcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgZnJvbSBzaG93aW5nIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHJldHVybnMgQXJyYXkgb2YgbWVzc2FnZXMgYWZ0ZXIgcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuICovXG5mdW5jdGlvbiByZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyhtZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVtdIHtcblx0Y29uc3QgbWVzc2FnZXNUb0JlUmVtb3ZlZCA9IG1lc3NhZ2VzPy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKTtcblx0bWVzc2FnZXMgPSBtZXNzYWdlcz8uZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZXNUb0JlUmVtb3ZlZD8uaW5jbHVkZXMobWVzc2FnZSkpO1xuXHRyZXR1cm4gbWVzc2FnZXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFsbFRyYW5zaXRpb25NZXNzYWdlc0ZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHQuZ2V0RGF0YSgpXG5cdFx0Py5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlVGFyZ2V0cyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpO1xuXHRcdFx0aWYgKG1lc3NhZ2VUYXJnZXRzLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlVGFyZ2V0c1swXS5pbmNsdWRlcyhjb250ZXh0LmdldFBhdGgoKSkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkpIHtcblx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqIEBuYW1lc3BhY2VcbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdGdldFVJRGVjaXNpb25zOiBnZXRVSURlY2lzaW9ucyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiBnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24sXG5cdGdldE1lc3NhZ2VSYW5rOiBnZXRNZXNzYWdlUmFuayxcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3M6IGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzLFxuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3csXG5cdGdldEZpbHRlcnNGb3JNZXNzYWdlczogZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzLFxuXHRzaG93TWVzc2FnZXNJblVJOiBzaG93TWVzc2FnZXNJblVJLFxuXHRzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2w6IHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCxcblx0c2hvd01lc3NhZ2VUb2FzdDogc2hvd01lc3NhZ2VUb2FzdCxcblx0c2hvd01lc3NhZ2VCb3hDb250cm9sOiBzaG93TWVzc2FnZUJveENvbnRyb2wsXG5cdGdldE1lc3NhZ2VzRm9yQ29udGV4dDogZ2V0TWVzc2FnZXNGb3JDb250ZXh0LFxuXHRpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZzogaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2csXG5cdHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbDogcmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsLFxuXHRyZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZzogcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2csXG5cdHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlLFxuXHR1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZTogdXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGUsXG5cdHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlOiB1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZSxcblx0Y2xvc2VNZXNzYWdlQm94OiBjbG9zZU1lc3NhZ2VCb3gsXG5cdHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQ6IHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQsXG5cdGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzOiBjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyxcblx0YWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlOiBhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UsXG5cdGlzTm9uVGVjaG5pY2FsTWVzc2FnZTogaXNOb25UZWNobmljYWxNZXNzYWdlLFxuXHRyZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0OiByZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBZ0RBLE1BQU1BLFVBQVUsR0FBR0MsSUFBSSxDQUFDRCxVQUFVO0VBQ2xDLElBQUlFLGlCQUFzRCxH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
1607
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwibXNnVmlldyIsImdldENvbnRlbnQiLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiZ2V0TW9kZWwiLCJzZXREYXRhIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiYk1lc3NhZ2VEaWFsb2ciLCJkTm93IiwiRGF0ZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImdldE1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic29tZSIsIm1lc3NhZ2UiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwibXVsdGk0MTIiLCJvTWVzc2FnZVRlbXBsYXRlIiwiZGVzY3JpcHRpb25CaW5kaW5nIiwidGVjaG5pY2FsRGV0YWlsc0JpbmRpbmciLCJNZXNzYWdlSXRlbSIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbiIsInNob3dCb3VuZFRyYW5zaXRpb24iLCJfY29udGV4dCIsInRyYW5zaXRpb25NZXNzYWdlcyIsImNvbmNhdCIsImV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlc1RvU2hvdyIsInVpRWxlbWVudFRvVXNlIiwiZm5HZXRNc2dTdWJ0aXRsZSIsInNob3dCb3VuZE1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiZ2V0VUlEZWNpc2lvbnMiLCJjdXN0b21NZXNzYWdlcyIsImNvbnRleHQiLCJhcmd1bWVudHMiLCJjb250cm9sIiwiYWN0aW9uTmFtZSIsInZpZXdUeXBlIiwic2hvd1N0YXRlTWVzc2FnZXMiLCJtZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwicmVzb3VyY2VNb2RlbCIsIm1lc3NhZ2VIYW5kbGRlciIsImFkZEN1c3RvbU1lc3NhZ2VzIiwiY2FsbCIsInVpRGVjaXNpb25JbnRlcm1pdHRlbnQiLCJmaWx0ZXJzIiwiZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXNUb1Nob3ciLCJmaWx0ZXJDb250ZXh0Qm91bmRNZXNzYWdlcyIsInByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlIiwiaGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMiLCJnZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJtZXNzYWdlVG9TaG93IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsInNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwic2VsZWN0aW9uQ29udGV4dHMiLCJhU2VsZWN0ZWRDb250ZXh0cyIsIkFycmF5IiwiaXNBcnJheSIsImJvdW5kQWN0aW9uTmFtZSIsImVudGl0eVNldE5hbWUiLCJlbnRpdHlTZXQiLCJpbmNsdWRlcyIsInNwbGl0Iiwic3VmZml4UmVzb3VyY2VLZXkiLCJNZXNzYWdlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImNvZGUiLCJyZWZlcmVuY2VNc2ciLCJjaGVja0ZhaWxlZCIsIm1zZyIsImlkeCIsImdldE1lc3NhZ2UiLCJnZXRBZGRpdGlvbmFsVGV4dCIsInNob3dNZXNzYWdlc0luVUkiLCJ1aURlY2lzaW9ucyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvd01lc3NhZ2VUb2FzdCIsInNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCIsInNob3dNZXNzYWdlQm94Q29udHJvbCIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciIsInRlc3QiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nIiwicHVzaCIsImNhc2VTZW5zaXRpdmUiLCJFUSIsImdldFRhcmdldHMiLCJhbmQiLCJfcmVmIiwicmV0TWVzc2FnZXMiLCJnZW5lcmljTXNncyIsIm5vbkdlbmVyaWNNc2dzIiwiZmUiLCJmZVRlY2huaWNhbERldGFpbHMiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJwcmVUZXh0IiwidGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZSIsInNpbmdsZUVycm9yUHJlVGV4dCIsInNpbmdsZUdlbmVyaWNNZXNzYWdlSWQiLCJnZXRJZCIsImV4aXN0aW5nVGVjaERldGFpbHMiLCJzZXRUZWNobmljYWxEZXRhaWxzIiwibWVzc2FnZUNvZGUiLCJ0ZXh0IiwiZ2V0U29ydGVyRm9yTWVzc2FnZXMiLCJTb3J0ZXIiLCJvYmoxIiwib2JqMiIsInJhbmtBIiwiZ2V0TWVzc2FnZVJhbmsiLCJyYW5rQiIsInRyYW5zaXN0aW9uTWVzc2FnZXMiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiY3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZXMiLCJtYXAiLCJjdXJyZW50Q29udGV4dCIsIm9VbmlxdWVPYmoiLCJmaWx0ZXIiLCJvYmoiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwidWlEZWNpc2lvbiIsInJ1blRvVGVzdCIsImhpZ2hlc3RQcmlvcml0eSIsImhpZ2hlc3RQcmlvcml0eVRleHQiLCJyZXNvdXJjZUJ1bmRsZSIsInN0cmljdEhhbmRsaW5nRmxvdyIsIm1lc3NhZ2VEaWFsb2dNb2RlbCIsIkpTT05Nb2RlbCIsIm1lc3NhZ2VPYmplY3QiLCJzb3J0ZXIiLCJnZXRCaW5kaW5nIiwic29ydCIsImlzT3BlbiIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImVuZEJ1dHRvbiIsImVzY2FwZUhhbmRsZXIiLCJjb21wbGV0aW9uUHJvbWlzZSIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJjbG9zZU9uTmF2aWdhdGlvbiIsImFmdGVyQ2xvc2UiLCJpdGVtIiwicmVtb3ZlQWxsQ29udGVudCIsImFkZENvbnRlbnQiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJyZXRyeUFmdGVyTWVzc2FnZSIsInN0YXJ0VGFnIiwiY2xvc2VUYWciLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwibWVzc2FnZUhlYWRlciIsIm1lc3NhZ2VGb3JtYXR0ZWQiLCJyZXBsYWNlQWxsIiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1hbmFnZWRPYmplY3QiLCJlc2NhcGVTZXR0aW5nc1ZhbHVlIiwic2hvd01lc3NhZ2VCb3hQZXJUeXBlIiwib25DbG9zZSIsImNsb3NlTWVzc2FnZUJveCIsImJpbmQiLCJtZXNzYWdlU2hvd24iLCJjYWxsQmFjayIsIm1lc3NhZ2VzVG9SZW1vdmUiLCJhbGxNc2dzIiwiZ2V0RGF0YSIsImdlbmVyaWNNZXNzYWdlIiwiZmluZCIsInBhcmFtZXRlcnMiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsImluZm9ybWF0aW9uIiwiYU1vZGVsRGF0YUFycmF5Iiwic0FjdGlvbk5hbWUiLCJhTW9kZWxEYXRhIiwiZ2VuZXJhbEdyb3VwVGV4dCIsImlzQSIsInNldEdyb3VwTmFtZUxSVGFibGUiLCJzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlIiwiZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lIiwib0VsZW0iLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJzRWxlbWVCaW5kaW5nUGF0aCIsImdldFBhdGgiLCJpbmRleE9mIiwiYWxsUm93Q29udGV4dHMiLCJyb3dDb250ZXh0IiwiY29udGV4dFBhdGgiLCJpZGVudGlmaWVyQ29sdW1uIiwiZ2V0UGFyZW50IiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInJvd0lkZW50aWZpZXIiLCJjb2x1bW5Qcm9wZXJ0eU5hbWUiLCJnZXRUYWJsZUNvbFByb3BlcnR5Iiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldFRhYmxlQ29sSW5mbyIsImdldEhlYWRlciIsInVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlIiwibWRjVGFibGUiLCJ0YXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsImNvbHVtbk5hbWVTdWZmaXgiLCJzZXRBZGRpdGlvbmFsVGV4dCIsInVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlIiwic3Vic2VjdGlvbiIsImhlYWRlck5hbWUiLCJnZXRIZWFkZXJWaXNpYmxlIiwidGFibGVIZWFkZXIiLCJnZXRUaXRsZSIsInNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZSIsInZpZXdDb250ZXh0IiwiZ3JvdXBOYW1lSXNHZW5lcmFsIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiY2hpbGRUYWJsZUVsZW1lbnQiLCJmaW5kRWxlbWVudHMiLCJvRWxlbWVudCIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJmbkNhbGxiYWNrU2V0R3JvdXBOYW1lIiwib1RhcmdldFRhYmxlSW5mbyIsIm9WaWV3Q29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib3BMYXlvdXQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsInNMYXN0QWN0aW9uVGV4dCIsInRvU3RyaW5nIiwiYU1lc3NhZ2UiLCJvVGFibGUiLCJmblNldEdyb3VwTmFtZSIsImdldFRhYmxlQW5kVGFyZ2V0SW5mbyIsInNDb250cm9sSWQiLCJiSXNDcmVhdGlvblJvdyIsIm9UYWJsZVJvd0NvbnRleHQiLCJnZXRDb250cm9sSWRzIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsIm9Db250cm9sIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3ciLCJnZXRQZXJzaXN0ZW50Iiwic3ViVGl0bGUiLCJnZXRNZXNzYWdlU3VidGl0bGUiLCJvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJ0YWJsZVJvd0JpbmRpbmdDb250ZXh0cyIsInRhYmxlUm93Q29udGV4dCIsInRhYmxlVGFyZ2V0Q29sTmFtZSIsInRhYmxlIiwiaXNDcmVhdGlvblJvdyIsInRhcmdldGVkQ29udHJvbCIsIm1lc3NhZ2VTdWJ0aXRsZSIsInJvd1N1YnRpdGxlVmFsdWUiLCJnZXRSZXNvdXJjZU1vZGVsIiwidGFibGVDb2xQcm9wZXJ0eSIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImlzSW5hY3RpdmUiLCJsYWJlbCIsInRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbiIsInRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoIiwidGFibGVDb2xUZXh0QXJyYW5nZW1lbnQiLCJnZXRWYWx1ZSIsImdldFRhYmxlQ29sVmFsdWUiLCJvQ29sdW1uSW5mbyIsImRldGVybWluZUNvbHVtbkluZm8iLCJzQ29sdW1uSW5kaWNhdG9yIiwic0NvbHVtblZhbHVlIiwiYmluZGluZ0NvbnRleHQiLCJrZXkiLCJvTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJwb3AiLCJnZXRLZXlDb2x1bW5JbmZvIiwib0NvbEZyb21UYWJsZVNldHRpbmdzIiwiYXZhaWxhYmlsaXR5Iiwib1BhcmVudENvbnRyb2wiLCJzSGlnaGVzdFByaW9yaXR5IiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsInN0YXJ0c1dpdGgiLCJvQ29udGV4dCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImJhY2tlbmRNZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib01lc3NhZ2VPYmplY3QiLCJmbkZpbHRlclVwb25JZHMiLCJhIiwiYiIsIm9Db250ZXh0UGF0aCIsImZuUmVnRXhwZXNjYXBlIiwicyIsInJlcGxhY2UiLCJjb250ZXh0UGF0aFRvRXNjYXBlIiwiUmVnRXhwIiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJvVGFibGVUYXJnZXRDb2wiLCJnZXRDb2x1bW5zIiwiY29sdW1uIiwiZ2V0UHJvcGVydHlLZXkiLCJvQ3VzdG9tQ29sdW1uIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0Q29sdW1uc0ZvciIsIm9Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwibmFtZSIsImFDb2x1bW5zIiwiY29sdW1uRGVmaW5pdGlvbiIsInByb3BlcnR5SW5mbyIsImJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSIsIm9UYWJsZUNvbEluZm8iLCJvSXRlbSIsImNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUiLCJzZWN0aW9uIiwiYk11bHRpcGxlU3ViU2VjdGlvbnMiLCJpbmNsdWRlVGFibGVHcm91cE5hbWUiLCJiSXNPcnBoYW5FbGVtZW50IiwiYUVsZW1lbnRzIiwib1BhcmVudEVsZW1lbnQiLCJnZXRNZXNzYWdlc0ZvckNvbnRleHQiLCJjb250cm9sSWRzIiwiZXJyb3JGaWVsZENvbnRyb2wiLCJpbmRleCIsIkluZmluaXR5IiwiZXJyb3JDb250cm9sSWQiLCJjb250cm9sSWQiLCJmaWVsZFJhbmtpbkRpYWxvZyIsImZvY3VzIiwicmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImlzTWVzc2FnZVN0cmlwTWVzc2FnZSIsImlzU2luZ2xlVGFyZ2V0IiwiaXNUYXJnZXRNYXRjaGluZyIsImlzVHJhbnNpdGlvbk1lc3NhZ2UiLCJyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwiLCJjb250ZXh0cyIsImJvdW5kQ29udGV4dE1lc3NhZ2VzIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJtZXNzYWdlc1RvQmVSZW1vdmVkIiwicmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dCIsIm1lc3NhZ2VUYXJnZXRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21NZXNzYWdlLCBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbHVtblByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBNTGliIGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9tZXNzYWdlL01lc3NhZ2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVUlUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcblxuY29uc3QgQnV0dG9uVHlwZSA9IE1MaWIuQnV0dG9uVHlwZTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogKChwYXJhbTE6IHZvaWQgfCBEaWFsb2cpID0+IHZvaWQpW10gPSBbXTtcbmxldCBkaWFsb2dDb250cm9sOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VXaXRoSGVhZGVyID0gTWVzc2FnZSAmIHtcblx0aGVhZGVyTmFtZT86IHN0cmluZztcblx0dGFyZ2V0Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsVGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dGFibGVIZWFkZXI/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRVSUVsZW1lbnQgPSBcIkRpYWxvZ1wiIHwgXCJCb3hcIiB8IFwiVG9hc3RcIiB8IFwiTm9uZVwiO1xuXG4vLyBGRSByZWxhdGVkIHRlY2huaWNhbCBpbmZvcm1hdGlvbiB0byBiZSBzdG9yZWQgd2l0aCB0aGUgbWVzc2FnZS5cbi8vIExpa2UsIHRoaXMgd291bGQgYmUgdXNlZCB0byBzdG9yZSBwcmUtdGV4dCB3aXRoIHRoZSBtZXNzYWdlIHdoZW4gaXQgaXMgdGhlIG9ubHkgbWVzc2FnZSB0byBiZSBzaG93biBpbiBVSS5cbnR5cGUgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG9iamVjdCAmIHtcblx0ZmU/OiB7XG5cdFx0Y2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yPzogc3RyaW5nO1xuXHRcdHNpbmdsZUVycm9yUHJlVGV4dD86IHN0cmluZztcblx0XHRzaW5nbGVHZW5lcmljTWVzc2FnZUlkPzogc3RyaW5nO1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVVJRGVjaXNpb25zID0ge1xuXHR1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50O1xuXHRtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVtdO1xuXHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbjtcblx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g/OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGlzTm9uVGVjaG5pY2FsTWVzc2FnZTogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IGJvb2xlYW47XG5cdGdldE1lc3NhZ2VzOiAoYkJvdW5kTWVzc2FnZXM/OiBib29sZWFuLCBiVHJhbnNpdGlvbk9ubHk/OiBib29sZWFuLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSA9PiBNZXNzYWdlW107XG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW47XG5cdGdldFVJRGVjaXNpb25zOiAoXG5cdFx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRzaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdGNvbnRyb2w/OiBDb250cm9sLFxuXHRcdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRcdHZpZXdUeXBlPzogc3RyaW5nLFxuXHRcdHNob3dTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbixcblx0XHRtZXNzYWdlRGlhbG9nUGFyYW1ldGVyPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0cmVzb3VyY2VNb2RlbD86IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI/OiBNZXNzYWdlSGFuZGxlclxuXHQpID0+IE1lc3NhZ2VVSURlY2lzaW9ucztcblx0c2hvd01lc3NhZ2VzSW5VSTogKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IChzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSA9PiB2b2lkO1xuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogKG9NZXNzYWdlOiBNZXNzYWdlLCBiTWVzc2FnZURpYWxvZz86IHRydWUpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiAoXG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRcdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdFx0aXNNdWx0aTQxMj86IGJvb2xlYW5cblx0KSA9PiB7XG5cdFx0bWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRcdG9CYWNrQnV0dG9uOiBCdXR0b247XG5cdH07XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IChzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBVSTVFbGVtZW50W107XG5cdGZuRmlsdGVyVXBvbklkczogKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpID0+IGJvb2xlYW47XG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nXG5cdCkgPT4gVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRpbmNsdWRlVGFibGVHcm91cE5hbWU/OiBib29sZWFuXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuXHQpID0+IENvbEluZm9BbmRTdWJ0aXRsZVR5cGU7XG5cdGdldFRhYmxlQ29sSW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IChvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKSA9PiBzdHJpbmc7XG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKSA9PiBDb2x1bW5JbmZvVHlwZTtcblx0ZmV0Y2hDb2x1bW5JbmZvOiAob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKSA9PiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0Z2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiAoXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0dGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzXG5cdCkgPT4gQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGdldE1lc3NhZ2VSYW5rOiAob2JqOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbnVtYmVyO1xuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbikgPT4gdm9pZDtcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KSA9PiB2b2lkO1xuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiAoXG5cdFx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdFx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiAoY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cdGlzQ29udHJvbEluVGFibGU6IChvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpID0+IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW47XG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiAob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdGdldEZpbHRlcnNGb3JNZXNzYWdlczogKHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIHNob3dTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbikgPT4gRmlsdGVyW107XG5cdHNob3dNZXNzYWdlVG9hc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBydW5Ub1Rlc3Q/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQgfCBEaWFsb2c+O1xuXHRzaG93TWVzc2FnZUJveENvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRNZXNzYWdlc0ZvckNvbnRleHQ6IChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gTWVzc2FnZVtdO1xuXHRpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZzogKGFDb250cm9sSWRzOiBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsOiAobWVzc2FnZXM/OiBNZXNzYWdlW10sIGNvbnRleHQ/OiBDb250ZXh0W10pID0+IHZvaWQ7XG5cdHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiAoTWVzc2FnZXM6IE1lc3NhZ2VbXSkgPT4gTWVzc2FnZVtdO1xuXHRzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0XHRncm91cE5hbWVJc0dlbmVyYWw6IGJvb2xlYW4sXG5cdFx0YWN0aW9uTmFtZT86IHN0cmluZ1xuXHQpOiBib29sZWFuO1xuXHR1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShtZGNUYWJsZTogTURDVGFibGUsIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCB0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUpOiB2b2lkO1xuXHR1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShcblx0XHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRtZGNUYWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG5cdCk6IHZvaWQ7XG5cdGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBzdHJpbmcpOiB2b2lkO1xuXHRyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0OiAob0NvbnRleHQ6IENvbnRleHQpID0+IHZvaWQ7XG5cdGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzOiAobWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10pID0+IGJvb2xlYW47XG5cdGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZTogKFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuXHQpID0+IE1lc3NhZ2VXaXRoSGVhZGVyIHwgdW5kZWZpbmVkO1xuXHRyZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0OiAoY29udGV4dDogQ29udGV4dCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpOiBzdHJpbmcge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHJpbmcoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpOiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH1bXSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgdHlwZW9mIG9NZXNzYWdlQ291bnRdO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSwgaTogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIChvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIgJiYgb1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uKSB7XG5cdFx0XHRpZiAoY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnNldFRhcmdldHMoW1wiXCJdKTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKTogdm9pZCB7XG5cdGRpYWxvZ0NvbnRyb2wuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGNvbnN0IG1zZ1ZpZXcgPSBkaWFsb2dDb250cm9sLmdldENvbnRlbnQoKVswXSBhcyBNZXNzYWdlVmlldztcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG1zZ1ZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0fVxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG59XG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKX0gJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgYXJlIGFueSB3YXJuaW5nIG9yIGVycm9yIG1lc3NhZ2VzKGJvdW5kIGFuZCB1bmJvdW5kKS4uXG4gKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgZXhpc3RlbmNlIG9mIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gWy4uLmdldE1lc3NhZ2VzKHVuZGVmaW5lZCwgdHJ1ZSksIC4uLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpXS5zb21lKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKFxuXHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdG11bHRpNDEyPzogYm9vbGVhblxuKToge1xuXHRtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdG9CYWNrQnV0dG9uOiBCdXR0b247XG59IHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkJpbmRpbmcgPSAnez0gJHtkZXNjcmlwdGlvbn0gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0RGVzY3JpcHRpb24oKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdGNvbnN0IHRlY2huaWNhbERldGFpbHNCaW5kaW5nID1cblx0XHRcdCd7PSAke3RlY2huaWNhbERldGFpbHN9ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGdyb3VwTmFtZTogXCJ7aGVhZGVyTmFtZX1cIixcblx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkJpbmRpbmcgKyB0ZWNobmljYWxEZXRhaWxzQmluZGluZyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobXVsdGk0MTIpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJ7ZGVzY3JpcHRpb259XCIsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRtZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGUsXG5cdFx0XHRsZW5ndGg6IDk5OTlcblx0XHR9XG5cdH0pO1xuXHRtZXNzYWdlVmlldy5zZXRHcm91cEl0ZW1zKHRydWUpO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pOiB2b2lkIHtcblx0XHRcdFx0bWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRtZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c/OiBib29sZWFuO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRmaWx0ZXJlZE1lc3NhZ2VzPzogTWVzc2FnZVtdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb24/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gaXNOb25UZWNobmljYWxNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0KHRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdCgodGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0KHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gbnVsbCkpKSB8fFxuXHRcdG1lc3NhZ2UuZ2V0Q29kZSgpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdHJhbnNpdGlvbiBtZXNzYWdlcyBmb3IgY3JlYXRpbmcgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBfY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcmV0dXJucyBUcmFuc2l0aW9uIG1lc3NhZ2VzIHJlbGV2YW50IHRvIHNob3cgaW4gVUkuXG4gKi9cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24odGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSwgc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgX2NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0bGV0IHRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0aWYgKHNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHQvL2JvdW5kIFRyYW5zaXN0aW9uIE1lc3NhZ2VzXG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzID0gdHJhbnNpdGlvbk1lc3NhZ2VzLmNvbmNhdCh0aGlzLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0fVxuXHRyZXR1cm4gdHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgJ29uQmVmb3JlU2hvd01lc3NhZ2VzJyBjYWxsYmFjayB0byBsZXQgdGhlIGNhbGxlciBpbmZsdWVuY2UgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gdHJhbnNpdGlvbk1lc3NhZ2VzIFRyYW5zaXRpb24gbWVzc2FnZXMuXG4gKiBAcGFyYW0gb25CZWZvcmVTaG93TWVzc2FnZSBDYWxsYmFjay5cbiAqIEByZXR1cm5zIFNob3dNZXNzYWdlUGFyYW1ldGVycyBJbmZyb21hdGlvbiB0byBjaGFuZ2UgVUkgZGVjaXNpb24gYmFzZWQgb24gb25CZWZvcmVTaG93TWVzc2FnZXMgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyhcblx0dHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnNcbik6IHtcblx0dWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudDtcblx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW107XG5cdGZuR2V0TWVzc2FnZVN1YnRpdGxlPzogRnVuY3Rpb247XG5cdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZz86IGJvb2xlYW47XG5cdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbjtcbn0ge1xuXHRsZXQgbWVzc2FnZXNUb1Nob3cgPSBbLi4udHJhbnNpdGlvbk1lc3NhZ2VzXTtcblx0bGV0IHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQgPVxuXHRcdHRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgdHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIiA/IFwiQm94XCIgOiBcIkRpYWxvZ1wiO1xuXHRsZXQgZm5HZXRNc2dTdWJ0aXRsZTogRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGxldCBzaG93Qm91bmRNZXNzYWdlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRpZiAob25CZWZvcmVTaG93TWVzc2FnZSkge1xuXHRcdC8vIFRoZSBjYWxsYmFjayBvbkJlZm9yZVNob3dNZXNzYWdlIGFsdGVycyB0aGUgVUlFbGVtZW50IHRvIHVzZSBpbiBhIGRpZmZlcmVudCBmb3JtYXQoc2hvd01lc3NhZ2VEaWFsb2cgYW5kIHNob3dNZXNzYWdlQm94KS5cblx0XHRjb25zdCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nOiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJEaWFsb2dcIixcblx0XHRcdHNob3dNZXNzYWdlQm94OiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJCb3hcIlxuXHRcdH07XG5cdFx0Y29uc3Qge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3gsXG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyxcblx0XHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyxcblx0XHRcdGZpbHRlcmVkTWVzc2FnZXMsXG5cdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvblxuXHRcdH0gPSBvbkJlZm9yZVNob3dNZXNzYWdlKHRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3ggPT09IHRydWUpIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nID09PSB0cnVlKSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJOb25lXCI7XG5cdFx0fVxuXHRcdHNob3dCb3VuZE1lc3NhZ2VzID0gY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uO1xuXHRcdGZuR2V0TXNnU3VidGl0bGUgPSBmbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIHx8IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiA9PT0gZmFsc2UpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93ID0gZmlsdGVyZWRNZXNzYWdlcyA/PyBbXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBmbkdldE1zZ1N1YnRpdGxlLFxuXHRcdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBzaG93Qm91bmRNZXNzYWdlc1xuXHR9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBVSSBkZWNpc2lvbnMgZm9yIHNob3dpbmcgbWVzc2FnZXMuXG4gKlxuICogVGhlc2Ugc2hhbGwgY29udGFpbiB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgdGhlIFVJIGVsZW1lbnQgdG8gdXNlLlxuICogSXQgd291bGQgYWxzbyBob2xkIGluZm9ybWF0aW9uIGZvciBhZnRlciBwcm9jZXNzIGxpa2UuLlxuICogMS4gcmVmcmVzaCBjb250ZXh0IGR1ZSB0byBldGFnIG1pc21hdGNoLlxuICogMi4gZG8gd2Ugc2hvdyBib3VuZCBtZXNzYWdlcyBhbmQgaGVuY2UgY2xlYXIgdGhlbSBhZnRlciB3ZSBzaG93IHRoZSBVSSBlbGVtZW50LlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQgdG8gbWVzc2FnZSBtb2RlbCBhbmQgc2hvdy5cbiAqIEBwYXJhbSBjb250ZXh0IEJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZS5cbiAqIEBwYXJhbSBzaG93Qm91bmRUcmFuc2l0aW9uIFNob3VsZCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIGNvbmN1cnJlbnRFZGl0RmxhZyBJcyB0aGlzIGEgY29uY3VycmVudCBlZGl0IHNjZW5hcmlvLlxuICogQHBhcmFtIGNvbnRyb2wgU291cmNlIGNvbnRyb2wuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBOYW1lIG9mIHRoZSBhY3Rpb24gd2hvc2UgcHJvY2VzcyByZXF1ZXN0ZWQgZm9yIG1lc3NhZ2VzIHRvIGJlIHNob3duLlxuICogQHBhcmFtIG9uQmVmb3JlU2hvd01lc3NhZ2UgQ2FsbGJhY2sgdG8gaW5mbHVlbmNlIFVJIGRlY2lzaW9uIGJlZm9yZSBjcmVhdGluZyBmaW5hbCBVSSBkZWNpc2lvbi5cbiAqIEBwYXJhbSB2aWV3VHlwZSBWaWV3IHR5cGUsIGxpc3QgcmVwb3J0IG9yIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIHNob3dTdGF0ZU1lc3NhZ2VzIFNob3VsZCBzdGF0ZSBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBtZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG4gKiBAcmV0dXJucyBVSSBkZWNpc2lvbnMgdXNlZCB0byBzaG93IG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRVSURlY2lzaW9ucyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNob3dCb3VuZFRyYW5zaXRpb24gPSBmYWxzZSxcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2UsXG5cdG1lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcixcblx0cmVzb3VyY2VNb2RlbD86IFJlc291cmNlTW9kZWwsXG5cdG1lc3NhZ2VIYW5kbGRlcj86IE1lc3NhZ2VIYW5kbGVyXG4pOiBNZXNzYWdlVUlEZWNpc2lvbnMge1xuXHQvLyBBZGQgQ3VzdG9tIG1lc3NhZ2VzXG5cdC8vIFRPRE86IFdpbGwgdGhlc2UgbWVzc2FnZXMgYmUgcGFydCBvZiB0cmFuc2l0aW9uTWVzc2FnZXM/XG5cdGlmIChjdXN0b21NZXNzYWdlcyAmJiBjdXN0b21NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRhZGRDdXN0b21NZXNzYWdlcyhjdXN0b21NZXNzYWdlcyk7XG5cdH1cblxuXHQvLyBHZXQgdHJhbnNpdGlvbiBNZXNzYWdlc1xuXHRjb25zdCB0cmFuc2l0aW9uTWVzc2FnZXMgPSBnZXRUcmFuc2l0aW9uTWVzc2FnZXNGb3JVSURlY2lzaW9uLmNhbGwodGhpcywgc2hvd0JvdW5kVHJhbnNpdGlvbiwgY29udGV4dCk7XG5cblx0Ly8gVUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIERpYWxvZ1xuXHRjb25zdCB1aURlY2lzaW9uSW50ZXJtaXR0ZW50ID0gZXhlY3V0ZU9uQmVmb3JlU2hvd01lc3NhZ2VzLmNhbGwodGhpcywgdHJhbnNpdGlvbk1lc3NhZ2VzLCBvbkJlZm9yZVNob3dNZXNzYWdlKTtcblx0bGV0IHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIiB9ID0gdWlEZWNpc2lvbkludGVybWl0dGVudDtcblx0Ly8gR2V0IEZpbHRlcnMgZm9yIFVuYm91bmQgTWVzc2FnZXNcblx0c2hvd0JvdW5kVHJhbnNpdGlvbiA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuY29udGFpbnNCb3VuZFRyYW5zaXRpb24gPz8gc2hvd0JvdW5kVHJhbnNpdGlvbjtcblx0Y29uc3QgZmlsdGVycyA9IGdldEZpbHRlcnNGb3JNZXNzYWdlcyhzaG93Qm91bmRUcmFuc2l0aW9uLCBzaG93U3RhdGVNZXNzYWdlcyk7XG5cdG1lc3NhZ2VzVG9TaG93ID0gZ2V0TWVzc2FnZXNUb1Nob3coZmlsdGVycywgbWVzc2FnZXNUb1Nob3cgPz8gW10pO1xuXHQvLyBoYW5kbGUgY29udGV4dCBib3VuZCBtZXNzYWdlcywgSWYgdGhlcmUgaXMgYSBzaW5nbGUgbWVzc2FnZSBvZiB3aGljaCBpcyBib3VuZGVkIHRvIHRoZSBjb250ZXh0IHRoZW4gcmVtb3ZlIHRoYXQgZnJvbSB0aGUgZGlhbG9nXG5cdG1lc3NhZ2VzVG9TaG93ID0gbWVzc2FnZUhhbmRsZGVyPy5maWx0ZXJDb250ZXh0Qm91bmRNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdywgY29udGV4dCkgfHwgbWVzc2FnZXNUb1Nob3c7XG5cdCh7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gcHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUoeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSkpO1xuXHQvLyBNb2RpZnkgRVRhZyBNZXNzYWdlc1xuXHRjb25zdCBoYXNFdGFnTWVzc2FnZSA9IHRoaXMubW9kaWZ5RVRhZ01lc3NhZ2VzT25seShMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAwICYmIHVpRWxlbWVudFRvVXNlICE9PSBcIk5vbmVcIikge1xuXHRcdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAxICYmIHJlc291cmNlTW9kZWwgJiYgY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpKSB7XG5cdFx0XHRjb25zdCBnZW5lcmljU3VjY2Vzc01lc3NhZ2UgPSBhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UocmVzb3VyY2VNb2RlbCwgbWVzc2FnZURpYWxvZ1BhcmFtZXRlcik7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdyA9IGdlbmVyaWNTdWNjZXNzTWVzc2FnZSA/IFtnZW5lcmljU3VjY2Vzc01lc3NhZ2VdIDogW21lc3NhZ2VzVG9TaG93WzBdXTtcblx0XHR9XG5cdFx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRvU2hvdyA9IG1lc3NhZ2VzVG9TaG93WzBdO1xuXHRcdFx0aWYgKG1lc3NhZ2VUb1Nob3cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChoYXNFdGFnTWVzc2FnZSB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uKCk/Lmxlbmd0aCB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uVXJsKCk/Lmxlbmd0aCkge1xuXHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSB3b3VsZCBzaG93IHNpbmdsZSBtZXNzYWdlIGluIG1lc3NhZ2UgYm94IG9ubHkgd2hlbjpcblx0XHRcdFx0Ly8gMS4gSXQgaXMgbm90IGFuIEV0YWcgbWVzc2FnZS5cblx0XHRcdFx0Ly8gMi4gVGhlcmUgaXMgbm8gbWVzc2FnZSBkZXNjcmlwdGlvbiBvciBkZXNjcmlwdGlvbiB1cmwgYXZhaWxhYmxlIGZvciBsb25nIHRleHQuXG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHVpRWxlbWVudFRvVXNlID09PSBcIkRpYWxvZ1wiKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShtZXNzYWdlc1RvU2hvdywgY29udHJvbCwgYWN0aW9uTmFtZSwgdmlld1R5cGUpO1xuXHRcdH1cblx0XHRjb25zdCBmbkdldE1lc3NhZ2VTdWJ0aXRsZSA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdFx0aWYgKGZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBoYXNFdGFnTWVzc2FnZSA/IGNvbnRleHQgOiB1bmRlZmluZWQsXG5cdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IHNob3dCb3VuZFRyYW5zaXRpb25cblx0fTtcbn1cblxuLyoqXG4gKiBBZGRpbmcgYSBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqIEBwYXJhbSBzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciBTZWxlY3RlZCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIG1lc3NhZ2UgaXMgc2hvd24uXG4gKiBAcmV0dXJucyBNZXNzYWdlIHdpdGggZ2VuZXJpYyBzdWNjZXNzIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZShcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0c2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuKTogTWVzc2FnZVdpdGhIZWFkZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzZWxlY3Rpb25Db250ZXh0cyA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5hU2VsZWN0ZWRDb250ZXh0cztcblx0aWYgKHNlbGVjdGlvbkNvbnRleHRzICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uQ29udGV4dHMpICYmIHNlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGggPiAxICYmIHJlc291cmNlTW9kZWwpIHtcblx0XHRsZXQgYWN0aW9uTmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5ib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5lbnRpdHlTZXQ7XG5cdFx0YWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGFjdGlvbk5hbWU/LnNwbGl0KFwiLlwiKVthY3Rpb25OYW1lPy5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBhY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYWN0aW9uTmFtZSAmJiBlbnRpdHlTZXROYW1lID8gYCR7ZW50aXR5U2V0TmFtZX18JHthY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIiwgW3NlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGhdLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5TdWNjZXNzLFxuXHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGNvZGU6IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCJcblx0XHR9KTtcblx0fVxufVxuLyoqXG4gKiBDaGVjayBpcyBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlc1RvU2hvdyBJbml0aWFsIG1lc3NhZ2VzIHRvIHNob3cuXG4gKiBAcmV0dXJucyBJZiBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10pOiBib29sZWFuIHtcblx0bGV0IHJlZmVyZW5jZU1zZzogTWVzc2FnZVdpdGhIZWFkZXI7XG5cdGNvbnN0IGNoZWNrRmFpbGVkID0gbWVzc2FnZXNUb1Nob3cuc29tZSgobXNnLCBpZHgpID0+IHtcblx0XHRpZiAobXNnLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2Vzcykge1xuXHRcdFx0Ly8gTm9uIHN1Y2Nlc3MgbWVzc2FnZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmIChpZHggPT09IDApIHtcblx0XHRcdC8vIDFzdCBNZXNzYWdlXG5cdFx0XHRyZWZlcmVuY2VNc2cgPSBtc2c7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRDb2RlKCkgPT09IG1zZy5nZXRDb2RlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRNZXNzYWdlKCkgPT09IG1zZy5nZXRNZXNzYWdlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXREZXNjcmlwdGlvbigpID09PSBtc2cuZ2V0RGVzY3JpcHRpb24oKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldERlc2NyaXB0aW9uVXJsKCkgPT09IG1zZy5nZXREZXNjcmlwdGlvblVybCgpICYmXG5cdFx0XHRyZWZlcmVuY2VNc2cuZ2V0QWRkaXRpb25hbFRleHQoKSA9PT0gbXNnLmdldEFkZGl0aW9uYWxUZXh0KClcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xuXG5cdHJldHVybiAhY2hlY2tGYWlsZWQ7XG59XG5cbi8qKlxuICogU2hvdyBtZXNzYWdlcyBpbiB0aGUgZGVjaWRlZCBVSSBFbGVtZW50LlxuICogQHBhcmFtIHVpRGVjaXNpb25zIFVJIERlY2lzaW9uIHRvIGJlIHVzZWQgdG8gc2hvdyB0aGUgbWVzc2FnZXMuXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb3IgcmVqZWN0cyBiYXNlZCBvbiB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIFVJIGVsZW1lbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlc0luVUkodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gdWlEZWNpc2lvbnM7XG5cblx0Ly8gU2hvdyBEaWFsb2cgLyBNZXNzYWdlQm94IC8gTWVzc2FnZVRvYXN0XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiVG9hc3RcIikge1xuXHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VUb2FzdChtZXNzYWdlc1RvU2hvd1swXSk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIpIHtcblx0XHRhd2FpdCBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sKHVpRGVjaXNpb25zKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiQm94XCIpIHtcblx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlQm94Q29udHJvbCh1aURlY2lzaW9ucyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IG1vZGVsIGZpbHRlcnMgZm9yIGdldHRpbmcgdGhlIHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gc2hvd1N0YXRlTWVzc2FnZXMgU2hvdWxkIHN0YXRlIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHJldHVybnMgTW9kZWwgZmlsdGVyc1xuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJzRm9yTWVzc2FnZXMoc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgc2hvd1N0YXRlTWVzc2FnZXMgPSBmYWxzZSk6IEZpbHRlcltdIHtcblx0Y29uc3QgZmlsdGVycyA9IHNob3dTdGF0ZU1lc3NhZ2VzID8gW10gOiBbbmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogZmFsc2UgfSldO1xuXHRjb25zdCBpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJcIiwgdGVzdDogaXNOb25UZWNobmljYWxNZXNzYWdlIH0pO1xuXG5cdGlmIChzaG93U3RhdGVNZXNzYWdlcyB8fCBzaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0Ly8gQWRkIHRoZSBmaWx0ZXIgZm9yIGJvdGggc3RhdGUgbWVzc2FnZXMgb3IgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlc1xuXHRcdGNvbnN0IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coYUNvbnRyb2xJZHMpO1xuXHRcdH07XG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGlmIChzaG93Qm91bmRUcmFuc2l0aW9uICYmICFzaG93U3RhdGVNZXNzYWdlcykge1xuXHRcdFx0Ly8gQWRkIGV4dHJhIGZpbHRlciBpZiBvbmx5IGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXJlIHNob3duXG5cdFx0XHRmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0XHRmaWx0ZXJzLnB1c2goaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT25seSB1bmJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93blxuXHRcdGZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIlxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlclxuXHRcdFx0XHRdLFxuXHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzTWVzc2FnZXNGcm9tQ2hhbmdlc2V0RmFpbHVyZSh7XG5cdG1lc3NhZ2VzVG9TaG93LFxuXHR1aUVsZW1lbnRUb1VzZVxufTogUGljazxNZXNzYWdlVUlEZWNpc2lvbnMsIFwidWlFbGVtZW50VG9Vc2VcIiB8IFwibWVzc2FnZXNUb1Nob3dcIj4pOiBQaWNrPE1lc3NhZ2VVSURlY2lzaW9ucywgXCJ1aUVsZW1lbnRUb1VzZVwiIHwgXCJtZXNzYWdlc1RvU2hvd1wiPiB7XG5cdGxldCByZXRNZXNzYWdlcyA9IFsuLi5tZXNzYWdlc1RvU2hvd107XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDIpIHtcblx0XHQvLyBUaGVyZSBhcmUgMiBtZXNzYWdlOlxuXHRcdC8vIDEuIEdlbmVyaWMgZXJyb3IgY2hhbmdlc2V0IG1lc3NhZ2UgYWRkZWQgYnkgRkUuXG5cdFx0Ly8gMi4gTWFpbiBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGludGVyYWN0aW9uLlxuXHRcdC8vIFdlIHJlbW92ZSB0aGUgZ2VuZXJpYyBtZXNzYWdlLCBzaG93IG9ubHkgYW4gZW5oYW5jZWQgJ01haW4gZXJyb3IgbWVzc2FnZScgd2l0aCBhIGdlbmVyaWMgbWVzc3NhZ2UgcHJlLXRleHQgaW4gdGhlIG1lc3NhZ2UgYm94LlxuXHRcdGNvbnN0IGdlbmVyaWNNc2dzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRjb25zdCBub25HZW5lcmljTXNnczogTWVzc2FnZVtdID0gW107XG5cdFx0bWVzc2FnZXNUb1Nob3cuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdFx0Z2VuZXJpY01zZ3MucHVzaChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vbkdlbmVyaWNNc2dzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGdlbmVyaWNNc2dzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgeyBmZTogZmVUZWNobmljYWxEZXRhaWxzIH0gPSAoZ2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzO1xuXHRcdFx0aWYgKGZlVGVjaG5pY2FsRGV0YWlscz8uY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHByZVRleHQgPSBmZVRlY2huaWNhbERldGFpbHM/LmNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjtcblx0XHRcdFx0aWYgKHByZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCB0ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlOiBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0ge1xuXHRcdFx0XHRcdFx0ZmU6IHtcblx0XHRcdFx0XHRcdFx0c2luZ2xlRXJyb3JQcmVUZXh0OiBwcmVUZXh0LFxuXHRcdFx0XHRcdFx0XHRzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBnZW5lcmljTXNnc1swXS5nZXRJZCgpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBleGlzdGluZ1RlY2hEZXRhaWxzID0gbm9uR2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpID8/IHt9O1xuXHRcdFx0XHRcdC8vIGNvbWJpbmUgZXhpc3RpbmcgdGVjaG5pY2FsIGRldGFpbHMgaWYgYW55LCB3aXRoIHRoZSBjaGFuZ2Ugc2V0IGluZm9ybWF0aW9uIHdlIHdhbnQgdG8gYWRkLlxuXHRcdFx0XHRcdG5vbkdlbmVyaWNNc2dzWzBdLnNldFRlY2huaWNhbERldGFpbHMoeyAuLi5leGlzdGluZ1RlY2hEZXRhaWxzLCAuLi50ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlIH0pO1xuXHRcdFx0XHRcdHJldE1lc3NhZ2VzID0gbm9uR2VuZXJpY01zZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlc1RvU2hvdzogcmV0TWVzc2FnZXMsXG5cdFx0dWlFbGVtZW50VG9Vc2U6IHJldE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiB1aUVsZW1lbnRUb1VzZSAhPT0gXCJOb25lXCIgPyBcIkJveFwiIDogdWlFbGVtZW50VG9Vc2Vcblx0fTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGN1c3RvbSBtZXNzYWdlcyB0byBtZXNzYWdlIG1vZGVsLlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQuXG4gKi9cbmZ1bmN0aW9uIGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10pOiB2b2lkIHtcblx0Y3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IEN1c3RvbU1lc3NhZ2UpIHtcblx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdH0pXG5cdFx0KTtcblx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb3J0ZXJGb3JNZXNzYWdlcygpOiBTb3J0ZXIge1xuXHRyZXR1cm4gbmV3IFNvcnRlcihcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKG9iajE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvYmoyOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4ge1xuXHRcdGNvbnN0IHJhbmtBID0gZ2V0TWVzc2FnZVJhbmsob2JqMSk7XG5cdFx0Y29uc3QgcmFua0IgPSBnZXRNZXNzYWdlUmFuayhvYmoyKTtcblxuXHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc1RvU2hvdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgdHJhbnNpc3Rpb25NZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVdpdGhIZWFkZXJbXSB7XG5cdGxldCBtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSA9IFsuLi50cmFuc2lzdGlvbk1lc3NhZ2VzXTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzKSxcblx0XHRjdXJyZW50Q29udGV4dHMgPSBsaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0aWYgKGN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdC8vIHVzaW5nIHRoZSBtZXNzYWdlIG1vZGVsIGFnYWluIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldyBhbmQgdGhlbiBmaWx0ZXJpbmcgb24gdGhhdCBiaW5kaW5nIGFnYWluIGlzIHVubmVjZXNzYXJ5LlxuXHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gY3VycmVudENvbnRleHRzLm1hcCgoY3VycmVudENvbnRleHQpID0+IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpKTtcblx0XHRjb25zdCBvVW5pcXVlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdFx0bWVzc2FnZXNUb1Nob3cgPSBtZXNzYWdlcy5jb25jYXQobWVzc2FnZXNUb1Nob3cpLmZpbHRlcihmdW5jdGlvbiAob2JqOiBNZXNzYWdlKSB7XG5cdFx0XHQvLyByZW1vdmUgZW50cmllcyBoYXZpbmcgZHVwbGljYXRlIG1lc3NhZ2UgaWRzXG5cdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmdldElkKCldICYmIChvVW5pcXVlT2JqW29iai5nZXRJZCgpXSA9IHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtZXNzYWdlc1RvU2hvdztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VUb2FzdCh0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLCBtZXNzYWdlOiBNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTtcblx0XHR0aGlzLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRyZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wodWlEZWNpc2lvbjogTWVzc2FnZVVJRGVjaXNpb25zLCBydW5Ub1Rlc3QgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IERpYWxvZz4ge1xuXHRsZXQgaGlnaGVzdFByaW9yaXR5O1xuXHRsZXQgaGlnaGVzdFByaW9yaXR5VGV4dDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAocGFyYW0xOiB2b2lkIHwgRGlhbG9nKSA9PiB2b2lkKSB7XG5cdFx0YVJlc29sdmVGdW5jdGlvbnMucHVzaChyZXNvbHZlKTtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGbG93ID0gZmFsc2U7XG5cdFx0Y29uc3QgeyBtZXNzYWdlc1RvU2hvdywgY29udGV4dE5lZWRzRXRhZ1JlZnJlc2ggfSA9IHVpRGVjaXNpb247XG5cdFx0Y29uc3QgbWVzc2FnZURpYWxvZ01vZGVsID0gbmV3IEpTT05Nb2RlbChtZXNzYWdlc1RvU2hvdyk7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhtZXNzYWdlRGlhbG9nTW9kZWwsIHN0cmljdEhhbmRsaW5nRmxvdyk7XG5cdFx0Y29uc3Qgc29ydGVyID0gZ2V0U29ydGVyRm9yTWVzc2FnZXMoKTtcblx0XHQobWVzc2FnZU9iamVjdC5tZXNzYWdlVmlldy5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZykuc29ydChzb3J0ZXIpO1xuXG5cdFx0aWYgKCFkaWFsb2dDb250cm9sIHx8ICFkaWFsb2dDb250cm9sLmlzT3BlbigpKSB7XG5cdFx0XHRkaWFsb2dDb250cm9sID0gbmV3IERpYWxvZyh7XG5cdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiAoY29tcGxldGlvblByb21pc2U6IHsgcmVzb2x2ZTogRnVuY3Rpb247IHJlamVjdDogRnVuY3Rpb24gfSk6IHZvaWQge1xuXHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpO1xuXHRcdFx0XHRcdGNvbXBsZXRpb25Qcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb0JhY2tCdXR0b25dXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMzcuNWVtXCIsXG5cdFx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiMjEuNWVtXCIsXG5cdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0Y2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuXHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFSZXNvbHZlRnVuY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRpdGVtKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGRpYWxvZ0NvbnRyb2wucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdGRpYWxvZ0NvbnRyb2wuYWRkQ29udGVudChtZXNzYWdlVmlldyk7XG5cblx0XHRpZiAoY29udGV4dE5lZWRzRXRhZ1JlZnJlc2gpIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdGlmIChjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoLmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoLnJlZnJlc2goKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGUuRW1waGFzaXplZFxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlhbG9nQ29udHJvbC5kZXN0cm95QmVnaW5CdXR0b24oKTtcblx0XHR9XG5cdFx0aGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG1lc3NhZ2VWaWV3LmdldEl0ZW1zKCkpO1xuXHRcdGhpZ2hlc3RQcmlvcml0eVRleHQgPSBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coaGlnaGVzdFByaW9yaXR5KTtcblx0XHRkaWFsb2dDb250cm9sLnNldFN0YXRlKGhpZ2hlc3RQcmlvcml0eSk7XG5cdFx0KChkaWFsb2dDb250cm9sLmdldEN1c3RvbUhlYWRlcigpIGFzIEJhcikuZ2V0Q29udGVudE1pZGRsZSgpWzBdIGFzIFRleHQpLnNldFRleHQoaGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0bWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0ZGlhbG9nQ29udHJvbC5vcGVuKCk7XG5cdFx0aWYgKHJ1blRvVGVzdCkge1xuXHRcdFx0cmVzb2x2ZShkaWFsb2dDb250cm9sKTtcblx0XHR9XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZUJveENvbnRyb2wodWlEZWNpc2lvbjogTWVzc2FnZVVJRGVjaXNpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGNvbnN0IHsgbWVzc2FnZXNUb1Nob3cgfSA9IHVpRGVjaXNpb247XG5cdFx0Y29uc3QgbWVzc2FnZVRvU2hvdyA9IG1lc3NhZ2VzVG9TaG93WzBdO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0gbWVzc2FnZVRvU2hvdy5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgeyBzaW5nbGVHZW5lcmljTWVzc2FnZUlkLCBzaW5nbGVFcnJvclByZVRleHQgfSA9IChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyBhcyBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKT8uZmUgPz8ge307XG5cdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0UmV0cnlBZnRlck1lc3NhZ2UobWVzc2FnZVRvU2hvdywgdHJ1ZSk7XG5cdFx0Ly8gSWYgaXQgaXMgYSByZXRyeSBtZXNzYWdlLCB0aGVuIGl0IG5lZWRzIHRvIGhhdmUgdGVjaG5pY2FsIGRldGFpbHMgdG8gc2hvdyBpdC5cblx0XHRjb25zdCBzaG93TWVzc2FnZUJveCA9IHJldHJ5QWZ0ZXJNZXNzYWdlID8gbWVzc2FnZVRlY2huaWNhbERldGFpbHMgOiB0cnVlO1xuXHRcdGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdFx0Y29uc3Qgc3RhcnRUYWcgPSBcIjxodG1sPjxib2R5PjxzcGFuIHN0eWxlPSd3aGl0ZS1zcGFjZTpwcmUtd3JhcCc+XCIsXG5cdFx0XHRcdGNsb3NlVGFnID0gXCI8L3NwYW4+PC9ib2R5PjwvaHRtbD5cIjtcblx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gc3RhcnRUYWc7XG5cblx0XHRcdC8vIEFkZGluZyBwcmUtdGV4dCBmb3IgdGhlIG1lc3NhZ2VzXG5cdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmd9PGg2PiR7cmV0cnlBZnRlck1lc3NhZ2V9PC9oNj48YnI+PC9icj5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHNpbmdsZUVycm9yUHJlVGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VIZWFkZXIgPSAobWVzc2FnZVRvU2hvdyBhcyBNZXNzYWdlV2l0aEhlYWRlcik/LltcImhlYWRlck5hbWVcIl1cblx0XHRcdFx0XHRcdD8gYCR7KG1lc3NhZ2VUb1Nob3cgYXMgTWVzc2FnZVdpdGhIZWFkZXIpPy5bXCJoZWFkZXJOYW1lXCJdfTpgXG5cdFx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmd9JHtzaW5nbGVFcnJvclByZVRleHR9PGJyLz48YnIvPiR7bWVzc2FnZUhlYWRlcn0gYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtZXNzYWdlRm9ybWF0dGVkID0gbWVzc2FnZVRvU2hvdy5nZXRNZXNzYWdlKCkucmVwbGFjZUFsbChcIjxcIiwgXCImbHQ7XCIpLnJlcGxhY2VBbGwoXCI+XCIsIFwiJmd0O1wiKTtcblx0XHRcdC8vIEFkZGluZyB0aGUgbWFpbiBlcnJvciBtZXNzYWdlLlxuXHRcdFx0aWYgKG1lc3NhZ2VUb1Nob3cuZ2V0Q29kZSgpICE9PSBcIjUwM1wiICYmIG1lc3NhZ2VUb1Nob3cuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgbWVzc2FnZVRvU2hvdy5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHttZXNzYWdlRm9ybWF0dGVkfSR7Y2xvc2VUYWd9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgbWVzc2FnZUZvcm1hdHRlZH0ke2Nsb3NlVGFnfWA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRodG1sVGV4dDogTWFuYWdlZE9iamVjdC5lc2NhcGVTZXR0aW5nc1ZhbHVlKGZvcm1hdHRlZFRleHRTdHJpbmcpXG5cdFx0XHR9KTtcblxuXHRcdFx0c2hvd01lc3NhZ2VCb3hQZXJUeXBlKFxuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0b25DbG9zZTogY2xvc2VNZXNzYWdlQm94LmJpbmQobnVsbCwgbWVzc2FnZVRvU2hvdywgcmVzb2x2ZSwgc2luZ2xlR2VuZXJpY01lc3NhZ2VJZClcblx0XHRcdFx0fSxcblx0XHRcdFx0bWVzc2FnZVRvU2hvd1xuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZU1lc3NhZ2VCb3gobWVzc2FnZVNob3duOiBNZXNzYWdlV2l0aEhlYWRlciwgY2FsbEJhY2s6ICh2YWx1ZTogdm9pZCkgPT4gdm9pZCwgc2luZ2xlR2VuZXJpY01lc3NhZ2VJZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBtZXNzYWdlc1RvUmVtb3ZlID0gW21lc3NhZ2VTaG93bl07XG5cdGlmIChzaW5nbGVHZW5lcmljTWVzc2FnZUlkKSB7XG5cdFx0Y29uc3QgYWxsTXNncyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgZ2VuZXJpY01lc3NhZ2UgPSBhbGxNc2dzLmZpbmQoKG1zZzogTWVzc2FnZVdpdGhIZWFkZXIpID0+IG1zZy5nZXRJZCgpID09PSBzaW5nbGVHZW5lcmljTWVzc2FnZUlkKTtcblx0XHRpZiAoZ2VuZXJpY01lc3NhZ2UpIHtcblx0XHRcdG1lc3NhZ2VzVG9SZW1vdmUucHVzaChnZW5lcmljTWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlc1RvUmVtb3ZlKTtcblx0Y2FsbEJhY2sodW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gc2hvd01lc3NhZ2VCb3hQZXJUeXBlKGZvcm1hdHRlZFRleHQ6IHN0cmluZywgY2xvc2U6IHsgb25DbG9zZTogRnVuY3Rpb24gfSwgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRjb25zdCBwYXJhbWV0ZXJzID0geyAuLi5jbG9zZSwgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlIH07XG5cdHN3aXRjaCAobWVzc2FnZS5nZXRUeXBlKCkpIHtcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhmb3JtYXR0ZWRUZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuU3VjY2Vzczpcblx0XHRcdE1lc3NhZ2VCb3guc3VjY2Vzcyhmb3JtYXR0ZWRUZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuSW5mb3JtYXRpb246XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKGZvcm1hdHRlZFRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdE1lc3NhZ2VCb3guc2hvdyhmb3JtYXR0ZWRUZXh0LCBwYXJhbWV0ZXJzKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ3JvdXAgbmFtZSBmb3IgYWxsIG1lc3NhZ2VzIGluIGEgZGlhbG9nLlxuICogQHBhcmFtIGFNb2RlbERhdGFBcnJheSBNZXNzYWdlcyBhcnJheVxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIHZpZXdUeXBlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUoXG5cdGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogdm9pZCB7XG5cdGFNb2RlbERhdGFBcnJheS5mb3JFYWNoKChhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4ge1xuXHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gXCJcIjtcblx0XHRpZiAoIWFNb2RlbERhdGEudGFyZ2V0Py5sZW5ndGggJiYgYU1vZGVsRGF0YS5nZXRDb2RlPy4oKSAhPT0gXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiKSB7XG5cdFx0XHQvLyB1bmJvdW5kIHRyYW5zaWl0b24gbWVzc2FnZXNcblx0XHRcdGNvbnN0IGdlbmVyYWxHcm91cFRleHQgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gZ2VuZXJhbEdyb3VwVGV4dDtcblx0XHR9IGVsc2UgaWYgKGFNb2RlbERhdGEudGFyZ2V0Py5sZW5ndGgpIHtcblx0XHRcdC8vIExSIGZsb3dcblx0XHRcdGlmICh2aWV3VHlwZSA9PT0gXCJMaXN0UmVwb3J0XCIgJiYgY29udHJvbD8uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZUxSVGFibGUoY29udHJvbCwgYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmICh2aWV3VHlwZSA9PT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRcdFx0Ly8gT1AgRGlzcGxheSBtb2RlXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lLCBjb250cm9sIGFzIFZpZXcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgZm9yIExSIHRhYmxlLlxuICogQHBhcmFtIG9FbGVtXG4gKiBAcGFyYW0gYU1vZGVsRGF0YVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZUxSVGFibGUob0VsZW06IENvbnRyb2wgfCB1bmRlZmluZWQsIGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0gJiYgKG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7KG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgYWxsUm93Q29udGV4dHMgPSBvUm93QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAke3Jvd0NvbnRleHQuZ2V0UGF0aCgpfS9gO1xuXHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAob0VsZW0uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gJiYgcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXTtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5Qcm9wZXJ0eU5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xQcm9wZXJ0eShvRWxlbSwgYU1vZGVsRGF0YSwgY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZSB9ID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sSW5mbyhvRWxlbSBhcyBNRENUYWJsZSwgY29sdW1uUHJvcGVydHlOYW1lKTtcblxuXHRcdFx0XHRcdC8vIGlmIHRhcmdldCBoYXMgc29tZSBjb2x1bW4gbmFtZSBhbmQgY29sdW1uIGlzIHZpc2libGUgaW4gVUlcblx0XHRcdFx0XHRpZiAoY29sdW1uUHJvcGVydHlOYW1lICYmIHNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0XHRcdC8vIGhlYWRlciB3aWxsIGJlIHJvdyBJZGVudGlmaWVyLCBpZiBmb3VuZCBmcm9tIGFib3ZlIGNvZGUgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSB0YWJsZSBuYW1lXG5cdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IHJvd0lkZW50aWZpZXIgPyBgICR7cm93SWRlbnRpZmllcn1gIDogKG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRIZWFkZXIoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gaWYgY29sdW1uIGRhdGEgbm90IGZvdW5kIChtYXkgYmUgdGhlIGNvbHVtbiBpcyBoaWRkZW4pLCBhZGQgZ3JvdXBpbmcgYXMgTGFzdCBBY3Rpb25cblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdHRhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZVxuKTogdm9pZCB7XG5cdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAobWRjVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdGlmIChpZGVudGlmaWVyQ29sdW1uKSB7XG5cdFx0Y29uc3QgYWxsUm93Q29udGV4dHMgPSBtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0Q29udGV4dHMoKTtcblx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXT8uaW5jbHVkZXMocm93Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uID8gcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXSA6IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbk5hbWVTdWZmaXggPSB0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSA/IGAsICR7dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YCA6IFwiXCI7XG5cdFx0XHRcdG1lc3NhZ2Uuc2V0QWRkaXRpb25hbFRleHQoYCR7cm93SWRlbnRpZmllcn0ke2NvbHVtbk5hbWVTdWZmaXh9YCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRtZXNzYWdlLnNldEFkZGl0aW9uYWxUZXh0KGAke3RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlKFxuXHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG4pOiB2b2lkIHtcblx0bGV0IGhlYWRlck5hbWUgPSBtZGNUYWJsZS5nZXRIZWFkZXJWaXNpYmxlKCkgJiYgdGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyO1xuXHRpZiAoIWhlYWRlck5hbWUpIHtcblx0XHRoZWFkZXJOYW1lID0gc3Vic2VjdGlvbi5nZXRUaXRsZSgpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0aGVhZGVyTmFtZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtoZWFkZXJOYW1lfWA7XG5cdH1cblx0bWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgaW4gT1AgRGlzcGxheSBtb2RlLlxuICogQHBhcmFtIHN1YnNlY3Rpb24gU3Vic2VjdGlvblxuICogQHBhcmFtIG1kY1RhYmxlICBNREMgdGFibGVcbiAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB2aWV3Q29udGV4dCBWaWV3J3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gZ3JvdXBOYW1lSXNHZW5lcmFsIElzIHByZXNlbnQgZ3JvdXAgbmFtZSAnR2VuZXJhbCdcbiAqIEBwYXJhbSBhY3Rpb25OYW1lIEFjdGlvbiBuYW1lXG4gKiBAcmV0dXJucyBJZiBncm91cCBuYW1lIGlzICdHZW5lcmFsJ1xuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR2aWV3Q29udGV4dDogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQsXG5cdGdyb3VwTmFtZUlzR2VuZXJhbDogYm9vbGVhbixcblx0YWN0aW9uTmFtZT86IHN0cmluZ1xuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Sb3dCaW5kaW5nID0gbWRjVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IHRydWU7XG5cdGxldCBjaGlsZFRhYmxlRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZDtcblxuXHRtZGNUYWJsZS5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaCgob0VsZW1lbnQpID0+IHtcblx0XHRpZiAob0VsZW1lbnQuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpIHx8IG9FbGVtZW50LmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSkge1xuXHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHR9XG5cdH0pO1xuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke3ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9LyR7bWRjVGFibGUuZ2V0Um93QmluZGluZygpPy5nZXRQYXRoKCl9YDtcblx0XHRpZiAobWVzc2FnZS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0bWRjVGFibGUsXG5cdFx0XHRcdGNoaWxkVGFibGVFbGVtZW50LFxuXHRcdFx0XHRvUm93QmluZGluZyxcblx0XHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwLFxuXHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgeyBvVGFyZ2V0VGFibGVJbmZvIH0gPSBvYmo7XG5cblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoc3Vic2VjdGlvbiwgbWRjVGFibGUsIG1lc3NhZ2UsIG9UYXJnZXRUYWJsZUluZm8pO1xuXHRcdFx0Z3JvdXBOYW1lSXNHZW5lcmFsID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBncm91cE5hbWVJc0dlbmVyYWw7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gYU1vZGVsRGF0YSBNZXNzYWdlIE9iamVjdFxuICogQHBhcmFtIHNBY3Rpb25OYW1lICBBY3Rpb24gbmFtZVxuICogQHBhcmFtIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udHJvbDogVmlldyk6IHZvaWQge1xuXHRjb25zdCBvVmlld0NvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvcExheW91dDogQ29udHJvbCA9IGNvbnRyb2w/LmdldENvbnRlbnQgJiYgY29udHJvbD8uZ2V0Q29udGVudCgpWzBdO1xuXHRsZXQgYklzR2VuZXJhbEdyb3VwTmFtZSA9IHRydWU7XG5cdGlmIChvcExheW91dCkge1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvcExheW91dCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRzdWJTZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goZnVuY3Rpb24gKG9FbGVtKSB7XG5cdFx0XHRcdFx0aWYgKG9FbGVtLmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gc2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlKFxuXHRcdFx0XHRcdFx0XHRvU3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0b0VsZW0sXG5cdFx0XHRcdFx0XHRcdGFNb2RlbERhdGEsXG5cdFx0XHRcdFx0XHRcdG9WaWV3Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0YklzR2VuZXJhbEdyb3VwTmFtZSxcblx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgT1AgY29udGV4dCBwYXRoIGlzIHBhcnQgb2YgdGFyZ2V0LCBzZXQgTGFzdCBBY3Rpb24gYXMgZ3JvdXAgbmFtZVxuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRjb25zdCBzTGFzdEFjdGlvblRleHQgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cdHJldHVybiBzQWN0aW9uTmFtZSA/IGAke3NMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCA6IFwiXCI7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgcmFuayBiYXNlZCBvbiBNZXNzYWdlIEdyb3VwL0hlYWRlciBuYW1lLCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIFNvcnRpbmcgbWVzc2FnZXMgaW4gTWVzc2FnZSBkaWFsb2dcbiAqIExhc3QgQWN0aW9uIHNob3VsZCBiZSBzaG93biBhdCB0b3AsIG5leHQgUm93IElkIGFuZCBsYXN0IEdlbmVyYWwuXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyBSYW5rIG9mIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVJhbmsob2JqOiBNZXNzYWdlV2l0aEhlYWRlcik6IG51bWJlciB7XG5cdGlmIChvYmouZ2V0Q29kZSgpID09PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRyZXR1cm4gMTtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkxhc3QgQWN0aW9uXCIpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH0gZWxzZSBpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJHZW5lcmFsXCIpKSB7XG5cdFx0cmV0dXJuIDQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIHdoaWNoIGNhbiBlaXRoZXIgR2VuZXJhbCBvciBMYXN0IEFjdGlvbi5cbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gYklzR2VuZXJhbEdyb3VwTmFtZVxuICovXG5jb25zdCBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lID0gKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IGJvb2xlYW4pOiB2b2lkID0+IHtcblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0YWJsZSByb3cvY29sdW1uIGluZm8gYW5kIHNldCBzdWJ0aXRsZS5cbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9FbGVtZW50XG4gKiBAcGFyYW0gb1Jvd0JpbmRpbmdcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIHNldFNlY3Rpb25OYW1lSW5Hcm91cFxuICogQHBhcmFtIGZuU2V0R3JvdXBOYW1lXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIGFuZCBTdWJ0aXRsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0Zm5TZXRHcm91cE5hbWU6IEZ1bmN0aW9uXG4pOiB7IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7IHN1YlRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIH0ge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGUsIGFNZXNzYWdlLCBvRWxlbWVudCwgb1Jvd0JpbmRpbmcpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gb1RhYmxlLmdldEhlYWRlcigpO1xuXG5cdGxldCBzQ29udHJvbElkLCBiSXNDcmVhdGlvblJvdztcblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRzQ29udHJvbElkID0gYU1lc3NhZ2UuZ2V0Q29udHJvbElkcygpLmZpbmQoZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbEluVGFibGUob1RhYmxlLCBzSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdFx0YklzQ3JlYXRpb25Sb3cgPSBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2wpO1xuXHR9XG5cblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHQvLyBpZiB0aGUgY29sdW1uIGlzIG5vdCBwcmVzZW50IG9uIFVJIG9yIHRoZSB0YXJnZXQgZG9lcyBub3QgaGF2ZSBhIHRhYmxlIGZpZWxkIGluIGl0LCB1c2UgTGFzdCBBY3Rpb24gZm9yIGdyb3VwaW5nXG5cdFx0aWYgKGFNZXNzYWdlLmdldFBlcnNpc3RlbnQoKSAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0Zm5TZXRHcm91cE5hbWUoYU1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN1YlRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRhTWVzc2FnZSxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdG9UYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvd1xuXHQpO1xuXG5cdHJldHVybiB7IG9UYXJnZXRUYWJsZUluZm8sIHN1YlRpdGxlIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3VidGl0bGUgYmFzZWQgb24gVGFibGUgUm93L0NvbHVtbiBkYXRhLlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSB0YWJsZVJvd0JpbmRpbmdDb250ZXh0c1xuICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHRhYmxlVGFyZ2V0Q29sTmFtZVxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gaXNDcmVhdGlvblJvd1xuICogQHBhcmFtIHRhcmdldGVkQ29udHJvbFxuICogQHJldHVybnMgTWVzc2FnZSBzdWJ0aXRsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IENvbnRleHRbXSxcblx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0dGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHRhYmxlOiBNRENUYWJsZSxcblx0aXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBtZXNzYWdlU3VidGl0bGU7XG5cdGxldCByb3dTdWJ0aXRsZVZhbHVlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdGNvbnN0IHRhYmxlQ29sUHJvcGVydHkgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbHVtblZpc2liaWxpdHlJbmZvKHRhYmxlUm93Q29udGV4dCk7XG5cdGNvbnN0IGNvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtZXNzYWdlLCB0YWJsZSk7XG5cdGlmIChpc0NyZWF0aW9uUm93IHx8IHRhYmxlUm93Q29udGV4dD8uaXNJbmFjdGl2ZSgpKSB7XG5cdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVcIiwgW1xuXHRcdFx0cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVfQ1JFQVRJT05fUk9XX0lORElDQVRPUlwiKSxcblx0XHRcdHRhYmxlVGFyZ2V0Q29sTmFtZSA/IHRhYmxlVGFyZ2V0Q29sTmFtZSA6IChjb2xGcm9tVGFibGVTZXR0aW5ncyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLmxhYmVsXG5cdFx0XSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdHRhYmxlLFxuXHRcdFx0dGFibGVSb3dDb250ZXh0LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGggPSB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAodGFibGVSb3dCaW5kaW5nQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gc2V0IFJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0XHRpZiAodGFyZ2V0ZWRDb250cm9sKSB7XG5cdFx0XHRcdC8vIFRoZSBVSSBlcnJvciBpcyBvbiB0aGUgZmlyc3QgY29sdW1uLCB3ZSB0aGVuIGdldCB0aGUgY29udHJvbCBpbnB1dCBhcyB0aGUgcm93IGluZGljYXRvcjpcblx0XHRcdFx0cm93U3VidGl0bGVWYWx1ZSA9ICh0YXJnZXRlZENvbnRyb2wgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIEdldHRpbmcgdGhlIGNvbHVtbiBsYWJlbCBhbmQgaXRzIHZhbHVlIG9mIGEgc2luZ2xlIHJvd1xuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2xWYWx1ZShcblx0XHRcdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0dGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0dGFibGVDb2xUZXh0QXJyYW5nZW1lbnQsXG5cdFx0XHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YWJsZVJvd0NvbnRleHQgJiYgdGFibGVDb2xQcm9wZXJ0eSAmJiB0YWJsZUNvbFByb3BlcnR5Lmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHJvd3MsIHRoZSBzdWJ0aXRsZSBpcyBkaXNwbGF5ZWQgYXMg4oCYU2VlIG1lc3NhZ2UgZGV0YWlsc+KAmVxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVfREVUQUlMRURfUk9XX0lORk9cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0Ly8gc2V0IHRoZSBtZXNzYWdlIHN1YnRpdGxlXG5cdFx0XHRjb25zdCBvQ29sdW1uSW5mbzogQ29sdW1uSW5mb1R5cGUgPSBtZXNzYWdlSGFuZGxpbmcuZGV0ZXJtaW5lQ29sdW1uSW5mbyhjb2xGcm9tVGFibGVTZXR0aW5ncywgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHRpZiAocm93U3VidGl0bGVWYWx1ZSAmJiB0YWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVcIiwgW3Jvd1N1YnRpdGxlVmFsdWUsIHRhYmxlVGFyZ2V0Q29sTmFtZV0pO1xuXHRcdFx0fSBlbHNlIGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKX0sICR7XG5cdFx0XHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlXG5cdFx0XHRcdH1gO1xuXHRcdFx0fSBlbHNlIGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiVW5rbm93blwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiB0YWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKSArIFwiOiBcIiArIHRhYmxlVGFyZ2V0Q29sTmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoIXJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWVzc2FnZVN1YnRpdGxlO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgZmlyc3QgY29sdW1uIGZvciB0ZXh0IEFubm90YXRpb24sIHRoaXMgaXMgbmVlZGVkIHRvIHNldCBzdWJ0aXRsZSBvZiBNZXNzYWdlLlxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQmluZGluZyBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdHRhYmxlOiBNRENUYWJsZSxcblx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0dGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzXG4pOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBiaW5kaW5nQ29udGV4dDtcblx0aWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3QgeyBrZXkgfSA9IHRhYmxlQ29sUHJvcGVydHlbMF07XG5cdFx0Y29uc3Qgb01vZGVsID0gdGFibGU/LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbD8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7IC8vIG11c3QgYmUgYW4gT0RhdGFNZXRhTW9kZWwgdG8gbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb01ldGFNb2RlbD8uZ2V0TWV0YVBhdGgodGFibGVSb3dDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0aWYgKG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dC8kUGF0aGApKSB7XG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke2tleX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJpbmRpbmdDb250ZXh0O1xufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGNvbHVtbiBpbmZvIGZyb20gdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBvZiB0aGUgbWVzc2FnZSBwb3BvdmVyLlxuICogQHBhcmFtIG9NZXNzYWdlIE1lc3NhZ2Ugb2JqZWN0XG4gKiBAcGFyYW0gb1RhYmxlIE1kY1RhYmxlXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb2x1bW4gaW5mby5cbiAqL1xuXG5mdW5jdGlvbiBmZXRjaENvbHVtbkluZm8ob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBzQ29sTmFtZUZyb21NZXNzYWdlT2JqID0gb01lc3NhZ2U/LmdldFRhcmdldHMoKVswXS5zcGxpdChcIi9cIikucG9wKCk7XG5cdHJldHVybiAob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0S2V5Q29sdW1uSW5mbyhzQ29sTmFtZUZyb21NZXNzYWdlT2JqKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIENvbHVtbiBkYXRhIGRlcGVuZGluZyBvbiBpdHMgYXZhaWxhYmlsaXR5IGluIFRhYmxlLCB0aGlzIGlzIG5lZWRlZCBmb3Igc2V0dGluZyBzdWJ0aXRsZSBvZiBNZXNzYWdlLlxuICogQHBhcmFtIG9Db2xGcm9tVGFibGVTZXR0aW5nc1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIENvbHVtbiBkYXRhLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5nczogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBDb2x1bW5JbmZvVHlwZSB7XG5cdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IHsgc0NvbHVtbkluZGljYXRvcjogXCJcIiwgc0NvbHVtblZhbHVlOiBcIlwiIH07XG5cdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MpIHtcblx0XHQvLyBpZiBjb2x1bW4gaXMgbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb24sIHNob3cgb25seSByb3cgc3VidGl0bGUgdGV4dFxuXHRcdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJ1bmRlZmluZWRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9pZiBjb2x1bW4gaXMgaW4gdGFibGUgcGVyc29uYWxpemF0aW9uIGJ1dCBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiwgc2hvdyBDb2x1bW4gKEhpZGRlbikgOiA8Y29sTmFtZT5cblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJUX0NPTFVNTl9JTkRJQ0FUT1JfSU5fVEFCTEVfREVGSU5JVElPTlwiXG5cdFx0XHQpfSk6ICR7b0NvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsfWA7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJIaWRkZW5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiVW5rbm93blwiO1xuXHR9XG5cdHJldHVybiBvQ29sdW1uSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGEgZ2l2ZW4gY29udHJvbCBpZCBpcyBhIHBhcnQgb2YgVGFibGUuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc0NvbnRyb2xJZFxuICogQHJldHVybnMgVHJ1ZSBpZiBjb250cm9sIGlzIHBhcnQgb2YgdGFibGUuXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEluVGFibGUob1RhYmxlOiBNRENUYWJsZSwgc0NvbnRyb2xJZDogc3RyaW5nKTogVUk1RWxlbWVudFtdIHwgYm9vbGVhbiB7XG5cdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0aWYgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikgJiYgIW9Db250cm9sLmlzQTxUYWJsZT4oXCJzYXAubS5UYWJsZVwiKSkge1xuXHRcdHJldHVybiBvVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIG9FbGVtLmdldElkKCkgPT09IG9Db250cm9sLmdldElkKCk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRsZXQgb1BhcmVudENvbnRyb2wgPSBvQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdHdoaWxlIChcblx0XHRvUGFyZW50Q29udHJvbCAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAubS5Db2x1bW5MaXN0SXRlbVwiKVxuXHQpIHtcblx0XHRvUGFyZW50Q29udHJvbCA9IG9QYXJlbnRDb250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cblx0cmV0dXJuICEhb1BhcmVudENvbnRyb2wgJiYgb1BhcmVudENvbnRyb2wuaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiKTtcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiKTtcblx0XHRjYXNlIFwiU3VjY2Vzc1wiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIik7XG5cdH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSk7XG59XG5mdW5jdGlvbiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyhzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyh0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWw6IE1lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldC5zdGFydHNXaXRoKHNQYXRoVG9CZVJlbW92ZWQpKVxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRyZXR1cm4gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEdldCByZWxldmFudCBtZXNzYWdlcy5cbiAqIEBwYXJhbSBiQm91bmRNZXNzYWdlcyBUbyBnZXQgb25seSBib3VuZCBtZXNzYWdlc1xuICogQHBhcmFtIGJUcmFuc2l0aW9uT25seSBUbyBnZXQgb25seSB0cmFuc2l0aW9uIG1lc3NhZ2VzXG4gKiBAcGFyYW0gc1BhdGhUb0JlUmVtb3ZlZCBGaWx0ZXIgb3V0IGJvdW5kIG1lc3NhZ2VzIHdpdGggcGF0aFxuICogQHJldHVybnMgTWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMgPSBmYWxzZSwgYlRyYW5zaXRpb25Pbmx5ID0gZmFsc2UsIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiBNZXNzYWdlW10ge1xuXHRsZXQgaTtcblx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKSxcblx0XHRvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBbXTtcblx0bGV0IGFNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdGlmIChiQm91bmRNZXNzYWdlcyAmJiBiVHJhbnNpdGlvbk9ubHkgJiYgc1BhdGhUb0JlUmVtb3ZlZCkge1xuXHRcdGFNZXNzYWdlcyA9IGdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbChvTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZXMgPSBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Zm9yIChpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdCghYlRyYW5zaXRpb25Pbmx5IHx8IGFNZXNzYWdlc1tpXS5nZXRQZXJzaXN0ZW50KCkpICYmXG5cdFx0XHQoKGJCb3VuZE1lc3NhZ2VzICYmIGFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gIT09IFwiXCIpIHx8XG5cdFx0XHRcdCghYkJvdW5kTWVzc2FnZXMgJiYgKCFhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdIHx8IGFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gPT09IFwiXCIpKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpICE9PSBcIlwiICYmXG5cdFx0XHQhYVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkuaW5jbHVkZXMob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5zZXRNZXNzYWdlKFxuXHRcdFx0XHRgXFxuJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIil9JHthVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKX1gXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHQvL0ZpbHRlcmluZyBtZXNzYWdlcyBhZ2FpbiBoZXJlIHRvIGF2b2lkIHNob3dpbmcgcHVyZSB0ZWNobmljYWwgbWVzc2FnZXMgcmFpc2VkIGJ5IHRoZSBtb2RlbFxuXHRjb25zdCBiYWNrZW5kTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuZmlsdGVyKGlzTm9uVGVjaG5pY2FsTWVzc2FnZSk7XG5cblx0cmV0dXJuIGJhY2tlbmRNZXNzYWdlcztcbn1cbmV4cG9ydCB0eXBlIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0ge1xuXHRvcmlnaW5hbE1lc3NhZ2U/OiB7XG5cdFx0bWVzc2FnZT86IHN0cmluZztcblx0fSB8IG51bGw7XG5cdGh0dHBTdGF0dXM/OiBudW1iZXIgfCBudWxsO1xuXHRyZXRyeUFmdGVyPzogRGF0ZTtcblx0aXNDb25jdXJyZW50TW9kaWZpY2F0aW9uPzogYm9vbGVhbjtcbn07XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgYU1lc3NhZ2VzVG9CZURlbGV0ZWQgPSBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcywgdHJ1ZSwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cblx0aWYgKGFNZXNzYWdlc1RvQmVEZWxldGVkLmxlbmd0aCA+IDApIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzVG9CZURlbGV0ZWQpO1xuXHR9XG59XG4vL1RPRE86IFRoaXMgbXVzdCBiZSBtb3ZlZCBvdXQgb2YgbWVzc2FnZSBoYW5kbGluZ1xuZnVuY3Rpb24gc2V0TWVzc2FnZVN1YnRpdGxlKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcik6IHZvaWQge1xuXHRpZiAobWVzc2FnZS5hZGRpdGlvbmFsVGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3Qgc3VidGl0bGVDb2x1bW4gPSAob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRcdGNvbnN0IGVycm9yQ29udGV4dCA9IGFDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLmluY2x1ZGVzKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0fSk7XG5cdFx0bWVzc2FnZS5hZGRpdGlvbmFsVGV4dCA9IGVycm9yQ29udGV4dCA/IGVycm9yQ29udGV4dC5nZXRPYmplY3QoKVtzdWJ0aXRsZUNvbHVtbl0gOiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgbWV0aG9kIHJldHJpZXZlcyB0aGUgdmlzaWJsZSBzZWN0aW9ucyBmcm9tIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIG9PYmplY3RQYWdlTGF5b3V0IFRoZSBvYmplY3RQYWdlTGF5b3V0IG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byByZXRyaWV2ZSB0aGUgdmlzaWJsZSBzZWN0aW9ucy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIHZpc2libGUgc2VjdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sIHwgT2JqZWN0UGFnZUxheW91dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRyZXR1cm4gKG9PYmplY3RQYWdlTGF5b3V0IGFzIE9iamVjdFBhZ2VMYXlvdXQpLmdldFNlY3Rpb25zKCkuZmlsdGVyKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRyZXR1cm4gb1NlY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBjb250cm9sIGlkcyBmcm9tIG1lc3NhZ2UgYXJlIGEgcGFydCBvZiBhIGdpdmVuIHN1YnNlY3Rpb24uXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcmV0dXJucyBTdWJTZWN0aW9uIG1hdGNoaW5nIGNvbnRyb2wgaWRzLlxuICovXG5mdW5jdGlvbiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKTogVUk1RWxlbWVudFtdIHtcblx0cmV0dXJuIHN1YlNlY3Rpb25cblx0XHQuZmluZEVsZW1lbnRzKHRydWUsIChvRWxlbSkgPT4ge1xuXHRcdFx0cmV0dXJuIGZuRmlsdGVyVXBvbklkcyhvTWVzc2FnZU9iamVjdC5nZXRDb250cm9sSWRzKCksIG9FbGVtKTtcblx0XHR9KVxuXHRcdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHQvLyBjb250cm9scyBhcmUgc29ydGVkIGluIG9yZGVyIHRvIGhhdmUgdGhlIHRhYmxlIG9uIHRvcCBvZiB0aGUgYXJyYXlcblx0XHRcdC8vIGl0IHdpbGwgaGVscCB0byBjb21wdXRlIHRoZSBzdWJ0aXRsZSBvZiB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiByZWxhdGVkIGNvbnRyb2xzXG5cdFx0XHRpZiAoYS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICFiLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IHN0cmluZyB8IFJlZ0V4cCk6IHN0cmluZyB7XG5cdC8vdGhpcyBmdW5jdGlvbiBlc2NhcGVzIGEgc3RyaW5nIHRvIHVzZSBpdCBhcyBhIHJlZ2V4XG5cdGNvbnN0IGZuUmVnRXhwZXNjYXBlID0gZnVuY3Rpb24gKHM6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG5cdH07XG5cdC8vIGJhc2VkIG9uIHRoZSB0YXJnZXQgcGF0aCBvZiB0aGUgbWVzc2FnZSB3ZSByZXRyaWV2ZSB0aGUgcHJvcGVydHkgbmFtZS5cblx0Ly8gdG8gYWNoaWV2ZSBpdCB3ZSByZW1vdmUgdGhlIGJpbmRpbmdDb250ZXh0IHBhdGggYW5kIHRoZSByb3cgYmluZGluZyBwYXRoIGZyb20gdGhlIHRhcmdldFxuXHRpZiAoIW9Db250ZXh0UGF0aCkge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoVG9Fc2NhcGUgPSBgJHtvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpfS8keyhvVGFibGUgYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRvQ29udGV4dFBhdGggPSBuZXcgUmVnRXhwKGAke2ZuUmVnRXhwZXNjYXBlKGNvbnRleHRQYXRoVG9Fc2NhcGUpfVxcXFwoLipcXFxcKS9gKTtcblx0fVxuXHRyZXR1cm4gb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLnJlcGxhY2Uob0NvbnRleHRQYXRoLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBjb2x1bW4gaW5mb3JtYXRpb24gaWYgaXQgbWF0Y2hlcyB3aXRoIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gdGFyZ2V0IG9mIG1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHlcbiAqIEByZXR1cm5zIENvbHVtbiBuYW1lIGFuZCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2xJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCB9IHtcblx0bGV0IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1RhYmxlVGFyZ2V0Q29sOiBDb2x1bW4gfCB1bmRlZmluZWQgPSBvVGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdHJldHVybiBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSA9PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTtcblx0fSk7XG5cdGlmICghb1RhYmxlVGFyZ2V0Q29sKSB7XG5cdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBjdXN0b20gY29sdW1uICovXG5cdFx0Y29uc3Qgb0N1c3RvbUNvbHVtbiA9IChvVGFibGUuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIFRhYmxlRGVsZWdhdGUpLmdldENvbHVtbnNGb3Iob1RhYmxlKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdG9Db2x1bW46IFRhYmxlQ29sdW1uXG5cdFx0KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAoISEob0NvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uKS50ZW1wbGF0ZSAmJiBvQ29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0gPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IHx8XG5cdFx0XHRcdFx0b0NvbHVtbi5wcm9wZXJ0eUluZm9zWzBdLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9DdXN0b21Db2x1bW4pIHtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gb0N1c3RvbUNvbHVtbj8ubmFtZTtcblxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZVxuXHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID09PSBvQ29sdW1uLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdD8uZ2V0SGVhZGVyKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIElmIHRoZSB0YXJnZXQgY29sdW1uIGlzIG5vdCBmb3VuZCwgd2UgY2hlY2sgZm9yIGEgZmllbGQgZ3JvdXAgKi9cblx0XHRcdGNvbnN0IGFDb2x1bW5zID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpO1xuXHRcdFx0Y29uc3QgY29sdW1uRGVmaW5pdGlvbiA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IFRhYmxlQ29sdW1uKSB7XG5cdFx0XHRcdGlmIChvQ29sdW1uLmtleS5pbmNsdWRlcyhcIjo6RmllbGRHcm91cDo6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db2x1bW4ucHJvcGVydHlJbmZvcz8uZmluZChmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHwgcHJvcGVydHlJbmZvLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSkgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0LyogY2hlY2sgaWYgdGhlIGNvbHVtbiB3aXRoIHRoZSBmaWVsZCBncm91cCBpcyB2aXNpYmxlIGluIHRoZSB0YWJsZTogKi9cblx0XHRcdGxldCBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBmYWxzZTtcblx0XHRcdGlmIChjb2x1bW5EZWZpbml0aW9uICYmIGNvbHVtbkRlZmluaXRpb24ubGFiZWwpIHtcblx0XHRcdFx0YklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID0gb1RhYmxlLmdldENvbHVtbnMoKS5zb21lKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0XHRcdFx0XHRyZXR1cm4gY29sdW1uLmdldEhlYWRlcigpID09PSBjb2x1bW5EZWZpbml0aW9uLmxhYmVsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5sYWJlbCA6IHVuZGVmaW5lZDtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID8gY29sdW1uRGVmaW5pdGlvbj8ua2V5IDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlVGFyZ2V0Q29sLmdldEhlYWRlcigpO1xuXHR9XG5cdHJldHVybiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHNUYWJsZVRhcmdldENvbE5hbWUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgVGFibGUgYW5kIGNvbHVtbiBpbmZvIGlmIGFueSBvZiBpdCBtYXRjaGVzIHRoZSB0YXJnZXQgZnJvbSBNZXNzYWdlLlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHJldHVybnMgVGFibGUgaW5mbyBtYXRjaGluZyB0aGUgbWVzc2FnZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5kVGFyZ2V0SW5mbyhcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcbik6IFRhcmdldFRhYmxlSW5mb1R5cGUge1xuXHRjb25zdCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlLCBvTWVzc2FnZU9iamVjdCk7XG5cdGNvbnN0IG9UYWJsZUNvbEluZm8gPSBnZXRUYWJsZUNvbEluZm8ob1RhYmxlLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSk7XG5cdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IG9FbGVtZW50Py5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHQ/IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDb250ZXh0cygpXG5cdFx0OiAob1Jvd0JpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IG9UYWJsZUNvbEluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMuZmluZChmdW5jdGlvbiAocm93Q29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHJvd0NvbnRleHQgJiYgb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yocm93Q29udGV4dC5nZXRQYXRoKCkpID09PSAwO1xuXHRcdH0pXG5cdH07XG5cdHJldHVybiBvVGFyZ2V0VGFibGVJbmZvO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gYUNvbnRyb2xJZHNcbiAqIEBwYXJhbSBvSXRlbVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSBtYXRjaGVzIG9uZSBvZiB0aGUgY29udHJvbHNcbiAqL1xuZnVuY3Rpb24gZm5GaWx0ZXJVcG9uSWRzKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0cmV0dXJuIGFDb250cm9sSWRzLnNvbWUoZnVuY3Rpb24gKHNDb250cm9sSWQpIHtcblx0XHRpZiAoc0NvbnRyb2xJZCA9PT0gb0l0ZW0uZ2V0SWQoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgZ3JvdXAgbmFtZSBoYXZpbmcgc2VjdGlvbiBhbmQgc3Vic2VjdGlvbiBkYXRhLlxuICogQHBhcmFtIHNlY3Rpb25cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gYk11bHRpcGxlU3ViU2VjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0VGFibGVJbmZvXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHBhcmFtIGluY2x1ZGVUYWJsZUdyb3VwTmFtZVxuICogQHJldHVybnMgR3JvdXAgbmFtZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0aW5jbHVkZVRhYmxlR3JvdXBOYW1lID0gdHJ1ZVxuKTogc3RyaW5nIHtcblx0cmV0dXJuIChcblx0XHRzZWN0aW9uLmdldFRpdGxlKCkgK1xuXHRcdChzdWJTZWN0aW9uLmdldFRpdGxlKCkgJiYgYk11bHRpcGxlU3ViU2VjdGlvbnMgPyBgLCAke3N1YlNlY3Rpb24uZ2V0VGl0bGUoKX1gIDogXCJcIikgK1xuXHRcdChvVGFyZ2V0VGFibGVJbmZvICYmIG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgJiYgaW5jbHVkZVRhYmxlR3JvdXBOYW1lXG5cdFx0XHQ/IGAsICR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyfWBcblx0XHRcdDogXCJcIilcblx0KTtcbn1cblxuZnVuY3Rpb24gYklzT3JwaGFuRWxlbWVudChvRWxlbWVudDogVUk1RWxlbWVudCwgYUVsZW1lbnRzOiBVSTVFbGVtZW50W10pOiBib29sZWFuIHtcblx0cmV0dXJuICFhRWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQgIT09IG9FbGVtKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZmlsdGVycyBhbmQgZ2l2ZXMgYmFjayB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlIGNvbnRleHQgcGFzc2VkLlxuICogQHBhcmFtIGNvbnRleHRcbiAqIEByZXR1cm5zIE1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0ZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IE1lc3NhZ2VbXSB7XG5cdGNvbnN0IG9NZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cdGxpc3RCaW5kaW5nLmZpbHRlcihcblx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHR0ZXN0OiAobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID4gMCAmJiBtZXNzYWdlLmdldFRhcmdldHMoKVswXS5zdGFydHNXaXRoKGNvbnRleHQuZ2V0UGF0aCgpKVxuXHRcdH0pXG5cdCk7XG5cdGNvbnN0IGN1cnJlbnRDb250ZXh0cyA9IGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRyZXR1cm4gY3VycmVudENvbnRleHRzLm1hcCgoY3VycmVudENvbnRleHQpID0+IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGJvb2xlYW4gdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBwcmVzZW50IGluIHRoZSBkaWFsb2cgYmFzZWQgb24gdGhlIGNvbnRyb2wgSWRzLlxuICogQHBhcmFtIGNvbnRyb2xJZHMgQXJyYXkgb2YgY29udHJvbCBJZHNcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdGhlIHRhcmdldCBwcmVzZW50IGluIHRoZSBkaWFsb2cuXG4gKi9cbmZ1bmN0aW9uIGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nKGNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdGxldCBvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQsIGVycm9yRmllbGRDb250cm9sO1xuXHRjb25zdCBpbmRleCA9IEluZmluaXR5O1xuXHRpZiAoY29udHJvbElkcy5sZW5ndGggPT09IDEpIHtcblx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkc1swXSk7XG5cdFx0ZXJyb3JGaWVsZENvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZHNbMF0pIGFzIFVJNUVsZW1lbnQ7XG5cdH0gZWxzZSB7XG5cdFx0bGV0IGVycm9yQ29udHJvbElkO1xuXHRcdGNvbnRyb2xJZHMuZm9yRWFjaCgoY29udHJvbElkKSA9PiB7XG5cdFx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXHRcdFx0aWYgKGNvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0ZXJyb3JDb250cm9sSWQgPSBjb250cm9sSWQ7XG5cdFx0XHRcdG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChlcnJvckNvbnRyb2xJZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0d2hpbGUgKG9Db250cm9sKSB7XG5cdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPSBJbmZpbml0eTtcblx0XHRpZiAob0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2cpIHtcblx0XHRcdGlmIChpbmRleCA+IGZpZWxkUmFua2luRGlhbG9nKSB7XG5cdFx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGRpYWxvZydzIGNvbnRyb2xcblx0XHRcdFx0ZXJyb3JGaWVsZENvbnRyb2w/LmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBUcmFuc2l0aW9uIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0IHBhdGggd2hlbiB0aGUgb2JqZWN0IHBhZ2UgaXMgY2xvc2VkLlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHdoaWNoIHRoZSBtZXNzYWdlcyBhcmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dChvQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRjb25zdCBpc01lc3NhZ2VTdHJpcE1lc3NhZ2U6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdG1lc3NhZ2VzSW5Nb2RlbD8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdGNvbnN0IGlzU2luZ2xlVGFyZ2V0ID0gbWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxO1xuXHRcdGNvbnN0IGlzVGFyZ2V0TWF0Y2hpbmcgPSBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gb0NvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRjb25zdCBpc1RyYW5zaXRpb25NZXNzYWdlID0gbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWU7XG5cblx0XHRpZiAoaXNTaW5nbGVUYXJnZXQgJiYgaXNUYXJnZXRNYXRjaGluZyAmJiBpc1RyYW5zaXRpb25NZXNzYWdlKSB7XG5cdFx0XHRpc01lc3NhZ2VTdHJpcE1lc3NhZ2UucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdH0pO1xuXG5cdGlmIChpc01lc3NhZ2VTdHJpcE1lc3NhZ2UubGVuZ3RoID09PSAxKSB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGlzTWVzc2FnZVN0cmlwTWVzc2FnZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgY29udGV4dCBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIHdoZW4gdGhlcmUgaXMgZXJyb3Igb24gdGhlIGRpYWxvZyBhbmQgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW4uXG4gKiBAcGFyYW0gbWVzc2FnZXMgQXJyYXkgb2YgbWVzc2FnZXNcbiAqIEBwYXJhbSBjb250ZXh0cyBDb250ZXh0cyBhcnJheVxuICovXG5mdW5jdGlvbiByZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwobWVzc2FnZXM/OiBNZXNzYWdlW10sIGNvbnRleHRzPzogQ29udGV4dFtdKTogdm9pZCB7XG5cdGNvbnN0IGJvdW5kQ29udGV4dE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGNvbnRleHRzPy5sZW5ndGggPT09IDEpIHtcblx0XHRtZXNzYWdlcz8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IGNvbnRleHRzPy5bMF0/LmdldFBhdGgoKSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGJvdW5kQ29udGV4dE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKGJvdW5kQ29udGV4dE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYm91bmRDb250ZXh0TWVzc2FnZXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nIGZyb20gc2hvd2luZyB0aGUgbWVzc2FnZXMuXG4gKiBAcGFyYW0gbWVzc2FnZXMgQXJyYXkgb2YgbWVzc2FnZXNcbiAqIEByZXR1cm5zIEFycmF5IG9mIG1lc3NhZ2VzIGFmdGVyIHJlbW92aW5nIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2cobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdGNvbnN0IG1lc3NhZ2VzVG9CZVJlbW92ZWQgPSBtZXNzYWdlcz8uZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIik7XG5cdG1lc3NhZ2VzID0gbWVzc2FnZXM/LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4gIW1lc3NhZ2VzVG9CZVJlbW92ZWQ/LmluY2x1ZGVzKG1lc3NhZ2UpKTtcblx0cmV0dXJuIG1lc3NhZ2VzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0KGNvbnRleHQ6IENvbnRleHQpOiB2b2lkIHtcblx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0LmdldERhdGEoKVxuXHRcdD8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRhcmdldHMgPSBtZXNzYWdlLmdldFRhcmdldHMoKTtcblx0XHRcdGlmIChtZXNzYWdlVGFyZ2V0cy5sZW5ndGggPT09IDEgJiYgbWVzc2FnZVRhcmdldHNbMF0uaW5jbHVkZXMoY29udGV4dC5nZXRQYXRoKCkpICYmIG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpKSB7XG5cdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKiBAbmFtZXNwYWNlXG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG1lc3NhZ2VIYW5kbGluZzogbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IGdldE1lc3NhZ2VzLFxuXHRnZXRVSURlY2lzaW9uczogZ2V0VUlEZWNpc2lvbnMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nLFxuXHRzZXRNZXNzYWdlU3VidGl0bGU6IHNldE1lc3NhZ2VTdWJ0aXRsZSxcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0LFxuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24sXG5cdGZuRmlsdGVyVXBvbklkczogZm5GaWx0ZXJVcG9uSWRzLFxuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IGdldFRhYmxlQW5kVGFyZ2V0SW5mbyxcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSxcblx0YklzT3JwaGFuRWxlbWVudDogYklzT3JwaGFuRWxlbWVudCxcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUsXG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUsXG5cdGdldFRhYmxlQ29sSW5mbzogZ2V0VGFibGVDb2xJbmZvLFxuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiBnZXRUYWJsZUNvbFByb3BlcnR5LFxuXHRnZXRNZXNzYWdlU3VidGl0bGU6IGdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogZGV0ZXJtaW5lQ29sdW1uSW5mbyxcblx0ZmV0Y2hDb2x1bW5JbmZvOiBmZXRjaENvbHVtbkluZm8sXG5cdGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzOiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyxcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogZm5DYWxsYmFja1NldEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSxcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogc2V0R3JvdXBOYW1lTFJUYWJsZSxcblx0aXNDb250cm9sSW5UYWJsZTogaXNDb250cm9sSW5UYWJsZSxcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93LFxuXHRnZXRGaWx0ZXJzRm9yTWVzc2FnZXM6IGdldEZpbHRlcnNGb3JNZXNzYWdlcyxcblx0c2hvd01lc3NhZ2VzSW5VSTogc2hvd01lc3NhZ2VzSW5VSSxcblx0c2hvd01lc3NhZ2VEaWFsb2dDb250cm9sOiBzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wsXG5cdHNob3dNZXNzYWdlVG9hc3Q6IHNob3dNZXNzYWdlVG9hc3QsXG5cdHNob3dNZXNzYWdlQm94Q29udHJvbDogc2hvd01lc3NhZ2VCb3hDb250cm9sLFxuXHRnZXRNZXNzYWdlc0ZvckNvbnRleHQ6IGdldE1lc3NhZ2VzRm9yQ29udGV4dCxcblx0aXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2c6IGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nLFxuXHRyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWw6IHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCxcblx0cmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nLFxuXHRzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGU6IHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZSxcblx0dXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGU6IHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlLFxuXHR1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZTogdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUsXG5cdGNsb3NlTWVzc2FnZUJveDogY2xvc2VNZXNzYWdlQm94LFxuXHRyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0OiByZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0LFxuXHRjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlczogY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMsXG5cdGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZTogYWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlLFxuXHRpc05vblRlY2huaWNhbE1lc3NhZ2U6IGlzTm9uVGVjaG5pY2FsTWVzc2FnZSxcblx0cmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dDogcmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQg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LEVBQUVBLGtCQUFrQjtJQUN0QzdFLHNDQUFzQyxFQUFFQSxzQ0FBc0M7SUFDOUVxRix5Q0FBeUMsRUFBRUEseUNBQXlDO0lBQ3BGRyxlQUFlLEVBQUVBLGVBQWU7SUFDaEM5RSxxQkFBcUIsRUFBRUEscUJBQXFCO0lBQzVDd0csc0JBQXNCLEVBQUVBLHNCQUFzQjtJQUM5Q0ksZ0JBQWdCLEVBQUVBLGdCQUFnQjtJQUNsQ25LLDhCQUE4QixFQUFFQSw4QkFBOEI7SUFDOURzQywrQkFBK0IsRUFBRUEsK0JBQStCO0lBQ2hFckIsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDRixtQkFBbUIsRUFBRUEsbUJBQW1CO0lBQ3hDcUQsa0JBQWtCLEVBQUVBLGtCQUFrQjtJQUN0Q3dCLG1CQUFtQixFQUFFQSxtQkFBbUI7SUFDeENWLGVBQWUsRUFBRUEsZUFBZTtJQUNoQ0ksMENBQTBDLEVBQUVBLDBDQUEwQztJQUN0RnRMLGNBQWMsRUFBRUEsY0FBYztJQUM5QnZKLDZCQUE2QixFQUFFQSw2QkFBNkI7SUFDNUQ4UixzQkFBc0IsRUFBRUEsc0JBQXNCO0lBQzlDeEMseUJBQXlCLEVBQUVBLHlCQUF5QjtJQUNwRGpLLDRCQUE0QixFQUFFQSw0QkFBNEI7SUFDMURnSyxtQkFBbUIsRUFBRUEsbUJBQW1CO0lBQ3hDK0QsZ0JBQWdCLEVBQUVBLGdCQUFnQjtJQUNsQ0ksMEJBQTBCLEVBQUVBLDBCQUEwQjtJQUN0RGhQLHFCQUFxQixFQUFFQSxxQkFBcUI7SUFDNUNvQyxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDSyx3QkFBd0IsRUFBRUEsd0JBQXdCO0lBQ2xERCxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDRSxxQkFBcUIsRUFBRUEscUJBQXFCO0lBQzVDMlMscUJBQXFCLEVBQUVBLHFCQUFxQjtJQUM1Q2pTLDZCQUE2QixFQUFFQSw2QkFBNkI7SUFDNURnVCw4QkFBOEIsRUFBRUEsOEJBQThCO0lBQzlERyxzQ0FBc0MsRUFBRUEsc0NBQXNDO0lBQzlFekosOEJBQThCLEVBQUVBLDhCQUE4QjtJQUM5RFosc0NBQXNDLEVBQUVBLHNDQUFzQztJQUM5RU0sbUNBQW1DLEVBQUVBLG1DQUFtQztJQUN4RS9DLGVBQWUsRUFBRUEsZUFBZTtJQUNoQ3FNLGtDQUFrQyxFQUFFQSxrQ0FBa0M7SUFDdEV4VixnQ0FBZ0MsRUFBRUEsZ0NBQWdDO0lBQ2xFRSx3QkFBd0IsRUFBRUEsd0JBQXdCO0lBQ2xEOUMscUJBQXFCLEVBQUVBLHFCQUFxQjtJQUM1QytZLHFDQUFxQyxFQUFFQTtFQUN4QyxDQUFDO0VBQUMsT0FFYTdWLGVBQWU7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==