@sapui5/sap.fe.core 1.136.3 → 1.136.5

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 (64) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/controllerextensions/EditFlow.js +3 -3
  4. package/src/sap/fe/core/controllerextensions/EditFlow.ts +6 -2
  5. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -5
  6. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +19 -1
  7. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
  8. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +10 -3
  9. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +6 -5
  10. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +8 -4
  11. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -3
  12. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -2
  13. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +4 -17
  14. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -19
  15. package/src/sap/fe/core/fpm/manifest.json +1 -1
  16. package/src/sap/fe/core/library.js +1 -1
  17. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  18. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  19. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  20. package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
  21. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  22. package/src/sap/fe/core/messagebundle_cy.properties +2 -0
  23. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  24. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  25. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  26. package/src/sap/fe/core/messagebundle_en.properties +2 -0
  27. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  28. package/src/sap/fe/core/messagebundle_es.properties +3 -1
  29. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  30. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  31. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  32. package/src/sap/fe/core/messagebundle_fr.properties +2 -0
  33. package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -0
  34. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  35. package/src/sap/fe/core/messagebundle_hr.properties +2 -0
  36. package/src/sap/fe/core/messagebundle_hu.properties +2 -0
  37. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  38. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  39. package/src/sap/fe/core/messagebundle_iw.properties +2 -0
  40. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  41. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  42. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  43. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  44. package/src/sap/fe/core/messagebundle_lv.properties +2 -0
  45. package/src/sap/fe/core/messagebundle_mk.properties +2 -0
  46. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  47. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  48. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  49. package/src/sap/fe/core/messagebundle_pl.properties +2 -0
  50. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  51. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  52. package/src/sap/fe/core/messagebundle_ro.properties +2 -0
  53. package/src/sap/fe/core/messagebundle_ru.properties +2 -0
  54. package/src/sap/fe/core/messagebundle_sh.properties +2 -0
  55. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  56. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  57. package/src/sap/fe/core/messagebundle_sr.properties +2 -0
  58. package/src/sap/fe/core/messagebundle_sv.properties +2 -0
  59. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  60. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  61. package/src/sap/fe/core/messagebundle_uk.properties +2 -0
  62. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  63. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
  64. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
@@ -365,6 +365,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
365
365
  let showStateMessages = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : false;
366
366
  let messageDialogParameter = arguments.length > 9 ? arguments[9] : undefined;
367
367
  let resourceModel = arguments.length > 10 ? arguments[10] : undefined;
368
+ let messageHandlder = arguments.length > 11 ? arguments[11] : undefined;
368
369
  // Add Custom messages
369
370
  // TODO: Will these messages be part of transitionMessages?
370
371
  if (customMessages && customMessages.length) {
@@ -385,7 +386,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
385
386
  const filters = getFiltersForMessages(showBoundTransition, showStateMessages);
386
387
  messagesToShow = getMessagesToShow(filters, messagesToShow ?? []);
387
388
  // handle context bound messages, If there is a single message of which is bounded to the context then remove that from the dialog
388
- messagesToShow = removeMessageShownInMessageStrip(messagesToShow, context);
389
+ messagesToShow = messageHandlder?.filterContextBoundMessages(messagesToShow, context) || messagesToShow;
389
390
  ({
390
391
  messagesToShow,
391
392
  uiElementToUse
@@ -808,20 +809,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
808
809
  MessageBox.show(formattedText, close);
809
810
  }
810
811
  }
811
- function removeMessageShownInMessageStrip(transitionMessages, context) {
812
- const boundContextMessages = [];
813
- transitionMessages?.forEach(message => {
814
- if (message.getTargets().length === 1 && message.getTargets()[0] === context?.getPath() && message.getPersistent() === true) {
815
- boundContextMessages.push(message);
816
- }
817
- });
818
- if (boundContextMessages.length === 1) {
819
- transitionMessages = transitionMessages?.filter(function (message) {
820
- return message !== boundContextMessages[0];
821
- });
822
- }
823
- return transitionMessages;
824
- }
812
+
825
813
  /**
826
814
  * This function sets the group name for all messages in a dialog.
827
815
  * @param aModelDataArray Messages array
@@ -1590,7 +1578,6 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1590
1578
  setGroupNameLRTable: setGroupNameLRTable,
1591
1579
  isControlInTable: isControlInTable,
1592
1580
  isControlPartOfCreationRow: isControlPartOfCreationRow,
1593
- removeMessageShownInMessageStrip: removeMessageShownInMessageStrip,
1594
1581
  getFiltersForMessages: getFiltersForMessages,
1595
1582
  showMessagesInUI: showMessagesInUI,
1596
1583
  showMessageDialogControl: showMessageDialogControl,
@@ -1612,4 +1599,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1612
1599
  };
1613
1600
  return messageHandling;
1614
1601
  }, false);
1615
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwibXNnVmlldyIsImdldENvbnRlbnQiLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiZ2V0TW9kZWwiLCJzZXREYXRhIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiYk1lc3NhZ2VEaWFsb2ciLCJkTm93IiwiRGF0ZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImdldE1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic29tZSIsIm1lc3NhZ2UiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwibXVsdGk0MTIiLCJvTWVzc2FnZVRlbXBsYXRlIiwiZGVzY3JpcHRpb25CaW5kaW5nIiwidGVjaG5pY2FsRGV0YWlsc0JpbmRpbmciLCJNZXNzYWdlSXRlbSIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbiIsInNob3dCb3VuZFRyYW5zaXRpb24iLCJfY29udGV4dCIsInRyYW5zaXRpb25NZXNzYWdlcyIsImNvbmNhdCIsImV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlc1RvU2hvdyIsInVpRWxlbWVudFRvVXNlIiwiZm5HZXRNc2dTdWJ0aXRsZSIsInNob3dCb3VuZE1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiZ2V0VUlEZWNpc2lvbnMiLCJjdXN0b21NZXNzYWdlcyIsImNvbnRleHQiLCJhcmd1bWVudHMiLCJjb250cm9sIiwiYWN0aW9uTmFtZSIsInZpZXdUeXBlIiwic2hvd1N0YXRlTWVzc2FnZXMiLCJtZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwicmVzb3VyY2VNb2RlbCIsImFkZEN1c3RvbU1lc3NhZ2VzIiwiY2FsbCIsInVpRGVjaXNpb25JbnRlcm1pdHRlbnQiLCJmaWx0ZXJzIiwiZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXNUb1Nob3ciLCJyZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcCIsInByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlIiwiaGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMiLCJnZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJtZXNzYWdlVG9TaG93IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsInNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwic2VsZWN0aW9uQ29udGV4dHMiLCJhU2VsZWN0ZWRDb250ZXh0cyIsIkFycmF5IiwiaXNBcnJheSIsImJvdW5kQWN0aW9uTmFtZSIsImVudGl0eVNldE5hbWUiLCJlbnRpdHlTZXQiLCJpbmNsdWRlcyIsInNwbGl0Iiwic3VmZml4UmVzb3VyY2VLZXkiLCJNZXNzYWdlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImNvZGUiLCJyZWZlcmVuY2VNc2ciLCJjaGVja0ZhaWxlZCIsIm1zZyIsImlkeCIsImdldE1lc3NhZ2UiLCJnZXRBZGRpdGlvbmFsVGV4dCIsInNob3dNZXNzYWdlc0luVUkiLCJ1aURlY2lzaW9ucyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvd01lc3NhZ2VUb2FzdCIsInNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCIsInNob3dNZXNzYWdlQm94Q29udHJvbCIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciIsInRlc3QiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nIiwicHVzaCIsImNhc2VTZW5zaXRpdmUiLCJFUSIsImdldFRhcmdldHMiLCJhbmQiLCJfcmVmIiwicmV0TWVzc2FnZXMiLCJnZW5lcmljTXNncyIsIm5vbkdlbmVyaWNNc2dzIiwiZmUiLCJmZVRlY2huaWNhbERldGFpbHMiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJwcmVUZXh0IiwidGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZSIsInNpbmdsZUVycm9yUHJlVGV4dCIsInNpbmdsZUdlbmVyaWNNZXNzYWdlSWQiLCJnZXRJZCIsImV4aXN0aW5nVGVjaERldGFpbHMiLCJzZXRUZWNobmljYWxEZXRhaWxzIiwibWVzc2FnZUNvZGUiLCJ0ZXh0IiwiZ2V0U29ydGVyRm9yTWVzc2FnZXMiLCJTb3J0ZXIiLCJvYmoxIiwib2JqMiIsInJhbmtBIiwiZ2V0TWVzc2FnZVJhbmsiLCJyYW5rQiIsInRyYW5zaXN0aW9uTWVzc2FnZXMiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiY3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZXMiLCJtYXAiLCJjdXJyZW50Q29udGV4dCIsIm9VbmlxdWVPYmoiLCJmaWx0ZXIiLCJvYmoiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwidWlEZWNpc2lvbiIsInJ1blRvVGVzdCIsImhpZ2hlc3RQcmlvcml0eSIsImhpZ2hlc3RQcmlvcml0eVRleHQiLCJyZXNvdXJjZUJ1bmRsZSIsInN0cmljdEhhbmRsaW5nRmxvdyIsIm1lc3NhZ2VEaWFsb2dNb2RlbCIsIkpTT05Nb2RlbCIsIm1lc3NhZ2VPYmplY3QiLCJzb3J0ZXIiLCJnZXRCaW5kaW5nIiwic29ydCIsImlzT3BlbiIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImVuZEJ1dHRvbiIsImVzY2FwZUhhbmRsZXIiLCJjb21wbGV0aW9uUHJvbWlzZSIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJjbG9zZU9uTmF2aWdhdGlvbiIsImFmdGVyQ2xvc2UiLCJpdGVtIiwicmVtb3ZlQWxsQ29udGVudCIsImFkZENvbnRlbnQiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJyZXRyeUFmdGVyTWVzc2FnZSIsInN0YXJ0VGFnIiwiY2xvc2VUYWciLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwibWVzc2FnZUhlYWRlciIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNYW5hZ2VkT2JqZWN0IiwiZXNjYXBlU2V0dGluZ3NWYWx1ZSIsInNob3dNZXNzYWdlQm94UGVyVHlwZSIsIm9uQ2xvc2UiLCJjbG9zZU1lc3NhZ2VCb3giLCJiaW5kIiwibWVzc2FnZVNob3duIiwiY2FsbEJhY2siLCJtZXNzYWdlc1RvUmVtb3ZlIiwiYWxsTXNncyIsImdldERhdGEiLCJnZW5lcmljTWVzc2FnZSIsImZpbmQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsImluZm9ybWF0aW9uIiwiYm91bmRDb250ZXh0TWVzc2FnZXMiLCJnZXRQYXRoIiwiZ2V0UGVyc2lzdGVudCIsImFNb2RlbERhdGFBcnJheSIsInNBY3Rpb25OYW1lIiwiYU1vZGVsRGF0YSIsImdlbmVyYWxHcm91cFRleHQiLCJpc0EiLCJzZXRHcm91cE5hbWVMUlRhYmxlIiwic2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSIsImdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSIsIm9FbGVtIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJpbmRleE9mIiwiYWxsUm93Q29udGV4dHMiLCJyb3dDb250ZXh0IiwiY29udGV4dFBhdGgiLCJpZGVudGlmaWVyQ29sdW1uIiwiZ2V0UGFyZW50IiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInJvd0lkZW50aWZpZXIiLCJjb2x1bW5Qcm9wZXJ0eU5hbWUiLCJnZXRUYWJsZUNvbFByb3BlcnR5Iiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldFRhYmxlQ29sSW5mbyIsImdldEhlYWRlciIsInVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlIiwibWRjVGFibGUiLCJ0YXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsImNvbHVtbk5hbWVTdWZmaXgiLCJzZXRBZGRpdGlvbmFsVGV4dCIsInVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlIiwic3Vic2VjdGlvbiIsImhlYWRlck5hbWUiLCJnZXRIZWFkZXJWaXNpYmxlIiwidGFibGVIZWFkZXIiLCJnZXRUaXRsZSIsInNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZSIsInZpZXdDb250ZXh0IiwiZ3JvdXBOYW1lSXNHZW5lcmFsIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiY2hpbGRUYWJsZUVsZW1lbnQiLCJmaW5kRWxlbWVudHMiLCJvRWxlbWVudCIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJmbkNhbGxiYWNrU2V0R3JvdXBOYW1lIiwib1RhcmdldFRhYmxlSW5mbyIsIm9WaWV3Q29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib3BMYXlvdXQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsInNMYXN0QWN0aW9uVGV4dCIsInRvU3RyaW5nIiwiYU1lc3NhZ2UiLCJvVGFibGUiLCJmblNldEdyb3VwTmFtZSIsImdldFRhYmxlQW5kVGFyZ2V0SW5mbyIsInNDb250cm9sSWQiLCJiSXNDcmVhdGlvblJvdyIsIm9UYWJsZVJvd0NvbnRleHQiLCJnZXRDb250cm9sSWRzIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsIm9Db250cm9sIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3ciLCJzdWJUaXRsZSIsImdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyIsInRhYmxlUm93QmluZGluZ0NvbnRleHRzIiwidGFibGVSb3dDb250ZXh0IiwidGFibGVUYXJnZXRDb2xOYW1lIiwidGFibGUiLCJpc0NyZWF0aW9uUm93IiwidGFyZ2V0ZWRDb250cm9sIiwibWVzc2FnZVN1YnRpdGxlIiwicm93U3VidGl0bGVWYWx1ZSIsImdldFJlc291cmNlTW9kZWwiLCJ0YWJsZUNvbFByb3BlcnR5IiwiZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyIsImNvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwiaXNJbmFjdGl2ZSIsImxhYmVsIiwidGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uIiwiZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwidGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJ0YWJsZUNvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiZ2V0VGFibGVDb2xWYWx1ZSIsIm9Db2x1bW5JbmZvIiwiZGV0ZXJtaW5lQ29sdW1uSW5mbyIsInNDb2x1bW5JbmRpY2F0b3IiLCJzQ29sdW1uVmFsdWUiLCJiaW5kaW5nQ29udGV4dCIsImtleSIsIm9Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic0NvbE5hbWVGcm9tTWVzc2FnZU9iaiIsInBvcCIsImdldEtleUNvbHVtbkluZm8iLCJvQ29sRnJvbVRhYmxlU2V0dGluZ3MiLCJhdmFpbGFiaWxpdHkiLCJvUGFyZW50Q29udHJvbCIsInNIaWdoZXN0UHJpb3JpdHkiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwic3RhcnRzV2l0aCIsIm9Db250ZXh0IiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYmFja2VuZE1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJhQ29udGV4dHMiLCJhZGRpdGlvbmFsVGV4dCIsInN1YnRpdGxlQ29sdW1uIiwiZXJyb3JDb250ZXh0Iiwib09iamVjdFBhZ2VMYXlvdXQiLCJnZXRTZWN0aW9ucyIsImdldFZpc2libGUiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsInN1YlNlY3Rpb24iLCJvTWVzc2FnZU9iamVjdCIsImZuRmlsdGVyVXBvbklkcyIsImEiLCJiIiwib0NvbnRleHRQYXRoIiwiZm5SZWdFeHBlc2NhcGUiLCJzIiwicmVwbGFjZSIsImNvbnRleHRQYXRoVG9Fc2NhcGUiLCJSZWdFeHAiLCJzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSIsIm9UYWJsZVRhcmdldENvbCIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJnZXRQcm9wZXJ0eUtleSIsIm9DdXN0b21Db2x1bW4iLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRDb2x1bW5zRm9yIiwib0NvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJuYW1lIiwiYUNvbHVtbnMiLCJjb2x1bW5EZWZpbml0aW9uIiwicHJvcGVydHlJbmZvIiwiYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlIiwib1RhYmxlQ29sSW5mbyIsIm9JdGVtIiwiY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSIsInNlY3Rpb24iLCJiTXVsdGlwbGVTdWJTZWN0aW9ucyIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsImJJc09ycGhhbkVsZW1lbnQiLCJhRWxlbWVudHMiLCJvUGFyZW50RWxlbWVudCIsImdldE1lc3NhZ2VzRm9yQ29udGV4dCIsImNvbnRyb2xJZHMiLCJlcnJvckZpZWxkQ29udHJvbCIsImluZGV4IiwiSW5maW5pdHkiLCJlcnJvckNvbnRyb2xJZCIsImNvbnRyb2xJZCIsImZpZWxkUmFua2luRGlhbG9nIiwiZm9jdXMiLCJyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0IiwibWVzc2FnZXNJbk1vZGVsIiwiaXNNZXNzYWdlU3RyaXBNZXNzYWdlIiwiaXNTaW5nbGVUYXJnZXQiLCJpc1RhcmdldE1hdGNoaW5nIiwiaXNUcmFuc2l0aW9uTWVzc2FnZSIsInJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCIsImNvbnRleHRzIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJtZXNzYWdlc1RvQmVSZW1vdmVkIiwicmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dCIsIm1lc3NhZ2VUYXJnZXRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tTWVzc2FnZSwgU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgTUxpYiBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSWNvblBvb2wgZnJvbSBcInNhcC91aS9jb3JlL0ljb25Qb29sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvbWVzc2FnZS9NZXNzYWdlTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFVJVGFibGUgZnJvbSBcInNhcC91aS90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5cbmNvbnN0IEJ1dHRvblR5cGUgPSBNTGliLkJ1dHRvblR5cGU7XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6ICgocGFyYW0xOiB2b2lkIHwgRGlhbG9nKSA9PiB2b2lkKVtdID0gW107XG5sZXQgZGlhbG9nQ29udHJvbDogRGlhbG9nO1xubGV0IG9CYWNrQnV0dG9uOiBCdXR0b247XG5sZXQgbWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYXJnZXRUYWJsZUluZm9UeXBlID0ge1xuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHRhYmxlSGVhZGVyPzogc3RyaW5nO1xufTtcblxudHlwZSBDb2xJbmZvQW5kU3VidGl0bGVUeXBlID0ge1xuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRzdWJUaXRsZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIENvbHVtbkluZm9UeXBlID0ge1xuXHRzQ29sdW1uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c0NvbHVtbkluZGljYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVUlFbGVtZW50ID0gXCJEaWFsb2dcIiB8IFwiQm94XCIgfCBcIlRvYXN0XCIgfCBcIk5vbmVcIjtcblxuLy8gRkUgcmVsYXRlZCB0ZWNobmljYWwgaW5mb3JtYXRpb24gdG8gYmUgc3RvcmVkIHdpdGggdGhlIG1lc3NhZ2UuXG4vLyBMaWtlLCB0aGlzIHdvdWxkIGJlIHVzZWQgdG8gc3RvcmUgcHJlLXRleHQgd2l0aCB0aGUgbWVzc2FnZSB3aGVuIGl0IGlzIHRoZSBvbmx5IG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gVUkuXG50eXBlIEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSBvYmplY3QgJiB7XG5cdGZlPzoge1xuXHRcdGNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcj86IHN0cmluZztcblx0XHRzaW5nbGVFcnJvclByZVRleHQ/OiBzdHJpbmc7XG5cdFx0c2luZ2xlR2VuZXJpY01lc3NhZ2VJZD86IHN0cmluZztcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VVSURlY2lzaW9ucyA9IHtcblx0dWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudDtcblx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VbXTtcblx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IGJvb2xlYW47XG5cdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoPzogT0RhdGFWNENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRpc05vblRlY2huaWNhbE1lc3NhZ2U6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBib29sZWFuO1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYm9vbGVhbiwgYlRyYW5zaXRpb25Pbmx5PzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gTWVzc2FnZVtdO1xuXHRoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpOiBib29sZWFuO1xuXHRnZXRVSURlY2lzaW9uczogKFxuXHRcdGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10gfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0c2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0XHRjb250cm9sPzogQ29udHJvbCxcblx0XHRhY3Rpb25OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0XHR2aWV3VHlwZT86IHN0cmluZyxcblx0XHRzaG93U3RhdGVNZXNzYWdlcz86IGJvb2xlYW4sXG5cdFx0bWVzc2FnZURpYWxvZ1BhcmFtZXRlcj86IFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyLFxuXHRcdHJlc291cmNlTW9kZWw/OiBSZXNvdXJjZU1vZGVsXG5cdCkgPT4gTWVzc2FnZVVJRGVjaXNpb25zO1xuXHRzaG93TWVzc2FnZXNJblVJOiAodWlEZWNpc2lvbjogTWVzc2FnZVVJRGVjaXNpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogdHJ1ZSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdFx0YlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbixcblx0XHRpc011bHRpNDEyPzogYm9vbGVhblxuXHQpID0+IHtcblx0XHRtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdFx0b0JhY2tCdXR0b246IEJ1dHRvbjtcblx0fTtcblx0c2V0TWVzc2FnZVN1YnRpdGxlOiAob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB2b2lkO1xuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogKG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sKSA9PiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdGluY2x1ZGVUYWJsZUdyb3VwTmFtZT86IGJvb2xlYW5cblx0KSA9PiBzdHJpbmc7XG5cdGJJc09ycGhhbkVsZW1lbnQ6IChvRWxlbWVudDogVUk1RWxlbWVudCwgYUVsZW1lbnRzOiBVSTVFbGVtZW50W10pID0+IGJvb2xlYW47XG5cdGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZTogKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHN0cmluZztcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogKFxuXHRcdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IEZ1bmN0aW9uXG5cdCkgPT4gQ29sSW5mb0FuZFN1YnRpdGxlVHlwZTtcblx0Z2V0VGFibGVDb2xJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nXG5cdCkgPT4geyBzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogKG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBzdHJpbmcgfCBSZWdFeHApID0+IHN0cmluZztcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiAoXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRcdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG5cdCkgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogKG9Db2xGcm9tVGFibGVTZXR0aW5nczogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpID0+IENvbHVtbkluZm9UeXBlO1xuXHRmZXRjaENvbHVtbkluZm86IChvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpID0+IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IChcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcblx0KSA9PiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0Z2V0TWVzc2FnZVJhbms6IChvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBudW1iZXI7XG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBib29sZWFuKSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IFZpZXcpID0+IHZvaWQ7XG5cdHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWU6IChcblx0XHRtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogTURDVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXA6ICh0cmFuc2llbnRNZXNzYWdlczogTWVzc2FnZVtdLCBjb250ZXh0OiBDb250ZXh0KSA9PiBNZXNzYWdlW107XG5cdGdldEZpbHRlcnNGb3JNZXNzYWdlczogKHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIHNob3dTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbikgPT4gRmlsdGVyW107XG5cdHNob3dNZXNzYWdlVG9hc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBydW5Ub1Rlc3Q/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQgfCBEaWFsb2c+O1xuXHRzaG93TWVzc2FnZUJveENvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRNZXNzYWdlc0ZvckNvbnRleHQ6IChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gTWVzc2FnZVtdO1xuXHRpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZzogKGFDb250cm9sSWRzOiBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsOiAobWVzc2FnZXM/OiBNZXNzYWdlW10sIGNvbnRleHQ/OiBDb250ZXh0W10pID0+IHZvaWQ7XG5cdHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiAoTWVzc2FnZXM6IE1lc3NhZ2VbXSkgPT4gTWVzc2FnZVtdO1xuXHRzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0XHRncm91cE5hbWVJc0dlbmVyYWw6IGJvb2xlYW4sXG5cdFx0YWN0aW9uTmFtZT86IHN0cmluZ1xuXHQpOiBib29sZWFuO1xuXHR1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShtZGNUYWJsZTogTURDVGFibGUsIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCB0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUpOiB2b2lkO1xuXHR1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShcblx0XHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRtZGNUYWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG5cdCk6IHZvaWQ7XG5cdGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBzdHJpbmcpOiB2b2lkO1xuXHRyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0OiAob0NvbnRleHQ6IENvbnRleHQpID0+IHZvaWQ7XG5cdGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzOiAobWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10pID0+IGJvb2xlYW47XG5cdGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZTogKFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuXHQpID0+IE1lc3NhZ2VXaXRoSGVhZGVyIHwgdW5kZWZpbmVkO1xuXHRyZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0OiAoY29udGV4dDogQ29udGV4dCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpOiBzdHJpbmcge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHJpbmcoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpOiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH1bXSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgdHlwZW9mIG9NZXNzYWdlQ291bnRdO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSwgaTogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIChvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIgJiYgb1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uKSB7XG5cdFx0XHRpZiAoY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnNldFRhcmdldHMoW1wiXCJdKTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKTogdm9pZCB7XG5cdGRpYWxvZ0NvbnRyb2wuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGNvbnN0IG1zZ1ZpZXcgPSBkaWFsb2dDb250cm9sLmdldENvbnRlbnQoKVswXSBhcyBNZXNzYWdlVmlldztcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG1zZ1ZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0fVxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG59XG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKX0gJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgYXJlIGFueSB3YXJuaW5nIG9yIGVycm9yIG1lc3NhZ2VzKGJvdW5kIGFuZCB1bmJvdW5kKS4uXG4gKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgZXhpc3RlbmNlIG9mIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gWy4uLmdldE1lc3NhZ2VzKHVuZGVmaW5lZCwgdHJ1ZSksIC4uLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpXS5zb21lKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKFxuXHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdG11bHRpNDEyPzogYm9vbGVhblxuKToge1xuXHRtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdG9CYWNrQnV0dG9uOiBCdXR0b247XG59IHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkJpbmRpbmcgPSAnez0gJHtkZXNjcmlwdGlvbn0gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0RGVzY3JpcHRpb24oKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdGNvbnN0IHRlY2huaWNhbERldGFpbHNCaW5kaW5nID1cblx0XHRcdCd7PSAke3RlY2huaWNhbERldGFpbHN9ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGdyb3VwTmFtZTogXCJ7aGVhZGVyTmFtZX1cIixcblx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkJpbmRpbmcgKyB0ZWNobmljYWxEZXRhaWxzQmluZGluZyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobXVsdGk0MTIpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJ7ZGVzY3JpcHRpb259XCIsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRtZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGUsXG5cdFx0XHRsZW5ndGg6IDk5OTlcblx0XHR9XG5cdH0pO1xuXHRtZXNzYWdlVmlldy5zZXRHcm91cEl0ZW1zKHRydWUpO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pOiB2b2lkIHtcblx0XHRcdFx0bWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRtZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c/OiBib29sZWFuO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRmaWx0ZXJlZE1lc3NhZ2VzPzogTWVzc2FnZVtdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb24/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gaXNOb25UZWNobmljYWxNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0KHRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdCgodGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0KHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gbnVsbCkpKSB8fFxuXHRcdG1lc3NhZ2UuZ2V0Q29kZSgpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdHJhbnNpdGlvbiBtZXNzYWdlcyBmb3IgY3JlYXRpbmcgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBfY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcmV0dXJucyBUcmFuc2l0aW9uIG1lc3NhZ2VzIHJlbGV2YW50IHRvIHNob3cgaW4gVUkuXG4gKi9cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24odGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSwgc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgX2NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0bGV0IHRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0aWYgKHNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHQvL2JvdW5kIFRyYW5zaXN0aW9uIE1lc3NhZ2VzXG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzID0gdHJhbnNpdGlvbk1lc3NhZ2VzLmNvbmNhdCh0aGlzLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0fVxuXHRyZXR1cm4gdHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgJ29uQmVmb3JlU2hvd01lc3NhZ2VzJyBjYWxsYmFjayB0byBsZXQgdGhlIGNhbGxlciBpbmZsdWVuY2UgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gdHJhbnNpdGlvbk1lc3NhZ2VzIFRyYW5zaXRpb24gbWVzc2FnZXMuXG4gKiBAcGFyYW0gb25CZWZvcmVTaG93TWVzc2FnZSBDYWxsYmFjay5cbiAqIEByZXR1cm5zIFNob3dNZXNzYWdlUGFyYW1ldGVycyBJbmZyb21hdGlvbiB0byBjaGFuZ2UgVUkgZGVjaXNpb24gYmFzZWQgb24gb25CZWZvcmVTaG93TWVzc2FnZXMgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyhcblx0dHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnNcbik6IHtcblx0dWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudDtcblx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW107XG5cdGZuR2V0TWVzc2FnZVN1YnRpdGxlPzogRnVuY3Rpb247XG5cdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZz86IGJvb2xlYW47XG5cdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbjtcbn0ge1xuXHRsZXQgbWVzc2FnZXNUb1Nob3cgPSBbLi4udHJhbnNpdGlvbk1lc3NhZ2VzXTtcblx0bGV0IHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQgPVxuXHRcdHRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgdHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIiA/IFwiQm94XCIgOiBcIkRpYWxvZ1wiO1xuXHRsZXQgZm5HZXRNc2dTdWJ0aXRsZTogRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGxldCBzaG93Qm91bmRNZXNzYWdlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRpZiAob25CZWZvcmVTaG93TWVzc2FnZSkge1xuXHRcdC8vIFRoZSBjYWxsYmFjayBvbkJlZm9yZVNob3dNZXNzYWdlIGFsdGVycyB0aGUgVUlFbGVtZW50IHRvIHVzZSBpbiBhIGRpZmZlcmVudCBmb3JtYXQoc2hvd01lc3NhZ2VEaWFsb2cgYW5kIHNob3dNZXNzYWdlQm94KS5cblx0XHRjb25zdCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nOiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJEaWFsb2dcIixcblx0XHRcdHNob3dNZXNzYWdlQm94OiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJCb3hcIlxuXHRcdH07XG5cdFx0Y29uc3Qge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3gsXG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyxcblx0XHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyxcblx0XHRcdGZpbHRlcmVkTWVzc2FnZXMsXG5cdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvblxuXHRcdH0gPSBvbkJlZm9yZVNob3dNZXNzYWdlKHRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3ggPT09IHRydWUpIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nID09PSB0cnVlKSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJOb25lXCI7XG5cdFx0fVxuXHRcdHNob3dCb3VuZE1lc3NhZ2VzID0gY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uO1xuXHRcdGZuR2V0TXNnU3VidGl0bGUgPSBmbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIHx8IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiA9PT0gZmFsc2UpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93ID0gZmlsdGVyZWRNZXNzYWdlcyA/PyBbXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBmbkdldE1zZ1N1YnRpdGxlLFxuXHRcdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBzaG93Qm91bmRNZXNzYWdlc1xuXHR9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBVSSBkZWNpc2lvbnMgZm9yIHNob3dpbmcgbWVzc2FnZXMuXG4gKlxuICogVGhlc2Ugc2hhbGwgY29udGFpbiB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgdGhlIFVJIGVsZW1lbnQgdG8gdXNlLlxuICogSXQgd291bGQgYWxzbyBob2xkIGluZm9ybWF0aW9uIGZvciBhZnRlciBwcm9jZXNzIGxpa2UuLlxuICogMS4gcmVmcmVzaCBjb250ZXh0IGR1ZSB0byBldGFnIG1pc21hdGNoLlxuICogMi4gZG8gd2Ugc2hvdyBib3VuZCBtZXNzYWdlcyBhbmQgaGVuY2UgY2xlYXIgdGhlbSBhZnRlciB3ZSBzaG93IHRoZSBVSSBlbGVtZW50LlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQgdG8gbWVzc2FnZSBtb2RlbCBhbmQgc2hvdy5cbiAqIEBwYXJhbSBjb250ZXh0IEJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZS5cbiAqIEBwYXJhbSBzaG93Qm91bmRUcmFuc2l0aW9uIFNob3VsZCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIGNvbmN1cnJlbnRFZGl0RmxhZyBJcyB0aGlzIGEgY29uY3VycmVudCBlZGl0IHNjZW5hcmlvLlxuICogQHBhcmFtIGNvbnRyb2wgU291cmNlIGNvbnRyb2wuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBOYW1lIG9mIHRoZSBhY3Rpb24gd2hvc2UgcHJvY2VzcyByZXF1ZXN0ZWQgZm9yIG1lc3NhZ2VzIHRvIGJlIHNob3duLlxuICogQHBhcmFtIG9uQmVmb3JlU2hvd01lc3NhZ2UgQ2FsbGJhY2sgdG8gaW5mbHVlbmNlIFVJIGRlY2lzaW9uIGJlZm9yZSBjcmVhdGluZyBmaW5hbCBVSSBkZWNpc2lvbi5cbiAqIEBwYXJhbSB2aWV3VHlwZSBWaWV3IHR5cGUsIGxpc3QgcmVwb3J0IG9yIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIHNob3dTdGF0ZU1lc3NhZ2VzIFNob3VsZCBzdGF0ZSBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBtZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG4gKiBAcmV0dXJucyBVSSBkZWNpc2lvbnMgdXNlZCB0byBzaG93IG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRVSURlY2lzaW9ucyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNob3dCb3VuZFRyYW5zaXRpb24gPSBmYWxzZSxcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2UsXG5cdG1lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcixcblx0cmVzb3VyY2VNb2RlbD86IFJlc291cmNlTW9kZWxcbik6IE1lc3NhZ2VVSURlY2lzaW9ucyB7XG5cdC8vIEFkZCBDdXN0b20gbWVzc2FnZXNcblx0Ly8gVE9ETzogV2lsbCB0aGVzZSBtZXNzYWdlcyBiZSBwYXJ0IG9mIHRyYW5zaXRpb25NZXNzYWdlcz9cblx0aWYgKGN1c3RvbU1lc3NhZ2VzICYmIGN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzKTtcblx0fVxuXG5cdC8vIEdldCB0cmFuc2l0aW9uIE1lc3NhZ2VzXG5cdGNvbnN0IHRyYW5zaXRpb25NZXNzYWdlcyA9IGdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24uY2FsbCh0aGlzLCBzaG93Qm91bmRUcmFuc2l0aW9uLCBjb250ZXh0KTtcblxuXHQvLyBVSSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGlhbG9nXG5cdGNvbnN0IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQgPSBleGVjdXRlT25CZWZvcmVTaG93TWVzc2FnZXMuY2FsbCh0aGlzLCB0cmFuc2l0aW9uTWVzc2FnZXMsIG9uQmVmb3JlU2hvd01lc3NhZ2UpO1xuXHRsZXQgeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgPSBcIkRpYWxvZ1wiIH0gPSB1aURlY2lzaW9uSW50ZXJtaXR0ZW50O1xuXHQvLyBHZXQgRmlsdGVycyBmb3IgVW5ib3VuZCBNZXNzYWdlc1xuXHRzaG93Qm91bmRUcmFuc2l0aW9uID0gdWlEZWNpc2lvbkludGVybWl0dGVudC5jb250YWluc0JvdW5kVHJhbnNpdGlvbiA/PyBzaG93Qm91bmRUcmFuc2l0aW9uO1xuXHRjb25zdCBmaWx0ZXJzID0gZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzKHNob3dCb3VuZFRyYW5zaXRpb24sIHNob3dTdGF0ZU1lc3NhZ2VzKTtcblx0bWVzc2FnZXNUb1Nob3cgPSBnZXRNZXNzYWdlc1RvU2hvdyhmaWx0ZXJzLCBtZXNzYWdlc1RvU2hvdyA/PyBbXSk7XG5cdC8vIGhhbmRsZSBjb250ZXh0IGJvdW5kIG1lc3NhZ2VzLCBJZiB0aGVyZSBpcyBhIHNpbmdsZSBtZXNzYWdlIG9mIHdoaWNoIGlzIGJvdW5kZWQgdG8gdGhlIGNvbnRleHQgdGhlbiByZW1vdmUgdGhhdCBmcm9tIHRoZSBkaWFsb2dcblx0bWVzc2FnZXNUb1Nob3cgPSByZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcChtZXNzYWdlc1RvU2hvdywgY29udGV4dCk7XG5cdCh7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gcHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUoeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSkpO1xuXHQvLyBNb2RpZnkgRVRhZyBNZXNzYWdlc1xuXHRjb25zdCBoYXNFdGFnTWVzc2FnZSA9IHRoaXMubW9kaWZ5RVRhZ01lc3NhZ2VzT25seShMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAwICYmIHVpRWxlbWVudFRvVXNlICE9PSBcIk5vbmVcIikge1xuXHRcdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAxICYmIHJlc291cmNlTW9kZWwgJiYgY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpKSB7XG5cdFx0XHRjb25zdCBnZW5lcmljU3VjY2Vzc01lc3NhZ2UgPSBhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UocmVzb3VyY2VNb2RlbCwgbWVzc2FnZURpYWxvZ1BhcmFtZXRlcik7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdyA9IGdlbmVyaWNTdWNjZXNzTWVzc2FnZSA/IFtnZW5lcmljU3VjY2Vzc01lc3NhZ2VdIDogW21lc3NhZ2VzVG9TaG93WzBdXTtcblx0XHR9XG5cdFx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRvU2hvdyA9IG1lc3NhZ2VzVG9TaG93WzBdO1xuXHRcdFx0aWYgKG1lc3NhZ2VUb1Nob3cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChoYXNFdGFnTWVzc2FnZSB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uKCk/Lmxlbmd0aCB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uVXJsKCk/Lmxlbmd0aCkge1xuXHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSB3b3VsZCBzaG93IHNpbmdsZSBtZXNzYWdlIGluIG1lc3NhZ2UgYm94IG9ubHkgd2hlbjpcblx0XHRcdFx0Ly8gMS4gSXQgaXMgbm90IGFuIEV0YWcgbWVzc2FnZS5cblx0XHRcdFx0Ly8gMi4gVGhlcmUgaXMgbm8gbWVzc2FnZSBkZXNjcmlwdGlvbiBvciBkZXNjcmlwdGlvbiB1cmwgYXZhaWxhYmxlIGZvciBsb25nIHRleHQuXG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUobWVzc2FnZXNUb1Nob3csIGNvbnRyb2wsIGFjdGlvbk5hbWUsIHZpZXdUeXBlKTtcblx0XHRjb25zdCBmbkdldE1lc3NhZ2VTdWJ0aXRsZSA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdFx0aWYgKGZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBoYXNFdGFnTWVzc2FnZSA/IGNvbnRleHQgOiB1bmRlZmluZWQsXG5cdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IHNob3dCb3VuZFRyYW5zaXRpb25cblx0fTtcbn1cblxuLyoqXG4gKiBBZGRpbmcgYSBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqIEBwYXJhbSBzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciBTZWxlY3RlZCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIG1lc3NhZ2UgaXMgc2hvd24uXG4gKiBAcmV0dXJucyBNZXNzYWdlIHdpdGggZ2VuZXJpYyBzdWNjZXNzIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZShcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0c2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuKTogTWVzc2FnZVdpdGhIZWFkZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzZWxlY3Rpb25Db250ZXh0cyA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5hU2VsZWN0ZWRDb250ZXh0cztcblx0aWYgKHNlbGVjdGlvbkNvbnRleHRzICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uQ29udGV4dHMpICYmIHNlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGggPiAxICYmIHJlc291cmNlTW9kZWwpIHtcblx0XHRsZXQgYWN0aW9uTmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5ib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5lbnRpdHlTZXQ7XG5cdFx0YWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGFjdGlvbk5hbWU/LnNwbGl0KFwiLlwiKVthY3Rpb25OYW1lPy5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBhY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYWN0aW9uTmFtZSAmJiBlbnRpdHlTZXROYW1lID8gYCR7ZW50aXR5U2V0TmFtZX18JHthY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIiwgW3NlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGhdLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5TdWNjZXNzLFxuXHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGNvZGU6IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCJcblx0XHR9KTtcblx0fVxufVxuLyoqXG4gKiBDaGVjayBpcyBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlc1RvU2hvdyBJbml0aWFsIG1lc3NhZ2VzIHRvIHNob3cuXG4gKiBAcmV0dXJucyBJZiBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10pOiBib29sZWFuIHtcblx0bGV0IHJlZmVyZW5jZU1zZzogTWVzc2FnZVdpdGhIZWFkZXI7XG5cdGNvbnN0IGNoZWNrRmFpbGVkID0gbWVzc2FnZXNUb1Nob3cuc29tZSgobXNnLCBpZHgpID0+IHtcblx0XHRpZiAobXNnLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2Vzcykge1xuXHRcdFx0Ly8gTm9uIHN1Y2Nlc3MgbWVzc2FnZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmIChpZHggPT09IDApIHtcblx0XHRcdC8vIDFzdCBNZXNzYWdlXG5cdFx0XHRyZWZlcmVuY2VNc2cgPSBtc2c7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRDb2RlKCkgPT09IG1zZy5nZXRDb2RlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRNZXNzYWdlKCkgPT09IG1zZy5nZXRNZXNzYWdlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXREZXNjcmlwdGlvbigpID09PSBtc2cuZ2V0RGVzY3JpcHRpb24oKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldERlc2NyaXB0aW9uVXJsKCkgPT09IG1zZy5nZXREZXNjcmlwdGlvblVybCgpICYmXG5cdFx0XHRyZWZlcmVuY2VNc2cuZ2V0QWRkaXRpb25hbFRleHQoKSA9PT0gbXNnLmdldEFkZGl0aW9uYWxUZXh0KClcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xuXG5cdHJldHVybiAhY2hlY2tGYWlsZWQ7XG59XG5cbi8qKlxuICogU2hvdyBtZXNzYWdlcyBpbiB0aGUgZGVjaWRlZCBVSSBFbGVtZW50LlxuICogQHBhcmFtIHVpRGVjaXNpb25zIFVJIERlY2lzaW9uIHRvIGJlIHVzZWQgdG8gc2hvdyB0aGUgbWVzc2FnZXMuXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb3IgcmVqZWN0cyBiYXNlZCBvbiB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIFVJIGVsZW1lbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlc0luVUkodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gdWlEZWNpc2lvbnM7XG5cblx0Ly8gU2hvdyBEaWFsb2cgLyBNZXNzYWdlQm94IC8gTWVzc2FnZVRvYXN0XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiVG9hc3RcIikge1xuXHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VUb2FzdChtZXNzYWdlc1RvU2hvd1swXSk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIpIHtcblx0XHRhd2FpdCBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sKHVpRGVjaXNpb25zKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiQm94XCIpIHtcblx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlQm94Q29udHJvbCh1aURlY2lzaW9ucyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IG1vZGVsIGZpbHRlcnMgZm9yIGdldHRpbmcgdGhlIHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gc2hvd1N0YXRlTWVzc2FnZXMgU2hvdWxkIHN0YXRlIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHJldHVybnMgTW9kZWwgZmlsdGVyc1xuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJzRm9yTWVzc2FnZXMoc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgc2hvd1N0YXRlTWVzc2FnZXMgPSBmYWxzZSk6IEZpbHRlcltdIHtcblx0Y29uc3QgZmlsdGVycyA9IHNob3dTdGF0ZU1lc3NhZ2VzID8gW10gOiBbbmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogZmFsc2UgfSldO1xuXHRjb25zdCBpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJcIiwgdGVzdDogaXNOb25UZWNobmljYWxNZXNzYWdlIH0pO1xuXG5cdGlmIChzaG93U3RhdGVNZXNzYWdlcyB8fCBzaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0Ly8gQWRkIHRoZSBmaWx0ZXIgZm9yIGJvdGggc3RhdGUgbWVzc2FnZXMgb3IgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlc1xuXHRcdGNvbnN0IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coYUNvbnRyb2xJZHMpO1xuXHRcdH07XG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGlmIChzaG93Qm91bmRUcmFuc2l0aW9uICYmICFzaG93U3RhdGVNZXNzYWdlcykge1xuXHRcdFx0Ly8gQWRkIGV4dHJhIGZpbHRlciBpZiBvbmx5IGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXJlIHNob3duXG5cdFx0XHRmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0XHRmaWx0ZXJzLnB1c2goaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT25seSB1bmJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93blxuXHRcdGZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIlxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlclxuXHRcdFx0XHRdLFxuXHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzTWVzc2FnZXNGcm9tQ2hhbmdlc2V0RmFpbHVyZSh7XG5cdG1lc3NhZ2VzVG9TaG93LFxuXHR1aUVsZW1lbnRUb1VzZVxufTogUGljazxNZXNzYWdlVUlEZWNpc2lvbnMsIFwidWlFbGVtZW50VG9Vc2VcIiB8IFwibWVzc2FnZXNUb1Nob3dcIj4pOiBQaWNrPE1lc3NhZ2VVSURlY2lzaW9ucywgXCJ1aUVsZW1lbnRUb1VzZVwiIHwgXCJtZXNzYWdlc1RvU2hvd1wiPiB7XG5cdGxldCByZXRNZXNzYWdlcyA9IFsuLi5tZXNzYWdlc1RvU2hvd107XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDIpIHtcblx0XHQvLyBUaGVyZSBhcmUgMiBtZXNzYWdlOlxuXHRcdC8vIDEuIEdlbmVyaWMgZXJyb3IgY2hhbmdlc2V0IG1lc3NhZ2UgYWRkZWQgYnkgRkUuXG5cdFx0Ly8gMi4gTWFpbiBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGludGVyYWN0aW9uLlxuXHRcdC8vIFdlIHJlbW92ZSB0aGUgZ2VuZXJpYyBtZXNzYWdlLCBzaG93IG9ubHkgYW4gZW5oYW5jZWQgJ01haW4gZXJyb3IgbWVzc2FnZScgd2l0aCBhIGdlbmVyaWMgbWVzc3NhZ2UgcHJlLXRleHQgaW4gdGhlIG1lc3NhZ2UgYm94LlxuXHRcdGNvbnN0IGdlbmVyaWNNc2dzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRjb25zdCBub25HZW5lcmljTXNnczogTWVzc2FnZVtdID0gW107XG5cdFx0bWVzc2FnZXNUb1Nob3cuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdFx0Z2VuZXJpY01zZ3MucHVzaChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vbkdlbmVyaWNNc2dzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGdlbmVyaWNNc2dzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgeyBmZTogZmVUZWNobmljYWxEZXRhaWxzIH0gPSAoZ2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzO1xuXHRcdFx0aWYgKGZlVGVjaG5pY2FsRGV0YWlscz8uY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHByZVRleHQgPSBmZVRlY2huaWNhbERldGFpbHM/LmNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjtcblx0XHRcdFx0aWYgKHByZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCB0ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlOiBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0ge1xuXHRcdFx0XHRcdFx0ZmU6IHtcblx0XHRcdFx0XHRcdFx0c2luZ2xlRXJyb3JQcmVUZXh0OiBwcmVUZXh0LFxuXHRcdFx0XHRcdFx0XHRzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBnZW5lcmljTXNnc1swXS5nZXRJZCgpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBleGlzdGluZ1RlY2hEZXRhaWxzID0gbm9uR2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpID8/IHt9O1xuXHRcdFx0XHRcdC8vIGNvbWJpbmUgZXhpc3RpbmcgdGVjaG5pY2FsIGRldGFpbHMgaWYgYW55LCB3aXRoIHRoZSBjaGFuZ2Ugc2V0IGluZm9ybWF0aW9uIHdlIHdhbnQgdG8gYWRkLlxuXHRcdFx0XHRcdG5vbkdlbmVyaWNNc2dzWzBdLnNldFRlY2huaWNhbERldGFpbHMoeyAuLi5leGlzdGluZ1RlY2hEZXRhaWxzLCAuLi50ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlIH0pO1xuXHRcdFx0XHRcdHJldE1lc3NhZ2VzID0gbm9uR2VuZXJpY01zZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlc1RvU2hvdzogcmV0TWVzc2FnZXMsXG5cdFx0dWlFbGVtZW50VG9Vc2U6IHJldE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiB1aUVsZW1lbnRUb1VzZSAhPT0gXCJOb25lXCIgPyBcIkJveFwiIDogdWlFbGVtZW50VG9Vc2Vcblx0fTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGN1c3RvbSBtZXNzYWdlcyB0byBtZXNzYWdlIG1vZGVsLlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQuXG4gKi9cbmZ1bmN0aW9uIGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10pOiB2b2lkIHtcblx0Y3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IEN1c3RvbU1lc3NhZ2UpIHtcblx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdH0pXG5cdFx0KTtcblx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb3J0ZXJGb3JNZXNzYWdlcygpOiBTb3J0ZXIge1xuXHRyZXR1cm4gbmV3IFNvcnRlcihcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKG9iajE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvYmoyOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4ge1xuXHRcdGNvbnN0IHJhbmtBID0gZ2V0TWVzc2FnZVJhbmsob2JqMSk7XG5cdFx0Y29uc3QgcmFua0IgPSBnZXRNZXNzYWdlUmFuayhvYmoyKTtcblxuXHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc1RvU2hvdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgdHJhbnNpc3Rpb25NZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVdpdGhIZWFkZXJbXSB7XG5cdGxldCBtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSA9IFsuLi50cmFuc2lzdGlvbk1lc3NhZ2VzXTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzKSxcblx0XHRjdXJyZW50Q29udGV4dHMgPSBsaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0aWYgKGN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdC8vIHVzaW5nIHRoZSBtZXNzYWdlIG1vZGVsIGFnYWluIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldyBhbmQgdGhlbiBmaWx0ZXJpbmcgb24gdGhhdCBiaW5kaW5nIGFnYWluIGlzIHVubmVjZXNzYXJ5LlxuXHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gY3VycmVudENvbnRleHRzLm1hcCgoY3VycmVudENvbnRleHQpID0+IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpKTtcblx0XHRjb25zdCBvVW5pcXVlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdFx0bWVzc2FnZXNUb1Nob3cgPSBtZXNzYWdlcy5jb25jYXQobWVzc2FnZXNUb1Nob3cpLmZpbHRlcihmdW5jdGlvbiAob2JqOiBNZXNzYWdlKSB7XG5cdFx0XHQvLyByZW1vdmUgZW50cmllcyBoYXZpbmcgZHVwbGljYXRlIG1lc3NhZ2UgaWRzXG5cdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmdldElkKCldICYmIChvVW5pcXVlT2JqW29iai5nZXRJZCgpXSA9IHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtZXNzYWdlc1RvU2hvdztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VUb2FzdChtZXNzYWdlOiBNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZSk7XG5cdFx0cmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucywgcnVuVG9UZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQgfCBEaWFsb2c+IHtcblx0bGV0IGhpZ2hlc3RQcmlvcml0eTtcblx0bGV0IGhpZ2hlc3RQcmlvcml0eVRleHQ7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHBhcmFtMTogdm9pZCB8IERpYWxvZykgPT4gdm9pZCkge1xuXHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdGNvbnN0IHsgbWVzc2FnZXNUb1Nob3csIGNvbnRleHROZWVkc0V0YWdSZWZyZXNoIH0gPSB1aURlY2lzaW9uO1xuXHRcdGNvbnN0IG1lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwobWVzc2FnZXNUb1Nob3cpO1xuXHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cobWVzc2FnZURpYWxvZ01vZGVsLCBzdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IHNvcnRlciA9IGdldFNvcnRlckZvck1lc3NhZ2VzKCk7XG5cdFx0KG1lc3NhZ2VPYmplY3QubWVzc2FnZVZpZXcuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLnNvcnQoc29ydGVyKTtcblxuXHRcdGlmICghZGlhbG9nQ29udHJvbCB8fCAhZGlhbG9nQ29udHJvbC5pc09wZW4oKSkge1xuXHRcdFx0ZGlhbG9nQ29udHJvbCA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24gKGNvbXBsZXRpb25Qcm9taXNlOiB7IHJlc29sdmU6IEZ1bmN0aW9uOyByZWplY3Q6IEZ1bmN0aW9uIH0pOiB2b2lkIHtcblx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRcdFx0XHRjb21wbGV0aW9uUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0Y29udGVudE1pZGRsZTogW1xuXHRcdFx0XHRcdFx0bmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhUmVzb2x2ZUZ1bmN0aW9ucykge1xuXHRcdFx0XHRcdFx0aXRlbSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkaWFsb2dDb250cm9sLnJlbW92ZUFsbENvbnRlbnQoKTtcblx0XHRkaWFsb2dDb250cm9sLmFkZENvbnRlbnQobWVzc2FnZVZpZXcpO1xuXG5cdFx0aWYgKGNvbnRleHROZWVkc0V0YWdSZWZyZXNoKSB7XG5cdFx0XHRkaWFsb2dDb250cm9sLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dE5lZWRzRXRhZ1JlZnJlc2guaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0fVxuXHRcdGhpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShtZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRoaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKGhpZ2hlc3RQcmlvcml0eSk7XG5cdFx0ZGlhbG9nQ29udHJvbC5zZXRTdGF0ZShoaWdoZXN0UHJpb3JpdHkpO1xuXHRcdCgoZGlhbG9nQ29udHJvbC5nZXRDdXN0b21IZWFkZXIoKSBhcyBCYXIpLmdldENvbnRlbnRNaWRkbGUoKVswXSBhcyBUZXh0KS5zZXRUZXh0KGhpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdG1lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdGRpYWxvZ0NvbnRyb2wub3BlbigpO1xuXHRcdGlmIChydW5Ub1Rlc3QpIHtcblx0XHRcdHJlc29sdmUoZGlhbG9nQ29udHJvbCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VCb3hDb250cm9sKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93IH0gPSB1aURlY2lzaW9uO1xuXHRcdGNvbnN0IG1lc3NhZ2VUb1Nob3cgPSBtZXNzYWdlc1RvU2hvd1swXTtcblx0XHRjb25zdCBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2VUb1Nob3cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHsgc2luZ2xlR2VuZXJpY01lc3NhZ2VJZCwgc2luZ2xlRXJyb3JQcmVUZXh0IH0gPSAobWVzc2FnZVRlY2huaWNhbERldGFpbHMgYXMgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk/LmZlID8/IHt9O1xuXHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gbWVzc2FnZUhhbmRsaW5nLmdldFJldHJ5QWZ0ZXJNZXNzYWdlKG1lc3NhZ2VUb1Nob3csIHRydWUpO1xuXHRcdC8vIElmIGl0IGlzIGEgcmV0cnkgbWVzc2FnZSwgdGhlbiBpdCBuZWVkcyB0byBoYXZlIHRlY2huaWNhbCBkZXRhaWxzIHRvIHNob3cgaXQuXG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VCb3ggPSByZXRyeUFmdGVyTWVzc2FnZSA/IG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIDogdHJ1ZTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRcdGNvbnN0IHN0YXJ0VGFnID0gXCI8aHRtbD48Ym9keT48c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJlLXdyYXAnPlwiLFxuXHRcdFx0XHRjbG9zZVRhZyA9IFwiPC9zcGFuPjwvYm9keT48L2h0bWw+XCI7XG5cdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IHN0YXJ0VGFnO1xuXG5cdFx0XHQvLyBBZGRpbmcgcHJlLXRleHQgZm9yIHRoZSBtZXNzYWdlc1xuXHRcdFx0aWYgKHJldHJ5QWZ0ZXJNZXNzYWdlKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nfTxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPjwvYnI+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChzaW5nbGVFcnJvclByZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlSGVhZGVyID0gKG1lc3NhZ2VUb1Nob3cgYXMgTWVzc2FnZVdpdGhIZWFkZXIpPy5bXCJoZWFkZXJOYW1lXCJdXG5cdFx0XHRcdFx0XHQ/IGAkeyhtZXNzYWdlVG9TaG93IGFzIE1lc3NhZ2VXaXRoSGVhZGVyKT8uW1wiaGVhZGVyTmFtZVwiXX06YFxuXHRcdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nfSR7c2luZ2xlRXJyb3JQcmVUZXh0fTxici8+PGJyLz4ke21lc3NhZ2VIZWFkZXJ9IGA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkaW5nIHRoZSBtYWluIGVycm9yIG1lc3NhZ2UuXG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgbWVzc2FnZVRvU2hvdy5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgKyBtZXNzYWdlVG9TaG93LmdldEFkZGl0aW9uYWxUZXh0KClcblx0XHRcdFx0fTogJHttZXNzYWdlVG9TaG93LmdldE1lc3NhZ2UoKX0ke2Nsb3NlVGFnfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG1lc3NhZ2VUb1Nob3cuZ2V0TWVzc2FnZSgpfSR7Y2xvc2VUYWd9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdGh0bWxUZXh0OiBNYW5hZ2VkT2JqZWN0LmVzY2FwZVNldHRpbmdzVmFsdWUoZm9ybWF0dGVkVGV4dFN0cmluZylcblx0XHRcdH0pO1xuXG5cdFx0XHRzaG93TWVzc2FnZUJveFBlclR5cGUoXG5cdFx0XHRcdGZvcm1hdHRlZFRleHQgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRvbkNsb3NlOiBjbG9zZU1lc3NhZ2VCb3guYmluZChudWxsLCBtZXNzYWdlVG9TaG93LCByZXNvbHZlLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXNzYWdlVG9TaG93XG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkPzogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzVG9SZW1vdmUgPSBbbWVzc2FnZVNob3duXTtcblx0aWYgKHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpIHtcblx0XHRjb25zdCBhbGxNc2dzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBnZW5lcmljTWVzc2FnZSA9IGFsbE1zZ3MuZmluZCgobXNnOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbXNnLmdldElkKCkgPT09IHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpO1xuXHRcdGlmIChnZW5lcmljTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZXNUb1JlbW92ZS5wdXNoKGdlbmVyaWNNZXNzYWdlKTtcblx0XHR9XG5cdH1cblx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9SZW1vdmUpO1xuXHRjYWxsQmFjayh1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBzaG93TWVzc2FnZUJveFBlclR5cGUoZm9ybWF0dGVkVGV4dDogc3RyaW5nLCBjbG9zZTogeyBvbkNsb3NlOiBGdW5jdGlvbiB9LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdHN3aXRjaCAobWVzc2FnZS5nZXRUeXBlKCkpIHtcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLldhcm5pbmc6XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBNZXNzYWdlVHlwZS5TdWNjZXNzOlxuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuSW5mb3JtYXRpb246XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRNZXNzYWdlQm94LnNob3coZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwKHRyYW5zaXRpb25NZXNzYWdlczogTWVzc2FnZVtdLCBjb250ZXh0OiBDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0Y29uc3QgYm91bmRDb250ZXh0TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHR0cmFuc2l0aW9uTWVzc2FnZXM/LmZvckVhY2goKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRpZiAobWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBjb250ZXh0Py5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWUpIHtcblx0XHRcdGJvdW5kQ29udGV4dE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0fVxuXHR9KTtcblx0aWYgKGJvdW5kQ29udGV4dE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHRyYW5zaXRpb25NZXNzYWdlcyA9IHRyYW5zaXRpb25NZXNzYWdlcz8uZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZSAhPT0gYm91bmRDb250ZXh0TWVzc2FnZXNbMF07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHRyYW5zaXRpb25NZXNzYWdlcztcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBncm91cCBuYW1lIGZvciBhbGwgbWVzc2FnZXMgaW4gYSBkaWFsb2cuXG4gKiBAcGFyYW0gYU1vZGVsRGF0YUFycmF5IE1lc3NhZ2VzIGFycmF5XG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gdmlld1R5cGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShcblx0YU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0YU1vZGVsRGF0YUFycmF5LmZvckVhY2goKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIlwiO1xuXHRcdGlmICghYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCAmJiBhTW9kZWxEYXRhLmdldENvZGU/LigpICE9PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdC8vIHVuYm91bmQgdHJhbnNpaXRvbiBtZXNzYWdlc1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH0gZWxzZSBpZiAoYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCkge1xuXHRcdFx0Ly8gTFIgZmxvd1xuXHRcdFx0aWYgKHZpZXdUeXBlID09PSBcIkxpc3RSZXBvcnRcIiAmJiBjb250cm9sPy5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lTFJUYWJsZShjb250cm9sLCBhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZpZXdUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHQvLyBPUCBEaXNwbGF5IG1vZGVcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUoYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUsIGNvbnRyb2wgYXMgVmlldyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBmb3IgTFIgdGFibGUuXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtIGFzIE1EQ1RhYmxlLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgTURDVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShcblx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG4pOiB2b2lkIHtcblx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChtZGNUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0aWYgKGlkZW50aWZpZXJDb2x1bW4pIHtcblx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlLmdldFRhcmdldHMoKT8uWzBdPy5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gPyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dIDogXCJcIjtcblx0XHRcdFx0Y29uc3QgY29sdW1uTmFtZVN1ZmZpeCA9IHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID8gYCwgJHt0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gIDogXCJcIjtcblx0XHRcdFx0bWVzc2FnZS5zZXRBZGRpdGlvbmFsVGV4dChgJHtyb3dJZGVudGlmaWVyfSR7Y29sdW1uTmFtZVN1ZmZpeH1gKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmICh0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdG1lc3NhZ2Uuc2V0QWRkaXRpb25hbFRleHQoYCR7dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRsZXQgaGVhZGVyTmFtZSA9IG1kY1RhYmxlLmdldEhlYWRlclZpc2libGUoKSAmJiB0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXI7XG5cdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdGhlYWRlck5hbWUgPSBzdWJzZWN0aW9uLmdldFRpdGxlKCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRoZWFkZXJOYW1lID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke2hlYWRlck5hbWV9YDtcblx0fVxuXHRtZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gc3Vic2VjdGlvbiBTdWJzZWN0aW9uXG4gKiBAcGFyYW0gbWRjVGFibGUgIE1EQyB0YWJsZVxuICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHZpZXdDb250ZXh0IFZpZXcncyBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBncm91cE5hbWVJc0dlbmVyYWwgSXMgcHJlc2VudCBncm91cCBuYW1lICdHZW5lcmFsJ1xuICogQHBhcmFtIGFjdGlvbk5hbWUgQWN0aW9uIG5hbWVcbiAqIEByZXR1cm5zIElmIGdyb3VwIG5hbWUgaXMgJ0dlbmVyYWwnXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRhY3Rpb25OYW1lPzogc3RyaW5nXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdG1kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKChvRWxlbWVudCkgPT4ge1xuXHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdH1cblx0fSk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7dmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHttZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChtZXNzYWdlLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRtZGNUYWJsZSxcblx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQsXG5cdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlLCBtZXNzYWdlLCBvVGFyZ2V0VGFibGVJbmZvKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShzdWJzZWN0aW9uLCBtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRncm91cE5hbWVJc0dlbmVyYWwgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdyb3VwTmFtZUlzR2VuZXJhbDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YSxcblx0XHRcdFx0XHRcdFx0b1ZpZXdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7b1ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBPUCBjb250ZXh0IHBhdGggaXMgcGFydCBvZiB0YXJnZXQsIHNldCBMYXN0IEFjdGlvbiBhcyBncm91cCBuYW1lXG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMjtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gNDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gc2V0U2VjdGlvbk5hbWVJbkdyb3VwXG4gKiBAcGFyYW0gZm5TZXRHcm91cE5hbWVcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gYW5kIFN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZyxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRmblNldEdyb3VwTmFtZTogRnVuY3Rpb25cbik6IHsgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTsgc3ViVGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm8gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVBbmRUYXJnZXRJbmZvKG9UYWJsZSwgYU1lc3NhZ2UsIG9FbGVtZW50LCBvUm93QmluZGluZyk7XG5cdG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSBvVGFibGUuZ2V0SGVhZGVyKCk7XG5cblx0bGV0IHNDb250cm9sSWQsIGJJc0NyZWF0aW9uUm93O1xuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdHNDb250cm9sSWQgPSBhTWVzc2FnZS5nZXRDb250cm9sSWRzKCkuZmluZChmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sSW5UYWJsZShvVGFibGUsIHNJZCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoYU1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpICYmIHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRmblNldEdyb3VwTmFtZShhTWVzc2FnZSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3ViVGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdGFNZXNzYWdlLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0b1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93XG5cdCk7XG5cblx0cmV0dXJuIHsgb1RhcmdldFRhYmxlSW5mbywgc3ViVGl0bGUgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIHRoZSBzdWJ0aXRsZSBiYXNlZCBvbiBUYWJsZSBSb3cvQ29sdW1uIGRhdGEuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHRhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBpc0NyZWF0aW9uUm93XG4gKiBAcGFyYW0gdGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHRpc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHJvd1N1YnRpdGxlVmFsdWU7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0Y29uc3QgdGFibGVDb2xQcm9wZXJ0eSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8odGFibGVSb3dDb250ZXh0KTtcblx0Y29uc3QgY29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1lc3NhZ2UsIHRhYmxlKTtcblx0aWYgKGlzQ3JlYXRpb25Sb3cgfHwgdGFibGVSb3dDb250ZXh0Py5pc0luYWN0aXZlKCkpIHtcblx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0dGFibGVUYXJnZXRDb2xOYW1lID8gdGFibGVUYXJnZXRDb2xOYW1lIDogKGNvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0dGFibGUsXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCA9IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoICYmIHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmICh0YWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmICh0YXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhcmdldGVkQ29udHJvbCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gR2V0dGluZyB0aGUgY29sdW1uIGxhYmVsIGFuZCBpdHMgdmFsdWUgb2YgYSBzaW5nbGUgcm93XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbFZhbHVlKFxuXHRcdFx0XHRcdHRhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcm93cywgdGhlIHN1YnRpdGxlIGlzIGRpc3BsYXllZCBhcyDigJhTZWUgbWVzc2FnZSBkZXRhaWxz4oCZXG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9ERVRBSUxFRF9ST1dfSU5GT1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKGNvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbcm93U3VidGl0bGVWYWx1ZSwgdGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pfSwgJHtcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWVcblx0XHRcdFx0fWA7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAocm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgdGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtZXNzYWdlU3VidGl0bGU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSB0YWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSB0YWJsZUNvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IGJpbmRpbmdDb250ZXh0O1xuXHRpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCB7IGtleSB9ID0gdGFibGVDb2xQcm9wZXJ0eVswXTtcblx0XHRjb25zdCBvTW9kZWwgPSB0YWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aCh0YWJsZVJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRpZiAob01ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtrZXl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRLZXlDb2x1bW5JbmZvKHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmopO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzQ29udHJvbElkXG4gKiBAcmV0dXJucyBUcnVlIGlmIGNvbnRyb2wgaXMgcGFydCBvZiB0YWJsZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sSW5UYWJsZShvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpOiBVSTVFbGVtZW50W10gfCBib29sZWFuIHtcblx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpKSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGxldCBvUGFyZW50Q29udHJvbCA9IG9Db250cm9sPy5nZXRQYXJlbnQoKTtcblx0d2hpbGUgKFxuXHRcdG9QYXJlbnRDb250cm9sICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC5tLkNvbHVtbkxpc3RJdGVtXCIpXG5cdCkge1xuXHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRyZXR1cm4gISFvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0aWYgKHNQYXRoVG9CZVJlbW92ZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblxuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnN0YXJ0c1dpdGgoc1BhdGhUb0JlUmVtb3ZlZCkpXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIGJCb3VuZE1lc3NhZ2VzIFRvIGdldCBvbmx5IGJvdW5kIG1lc3NhZ2VzXG4gKiBAcGFyYW0gYlRyYW5zaXRpb25Pbmx5IFRvIGdldCBvbmx5IHRyYW5zaXRpb24gbWVzc2FnZXNcbiAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkIEZpbHRlciBvdXQgYm91bmQgbWVzc2FnZXMgd2l0aCBwYXRoXG4gKiBAcmV0dXJucyBNZXNzYWdlc1xuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcyA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHkgPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLmdldFBlcnNpc3RlbnQoKSkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIikgfHxcblx0XHRcdFx0KCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gfHwgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldENvZGUoKSA9PT0gXCI1MDNcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkgIT09IFwiXCIgJiZcblx0XHRcdCFhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKS5pbmNsdWRlcyhvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnNldE1lc3NhZ2UoXG5cdFx0XHRcdGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke2FUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpfWBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8vRmlsdGVyaW5nIG1lc3NhZ2VzIGFnYWluIGhlcmUgdG8gYXZvaWQgc2hvd2luZyBwdXJlIHRlY2huaWNhbCBtZXNzYWdlcyByYWlzZWQgYnkgdGhlIG1vZGVsXG5cdGNvbnN0IGJhY2tlbmRNZXNzYWdlczogTWVzc2FnZVtdID0gYVRyYW5zaXRpb25NZXNzYWdlcy5maWx0ZXIoaXNOb25UZWNobmljYWxNZXNzYWdlKTtcblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKTogc3RyaW5nIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb0VzY2FwZSA9IGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoYCR7Zm5SZWdFeHBlc2NhcGUoY29udGV4dFBhdGhUb0VzY2FwZSl9XFxcXCguKlxcXFwpL2ApO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIG1hdGNoaW5nIHRoZSBtZXNzYWdlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbmRUYXJnZXRJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZ1xuKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0Y29uc3Qgb1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gb0VsZW1lbnQ/LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChyb3dDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gcm93Q29udGV4dCAmJiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihyb3dDb250ZXh0LmdldFBhdGgoKSkgPT09IDA7XG5cdFx0fSlcblx0fTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKiBAcGFyYW0gc2VjdGlvblxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBiTXVsdGlwbGVTdWJTZWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRUYWJsZUluZm9cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcGFyYW0gaW5jbHVkZVRhYmxlR3JvdXBOYW1lXG4gKiBAcmV0dXJucyBHcm91cCBuYW1lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRpbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlXG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdHNlY3Rpb24uZ2V0VGl0bGUoKSArXG5cdFx0KHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSAmJiBiTXVsdGlwbGVTdWJTZWN0aW9ucyA/IGAsICR7c3ViU2VjdGlvbi5nZXRUaXRsZSgpfWAgOiBcIlwiKSArXG5cdFx0KG9UYXJnZXRUYWJsZUluZm8gJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciAmJiBpbmNsdWRlVGFibGVHcm91cE5hbWVcblx0XHRcdD8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YFxuXHRcdFx0OiBcIlwiKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBiSXNPcnBoYW5FbGVtZW50KG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIWFFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChvRWxlbSkge1xuXHRcdGxldCBvUGFyZW50RWxlbWVudCA9IG9FbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdHdoaWxlIChvUGFyZW50RWxlbWVudCAmJiBvUGFyZW50RWxlbWVudCAhPT0gb0VsZW0pIHtcblx0XHRcdG9QYXJlbnRFbGVtZW50ID0gb1BhcmVudEVsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyZW50RWxlbWVudCA/IHRydWUgOiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBmaWx0ZXJzIGFuZCBnaXZlcyBiYWNrIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgY29udGV4dCBwYXNzZWQuXG4gKiBAcGFyYW0gY29udGV4dFxuICogQHJldHVybnMgTWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzRm9yQ29udGV4dChjb250ZXh0OiBDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPiAwICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLnN0YXJ0c1dpdGgoY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0fSlcblx0KTtcblx0Y29uc3QgY3VycmVudENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdHJldHVybiBjdXJyZW50Q29udGV4dHMubWFwKChjdXJyZW50Q29udGV4dCkgPT4gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCkpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYm9vbGVhbiB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIHByZXNlbnQgaW4gdGhlIGRpYWxvZyBiYXNlZCBvbiB0aGUgY29udHJvbCBJZHMuXG4gKiBAcGFyYW0gY29udHJvbElkcyBBcnJheSBvZiBjb250cm9sIElkc1xuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgdGFyZ2V0IHByZXNlbnQgaW4gdGhlIGRpYWxvZy5cbiAqL1xuZnVuY3Rpb24gaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coY29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0bGV0IG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCwgZXJyb3JGaWVsZENvbnRyb2w7XG5cdGNvbnN0IGluZGV4ID0gSW5maW5pdHk7XG5cdGlmIChjb250cm9sSWRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWRzWzBdKTtcblx0XHRlcnJvckZpZWxkQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkc1swXSkgYXMgVUk1RWxlbWVudDtcblx0fSBlbHNlIHtcblx0XHRsZXQgZXJyb3JDb250cm9sSWQ7XG5cdFx0Y29udHJvbElkcy5mb3JFYWNoKChjb250cm9sSWQpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZCk7XG5cdFx0XHRpZiAoY29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRlcnJvckNvbnRyb2xJZCA9IGNvbnRyb2xJZDtcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGVycm9yQ29udHJvbElkKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9IEluZmluaXR5O1xuXHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbD8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdC8vIG1lc3NhZ2VzIHdpdGggdGFyZ2V0IGluc2lkZSBzYXAubS5EaWFsb2cgc2hvdWxkIG5vdCBicmluZyB1cCB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIFRyYW5zaXRpb24gbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQgcGF0aCB3aGVuIHRoZSBvYmplY3QgcGFnZSBpcyBjbG9zZWQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dCBmb3Igd2hpY2ggdGhlIG1lc3NhZ2VzIGFyZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiByZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0KG9Db250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGNvbnN0IGlzTWVzc2FnZVN0cmlwTWVzc2FnZTogTWVzc2FnZVtdID0gW107XG5cblx0bWVzc2FnZXNJbk1vZGVsPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0Y29uc3QgaXNTaW5nbGVUYXJnZXQgPSBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDE7XG5cdFx0Y29uc3QgaXNUYXJnZXRNYXRjaGluZyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBvQ29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpdGlvbk1lc3NhZ2UgPSBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZTtcblxuXHRcdGlmIChpc1NpbmdsZVRhcmdldCAmJiBpc1RhcmdldE1hdGNoaW5nICYmIGlzVHJhbnNpdGlvbk1lc3NhZ2UpIHtcblx0XHRcdGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5wdXNoKG1lc3NhZ2UpO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5sZW5ndGggPT09IDEpIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoaXNNZXNzYWdlU3RyaXBNZXNzYWdlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBjb250ZXh0IGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwgd2hlbiB0aGVyZSBpcyBlcnJvciBvbiB0aGUgZGlhbG9nIGFuZCB3aGVuIHRoZSBkaWFsb2cgaXMgb3Blbi5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbChtZXNzYWdlcz86IE1lc3NhZ2VbXSwgY29udGV4dHM/OiBDb250ZXh0W10pOiB2b2lkIHtcblx0Y29uc3QgYm91bmRDb250ZXh0TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoY29udGV4dHM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdG1lc3NhZ2VzPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gY29udGV4dHM/LlswXT8uZ2V0UGF0aCgpICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhib3VuZENvbnRleHRNZXNzYWdlcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgZnJvbSBzaG93aW5nIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHJldHVybnMgQXJyYXkgb2YgbWVzc2FnZXMgYWZ0ZXIgcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuICovXG5mdW5jdGlvbiByZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyhtZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVtdIHtcblx0Y29uc3QgbWVzc2FnZXNUb0JlUmVtb3ZlZCA9IG1lc3NhZ2VzPy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKTtcblx0bWVzc2FnZXMgPSBtZXNzYWdlcz8uZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZXNUb0JlUmVtb3ZlZD8uaW5jbHVkZXMobWVzc2FnZSkpO1xuXHRyZXR1cm4gbWVzc2FnZXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFsbFRyYW5zaXRpb25NZXNzYWdlc0ZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHQuZ2V0RGF0YSgpXG5cdFx0Py5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlVGFyZ2V0cyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpO1xuXHRcdFx0aWYgKG1lc3NhZ2VUYXJnZXRzLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlVGFyZ2V0c1swXS5pbmNsdWRlcyhjb250ZXh0LmdldFBhdGgoKSkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkpIHtcblx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqIEBuYW1lc3BhY2VcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG1lc3NhZ2VIYW5kbGluZzogbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IGdldE1lc3NhZ2VzLFxuXHRnZXRVSURlY2lzaW9uczogZ2V0VUlEZWNpc2lvbnMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nLFxuXHRzZXRNZXNzYWdlU3VidGl0bGU6IHNldE1lc3NhZ2VTdWJ0aXRsZSxcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0LFxuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24sXG5cdGZuRmlsdGVyVXBvbklkczogZm5GaWx0ZXJVcG9uSWRzLFxuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IGdldFRhYmxlQW5kVGFyZ2V0SW5mbyxcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSxcblx0YklzT3JwaGFuRWxlbWVudDogYklzT3JwaGFuRWxlbWVudCxcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUsXG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUsXG5cdGdldFRhYmxlQ29sSW5mbzogZ2V0VGFibGVDb2xJbmZvLFxuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiBnZXRUYWJsZUNvbFByb3BlcnR5LFxuXHRnZXRNZXNzYWdlU3VidGl0bGU6IGdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogZGV0ZXJtaW5lQ29sdW1uSW5mbyxcblx0ZmV0Y2hDb2x1bW5JbmZvOiBmZXRjaENvbHVtbkluZm8sXG5cdGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzOiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyxcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogZm5DYWxsYmFja1NldEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSxcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogc2V0R3JvdXBOYW1lTFJUYWJsZSxcblx0aXNDb250cm9sSW5UYWJsZTogaXNDb250cm9sSW5UYWJsZSxcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93LFxuXHRyZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcDogcmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAsXG5cdGdldEZpbHRlcnNGb3JNZXNzYWdlczogZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzLFxuXHRzaG93TWVzc2FnZXNJblVJOiBzaG93TWVzc2FnZXNJblVJLFxuXHRzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2w6IHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCxcblx0c2hvd01lc3NhZ2VUb2FzdDogc2hvd01lc3NhZ2VUb2FzdCxcblx0c2hvd01lc3NhZ2VCb3hDb250cm9sOiBzaG93TWVzc2FnZUJveENvbnRyb2wsXG5cdGdldE1lc3NhZ2VzRm9yQ29udGV4dDogZ2V0TWVzc2FnZXNGb3JDb250ZXh0LFxuXHRpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZzogaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2csXG5cdHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbDogcmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsLFxuXHRyZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZzogcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2csXG5cdHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlLFxuXHR1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZTogdXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGUsXG5cdHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlOiB1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZSxcblx0Y2xvc2VNZXNzYWdlQm94OiBjbG9zZU1lc3NhZ2VCb3gsXG5cdHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQ6IHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQsXG5cdGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzOiBjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyxcblx0YWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlOiBhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UsXG5cdGlzTm9uVGVjaG5pY2FsTWVzc2FnZTogaXNOb25UZWNobmljYWxNZXNzYWdlLFxuXHRyZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0OiByZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBK0NBLE1BQU1BLFVBQVUsR0FBR0MsSUFBSSxDQUFDRCxVQUFVO0VBQ2xDLElBQUlFLGlCQUFzRCxHQUFHLEVBQUU7RUFDL0QsSUFBSUMsYUFBcUI7RUFDekIsSUFBSUMsV0FBbUI7RUFDdkIsSUFBSUMsV0FBd0I7O0VBNEI1QjtFQUNBOztFQThJQSxTQUFTQyx3QkFBd0JBLENBQUEsRUFBVztJQUMzQyxJQUFJQyxrQkFBMEI7O0lBRTlCO0lBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsU0FBa0QsRUFBVTtNQUNqRixPQUFPQSxTQUFTLENBQUNDLFFBQVEsR0FDdEIsTUFBTSxHQUNORCxTQUFTLENBQUNDLFFBQVEsR0FDbEIsV0FBVyxHQUNYRCxTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0osU0FBUyxDQUFDQyxRQUFRLENBQUNJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRUwsU0FBUyxDQUFDQyxRQUFRLENBQUNJLFdBQVcsQ0FBQyxHQUFHLENBQUMs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
1602
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwibXNnVmlldyIsImdldENvbnRlbnQiLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiZ2V0TW9kZWwiLCJzZXREYXRhIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiYk1lc3NhZ2VEaWFsb2ciLCJkTm93IiwiRGF0ZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImdldE1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic29tZSIsIm1lc3NhZ2UiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwibXVsdGk0MTIiLCJvTWVzc2FnZVRlbXBsYXRlIiwiZGVzY3JpcHRpb25CaW5kaW5nIiwidGVjaG5pY2FsRGV0YWlsc0JpbmRpbmciLCJNZXNzYWdlSXRlbSIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbiIsInNob3dCb3VuZFRyYW5zaXRpb24iLCJfY29udGV4dCIsInRyYW5zaXRpb25NZXNzYWdlcyIsImNvbmNhdCIsImV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlc1RvU2hvdyIsInVpRWxlbWVudFRvVXNlIiwiZm5HZXRNc2dTdWJ0aXRsZSIsInNob3dCb3VuZE1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiZ2V0VUlEZWNpc2lvbnMiLCJjdXN0b21NZXNzYWdlcyIsImNvbnRleHQiLCJhcmd1bWVudHMiLCJjb250cm9sIiwiYWN0aW9uTmFtZSIsInZpZXdUeXBlIiwic2hvd1N0YXRlTWVzc2FnZXMiLCJtZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwicmVzb3VyY2VNb2RlbCIsIm1lc3NhZ2VIYW5kbGRlciIsImFkZEN1c3RvbU1lc3NhZ2VzIiwiY2FsbCIsInVpRGVjaXNpb25JbnRlcm1pdHRlbnQiLCJmaWx0ZXJzIiwiZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXNUb1Nob3ciLCJmaWx0ZXJDb250ZXh0Qm91bmRNZXNzYWdlcyIsInByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlIiwiaGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMiLCJnZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UiLCJtZXNzYWdlVG9TaG93IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsInNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwic2VsZWN0aW9uQ29udGV4dHMiLCJhU2VsZWN0ZWRDb250ZXh0cyIsIkFycmF5IiwiaXNBcnJheSIsImJvdW5kQWN0aW9uTmFtZSIsImVudGl0eVNldE5hbWUiLCJlbnRpdHlTZXQiLCJpbmNsdWRlcyIsInNwbGl0Iiwic3VmZml4UmVzb3VyY2VLZXkiLCJNZXNzYWdlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImNvZGUiLCJyZWZlcmVuY2VNc2ciLCJjaGVja0ZhaWxlZCIsIm1zZyIsImlkeCIsImdldE1lc3NhZ2UiLCJnZXRBZGRpdGlvbmFsVGV4dCIsInNob3dNZXNzYWdlc0luVUkiLCJ1aURlY2lzaW9ucyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvd01lc3NhZ2VUb2FzdCIsInNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCIsInNob3dNZXNzYWdlQm94Q29udHJvbCIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciIsInRlc3QiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nIiwicHVzaCIsImNhc2VTZW5zaXRpdmUiLCJFUSIsImdldFRhcmdldHMiLCJhbmQiLCJfcmVmIiwicmV0TWVzc2FnZXMiLCJnZW5lcmljTXNncyIsIm5vbkdlbmVyaWNNc2dzIiwiZmUiLCJmZVRlY2huaWNhbERldGFpbHMiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJwcmVUZXh0IiwidGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZSIsInNpbmdsZUVycm9yUHJlVGV4dCIsInNpbmdsZUdlbmVyaWNNZXNzYWdlSWQiLCJnZXRJZCIsImV4aXN0aW5nVGVjaERldGFpbHMiLCJzZXRUZWNobmljYWxEZXRhaWxzIiwibWVzc2FnZUNvZGUiLCJ0ZXh0IiwiZ2V0U29ydGVyRm9yTWVzc2FnZXMiLCJTb3J0ZXIiLCJvYmoxIiwib2JqMiIsInJhbmtBIiwiZ2V0TWVzc2FnZVJhbmsiLCJyYW5rQiIsInRyYW5zaXN0aW9uTWVzc2FnZXMiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiY3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZXMiLCJtYXAiLCJjdXJyZW50Q29udGV4dCIsIm9VbmlxdWVPYmoiLCJmaWx0ZXIiLCJvYmoiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwidWlEZWNpc2lvbiIsInJ1blRvVGVzdCIsImhpZ2hlc3RQcmlvcml0eSIsImhpZ2hlc3RQcmlvcml0eVRleHQiLCJyZXNvdXJjZUJ1bmRsZSIsInN0cmljdEhhbmRsaW5nRmxvdyIsIm1lc3NhZ2VEaWFsb2dNb2RlbCIsIkpTT05Nb2RlbCIsIm1lc3NhZ2VPYmplY3QiLCJzb3J0ZXIiLCJnZXRCaW5kaW5nIiwic29ydCIsImlzT3BlbiIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImVuZEJ1dHRvbiIsImVzY2FwZUhhbmRsZXIiLCJjb21wbGV0aW9uUHJvbWlzZSIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJjbG9zZU9uTmF2aWdhdGlvbiIsImFmdGVyQ2xvc2UiLCJpdGVtIiwicmVtb3ZlQWxsQ29udGVudCIsImFkZENvbnRlbnQiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJyZXRyeUFmdGVyTWVzc2FnZSIsInN0YXJ0VGFnIiwiY2xvc2VUYWciLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwibWVzc2FnZUhlYWRlciIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNYW5hZ2VkT2JqZWN0IiwiZXNjYXBlU2V0dGluZ3NWYWx1ZSIsInNob3dNZXNzYWdlQm94UGVyVHlwZSIsIm9uQ2xvc2UiLCJjbG9zZU1lc3NhZ2VCb3giLCJiaW5kIiwibWVzc2FnZVNob3duIiwiY2FsbEJhY2siLCJtZXNzYWdlc1RvUmVtb3ZlIiwiYWxsTXNncyIsImdldERhdGEiLCJnZW5lcmljTWVzc2FnZSIsImZpbmQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsImluZm9ybWF0aW9uIiwiYU1vZGVsRGF0YUFycmF5Iiwic0FjdGlvbk5hbWUiLCJhTW9kZWxEYXRhIiwiZ2VuZXJhbEdyb3VwVGV4dCIsImlzQSIsInNldEdyb3VwTmFtZUxSVGFibGUiLCJzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlIiwiZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lIiwib0VsZW0iLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJzRWxlbWVCaW5kaW5nUGF0aCIsImdldFBhdGgiLCJpbmRleE9mIiwiYWxsUm93Q29udGV4dHMiLCJyb3dDb250ZXh0IiwiY29udGV4dFBhdGgiLCJpZGVudGlmaWVyQ29sdW1uIiwiZ2V0UGFyZW50IiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInJvd0lkZW50aWZpZXIiLCJjb2x1bW5Qcm9wZXJ0eU5hbWUiLCJnZXRUYWJsZUNvbFByb3BlcnR5Iiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldFRhYmxlQ29sSW5mbyIsImdldEhlYWRlciIsInVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlIiwibWRjVGFibGUiLCJ0YXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsImNvbHVtbk5hbWVTdWZmaXgiLCJzZXRBZGRpdGlvbmFsVGV4dCIsInVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlIiwic3Vic2VjdGlvbiIsImhlYWRlck5hbWUiLCJnZXRIZWFkZXJWaXNpYmxlIiwidGFibGVIZWFkZXIiLCJnZXRUaXRsZSIsInNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZSIsInZpZXdDb250ZXh0IiwiZ3JvdXBOYW1lSXNHZW5lcmFsIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiY2hpbGRUYWJsZUVsZW1lbnQiLCJmaW5kRWxlbWVudHMiLCJvRWxlbWVudCIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJmbkNhbGxiYWNrU2V0R3JvdXBOYW1lIiwib1RhcmdldFRhYmxlSW5mbyIsIm9WaWV3Q29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib3BMYXlvdXQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsInNMYXN0QWN0aW9uVGV4dCIsInRvU3RyaW5nIiwiYU1lc3NhZ2UiLCJvVGFibGUiLCJmblNldEdyb3VwTmFtZSIsImdldFRhYmxlQW5kVGFyZ2V0SW5mbyIsInNDb250cm9sSWQiLCJiSXNDcmVhdGlvblJvdyIsIm9UYWJsZVJvd0NvbnRleHQiLCJnZXRDb250cm9sSWRzIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsIm9Db250cm9sIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3ciLCJnZXRQZXJzaXN0ZW50Iiwic3ViVGl0bGUiLCJnZXRNZXNzYWdlU3VidGl0bGUiLCJvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJ0YWJsZVJvd0JpbmRpbmdDb250ZXh0cyIsInRhYmxlUm93Q29udGV4dCIsInRhYmxlVGFyZ2V0Q29sTmFtZSIsInRhYmxlIiwiaXNDcmVhdGlvblJvdyIsInRhcmdldGVkQ29udHJvbCIsIm1lc3NhZ2VTdWJ0aXRsZSIsInJvd1N1YnRpdGxlVmFsdWUiLCJnZXRSZXNvdXJjZU1vZGVsIiwidGFibGVDb2xQcm9wZXJ0eSIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImlzSW5hY3RpdmUiLCJsYWJlbCIsInRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbiIsInRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoIiwidGFibGVDb2xUZXh0QXJyYW5nZW1lbnQiLCJnZXRWYWx1ZSIsImdldFRhYmxlQ29sVmFsdWUiLCJvQ29sdW1uSW5mbyIsImRldGVybWluZUNvbHVtbkluZm8iLCJzQ29sdW1uSW5kaWNhdG9yIiwic0NvbHVtblZhbHVlIiwiYmluZGluZ0NvbnRleHQiLCJrZXkiLCJvTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJwb3AiLCJnZXRLZXlDb2x1bW5JbmZvIiwib0NvbEZyb21UYWJsZVNldHRpbmdzIiwiYXZhaWxhYmlsaXR5Iiwib1BhcmVudENvbnRyb2wiLCJzSGlnaGVzdFByaW9yaXR5IiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsInN0YXJ0c1dpdGgiLCJvQ29udGV4dCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImJhY2tlbmRNZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib01lc3NhZ2VPYmplY3QiLCJmbkZpbHRlclVwb25JZHMiLCJhIiwiYiIsIm9Db250ZXh0UGF0aCIsImZuUmVnRXhwZXNjYXBlIiwicyIsInJlcGxhY2UiLCJjb250ZXh0UGF0aFRvRXNjYXBlIiwiUmVnRXhwIiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJvVGFibGVUYXJnZXRDb2wiLCJnZXRDb2x1bW5zIiwiY29sdW1uIiwiZ2V0UHJvcGVydHlLZXkiLCJvQ3VzdG9tQ29sdW1uIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0Q29sdW1uc0ZvciIsIm9Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwibmFtZSIsImFDb2x1bW5zIiwiY29sdW1uRGVmaW5pdGlvbiIsInByb3BlcnR5SW5mbyIsImJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSIsIm9UYWJsZUNvbEluZm8iLCJvSXRlbSIsImNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUiLCJzZWN0aW9uIiwiYk11bHRpcGxlU3ViU2VjdGlvbnMiLCJpbmNsdWRlVGFibGVHcm91cE5hbWUiLCJiSXNPcnBoYW5FbGVtZW50IiwiYUVsZW1lbnRzIiwib1BhcmVudEVsZW1lbnQiLCJnZXRNZXNzYWdlc0ZvckNvbnRleHQiLCJjb250cm9sSWRzIiwiZXJyb3JGaWVsZENvbnRyb2wiLCJpbmRleCIsIkluZmluaXR5IiwiZXJyb3JDb250cm9sSWQiLCJjb250cm9sSWQiLCJmaWVsZFJhbmtpbkRpYWxvZyIsImZvY3VzIiwicmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImlzTWVzc2FnZVN0cmlwTWVzc2FnZSIsImlzU2luZ2xlVGFyZ2V0IiwiaXNUYXJnZXRNYXRjaGluZyIsImlzVHJhbnNpdGlvbk1lc3NhZ2UiLCJyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwiLCJjb250ZXh0cyIsImJvdW5kQ29udGV4dE1lc3NhZ2VzIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJtZXNzYWdlc1RvQmVSZW1vdmVkIiwicmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dCIsIm1lc3NhZ2VUYXJnZXRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21NZXNzYWdlLCBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbHVtblByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBNTGliIGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9tZXNzYWdlL01lc3NhZ2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVUlUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcblxuY29uc3QgQnV0dG9uVHlwZSA9IE1MaWIuQnV0dG9uVHlwZTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogKChwYXJhbTE6IHZvaWQgfCBEaWFsb2cpID0+IHZvaWQpW10gPSBbXTtcbmxldCBkaWFsb2dDb250cm9sOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VXaXRoSGVhZGVyID0gTWVzc2FnZSAmIHtcblx0aGVhZGVyTmFtZT86IHN0cmluZztcblx0dGFyZ2V0Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsVGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dGFibGVIZWFkZXI/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRVSUVsZW1lbnQgPSBcIkRpYWxvZ1wiIHwgXCJCb3hcIiB8IFwiVG9hc3RcIiB8IFwiTm9uZVwiO1xuXG4vLyBGRSByZWxhdGVkIHRlY2huaWNhbCBpbmZvcm1hdGlvbiB0byBiZSBzdG9yZWQgd2l0aCB0aGUgbWVzc2FnZS5cbi8vIExpa2UsIHRoaXMgd291bGQgYmUgdXNlZCB0byBzdG9yZSBwcmUtdGV4dCB3aXRoIHRoZSBtZXNzYWdlIHdoZW4gaXQgaXMgdGhlIG9ubHkgbWVzc2FnZSB0byBiZSBzaG93biBpbiBVSS5cbnR5cGUgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG9iamVjdCAmIHtcblx0ZmU/OiB7XG5cdFx0Y2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yPzogc3RyaW5nO1xuXHRcdHNpbmdsZUVycm9yUHJlVGV4dD86IHN0cmluZztcblx0XHRzaW5nbGVHZW5lcmljTWVzc2FnZUlkPzogc3RyaW5nO1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVVJRGVjaXNpb25zID0ge1xuXHR1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50O1xuXHRtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVtdO1xuXHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbjtcblx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g/OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGlzTm9uVGVjaG5pY2FsTWVzc2FnZTogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IGJvb2xlYW47XG5cdGdldE1lc3NhZ2VzOiAoYkJvdW5kTWVzc2FnZXM/OiBib29sZWFuLCBiVHJhbnNpdGlvbk9ubHk/OiBib29sZWFuLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSA9PiBNZXNzYWdlW107XG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW47XG5cdGdldFVJRGVjaXNpb25zOiAoXG5cdFx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRzaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdGNvbnRyb2w/OiBDb250cm9sLFxuXHRcdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRcdHZpZXdUeXBlPzogc3RyaW5nLFxuXHRcdHNob3dTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbixcblx0XHRtZXNzYWdlRGlhbG9nUGFyYW1ldGVyPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0cmVzb3VyY2VNb2RlbD86IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI/OiBNZXNzYWdlSGFuZGxlclxuXHQpID0+IE1lc3NhZ2VVSURlY2lzaW9ucztcblx0c2hvd01lc3NhZ2VzSW5VSTogKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IChzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSA9PiB2b2lkO1xuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogKG9NZXNzYWdlOiBNZXNzYWdlLCBiTWVzc2FnZURpYWxvZz86IHRydWUpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiAoXG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRcdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdFx0aXNNdWx0aTQxMj86IGJvb2xlYW5cblx0KSA9PiB7XG5cdFx0bWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRcdG9CYWNrQnV0dG9uOiBCdXR0b247XG5cdH07XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IChzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBVSTVFbGVtZW50W107XG5cdGZuRmlsdGVyVXBvbklkczogKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpID0+IGJvb2xlYW47XG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nXG5cdCkgPT4gVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRpbmNsdWRlVGFibGVHcm91cE5hbWU/OiBib29sZWFuXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuXHQpID0+IENvbEluZm9BbmRTdWJ0aXRsZVR5cGU7XG5cdGdldFRhYmxlQ29sSW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IChvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKSA9PiBzdHJpbmc7XG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKSA9PiBDb2x1bW5JbmZvVHlwZTtcblx0ZmV0Y2hDb2x1bW5JbmZvOiAob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKSA9PiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0Z2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiAoXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0dGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzXG5cdCkgPT4gQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGdldE1lc3NhZ2VSYW5rOiAob2JqOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbnVtYmVyO1xuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbikgPT4gdm9pZDtcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KSA9PiB2b2lkO1xuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiAoXG5cdFx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdFx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiAoY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cdGlzQ29udHJvbEluVGFibGU6IChvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpID0+IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW47XG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiAob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdGdldEZpbHRlcnNGb3JNZXNzYWdlczogKHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIHNob3dTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbikgPT4gRmlsdGVyW107XG5cdHNob3dNZXNzYWdlVG9hc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBydW5Ub1Rlc3Q/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQgfCBEaWFsb2c+O1xuXHRzaG93TWVzc2FnZUJveENvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRNZXNzYWdlc0ZvckNvbnRleHQ6IChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gTWVzc2FnZVtdO1xuXHRpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZzogKGFDb250cm9sSWRzOiBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsOiAobWVzc2FnZXM/OiBNZXNzYWdlW10sIGNvbnRleHQ/OiBDb250ZXh0W10pID0+IHZvaWQ7XG5cdHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiAoTWVzc2FnZXM6IE1lc3NhZ2VbXSkgPT4gTWVzc2FnZVtdO1xuXHRzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0XHRncm91cE5hbWVJc0dlbmVyYWw6IGJvb2xlYW4sXG5cdFx0YWN0aW9uTmFtZT86IHN0cmluZ1xuXHQpOiBib29sZWFuO1xuXHR1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShtZGNUYWJsZTogTURDVGFibGUsIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCB0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUpOiB2b2lkO1xuXHR1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShcblx0XHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRtZGNUYWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG5cdCk6IHZvaWQ7XG5cdGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBzdHJpbmcpOiB2b2lkO1xuXHRyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0OiAob0NvbnRleHQ6IENvbnRleHQpID0+IHZvaWQ7XG5cdGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzOiAobWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10pID0+IGJvb2xlYW47XG5cdGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZTogKFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuXHQpID0+IE1lc3NhZ2VXaXRoSGVhZGVyIHwgdW5kZWZpbmVkO1xuXHRyZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0OiAoY29udGV4dDogQ29udGV4dCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpOiBzdHJpbmcge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHJpbmcoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpOiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH1bXSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgdHlwZW9mIG9NZXNzYWdlQ291bnRdO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSwgaTogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIChvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIgJiYgb1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uKSB7XG5cdFx0XHRpZiAoY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnNldFRhcmdldHMoW1wiXCJdKTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKTogdm9pZCB7XG5cdGRpYWxvZ0NvbnRyb2wuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGNvbnN0IG1zZ1ZpZXcgPSBkaWFsb2dDb250cm9sLmdldENvbnRlbnQoKVswXSBhcyBNZXNzYWdlVmlldztcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG1zZ1ZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0fVxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG59XG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKX0gJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgYXJlIGFueSB3YXJuaW5nIG9yIGVycm9yIG1lc3NhZ2VzKGJvdW5kIGFuZCB1bmJvdW5kKS4uXG4gKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgZXhpc3RlbmNlIG9mIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gWy4uLmdldE1lc3NhZ2VzKHVuZGVmaW5lZCwgdHJ1ZSksIC4uLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpXS5zb21lKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKFxuXHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdG11bHRpNDEyPzogYm9vbGVhblxuKToge1xuXHRtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdG9CYWNrQnV0dG9uOiBCdXR0b247XG59IHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkJpbmRpbmcgPSAnez0gJHtkZXNjcmlwdGlvbn0gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0RGVzY3JpcHRpb24oKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdGNvbnN0IHRlY2huaWNhbERldGFpbHNCaW5kaW5nID1cblx0XHRcdCd7PSAke3RlY2huaWNhbERldGFpbHN9ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGdyb3VwTmFtZTogXCJ7aGVhZGVyTmFtZX1cIixcblx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkJpbmRpbmcgKyB0ZWNobmljYWxEZXRhaWxzQmluZGluZyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobXVsdGk0MTIpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJ7ZGVzY3JpcHRpb259XCIsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRtZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGUsXG5cdFx0XHRsZW5ndGg6IDk5OTlcblx0XHR9XG5cdH0pO1xuXHRtZXNzYWdlVmlldy5zZXRHcm91cEl0ZW1zKHRydWUpO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pOiB2b2lkIHtcblx0XHRcdFx0bWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRtZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c/OiBib29sZWFuO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRmaWx0ZXJlZE1lc3NhZ2VzPzogTWVzc2FnZVtdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb24/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gaXNOb25UZWNobmljYWxNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0KHRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdCgodGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0KHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gbnVsbCkpKSB8fFxuXHRcdG1lc3NhZ2UuZ2V0Q29kZSgpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdHJhbnNpdGlvbiBtZXNzYWdlcyBmb3IgY3JlYXRpbmcgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBfY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcmV0dXJucyBUcmFuc2l0aW9uIG1lc3NhZ2VzIHJlbGV2YW50IHRvIHNob3cgaW4gVUkuXG4gKi9cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24odGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSwgc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgX2NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0bGV0IHRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0aWYgKHNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHQvL2JvdW5kIFRyYW5zaXN0aW9uIE1lc3NhZ2VzXG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzID0gdHJhbnNpdGlvbk1lc3NhZ2VzLmNvbmNhdCh0aGlzLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0fVxuXHRyZXR1cm4gdHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgJ29uQmVmb3JlU2hvd01lc3NhZ2VzJyBjYWxsYmFjayB0byBsZXQgdGhlIGNhbGxlciBpbmZsdWVuY2UgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gdHJhbnNpdGlvbk1lc3NhZ2VzIFRyYW5zaXRpb24gbWVzc2FnZXMuXG4gKiBAcGFyYW0gb25CZWZvcmVTaG93TWVzc2FnZSBDYWxsYmFjay5cbiAqIEByZXR1cm5zIFNob3dNZXNzYWdlUGFyYW1ldGVycyBJbmZyb21hdGlvbiB0byBjaGFuZ2UgVUkgZGVjaXNpb24gYmFzZWQgb24gb25CZWZvcmVTaG93TWVzc2FnZXMgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyhcblx0dHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnNcbik6IHtcblx0dWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudDtcblx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW107XG5cdGZuR2V0TWVzc2FnZVN1YnRpdGxlPzogRnVuY3Rpb247XG5cdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZz86IGJvb2xlYW47XG5cdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbjtcbn0ge1xuXHRsZXQgbWVzc2FnZXNUb1Nob3cgPSBbLi4udHJhbnNpdGlvbk1lc3NhZ2VzXTtcblx0bGV0IHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQgPVxuXHRcdHRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgdHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIiA/IFwiQm94XCIgOiBcIkRpYWxvZ1wiO1xuXHRsZXQgZm5HZXRNc2dTdWJ0aXRsZTogRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGxldCBzaG93Qm91bmRNZXNzYWdlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRpZiAob25CZWZvcmVTaG93TWVzc2FnZSkge1xuXHRcdC8vIFRoZSBjYWxsYmFjayBvbkJlZm9yZVNob3dNZXNzYWdlIGFsdGVycyB0aGUgVUlFbGVtZW50IHRvIHVzZSBpbiBhIGRpZmZlcmVudCBmb3JtYXQoc2hvd01lc3NhZ2VEaWFsb2cgYW5kIHNob3dNZXNzYWdlQm94KS5cblx0XHRjb25zdCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nOiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJEaWFsb2dcIixcblx0XHRcdHNob3dNZXNzYWdlQm94OiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJCb3hcIlxuXHRcdH07XG5cdFx0Y29uc3Qge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3gsXG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyxcblx0XHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyxcblx0XHRcdGZpbHRlcmVkTWVzc2FnZXMsXG5cdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvblxuXHRcdH0gPSBvbkJlZm9yZVNob3dNZXNzYWdlKHRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3ggPT09IHRydWUpIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nID09PSB0cnVlKSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJOb25lXCI7XG5cdFx0fVxuXHRcdHNob3dCb3VuZE1lc3NhZ2VzID0gY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uO1xuXHRcdGZuR2V0TXNnU3VidGl0bGUgPSBmbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIHx8IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiA9PT0gZmFsc2UpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93ID0gZmlsdGVyZWRNZXNzYWdlcyA/PyBbXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBmbkdldE1zZ1N1YnRpdGxlLFxuXHRcdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBzaG93Qm91bmRNZXNzYWdlc1xuXHR9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBVSSBkZWNpc2lvbnMgZm9yIHNob3dpbmcgbWVzc2FnZXMuXG4gKlxuICogVGhlc2Ugc2hhbGwgY29udGFpbiB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgdGhlIFVJIGVsZW1lbnQgdG8gdXNlLlxuICogSXQgd291bGQgYWxzbyBob2xkIGluZm9ybWF0aW9uIGZvciBhZnRlciBwcm9jZXNzIGxpa2UuLlxuICogMS4gcmVmcmVzaCBjb250ZXh0IGR1ZSB0byBldGFnIG1pc21hdGNoLlxuICogMi4gZG8gd2Ugc2hvdyBib3VuZCBtZXNzYWdlcyBhbmQgaGVuY2UgY2xlYXIgdGhlbSBhZnRlciB3ZSBzaG93IHRoZSBVSSBlbGVtZW50LlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQgdG8gbWVzc2FnZSBtb2RlbCBhbmQgc2hvdy5cbiAqIEBwYXJhbSBjb250ZXh0IEJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZS5cbiAqIEBwYXJhbSBzaG93Qm91bmRUcmFuc2l0aW9uIFNob3VsZCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIGNvbmN1cnJlbnRFZGl0RmxhZyBJcyB0aGlzIGEgY29uY3VycmVudCBlZGl0IHNjZW5hcmlvLlxuICogQHBhcmFtIGNvbnRyb2wgU291cmNlIGNvbnRyb2wuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBOYW1lIG9mIHRoZSBhY3Rpb24gd2hvc2UgcHJvY2VzcyByZXF1ZXN0ZWQgZm9yIG1lc3NhZ2VzIHRvIGJlIHNob3duLlxuICogQHBhcmFtIG9uQmVmb3JlU2hvd01lc3NhZ2UgQ2FsbGJhY2sgdG8gaW5mbHVlbmNlIFVJIGRlY2lzaW9uIGJlZm9yZSBjcmVhdGluZyBmaW5hbCBVSSBkZWNpc2lvbi5cbiAqIEBwYXJhbSB2aWV3VHlwZSBWaWV3IHR5cGUsIGxpc3QgcmVwb3J0IG9yIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIHNob3dTdGF0ZU1lc3NhZ2VzIFNob3VsZCBzdGF0ZSBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBtZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG4gKiBAcmV0dXJucyBVSSBkZWNpc2lvbnMgdXNlZCB0byBzaG93IG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRVSURlY2lzaW9ucyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNob3dCb3VuZFRyYW5zaXRpb24gPSBmYWxzZSxcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2UsXG5cdG1lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcixcblx0cmVzb3VyY2VNb2RlbD86IFJlc291cmNlTW9kZWwsXG5cdG1lc3NhZ2VIYW5kbGRlcj86IE1lc3NhZ2VIYW5kbGVyXG4pOiBNZXNzYWdlVUlEZWNpc2lvbnMge1xuXHQvLyBBZGQgQ3VzdG9tIG1lc3NhZ2VzXG5cdC8vIFRPRE86IFdpbGwgdGhlc2UgbWVzc2FnZXMgYmUgcGFydCBvZiB0cmFuc2l0aW9uTWVzc2FnZXM/XG5cdGlmIChjdXN0b21NZXNzYWdlcyAmJiBjdXN0b21NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRhZGRDdXN0b21NZXNzYWdlcyhjdXN0b21NZXNzYWdlcyk7XG5cdH1cblxuXHQvLyBHZXQgdHJhbnNpdGlvbiBNZXNzYWdlc1xuXHRjb25zdCB0cmFuc2l0aW9uTWVzc2FnZXMgPSBnZXRUcmFuc2l0aW9uTWVzc2FnZXNGb3JVSURlY2lzaW9uLmNhbGwodGhpcywgc2hvd0JvdW5kVHJhbnNpdGlvbiwgY29udGV4dCk7XG5cblx0Ly8gVUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIERpYWxvZ1xuXHRjb25zdCB1aURlY2lzaW9uSW50ZXJtaXR0ZW50ID0gZXhlY3V0ZU9uQmVmb3JlU2hvd01lc3NhZ2VzLmNhbGwodGhpcywgdHJhbnNpdGlvbk1lc3NhZ2VzLCBvbkJlZm9yZVNob3dNZXNzYWdlKTtcblx0bGV0IHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIiB9ID0gdWlEZWNpc2lvbkludGVybWl0dGVudDtcblx0Ly8gR2V0IEZpbHRlcnMgZm9yIFVuYm91bmQgTWVzc2FnZXNcblx0c2hvd0JvdW5kVHJhbnNpdGlvbiA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuY29udGFpbnNCb3VuZFRyYW5zaXRpb24gPz8gc2hvd0JvdW5kVHJhbnNpdGlvbjtcblx0Y29uc3QgZmlsdGVycyA9IGdldEZpbHRlcnNGb3JNZXNzYWdlcyhzaG93Qm91bmRUcmFuc2l0aW9uLCBzaG93U3RhdGVNZXNzYWdlcyk7XG5cdG1lc3NhZ2VzVG9TaG93ID0gZ2V0TWVzc2FnZXNUb1Nob3coZmlsdGVycywgbWVzc2FnZXNUb1Nob3cgPz8gW10pO1xuXHQvLyBoYW5kbGUgY29udGV4dCBib3VuZCBtZXNzYWdlcywgSWYgdGhlcmUgaXMgYSBzaW5nbGUgbWVzc2FnZSBvZiB3aGljaCBpcyBib3VuZGVkIHRvIHRoZSBjb250ZXh0IHRoZW4gcmVtb3ZlIHRoYXQgZnJvbSB0aGUgZGlhbG9nXG5cdG1lc3NhZ2VzVG9TaG93ID0gbWVzc2FnZUhhbmRsZGVyPy5maWx0ZXJDb250ZXh0Qm91bmRNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdywgY29udGV4dCkgfHwgbWVzc2FnZXNUb1Nob3c7XG5cdCh7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gcHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUoeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSkpO1xuXHQvLyBNb2RpZnkgRVRhZyBNZXNzYWdlc1xuXHRjb25zdCBoYXNFdGFnTWVzc2FnZSA9IHRoaXMubW9kaWZ5RVRhZ01lc3NhZ2VzT25seShMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAwICYmIHVpRWxlbWVudFRvVXNlICE9PSBcIk5vbmVcIikge1xuXHRcdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAxICYmIHJlc291cmNlTW9kZWwgJiYgY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpKSB7XG5cdFx0XHRjb25zdCBnZW5lcmljU3VjY2Vzc01lc3NhZ2UgPSBhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UocmVzb3VyY2VNb2RlbCwgbWVzc2FnZURpYWxvZ1BhcmFtZXRlcik7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdyA9IGdlbmVyaWNTdWNjZXNzTWVzc2FnZSA/IFtnZW5lcmljU3VjY2Vzc01lc3NhZ2VdIDogW21lc3NhZ2VzVG9TaG93WzBdXTtcblx0XHR9XG5cdFx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRvU2hvdyA9IG1lc3NhZ2VzVG9TaG93WzBdO1xuXHRcdFx0aWYgKG1lc3NhZ2VUb1Nob3cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChoYXNFdGFnTWVzc2FnZSB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uKCk/Lmxlbmd0aCB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uVXJsKCk/Lmxlbmd0aCkge1xuXHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSB3b3VsZCBzaG93IHNpbmdsZSBtZXNzYWdlIGluIG1lc3NhZ2UgYm94IG9ubHkgd2hlbjpcblx0XHRcdFx0Ly8gMS4gSXQgaXMgbm90IGFuIEV0YWcgbWVzc2FnZS5cblx0XHRcdFx0Ly8gMi4gVGhlcmUgaXMgbm8gbWVzc2FnZSBkZXNjcmlwdGlvbiBvciBkZXNjcmlwdGlvbiB1cmwgYXZhaWxhYmxlIGZvciBsb25nIHRleHQuXG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUobWVzc2FnZXNUb1Nob3csIGNvbnRyb2wsIGFjdGlvbk5hbWUsIHZpZXdUeXBlKTtcblx0XHRjb25zdCBmbkdldE1lc3NhZ2VTdWJ0aXRsZSA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdFx0aWYgKGZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBoYXNFdGFnTWVzc2FnZSA/IGNvbnRleHQgOiB1bmRlZmluZWQsXG5cdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IHNob3dCb3VuZFRyYW5zaXRpb25cblx0fTtcbn1cblxuLyoqXG4gKiBBZGRpbmcgYSBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqIEBwYXJhbSBzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciBTZWxlY3RlZCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIG1lc3NhZ2UgaXMgc2hvd24uXG4gKiBAcmV0dXJucyBNZXNzYWdlIHdpdGggZ2VuZXJpYyBzdWNjZXNzIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZShcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0c2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuKTogTWVzc2FnZVdpdGhIZWFkZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzZWxlY3Rpb25Db250ZXh0cyA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5hU2VsZWN0ZWRDb250ZXh0cztcblx0aWYgKHNlbGVjdGlvbkNvbnRleHRzICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uQ29udGV4dHMpICYmIHNlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGggPiAxICYmIHJlc291cmNlTW9kZWwpIHtcblx0XHRsZXQgYWN0aW9uTmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5ib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5lbnRpdHlTZXQ7XG5cdFx0YWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGFjdGlvbk5hbWU/LnNwbGl0KFwiLlwiKVthY3Rpb25OYW1lPy5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBhY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYWN0aW9uTmFtZSAmJiBlbnRpdHlTZXROYW1lID8gYCR7ZW50aXR5U2V0TmFtZX18JHthY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIiwgW3NlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGhdLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5TdWNjZXNzLFxuXHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGNvZGU6IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCJcblx0XHR9KTtcblx0fVxufVxuLyoqXG4gKiBDaGVjayBpcyBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlc1RvU2hvdyBJbml0aWFsIG1lc3NhZ2VzIHRvIHNob3cuXG4gKiBAcmV0dXJucyBJZiBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10pOiBib29sZWFuIHtcblx0bGV0IHJlZmVyZW5jZU1zZzogTWVzc2FnZVdpdGhIZWFkZXI7XG5cdGNvbnN0IGNoZWNrRmFpbGVkID0gbWVzc2FnZXNUb1Nob3cuc29tZSgobXNnLCBpZHgpID0+IHtcblx0XHRpZiAobXNnLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2Vzcykge1xuXHRcdFx0Ly8gTm9uIHN1Y2Nlc3MgbWVzc2FnZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmIChpZHggPT09IDApIHtcblx0XHRcdC8vIDFzdCBNZXNzYWdlXG5cdFx0XHRyZWZlcmVuY2VNc2cgPSBtc2c7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRDb2RlKCkgPT09IG1zZy5nZXRDb2RlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRNZXNzYWdlKCkgPT09IG1zZy5nZXRNZXNzYWdlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXREZXNjcmlwdGlvbigpID09PSBtc2cuZ2V0RGVzY3JpcHRpb24oKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldERlc2NyaXB0aW9uVXJsKCkgPT09IG1zZy5nZXREZXNjcmlwdGlvblVybCgpICYmXG5cdFx0XHRyZWZlcmVuY2VNc2cuZ2V0QWRkaXRpb25hbFRleHQoKSA9PT0gbXNnLmdldEFkZGl0aW9uYWxUZXh0KClcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xuXG5cdHJldHVybiAhY2hlY2tGYWlsZWQ7XG59XG5cbi8qKlxuICogU2hvdyBtZXNzYWdlcyBpbiB0aGUgZGVjaWRlZCBVSSBFbGVtZW50LlxuICogQHBhcmFtIHVpRGVjaXNpb25zIFVJIERlY2lzaW9uIHRvIGJlIHVzZWQgdG8gc2hvdyB0aGUgbWVzc2FnZXMuXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb3IgcmVqZWN0cyBiYXNlZCBvbiB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIFVJIGVsZW1lbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlc0luVUkodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gdWlEZWNpc2lvbnM7XG5cblx0Ly8gU2hvdyBEaWFsb2cgLyBNZXNzYWdlQm94IC8gTWVzc2FnZVRvYXN0XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiVG9hc3RcIikge1xuXHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VUb2FzdChtZXNzYWdlc1RvU2hvd1swXSk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIpIHtcblx0XHRhd2FpdCBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sKHVpRGVjaXNpb25zKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiQm94XCIpIHtcblx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlQm94Q29udHJvbCh1aURlY2lzaW9ucyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IG1vZGVsIGZpbHRlcnMgZm9yIGdldHRpbmcgdGhlIHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gc2hvd1N0YXRlTWVzc2FnZXMgU2hvdWxkIHN0YXRlIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHJldHVybnMgTW9kZWwgZmlsdGVyc1xuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJzRm9yTWVzc2FnZXMoc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgc2hvd1N0YXRlTWVzc2FnZXMgPSBmYWxzZSk6IEZpbHRlcltdIHtcblx0Y29uc3QgZmlsdGVycyA9IHNob3dTdGF0ZU1lc3NhZ2VzID8gW10gOiBbbmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogZmFsc2UgfSldO1xuXHRjb25zdCBpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJcIiwgdGVzdDogaXNOb25UZWNobmljYWxNZXNzYWdlIH0pO1xuXG5cdGlmIChzaG93U3RhdGVNZXNzYWdlcyB8fCBzaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0Ly8gQWRkIHRoZSBmaWx0ZXIgZm9yIGJvdGggc3RhdGUgbWVzc2FnZXMgb3IgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlc1xuXHRcdGNvbnN0IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coYUNvbnRyb2xJZHMpO1xuXHRcdH07XG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGlmIChzaG93Qm91bmRUcmFuc2l0aW9uICYmICFzaG93U3RhdGVNZXNzYWdlcykge1xuXHRcdFx0Ly8gQWRkIGV4dHJhIGZpbHRlciBpZiBvbmx5IGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXJlIHNob3duXG5cdFx0XHRmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0XHRmaWx0ZXJzLnB1c2goaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT25seSB1bmJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93blxuXHRcdGZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIlxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlclxuXHRcdFx0XHRdLFxuXHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzTWVzc2FnZXNGcm9tQ2hhbmdlc2V0RmFpbHVyZSh7XG5cdG1lc3NhZ2VzVG9TaG93LFxuXHR1aUVsZW1lbnRUb1VzZVxufTogUGljazxNZXNzYWdlVUlEZWNpc2lvbnMsIFwidWlFbGVtZW50VG9Vc2VcIiB8IFwibWVzc2FnZXNUb1Nob3dcIj4pOiBQaWNrPE1lc3NhZ2VVSURlY2lzaW9ucywgXCJ1aUVsZW1lbnRUb1VzZVwiIHwgXCJtZXNzYWdlc1RvU2hvd1wiPiB7XG5cdGxldCByZXRNZXNzYWdlcyA9IFsuLi5tZXNzYWdlc1RvU2hvd107XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDIpIHtcblx0XHQvLyBUaGVyZSBhcmUgMiBtZXNzYWdlOlxuXHRcdC8vIDEuIEdlbmVyaWMgZXJyb3IgY2hhbmdlc2V0IG1lc3NhZ2UgYWRkZWQgYnkgRkUuXG5cdFx0Ly8gMi4gTWFpbiBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGludGVyYWN0aW9uLlxuXHRcdC8vIFdlIHJlbW92ZSB0aGUgZ2VuZXJpYyBtZXNzYWdlLCBzaG93IG9ubHkgYW4gZW5oYW5jZWQgJ01haW4gZXJyb3IgbWVzc2FnZScgd2l0aCBhIGdlbmVyaWMgbWVzc3NhZ2UgcHJlLXRleHQgaW4gdGhlIG1lc3NhZ2UgYm94LlxuXHRcdGNvbnN0IGdlbmVyaWNNc2dzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRjb25zdCBub25HZW5lcmljTXNnczogTWVzc2FnZVtdID0gW107XG5cdFx0bWVzc2FnZXNUb1Nob3cuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdFx0Z2VuZXJpY01zZ3MucHVzaChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vbkdlbmVyaWNNc2dzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGdlbmVyaWNNc2dzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgeyBmZTogZmVUZWNobmljYWxEZXRhaWxzIH0gPSAoZ2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzO1xuXHRcdFx0aWYgKGZlVGVjaG5pY2FsRGV0YWlscz8uY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHByZVRleHQgPSBmZVRlY2huaWNhbERldGFpbHM/LmNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjtcblx0XHRcdFx0aWYgKHByZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCB0ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlOiBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0ge1xuXHRcdFx0XHRcdFx0ZmU6IHtcblx0XHRcdFx0XHRcdFx0c2luZ2xlRXJyb3JQcmVUZXh0OiBwcmVUZXh0LFxuXHRcdFx0XHRcdFx0XHRzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBnZW5lcmljTXNnc1swXS5nZXRJZCgpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBleGlzdGluZ1RlY2hEZXRhaWxzID0gbm9uR2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpID8/IHt9O1xuXHRcdFx0XHRcdC8vIGNvbWJpbmUgZXhpc3RpbmcgdGVjaG5pY2FsIGRldGFpbHMgaWYgYW55LCB3aXRoIHRoZSBjaGFuZ2Ugc2V0IGluZm9ybWF0aW9uIHdlIHdhbnQgdG8gYWRkLlxuXHRcdFx0XHRcdG5vbkdlbmVyaWNNc2dzWzBdLnNldFRlY2huaWNhbERldGFpbHMoeyAuLi5leGlzdGluZ1RlY2hEZXRhaWxzLCAuLi50ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlIH0pO1xuXHRcdFx0XHRcdHJldE1lc3NhZ2VzID0gbm9uR2VuZXJpY01zZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlc1RvU2hvdzogcmV0TWVzc2FnZXMsXG5cdFx0dWlFbGVtZW50VG9Vc2U6IHJldE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiB1aUVsZW1lbnRUb1VzZSAhPT0gXCJOb25lXCIgPyBcIkJveFwiIDogdWlFbGVtZW50VG9Vc2Vcblx0fTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGN1c3RvbSBtZXNzYWdlcyB0byBtZXNzYWdlIG1vZGVsLlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQuXG4gKi9cbmZ1bmN0aW9uIGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10pOiB2b2lkIHtcblx0Y3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IEN1c3RvbU1lc3NhZ2UpIHtcblx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdH0pXG5cdFx0KTtcblx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb3J0ZXJGb3JNZXNzYWdlcygpOiBTb3J0ZXIge1xuXHRyZXR1cm4gbmV3IFNvcnRlcihcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKG9iajE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvYmoyOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4ge1xuXHRcdGNvbnN0IHJhbmtBID0gZ2V0TWVzc2FnZVJhbmsob2JqMSk7XG5cdFx0Y29uc3QgcmFua0IgPSBnZXRNZXNzYWdlUmFuayhvYmoyKTtcblxuXHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc1RvU2hvdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgdHJhbnNpc3Rpb25NZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVdpdGhIZWFkZXJbXSB7XG5cdGxldCBtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSA9IFsuLi50cmFuc2lzdGlvbk1lc3NhZ2VzXTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzKSxcblx0XHRjdXJyZW50Q29udGV4dHMgPSBsaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0aWYgKGN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdC8vIHVzaW5nIHRoZSBtZXNzYWdlIG1vZGVsIGFnYWluIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldyBhbmQgdGhlbiBmaWx0ZXJpbmcgb24gdGhhdCBiaW5kaW5nIGFnYWluIGlzIHVubmVjZXNzYXJ5LlxuXHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gY3VycmVudENvbnRleHRzLm1hcCgoY3VycmVudENvbnRleHQpID0+IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpKTtcblx0XHRjb25zdCBvVW5pcXVlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdFx0bWVzc2FnZXNUb1Nob3cgPSBtZXNzYWdlcy5jb25jYXQobWVzc2FnZXNUb1Nob3cpLmZpbHRlcihmdW5jdGlvbiAob2JqOiBNZXNzYWdlKSB7XG5cdFx0XHQvLyByZW1vdmUgZW50cmllcyBoYXZpbmcgZHVwbGljYXRlIG1lc3NhZ2UgaWRzXG5cdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmdldElkKCldICYmIChvVW5pcXVlT2JqW29iai5nZXRJZCgpXSA9IHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtZXNzYWdlc1RvU2hvdztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VUb2FzdChtZXNzYWdlOiBNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZSk7XG5cdFx0cmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucywgcnVuVG9UZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQgfCBEaWFsb2c+IHtcblx0bGV0IGhpZ2hlc3RQcmlvcml0eTtcblx0bGV0IGhpZ2hlc3RQcmlvcml0eVRleHQ7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHBhcmFtMTogdm9pZCB8IERpYWxvZykgPT4gdm9pZCkge1xuXHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdGNvbnN0IHsgbWVzc2FnZXNUb1Nob3csIGNvbnRleHROZWVkc0V0YWdSZWZyZXNoIH0gPSB1aURlY2lzaW9uO1xuXHRcdGNvbnN0IG1lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwobWVzc2FnZXNUb1Nob3cpO1xuXHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cobWVzc2FnZURpYWxvZ01vZGVsLCBzdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IHNvcnRlciA9IGdldFNvcnRlckZvck1lc3NhZ2VzKCk7XG5cdFx0KG1lc3NhZ2VPYmplY3QubWVzc2FnZVZpZXcuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLnNvcnQoc29ydGVyKTtcblxuXHRcdGlmICghZGlhbG9nQ29udHJvbCB8fCAhZGlhbG9nQ29udHJvbC5pc09wZW4oKSkge1xuXHRcdFx0ZGlhbG9nQ29udHJvbCA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24gKGNvbXBsZXRpb25Qcm9taXNlOiB7IHJlc29sdmU6IEZ1bmN0aW9uOyByZWplY3Q6IEZ1bmN0aW9uIH0pOiB2b2lkIHtcblx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRcdFx0XHRjb21wbGV0aW9uUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0Y29udGVudE1pZGRsZTogW1xuXHRcdFx0XHRcdFx0bmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhUmVzb2x2ZUZ1bmN0aW9ucykge1xuXHRcdFx0XHRcdFx0aXRlbSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkaWFsb2dDb250cm9sLnJlbW92ZUFsbENvbnRlbnQoKTtcblx0XHRkaWFsb2dDb250cm9sLmFkZENvbnRlbnQobWVzc2FnZVZpZXcpO1xuXG5cdFx0aWYgKGNvbnRleHROZWVkc0V0YWdSZWZyZXNoKSB7XG5cdFx0XHRkaWFsb2dDb250cm9sLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dE5lZWRzRXRhZ1JlZnJlc2guaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0fVxuXHRcdGhpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShtZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRoaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKGhpZ2hlc3RQcmlvcml0eSk7XG5cdFx0ZGlhbG9nQ29udHJvbC5zZXRTdGF0ZShoaWdoZXN0UHJpb3JpdHkpO1xuXHRcdCgoZGlhbG9nQ29udHJvbC5nZXRDdXN0b21IZWFkZXIoKSBhcyBCYXIpLmdldENvbnRlbnRNaWRkbGUoKVswXSBhcyBUZXh0KS5zZXRUZXh0KGhpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdG1lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdGRpYWxvZ0NvbnRyb2wub3BlbigpO1xuXHRcdGlmIChydW5Ub1Rlc3QpIHtcblx0XHRcdHJlc29sdmUoZGlhbG9nQ29udHJvbCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VCb3hDb250cm9sKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93IH0gPSB1aURlY2lzaW9uO1xuXHRcdGNvbnN0IG1lc3NhZ2VUb1Nob3cgPSBtZXNzYWdlc1RvU2hvd1swXTtcblx0XHRjb25zdCBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2VUb1Nob3cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHsgc2luZ2xlR2VuZXJpY01lc3NhZ2VJZCwgc2luZ2xlRXJyb3JQcmVUZXh0IH0gPSAobWVzc2FnZVRlY2huaWNhbERldGFpbHMgYXMgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk/LmZlID8/IHt9O1xuXHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gbWVzc2FnZUhhbmRsaW5nLmdldFJldHJ5QWZ0ZXJNZXNzYWdlKG1lc3NhZ2VUb1Nob3csIHRydWUpO1xuXHRcdC8vIElmIGl0IGlzIGEgcmV0cnkgbWVzc2FnZSwgdGhlbiBpdCBuZWVkcyB0byBoYXZlIHRlY2huaWNhbCBkZXRhaWxzIHRvIHNob3cgaXQuXG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VCb3ggPSByZXRyeUFmdGVyTWVzc2FnZSA/IG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIDogdHJ1ZTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRcdGNvbnN0IHN0YXJ0VGFnID0gXCI8aHRtbD48Ym9keT48c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJlLXdyYXAnPlwiLFxuXHRcdFx0XHRjbG9zZVRhZyA9IFwiPC9zcGFuPjwvYm9keT48L2h0bWw+XCI7XG5cdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IHN0YXJ0VGFnO1xuXG5cdFx0XHQvLyBBZGRpbmcgcHJlLXRleHQgZm9yIHRoZSBtZXNzYWdlc1xuXHRcdFx0aWYgKHJldHJ5QWZ0ZXJNZXNzYWdlKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nfTxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPjwvYnI+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChzaW5nbGVFcnJvclByZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlSGVhZGVyID0gKG1lc3NhZ2VUb1Nob3cgYXMgTWVzc2FnZVdpdGhIZWFkZXIpPy5bXCJoZWFkZXJOYW1lXCJdXG5cdFx0XHRcdFx0XHQ/IGAkeyhtZXNzYWdlVG9TaG93IGFzIE1lc3NhZ2VXaXRoSGVhZGVyKT8uW1wiaGVhZGVyTmFtZVwiXX06YFxuXHRcdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nfSR7c2luZ2xlRXJyb3JQcmVUZXh0fTxici8+PGJyLz4ke21lc3NhZ2VIZWFkZXJ9IGA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkaW5nIHRoZSBtYWluIGVycm9yIG1lc3NhZ2UuXG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgbWVzc2FnZVRvU2hvdy5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgKyBtZXNzYWdlVG9TaG93LmdldEFkZGl0aW9uYWxUZXh0KClcblx0XHRcdFx0fTogJHttZXNzYWdlVG9TaG93LmdldE1lc3NhZ2UoKX0ke2Nsb3NlVGFnfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG1lc3NhZ2VUb1Nob3cuZ2V0TWVzc2FnZSgpfSR7Y2xvc2VUYWd9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdGh0bWxUZXh0OiBNYW5hZ2VkT2JqZWN0LmVzY2FwZVNldHRpbmdzVmFsdWUoZm9ybWF0dGVkVGV4dFN0cmluZylcblx0XHRcdH0pO1xuXG5cdFx0XHRzaG93TWVzc2FnZUJveFBlclR5cGUoXG5cdFx0XHRcdGZvcm1hdHRlZFRleHQgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRvbkNsb3NlOiBjbG9zZU1lc3NhZ2VCb3guYmluZChudWxsLCBtZXNzYWdlVG9TaG93LCByZXNvbHZlLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXNzYWdlVG9TaG93XG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkPzogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzVG9SZW1vdmUgPSBbbWVzc2FnZVNob3duXTtcblx0aWYgKHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpIHtcblx0XHRjb25zdCBhbGxNc2dzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBnZW5lcmljTWVzc2FnZSA9IGFsbE1zZ3MuZmluZCgobXNnOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbXNnLmdldElkKCkgPT09IHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpO1xuXHRcdGlmIChnZW5lcmljTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZXNUb1JlbW92ZS5wdXNoKGdlbmVyaWNNZXNzYWdlKTtcblx0XHR9XG5cdH1cblx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9SZW1vdmUpO1xuXHRjYWxsQmFjayh1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBzaG93TWVzc2FnZUJveFBlclR5cGUoZm9ybWF0dGVkVGV4dDogc3RyaW5nLCBjbG9zZTogeyBvbkNsb3NlOiBGdW5jdGlvbiB9LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdHN3aXRjaCAobWVzc2FnZS5nZXRUeXBlKCkpIHtcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLldhcm5pbmc6XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBNZXNzYWdlVHlwZS5TdWNjZXNzOlxuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuSW5mb3JtYXRpb246XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRNZXNzYWdlQm94LnNob3coZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBncm91cCBuYW1lIGZvciBhbGwgbWVzc2FnZXMgaW4gYSBkaWFsb2cuXG4gKiBAcGFyYW0gYU1vZGVsRGF0YUFycmF5IE1lc3NhZ2VzIGFycmF5XG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gdmlld1R5cGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShcblx0YU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0YU1vZGVsRGF0YUFycmF5LmZvckVhY2goKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIlwiO1xuXHRcdGlmICghYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCAmJiBhTW9kZWxEYXRhLmdldENvZGU/LigpICE9PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdC8vIHVuYm91bmQgdHJhbnNpaXRvbiBtZXNzYWdlc1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH0gZWxzZSBpZiAoYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCkge1xuXHRcdFx0Ly8gTFIgZmxvd1xuXHRcdFx0aWYgKHZpZXdUeXBlID09PSBcIkxpc3RSZXBvcnRcIiAmJiBjb250cm9sPy5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lTFJUYWJsZShjb250cm9sLCBhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZpZXdUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHQvLyBPUCBEaXNwbGF5IG1vZGVcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUoYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUsIGNvbnRyb2wgYXMgVmlldyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBmb3IgTFIgdGFibGUuXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtIGFzIE1EQ1RhYmxlLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgTURDVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShcblx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG4pOiB2b2lkIHtcblx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChtZGNUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0aWYgKGlkZW50aWZpZXJDb2x1bW4pIHtcblx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlLmdldFRhcmdldHMoKT8uWzBdPy5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gPyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dIDogXCJcIjtcblx0XHRcdFx0Y29uc3QgY29sdW1uTmFtZVN1ZmZpeCA9IHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID8gYCwgJHt0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gIDogXCJcIjtcblx0XHRcdFx0bWVzc2FnZS5zZXRBZGRpdGlvbmFsVGV4dChgJHtyb3dJZGVudGlmaWVyfSR7Y29sdW1uTmFtZVN1ZmZpeH1gKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmICh0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdG1lc3NhZ2Uuc2V0QWRkaXRpb25hbFRleHQoYCR7dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRsZXQgaGVhZGVyTmFtZSA9IG1kY1RhYmxlLmdldEhlYWRlclZpc2libGUoKSAmJiB0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXI7XG5cdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdGhlYWRlck5hbWUgPSBzdWJzZWN0aW9uLmdldFRpdGxlKCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRoZWFkZXJOYW1lID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke2hlYWRlck5hbWV9YDtcblx0fVxuXHRtZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gc3Vic2VjdGlvbiBTdWJzZWN0aW9uXG4gKiBAcGFyYW0gbWRjVGFibGUgIE1EQyB0YWJsZVxuICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHZpZXdDb250ZXh0IFZpZXcncyBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBncm91cE5hbWVJc0dlbmVyYWwgSXMgcHJlc2VudCBncm91cCBuYW1lICdHZW5lcmFsJ1xuICogQHBhcmFtIGFjdGlvbk5hbWUgQWN0aW9uIG5hbWVcbiAqIEByZXR1cm5zIElmIGdyb3VwIG5hbWUgaXMgJ0dlbmVyYWwnXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRhY3Rpb25OYW1lPzogc3RyaW5nXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdG1kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKChvRWxlbWVudCkgPT4ge1xuXHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdH1cblx0fSk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7dmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHttZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChtZXNzYWdlLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRtZGNUYWJsZSxcblx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQsXG5cdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlLCBtZXNzYWdlLCBvVGFyZ2V0VGFibGVJbmZvKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShzdWJzZWN0aW9uLCBtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRncm91cE5hbWVJc0dlbmVyYWwgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdyb3VwTmFtZUlzR2VuZXJhbDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YSxcblx0XHRcdFx0XHRcdFx0b1ZpZXdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7b1ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBPUCBjb250ZXh0IHBhdGggaXMgcGFydCBvZiB0YXJnZXQsIHNldCBMYXN0IEFjdGlvbiBhcyBncm91cCBuYW1lXG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMjtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gNDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gc2V0U2VjdGlvbk5hbWVJbkdyb3VwXG4gKiBAcGFyYW0gZm5TZXRHcm91cE5hbWVcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gYW5kIFN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZyxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRmblNldEdyb3VwTmFtZTogRnVuY3Rpb25cbik6IHsgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTsgc3ViVGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm8gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVBbmRUYXJnZXRJbmZvKG9UYWJsZSwgYU1lc3NhZ2UsIG9FbGVtZW50LCBvUm93QmluZGluZyk7XG5cdG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSBvVGFibGUuZ2V0SGVhZGVyKCk7XG5cblx0bGV0IHNDb250cm9sSWQsIGJJc0NyZWF0aW9uUm93O1xuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdHNDb250cm9sSWQgPSBhTWVzc2FnZS5nZXRDb250cm9sSWRzKCkuZmluZChmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sSW5UYWJsZShvVGFibGUsIHNJZCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoYU1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpICYmIHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRmblNldEdyb3VwTmFtZShhTWVzc2FnZSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3ViVGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdGFNZXNzYWdlLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0b1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93XG5cdCk7XG5cblx0cmV0dXJuIHsgb1RhcmdldFRhYmxlSW5mbywgc3ViVGl0bGUgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIHRoZSBzdWJ0aXRsZSBiYXNlZCBvbiBUYWJsZSBSb3cvQ29sdW1uIGRhdGEuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHRhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBpc0NyZWF0aW9uUm93XG4gKiBAcGFyYW0gdGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHRpc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHJvd1N1YnRpdGxlVmFsdWU7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0Y29uc3QgdGFibGVDb2xQcm9wZXJ0eSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8odGFibGVSb3dDb250ZXh0KTtcblx0Y29uc3QgY29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1lc3NhZ2UsIHRhYmxlKTtcblx0aWYgKGlzQ3JlYXRpb25Sb3cgfHwgdGFibGVSb3dDb250ZXh0Py5pc0luYWN0aXZlKCkpIHtcblx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0dGFibGVUYXJnZXRDb2xOYW1lID8gdGFibGVUYXJnZXRDb2xOYW1lIDogKGNvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0dGFibGUsXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCA9IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoICYmIHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmICh0YWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmICh0YXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhcmdldGVkQ29udHJvbCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gR2V0dGluZyB0aGUgY29sdW1uIGxhYmVsIGFuZCBpdHMgdmFsdWUgb2YgYSBzaW5nbGUgcm93XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbFZhbHVlKFxuXHRcdFx0XHRcdHRhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcm93cywgdGhlIHN1YnRpdGxlIGlzIGRpc3BsYXllZCBhcyDigJhTZWUgbWVzc2FnZSBkZXRhaWxz4oCZXG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9ERVRBSUxFRF9ST1dfSU5GT1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKGNvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbcm93U3VidGl0bGVWYWx1ZSwgdGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pfSwgJHtcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWVcblx0XHRcdFx0fWA7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAocm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgdGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtZXNzYWdlU3VidGl0bGU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSB0YWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSB0YWJsZUNvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IGJpbmRpbmdDb250ZXh0O1xuXHRpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCB7IGtleSB9ID0gdGFibGVDb2xQcm9wZXJ0eVswXTtcblx0XHRjb25zdCBvTW9kZWwgPSB0YWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aCh0YWJsZVJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRpZiAob01ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtrZXl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRLZXlDb2x1bW5JbmZvKHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmopO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzQ29udHJvbElkXG4gKiBAcmV0dXJucyBUcnVlIGlmIGNvbnRyb2wgaXMgcGFydCBvZiB0YWJsZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sSW5UYWJsZShvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpOiBVSTVFbGVtZW50W10gfCBib29sZWFuIHtcblx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpKSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGxldCBvUGFyZW50Q29udHJvbCA9IG9Db250cm9sPy5nZXRQYXJlbnQoKTtcblx0d2hpbGUgKFxuXHRcdG9QYXJlbnRDb250cm9sICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC5tLkNvbHVtbkxpc3RJdGVtXCIpXG5cdCkge1xuXHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRyZXR1cm4gISFvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0aWYgKHNQYXRoVG9CZVJlbW92ZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblxuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnN0YXJ0c1dpdGgoc1BhdGhUb0JlUmVtb3ZlZCkpXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIGJCb3VuZE1lc3NhZ2VzIFRvIGdldCBvbmx5IGJvdW5kIG1lc3NhZ2VzXG4gKiBAcGFyYW0gYlRyYW5zaXRpb25Pbmx5IFRvIGdldCBvbmx5IHRyYW5zaXRpb24gbWVzc2FnZXNcbiAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkIEZpbHRlciBvdXQgYm91bmQgbWVzc2FnZXMgd2l0aCBwYXRoXG4gKiBAcmV0dXJucyBNZXNzYWdlc1xuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcyA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHkgPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLmdldFBlcnNpc3RlbnQoKSkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIikgfHxcblx0XHRcdFx0KCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gfHwgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldENvZGUoKSA9PT0gXCI1MDNcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkgIT09IFwiXCIgJiZcblx0XHRcdCFhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKS5pbmNsdWRlcyhvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnNldE1lc3NhZ2UoXG5cdFx0XHRcdGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke2FUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpfWBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8vRmlsdGVyaW5nIG1lc3NhZ2VzIGFnYWluIGhlcmUgdG8gYXZvaWQgc2hvd2luZyBwdXJlIHRlY2huaWNhbCBtZXNzYWdlcyByYWlzZWQgYnkgdGhlIG1vZGVsXG5cdGNvbnN0IGJhY2tlbmRNZXNzYWdlczogTWVzc2FnZVtdID0gYVRyYW5zaXRpb25NZXNzYWdlcy5maWx0ZXIoaXNOb25UZWNobmljYWxNZXNzYWdlKTtcblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKTogc3RyaW5nIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb0VzY2FwZSA9IGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoYCR7Zm5SZWdFeHBlc2NhcGUoY29udGV4dFBhdGhUb0VzY2FwZSl9XFxcXCguKlxcXFwpL2ApO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIG1hdGNoaW5nIHRoZSBtZXNzYWdlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbmRUYXJnZXRJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZ1xuKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0Y29uc3Qgb1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gb0VsZW1lbnQ/LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChyb3dDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gcm93Q29udGV4dCAmJiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihyb3dDb250ZXh0LmdldFBhdGgoKSkgPT09IDA7XG5cdFx0fSlcblx0fTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKiBAcGFyYW0gc2VjdGlvblxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBiTXVsdGlwbGVTdWJTZWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRUYWJsZUluZm9cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcGFyYW0gaW5jbHVkZVRhYmxlR3JvdXBOYW1lXG4gKiBAcmV0dXJucyBHcm91cCBuYW1lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRpbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlXG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdHNlY3Rpb24uZ2V0VGl0bGUoKSArXG5cdFx0KHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSAmJiBiTXVsdGlwbGVTdWJTZWN0aW9ucyA/IGAsICR7c3ViU2VjdGlvbi5nZXRUaXRsZSgpfWAgOiBcIlwiKSArXG5cdFx0KG9UYXJnZXRUYWJsZUluZm8gJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciAmJiBpbmNsdWRlVGFibGVHcm91cE5hbWVcblx0XHRcdD8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YFxuXHRcdFx0OiBcIlwiKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBiSXNPcnBoYW5FbGVtZW50KG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIWFFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChvRWxlbSkge1xuXHRcdGxldCBvUGFyZW50RWxlbWVudCA9IG9FbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdHdoaWxlIChvUGFyZW50RWxlbWVudCAmJiBvUGFyZW50RWxlbWVudCAhPT0gb0VsZW0pIHtcblx0XHRcdG9QYXJlbnRFbGVtZW50ID0gb1BhcmVudEVsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyZW50RWxlbWVudCA/IHRydWUgOiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBmaWx0ZXJzIGFuZCBnaXZlcyBiYWNrIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgY29udGV4dCBwYXNzZWQuXG4gKiBAcGFyYW0gY29udGV4dFxuICogQHJldHVybnMgTWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzRm9yQ29udGV4dChjb250ZXh0OiBDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPiAwICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLnN0YXJ0c1dpdGgoY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0fSlcblx0KTtcblx0Y29uc3QgY3VycmVudENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdHJldHVybiBjdXJyZW50Q29udGV4dHMubWFwKChjdXJyZW50Q29udGV4dCkgPT4gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCkpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYm9vbGVhbiB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIHByZXNlbnQgaW4gdGhlIGRpYWxvZyBiYXNlZCBvbiB0aGUgY29udHJvbCBJZHMuXG4gKiBAcGFyYW0gY29udHJvbElkcyBBcnJheSBvZiBjb250cm9sIElkc1xuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgdGFyZ2V0IHByZXNlbnQgaW4gdGhlIGRpYWxvZy5cbiAqL1xuZnVuY3Rpb24gaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coY29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0bGV0IG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCwgZXJyb3JGaWVsZENvbnRyb2w7XG5cdGNvbnN0IGluZGV4ID0gSW5maW5pdHk7XG5cdGlmIChjb250cm9sSWRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWRzWzBdKTtcblx0XHRlcnJvckZpZWxkQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkc1swXSkgYXMgVUk1RWxlbWVudDtcblx0fSBlbHNlIHtcblx0XHRsZXQgZXJyb3JDb250cm9sSWQ7XG5cdFx0Y29udHJvbElkcy5mb3JFYWNoKChjb250cm9sSWQpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZCk7XG5cdFx0XHRpZiAoY29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRlcnJvckNvbnRyb2xJZCA9IGNvbnRyb2xJZDtcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGVycm9yQ29udHJvbElkKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9IEluZmluaXR5O1xuXHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbD8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdC8vIG1lc3NhZ2VzIHdpdGggdGFyZ2V0IGluc2lkZSBzYXAubS5EaWFsb2cgc2hvdWxkIG5vdCBicmluZyB1cCB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIFRyYW5zaXRpb24gbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQgcGF0aCB3aGVuIHRoZSBvYmplY3QgcGFnZSBpcyBjbG9zZWQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dCBmb3Igd2hpY2ggdGhlIG1lc3NhZ2VzIGFyZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiByZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0KG9Db250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGNvbnN0IGlzTWVzc2FnZVN0cmlwTWVzc2FnZTogTWVzc2FnZVtdID0gW107XG5cblx0bWVzc2FnZXNJbk1vZGVsPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0Y29uc3QgaXNTaW5nbGVUYXJnZXQgPSBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDE7XG5cdFx0Y29uc3QgaXNUYXJnZXRNYXRjaGluZyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBvQ29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpdGlvbk1lc3NhZ2UgPSBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZTtcblxuXHRcdGlmIChpc1NpbmdsZVRhcmdldCAmJiBpc1RhcmdldE1hdGNoaW5nICYmIGlzVHJhbnNpdGlvbk1lc3NhZ2UpIHtcblx0XHRcdGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5wdXNoKG1lc3NhZ2UpO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5sZW5ndGggPT09IDEpIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoaXNNZXNzYWdlU3RyaXBNZXNzYWdlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBjb250ZXh0IGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwgd2hlbiB0aGVyZSBpcyBlcnJvciBvbiB0aGUgZGlhbG9nIGFuZCB3aGVuIHRoZSBkaWFsb2cgaXMgb3Blbi5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbChtZXNzYWdlcz86IE1lc3NhZ2VbXSwgY29udGV4dHM/OiBDb250ZXh0W10pOiB2b2lkIHtcblx0Y29uc3QgYm91bmRDb250ZXh0TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoY29udGV4dHM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdG1lc3NhZ2VzPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gY29udGV4dHM/LlswXT8uZ2V0UGF0aCgpICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhib3VuZENvbnRleHRNZXNzYWdlcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgZnJvbSBzaG93aW5nIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHJldHVybnMgQXJyYXkgb2YgbWVzc2FnZXMgYWZ0ZXIgcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuICovXG5mdW5jdGlvbiByZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyhtZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVtdIHtcblx0Y29uc3QgbWVzc2FnZXNUb0JlUmVtb3ZlZCA9IG1lc3NhZ2VzPy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKTtcblx0bWVzc2FnZXMgPSBtZXNzYWdlcz8uZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZXNUb0JlUmVtb3ZlZD8uaW5jbHVkZXMobWVzc2FnZSkpO1xuXHRyZXR1cm4gbWVzc2FnZXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFsbFRyYW5zaXRpb25NZXNzYWdlc0ZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHQuZ2V0RGF0YSgpXG5cdFx0Py5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlVGFyZ2V0cyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpO1xuXHRcdFx0aWYgKG1lc3NhZ2VUYXJnZXRzLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlVGFyZ2V0c1swXS5pbmNsdWRlcyhjb250ZXh0LmdldFBhdGgoKSkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkpIHtcblx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqIEBuYW1lc3BhY2VcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG1lc3NhZ2VIYW5kbGluZzogbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IGdldE1lc3NhZ2VzLFxuXHRnZXRVSURlY2lzaW9uczogZ2V0VUlEZWNpc2lvbnMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nLFxuXHRzZXRNZXNzYWdlU3VidGl0bGU6IHNldE1lc3NhZ2VTdWJ0aXRsZSxcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0LFxuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24sXG5cdGZuRmlsdGVyVXBvbklkczogZm5GaWx0ZXJVcG9uSWRzLFxuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IGdldFRhYmxlQW5kVGFyZ2V0SW5mbyxcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSxcblx0YklzT3JwaGFuRWxlbWVudDogYklzT3JwaGFuRWxlbWVudCxcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUsXG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUsXG5cdGdldFRhYmxlQ29sSW5mbzogZ2V0VGFibGVDb2xJbmZvLFxuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiBnZXRUYWJsZUNvbFByb3BlcnR5LFxuXHRnZXRNZXNzYWdlU3VidGl0bGU6IGdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogZGV0ZXJtaW5lQ29sdW1uSW5mbyxcblx0ZmV0Y2hDb2x1bW5JbmZvOiBmZXRjaENvbHVtbkluZm8sXG5cdGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzOiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyxcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogZm5DYWxsYmFja1NldEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSxcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogc2V0R3JvdXBOYW1lTFJUYWJsZSxcblx0aXNDb250cm9sSW5UYWJsZTogaXNDb250cm9sSW5UYWJsZSxcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93LFxuXHRnZXRGaWx0ZXJzRm9yTWVzc2FnZXM6IGdldEZpbHRlcnNGb3JNZXNzYWdlcyxcblx0c2hvd01lc3NhZ2VzSW5VSTogc2hvd01lc3NhZ2VzSW5VSSxcblx0c2hvd01lc3NhZ2VEaWFsb2dDb250cm9sOiBzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wsXG5cdHNob3dNZXNzYWdlVG9hc3Q6IHNob3dNZXNzYWdlVG9hc3QsXG5cdHNob3dNZXNzYWdlQm94Q29udHJvbDogc2hvd01lc3NhZ2VCb3hDb250cm9sLFxuXHRnZXRNZXNzYWdlc0ZvckNvbnRleHQ6IGdldE1lc3NhZ2VzRm9yQ29udGV4dCxcblx0aXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2c6IGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nLFxuXHRyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWw6IHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCxcblx0cmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nLFxuXHRzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGU6IHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZSxcblx0dXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGU6IHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlLFxuXHR1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZTogdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUsXG5cdGNsb3NlTWVzc2FnZUJveDogY2xvc2VNZXNzYWdlQm94LFxuXHRyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0OiByZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0LFxuXHRjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlczogY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMsXG5cdGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZTogYWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlLFxuXHRpc05vblRlY2huaWNhbE1lc3NhZ2U6IGlzTm9uVGVjaG5pY2FsTWVzc2FnZSxcblx0cmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dDogcmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbWVzc2FnZUhhbmRsaW5nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQWdEQSxNQUFNQSxVQUFVLEdBQUdDLElBQUksQ0FBQ0QsVUFBVTtFQUNsQyxJQUFJRSxpQkFBc0QsR0FBRyxFQUFFO0VBQy9ELElBQUlDLGFBQXFCO0VBQ3pCLElBQUlDLFdBQW1CO0VBQ3ZCLElBQUlDLFdBQXdCOztFQTRCNUI7RUFDQTs7RUE4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