@sapui5/sap.fe.macros 1.140.0 → 1.141.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 (199) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +14 -10
  14. package/src/sap/fe/macros/Field.ts +15 -12
  15. package/src/sap/fe/macros/MacroAPI.js +9 -4
  16. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  17. package/src/sap/fe/macros/MultiValueField.js +10 -5
  18. package/src/sap/fe/macros/MultiValueField.tsx +7 -1
  19. package/src/sap/fe/macros/Page.js +5 -7
  20. package/src/sap/fe/macros/Page.tsx +4 -6
  21. package/src/sap/fe/macros/Paginator.js +9 -4
  22. package/src/sap/fe/macros/Paginator.tsx +12 -3
  23. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  24. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  25. package/src/sap/fe/macros/Status.js +38 -13
  26. package/src/sap/fe/macros/Status.tsx +26 -6
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  33. package/src/sap/fe/macros/chart/Chart.js +2 -2
  34. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  35. package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
  36. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
  37. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  38. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  39. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  40. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  41. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
  42. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
  43. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  44. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  45. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  46. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  47. package/src/sap/fe/macros/controls/Section.js +4 -3
  48. package/src/sap/fe/macros/controls/Section.ts +3 -2
  49. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  50. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  51. package/src/sap/fe/macros/field/Field.js +2 -2
  52. package/src/sap/fe/macros/field/Field.tsx +1 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  55. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  56. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  57. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  58. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  59. package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
  60. package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
  61. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  62. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  63. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  64. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  65. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  66. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  67. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  68. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  69. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  70. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  71. package/src/sap/fe/macros/form/Form.block.js +7 -8
  72. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  73. package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
  74. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
  75. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  76. package/src/sap/fe/macros/form/FormDelegate.js +6 -9
  77. package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
  78. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  79. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  80. package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
  81. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
  82. package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
  83. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
  84. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  85. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  86. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  87. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
  88. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  89. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  90. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  91. package/src/sap/fe/macros/library.js +1 -1
  92. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  93. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  94. package/src/sap/fe/macros/messagebundle.properties +20 -2
  95. package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
  96. package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
  97. package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
  98. package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
  99. package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
  100. package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
  101. package/src/sap/fe/macros/messagebundle_da.properties +1 -1
  102. package/src/sap/fe/macros/messagebundle_de.properties +4 -4
  103. package/src/sap/fe/macros/messagebundle_el.properties +1 -1
  104. package/src/sap/fe/macros/messagebundle_en.properties +1 -1
  105. package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
  106. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  107. package/src/sap/fe/macros/messagebundle_es.properties +2 -2
  108. package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
  109. package/src/sap/fe/macros/messagebundle_et.properties +1 -1
  110. package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
  111. package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
  112. package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
  113. package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
  114. package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
  115. package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
  116. package/src/sap/fe/macros/messagebundle_id.properties +5 -5
  117. package/src/sap/fe/macros/messagebundle_it.properties +1 -1
  118. package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
  119. package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
  120. package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
  121. package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
  122. package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  123. package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
  124. package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
  125. package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
  126. package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
  127. package/src/sap/fe/macros/messagebundle_no.properties +1 -1
  128. package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
  129. package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
  130. package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
  131. package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
  132. package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
  133. package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
  134. package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
  135. package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
  136. package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
  137. package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
  138. package/src/sap/fe/macros/messagebundle_th.properties +1 -1
  139. package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
  140. package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
  141. package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  142. package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
  143. package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
  144. package/src/sap/fe/macros/messages/MessageButton.js +1 -1
  145. package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
  146. package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
  147. package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
  148. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  149. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  150. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
  151. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
  152. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  153. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  154. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  155. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  156. package/src/sap/fe/macros/table/Column.js +14 -2
  157. package/src/sap/fe/macros/table/Column.ts +7 -0
  158. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  159. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  160. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  161. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  162. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
  163. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
  164. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  165. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  166. package/src/sap/fe/macros/table/Table.block.js +188 -147
  167. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  168. package/src/sap/fe/macros/table/Table.js +16 -10
  169. package/src/sap/fe/macros/table/Table.tsx +16 -10
  170. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  171. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  172. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  173. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  174. package/src/sap/fe/macros/table/TableHelper.js +2 -2
  175. package/src/sap/fe/macros/table/TableHelper.ts +1 -1
  176. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  177. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  178. package/src/sap/fe/macros/table/Utils.js +3 -2
  179. package/src/sap/fe/macros/table/Utils.ts +7 -2
  180. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
  181. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
  182. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  183. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  184. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  185. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  186. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  187. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  188. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  189. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  190. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  191. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  192. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  193. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  194. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  195. package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
  196. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
  197. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
  198. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
  199. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
@@ -1517,4 +1517,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
1517
1517
  }), _class2)) || _class);
1518
1518
  return MessageButton;
1519
1519
  }, false);
1520
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJhZ2dyZWdhdGlvbiIsInR5cGUiLCJtdWx0aXBsZSIsInNpbmd1bGFyTmFtZSIsIl9kZWMzIiwiZXZlbnQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1dHRvbiIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwic0dlbmVyYWxHcm91cFRleHQiLCJzVmlld0lkIiwic0xhc3RBY3Rpb25UZXh0IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0IiwiQnV0dG9uIiwiYXBwbHkiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJhdHRhY2hQcmVzcyIsImhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MiLCJvTWVzc2FnZVBvcG92ZXIiLCJNZXNzYWdlUG9wb3ZlciIsIm9JdGVtQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfc2V0TWVzc2FnZURhdGEiLCJtZXNzYWdlQnV0dG9uSWQiLCJnZXRJZCIsImFkZEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwia2V5IiwidmFsdWUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJfYXBwbHlGaWx0ZXJzQW5kU29ydCIsImJpbmQiLCJhdHRhY2hBY3RpdmVUaXRsZVByZXNzIiwiX2FjdGl2ZVRpdGxlUHJlc3MiLCJvRXZlbnQiLCJ0b2dnbGUiLCJnZXRTb3VyY2UiLCJfYXBwbHlHcm91cGluZ0FzeW5jIiwib1ZpZXciLCJhV2FpdEZvckRhdGEiLCJvVmlld0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzIiwidmlldyIsIm9SZXMiLCJhTWVzc2FnZXMiLCJnZXRDb250ZXh0cyIsIm1hcCIsIm9Db250ZXh0IiwiZ2V0T2JqZWN0Iiwib1ZpZXdDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJnZXRDb250ZW50IiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJmb3JFYWNoIiwib1NlY3Rpb24iLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwiZmluZEVsZW1lbnRzIiwib0VsZW0iLCJpc0EiLCJpIiwibGVuZ3RoIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJnZXRQYXRoIiwidGFyZ2V0IiwiaW5kZXhPZiIsInB1c2giLCJ0YWJsZSIsInN1YnNlY3Rpb24iLCJvVGFibGVzIiwiX29UYWJsZSIsIm9NRENUYWJsZSIsIm9TdWJzZWN0aW9uIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0xlbmd0aEZpbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJ3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkIiwic2V0VGltZW91dCIsIl9hcHBseUdyb3VwaW5nIiwiYWxsIiwiZ2V0TW9kZWwiLCJjaGVja01lc3NhZ2VzIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJvT2JqZWN0UGFnZUxheW91dCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsInNlY3Rpb24iLCJlbmFibGVCaW5kaW5nIiwiX2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyIsIl9mbkVuYWJsZUJpbmRpbmdzIiwidmlld0lkIiwiX2dldFZpZXdJZCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInVJTW9kZWwiLCJzZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCIsIm9UYWJsZSIsIm9Nb2RlbCIsImdldFByb3BlcnR5Iiwic1JlZkVycm9yQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiZ2V0Q29udGV4dCIsIl91cGRhdGVJbnRlcm5hbE1vZGVsIiwidGFibGVSb3dDb250ZXh0Iiwicm93SW5kZXgiLCJ0YWJsZVRhcmdldENvbFByb3BlcnR5IiwibWVzc2FnZU9iamVjdCIsImlzQ3JlYXRpb25Sb3ciLCJ0ZW1wIiwidGFyZ2V0Q29sUHJvcGVydHkiLCJtb2RlbCIsImNvbnRleHQiLCJhVmFsaWRNZXNzYWdlSWRzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1lc3NhZ2UiLCJhT2Jzb2xldGVNZXNzYWdlbElkcyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJpbnRlcm5hbE1lc3NhZ2VJZCIsIm9ic29sZXRlSWQiLCJhc3NpZ24iLCJfc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyIsInNBY3Rpb25OYW1lIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInNldEdyb3VwTmFtZSIsIl9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUiLCJzdWJTZWN0aW9uIiwiZWxlbWVudHMiLCJoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYWN0aW9uTmFtZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZGV0YWNoQ2hhbmdlIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiZWxlbWVudCIsInRhcmdldFRhYmxlSW5mbyIsImwiLCJ0YXJnZXRlZENvbnRyb2wiLCJpc0JhY2tFbmRNZXNzYWdlIiwiUmVnRXhwIiwidGVzdCIsImdldFRhcmdldHMiLCJnZXRQYXJlbnQiLCJyb3dCaW5kaW5nIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9iaiIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJvVGFyZ2V0VGFibGVJbmZvIiwic3ViVGl0bGUiLCJzZXRTdWJ0aXRsZSIsInNldEFjdGl2ZVRpdGxlIiwib1RhYmxlUm93Q29udGV4dCIsImlzSW5hY3RpdmUiLCJfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uIiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldEluZGV4Iiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJnZXRTdWJ0aXRsZSIsImZvcm1FbGVtZW50IiwicGFyZW50IiwibGFiZWwiLCJnZXRMYWJlbCIsImxhYmVsVGV4dCIsImlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuIiwiYklzT3JwaGFuRWxlbWVudCIsIl9nZXRNZGNUYWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0SGVhZGVyIiwidGFyZ2V0Q29sdW1uSW5kZXgiLCJfZ2V0VGFibGVDb2x1bW5JbmRleCIsImdldENvbHVtbnMiLCJnZXRQcm9wZXJ0eUtleSIsIl9nZXRUYWJsZVJvdyIsIl9nZXRUYWJsZVJvd0luZGV4Iiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZVN1YnRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwiZ2V0VmFsdWVTdGF0ZSIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsIl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmciLCJzZWN0aW9uQmFzZWRHcm91cE5hbWUiLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwidmlld0NvbnRleHRQYXRoIiwibWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSIsInNwbGl0IiwicG9wIiwiaW50ZXJuYWxNb2RlbCIsImludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoIiwiaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzdGFydHNXaXRoIiwiZmlyZUFjdGl2ZVRpdGxlUHJlc3MiLCJpdGVtIiwiYkluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsInNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQiLCJnZXRWaWV3RGF0YSIsInNlY3Rpb25MYXlvdXQiLCJtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCIsImJsb2NrIiwiZ2V0QmxvY2tzIiwiY29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYmxvY2tzIiwiZ2V0TWFpbkNvbnRlbnQiLCJGdW5jdGlvbiIsImFTdWJTZWN0aW9ucyIsImoiLCJrIiwiYVZpc2libGVTZWN0aW9ucyIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJzaG91bGRCcmVhayIsIm9NZXNzYWdlT2JqZWN0IiwiX2dldEdlbmVyYWxHcm91cFRleHQiLCJhQ29udHJvbHMiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsIm9UYXJnZXRlZENvbnRyb2wiLCJwZXJzaXN0ZW50IiwiZ2V0R3JvdXBOYW1lIiwiX2ZpbmRUYXJnZXRGb3JNZXNzYWdlIiwidmlld1BhdGgiLCJtZXNzYWdlVGFyZ2V0UGF0aCIsImluY2x1ZGVzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQ29udGV4dFBhdGhNZXRhZGF0YSIsIiRraW5kIiwiX2ZuRW5hYmxlU3ViU2VjdGlvbkJpbmRpbmciLCJnZXRNb3JlQmxvY2tzIiwic3ViQmxvY2siLCJnZXRBY3Rpb25zIiwiYWN0aW9ucyIsImFTZWN0aW9ucyIsImlTZWN0aW9uIiwiaVN1YlNlY3Rpb24iLCJvQWxsQmxvY2tzIiwiX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZyIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNDb250cm9sSWQiLCJvQ29udHJvbCIsIlZpZXciLCJfc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbiIsIm9EaWFnbm9zaXNUaXRsZSIsInNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyIiwiY29uZmlnIiwic0xvbmdUZXh0VXJsIiwiZ2V0TG9uZ3RleHRVcmwiLCJqUXVlcnkiLCJhamF4IiwidXJsIiwic3VjY2VzcyIsImRhdGEiLCJzRGlhZ25vc2lzVGV4dCIsImdldEh0bWxUZXh0Iiwib2xkRGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInNldERlc2NyaXB0aW9uIiwicHJvbWlzZSIsInNFcnJvciIsInJlamVjdCIsInByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXMiLCJ0YWJsZUNvbFByb3BlcnR5Iiwicm93SW5mb3JtYXRpb24iLCJ0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24iLCJnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJ0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCIsInRhYmxlQ29sVGV4dEFycmFuZ2VtZW50IiwibGFiZWxXaXRoVmFsdWUiLCJnZXRUYWJsZUNvbFZhbHVlIiwiY29tcHV0ZUNvbHVtbkluZm8iLCJ0YWJsZVRhcmdldENvbE5hbWUiLCJtc2dPYmoiLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImNvbHVtbkluZm8iLCJhdmFpbGFiaWxpdHkiLCJnZXRUeXBlIiwiam9pbiIsIl9uYXZpZ2F0aW9uQ29uZmlndXJlZCIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJfcmVmIiwidmlzaWJpbGl0eSIsImZpZWxkc0FmZmVjdGVkVGl0bGUiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJmaWVsZEFmZmVjdGVkVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImRpYWdub3Npc1RpdGxlIiwidUlNZXNzYWdlRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsImRpYWdub3Npc1RleHQiLCJtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50IiwiaGFuZGxlTm9NZXNzYWdlcyIsInNldFZpc2libGUiLCJmaXJlRXZlbnQiLCJpTWVzc2FnZUxlbmd0aCIsImNsZWFyVGltZW91dCIsIl9zZXRNZXNzYWdlRGF0YVRpbWVvdXQiLCJzSWNvbiIsIm9NZXNzYWdlcyIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJvUmVzb3VyY2VCdW5kbGUiLCJzQnV0dG9uVHlwZSIsIkJ1dHRvblR5cGUiLCJEZWZhdWx0IiwibWVzc2FnZUtleSIsIm1lc3NhZ2VUZXh0IiwidG9TdHJpbmciLCJNZXNzYWdlVHlwZSIsIk5lZ2F0aXZlIiwiQ3JpdGljYWwiLCJOZXV0cmFsIiwidG90YWxOdW1iZXJPZk1lc3NhZ2VzIiwic2V0VGV4dCIsIm1lc3NhZ2VDb3VudCIsIm1lc3NhZ2VLZXlzIiwic2luZ2xlVG9vbHRpcEtleSIsIm11bHRpcGxlVG9vbHRpcEtleSIsImVudHJpZXMiLCJtZXNzYWdlVHlwZSIsIm1lc3NhZ2VUeXBlQ291bnQiLCJNRVNTQUdFQlVUVE9OX1NIT1JUQ1VUIiwidG9vbFRpcCIsInNldFRvb2x0aXAiLCJzZXRJY29uIiwic2V0VHlwZSIsIm9QYWdlUmVhZHkiLCJnZXRDb250cm9sbGVyIiwicGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsIm5hdmlnYXRlQmFjayIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9JdGVtIiwiZ2V0UGFyYW1ldGVyIiwib01lc3NhZ2UiLCJiSXNCYWNrZW5kTWVzc2FnZSIsInNTZWN0aW9uVGl0bGUiLCJfZGVmYXVsdEZvY3VzIiwibWRjVGFibGUiLCJmb2N1c0luZm8iLCJwcmV2ZW50U2Nyb2xsIiwidGFyZ2V0SW5mbyIsImZvY3VzIiwic3ViU2VjdGlvbnMiLCJ2aXNpYmxlU2VjdGlvbnMiLCJjb250cm9scyIsIm9UYXJnZXRNZGNUYWJsZSIsImNvbnRyb2xJZHMiLCJjb250cm9sSWQiLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsInJlZHVjZSIsImFjYyIsInZhbCIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZSIsIm9SZWZFcnJvckNvbnRleHQiLCJvUmVmRXJyb3IiLCJfc2V0Rm9jdXNPblRhcmdldEZpZWxkIiwidGFyZ2V0TWRjVGFibGUiLCJpUm93SW5kZXgiLCJhVGFyZ2V0TWRjVGFibGVSb3ciLCJfZ2V0TWRjVGFibGVSb3dzIiwiaUZpcnN0VmlzaWJsZVJvdyIsIl9nZXRHcmlkVGFibGUiLCJnZXRGaXJzdFZpc2libGVSb3ciLCJvVGFyZ2V0Um93Iiwib1RhcmdldENlbGwiLCJnZXRUYXJnZXRDZWxsIiwic2V0Rm9jdXNUb0NvbnRyb2wiLCJlcnJvclByb3BlcnR5UGF0aCIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c09uVGFyZ2V0RmllbGQiLCJmb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwic2VjdGlvbldpdGhUaGVDb250cm9sIiwiZmluZCIsIl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSIsImhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uIiwiZ2V0Q29udHJvbElkcyIsImZpbmRTdWJTZWN0aW9uIiwic2V0TW9kZSIsImdyb3VwTmFtZXMiLCJmaW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2wiLCJ0aXRsZSIsImdldFRpdGxlIiwic29tZSIsInRhcmdldFJvdyIsImhhc05vbkVkaXRhYmxlRmllbGQiLCJnZXRFZGl0YWJsZSIsImlzQ29udHJvbEluVGFibGUiLCJlbGVtIiwiYUFsbFZpZXdFbGVtZW50cyIsImFFcnJvbmVvdXNDb250cm9scyIsImdldERvbVJlZiIsImFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzIiwiQ29sdW1uTGlzdEl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvVGFyZ2V0RmllbGQiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRNZXNzYWdlUmFuayIsImFFbGVtZW50cyIsImFBbGxFbGVtZW50cyIsInNlY3Rpb25SYW5rIiwiX2ZuRmlsdGVyVXBvbklkIiwiZ2V0Q29udHJvbElkIiwiZ2V0VmlzaWJsZSIsImhhc093blByb3BlcnR5Iiwic2VjdGlvbk5hbWUiLCJzdWJTZWN0aW9uTmFtZSIsImdldFBlcnNpc3RlbnQiLCJfZmlsdGVyT3V0TWVzc2FnZXNJbkRpYWxvZyIsImZuVGVzdCIsImFDb250cm9sSWRzIiwiaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2ciLCJGaWx0ZXIiLCJwYXRoIiwiY2FzZVNlbnNpdGl2ZSIsIl9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiYm91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24iLCJnZXRJZHNPZkZpZWxzZFdpdGhFcnJvclZhbGlkYXRpb24iLCJ2YWxpZGF0aW9uIiwibWF0Y2giLCJmaWx0ZXJzIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiYW5kIiwib1ZhbGlkYXRpb25GaWx0ZXJzIiwiaGlkZGVuRHJhZnRGaWx0ZXIiLCJvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIiLCJvRmlsdGVycyIsInNQYXRoIiwib1NvcnRlciIsIm9EaWFsb2dGaWx0ZXIiLCJvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMiLCJhVXNlckRlZmluZWRGaWx0ZXIiLCJhQ3VzdG9tRmlsdGVycyIsInZhbHVlMiIsIm9CaW5kaW5nQ29udGV4dCIsIm1lc3NhZ2VCdXR0b25IZWxwZXIiLCJnZXRDaGVja0NvbnRyb2xJblZpZXdGaWx0ZXIiLCJvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzIiwiZmlsdGVyQXJyYXkiLCJ2aWV3Q29udGV4dCIsImVkaXRGbG93IiwiZ2V0Um9vdENvbnRleHQiLCJnZXRIaWRkZW5EcmFmdFVzZUNhc2VGaWx0ZXIiLCJ2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIiLCJTdGFydHNXaXRoIiwib1ZhbGlkYXRpb25Db250ZXh0RGlhbG9nRmlsdGVycyIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJyYW5rQiIsInNvcnQiLCJfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwic1NlbGVjdGVkU2VjdGlvbklkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib1RhYmxlQ29udGV4dCIsIm9PUENvbnRleHQiLCJiU2hvdWxkV2FpdEZvclRhYmxlUmVmcmVzaCIsIm9FbGVtZW50Iiwib1BhcmVudEVsZW1lbnQiLCJvTWRjVGFibGUiLCJvVGFibGVSb3ciLCJnZXRUYWJsZSIsImZpbmRJbmRleCIsImdldFRhcmdldENlbGxJbmRleCIsImVsdCIsImdldENlbGxzIiwiY2VsbCIsImdldFRhcmdldENvbHVtbkluZGV4IiwidGFyZ2V0RWxlbWVudCIsInRhcmdldENlbGxJbmRleCIsInRhcmdldENlbGxJZCIsInRhYmxlQ29sdW1ucyIsImNvbHVtbiIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJzZWFyY2giLCJjb21wb25lbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJuYXZPYmplY3QiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldE5hdmlnYXRpb24iLCJzdWJPUENvbmZpZ3VyZWQiLCJuYXZDb25maWd1cmVkIiwiZGV0YWlsIiwicm91dGUiLCJnZXRSb3dTZXR0aW5ncyIsImdldFJvd0FjdGlvbnMiLCJtZXNzYWdlUG9wb3ZlciIsImZuRm9jdXMiLCJpc09wZW4iLCJmbk9uQ2xvc2UiLCJkZXRhY2hFdmVudCIsImF0dGFjaEV2ZW50IiwiY2xvc2UiLCJ3YXJuaW5nIiwiZXNjYXBlIiwiU3RyaW5nIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlQnV0dG9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRhcmdldFRhYmxlSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyB0eXBlIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VGaWx0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUZpbHRlclwiO1xuaW1wb3J0IE1lc3NhZ2VQb3BvdmVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21lc3NhZ2VzL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbHVtblByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgJEJ1dHRvblNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ29sdW1uTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0NvbHVtbkxpc3RJdGVtXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IHR5cGUgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBSZXNwb25zaXZlVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvcmVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBtZGNGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRlbnQgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgUm93IGZyb20gXCJzYXAvdWkvdGFibGUvUm93XCI7XG5pbXBvcnQgdHlwZSBVSVRhYmxlIGZyb20gXCJzYXAvdWkvdGFibGUvVGFibGVcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb24gZnJvbSBcIi4uL2NvbnRyb2xzL3NlY3Rpb24vU3ViU2VjdGlvblwiO1xuaW1wb3J0IG1lc3NhZ2VCdXR0b25IZWxwZXIgZnJvbSBcIi4vTWVzc2FnZUJ1dHRvbkhlbHBlclwiO1xuXG50eXBlIE1lc3NhZ2VDb3VudCA9IHtcblx0RXJyb3I6IG51bWJlcjtcblx0V2FybmluZzogbnVtYmVyO1xuXHRTdWNjZXNzOiBudW1iZXI7XG5cdEluZm9ybWF0aW9uOiBudW1iZXI7XG59O1xuXG50eXBlICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MgPSAkQnV0dG9uU2V0dGluZ3MgJiB7XG5cdG1lc3NhZ2VDaGFuZ2U6IEZ1bmN0aW9uO1xufTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlcy5NZXNzYWdlQnV0dG9uXCIpXG5jbGFzcyBNZXNzYWdlQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcblx0Y29uc3RydWN0b3IoaWQ/OiBzdHJpbmcgfCAkTWVzc2FnZUJ1dHRvblNldHRpbmdzLCBzZXR0aW5ncz86ICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN1cGVyKGlkLCBzZXR0aW5ncyk7XG5cdH1cblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MubWVzc2FnZXMuTWVzc2FnZUZpbHRlclwiLCBtdWx0aXBsZTogdHJ1ZSwgc2luZ3VsYXJOYW1lOiBcImN1c3RvbUZpbHRlclwiIH0pXG5cdGN1c3RvbUZpbHRlcnMhOiBNZXNzYWdlRmlsdGVyO1xuXG5cdEBldmVudCgpXG5cdG1lc3NhZ2VDaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHRwdWJsaWMgb01lc3NhZ2VQb3BvdmVyITogTWVzc2FnZVBvcG92ZXI7XG5cblx0cHVibGljIG9JdGVtQmluZGluZyE6IE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNHZW5lcmFsR3JvdXBUZXh0ID0gXCJcIjtcblxuXHRwcml2YXRlIF9zZXRNZXNzYWdlRGF0YVRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNWaWV3SWQgPSBcIlwiO1xuXG5cdHByaXZhdGUgc0xhc3RBY3Rpb25UZXh0ID0gXCJcIjtcblxuXHRwdWJsaWMgaXNIaWRkZW5EcmFmdEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRCdXR0b24ucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyk7XG5cdFx0dGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA9IChcblx0XHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0XG5cdFx0KT8uZW5hYmxlZDtcblx0XHQvL3ByZXNzIGV2ZW50IGhhbmRsZXIgYXR0YWNoZWQgdG8gb3BlbiB0aGUgbWVzc2FnZSBwb3BvdmVyXG5cdFx0dGhpcy5hdHRhY2hQcmVzcyh0aGlzLmhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MsIHRoaXMpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyID0gbmV3IE1lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHR0aGlzLm9JdGVtQmluZGluZy5hdHRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdGNvbnN0IG1lc3NhZ2VCdXR0b25JZCA9IHRoaXMuZ2V0SWQoKTtcblx0XHRpZiAobWVzc2FnZUJ1dHRvbklkKSB7XG5cdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5hZGRDdXN0b21EYXRhKG5ldyBDdXN0b21EYXRhKHsga2V5OiBcIm1lc3NhZ2VCdXR0b25JZFwiLCB2YWx1ZTogbWVzc2FnZUJ1dHRvbklkIH0pKTsgLy8gVE9ETyBjaGVjayBmb3IgY3VzdG9tIGRhdGEgdHlwZVxuXHRcdH1cblx0XHR0aGlzLmF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSh0aGlzLl9hcHBseUZpbHRlcnNBbmRTb3J0LmJpbmQodGhpcykpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmF0dGFjaEFjdGl2ZVRpdGxlUHJlc3ModGhpcy5fYWN0aXZlVGl0bGVQcmVzcy5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgTWVzc2FnZUJ1dHRvbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0V2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZVBvcG92ZXJQcmVzcyhvRXZlbnQ6IENvcmVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnRvZ2dsZShvRXZlbnQuZ2V0U291cmNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBncm91cHMgdGhlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gdGhleSBiZWxvbmcgdG8uXG5cdCAqIFRoaXMgbWV0aG9kIGZvcmNlIHRoZSBsb2FkaW5nIG9mIGNvbnRleHRzIGZvciBhbGwgdGFibGVzIGJlZm9yZSB0byBhcHBseSB0aGUgZ3JvdXBpbmcuXG5cdCAqIEBwYXJhbSBvVmlldyBDdXJyZW50IHZpZXcuXG5cdCAqIEByZXR1cm5zIFJldHVybiBwcm9taXNlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldzogRkVWaWV3KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYVdhaXRGb3JEYXRhOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRjb25zdCBvVmlld0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzID0gKHZpZXc6IFZpZXcpOiB7IHRhYmxlOiBNRENUYWJsZTsgc3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfVtdID0+IHtcblx0XHRcdGNvbnN0IG9SZXM6IHsgdGFibGU6IE1EQ1RhYmxlOyBzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9W10gPSBbXTtcblx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub0l0ZW1CaW5kaW5nLmdldENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBvVmlld0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRpZiAob1ZpZXdDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlOiBDb250cm9sID0gdmlldy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvT2JqZWN0UGFnZSkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQuZ2V0UGF0aCgpfS8ke29FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNZXNzYWdlc1tpXS50YXJnZXQuaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUmVzLnB1c2goeyB0YWJsZTogb0VsZW0sIHN1YnNlY3Rpb246IG9TdWJTZWN0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1Jlcztcblx0XHR9O1xuXHRcdC8vIFNlYXJjaCBmb3IgdGFibGUgcmVsYXRlZCB0byBNZXNzYWdlcyBhbmQgaW5pdGlhbGl6ZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYXJlbnQgc3Vic2VjdGlvbiB0byByZXRyaWV2ZSB0aGUgZGF0YVxuXHRcdGNvbnN0IG9UYWJsZXMgPSBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzLmJpbmQodGhpcykob1ZpZXcpO1xuXHRcdG9UYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAoX29UYWJsZSkge1xuXHRcdFx0Y29uc3Qgb01EQ1RhYmxlID0gX29UYWJsZS50YWJsZSxcblx0XHRcdFx0b1N1YnNlY3Rpb24gPSBfb1RhYmxlLnN1YnNlY3Rpb247XG5cdFx0XHRpZiAoIW9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpIHx8IG9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgIT09IG9WaWV3QmluZGluZ0NvbnRleHQ/LmdldFBhdGgoKSkge1xuXHRcdFx0XHRvU3Vic2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChvVmlld0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKCFvTURDVGFibGUuZ2V0Um93QmluZGluZygpLmlzTGVuZ3RoRmluYWwoKSkge1xuXHRcdFx0XHRcdGFXYWl0Rm9yRGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdG9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCkuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgd2FpdEZvckdyb3VwaW5nQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2FwcGx5R3JvdXBpbmcoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGFXYWl0Rm9yRGF0YSk7XG5cdFx0XHRvVmlldy5nZXRNb2RlbCgpLmNoZWNrTWVzc2FnZXMoKTtcblx0XHRcdGF3YWl0IHdhaXRGb3JHcm91cGluZ0FwcGxpZWQ7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBncm91cGluZyB0aGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2VQb3BPdmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgZ3JvdXBzIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgc2VjdGlvbiBvciBzdWJzZWN0aW9uIHRoZXkgYmVsb25nIHRvLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2FwcGx5R3JvdXBpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXQodGhpcywgdGhpcy5vT2JqZWN0UGFnZUxheW91dCk7XG5cdFx0aWYgKCF0aGlzLm9PYmplY3RQYWdlTGF5b3V0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCBzZWN0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdGNvbnN0IGVuYWJsZUJpbmRpbmcgPSB0aGlzLl9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXMsIGZhbHNlKTtcblx0XHRpZiAoZW5hYmxlQmluZGluZykge1xuXHRcdFx0dGhpcy5fZm5FbmFibGVCaW5kaW5ncyhzZWN0aW9uKTtcblx0XHR9XG5cdFx0Ly9DbGVhciBtZXNzYWdlVGFyZ2V0UHJvcGVydHlcblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKTtcblx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKTtcblx0XHRjb25zdCB1SU1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0dUlNb2RlbD8uc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aFwiLCB1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSByZWZFcnJvciBvYmplY3QuXG5cdCAqIFRoZSByZWZFcnJvciBjb250YWlucyBhIG1hcCB0byBzdG9yZSB0aGUgaW5kZXhlcyBvZiB0aGUgcm93cyB3aXRoIGVycm9ycy5cblx0ICogQHBhcmFtIG9UYWJsZSBUaGUgdGFibGUgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZ2V0IHRoZSByZWZFcnJvciBPYmplY3QuXG5cdCAqIEByZXR1cm5zIENvbnRleHQgb2YgdGhlIHJlZkVycm9yLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KG9UYWJsZTogTURDVGFibGUpOiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb1RhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vaW5pdGlhbGl6ZSB0aGUgcmVmRXJyb3IgcHJvcGVydHkgaWYgaXQgZG9lc24ndCBleGlzdFxuXHRcdGlmICghb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwicmVmRXJyb3JcIikpIHtcblx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShcInJlZkVycm9yXCIsIHt9LCBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSEpO1xuXHRcdH1cblx0XHRjb25zdCBzUmVmRXJyb3JDb250ZXh0UGF0aCA9XG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UGF0aCgpICtcblx0XHRcdFwiL3JlZkVycm9yL1wiICtcblx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkucmVwbGFjZShcIi9cIiwgXCIkXCIpICtcblx0XHRcdFwiJFwiICtcblx0XHRcdG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpLnJlcGxhY2UoXCIvXCIsIFwiJFwiKTtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Nb2RlbC5nZXRDb250ZXh0KHNSZWZFcnJvckNvbnRleHRQYXRoKTtcblx0XHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiXCIpKSB7XG5cdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoXCJcIiwge30sIG9Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Db250ZXh0O1xuXHR9XG5cblx0X3VwZGF0ZUludGVybmFsTW9kZWwoXG5cdFx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRyb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuXHRcdHRhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZU9iamVjdDogTWVzc2FnZSxcblx0XHRpc0NyZWF0aW9uUm93PzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRsZXQgdGVtcDtcblx0XHRpZiAoaXNDcmVhdGlvblJvdykge1xuXHRcdFx0dGVtcCA9IHtcblx0XHRcdFx0cm93SW5kZXg6IFwiQ3JlYXRpb25Sb3dcIixcblx0XHRcdFx0dGFyZ2V0Q29sUHJvcGVydHk6IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPyB0YWJsZVRhcmdldENvbFByb3BlcnR5IDogXCJcIlxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcCA9IHtcblx0XHRcdFx0cm93SW5kZXg6IHRhYmxlUm93Q29udGV4dCA/IHJvd0luZGV4IDogXCJcIixcblx0XHRcdFx0dGFyZ2V0Q29sUHJvcGVydHk6IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPyB0YWJsZVRhcmdldENvbFByb3BlcnR5IDogXCJcIlxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgbW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGNvbnRleHQgPSB0aGlzLl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCh0YWJsZSk7XG5cdFx0Ly93ZSBmaXJzdCByZW1vdmUgdGhlIGVudHJpZXMgd2l0aCBvYnNvbGV0ZSBtZXNzYWdlIGlkcyBmcm9tIHRoZSBpbnRlcm5hbCBtb2RlbCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgZXJyb3IgaW5mbyA6XG5cdFx0Y29uc3QgYVZhbGlkTWVzc2FnZUlkcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRJZCgpO1xuXHRcdFx0fSk7XG5cdFx0bGV0IGFPYnNvbGV0ZU1lc3NhZ2VsSWRzO1xuXHRcdGlmIChjb250ZXh0Py5nZXRQcm9wZXJ0eShcIlwiKSkge1xuXHRcdFx0YU9ic29sZXRlTWVzc2FnZWxJZHMgPSBPYmplY3Qua2V5cyhjb250ZXh0Py5nZXRQcm9wZXJ0eShcIlwiKSkuZmlsdGVyKGZ1bmN0aW9uIChpbnRlcm5hbE1lc3NhZ2VJZCkge1xuXHRcdFx0XHRyZXR1cm4gYVZhbGlkTWVzc2FnZUlkcy5pbmRleE9mKGludGVybmFsTWVzc2FnZUlkKSA9PT0gLTE7XG5cdFx0XHR9KTtcblx0XHRcdGFPYnNvbGV0ZU1lc3NhZ2VsSWRzLmZvckVhY2goZnVuY3Rpb24gKG9ic29sZXRlSWQpIHtcblx0XHRcdFx0ZGVsZXRlIGNvbnRleHQ/LmdldFByb3BlcnR5KFwiXCIpW29ic29sZXRlSWRdO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdG1vZGVsPy5zZXRQcm9wZXJ0eShcblx0XHRcdG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSxcblx0XHRcdE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQ/LmdldFByb3BlcnR5KG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSkgPyBjb250ZXh0LmdldFByb3BlcnR5KG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSkgOiB7fSwgdGVtcCksXG5cdFx0XHRjb250ZXh0XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgc2V0cyBncm91cHMgZm9yIHRyYW5zaWVudCBtZXNzYWdlcy5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIHRyYW5zaWVudCBtZXNzYWdlIGZvciB3aGljaCB3ZSB3YW50IHRvIGNvbXB1dGUgYW5kIHNldCBncm91cC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBhY3Rpb24gbmFtZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9zZXRHcm91cExhYmVsRm9yVHJhbnNpZW50TXNnKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5zTGFzdEFjdGlvblRleHQgPSB0aGlzLnNMYXN0QWN0aW9uVGV4dFxuXHRcdFx0PyB0aGlzLnNMYXN0QWN0aW9uVGV4dFxuXHRcdFx0OiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cblx0XHRtZXNzYWdlLnNldEdyb3VwTmFtZShgJHt0aGlzLnNMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IGdyb3VwcyBtZXNzYWdlcyBhbmQgYWRkcyB0aGUgc3VidGl0bGUuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHdlIHVzZSB0byBjb21wdXRlIHRoZSBncm91cCBhbmQgc3VidGl0bGUuXG5cdCAqIEBwYXJhbSBzZWN0aW9uIFRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGNvbnRyb2xzLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbiBUaGUgc3Vic2VjdGlvbiBjb250YWluaW5nIHRoZSBjb250cm9scy5cblx0ICogQHBhcmFtIGVsZW1lbnRzIExpc3Qgb2YgY29udHJvbHMgZnJvbSBhIHN1YnNlY3Rpb24gcmVsYXRlZCB0byBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIFRydWUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc3Vic2VjdGlvbiBpbiB0aGUgc2VjdGlvbi5cblx0ICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIGFjdGlvbiBuYW1lLCBpZiBhbnkuXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSB0aGUgbWVzc2FnZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUoXG5cdFx0bWVzc2FnZTogTWVzc2FnZUl0ZW0sXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0ZWxlbWVudHM6IFVJNUVsZW1lbnRbXSxcblx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdGFjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChzZWN0aW9uKTtcblx0XHR0aGlzLm9JdGVtQmluZGluZy5kZXRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCkgYXMgTWVzc2FnZTtcblx0XHRjb25zdCBzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdGxldCBlbGVtZW50OiBVSTVFbGVtZW50LFxuXHRcdFx0dGFibGU6IE1EQ1RhYmxlIHwgdW5kZWZpbmVkLFxuXHRcdFx0dGFyZ2V0VGFibGVJbmZvID0ge30gYXMgVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRcdGwsXG5cdFx0XHRyb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuXHRcdFx0dGFyZ2V0ZWRDb250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdFx0aXNDcmVhdGlvblJvdzogYm9vbGVhbjtcblx0XHRjb25zdCBpc0JhY2tFbmRNZXNzYWdlID0gbmV3IFJlZ0V4cChcIl4vXCIpLnRlc3QobWVzc2FnZU9iamVjdD8uZ2V0VGFyZ2V0cygpWzBdKTtcblx0XHRpZiAoaXNCYWNrRW5kTWVzc2FnZSkge1xuXHRcdFx0Zm9yIChsID0gMDsgbCA8IGVsZW1lbnRzLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50c1tsXTtcblx0XHRcdFx0dGFyZ2V0ZWRDb250cm9sID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKGVsZW1lbnQuaXNBKFwic2FwLm0uVGFibGVcIikgfHwgKGVsZW1lbnQgYXMgVUk1RWxlbWVudCkuaXNBKFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0dGFibGUgPSBlbGVtZW50LmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdFx0XHRcdGNvbnN0IHJvd0JpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0Y29uc3QgZm5DYWxsYmFja1NldEdyb3VwTmFtZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3NldEdyb3VwTGFiZWxGb3JUcmFuc2llbnRNc2cobWVzc2FnZSwgYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAocm93QmluZGluZyAmJiByb3dCaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU9iamVjdCxcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHJvd0JpbmRpbmcsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCxcblx0XHRcdFx0XHRcdFx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mbyA9IG9iai5vVGFyZ2V0VGFibGVJbmZvO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5zdWJUaXRsZSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLnNldFN1YnRpdGxlKG9iai5zdWJUaXRsZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoXG5cdFx0XHRcdFx0XHRcdCEhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgJiZcblx0XHRcdFx0XHRcdFx0XHQhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQ/LmlzSW5hY3RpdmUoKSAmJiAvLyBjaGVjayBpZiB0aGUgcm93Y29udGV4dCBpcyBhY3RpdmVcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkgIT09XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0UHJvcGVydHkoXCJ0YXJnZXRcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpIC8vIGNoZWNrIGlmIHRoZSB0YXJnZXQgb2YgdGhlIG1lc3NhZ2UgaXMgbm90IHRoZSByb3cgaXRzZWxmIChyZW1vdmUgdGhlIGxhc3QgLyBpZiBwcmVzZW50cylcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCAmJiAhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQuaXNJbmFjdGl2ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2Zvcm1hdE1lc3NhZ2VEZXNjcmlwdGlvbihcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHRhYmxlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyb3dJbmRleCA9IHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ICYmIHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnRlcm5hbE1vZGVsKFxuXHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0cm93SW5kZXgsXG5cdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VPYmplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cblx0XHRcdFx0XHRpZiAobWVzc2FnZS5nZXRTdWJ0aXRsZSgpID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRsZXQgZm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0bGV0IHBhcmVudCA9IHRhcmdldGVkQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRcdHdoaWxlIChwYXJlbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQuaXNBPEZvcm1FbGVtZW50PihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50ID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGZvcm1FbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybUVsZW1lbnQuZ2V0TGFiZWwoKTtcblx0XHRcdFx0XHRcdFx0bGV0IGxhYmVsVGV4dCA9IFwiXCI7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBsYWJlbCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsVGV4dCA9IGxhYmVsO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsVGV4dCA9IChsYWJlbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0U3VidGl0bGUobGFiZWxUZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvL2NoZWNrIGlmIHRoZSB0YXJnZXRlZCBjb250cm9sIGlzIGEgY2hpbGQgb2Ygb25lIG9mIHRoZSBvdGhlciBjb250cm9sc1xuXHRcdFx0XHRcdGNvbnN0IGlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuID0gbWVzc2FnZUhhbmRsaW5nLmJJc09ycGhhbkVsZW1lbnQodGFyZ2V0ZWRDb250cm9sLCBlbGVtZW50cyk7XG5cdFx0XHRcdFx0aWYgKGlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9UaGVyZSBpcyBvbmx5IG9uZSBlbHQgYXMgdGhpcyBpcyBhIGZyb250RW5kIG1lc3NhZ2Vcblx0XHRcdHRhcmdldGVkQ29udHJvbCA9IGVsZW1lbnRzWzBdO1xuXHRcdFx0dGFibGUgPSB0aGlzLl9nZXRNZGNUYWJsZSh0YXJnZXRlZENvbnRyb2wpO1xuXHRcdFx0dGFyZ2V0VGFibGVJbmZvID0ge30gYXMgVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0XHRcdGlmICh0YWJsZSkge1xuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSB0YWJsZS5nZXRIZWFkZXIoKTtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0Q29sdW1uSW5kZXggPSB0aGlzLl9nZXRUYWJsZUNvbHVtbkluZGV4KHRhcmdldGVkQ29udHJvbCk7XG5cdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0dGFyZ2V0Q29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRDb2x1bW5JbmRleCA+IC0xXG5cdFx0XHRcdFx0XHQ/IHRhYmxlLmdldENvbHVtbnMoKVt0YXJnZXRDb2x1bW5JbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUgPVxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSAmJiB0YXJnZXRDb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldENvbHVtbkluZGV4ID4gLTFcblx0XHRcdFx0XHRcdD8gdGFibGUuZ2V0Q29sdW1ucygpW3RhcmdldENvbHVtbkluZGV4XS5nZXRIZWFkZXIoKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlzQ3JlYXRpb25Sb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyh0YXJnZXRlZENvbnRyb2wpPy5pc0E8Q3JlYXRpb25Sb3c+KFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpID8/IGZhbHNlO1xuXHRcdFx0XHRpZiAoIWlzQ3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0XHRyb3dJbmRleCA9IHRoaXMuX2dldFRhYmxlUm93SW5kZXgodGFyZ2V0ZWRDb250cm9sKTtcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gdGFibGUuZ2V0Um93QmluZGluZygpLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ID1cblx0XHRcdFx0XHRcdHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzW3Jvd0luZGV4XSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtZXNzYWdlU3VidGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdFx0XHRcdG1lc3NhZ2VPYmplY3QsXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRpc0NyZWF0aW9uUm93LFxuXHRcdFx0XHRcdHRhcmdldENvbHVtbkluZGV4ID09PSAwICYmICh0YXJnZXRlZENvbnRyb2wgYXMgbWRjRmllbGQpLmdldFZhbHVlU3RhdGUoKSA9PT0gXCJFcnJvclwiXG5cdFx0XHRcdFx0XHQ/ICh0YXJnZXRlZENvbnRyb2wgYXMgQ29udHJvbClcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vc2V0IHRoZSBzdWJ0aXRsZVxuXHRcdFx0XHRpZiAobWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRTdWJ0aXRsZShtZXNzYWdlU3VidGl0bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoISF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCk7XG5cdFx0XHRcdGlmICh0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX2Zvcm1hdE1lc3NhZ2VEZXNjcmlwdGlvbihtZXNzYWdlLCB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCwgdGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsIHRhYmxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl91cGRhdGVJbnRlcm5hbE1vZGVsKFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHJvd0luZGV4LFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRtZXNzYWdlT2JqZWN0LFxuXHRcdFx0XHRcdGlzQ3JlYXRpb25Sb3dcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc2V0U2VjdGlvbk5hbWVJbkdyb3VwKSB7XG5cdFx0XHRjb25zdCBpbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0aGlzLl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmcoc2VjdGlvbiwgc3ViU2VjdGlvbiwgaGFzTXVsdGlwbGVTdWJTZWN0aW9ucyk7XG5cdFx0XHRjb25zdCBzZWN0aW9uQmFzZWRHcm91cE5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0c3ViU2VjdGlvbixcblx0XHRcdFx0aGFzTXVsdGlwbGVTdWJTZWN0aW9ucyxcblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRpbmNsdWRlVGFibGVHcm91cE5hbWVcblx0XHRcdCk7XG5cblx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHNlY3Rpb25CYXNlZEdyb3VwTmFtZSk7XG5cdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKSBhcyBzdHJpbmcpO1xuXHRcdFx0Y29uc3Qgdmlld0NvbnRleHRQYXRoID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSA9IG1lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdPy5zcGxpdChcIi9cIikucG9wKCk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aCA9IGludGVybmFsTW9kZWw/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5Q29udGV4dFBhdGggPSBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aD8uc3Vic3RyaW5nKFxuXHRcdFx0XHQwLFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIilcblx0XHRcdCk7XG5cdFx0XHQvLyBhY3RpdmVUaXRsZVByZXNzIHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZCBpbiBmb3J3YXJkIG5hdmlnYXRpb24gYW5kIG5vdCBpbiBiYWNrIG5hdmlnYXRpb25cblx0XHRcdGlmIChcblx0XHRcdFx0aW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoICYmXG5cdFx0XHRcdG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eU5hbWUgJiZcblx0XHRcdFx0dmlld0NvbnRleHRQYXRoICYmXG5cdFx0XHRcdG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eU5hbWUgPT09IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5wb3AoKSAmJlxuXHRcdFx0XHR2aWV3Q29udGV4dFBhdGgubGVuZ3RoID49IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlDb250ZXh0UGF0aC5sZW5ndGggJiZcblx0XHRcdFx0dmlld0NvbnRleHRQYXRoLnN0YXJ0c1dpdGgoaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmZpcmVBY3RpdmVUaXRsZVByZXNzKHsgaXRlbTogbWVzc2FnZSB9KTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX3NldE1lc3NhZ2VEYXRhLCB0aGlzKTtcblx0XHRyZXR1cm4gdGFyZ2V0ZWRDb250cm9sO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdG8gY2hlY2sgaWYgdGhlIHNlY3Rpb24gYW5kIHN1YnNlY3Rpb24gaGFzIHNpbmdsZSB0YWJsZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBPYmplY3RQYWdlIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdFBhZ2Ugc3ViIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIFRydWUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc3Vic2VjdGlvbiBpbiB0aGUgc2VjdGlvbi5cblx0ICogQHJldHVybnMgUmV0dXJucyBib29sZWFuIHZhbHVlIGZvciB0aGUgc2luZ2xlIGNvbnRyb2wgaW5zaWRlIHRoZSBzZWN0aW9uLCBieSBkZWZhdWx0IGl0IGlzIHRydWUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfY2hlY2tNZXJnZUxvZ2ljRm9yTWVzc2FnZUdyb3VwaW5nKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSk7XG5cdFx0Y29uc3QgdmlldyA9IHZpZXdJZCA/IChVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCkgYXMgVmlldykgOiB1bmRlZmluZWQ7XG5cdFx0bGV0IGJJbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGNvbnN0IHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQgPVxuXHRcdFx0IWhhc011bHRpcGxlU3ViU2VjdGlvbnMgJiYgKHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpPy5zZWN0aW9uTGF5b3V0ID09PSBcIlBhZ2VcIjtcblx0XHRjb25zdCBtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCA9XG5cdFx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zICYmICh2aWV3Py5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKT8uc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdFx0aWYgKHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQpIHtcblx0XHRcdGNvbnN0IGJsb2NrID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBibG9jay5sZW5ndGggPT09IDEgPyAoYmxvY2tbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3QpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGNvbnRlbnQ/LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobXVsdGlTdWJzZWN0aW9uSW5UYWJMYXlvdXQpIHtcblx0XHRcdGxldCBjb250ZW50O1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdC8vIEluIGNhc2Ugb2YgUmVmZXJlbmNlIEZhY2V0LCB0aGUgZmlyc3QgYmxvY2sgd2lsbCBiZSBTdWJTZWN0aW9uQmxvY2tcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxICYmIGJsb2Nrc1swXT8uaXNBPFN1YlNlY3Rpb25CbG9jaz4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHRcdGNvbnRlbnQgPSBibG9ja3NbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3Q7XG5cdFx0XHRcdGlmIChjb250ZW50Py5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29udGVudCA9XG5cdFx0XHRcdFx0XHQoY29udGVudCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcblx0XHRcdFx0XHRcdChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmdldE1haW5Db250ZW50KCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGggPT09IDEgJiYgY29udGVudFswXT8uaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYkluY2x1ZGVUYWJsZUdyb3VwTmFtZTtcblx0fVxuXG5cdF9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10sIGVuYWJsZUJpbmRpbmc/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuXHRcdGxldCBzZWN0aW9uLCBhU3ViU2VjdGlvbnMsIG1lc3NhZ2UsIGksIGosIGs7XG5cdFx0dGhpcy5zR2VuZXJhbEdyb3VwVGV4dCA9IHRoaXMuc0dlbmVyYWxHcm91cFRleHRcblx0XHRcdD8gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dFxuXHRcdFx0OiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHQvL0dldCBhbGwgc2VjdGlvbnMgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0Y29uc3QgYVZpc2libGVTZWN0aW9ucyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISk7XG5cdFx0aWYgKGFWaXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB2aWV3SWQgPyAoVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQpIGFzIFZpZXcpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzQWN0aW9uTmFtZVwiKTtcblx0XHRcdGlmIChzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHQob1ZpZXc/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwic0FjdGlvbk5hbWVcIiwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIG1lc3NhZ2VzXG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcblx0XHRcdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKGogPSBhVmlzaWJsZVNlY3Rpb25zLmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG5cdFx0XHRcdFx0bGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB2aXNpYmxlIHNlY3Rpb25zXG5cdFx0XHRcdFx0c2VjdGlvbiA9IGFWaXNpYmxlU2VjdGlvbnNbal07XG5cdFx0XHRcdFx0YVN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzdWItc2VjdGlvbnNcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNba107XG5cdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNHZW5lcmFsR3JvdXBUZXh0ID0gdGhpcy5fZ2V0R2VuZXJhbEdyb3VwVGV4dChvVmlldywgb01lc3NhZ2VPYmplY3QpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gbWVzc2FnZUhhbmRsaW5nLmdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChhQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0ZWRDb250cm9sID0gdGhpcy5fY29tcHV0ZU1lc3NhZ2VHcm91cEFuZFN1YlRpdGxlKFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRzdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250cm9scyxcblx0XHRcdFx0XHRcdFx0XHRhU3ViU2VjdGlvbnMubGVuZ3RoID4gMSxcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHdlIGZvdW5kIHRhYmxlIHRoYXQgbWF0Y2hlcyB3aXRoIHRoZSBtZXNzYWdlLCB3ZSBkb24ndCBzdG9wIHRoZSBsb29wXG5cdFx0XHRcdFx0XHRcdC8vIGluIGNhc2Ugd2UgZmluZCBhbiBhZGRpdGlvbmFsIGNvbnRyb2wgKGVnIG1kYyBmaWVsZCkgdGhhdCBhbHNvIG1hdGNoIHdpdGggdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRlZENvbnRyb2wgJiZcblx0XHRcdFx0XHRcdFx0XHQhb1RhcmdldGVkQ29udHJvbC5pc0EoXCJzYXAubS5UYWJsZVwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEob1RhcmdldGVkQ29udHJvbCBhcyBVSTVFbGVtZW50KS5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkQnJlYWsgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzaG91bGRCcmVhaykge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob01lc3NhZ2VPYmplY3QucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHRoaXMuc0dlbmVyYWxHcm91cFRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWVuYWJsZUJpbmRpbmcgJiYgbWVzc2FnZS5nZXRHcm91cE5hbWUoKSA9PT0gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dCAmJiB0aGlzLl9maW5kVGFyZ2V0Rm9yTWVzc2FnZShtZXNzYWdlKSkge1xuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIHNlY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdmlldyBwb3J0XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL0ZldGNoZXMgdGhlIGdyb3VwIG5hbWUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gZW5hYmxlZG1lbnQgb2YgaGlkZGVuIGRyYWZ0IGFuZCBwYWdlIHdoZXJlIGVycm9yIGlzIHByZXNlbnQoY3VycmVudCBwYWdlL290aGVyIHBhZ2UpXG5cdF9nZXRHZW5lcmFsR3JvdXBUZXh0KG9WaWV3OiBWaWV3IHwgdW5kZWZpbmVkLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgdmlld1BhdGggPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXRQYXRoID0gb01lc3NhZ2VPYmplY3Q/LmdldFRhcmdldHMoKVswXTtcblx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCAmJiB2aWV3UGF0aCAmJiAhbWVzc2FnZVRhcmdldFBhdGguaW5jbHVkZXModmlld1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX09USEVSX1BBR0VTXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRUYXJnZXRGb3JNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpICYmIG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKTtcblx0XHRpZiAobWVzc2FnZU9iamVjdCAmJiBtZXNzYWdlT2JqZWN0LnRhcmdldCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMub09iamVjdFBhZ2VMYXlvdXQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRjb250ZXh0UGF0aCA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChtZXNzYWdlT2JqZWN0LnRhcmdldCksXG5cdFx0XHRcdG9Db250ZXh0UGF0aE1ldGFkYXRhID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRpZiAob0NvbnRleHRQYXRoTWV0YWRhdGEgJiYgb0NvbnRleHRQYXRoTWV0YWRhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBiaW5kaW5ncyBvZiBzdWIgc2VjdGlvbiBjb250ZW50IChibG9ja3MsIG1vcmUgYmxvY2tzLCBhbmQgYWN0aW9ucykuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uXG5cdCAqL1xuXHRfZm5FbmFibGVTdWJTZWN0aW9uQmluZGluZyhzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQge1xuXHRcdHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdHN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRzdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X2ZuRW5hYmxlQmluZGluZ3MoYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IG9BbGxCbG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdFx0aWYgKG9BbGxCbG9ja3MpIHtcblx0XHRcdFx0XHR0aGlzLl9mbkVuYWJsZVN1YlNlY3Rpb25CaW5kaW5nKG9TdWJTZWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRcdHRoaXMuX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZygpO1xuXHRcdFx0XHRcdChvU3ViU2VjdGlvbi5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LmdldEJpbmRpbmcoKVxuXHRcdFx0XHRcdFx0LmF0dGFjaERhdGFSZWNlaXZlZCh0aGlzLl9maW5kTWVzc2FnZUdyb3VwQWZ0ZXJSZWJpbmRpbmcuYmluZCh0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZE1lc3NhZ2VHcm91cEFmdGVyUmViaW5kaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0dGhpcy5fY2hlY2tDb250cm9sSWRJblNlY3Rpb25zKGFNZXNzYWdlcywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IHJldHJpZXZlcyB0aGUgdmlldyBJRCAoSFRNTFZpZXcvWE1MVmlldy9KU09Odmlldy9KU1ZpZXcvVGVtcGxhdGV2aWV3KSBvZiBhbnkgY29udHJvbC5cblx0ICogQHBhcmFtIHNDb250cm9sSWQgSUQgb2YgdGhlIGNvbnRyb2wgbmVlZGVkIHRvIHJldHJpZXZlIHRoZSB2aWV3IElEXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3IElEIG9mIHRoZSBjb250cm9sXG5cdCAqL1xuXHRfZ2V0Vmlld0lkKHNDb250cm9sSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHNWaWV3SWQsXG5cdFx0XHRvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGwgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykge1xuXHRcdFx0XHRzVmlld0lkID0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gc1ZpZXdJZDtcblx0fVxuXG5cdF9zZXRMb25ndGV4dFVybERlc2NyaXB0aW9uKG9EaWFnbm9zaXNUaXRsZTogRm9ybWF0dGVkVGV4dCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyKGZ1bmN0aW9uIChjb25maWc6IHtcblx0XHRcdGl0ZW06IE1lc3NhZ2VJdGVtO1xuXHRcdFx0cHJvbWlzZToge1xuXHRcdFx0XHRyZXNvbHZlOiBGdW5jdGlvbjtcblx0XHRcdFx0cmVqZWN0OiBGdW5jdGlvbjtcblx0XHRcdH07XG5cdFx0fSkge1xuXHRcdFx0Ly8gSGVyZSB3ZSBjYW4gZmV0Y2ggdGhlIGRhdGEgYW5kIGNvbmNhdGVuYXRlIGl0IHRvIHRoZSBvbGQgb25lXG5cdFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgbG9uZ3RleHRVcmwgZmV0Y2hpbmcgd2lsbCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0aW9uICh3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW91cilcblx0XHRcdC8vIEhlcmUgYXMgd2UgaGF2ZSBvdmVyd3JpdHRlbiB0aGUgZGVmYXVsdCBhc3luYyBoYW5kbGVyLCB3aGljaCBmZXRjaGVzIGFuZCByZXBsYWNlcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1cblx0XHRcdC8vIHdlIGNhbiBtYW51YWxseSBtb2RpZnkgaXQgdG8gaW5jbHVkZSB3aGF0ZXZlciBuZWVkZWQuXG5cdFx0XHRjb25zdCBzTG9uZ1RleHRVcmwgPSBjb25maWcuaXRlbS5nZXRMb25ndGV4dFVybCgpO1xuXHRcdFx0aWYgKHNMb25nVGV4dFVybCkge1xuXHRcdFx0XHRqUXVlcnkuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJHRVRcIixcblx0XHRcdFx0XHR1cmw6IHNMb25nVGV4dFVybCxcblx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRGlhZ25vc2lzVGV4dCA9IG9EaWFnbm9zaXNUaXRsZS5nZXRIdG1sVGV4dCgpICsgZGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZERlc2NyaXB0aW9uID0gY29uZmlnLml0ZW0uZ2V0RGVzY3JpcHRpb24oKSA/PyBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uZmlnLml0ZW0uc2V0RGVzY3JpcHRpb24oYCR7b2xkRGVzY3JpcHRpb259JHtzRGlhZ25vc2lzVGV4dH1gKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRXJyb3IgPSBgQSByZXF1ZXN0IGhhcyBmYWlsZWQgZm9yIGxvbmcgdGV4dCBkYXRhLiBVUkw6ICR7c0xvbmdUZXh0VXJsfWA7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlamVjdChzRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSXQgZGlzcGxheXMgdGhlIHJvdyBpbmZvcm1hdGlvbiBvZiB0aGUgZXJyb3IgZXhpc3RpbmcgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVDb2xQcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyByb3dJbmZvcm1hdGlvblxuXHQgKi9cblxuXHRwcm9jZXNzVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKHRhYmxlOiBUYWJsZSwgdGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgdGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgcm93SW5mb3JtYXRpb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdHRhYmxlLFxuXHRcdFx0dGFibGVSb3dDb250ZXh0LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGggPSB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBsYWJlbFdpdGhWYWx1ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sVmFsdWUoXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0cm93SW5mb3JtYXRpb24gKz0gYCR7bGFiZWxXaXRoVmFsdWV9YDtcblxuXHRcdHJldHVybiByb3dJbmZvcm1hdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJdCBjb21wdXRlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSByb3dJbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHJldHVybnMgY29sdW1uSW5mb1xuXHQgKi9cblxuXHRjb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlOiBNZXNzYWdlSXRlbSwgdGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJvd0luZm9ybWF0aW9uOiBzdHJpbmdbXSwgdGFibGU6IFRhYmxlKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3QgbXNnT2JqID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IGNvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtc2dPYmosIHRhYmxlKTtcblx0XHRsZXQgY29sdW1uSW5mbyA9IFwiXCI7XG5cblx0XHRpZiAodGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHQvLyBpZiBjb2x1bW4gaW4gcHJlc2VudCBpbiB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRjb2x1bW5JbmZvID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX06ICR7dGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0fSBlbHNlIGlmIChjb2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdFx0aWYgKGNvbEZyb21UYWJsZVNldHRpbmdzLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaW4gbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb25cblx0XHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvID1cblx0XHRcdFx0XHRcdHJvd0luZm9ybWF0aW9uLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0PyBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NfRVJST1JcIil9ICR7cm93SW5mb3JtYXRpb24uam9pbihcIiwgXCIpfWAgKyBcIi5cIlxuXHRcdFx0XHRcdFx0XHQ6IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0FWQUlMQUJMRV9ESUFHTk9TSVNfTVNHREVTQ19FUlJPUlwiKX1gICsgXCIuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mbyA9XG5cdFx0XHRcdFx0XHRyb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHRcdD8gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT0xVTU5fQVZBSUxBQkxFX0RJQUdOT1NJU19NU0dERVNDXCIpfSAke3Jvd0luZm9ybWF0aW9uLmpvaW4oXCIsIFwiKX1gICsgXCIuXCJcblx0XHRcdFx0XHRcdFx0OiBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NcIil9YCArIFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaXMgbm90IGluIHRhYmxlIGRlZmluaXRpb24gYnV0IGluIHBlcnNvbmFsaXphdGlvblxuXHRcdFx0XHQvL2lmIG5vIG5hdmlnYXRpb24gdG8gc3ViIG9wIHRoZW4gcmVtb3ZlIGxpbmsgdG8gZXJyb3IgZmllbGQgQkNQIDogMjI4MDE2ODg5OVxuXHRcdFx0XHRpZiAoIXRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhYmxlKSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbHVtbkluZm8gPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpfTogJHtcblx0XHRcdFx0XHRjb2xGcm9tVGFibGVTZXR0aW5ncy5sYWJlbFxuXHRcdFx0XHR9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCIpfSlgO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0IGRpc3BsYXlzIHRoZSByb3cgaW5mb3JtYXRpb24gb2YgdGhlIGVycm9yIGV4aXN0aW5nIGluIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblxuXHRfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0dGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dGFibGU6IE1EQ1RhYmxlXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCB0YWJsZUNvbFByb3BlcnR5ID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyh0YWJsZVJvd0NvbnRleHQpO1xuXG5cdFx0Y29uc3Qgcm93SW5mb3JtYXRpb246IHN0cmluZ1tdID0gW107XG5cdFx0dGFibGVDb2xQcm9wZXJ0eT8uZm9yRWFjaCgoeyBrZXksIHZpc2liaWxpdHkgfSkgPT4ge1xuXHRcdFx0cm93SW5mb3JtYXRpb24ucHVzaCh0aGlzLnByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXModGFibGUsIHRhYmxlUm93Q29udGV4dCwgW3sga2V5LCB2aXNpYmlsaXR5IH1dKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlLCB0YWJsZVRhcmdldENvbE5hbWUsIHJvd0luZm9ybWF0aW9uLCB0YWJsZSk7XG5cblx0XHRjb25zdCBmaWVsZHNBZmZlY3RlZFRpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9GSUVMRFNfQUZGRUNURURfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdGxldCBmaWVsZEFmZmVjdGVkVGV4dDogc3RyaW5nO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHJvd0luZm9ybWF0aW9uKSAmJiByb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocm93SW5mb3JtYXRpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIElmIHRoZXJl4oCZcyBvbmx5IG9uZSBjb2x1bW4gaW4gdGhlIHRhYmxlLCBkaXNwbGF5IGl0IGluIGEgc2luZ2xlIGxpbmUuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTogJHtyb3dJbmZvcm1hdGlvbn08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLCBkaXNwbGF5IHRoZW0gaW4gbXVsdGlwbGUgbGluZXMuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTo8YnI+JmVtc3A7ICR7cm93SW5mb3JtYXRpb24uam9pbihcIjxicj4mZW1zcDsgXCIpfTxicj4ke2NvbHVtbkluZm99PGJyPmA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvID09IFwiXCIgfHwgIWNvbHVtbkluZm8pIHtcblx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBgJHtmaWVsZHNBZmZlY3RlZFRpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHQpfTogJHt0YWJsZS5nZXRIZWFkZXIoKX08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpYWdub3Npc1RpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ESUFHTk9TSVNfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdC8vIGdldCB0aGUgVUkgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBjb250ZXh0IHRvIHNldCBpdCB0byBEaWFnbm9zaXMgc2VjdGlvblxuXHRcdGNvbnN0IHVJTWVzc2FnZURlc2NyaXB0aW9uID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpLmRlc2NyaXB0aW9uO1xuXHRcdC8vc2V0IHRoZSBkZXNjcmlwdGlvbiB0byB1bmRlZmluZWQgdG8gcmVzZXQgaXQgYmVsb3dcblx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKHVuZGVmaW5lZCk7XG5cdFx0bGV0IGRpYWdub3Npc1RleHQgPSBcIlwiO1xuXHRcdGxldCBtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gXCJcIjtcblx0XHRpZiAobWVzc2FnZS5nZXRMb25ndGV4dFVybCgpKSB7XG5cdFx0XHRtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gZmllbGRBZmZlY3RlZFRleHQgPyBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+YCA6IFwiXCI7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdFx0dGhpcy5fc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbihkaWFnbm9zaXNUaXRsZSk7XG5cdFx0fSBlbHNlIGlmICh1SU1lc3NhZ2VEZXNjcmlwdGlvbikge1xuXHRcdFx0ZGlhZ25vc2lzVGV4dCA9IGAke2RpYWdub3Npc1RpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7dUlNZXNzYWdlRGVzY3JpcHRpb259YDtcblx0XHRcdG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQgPSBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+JHtkaWFnbm9zaXNUZXh0fWA7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKGZpZWxkQWZmZWN0ZWRUZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gc2hvdyBpbiB0aGUgTWVzc2FnZSBCb3guXG5cdCAqL1xuXHRoYW5kbGVOb01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJtZXNzYWdlQ2hhbmdlXCIsIHtcblx0XHRcdGlNZXNzYWdlTGVuZ3RoOiAwXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgYnV0dG9uIHRleHQsIGNvdW50IGFuZCBpY29uIHByb3BlcnR5IGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogQnV0dG9uVHlwZTogIFBvc3NpYmxlIHNldHRpbmdzIGZvciB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBhcmUgJ2NyaXRpY2FsJyBhbmQgJ25lZ2F0aXZlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9zZXRNZXNzYWdlRGF0YSgpOiB2b2lkIHtcblx0XHRjbGVhclRpbWVvdXQodGhpcy5fc2V0TWVzc2FnZURhdGFUaW1lb3V0KTtcblxuXHRcdHRoaXMuX3NldE1lc3NhZ2VEYXRhVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc0ljb24gPSBcIlwiLFxuXHRcdFx0XHRvTWVzc2FnZXMgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRJdGVtcygpLFxuXHRcdFx0XHRvTWVzc2FnZUNvdW50OiBNZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9LFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdFx0XHRpTWVzc2FnZUxlbmd0aCA9IG9NZXNzYWdlcy5sZW5ndGg7XG5cdFx0XHRsZXQgc0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG1lc3NhZ2VLZXkgPSBcIlwiLFxuXHRcdFx0XHRtZXNzYWdlVGV4dCA9IFwiXCI7XG5cdFx0XHRpZiAoaU1lc3NhZ2VMZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaU1lc3NhZ2VMZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICghb01lc3NhZ2VzW2ldLmdldFR5cGUoKSB8fCBvTWVzc2FnZXNbaV0uZ2V0VHlwZSgpLnRvU3RyaW5nKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdCsrb01lc3NhZ2VDb3VudFtcIkluZm9ybWF0aW9uXCJdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQrK29NZXNzYWdlQ291bnRbb01lc3NhZ2VzW2ldLmdldFR5cGUoKSBhcyBrZXlvZiBNZXNzYWdlQ291bnRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5lZ2F0aXZlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkNyaXRpY2FsO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5ldXRyYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0b3RhbE51bWJlck9mTWVzc2FnZXMgPVxuXHRcdFx0XHRcdG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXTtcblxuXHRcdFx0XHR0aGlzLnNldFRleHQodG90YWxOdW1iZXJPZk1lc3NhZ2VzLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRsZXQgbWVzc2FnZUNvdW50ID0gMDtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZUtleXMgPSB7XG5cdFx0XHRcdFx0RXJyb3I6IHtcblx0XHRcdFx0XHRcdHNpbmdsZVRvb2x0aXBLZXk6IFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiLFxuXHRcdFx0XHRcdFx0bXVsdGlwbGVUb29sdGlwS2V5OiBcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfTVVMVElQTEVfRVJST1JfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRXYXJuaW5nOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1dBUk5JTkdfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRJbmZvcm1hdGlvbjoge1xuXHRcdFx0XHRcdFx0c2luZ2xlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIsXG5cdFx0XHRcdFx0XHRtdWx0aXBsZVRvb2x0aXBLZXk6IFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRTdWNjZXNzOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9NVUxUSVBMRV9TVUNDRVNTX1RPT0xUSVBcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXNzYWdlS2V5cykpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlVHlwZSA9IGtleSBhcyBrZXlvZiBNZXNzYWdlQ291bnQ7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVR5cGVDb3VudCA9IG9NZXNzYWdlQ291bnRbbWVzc2FnZVR5cGVdO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlVHlwZUNvdW50ID4gMSkge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUNvdW50ID0gbWVzc2FnZVR5cGVDb3VudDtcblx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSB2YWx1ZS5tdWx0aXBsZVRvb2x0aXBLZXk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlQ291bnQgPT09IDEpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VDb3VudCA9IG1lc3NhZ2VUeXBlQ291bnQ7XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gdmFsdWUuc2luZ2xlVG9vbHRpcEtleTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobWVzc2FnZUtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQobWVzc2FnZUtleSk7XG5cdFx0XHRcdFx0Y29uc3QgTUVTU0FHRUJVVFRPTl9TSE9SVENVVCA9IFwiQ3RybCtTaGlmdCtNXCI7XG5cdFx0XHRcdFx0Y29uc3QgdG9vbFRpcCA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RPT0xUSVBcIlxuXHRcdFx0XHRcdCl9OiAke21lc3NhZ2VDb3VudH0gJHttZXNzYWdlVGV4dH0gKCR7TUVTU0FHRUJVVFRPTl9TSE9SVENVVH0pYDtcblx0XHRcdFx0XHR0aGlzLnNldFRvb2x0aXAodG9vbFRpcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRJY29uKHNJY29uKTtcblx0XHRcdFx0dGhpcy5zZXRUeXBlKHNCdXR0b25UeXBlKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHRjb25zdCBvVmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zVmlld0lkKSBhcyBGRVZpZXc7XG5cdFx0XHRcdGlmIChvVmlldykge1xuXHRcdFx0XHRcdGNvbnN0IG9QYWdlUmVhZHkgPSBvVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5O1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvUGFnZVJlYWR5LndhaXRQYWdlUmVhZHkoKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldyk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJmYWlsIGdyb3VwaW5nIG1lc3NhZ2VzXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcIm1lc3NhZ2VDaGFuZ2VcIiwge1xuXHRcdFx0XHRcdFx0aU1lc3NhZ2VMZW5ndGg6IGlNZXNzYWdlTGVuZ3RoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlNZXNzYWdlTGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhhbmRsZU5vTWVzc2FnZXMoKTtcblx0XHRcdH1cblx0XHR9LCAxMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSB0aXRsZSBvZiB0aGUgbWVzc2FnZS5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gdGhlIGhhbmRsZXJcblx0ICovXG5cdGFzeW5jIF9hY3RpdmVUaXRsZVByZXNzKG9FdmVudDogTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCB0cnVlKTtcblx0XHRjb25zdCBvSXRlbSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJpdGVtXCIpLFxuXHRcdFx0b01lc3NhZ2UgPSBvSXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKSxcblx0XHRcdGJJc0JhY2tlbmRNZXNzYWdlID0gbmV3IFJlZ0V4cChcIl4vXCIpLnRlc3Qob01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdKSxcblx0XHRcdG9WaWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNWaWV3SWQpIGFzIFZpZXc7XG5cdFx0aWYgKCFvSXRlbSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgb0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsIHNTZWN0aW9uVGl0bGU7XG5cdFx0Y29uc3QgX2RlZmF1bHRGb2N1cyA9IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlLCBtZGNUYWJsZTogTURDVGFibGUpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSwgdGFyZ2V0SW5mbzogbWVzc2FnZSB9O1xuXHRcdFx0bWRjVGFibGUuZm9jdXMoZm9jdXNJbmZvKTtcblx0XHR9O1xuXG5cdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGxldCBzZWN0aW9uLCBzdWJTZWN0aW9ucywgbWVzc2FnZSwgaSwgaiwgaztcblx0XHRjb25zdCB2aXNpYmxlU2VjdGlvbnMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQodGhpcy5vT2JqZWN0UGFnZUxheW91dCEpO1xuXHRcdGlmICh2aXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRcdGZvciAoaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgbWVzc2FnZXNcblx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuXHRcdFx0XHRmb3IgKGogPSB2aXNpYmxlU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHZpc2libGUgc2VjdGlvbnNcblx0XHRcdFx0XHRzZWN0aW9uID0gdmlzaWJsZVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IGsgPj0gMDsgLS1rKSB7XG5cdFx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHN1Yi1zZWN0aW9uc1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW2tdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9scyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uLCBtZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvVGFyZ2V0TWRjVGFibGUgPSBvTWVzc2FnZS5jb250cm9sSWRzXG5cdFx0XHQubWFwKChjb250cm9sSWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sLmdldFBhcmVudCgpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyBwYXJlbnRDb250cm9sIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwYXJlbnRDb250cm9sICYmXG5cdFx0XHRcdFx0cGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmXG5cdFx0XHRcdFx0b0l0ZW0uZ2V0R3JvdXBOYW1lKCkuaW5jbHVkZXMoKHBhcmVudENvbnRyb2wgYXMgVGFibGUpLmdldEhlYWRlcigpKVxuXHRcdFx0XHRcdD8gcGFyZW50Q29udHJvbFxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhY2M6IENvbnRyb2wsIHZhbDogQ29udHJvbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsID8gdmFsIDogYWNjO1xuXHRcdFx0fSk7XG5cblx0XHQvL2NoZWNrIGlmIHRoZSBwcmVzc2VkIGl0ZW0gaXMgcmVsYXRlZCB0byBhIHRhYmxlIGNvbnRyb2xcblx0XHRpZiAob1RhcmdldE1kY1RhYmxlKSB7XG5cdFx0XHRpZiAoYklzQmFja2VuZE1lc3NhZ2UpIHtcblx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgJiYgKG9UYXJnZXRNZGNUYWJsZS5nZXRJZCgpICE9PSB0aGlzLnNWaWV3SWQgfHwgYklzR2VuZXJhbEdyb3VwTmFtZSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZChvVGFyZ2V0TWRjVGFibGUuZ2V0SWQoKSk7XG5cdFx0XHRcdFx0XHQoKFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdFx0XHRcdFx0XHRvVGFyZ2V0TWRjVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISxcblx0XHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yQ29udGV4dCA9IHRoaXMuX2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yID0gb1JlZkVycm9yQ29udGV4dD8uZ2V0UHJvcGVydHkob0l0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKS5nZXRJZCgpKTtcblx0XHRcdFx0XHRjb25zdCBfc2V0Rm9jdXNPblRhcmdldEZpZWxkID0gYXN5bmMgKHRhcmdldE1kY1RhYmxlOiBNRENUYWJsZSwgaVJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFUYXJnZXRNZGNUYWJsZVJvdyA9IHRoaXMuX2dldE1kY1RhYmxlUm93cyh0YXJnZXRNZGNUYWJsZSksXG5cdFx0XHRcdFx0XHRcdGlGaXJzdFZpc2libGVSb3cgPSB0aGlzLl9nZXRHcmlkVGFibGUodGFyZ2V0TWRjVGFibGUpPy5nZXRGaXJzdFZpc2libGVSb3coKSA/PyAwO1xuXHRcdFx0XHRcdFx0aWYgKGFUYXJnZXRNZGNUYWJsZVJvdy5sZW5ndGggPiAwICYmIGFUYXJnZXRNZGNUYWJsZVJvd1swXSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0Um93ID0gYVRhcmdldE1kY1RhYmxlUm93W2lSb3dJbmRleCAtIGlGaXJzdFZpc2libGVSb3ddLFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRDZWxsID0gdGhpcy5nZXRUYXJnZXRDZWxsKG9UYXJnZXRSb3csIG9NZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0aWYgKG9UYXJnZXRDZWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRGb2N1c1RvQ29udHJvbChvVGFyZ2V0Q2VsbCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb250cm9sIG5vdCBmb3VuZCBvbiB0YWJsZVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVycm9yUHJvcGVydHlQYXRoID0gb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0KG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIGVycm9yUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhcmdldE1kY1RhYmxlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1RhcmdldFJvdy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIkdyaWRUYWJsZVwiICYmIG9SZWZFcnJvci5yb3dJbmRleCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb1RhcmdldE1kY1RhYmxlLnNjcm9sbFRvSW5kZXgob1JlZkVycm9yLnJvd0luZGV4KTtcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPblRhcmdldEZpZWxkID0gYXdhaXQgX3NldEZvY3VzT25UYXJnZXRGaWVsZChvVGFyZ2V0TWRjVGFibGUsIG9SZWZFcnJvci5yb3dJbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvY3VzT25UYXJnZXRGaWVsZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdF9kZWZhdWx0Rm9jdXMob01lc3NhZ2UsIG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmb2N1c2luZyBvbiBlcnJvclwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiICYmIG9SZWZFcnJvcikge1xuXHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID0gYXdhaXQgdGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2woXG5cdFx0XHRcdFx0XHRcdG9WaWV3LFxuXHRcdFx0XHRcdFx0XHRvTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHRvUmVmRXJyb3Iucm93SW5kZXhcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRpZiAoZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRfZGVmYXVsdEZvY3VzKG9NZXNzYWdlLCBvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRmFpbCB0byBuYXZpZ2F0ZSB0byBFcnJvciBjb250cm9sXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob01lc3NhZ2UuY29udHJvbElkc1swXSk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vSWYgdGhlIGNvbnRyb2wgdW5kZXJseWluZyB0aGUgZnJvbnRFbmQgbWVzc2FnZSBpcyBub3Qgd2l0aGluIHRoZSBjdXJyZW50IHNlY3Rpb24sIHdlIGZpcnN0IGdvIGludG8gdGhlIHRhcmdldCBzZWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IHNlY3Rpb25zID0gKHRoaXMub09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRjb25zdCBzZWN0aW9uV2l0aFRoZUNvbnRyb2wgPSBzZWN0aW9ucy5maW5kKChzZWN0aW9uKSA9PiBzZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5pbmNsdWRlcyhvQ29udHJvbCBhcyBVSTVFbGVtZW50KSk7XG5cdFx0XHRcdFx0aWYgKHNlY3Rpb25XaXRoVGhlQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdFx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2wob0NvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDYWxsIHRoZSBmdW5jdGlvbiB3aGVyZXZlciBuZWVkZWRcblx0XHRcdHRoaXMuaGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW0sIHZpc2libGVTZWN0aW9ucywgb01lc3NhZ2UsIG9WaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgbWVzc2FnZSBuYXZpZ2F0aW9uIGJ5IGZpbmRpbmcgdGhlIGFzc29jaWF0ZWQgc3Vic2VjdGlvbiwgZXhwYW5kaW5nIGl0LFxuXHQgKiBhbmQgbmF2aWdhdGluZyB0byB0aGUgY29ycmVjdCBzZWN0aW9uIGluIHRoZSBPYmplY3QgUGFnZSBMYXlvdXQuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvTWVzc2FnZSBUaGUgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBjb250cm9sIElEcy5cblx0ICogQHBhcmFtIG9WaWV3IFRoZSBjdXJyZW50IFVJNSB2aWV3LlxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW06IE1lc3NhZ2VJdGVtLCB2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sIG9NZXNzYWdlOiBNZXNzYWdlLCBvVmlldzogVmlldyk6IHZvaWQge1xuXHRcdC8vIEdldCBjb250cm9sIGlmIGl0IGlzIGluc2lkZSBhIGhpZGRlbiBzdWJzZWN0aW9uXG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9NZXNzYWdlLmdldENvbnRyb2xJZHMoKVswXSk7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSB0aGlzLmZpbmRTdWJTZWN0aW9uKG9JdGVtLCB2aXNpYmxlU2VjdGlvbnMsIG9Db250cm9sKTtcblxuXHRcdC8vIElmIHN1YnNlY3Rpb24gZm91bmQsIGV4cGFuZCBpdFxuXHRcdGlmIChvU3ViU2VjdGlvbikge1xuXHRcdFx0KG9TdWJTZWN0aW9uIGFzIFN1YlNlY3Rpb24pLnNldE1vZGUoXCJFeHBhbmRlZFwiKTtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0ZSB0byB0aGUgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbWVzc2FnZSdzIGdyb3VwIG5hbWVcblx0XHRjb25zdCBzU2VjdGlvblRpdGxlID0gb0l0ZW0uZ2V0R3JvdXBOYW1lKCkuc3BsaXQoXCIsIFwiKVswXTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cblx0XHQvLyBGb2N1cyBvbiB0aGUgdGFyZ2V0IGNvbnRyb2xcblx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIHRoZSBjb3JyZXNwb25kaW5nIHN1YnNlY3Rpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIG1lc3NhZ2UgaXRlbSdzIGdyb3VwIG5hbWVcblx0ICogb3IgYnkgY2hlY2tpbmcgaWYgdGhlIGdpdmVuIGNvbnRyb2wgZXhpc3RzIGluc2lkZSB0aGUgc3Vic2VjdGlvbidzIE1vcmVCbG9ja3MuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgVUk1IGNvbnRyb2wgdG8gY2hlY2sgZm9yIGluc2lkZSBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uLCBzZWN0aW9uLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdGZpbmRTdWJTZWN0aW9uKFxuXHRcdG9JdGVtOiBNZXNzYWdlSXRlbSxcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWRcblx0KTogU3ViU2VjdGlvbiB8IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5rbm93biB8IG51bGwge1xuXHRcdGNvbnN0IGdyb3VwTmFtZXMgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpO1xuXHRcdHJldHVybiB0aGlzLmZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbCh2aXNpYmxlU2VjdGlvbnMsIGdyb3VwTmFtZXNbMV0sIG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWFyY2hlcyBmb3IgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiB0aXRsZSBvciBieSBjaGVja2luZ1xuXHQgKiBpZiB0aGUgc3BlY2lmaWVkIGNvbnRyb2wgaXMgcHJlc2VudCBpbnNpZGUgdGhlIHN1YnNlY3Rpb24ncyBNb3JlQmxvY2tzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMuXG5cdCAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdG8gbWF0Y2ggYWdhaW5zdCBzdWJzZWN0aW9uIHRpdGxlcy5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBVSTUgY29udHJvbCB0byBzZWFyY2ggZm9yIHdpdGhpbiBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uIG9yIG51bGwgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG5cdCAqL1xuXHRwcml2YXRlIGZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbChcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0dGl0bGU6IHN0cmluZyxcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZFxuXHQpOiBTdWJTZWN0aW9uIHwgbnVsbCB7XG5cdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHZpc2libGVTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBzdWJzZWN0aW9uIHRpdGxlIG1hdGNoZXNcblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSA9PT0gdGl0bGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3ViU2VjdGlvbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIGNvbnRyb2wgZXhpc3RzIGluc2lkZSBNb3JlQmxvY2tzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRzdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHQuZ2V0TW9yZUJsb2NrcygpXG5cdFx0XHRcdFx0XHQuc29tZShcblx0XHRcdFx0XHRcdFx0KGJsb2NrKSA9PlxuXHRcdFx0XHRcdFx0XHRcdCgoYmxvY2sgYXMgVmlldykuZ2V0Q29udGVudCgpIGFzIHVua25vd24gYXMgQ29udGVudCk/LmZpbmRFbGVtZW50cyh0cnVlKS5pbmNsdWRlcyhvQ29udHJvbCBhcyBVSTVFbGVtZW50KVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3ViU2VjdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgYSB0YWJsZSBjZWxsIHRhcmdldGVkIGJ5IGEgbWVzc2FnZSwgZW5zdXJpbmcgdGhlIGNlbGwgaXMgZWRpdGFibGUuXG5cdCAqIEBwYXJhbSB0YXJnZXRSb3cgQSB0YWJsZSByb3dcblx0ICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZSB0YXJnZXRpbmcgYSBjZWxsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGVkaXRhYmxlIGNlbGwgb3IgbnVsbC91bmRlZmluZWQgaWYgbm9uZSBpcyBmb3VuZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0VGFyZ2V0Q2VsbCh0YXJnZXRSb3c6IFVJNUVsZW1lbnQsIG1lc3NhZ2U6IE1lc3NhZ2UpOiBVSTVFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkcyA9IG1lc3NhZ2UuZ2V0Q29udHJvbElkcygpO1xuXHRcdGNvbnN0IGhhc05vbkVkaXRhYmxlRmllbGQgPSBjb250cm9sSWRzLnNvbWUoKGlkKSA9PiB7XG5cdFx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChpZCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+O1xuXHRcdFx0cmV0dXJuIGNvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikgJiYgY29udHJvbC5nZXRFZGl0YWJsZSAmJiAhY29udHJvbC5nZXRFZGl0YWJsZSgpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGNvbnRyb2xJZHMubGVuZ3RoID4gMFxuXHRcdFx0PyBjb250cm9sSWRzXG5cdFx0XHRcdFx0Lm1hcChmdW5jdGlvbiAoY29udHJvbElkKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc0NvbnRyb2xJblRhYmxlID0gdGFyZ2V0Um93LmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAoZWxlbSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRJZCgpID09PSBjb250cm9sSWQ7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ29udHJvbEluVGFibGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbGVtZW50ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkPjtcblx0XHRcdFx0XHRcdFx0aWYgKGhhc05vbkVkaXRhYmxlRmllbGQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudD8uaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuZ2V0RWRpdGFibGUgJiYgIWVsZW1lbnQuZ2V0RWRpdGFibGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHZhbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbCA/IHZhbCA6IGFjYztcblx0XHRcdFx0XHR9LCBudWxsKVxuXHRcdFx0OiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIG9uIHRoZSBjb250cm9sIHRhcmdldGVkIGJ5IGEgbWVzc2FnZS5cblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0YXJnZXRpbmcgdGhlIGNvbnRyb2wgb24gd2hpY2ggd2Ugd2FudCB0byBzZXQgdGhlIGZvY3VzXG5cdCAqIEBwYXJhbSB0YXJnZXRNZGNUYWJsZSBUaGUgdGFibGUgdGFyZ2V0ZWQgYnkgdGhlIG1lc3NhZ2UgKG9wdGlvbmFsKVxuXHQgKiBAcGFyYW0gcm93SW5kZXggVGhlIHJvdyBpbmRleCBvZiB0aGUgdGFibGUgdGFyZ2V0ZWQgYnkgdGhlIG1lc3NhZ2UgKG9wdGlvbmFsKVxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBmb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2woXG5cdFx0dmlldzogVmlldyxcblx0XHRtZXNzYWdlOiBNZXNzYWdlLFxuXHRcdHRhcmdldE1kY1RhYmxlPzogTURDVGFibGUsXG5cdFx0cm93SW5kZXg/OiBudW1iZXJcblx0KTogUHJvbWlzZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgYUFsbFZpZXdFbGVtZW50cyA9IHZpZXcuZmluZEVsZW1lbnRzKHRydWUpO1xuXHRcdGNvbnN0IGFFcnJvbmVvdXNDb250cm9scyA9IG1lc3NhZ2Vcblx0XHRcdC5nZXRDb250cm9sSWRzKClcblx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNDb250cm9sSWQ6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gYUFsbFZpZXdFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChvRWxlbSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbS5nZXRJZCgpID09PSBzQ29udHJvbElkICYmIG9FbGVtLmdldERvbVJlZigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChzQ29udHJvbElkOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdFx0XHR9KTtcblx0XHRjb25zdCBhTm90VGFibGVFcnJvbmVvdXNDb250cm9scyA9IGFFcnJvbmVvdXNDb250cm9scy5maWx0ZXIoZnVuY3Rpb24gKG9FbGVtOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gIW9FbGVtPy5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgJiYgIW9FbGVtPy5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIik7XG5cdFx0fSk7XG5cdFx0Ly9UaGUgZm9jdXMgaXMgc2V0IG9uIE5vdCBUYWJsZSBjb250cm9sIGluIHByaW9yaXR5XG5cdFx0aWYgKGFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2woYU5vdFRhYmxlRXJyb25lb3VzQ29udHJvbHNbMF0pO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKGFFcnJvbmVvdXNDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBhVGFyZ2V0TWRjVGFibGVSb3cgPSB0YXJnZXRNZGNUYWJsZVxuXHRcdFx0XHQ/IHRhcmdldE1kY1RhYmxlLmZpbmRFbGVtZW50cyhcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHQoZWxlbTogQ29udHJvbCkgPT5cblx0XHRcdFx0XHRcdFx0ZWxlbS5pc0EoQ29sdW1uTGlzdEl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpICYmIGVsZW0uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpID09PSB0YXJnZXRNZGNUYWJsZVxuXHRcdFx0XHQgIClcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChhVGFyZ2V0TWRjVGFibGVSb3cubGVuZ3RoID4gMCAmJiBhVGFyZ2V0TWRjVGFibGVSb3dbMF0pIHtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldFJvdyA9IGFUYXJnZXRNZGNUYWJsZVJvd1tyb3dJbmRleCBhcyBudW1iZXJdO1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0Q2VsbCA9IHRoaXMuZ2V0VGFyZ2V0Q2VsbChvVGFyZ2V0Um93LCBtZXNzYWdlKTtcblx0XHRcdFx0aWYgKG9UYXJnZXRDZWxsKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhcmdldEZpZWxkID0gb1RhcmdldENlbGwuaXNBPEZpZWxkPihcInNhcC5mZS5tYWNyb3MuRmllbGRcIilcblx0XHRcdFx0XHRcdD8gKG9UYXJnZXRDZWxsLmdldENvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+KS5nZXRDb250ZW50RWRpdCgpWzBdXG5cdFx0XHRcdFx0XHQ6ICgoKG9UYXJnZXRDZWxsIGFzIEhCb3gpLmdldEl0ZW1zKClbMF0gYXMgRmllbGQpLmdldENvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+KS5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdFx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2wob1RhcmdldEZpZWxkKTtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yUHJvcGVydHlQYXRoID0gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF07XG5cdFx0XHRcdFx0aWYgKGVycm9yUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0XHQodmlldy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aFwiLCBlcnJvclByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0YXJnZXRNZGNUYWJsZSAmJiB0aGlzLl9uYXZpZ2F0aW9uQ29uZmlndXJlZCh0YXJnZXRNZGNUYWJsZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiAodmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChcblx0XHRcdFx0XHRcdFx0b1RhcmdldFJvdy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBvYmogVGhlIG1lc3NhZ2Ugb2JqZWN0XG5cdCAqIEBwYXJhbSBhU2VjdGlvbnMgVGhlIGFycmF5IG9mIHNlY3Rpb25zIGluIHRoZSBvYmplY3QgcGFnZVxuXHQgKiBAcmV0dXJucyBUaGUgcmFuayBvZiB0aGUgbWVzc2FnZVxuXHQgKi9cblx0X2dldE1lc3NhZ2VSYW5rKG9iajogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9LCBhU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10gfCB1bmRlZmluZWQpOiBudW1iZXIge1xuXHRcdGlmIChhU2VjdGlvbnMpIHtcblx0XHRcdGxldCBzZWN0aW9uLCBhU3ViU2VjdGlvbnMsIHN1YlNlY3Rpb24sIGosIGssIGFFbGVtZW50cywgYUFsbEVsZW1lbnRzLCBzZWN0aW9uUmFuaztcblx0XHRcdGZvciAoaiA9IGFTZWN0aW9ucy5sZW5ndGggLSAxOyBqID49IDA7IC0taikge1xuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHNlY3Rpb25zXG5cdFx0XHRcdHNlY3Rpb24gPSBhU2VjdGlvbnNbal07XG5cdFx0XHRcdGFTdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChrID0gYVN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IGsgPj0gMDsgLS1rKSB7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzdWItc2VjdGlvbnNcblx0XHRcdFx0XHRzdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2tdO1xuXHRcdFx0XHRcdGFBbGxFbGVtZW50cyA9IHN1YlNlY3Rpb24uZmluZEVsZW1lbnRzKHRydWUpOyAvLyBHZXQgYWxsIGVsZW1lbnRzIGluc2lkZSBhIHN1Yi1zZWN0aW9uXG5cdFx0XHRcdFx0Ly9UcnkgdG8gZmluZCB0aGUgY29udHJvbCAxIGluc2lkZSB0aGUgc3ViIHNlY3Rpb25cblx0XHRcdFx0XHRhRWxlbWVudHMgPSBhQWxsRWxlbWVudHMuZmlsdGVyKHRoaXMuX2ZuRmlsdGVyVXBvbklkLmJpbmQodGhpcywgb2JqLmdldENvbnRyb2xJZCgpKSk7XG5cdFx0XHRcdFx0c2VjdGlvblJhbmsgPSBqICsgMTtcblx0XHRcdFx0XHRpZiAoYUVsZW1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGlmIChzZWN0aW9uLmdldFZpc2libGUoKSAmJiBzdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShcInNlY3Rpb25OYW1lXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b2JqLnNlY3Rpb25OYW1lID0gc2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KFwic3ViU2VjdGlvbk5hbWVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvYmouc3ViU2VjdGlvbk5hbWUgPSBzdWJTZWN0aW9uLmdldFRpdGxlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlY3Rpb25SYW5rICogMTAgKyAoayArIDEpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgc2VjdGlvbiBvciBzdWJzZWN0aW9uIGlzIGludmlzaWJsZSB0aGVuIGdyb3VwIG5hbWUgd291bGQgYmUgTGFzdCBBY3Rpb25cblx0XHRcdFx0XHRcdFx0Ly8gc28gcmFua2luZyBzaG91bGQgYmUgbG93ZXJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvL2lmIHN1YiBzZWN0aW9uIHRpdGxlIGlzIE90aGVyIG1lc3NhZ2VzLCB3ZSByZXR1cm4gYSBoaWdoIG51bWJlcihyYW5rKSwgd2hpY2ggZW5zdXJlc1xuXHRcdFx0Ly90aGF0IG1lc3NhZ2VzIGJlbG9uZ2luZyB0byB0aGlzIHN1YiBzZWN0aW9uIGFsd2F5cyBjb21lIGxhdGVyIGluIG1lc3NhZ2VQb3BvdmVyXG5cdFx0XHRpZiAoIW9iai5zZWN0aW9uTmFtZSAmJiAhb2JqLnN1YlNlY3Rpb25OYW1lICYmIG9iai5nZXRQZXJzaXN0ZW50KCkpIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gOTk5O1xuXHRcdH1cblx0XHRyZXR1cm4gOTk5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBGaWx0ZXIgdG8gaGlkZSBtZXNzYWdlcyBmcm9tIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEZpbHRlclxuXHQgKi9cblx0X2ZpbHRlck91dE1lc3NhZ2VzSW5EaWFsb2coKTogRmlsdGVyIHtcblx0XHRjb25zdCBmblRlc3QgPSAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nKGFDb250cm9sSWRzKTtcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0dGVzdDogZm5UZXN0LFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIElmIHRoZXJlIGlzIG9ubHkgb25lIHN1Y2Nlc3MgbWVzc2FnZSBib3VuZCB0byB0aGUgY3VycmVudCBjb250ZXh0LCB3ZSBkbyBub3QgZmlsdGVyIGl0IG91dC5cblx0ICogQHJldHVybnMgQm9vbGVhbiBpZiB0aGUgc2luZ2xlIHN1Y2Nlc3MgbWVzc2FnZSBpcyBmb3VuZFxuXHQgKi9cblx0X2ZpbHRlck91dENvbnRleHRTdWNjZXNzTWVzc2FnZXMoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYm91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzID0gW107XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzXG5cdFx0XHQpIHtcblx0XHRcdFx0Ym91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgbWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHQvLyB3ZSB3YW50IHRvIGhpZGUgc3VjY2VzcyBtZXNzYWdlcyBvbmx5IGlmIHRoZXkgYXJlIGJvdW5kIHRvIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHNpbmdsZSBzdWNjZXNzIG1lc3NhZ2VzXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbHRlciBmdW5jdGlvbiB0byBoaWRlIGJhY2stZW5kIG1lc3NhZ2VzIGlmIHRoZSBjb250cm9sIGhhcyBlcnJvciB2YWxpZGF0aW9uLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJcblx0ICovXG5cdF9nZXRGaWx0ZXJUb0hpZGVCYWNrZW5kTWVzc2FnZU9uRXJyb3JWYWxpZGF0aW9uKCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgZ2V0SWRzT2ZGaWVsc2RXaXRoRXJyb3JWYWxpZGF0aW9uID0gZnVuY3Rpb24gKCk6IHN0cmluZ1tdIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLnZhbGlkYXRpb24gPT09IHRydWUgJiYgbWVzc2FnZS5nZXRDb250cm9sSWQoKT8ubWF0Y2goL2ZpZWxkLiotaW5uZXIkL2kpKVxuXHRcdFx0XHRcdC8vdGhlIGVycm9yIHBvaW50IHRvIHRoZSBpbm5lciBjb250cm9sLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgLWlubmVyIHRvIGdldCB0aGUgZmllbGQgaWRcblx0XHRcdFx0XHQubWFwKChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldENvbnRyb2xJZCgpPy5yZXBsYWNlKFwiLWlubmVyXCIsIFwiXCIpKVxuXHRcdFx0KTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgZm5UZXN0ID0gZnVuY3Rpb24gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdFx0Ly8gZmlsdGVyaW5nIG91dCB0aGUgYmFja2VuZCBtZXNzYWdlcyBpZiB0aGUgY29udHJvbCBoYXMgZXJyb3IgdmFsaWRhdGlvblxuXHRcdFx0cmV0dXJuICFhQ29udHJvbElkcy5zb21lKChjb250cm9sSWQ6IHN0cmluZykgPT4gZ2V0SWRzT2ZGaWVsc2RXaXRoRXJyb3JWYWxpZGF0aW9uKCkuaW5jbHVkZXMoY29udHJvbElkKSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFtcblx0XHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBcInZhbGlkYXRpb25cIixcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTE6IGZhbHNlXG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdFx0XHRcdFx0dGVzdDogZm5UZXN0LFxuXHRcdFx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiB0cnVlXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0YW5kOiB0cnVlXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRwYXRoOiBcInZhbGlkYXRpb25cIixcblx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0dmFsdWUxOiB0cnVlXG5cdFx0XHRcdH0pXG5cdFx0XHRdLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzZXQgdGhlIGZpbHRlcnMgYmFzZWQgdXBvbiB0aGUgbWVzc2FnZSBpdGVtc1xuXHQgKiBUaGUgZGVzaXJlZCBmaWx0ZXIgb3BlcmF0aW9uIGlzOlxuXHQgKiAoIGZpbHRlcnMgcHJvdmlkZWQgYnkgdXNlciAmJiAoIHZhbGlkYXRpb24gPSB0cnVlICYmIENvbnRyb2wgc2hvdWxkIGJlIHByZXNlbnQgaW4gdmlldyApIHx8IG1lc3NhZ2VzIGZvciB0aGUgY3VycmVudCBtYXRjaGluZyBjb250ZXh0ICkuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBfYXBwbHlGaWx0ZXJzQW5kU29ydCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgb1ZhbGlkYXRpb25GaWx0ZXJzLFxuXHRcdFx0aGlkZGVuRHJhZnRGaWx0ZXIsXG5cdFx0XHRvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIsXG5cdFx0XHRvRmlsdGVycyxcblx0XHRcdHNQYXRoLFxuXHRcdFx0b1NvcnRlcixcblx0XHRcdG9EaWFsb2dGaWx0ZXIsXG5cdFx0XHRvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYVVzZXJEZWZpbmVkRmlsdGVyOiBGaWx0ZXJbXSA9IFtdO1xuXG5cdFx0dGhpcy5zVmlld0lkID0gdGhpcy5zVmlld0lkID8gdGhpcy5zVmlld0lkIDogKHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpIGFzIHN0cmluZyk7XG5cdFx0Ly9BZGQgdGhlIGZpbHRlcnMgcHJvdmlkZWQgYnkgdGhlIHVzZXJcblx0XHRjb25zdCBhQ3VzdG9tRmlsdGVycyA9IHRoaXMuZ2V0QWdncmVnYXRpb24oXCJjdXN0b21GaWx0ZXJzXCIpIGFzIENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYUN1c3RvbUZpbHRlcnMpIHtcblx0XHRcdGFDdXN0b21GaWx0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlcjogQ29udHJvbCkge1xuXHRcdFx0XHRhVXNlckRlZmluZWRGaWx0ZXIucHVzaChcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdHBhdGg6IGZpbHRlci5nZXRQcm9wZXJ0eShcInBhdGhcIiksXG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogZmlsdGVyLmdldFByb3BlcnR5KFwib3BlcmF0b3JcIiksXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IGZpbHRlci5nZXRQcm9wZXJ0eShcInZhbHVlMVwiKSxcblx0XHRcdFx0XHRcdHZhbHVlMjogZmlsdGVyLmdldFByb3BlcnR5KFwidmFsdWUyXCIpXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKCFvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQYXRoID0gb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdC8vRmlsdGVyIGZvciBmaWx0ZXJpbmcgb3V0IG9ubHkgdmFsaWRhdGlvbiBtZXNzYWdlcyB3aGljaCBhcmUgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIHZpZXdcblx0XHRcdG9WYWxpZGF0aW9uRmlsdGVycyA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcInZhbGlkYXRpb25cIixcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdHZhbHVlMTogdHJ1ZVxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdG1lc3NhZ2VCdXR0b25IZWxwZXIuZ2V0Q2hlY2tDb250cm9sSW5WaWV3RmlsdGVyKHRoaXMuc1ZpZXdJZClcblx0XHRcdFx0XSxcblx0XHRcdFx0YW5kOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdFx0b0RpYWxvZ0ZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbdGhpcy5fZmlsdGVyT3V0TWVzc2FnZXNJbkRpYWxvZygpXVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9Db250ZXh0U3VjY2Vzc0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdFx0dGVzdDogdGhpcy5fZmlsdGVyT3V0Q29udGV4dFN1Y2Nlc3NNZXNzYWdlcy5iaW5kKHRoaXMpLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdFx0bGV0IGZpbHRlckFycmF5O1xuXHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSk7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCBhcyBzdHJpbmcpIGFzIFZpZXc7XG5cdFx0XHRcdGNvbnN0IHZpZXdDb250ZXh0ID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSAoYXdhaXQgKHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKT8uZWRpdEZsb3cuZ2V0Um9vdENvbnRleHQodmlld0NvbnRleHQpKT8uZ2V0UGF0aCgpO1xuXHRcdFx0XHRoaWRkZW5EcmFmdEZpbHRlciA9IG1lc3NhZ2VCdXR0b25IZWxwZXIuZ2V0SGlkZGVuRHJhZnRVc2VDYXNlRmlsdGVyKGNvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgdmFsaWRhdGlvbkFuZEhpZGRlbkRyYWZ0RmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0ZmlsdGVyczogW29WYWxpZGF0aW9uRmlsdGVycywgaGlkZGVuRHJhZnRGaWx0ZXJdLFxuXHRcdFx0XHRcdGFuZDogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZpbHRlckFycmF5ID0gW3ZhbGlkYXRpb25BbmRIaWRkZW5EcmFmdEZpbHRlciwgb0RpYWxvZ0ZpbHRlciwgdGhpcy5fZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFtcblx0XHRcdFx0XHRcdG9WYWxpZGF0aW9uRmlsdGVycyxcblx0XHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBcInRhcmdldFwiLFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuU3RhcnRzV2l0aCxcblx0XHRcdFx0XHRcdFx0dmFsdWUxOiBzUGF0aFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdGFuZDogZmFsc2Vcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZmlsdGVyQXJyYXkgPSBbXG5cdFx0XHRcdFx0b1ZhbGlkYXRpb25BbmRDb250ZXh0RmlsdGVyLFxuXHRcdFx0XHRcdG9Db250ZXh0U3VjY2Vzc0ZpbHRlcnMsXG5cdFx0XHRcdFx0b0RpYWxvZ0ZpbHRlcixcblx0XHRcdFx0XHR0aGlzLl9nZXRGaWx0ZXJUb0hpZGVCYWNrZW5kTWVzc2FnZU9uRXJyb3JWYWxpZGF0aW9uKClcblx0XHRcdFx0XTtcblx0XHRcdFx0Ly9GaWx0ZXIgZm9yIGZpbHRlcmluZyBvdXQgdGhlIGJvdW5kIG1lc3NhZ2VzIGkuZSB0YXJnZXQgc3RhcnRzIHdpdGggdGhlIGNvbnRleHQgcGF0aFxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1ZhbGlkYXRpb25Db250ZXh0RGlhbG9nRmlsdGVycyA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBmaWx0ZXJBcnJheSxcblx0XHRcdFx0YW5kOiB0cnVlXG5cdFx0XHR9KTtcblx0XHRcdC8vIGFuZCBmaW5hbGx5IC0gaWYgdGhlcmUgYW55IC0gYWRkIGN1c3RvbSBmaWx0ZXIgKHZpYSBPUilcblx0XHRcdGlmIChhVXNlckRlZmluZWRGaWx0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRmlsdGVycyA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFthVXNlckRlZmluZWRGaWx0ZXIsIG9WYWxpZGF0aW9uQ29udGV4dERpYWxvZ0ZpbHRlcnNdIGFzIHVua25vd24gYXMgRmlsdGVyW10sIC8vIFRPRE8gaW5jb3JyZWN0LFxuXHRcdFx0XHRcdGFuZDogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvRmlsdGVycyA9IG9WYWxpZGF0aW9uQ29udGV4dERpYWxvZ0ZpbHRlcnM7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm9JdGVtQmluZGluZy5maWx0ZXIob0ZpbHRlcnMpO1xuXHRcdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXQodGhpcywgdGhpcy5vT2JqZWN0UGFnZUxheW91dCk7XG5cdFx0XHQvLyBXZSBzdXBwb3J0IHNvcnRpbmcgb25seSBmb3IgT2JqZWN0UGFnZUxheW91dCB1c2UtY2FzZS5cblx0XHRcdGlmICh0aGlzLm9PYmplY3RQYWdlTGF5b3V0KSB7XG5cdFx0XHRcdG9Tb3J0ZXIgPSBuZXcgU29ydGVyKFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRvYmoxOiBNZXNzYWdlICYgeyBzZWN0aW9uTmFtZTogc3RyaW5nOyBzdWJTZWN0aW9uTmFtZTogc3RyaW5nIH0sXG5cdFx0XHRcdFx0XHRvYmoyOiBNZXNzYWdlICYgeyBzZWN0aW9uTmFtZTogc3RyaW5nOyBzdWJTZWN0aW9uTmFtZTogc3RyaW5nIH1cblx0XHRcdFx0XHQpID0+IHtcblx0XHRcdFx0XHRcdGlmICghb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRcdG9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucyA9IHRoaXMub09iamVjdFBhZ2VMYXlvdXQgJiYgdGhpcy5vT2JqZWN0UGFnZUxheW91dC5nZXRTZWN0aW9ucygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3QgcmFua0EgPSB0aGlzLl9nZXRNZXNzYWdlUmFuayhvYmoxLCBvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmFua0IgPSB0aGlzLl9nZXRNZXNzYWdlUmFuayhvYmoyLCBvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMpO1xuXHRcdFx0XHRcdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMub0l0ZW1CaW5kaW5nLnNvcnQob1NvcnRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBzQ29udHJvbElkXG5cdCAqIEBwYXJhbSBvSXRlbVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb250cm9sIElEIG1hdGNoZXMgdGhlIGl0ZW0gSURcblx0ICovXG5cdF9mbkZpbHRlclVwb25JZChzQ29udHJvbElkOiBzdHJpbmcsIG9JdGVtOiBVSTVFbGVtZW50KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDb250cm9sSWQgPT09IG9JdGVtLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9uIGJhc2VkIG9uIHNlY3Rpb24gdGl0bGUgYW5kIHZpc2liaWxpdHkuXG5cdCAqIEBwYXJhbSBvT2JqZWN0UGFnZSBPYmplY3QgcGFnZS5cblx0ICogQHBhcmFtIHNTZWN0aW9uVGl0bGUgU2VjdGlvbiB0aXRsZS5cblx0ICogQHJldHVybnMgVGhlIHNlY3Rpb25cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRTZWN0aW9uQnlTZWN0aW9uVGl0bGUob09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsIHNTZWN0aW9uVGl0bGU6IHN0cmluZyk6IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChzU2VjdGlvblRpdGxlKSB7XG5cdFx0XHRjb25zdCBhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGFTZWN0aW9uc1tpXS5nZXRWaXNpYmxlKCkgJiYgYVNlY3Rpb25zW2ldLmdldFRpdGxlKCkgPT09IHNTZWN0aW9uVGl0bGUpIHtcblx0XHRcdFx0XHRvU2VjdGlvbiA9IGFTZWN0aW9uc1tpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1NlY3Rpb247XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBzZWN0aW9uIGlmIHRoZSBvYmplY3QgcGFnZSB1c2VzIGFuIEljb25UYWJCYXIgYW5kIGlmIHRoZSBjdXJyZW50IHNlY3Rpb24gaXMgbm90IHRoZSB0YXJnZXQgb2YgdGhlIG5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSBvT2JqZWN0UGFnZSBPYmplY3QgcGFnZS5cblx0ICogQHBhcmFtIHNTZWN0aW9uVGl0bGUgU2VjdGlvbiB0aXRsZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZShvT2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCwgc1NlY3Rpb25UaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvT2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0aWYgKGJVc2VJY29uVGFiQmFyKSB7XG5cdFx0XHRjb25zdCBvU2VjdGlvbiA9IHRoaXMuX2dldFNlY3Rpb25CeVNlY3Rpb25UaXRsZShvT2JqZWN0UGFnZSwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0XHRjb25zdCBzU2VsZWN0ZWRTZWN0aW9uSWQgPSBvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKTtcblx0XHRcdGlmIChvU2VjdGlvbiAmJiBzU2VsZWN0ZWRTZWN0aW9uSWQgIT09IG9TZWN0aW9uLmdldElkKCkpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG9TZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uVGFibGVJbkljb25UYWJCYXJNb2RlKFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0b09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdFx0c1NlY3Rpb25UaXRsZTogc3RyaW5nXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBvVGFibGVDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb09QQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYlNob3VsZFdhaXRGb3JUYWJsZVJlZnJlc2ggPSAhKG9UYWJsZUNvbnRleHQgPT09IG9PUENvbnRleHQpO1xuXHRcdHRoaXMuX25hdmlnYXRlRnJvbU1lc3NhZ2VUb1NlY3Rpb25Jbkljb25UYWJCYXJNb2RlKG9PYmplY3RQYWdlLCBzU2VjdGlvblRpdGxlKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IEZ1bmN0aW9uKSB7XG5cdFx0XHRpZiAoYlNob3VsZFdhaXRGb3JUYWJsZVJlZnJlc2gpIHtcblx0XHRcdFx0b1Jvd0JpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgTWRjVGFibGUgaWYgaXQgaXMgZm91bmQgYW1vbmcgYW55IG9mIHRoZSBwYXJlbnQgZWxlbWVudHMuXG5cdCAqIEBwYXJhbSBvRWxlbWVudCBDb250cm9sXG5cdCAqIEByZXR1cm5zIE1EQyB0YWJsZSB8fCB1bmRlZmluZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRNZGNUYWJsZShvRWxlbWVudDogVUk1RWxlbWVudCk6IE1EQ1RhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHQvL2NoZWNrIGlmIHRoZSBlbGVtZW50IGhhcyBhIHRhYmxlIHdpdGhpbiBhbnkgb2YgaXRzIHBhcmVudHNcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgIW9QYXJlbnRFbGVtZW50LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQuaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgPyBvUGFyZW50RWxlbWVudCA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRHcmlkVGFibGUob01kY1RhYmxlOiBNRENUYWJsZSk6IFVJVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBvTWRjVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b0VsZW0uaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpICYmXG5cdFx0XHRcdC8qKiBXZSBjaGVjayB0aGUgZWxlbWVudCBiZWxvbmdzIHRvIHRoZSBNZGNUYWJsZSA6Ki9cblx0XHRcdFx0b0VsZW0uZ2V0UGFyZW50KCkgPT09IG9NZGNUYWJsZVxuXHRcdFx0KTtcblx0XHR9KVswXSBhcyBVSVRhYmxlIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFibGUgcm93IChpZiBhdmFpbGFibGUpIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBvRWxlbWVudCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFRhYmxlIHJvdyB8fCB1bmRlZmluZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRUYWJsZVJvdyhvRWxlbWVudDogVUk1RWxlbWVudCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvUGFyZW50RWxlbWVudCA9IG9FbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdHdoaWxlIChcblx0XHRcdG9QYXJlbnRFbGVtZW50ICYmXG5cdFx0XHQhb1BhcmVudEVsZW1lbnQuaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0XHQhb1BhcmVudEVsZW1lbnQuaXNBPENyZWF0aW9uUm93PihcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxDb2x1bW5MaXN0SXRlbT4oQ29sdW1uTGlzdEl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpXG5cdFx0KSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgJiZcblx0XHRcdChvUGFyZW50RWxlbWVudC5pc0E8Um93PihcInNhcC51aS50YWJsZS5Sb3dcIikgfHxcblx0XHRcdFx0b1BhcmVudEVsZW1lbnQuaXNBPENyZWF0aW9uUm93PihcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSB8fFxuXHRcdFx0XHRvUGFyZW50RWxlbWVudC5pc0E8Q29sdW1uTGlzdEl0ZW0+KENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSlcblx0XHRcdD8gKG9QYXJlbnRFbGVtZW50IGFzIFVJNUVsZW1lbnQpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGluZGV4IG9mIHRoZSB0YWJsZSByb3cgY29udGFpbmluZyB0aGUgZWxlbWVudC5cblx0ICogQHBhcmFtIG9FbGVtZW50IENvbnRyb2xcblx0ICogQHJldHVybnMgUm93IGluZGV4IHx8IHVuZGVmaW5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlUm93SW5kZXgob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBudW1iZXIge1xuXHRcdGNvbnN0IG9UYWJsZVJvdyA9IHRoaXMuX2dldFRhYmxlUm93KG9FbGVtZW50KTtcblx0XHRsZXQgaVJvd0luZGV4O1xuXHRcdGlmIChvVGFibGVSb3c/LmlzQTxSb3c+KFwic2FwLnVpLnRhYmxlLlJvd1wiKSkge1xuXHRcdFx0aVJvd0luZGV4ID0gb1RhYmxlUm93LmdldEluZGV4KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlSb3dJbmRleCA9IChvVGFibGVSb3cgYXMgeyBnZXRUYWJsZT86ICgpID0+IFJlc3BvbnNpdmVUYWJsZSB9KVxuXHRcdFx0XHQ/LmdldFRhYmxlPy4oKVxuXHRcdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0XHQuZmluZEluZGV4KGZ1bmN0aW9uIChlbGVtZW50OiBVSTVFbGVtZW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuZ2V0SWQoKSA9PT0gb1RhYmxlUm93Py5nZXRJZCgpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGlSb3dJbmRleCA/PyAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGluZGV4IG9mIHRoZSB0YWJsZSBjb2x1bW4gY29udGFpbmluZyB0aGUgZWxlbWVudC5cblx0ICogQHBhcmFtIGVsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBDb2x1bW4gaW5kZXggfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVDb2x1bW5JbmRleChlbGVtZW50OiBVSTVFbGVtZW50KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBnZXRUYXJnZXRDZWxsSW5kZXggPSBmdW5jdGlvbiAoZWx0OiBVSTVFbGVtZW50LCB0YXJnZXRSb3c6IFJvdyB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0Um93Py5nZXRDZWxscygpLmZpbmRJbmRleChmdW5jdGlvbiAoY2VsbDogQ29udHJvbCkge1xuXHRcdFx0XHRyZXR1cm4gY2VsbC5nZXRJZCgpID09PSBlbHQuZ2V0SWQoKTtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y29uc3QgZ2V0VGFyZ2V0Q29sdW1uSW5kZXggPSBmdW5jdGlvbiAoZWx0OiBVSTVFbGVtZW50LCB0YXJnZXRSb3c6IFJvdyB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0XHRsZXQgdGFyZ2V0RWxlbWVudCA9IGVsdC5nZXRQYXJlbnQoKSBhcyBVSTVFbGVtZW50LFxuXHRcdFx0XHR0YXJnZXRDZWxsSW5kZXggPSBnZXRUYXJnZXRDZWxsSW5kZXgodGFyZ2V0RWxlbWVudCwgdGFyZ2V0Um93KTtcblx0XHRcdHdoaWxlICh0YXJnZXRFbGVtZW50ICYmIHRhcmdldENlbGxJbmRleCAmJiB0YXJnZXRDZWxsSW5kZXggPCAwKSB7XG5cdFx0XHRcdHRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50LmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQ7XG5cdFx0XHRcdHRhcmdldENlbGxJbmRleCA9IGdldFRhcmdldENlbGxJbmRleCh0YXJnZXRFbGVtZW50LCB0YXJnZXRSb3cpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRhcmdldENlbGxJbmRleDtcblx0XHR9O1xuXHRcdGNvbnN0IHRhcmdldFJvdyA9IHRoaXMuX2dldFRhYmxlUm93KGVsZW1lbnQpIGFzIFJvdyB8IHVuZGVmaW5lZDtcblxuXHRcdGxldCB0YXJnZXRDb2x1bW5JbmRleCA9IGdldFRhcmdldENvbHVtbkluZGV4KGVsZW1lbnQsIHRhcmdldFJvdyk7XG5cdFx0aWYgKHRhcmdldFJvdz8uaXNBPENyZWF0aW9uUm93PihcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0Q2VsbElkID0gdGFyZ2V0Q29sdW1uSW5kZXggPyB0YXJnZXRSb3cuZ2V0Q2VsbHMoKVt0YXJnZXRDb2x1bW5JbmRleF0uZ2V0SWQoKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0dGFibGVDb2x1bW5zID0gdGFyZ2V0Um93LmdldFRhYmxlKCk/LmdldENvbHVtbnMoKTtcblx0XHRcdHRhcmdldENvbHVtbkluZGV4ID0gdGFibGVDb2x1bW5zPy5maW5kSW5kZXgoZnVuY3Rpb24gKGNvbHVtbjogQ29sdW1uKSB7XG5cdFx0XHRcdGlmIChjb2x1bW4uZ2V0Q3JlYXRpb25UZW1wbGF0ZSgpICYmIHRhcmdldENlbGxJZCkge1xuXHRcdFx0XHRcdHJldHVybiB0YXJnZXRDZWxsSWQuc2VhcmNoKGNvbHVtbi5nZXRDcmVhdGlvblRlbXBsYXRlKCkuZ2V0SWQoKSkgPiAtMSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0Q29sdW1uSW5kZXg7XG5cdH1cblxuXHRfZ2V0TWRjVGFibGVSb3dzKG9NZGNUYWJsZTogTURDVGFibGUpOiBSb3dbXSB7XG5cdFx0cmV0dXJuIG9NZGNUYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRvRWxlbS5pc0E8Um93PihcInNhcC51aS50YWJsZS5Sb3dcIikgJiZcblx0XHRcdFx0LyoqIFdlIGNoZWNrIHRoZSBlbGVtZW50IGJlbG9uZ3MgdG8gdGhlIE1kYyBUYWJsZSA6Ki9cblx0XHRcdFx0KG9FbGVtIGFzIHsgZ2V0VGFibGU/OiAoKSA9PiBVSTVFbGVtZW50IH0pLmdldFRhYmxlPy4oKS5nZXRQYXJlbnQoKSA9PT0gb01kY1RhYmxlXG5cdFx0XHQpO1xuXHRcdH0pIGFzIFJvd1tdO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXQob0VsZW1lbnQ6IE1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQsIG9PYmplY3RQYWdlTGF5b3V0PzogT2JqZWN0UGFnZUxheW91dCk6IE9iamVjdFBhZ2VMYXlvdXQgfCB1bmRlZmluZWQge1xuXHRcdGlmIChvT2JqZWN0UGFnZUxheW91dCkge1xuXHRcdFx0cmV0dXJuIG9PYmplY3RQYWdlTGF5b3V0O1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0RWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdC8vSXRlcmF0ZSBvdmVyIHBhcmVudCB0aWxsIHlvdSBoYXZlIG5vdCByZWFjaGVkIHRoZSBvYmplY3QgcGFnZSBsYXlvdXRcblx0XHR3aGlsZSAodGFyZ2V0RWxlbWVudCAmJiAhdGFyZ2V0RWxlbWVudC5pc0E8T2JqZWN0UGFnZUxheW91dD4oXCJzYXAudXhhcC5PYmplY3RQYWdlTGF5b3V0XCIpKSB7XG5cdFx0XHR0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5nZXRQYXJlbnQoKSA/PyB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXRFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgdG8gY2hlY2sgaWYgYSBuYXZpZ2F0aW9uIGlzIGNvbmZpZ3VyZWQgZnJvbSB0aGUgdGFibGUgdG8gYSBzdWIgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB0YWJsZSBNZGNUYWJsZVxuXHQgKiBAcmV0dXJucyBFaXRoZXIgdHJ1ZSBvciBmYWxzZVxuXHQgKi9cblx0X25hdmlnYXRpb25Db25maWd1cmVkKHRhYmxlOiBUYWJsZSk6IGJvb2xlYW4ge1xuXHRcdC8vIFRPRE86IHRoaXMgbG9naWMgd291bGQgYmUgbW92ZWQgdG8gY2hlY2sgdGhlIHNhbWUgYXQgdGhlIHRlbXBsYXRlIHRpbWUgdG8gYXZvaWQgdGhlIHNhbWUgY2hlY2sgaGFwcGVuaW5nIG11bHRpcGxlIHRpbWVzLlxuXHRcdGNvbnN0IGNvbXBvbmVudCA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCIpLFxuXHRcdFx0bmF2T2JqZWN0ID0gdGFibGUgJiYgY29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRhYmxlKSAmJiBjb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IodGFibGUpLmdldE5hdmlnYXRpb24oKTtcblx0XHRsZXQgc3ViT1BDb25maWd1cmVkID0gZmFsc2UsXG5cdFx0XHRuYXZDb25maWd1cmVkID0gZmFsc2U7XG5cdFx0aWYgKG5hdk9iamVjdCAmJiBPYmplY3Qua2V5cyhuYXZPYmplY3QpLmluY2x1ZGVzKHRhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCkpKSB7XG5cdFx0XHRzdWJPUENvbmZpZ3VyZWQgPVxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldICYmXG5cdFx0XHRcdG5hdk9iamVjdFt0YWJsZT8uZ2V0Um93QmluZGluZygpLmdldFBhdGgoKV0uZGV0YWlsICYmXG5cdFx0XHRcdG5hdk9iamVjdFt0YWJsZT8uZ2V0Um93QmluZGluZygpLmdldFBhdGgoKV0uZGV0YWlsLnJvdXRlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdFx0bmF2Q29uZmlndXJlZCA9XG5cdFx0XHRzdWJPUENvbmZpZ3VyZWQgJiZcblx0XHRcdHRhYmxlPy5nZXRSb3dTZXR0aW5ncygpLmdldFJvd0FjdGlvbnMoKSAmJlxuXHRcdFx0dGFibGU/LmdldFJvd1NldHRpbmdzKCkuZ2V0Um93QWN0aW9ucygpWzBdLmdldFR5cGUoKS5pbmNsdWRlcyhcIk5hdmlnYXRpb25cIik7XG5cdFx0cmV0dXJuIG5hdkNvbmZpZ3VyZWQ7XG5cdH1cblxuXHRzZXRGb2N1c1RvQ29udHJvbChjb250cm9sPzogVUk1RWxlbWVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VQb3BvdmVyID0gdGhpcy5vTWVzc2FnZVBvcG92ZXI7XG5cdFx0aWYgKG1lc3NhZ2VQb3BvdmVyICYmIGNvbnRyb2wgJiYgY29udHJvbC5mb2N1cykge1xuXHRcdFx0Y29uc3QgZm5Gb2N1cyA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29udHJvbC5mb2N1cygpO1xuXHRcdFx0fTtcblx0XHRcdGlmICghbWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0Ly8gd2hlbiBuYXZpZ2F0aW5nIHRvIHBhcmVudCBwYWdlIHRvIGNoaWxkIHBhZ2UgKG9uIGNsaWNrIG9mIG1lc3NhZ2UpLCB0aGUgY2hpbGQgcGFnZSBtaWdodCBoYXZlIGEgZm9jdXMgbG9naWMgdGhhdCBtaWdodCB1c2UgYSB0aW1lb3V0LlxuXHRcdFx0XHQvLyB3ZSB1c2UgdGhlIGJlbG93IHRpbWVvdXRzIHRvIG92ZXJyaWRlIHRoaXMgZm9jdXMgc28gdGhhdCB3ZSBmb2N1cyBvbiB0aGUgdGFyZ2V0IGNvbnRyb2wgb2YgdGhlIG1lc3NhZ2UgaW4gdGhlIGNoaWxkIHBhZ2UuXG5cdFx0XHRcdHNldFRpbWVvdXQoZm5Gb2N1cywgMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbk9uQ2xvc2UgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0c2V0VGltZW91dChmbkZvY3VzLCAwKTtcblx0XHRcdFx0XHRtZXNzYWdlUG9wb3Zlci5kZXRhY2hFdmVudChcImFmdGVyQ2xvc2VcIiwgZm5PbkNsb3NlKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0bWVzc2FnZVBvcG92ZXIuYXR0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRcdG1lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRkUgVjQgOiBNZXNzYWdlQnV0dG9uIDogZWxlbWVudCBkb2Vzbid0IGhhdmUgZm9jdXMgbWV0aG9kIGZvciBmb2N1c2luZy5cIik7XG5cdFx0fVxuXHR9XG5cblx0ZXNjYXBlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBTdHJpbmcodmFsdWUpXG5cdFx0XHQucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpXG5cdFx0XHQucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcblx0XHRcdC5yZXBsYWNlKC8nL2csIFwiJiMzOTtcIilcblx0XHRcdC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuXHRcdFx0LnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VCdXR0b247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTRFTUEsYUFBYSxJQUFBQyxJQUFBLEdBRGxCQyxjQUFjLENBQUMsc0NBQXNDLENBQUMsRUFBQUMsS0FBQSxHQVFyREMsV0FBVyxDQUFDO0lBQUVD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
1520
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJhZ2dyZWdhdGlvbiIsInR5cGUiLCJtdWx0aXBsZSIsInNpbmd1bGFyTmFtZSIsIl9kZWMzIiwiZXZlbnQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1dHRvbiIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwic0dlbmVyYWxHcm91cFRleHQiLCJzVmlld0lkIiwic0xhc3RBY3Rpb25UZXh0IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0IiwiQnV0dG9uIiwiYXBwbHkiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJhdHRhY2hQcmVzcyIsImhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MiLCJvTWVzc2FnZVBvcG92ZXIiLCJNZXNzYWdlUG9wb3ZlciIsIm9JdGVtQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfc2V0TWVzc2FnZURhdGEiLCJtZXNzYWdlQnV0dG9uSWQiLCJnZXRJZCIsImFkZEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwia2V5IiwidmFsdWUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJfYXBwbHlGaWx0ZXJzQW5kU29ydCIsImJpbmQiLCJhdHRhY2hBY3RpdmVUaXRsZVByZXNzIiwiX2FjdGl2ZVRpdGxlUHJlc3MiLCJvRXZlbnQiLCJ0b2dnbGUiLCJnZXRTb3VyY2UiLCJfYXBwbHlHcm91cGluZ0FzeW5jIiwib1ZpZXciLCJhV2FpdEZvckRhdGEiLCJvVmlld0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzIiwidmlldyIsIm9SZXMiLCJhTWVzc2FnZXMiLCJnZXRDb250ZXh0cyIsIm1hcCIsIm9Db250ZXh0IiwiZ2V0T2JqZWN0Iiwib1ZpZXdDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJnZXRDb250ZW50IiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJmb3JFYWNoIiwib1NlY3Rpb24iLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwiZmluZEVsZW1lbnRzIiwib0VsZW0iLCJpc0EiLCJpIiwibGVuZ3RoIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJnZXRQYXRoIiwidGFyZ2V0IiwiaW5kZXhPZiIsInB1c2giLCJ0YWJsZSIsInN1YnNlY3Rpb24iLCJvVGFibGVzIiwiX29UYWJsZSIsIm9NRENUYWJsZSIsIm9TdWJzZWN0aW9uIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0xlbmd0aEZpbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJ3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkIiwic2V0VGltZW91dCIsIl9hcHBseUdyb3VwaW5nIiwiYWxsIiwiZ2V0TW9kZWwiLCJjaGVja01lc3NhZ2VzIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJvT2JqZWN0UGFnZUxheW91dCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsInNlY3Rpb24iLCJlbmFibGVCaW5kaW5nIiwiX2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyIsIl9mbkVuYWJsZUJpbmRpbmdzIiwidmlld0lkIiwiX2dldFZpZXdJZCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInVJTW9kZWwiLCJzZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCIsIm9UYWJsZSIsIm9Nb2RlbCIsImdldFByb3BlcnR5Iiwic1JlZkVycm9yQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiZ2V0Q29udGV4dCIsIl91cGRhdGVJbnRlcm5hbE1vZGVsIiwidGFibGVSb3dDb250ZXh0Iiwicm93SW5kZXgiLCJ0YWJsZVRhcmdldENvbFByb3BlcnR5IiwibWVzc2FnZU9iamVjdCIsImlzQ3JlYXRpb25Sb3ciLCJ0ZW1wIiwidGFyZ2V0Q29sUHJvcGVydHkiLCJtb2RlbCIsImNvbnRleHQiLCJhVmFsaWRNZXNzYWdlSWRzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1lc3NhZ2UiLCJhT2Jzb2xldGVNZXNzYWdlbElkcyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJpbnRlcm5hbE1lc3NhZ2VJZCIsIm9ic29sZXRlSWQiLCJhc3NpZ24iLCJfc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyIsInNBY3Rpb25OYW1lIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInNldEdyb3VwTmFtZSIsIl9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUiLCJzdWJTZWN0aW9uIiwiZWxlbWVudHMiLCJoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYWN0aW9uTmFtZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZGV0YWNoQ2hhbmdlIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiZWxlbWVudCIsInRhcmdldFRhYmxlSW5mbyIsImwiLCJ0YXJnZXRlZENvbnRyb2wiLCJpc0JhY2tFbmRNZXNzYWdlIiwiUmVnRXhwIiwidGVzdCIsImdldFRhcmdldHMiLCJnZXRQYXJlbnQiLCJyb3dCaW5kaW5nIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9iaiIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJvVGFyZ2V0VGFibGVJbmZvIiwic3ViVGl0bGUiLCJzZXRTdWJ0aXRsZSIsInNldEFjdGl2ZVRpdGxlIiwib1RhYmxlUm93Q29udGV4dCIsImlzSW5hY3RpdmUiLCJfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uIiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldEluZGV4Iiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJnZXRTdWJ0aXRsZSIsImZvcm1FbGVtZW50IiwicGFyZW50IiwibGFiZWwiLCJnZXRMYWJlbCIsImxhYmVsVGV4dCIsImlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuIiwiYklzT3JwaGFuRWxlbWVudCIsIl9nZXRNZGNUYWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0SGVhZGVyIiwidGFyZ2V0Q29sdW1uSW5kZXgiLCJfZ2V0VGFibGVDb2x1bW5JbmRleCIsImdldENvbHVtbnMiLCJnZXRQcm9wZXJ0eUtleSIsIl9nZXRUYWJsZVJvdyIsIl9nZXRUYWJsZVJvd0luZGV4Iiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZVN1YnRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwiZ2V0VmFsdWVTdGF0ZSIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsIl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmciLCJzZWN0aW9uQmFzZWRHcm91cE5hbWUiLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwidmlld0NvbnRleHRQYXRoIiwibWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSIsInNwbGl0IiwicG9wIiwiaW50ZXJuYWxNb2RlbCIsImludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoIiwiaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzdGFydHNXaXRoIiwiZmlyZUFjdGl2ZVRpdGxlUHJlc3MiLCJpdGVtIiwiYkluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsInNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQiLCJnZXRWaWV3RGF0YSIsInNlY3Rpb25MYXlvdXQiLCJtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCIsImJsb2NrIiwiZ2V0QmxvY2tzIiwiY29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYmxvY2tzIiwiZ2V0TWFpbkNvbnRlbnQiLCJGdW5jdGlvbiIsImFTdWJTZWN0aW9ucyIsImoiLCJrIiwiYVZpc2libGVTZWN0aW9ucyIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJzaG91bGRCcmVhayIsIm9NZXNzYWdlT2JqZWN0IiwiX2dldEdlbmVyYWxHcm91cFRleHQiLCJhQ29udHJvbHMiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsIm9UYXJnZXRlZENvbnRyb2wiLCJwZXJzaXN0ZW50IiwiZ2V0R3JvdXBOYW1lIiwiX2ZpbmRUYXJnZXRGb3JNZXNzYWdlIiwidmlld1BhdGgiLCJtZXNzYWdlVGFyZ2V0UGF0aCIsImluY2x1ZGVzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQ29udGV4dFBhdGhNZXRhZGF0YSIsIiRraW5kIiwiX2ZuRW5hYmxlU3ViU2VjdGlvbkJpbmRpbmciLCJnZXRNb3JlQmxvY2tzIiwic3ViQmxvY2siLCJnZXRBY3Rpb25zIiwiYWN0aW9ucyIsImFTZWN0aW9ucyIsImlTZWN0aW9uIiwiaVN1YlNlY3Rpb24iLCJvQWxsQmxvY2tzIiwiX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZyIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNDb250cm9sSWQiLCJvQ29udHJvbCIsIlZpZXciLCJfc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbiIsIm9EaWFnbm9zaXNUaXRsZSIsInNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyIiwiY29uZmlnIiwic0xvbmdUZXh0VXJsIiwiZ2V0TG9uZ3RleHRVcmwiLCJqUXVlcnkiLCJhamF4IiwidXJsIiwic3VjY2VzcyIsImRhdGEiLCJzRGlhZ25vc2lzVGV4dCIsImdldEh0bWxUZXh0Iiwib2xkRGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInNldERlc2NyaXB0aW9uIiwicHJvbWlzZSIsInNFcnJvciIsInJlamVjdCIsInByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXMiLCJ0YWJsZUNvbFByb3BlcnR5Iiwicm93SW5mb3JtYXRpb24iLCJ0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24iLCJnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJ0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCIsInRhYmxlQ29sVGV4dEFycmFuZ2VtZW50IiwibGFiZWxXaXRoVmFsdWUiLCJnZXRUYWJsZUNvbFZhbHVlIiwiY29tcHV0ZUNvbHVtbkluZm8iLCJ0YWJsZVRhcmdldENvbE5hbWUiLCJtc2dPYmoiLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImNvbHVtbkluZm8iLCJhdmFpbGFiaWxpdHkiLCJnZXRUeXBlIiwiam9pbiIsIl9uYXZpZ2F0aW9uQ29uZmlndXJlZCIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJfcmVmIiwidmlzaWJpbGl0eSIsImZpZWxkc0FmZmVjdGVkVGl0bGUiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJmaWVsZEFmZmVjdGVkVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImRpYWdub3Npc1RpdGxlIiwidUlNZXNzYWdlRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsImRpYWdub3Npc1RleHQiLCJtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50IiwiaGFuZGxlTm9NZXNzYWdlcyIsInNldFZpc2libGUiLCJmaXJlRXZlbnQiLCJpTWVzc2FnZUxlbmd0aCIsImNsZWFyVGltZW91dCIsIl9zZXRNZXNzYWdlRGF0YVRpbWVvdXQiLCJzSWNvbiIsIm9NZXNzYWdlcyIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJvUmVzb3VyY2VCdW5kbGUiLCJzQnV0dG9uVHlwZSIsIkJ1dHRvblR5cGUiLCJEZWZhdWx0IiwibWVzc2FnZUtleSIsIm1lc3NhZ2VUZXh0IiwidG9TdHJpbmciLCJNZXNzYWdlVHlwZSIsIk5lZ2F0aXZlIiwiQ3JpdGljYWwiLCJOZXV0cmFsIiwidG90YWxOdW1iZXJPZk1lc3NhZ2VzIiwic2V0VGV4dCIsIm1lc3NhZ2VDb3VudCIsIm1lc3NhZ2VLZXlzIiwic2luZ2xlVG9vbHRpcEtleSIsIm11bHRpcGxlVG9vbHRpcEtleSIsImVudHJpZXMiLCJtZXNzYWdlVHlwZSIsIm1lc3NhZ2VUeXBlQ291bnQiLCJNRVNTQUdFQlVUVE9OX1NIT1JUQ1VUIiwidG9vbFRpcCIsInNldFRvb2x0aXAiLCJzZXRJY29uIiwic2V0VHlwZSIsIm9QYWdlUmVhZHkiLCJnZXRDb250cm9sbGVyIiwicGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsIm5hdmlnYXRlQmFjayIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9JdGVtIiwiZ2V0UGFyYW1ldGVyIiwib01lc3NhZ2UiLCJiSXNCYWNrZW5kTWVzc2FnZSIsInNTZWN0aW9uVGl0bGUiLCJfZGVmYXVsdEZvY3VzIiwibWRjVGFibGUiLCJmb2N1c0luZm8iLCJwcmV2ZW50U2Nyb2xsIiwidGFyZ2V0SW5mbyIsImZvY3VzIiwic3ViU2VjdGlvbnMiLCJ2aXNpYmxlU2VjdGlvbnMiLCJjb250cm9scyIsIm9UYXJnZXRNZGNUYWJsZSIsImNvbnRyb2xJZHMiLCJjb250cm9sSWQiLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsInJlZHVjZSIsImFjYyIsInZhbCIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZSIsIm9SZWZFcnJvckNvbnRleHQiLCJvUmVmRXJyb3IiLCJfc2V0Rm9jdXNPblRhcmdldEZpZWxkIiwidGFyZ2V0TWRjVGFibGUiLCJpUm93SW5kZXgiLCJhVGFyZ2V0TWRjVGFibGVSb3ciLCJfZ2V0TWRjVGFibGVSb3dzIiwiaUZpcnN0VmlzaWJsZVJvdyIsIl9nZXRHcmlkVGFibGUiLCJnZXRGaXJzdFZpc2libGVSb3ciLCJvVGFyZ2V0Um93Iiwib1RhcmdldENlbGwiLCJnZXRUYXJnZXRDZWxsIiwic2V0Rm9jdXNUb0NvbnRyb2wiLCJlcnJvclByb3BlcnR5UGF0aCIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c09uVGFyZ2V0RmllbGQiLCJmb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwic2VjdGlvbldpdGhUaGVDb250cm9sIiwiZmluZCIsIl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSIsImhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uIiwiZ2V0Q29udHJvbElkcyIsImZpbmRTdWJTZWN0aW9uIiwic2V0TW9kZSIsImdyb3VwTmFtZXMiLCJmaW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2wiLCJ0aXRsZSIsImdldFRpdGxlIiwic29tZSIsInRhcmdldFJvdyIsImhhc05vbkVkaXRhYmxlRmllbGQiLCJnZXRFZGl0YWJsZSIsImlzQ29udHJvbEluVGFibGUiLCJlbGVtIiwiYUFsbFZpZXdFbGVtZW50cyIsImFFcnJvbmVvdXNDb250cm9scyIsImdldERvbVJlZiIsImFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzIiwiQ29sdW1uTGlzdEl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvVGFyZ2V0RmllbGQiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRNZXNzYWdlUmFuayIsImFFbGVtZW50cyIsImFBbGxFbGVtZW50cyIsInNlY3Rpb25SYW5rIiwiX2ZuRmlsdGVyVXBvbklkIiwiZ2V0Q29udHJvbElkIiwiZ2V0VmlzaWJsZSIsImhhc093blByb3BlcnR5Iiwic2VjdGlvbk5hbWUiLCJzdWJTZWN0aW9uTmFtZSIsImdldFBlcnNpc3RlbnQiLCJfZmlsdGVyT3V0TWVzc2FnZXNJbkRpYWxvZyIsImZuVGVzdCIsImFDb250cm9sSWRzIiwiaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2ciLCJGaWx0ZXIiLCJwYXRoIiwiY2FzZVNlbnNpdGl2ZSIsIl9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiYm91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24iLCJnZXRJZHNPZkZpZWxzZFdpdGhFcnJvclZhbGlkYXRpb24iLCJ2YWxpZGF0aW9uIiwibWF0Y2giLCJmaWx0ZXJzIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiYW5kIiwib1ZhbGlkYXRpb25GaWx0ZXJzIiwiaGlkZGVuRHJhZnRGaWx0ZXIiLCJvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIiLCJvRmlsdGVycyIsInNQYXRoIiwib1NvcnRlciIsIm9EaWFsb2dGaWx0ZXIiLCJvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMiLCJhVXNlckRlZmluZWRGaWx0ZXIiLCJhQ3VzdG9tRmlsdGVycyIsInZhbHVlMiIsIm9CaW5kaW5nQ29udGV4dCIsIm1lc3NhZ2VCdXR0b25IZWxwZXIiLCJnZXRDaGVja0NvbnRyb2xJblZpZXdGaWx0ZXIiLCJvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzIiwiZmlsdGVyQXJyYXkiLCJ2aWV3Q29udGV4dCIsImVkaXRGbG93IiwiZ2V0Um9vdENvbnRleHQiLCJnZXRIaWRkZW5EcmFmdFVzZUNhc2VGaWx0ZXIiLCJ2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIiLCJTdGFydHNXaXRoIiwib1ZhbGlkYXRpb25Db250ZXh0RGlhbG9nRmlsdGVycyIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJyYW5rQiIsInNvcnQiLCJfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwic1NlbGVjdGVkU2VjdGlvbklkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib1RhYmxlQ29udGV4dCIsIm9PUENvbnRleHQiLCJiU2hvdWxkV2FpdEZvclRhYmxlUmVmcmVzaCIsIm9FbGVtZW50Iiwib1BhcmVudEVsZW1lbnQiLCJvTWRjVGFibGUiLCJvVGFibGVSb3ciLCJnZXRUYWJsZSIsImZpbmRJbmRleCIsImdldFRhcmdldENlbGxJbmRleCIsImVsdCIsImdldENlbGxzIiwiY2VsbCIsImdldFRhcmdldENvbHVtbkluZGV4IiwidGFyZ2V0RWxlbWVudCIsInRhcmdldENlbGxJbmRleCIsInRhcmdldENlbGxJZCIsInRhYmxlQ29sdW1ucyIsImNvbHVtbiIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJzZWFyY2giLCJjb21wb25lbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJuYXZPYmplY3QiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldE5hdmlnYXRpb24iLCJzdWJPUENvbmZpZ3VyZWQiLCJuYXZDb25maWd1cmVkIiwiZGV0YWlsIiwicm91dGUiLCJnZXRSb3dTZXR0aW5ncyIsImdldFJvd0FjdGlvbnMiLCJtZXNzYWdlUG9wb3ZlciIsImZuRm9jdXMiLCJpc09wZW4iLCJmbk9uQ2xvc2UiLCJkZXRhY2hFdmVudCIsImF0dGFjaEV2ZW50IiwiY2xvc2UiLCJ3YXJuaW5nIiwiZXNjYXBlIiwiU3RyaW5nIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlQnV0dG9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRhcmdldFRhYmxlSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyB0eXBlIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VGaWx0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUZpbHRlclwiO1xuaW1wb3J0IE1lc3NhZ2VQb3BvdmVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21lc3NhZ2VzL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbHVtblByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgJEJ1dHRvblNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ29sdW1uTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0NvbHVtbkxpc3RJdGVtXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IHR5cGUgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBSZXNwb25zaXZlVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvcmVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBtZGNGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRlbnQgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgUm93IGZyb20gXCJzYXAvdWkvdGFibGUvUm93XCI7XG5pbXBvcnQgdHlwZSBVSVRhYmxlIGZyb20gXCJzYXAvdWkvdGFibGUvVGFibGVcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb24gZnJvbSBcIi4uL2NvbnRyb2xzL3NlY3Rpb24vU3ViU2VjdGlvblwiO1xuaW1wb3J0IG1lc3NhZ2VCdXR0b25IZWxwZXIgZnJvbSBcIi4vTWVzc2FnZUJ1dHRvbkhlbHBlclwiO1xuXG50eXBlIE1lc3NhZ2VDb3VudCA9IHtcblx0RXJyb3I6IG51bWJlcjtcblx0V2FybmluZzogbnVtYmVyO1xuXHRTdWNjZXNzOiBudW1iZXI7XG5cdEluZm9ybWF0aW9uOiBudW1iZXI7XG59O1xuXG50eXBlICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MgPSAkQnV0dG9uU2V0dGluZ3MgJiB7XG5cdG1lc3NhZ2VDaGFuZ2U6IEZ1bmN0aW9uO1xufTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlcy5NZXNzYWdlQnV0dG9uXCIpXG5jbGFzcyBNZXNzYWdlQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcblx0Y29uc3RydWN0b3IoaWQ/OiBzdHJpbmcgfCAkTWVzc2FnZUJ1dHRvblNldHRpbmdzLCBzZXR0aW5ncz86ICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN1cGVyKGlkLCBzZXR0aW5ncyk7XG5cdH1cblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MubWVzc2FnZXMuTWVzc2FnZUZpbHRlclwiLCBtdWx0aXBsZTogdHJ1ZSwgc2luZ3VsYXJOYW1lOiBcImN1c3RvbUZpbHRlclwiIH0pXG5cdGN1c3RvbUZpbHRlcnMhOiBNZXNzYWdlRmlsdGVyO1xuXG5cdEBldmVudCgpXG5cdG1lc3NhZ2VDaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHRwdWJsaWMgb01lc3NhZ2VQb3BvdmVyITogTWVzc2FnZVBvcG92ZXI7XG5cblx0cHVibGljIG9JdGVtQmluZGluZyE6IE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNHZW5lcmFsR3JvdXBUZXh0ID0gXCJcIjtcblxuXHRwcml2YXRlIF9zZXRNZXNzYWdlRGF0YVRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNWaWV3SWQgPSBcIlwiO1xuXG5cdHByaXZhdGUgc0xhc3RBY3Rpb25UZXh0ID0gXCJcIjtcblxuXHRwdWJsaWMgaXNIaWRkZW5EcmFmdEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRCdXR0b24ucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyk7XG5cdFx0dGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA9IChcblx0XHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0XG5cdFx0KT8uZW5hYmxlZDtcblx0XHQvL3ByZXNzIGV2ZW50IGhhbmRsZXIgYXR0YWNoZWQgdG8gb3BlbiB0aGUgbWVzc2FnZSBwb3BvdmVyXG5cdFx0dGhpcy5hdHRhY2hQcmVzcyh0aGlzLmhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MsIHRoaXMpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyID0gbmV3IE1lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHR0aGlzLm9JdGVtQmluZGluZy5hdHRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdGNvbnN0IG1lc3NhZ2VCdXR0b25JZCA9IHRoaXMuZ2V0SWQoKTtcblx0XHRpZiAobWVzc2FnZUJ1dHRvbklkKSB7XG5cdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5hZGRDdXN0b21EYXRhKG5ldyBDdXN0b21EYXRhKHsga2V5OiBcIm1lc3NhZ2VCdXR0b25JZFwiLCB2YWx1ZTogbWVzc2FnZUJ1dHRvbklkIH0pKTsgLy8gVE9ETyBjaGVjayBmb3IgY3VzdG9tIGRhdGEgdHlwZVxuXHRcdH1cblx0XHR0aGlzLmF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSh0aGlzLl9hcHBseUZpbHRlcnNBbmRTb3J0LmJpbmQodGhpcykpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmF0dGFjaEFjdGl2ZVRpdGxlUHJlc3ModGhpcy5fYWN0aXZlVGl0bGVQcmVzcy5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgTWVzc2FnZUJ1dHRvbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0V2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZVBvcG92ZXJQcmVzcyhvRXZlbnQ6IENvcmVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnRvZ2dsZShvRXZlbnQuZ2V0U291cmNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBncm91cHMgdGhlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gdGhleSBiZWxvbmcgdG8uXG5cdCAqIFRoaXMgbWV0aG9kIGZvcmNlIHRoZSBsb2FkaW5nIG9mIGNvbnRleHRzIGZvciBhbGwgdGFibGVzIGJlZm9yZSB0byBhcHBseSB0aGUgZ3JvdXBpbmcuXG5cdCAqIEBwYXJhbSBvVmlldyBDdXJyZW50IHZpZXcuXG5cdCAqIEByZXR1cm5zIFJldHVybiBwcm9taXNlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldzogRkVWaWV3KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYVdhaXRGb3JEYXRhOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRjb25zdCBvVmlld0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzID0gKHZpZXc6IFZpZXcpOiB7IHRhYmxlOiBNRENUYWJsZTsgc3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfVtdID0+IHtcblx0XHRcdGNvbnN0IG9SZXM6IHsgdGFibGU6IE1EQ1RhYmxlOyBzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9W10gPSBbXTtcblx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub0l0ZW1CaW5kaW5nLmdldENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBvVmlld0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRpZiAob1ZpZXdDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlOiBDb250cm9sID0gdmlldy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvT2JqZWN0UGFnZSkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQuZ2V0UGF0aCgpfS8ke29FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNZXNzYWdlc1tpXS50YXJnZXQuaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUmVzLnB1c2goeyB0YWJsZTogb0VsZW0sIHN1YnNlY3Rpb246IG9TdWJTZWN0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1Jlcztcblx0XHR9O1xuXHRcdC8vIFNlYXJjaCBmb3IgdGFibGUgcmVsYXRlZCB0byBNZXNzYWdlcyBhbmQgaW5pdGlhbGl6ZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYXJlbnQgc3Vic2VjdGlvbiB0byByZXRyaWV2ZSB0aGUgZGF0YVxuXHRcdGNvbnN0IG9UYWJsZXMgPSBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzLmJpbmQodGhpcykob1ZpZXcpO1xuXHRcdG9UYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAoX29UYWJsZSkge1xuXHRcdFx0Y29uc3Qgb01EQ1RhYmxlID0gX29UYWJsZS50YWJsZSxcblx0XHRcdFx0b1N1YnNlY3Rpb24gPSBfb1RhYmxlLnN1YnNlY3Rpb247XG5cdFx0XHRpZiAoIW9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpIHx8IG9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgIT09IG9WaWV3QmluZGluZ0NvbnRleHQ/LmdldFBhdGgoKSkge1xuXHRcdFx0XHRvU3Vic2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChvVmlld0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKCFvTURDVGFibGUuZ2V0Um93QmluZGluZygpLmlzTGVuZ3RoRmluYWwoKSkge1xuXHRcdFx0XHRcdGFXYWl0Rm9yRGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdG9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCkuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgd2FpdEZvckdyb3VwaW5nQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2FwcGx5R3JvdXBpbmcoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGFXYWl0Rm9yRGF0YSk7XG5cdFx0XHRvVmlldy5nZXRNb2RlbCgpLmNoZWNrTWVzc2FnZXMoKTtcblx0XHRcdGF3YWl0IHdhaXRGb3JHcm91cGluZ0FwcGxpZWQ7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBncm91cGluZyB0aGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2VQb3BPdmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgZ3JvdXBzIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgc2VjdGlvbiBvciBzdWJzZWN0aW9uIHRoZXkgYmVsb25nIHRvLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2FwcGx5R3JvdXBpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXQodGhpcywgdGhpcy5vT2JqZWN0UGFnZUxheW91dCk7XG5cdFx0aWYgKCF0aGlzLm9PYmplY3RQYWdlTGF5b3V0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCBzZWN0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdGNvbnN0IGVuYWJsZUJpbmRpbmcgPSB0aGlzLl9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXMsIGZhbHNlKTtcblx0XHRpZiAoZW5hYmxlQmluZGluZykge1xuXHRcdFx0dGhpcy5fZm5FbmFibGVCaW5kaW5ncyhzZWN0aW9uKTtcblx0XHR9XG5cdFx0Ly9DbGVhciBtZXNzYWdlVGFyZ2V0UHJvcGVydHlcblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKTtcblx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKTtcblx0XHRjb25zdCB1SU1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0dUlNb2RlbD8uc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aFwiLCB1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSByZWZFcnJvciBvYmplY3QuXG5cdCAqIFRoZSByZWZFcnJvciBjb250YWlucyBhIG1hcCB0byBzdG9yZSB0aGUgaW5kZXhlcyBvZiB0aGUgcm93cyB3aXRoIGVycm9ycy5cblx0ICogQHBhcmFtIG9UYWJsZSBUaGUgdGFibGUgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZ2V0IHRoZSByZWZFcnJvciBPYmplY3QuXG5cdCAqIEByZXR1cm5zIENvbnRleHQgb2YgdGhlIHJlZkVycm9yLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KG9UYWJsZTogTURDVGFibGUpOiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb1RhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vaW5pdGlhbGl6ZSB0aGUgcmVmRXJyb3IgcHJvcGVydHkgaWYgaXQgZG9lc24ndCBleGlzdFxuXHRcdGlmICghb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwicmVmRXJyb3JcIikpIHtcblx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShcInJlZkVycm9yXCIsIHt9LCBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSEpO1xuXHRcdH1cblx0XHRjb25zdCBzUmVmRXJyb3JDb250ZXh0UGF0aCA9XG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UGF0aCgpICtcblx0XHRcdFwiL3JlZkVycm9yL1wiICtcblx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkucmVwbGFjZShcIi9cIiwgXCIkXCIpICtcblx0XHRcdFwiJFwiICtcblx0XHRcdG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpLnJlcGxhY2UoXCIvXCIsIFwiJFwiKTtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Nb2RlbC5nZXRDb250ZXh0KHNSZWZFcnJvckNvbnRleHRQYXRoKTtcblx0XHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiXCIpKSB7XG5cdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoXCJcIiwge30sIG9Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Db250ZXh0O1xuXHR9XG5cblx0X3VwZGF0ZUludGVybmFsTW9kZWwoXG5cdFx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRyb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuXHRcdHRhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZU9iamVjdDogTWVzc2FnZSxcblx0XHRpc0NyZWF0aW9uUm93PzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRsZXQgdGVtcDtcblx0XHRpZiAoaXNDcmVhdGlvblJvdykge1xuXHRcdFx0dGVtcCA9IHtcblx0XHRcdFx0cm93SW5kZXg6IFwiQ3JlYXRpb25Sb3dcIixcblx0XHRcdFx0dGFyZ2V0Q29sUHJvcGVydHk6IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPyB0YWJsZVRhcmdldENvbFByb3BlcnR5IDogXCJcIlxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcCA9IHtcblx0XHRcdFx0cm93SW5kZXg6IHRhYmxlUm93Q29udGV4dCA/IHJvd0luZGV4IDogXCJcIixcblx0XHRcdFx0dGFyZ2V0Q29sUHJvcGVydHk6IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPyB0YWJsZVRhcmdldENvbFByb3BlcnR5IDogXCJcIlxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgbW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGNvbnRleHQgPSB0aGlzLl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCh0YWJsZSk7XG5cdFx0Ly93ZSBmaXJzdCByZW1vdmUgdGhlIGVudHJpZXMgd2l0aCBvYnNvbGV0ZSBtZXNzYWdlIGlkcyBmcm9tIHRoZSBpbnRlcm5hbCBtb2RlbCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgZXJyb3IgaW5mbyA6XG5cdFx0Y29uc3QgYVZhbGlkTWVzc2FnZUlkcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRJZCgpO1xuXHRcdFx0fSk7XG5cdFx0bGV0IGFPYnNvbGV0ZU1lc3NhZ2VsSWRzO1xuXHRcdGlmIChjb250ZXh0Py5nZXRQcm9wZXJ0eShcIlwiKSkge1xuXHRcdFx0YU9ic29sZXRlTWVzc2FnZWxJZHMgPSBPYmplY3Qua2V5cyhjb250ZXh0Py5nZXRQcm9wZXJ0eShcIlwiKSkuZmlsdGVyKGZ1bmN0aW9uIChpbnRlcm5hbE1lc3NhZ2VJZCkge1xuXHRcdFx0XHRyZXR1cm4gYVZhbGlkTWVzc2FnZUlkcy5pbmRleE9mKGludGVybmFsTWVzc2FnZUlkKSA9PT0gLTE7XG5cdFx0XHR9KTtcblx0XHRcdGFPYnNvbGV0ZU1lc3NhZ2VsSWRzLmZvckVhY2goZnVuY3Rpb24gKG9ic29sZXRlSWQpIHtcblx0XHRcdFx0ZGVsZXRlIGNvbnRleHQ/LmdldFByb3BlcnR5KFwiXCIpW29ic29sZXRlSWRdO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdG1vZGVsPy5zZXRQcm9wZXJ0eShcblx0XHRcdG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSxcblx0XHRcdE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQ/LmdldFByb3BlcnR5KG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSkgPyBjb250ZXh0LmdldFByb3BlcnR5KG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSkgOiB7fSwgdGVtcCksXG5cdFx0XHRjb250ZXh0XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgc2V0cyBncm91cHMgZm9yIHRyYW5zaWVudCBtZXNzYWdlcy5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIHRyYW5zaWVudCBtZXNzYWdlIGZvciB3aGljaCB3ZSB3YW50IHRvIGNvbXB1dGUgYW5kIHNldCBncm91cC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBhY3Rpb24gbmFtZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9zZXRHcm91cExhYmVsRm9yVHJhbnNpZW50TXNnKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5zTGFzdEFjdGlvblRleHQgPSB0aGlzLnNMYXN0QWN0aW9uVGV4dFxuXHRcdFx0PyB0aGlzLnNMYXN0QWN0aW9uVGV4dFxuXHRcdFx0OiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cblx0XHRtZXNzYWdlLnNldEdyb3VwTmFtZShgJHt0aGlzLnNMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IGdyb3VwcyBtZXNzYWdlcyBhbmQgYWRkcyB0aGUgc3VidGl0bGUuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHdlIHVzZSB0byBjb21wdXRlIHRoZSBncm91cCBhbmQgc3VidGl0bGUuXG5cdCAqIEBwYXJhbSBzZWN0aW9uIFRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGNvbnRyb2xzLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbiBUaGUgc3Vic2VjdGlvbiBjb250YWluaW5nIHRoZSBjb250cm9scy5cblx0ICogQHBhcmFtIGVsZW1lbnRzIExpc3Qgb2YgY29udHJvbHMgZnJvbSBhIHN1YnNlY3Rpb24gcmVsYXRlZCB0byBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIFRydWUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc3Vic2VjdGlvbiBpbiB0aGUgc2VjdGlvbi5cblx0ICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIGFjdGlvbiBuYW1lLCBpZiBhbnkuXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSB0aGUgbWVzc2FnZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUoXG5cdFx0bWVzc2FnZTogTWVzc2FnZUl0ZW0sXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0ZWxlbWVudHM6IFVJNUVsZW1lbnRbXSxcblx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdGFjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChzZWN0aW9uKTtcblx0XHR0aGlzLm9JdGVtQmluZGluZy5kZXRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCkgYXMgTWVzc2FnZTtcblx0XHRjb25zdCBzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdGxldCBlbGVtZW50OiBVSTVFbGVtZW50LFxuXHRcdFx0dGFibGU6IE1EQ1RhYmxlIHwgdW5kZWZpbmVkLFxuXHRcdFx0dGFyZ2V0VGFibGVJbmZvID0ge30gYXMgVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRcdGwsXG5cdFx0XHRyb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuXHRcdFx0dGFyZ2V0ZWRDb250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdFx0aXNDcmVhdGlvblJvdzogYm9vbGVhbjtcblx0XHRjb25zdCBpc0JhY2tFbmRNZXNzYWdlID0gbmV3IFJlZ0V4cChcIl4vXCIpLnRlc3QobWVzc2FnZU9iamVjdD8uZ2V0VGFyZ2V0cygpWzBdKTtcblx0XHRpZiAoaXNCYWNrRW5kTWVzc2FnZSkge1xuXHRcdFx0Zm9yIChsID0gMDsgbCA8IGVsZW1lbnRzLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50c1tsXTtcblx0XHRcdFx0dGFyZ2V0ZWRDb250cm9sID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKGVsZW1lbnQuaXNBKFwic2FwLm0uVGFibGVcIikgfHwgKGVsZW1lbnQgYXMgVUk1RWxlbWVudCkuaXNBKFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0dGFibGUgPSBlbGVtZW50LmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdFx0XHRcdGNvbnN0IHJvd0JpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0Y29uc3QgZm5DYWxsYmFja1NldEdyb3VwTmFtZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3NldEdyb3VwTGFiZWxGb3JUcmFuc2llbnRNc2cobWVzc2FnZSwgYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAocm93QmluZGluZyAmJiByb3dCaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU9iamVjdCxcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHJvd0JpbmRpbmcsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCxcblx0XHRcdFx0XHRcdFx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mbyA9IG9iai5vVGFyZ2V0VGFibGVJbmZvO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5zdWJUaXRsZSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLnNldFN1YnRpdGxlKG9iai5zdWJUaXRsZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoXG5cdFx0XHRcdFx0XHRcdCEhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgJiZcblx0XHRcdFx0XHRcdFx0XHQhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQ/LmlzSW5hY3RpdmUoKSAmJiAvLyBjaGVjayBpZiB0aGUgcm93Y29udGV4dCBpcyBhY3RpdmVcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkgIT09XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0UHJvcGVydHkoXCJ0YXJnZXRcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpIC8vIGNoZWNrIGlmIHRoZSB0YXJnZXQgb2YgdGhlIG1lc3NhZ2UgaXMgbm90IHRoZSByb3cgaXRzZWxmIChyZW1vdmUgdGhlIGxhc3QgLyBpZiBwcmVzZW50cylcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCAmJiAhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQuaXNJbmFjdGl2ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2Zvcm1hdE1lc3NhZ2VEZXNjcmlwdGlvbihcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHRhYmxlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyb3dJbmRleCA9IHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ICYmIHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnRlcm5hbE1vZGVsKFxuXHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0cm93SW5kZXgsXG5cdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VPYmplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cblx0XHRcdFx0XHRpZiAobWVzc2FnZS5nZXRTdWJ0aXRsZSgpID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRsZXQgZm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0bGV0IHBhcmVudCA9IHRhcmdldGVkQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRcdHdoaWxlIChwYXJlbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQuaXNBPEZvcm1FbGVtZW50PihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50ID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGZvcm1FbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybUVsZW1lbnQuZ2V0TGFiZWwoKTtcblx0XHRcdFx0XHRcdFx0bGV0IGxhYmVsVGV4dCA9IFwiXCI7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBsYWJlbCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsVGV4dCA9IGxhYmVsO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsVGV4dCA9IChsYWJlbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0U3VidGl0bGUobGFiZWxUZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvL2NoZWNrIGlmIHRoZSB0YXJnZXRlZCBjb250cm9sIGlzIGEgY2hpbGQgb2Ygb25lIG9mIHRoZSBvdGhlciBjb250cm9sc1xuXHRcdFx0XHRcdGNvbnN0IGlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuID0gbWVzc2FnZUhhbmRsaW5nLmJJc09ycGhhbkVsZW1lbnQodGFyZ2V0ZWRDb250cm9sLCBlbGVtZW50cyk7XG5cdFx0XHRcdFx0aWYgKGlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9UaGVyZSBpcyBvbmx5IG9uZSBlbHQgYXMgdGhpcyBpcyBhIGZyb250RW5kIG1lc3NhZ2Vcblx0XHRcdHRhcmdldGVkQ29udHJvbCA9IGVsZW1lbnRzWzBdO1xuXHRcdFx0dGFibGUgPSB0aGlzLl9nZXRNZGNUYWJsZSh0YXJnZXRlZENvbnRyb2wpO1xuXHRcdFx0dGFyZ2V0VGFibGVJbmZvID0ge30gYXMgVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0XHRcdGlmICh0YWJsZSkge1xuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSB0YWJsZS5nZXRIZWFkZXIoKTtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0Q29sdW1uSW5kZXggPSB0aGlzLl9nZXRUYWJsZUNvbHVtbkluZGV4KHRhcmdldGVkQ29udHJvbCk7XG5cdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0dGFyZ2V0Q29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRDb2x1bW5JbmRleCA+IC0xXG5cdFx0XHRcdFx0XHQ/IHRhYmxlLmdldENvbHVtbnMoKVt0YXJnZXRDb2x1bW5JbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUgPVxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSAmJiB0YXJnZXRDb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldENvbHVtbkluZGV4ID4gLTFcblx0XHRcdFx0XHRcdD8gdGFibGUuZ2V0Q29sdW1ucygpW3RhcmdldENvbHVtbkluZGV4XS5nZXRIZWFkZXIoKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlzQ3JlYXRpb25Sb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyh0YXJnZXRlZENvbnRyb2wpPy5pc0E8Q3JlYXRpb25Sb3c+KFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpID8/IGZhbHNlO1xuXHRcdFx0XHRpZiAoIWlzQ3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0XHRyb3dJbmRleCA9IHRoaXMuX2dldFRhYmxlUm93SW5kZXgodGFyZ2V0ZWRDb250cm9sKTtcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gdGFibGUuZ2V0Um93QmluZGluZygpLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ID1cblx0XHRcdFx0XHRcdHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzW3Jvd0luZGV4XSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtZXNzYWdlU3VidGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdFx0XHRcdG1lc3NhZ2VPYmplY3QsXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRpc0NyZWF0aW9uUm93LFxuXHRcdFx0XHRcdHRhcmdldENvbHVtbkluZGV4ID09PSAwICYmICh0YXJnZXRlZENvbnRyb2wgYXMgbWRjRmllbGQpLmdldFZhbHVlU3RhdGUoKSA9PT0gXCJFcnJvclwiXG5cdFx0XHRcdFx0XHQ/ICh0YXJnZXRlZENvbnRyb2wgYXMgQ29udHJvbClcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vc2V0IHRoZSBzdWJ0aXRsZVxuXHRcdFx0XHRpZiAobWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRTdWJ0aXRsZShtZXNzYWdlU3VidGl0bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoISF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCk7XG5cdFx0XHRcdGlmICh0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX2Zvcm1hdE1lc3NhZ2VEZXNjcmlwdGlvbihtZXNzYWdlLCB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCwgdGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsIHRhYmxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl91cGRhdGVJbnRlcm5hbE1vZGVsKFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHJvd0luZGV4LFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRtZXNzYWdlT2JqZWN0LFxuXHRcdFx0XHRcdGlzQ3JlYXRpb25Sb3dcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc2V0U2VjdGlvbk5hbWVJbkdyb3VwKSB7XG5cdFx0XHRjb25zdCBpbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0aGlzLl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmcoc2VjdGlvbiwgc3ViU2VjdGlvbiwgaGFzTXVsdGlwbGVTdWJTZWN0aW9ucyk7XG5cdFx0XHRjb25zdCBzZWN0aW9uQmFzZWRHcm91cE5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0c3ViU2VjdGlvbixcblx0XHRcdFx0aGFzTXVsdGlwbGVTdWJTZWN0aW9ucyxcblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRpbmNsdWRlVGFibGVHcm91cE5hbWVcblx0XHRcdCk7XG5cblx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHNlY3Rpb25CYXNlZEdyb3VwTmFtZSk7XG5cdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKSBhcyBzdHJpbmcpO1xuXHRcdFx0Y29uc3Qgdmlld0NvbnRleHRQYXRoID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSA9IG1lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdPy5zcGxpdChcIi9cIikucG9wKCk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aCA9IGludGVybmFsTW9kZWw/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5Q29udGV4dFBhdGggPSBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aD8uc3Vic3RyaW5nKFxuXHRcdFx0XHQwLFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIilcblx0XHRcdCk7XG5cdFx0XHQvLyBhY3RpdmVUaXRsZVByZXNzIHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZCBpbiBmb3J3YXJkIG5hdmlnYXRpb24gYW5kIG5vdCBpbiBiYWNrIG5hdmlnYXRpb25cblx0XHRcdGlmIChcblx0XHRcdFx0aW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoICYmXG5cdFx0XHRcdG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eU5hbWUgJiZcblx0XHRcdFx0dmlld0NvbnRleHRQYXRoICYmXG5cdFx0XHRcdG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eU5hbWUgPT09IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5wb3AoKSAmJlxuXHRcdFx0XHR2aWV3Q29udGV4dFBhdGgubGVuZ3RoID49IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlDb250ZXh0UGF0aC5sZW5ndGggJiZcblx0XHRcdFx0dmlld0NvbnRleHRQYXRoLnN0YXJ0c1dpdGgoaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmZpcmVBY3RpdmVUaXRsZVByZXNzKHsgaXRlbTogbWVzc2FnZSB9KTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX3NldE1lc3NhZ2VEYXRhLCB0aGlzKTtcblx0XHRyZXR1cm4gdGFyZ2V0ZWRDb250cm9sO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdG8gY2hlY2sgaWYgdGhlIHNlY3Rpb24gYW5kIHN1YnNlY3Rpb24gaGFzIHNpbmdsZSB0YWJsZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBPYmplY3RQYWdlIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdFBhZ2Ugc3ViIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIFRydWUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc3Vic2VjdGlvbiBpbiB0aGUgc2VjdGlvbi5cblx0ICogQHJldHVybnMgUmV0dXJucyBib29sZWFuIHZhbHVlIGZvciB0aGUgc2luZ2xlIGNvbnRyb2wgaW5zaWRlIHRoZSBzZWN0aW9uLCBieSBkZWZhdWx0IGl0IGlzIHRydWUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfY2hlY2tNZXJnZUxvZ2ljRm9yTWVzc2FnZUdyb3VwaW5nKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSk7XG5cdFx0Y29uc3QgdmlldyA9IHZpZXdJZCA/IChVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCkgYXMgVmlldykgOiB1bmRlZmluZWQ7XG5cdFx0bGV0IGJJbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGNvbnN0IHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQgPVxuXHRcdFx0IWhhc011bHRpcGxlU3ViU2VjdGlvbnMgJiYgKHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpPy5zZWN0aW9uTGF5b3V0ID09PSBcIlBhZ2VcIjtcblx0XHRjb25zdCBtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCA9XG5cdFx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zICYmICh2aWV3Py5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKT8uc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdFx0aWYgKHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQpIHtcblx0XHRcdGNvbnN0IGJsb2NrID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBibG9jay5sZW5ndGggPT09IDEgPyAoYmxvY2tbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3QpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGNvbnRlbnQ/LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobXVsdGlTdWJzZWN0aW9uSW5UYWJMYXlvdXQpIHtcblx0XHRcdGxldCBjb250ZW50O1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdC8vIEluIGNhc2Ugb2YgUmVmZXJlbmNlIEZhY2V0LCB0aGUgZmlyc3QgYmxvY2sgd2lsbCBiZSBTdWJTZWN0aW9uQmxvY2tcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxICYmIGJsb2Nrc1swXT8uaXNBPFN1YlNlY3Rpb25CbG9jaz4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHRcdGNvbnRlbnQgPSBibG9ja3NbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3Q7XG5cdFx0XHRcdGlmIChjb250ZW50Py5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29udGVudCA9XG5cdFx0XHRcdFx0XHQoY29udGVudCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcblx0XHRcdFx0XHRcdChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmdldE1haW5Db250ZW50KCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGggPT09IDEgJiYgY29udGVudFswXT8uaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYkluY2x1ZGVUYWJsZUdyb3VwTmFtZTtcblx0fVxuXG5cdF9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10sIGVuYWJsZUJpbmRpbmc/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuXHRcdGxldCBzZWN0aW9uLCBhU3ViU2VjdGlvbnMsIG1lc3NhZ2UsIGksIGosIGs7XG5cdFx0dGhpcy5zR2VuZXJhbEdyb3VwVGV4dCA9IHRoaXMuc0dlbmVyYWxHcm91cFRleHRcblx0XHRcdD8gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dFxuXHRcdFx0OiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHQvL0dldCBhbGwgc2VjdGlvbnMgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0Y29uc3QgYVZpc2libGVTZWN0aW9ucyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISk7XG5cdFx0aWYgKGFWaXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB2aWV3SWQgPyAoVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQpIGFzIFZpZXcpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzQWN0aW9uTmFtZVwiKTtcblx0XHRcdGlmIChzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHQob1ZpZXc/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwic0FjdGlvbk5hbWVcIiwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIG1lc3NhZ2VzXG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcblx0XHRcdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKGogPSBhVmlzaWJsZVNlY3Rpb25zLmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG5cdFx0XHRcdFx0bGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB2aXNpYmxlIHNlY3Rpb25zXG5cdFx0XHRcdFx0c2VjdGlvbiA9IGFWaXNpYmxlU2VjdGlvbnNbal07XG5cdFx0XHRcdFx0YVN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzdWItc2VjdGlvbnNcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNba107XG5cdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNHZW5lcmFsR3JvdXBUZXh0ID0gdGhpcy5fZ2V0R2VuZXJhbEdyb3VwVGV4dChvVmlldywgb01lc3NhZ2VPYmplY3QpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gbWVzc2FnZUhhbmRsaW5nLmdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChhQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0ZWRDb250cm9sID0gdGhpcy5fY29tcHV0ZU1lc3NhZ2VHcm91cEFuZFN1YlRpdGxlKFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRzdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250cm9scyxcblx0XHRcdFx0XHRcdFx0XHRhU3ViU2VjdGlvbnMubGVuZ3RoID4gMSxcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHdlIGZvdW5kIHRhYmxlIHRoYXQgbWF0Y2hlcyB3aXRoIHRoZSBtZXNzYWdlLCB3ZSBkb24ndCBzdG9wIHRoZSBsb29wXG5cdFx0XHRcdFx0XHRcdC8vIGluIGNhc2Ugd2UgZmluZCBhbiBhZGRpdGlvbmFsIGNvbnRyb2wgKGVnIG1kYyBmaWVsZCkgdGhhdCBhbHNvIG1hdGNoIHdpdGggdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRlZENvbnRyb2wgJiZcblx0XHRcdFx0XHRcdFx0XHQhb1RhcmdldGVkQ29udHJvbC5pc0EoXCJzYXAubS5UYWJsZVwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEob1RhcmdldGVkQ29udHJvbCBhcyBVSTVFbGVtZW50KS5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkQnJlYWsgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzaG91bGRCcmVhaykge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob01lc3NhZ2VPYmplY3QucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHRoaXMuc0dlbmVyYWxHcm91cFRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWVuYWJsZUJpbmRpbmcgJiYgbWVzc2FnZS5nZXRHcm91cE5hbWUoKSA9PT0gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dCAmJiB0aGlzLl9maW5kVGFyZ2V0Rm9yTWVzc2FnZShtZXNzYWdlKSkge1xuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIHNlY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdmlldyBwb3J0XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL0ZldGNoZXMgdGhlIGdyb3VwIG5hbWUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gZW5hYmxlZG1lbnQgb2YgaGlkZGVuIGRyYWZ0IGFuZCBwYWdlIHdoZXJlIGVycm9yIGlzIHByZXNlbnQoY3VycmVudCBwYWdlL290aGVyIHBhZ2UpXG5cdF9nZXRHZW5lcmFsR3JvdXBUZXh0KG9WaWV3OiBWaWV3IHwgdW5kZWZpbmVkLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgdmlld1BhdGggPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXRQYXRoID0gb01lc3NhZ2VPYmplY3Q/LmdldFRhcmdldHMoKVswXTtcblx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCAmJiB2aWV3UGF0aCAmJiAhbWVzc2FnZVRhcmdldFBhdGguaW5jbHVkZXModmlld1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX09USEVSX1BBR0VTXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRUYXJnZXRGb3JNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpICYmIG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKTtcblx0XHRpZiAobWVzc2FnZU9iamVjdCAmJiBtZXNzYWdlT2JqZWN0LnRhcmdldCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMub09iamVjdFBhZ2VMYXlvdXQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRjb250ZXh0UGF0aCA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChtZXNzYWdlT2JqZWN0LnRhcmdldCksXG5cdFx0XHRcdG9Db250ZXh0UGF0aE1ldGFkYXRhID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRpZiAob0NvbnRleHRQYXRoTWV0YWRhdGEgJiYgb0NvbnRleHRQYXRoTWV0YWRhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBiaW5kaW5ncyBvZiBzdWIgc2VjdGlvbiBjb250ZW50IChibG9ja3MsIG1vcmUgYmxvY2tzLCBhbmQgYWN0aW9ucykuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uXG5cdCAqL1xuXHRfZm5FbmFibGVTdWJTZWN0aW9uQmluZGluZyhzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQge1xuXHRcdHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdHN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRzdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X2ZuRW5hYmxlQmluZGluZ3MoYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IG9BbGxCbG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdFx0aWYgKG9BbGxCbG9ja3MpIHtcblx0XHRcdFx0XHR0aGlzLl9mbkVuYWJsZVN1YlNlY3Rpb25CaW5kaW5nKG9TdWJTZWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRcdHRoaXMuX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZygpO1xuXHRcdFx0XHRcdChvU3ViU2VjdGlvbi5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LmdldEJpbmRpbmcoKVxuXHRcdFx0XHRcdFx0LmF0dGFjaERhdGFSZWNlaXZlZCh0aGlzLl9maW5kTWVzc2FnZUdyb3VwQWZ0ZXJSZWJpbmRpbmcuYmluZCh0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZE1lc3NhZ2VHcm91cEFmdGVyUmViaW5kaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0dGhpcy5fY2hlY2tDb250cm9sSWRJblNlY3Rpb25zKGFNZXNzYWdlcywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IHJldHJpZXZlcyB0aGUgdmlldyBJRCAoSFRNTFZpZXcvWE1MVmlldy9KU09Odmlldy9KU1ZpZXcvVGVtcGxhdGV2aWV3KSBvZiBhbnkgY29udHJvbC5cblx0ICogQHBhcmFtIHNDb250cm9sSWQgSUQgb2YgdGhlIGNvbnRyb2wgbmVlZGVkIHRvIHJldHJpZXZlIHRoZSB2aWV3IElEXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3IElEIG9mIHRoZSBjb250cm9sXG5cdCAqL1xuXHRfZ2V0Vmlld0lkKHNDb250cm9sSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHNWaWV3SWQsXG5cdFx0XHRvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGwgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykge1xuXHRcdFx0XHRzVmlld0lkID0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gc1ZpZXdJZDtcblx0fVxuXG5cdF9zZXRMb25ndGV4dFVybERlc2NyaXB0aW9uKG9EaWFnbm9zaXNUaXRsZTogRm9ybWF0dGVkVGV4dCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyKGZ1bmN0aW9uIChjb25maWc6IHtcblx0XHRcdGl0ZW06IE1lc3NhZ2VJdGVtO1xuXHRcdFx0cHJvbWlzZToge1xuXHRcdFx0XHRyZXNvbHZlOiBGdW5jdGlvbjtcblx0XHRcdFx0cmVqZWN0OiBGdW5jdGlvbjtcblx0XHRcdH07XG5cdFx0fSkge1xuXHRcdFx0Ly8gSGVyZSB3ZSBjYW4gZmV0Y2ggdGhlIGRhdGEgYW5kIGNvbmNhdGVuYXRlIGl0IHRvIHRoZSBvbGQgb25lXG5cdFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgbG9uZ3RleHRVcmwgZmV0Y2hpbmcgd2lsbCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0aW9uICh3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW91cilcblx0XHRcdC8vIEhlcmUgYXMgd2UgaGF2ZSBvdmVyd3JpdHRlbiB0aGUgZGVmYXVsdCBhc3luYyBoYW5kbGVyLCB3aGljaCBmZXRjaGVzIGFuZCByZXBsYWNlcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1cblx0XHRcdC8vIHdlIGNhbiBtYW51YWxseSBtb2RpZnkgaXQgdG8gaW5jbHVkZSB3aGF0ZXZlciBuZWVkZWQuXG5cdFx0XHRjb25zdCBzTG9uZ1RleHRVcmwgPSBjb25maWcuaXRlbS5nZXRMb25ndGV4dFVybCgpO1xuXHRcdFx0aWYgKHNMb25nVGV4dFVybCkge1xuXHRcdFx0XHRqUXVlcnkuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJHRVRcIixcblx0XHRcdFx0XHR1cmw6IHNMb25nVGV4dFVybCxcblx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRGlhZ25vc2lzVGV4dCA9IG9EaWFnbm9zaXNUaXRsZS5nZXRIdG1sVGV4dCgpICsgZGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZERlc2NyaXB0aW9uID0gY29uZmlnLml0ZW0uZ2V0RGVzY3JpcHRpb24oKSA/PyBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uZmlnLml0ZW0uc2V0RGVzY3JpcHRpb24oYCR7b2xkRGVzY3JpcHRpb259JHtzRGlhZ25vc2lzVGV4dH1gKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRXJyb3IgPSBgQSByZXF1ZXN0IGhhcyBmYWlsZWQgZm9yIGxvbmcgdGV4dCBkYXRhLiBVUkw6ICR7c0xvbmdUZXh0VXJsfWA7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlamVjdChzRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSXQgZGlzcGxheXMgdGhlIHJvdyBpbmZvcm1hdGlvbiBvZiB0aGUgZXJyb3IgZXhpc3RpbmcgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVDb2xQcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyByb3dJbmZvcm1hdGlvblxuXHQgKi9cblxuXHRwcm9jZXNzVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKHRhYmxlOiBUYWJsZSwgdGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgdGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgcm93SW5mb3JtYXRpb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdHRhYmxlLFxuXHRcdFx0dGFibGVSb3dDb250ZXh0LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGggPSB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBsYWJlbFdpdGhWYWx1ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sVmFsdWUoXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0cm93SW5mb3JtYXRpb24gKz0gYCR7bGFiZWxXaXRoVmFsdWV9YDtcblxuXHRcdHJldHVybiByb3dJbmZvcm1hdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJdCBjb21wdXRlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSByb3dJbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHJldHVybnMgY29sdW1uSW5mb1xuXHQgKi9cblxuXHRjb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlOiBNZXNzYWdlSXRlbSwgdGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJvd0luZm9ybWF0aW9uOiBzdHJpbmdbXSwgdGFibGU6IFRhYmxlKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3QgbXNnT2JqID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IGNvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtc2dPYmosIHRhYmxlKTtcblx0XHRsZXQgY29sdW1uSW5mbyA9IFwiXCI7XG5cblx0XHRpZiAodGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHQvLyBpZiBjb2x1bW4gaW4gcHJlc2VudCBpbiB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRjb2x1bW5JbmZvID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX06ICR7dGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0fSBlbHNlIGlmIChjb2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdFx0aWYgKGNvbEZyb21UYWJsZVNldHRpbmdzLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaW4gbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb25cblx0XHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvID1cblx0XHRcdFx0XHRcdHJvd0luZm9ybWF0aW9uLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0PyBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NfRVJST1JcIil9ICR7cm93SW5mb3JtYXRpb24uam9pbihcIiwgXCIpfWAgKyBcIi5cIlxuXHRcdFx0XHRcdFx0XHQ6IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0FWQUlMQUJMRV9ESUFHTk9TSVNfTVNHREVTQ19FUlJPUlwiKX1gICsgXCIuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mbyA9XG5cdFx0XHRcdFx0XHRyb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHRcdD8gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT0xVTU5fQVZBSUxBQkxFX0RJQUdOT1NJU19NU0dERVNDXCIpfSAke3Jvd0luZm9ybWF0aW9uLmpvaW4oXCIsIFwiKX1gICsgXCIuXCJcblx0XHRcdFx0XHRcdFx0OiBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NcIil9YCArIFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaXMgbm90IGluIHRhYmxlIGRlZmluaXRpb24gYnV0IGluIHBlcnNvbmFsaXphdGlvblxuXHRcdFx0XHQvL2lmIG5vIG5hdmlnYXRpb24gdG8gc3ViIG9wIHRoZW4gcmVtb3ZlIGxpbmsgdG8gZXJyb3IgZmllbGQgQkNQIDogMjI4MDE2ODg5OVxuXHRcdFx0XHRpZiAoIXRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhYmxlKSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbHVtbkluZm8gPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpfTogJHtcblx0XHRcdFx0XHRjb2xGcm9tVGFibGVTZXR0aW5ncy5sYWJlbFxuXHRcdFx0XHR9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCIpfSlgO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0IGRpc3BsYXlzIHRoZSByb3cgaW5mb3JtYXRpb24gb2YgdGhlIGVycm9yIGV4aXN0aW5nIGluIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblxuXHRfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0dGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dGFibGU6IE1EQ1RhYmxlXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCB0YWJsZUNvbFByb3BlcnR5ID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyh0YWJsZVJvd0NvbnRleHQpO1xuXG5cdFx0Y29uc3Qgcm93SW5mb3JtYXRpb246IHN0cmluZ1tdID0gW107XG5cdFx0dGFibGVDb2xQcm9wZXJ0eT8uZm9yRWFjaCgoeyBrZXksIHZpc2liaWxpdHkgfSkgPT4ge1xuXHRcdFx0cm93SW5mb3JtYXRpb24ucHVzaCh0aGlzLnByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXModGFibGUsIHRhYmxlUm93Q29udGV4dCwgW3sga2V5LCB2aXNpYmlsaXR5IH1dKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlLCB0YWJsZVRhcmdldENvbE5hbWUsIHJvd0luZm9ybWF0aW9uLCB0YWJsZSk7XG5cblx0XHRjb25zdCBmaWVsZHNBZmZlY3RlZFRpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9GSUVMRFNfQUZGRUNURURfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdGxldCBmaWVsZEFmZmVjdGVkVGV4dDogc3RyaW5nO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHJvd0luZm9ybWF0aW9uKSAmJiByb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocm93SW5mb3JtYXRpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIElmIHRoZXJl4oCZcyBvbmx5IG9uZSBjb2x1bW4gaW4gdGhlIHRhYmxlLCBkaXNwbGF5IGl0IGluIGEgc2luZ2xlIGxpbmUuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTogJHtyb3dJbmZvcm1hdGlvbn08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLCBkaXNwbGF5IHRoZW0gaW4gbXVsdGlwbGUgbGluZXMuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTo8YnI+JmVtc3A7ICR7cm93SW5mb3JtYXRpb24uam9pbihcIjxicj4mZW1zcDsgXCIpfTxicj4ke2NvbHVtbkluZm99PGJyPmA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvID09IFwiXCIgfHwgIWNvbHVtbkluZm8pIHtcblx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBgJHtmaWVsZHNBZmZlY3RlZFRpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHQpfTogJHt0YWJsZS5nZXRIZWFkZXIoKX08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpYWdub3Npc1RpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ESUFHTk9TSVNfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdC8vIGdldCB0aGUgVUkgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBjb250ZXh0IHRvIHNldCBpdCB0byBEaWFnbm9zaXMgc2VjdGlvblxuXHRcdGNvbnN0IHVJTWVzc2FnZURlc2NyaXB0aW9uID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpLmRlc2NyaXB0aW9uO1xuXHRcdC8vc2V0IHRoZSBkZXNjcmlwdGlvbiB0byB1bmRlZmluZWQgdG8gcmVzZXQgaXQgYmVsb3dcblx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKHVuZGVmaW5lZCk7XG5cdFx0bGV0IGRpYWdub3Npc1RleHQgPSBcIlwiO1xuXHRcdGxldCBtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gXCJcIjtcblx0XHRpZiAobWVzc2FnZS5nZXRMb25ndGV4dFVybCgpKSB7XG5cdFx0XHRtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gZmllbGRBZmZlY3RlZFRleHQgPyBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+YCA6IFwiXCI7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdFx0dGhpcy5fc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbihkaWFnbm9zaXNUaXRsZSk7XG5cdFx0fSBlbHNlIGlmICh1SU1lc3NhZ2VEZXNjcmlwdGlvbikge1xuXHRcdFx0ZGlhZ25vc2lzVGV4dCA9IGAke2RpYWdub3Npc1RpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7dUlNZXNzYWdlRGVzY3JpcHRpb259YDtcblx0XHRcdG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQgPSBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+JHtkaWFnbm9zaXNUZXh0fWA7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKGZpZWxkQWZmZWN0ZWRUZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gc2hvdyBpbiB0aGUgTWVzc2FnZSBCb3guXG5cdCAqL1xuXHRoYW5kbGVOb01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJtZXNzYWdlQ2hhbmdlXCIsIHtcblx0XHRcdGlNZXNzYWdlTGVuZ3RoOiAwXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgYnV0dG9uIHRleHQsIGNvdW50IGFuZCBpY29uIHByb3BlcnR5IGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogQnV0dG9uVHlwZTogIFBvc3NpYmxlIHNldHRpbmdzIGZvciB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBhcmUgJ2NyaXRpY2FsJyBhbmQgJ25lZ2F0aXZlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9zZXRNZXNzYWdlRGF0YSgpOiB2b2lkIHtcblx0XHRjbGVhclRpbWVvdXQodGhpcy5fc2V0TWVzc2FnZURhdGFUaW1lb3V0KTtcblxuXHRcdHRoaXMuX3NldE1lc3NhZ2VEYXRhVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc0ljb24gPSBcIlwiLFxuXHRcdFx0XHRvTWVzc2FnZXMgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRJdGVtcygpLFxuXHRcdFx0XHRvTWVzc2FnZUNvdW50OiBNZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9LFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdFx0XHRpTWVzc2FnZUxlbmd0aCA9IG9NZXNzYWdlcy5sZW5ndGg7XG5cdFx0XHRsZXQgc0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG1lc3NhZ2VLZXkgPSBcIlwiLFxuXHRcdFx0XHRtZXNzYWdlVGV4dCA9IFwiXCI7XG5cdFx0XHRpZiAoaU1lc3NhZ2VMZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaU1lc3NhZ2VMZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICghb01lc3NhZ2VzW2ldLmdldFR5cGUoKSB8fCBvTWVzc2FnZXNbaV0uZ2V0VHlwZSgpLnRvU3RyaW5nKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdCsrb01lc3NhZ2VDb3VudFtcIkluZm9ybWF0aW9uXCJdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQrK29NZXNzYWdlQ291bnRbb01lc3NhZ2VzW2ldLmdldFR5cGUoKSBhcyBrZXlvZiBNZXNzYWdlQ291bnRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5lZ2F0aXZlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkNyaXRpY2FsO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5ldXRyYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0b3RhbE51bWJlck9mTWVzc2FnZXMgPVxuXHRcdFx0XHRcdG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXTtcblxuXHRcdFx0XHR0aGlzLnNldFRleHQodG90YWxOdW1iZXJPZk1lc3NhZ2VzLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRsZXQgbWVzc2FnZUNvdW50ID0gMDtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZUtleXMgPSB7XG5cdFx0XHRcdFx0RXJyb3I6IHtcblx0XHRcdFx0XHRcdHNpbmdsZVRvb2x0aXBLZXk6IFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiLFxuXHRcdFx0XHRcdFx0bXVsdGlwbGVUb29sdGlwS2V5OiBcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfTVVMVElQTEVfRVJST1JfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRXYXJuaW5nOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1dBUk5JTkdfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRJbmZvcm1hdGlvbjoge1xuXHRcdFx0XHRcdFx0c2luZ2xlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIsXG5cdFx0XHRcdFx0XHRtdWx0aXBsZVRvb2x0aXBLZXk6IFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRTdWNjZXNzOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9NVUxUSVBMRV9TVUNDRVNTX1RPT0xUSVBcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXNzYWdlS2V5cykpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlVHlwZSA9IGtleSBhcyBrZXlvZiBNZXNzYWdlQ291bnQ7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVR5cGVDb3VudCA9IG9NZXNzYWdlQ291bnRbbWVzc2FnZVR5cGVdO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlVHlwZUNvdW50ID4gMSkge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUNvdW50ID0gbWVzc2FnZVR5cGVDb3VudDtcblx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSB2YWx1ZS5tdWx0aXBsZVRvb2x0aXBLZXk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlQ291bnQgPT09IDEpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VDb3VudCA9IG1lc3NhZ2VUeXBlQ291bnQ7XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gdmFsdWUuc2luZ2xlVG9vbHRpcEtleTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobWVzc2FnZUtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQobWVzc2FnZUtleSk7XG5cdFx0XHRcdFx0Y29uc3QgTUVTU0FHRUJVVFRPTl9TSE9SVENVVCA9IFwiQ3RybCtTaGlmdCtNXCI7XG5cdFx0XHRcdFx0Y29uc3QgdG9vbFRpcCA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RPT0xUSVBcIlxuXHRcdFx0XHRcdCl9OiAke21lc3NhZ2VDb3VudH0gJHttZXNzYWdlVGV4dH0gKCR7TUVTU0FHRUJVVFRPTl9TSE9SVENVVH0pYDtcblx0XHRcdFx0XHR0aGlzLnNldFRvb2x0aXAodG9vbFRpcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRJY29uKHNJY29uKTtcblx0XHRcdFx0dGhpcy5zZXRUeXBlKHNCdXR0b25UeXBlKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHRjb25zdCBvVmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zVmlld0lkKSBhcyBGRVZpZXc7XG5cdFx0XHRcdGlmIChvVmlldykge1xuXHRcdFx0XHRcdGNvbnN0IG9QYWdlUmVhZHkgPSBvVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5O1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvUGFnZVJlYWR5LndhaXRQYWdlUmVhZHkoKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldyk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJmYWlsIGdyb3VwaW5nIG1lc3NhZ2VzXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcIm1lc3NhZ2VDaGFuZ2VcIiwge1xuXHRcdFx0XHRcdFx0aU1lc3NhZ2VMZW5ndGg6IGlNZXNzYWdlTGVuZ3RoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlNZXNzYWdlTGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhhbmRsZU5vTWVzc2FnZXMoKTtcblx0XHRcdH1cblx0XHR9LCAxMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSB0aXRsZSBvZiB0aGUgbWVzc2FnZS5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gdGhlIGhhbmRsZXJcblx0ICovXG5cdGFzeW5jIF9hY3RpdmVUaXRsZVByZXNzKG9FdmVudDogTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCB0cnVlKTtcblx0XHRjb25zdCBvSXRlbSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJpdGVtXCIpLFxuXHRcdFx0b01lc3NhZ2UgPSBvSXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKSxcblx0XHRcdGJJc0JhY2tlbmRNZXNzYWdlID0gbmV3IFJlZ0V4cChcIl4vXCIpLnRlc3Qob01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdKSxcblx0XHRcdG9WaWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNWaWV3SWQpIGFzIFZpZXc7XG5cdFx0aWYgKCFvSXRlbSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgb0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsIHNTZWN0aW9uVGl0bGU7XG5cdFx0Y29uc3QgX2RlZmF1bHRGb2N1cyA9IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlLCBtZGNUYWJsZTogTURDVGFibGUpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSwgdGFyZ2V0SW5mbzogbWVzc2FnZSB9O1xuXHRcdFx0bWRjVGFibGUuZm9jdXMoZm9jdXNJbmZvKTtcblx0XHR9O1xuXG5cdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGxldCBzZWN0aW9uLCBzdWJTZWN0aW9ucywgbWVzc2FnZSwgaSwgaiwgaztcblx0XHRjb25zdCB2aXNpYmxlU2VjdGlvbnMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQodGhpcy5vT2JqZWN0UGFnZUxheW91dCEpO1xuXHRcdGlmICh2aXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRcdGZvciAoaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgbWVzc2FnZXNcblx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuXHRcdFx0XHRmb3IgKGogPSB2aXNpYmxlU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHZpc2libGUgc2VjdGlvbnNcblx0XHRcdFx0XHRzZWN0aW9uID0gdmlzaWJsZVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IGsgPj0gMDsgLS1rKSB7XG5cdFx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHN1Yi1zZWN0aW9uc1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW2tdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9scyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uLCBtZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvVGFyZ2V0TWRjVGFibGUgPSBvTWVzc2FnZS5jb250cm9sSWRzXG5cdFx0XHQubWFwKChjb250cm9sSWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sLmdldFBhcmVudCgpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyBwYXJlbnRDb250cm9sIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwYXJlbnRDb250cm9sICYmXG5cdFx0XHRcdFx0cGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmXG5cdFx0XHRcdFx0b0l0ZW0uZ2V0R3JvdXBOYW1lKCkuaW5jbHVkZXMoKHBhcmVudENvbnRyb2wgYXMgVGFibGUpLmdldEhlYWRlcigpKVxuXHRcdFx0XHRcdD8gcGFyZW50Q29udHJvbFxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhY2M6IENvbnRyb2wsIHZhbDogQ29udHJvbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsID8gdmFsIDogYWNjO1xuXHRcdFx0fSk7XG5cblx0XHQvL2NoZWNrIGlmIHRoZSBwcmVzc2VkIGl0ZW0gaXMgcmVsYXRlZCB0byBhIHRhYmxlIGNvbnRyb2xcblx0XHRpZiAob1RhcmdldE1kY1RhYmxlKSB7XG5cdFx0XHRpZiAoYklzQmFja2VuZE1lc3NhZ2UpIHtcblx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgJiYgKG9UYXJnZXRNZGNUYWJsZS5nZXRJZCgpICE9PSB0aGlzLnNWaWV3SWQgfHwgYklzR2VuZXJhbEdyb3VwTmFtZSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZChvVGFyZ2V0TWRjVGFibGUuZ2V0SWQoKSk7XG5cdFx0XHRcdFx0XHQoKFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdFx0XHRcdFx0XHRvVGFyZ2V0TWRjVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISxcblx0XHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yQ29udGV4dCA9IHRoaXMuX2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yID0gb1JlZkVycm9yQ29udGV4dD8uZ2V0UHJvcGVydHkob0l0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKS5nZXRJZCgpKTtcblx0XHRcdFx0XHRjb25zdCBfc2V0Rm9jdXNPblRhcmdldEZpZWxkID0gYXN5bmMgKHRhcmdldE1kY1RhYmxlOiBNRENUYWJsZSwgaVJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFUYXJnZXRNZGNUYWJsZVJvdyA9IHRoaXMuX2dldE1kY1RhYmxlUm93cyh0YXJnZXRNZGNUYWJsZSksXG5cdFx0XHRcdFx0XHRcdGlGaXJzdFZpc2libGVSb3cgPSB0aGlzLl9nZXRHcmlkVGFibGUodGFyZ2V0TWRjVGFibGUpPy5nZXRGaXJzdFZpc2libGVSb3coKSA/PyAwO1xuXHRcdFx0XHRcdFx0aWYgKGFUYXJnZXRNZGNUYWJsZVJvdy5sZW5ndGggPiAwICYmIGFUYXJnZXRNZGNUYWJsZVJvd1swXSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0Um93ID0gYVRhcmdldE1kY1RhYmxlUm93W2lSb3dJbmRleCAtIGlGaXJzdFZpc2libGVSb3ddLFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRDZWxsID0gdGhpcy5nZXRUYXJnZXRDZWxsKG9UYXJnZXRSb3csIG9NZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0aWYgKG9UYXJnZXRDZWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRGb2N1c1RvQ29udHJvbChvVGFyZ2V0Q2VsbCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb250cm9sIG5vdCBmb3VuZCBvbiB0YWJsZVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVycm9yUHJvcGVydHlQYXRoID0gb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0KG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIGVycm9yUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhcmdldE1kY1RhYmxlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1RhcmdldFJvdy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIkdyaWRUYWJsZVwiICYmIG9SZWZFcnJvci5yb3dJbmRleCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb1RhcmdldE1kY1RhYmxlLnNjcm9sbFRvSW5kZXgob1JlZkVycm9yLnJvd0luZGV4KTtcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPblRhcmdldEZpZWxkID0gYXdhaXQgX3NldEZvY3VzT25UYXJnZXRGaWVsZChvVGFyZ2V0TWRjVGFibGUsIG9SZWZFcnJvci5yb3dJbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvY3VzT25UYXJnZXRGaWVsZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdF9kZWZhdWx0Rm9jdXMob01lc3NhZ2UsIG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmb2N1c2luZyBvbiBlcnJvclwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiICYmIG9SZWZFcnJvcikge1xuXHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID0gYXdhaXQgdGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2woXG5cdFx0XHRcdFx0XHRcdG9WaWV3LFxuXHRcdFx0XHRcdFx0XHRvTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHRvUmVmRXJyb3Iucm93SW5kZXhcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRpZiAoZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRfZGVmYXVsdEZvY3VzKG9NZXNzYWdlLCBvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRmFpbCB0byBuYXZpZ2F0ZSB0byBFcnJvciBjb250cm9sXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob01lc3NhZ2UuY29udHJvbElkc1swXSk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vSWYgdGhlIGNvbnRyb2wgdW5kZXJseWluZyB0aGUgZnJvbnRFbmQgbWVzc2FnZSBpcyBub3Qgd2l0aGluIHRoZSBjdXJyZW50IHNlY3Rpb24sIHdlIGZpcnN0IGdvIGludG8gdGhlIHRhcmdldCBzZWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IHNlY3Rpb25zID0gKHRoaXMub09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRjb25zdCBzZWN0aW9uV2l0aFRoZUNvbnRyb2wgPSBzZWN0aW9ucy5maW5kKChzZWN0aW9uKSA9PiBzZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5pbmNsdWRlcyhvQ29udHJvbCBhcyBVSTVFbGVtZW50KSk7XG5cdFx0XHRcdFx0aWYgKHNlY3Rpb25XaXRoVGhlQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdFx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2wob0NvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDYWxsIHRoZSBmdW5jdGlvbiB3aGVyZXZlciBuZWVkZWRcblx0XHRcdHRoaXMuaGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW0sIHZpc2libGVTZWN0aW9ucywgb01lc3NhZ2UsIG9WaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgbWVzc2FnZSBuYXZpZ2F0aW9uIGJ5IGZpbmRpbmcgdGhlIGFzc29jaWF0ZWQgc3Vic2VjdGlvbiwgZXhwYW5kaW5nIGl0LFxuXHQgKiBhbmQgbmF2aWdhdGluZyB0byB0aGUgY29ycmVjdCBzZWN0aW9uIGluIHRoZSBPYmplY3QgUGFnZSBMYXlvdXQuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvTWVzc2FnZSBUaGUgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBjb250cm9sIElEcy5cblx0ICogQHBhcmFtIG9WaWV3IFRoZSBjdXJyZW50IFVJNSB2aWV3LlxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW06IE1lc3NhZ2VJdGVtLCB2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sIG9NZXNzYWdlOiBNZXNzYWdlLCBvVmlldzogVmlldyk6IHZvaWQge1xuXHRcdC8vIEdldCBjb250cm9sIGlmIGl0IGlzIGluc2lkZSBhIGhpZGRlbiBzdWJzZWN0aW9uXG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9NZXNzYWdlLmdldENvbnRyb2xJZHMoKVswXSk7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSB0aGlzLmZpbmRTdWJTZWN0aW9uKG9JdGVtLCB2aXNpYmxlU2VjdGlvbnMsIG9Db250cm9sKTtcblxuXHRcdC8vIElmIHN1YnNlY3Rpb24gZm91bmQsIGV4cGFuZCBpdFxuXHRcdGlmIChvU3ViU2VjdGlvbikge1xuXHRcdFx0KG9TdWJTZWN0aW9uIGFzIFN1YlNlY3Rpb24pLnNldE1vZGUoXCJFeHBhbmRlZFwiKTtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0ZSB0byB0aGUgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbWVzc2FnZSdzIGdyb3VwIG5hbWVcblx0XHRjb25zdCBzU2VjdGlvblRpdGxlID0gb0l0ZW0uZ2V0R3JvdXBOYW1lKCkuc3BsaXQoXCIsIFwiKVswXTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cblx0XHQvLyBGb2N1cyBvbiB0aGUgdGFyZ2V0IGNvbnRyb2xcblx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIHRoZSBjb3JyZXNwb25kaW5nIHN1YnNlY3Rpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIG1lc3NhZ2UgaXRlbSdzIGdyb3VwIG5hbWVcblx0ICogb3IgYnkgY2hlY2tpbmcgaWYgdGhlIGdpdmVuIGNvbnRyb2wgZXhpc3RzIGluc2lkZSB0aGUgc3Vic2VjdGlvbidzIE1vcmVCbG9ja3MuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgVUk1IGNvbnRyb2wgdG8gY2hlY2sgZm9yIGluc2lkZSBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uLCBzZWN0aW9uLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdGZpbmRTdWJTZWN0aW9uKFxuXHRcdG9JdGVtOiBNZXNzYWdlSXRlbSxcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWRcblx0KTogU3ViU2VjdGlvbiB8IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5rbm93biB8IG51bGwge1xuXHRcdGNvbnN0IGdyb3VwTmFtZXMgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpO1xuXHRcdHJldHVybiB0aGlzLmZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbCh2aXNpYmxlU2VjdGlvbnMsIGdyb3VwTmFtZXNbMV0sIG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWFyY2hlcyBmb3IgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiB0aXRsZSBvciBieSBjaGVja2luZ1xuXHQgKiBpZiB0aGUgc3BlY2lmaWVkIGNvbnRyb2wgaXMgcHJlc2VudCBpbnNpZGUgdGhlIHN1YnNlY3Rpb24ncyBNb3JlQmxvY2tzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMuXG5cdCAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdG8gbWF0Y2ggYWdhaW5zdCBzdWJzZWN0aW9uIHRpdGxlcy5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBVSTUgY29udHJvbCB0byBzZWFyY2ggZm9yIHdpdGhpbiBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uIG9yIG51bGwgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG5cdCAqL1xuXHRwcml2YXRlIGZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbChcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0dGl0bGU6IHN0cmluZyxcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZFxuXHQpOiBTdWJTZWN0aW9uIHwgbnVsbCB7XG5cdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHZpc2libGVTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBzdWJzZWN0aW9uIHRpdGxlIG1hdGNoZXNcblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSA9PT0gdGl0bGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3ViU2VjdGlvbiBhcyBTdWJTZWN0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgY29udHJvbCBleGlzdHMgaW5zaWRlIE1vcmVCbG9ja3Ncblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHN1YlNlY3Rpb25cblx0XHRcdFx0XHRcdC5nZXRNb3JlQmxvY2tzKClcblx0XHRcdFx0XHRcdC5zb21lKFxuXHRcdFx0XHRcdFx0XHQoYmxvY2spID0+XG5cdFx0XHRcdFx0XHRcdFx0KChibG9jayBhcyBWaWV3KS5nZXRDb250ZW50KCkgYXMgdW5rbm93biBhcyBDb250ZW50KT8uZmluZEVsZW1lbnRzKHRydWUpLmluY2x1ZGVzKG9Db250cm9sIGFzIFVJNUVsZW1lbnQpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBzdWJTZWN0aW9uIGFzIFN1YlNlY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdGFibGUgY2VsbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UsIGVuc3VyaW5nIHRoZSBjZWxsIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Um93IEEgdGFibGUgcm93XG5cdCAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2UgdGFyZ2V0aW5nIGEgY2VsbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBlZGl0YWJsZSBjZWxsIG9yIG51bGwvdW5kZWZpbmVkIGlmIG5vbmUgaXMgZm91bmRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFRhcmdldENlbGwodGFyZ2V0Um93OiBVSTVFbGVtZW50LCBtZXNzYWdlOiBNZXNzYWdlKTogVUk1RWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZHMgPSBtZXNzYWdlLmdldENvbnRyb2xJZHMoKTtcblx0XHRjb25zdCBoYXNOb25FZGl0YWJsZUZpZWxkID0gY29udHJvbElkcy5zb21lKChpZCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkPjtcblx0XHRcdHJldHVybiBjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGNvbnRyb2wuZ2V0RWRpdGFibGUgJiYgIWNvbnRyb2wuZ2V0RWRpdGFibGUoKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBjb250cm9sSWRzLmxlbmd0aCA+IDBcblx0XHRcdD8gY29udHJvbElkc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKGNvbnRyb2xJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDb250cm9sSW5UYWJsZSA9IHRhcmdldFJvdy5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKGVsZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0SWQoKSA9PT0gY29udHJvbElkO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NvbnRyb2xJblRhYmxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD47XG5cdFx0XHRcdFx0XHRcdGlmIChoYXNOb25FZGl0YWJsZUZpZWxkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQ/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmdldEVkaXRhYmxlICYmICFlbGVtZW50LmdldEVkaXRhYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlZHVjZShmdW5jdGlvbiAoYWNjLCB2YWwpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWwgPyB2YWwgOiBhY2M7XG5cdFx0XHRcdFx0fSwgbnVsbClcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBvbiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdGFyZ2V0aW5nIHRoZSBjb250cm9sIG9uIHdoaWNoIHdlIHdhbnQgdG8gc2V0IHRoZSBmb2N1c1xuXHQgKiBAcGFyYW0gdGFyZ2V0TWRjVGFibGUgVGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHBhcmFtIHJvd0luZGV4IFRoZSByb3cgaW5kZXggb2YgdGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sKFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHR0YXJnZXRNZGNUYWJsZT86IE1EQ1RhYmxlLFxuXHRcdHJvd0luZGV4PzogbnVtYmVyXG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGFBbGxWaWV3RWxlbWVudHMgPSB2aWV3LmZpbmRFbGVtZW50cyh0cnVlKTtcblx0XHRjb25zdCBhRXJyb25lb3VzQ29udHJvbHMgPSBtZXNzYWdlXG5cdFx0XHQuZ2V0Q29udHJvbElkcygpXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzQ29udHJvbElkOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGFBbGxWaWV3RWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gc0NvbnRyb2xJZCAmJiBvRWxlbS5nZXREb21SZWYoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAoc0NvbnRyb2xJZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdFx0fSk7XG5cdFx0Y29uc3QgYU5vdFRhYmxlRXJyb25lb3VzQ29udHJvbHMgPSBhRXJyb25lb3VzQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICFvRWxlbT8uaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpICYmICFvRWxlbT8uaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpO1xuXHRcdH0pO1xuXHRcdC8vVGhlIGZvY3VzIGlzIHNldCBvbiBOb3QgVGFibGUgY29udHJvbCBpbiBwcmlvcml0eVxuXHRcdGlmIChhTm90VGFibGVFcnJvbmVvdXNDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKGFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzWzBdKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChhRXJyb25lb3VzQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhcmdldE1kY1RhYmxlUm93ID0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0PyB0YXJnZXRNZGNUYWJsZS5maW5kRWxlbWVudHMoXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0KGVsZW06IENvbnRyb2wpID0+XG5cdFx0XHRcdFx0XHRcdGVsZW0uaXNBKENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAmJiBlbGVtLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSA9PT0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogW107XG5cdFx0XHRpZiAoYVRhcmdldE1kY1RhYmxlUm93Lmxlbmd0aCA+IDAgJiYgYVRhcmdldE1kY1RhYmxlUm93WzBdKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRSb3cgPSBhVGFyZ2V0TWRjVGFibGVSb3dbcm93SW5kZXggYXMgbnVtYmVyXTtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldENlbGwgPSB0aGlzLmdldFRhcmdldENlbGwob1RhcmdldFJvdywgbWVzc2FnZSk7XG5cdFx0XHRcdGlmIChvVGFyZ2V0Q2VsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRGaWVsZCA9IG9UYXJnZXRDZWxsLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpXG5cdFx0XHRcdFx0XHQ/IChvVGFyZ2V0Q2VsbC5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHRcdFx0OiAoKChvVGFyZ2V0Q2VsbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdIGFzIEZpZWxkKS5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKG9UYXJnZXRGaWVsZCk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvclByb3BlcnR5UGF0aCA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0KHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIiwgZXJyb3JQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFyZ2V0TWRjVGFibGUgJiYgdGhpcy5fbmF2aWdhdGlvbkNvbmZpZ3VyZWQodGFyZ2V0TWRjVGFibGUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRSb3cuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqIFRoZSBtZXNzYWdlIG9iamVjdFxuXHQgKiBAcGFyYW0gYVNlY3Rpb25zIFRoZSBhcnJheSBvZiBzZWN0aW9ucyBpbiB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogQHJldHVybnMgVGhlIHJhbmsgb2YgdGhlIG1lc3NhZ2Vcblx0ICovXG5cdF9nZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2UgJiB7IHNlY3Rpb25OYW1lOiBzdHJpbmc7IHN1YlNlY3Rpb25OYW1lOiBzdHJpbmcgfSwgYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcblx0XHRpZiAoYVNlY3Rpb25zKSB7XG5cdFx0XHRsZXQgc2VjdGlvbiwgYVN1YlNlY3Rpb25zLCBzdWJTZWN0aW9uLCBqLCBrLCBhRWxlbWVudHMsIGFBbGxFbGVtZW50cywgc2VjdGlvblJhbms7XG5cdFx0XHRmb3IgKGogPSBhU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzZWN0aW9uc1xuXHRcdFx0XHRzZWN0aW9uID0gYVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRhU3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgc3ViLXNlY3Rpb25zXG5cdFx0XHRcdFx0c3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1trXTtcblx0XHRcdFx0XHRhQWxsRWxlbWVudHMgPSBzdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKTsgLy8gR2V0IGFsbCBlbGVtZW50cyBpbnNpZGUgYSBzdWItc2VjdGlvblxuXHRcdFx0XHRcdC8vVHJ5IHRvIGZpbmQgdGhlIGNvbnRyb2wgMSBpbnNpZGUgdGhlIHN1YiBzZWN0aW9uXG5cdFx0XHRcdFx0YUVsZW1lbnRzID0gYUFsbEVsZW1lbnRzLmZpbHRlcih0aGlzLl9mbkZpbHRlclVwb25JZC5iaW5kKHRoaXMsIG9iai5nZXRDb250cm9sSWQoKSkpO1xuXHRcdFx0XHRcdHNlY3Rpb25SYW5rID0gaiArIDE7XG5cdFx0XHRcdFx0aWYgKGFFbGVtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRpZiAoc2VjdGlvbi5nZXRWaXNpYmxlKCkgJiYgc3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoXCJzZWN0aW9uTmFtZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdG9iai5zZWN0aW9uTmFtZSA9IHNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShcInN1YlNlY3Rpb25OYW1lXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b2JqLnN1YlNlY3Rpb25OYW1lID0gc3ViU2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWN0aW9uUmFuayAqIDEwICsgKGsgKyAxKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHNlY3Rpb24gb3Igc3Vic2VjdGlvbiBpcyBpbnZpc2libGUgdGhlbiBncm91cCBuYW1lIHdvdWxkIGJlIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRcdC8vIHNvIHJhbmtpbmcgc2hvdWxkIGJlIGxvd2VyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9pZiBzdWIgc2VjdGlvbiB0aXRsZSBpcyBPdGhlciBtZXNzYWdlcywgd2UgcmV0dXJuIGEgaGlnaCBudW1iZXIocmFuayksIHdoaWNoIGVuc3VyZXNcblx0XHRcdC8vdGhhdCBtZXNzYWdlcyBiZWxvbmdpbmcgdG8gdGhpcyBzdWIgc2VjdGlvbiBhbHdheXMgY29tZSBsYXRlciBpbiBtZXNzYWdlUG9wb3ZlclxuXHRcdFx0aWYgKCFvYmouc2VjdGlvbk5hbWUgJiYgIW9iai5zdWJTZWN0aW9uTmFtZSAmJiBvYmouZ2V0UGVyc2lzdGVudCgpKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDk5OTtcblx0XHR9XG5cdFx0cmV0dXJuIDk5OTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgRmlsdGVyIHRvIGhpZGUgbWVzc2FnZXMgZnJvbSB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJcblx0ICovXG5cdF9maWx0ZXJPdXRNZXNzYWdlc0luRGlhbG9nKCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgZm5UZXN0ID0gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhhQ29udHJvbElkcyk7XG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBzdWNjZXNzIG1lc3NhZ2UgYm91bmQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgd2UgZG8gbm90IGZpbHRlciBpdCBvdXQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaWYgdGhlIHNpbmdsZSBzdWNjZXNzIG1lc3NhZ2UgaXMgZm91bmRcblx0ICovXG5cdF9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcyA9IFtdO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2Vzc1xuXHRcdFx0KSB7XG5cdFx0XHRcdGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChib3VuZENvbnRleHRTdWNjZXNzTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gd2Ugd2FudCB0byBoaWRlIHN1Y2Nlc3MgbWVzc2FnZXMgb25seSBpZiB0aGV5IGFyZSBib3VuZCB0byB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzaW5nbGUgc3VjY2VzcyBtZXNzYWdlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaWx0ZXIgZnVuY3Rpb24gdG8gaGlkZSBiYWNrLWVuZCBtZXNzYWdlcyBpZiB0aGUgY29udHJvbCBoYXMgZXJyb3IgdmFsaWRhdGlvbi5cblx0ICogQHJldHVybnMgRmlsdGVyXG5cdCAqL1xuXHRfZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpOiBGaWx0ZXIge1xuXHRcdGNvbnN0IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpOiBzdHJpbmdbXSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS52YWxpZGF0aW9uID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0Q29udHJvbElkKCk/Lm1hdGNoKC9maWVsZC4qLWlubmVyJC9pKSlcblx0XHRcdFx0XHQvL3RoZSBlcnJvciBwb2ludCB0byB0aGUgaW5uZXIgY29udHJvbCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIC1pbm5lciB0byBnZXQgdGhlIGZpZWxkIGlkXG5cdFx0XHRcdFx0Lm1hcCgobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRDb250cm9sSWQoKT8ucmVwbGFjZShcIi1pbm5lclwiLCBcIlwiKSlcblx0XHRcdCk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZuVGVzdCA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdC8vIGZpbHRlcmluZyBvdXQgdGhlIGJhY2tlbmQgbWVzc2FnZXMgaWYgdGhlIGNvbnRyb2wgaGFzIGVycm9yIHZhbGlkYXRpb25cblx0XHRcdHJldHVybiAhYUNvbnRyb2xJZHMuc29tZSgoY29udHJvbElkOiBzdHJpbmcpID0+IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbigpLmluY2x1ZGVzKGNvbnRyb2xJZCkpO1xuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdFx0dmFsdWUxOiBmYWxzZVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdFx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHZhbHVlMTogdHJ1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XSxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSBmaWx0ZXJzIGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogVGhlIGRlc2lyZWQgZmlsdGVyIG9wZXJhdGlvbiBpczpcblx0ICogKCBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHVzZXIgJiYgKCB2YWxpZGF0aW9uID0gdHJ1ZSAmJiBDb250cm9sIHNob3VsZCBiZSBwcmVzZW50IGluIHZpZXcgKSB8fCBtZXNzYWdlcyBmb3IgdGhlIGN1cnJlbnQgbWF0Y2hpbmcgY29udGV4dCApLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5RmlsdGVyc0FuZFNvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG9WYWxpZGF0aW9uRmlsdGVycyxcblx0XHRcdGhpZGRlbkRyYWZ0RmlsdGVyLFxuXHRcdFx0b1ZhbGlkYXRpb25BbmRDb250ZXh0RmlsdGVyLFxuXHRcdFx0b0ZpbHRlcnMsXG5cdFx0XHRzUGF0aCxcblx0XHRcdG9Tb3J0ZXIsXG5cdFx0XHRvRGlhbG9nRmlsdGVyLFxuXHRcdFx0b2JqZWN0UGFnZUxheW91dFNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFVc2VyRGVmaW5lZEZpbHRlcjogRmlsdGVyW10gPSBbXTtcblxuXHRcdHRoaXMuc1ZpZXdJZCA9IHRoaXMuc1ZpZXdJZCA/IHRoaXMuc1ZpZXdJZCA6ICh0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKSBhcyBzdHJpbmcpO1xuXHRcdC8vQWRkIHRoZSBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG5cdFx0Y29uc3QgYUN1c3RvbUZpbHRlcnMgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKFwiY3VzdG9tRmlsdGVyc1wiKSBhcyBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFDdXN0b21GaWx0ZXJzKSB7XG5cdFx0XHRhQ3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXI6IENvbnRyb2wpIHtcblx0XHRcdFx0YVVzZXJEZWZpbmVkRmlsdGVyLnB1c2goXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJwYXRoXCIpLFxuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IGZpbHRlci5nZXRQcm9wZXJ0eShcIm9wZXJhdG9yXCIpLFxuXHRcdFx0XHRcdFx0dmFsdWUxOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJ2YWx1ZTFcIiksXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IGZpbHRlci5nZXRQcm9wZXJ0eShcInZhbHVlMlwiKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHQvL0ZpbHRlciBmb3IgZmlsdGVyaW5nIG91dCBvbmx5IHZhbGlkYXRpb24gbWVzc2FnZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSB2aWV3XG5cdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IHRydWVcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRtZXNzYWdlQnV0dG9uSGVscGVyLmdldENoZWNrQ29udHJvbEluVmlld0ZpbHRlcih0aGlzLnNWaWV3SWQpXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdG9EaWFsb2dGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW3RoaXMuX2ZpbHRlck91dE1lc3NhZ2VzSW5EaWFsb2coKV1cblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHRlc3Q6IHRoaXMuX2ZpbHRlck91dENvbnRleHRTdWNjZXNzTWVzc2FnZXMuYmluZCh0aGlzKSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBmaWx0ZXJBcnJheTtcblx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKSBhcyBWaWV3O1xuXHRcdFx0XHRjb25zdCB2aWV3Q29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gKGF3YWl0ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcik/LmVkaXRGbG93LmdldFJvb3RDb250ZXh0KHZpZXdDb250ZXh0KSk/LmdldFBhdGgoKTtcblx0XHRcdFx0aGlkZGVuRHJhZnRGaWx0ZXIgPSBtZXNzYWdlQnV0dG9uSGVscGVyLmdldEhpZGRlbkRyYWZ0VXNlQ2FzZUZpbHRlcihjb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHZhbGlkYXRpb25BbmRIaWRkZW5EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFtvVmFsaWRhdGlvbkZpbHRlcnMsIGhpZGRlbkRyYWZ0RmlsdGVyXSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWx0ZXJBcnJheSA9IFt2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIsIG9EaWFsb2dGaWx0ZXIsIHRoaXMuX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24oKV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMsXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGgsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1BhdGhcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGZpbHRlckFycmF5ID0gW1xuXHRcdFx0XHRcdG9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlcixcblx0XHRcdFx0XHRvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzLFxuXHRcdFx0XHRcdG9EaWFsb2dGaWx0ZXIsXG5cdFx0XHRcdFx0dGhpcy5fZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpXG5cdFx0XHRcdF07XG5cdFx0XHRcdC8vRmlsdGVyIGZvciBmaWx0ZXJpbmcgb3V0IHRoZSBib3VuZCBtZXNzYWdlcyBpLmUgdGFyZ2V0IHN0YXJ0cyB3aXRoIHRoZSBjb250ZXh0IHBhdGhcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9WYWxpZGF0aW9uQ29udGV4dERpYWxvZ0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogZmlsdGVyQXJyYXksXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBhbmQgZmluYWxseSAtIGlmIHRoZXJlIGFueSAtIGFkZCBjdXN0b20gZmlsdGVyICh2aWEgT1IpXG5cdFx0XHRpZiAoYVVzZXJEZWZpbmVkRmlsdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbYVVzZXJEZWZpbmVkRmlsdGVyLCBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzXSBhcyB1bmtub3duIGFzIEZpbHRlcltdLCAvLyBUT0RPIGluY29ycmVjdCxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5vSXRlbUJpbmRpbmcuZmlsdGVyKG9GaWx0ZXJzKTtcblx0XHRcdHRoaXMub09iamVjdFBhZ2VMYXlvdXQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0KHRoaXMsIHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdFx0Ly8gV2Ugc3VwcG9ydCBzb3J0aW5nIG9ubHkgZm9yIE9iamVjdFBhZ2VMYXlvdXQgdXNlLWNhc2UuXG5cdFx0XHRpZiAodGhpcy5vT2JqZWN0UGFnZUxheW91dCkge1xuXHRcdFx0XHRvU29ydGVyID0gbmV3IFNvcnRlcihcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0b2JqMTogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9LFxuXHRcdFx0XHRcdFx0b2JqMjogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9XG5cdFx0XHRcdFx0KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMgPSB0aGlzLm9PYmplY3RQYWdlTGF5b3V0ICYmIHRoaXMub09iamVjdFBhZ2VMYXlvdXQuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtBID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMSwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtCID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMiwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLm9JdGVtQmluZGluZy5zb3J0KG9Tb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gc0NvbnRyb2xJZFxuXHQgKiBAcGFyYW0gb0l0ZW1cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29udHJvbCBJRCBtYXRjaGVzIHRoZSBpdGVtIElEXG5cdCAqL1xuXHRfZm5GaWx0ZXJVcG9uSWQoc0NvbnRyb2xJZDogc3RyaW5nLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc2VjdGlvbiBiYXNlZCBvbiBzZWN0aW9uIHRpdGxlIGFuZCB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWN0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlKG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LCBzU2VjdGlvblRpdGxlOiBzdHJpbmcpOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc1NlY3Rpb25UaXRsZSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChhU2VjdGlvbnNbaV0uZ2V0VmlzaWJsZSgpICYmIGFTZWN0aW9uc1tpXS5nZXRUaXRsZSgpID09PSBzU2VjdGlvblRpdGxlKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24gPSBhU2VjdGlvbnNbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TZWN0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc2VjdGlvbiBpZiB0aGUgb2JqZWN0IHBhZ2UgdXNlcyBhbiBJY29uVGFiQmFyIGFuZCBpZiB0aGUgY3VycmVudCBzZWN0aW9uIGlzIG5vdCB0aGUgdGFyZ2V0IG9mIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUob09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsIHNTZWN0aW9uVGl0bGU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGlmIChiVXNlSWNvblRhYkJhcikge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSB0aGlzLl9nZXRTZWN0aW9uQnlTZWN0aW9uVGl0bGUob09iamVjdFBhZ2UsIHNTZWN0aW9uVGl0bGUpO1xuXHRcdFx0Y29uc3Qgc1NlbGVjdGVkU2VjdGlvbklkID0gb09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCk7XG5cdFx0XHRpZiAob1NlY3Rpb24gJiYgc1NlbGVjdGVkU2VjdGlvbklkICE9PSBvU2VjdGlvbi5nZXRJZCgpKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRvVGFibGU6IFRhYmxlLFxuXHRcdG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdHNTZWN0aW9uVGl0bGU6IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9PUENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoID0gIShvVGFibGVDb250ZXh0ID09PSBvT1BDb250ZXh0KTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZShvT2JqZWN0UGFnZSwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiBGdW5jdGlvbikge1xuXHRcdFx0aWYgKGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoKSB7XG5cdFx0XHRcdG9Sb3dCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIE1kY1RhYmxlIGlmIGl0IGlzIGZvdW5kIGFtb25nIGFueSBvZiB0aGUgcGFyZW50IGVsZW1lbnRzLlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBNREMgdGFibGUgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0TWRjVGFibGUob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBNRENUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Ly9jaGVjayBpZiB0aGUgZWxlbWVudCBoYXMgYSB0YWJsZSB3aXRoaW4gYW55IG9mIGl0cyBwYXJlbnRzXG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmICFvUGFyZW50RWxlbWVudC5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpID8gb1BhcmVudEVsZW1lbnQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0R3JpZFRhYmxlKG9NZGNUYWJsZTogTURDVGFibGUpOiBVSVRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gb01kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IENvbnRyb2wpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9FbGVtLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJlxuXHRcdFx0XHQvKiogV2UgY2hlY2sgdGhlIGVsZW1lbnQgYmVsb25ncyB0byB0aGUgTWRjVGFibGUgOiovXG5cdFx0XHRcdG9FbGVtLmdldFBhcmVudCgpID09PSBvTWRjVGFibGVcblx0XHRcdCk7XG5cdFx0fSlbMF0gYXMgVUlUYWJsZSB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhYmxlIHJvdyAoaWYgYXZhaWxhYmxlKSBjb250YWluaW5nIHRoZSBlbGVtZW50LlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBUYWJsZSByb3cgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVSb3cob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAoXG5cdFx0XHRvUGFyZW50RWxlbWVudCAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxSb3c+KFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHRcdCFvUGFyZW50RWxlbWVudC5pc0E8Q29sdW1uTGlzdEl0ZW0+KENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKVxuXHRcdCkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmXG5cdFx0XHQob1BhcmVudEVsZW1lbnQuaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpIHx8XG5cdFx0XHRcdG9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgfHxcblx0XHRcdFx0b1BhcmVudEVsZW1lbnQuaXNBPENvbHVtbkxpc3RJdGVtPihDb2x1bW5MaXN0SXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkpXG5cdFx0XHQ/IChvUGFyZW50RWxlbWVudCBhcyBVSTVFbGVtZW50KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgcm93IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBvRWxlbWVudCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFJvdyBpbmRleCB8fCB1bmRlZmluZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRUYWJsZVJvd0luZGV4KG9FbGVtZW50OiBVSTVFbGVtZW50KTogbnVtYmVyIHtcblx0XHRjb25zdCBvVGFibGVSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhvRWxlbWVudCk7XG5cdFx0bGV0IGlSb3dJbmRleDtcblx0XHRpZiAob1RhYmxlUm93Py5pc0E8Um93PihcInNhcC51aS50YWJsZS5Sb3dcIikpIHtcblx0XHRcdGlSb3dJbmRleCA9IG9UYWJsZVJvdy5nZXRJbmRleCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpUm93SW5kZXggPSAob1RhYmxlUm93IGFzIHsgZ2V0VGFibGU/OiAoKSA9PiBSZXNwb25zaXZlVGFibGUgfSlcblx0XHRcdFx0Py5nZXRUYWJsZT8uKClcblx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0LmZpbmRJbmRleChmdW5jdGlvbiAoZWxlbWVudDogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LmdldElkKCkgPT09IG9UYWJsZVJvdz8uZ2V0SWQoKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBpUm93SW5kZXggPz8gLTE7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBlbGVtZW50IENvbnRyb2xcblx0ICogQHJldHVybnMgQ29sdW1uIGluZGV4IHx8IHVuZGVmaW5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlQ29sdW1uSW5kZXgoZWxlbWVudDogVUk1RWxlbWVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZ2V0VGFyZ2V0Q2VsbEluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0cmV0dXJuIHRhcmdldFJvdz8uZ2V0Q2VsbHMoKS5maW5kSW5kZXgoZnVuY3Rpb24gKGNlbGw6IENvbnRyb2wpIHtcblx0XHRcdFx0cmV0dXJuIGNlbGwuZ2V0SWQoKSA9PT0gZWx0LmdldElkKCk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFRhcmdldENvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBlbHQuZ2V0UGFyZW50KCkgYXMgVUk1RWxlbWVudCxcblx0XHRcdFx0dGFyZ2V0Q2VsbEluZGV4ID0gZ2V0VGFyZ2V0Q2VsbEluZGV4KHRhcmdldEVsZW1lbnQsIHRhcmdldFJvdyk7XG5cdFx0XHR3aGlsZSAodGFyZ2V0RWxlbWVudCAmJiB0YXJnZXRDZWxsSW5kZXggJiYgdGFyZ2V0Q2VsbEluZGV4IDwgMCkge1xuXHRcdFx0XHR0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5nZXRQYXJlbnQoKSBhcyBVSTVFbGVtZW50O1xuXHRcdFx0XHR0YXJnZXRDZWxsSW5kZXggPSBnZXRUYXJnZXRDZWxsSW5kZXgodGFyZ2V0RWxlbWVudCwgdGFyZ2V0Um93KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRDZWxsSW5kZXg7XG5cdFx0fTtcblx0XHRjb25zdCB0YXJnZXRSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhlbGVtZW50KSBhcyBSb3cgfCB1bmRlZmluZWQ7XG5cblx0XHRsZXQgdGFyZ2V0Q29sdW1uSW5kZXggPSBnZXRUYXJnZXRDb2x1bW5JbmRleChlbGVtZW50LCB0YXJnZXRSb3cpO1xuXHRcdGlmICh0YXJnZXRSb3c/LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikpIHtcblx0XHRcdGNvbnN0IHRhcmdldENlbGxJZCA9IHRhcmdldENvbHVtbkluZGV4ID8gdGFyZ2V0Um93LmdldENlbGxzKClbdGFyZ2V0Q29sdW1uSW5kZXhdLmdldElkKCkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHRhYmxlQ29sdW1ucyA9IHRhcmdldFJvdy5nZXRUYWJsZSgpPy5nZXRDb2x1bW5zKCk7XG5cdFx0XHR0YXJnZXRDb2x1bW5JbmRleCA9IHRhYmxlQ29sdW1ucz8uZmluZEluZGV4KGZ1bmN0aW9uIChjb2x1bW46IENvbHVtbikge1xuXHRcdFx0XHRpZiAoY29sdW1uLmdldENyZWF0aW9uVGVtcGxhdGUoKSAmJiB0YXJnZXRDZWxsSWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0Q2VsbElkLnNlYXJjaChjb2x1bW4uZ2V0Q3JlYXRpb25UZW1wbGF0ZSgpLmdldElkKCkpID4gLTEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbHVtbkluZGV4O1xuXHR9XG5cblx0X2dldE1kY1RhYmxlUm93cyhvTWRjVGFibGU6IE1EQ1RhYmxlKTogUm93W10ge1xuXHRcdHJldHVybiBvTWRjVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b0VsZW0uaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0XHRcdC8qKiBXZSBjaGVjayB0aGUgZWxlbWVudCBiZWxvbmdzIHRvIHRoZSBNZGMgVGFibGUgOiovXG5cdFx0XHRcdChvRWxlbSBhcyB7IGdldFRhYmxlPzogKCkgPT4gVUk1RWxlbWVudCB9KS5nZXRUYWJsZT8uKCkuZ2V0UGFyZW50KCkgPT09IG9NZGNUYWJsZVxuXHRcdFx0KTtcblx0XHR9KSBhcyBSb3dbXTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0KG9FbGVtZW50OiBNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkLCBvT2JqZWN0UGFnZUxheW91dD86IE9iamVjdFBhZ2VMYXlvdXQpOiBPYmplY3RQYWdlTGF5b3V0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob09iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdHJldHVybiBvT2JqZWN0UGFnZUxheW91dDtcblx0XHR9XG5cdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHQvL0l0ZXJhdGUgb3ZlciBwYXJlbnQgdGlsbCB5b3UgaGF2ZSBub3QgcmVhY2hlZCB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0d2hpbGUgKHRhcmdldEVsZW1lbnQgJiYgIXRhcmdldEVsZW1lbnQuaXNBPE9iamVjdFBhZ2VMYXlvdXQ+KFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiKSkge1xuXHRcdFx0dGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQuZ2V0UGFyZW50KCkgPz8gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIGNoZWNrIGlmIGEgbmF2aWdhdGlvbiBpcyBjb25maWd1cmVkIGZyb20gdGhlIHRhYmxlIHRvIGEgc3ViIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdGFibGUgTWRjVGFibGVcblx0ICogQHJldHVybnMgRWl0aGVyIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdF9uYXZpZ2F0aW9uQ29uZmlndXJlZCh0YWJsZTogVGFibGUpOiBib29sZWFuIHtcblx0XHQvLyBUT0RPOiB0aGlzIGxvZ2ljIHdvdWxkIGJlIG1vdmVkIHRvIGNoZWNrIHRoZSBzYW1lIGF0IHRoZSB0ZW1wbGF0ZSB0aW1lIHRvIGF2b2lkIHRoZSBzYW1lIGNoZWNrIGhhcHBlbmluZyBtdWx0aXBsZSB0aW1lcy5cblx0XHRjb25zdCBjb21wb25lbnQgPSBzYXAudWkucmVxdWlyZShcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiKSxcblx0XHRcdG5hdk9iamVjdCA9IHRhYmxlICYmIGNvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0YWJsZSkgJiYgY29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRhYmxlKS5nZXROYXZpZ2F0aW9uKCk7XG5cdFx0bGV0IHN1Yk9QQ29uZmlndXJlZCA9IGZhbHNlLFxuXHRcdFx0bmF2Q29uZmlndXJlZCA9IGZhbHNlO1xuXHRcdGlmIChuYXZPYmplY3QgJiYgT2JqZWN0LmtleXMobmF2T2JqZWN0KS5pbmNsdWRlcyh0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpKSkge1xuXHRcdFx0c3ViT1BDb25maWd1cmVkID1cblx0XHRcdFx0bmF2T2JqZWN0W3RhYmxlPy5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpXSAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbCAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbC5yb3V0ZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0fVxuXHRcdG5hdkNvbmZpZ3VyZWQgPVxuXHRcdFx0c3ViT1BDb25maWd1cmVkICYmXG5cdFx0XHR0YWJsZT8uZ2V0Um93U2V0dGluZ3MoKS5nZXRSb3dBY3Rpb25zKCkgJiZcblx0XHRcdHRhYmxlPy5nZXRSb3dTZXR0aW5ncygpLmdldFJvd0FjdGlvbnMoKVswXS5nZXRUeXBlKCkuaW5jbHVkZXMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdHJldHVybiBuYXZDb25maWd1cmVkO1xuXHR9XG5cblx0c2V0Rm9jdXNUb0NvbnRyb2woY29udHJvbD86IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlUG9wb3ZlciA9IHRoaXMub01lc3NhZ2VQb3BvdmVyO1xuXHRcdGlmIChtZXNzYWdlUG9wb3ZlciAmJiBjb250cm9sICYmIGNvbnRyb2wuZm9jdXMpIHtcblx0XHRcdGNvbnN0IGZuRm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnRyb2wuZm9jdXMoKTtcblx0XHRcdH07XG5cdFx0XHRpZiAoIW1lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdC8vIHdoZW4gbmF2aWdhdGluZyB0byBwYXJlbnQgcGFnZSB0byBjaGlsZCBwYWdlIChvbiBjbGljayBvZiBtZXNzYWdlKSwgdGhlIGNoaWxkIHBhZ2UgbWlnaHQgaGF2ZSBhIGZvY3VzIGxvZ2ljIHRoYXQgbWlnaHQgdXNlIGEgdGltZW91dC5cblx0XHRcdFx0Ly8gd2UgdXNlIHRoZSBiZWxvdyB0aW1lb3V0cyB0byBvdmVycmlkZSB0aGlzIGZvY3VzIHNvIHRoYXQgd2UgZm9jdXMgb24gdGhlIHRhcmdldCBjb250cm9sIG9mIHRoZSBtZXNzYWdlIGluIHRoZSBjaGlsZCBwYWdlLlxuXHRcdFx0XHRzZXRUaW1lb3V0KGZuRm9jdXMsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoZm5Gb2N1cywgMCk7XG5cdFx0XHRcdFx0bWVzc2FnZVBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG1lc3NhZ2VQb3BvdmVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJDbG9zZVwiLCBmbk9uQ2xvc2UpO1xuXHRcdFx0XHRtZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkZFIFY0IDogTWVzc2FnZUJ1dHRvbiA6IGVsZW1lbnQgZG9lc24ndCBoYXZlIGZvY3VzIG1ldGhvZCBmb3IgZm9jdXNpbmcuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGVzY2FwZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gU3RyaW5nKHZhbHVlKVxuXHRcdFx0LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpXG5cdFx0XHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcblx0XHRcdC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE0RU1BLGFBQWEsSUFBQUMsSUFBQSxHQURsQkMsY0FBYyxDQUFDLHNDQUFzQyxDQUFDLEVBQUFD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