@sapui5/sap.fe.macros 1.138.0 → 1.139.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +21 -4
  8. package/src/sap/fe/macros/Field.ts +21 -3
  9. package/src/sap/fe/macros/FooterContent.js +40 -10
  10. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MultiValueField.js +17 -4
  14. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  15. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  16. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  17. package/src/sap/fe/macros/Share.js +73 -40
  18. package/src/sap/fe/macros/Share.tsx +29 -1
  19. package/src/sap/fe/macros/ValueHelp.js +3 -4
  20. package/src/sap/fe/macros/ValueHelp.tsx +2 -3
  21. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  22. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  23. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  24. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  25. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  26. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  27. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  28. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +19 -3
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +15 -4
  33. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  34. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  35. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  36. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  37. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  38. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  39. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  40. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  41. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  42. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  43. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  44. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  45. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  46. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  47. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  48. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  49. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  50. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  51. package/src/sap/fe/macros/field/FieldBaseDelegate.js +9 -3
  52. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +22 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  55. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  56. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  57. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  58. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  59. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  60. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  61. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  62. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  63. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  64. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  65. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  66. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  67. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  68. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  69. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  70. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  71. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  72. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  73. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  74. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  75. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  76. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  77. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  78. package/src/sap/fe/macros/internal/field/DisplayStyle.js +49 -11
  79. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +51 -4
  80. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  81. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  82. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  83. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  84. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  85. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  86. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  87. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +7 -3
  88. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +8 -7
  89. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  90. package/src/sap/fe/macros/library.js +1 -1
  91. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  92. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  93. package/src/sap/fe/macros/messagebundle.properties +37 -29
  94. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  95. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  96. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  97. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  98. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  99. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  100. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  101. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  102. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  103. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  104. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  105. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  106. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  107. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  108. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  109. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  110. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  111. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  112. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  113. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  114. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  116. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  117. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  118. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  119. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  120. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  121. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  122. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  123. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  124. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  125. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  126. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  128. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  129. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  131. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  132. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  133. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  135. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  137. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  138. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  139. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  140. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  141. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  142. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  143. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  144. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  145. package/src/sap/fe/macros/table/Action.js +24 -2
  146. package/src/sap/fe/macros/table/Action.ts +13 -0
  147. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  148. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  149. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  150. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  151. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  152. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  153. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  154. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  155. package/src/sap/fe/macros/table/Column.js +3 -3
  156. package/src/sap/fe/macros/table/Column.ts +2 -2
  157. package/src/sap/fe/macros/table/MdcTableTemplate.js +18 -8
  158. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +30 -5
  159. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  160. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  161. package/src/sap/fe/macros/table/Table.block.js +137 -108
  162. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  163. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  164. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  165. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  166. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  167. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  168. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  169. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -19
  170. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -23
  171. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  172. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  173. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  174. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  175. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  176. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  177. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  178. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  179. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +11 -6
  180. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +19 -14
  181. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  182. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  183. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  184. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -839,6 +839,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
839
839
  const tableAPI = table.getParent();
840
840
  const bIsSuspended = tableAPI?.getProperty("bindingSuspended");
841
841
  if (!bIsSuspended) {
842
+ // if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
843
+ // parameter for the collectionMetaPath
844
+ if (bindingInfo.parameters?.$$getKeepAliveContext === true) {
845
+ const collectionPath = DelegateUtil.getCustomData(table, "targetCollectionPath") ?? "";
846
+ const internalModel = table.getModel("internal");
847
+ const keptAliveLists = internalModel?.getObject("/keptAliveLists") ?? {};
848
+ if (!keptAliveLists[collectionPath]) {
849
+ keptAliveLists[collectionPath] = table.getId();
850
+ internalModel?.setProperty("/keptAliveLists", keptAliveLists);
851
+ } else if (keptAliveLists[collectionPath] !== table.getId()) {
852
+ delete bindingInfo.parameters.$$getKeepAliveContext;
853
+ }
854
+ }
842
855
  let needManualRefresh = false;
843
856
  const view = CommonUtils.getTargetView(table);
844
857
  const internalBindingContext = table.getBindingContext("internal");
@@ -929,20 +942,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
929
942
  rowBindingInfo.parameters ??= {};
930
943
  rowBindingInfo.parameters.$$updateGroupId = CommonUtils.INLINEEDIT_UPDATEGROUPID;
931
944
  }
932
-
933
- // if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
934
- // parameter for the collectionMetaPath
935
- if (rowBindingInfo.parameters?.$$getKeepAliveContext === true) {
936
- const collectionPath = DelegateUtil.getCustomData(oTable, "targetCollectionPath") ?? "";
937
- const internalModel = oTable.getModel("internal");
938
- const keptAliveLists = internalModel?.getObject("/keptAliveLists") ?? {};
939
- if (!keptAliveLists[collectionPath]) {
940
- keptAliveLists[collectionPath] = oTable.getId();
941
- internalModel?.setProperty("/keptAliveLists", keptAliveLists);
942
- } else if (keptAliveLists[collectionPath] !== oTable.getId()) {
943
- delete rowBindingInfo.parameters.$$getKeepAliveContext;
944
- }
945
- }
946
945
  return rowBindingInfo;
947
946
  },
948
947
  _internalUpdateBindingInfo: function (oTable, oBindingInfo) {
@@ -978,9 +977,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
978
977
  if (oDataStateIndicator && oDataStateIndicator.isFiltering()) {
979
978
  // Include filters on messageStrip
980
979
  if (oBindingInfo.filters.length > 0) {
981
- const bindingInfoFilters = oBindingInfo.filters.filter(filter => filter !== Filter.NONE);
982
980
  oFilter = new Filter({
983
- filters: bindingInfoFilters.concat(oFilterInfo.filters),
981
+ filters: oBindingInfo.filters.concat(oFilterInfo.filters),
984
982
  and: true
985
983
  });
986
984
  this.updateBindingInfoWithSearchQuery(oBindingInfo, oFilterInfo, oFilter);
@@ -1193,7 +1191,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
1193
1191
  const oMetaModel = this._getMetaModel(mPropertyBag),
1194
1192
  oModifier = mPropertyBag.modifier,
1195
1193
  sTableId = oModifier.getId(table),
1196
- aColumns = table.isA ? this.getColumnsFor(table) : null;
1194
+ aColumns = table.isA ? this.getColumnsFor(table) : null,
1195
+ tableAPI = table.getParent();
1197
1196
  if (!aColumns) {
1198
1197
  // We return null here because everything should apply at runtime
1199
1198
  return Promise.resolve(null);
@@ -1233,7 +1232,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
1233
1232
  if (!oMetaModel) {
1234
1233
  return Promise.resolve(null);
1235
1234
  }
1236
- const propertyInfo = table.getParent().getEnhancedFetchedPropertyInfos().find(function (propInfo) {
1235
+ let propertyInfos = tableAPI.getEnhancedFetchedPropertyInfos();
1236
+ if (!propertyInfos.length) {
1237
+ // If the propertyInfos are not fetched yet, we need to fetch them
1238
+ // This is the case when the table is not created yet
1239
+ await this.fetchProperties(table);
1240
+ propertyInfos = tableAPI.getEnhancedFetchedPropertyInfos();
1241
+ }
1242
+ const propertyInfo = propertyInfos.find(function (propInfo) {
1237
1243
  return propInfo.name === propertyInfoName;
1238
1244
  });
1239
1245
  const oPropertyContext = oMetaModel.createBindingContext(propertyInfo.annotationPath);
@@ -1371,4 +1377,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
1371
1377
  }
1372
1378
  });
1373
1379
  }, false);
1374
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0Q29sdW1uc0ZvciIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9UYWJsZSIsIm9DYXBhYmlsaXRpZXMiLCJYTFNYIiwib01vZGVsIiwiRGVsZWdhdGVVdGlsIiwiZmV0Y2hNb2RlbCIsInRoZW4iLCJtb2RlbCIsImFTdXBwb3J0ZWRGb3JtYXRzIiwiYUxvd2VyRm9ybWF0cyIsIm1hcCIsImVsZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsIm9Bbm5vdGF0aW9uIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRmlsdGVyYWJsZSIsImlzUGF0aEZpbHRlcmFibGUiLCJyZWxhdGl2ZVBhdGgiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaXNQYXJ0T2ZDdXN0b21Db2x1bW4iLCJpc0NvbnN0YW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwiYXBwQ29tcG9uZW50Iiwic0Fic29sdXRlTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ29tcGxleFR5cGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldEN1c3RvbURhdGEiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidG9vbHRpcCIsIl9nZXRUeXBlQ29uZmlnIiwibmFtZSIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCJuZWVkTWFudWFsUmVmcmVzaCIsInZpZXciLCJtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSIsInBlbmRpbmdNYW51YWxVcGRhdGUiLCJuZXdTb3J0ZXJzIiwic3RyaW5naWZ5Iiwidmlld0RhdGEiLCJvbGRGaWx0ZXJzIiwicHJldmlvdXNTb3J0ZXJzIiwiZmlsdGVyTm90Q2hhbmdlZCIsImRlZXBFcXVhbCIsIkxSTXVsdGlWaWV3RW5hYmxlZCIsInZpZXdzIiwiZW5hYmxlQW5hbHl0aWNzIiwic2V0QWdncmVnYXRlQ29uZGl0aW9ucyIsInNldEdyb3VwQ29uZGl0aW9ucyIsInNldFRhYmxlQmluZGluZ0luZm8iLCJzZXREb3dubG9hZFVybCIsInJlcXVlc3RSZWZyZXNoIiwiZ2V0R3JvdXBJZCIsImZpbmFsbHkiLCJzdG9yZWRFdmVudHMiLCJfcmVmIiwiZXZlbnRJZCIsImNhbGxiYWNrIiwibGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsIl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUiLCJyb3dCaW5kaW5nSW5mbyIsImdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbyIsImJpbmRpbmdDb250ZXh0IiwidGFibGVDYW5CZUluSW5saW5lRWRpdCIsImdldEJpbmRpbmciLCJnZXRVcGRhdGVHcm91cElkIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwiJCR1cGRhdGVHcm91cElkIiwiJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiY29sbGVjdGlvblBhdGgiLCJpbnRlcm5hbE1vZGVsIiwia2VwdEFsaXZlTGlzdHMiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJiaW5kaW5nSW5mb0ZpbHRlcnMiLCJOT05FIiwidXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkiLCJhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZmlsdGVySW5mbyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJwYXlsb2FkIiwiZ2V0UGF5bG9hZCIsImZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJPbkFjdGl2ZSIsIm9wZXJhdG9yIiwidmFsdWUxIiwiX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50IiwibW9kaWZpZXIiLCJ0YWJsZUlkIiwic2xvdENvbHVtbnNYTUwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJqc3giLCJyZW5kZXJBc1hNTCIsImdldFNsb3RDb2x1bW4iLCJzbG90WE1MIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJvVGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm5vZGVOYW1lIiwicmVwbGFjZVdpdGgiLCJyZW1vdmUiLCJyZXN1bHRYTUwiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwibW9kZWxzIiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCIsInRhcmdldHMiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiRXhjZWxGb3JtYXQiLCJnZXRFeGNlbERhdGVmcm9tSlNEYXRlIiwiZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lIiwiZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSIsIl9nZXRWSFJlbGV2YW50RmllbGRzIiwic01ldGFkYXRhUGF0aCIsInNCaW5kaW5nUGF0aCIsImFGaWVsZHMiLCJvRGF0YUZpZWxkRGF0YSIsIiRraW5kIiwib1ZhbHVlIiwiaUluZGV4IiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4iLCJhQ29sdW1ucyIsImFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbiIsInNBZGRWaXNpYmxlQ29sdW1uTmFtZSIsInNWaXNpYmxlQ29sdW1uTmFtZSIsImJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQiLCJzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciIsImkiLCJqIiwicmVtb3ZlSXRlbSIsIm9Qcm9wZXJ0eUluZm9OYW1lIiwibVByb3BlcnR5QmFnIiwiZG9SZW1vdmVJdGVtIiwib01vZGlmaWVyIiwic0RhdGFQcm9wZXJ0eSIsImluc2VydEFnZ3JlZ2F0aW9uIiwiX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzIiwiX2dldE1ldGFNb2RlbCIsIl9nZXRHcm91cElkIiwic1JldHJpZXZlZEdyb3VwSWQiLCJfaW5zZXJ0QWdncmVnYXRpb24iLCJvVmFsdWVIZWxwIiwiYWRkSXRlbSIsInByb3BlcnR5SW5mb05hbWUiLCJzVGFibGVJZCIsIndhcm5pbmciLCJzUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJvVGFibGVDb250ZXh0IiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiZ2V0Q29tcHV0ZWRDb2x1bW4iLCJnZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zIiwicHJvcEluZm8iLCJvUHJvcGVydHlDb250ZXh0IiwiZm5UZW1wbGF0ZUZyYWdtZW50Iiwib0luUHJvcGVydHlJbmZvIiwib1ZpZXciLCJiRGlzcGxheU1vZGUiLCJzVGFibGVUeXBlQ3VzdG9tRGF0YSIsInNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIiwiYWxsIiwiYUN1c3RvbURhdGEiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsInJlYWRPbmx5IiwidGFibGVUeXBlIiwiaWQiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiY29sbGVjdGlvbiIsImNyZWF0aW9uTW9kZSIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwidGhpcyIsInRhYmxlQ29sbGVjdGlvbiIsImhhbmRsZXJQcm92aWRlciIsIlRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIiLCJjb2xsZWN0aW9uRW50aXR5IiwiY29tcHV0ZWRDb2x1bW5YTUwiLCJnZXRDb2x1bW5UZW1wbGF0ZSIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50IiwiZGVzdHJveSIsImdldEZpbHRlckRlbGVnYXRlIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJvUGFyZW50Q29udHJvbCIsInNQcm9wZXJ0eUluZm9OYW1lIiwicmVwbGFjZSIsImdldFR5cGVNYXAiLCJmb3JtYXRHcm91cEhlYWRlciIsIm9iaiIsImRhdGFCYXNlVHlwZSIsImV4dGVybmFsRm9ybWF0IiwiVmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXRXaXRoQnJhY2tldHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLCBGaWVsZEdyb3VwVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFeHRlbmRcIjtcbmltcG9ydCB7IGlzQ29uc3RhbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcblxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jYXJkcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbHVtbkV4cG9ydFNldHRpbmdzLFxuXHRDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21CYXNlZFRhYmxlQ29sdW1uLFxuXHRUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgRGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEV4Y2VsRm9ybWF0IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0V4Y2VsRm9ybWF0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCwgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1R5cGVGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuaW1wb3J0IHsgZ2V0Q29sdW1uVGVtcGxhdGUsIGdldENvbXB1dGVkQ29sdW1uLCBnZXRTbG90Q29sdW1uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVSdW50aW1lXCI7XG5pbXBvcnQgVGFibGVTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbEJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgSnNDb250cm9sVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIE1EQ1RhYmxlUHJvcGVydHlJbmZvIGFzIFByb3BlcnR5SW5mbywgZGVmYXVsdCBhcyBUYWJsZSwgVmlzdWFsU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlQmFzZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCwgZGVmYXVsdCBhcyB2NENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4uL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuY29uc3QgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SID0gXCIvc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiO1xuY29uc3QgU0VBUkNIX0hBU19CRUVOX0ZJUkVEID0gXCJzZWFyY2hGaXJlZFwiO1xuY29uc3QgQ09MVU1OX0hBU19CRUVOX0FEREVEID0gXCJjb2x1bW5BZGRlZFwiO1xuY29uc3QgUFJFVklPVVNfU09SVEVSUyA9IFwicHJldmlvdXNTb3J0ZXJzXCI7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBzYXAudWkubWRjLlRhYmxlLlxuICogPGgzPjxiPk5vdGU6PC9iPjwvaDM+XG4gKiBUaGUgY2xhc3MgaXMgZXhwZXJpbWVudGFsIGFuZCB0aGUgQVBJIGFuZCB0aGUgYmVoYXZpb3IgYXJlIG5vdCBmaW5hbGl6ZWQuIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuICogQGF1dGhvciBTQVAgU0VcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAc2luY2UgMS42OS4wXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGVCYXNlLCB7XG5cdGFwaVZlcnNpb246IDIsXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgRmllbGRHcm91cCBjb2x1bW4uXG5cdCAqIFRoZSB3aWR0aCBvZiB0aGUgRmllbGRHcm91cCBpcyB0aGUgd2lkdGggb2YgdGhlIHdpZGVzdCBwcm9wZXJ0eSBjb250YWluZWQgaW4gdGhlIEZpZWxkR3JvdXAgKGluY2x1ZGluZyB0aGUgbGFiZWwgaWYgc2hvd0RhdGFGaWVsZHNMYWJlbCBpcyB0cnVlKVxuXHQgKiBUaGUgcmVzdWx0IG9mIHRoaXMgY2FsY3VsYXRpb24gaXMgc3RvcmVkIGluIHRoZSB2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uLm1pbldpZHRoIHByb3BlcnR5LCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBNREN0YWJsZS5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIEN1cnJlbnQgcHJvcGVydHlJbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9zIEFycmF5IG9mIHByb3BlcnRpZXNcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuXHQgKi9cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXA6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLFxuXHRcdHByb3BlcnR5SW5mb3M6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXVxuXHQpIHtcblx0XHRpZiAocHJvcGVydHlJbmZvLmtleS5pbmRleE9mKFwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjo6RmllbGRHcm91cDo6XCIpID09PSAwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSB0YWJsZS5nZXRDb2x1bW5zKCkuZmluZCgoY29sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2wuZ2V0UHJvcGVydHlLZXkoKSA9PT0gcHJvcGVydHlJbmZvLmtleTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbCA9IGNvbHVtbiA/IGNvbHVtbi5kYXRhKFwic2hvd0RhdGFGaWVsZHNMYWJlbFwiKSA9PT0gXCJ0cnVlXCIgOiBmYWxzZTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQocHJvcGVydHlJbmZvLmFubm90YXRpb25QYXRoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhRGF0YSA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy5jb252ZXJ0ZWRUeXBlcztcblx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb247XG5cdFx0XHRjb25zdCBvRmllbGRHcm91cCA9IG9EYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRjb25zdCBhRmllbGRXaWR0aDogbnVtYmVyW10gPSBbXTtcblx0XHRcdG9GaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAob0RhdGE6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0XHRcdFx0bGV0IG9EYXRhRmllbGRXaWR0aDogeyBsYWJlbFdpZHRoOiBudW1iZXI7IHByb3BlcnR5V2lkdGg6IG51bWJlciB9O1xuXHRcdFx0XHRzd2l0Y2ggKG9EYXRhLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGQoXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5V2lkdGg6IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgob0RhdGEuTGFiZWw/LnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0RhdGFGaWVsZFdpZHRoISkge1xuXHRcdFx0XHRcdGFGaWVsZFdpZHRoLnB1c2gob0RhdGFGaWVsZFdpZHRoLmxhYmVsV2lkdGggKyBvRGF0YUZpZWxkV2lkdGgucHJvcGVydHlXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbldpZGVzdCA9IGFGaWVsZFdpZHRoLnJlZHVjZShmdW5jdGlvbiAoYWNjOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgdmFsdWUpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBvYmplY3QsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQXJyYW5nZW1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0bWluV2lkdGg6IE1hdGguY2VpbChuV2lkZXN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRpZiAocHJvcGVydHkuYW5ub3RhdGlvblBhdGggJiYgbWV0YU1vZGVsKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFGaWVsZCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHkuYW5ub3RhdGlvblBhdGh9QGApO1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkICYmIGRhdGFGaWVsZFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCJdKSB7XG5cdFx0XHRcdFx0cHJvcGVydHkudmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5LnZpc3VhbFNldHRpbmdzIHx8IHt9LCB7XG5cdFx0XHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0XHRcdGdhcDogdGFibGVBUEkuZ2V0UHJvcGVydHkoXCJyZWFkT25seVwiKSA/IDAgOiA0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sXG5cdFx0dW5pdD86IHN0cmluZyxcblx0XHR1bml0VGV4dD86IHN0cmluZyxcblx0XHR0aW1lem9uZVRleHQ/OiBzdHJpbmdcblx0KSB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJOiBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4gfCBudWxsID0gdGFibGUgPyAodGFibGUuZ2V0UGFyZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+KSA6IG51bGw7XG5cdFx0Ly8gdXBkYXRlIGdhcCBmb3IgcHJvcGVydGllcyB3aXRoIHN0cmluZyB1bml0XG5cdFx0Y29uc3QgdGV4dCA9IHVuaXRUZXh0IHx8IHRpbWV6b25lVGV4dDtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdGdhcDogTWF0aC5jZWlsKFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgodGV4dCkpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodW5pdCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdC8vIEZvciBwcm9wZXJ0aWVzIHdpdGggdW5pdCwgYSBnYXAgbmVlZHMgdG8gYmUgYWRkZWQgdG8gcHJvcGVybHkgcmVuZGVyIHRoZSBjb2x1bW4gd2lkdGggb24gZWRpdCBtb2RlXG5cdFx0XHRcdFx0Z2FwOiBvVGFibGVBUEkgJiYgb1RhYmxlQVBJLmdldFJlYWRPbmx5KCkgPyAwIDogNlxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVMYWJlbDogZnVuY3Rpb24gKHByb3BlcnR5OiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBsYWJlbE1hcDogeyBbbGFiZWw6IHN0cmluZ106IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSB9KSB7XG5cdFx0aWYgKHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbCA9IGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXTtcblx0XHRcdC8vIFRoaXMgY29tcHV0YXRpb24gaXMgb25seSBmb3IgZHVwbGljYXRlIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG5cdFx0XHQvLyBFeGNsdWRlIHRleHQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYXMgdGV4dCBvbiBhIHByb3BlcnR5IGFubm90YXRlZCB3aXRoIHRleHQgYXJyYW5nZW1lbnQgc2V0IGFzIFRleHRPbmx5LlxuXHRcdFx0Ly8gRXhjbHVkZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgY3JlYXRlZCBvbmx5IGZvciBmaWx0ZXJpbmcgcHVycG9zZXMgd2l0aCBhIHRleHQgYXJyYW5nZW1lbnQgc2V0IHRvIFRleHRPbmx5LlxuXHRcdFx0Y29uc3QgaXNQcm9wZXJ0eVVzZWRBc1RleHRPbmx5UHJvcGVydHkgPSBwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbD8uc29tZShcblx0XHRcdFx0KHByb3ApID0+IHByb3AudGV4dCA9PT0gcHJvcGVydHkucGF0aCAmJiBwcm9wPy5tb2RlID09PSBcIkRlc2NyaXB0aW9uXCJcblx0XHRcdCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5sZW5ndGggPiAxICYmXG5cdFx0XHRcdHByb3BlcnR5LnBhdGg/LmluY2x1ZGVzKFwiL1wiKSAmJlxuXHRcdFx0XHRwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzICYmXG5cdFx0XHRcdCFpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSAmJlxuXHRcdFx0XHQhKHByb3BlcnR5Py5tb2RlID09PSBcIkRlc2NyaXB0aW9uXCIgJiYgcHJvcGVydHkuZmlsdGVyYWJsZSlcblx0XHRcdCkge1xuXHRcdFx0XHRwcm9wZXJ0eS5sYWJlbCA9IHByb3BlcnR5LmxhYmVsICsgXCIgKFwiICsgcHJvcGVydHkuYWRkaXRpb25hbExhYmVscy5qb2luKFwiIC8gXCIpICsgXCIpXCI7XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgcHJvcGVydHkuYWRkaXRpb25hbExhYmVscztcblx0XHR9XG5cdH0sXG5cdC8vVXBkYXRlIFZpc3VhbFNldHRpbmcgZm9yIGNvbHVtbldpZHRoIGNhbGN1bGF0aW9uIGFuZCBsYWJlbHMgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdF91cGRhdGVQcm9wZXJ0eUluZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIHByb3BlcnRpZXM6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSkge1xuXHRcdGNvbnN0IGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0gPSB7fTtcblx0XHQvLyBDaGVjayBhdmFpbGFibGUgcDEzbiBtb2Rlc1xuXHRcdGNvbnN0IHAxM25Nb2RlID0gdGFibGUuZ2V0UDEzbk1vZGUoKTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRpZiAoIXByb3BlcnR5LnByb3BlcnR5SW5mb3MgJiYgcHJvcGVydHkubGFiZWwpIHtcblx0XHRcdFx0Ly8gT25seSBmb3Igbm9uLWNvbXBsZXggcHJvcGVydGllc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIlNvcnRcIikgJiYgcHJvcGVydHkuc29ydGFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkZpbHRlclwiKSAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKSB8fFxuXHRcdFx0XHRcdChwMTNuTW9kZT8uaW5jbHVkZXMoXCJHcm91cFwiKSAmJiBwcm9wZXJ0eS5ncm91cGFibGUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSA9XG5cdFx0XHRcdFx0XHRsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF0gIT09IHVuZGVmaW5lZCA/IGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXS5jb25jYXQoW3Byb3BlcnR5XSkgOiBbcHJvcGVydHldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cCh0YWJsZSwgcHJvcGVydHksIHByb3BlcnRpZXMpO1xuXHRcdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwKHRhYmxlLCBwcm9wZXJ0eSk7XG5cdFx0XHR0aGlzLl9jb21wdXRlTGFiZWwocHJvcGVydHksIGxhYmVsTWFwKTtcblx0XHR9KTtcblx0XHQvLyBBZGQgdGhlICRlZGl0U3RhdGUgcHJvcGVydHlcblx0XHRwcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0a2V5OiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdHBhdGg6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRcdGdyb3VwOiBcIlwiLFxuXHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGZpbHRlcmFibGU6IGZhbHNlXG5cdFx0fSBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKTtcblx0XHRyZXR1cm4gcHJvcGVydGllcztcblx0fSxcblxuXHRnZXRDb2x1bW5zRm9yOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogVGFibGVDb2x1bW5bXSB7XG5cdFx0cmV0dXJuICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucztcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBmb3IgdGhlIGdpdmVuIHNhcC51aS5tZGMuVGFibGUgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGhlIHRhYmxlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIG9mIHRoZSB0YWJsZSBpbnN0YW5jZVxuXHQgKi9cblx0ZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXM6IGFzeW5jIGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogUHJvbWlzZTx7IFhMU1g/OiB1bmtub3duOyBQREY/OiB1bmtub3duIH0+IHtcblx0XHRjb25zdCBvQ2FwYWJpbGl0aWVzOiB7IFhMU1g/OiB1bmtub3duOyBQREY/OiB1bmtub3duIH0gPSB7IFhMU1g6IHt9IH07XG5cdFx0bGV0IG9Nb2RlbCE6IE9EYXRhTW9kZWw7XG5cdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKG9UYWJsZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChtb2RlbDogTW9kZWwpIHtcblx0XHRcdFx0b01vZGVsID0gbW9kZWwgYXMgT0RhdGFNb2RlbDtcblx0XHRcdFx0cmV0dXJuIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lckBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlN1cHBvcnRlZEZvcm1hdHNcIik7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFTdXBwb3J0ZWRGb3JtYXRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBhTG93ZXJGb3JtYXRzID0gKGFTdXBwb3J0ZWRGb3JtYXRzIHx8IFtdKS5tYXAoKGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGFMb3dlckZvcm1hdHMuaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9wZGZcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBERi52MS5GZWF0dXJlc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvQW5ub3RhdGlvbjogdW5rbm93bikge1xuXHRcdFx0XHRpZiAob0Fubm90YXRpb24pIHtcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzW1wiUERGXCJdID0gT2JqZWN0LmFzc2lnbih7fSwgb0Fubm90YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21wdXRpbmcgZXhwb3J0IGNhcGFiaWxpdGllczogJHtlcnJ9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhcGFiaWxpdGllcztcblx0XHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGaWx0ZXJpbmcgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBMaW5lSXRlbSBhbm5vdGF0aW9uIG5vciBvZiB0aGUgY3VzdG9tIGNvbHVtbnMgaXMgZm9yYmlkZGVuLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mb1xuXHQgKiBAcGFyYW0gY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aFxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZmlsdGVyaW5nIGlzIGFsbG93ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eTogZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzRmlsdGVyYWJsZSA9IGlzUGF0aEZpbHRlcmFibGUoY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdCFjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHxcblx0XHRcdCgoY29sdW1uSW5mby5pc1BhcnRPZkxpbmVJdGVtID09PSB0cnVlIHx8IGNvbHVtbkluZm8uaXNQYXJ0T2ZDdXN0b21Db2x1bW4gPT09IHRydWUpICYmXG5cdFx0XHRcdCEoaXNDb25zdGFudChpc0ZpbHRlcmFibGUpICYmIGlzRmlsdGVyYWJsZS52YWx1ZSA9PT0gZmFsc2UpKVxuXHRcdCk7XG5cdH0sXG5cblx0X2ZldGNoUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoXG5cdFx0bWV0YU1vZGVsOiBNZXRhTW9kZWwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIHtcblx0XHRjb25zdCBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCA9IGNvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRvRGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpIGFzIENvbnRleHQsXG5cdFx0XHRpc0NvbXBsZXhUeXBlID0gY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZT8uaW5kZXhPZihcIkVkbS5cIikgIT09IDAsXG5cdFx0XHRiRmlsdGVyYWJsZSA9IENvbW1vbkhlbHBlci5pc1Byb3BlcnR5RmlsdGVyYWJsZShvTmF2aWdhdGlvbkNvbnRleHQsIG9EYXRhRmllbGQpLFxuXHRcdFx0YklzQW5hbHl0aWNhbFRhYmxlID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwiZW5hYmxlQW5hbHl0aWNzXCIpID09PSBcInRydWVcIixcblx0XHRcdGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsID8/IFwiXCIsIGFwcENvbXBvbmVudCA/PyB0YWJsZSksXG5cdFx0XHR0b29sdGlwID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLnRvb2x0aXAgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHR5cGVDb25maWcgPSB0aGlzLl9nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm8sIGlzQ29tcGxleFR5cGUpLFxuXHRcdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRuYW1lOiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogc0Fic29sdXRlTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGNvbHVtbkluZm8uZ3JvdXBMYWJlbCxcblx0XHRcdFx0Z3JvdXA6IGNvbHVtbkluZm8uZ3JvdXAsXG5cdFx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdFx0dG9vbHRpcDogdG9vbHRpcCxcblx0XHRcdFx0ZGF0YVR5cGU6IHR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOlxuXHRcdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJcblx0XHRcdFx0XHRcdD8geyBzdHlsZTogXCJtZWRpdW0vc2hvcnRcIiB9IC8qIFRoaXMgY29uZGl0aW9uIGRvZXNuJ3QgaGF2ZSBhbnkgaW1wYWN0LCB0byBiZSByZXZpZXdlZCAqL1xuXHRcdFx0XHRcdFx0OiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNvbnN0cmFpbnRzLFxuXHRcdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIiAmJiAhaXNDb21wbGV4VHlwZSxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IHRoaXMuX3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzKGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsIGNvbHVtbkluZm8pLFxuXHRcdFx0XHR1bml0OiBjb2x1bW5JbmZvLnVuaXQsXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aFxuXHRcdFx0fTtcblx0XHRpZiAocHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzPy50ZW1wbGF0ZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmNsaXBib2FyZFNldHRpbmdzID0geyB0ZW1wbGF0ZTogcHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlIH07XG5cdFx0XHQvLyBpZiBJIHNldCB0aGlzIGNsaXBCb2FyZFNldHRpbmdzIHRoZSBjb3B5IHByb3ZpZGVyIGV4dHJhY3QgdGhlIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgaHRtbCBwcm9wZXJ0eSBhbmQgaXQgaXMgcHJvcGVybHkgY29waWVkIGluIGV4Y2VsXG5cdFx0XHQvLyBidXQgd2hlbiB3ZSBjb3B5IGVsc2V3aGVyZSB3ZSBvbmx5IGdldCB0aGUgcmF3IGRhdGEgYW5kIG5vdCB0aGUgdGVtcGxhdGVkIGRhdGFcblx0XHR9XG5cblx0XHQvLyBTZXQgdmlzdWFsU2V0dGluZ3Mgb25seSBpZiBpdCBleGlzdHNcblx0XHRpZiAoY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncyAmJiBPYmplY3Qua2V5cyhjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSBjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdH1cblxuXHRcdC8vIE1EQyBleHBlY3RzICAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblxuXHRcdFx0Ly9nZXQgdGhlIERhdGFNb2RlbE9iamVjdFBhdGggZm9yIHRoZSBjb2x1bW5cblx0XHRcdGNvbnN0IGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KGNvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0Q29udGV4dChEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJtZXRhUGF0aFwiKSEpXG5cdFx0XHQpO1xuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aDtcblx0XHRcdC8vIFRPRE8gd2l0aCB0aGUgbmV3IGNvbXBsZXggcHJvcGVydHkgaW5mbywgYSBsb3Qgb2YgXCJEZXNjcmlwdGlvblwiIGZpZWxkcyBhcmUgYWRkZWQgYXMgZmlsdGVyL3NvcnQgZmllbGRzXG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBjb2x1bW5JbmZvLnNvcnRhYmxlO1xuXHRcdFx0aWYgKGJJc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBbmFseXRpY2FsUHJvcGVydHlJbmZvQXR0cmlidXRlcyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8pO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlJbmZvLmZpbHRlcmFibGUgPVxuXHRcdFx0XHRjb2x1bW5JbmZvLmZpbHRlcmFibGUgIT09IGZhbHNlICYmXG5cdFx0XHRcdCEhYkZpbHRlcmFibGUgJiZcblx0XHRcdFx0dGhpcy5faXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5KGNvbHVtbkluZm8sIGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0cHJvcGVydHlJbmZvLmlzS2V5ID0gY29sdW1uSW5mby5pc0tleTtcblx0XHRcdHByb3BlcnR5SW5mby5ncm91cGFibGUgPSBjb2x1bW5JbmZvLmlzR3JvdXBhYmxlO1xuXHRcdFx0aWYgKGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHRcdHRoaXMuX3NldFRleHRBcnJhbmdlbWVudEluZm8ocHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLCB0YWJsZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvLmlzS2V5KSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSB7XG5cdFx0XHRcdFx0Ly8gTURDIG5lZWRzIHRvIGZpeCB0aGlzLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIGEgbm9uIEFuYWx5dGljYWwgVGFibGVcblx0XHRcdFx0XHR0ZWNobmljYWxseUdyb3VwYWJsZTogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBjb2x1bW5JbmZvLmNhc2VTZW5zaXRpdmU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby5hZGRpdGlvbmFsTGFiZWxzKSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5hZGRpdGlvbmFsTGFiZWxzID0gY29sdW1uSW5mby5hZGRpdGlvbmFsTGFiZWxzLm1hcCgoYWRkaXRpb25hbExhYmVsOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gZ2V0TG9jYWxpemVkVGV4dChhZGRpdGlvbmFsTGFiZWwsIGFwcENvbXBvbmVudCB8fCB0YWJsZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQodGFibGUsIHByb3BlcnR5SW5mbywgY29sdW1uSW5mby51bml0LCBjb2x1bW5JbmZvLnVuaXRUZXh0LCBjb2x1bW5JbmZvLnRpbWV6b25lVGV4dCk7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFeHRlbmQgdGhlIGV4cG9ydCBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgY29sdW1uIGluZm8uXG5cdCAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgZXhwb3J0IHNldHRpbmdzIHRvIGJlIGV4dGVuZGVkXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgZXh0ZW5kZWQgZXhwb3J0IHNldHRpbmdzXG5cdCAqL1xuXHRfc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3M6IGZ1bmN0aW9uIChcblx0XHRleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtblxuXHQpOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwge1xuXHRcdGNvbnN0IGV4cG9ydEZvcm1hdCA9IHRoaXMuX2dldEV4cG9ydEZvcm1hdChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSk7XG5cdFx0aWYgKGV4cG9ydEZvcm1hdCAmJiBleHBvcnRTZXR0aW5ncykge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZm9ybWF0ID0gZXhwb3J0Rm9ybWF0O1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwb3J0U2V0dGluZ3M7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgY29uZmlnIGZvciB0aGUgZ2l2ZW4gY29sdW1uIGluZm8uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIGlzQ29tcGxleFR5cGUgSW5kaWNhdGVzIGlmIHRoZSBkYXRhVHlwZSBpcyBjb21wbGV4LlxuXHQgKiBAcmV0dXJucyBUaGUgTURDIHR5cGUgY29uZmlnLlxuXHQgKi9cblx0X2dldFR5cGVDb25maWcoY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBpc0NvbXBsZXhUeXBlPzogYm9vbGVhbik6IFR5cGVDb25maWcge1xuXHRcdGxldCB0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIpOyAvLyBNREMgZXhwZWN0cyBhbHdheXMgYSBkYXRhVHlwZVxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBpc1R5cGVGaWx0ZXJhYmxlKGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUpKSB7XG5cdFx0XHR0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgIWlzQ29tcGxleFR5cGUpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0eXBlQ29uZmlnO1xuXHR9LFxuXHQvKipcblx0ICogU2V0IHRoZSB0ZXh0IGFycmFuZ2VtZW50IGluZm8gZm9yIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mbyBUaGUgY3VycmVudCBwcm9wZXJ0eUluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfc2V0VGV4dEFycmFuZ2VtZW50SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbywgY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSkuZmluZChmdW5jdGlvbiAob0NvbCkge1xuXHRcdFx0cmV0dXJuIG9Db2wubmFtZSA9PT0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0XHR9KTtcblx0XHRpZiAoZGVzY3JpcHRpb25Db2x1bW4pIHtcblx0XHRcdHByb3BlcnR5SW5mby5tb2RlID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQhLm1vZGU7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPSAoZGVzY3JpcHRpb25Db2x1bW4gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbykucmVsYXRpdmVQYXRoO1xuXHRcdH1cblx0XHRwcm9wZXJ0eUluZm8udGV4dCA9IGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50Py50ZXh0UHJvcGVydHk7XG5cdH0sXG5cblx0X3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pIHtcblx0XHRpZiAoY29sdW1uSW5mby5hZ2dyZWdhdGFibGUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5hZ2dyZWdhdGFibGUgPSBjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uZXh0ZW5zaW9uKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0gY29sdW1uSW5mby5leHRlbnNpb247XG5cdFx0fVxuXHR9LFxuXG5cdF9mZXRjaENvbXB1dGVkUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoY29sdW1uSW5mbzogQ29tcHV0ZWRUYWJsZUNvbHVtbiwgdGFibGU6IFRhYmxlKSB7XG5cdFx0Y29uc3QgbGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwsIHRhYmxlKTsgLy8gVG9kbzogVG8gYmUgcmVtb3ZlZCBvbmNlIE1EQyBwcm92aWRlcyB0cmFuc2xhdGlvbiBzdXBwb3J0XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGxhYmVsOiBsYWJlbC50b1N0cmluZygpLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIixcblx0XHRcdGZpbHRlcmFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0Y2xpcGJvYXJkU2V0dGluZ3M6IGNvbHVtbkluZm8uY2xpcGJvYXJkU2V0dGluZ3MgYXMgUHJvcGVydHlJbmZvW1wiY2xpcGJvYXJkU2V0dGluZ3NcIl1cblx0XHR9O1xuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgIT09IHVuZGVmaW5lZCAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0X2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoY29sdW1uSW5mbzogQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgdGFibGU6IFRhYmxlLCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdGxldCBsYWJlbDtcblx0XHRpZiAoY29sdW1uSW5mby5oZWFkZXIpIHtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlci5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRcdFx0bGFiZWwgPSBNb2RlbEhlbHBlci5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGNvbHVtbkluZm8uaGVhZGVyLCB1bmRlZmluZWQsICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmhlYWRlciwgYXBwQ29tcG9uZW50KTsgLy8gVG9kbzogVG8gYmUgcmVtb3ZlZCBvbmNlIE1EQyBwcm92aWRlcyB0cmFuc2xhdGlvbiBzdXBwb3J0XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiB1bmRlZmluZWQsXG5cdFx0XHRncm91cDogdW5kZWZpbmVkLFxuXHRcdFx0bGFiZWw6IGxhYmVsID8/IFwiXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHR2aXN1YWxTZXR0aW5nczogY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJ2aXN1YWxTZXR0aW5nc1wiXVxuXHRcdH07XG5cblx0XHQvLyBNREMgZXhwZWN0cyAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5uYW1lO1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yOiBmdW5jdGlvbiAob0NvbHVtbkluZm86IFRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvcikgfHxcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoKVxuXHRcdCk7XG5cdH0sXG5cdF91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsOiBmdW5jdGlvbiAoX29UYWJsZTogVGFibGUsIF9vQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBfb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IF9vVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChhVmlzaWJsZUNvbHVtbnMgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGZvciAoY29uc3QgaW5kZXggaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IoX29Db2x1bW5JbmZvKSAmJlxuXHRcdFx0XHRcdF9vQ29sdW1uSW5mby5uYW1lID09PSBhVmlzaWJsZUNvbHVtbnNbaW5kZXhdLmdldFByb3BlcnR5S2V5KClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aWYgKG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIF9vQ29sdW1uSW5mby5uYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2ZldGNoUHJvcGVydGllc0ZvckVudGl0eTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdC8vIHdoZW4gZmV0Y2hpbmcgcHJvcGVydGllcywgdGhpcyBiaW5kaW5nIGNvbnRleHQgaXMgbmVlZGVkIC0gc28gbGV0cyBjcmVhdGUgaXQgb25seSBvbmNlIGFuZCB1c2UgaWYgZm9yIGFsbCBwcm9wZXJ0aWVzL2RhdGEtZmllbGRzL2xpbmUtaXRlbXNcblx0XHRjb25zdCBiaW5kaW5nUGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5VHlwZVBhdGgpO1xuXHRcdGxldCBmZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0XHRjb25zdCBub25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChiaW5kaW5nUGF0aCwgbWV0YU1vZGVsKS5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSkpXG5cdFx0XHQudGhlbigoY29sdW1uczogVGFibGVDb2x1bW5bXSkgPT4ge1xuXHRcdFx0XHQvLyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBkb2VzIG5vdCB3b3JrIHZpYSAnZW50aXR5U2V0LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhJ1xuXHRcdFx0XHRpZiAoY29sdW1ucykge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eUluZm87XG5cdFx0XHRcdFx0Y29sdW1ucy5mb3JFYWNoKChjb2x1bW5JbmZvKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsKHRhYmxlLCBjb2x1bW5JbmZvKTtcblx0XHRcdFx0XHRcdHN3aXRjaCAoY29sdW1uSW5mby50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hQcm9wZXJ0eUluZm8obWV0YU1vZGVsLCBjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgdGFibGUsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5SW5mbyAmJiAhbm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuaW5jbHVkZXMoKHByb3BlcnR5SW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLm5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ubWF4Q29uZGl0aW9ucyA9IERlbGVnYXRlVXRpbC5pc011bHRpVmFsdWUocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikgPyAtMSA6IDE7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQ29tcHV0ZWRcIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaENvbXB1dGVkUHJvcGVydHlJbmZvKGNvbHVtbkluZm8gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbiwgdGFibGUpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiU2xvdFwiOlxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvKGNvbHVtbkluZm8gYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgdGFibGUsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bmhhbmRsZWQgc3dpdGNoIGNhc2UgJHtjb2x1bW5JbmZvLnR5cGV9YCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5SW5mbyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcyA9IHRoaXMuX3VwZGF0ZVByb3BlcnR5SW5mbyh0YWJsZSwgZmV0Y2hlZFByb3BlcnRpZXMgYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0dGFibGVBUEkuc2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyhmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldFByb3BlcnR5SW5mb3MoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHVwZGF0aW5nIGZldGNoZWQgcHJvcGVydGllczogJHtlcnIgYXMgc3RyaW5nfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBmZXRjaGVkUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldENhY2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRpZiAoZmV0Y2hlZFByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2ZldGNoUHJvcGVydGllc0ZvckVudGl0eSh0YWJsZSwgZW50aXR5VHlwZVBhdGgsIG1ldGFNb2RlbCwgYXBwQ29tcG9uZW50KS50aGVuKGZ1bmN0aW9uIChcblx0XHRcdHN1YkZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXVxuXHRcdCkge1xuXHRcdFx0dGFibGVBUEkuc2V0Q2FjaGVkUHJvcGVydHlJbmZvcyhzdWJGZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0XHRyZXR1cm4gc3ViRmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0fSk7XG5cdH0sXG5cdHNldE5vRGF0YUluZm9ybWF0aW9uOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9EYXRhQWdncmVnYXRpb24gPSB0YWJsZS5nZXROb0RhdGEoKTtcblx0XHRpZiAodHlwZW9mIG5vRGF0YUFnZ3JlZ2F0aW9uICE9IFwic3RyaW5nXCIgJiYgKG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIENvbnRyb2wpPy5pc0EoXCJzYXAubS5JbGx1c3RyYXRlZE1lc3NhZ2VcIikpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2UgPSBub0RhdGFBZ2dyZWdhdGlvbiBhcyBJbGx1c3RyYXRlZE1lc3NhZ2U7XG5cdFx0XHQvLyBXZSBvdmVycmlkZSB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRUaXRsZShpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi50aXRsZSk7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldERlc2NyaXB0aW9uKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmRlc2NyaXB0aW9uKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0SWxsdXN0cmF0aW9uVHlwZShpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25UeXBlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0SWxsdXN0cmF0aW9uU2l6ZShpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaWxsdXN0cmF0ZWRNZXNzYWdlID0gbmV3IElsbHVzdHJhdGVkTWVzc2FnZSh7XG5cdFx0XHRcdC4uLmlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uXG5cdFx0XHR9KTtcblx0XHRcdHRhYmxlLnNldE5vRGF0YShpbGx1c3RyYXRlZE1lc3NhZ2UpO1xuXHRcdH1cblx0fSxcblxuXHRzZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHRhYmxlRmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyh0YWJsZSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGFibGUpO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYmluZGluZ0luZm8ucGF0aD8uc3RhcnRzV2l0aChcIi9cIikgPyBiaW5kaW5nSW5mby5wYXRoLnN1YnN0cmluZygxKSA6IGJpbmRpbmdJbmZvLnBhdGg7XG5cdFx0bGV0IGlsbHVzdHJhdGVkSW5mb3JtYXRpb246ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncztcblxuXHRcdGNvbnN0IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzID0gZnVuY3Rpb24gKCk6ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB7XG5cdFx0XHRpZiAodGFibGUuZGF0YShcImhpZGRlbkZpbHRlcnNcIikgfHwgdGFibGUuZ2V0UXVpY2tGaWx0ZXIoKSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRfTVVMVElfVklFV1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRfV0lUSF9GSUxURVJcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHRjb25zdCBmaWx0ZXJBc3NvY2lhdGlvbiA9IHRhYmxlLmdldEZpbHRlcigpO1xuXHRcdGNvbnN0IGhhc0ZpbHRlck9yU2VhcmNoID0gdGFibGVGaWx0ZXJJbmZvLnNlYXJjaCB8fCB0YWJsZUZpbHRlckluZm8uZmlsdGVycz8ubGVuZ3RoO1xuXHRcdGlmIChmaWx0ZXJBc3NvY2lhdGlvbiAmJiAhL0Jhc2ljU2VhcmNoJC8udGVzdChmaWx0ZXJBc3NvY2lhdGlvbikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGEgRmlsdGVyQmFyIGlzIGFzc29jaWF0ZWQgdG8gdGhlIFRhYmxlIChiYXNpYyBzZWFyY2ggb24gdG9vbEJhciBpcyBleGNsdWRlZClcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHQvLyBjaGVjayBpZiB0YWJsZSBoYXMgYW55IEZpbHRlcmJhciBmaWx0ZXJzIG9yIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0YWJsZSBoYXMgYW55IHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT0RBVEFcIiksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0RhdGFcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKS5nZXRWaWV3RGF0YSgpLmxpdmVNb2RlKSB7XG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiKSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldE5vRGF0YU1lc3NhZ2VNb2RlKCk7XG5cblx0XHRpZiAoaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplID09PSBcInRleHRcIikge1xuXHRcdFx0Y29uc3QgY3VycmVudE5vRGF0YSA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50Tm9EYXRhID09PSBcInN0cmluZ1wiICYmIGN1cnJlbnROb0RhdGEgPT09IGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0Ly8gV2UgZG9uJ3QgY2hhbmdlIHRoZSBub0RhdGEgYWdncmVnYXRpb24gdW5uZWNlc3NhcnkuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRhYmxlLnNldE5vRGF0YShpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmRlc2NyaXB0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROb0RhdGFJbmZvcm1hdGlvbih0YWJsZSwgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbik7XG5cdFx0fVxuXHR9LFxuXG5cdGhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRiRGF0YVJlY2VpdmVkQXR0YWNoZWQgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIik7XG5cblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmICFiRGF0YVJlY2VpdmVkQXR0YWNoZWQpIHtcblx0XHRcdG9CaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZCgoKSA9PiB7XG5cdFx0XHRcdC8vIGFzIHRoZSBkYXRhUmVjZWl2ZWQgZXZlbnQgaXMgZmlyZWQgbXVsdGlwbGUgdGltZXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGV2ZW50IGlzIG9ubHkgaGFuZGxlZCBvbmNlXG5cdFx0XHRcdGlmICghb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggdGhlIHNlbGVjdGVkIGNvbnRleHRzIHRvIHRyaWdnZXIgcmUtY2FsY3VsYXRpb24gb2YgZW5hYmxlZCBzdGF0ZSBvZiBhY3Rpb25zLlxuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRjb25zdCBhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gb1RhYmxlLmdldFBhcmVudCgpIDogbnVsbDtcblx0XHRcdFx0XHRcdGlmIChvVGFibGVBUEkpIHtcblx0XHRcdFx0XHRcdFx0KG9UYWJsZUFQSSBhcyBUYWJsZUFQSSkuc2V0VXBFbXB0eVJvd3Mob1RhYmxlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKG9UYWJsZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcHJvbWlzZSBmb3IgdGhlIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFRoZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICovXG5cdHNldE9wdGltaXN0aWNCYXRjaFByb21pc2VGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZUFQSTogVGFibGVBUEkpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoKTtcblx0XHRpZiAobW9kZWwpIHtcblx0XHRcdHRhYmxlQVBJLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKG5ldyBQcm9taXNlS2VlcGVyPGJvb2xlYW4+KCkpO1xuXHRcdFx0dGhpcy5zZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbChjb250cm9sbGVyLCBtb2RlbCwgdGFibGVBUEkpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRW5hYmxlIHRoZSBvcHRpbWlzdGljIGJhdGNoIG1vZGUgaWYgYXZhaWxhYmxlLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICovXG5cdGVuYWJsZU9wdGltaXN0aWNCYXRjaE1vZGU6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUgPVxuXHRcdFx0dGFibGUgJiYgVGFibGVVdGlscy5pc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoKHRhYmxlLCBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyKTtcblx0XHQodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKCk/LnJlc29sdmUoIWZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlKTtcblx0fSxcblxuXHQvKipcblx0ICogU2V0dGVyIGZvciB0aGUgb3B0aW1pc3RpYyBiYXRjaCBlbmFibGVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlclxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsIFRoZSBPRGF0YSBNb2RlbFxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIFRhYmxlQVBJXG5cdCAqIEBzZWUge3NhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsI3NldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJ9IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWw6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZGF0YU1vZGVsOiBPRGF0YU1vZGVsLCB0YWJsZUFQSTogVGFibGVBUEkpOiB2b2lkIHtcblx0XHRjb25zdCBpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTtcblx0XHRpZiAoZGF0YU1vZGVsLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoKSA9PT0gbnVsbCAmJiAhdGFibGVBUEkuaXNPcHRpbWlzdGljQmF0Y2hEaXNhYmxlZCgpICYmIGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyID0gdGFibGVBUEkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKTtcblx0XHRcdGRhdGFNb2RlbC5zZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyKGZ1bmN0aW9uICgpOiBQcm9taXNlPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcblx0XHRcdFx0cmV0dXJuIG9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyPy5wcm9taXNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdHJlYmluZDogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gb1RhYmxlQVBJPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIik7XG5cdFx0b1RhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24ob1RhYmxlKTtcblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnJlYmluZC5hcHBseSh0aGlzLCBbb1RhYmxlLCBvQmluZGluZ0luZm9dKTtcblx0XHRcdFRhYmxlVXRpbHMub25UYWJsZUJvdW5kKG9UYWJsZSk7XG5cdFx0XHRyZXR1cm4gVGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHQudGhlbigodGFibGU6IFRhYmxlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVUYWJsZURhdGFSZWNlaXZlZCh0YWJsZSwgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fSxcblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cblx0ICovXG5cdGZldGNoUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwodGFibGUpXG5cdFx0XHQudGhlbihhc3luYyAobW9kZWwpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcImVudGl0eVR5cGVcIikgPz8gXCJcIixcblx0XHRcdFx0XHRtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocHJvcGVydGllcykgPT4ge1xuXHRcdFx0XHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0cHJlSW5pdDogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiAoVGFibGVEZWxlZ2F0ZUJhc2UucHJlSW5pdCBhcyAodGFibGU6IFRhYmxlKSA9PiBQcm9taXNlPHZvaWQ+KS5hcHBseSh0aGlzLCBbdGFibGVdKS50aGVuKCgpID0+IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgb24gdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFNldCB0aGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgZmFzdENyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChmYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgdW5rbm93biBhcyBDb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSA9IG5ldyBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkoYmluZGluZ0luZm8pO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c0VuYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mb10pO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2ludGVybmFsVXBkYXRlQmluZGluZ0luZm8odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuc2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UodGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCh0YWJsZSwgYmluZGluZ0luZm8pO1xuXG5cdFx0XHR0YWJsZS5nZXRQYXJlbnQoKT8uZmlyZUV2ZW50KFwiYmVmb3JlUmViaW5kVGFibGVcIiwgeyBjb2xsZWN0aW9uQmluZGluZ0luZm86IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSB9KTtcblx0XHRcdGNvbnN0IGF0dGFjaGVkRXZlbnRzID0gY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJLmdldEF0dGFjaGVkRXZlbnRzKCk7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaXQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgZm9yIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBUaGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaXMgc2V0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGNvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRpZiAodGFibGUuZ2V0Q3JlYXRpb25Sb3coKT8uZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gbnVsbCAmJiBiaW5kaW5nSW5mby5wYXRoICYmIGNvbnRleHQpIHtcblx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0XHRcdHRhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0YmluZGluZ0luZm8ucGF0aCxcblx0XHRcdFx0XHRjb250ZXh0IGFzIHY0Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwsXG5cdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQVBJLnNldEF0dGFjaEV2ZW50cyhhdHRhY2hlZEV2ZW50cyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgdXBkYXRpbmcgdGhlIGJpbmRpbmcgaW5mb1wiLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb006IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJbXSB8IHVuZGVmaW5lZCA9IGJpbmRpbmdJbmZvLnNvcnRlcjtcblx0XHRjb25zdCBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ6IFNvcnRlcltdID0gW107XG5cdFx0aWYgKHNvcnRlcnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdGNvbnN0IHRhYmxlUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldENhY2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRcdGZvciAoY29uc3Qgc29ydGVyIG9mIHNvcnRlcnMpIHtcblx0XHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0eSA9IHRhYmxlUHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LnBhdGggPT09IHNvcnRlci5nZXRQYXRoKCkpO1xuXHRcdFx0XHRpZiAodGFibGVQcm9wZXJ0eT8udW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IHRhYmxlUHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LmtleSA9PT0gdGFibGVQcm9wZXJ0eT8udW5pdCk7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFNvcnRlckF2YWlsYWJsZSA9IHVuaXRQcm9wZXJ0eT8ucGF0aCAmJiBzb3J0ZXJzLnNvbWUoKHNvcnQpID0+IHNvcnQuZ2V0UGF0aCgpID09PSB1bml0UHJvcGVydHkucGF0aCk7XG5cdFx0XHRcdFx0aWYgKCF1bml0U29ydGVyQXZhaWxhYmxlICYmIHVuaXRQcm9wZXJ0eT8uc29ydGFibGUgIT09IGZhbHNlICYmIHVuaXRQcm9wZXJ0eT8ucGF0aCkge1xuXHRcdFx0XHRcdFx0bmV3U29ydGVyc1RvQmVBcHBsaWVkLnB1c2gobmV3IFNvcnRlcih1bml0UHJvcGVydHkucGF0aCwgZmFsc2UpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bmV3U29ydGVyc1RvQmVBcHBsaWVkLnB1c2goc29ydGVyKTtcblx0XHRcdH1cblx0XHRcdGJpbmRpbmdJbmZvLnNvcnRlciA9IG5ld1NvcnRlcnNUb0JlQXBwbGllZDtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gYmluZGluZ0luZm8ucGF0aCArIFwiL1wiO1xuXHRcdGNvbnN0IGZpbHRlcnMgPSBiaW5kaW5nSW5mby5maWx0ZXJzPy5nZXRGaWx0ZXJzKCk7XG5cdFx0aWYgKGZpbHRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0VGFibGVVdGlscy51cGRhdGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRChtZXRhTW9kZWwsIGZpbHRlcnMgYXMgdW5rbm93biBhcyBDb25kaXRpb25PYmplY3RbXSwgZW50aXR5VHlwZVBhdGgpO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0aWYgKGNvbnRyb2xsZXI/LnJlY29tbWVuZGF0aW9ucy5pc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGVEZWYgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmdldFJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlRGVmLmFubm90YXRpb24uZW50aXR5VHlwZU5hbWUpO1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyAmJiByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWxlY3Q/LmNvbmNhdChcIixcIiwgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmpvaW4oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKi9cblx0X3VwZGF0ZUF2YWlsYWJsZUNhcmRzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAodGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uY29udmVydGVyVHlwZSA9PT0gXCJMaXN0UmVwb3J0XCIpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRhYmxlQVBJPy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdGNvbnN0IGNhcmRzOiBXcmFwcGVkQ2FyZFtdID0gW107XG5cdFx0XHRhd2FpdCB0YWJsZUFQSS5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXIgPSBuZXcgQ29sbGFib3JhdGlvbk1hbmFnZXIoKTtcblx0XHRcdGNvbnN0IGNhcmRPYmplY3QgPSBjb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IGFwcENvbXBvbmVudC5nZXRJZCgpO1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVGhlIGhvb2sgaW1wbGVtZW50ZWQgYnkgTURDIHRoYXQgd2UgY2FuIG92ZXJyaWRlLlxuXHQgKiBUaGlzIGFsbG93cyB1cyB0byBkZWZpbmUgcHJvcGVydGllcyB0byBiZSByZXF1ZXN0ZWQgaW4gdGhlIE1EQyB0YWJsZSAoTWFpbiBjYXNlIGlzIGZvciB0aGUgYW5hbHl0aWNhbCB0YWJsZSkuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWUgdG8gYmUgcmVxdWVzdGVkLlxuXHQgKi9cblx0Z2V0SW5SZXN1bHRQcm9wZXJ0eUtleXM6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRcdGNvbnN0IGFsbEtrZXlzUmVxdWVzdGVkID0gdGhpcy5jaGVja0FsbEtleXNBcmVSZXF1ZXN0ZWQodGFibGVBUEkpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHQvLyBpZiBhIHJvd3ByZXNzIGlzIG92ZXJyaWRkZW4sIHdlICBzaG91bGQgZW5hYmxlIHRoZSBuYXZpZ2F0aW9uIGF0IHRoZSBub2RlIGxldmVsXG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzTm9kZUxldmVsTmF2aWdhYmxlXCIsIHRhYmxlQVBJLm92ZXJyaWRlUm93UHJlc3MgPyB0cnVlIDogYWxsS2tleXNSZXF1ZXN0ZWQpO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0T2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0KVxuXHRcdFx0XHRcdC8vIGZvciBhbmFseXRpYyB0YWJsZXMgd2l0aCBhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIHdlIHNob3VsZCBub3QgcmVxdWVzdCB0aGUgc2VtYW50aWNLZXkgZXhwZWN0ZWQgd2hlbiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkIC0+ICBpdCB3aWxsIHBlcm1pdHMgdG8gbmF2aWdhdGUgZnJvbSBhIG5vZGUgbGV2ZWwgd2hlbiBzZW1hbnRpY0tleSBhcmUgZW5hYmxlZFxuXHRcdFx0XHRcdC8vIHJlc3RyaWN0aW9uIGFyZSBhbHNvIGV4Y2x1ZGVkIGFzIHdlIGNhbm5vdCBkZXN0aW5ndWlzaCBiZXR3ZWVuIGEgbm9kZSBhbmQgYSBhZ2dyZWdhdGlvbiBsZXZlbFxuXG5cdFx0XHRcdFx0LmZpbHRlcigoZmllbGROYW1lOiBzdHJpbmcpID0+XG5cdFx0XHRcdFx0XHQhYWxsS2tleXNSZXF1ZXN0ZWRcblx0XHRcdFx0XHRcdFx0PyB0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3RbZmllbGROYW1lXS5zb21lKFxuXHRcdFx0XHRcdFx0XHRcdFx0KG9yaWdpbikgPT4gb3JpZ2luICE9PSBcInJlc3RyaWN0aW9uXCIgJiYgb3JpZ2luICE9PSBcInNlbWFudGljS2V5XCJcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZVxuXHRcdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QgPz8ge30pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhbGwga2V5cygpIGV4Y2VwdGVkIElzQWN0aXZlRW50aXR5KSBhcmUgcmVxdWVzdGVkIGluIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSB0YWJsZSBBUElcblx0ICogQHJldHVybnMgIFRydWUgaWYgYWxsIGtleXMgYXJlIHJlcXVlc3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRjaGVja0FsbEtleXNBcmVSZXF1ZXN0ZWQ6IGZ1bmN0aW9uICh0YWJsZUFQSTogVGFibGVBUEkpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YWJsZSA9IHRhYmxlQVBJLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBhbGxDb2x1bW5zID0gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucyBhcyAoVGFibGVDb2x1bW4gJiB7IGlzS2V5OiBib29sZWFuOyByZWxhdGl2ZVBhdGg6IHN0cmluZyB9KVtdO1xuXHRcdGNvbnN0IGtleVByb3BlcnR5TmFtZXMgPSBhbGxDb2x1bW5zXG5cdFx0XHQuZmlsdGVyKChjKSA9PiBjLmlzS2V5ICYmIGMucmVsYXRpdmVQYXRoICYmIGMucmVsYXRpdmVQYXRoICE9PSBcIklzQWN0aXZlRW50aXR5XCIpXG5cdFx0XHQubWFwKChjKSA9PiBjLnJlbGF0aXZlUGF0aCk7XG5cblx0XHRjb25zdCBkaXNwbGF5ZWRDb2x1bW5zID0gdGFibGVcblx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdC5tYXAoKGNvbHVtbikgPT4gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpKSk7XG5cblx0XHQvLyBTdG9yZSBhbGwgcHJvcGVydGllcyByZWZlcmVuY2VkIGJ5IGRpc3BsYXllZCBjb2x1bW5zIGluIGEgU2V0XG5cdFx0Y29uc3QgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRmdW5jdGlvbiBwcm9jZXNzQ29sdW1uKGNvbDogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdFx0XHQvLyBBZGQgdGhlIHByb3BlcnR5IG5hbWUgZnJvbSBjb2x1bW4gaXRzZWxmIGlmIGl0J3Mgbm90IGEgY29tcGxleCBwcm9wZXJ0eUluZm9cblx0XHRcdGlmIChjb2wucmVsYXRpdmVQYXRoICYmIGNvbC5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGNvbC5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdGhlIGFkZGl0aW9uYWwgcHJvcGVydGllcyByZWZlcmVuY2VkIGJ5IHRoZSBjb2x1bW5cblx0XHRcdGNvbC5leHRlbnNpb24/LmFkZGl0aW9uYWxQcm9wZXJ0aWVzPy5mb3JFYWNoKChhZGRpdGlvbmFsQ29sdW1uTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZGRpdGlvbmFsQ29sdW1uID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGFkZGl0aW9uYWxDb2x1bW5OYW1lKTtcblx0XHRcdFx0aWYgKGFkZGl0aW9uYWxDb2x1bW4/LnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChhZGRpdGlvbmFsQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRkaXNwbGF5ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKCFjb2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUHJvY2VzcyB0aGUgY29sdW1uIGl0c2VsZlxuXHRcdFx0cHJvY2Vzc0NvbHVtbihjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKTtcblxuXHRcdFx0Ly8gUHJvY2VzcyB0aGUgY29sdW1ucyByZWZlcmVuY2VkIGJ5IHRoZSBjb2x1bW5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5mb3JFYWNoKChyZWxhdGVkQ29sdW1uTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1uID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IHJlbGF0ZWRDb2x1bW5OYW1lKTtcblx0XHRcdFx0aWYgKHJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdFx0XHRwcm9jZXNzQ29sdW1uKHJlbGF0ZWRDb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4ga2V5UHJvcGVydHlOYW1lcy5ldmVyeSgocHJvcE5hbWUpID0+IHByb3BOYW1lICYmIHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmhhcyhwcm9wTmFtZSkpO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgc2VhcmNoIHF1ZXJ5IGZvciBhbmFseXRpY2FsIGFuZCBub24gYW5hbHl0aWNhbCBvZGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZyBUaGUgb0RhdGFMaXN0QmluZGluZyBpbnN0YW5jZS5cblx0ICogQHJldHVybnMgVGhlIHNlYXJjaCBxdWVyeSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXRTZWFyY2hRdWVyeTogZnVuY3Rpb24gKGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gYmluZGluZy5nZXRBZ2dyZWdhdGlvbj8uKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uPy5zZWFyY2ggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gRm9yIGFuYWx5dGljYWwgdGFibGVzLCB0aGUgc2VhcmNoIHF1ZXJ5IGlzIHN0b3JlZCBpbiB0aGUgYWdncmVnYXRpb25cblx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbi5zZWFyY2ggYXMgc3RyaW5nO1xuXHRcdH1cblx0XHQvLyBJZiBub3QgZm91bmQgaW4gYWdncmVnYXRpb24sIGNoZWNrIHRoZSBxdWVyeSBvcHRpb25zXG5cdFx0cmV0dXJuIGJpbmRpbmcuZ2V0UXVlcnlPcHRpb25zRnJvbVBhcmFtZXRlcnMoKS4kc2VhcmNoO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nOiBmdW5jdGlvbiAodGFibGU6IE1EQ1RhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvLCBiaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gdGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0bGV0IG5lZWRNYW51YWxSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRcdFx0Y29uc3QgcGVuZGluZ01hbnVhbFVwZGF0ZSA9IGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5KSBhcyBib29sZWFuO1xuXHRcdFx0Y29uc3QgbmV3U29ydGVycyA9IEpTT04uc3RyaW5naWZ5KGJpbmRpbmdJbmZvLnNvcnRlciA/PyBbXSk7XG5cblx0XHRcdGlmIChiaW5kaW5nKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHRcdFx0ICogaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGEgYmF0Y2ggcmVxdWVzdC5cblx0XHRcdFx0ICogUmVtb3ZpbmcgY29sdW1ucyBjcmVhdGVzIG9uZSBiYXRjaCByZXF1ZXN0IHRoYXQgd2FzIG5vdCBleGVjdXRlZCBiZWZvcmVcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncztcblx0XHRcdFx0Y29uc3Qgb2xkRmlsdGVycyA9IGJpbmRpbmcuZ2V0RmlsdGVycyhcIkFwcGxpY2F0aW9uXCIpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91c1NvcnRlcnMgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTKSA/PyBcIltdXCI7XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyTm90Q2hhbmdlZCA9XG5cdFx0XHRcdFx0KChiaW5kaW5nSW5mby5maWx0ZXJzID09PSBudWxsICYmIG9sZEZpbHRlcnMubGVuZ3RoID09PSAwKSB8fCAvLyBvbiBhbmFseXRpY2FsIHRhYmxlcywgdGhlIGZpbHRlcnMgYXJlIHNldCB0byBudWxsIHdoZW4gbm8gZmlsdGVyc1xuXHRcdFx0XHRcdFx0ZGVlcEVxdWFsKGJpbmRpbmdJbmZvLmZpbHRlcnMsIG9sZEZpbHRlcnNbMF0pKSAmJlxuXHRcdFx0XHRcdG5ld1NvcnRlcnMgPT09IHByZXZpb3VzU29ydGVycyAmJlxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPT09IGJpbmRpbmcuZ2V0UGF0aCgpICYmIC8vIFRoZSBwYXRoIGNhbiBiZSBjaGFuZ2VkIGluIGNhc2Ugb2YgYSBwYXJhbWV0cml6ZWQgZW50aXR5XG5cdFx0XHRcdFx0dGhpcy5nZXRTZWFyY2hRdWVyeShiaW5kaW5nKSA9PT0gYmluZGluZ0luZm8/LnBhcmFtZXRlcnM/LiRzZWFyY2g7XG5cdFx0XHRcdGNvbnN0IExSTXVsdGlWaWV3RW5hYmxlZCA9ICEhdmlld0RhdGEudmlld3M7XG5cblx0XHRcdFx0bmVlZE1hbnVhbFJlZnJlc2ggPVxuXHRcdFx0XHRcdGZpbHRlck5vdENoYW5nZWQgJiZcblx0XHRcdFx0XHQoaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVEKSB8fCAvLyBjaGVjayBpZiB0aGUgc2VhcmNoIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVEKSB8fCAvLyBjaGVjayBpZiBhIGNvbHVtbiBoYXMgYmVlbiBhZGRlZFxuXHRcdFx0XHRcdFx0TFJNdWx0aVZpZXdFbmFibGVkKSAmJiAvLyBpZiB0aGUgbXVsdGkgdmlldyBpcyBlbmFibGVkIHRoZSByZXF1ZXN0IHNob3VsZCBiZSByZWZyZXNoZWQgYXMgd2UgZG9uJ3Qga25vd24gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIGlzIG91dGRhdGVkIGR1ZSB0byBhbiBhY3Rpb24gb24gYW5vdGhlciB0YWJsZVxuXHRcdFx0XHRcdCFwZW5kaW5nTWFudWFsVXBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2xlYW51cCBncm91cENvbmRpdGlvbnMgYW5kIGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgaWYgdGhleSBkb24ndCBtYWtlIHNlbnNlXG5cdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBjb25kaXRpb25zIG5ldmVyIG1ha2Ugc2Vuc2Ugb3V0c2lkZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlXG5cdFx0XHRcdHRhYmxlLnNldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoKTtcblxuXHRcdFx0XHQvLyBHcm91cCBjb25kaXRpb25zIGRvbid0IG1ha2Ugc2Vuc2UgaW4gYSBUcmVlIG9yIEdyaWQgdGFibGVcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJHcmlkVGFibGVcIiB8fFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZS5zZXRHcm91cENvbmRpdGlvbnMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZy5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvLCBiaW5kaW5nXSk7XG5cdFx0XHQvLyB3ZSBzdG9yZSB0aGUgdGFibGUgYmluZGluZyBpbmZvIHRoYXQgd2FzIHVzZWQgdG8gYmluZCB0aGUgdGFibGUgaW4gdGhlIHRhYmxlIEFQSVxuXHRcdFx0Ly8gdGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRoZSBjYWxsIHRvIFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcgb3RoZXIgd2lzZSB3ZSBkb24ndCBnZXQgdGhlIGFnZ3JlZ2F0ZSBwYXJhbWV0ZXJzXG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJldHJpZXZlIHNvcnRlcnMgYWRkZWQgaW4gdGhlIG9uQmVmb3JlUmViaW5kVGFibGUgZXZlbnRcblx0XHRcdHRhYmxlQVBJLnNldFRhYmxlQmluZGluZ0luZm8oYmluZGluZ0luZm8pO1xuXHRcdFx0Ly8gd2UgbWFrZSB0aGUgY2FsbCB0byB1cGRhdGUgdGhlIGRvd25sb2FkIHVybCBidXQgZG8gbm90IGF3YWl0IGl0XG5cdFx0XHR0YWJsZUFQSS5zZXREb3dubG9hZFVybCgpO1xuXG5cdFx0XHR0YWJsZS5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcblx0XHRcdGlmIChuZWVkTWFudWFsUmVmcmVzaCAmJiB0YWJsZS5nZXRGaWx0ZXIoKSAmJiBiaW5kaW5nKSB7XG5cdFx0XHRcdGJpbmRpbmdcblx0XHRcdFx0XHQucmVxdWVzdFJlZnJlc2goYmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRoZSB0YWJsZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFBSRVZJT1VTX1NPUlRFUlMsIG5ld1NvcnRlcnMpO1xuXG5cdFx0XHQvL2ZvciBUcmVldGFibGUsIGl0J3MgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBwYXN0YWJsZUNvbnRleHRzIHNpbmNlIHRoZSBiaW5kaW5nIGRlc3Ryb3lzIHByZXZpb3VzIGNvbnRleHRzLlxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IHRhYmxlQVBJLnN0b3JlZEV2ZW50cyA/PyBbXTtcblx0XHRcdGF0dGFjaGVkRXZlbnRzLmZvckVhY2goKHsgZXZlbnRJZCwgY2FsbGJhY2ssIGxpc3RlbmVyLCBkYXRhIH0pID0+IHtcblx0XHRcdFx0dGFibGUuZ2V0Um93QmluZGluZygpPy5hdHRhY2hFdmVudChldmVudElkLCBkYXRhLCBjYWxsYmFjaywgbGlzdGVuZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHR9LFxuXG5cdF9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogQ29sbGVjdGlvbkJpbmRpbmdJbmZvIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCByb3dCaW5kaW5nSW5mbyA9IHRhYmxlQVBJLmdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbygpO1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9PT0gdW5kZWZpbmVkICYmXG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJ1aVwiKT8uZ2V0UHJvcGVydHkoXCJpc0VkaXRhYmxlXCIpID09PSBmYWxzZSAmJlxuXHRcdFx0b1RhYmxlLmdldE1vZGVsKFwidmlld0RhdGFcIik/LmdldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEVuYWJsZWRcIilcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoYmluZGluZ0NvbnRleHQgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRCaW5kaW5nKCkuZ2V0VXBkYXRlR3JvdXBJZCgpID09IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRFxuXHRcdCkge1xuXHRcdFx0dGFibGVDYW5CZUluSW5saW5lRWRpdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlQ2FuQmVJbklubGluZUVkaXQpIHtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz89IHt9O1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHVwZGF0ZUdyb3VwSWQgPSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQ7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhlIHJvd0JpbmRpbmdJbmZvIGhhcyBhICQkZ2V0S2VlcEFsaXZlQ29udGV4dCBwYXJhbWV0ZXIgd2UgbmVlZCB0byBjaGVjayBpdCBpcyB0aGUgb25seSBUYWJsZSB3aXRoIHN1Y2ggYVxuXHRcdC8vIHBhcmFtZXRlciBmb3IgdGhlIGNvbGxlY3Rpb25NZXRhUGF0aFxuXHRcdGlmIChyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPihvVGFibGUsIFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikgPz8gXCJcIjtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBvVGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBrZXB0QWxpdmVMaXN0cyA9IGludGVybmFsTW9kZWw/LmdldE9iamVjdChcIi9rZXB0QWxpdmVMaXN0c1wiKSA/PyB7fTtcblx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSA9IG9UYWJsZS5nZXRJZCgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHR9IGVsc2UgaWYgKGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSAhPT0gb1RhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0ZGVsZXRlIHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmICgob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mb0ZpbHRlcnMgPSAob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlciAhPT0gRmlsdGVyLk5PTkUpO1xuXHRcdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0ZmlsdGVyczogYmluZGluZ0luZm9GaWx0ZXJzLmNvbmNhdChvRmlsdGVySW5mby5maWx0ZXJzKSxcblx0XHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0fVxuXG5cdFx0dGhpcy5hZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKG9UYWJsZSwgb0JpbmRpbmdJbmZvKTtcblx0fSxcblxuXHR1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeTogZnVuY3Rpb24gKGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGZpbHRlckluZm86IEludGVybmFsQmluZGluZ0luZm8sIGZpbHRlcj86IEZpbHRlcikge1xuXHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXI7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0aWYgKGZpbHRlckluZm8uc2VhcmNoKSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckluZm8uc2VhcmNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHNwZWNpZmllZCBpbiB0aGUgcGF5bG9hZCwgYWRkcyBhIGZpbHRlciB0byBkaXNwbGF5IG9ubHkgYWN0aXZlIGVudGl0aWVzLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvXG5cdCAqL1xuXHRhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRhYmxlLmdldFBheWxvYWQoKSBhcyB7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuIH07XG5cblx0XHRpZiAocGF5bG9hZD8uZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyT25BY3RpdmUgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJJc0FjdGl2ZUVudGl0eVwiLCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IHRydWUgfSk7XG5cdFx0XHRpZiAoYmluZGluZ0luZm8uZmlsdGVycykge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IFtmaWx0ZXJPbkFjdGl2ZSwgYmluZGluZ0luZm8uZmlsdGVyc10sIGFuZDogdHJ1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXJPbkFjdGl2ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIHRoZSBmcmFnbWVudCBvZiBhIHNsb3QgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY3VzdG9tIHRhYmxlIGNvbHVtblxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBtb2RpZmllciBUaGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSB0YWJsZUlkIFRoZSBpZCBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGZyYWdtZW50XG5cdCAqL1xuXHRfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCBKc0NvbnRyb2xUcmVlTW9kaWZpZXIsXG5cdFx0dGFibGVJZDogc3RyaW5nXG5cdCk6IFByb21pc2U8bnVsbCB8IENvbnRyb2wgfCBDb250cm9sW10gfCBFbGVtZW50PiB7XG5cdFx0Y29uc3Qgc2xvdENvbHVtbnNYTUwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuXHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldFNsb3RDb2x1bW4odGFibGVJZCwgY29sdW1uSW5mbywgZmFsc2UpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0fSksXG5cdFx0XHRcInRleHQveG1sXCJcblx0XHQpO1xuXHRcdGlmICghc2xvdENvbHVtbnNYTUwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHNsb3RYTUwgPSBzbG90Q29sdW1uc1hNTC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNsb3RcIilbMF07XG5cblx0XHRpZiAoY29sdW1uSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0aWYgKHNsb3RYTUwpIHtcblx0XHRcdFx0Y29uc3Qgb1RlbXBsYXRlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhjb2x1bW5JbmZvLnRlbXBsYXRlIGFzIHN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCAmJiBvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUgIT09IFwiaHRtbFwiKSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZXBsYWNlV2l0aChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKGBQbGVhc2UgcHJvdmlkZSBjb250ZW50IGluc2lkZSB0aGlzIEJ1aWxkaW5nIEJsb2NrIENvbHVtbjogJHtjb2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0c2xvdENvbHVtbnNYTUwuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdCh2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PikuZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCgpXG5cdFx0KTtcblx0XHRpZiAobW9kaWZpZXI/LnRhcmdldHMgIT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WE1MLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0Y29udHJvbGxlcjogdmlldy5nZXRDb250cm9sbGVyKClcblx0XHR9KSBhcyBQcm9taXNlPENvbnRyb2wgfCBDb250cm9sW10+O1xuXHR9LFxuXG5cdF9nZXRFeHBvcnRGb3JtYXQ6IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZykge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlZnJvbUpTRGF0ZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lKCk7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSgpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZIUmVsZXZhbnRGaWVsZHM6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc01ldGFkYXRhUGF0aDogc3RyaW5nLCBzQmluZGluZ1BhdGg/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0bGV0IGFGaWVsZHM6IHN0cmluZ1tdID0gW10sXG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhZGF0YVBhdGgpO1xuXG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogdW5rbm93biwgaUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzQmluZGluZ1BhdGggJiYgc01ldGFkYXRhUGF0aC5pbmRleE9mKHNCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRhRmllbGRzLnB1c2goc01ldGFkYXRhUGF0aC5zdWJzdHJpbmcoc0JpbmRpbmdQYXRoLmxlbmd0aCArIDEpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRhRmllbGRzLnB1c2goQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNNZXRhZGF0YVBhdGgsIHRydWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhRmllbGRzO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW46IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29sdW1uczogVGFibGVDb2x1bW5bXSwgb0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKCFvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnMuZmlsdGVyKChvQ29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0b1Byb3BlcnR5SW5mb05hbWU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUluZm9OYW1lKSB7XG5cdFx0XHQvLyAxLiBBcHBsaWNhdGlvbiByZW1vdmVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZWlyIGRhdGEgbW9kZWxcblx0XHRcdC8vIDIuIGFkZEl0ZW0gZmFpbGVkIGJlZm9yZSByZXZlcnREYXRhIGNyZWF0ZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBhd2FpdCBvTW9kaWZpZXIuZ2V0UHJvcGVydHk8c3RyaW5nPihvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzKFwiSW5saW5lWE1MXCIpKSB7XG5cdFx0XHRvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0ZG9SZW1vdmVJdGVtID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgob1RhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlIGFzIFRhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRhQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uXG5cdCkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSBhcyBUYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IHN0cmluZykge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUhlbHA6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvVmFsdWVIZWxwKSB7XG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9WYWx1ZUhlbHAsIDApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cblx0LyoqXG5cdCAqIEludm9rZWQgd2hlbiBhIGNvbHVtbiBpcyBhZGRlZCB1c2luZyB0aGUgdGFibGUgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBhZGRlZFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIHRoZSBmbGV4aWJpbGl0eSBBUElcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBJbnN0YW5jZSBvZiB0aGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEluc3RhbmNlIG9mIHRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcudmlldyBJbnN0YW5jZSBvZiB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyBPbmNlIHJlc29sdmVkLCBhIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9uIGlzIHJldHVybmVkXG5cdCAqL1xuXHRhZGRJdGVtOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50LFxuXHRcdHByb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRtUHJvcGVydHlCYWc6IHsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyB2aWV3PzogRkVWaWV3IH1cblx0KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuX2dldE1ldGFNb2RlbChtUHJvcGVydHlCYWcpLFxuXHRcdFx0b01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyLFxuXHRcdFx0c1RhYmxlSWQgPSBvTW9kaWZpZXIuZ2V0SWQodGFibGUpLFxuXHRcdFx0YUNvbHVtbnMgPSAodGFibGUgYXMgVUk1RWxlbWVudCkuaXNBID8gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlIGFzIFRhYmxlKSA6IG51bGw7XG5cdFx0aWYgKCFhQ29sdW1ucykge1xuXHRcdFx0Ly8gV2UgcmV0dXJuIG51bGwgaGVyZSBiZWNhdXNlIGV2ZXJ5dGhpbmcgc2hvdWxkIGFwcGx5IGF0IHJ1bnRpbWVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLm5hbWUgPT09IHByb3BlcnR5SW5mb05hbWU7XG5cdFx0fSk7XG5cdFx0aWYgKCFjb2x1bW5JbmZvKSB7XG5cdFx0XHRMb2cuZXJyb3IoYCR7cHJvcGVydHlJbmZvTmFtZX0gbm90IGZvdW5kIHdoaWxlIGFkZGluZyBjb2x1bW5gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0TG9nLndhcm5pbmcoYENvbHVtbiBmb3IgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgYWRkZWQgYmVjYXVzZSBpdCdzIGhpZGRlbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIHRydWUpO1xuXHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgdGFibGUsIGFDb2x1bW5zLCBjb2x1bW5JbmZvKTtcblx0XHRjb25zdCBzUGF0aCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwibWV0YVBhdGhcIiwgb01vZGlmaWVyKTtcblx0XHRjb25zdCBvVGFibGVDb250ZXh0OiBDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpITtcblx0XHQvLyBJZiB2aWV3IGlzIG5vdCBwcm92aWRlZCB0cnkgdG8gZ2V0IGl0IGJ5IGFjY2Vzc2luZyB0byB0aGUgcGFyZW50YWwgaGllcmFyY2h5XG5cdFx0Ly8gSWYgaXQgZG9lc24ndCB3b3JrICh0YWJsZSBpbnRvIGFuIHVuYXR0YWNoZWQgT1Agc2VjdGlvbikgZ2V0IHRoZSB2aWV3IHZpYSB0aGUgQXBwQ29tcG9uZW50XG5cdFx0Y29uc3QgdmlldyA9XG5cdFx0XHRtUHJvcGVydHlCYWcudmlldyB8fFxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSBhcyBVSTVFbGVtZW50KSB8fFxuXHRcdFx0KG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgPyBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQoY29sdW1uSW5mbyBhcyBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LCB2aWV3LCBvTW9kaWZpZXIsIHNUYWJsZUlkKTtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkNvbXB1dGVkXCIpIHtcblx0XHRcdGNvbnN0IGVuYWJsZUFuYWx5dGljcyA9ICgodGFibGUgYXMgTURDVGFibGUpLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3M7XG5cdFx0XHRyZXR1cm4gZ2V0Q29tcHV0ZWRDb2x1bW4oc1RhYmxlSWQsIGNvbHVtbkluZm8gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbiwgb1RhYmxlQ29udGV4dCwgZW5hYmxlQW5hbHl0aWNzKTtcblx0XHR9XG5cblx0XHQvLyBmYWxsLWJhY2tcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gKCh0YWJsZSBhcyBNRENUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdHByb3BJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gcHJvcEluZm8ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblxuXHRcdGNvbnN0IGZuVGVtcGxhdGVGcmFnbWVudCA9IGFzeW5jIChcblx0XHRcdG9JblByb3BlcnR5SW5mbzogdW5rbm93bixcblx0XHRcdG9WaWV3OiBGRVZpZXdcblx0XHQpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPiA9PiB7XG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nIHwgYm9vbGVhbj4odGFibGUsIFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbihhc3luYyAoYUN1c3RvbURhdGE6IChzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNUYWJsZVR5cGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMV0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUmVhZCBPbmx5IGFuZCBDb2x1bW4gRWRpdCBNb2RlIGNhbiBib3RoIGhhdmUgdGhyZWUgc3RhdGVcblx0XHRcdFx0Ly8gVW5kZWZpbmVkIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayBkZWNpZGVzIHdoYXQgdG8gZG9cblx0XHRcdFx0Ly8gVHJ1ZSAvIERpc3BsYXkgbWVhbnMgYWx3YXlzIHJlYWQgb25seVxuXHRcdFx0XHQvLyBGYWxzZSAvIEVkaXRhYmxlIG1lYW5zIGVkaXRhYmxlIGJ1dCB3aGlsZSBzdGlsbCByZXNwZWN0aW5nIHRoZSBsb3cgbGV2ZWwgcHJpbmNpcGxlIChpbW11dGFibGUgcHJvcGVydHkgd2lsbCBub3QgYmUgZWRpdGFibGUpXG5cdFx0XHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYkRpc3BsYXlNb2RlICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGJEaXNwbGF5TW9kZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSxcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogeyBuYW1lOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSB9LFxuXHRcdFx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9Qcm9wZXJ0eUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB0YWJsZUNvbGxlY3Rpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBuZXcgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcihcblx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHR7IGNvbGxlY3Rpb25FbnRpdHk6IHRhYmxlQ29sbGVjdGlvbi50YXJnZXRPYmplY3QhLCBtZXRhTW9kZWw6IG9NZXRhTW9kZWwgfSxcblx0XHRcdFx0XHR0YWJsZUFQSVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBjb21wdXRlZENvbHVtblhNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSEsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0KSA/PyBcIlwiKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcInRleHQveG1sXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFx0XHRjb21wdXRlZENvbHVtblhNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHRcdFx0eyB2aWV3OiBvVmlldyB9LFxuXHRcdFx0XHRcdG9Nb2RpZmllclxuXHRcdFx0XHQpLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBUYWJsZSdzIGZpbHRlciBkZWxlZ2F0ZSB0byBwcm92aWRlIGJhc2ljIGZpbHRlciBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgYWRkaW5nIEZpbHRlckZpZWxkcy5cblx0ICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgVGFibGVzIGZpbHRlciBwZXJzb25hbGl6YXRpb24uXG5cdCAqL1xuXHRnZXRGaWx0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0XHR9LFxuXHRcdFx0RmlsdGVyQmFyRGVsZWdhdGUsXG5cdFx0XHR7XG5cdFx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gQ29ycmVjdCB0aGUgbmFtZSBvZiBjb21wbGV4IHByb3BlcnR5IGluZm8gcmVmZXJlbmNlcy5cblx0XHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZU1hcCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZU1hcFxuXHQgKi9cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0LypGb3IgYSBEYXRlLCBEYXRlVGltZSwgQm9vbGVhbiBvciBEZWNpbWFsIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRjb25zdCBkYXRhQmFzZVR5cGUgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcGVydHlJbmZvPy5kYXRhVHlwZSkuYmFzZVR5cGU7XG5cdFx0Y29uc3QgZXh0ZXJuYWxGb3JtYXQgPVxuXHRcdFx0ZGF0YUJhc2VUeXBlID09PSBcIkRhdGVUaW1lXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkRhdGVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiQm9vbGVhblwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJOdW1lcmljXCI7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHRcdH1cblx0XHRpZiAocHJvcGVydHlJbmZvPy5tb2RlKSB7XG5cdFx0XHRzd2l0Y2ggKHByb3BlcnR5SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mbz8ucGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnBhdGgsIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSw4QkFBOEIsR0FBRywrQkFBK0I7RUFDdEUsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLGdCQUFnQixHQUFHLGlCQUFpQjs7RUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFUQSxPQVVlQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUMsaUJBQWlCLEVBQUU7SUFDbkRDLFVBQVUsRUFBRSxDQUFDO0lBQ2I7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsbUNBQW1DLEVBQUUsU0FBQUEsQ0FDcENDLEtBQVksRUFDWkMsWUFBb0MsRUFDcENDLGFBQXVDLEVBQ3RDO01BQ0QsSUFBSUQsWUFBWSxDQUFDRSxHQUFHLENBQUNDLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMzRSxNQUFNQyxNQUFNLEdBQUdMLEtBQUssQ0FBQ00sVUFBVSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFQyxHQUFHLElBQUs7VUFDL0MsT0FBT0EsR0FBRyxDQUFDQyxjQUFjLENBQUMsQ0FBQyxLQUFLUixZQUFZLENBQUNFLEdBQUc7UUFDakQsQ0FBQyxDQUFDO1FBQ0YsTUFBTU8sbUJBQW1CLEdBQUdMLE1BQU0sR0FBR0EsTUFBTSxDQUFDTSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxNQUFNLEdBQUcsS0FBSztRQUMxRixNQUFNQyxVQUFVLEdBQUlaLEtBQUssQ0FBQ2EsUUFBUSxDQUFDLENBQUMsQ0FBZ0JDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLE1BQU1DLHdCQUF3QixHQUFHQywyQkFBMkIsQ0FBQ0osVUFBVSxDQUFDSyxVQUFVLENBQUNoQixZQUFZLENBQUNpQixjQUFjLENBQUMsQ0FBQztRQUNoSCxNQUFNQyxpQkFBaUIsR0FBR0osd0JBQXdCLENBQUNLLGNBQWM7UUFDakUsTUFBTUMsVUFBVSxHQUFHTix3QkFBd0IsQ0FBQ08sWUFBc0M7UUFDbEYsTUFBTUMsV0FBVyxHQUFHRixVQUFVLENBQUNHLE1BQU0sQ0FBQ0MsT0FBeUI7UUFDL0QsTUFBTUMsV0FBcUIsR0FBRyxFQUFFO1FBQ2hDSCxXQUFXLENBQUNJLElBQUksQ0FBQ0MsT0FBTyxDQUFDLFVBQVVDLEtBQTZCLEVBQUU7VUFDakUsSUFBSUMsZUFBOEQ7VUFDbEUsUUFBUUQsS0FBSyxDQUFDRSxLQUFLO1lBQ2xCLEtBQUssbURBQW1EO2NBQ3ZERCxlQUFlLEdBQUdFLGVBQWUsQ0FBQ0MsaUNBQWlDLENBQ2xFSixLQUFLLEVBQ0wsS0FBSyxFQUNMM0IsYUFBYSxFQUNiaUIsaUJBQWlCLEVBQ2pCVCxtQkFDRCxDQUFDO2NBQ0Q7WUFDRCxLQUFLLHNDQUFzQztjQUMxQ29CLGVBQWUsR0FBR0UsZUFBZSxDQUFDRSxvQkFBb0IsQ0FDckRMLEtBQUssRUFDTG5CLG1CQUFtQixFQUNuQlIsYUFBYSxFQUNiaUIsaUJBQWlCLEVBQ2pCLEtBQ0QsQ0FBQztjQUNEO1lBQ0QsS0FBSywrQ0FBK0M7Y0FDbkRXLGVBQWUsR0FBRztnQkFDakJLLFVBQVUsRUFBRSxDQUFDO2dCQUNiQyxhQUFhLEVBQUVDLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDVCxLQUFLLENBQUNVLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUM7Y0FDakUsQ0FBQztjQUNEO1lBQ0Q7VUFDRDtVQUNBLElBQUlWLGVBQWUsRUFBRztZQUNyQkosV0FBVyxDQUFDZSxJQUFJLENBQUNYLGVBQWUsQ0FBQ0ssVUFBVSxHQUFHTCxlQUFlLENBQUNNLGFBQWEsQ0FBQztVQUM3RTtRQUNELENBQUMsQ0FBQztRQUNGLE1BQU1NLE9BQU8sR0FBR2hCLFdBQVcsQ0FBQ2lCLE1BQU0sQ0FBQyxVQUFVQyxHQUFXLEVBQUVDLEtBQWEsRUFBRTtVQUN4RSxPQUFPQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0gsR0FBRyxFQUFFQyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNMNUMsWUFBWSxDQUFDK0MsY0FBYyxHQUFHQyxVQUFVLENBQUNoRCxZQUFZLENBQUMrQyxjQUFjLEVBQVk7VUFDL0VFLGdCQUFnQixFQUFFO1lBQ2pCQyxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCQyxRQUFRLEVBQUVOLElBQUksQ0FBQ08sSUFBSSxDQUFDWCxPQUFPO1VBQzVCO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0lBRURZLDhDQUE4QyxFQUFFLFNBQUFBLENBQVV0RCxLQUFZLEVBQUV1RCxRQUFnQyxFQUFFO01BQ3pHLE1BQU1DLFFBQVEsR0FBR3hELEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFhO01BQzlDLElBQUksQ0FBQ0YsUUFBUSxDQUFDckQsYUFBYSxFQUFFO1FBQzVCLE1BQU13RCxTQUFTLEdBQUkxRCxLQUFLLENBQUNhLFFBQVEsQ0FBQyxDQUFDLENBQWdCQyxZQUFZLENBQUMsQ0FBQztRQUNqRSxJQUFJeUMsUUFBUSxDQUFDckMsY0FBYyxJQUFJd0MsU0FBUyxFQUFFO1VBQ3pDLE1BQU1DLFNBQVMsR0FBR0QsU0FBUyxDQUFDRSxTQUFTLENBQUMsR0FBR0wsUUFBUSxDQUFDckMsY0FBYyxHQUFHLENBQUM7VUFDcEUsSUFBSXlDLFNBQVMsSUFBSUEsU0FBUyxDQUFDLDJDQUEyQyxDQUFDLEVBQUU7WUFDeEVKLFFBQVEsQ0FBQ1AsY0FBYyxHQUFHQyxVQUFVLENBQUNNLFFBQVEsQ0FBQ1AsY0FBYyxJQUFJLENBQUMsQ0FBQyxFQUFFO2NBQ25FRSxnQkFBZ0IsRUFBRTtnQkFDakJXLEdBQUcsRUFBRUwsUUFBUSxDQUFDTSxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHO2NBQzdDO1lBQ0QsQ0FBQyxDQUFDO1VBQ0g7UUFDRDtNQUNEO0lBQ0QsQ0FBQztJQUVEQyx5Q0FBeUMsRUFBRSxTQUFBQSxDQUMxQy9ELEtBQVksRUFDWkMsWUFBMEIsRUFDMUIrRCxJQUFhLEVBQ2JDLFFBQWlCLEVBQ2pCQyxZQUFxQixFQUNwQjtNQUNELE1BQU1DLFNBQTBDLEdBQUduRSxLQUFLLEdBQUlBLEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFDLEdBQWdDLElBQUk7TUFDakg7TUFDQSxNQUFNVyxJQUFJLEdBQUdILFFBQVEsSUFBSUMsWUFBWTtNQUNyQyxJQUFJRSxJQUFJLEVBQUU7UUFDVG5FLFlBQVksQ0FBQytDLGNBQWMsR0FBR0MsVUFBVSxDQUFDaEQsWUFBWSxDQUFDK0MsY0FBYyxFQUFvQjtVQUN2RkUsZ0JBQWdCLEVBQUU7WUFDakJXLEdBQUcsRUFBRWYsSUFBSSxDQUFDTyxJQUFJLENBQUNoQixVQUFVLENBQUNDLGNBQWMsQ0FBQzhCLElBQUksQ0FBQztVQUMvQztRQUNELENBQUMsQ0FBQztNQUNIO01BQ0EsSUFBSUosSUFBSSxFQUFFO1FBQ1QvRCxZQUFZLENBQUMrQyxjQUFjLEdBQUdDLFVBQVUsQ0FBQ2hELFlBQVksQ0FBQytDLGNBQWMsRUFBb0I7VUFDdkZFLGdCQUFnQixFQUFFO1lBQ2pCO1lBQ0FXLEdBQUcsRUFBRU0sU0FBUyxJQUFJQSxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHO1VBQ2pEO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0lBRURDLGFBQWEsRUFBRSxTQUFBQSxDQUFVZixRQUFnQyxFQUFFZ0IsUUFBdUQsRUFBRTtNQUNuSCxJQUFJaEIsUUFBUSxDQUFDaUIsS0FBSyxFQUFFO1FBQ25CLE1BQU1DLHVCQUF1QixHQUFHRixRQUFRLENBQUNoQixRQUFRLENBQUNpQixLQUFLLENBQUM7UUFDeEQ7UUFDQTtRQUNBO1FBQ0EsTUFBTUUsZ0NBQWdDLEdBQUdELHVCQUF1QixFQUFFRSxJQUFJLENBQ3BFQyxJQUFJLElBQUtBLElBQUksQ0FBQ1IsSUFBSSxLQUFLYixRQUFRLENBQUNzQixJQUFJLElBQUlELElBQUksRUFBRUUsSUFBSSxLQUFLLGFBQ3pELENBQUM7UUFDRCxJQUNDTCx1QkFBdUIsRUFBRU0sTUFBTSxHQUFHLENBQUMsSUFDbkN4QixRQUFRLENBQUNzQixJQUFJLEVBQUVHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFDNUJ6QixRQUFRLENBQUMwQixnQkFBZ0IsSUFDekIsQ0FBQ1AsZ0NBQWdDLElBQ2pDLEVBQUVuQixRQUFRLEVBQUV1QixJQUFJLEtBQUssYUFBYSxJQUFJdkIsUUFBUSxDQUFDMkIsVUFBVSxDQUFDLEVBQ3pEO1VBQ0QzQixRQUFRLENBQUNpQixLQUFLLEdBQUdqQixRQUFRLENBQUNpQixLQUFLLEdBQUcsSUFBSSxHQUFHakIsUUFBUSxDQUFDMEIsZ0JBQWdCLENBQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHO1FBQ3JGO1FBQ0EsT0FBTzVCLFFBQVEsQ0FBQzBCLGdCQUFnQjtNQUNqQztJQUNELENBQUM7SUFDRDtJQUNBRyxtQkFBbUIsRUFBRSxTQUFBQSxDQUFVcEYsS0FBWSxFQUFFcUYsVUFBb0MsRUFBRTtNQUNsRixNQUFNZCxRQUF1RCxHQUFHLENBQUMsQ0FBQztNQUNsRTtNQUNBLE1BQU1lLFFBQVEsR0FBR3RGLEtBQUssQ0FBQ3VGLFdBQVcsQ0FBQyxDQUFDO01BQ3BDRixVQUFVLENBQUN6RCxPQUFPLENBQUUyQixRQUFRLElBQUs7UUFDaEMsSUFBSSxDQUFDQSxRQUFRLENBQUNyRCxhQUFhLElBQUlxRCxRQUFRLENBQUNpQixLQUFLLEVBQUU7VUFDOUM7VUFDQSxJQUNFYyxRQUFRLEVBQUVOLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSXpCLFFBQVEsQ0FBQ2lDLFFBQVEsSUFDL0NGLFFBQVEsRUFBRU4sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJekIsUUFBUSxDQUFDMkIsVUFBVyxJQUNwREksUUFBUSxFQUFFTixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUl6QixRQUFRLENBQUNrQyxTQUFVLEVBQ2xEO1lBQ0RsQixRQUFRLENBQUNoQixRQUFRLENBQUNpQixLQUFLLENBQUMsR0FDdkJELFFBQVEsQ0FBQ2hCLFFBQVEsQ0FBQ2lCLEtBQUssQ0FBQyxLQUFLa0IsU0FBUyxHQUFHbkIsUUFBUSxDQUFDaEIsUUFBUSxDQUFDaUIsS0FBSyxDQUFDLENBQUNtQixNQUFNLENBQUMsQ0FBQ3BDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsUUFBUSxDQUFDO1VBQ25HO1FBQ0Q7TUFDRCxDQUFDLENBQUM7TUFDRjhCLFVBQVUsQ0FBQ3pELE9BQU8sQ0FBRTJCLFFBQVEsSUFBSztRQUNoQyxJQUFJLENBQUN4RCxtQ0FBbUMsQ0FBQ0MsS0FBSyxFQUFFdUQsUUFBUSxFQUFFOEIsVUFBVSxDQUFDO1FBQ3JFLElBQUksQ0FBQy9CLDhDQUE4QyxDQUFDdEQsS0FBSyxFQUFFdUQsUUFBUSxDQUFDO1FBQ3BFLElBQUksQ0FBQ2UsYUFBYSxDQUFDZixRQUFRLEVBQUVnQixRQUFRLENBQUM7TUFDdkMsQ0FBQyxDQUFDO01BQ0Y7TUFDQWMsVUFBVSxDQUFDNUMsSUFBSSxDQUFDO1FBQ2Z0QyxHQUFHLEVBQUUsWUFBWTtRQUNqQjBFLElBQUksRUFBRSxZQUFZO1FBQ2xCZSxVQUFVLEVBQUUsRUFBRTtRQUNkQyxLQUFLLEVBQUUsRUFBRTtRQUNUckIsS0FBSyxFQUFFLEVBQUU7UUFDVHNCLFFBQVEsRUFBRSxnQ0FBZ0M7UUFDMUNDLE9BQU8sRUFBRSxLQUFLO1FBQ2ROLFNBQVMsRUFBRSxLQUFLO1FBQ2hCRCxRQUFRLEVBQUUsS0FBSztRQUNmTixVQUFVLEVBQUU7TUFDYixDQUEyQixDQUFDO01BQzVCLE9BQU9HLFVBQVU7SUFDbEIsQ0FBQztJQUVEVyxhQUFhLEVBQUUsU0FBQUEsQ0FBVWhHLEtBQVksRUFBaUI7TUFDckQsT0FBUUEsS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQUMsQ0FBY3dDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsT0FBTztJQUNwRSxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx1QkFBdUIsRUFBRSxlQUFBQSxDQUFnQkMsTUFBYSxFQUE4QztNQUNuRyxNQUFNQyxhQUFnRCxHQUFHO1FBQUVDLElBQUksRUFBRSxDQUFDO01BQUUsQ0FBQztNQUNyRSxJQUFJQyxNQUFtQjtNQUN2QixPQUFPQyxZQUFZLENBQUNDLFVBQVUsQ0FBQ0wsTUFBTSxDQUFDLENBQ3BDTSxJQUFJLENBQUMsVUFBVUMsS0FBWSxFQUFFO1FBQzdCSixNQUFNLEdBQUdJLEtBQW1CO1FBQzVCLE9BQU9KLE1BQU0sQ0FBQ3pGLFlBQVksQ0FBQyxDQUFDLENBQUM4QyxTQUFTLENBQUMsOERBQThELENBQUM7TUFDdkcsQ0FBQyxDQUFDLENBQ0Q4QyxJQUFJLENBQUMsVUFBVUUsaUJBQXVDLEVBQUU7UUFDeEQsTUFBTUMsYUFBYSxHQUFHLENBQUNELGlCQUFpQixJQUFJLEVBQUUsRUFBRUUsR0FBRyxDQUFFQyxPQUFPLElBQUs7VUFDaEUsT0FBT0EsT0FBTyxDQUFDQyxXQUFXLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUM7UUFDRixJQUFJSCxhQUFhLENBQUM3QixRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRTtVQUM5QyxPQUFPdUIsTUFBTSxDQUFDekYsWUFBWSxDQUFDLENBQUMsQ0FBQzhDLFNBQVMsQ0FBQyx3REFBd0QsQ0FBQztRQUNqRztRQUNBLE9BQU84QixTQUFTO01BQ2pCLENBQUMsQ0FBQyxDQUNEZ0IsSUFBSSxDQUFDLFVBQVVPLFdBQW9CLEVBQUU7UUFDckMsSUFBSUEsV0FBVyxFQUFFO1VBQ2hCWixhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcxRyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRXFILFdBQVcsQ0FBQztRQUN0RDtRQUNBO01BQ0QsQ0FBQyxDQUFDLENBQ0RDLEtBQUssQ0FBQyxVQUFVQyxHQUFHLEVBQUU7UUFDckJDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHdEQUF3REYsR0FBRyxFQUFFLENBQUM7TUFDekUsQ0FBQyxDQUFDLENBQ0RULElBQUksQ0FBQyxZQUFZO1FBQ2pCLE9BQU9MLGFBQWE7TUFDckIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDaUIsK0JBQStCLEVBQUUsU0FBQUEsQ0FDaENDLFVBQWlDLEVBQ2pDQyx5QkFBdUQsRUFDN0M7TUFDVixNQUFNQyxZQUFZLEdBQUdDLGdCQUFnQixDQUFDRix5QkFBeUIsQ0FBQztNQUNoRSxPQUNDLENBQUNELFVBQVUsQ0FBQ0ksWUFBWSxDQUFDM0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUNyQyxDQUFDdUMsVUFBVSxDQUFDSyxnQkFBZ0IsS0FBSyxJQUFJLElBQUlMLFVBQVUsQ0FBQ00sb0JBQW9CLEtBQUssSUFBSSxLQUNqRixFQUFFQyxVQUFVLENBQUNMLFlBQVksQ0FBQyxJQUFJQSxZQUFZLENBQUM1RSxLQUFLLEtBQUssS0FBSyxDQUFFO0lBRS9ELENBQUM7SUFFRGtGLGtCQUFrQixFQUFFLFNBQUFBLENBQ25CckUsU0FBb0IsRUFDcEI2RCxVQUFpQyxFQUNqQ3ZILEtBQVksRUFDWmdJLFlBQTBCLEVBQ0Q7TUFDekIsTUFBTUMsdUJBQXVCLEdBQUdWLFVBQVUsQ0FBQ3JHLGNBQWM7UUFDeERHLFVBQVUsR0FBR3FDLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDcUUsdUJBQXVCLENBQUM7UUFDekRDLGtCQUFrQixHQUFHeEUsU0FBUyxDQUFDeUUsb0JBQW9CLENBQUNGLHVCQUF1QixDQUFZO1FBQ3ZGRyxhQUFhLEdBQUdiLFVBQVUsQ0FBQ2MsVUFBVSxFQUFFQyxTQUFTLElBQUlmLFVBQVUsQ0FBQ2MsVUFBVSxDQUFDQyxTQUFTLEVBQUVsSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxR21JLFdBQVcsR0FBR0MsWUFBWSxDQUFDQyxvQkFBb0IsQ0FBQ1Asa0JBQWtCLEVBQUU3RyxVQUFVLENBQUM7UUFDL0VxSCxrQkFBa0IsR0FBR2xDLFlBQVksQ0FBQ21DLGFBQWEsQ0FBQzNJLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLE1BQU07UUFDcEZ3RSxLQUFLLEdBQUdvRSxnQkFBZ0IsQ0FBQ3JCLFVBQVUsQ0FBQy9DLEtBQUssSUFBSSxFQUFFLEVBQUV3RCxZQUFZLElBQUloSSxLQUFLLENBQUM7UUFDdkU2SSxPQUFPLEdBQUdELGdCQUFnQixDQUFDckIsVUFBVSxDQUFDc0IsT0FBTyxJQUFJLEVBQUUsRUFBRWIsWUFBWSxJQUFJaEksS0FBSyxDQUFDO1FBQzNFcUksVUFBVSxHQUFHLElBQUksQ0FBQ1MsY0FBYyxDQUFDdkIsVUFBVSxFQUFFYSxhQUFhLENBQUM7UUFDM0RuSSxZQUFvQyxHQUFHO1VBQ3RDOEksSUFBSSxFQUFFeEIsVUFBVSxDQUFDd0IsSUFBSTtVQUNyQjVJLEdBQUcsRUFBRW9ILFVBQVUsQ0FBQ3dCLElBQUk7VUFDcEI3SCxjQUFjLEVBQUUrRyx1QkFBdUI7VUFDdkNyQyxVQUFVLEVBQUUyQixVQUFVLENBQUMzQixVQUFVO1VBQ2pDQyxLQUFLLEVBQUUwQixVQUFVLENBQUMxQixLQUFLO1VBQ3ZCckIsS0FBSyxFQUFFQSxLQUFLO1VBQ1pxRSxPQUFPLEVBQUVBLE9BQU87VUFDaEIvQyxRQUFRLEVBQUV1QyxVQUFVLENBQUNDLFNBQVM7VUFDOUJELFVBQVUsRUFBRUEsVUFBVTtVQUN0QlcsYUFBYSxFQUNaekIsVUFBVSxDQUFDYyxVQUFVLEVBQUVZLFFBQVEsS0FBSyxvQkFBb0IsR0FDckQ7WUFBRUMsS0FBSyxFQUFFO1VBQWUsQ0FBQyxDQUFDLCtEQUMxQjNCLFVBQVUsQ0FBQ2MsVUFBVSxFQUFFVyxhQUFhO1VBQ3hDRyxXQUFXLEVBQUU1QixVQUFVLENBQUNjLFVBQVUsRUFBRWMsV0FBVztVQUMvQ3BELE9BQU8sRUFBRXdCLFVBQVUsQ0FBQzZCLFlBQVksS0FBSyxRQUFRLElBQUksQ0FBQ2hCLGFBQWE7VUFDL0RpQixjQUFjLEVBQUUsSUFBSSxDQUFDQyw4QkFBOEIsQ0FBQy9CLFVBQVUsQ0FBQzhCLGNBQWMsRUFBRTlCLFVBQVUsQ0FBQztVQUMxRnZELElBQUksRUFBRXVELFVBQVUsQ0FBQ3ZELElBQUk7VUFDckJ1RixJQUFJLEVBQUVDLFVBQVUsQ0FBQ0MsVUFBVTtVQUMzQjlCLFlBQVksRUFBRUosVUFBVSxDQUFDSTtRQUMxQixDQUFDO01BQ0YsSUFBSTFILFlBQVksQ0FBQ29KLGNBQWMsRUFBRUssUUFBUSxFQUFFO1FBQzFDekosWUFBWSxDQUFDMEosaUJBQWlCLEdBQUc7VUFBRUQsUUFBUSxFQUFFekosWUFBWSxDQUFDb0osY0FBYyxDQUFDSztRQUFTLENBQUM7UUFDbkY7UUFDQTtNQUNEOztNQUVBO01BQ0EsSUFBSW5DLFVBQVUsQ0FBQ3ZFLGNBQWMsSUFBSXJELE1BQU0sQ0FBQ2lLLElBQUksQ0FBQ3JDLFVBQVUsQ0FBQ3ZFLGNBQWMsQ0FBQyxDQUFDK0IsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuRjlFLFlBQVksQ0FBQytDLGNBQWMsR0FBR3VFLFVBQVUsQ0FBQ3ZFLGNBQWM7TUFDeEQ7TUFFQSxJQUFJdUUsVUFBVSxDQUFDc0MsMEJBQTBCLEVBQUU7UUFDMUM1SixZQUFZLENBQUM0SiwwQkFBMEIsR0FBR3RDLFVBQVUsQ0FBQ3NDLDBCQUEwQjtNQUNoRjs7TUFFQTtNQUNBO01BQ0EsSUFBSXRDLFVBQVUsQ0FBQ3JILGFBQWEsRUFBRTZFLE1BQU0sRUFBRTtRQUNyQzlFLFlBQVksQ0FBQ0MsYUFBYSxHQUFHcUgsVUFBVSxDQUFDckgsYUFBYTtNQUN0RCxDQUFDLE1BQU07UUFDTjs7UUFFQTtRQUNBLE1BQU1zSCx5QkFBeUIsR0FBR3hHLDJCQUEyQixDQUM1RDBDLFNBQVMsQ0FBQ3pDLFVBQVUsQ0FBQ3NHLFVBQVUsQ0FBQ3JHLGNBQWMsQ0FBQyxFQUMvQ3dDLFNBQVMsQ0FBQ3pDLFVBQVUsQ0FBQ3VGLFlBQVksQ0FBQ21DLGFBQWEsQ0FBQzNJLEtBQUssRUFBRSxVQUFVLENBQUUsQ0FDcEUsQ0FBQztRQUNEQyxZQUFZLENBQUM0RSxJQUFJLEdBQUcwQyxVQUFVLENBQUNJLFlBQVk7UUFDM0M7UUFDQTFILFlBQVksQ0FBQ3VGLFFBQVEsR0FBRytCLFVBQVUsQ0FBQy9CLFFBQVE7UUFDM0MsSUFBSWtELGtCQUFrQixFQUFFO1VBQ3ZCLElBQUksQ0FBQ29CLHVDQUF1QyxDQUFDN0osWUFBWSxFQUFFc0gsVUFBVSxDQUFDO1FBQ3ZFO1FBQ0F0SCxZQUFZLENBQUNpRixVQUFVLEdBQ3RCcUMsVUFBVSxDQUFDckMsVUFBVSxLQUFLLEtBQUssSUFDL0IsQ0FBQyxDQUFDcUQsV0FBVyxJQUNiLElBQUksQ0FBQ2pCLCtCQUErQixDQUFDQyxVQUFVLEVBQUVDLHlCQUF5QixDQUFDO1FBQzVFdkgsWUFBWSxDQUFDOEosS0FBSyxHQUFHeEMsVUFBVSxDQUFDd0MsS0FBSztRQUNyQzlKLFlBQVksQ0FBQ3dGLFNBQVMsR0FBRzhCLFVBQVUsQ0FBQ3lDLFdBQVc7UUFDL0MsSUFBSXpDLFVBQVUsQ0FBQzBDLGVBQWUsRUFBRTtVQUMvQixJQUFJLENBQUNDLHVCQUF1QixDQUFDakssWUFBWSxFQUFFc0gsVUFBVSxFQUFFdkgsS0FBSyxDQUFDO1FBQzlEO1FBQ0EsSUFBSUMsWUFBWSxDQUFDOEosS0FBSyxFQUFFO1VBQ3ZCOUosWUFBWSxDQUFDa0ssU0FBUyxHQUFHO1lBQ3hCO1lBQ0FDLG9CQUFvQixFQUFFO1VBQ3ZCLENBQUM7UUFDRjtRQUNBbkssWUFBWSxDQUFDb0ssYUFBYSxHQUFHOUMsVUFBVSxDQUFDOEMsYUFBYTtRQUNyRCxJQUFJOUMsVUFBVSxDQUFDdEMsZ0JBQWdCLEVBQUU7VUFDaENoRixZQUFZLENBQUNnRixnQkFBZ0IsR0FBR3NDLFVBQVUsQ0FBQ3RDLGdCQUFnQixDQUFDNkIsR0FBRyxDQUFFd0QsZUFBdUIsSUFBSztZQUM1RixPQUFPMUIsZ0JBQWdCLENBQUMwQixlQUFlLEVBQUV0QyxZQUFZLElBQUloSSxLQUFLLENBQUM7VUFDaEUsQ0FBQyxDQUFDO1FBQ0g7TUFDRDtNQUVBLElBQUksQ0FBQytELHlDQUF5QyxDQUFDL0QsS0FBSyxFQUFFQyxZQUFZLEVBQUVzSCxVQUFVLENBQUN2RCxJQUFJLEVBQUV1RCxVQUFVLENBQUN0RCxRQUFRLEVBQUVzRCxVQUFVLENBQUNyRCxZQUFZLENBQUM7TUFFbEksT0FBT2pFLFlBQVk7SUFDcEIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDcUosOEJBQThCLEVBQUUsU0FBQUEsQ0FDL0JELGNBQXVELEVBQ3ZEOUIsVUFBaUMsRUFDUztNQUMxQyxNQUFNZ0QsWUFBWSxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNqRCxVQUFVLENBQUNjLFVBQVUsRUFBRUMsU0FBUyxDQUFDO01BQzVFLElBQUlpQyxZQUFZLElBQUlsQixjQUFjLEVBQUU7UUFDbkNBLGNBQWMsQ0FBQ29CLE1BQU0sR0FBR0YsWUFBWTtNQUNyQztNQUNBLE9BQU9sQixjQUFjO0lBQ3RCLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ1AsY0FBY0EsQ0FBQ3ZCLFVBQWlDLEVBQUVhLGFBQXVCLEVBQWM7TUFDdEYsSUFBSUMsVUFBVSxHQUFHcUMsT0FBTyxDQUFDQyxhQUFhLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDO01BQzFFLElBQUlwRCxVQUFVLENBQUNjLFVBQVUsRUFBRUMsU0FBUyxJQUFJc0MsZ0JBQWdCLENBQUNyRCxVQUFVLENBQUNjLFVBQVUsQ0FBQ0MsU0FBUyxDQUFDLEVBQUU7UUFDMUZELFVBQVUsR0FBR3FDLE9BQU8sQ0FBQ0MsYUFBYSxDQUNqQ3BELFVBQVUsQ0FBQ2MsVUFBVSxDQUFDQyxTQUFTLEVBQy9CZixVQUFVLENBQUNjLFVBQVUsQ0FBQ1csYUFBYSxFQUNuQ3pCLFVBQVUsQ0FBQ2MsVUFBVSxDQUFDYyxXQUN2QixDQUFDO01BQ0YsQ0FBQyxNQUFNLElBQUk1QixVQUFVLENBQUNjLFVBQVUsRUFBRUMsU0FBUyxJQUFJLENBQUNGLGFBQWEsRUFBRTtRQUM5REMsVUFBVSxHQUFHcUMsT0FBTyxDQUFDQyxhQUFhLENBQUNwRCxVQUFVLENBQUNjLFVBQVUsQ0FBQ0MsU0FBUyxDQUFDO01BQ3BFO01BQ0EsT0FBT0QsVUFBVTtJQUNsQixDQUFDO0lBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0M2Qix1QkFBdUIsRUFBRSxTQUFBQSxDQUFVakssWUFBb0MsRUFBRXNILFVBQWlDLEVBQUV2SCxLQUFZLEVBQVE7TUFDL0gsTUFBTTZLLGlCQUFpQixHQUFHLElBQUksQ0FBQzdFLGFBQWEsQ0FBQ2hHLEtBQUssQ0FBQyxDQUFDTyxJQUFJLENBQUMsVUFBVXVLLElBQUksRUFBRTtRQUN4RSxPQUFPQSxJQUFJLENBQUMvQixJQUFJLEtBQUt4QixVQUFVLENBQUMwQyxlQUFlLEVBQUVjLFlBQVk7TUFDOUQsQ0FBQyxDQUFDO01BQ0YsSUFBSUYsaUJBQWlCLEVBQUU7UUFDdEI1SyxZQUFZLENBQUM2RSxJQUFJLEdBQUd5QyxVQUFVLENBQUMwQyxlQUFlLENBQUVuRixJQUFJO1FBQ3BEN0UsWUFBWSxDQUFDK0ssYUFBYSxHQUFHekQsVUFBVSxDQUFDSSxZQUFZO1FBQ3BEMUgsWUFBWSxDQUFDZ0wsbUJBQW1CLEdBQUlKLGlCQUFpQixDQUE0QmxELFlBQVk7TUFDOUY7TUFDQTFILFlBQVksQ0FBQ21FLElBQUksR0FBR21ELFVBQVUsQ0FBQzBDLGVBQWUsRUFBRWMsWUFBWTtJQUM3RCxDQUFDO0lBRURqQix1Q0FBdUNBLENBQUM3SixZQUEwQixFQUFFc0gsVUFBaUMsRUFBRTtNQUN0RyxJQUFJQSxVQUFVLENBQUMyRCxZQUFZLEVBQUU7UUFDNUJqTCxZQUFZLENBQUNpTCxZQUFZLEdBQUczRCxVQUFVLENBQUMyRCxZQUFZO01BQ3BEO01BQ0EsSUFBSTNELFVBQVUsQ0FBQzRDLFNBQVMsRUFBRTtRQUN6QmxLLFlBQVksQ0FBQ2tLLFNBQVMsR0FBRzVDLFVBQVUsQ0FBQzRDLFNBQVM7TUFDOUM7SUFDRCxDQUFDO0lBRURnQiwwQkFBMEIsRUFBRSxTQUFBQSxDQUFVNUQsVUFBK0IsRUFBRXZILEtBQVksRUFBRTtNQUNwRixNQUFNd0UsS0FBSyxHQUFHb0UsZ0JBQWdCLENBQUNyQixVQUFVLENBQUMvQyxLQUFLLEVBQUV4RSxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ3pELE1BQU1DLFlBQTBCLEdBQUc7UUFDbENFLEdBQUcsRUFBRW9ILFVBQVUsQ0FBQ3dCLElBQUk7UUFDcEJ2RSxLQUFLLEVBQUVBLEtBQUssQ0FBQ2hDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCc0QsUUFBUSxFQUFFLGdDQUFnQztRQUMxQ0MsT0FBTyxFQUFFd0IsVUFBVSxDQUFDNkIsWUFBWSxLQUFLLFFBQVE7UUFDN0NsRSxVQUFVLEVBQUUsS0FBSztRQUNqQk0sUUFBUSxFQUFFLEtBQUs7UUFDZkMsU0FBUyxFQUFFLEtBQUs7UUFDaEI0RCxjQUFjLEVBQUU5QixVQUFVLENBQUM4QixjQUFjO1FBQ3pDTSxpQkFBaUIsRUFBRXBDLFVBQVUsQ0FBQ29DO01BQy9CLENBQUM7TUFDRCxJQUFJcEMsVUFBVSxDQUFDckgsYUFBYSxLQUFLd0YsU0FBUyxJQUFJNkIsVUFBVSxDQUFDckgsYUFBYSxDQUFDNkUsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNsRjlFLFlBQVksQ0FBQ0MsYUFBYSxHQUFHcUgsVUFBVSxDQUFDckgsYUFBYTtNQUN0RDtNQUNBLE9BQU9ELFlBQVk7SUFDcEIsQ0FBQztJQUVEbUwsd0JBQXdCLEVBQUUsU0FBQUEsQ0FBVTdELFVBQWtDLEVBQUV2SCxLQUFZLEVBQUVnSSxZQUEwQixFQUFFO01BQ2pILElBQUl4RCxLQUFLO01BQ1QsSUFBSStDLFVBQVUsQ0FBQzhELE1BQU0sRUFBRTtRQUN0QixJQUFJOUQsVUFBVSxDQUFDOEQsTUFBTSxDQUFDQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7VUFDaEQ5RyxLQUFLLEdBQUcrRyxXQUFXLENBQUNDLHNCQUFzQixDQUFDakUsVUFBVSxDQUFDOEQsTUFBTSxFQUFFM0YsU0FBUyxFQUFHMUYsS0FBSyxDQUFDYSxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxSCxDQUFDLE1BQU07VUFDTjBELEtBQUssR0FBR29FLGdCQUFnQixDQUFDckIsVUFBVSxDQUFDOEQsTUFBTSxFQUFFckQsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM1RDtNQUNEO01BQ0EsTUFBTS9ILFlBQTBCLEdBQUc7UUFDbENFLEdBQUcsRUFBRW9ILFVBQVUsQ0FBQ3dCLElBQUk7UUFDcEJuRCxVQUFVLEVBQUVGLFNBQVM7UUFDckJHLEtBQUssRUFBRUgsU0FBUztRQUNoQmxCLEtBQUssRUFBRUEsS0FBSyxJQUFJLEVBQUU7UUFDbEJzQixRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDQyxPQUFPLEVBQUV3QixVQUFVLENBQUM2QixZQUFZLEtBQUssUUFBUTtRQUM3Q0MsY0FBYyxFQUFFOUIsVUFBVSxDQUFDOEIsY0FBYztRQUN6Q3JHLGNBQWMsRUFBRXVFLFVBQVUsQ0FBQ3ZFO01BQzVCLENBQUM7O01BRUQ7TUFDQTtNQUNBLElBQUl1RSxVQUFVLENBQUNySCxhQUFhLElBQUlxSCxVQUFVLENBQUNySCxhQUFhLENBQUM2RSxNQUFNLEVBQUU7UUFDaEU5RSxZQUFZLENBQUNDLGFBQWEsR0FBR3FILFVBQVUsQ0FBQ3JILGFBQWE7TUFDdEQsQ0FBQyxNQUFNO1FBQ047UUFDQUQsWUFBWSxDQUFDNEUsSUFBSSxHQUFHMEMsVUFBVSxDQUFDd0IsSUFBSTtRQUNuQzlJLFlBQVksQ0FBQ3VGLFFBQVEsR0FBRyxLQUFLO1FBQzdCdkYsWUFBWSxDQUFDaUYsVUFBVSxHQUFHLEtBQUs7TUFDaEM7TUFDQSxPQUFPakYsWUFBWTtJQUNwQixDQUFDO0lBQ0R3TCxxQ0FBcUMsRUFBRSxTQUFBQSxDQUFVQyxXQUF3QixFQUFXO01BQ25GLE9BQU8sQ0FBQyxFQUNOQSxXQUFXLENBQUMxQyxhQUFhLElBQUkwQyxXQUFXLENBQUMxQyxhQUFhLENBQUMyQyxpQkFBaUIsSUFDeEVELFdBQVcsQ0FBQzFDLGFBQWEsSUFBSTBDLFdBQVcsQ0FBQzFDLGFBQWEsQ0FBQzRDLG9DQUFxQyxDQUM3RjtJQUNGLENBQUM7SUFDREMsMEJBQTBCLEVBQUUsU0FBQUEsQ0FBVUMsT0FBYyxFQUFFQyxZQUF5QixFQUFRO01BQ3RGLE1BQU1DLGVBQWUsR0FBR0YsT0FBTyxDQUFDeEwsVUFBVSxDQUFDLENBQUM7TUFDNUMsTUFBTTJMLHVCQUF1QixHQUFHSCxPQUFPLENBQUNJLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztNQUNyRSxNQUFNQyxhQUFhLEdBQUdGLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQ0csT0FBTyxDQUFDLENBQUM7TUFDbEYsSUFBSUosZUFBZSxJQUFJQyx1QkFBdUIsRUFBRTtRQUMvQyxLQUFLLE1BQU1JLEtBQUssSUFBSUwsZUFBZSxFQUFFO1VBQ3BDLElBQ0MsSUFBSSxDQUFDUCxxQ0FBcUMsQ0FBQ00sWUFBWSxDQUFDLElBQ3hEQSxZQUFZLENBQUNoRCxJQUFJLEtBQUtpRCxlQUFlLENBQUNLLEtBQUssQ0FBQyxDQUFDNUwsY0FBYyxDQUFDLENBQUMsRUFDNUQ7WUFDRCxJQUFJd0wsdUJBQXVCLENBQUNuSSxXQUFXLENBQUNxSSxhQUFhLEdBQUc1TSw4QkFBOEIsQ0FBQyxLQUFLbUcsU0FBUyxFQUFFO2NBQ3RHdUcsdUJBQXVCLENBQUNLLFdBQVcsQ0FBQ0gsYUFBYSxHQUFHNU0sOEJBQThCLEVBQUV3TSxZQUFZLENBQUNoRCxJQUFJLENBQUM7Y0FDdEc7WUFDRDtVQUNEO1FBQ0Q7TUFDRDtJQUNELENBQUM7SUFDRHdELHlCQUF5QixFQUFFLGVBQUFBLENBQzFCdk0sS0FBWSxFQUNad00sY0FBc0IsRUFDdEI5SSxTQUF5QixFQUN6QnNFLFlBQTBCLEVBQ0E7TUFDMUI7TUFDQSxNQUFNeUUsV0FBVyxHQUFHbEIsV0FBVyxDQUFDbUIsZ0JBQWdCLENBQUNGLGNBQWMsQ0FBQztNQUNoRSxJQUFJRyxpQkFBaUMsR0FBRyxFQUFFO01BQzFDLE1BQU1DLHVCQUF1QixHQUFHQyxXQUFXLENBQUNDLDJCQUEyQixDQUFDTCxXQUFXLEVBQUUvSSxTQUFTLENBQUMsQ0FBQ3FKLHVCQUF1QjtNQUN2SCxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNqSCxhQUFhLENBQUNoRyxLQUFLLENBQUMsQ0FBQyxDQUMvQzBHLElBQUksQ0FBRVIsT0FBc0IsSUFBSztRQUNqQztRQUNBLElBQUlBLE9BQU8sRUFBRTtVQUNaLElBQUlqRyxZQUFZO1VBQ2hCaUcsT0FBTyxDQUFDdEUsT0FBTyxDQUFFMkYsVUFBVSxJQUFLO1lBQy9CLElBQUksQ0FBQ3NFLDBCQUEwQixDQUFDN0wsS0FBSyxFQUFFdUgsVUFBVSxDQUFDO1lBQ2xELFFBQVFBLFVBQVUsQ0FBQ2dDLElBQUk7Y0FDdEIsS0FBSyxZQUFZO2dCQUNoQnRKLFlBQVksR0FBRyxJQUFJLENBQUM4SCxrQkFBa0IsQ0FBQ3JFLFNBQVMsRUFBRTZELFVBQVUsRUFBMkJ2SCxLQUFLLEVBQUVnSSxZQUFZLENBQUM7Z0JBQzNHLElBQUkvSCxZQUFZLElBQUksQ0FBQzJNLHVCQUF1QixDQUFDNUgsUUFBUSxDQUFFL0UsWUFBWSxDQUEyQjhJLElBQUksQ0FBQyxFQUFFO2tCQUNwRzlJLFlBQVksQ0FBQ2lOLGFBQWEsR0FBRzFHLFlBQVksQ0FBQzJHLFlBQVksQ0FBQ2xOLFlBQXFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUN2RztnQkFDQTtjQUNELEtBQUssVUFBVTtnQkFDZEEsWUFBWSxHQUFHLElBQUksQ0FBQ2tMLDBCQUEwQixDQUFDNUQsVUFBVSxFQUF5QnZILEtBQUssQ0FBQztnQkFDeEY7Y0FDRCxLQUFLLE1BQU07Y0FDWCxLQUFLLFNBQVM7Z0JBQ2JDLFlBQVksR0FBRyxJQUFJLENBQUNtTCx3QkFBd0IsQ0FBQzdELFVBQVUsRUFBNEJ2SCxLQUFLLEVBQUVnSSxZQUFZLENBQUM7Z0JBQ3ZHO2NBQ0Q7Z0JBQ0MsTUFBTSxJQUFJb0YsS0FBSyxDQUFDLHlCQUF5QjdGLFVBQVUsQ0FBQ2dDLElBQUksRUFBRSxDQUFDO1lBQzdEO1lBQ0FvRCxpQkFBaUIsQ0FBQ2xLLElBQUksQ0FBQ3hDLFlBQXNDLENBQUM7VUFDL0QsQ0FBQyxDQUFDO1FBQ0g7UUFDQTtNQUNELENBQUMsQ0FBQyxDQUNEeUcsSUFBSSxDQUFDLE1BQU07UUFDWGlHLGlCQUFpQixHQUFHLElBQUksQ0FBQ3ZILG1CQUFtQixDQUFDcEYsS0FBSyxFQUFFMk0saUJBQTZDLENBQUM7UUFDbEcsTUFBTW5KLFFBQVEsR0FBR3hELEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFhO1FBQzlDRCxRQUFRLENBQUM2SiwrQkFBK0IsQ0FBQ1YsaUJBQTZDLENBQUM7UUFDdkZBLGlCQUFpQixHQUFHbkosUUFBUSxDQUFDOEosZ0JBQWdCLENBQUMsQ0FBQztRQUMvQztNQUNELENBQUMsQ0FBQyxDQUNEcEcsS0FBSyxDQUFDLFVBQVVDLEdBQUcsRUFBRTtRQUNyQkMsR0FBRyxDQUFDQyxLQUFLLENBQUMsc0RBQXNERixHQUFHLEVBQVksQ0FBQztNQUNqRixDQUFDLENBQUMsQ0FDRFQsSUFBSSxDQUFDLFlBQVk7UUFDakIsT0FBT2lHLGlCQUFpQjtNQUN6QixDQUFDLENBQUM7SUFDSixDQUFDO0lBRURZLG9DQUFvQyxFQUFFLGVBQUFBLENBQ3JDdk4sS0FBWSxFQUNad00sY0FBc0IsRUFDdEI5SSxTQUF5QixFQUN6QnNFLFlBQTBCLEVBQ0E7TUFDMUIsTUFBTXhFLFFBQVEsR0FBR3hELEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFhO01BQzlDLE1BQU1rSixpQkFBaUIsR0FBR25KLFFBQVEsQ0FBQ2dLLHNCQUFzQixDQUFDLENBQUM7TUFDM0QsSUFBSWIsaUJBQWlCLENBQUM1SCxNQUFNLEVBQUU7UUFDN0IsT0FBT2lJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDTixpQkFBaUIsQ0FBQztNQUMxQztNQUNBLE9BQU8sSUFBSSxDQUFDSix5QkFBeUIsQ0FBQ3ZNLEtBQUssRUFBRXdNLGNBQWMsRUFBRTlJLFNBQVMsRUFBRXNFLFlBQVksQ0FBQyxDQUFDdEIsSUFBSSxDQUFDLFVBQzFGK0csb0JBQW9DLEVBQ25DO1FBQ0RqSyxRQUFRLENBQUNrSyxzQkFBc0IsQ0FBQ0Qsb0JBQW9CLENBQUM7UUFDckQsT0FBT0Esb0JBQW9CO01BQzVCLENBQUMsQ0FBQztJQUNILENBQUM7SUFDREUsb0JBQW9CLEVBQUUsU0FBQUEsQ0FBVTNOLEtBQVksRUFBRTROLDZCQUEwRCxFQUFRO01BQy9HLE1BQU1DLGlCQUFpQixHQUFHN04sS0FBSyxDQUFDOE4sU0FBUyxDQUFDLENBQUM7TUFDM0MsSUFBSSxPQUFPRCxpQkFBaUIsSUFBSSxRQUFRLElBQUtBLGlCQUFpQixFQUFjRSxHQUFHLENBQUMsMEJBQTBCLENBQUMsRUFBRTtRQUM1RyxNQUFNQyx5QkFBeUIsR0FBR0gsaUJBQXVDO1FBQ3pFO1FBQ0FHLHlCQUF5QixDQUFDQyxRQUFRLENBQUNMLDZCQUE2QixDQUFDTSxLQUFLLENBQUM7UUFDdkVGLHlCQUF5QixDQUFDRyxjQUFjLENBQUNQLDZCQUE2QixDQUFDUSxXQUFXLENBQUM7UUFDbkZKLHlCQUF5QixDQUFDSyxtQkFBbUIsQ0FBQ1QsNkJBQTZCLENBQUNVLGdCQUFnQixDQUFDO1FBQzdGTix5QkFBeUIsQ0FBQ08sbUJBQW1CLENBQUNYLDZCQUE2QixDQUFDWSxnQkFBZ0IsQ0FBQztNQUM5RixDQUFDLE1BQU07UUFDTixNQUFNQyxrQkFBa0IsR0FBRyxJQUFJQyxrQkFBa0IsQ0FBQztVQUNqRCxHQUFHZDtRQUNKLENBQUMsQ0FBQztRQUNGNU4sS0FBSyxDQUFDMk8sU0FBUyxDQUFDRixrQkFBa0IsQ0FBQztNQUNwQztJQUNELENBQUM7SUFFREcsZ0NBQWdDLEVBQUUsU0FBQUEsQ0FBVTVPLEtBQVksRUFBRTZPLFdBQWtDLEVBQUU7TUFDN0YsTUFBTUMsZUFBZSxHQUFHQyxVQUFVLENBQUNDLGdCQUFnQixDQUFDaFAsS0FBSyxDQUFDO01BQzFELE1BQU1pUCxhQUFhLEdBQUdDLGdCQUFnQixDQUFDbFAsS0FBSyxDQUFDO01BQzdDLE1BQU1tUCxpQkFBaUIsR0FBR04sV0FBVyxDQUFDaEssSUFBSSxFQUFFeUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHdUQsV0FBVyxDQUFDaEssSUFBSSxDQUFDdUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHUCxXQUFXLENBQUNoSyxJQUFJO01BQzlHLElBQUl3SyxzQkFBbUQ7TUFFdkQsTUFBTUMsc0NBQXNDLEdBQUcsU0FBQUEsQ0FBQSxFQUF5QztRQUN2RixJQUFJdFAsS0FBSyxDQUFDVyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUlYLEtBQUssQ0FBQ3VQLGNBQWMsQ0FBQyxDQUFDLEVBQUU7VUFDMUQsT0FBTztZQUNOckIsS0FBSyxFQUFFZSxhQUFhLENBQUNPLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztZQUMzRXBCLFdBQVcsRUFBRWEsYUFBYSxDQUFDTyxPQUFPLENBQUMsMkNBQTJDLEVBQUU5SixTQUFTLEVBQUV5SixpQkFBaUIsQ0FBQztZQUM3R2IsZ0JBQWdCLEVBQUVtQixzQkFBc0IsQ0FBQ0M7VUFDMUMsQ0FBQztRQUNGO1FBQ0EsT0FBTztVQUNOeEIsS0FBSyxFQUFFZSxhQUFhLENBQUNPLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztVQUMzRXBCLFdBQVcsRUFBRWEsYUFBYSxDQUFDTyxPQUFPLENBQUMsNENBQTRDLEVBQUU5SixTQUFTLEVBQUV5SixpQkFBaUIsQ0FBQztVQUM5R2IsZ0JBQWdCLEVBQUVtQixzQkFBc0IsQ0FBQ0M7UUFDMUMsQ0FBQztNQUNGLENBQUM7TUFFRCxNQUFNQyxpQkFBaUIsR0FBRzNQLEtBQUssQ0FBQzRQLFNBQVMsQ0FBQyxDQUFDO01BQzNDLE1BQU1DLGlCQUFpQixHQUFHZixlQUFlLENBQUNnQixNQUFNLElBQUloQixlQUFlLENBQUNpQixPQUFPLEVBQUVoTCxNQUFNO01BQ25GLElBQUk0SyxpQkFBaUIsSUFBSSxDQUFDLGNBQWMsQ0FBQ0ssSUFBSSxDQUFDTCxpQkFBaUIsQ0FBQyxFQUFFO1FBQ2pFO1FBQ0EsSUFBSUUsaUJBQWlCLEVBQUU7VUFDdEI7VUFDQVIsc0JBQXNCLEdBQUdDLHNDQUFzQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxNQUFNO1VBQ05ELHNCQUFzQixHQUFHO1lBQ3hCbkIsS0FBSyxFQUFFZSxhQUFhLENBQUNPLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztZQUMzRXBCLFdBQVcsRUFBRWEsYUFBYSxDQUFDTyxPQUFPLENBQUMsZ0NBQWdDLEVBQUU5SixTQUFTLEVBQUV5SixpQkFBaUIsQ0FBQztZQUNsR2IsZ0JBQWdCLEVBQUVtQixzQkFBc0IsQ0FBQ0M7VUFDMUMsQ0FBQztRQUNGO01BQ0QsQ0FBQyxNQUFNLElBQUlHLGlCQUFpQixFQUFFO1FBQzdCO1FBQ0FSLHNCQUFzQixHQUFHQyxzQ0FBc0MsQ0FBQyxDQUFDO01BQ2xFLENBQUMsTUFBTTtRQUNORCxzQkFBc0IsR0FBRztVQUN4Qm5CLEtBQUssRUFBRWUsYUFBYSxDQUFDTyxPQUFPLENBQUMsb0NBQW9DLENBQUM7VUFDbEVwQixXQUFXLEVBQUVhLGFBQWEsQ0FBQ08sT0FBTyxDQUFDLDJDQUEyQyxFQUFFOUosU0FBUyxFQUFFeUosaUJBQWlCLENBQUM7VUFDN0diLGdCQUFnQixFQUFFbUIsc0JBQXNCLENBQUNRO1FBQzFDLENBQUM7TUFDRjtNQUNBLElBQUlwRCxXQUFXLENBQUNxRCxhQUFhLENBQUNsUSxLQUFLLENBQUMsQ0FBQ21RLFdBQVcsQ0FBQyxDQUFDLENBQUNDLFFBQVEsRUFBRTtRQUM1RCxJQUFJUCxpQkFBaUIsRUFBRTtVQUN0QlIsc0JBQXNCLEdBQUdDLHNDQUFzQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxNQUFNO1VBQ05ELHNCQUFzQixHQUFHO1lBQ3hCbkIsS0FBSyxFQUFFZSxhQUFhLENBQUNPLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztZQUMzRXBCLFdBQVcsRUFBRWEsYUFBYSxDQUFDTyxPQUFPLENBQUMsMkNBQTJDLENBQUM7WUFDL0VsQixnQkFBZ0IsRUFBRW1CLHNCQUFzQixDQUFDQztVQUMxQyxDQUFDO1FBQ0Y7TUFDRDtNQUNBTCxzQkFBc0IsQ0FBQ2IsZ0JBQWdCLEdBQUl4TyxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBQyxDQUFjNE0sb0JBQW9CLENBQUMsQ0FBQztNQUVoRyxJQUFJaEIsc0JBQXNCLENBQUNiLGdCQUFnQixLQUFLLE1BQU0sRUFBRTtRQUN2RCxNQUFNOEIsYUFBYSxHQUFHdFEsS0FBSyxDQUFDOE4sU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPd0MsYUFBYSxLQUFLLFFBQVEsSUFBSUEsYUFBYSxLQUFLakIsc0JBQXNCLENBQUNqQixXQUFXLEVBQUU7VUFDOUY7VUFDQTtRQUNEO1FBQ0FwTyxLQUFLLENBQUMyTyxTQUFTLENBQUNVLHNCQUFzQixDQUFDakIsV0FBVyxDQUFDO01BQ3BELENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQ1Qsb0JBQW9CLENBQUMzTixLQUFLLEVBQUVxUCxzQkFBc0IsQ0FBQztNQUN6RDtJQUNELENBQUM7SUFFRGtCLHVCQUF1QixFQUFFLFNBQUFBLENBQVVuSyxNQUFhLEVBQUVvSyxxQkFBMkMsRUFBUTtNQUNwRyxNQUFNQyxRQUFRLEdBQUdySyxNQUFNLElBQUlBLE1BQU0sQ0FBQ3NLLGFBQWEsQ0FBQyxDQUFDO1FBQ2hEQyxxQkFBcUIsR0FBR0gscUJBQXFCLElBQUlBLHFCQUFxQixDQUFDMU0sV0FBVyxDQUFDLHNCQUFzQixDQUFDO01BRTNHLElBQUkwTSxxQkFBcUIsSUFBSSxDQUFDRyxxQkFBcUIsRUFBRTtRQUNwREYsUUFBUSxDQUFDRyxrQkFBa0IsQ0FBQyxNQUFNO1VBQ2pDO1VBQ0EsSUFBSSxDQUFDSixxQkFBcUIsQ0FBQzFNLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQ2pFME0scUJBQXFCLENBQUNsRSxXQUFXLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO1lBQ2pFdUUsVUFBVSxDQUFDLE1BQU07Y0FDaEJMLHFCQUFxQixDQUFDbEUsV0FBVyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQztjQUNsRTtjQUNBa0UscUJBQXFCLENBQUNsRSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO2NBQ3pELE1BQU13RSxpQkFBaUIsR0FBRzFLLE1BQU0sQ0FBQzJLLG1CQUFtQixDQUFDLENBQXFCO2NBQzFFUCxxQkFBcUIsQ0FBQ2xFLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRXdFLGlCQUFpQixDQUFDO2NBQ3hFTixxQkFBcUIsQ0FBQ2xFLFdBQVcsQ0FBQywwQkFBMEIsRUFBRXdFLGlCQUFpQixDQUFDL0wsTUFBTSxDQUFDO2NBQ3ZGLE1BQU12QixRQUFRLEdBQUc0QyxNQUFNLENBQUMzQyxTQUFTLENBQUMsQ0FBYTtjQUMvQyxNQUFNdU4sNEJBQTRCLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDMU4sUUFBUSxDQUFDMk4sZUFBZSxDQUFDQyxxQkFBcUIsQ0FBQztjQUMvRkMsYUFBYSxDQUFDQyxtQkFBbUIsQ0FBQ2QscUJBQXFCLEVBQUVRLDRCQUE0QixFQUFFRixpQkFBaUIsRUFBRSxPQUFPLENBQUM7Y0FDbEg7Y0FDQVMsWUFBWSxDQUFDQyxtQ0FBbUMsQ0FBQ2hCLHFCQUFxQixFQUFFTSxpQkFBaUIsQ0FBQztjQUMxRixNQUFNM00sU0FBUyxHQUFHaUMsTUFBTSxHQUFHQSxNQUFNLENBQUMzQyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUk7Y0FDcEQsSUFBSVUsU0FBUyxFQUFFO2dCQUNiQSxTQUFTLENBQWNzTixjQUFjLENBQUNyTCxNQUFNLENBQUM7Y0FDL0M7Y0FDQSxJQUFJLENBQUNzTCxxQkFBcUIsQ0FBQ3RMLE1BQU0sQ0FBQztZQUNuQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQ047UUFDRCxDQUFDLENBQUM7UUFDRm9LLHFCQUFxQixDQUFDbEUsV0FBVyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQztNQUNoRTtJQUNELENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NxRixpQ0FBaUMsRUFBRSxTQUFBQSxDQUFVQyxVQUFnQyxFQUFFcE8sUUFBa0IsRUFBUTtNQUN4RyxNQUFNbUQsS0FBSyxHQUFHaUwsVUFBVSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDaFIsUUFBUSxDQUFDLENBQUM7TUFDckQsSUFBSThGLEtBQUssRUFBRTtRQUNWbkQsUUFBUSxDQUFDc08sZ0NBQWdDLENBQUMsSUFBSUMsYUFBYSxDQUFVLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUNDLDBCQUEwQixDQUFDSixVQUFVLEVBQUVqTCxLQUFLLEVBQUVuRCxRQUFRLENBQUM7TUFDN0Q7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDeU8seUJBQXlCLEVBQUUsU0FBQUEsQ0FBVUwsVUFBZ0MsRUFBRTVSLEtBQVksRUFBUTtNQUMxRixNQUFNa1MscURBQXFELEdBQzFEbFMsS0FBSyxJQUFJK08sVUFBVSxDQUFDb0Qsa0NBQWtDLENBQUNuUyxLQUFLLEVBQUU0UixVQUFVLENBQUNRLG9CQUFvQixDQUFDLENBQWMsQ0FBQztNQUM3R3BTLEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFDLENBQWM0TyxnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUVwRixPQUFPLENBQUMsQ0FBQ2lGLHFEQUFxRCxDQUFDO0lBQ3BJLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRiwwQkFBMEIsRUFBRSxTQUFBQSxDQUFVSixVQUFnQyxFQUFFVSxTQUFxQixFQUFFOU8sUUFBa0IsRUFBUTtNQUN4SCxNQUFNK08sK0JBQStCLEdBQUdYLFVBQVUsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ1csZ0JBQWdCLENBQUMsQ0FBQyxDQUFDQyxnQ0FBZ0MsQ0FBQyxDQUFDO01BQzFILElBQUlILFNBQVMsQ0FBQ0kseUJBQXlCLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDbFAsUUFBUSxDQUFDbVAseUJBQXlCLENBQUMsQ0FBQyxJQUFJSiwrQkFBK0IsRUFBRTtRQUMvSCxNQUFNSyxtQ0FBbUMsR0FBR3BQLFFBQVEsQ0FBQzZPLGdDQUFnQyxDQUFDLENBQUM7UUFDdkZDLFNBQVMsQ0FBQ08seUJBQXlCLENBQUMsWUFBMEM7VUFDN0UsT0FBT0QsbUNBQW1DLEVBQUVFLE9BQU87UUFDcEQsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0lBRURDLE1BQU0sRUFBRSxlQUFBQSxDQUFnQjNNLE1BQWEsRUFBRTRNLFlBQXdDLEVBQWlCO01BQy9GLE1BQU03TyxTQUFTLEdBQUdpQyxNQUFNLENBQUMzQyxTQUFTLENBQUMsQ0FBYTtNQUNoRCxNQUFNd1AsWUFBWSxHQUFHOU8sU0FBUyxFQUFFTCxXQUFXLENBQUMsa0JBQWtCLENBQUM7TUFDL0RLLFNBQVMsRUFBRW1JLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRTJHLFlBQVksQ0FBQztNQUN2RCxJQUFJLENBQUNBLFlBQVksRUFBRTtRQUNsQkMsWUFBWSxDQUFDQyxjQUFjLENBQUMvTSxNQUFNLENBQUM7UUFDbkN2RyxpQkFBaUIsQ0FBQ2tULE1BQU0sQ0FBQ0ssS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDaE4sTUFBTSxFQUFFNE0sWUFBWSxDQUFDLENBQUM7UUFDNURqRSxVQUFVLENBQUNzRSxZQUFZLENBQUNqTixNQUFNLENBQUM7UUFDL0IsT0FBTzJJLFVBQVUsQ0FBQ3VFLFNBQVMsQ0FBQ2xOLE1BQU0sQ0FBQyxDQUNqQ00sSUFBSSxDQUFFMUcsS0FBWSxJQUFXO1VBQzdCLElBQUksQ0FBQ3VRLHVCQUF1QixDQUFDdlEsS0FBSyxFQUFFQSxLQUFLLENBQUNrTSxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCLENBQUM7VUFDaEc7UUFDRCxDQUFDLENBQUMsQ0FDRGhGLEtBQUssQ0FBQyxVQUFVcU0sTUFBTSxFQUFFO1VBQ3hCbk0sR0FBRyxDQUFDQyxLQUFLLENBQUMsK0NBQStDLEVBQUVrTSxNQUFnQixDQUFDO1FBQzdFLENBQUMsQ0FBQztNQUNKO01BQ0EsT0FBT3ZHLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ3VHLGVBQWUsRUFBRSxlQUFBQSxDQUFnQnhULEtBQVksRUFBMkI7TUFDdkUsT0FBT3dHLFlBQVksQ0FBQ0MsVUFBVSxDQUFDekcsS0FBSyxDQUFDLENBQ25DMEcsSUFBSSxDQUFDLE1BQU9DLEtBQUssSUFBOEI7UUFDL0MsTUFBTXFCLFlBQVksR0FBRzZFLFdBQVcsQ0FBQ2dGLGVBQWUsQ0FBQzdSLEtBQUssQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQ3VOLG9DQUFvQyxDQUMvQ3ZOLEtBQUssRUFDTHdHLFlBQVksQ0FBQ21DLGFBQWEsQ0FBUzNJLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQzdEMkcsS0FBSyxDQUFDN0YsWUFBWSxDQUFDLENBQUMsRUFDcEJrSCxZQUNELENBQUM7TUFDRixDQUFDLENBQUMsQ0FDRHRCLElBQUksQ0FBRXJCLFVBQVUsSUFBSztRQUNwQnJGLEtBQUssQ0FBQ2tNLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFjSSxXQUFXLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDO1FBQy9GLE9BQU9qSCxVQUFVO01BQ2xCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRG9PLE9BQU8sRUFBRSxlQUFBQSxDQUFnQnpULEtBQVksRUFBaUI7TUFDckQsT0FBUUgsaUJBQWlCLENBQUM0VCxPQUFPLENBQXFDTCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUNwVCxLQUFLLENBQUMsQ0FBQyxDQUFDMEcsSUFBSSxDQUFDLE1BQU07UUFDckc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtRQUNHLE1BQU1nTixlQUFlLEdBQUcxVCxLQUFLLENBQUMyVCxjQUFjLENBQUMsQ0FBQztRQUM5QyxJQUFJRCxlQUFlLEVBQUU7VUFDcEJBLGVBQWUsQ0FBQ0UsaUJBQWlCLENBQUMsSUFBMEIsQ0FBQztRQUM5RDtRQUNBO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEQyxpQkFBaUIsRUFBRSxTQUFBQSxDQUFVN1QsS0FBWSxFQUFFNk8sV0FBa0MsRUFBRTtNQUM5RSxNQUFNaUYsc0JBQXNCLEdBQUc5VCxLQUFLLENBQUNrTSxpQkFBaUIsQ0FBQyxVQUFVLENBQXFDO01BQ3RHLE1BQU0xSSxRQUFRLEdBQUd4RCxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBYTtNQUM5QyxNQUFNc1Esd0JBQXdCLEdBQUcsSUFBSUMsd0JBQXdCLENBQUNuRixXQUFXLENBQUM7TUFDMUVpRixzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUM7TUFDOUR6TSxpQkFBaUIsQ0FBQ2dVLGlCQUFpQixDQUFDVCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUNwVCxLQUFLLEVBQUU2TyxXQUFXLENBQUMsQ0FBQztNQUNyRSxJQUFJO1FBQ0gsSUFBSSxDQUFDb0YsK0JBQStCLENBQUNqVSxLQUFLLEVBQUU2TyxXQUFXLENBQUM7UUFDeEQsSUFBSSxDQUFDcUYsMEJBQTBCLENBQUNsVSxLQUFLLEVBQUU2TyxXQUFXLENBQUM7UUFDbkQsSUFBSSxDQUFDRCxnQ0FBZ0MsQ0FBQzVPLEtBQUssRUFBRTZPLFdBQVcsQ0FBQztRQUN6RCxJQUFJLENBQUNzRixpQ0FBaUMsQ0FBQ25VLEtBQUssRUFBRTZPLFdBQVcsQ0FBQztRQUMxRCxJQUFJLENBQUN1RiwyQkFBMkIsQ0FBQ3BVLEtBQUssRUFBRTZPLFdBQVcsQ0FBQztRQUVwRDdPLEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFDLEVBQUU0USxTQUFTLENBQUMsbUJBQW1CLEVBQUU7VUFBRUMscUJBQXFCLEVBQUVQO1FBQXlCLENBQUMsQ0FBQztRQUN0RyxNQUFNUSxjQUFjLEdBQUdSLHdCQUF3QixDQUFDUyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7UUFDRyxNQUFNQyxPQUFPLEdBQUd6VSxLQUFLLENBQUNrTSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pDO1FBQ0EsSUFBSWxNLEtBQUssQ0FBQzJULGNBQWMsQ0FBQyxDQUFDLEVBQUV6SCxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJMkMsV0FBVyxDQUFDaEssSUFBSSxJQUFJNFAsT0FBTyxFQUFFO1VBQ3hGQyxXQUFXLENBQUNDLHFCQUFxQjtVQUNoQztVQUNBM1UsS0FBSyxDQUFDMlQsY0FBYyxDQUFDLENBQUMsRUFDdEI5RSxXQUFXLENBQUNoSyxJQUFJLEVBQ2hCNFAsT0FBTyxFQUNQelUsS0FBSyxDQUFDYSxRQUFRLENBQUMsQ0FBQyxFQUNoQm1NLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQ2pCLENBQUM7UUFDRjtRQUNBekosUUFBUSxDQUFDb1IsZUFBZSxDQUFDTCxjQUFjLENBQUM7TUFDekMsQ0FBQyxDQUFDLE9BQU9NLENBQUMsRUFBRTtRQUNYek4sR0FBRyxDQUFDQyxLQUFLLENBQUMsdUNBQXVDLEVBQUV3TixDQUFXLENBQUM7TUFDaEU7SUFDRCxDQUFDO0lBRURaLCtCQUErQixFQUFFLFNBQUFBLENBQVVqVSxLQUFZLEVBQUU2TyxXQUFrQyxFQUFFO01BQzVGLE1BQU1pRyxPQUE2QixHQUFHakcsV0FBVyxDQUFDa0csTUFBTTtNQUN4RCxNQUFNQyxxQkFBK0IsR0FBRyxFQUFFO01BQzFDLElBQUlGLE9BQU8sRUFBRS9QLE1BQU0sRUFBRTtRQUNwQixNQUFNdkIsUUFBUSxHQUFHeEQsS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQWE7UUFDOUMsTUFBTXdSLGVBQWUsR0FBR3pSLFFBQVEsQ0FBQ2dLLHNCQUFzQixDQUFDLENBQUM7UUFDekQsS0FBSyxNQUFNdUgsTUFBTSxJQUFJRCxPQUFPLEVBQUU7VUFDN0IsTUFBTUksYUFBYSxHQUFHRCxlQUFlLEVBQUUxVSxJQUFJLENBQUVnRCxRQUFRLElBQUtBLFFBQVEsQ0FBQ3NCLElBQUksS0FBS2tRLE1BQU0sQ0FBQzNJLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDN0YsSUFBSThJLGFBQWEsRUFBRWxSLElBQUksRUFBRTtZQUN4QixNQUFNbVIsWUFBWSxHQUFHRixlQUFlLEVBQUUxVSxJQUFJLENBQUVnRCxRQUFRLElBQUtBLFFBQVEsQ0FBQ3BELEdBQUcsS0FBSytVLGFBQWEsRUFBRWxSLElBQUksQ0FBQztZQUM5RixNQUFNb1IsbUJBQW1CLEdBQUdELFlBQVksRUFBRXRRLElBQUksSUFBSWlRLE9BQU8sQ0FBQ25RLElBQUksQ0FBRTBRLElBQUksSUFBS0EsSUFBSSxDQUFDakosT0FBTyxDQUFDLENBQUMsS0FBSytJLFlBQVksQ0FBQ3RRLElBQUksQ0FBQztZQUM5RyxJQUFJLENBQUN1USxtQkFBbUIsSUFBSUQsWUFBWSxFQUFFM1AsUUFBUSxLQUFLLEtBQUssSUFBSTJQLFlBQVksRUFBRXRRLElBQUksRUFBRTtjQUNuRm1RLHFCQUFxQixDQUFDdlMsSUFBSSxDQUFDLElBQUk2UyxNQUFNLENBQUNILFlBQVksQ0FBQ3RRLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRTtVQUNEO1VBQ0FtUSxxQkFBcUIsQ0FBQ3ZTLElBQUksQ0FBQ3NTLE1BQU0sQ0FBQztRQUNuQztRQUNBbEcsV0FBVyxDQUFDa0csTUFBTSxHQUFHQyxxQkFBcUI7TUFDM0M7SUFDRCxDQUFDO0lBRURaLDJCQUEyQixFQUFFLFNBQUFBLENBQVVwVSxLQUFZLEVBQUU2TyxXQUFrQyxFQUFFO01BQ3hGLE1BQU1uTCxTQUFTLEdBQUkxRCxLQUFLLENBQUNhLFFBQVEsQ0FBQyxDQUFDLEVBQWlCQyxZQUFZLENBQUMsQ0FBQztNQUNsRSxNQUFNMEwsY0FBYyxHQUFHcUMsV0FBVyxDQUFDaEssSUFBSSxHQUFHLEdBQUc7TUFDN0MsTUFBTWtMLE9BQU8sR0FBR2xCLFdBQVcsQ0FBQ2tCLE9BQU8sRUFBRXdGLFVBQVUsQ0FBQyxDQUFDO01BQ2pELElBQUl4RixPQUFPLEtBQUtySyxTQUFTLEVBQUU7UUFDMUJxSixVQUFVLENBQUN5RywwQkFBMEIsQ0FBQzlSLFNBQVMsRUFBRXFNLE9BQU8sRUFBa0N2RCxjQUFjLENBQUM7TUFDMUc7SUFDRCxDQUFDO0lBRUQySCxpQ0FBaUMsRUFBRSxTQUFBQSxDQUFVblUsS0FBWSxFQUFFZ1QsWUFBbUMsRUFBRTtNQUMvRixNQUFNeFAsUUFBUSxHQUFHeEQsS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQWE7TUFDOUMsTUFBTW1PLFVBQVUsR0FBR3BPLFFBQVEsRUFBRWlTLGlCQUFpQixDQUFDLENBQUM7TUFDaEQsSUFBSTdELFVBQVUsRUFBRThELGVBQWUsQ0FBQ0MsdUJBQXVCLENBQUMsQ0FBQyxFQUFFO1FBQzFELE1BQU0zTixZQUFZLEdBQUc0SixVQUFVLENBQUNDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0rRCxRQUFRLEdBQUdwUyxRQUFRLENBQUN5QyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlDLE1BQU00UCw4QkFBOEIsR0FBRzdOLFlBQVksQ0FDakQ4TixxQkFBcUIsQ0FBQyxDQUFDLENBQ3ZCQyw2QkFBNkIsQ0FBQ0gsUUFBUSxDQUFDSSxVQUFVLENBQUNDLGNBQWMsQ0FBQztRQUNuRSxJQUFJSiw4QkFBOEIsSUFBSUEsOEJBQThCLENBQUM5USxNQUFNLEdBQUcsQ0FBQyxJQUFJaU8sWUFBWSxDQUFDa0QsVUFBVSxFQUFFO1VBQzNHbEQsWUFBWSxDQUFDa0QsVUFBVSxDQUFDQyxPQUFPLEdBQUduRCxZQUFZLENBQUNrRCxVQUFVLEVBQUVDLE9BQU8sRUFBRXhRLE1BQU0sQ0FBQyxHQUFHLEVBQUVrUSw4QkFBOEIsQ0FBQzFRLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkg7TUFDRDtJQUNELENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtJQUNDdU0scUJBQXFCLEVBQUUsZUFBQUEsQ0FBZ0IxUixLQUFZLEVBQWlCO01BQ25FLE1BQU13RCxRQUFRLEdBQUd4RCxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBYTtNQUM5QyxJQUFJRCxRQUFRLENBQUNpUyxpQkFBaUIsQ0FBQyxDQUFDLENBQUNXLE9BQU8sQ0FBQyxDQUFDLENBQUNqRyxXQUFXLENBQUMsQ0FBQyxFQUFFa0csYUFBYSxLQUFLLFlBQVksRUFBRTtRQUN6RixNQUFNck8sWUFBWSxHQUFHeEUsUUFBUSxFQUFFaVMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFNUQsZUFBZSxDQUFDLENBQUM7UUFDckUsTUFBTXlFLEtBQW9CLEdBQUcsRUFBRTtRQUMvQixNQUFNOVMsUUFBUSxDQUFDK1MscUJBQXFCLENBQUNELEtBQUssQ0FBQztRQUMzQyxNQUFNRSxvQkFBb0IsR0FBRyxJQUFJQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3ZELE1BQU1DLFVBQVUsR0FBR0Ysb0JBQW9CLENBQUNHLFdBQVcsQ0FBQ0wsS0FBSyxDQUFDO1FBQzFELE1BQU1NLFdBQVcsR0FBRzVPLFlBQVksQ0FBQzZPLEtBQUssQ0FBQyxDQUFDO1FBQ3hDN08sWUFBWSxDQUFDOE8sOEJBQThCLENBQUMsQ0FBQyxDQUFDQyw4QkFBOEIsQ0FBQ0wsVUFBVSxFQUFFRSxXQUFXLENBQUM7UUFDckc1TyxZQUFZLENBQUM4Tyw4QkFBOEIsQ0FBQyxDQUFDLENBQUNFLG1CQUFtQixDQUFDLENBQUM7TUFDcEU7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLHVCQUF1QixFQUFFLFNBQUFBLENBQVVqWCxLQUFlLEVBQVk7TUFDN0QsTUFBTXdELFFBQVEsR0FBR3hELEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFhO01BQzlDLElBQUlELFFBQVEsQ0FBQzJOLGVBQWUsQ0FBQytGLE9BQU8sQ0FBQ0MsdUJBQXVCLEVBQUVDLHNCQUFzQixFQUFFO1FBQ3JGLE1BQU1DLGlCQUFpQixHQUFHLElBQUksQ0FBQ0Msd0JBQXdCLENBQUM5VCxRQUFRLENBQUM7UUFDakUsTUFBTXNRLHNCQUFzQixHQUFHOVQsS0FBSyxDQUFDa00saUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ2xFO1FBQ0E0SCxzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTlJLFFBQVEsQ0FBQytULGdCQUFnQixHQUFHLElBQUksR0FBR0YsaUJBQWlCLENBQUM7UUFDakgsT0FDQzFYLE1BQU0sQ0FBQ2lLLElBQUksQ0FBQ3BHLFFBQVEsQ0FBQzJOLGVBQWUsQ0FBQ3FHLGNBQWM7UUFDbEQ7UUFDQTtRQUFBLENBRUNDLE1BQU0sQ0FBRUMsU0FBaUIsSUFDekIsQ0FBQ0wsaUJBQWlCLEdBQ2Y3VCxRQUFRLENBQUMyTixlQUFlLENBQUNxRyxjQUFjLENBQUNFLFNBQVMsQ0FBQyxDQUFDL1MsSUFBSSxDQUN0RGdULE1BQU0sSUFBS0EsTUFBTSxLQUFLLGFBQWEsSUFBSUEsTUFBTSxLQUFLLGFBQ25ELENBQUMsR0FDRCxJQUNKLENBQUM7TUFFSjtNQUNBLE9BQU9oWSxNQUFNLENBQUNpSyxJQUFJLENBQUNwRyxRQUFRLENBQUMyTixlQUFlLENBQUNxRyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Ysd0JBQXdCLEVBQUUsU0FBQUEsQ0FBVTlULFFBQWtCLEVBQVc7TUFDaEUsTUFBTXhELEtBQUssR0FBR3dELFFBQVEsQ0FBQ29VLFVBQVUsQ0FBQyxDQUFDO01BQ25DLE1BQU1DLFVBQVUsR0FBR3JVLFFBQVEsQ0FBQ3lDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsT0FBcUU7TUFDdEgsTUFBTTRSLGdCQUFnQixHQUFHRCxVQUFVLENBQ2pDSixNQUFNLENBQUVNLENBQUMsSUFBS0EsQ0FBQyxDQUFDaE8sS0FBSyxJQUFJZ08sQ0FBQyxDQUFDcFEsWUFBWSxJQUFJb1EsQ0FBQyxDQUFDcFEsWUFBWSxLQUFLLGdCQUFnQixDQUFDLENBQy9FYixHQUFHLENBQUVpUixDQUFDLElBQUtBLENBQUMsQ0FBQ3BRLFlBQVksQ0FBQztNQUU1QixNQUFNcVEsZ0JBQWdCLEdBQUdoWSxLQUFLLENBQzVCTSxVQUFVLENBQUMsQ0FBQyxDQUNad0csR0FBRyxDQUFFekcsTUFBTSxJQUFLbUQsUUFBUSxDQUFDeUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMzRixJQUFJLENBQUV3WCxDQUFDLElBQUtBLENBQUMsQ0FBQ2hQLElBQUksS0FBSzFJLE1BQU0sQ0FBQ0ksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDOztNQUV4RztNQUNBLE1BQU13WCx1QkFBdUIsR0FBRyxJQUFJQyxHQUFHLENBQVMsQ0FBQztNQUNqRCxTQUFTQyxhQUFhQSxDQUFDM1gsR0FBMEIsRUFBUTtRQUN4RDtRQUNBLElBQUlBLEdBQUcsQ0FBQ21ILFlBQVksSUFBSW5ILEdBQUcsQ0FBQ04sYUFBYSxLQUFLd0YsU0FBUyxFQUFFO1VBQ3hEdVMsdUJBQXVCLENBQUNHLEdBQUcsQ0FBQzVYLEdBQUcsQ0FBQ21ILFlBQVksQ0FBQztRQUM5Qzs7UUFFQTtRQUNBbkgsR0FBRyxDQUFDMkosU0FBUyxFQUFFa08sb0JBQW9CLEVBQUV6VyxPQUFPLENBQUUwVyxvQkFBb0IsSUFBSztVQUN0RSxNQUFNQyxnQkFBZ0IsR0FBR1YsVUFBVSxDQUFDdFgsSUFBSSxDQUFFd1gsQ0FBQyxJQUFLQSxDQUFDLENBQUNoUCxJQUFJLEtBQUt1UCxvQkFBb0IsQ0FBQztVQUNoRixJQUFJQyxnQkFBZ0IsRUFBRTVRLFlBQVksRUFBRTtZQUNuQ3NRLHVCQUF1QixDQUFDRyxHQUFHLENBQUNHLGdCQUFnQixDQUFDNVEsWUFBWSxDQUFDO1VBQzNEO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7TUFDQXFRLGdCQUFnQixDQUFDcFcsT0FBTyxDQUFFdkIsTUFBTSxJQUFLO1FBQ3BDLElBQUksQ0FBQ0EsTUFBTSxFQUFFO1VBQ1o7UUFDRDtRQUNBO1FBQ0E4WCxhQUFhLENBQUM5WCxNQUErQixDQUFDOztRQUU5QztRQUNBQSxNQUFNLENBQUNILGFBQWEsRUFBRTBCLE9BQU8sQ0FBRTRXLGlCQUFpQixJQUFLO1VBQ3BELE1BQU1DLGFBQWEsR0FBR1osVUFBVSxDQUFDdFgsSUFBSSxDQUFFd1gsQ0FBQyxJQUFLQSxDQUFDLENBQUNoUCxJQUFJLEtBQUt5UCxpQkFBaUIsQ0FBQztVQUMxRSxJQUFJQyxhQUFhLEVBQUU7WUFDbEJOLGFBQWEsQ0FBQ00sYUFBc0MsQ0FBQztVQUN0RDtRQUNELENBQUMsQ0FBQztNQUNILENBQUMsQ0FBQztNQUVGLE9BQU9YLGdCQUFnQixDQUFDWSxLQUFLLENBQUVDLFFBQVEsSUFBS0EsUUFBUSxJQUFJVix1QkFBdUIsQ0FBQ1csR0FBRyxDQUFDRCxRQUFRLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDRSxjQUFjLEVBQUUsU0FBQUEsQ0FBVUMsT0FBeUIsRUFBc0I7TUFDeEUsTUFBTUMsV0FBVyxHQUFHRCxPQUFPLENBQUNFLGNBQWMsR0FBRyxDQUF3QztNQUNyRixJQUFJRCxXQUFXLEVBQUVqSixNQUFNLEtBQUtwSyxTQUFTLEVBQUU7UUFDdEM7UUFDQSxPQUFPcVQsV0FBVyxDQUFDakosTUFBTTtNQUMxQjtNQUNBO01BQ0EsT0FBT2dKLE9BQU8sQ0FBQ0csNkJBQTZCLENBQUMsQ0FBQyxDQUFDQyxPQUFPO0lBQ3ZELENBQUM7SUFDREMsYUFBYSxFQUFFLFNBQUFBLENBQVVuWixLQUFlLEVBQUU2TyxXQUFrQyxFQUFFaUssT0FBMEIsRUFBUTtNQUMvRyxNQUFNdFYsUUFBUSxHQUFHeEQsS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQWE7TUFDOUMsTUFBTXdQLFlBQVksR0FBR3pQLFFBQVEsRUFBRU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDO01BQzlELElBQUksQ0FBQ21QLFlBQVksRUFBRTtRQUNsQixJQUFJbUcsaUJBQWlCLEdBQUcsS0FBSztRQUM3QixNQUFNQyxJQUFJLEdBQUd4TSxXQUFXLENBQUNxRCxhQUFhLENBQUNsUSxLQUFLLENBQUM7UUFDN0MsTUFBTThULHNCQUFzQixHQUFHOVQsS0FBSyxDQUFDa00saUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ2xFLE1BQU1vTix1QkFBdUIsR0FBRyw0QkFBNEI7UUFDNUQsTUFBTUMsbUJBQW1CLEdBQUd6RixzQkFBc0IsRUFBRWhRLFdBQVcsQ0FBQ3dWLHVCQUF1QixDQUFZO1FBQ25HLE1BQU1FLFVBQVUsR0FBR3ZJLElBQUksQ0FBQ3dJLFNBQVMsQ0FBQzVLLFdBQVcsQ0FBQ2tHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFM0QsSUFBSStELE9BQU8sRUFBRTtVQUNaO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7VUFDSSxNQUFNWSxRQUFRLEdBQUdMLElBQUksRUFBRWxKLFdBQVcsQ0FBQyxDQUErQjtVQUNsRSxNQUFNd0osVUFBVSxHQUFHYixPQUFPLENBQUN2RCxVQUFVLENBQUMsYUFBYSxDQUFDO1VBQ3BELE1BQU1xRSxlQUFlLEdBQUc5RixzQkFBc0IsRUFBRWhRLFdBQVcsQ0FBQ3BFLGdCQUFnQixDQUFDLElBQUksSUFBSTtVQUVyRixNQUFNbWEsZ0JBQWdCLEdBQ3JCLENBQUVoTCxXQUFXLENBQUNrQixPQUFPLEtBQUssSUFBSSxJQUFJNEosVUFBVSxDQUFDNVUsTUFBTSxLQUFLLENBQUM7VUFBSztVQUM3RCtVLFNBQVMsQ0FBQ2pMLFdBQVcsQ0FBQ2tCLE9BQU8sRUFBRTRKLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUM5Q0gsVUFBVSxLQUFLSSxlQUFlLElBQzlCL0ssV0FBVyxDQUFDaEssSUFBSSxLQUFLaVUsT0FBTyxDQUFDMU0sT0FBTyxDQUFDLENBQUM7VUFBSTtVQUMxQyxJQUFJLENBQUN5TSxjQUFjLENBQUNDLE9BQU8sQ0FBQyxLQUFLakssV0FBVyxFQUFFcUgsVUFBVSxFQUFFZ0QsT0FBTztVQUNsRSxNQUFNYSxrQkFBa0IsR0FBRyxDQUFDLENBQUNMLFFBQVEsQ0FBQ00sS0FBSztVQUUzQ1osaUJBQWlCLEdBQ2hCUyxnQkFBZ0IsS0FDZi9GLHNCQUFzQixFQUFFaFEsV0FBVyxDQUFDdEUscUJBQXFCLENBQUM7VUFBSTtVQUM5RHNVLHNCQUFzQixFQUFFaFEsV0FBVyxDQUFDckUscUJBQXFCLENBQUM7VUFBSTtVQUM5RHNhLGtCQUFrQixDQUFDO1VBQUk7VUFDeEIsQ0FBQ1IsbUJBQW1CO1FBQ3RCO1FBQ0E7UUFDQSxJQUFJL1YsUUFBUSxDQUFDeUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDZ1UsZUFBZSxLQUFLLElBQUksRUFBRTtVQUMzRDtVQUNBamEsS0FBSyxDQUFDa2Esc0JBQXNCLENBQUMsQ0FBQzs7VUFFOUI7VUFDQSxJQUNDMVcsUUFBUSxDQUFDeUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDaVIsT0FBTyxDQUFDM04sSUFBSSxLQUFLLFdBQVcsSUFDMUQvRixRQUFRLENBQUN5QyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNpUixPQUFPLENBQUMzTixJQUFJLEtBQUssV0FBVyxFQUN6RDtZQUNEdkosS0FBSyxDQUFDbWEsa0JBQWtCLENBQUMsQ0FBQztVQUMzQjtRQUNEO1FBQ0F0YSxpQkFBaUIsQ0FBQ3NaLGFBQWEsQ0FBQy9GLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQ3BULEtBQUssRUFBRTZPLFdBQVcsRUFBRWlLLE9BQU8sQ0FBQyxDQUFDO1FBQzFFO1FBQ0E7UUFDQTtRQUNBdFYsUUFBUSxDQUFDNFcsbUJBQW1CLENBQUN2TCxXQUFXLENBQUM7UUFDekM7UUFDQXJMLFFBQVEsQ0FBQzZXLGNBQWMsQ0FBQyxDQUFDO1FBRXpCcmEsS0FBSyxDQUFDcVUsU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLElBQUkrRSxpQkFBaUIsSUFBSXBaLEtBQUssQ0FBQzRQLFNBQVMsQ0FBQyxDQUFDLElBQUlrSixPQUFPLEVBQUU7VUFDdERBLE9BQU8sQ0FDTHdCLGNBQWMsQ0FBQ3hCLE9BQU8sQ0FBQ3lCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDcENDLE9BQU8sQ0FBQyxNQUFNO1lBQ2QxRyxzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQ2dOLHVCQUF1QixFQUFFLEtBQUssQ0FBQztVQUNwRSxDQUFDLENBQUMsQ0FDRHBTLEtBQUssQ0FBQyxVQUFVcU0sTUFBTSxFQUFFO1lBQ3hCbk0sR0FBRyxDQUFDQyxLQUFLLENBQUMsa0NBQWtDLEVBQUVrTSxNQUFnQixDQUFDO1VBQ2hFLENBQUMsQ0FBQztVQUNITyxzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQ2dOLHVCQUF1QixFQUFFLElBQUksQ0FBQztRQUNuRTtRQUNBeEYsc0JBQXNCLEVBQUV4SCxXQUFXLENBQUM5TSxxQkFBcUIsRUFBRSxLQUFLLENBQUM7UUFDakVzVSxzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQzdNLHFCQUFxQixFQUFFLEtBQUssQ0FBQztRQUNqRXFVLHNCQUFzQixFQUFFeEgsV0FBVyxDQUFDNU0sZ0JBQWdCLEVBQUU4WixVQUFVLENBQUM7O1FBRWpFO1FBQ0EsSUFBSWhXLFFBQVEsQ0FBQ3lDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ2lSLE9BQU8sQ0FBQzNOLElBQUksS0FBSyxXQUFXLEVBQUU7VUFDL0R1SyxzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7UUFDNUQ7UUFFQSxNQUFNaUksY0FBYyxHQUFHL1EsUUFBUSxDQUFDaVgsWUFBWSxJQUFJLEVBQUU7UUFDbERsRyxjQUFjLENBQUMzUyxPQUFPLENBQUM4WSxJQUFBLElBQTJDO1VBQUEsSUFBMUM7WUFBRUMsT0FBTztZQUFFQyxRQUFRO1lBQUVDLFFBQVE7WUFBRWxhO1VBQUssQ0FBQyxHQUFBK1osSUFBQTtVQUM1RDFhLEtBQUssQ0FBQzBRLGFBQWEsQ0FBQyxDQUFDLEVBQUVvSyxXQUFXLENBQUNILE9BQU8sRUFBRWhhLElBQUksRUFBRWlhLFFBQVEsRUFBRUMsUUFBUSxDQUFDO1FBQ3RFLENBQUMsQ0FBQztNQUNIO01BQ0FyWCxRQUFRLEVBQUU4SSxXQUFXLENBQUMsaUJBQWlCLEVBQUUyRyxZQUFZLENBQUM7SUFDdkQsQ0FBQztJQUVEOEgsa0NBQWtDLEVBQUUsU0FBQUEsQ0FBVTNVLE1BQWEsRUFBeUI7TUFDbkYsTUFBTTVDLFFBQVEsR0FBRzRDLE1BQU0sQ0FBQzNDLFNBQVMsQ0FBQyxDQUFhO01BQy9DLE1BQU11WCxjQUFjLEdBQUd4WCxRQUFRLENBQUN5WCwyQkFBMkIsQ0FBQyxDQUFDO01BQzdELE1BQU1DLGNBQWMsR0FBRzlVLE1BQU0sQ0FBQzhGLGlCQUFpQixDQUFDLENBQUM7TUFDakQsSUFBSWlQLHNCQUFzQixHQUFHLEtBQUs7TUFDbEMsSUFDQ0QsY0FBYyxLQUFLeFYsU0FBUyxJQUM1QlUsTUFBTSxDQUFDOEYsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUVwSSxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxJQUNuRXNDLE1BQU0sQ0FBQ3ZGLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRWlELFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUMvRDtRQUNEcVgsc0JBQXNCLEdBQUcsSUFBSTtNQUM5QixDQUFDLE1BQU0sSUFDTEQsY0FBYyxFQUFpQ0UsVUFBVSxDQUFDLENBQUMsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJeE8sV0FBVyxDQUFDeU8sd0JBQXdCLEVBQ3RIO1FBQ0RILHNCQUFzQixHQUFHLElBQUk7TUFDOUI7TUFFQSxJQUFJQSxzQkFBc0IsRUFBRTtRQUMzQkgsY0FBYyxDQUFDOUUsVUFBVSxLQUFLLENBQUMsQ0FBQztRQUNoQzhFLGNBQWMsQ0FBQzlFLFVBQVUsQ0FBQ3FGLGVBQWUsR0FBRzFPLFdBQVcsQ0FBQ3lPLHdCQUF3QjtNQUNqRjs7TUFFQTtNQUNBO01BQ0EsSUFBSU4sY0FBYyxDQUFDOUUsVUFBVSxFQUFFc0YscUJBQXFCLEtBQUssSUFBSSxFQUFFO1FBQzlELE1BQU1DLGNBQWMsR0FBR2pWLFlBQVksQ0FBQ21DLGFBQWEsQ0FBU3ZDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUU7UUFDL0YsTUFBTXNWLGFBQWEsR0FBR3RWLE1BQU0sQ0FBQ3ZGLFFBQVEsQ0FBQyxVQUFVLENBQWM7UUFDOUQsTUFBTThhLGNBQWMsR0FBR0QsYUFBYSxFQUFFOVgsU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQytYLGNBQWMsQ0FBQ0YsY0FBYyxDQUFDLEVBQUU7VUFDcENFLGNBQWMsQ0FBQ0YsY0FBYyxDQUFDLEdBQUdyVixNQUFNLENBQUN5USxLQUFLLENBQUMsQ0FBQztVQUMvQzZFLGFBQWEsRUFBRXBQLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRXFQLGNBQWMsQ0FBQztRQUM5RCxDQUFDLE1BQU0sSUFBSUEsY0FBYyxDQUFDRixjQUFjLENBQUMsS0FBS3JWLE1BQU0sQ0FBQ3lRLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDN0QsT0FBT21FLGNBQWMsQ0FBQzlFLFVBQVUsQ0FBQ3NGLHFCQUFxQjtRQUN2RDtNQUNEO01BRUEsT0FBT1IsY0FBYztJQUN0QixDQUFDO0lBQ0Q5RywwQkFBMEIsRUFBRSxTQUFBQSxDQUFVOU4sTUFBYSxFQUFFNE0sWUFBbUMsRUFBRTtNQUN6RixNQUFNeEMscUJBQXFCLEdBQUdwSyxNQUFNLENBQUM4RixpQkFBaUIsQ0FBQyxVQUFVLENBQXFDO01BQ3RHdk0sTUFBTSxDQUFDQyxNQUFNLENBQUNvVCxZQUFZLEVBQUUsSUFBSSxDQUFDK0gsa0NBQWtDLENBQUMzVSxNQUFNLENBQUMsQ0FBQztNQUM1RTtBQUNGO0FBQ0E7QUFDQTtBQUNBO01BQ0UsSUFBSUEsTUFBTSxDQUFDc0ssYUFBYSxDQUFDLENBQUMsRUFBRTtRQUMzQnNDLFlBQVksQ0FBQzRJLFNBQVMsR0FBRyxLQUFLO01BQy9CO01BQ0E7TUFDQTtNQUNBO01BQ0EsSUFBSXBMLHFCQUFxQixFQUFFO1FBQzFCQSxxQkFBcUIsQ0FBQ2xFLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUM7TUFDakU7TUFFQSxJQUFJdVAsT0FBTztNQUNYLE1BQU1DLFdBQVcsR0FBRy9NLFVBQVUsQ0FBQ0MsZ0JBQWdCLENBQUM1SSxNQUFNLENBQUM7TUFDdkQ7TUFDQSxJQUFJMFYsV0FBVyxDQUFDL0wsT0FBTyxDQUFDaEwsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQzhXLE9BQU8sR0FBRyxJQUFJRSxNQUFNLENBQUM7VUFBRWhNLE9BQU8sRUFBRStMLFdBQVcsQ0FBQy9MLE9BQU87VUFBRWlNLEdBQUcsRUFBRTtRQUFLLENBQUMsQ0FBQztNQUNsRTtNQUNBLElBQUlGLFdBQVcsQ0FBQ3JQLFdBQVcsRUFBRTtRQUM1QnVHLFlBQVksQ0FBQ25PLElBQUksR0FBR2lYLFdBQVcsQ0FBQ3JQLFdBQVc7TUFDNUM7TUFFQSxNQUFNd1AsbUJBQW1CLEdBQUc3VixNQUFNLENBQUM4VixxQkFBcUIsQ0FBQyxDQUFDO01BQzFELElBQUlELG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQ0UsV0FBVyxDQUFDLENBQUMsRUFBRTtRQUM3RDtRQUNBLElBQUtuSixZQUFZLENBQUNqRCxPQUFPLENBQXlCaEwsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUM3RCxNQUFNcVgsa0JBQWtCLEdBQUlwSixZQUFZLENBQUNqRCxPQUFPLENBQXlCMEgsTUFBTSxDQUFFQSxNQUFNLElBQUtBLE1BQU0sS0FBS3NFLE1BQU0sQ0FBQ00sSUFBSSxDQUFDO1VBQ25IUixPQUFPLEdBQUcsSUFBSUUsTUFBTSxDQUFDO1lBQ3BCaE0sT0FBTyxFQUFFcU0sa0JBQWtCLENBQUN6VyxNQUFNLENBQUNtVyxXQUFXLENBQUMvTCxPQUFPLENBQUM7WUFDdkRpTSxHQUFHLEVBQUU7VUFDTixDQUFDLENBQUM7VUFDRixJQUFJLENBQUNNLGdDQUFnQyxDQUFDdEosWUFBWSxFQUFFOEksV0FBVyxFQUFFRCxPQUFPLENBQUM7UUFDMUU7TUFDRCxDQUFDLE1BQU07UUFDTixJQUFJLENBQUNTLGdDQUFnQyxDQUFDdEosWUFBWSxFQUFFOEksV0FBVyxFQUFFRCxPQUFPLENBQUM7TUFDMUU7TUFFQSxJQUFJLENBQUNVLHlCQUF5QixDQUFDblcsTUFBTSxFQUFFNE0sWUFBWSxDQUFDO0lBQ3JELENBQUM7SUFFRHNKLGdDQUFnQyxFQUFFLFNBQUFBLENBQVV6TixXQUFrQyxFQUFFMk4sVUFBK0IsRUFBRS9FLE1BQWUsRUFBRTtNQUNqSTVJLFdBQVcsQ0FBQ2tCLE9BQU8sR0FBRzBILE1BQU07TUFDNUI1SSxXQUFXLENBQUNxSCxVQUFVLEtBQUssQ0FBQyxDQUFDO01BQzdCLElBQUlzRyxVQUFVLENBQUMxTSxNQUFNLEVBQUU7UUFDdEJqQixXQUFXLENBQUNxSCxVQUFVLENBQUNnRCxPQUFPLEdBQUdyTSxXQUFXLENBQUM0UCxtQkFBbUIsQ0FBQ0QsVUFBVSxDQUFDMU0sTUFBTSxDQUFDO01BQ3BGLENBQUMsTUFBTTtRQUNOakIsV0FBVyxDQUFDcUgsVUFBVSxDQUFDZ0QsT0FBTyxHQUFHeFQsU0FBUztNQUMzQztJQUNELENBQUM7SUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0M2Vyx5QkFBeUIsRUFBRSxTQUFBQSxDQUFVdmMsS0FBWSxFQUFFNk8sV0FBa0MsRUFBRTtNQUN0RixNQUFNNk4sT0FBTyxHQUFHMWMsS0FBSyxDQUFDMmMsVUFBVSxDQUFDLENBQXlDO01BRTFFLElBQUlELE9BQU8sRUFBRUUsc0JBQXNCLEtBQUssSUFBSSxFQUFFO1FBQzdDLE1BQU1DLGNBQWMsR0FBRyxJQUFJZCxNQUFNLENBQUM7VUFBRWxYLElBQUksRUFBRSxnQkFBZ0I7VUFBRWlZLFFBQVEsRUFBRSxJQUFJO1VBQUVDLE1BQU0sRUFBRTtRQUFLLENBQUMsQ0FBQztRQUMzRixJQUFJbE8sV0FBVyxDQUFDa0IsT0FBTyxFQUFFO1VBQ3hCbEIsV0FBVyxDQUFDa0IsT0FBTyxHQUFHLElBQUlnTSxNQUFNLENBQUM7WUFBRWhNLE9BQU8sRUFBRSxDQUFDOE0sY0FBYyxFQUFFaE8sV0FBVyxDQUFDa0IsT0FBTyxDQUFDO1lBQUVpTSxHQUFHLEVBQUU7VUFBSyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxNQUFNO1VBQ05uTixXQUFXLENBQUNrQixPQUFPLEdBQUc4TSxjQUFjO1FBQ3JDO01BQ0Q7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRywyQkFBMkIsRUFBRSxlQUFBQSxDQUM1QnpWLFVBQWlELEVBQ2pEOFIsSUFBVSxFQUNWNEQsUUFBa0QsRUFDbERDLE9BQWUsRUFDaUM7TUFDaEQsTUFBTUMsY0FBYyxHQUFHLElBQUlDLFNBQVMsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FDckRDLEdBQUcsQ0FBQ0MsV0FBVyxDQUFDLE1BQU07UUFDckIsT0FBT0MsYUFBYSxDQUFDTixPQUFPLEVBQUUzVixVQUFVLEVBQUUsS0FBSyxDQUFDO01BQ2pELENBQUMsQ0FBQyxFQUNGLFVBQ0QsQ0FBQztNQUNELElBQUksQ0FBQzRWLGNBQWMsRUFBRTtRQUNwQixPQUFPblEsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCO01BQ0EsTUFBTXdRLE9BQU8sR0FBR04sY0FBYyxDQUFDTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFFOUQsSUFBSW5XLFVBQVUsQ0FBQ21DLFFBQVEsRUFBRTtRQUN4QixJQUFJK1QsT0FBTyxFQUFFO1VBQ1osTUFBTUUsU0FBUyxHQUFHLElBQUlQLFNBQVMsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQzlWLFVBQVUsQ0FBQ21DLFFBQVEsRUFBWSxVQUFVLENBQUM7VUFDNUYsSUFBSWlVLFNBQVMsQ0FBQ0MsaUJBQWlCLElBQUlELFNBQVMsQ0FBQ0MsaUJBQWlCLENBQUNDLFFBQVEsS0FBSyxNQUFNLEVBQUU7WUFDbkZKLE9BQU8sQ0FBQ0ssV0FBVyxDQUFDSCxTQUFTLENBQUNDLGlCQUFpQixDQUFDO1VBQ2pELENBQUMsTUFBTTtZQUNOSCxPQUFPLENBQUNNLE1BQU0sQ0FBQyxDQUFDO1VBQ2pCO1FBQ0Q7TUFDRCxDQUFDLE1BQU07UUFDTjNXLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLDZEQUE2REUsVUFBVSxDQUFDOEQsTUFBTSxFQUFFLENBQUM7UUFDM0YsT0FBTzJCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztNQUM3QjtNQUNBLE1BQU0rUSxTQUFTLEdBQUcsTUFBTUMsZUFBZSxDQUFDQyxPQUFPLENBQzlDZixjQUFjLENBQUNTLGlCQUFpQixFQUNoQztRQUFFTyxNQUFNLEVBQUUsQ0FBQztNQUFFLENBQUMsRUFDYjlFLElBQUksQ0FBQytFLGFBQWEsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUMsQ0FBdUNDLHNCQUFzQixDQUFDLENBQ3hHLENBQUM7TUFDRCxJQUFJckIsUUFBUSxFQUFFc0IsT0FBTyxLQUFLLGVBQWUsRUFBRTtRQUMxQyxPQUFPUCxTQUFTLENBQUNKLGlCQUFpQjtNQUNuQztNQUNBLE9BQU9ZLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDO1FBQ3BCbFYsSUFBSSxFQUFFLEtBQUs7UUFDWG1WLFVBQVUsRUFBRVYsU0FBUztRQUNyQnBNLFVBQVUsRUFBRXlILElBQUksQ0FBQytFLGFBQWEsQ0FBQztNQUNoQyxDQUFDLENBQUM7SUFDSCxDQUFDO0lBRUQ1VCxnQkFBZ0IsRUFBRSxTQUFBQSxDQUFVMUUsUUFBaUIsRUFBRTtNQUM5QyxRQUFRQSxRQUFRO1FBQ2YsS0FBSyxVQUFVO1VBQ2QsT0FBTzZZLFdBQVcsQ0FBQ0Msc0JBQXNCLENBQUMsQ0FBQztRQUM1QyxLQUFLLG9CQUFvQjtVQUN4QixPQUFPRCxXQUFXLENBQUNFLDhCQUE4QixDQUFDLENBQUM7UUFDcEQsS0FBSyxlQUFlO1VBQ25CLE9BQU9GLFdBQVcsQ0FBQ0csc0JBQXNCLENBQUMsQ0FBQztRQUM1QztVQUNDLE9BQU9wWixTQUFTO01BQ2xCO0lBQ0QsQ0FBQztJQUVEcVosb0JBQW9CLEVBQUUsU0FBQUEsQ0FBVW5lLFVBQTBCLEVBQUVvZSxhQUFxQixFQUFFQyxZQUFxQixFQUFZO01BQ25ILElBQUlDLE9BQWlCLEdBQUcsRUFBRTtRQUN6QkMsY0FBYyxHQUFHdmUsVUFBVSxDQUFDZ0QsU0FBUyxDQUFDb2IsYUFBYSxDQUFDO01BRXJELElBQUlHLGNBQWMsQ0FBQ0MsS0FBSyxJQUFJRCxjQUFjLENBQUNDLEtBQUssS0FBSyxVQUFVLEVBQUU7UUFDaEVELGNBQWMsR0FBR3ZlLFVBQVUsQ0FBQ2dELFNBQVMsQ0FBQyxHQUFHb2IsYUFBYSw4Q0FBOEMsQ0FBQztRQUNyR0EsYUFBYSxHQUFHLEdBQUdBLGFBQWEsOENBQThDO01BQy9FO01BQ0EsUUFBUUcsY0FBYyxDQUFDcGQsS0FBSztRQUMzQixLQUFLLG1EQUFtRDtVQUN2RCxJQUFJbkIsVUFBVSxDQUFDZ0QsU0FBUyxDQUFDLEdBQUdvYixhQUFhLHlCQUF5QixDQUFDLENBQUNoYSxRQUFRLENBQUMsdUNBQXVDLENBQUMsRUFBRTtZQUN0SHBFLFVBQVUsQ0FBQ2dELFNBQVMsQ0FBQyxHQUFHb2IsYUFBYSw4QkFBOEIsQ0FBQyxDQUFDcGQsT0FBTyxDQUFDLENBQUN5ZCxNQUFlLEVBQUVDLE1BQWMsS0FBSztjQUNqSEosT0FBTyxHQUFHQSxPQUFPLENBQUN2WixNQUFNLENBQ3ZCLElBQUksQ0FBQ29aLG9CQUFvQixDQUFDbmUsVUFBVSxFQUFFLEdBQUdvZSxhQUFhLGdDQUFnQ00sTUFBTSxFQUFFLENBQy9GLENBQUM7WUFDRixDQUFDLENBQUM7VUFDSDtVQUNBO1FBQ0QsS0FBSyx3REFBd0Q7UUFDN0QsS0FBSyw2Q0FBNkM7UUFDbEQsS0FBSyxzQ0FBc0M7UUFDM0MsS0FBSywrREFBK0Q7UUFDcEUsS0FBSyxnREFBZ0Q7VUFDcERKLE9BQU8sQ0FBQ3pjLElBQUksQ0FBQzdCLFVBQVUsQ0FBQ2dELFNBQVMsQ0FBQyxHQUFHb2IsYUFBYSxjQUFjLENBQUMsQ0FBQztVQUNsRTtRQUNELEtBQUssK0NBQStDO1FBQ3BELEtBQUssOERBQThEO1VBQ2xFO1FBQ0Q7VUFDQztVQUNBO1VBQ0EsSUFBSUMsWUFBWSxJQUFJRCxhQUFhLENBQUM1ZSxPQUFPLENBQUM2ZSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOURDLE9BQU8sQ0FBQ3pjLElBQUksQ0FBQ3VjLGFBQWEsQ0FBQzVQLFNBQVMsQ0FBQzZQLFlBQVksQ0FBQ2xhLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RDtVQUNEO1VBQ0FtYSxPQUFPLENBQUN6YyxJQUFJLENBQUMrRixZQUFZLENBQUMrVyxpQkFBaUIsQ0FBQ1AsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ2pFO01BQ0Y7TUFDQSxPQUFPRSxPQUFPO0lBQ2YsQ0FBQztJQUNETSxpQ0FBaUMsRUFBRSxTQUFBQSxDQUFVcFosTUFBYSxFQUFFcVosUUFBdUIsRUFBRS9ULFdBQXlCLEVBQUU7TUFDL0csTUFBTU8sdUJBQXVCLEdBQUc3RixNQUFNLENBQUM4RixpQkFBaUIsQ0FBQyxVQUFVLENBQUM7TUFDcEUsSUFBSSxDQUFDRCx1QkFBdUIsRUFBRTtRQUM3QjtNQUNEO01BQ0EsTUFBTUUsYUFBYSxHQUFHRix1QkFBdUIsQ0FBQ0csT0FBTyxDQUFDLENBQUM7TUFDdkQsTUFBTXNULDBCQUEwQixHQUFHRCxRQUFRLENBQUNoSSxNQUFNLENBQUVrSSxPQUFvQixJQUFLO1FBQzVFLE9BQU8sSUFBSSxDQUFDbFUscUNBQXFDLENBQUNrVSxPQUFPLENBQUM7TUFDM0QsQ0FBQyxDQUFDO01BQ0YsTUFBTTNULGVBQWUsR0FBRzVGLE1BQU0sQ0FBQzlGLFVBQVUsQ0FBQyxDQUFDO01BQzNDLElBQUlzZixxQkFBcUIsRUFBRUMsa0JBQWtCLEVBQUVDLDRCQUE0QixFQUFFQyw2QkFBNkI7TUFDMUcsS0FBSyxNQUFNQyxDQUFDLElBQUloVSxlQUFlLEVBQUU7UUFDaEM2VCxrQkFBa0IsR0FBRzdULGVBQWUsQ0FBQ2dVLENBQUMsQ0FBQyxDQUFDdmYsY0FBYyxDQUFDLENBQUM7UUFDeEQsS0FBSyxNQUFNd2YsQ0FBQyxJQUFJUCwwQkFBMEIsRUFBRTtVQUMzQ0ssNkJBQTZCLEdBQUdMLDBCQUEwQixDQUFDTyxDQUFDLENBQUMsQ0FBQ2xYLElBQUk7VUFDbEUsSUFBSThXLGtCQUFrQixLQUFLRSw2QkFBNkIsRUFBRTtZQUN6REQsNEJBQTRCLEdBQUcsSUFBSTtZQUNuQztVQUNEO1VBQ0EsSUFBSXBVLFdBQVcsSUFBSUEsV0FBVyxDQUFDM0MsSUFBSSxLQUFLZ1gsNkJBQTZCLEVBQUU7WUFDdEVILHFCQUFxQixHQUFHbFUsV0FBVyxDQUFDM0MsSUFBSTtVQUN6QztRQUNEO1FBQ0EsSUFBSStXLDRCQUE0QixFQUFFO1VBQ2pDN1QsdUJBQXVCLENBQUNLLFdBQVcsQ0FBQ0gsYUFBYSxHQUFHNU0sOEJBQThCLEVBQUVzZ0Isa0JBQWtCLENBQUM7VUFDdkc7UUFDRDtNQUNEO01BQ0EsSUFBSSxDQUFDQyw0QkFBNEIsSUFBSUYscUJBQXFCLEVBQUU7UUFDM0QzVCx1QkFBdUIsQ0FBQ0ssV0FBVyxDQUFDSCxhQUFhLEdBQUc1TSw4QkFBOEIsRUFBRXFnQixxQkFBcUIsQ0FBQztNQUMzRztJQUNELENBQUM7SUFDRE0sVUFBVSxFQUFFLGVBQUFBLENBQ1g5WixNQUE0QixFQUM1QitaLGlCQUF1QyxFQUN2Q0MsWUFBd0UsRUFDckQ7TUFDbkIsSUFBSUMsWUFBWSxHQUFHLElBQUk7TUFDdkIsSUFBSSxDQUFDRixpQkFBaUIsRUFBRTtRQUN2QjtRQUNBO1FBQ0EsT0FBT25ULE9BQU8sQ0FBQ0MsT0FBTyxDQUFDb1QsWUFBWSxDQUFDO01BQ3JDO01BQ0EsTUFBTUMsU0FBUyxHQUFHRixZQUFZLENBQUNuRCxRQUFRO01BQ3ZDLE1BQU1zRCxhQUFhLEdBQUcsTUFBTUQsU0FBUyxDQUFDeGMsV0FBVyxDQUFTcWMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDO01BQzVGLElBQUlJLGFBQWEsSUFBSUEsYUFBYSxDQUFDdmIsUUFBUSxJQUFJdWIsYUFBYSxDQUFDdmIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ25Gc2IsU0FBUyxDQUFDRSxpQkFBaUIsQ0FBQ3BhLE1BQU0sRUFBRSxZQUFZLEVBQUUrWixpQkFBaUIsQ0FBQztRQUNwRUUsWUFBWSxHQUFHLEtBQUs7TUFDckI7TUFDQSxJQUFLamEsTUFBTSxDQUFnQjJILEdBQUcsSUFBSXVTLFNBQVMsQ0FBQy9CLE9BQU8sS0FBSyxlQUFlLEVBQUU7UUFDeEUsSUFBSSxDQUFDa0Msd0JBQXdCLENBQUNILFNBQVMsRUFBRWxhLE1BQU0sRUFBRSxJQUFJLENBQUNKLGFBQWEsQ0FBQ0ksTUFBZSxDQUFDLENBQUM7TUFDdEY7TUFDQSxPQUFPNEcsT0FBTyxDQUFDQyxPQUFPLENBQUNvVCxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUNESyxhQUFhLEVBQUUsU0FBQUEsQ0FBVU4sWUFBNEMsRUFBRTtNQUN0RSxPQUFPQSxZQUFZLENBQUNwWSxZQUFZLElBQUlvWSxZQUFZLENBQUNwWSxZQUFZLENBQUNuSCxRQUFRLENBQUMsQ0FBQyxDQUFDQyxZQUFZLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0QyZix3QkFBd0IsRUFBRSxTQUFBQSxDQUN6QkgsU0FBMkIsRUFDM0JsYSxNQUE0QixFQUM1QnFaLFFBQXVCLEVBQ3ZCL1QsV0FBeUIsRUFDeEI7TUFDRCxJQUFJNFUsU0FBUyxDQUFDL0IsT0FBTyxLQUFLLGVBQWUsRUFBRTtRQUMxQyxJQUFJLENBQUNpQixpQ0FBaUMsQ0FBQ3BaLE1BQU0sRUFBV3FaLFFBQVEsRUFBRS9ULFdBQVcsQ0FBQztNQUMvRTtJQUNELENBQUM7SUFDRGlWLFdBQVcsRUFBRSxTQUFBQSxDQUFVQyxpQkFBeUIsRUFBRTtNQUNqRCxPQUFPQSxpQkFBaUIsSUFBSWxiLFNBQVM7SUFDdEMsQ0FBQztJQUNEbWIsa0JBQWtCLEVBQUUsZUFBQUEsQ0FDbkJDLFVBQTJELEVBQzNEUixTQUEyQixFQUMzQmxhLE1BQTRCLEVBQ1o7TUFDaEIsSUFBSTBhLFVBQVUsRUFBRTtRQUNmLE9BQU9SLFNBQVMsQ0FBQ0UsaUJBQWlCLENBQUNwYSxNQUFNLEVBQUUsWUFBWSxFQUFFMGEsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUN4RTtNQUNBO0lBQ0QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLE9BQU8sRUFBRSxlQUFBQSxDQUNSL2dCLEtBQTJCLEVBQzNCZ2hCLGdCQUF3QixFQUN4QlosWUFBdUYsRUFDdEY7TUFDRCxNQUFNeGYsVUFBVSxHQUFHLElBQUksQ0FBQzhmLGFBQWEsQ0FBQ04sWUFBWSxDQUFDO1FBQ2xERSxTQUFTLEdBQUdGLFlBQVksQ0FBQ25ELFFBQVE7UUFDakNnRSxRQUFRLEdBQUdYLFNBQVMsQ0FBQ3pKLEtBQUssQ0FBQzdXLEtBQUssQ0FBQztRQUNqQ3lmLFFBQVEsR0FBSXpmLEtBQUssQ0FBZ0IrTixHQUFHLEdBQUcsSUFBSSxDQUFDL0gsYUFBYSxDQUFDaEcsS0FBYyxDQUFDLEdBQUcsSUFBSTtNQUNqRixJQUFJLENBQUN5ZixRQUFRLEVBQUU7UUFDZDtRQUNBLE9BQU96UyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFDN0I7TUFFQSxNQUFNMUYsVUFBVSxHQUFHa1ksUUFBUSxDQUFDbGYsSUFBSSxDQUFDLFVBQVVvZixPQUFPLEVBQUU7UUFDbkQsT0FBT0EsT0FBTyxDQUFDNVcsSUFBSSxLQUFLaVksZ0JBQWdCO01BQ3pDLENBQUMsQ0FBQztNQUNGLElBQUksQ0FBQ3paLFVBQVUsRUFBRTtRQUNoQkgsR0FBRyxDQUFDQyxLQUFLLENBQUMsR0FBRzJaLGdCQUFnQixnQ0FBZ0MsQ0FBQztRQUM5RCxPQUFPaFUsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCO01BQ0EsSUFBSTFGLFVBQVUsQ0FBQzZCLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDekNoQyxHQUFHLENBQUM4WixPQUFPLENBQUMsY0FBY0YsZ0JBQWdCLGdDQUFnQyxDQUFDO1FBQzNFLE9BQU9oVSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFDN0I7TUFDQSxNQUFNNkcsc0JBQXNCLEdBQUk5VCxLQUFLLENBQVdrTSxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7TUFDN0U0SCxzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQzdNLHFCQUFxQixFQUFFLElBQUksQ0FBQztNQUNoRSxJQUFJLENBQUNnaEIsd0JBQXdCLENBQUNILFNBQVMsRUFBRXRnQixLQUFLLEVBQUV5ZixRQUFRLEVBQUVsWSxVQUFVLENBQUM7TUFDckUsTUFBTTRaLEtBQUssR0FBRyxNQUFNM2EsWUFBWSxDQUFDNGEseUJBQXlCLENBQVNwaEIsS0FBSyxFQUFFLFVBQVUsRUFBRXNnQixTQUFTLENBQUM7TUFDaEcsTUFBTWUsYUFBc0IsR0FBR3pnQixVQUFVLENBQUN1SCxvQkFBb0IsQ0FBQ2daLEtBQU0sQ0FBRTtNQUN2RTtNQUNBO01BQ0EsTUFBTTlILElBQUksR0FDVCtHLFlBQVksQ0FBQy9HLElBQUksSUFDakJ4TSxXQUFXLENBQUNxRCxhQUFhLENBQUNsUSxLQUFtQixDQUFDLEtBQzdDb2dCLFlBQVksQ0FBQ3BZLFlBQVksR0FBRzZFLFdBQVcsQ0FBQ3lVLGtCQUFrQixDQUFDbEIsWUFBWSxDQUFDcFksWUFBWSxDQUFDLEdBQUd0QyxTQUFTLENBQUM7TUFFcEcsSUFBSTZCLFVBQVUsQ0FBQ2dDLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDbENuQyxHQUFHLENBQUNDLEtBQUssQ0FBQyw2RkFBNkYsQ0FBQztRQUN4RyxNQUFNLElBQUkrRixLQUFLLENBQUMsNkZBQTZGLENBQUM7TUFDL0c7TUFFQSxJQUFJN0YsVUFBVSxDQUFDZ0MsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQ3lULDJCQUEyQixDQUFDelYsVUFBVSxFQUEyQzhSLElBQUksRUFBRWlILFNBQVMsRUFBRVcsUUFBUSxDQUFDO01BQ3hIO01BRUEsSUFBSTFaLFVBQVUsQ0FBQ2dDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDbkMsTUFBTTBRLGVBQWUsR0FBS2phLEtBQUssQ0FBY3lELFNBQVMsQ0FBQyxDQUFDLENBQWN3QyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNnVSxlQUFlO1FBQzFHLE9BQU9zSCxpQkFBaUIsQ0FBQ04sUUFBUSxFQUFFMVosVUFBVSxFQUF5QjhaLGFBQWEsRUFBRXBILGVBQWUsQ0FBQztNQUN0Rzs7TUFFQTtNQUNBLElBQUksQ0FBQ3JaLFVBQVUsRUFBRTtRQUNoQixPQUFPb00sT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCO01BRUEsTUFBTWhOLFlBQVksR0FBS0QsS0FBSyxDQUFjeUQsU0FBUyxDQUFDLENBQUMsQ0FBYytkLCtCQUErQixDQUFDLENBQUMsQ0FBQ2poQixJQUFJLENBQUMsVUFDekdraEIsUUFBZ0MsRUFDL0I7UUFDRCxPQUFPQSxRQUFRLENBQUMxWSxJQUFJLEtBQUtpWSxnQkFBZ0I7TUFDMUMsQ0FBQyxDQUFDO01BRUYsTUFBTVUsZ0JBQXlCLEdBQUc5Z0IsVUFBVSxDQUFDdUgsb0JBQW9CLENBQUNsSSxZQUFZLENBQUVpQixjQUFjLENBQUU7TUFFaEcsTUFBTXlnQixrQkFBa0IsR0FBRyxNQUFBQSxDQUMxQkMsZUFBd0IsRUFDeEJDLEtBQWEsS0FDaUQ7UUFDOUQsSUFBSUMsWUFBaUM7UUFDckMsSUFBSUMsb0JBQXdDO1FBQzVDLElBQUlDLHVCQUEyQztRQUUvQyxPQUFPaFYsT0FBTyxDQUFDaVYsR0FBRyxDQUFDLENBQ2xCemIsWUFBWSxDQUFDNGEseUJBQXlCLENBQW1CcGhCLEtBQUssRUFBRSw0QkFBNEIsRUFBRXNnQixTQUFTLENBQUMsRUFDeEc5WixZQUFZLENBQUM0YSx5QkFBeUIsQ0FBU3BoQixLQUFLLEVBQUUsV0FBVyxFQUFFc2dCLFNBQVMsQ0FBQyxFQUM3RTlaLFlBQVksQ0FBQzRhLHlCQUF5QixDQUFTcGhCLEtBQUssRUFBRSxjQUFjLEVBQUVzZ0IsU0FBUyxDQUFDLENBQ2hGLENBQUMsQ0FBQzVaLElBQUksQ0FBQyxNQUFPd2IsV0FBNkMsSUFBSztVQUNoRUosWUFBWSxHQUFHSSxXQUFXLENBQUMsQ0FBQyxDQUF3QjtVQUNwREgsb0JBQW9CLEdBQUdHLFdBQVcsQ0FBQyxDQUFDLENBQXVCO1VBQzNERix1QkFBdUIsR0FBR0UsV0FBVyxDQUFDLENBQUMsQ0FBdUI7VUFDOUQ7VUFDQTtVQUNBO1VBQ0E7VUFDQSxJQUFJSixZQUFZLEtBQUtwYyxTQUFTLElBQUksT0FBT29jLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDcEVBLFlBQVksR0FBR0EsWUFBWSxLQUFLLE1BQU07VUFDdkM7VUFFQSxNQUFNdGUsUUFBUSxHQUFJeEQsS0FBSyxDQUFXeUQsU0FBUyxDQUFDLENBQWE7VUFDekQsTUFBTTBlLEtBQUssR0FBRyxJQUFJQyxTQUFTLENBQUM7Y0FDMUJDLHFCQUFxQixFQUFFN2UsUUFBUSxDQUFDeUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDaVIsT0FBTyxDQUFDbUwscUJBQXFCO2NBQ2xGQyxRQUFRLEVBQUVSLFlBQVk7Y0FDdEJTLFNBQVMsRUFBRVIsb0JBQW9CO2NBQy9CUyxFQUFFLEVBQUV2QixRQUFRO2NBQ1p3QixzQkFBc0IsRUFBRXpCLGdCQUFnQjtjQUN4Q3paLFVBQVUsRUFBRUEsVUFBVTtjQUN0Qm1iLFVBQVUsRUFBRTloQixVQUFVLENBQUN1SCxvQkFBb0IsQ0FBQ2daLEtBQU0sQ0FBQztjQUNuRHdCLFlBQVksRUFBRTtnQkFBRTVaLElBQUksRUFBRWlaO2NBQXdCLENBQUM7Y0FDL0NZLDBCQUEwQixFQUFFcGYsUUFBUSxDQUFDeUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDaVIsT0FBTyxDQUFDMEw7WUFDbkUsQ0FBQyxDQUFDO1lBQ0ZDLHFCQUFxQixHQUFHO2NBQ3ZCQyxlQUFlLEVBQUU7Z0JBQ2hCQyxTQUFTLEVBQUUxQixhQUFhO2dCQUN4QnFCLFVBQVUsRUFBRXJCLGFBQWE7Z0JBQ3pCMWQsU0FBUyxFQUFFK2QsZ0JBQWdCO2dCQUMzQnNCLElBQUksRUFBRWIsS0FBSyxDQUFDaGEsb0JBQW9CLENBQUMsR0FBRyxDQUFDO2dCQUNyQzlILE1BQU0sRUFBRThoQixLQUFLLENBQUNoYSxvQkFBb0IsQ0FBQyxhQUFhO2NBQ2pELENBQUM7Y0FDRGdXLE1BQU0sRUFBRTtnQkFDUDZFLElBQUksRUFBRWIsS0FBSztnQkFDWFksU0FBUyxFQUFFbmlCLFVBQVU7Z0JBQ3JCOGhCLFVBQVUsRUFBRTloQixVQUFVO2dCQUN0QitDLFNBQVMsRUFBRS9DLFVBQVU7Z0JBQ3JCOEMsU0FBUyxFQUFFOUMsVUFBVTtnQkFDckJQLE1BQU0sRUFBRThoQjtjQUNULENBQUM7Y0FDRG5hLFlBQVksRUFBRW9ZLFlBQVksQ0FBQ3BZO1lBQzVCLENBQUM7VUFFRixNQUFNaWIsZUFBZSxHQUFHamlCLDJCQUEyQixDQUNsREosVUFBVSxDQUFDdUgsb0JBQW9CLENBQUMzRSxRQUFRLENBQUMyTixlQUFlLENBQUM2RSxVQUFVLENBQUMwTSxVQUFVLENBQy9FLENBQUM7VUFDRCxNQUFNUSxlQUFlLEdBQUcsSUFBSUMseUJBQXlCLENBQ3BEM2YsUUFBUSxFQUNSO1lBQUU0ZixnQkFBZ0IsRUFBRUgsZUFBZSxDQUFDM2hCLFlBQWE7WUFBRW9DLFNBQVMsRUFBRTlDO1VBQVcsQ0FBQyxFQUMxRTRDLFFBQ0QsQ0FBQztVQUNELE1BQU02ZixpQkFBaUIsR0FBRyxJQUFJakcsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUN4REMsR0FBRyxDQUFDQyxXQUFXLENBQUMsTUFBTTtZQUNyQixPQUFRK0YsaUJBQWlCLENBQ3hCckMsUUFBUSxFQUNSemQsUUFBUSxFQUNSK0QsVUFBVSxFQUNWM0csVUFBVSxDQUFDdUgsb0JBQW9CLENBQUNnWixLQUFNLENBQUMsRUFDdkMrQixlQUNELENBQUMsSUFBSSxFQUFFO1VBQ1IsQ0FBQyxDQUFDLEVBQ0YsVUFDRCxDQUFDO1VBQ0QsT0FBTzFjLFlBQVksQ0FBQytjLHVCQUF1QixDQUMxQ0YsaUJBQWlCLENBQUN6RixpQkFBaUIsRUFDbkNpRixxQkFBcUIsRUFDckI7WUFBRXhKLElBQUksRUFBRXdJO1VBQU0sQ0FBQyxFQUNmdkIsU0FDRCxDQUFDLENBQUM5RixPQUFPLENBQUMsWUFBWTtZQUNyQjJILEtBQUssQ0FBQ3FCLE9BQU8sQ0FBQyxDQUFDO1VBQ2hCLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQztNQUNILENBQUM7TUFFRCxPQUFPN0Isa0JBQWtCLENBQUMxaEIsWUFBWSxFQUFFb1osSUFBSSxDQUFDO0lBQzlDLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtJQUNDb0ssaUJBQWlCLEVBQUUsU0FBQUEsQ0FBQSxFQUFZO01BQzlCLE9BQU85akIsTUFBTSxDQUFDQyxNQUFNLENBQ25CO1FBQ0NFLFVBQVUsRUFBRTtNQUNiLENBQUMsRUFDRDRqQixpQkFBaUIsRUFDakI7UUFDQzNDLE9BQU8sRUFBRSxlQUFBQSxDQUFnQjRDLGNBQXVCLEVBQUVDLGlCQUF5QixFQUFFO1VBQzVFLElBQUlBLGlCQUFpQixDQUFDeGpCLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQ7WUFDQXdqQixpQkFBaUIsR0FBR0EsaUJBQWlCLENBQUNDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1VBQ2hFO1VBQ0EsT0FBT0gsaUJBQWlCLENBQUMzQyxPQUFPLENBQUM0QyxjQUFjLEVBQWVDLGlCQUFpQixDQUFDO1FBQ2pGO01BQ0QsQ0FDRCxDQUFDO0lBQ0YsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0lBQ0NFLFVBQVUsRUFBRSxTQUFVQTtJQUFBLEdBQXNCO01BQzNDLE9BQU9wWixPQUFPO0lBQ2YsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NxWixpQkFBaUJBLENBQUMvakIsS0FBZSxFQUFFeVUsT0FBdUIsRUFBRWxSLFFBQWdCLEVBQUU7TUFDN0UsTUFBTXJELGFBQWEsR0FBSUYsS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQUMsQ0FBYytkLCtCQUErQixDQUFDLENBQUM7TUFDdkYsTUFBTXZoQixZQUFZLEdBQUdDLGFBQWEsRUFBRUssSUFBSSxDQUFFeWpCLEdBQUcsSUFBSztRQUNqRCxPQUFPQSxHQUFHLENBQUNqYixJQUFJLEtBQUt4RixRQUFRO01BQzdCLENBQUMsQ0FBQztNQUNGO0FBQ0Y7TUFDRSxNQUFNMGdCLFlBQVksR0FBR3ZaLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDMUssWUFBWSxFQUFFNkYsUUFBUSxDQUFDLENBQUNtRCxRQUFRO01BQzNFLE1BQU1pYixjQUFjLEdBQ25CRCxZQUFZLEtBQUssVUFBVSxJQUFJQSxZQUFZLEtBQUssTUFBTSxJQUFJQSxZQUFZLEtBQUssU0FBUyxJQUFJQSxZQUFZLEtBQUssU0FBUztNQUNuSCxJQUFJcGhCLEtBQUs7TUFDVCxJQUFJLENBQUM0UixPQUFPLEVBQUU7UUFDYjVSLEtBQUssR0FBR3FNLGdCQUFnQixDQUFDckMsV0FBVyxDQUFDcUQsYUFBYSxDQUFDbFEsS0FBSyxDQUFDLENBQUMsQ0FBQ3dQLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQztRQUN0RyxPQUFPTixnQkFBZ0IsQ0FBQ2xQLEtBQUssQ0FBQyxDQUFDd1AsT0FBTyxDQUFDLDRCQUE0QixFQUFFLENBQUN2UCxZQUFZLEVBQUV1RSxLQUFLLEVBQUUzQixLQUFLLENBQUMsQ0FBQztNQUNuRztNQUNBLElBQUk1QyxZQUFZLEVBQUU2RSxJQUFJLEVBQUU7UUFDdkIsUUFBUTdFLFlBQVksQ0FBQzZFLElBQUk7VUFDeEIsS0FBSyxhQUFhO1lBQ2pCakMsS0FBSyxHQUFHNUMsWUFBWSxDQUFDZ0wsbUJBQW1CLEdBQUd3SixPQUFPLENBQUMzUSxXQUFXLENBQUM3RCxZQUFZLENBQUNnTCxtQkFBbUIsRUFBRWlaLGNBQWMsQ0FBQyxHQUFHLElBQUk7WUFDdkg7VUFFRCxLQUFLLGtCQUFrQjtZQUN0QnJoQixLQUFLLEdBQUdzaEIsY0FBYyxDQUFDQyxrQkFBa0IsQ0FDeENua0IsWUFBWSxDQUFDZ0wsbUJBQW1CLEdBQUd3SixPQUFPLENBQUMzUSxXQUFXLENBQUM3RCxZQUFZLENBQUNnTCxtQkFBbUIsRUFBRWlaLGNBQWMsQ0FBQyxHQUFHLElBQUksRUFDL0dqa0IsWUFBWSxDQUFDK0ssYUFBYSxHQUFHeUosT0FBTyxDQUFDM1EsV0FBVyxDQUFDN0QsWUFBWSxDQUFDK0ssYUFBYSxFQUFFa1osY0FBYyxDQUFDLEdBQUcsSUFDaEcsQ0FBQztZQUNEO1VBRUQsS0FBSyxrQkFBa0I7WUFDdEJyaEIsS0FBSyxHQUFHc2hCLGNBQWMsQ0FBQ0Msa0JBQWtCLENBQ3hDbmtCLFlBQVksQ0FBQytLLGFBQWEsR0FBR3lKLE9BQU8sQ0FBQzNRLFdBQVcsQ0FBQzdELFlBQVksQ0FBQytLLGFBQWEsRUFBRWtaLGNBQWMsQ0FBQyxHQUFHLElBQUksRUFDbkdqa0IsWUFBWSxDQUFDZ0wsbUJBQW1CLEdBQUd3SixPQUFPLENBQUMzUSxXQUFXLENBQUM3RCxZQUFZLENBQUNnTCxtQkFBbUIsRUFBRWlaLGNBQWMsQ0FBQyxHQUFHLElBQzVHLENBQUM7WUFDRDtVQUNEO1lBQ0M7UUFDRjtNQUNELENBQUMsTUFBTTtRQUNOcmhCLEtBQUssR0FBRzVDLFlBQVksRUFBRTRFLElBQUksR0FBRzRQLE9BQU8sQ0FBQzNRLFdBQVcsQ0FBQzdELFlBQVksQ0FBQzRFLElBQUksRUFBRXFmLGNBQWMsQ0FBQyxHQUFHLElBQUk7TUFDM0Y7TUFDQSxJQUFJcmhCLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBSyxFQUFFLEVBQUU7UUFDbkNBLEtBQUssR0FBR3FNLGdCQUFnQixDQUFDckMsV0FBVyxDQUFDcUQsYUFBYSxDQUFDbFEsS0FBSyxDQUFDLENBQUMsQ0FBQ3dQLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQztNQUN2RztNQUNBLE9BQU9OLGdCQUFnQixDQUFDbFAsS0FBSyxDQUFDLENBQUN3UCxPQUFPLENBQUMsNEJBQTRCLEVBQUUsQ0FBQ3ZQLFlBQVksRUFBRXVFLEtBQUssRUFBRTNCLEtBQUssQ0FBQyxDQUFDO0lBQ25HO0VBQ0QsQ0FBQyxDQUFDO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
1380
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0Q29sdW1uc0ZvciIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9UYWJsZSIsIm9DYXBhYmlsaXRpZXMiLCJYTFNYIiwib01vZGVsIiwiRGVsZWdhdGVVdGlsIiwiZmV0Y2hNb2RlbCIsInRoZW4iLCJtb2RlbCIsImFTdXBwb3J0ZWRGb3JtYXRzIiwiYUxvd2VyRm9ybWF0cyIsIm1hcCIsImVsZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsIm9Bbm5vdGF0aW9uIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRmlsdGVyYWJsZSIsImlzUGF0aEZpbHRlcmFibGUiLCJyZWxhdGl2ZVBhdGgiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaXNQYXJ0T2ZDdXN0b21Db2x1bW4iLCJpc0NvbnN0YW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwiYXBwQ29tcG9uZW50Iiwic0Fic29sdXRlTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ29tcGxleFR5cGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldEN1c3RvbURhdGEiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidG9vbHRpcCIsIl9nZXRUeXBlQ29uZmlnIiwibmFtZSIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFubm90YXRpb24sIEZpZWxkR3JvdXBUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBKc0NvbnRyb2xUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvLCBkZWZhdWx0IGFzIFRhYmxlLCBWaXN1YWxTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIHY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5jb25zdCBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IgPSBcIi9zZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCI7XG5jb25zdCBTRUFSQ0hfSEFTX0JFRU5fRklSRUQgPSBcInNlYXJjaEZpcmVkXCI7XG5jb25zdCBDT0xVTU5fSEFTX0JFRU5fQURERUQgPSBcImNvbHVtbkFkZGVkXCI7XG5jb25zdCBQUkVWSU9VU19TT1JURVJTID0gXCJwcmV2aW91c1NvcnRlcnNcIjtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuVGFibGUuXG4gKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbiAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgYW5kIHRoZSBiZWhhdmlvciBhcmUgbm90IGZpbmFsaXplZC4gVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3RpdmUgdXNhZ2UuXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWxcbiAqIEBzaW5jZSAxLjY5LjBcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZUJhc2UsIHtcblx0YXBpVmVyc2lvbjogMixcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBGaWVsZEdyb3VwIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBGaWVsZEdyb3VwIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHByb3BlcnR5IGNvbnRhaW5lZCBpbiB0aGUgRmllbGRHcm91cCAoaW5jbHVkaW5nIHRoZSBsYWJlbCBpZiBzaG93RGF0YUZpZWxkc0xhYmVsIGlzIHRydWUpXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0cHJvcGVydHlJbmZvczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdXG5cdCkge1xuXHRcdGlmIChwcm9wZXJ0eUluZm8ua2V5LmluZGV4T2YoXCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uOjpGaWVsZEdyb3VwOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRhYmxlLmdldENvbHVtbnMoKS5maW5kKChjb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbC5nZXRQcm9wZXJ0eUtleSgpID09PSBwcm9wZXJ0eUluZm8ua2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsID0gY29sdW1uID8gY29sdW1uLmRhdGEoXCJzaG93RGF0YUZpZWxkc0xhYmVsXCIpID09PSBcInRydWVcIiA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChwcm9wZXJ0eUluZm8uYW5ub3RhdGlvblBhdGgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLmNvbnZlcnRlZFR5cGVzO1xuXHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjtcblx0XHRcdGNvbnN0IG9GaWVsZEdyb3VwID0gb0RhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdGNvbnN0IGFGaWVsZFdpZHRoOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0b0ZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChvRGF0YTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRsZXQgb0RhdGFGaWVsZFdpZHRoOiB7IGxhYmVsV2lkdGg6IG51bWJlcjsgcHJvcGVydHlXaWR0aDogbnVtYmVyIH07XG5cdFx0XHRcdHN3aXRjaCAob0RhdGEuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBUYWJsZUNvbHVtbltdIHtcblx0XHRyZXR1cm4gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8ge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdGlzQ29tcGxleFR5cGUgPSBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lPy5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJGaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9OYXZpZ2F0aW9uQ29udGV4dCwgb0RhdGFGaWVsZCksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHRvb2x0aXAgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8udG9vbHRpcCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dHlwZUNvbmZpZyA9IHRoaXMuX2dldFR5cGVDb25maWcoY29sdW1uSW5mbywgaXNDb21wbGV4VHlwZSksXG5cdFx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdG5hbWU6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogY29sdW1uSW5mby5ncm91cExhYmVsLFxuXHRcdFx0XHRncm91cDogY29sdW1uSW5mby5ncm91cCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxuXHRcdFx0XHRkYXRhVHlwZTogdHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6XG5cdFx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH0gLyogVGhpcyBjb25kaXRpb24gZG9lc24ndCBoYXZlIGFueSBpbXBhY3QsIHRvIGJlIHJldmlld2VkICovXG5cdFx0XHRcdFx0XHQ6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29uc3RyYWludHM6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY29uc3RyYWludHMsXG5cdFx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFpc0NvbXBsZXhUeXBlLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogdGhpcy5fc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3MoY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncywgY29sdW1uSW5mbyksXG5cdFx0XHRcdHVuaXQ6IGNvbHVtbkluZm8udW5pdCxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoXG5cdFx0XHR9O1xuXHRcdGlmIChwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2xpcGJvYXJkU2V0dGluZ3MgPSB7IHRlbXBsYXRlOiBwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgfTtcblx0XHRcdC8vIGlmIEkgc2V0IHRoaXMgY2xpcEJvYXJkU2V0dGluZ3MgdGhlIGNvcHkgcHJvdmlkZXIgZXh0cmFjdCB0aGUgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGluIHRoZSBodG1sIHByb3BlcnR5IGFuZCBpdCBpcyBwcm9wZXJseSBjb3BpZWQgaW4gZXhjZWxcblx0XHRcdC8vIGJ1dCB3aGVuIHdlIGNvcHkgZWxzZXdoZXJlIHdlIG9ubHkgZ2V0IHRoZSByYXcgZGF0YSBhbmQgbm90IHRoZSB0ZW1wbGF0ZWQgZGF0YVxuXHRcdH1cblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gTURDIGV4cGVjdHMgICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblxuXHRfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbikge1xuXHRcdGlmIChjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmFnZ3JlZ2F0YWJsZSA9IGNvbHVtbkluZm8uYWdncmVnYXRhYmxlO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5leHRlbnNpb24pIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSBjb2x1bW5JbmZvLmV4dGVuc2lvbjtcblx0XHR9XG5cdH0sXG5cblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cdF9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3I6IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBUYWJsZSwgX29Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IF9vVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gX29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKGFWaXNpYmxlQ29sdW1ucyAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihfb0NvbHVtbkluZm8pICYmXG5cdFx0XHRcdFx0X29Db2x1bW5JbmZvLm5hbWUgPT09IGFWaXNpYmxlQ29sdW1uc1tpbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Ly8gd2hlbiBmZXRjaGluZyBwcm9wZXJ0aWVzLCB0aGlzIGJpbmRpbmcgY29udGV4dCBpcyBuZWVkZWQgLSBzbyBsZXRzIGNyZWF0ZSBpdCBvbmx5IG9uY2UgYW5kIHVzZSBpZiBmb3IgYWxsIHByb3BlcnRpZXMvZGF0YS1maWVsZHMvbGluZS1pdGVtc1xuXHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGJpbmRpbmdQYXRoLCBtZXRhTW9kZWwpLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKSlcblx0XHRcdC50aGVuKChjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChjb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5SW5mbztcblx0XHRcdFx0XHRjb2x1bW5zLmZvckVhY2goKGNvbHVtbkluZm8pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwodGFibGUsIGNvbHVtbkluZm8pO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChjb2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhtZXRhTW9kZWwsIGNvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvICYmICFub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcygocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJDb21wdXRlZFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke2NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlLCBmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmIChmZXRjaGVkUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVGaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKHRhYmxlKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBiaW5kaW5nSW5mby5wYXRoPy5zdGFydHNXaXRoKFwiL1wiKSA/IGJpbmRpbmdJbmZvLnBhdGguc3Vic3RyaW5nKDEpIDogYmluZGluZ0luZm8ucGF0aDtcblx0XHRsZXQgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzO1xuXG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZpbHRlckFzc29jaWF0aW9uID0gdGFibGUuZ2V0RmlsdGVyKCk7XG5cdFx0Y29uc3QgaGFzRmlsdGVyT3JTZWFyY2ggPSB0YWJsZUZpbHRlckluZm8uc2VhcmNoIHx8IHRhYmxlRmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGg7XG5cdFx0aWYgKGZpbHRlckFzc29jaWF0aW9uICYmICEvQmFzaWNTZWFyY2gkLy50ZXN0KGZpbHRlckFzc29jaWF0aW9uKSkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgYSBGaWx0ZXJCYXIgaXMgYXNzb2NpYXRlZCB0byB0aGUgVGFibGUgKGJhc2ljIHNlYXJjaCBvbiB0b29sQmFyIGlzIGV4Y2x1ZGVkKVxuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGlmIHRhYmxlIGhhcyBhbnkgRmlsdGVyYmFyIGZpbHRlcnMgb3IgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRhYmxlIGhhcyBhbnkgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PREFUQVwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUpIHtcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0Tm9EYXRhTWVzc2FnZU1vZGUoKTtcblxuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cblx0aGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQ6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdGJEYXRhUmVjZWl2ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiKTtcblxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uXG5cdFx0XHRcdFx0XHREZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUgPyBvVGFibGUuZ2V0UGFyZW50KCkgOiBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0XHQob1RhYmxlQVBJIGFzIFRhYmxlQVBJKS5zZXRVcEVtcHR5Um93cyhvVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMob1RhYmxlKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwcm9taXNlIGZvciB0aGUgZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdGlmIChtb2RlbCkge1xuXHRcdFx0dGFibGVBUEkuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UobmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKSk7XG5cdFx0XHR0aGlzLnNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsKGNvbnRyb2xsZXIsIG1vZGVsLCB0YWJsZUFQSSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIG9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpZiBhdmFpbGFibGUuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblx0ZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZTogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSA9XG5cdFx0XHR0YWJsZSAmJiBUYWJsZVV0aWxzLmlzRmlsdGVyRWxpZ2libGVGb3JPcHRpbWlzdGljQmF0Y2godGFibGUsIGNvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXIpO1xuXHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKT8ucmVzb2x2ZSghZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSBvVGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRvVGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHJldHVybiBUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdC50aGVuKCh0YWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuXHQgKi9cblx0ZmV0Y2hQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbCh0YWJsZSlcblx0XHRcdC50aGVuKGFzeW5jIChtb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+ID0+IHtcblx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRhYmxlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwiZW50aXR5VHlwZVwiKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChwcm9wZXJ0aWVzKSA9PiB7XG5cdFx0XHRcdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRwcmVJbml0OiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIChUYWJsZURlbGVnYXRlQmFzZS5wcmVJbml0IGFzICh0YWJsZTogVGFibGUpID0+IFByb21pc2U8dm9pZD4pLmFwcGx5KHRoaXMsIFt0YWJsZV0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBvbiB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogU2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRmYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyB1bmtub3duIGFzIENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJID0gbmV3IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSShiaW5kaW5nSW5mbyk7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCB0cnVlKTtcblx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvXSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5zZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cblx0XHRcdHRhYmxlLmdldFBhcmVudCgpPy5maXJlRXZlbnQoXCJiZWZvcmVSZWJpbmRUYWJsZVwiLCB7IGNvbGxlY3Rpb25CaW5kaW5nSW5mbzogY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIH0pO1xuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkuZ2V0QXR0YWNoZWRFdmVudHMoKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpdCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBmb3IgdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpcyBzZXQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdGlmICh0YWJsZS5nZXRDcmVhdGlvblJvdygpPy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSBudWxsICYmIGJpbmRpbmdJbmZvLnBhdGggJiYgY29udGV4dCkge1xuXHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRcdFx0dGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdGNvbnRleHQgYXMgdjRDb250ZXh0LFxuXHRcdFx0XHRcdHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCxcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGFibGVBUEkuc2V0QXR0YWNoRXZlbnRzKGF0dGFjaGVkRXZlbnRzKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgYmluZGluZyBpbmZvXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlcltdIHwgdW5kZWZpbmVkID0gYmluZGluZ0luZm8uc29ydGVyO1xuXHRcdGNvbnN0IG5ld1NvcnRlcnNUb0JlQXBwbGllZDogU29ydGVyW10gPSBbXTtcblx0XHRpZiAoc29ydGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdFx0Zm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuXHRcdFx0XHRjb25zdCB0YWJsZVByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkucGF0aCA9PT0gc29ydGVyLmdldFBhdGgoKSk7XG5cdFx0XHRcdGlmICh0YWJsZVByb3BlcnR5Py51bml0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ID09PSB0YWJsZVByb3BlcnR5Py51bml0KTtcblx0XHRcdFx0XHRjb25zdCB1bml0U29ydGVyQXZhaWxhYmxlID0gdW5pdFByb3BlcnR5Py5wYXRoICYmIHNvcnRlcnMuc29tZSgoc29ydCkgPT4gc29ydC5nZXRQYXRoKCkgPT09IHVuaXRQcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIXVuaXRTb3J0ZXJBdmFpbGFibGUgJiYgdW5pdFByb3BlcnR5Py5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdW5pdFByb3BlcnR5Py5wYXRoKSB7XG5cdFx0XHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChuZXcgU29ydGVyKHVuaXRQcm9wZXJ0eS5wYXRoLCBmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChzb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyID0gbmV3U29ydGVyc1RvQmVBcHBsaWVkO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRpZiAoY29udHJvbGxlcj8ucmVjb21tZW5kYXRpb25zLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZURlZiA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHQuZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGVEZWYuYW5ub3RhdGlvbi5lbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzICYmIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5sZW5ndGggPiAwICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlbGVjdD8uY29uY2F0KFwiLFwiLCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMuam9pbigpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgY2FyZHMgd2hlbiB0aGUgYmluZGluZyBpcyByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfdXBkYXRlQXZhaWxhYmxlQ2FyZHM6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgY2FyZHM6IFdyYXBwZWRDYXJkW10gPSBbXTtcblx0XHRcdGF3YWl0IHRhYmxlQVBJLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlciA9IG5ldyBDb2xsYWJvcmF0aW9uTWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IGNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gYXBwQ29tcG9uZW50LmdldElkKCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkKTtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgaG9vayBpbXBsZW1lbnRlZCBieSBNREMgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUuXG5cdCAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlZmluZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVlc3RlZCBpbiB0aGUgTURDIHRhYmxlIChNYWluIGNhc2UgaXMgZm9yIHRoZSBhbmFseXRpY2FsIHRhYmxlKS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZSB0byBiZSByZXF1ZXN0ZWQuXG5cdCAqL1xuXHRnZXRJblJlc3VsdFByb3BlcnR5S2V5czogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0Y29uc3QgYWxsS2tleXNSZXF1ZXN0ZWQgPSB0aGlzLmNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCh0YWJsZUFQSSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdC8vIGlmIGEgcm93cHJlc3MgaXMgb3ZlcnJpZGRlbiwgd2UgIHNob3VsZCBlbmFibGUgdGhlIG5hdmlnYXRpb24gYXQgdGhlIG5vZGUgbGV2ZWxcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNOb2RlTGV2ZWxOYXZpZ2FibGVcIiwgdGFibGVBUEkub3ZlcnJpZGVSb3dQcmVzcyA/IHRydWUgOiBhbGxLa2V5c1JlcXVlc3RlZCk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QpXG5cdFx0XHRcdFx0Ly8gZm9yIGFuYWx5dGljIHRhYmxlcyB3aXRoIGFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgd2Ugc2hvdWxkIG5vdCByZXF1ZXN0IHRoZSBzZW1hbnRpY0tleSBleHBlY3RlZCB3aGVuIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQgLT4gIGl0IHdpbGwgcGVybWl0cyB0byBuYXZpZ2F0ZSBmcm9tIGEgbm9kZSBsZXZlbCB3aGVuIHNlbWFudGljS2V5IGFyZSBlbmFibGVkXG5cdFx0XHRcdFx0Ly8gcmVzdHJpY3Rpb24gYXJlIGFsc28gZXhjbHVkZWQgYXMgd2UgY2Fubm90IGRlc3Rpbmd1aXNoIGJldHdlZW4gYSBub2RlIGFuZCBhIGFnZ3JlZ2F0aW9uIGxldmVsXG5cblx0XHRcdFx0XHQuZmlsdGVyKChmaWVsZE5hbWU6IHN0cmluZykgPT5cblx0XHRcdFx0XHRcdCFhbGxLa2V5c1JlcXVlc3RlZFxuXHRcdFx0XHRcdFx0XHQ/IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdFtmaWVsZE5hbWVdLnNvbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHQob3JpZ2luKSA9PiBvcmlnaW4gIT09IFwicmVzdHJpY3Rpb25cIiAmJiBvcmlnaW4gIT09IFwic2VtYW50aWNLZXlcIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdCA/PyB7fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFsbCBrZXlzKCkgZXhjZXB0ZWQgSXNBY3RpdmVFbnRpdHkpIGFyZSByZXF1ZXN0ZWQgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIHRhYmxlIEFQSVxuXHQgKiBAcmV0dXJucyAgVHJ1ZSBpZiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZDogZnVuY3Rpb24gKHRhYmxlQVBJOiBUYWJsZUFQSSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFsbENvbHVtbnMgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zIGFzIChUYWJsZUNvbHVtbiAmIHsgaXNLZXk6IGJvb2xlYW47IHJlbGF0aXZlUGF0aDogc3RyaW5nIH0pW107XG5cdFx0Y29uc3Qga2V5UHJvcGVydHlOYW1lcyA9IGFsbENvbHVtbnNcblx0XHRcdC5maWx0ZXIoKGMpID0+IGMuaXNLZXkgJiYgYy5yZWxhdGl2ZVBhdGggJiYgYy5yZWxhdGl2ZVBhdGggIT09IFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdC5tYXAoKGMpID0+IGMucmVsYXRpdmVQYXRoKTtcblxuXHRcdGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0YWJsZVxuXHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0Lm1hcCgoY29sdW1uKSA9PiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdC8vIFN0b3JlIGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgZGlzcGxheWVkIGNvbHVtbnMgaW4gYSBTZXRcblx0XHRjb25zdCByZWZlcmVuY2VkUHJvcGVydHlQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZ1bmN0aW9uIHByb2Nlc3NDb2x1bW4oY29sOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRcdC8vIEFkZCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIGNvbHVtbiBpdHNlbGYgaWYgaXQncyBub3QgYSBjb21wbGV4IHByb3BlcnR5SW5mb1xuXHRcdFx0aWYgKGNvbC5yZWxhdGl2ZVBhdGggJiYgY29sLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoY29sLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sLmV4dGVuc2lvbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmZvckVhY2goKGFkZGl0aW9uYWxDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZGl0aW9uYWxDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gYWRkaXRpb25hbENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWRkaXRpb25hbENvbHVtbj8ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGFkZGl0aW9uYWxDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIWNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW4gaXRzZWxmXG5cdFx0XHRwcm9jZXNzQ29sdW1uKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3M/LmZvckVhY2goKHJlbGF0ZWRDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gcmVsYXRlZENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAocmVsYXRlZENvbHVtbikge1xuXHRcdFx0XHRcdHByb2Nlc3NDb2x1bW4ocmVsYXRlZENvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBrZXlQcm9wZXJ0eU5hbWVzLmV2ZXJ5KChwcm9wTmFtZSkgPT4gcHJvcE5hbWUgJiYgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuaGFzKHByb3BOYW1lKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWFyY2ggcXVlcnkgZm9yIGFuYWx5dGljYWwgYW5kIG5vbiBhbmFseXRpY2FsIG9kYXRhTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIFRoZSBvRGF0YUxpc3RCaW5kaW5nIGluc3RhbmNlLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHF1ZXJ5IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBiaW5kaW5nLmdldEFnZ3JlZ2F0aW9uPy4oKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYWdncmVnYXRpb24/LnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBGb3IgYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBzZWFyY2ggcXVlcnkgaXMgc3RvcmVkIGluIHRoZSBhZ2dyZWdhdGlvblxuXHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uLnNlYXJjaCBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdC8vIElmIG5vdCBmb3VuZCBpbiBhZ2dyZWdhdGlvbiwgY2hlY2sgdGhlIHF1ZXJ5IG9wdGlvbnNcblx0XHRyZXR1cm4gYmluZGluZy5nZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycygpLiRzZWFyY2g7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmc6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZTtcblx0XHRcdH1cblx0XHRcdC8vIENsZWFudXAgZ3JvdXBDb25kaXRpb25zIGFuZCBhZ2dyZWdhdGVDb25kaXRpb25zIGlmIHRoZXkgZG9uJ3QgbWFrZSBzZW5zZVxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGUgY29uZGl0aW9ucyBuZXZlciBtYWtlIHNlbnNlIG91dHNpZGUgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZVxuXHRcdFx0XHR0YWJsZS5zZXRBZ2dyZWdhdGVDb25kaXRpb25zKCk7XG5cblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblxuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblxuXHRcdFx0Ly9mb3IgVHJlZXRhYmxlLCBpdCdzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgcGFzdGFibGVDb250ZXh0cyBzaW5jZSB0aGUgYmluZGluZyBkZXN0cm95cyBwcmV2aW91cyBjb250ZXh0cy5cblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3Qgcm93QmluZGluZ0luZm8gPSB0YWJsZUFQSS5nZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8oKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCB0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UgJiZcblx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInZpZXdEYXRhXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KGJpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0QmluZGluZygpLmdldFVwZGF0ZUdyb3VwSWQoKSA9PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSURcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0YWJsZUNhbkJlSW5JbmxpbmVFZGl0KSB7XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCR1cGRhdGVHcm91cElkID0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEO1xuXHRcdH1cblxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmICgob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5jb25jYXQob0ZpbHRlckluZm8uZmlsdGVycyksIGFuZDogdHJ1ZSB9KTtcblx0XHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHR9XG5cblx0XHR0aGlzLmFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHR9LFxuXG5cdHVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgZmlsdGVySW5mbzogSW50ZXJuYWxCaW5kaW5nSW5mbywgZmlsdGVyPzogRmlsdGVyKSB7XG5cdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlcjtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRpZiAoZmlsdGVySW5mby5zZWFyY2gpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVySW5mby5zZWFyY2gpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogSWYgc3BlY2lmaWVkIGluIHRoZSBwYXlsb2FkLCBhZGRzIGEgZmlsdGVyIHRvIGRpc3BsYXkgb25seSBhY3RpdmUgZW50aXRpZXMuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm9cblx0ICovXG5cdGFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBwYXlsb2FkID0gdGFibGUuZ2V0UGF5bG9hZCgpIGFzIHsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW4gfTtcblxuXHRcdGlmIChwYXlsb2FkPy5maWx0ZXJPbkFjdGl2ZUVudGl0aWVzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJPbkFjdGl2ZSA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIklzQWN0aXZlRW50aXR5XCIsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogdHJ1ZSB9KTtcblx0XHRcdGlmIChiaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogW2ZpbHRlck9uQWN0aXZlLCBiaW5kaW5nSW5mby5maWx0ZXJzXSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlck9uQWN0aXZlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gdGhlIGZyYWdtZW50IG9mIGEgc2xvdCBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjdXN0b20gdGFibGUgY29sdW1uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1vZGlmaWVyIFRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIHRhYmxlSWQgVGhlIGlkIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZnJhZ21lbnRcblx0ICovXG5cdF90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0dmlldzogVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRpZiAoc2xvdFhNTCkge1xuXHRcdFx0XHRjb25zdCBvVGVtcGxhdGUgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGNvbHVtbkluZm8udGVtcGxhdGUgYXMgc3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRcdFx0XHRpZiAob1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkICYmIG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSAhPT0gXCJodG1sXCIpIHtcblx0XHRcdFx0XHRzbG90WE1MLnJlcGxhY2VXaXRoKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYFBsZWFzZSBwcm92aWRlIGNvbnRlbnQgaW5zaWRlIHRoaXMgQnVpbGRpbmcgQmxvY2sgQ29sdW1uOiAke2NvbHVtbkluZm8uaGVhZGVyfWApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRzbG90Q29sdW1uc1hNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdHsgbW9kZWxzOiB7fSB9LFxuXHRcdFx0KHZpZXcuZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+KS5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KClcblx0XHQpO1xuXHRcdGlmIChtb2RpZmllcj8udGFyZ2V0cyAhPT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRYTUwuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0fVxuXHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRkZWZpbml0aW9uOiByZXN1bHRYTUwsXG5cdFx0XHRjb250cm9sbGVyOiB2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdH0pIGFzIFByb21pc2U8Q29udHJvbCB8IENvbnRyb2xbXT47XG5cdH0sXG5cblx0X2dldEV4cG9ydEZvcm1hdDogZnVuY3Rpb24gKGRhdGFUeXBlPzogc3RyaW5nKSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVmcm9tSlNEYXRlKCk7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUoKTtcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbFRpbWVmcm9tSlNUaW1lKCk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cblx0XHRpZiAob0RhdGFGaWVsZERhdGEuJGtpbmQgJiYgb0RhdGFGaWVsZERhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YCk7XG5cdFx0XHRzTWV0YWRhdGFQYXRoID0gYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGA7XG5cdFx0fVxuXHRcdHN3aXRjaCAob0RhdGFGaWVsZERhdGEuJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoYCkuaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpKSB7XG5cdFx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhYCkuZm9yRWFjaCgob1ZhbHVlOiB1bmtub3duLCBpSW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdFx0YUZpZWxkcyA9IGFGaWVsZHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9nZXRWSFJlbGV2YW50RmllbGRzKG9NZXRhTW9kZWwsIGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YS8ke2lJbmRleH1gKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRcdFx0YUZpZWxkcy5wdXNoKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1ZhbHVlLyRQYXRoYCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBwcm9wZXJ0eVxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUgVkggcmVsZXZhbnQgZmllbGQgcGF0aCBkbyBub3QgY29udGFpbiB0aGUgYmluZGluZ3BhdGhcblx0XHRcdFx0aWYgKHNCaW5kaW5nUGF0aCAmJiBzTWV0YWRhdGFQYXRoLmluZGV4T2Yoc0JpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRcdGFGaWVsZHMucHVzaChzTWV0YWRhdGFQYXRoLnN1YnN0cmluZyhzQmluZGluZ1BhdGgubGVuZ3RoICsgMSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFGaWVsZHMucHVzaChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc01ldGFkYXRhUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFGaWVsZHM7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbjogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoIW9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1ucy5maWx0ZXIoKG9Db2x1bW46IFRhYmxlQ29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKG9Db2x1bW4pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0bGV0IHNBZGRWaXNpYmxlQ29sdW1uTmFtZSwgc1Zpc2libGVDb2x1bW5OYW1lLCBiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0LCBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcjtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRzVmlzaWJsZUNvbHVtbk5hbWUgPSBhVmlzaWJsZUNvbHVtbnNbaV0uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yW2pdLm5hbWU7XG5cdFx0XHRcdGlmIChzVmlzaWJsZUNvbHVtbk5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0YkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Db2x1bW5JbmZvICYmIG9Db2x1bW5JbmZvLm5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0c0FkZFZpc2libGVDb2x1bW5OYW1lID0gb0NvbHVtbkluZm8ubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc1Zpc2libGVDb2x1bW5OYW1lKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCAmJiBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpIHtcblx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9LFxuXHRyZW1vdmVJdGVtOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRvUHJvcGVydHlJbmZvTmFtZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBkb1JlbW92ZUl0ZW0gPSB0cnVlO1xuXHRcdGlmICghb1Byb3BlcnR5SW5mb05hbWUpIHtcblx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIHJlbW92ZWQgdGhlIHByb3BlcnR5IGZyb20gdGhlaXIgZGF0YSBtb2RlbFxuXHRcdFx0Ly8gMi4gYWRkSXRlbSBmYWlsZWQgYmVmb3JlIHJldmVydERhdGEgY3JlYXRlZFxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHRcdH1cblx0XHRjb25zdCBvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IGF3YWl0IG9Nb2RpZmllci5nZXRQcm9wZXJ0eTxzdHJpbmc+KG9Qcm9wZXJ0eUluZm9OYW1lLCBcImRhdGFQcm9wZXJ0eVwiKTtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eSAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzICYmIHNEYXRhUHJvcGVydHkuaW5jbHVkZXMoXCJJbmxpbmVYTUxcIikpIHtcblx0XHRcdG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKChvVGFibGUgYXMgVUk1RWxlbWVudCkuaXNBICYmIG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCBvVGFibGUsIHRoaXMuZ2V0Q29sdW1uc0ZvcihvVGFibGUgYXMgVGFibGUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHR9LFxuXHRfZ2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH0pIHtcblx0XHRyZXR1cm4gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvclN0YXR1czogZnVuY3Rpb24gKFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdG9Db2x1bW5JbmZvPzogVGFibGVDb2x1bW5cblx0KSB7XG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4ob1RhYmxlIGFzIFRhYmxlLCBhQ29sdW1ucywgb0NvbHVtbkluZm8pO1xuXHRcdH1cblx0fSxcblx0X2dldEdyb3VwSWQ6IGZ1bmN0aW9uIChzUmV0cmlldmVkR3JvdXBJZDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNSZXRyaWV2ZWRHcm91cElkIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0X2luc2VydEFnZ3JlZ2F0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlSGVscDogRWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10sXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdG9UYWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9WYWx1ZUhlbHApIHtcblx0XHRcdHJldHVybiBvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1ZhbHVlSGVscCwgMCk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogSW52b2tlZCB3aGVuIGEgY29sdW1uIGlzIGFkZGVkIHVzaW5nIHRoZSB0YWJsZSBwZXJzb25hbGl6YXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIWFDb2x1bW5zKSB7XG5cdFx0XHQvLyBXZSByZXR1cm4gbnVsbCBoZXJlIGJlY2F1c2UgZXZlcnl0aGluZyBzaG91bGQgYXBwbHkgYXQgcnVudGltZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJTbG90XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudChjb2x1bW5JbmZvIGFzIEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sIHZpZXcsIG9Nb2RpZmllciwgc1RhYmxlSWQpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gKCh0YWJsZSBhcyBNRENUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblxuXHRcdC8vIGZhbGwtYmFja1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRsZXQgcHJvcGVydHlJbmZvcyA9IHRhYmxlQVBJLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGUgcHJvcGVydHlJbmZvcyBhcmUgbm90IGZldGNoZWQgeWV0LCB3ZSBuZWVkIHRvIGZldGNoIHRoZW1cblx0XHRcdC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFibGUgaXMgbm90IGNyZWF0ZWQgeWV0XG5cdFx0XHRhd2FpdCB0aGlzLmZldGNoUHJvcGVydGllcyh0YWJsZSBhcyBNRENUYWJsZSk7XG5cdFx0XHRwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zLmZpbmQoZnVuY3Rpb24gKHByb3BJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRyZXR1cm4gcHJvcEluZm8ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblxuXHRcdGNvbnN0IGZuVGVtcGxhdGVGcmFnbWVudCA9IGFzeW5jIChcblx0XHRcdG9JblByb3BlcnR5SW5mbzogdW5rbm93bixcblx0XHRcdG9WaWV3OiBGRVZpZXdcblx0XHQpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPiA9PiB7XG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nIHwgYm9vbGVhbj4odGFibGUsIFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbihhc3luYyAoYUN1c3RvbURhdGE6IChzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNUYWJsZVR5cGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMV0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUmVhZCBPbmx5IGFuZCBDb2x1bW4gRWRpdCBNb2RlIGNhbiBib3RoIGhhdmUgdGhyZWUgc3RhdGVcblx0XHRcdFx0Ly8gVW5kZWZpbmVkIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayBkZWNpZGVzIHdoYXQgdG8gZG9cblx0XHRcdFx0Ly8gVHJ1ZSAvIERpc3BsYXkgbWVhbnMgYWx3YXlzIHJlYWQgb25seVxuXHRcdFx0XHQvLyBGYWxzZSAvIEVkaXRhYmxlIG1lYW5zIGVkaXRhYmxlIGJ1dCB3aGlsZSBzdGlsbCByZXNwZWN0aW5nIHRoZSBsb3cgbGV2ZWwgcHJpbmNpcGxlIChpbW11dGFibGUgcHJvcGVydHkgd2lsbCBub3QgYmUgZWRpdGFibGUpXG5cdFx0XHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYkRpc3BsYXlNb2RlICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGJEaXNwbGF5TW9kZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSxcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogeyBuYW1lOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSB9LFxuXHRcdFx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9Qcm9wZXJ0eUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB0YWJsZUNvbGxlY3Rpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBuZXcgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcihcblx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHR7IGNvbGxlY3Rpb25FbnRpdHk6IHRhYmxlQ29sbGVjdGlvbi50YXJnZXRPYmplY3QhLCBtZXRhTW9kZWw6IG9NZXRhTW9kZWwgfSxcblx0XHRcdFx0XHR0YWJsZUFQSVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBjb21wdXRlZENvbHVtblhNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSEsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0KSA/PyBcIlwiKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcInRleHQveG1sXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFx0XHRjb21wdXRlZENvbHVtblhNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHRcdFx0eyB2aWV3OiBvVmlldyB9LFxuXHRcdFx0XHRcdG9Nb2RpZmllclxuXHRcdFx0XHQpLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBUYWJsZSdzIGZpbHRlciBkZWxlZ2F0ZSB0byBwcm92aWRlIGJhc2ljIGZpbHRlciBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgYWRkaW5nIEZpbHRlckZpZWxkcy5cblx0ICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgVGFibGVzIGZpbHRlciBwZXJzb25hbGl6YXRpb24uXG5cdCAqL1xuXHRnZXRGaWx0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0XHR9LFxuXHRcdFx0RmlsdGVyQmFyRGVsZWdhdGUsXG5cdFx0XHR7XG5cdFx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gQ29ycmVjdCB0aGUgbmFtZSBvZiBjb21wbGV4IHByb3BlcnR5IGluZm8gcmVmZXJlbmNlcy5cblx0XHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZU1hcCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZU1hcFxuXHQgKi9cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0LypGb3IgYSBEYXRlLCBEYXRlVGltZSwgQm9vbGVhbiBvciBEZWNpbWFsIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRjb25zdCBkYXRhQmFzZVR5cGUgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcGVydHlJbmZvPy5kYXRhVHlwZSkuYmFzZVR5cGU7XG5cdFx0Y29uc3QgZXh0ZXJuYWxGb3JtYXQgPVxuXHRcdFx0ZGF0YUJhc2VUeXBlID09PSBcIkRhdGVUaW1lXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkRhdGVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiQm9vbGVhblwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJOdW1lcmljXCI7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHRcdH1cblx0XHRpZiAocHJvcGVydHlJbmZvPy5tb2RlKSB7XG5cdFx0XHRzd2l0Y2ggKHByb3BlcnR5SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mbz8ucGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnBhdGgsIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSw4QkFBOEIsR0FB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