@envive-ai/react-hooks 0.3.45 → 0.3.46

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 (122) hide show
  1. package/dist/application/models/api/widgetText.d.cts +2 -1
  2. package/dist/application/models/api/widgetText.d.ts +2 -1
  3. package/dist/application/models/index.cjs +1 -1
  4. package/dist/application/models/index.js +1 -1
  5. package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +1 -1
  6. package/dist/application/models/validators/validateGraphQLFrontendConfig.js +1 -1
  7. package/dist/application/utils/elementObserver.d.cts +2 -2
  8. package/dist/application/utils/elementObserver.d.ts +2 -2
  9. package/dist/application/utils/widgetTextFromApiWidgetTextResponse.cjs +3 -2
  10. package/dist/application/utils/widgetTextFromApiWidgetTextResponse.js +3 -2
  11. package/dist/atoms/app/index.d.cts +7 -7
  12. package/dist/atoms/app/index.d.ts +7 -7
  13. package/dist/atoms/app/variant.cjs +2 -2
  14. package/dist/atoms/app/variant.d.cts +1 -1
  15. package/dist/atoms/app/variant.d.ts +1 -1
  16. package/dist/atoms/app/variant.js +2 -2
  17. package/dist/atoms/chat/chatState.d.cts +18 -18
  18. package/dist/atoms/chat/chatState.d.ts +18 -18
  19. package/dist/atoms/chat/form.d.cts +2 -2
  20. package/dist/atoms/chat/form.d.ts +2 -2
  21. package/dist/atoms/chat/index.cjs +1 -1
  22. package/dist/atoms/chat/index.d.cts +2 -2
  23. package/dist/atoms/chat/index.d.ts +3 -3
  24. package/dist/atoms/chat/index.js +1 -1
  25. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  26. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  27. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  28. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  29. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  30. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  31. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  32. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  33. package/dist/atoms/chat/replies.d.cts +2 -2
  34. package/dist/atoms/chat/replies.d.ts +2 -2
  35. package/dist/atoms/chat/suggestions.d.cts +2 -2
  36. package/dist/atoms/chat/suggestions.d.ts +2 -2
  37. package/dist/atoms/envive/enviveConfig.d.cts +12 -12
  38. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  39. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  40. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  41. package/dist/atoms/org/customerService.d.cts +6 -6
  42. package/dist/atoms/org/customerService.d.ts +6 -6
  43. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  44. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  45. package/dist/atoms/org/index.cjs +1 -1
  46. package/dist/atoms/org/index.js +1 -1
  47. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  48. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  49. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  50. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  51. package/dist/atoms/search/chatSearch.cjs +1 -1
  52. package/dist/atoms/search/chatSearch.d.cts +17 -17
  53. package/dist/atoms/search/chatSearch.d.ts +17 -17
  54. package/dist/atoms/search/chatSearch.js +1 -1
  55. package/dist/atoms/search/searchAPI.cjs +1 -1
  56. package/dist/atoms/search/searchAPI.d.cts +13 -13
  57. package/dist/atoms/search/searchAPI.d.ts +13 -13
  58. package/dist/atoms/search/searchAPI.js +1 -1
  59. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  60. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  61. package/dist/contexts/enviveContext/types.d.cts +1 -1
  62. package/dist/contexts/enviveContext/types.d.ts +1 -1
  63. package/dist/contexts/pageContext/pageContext.cjs +2 -2
  64. package/dist/contexts/pageContext/pageContext.js +2 -2
  65. package/dist/contexts/salesAgentContext/chatAPI.cjs +2 -2
  66. package/dist/contexts/salesAgentContext/chatAPI.js +2 -2
  67. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +4 -1
  68. package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +2 -1
  69. package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +2 -1
  70. package/dist/contexts/salesAgentContext/salesAgentContext.js +5 -2
  71. package/dist/contexts/salesAgentContext/salesAgentService.cjs +12 -4
  72. package/dist/contexts/salesAgentContext/salesAgentService.js +12 -4
  73. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  74. package/dist/contexts/searchContext/searchContext.js +1 -1
  75. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  76. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  77. package/dist/contexts/types.d.cts +1 -1
  78. package/dist/contexts/types.d.ts +1 -1
  79. package/dist/contexts/typesV3.d.cts +1 -1
  80. package/dist/contexts/typesV3.d.ts +1 -1
  81. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +1 -1
  82. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +1 -1
  83. package/dist/hooks/ChatToggle/useChatToggle.cjs +1 -1
  84. package/dist/hooks/ChatToggle/useChatToggle.js +1 -1
  85. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  86. package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +2 -2
  87. package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +2 -2
  88. package/dist/hooks/Search/useSearch.cjs +3 -3
  89. package/dist/hooks/Search/useSearch.js +3 -3
  90. package/dist/hooks/WidgetInteraction/types.cjs +2 -2
  91. package/dist/hooks/WidgetInteraction/types.d.cts +2 -2
  92. package/dist/hooks/WidgetInteraction/types.d.ts +2 -2
  93. package/dist/hooks/WidgetInteraction/types.js +2 -2
  94. package/dist/hooks/WidgetInteraction/utils.cjs +2 -2
  95. package/dist/hooks/WidgetInteraction/utils.js +2 -2
  96. package/dist/hooks/utils.d.cts +1 -1
  97. package/dist/services/amplitudeService/amplitudeService.cjs +3 -2
  98. package/dist/services/amplitudeService/amplitudeService.js +3 -2
  99. package/dist/services/enviveConfigService/enviveConfigService.cjs +34 -1
  100. package/dist/services/enviveConfigService/enviveConfigService.d.cts +4 -1
  101. package/dist/services/enviveConfigService/enviveConfigService.d.ts +4 -1
  102. package/dist/services/enviveConfigService/enviveConfigService.js +34 -1
  103. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +1 -1
  104. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +1 -1
  105. package/dist/services/hardcopyService/hardcopyService.cjs +4 -3
  106. package/dist/services/hardcopyService/hardcopyService.js +4 -3
  107. package/package.json +2 -2
  108. package/src/application/models/api/widgetText.ts +3 -0
  109. package/src/application/utils/widgetTextFromApiWidgetTextResponse.ts +1 -0
  110. package/src/atoms/app/variant.ts +1 -1
  111. package/src/contexts/pageContext/pageContext.tsx +1 -1
  112. package/src/contexts/salesAgentContext/salesAgentContext.tsx +7 -0
  113. package/src/contexts/salesAgentContext/salesAgentService.ts +12 -3
  114. package/src/hooks/PageViewedEvent/__tests__/usePageViewedEvent.test.ts +4 -4
  115. package/src/hooks/PageViewedEvent/usePageViewedEvent.ts +1 -1
  116. package/src/hooks/WidgetInteraction/types.ts +1 -1
  117. package/src/hooks/WidgetInteraction/utils.ts +1 -1
  118. package/src/services/amplitudeService/amplitudeService.ts +1 -0
  119. package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +208 -0
  120. package/src/services/enviveConfigService/enviveConfigService.ts +60 -0
  121. package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +47 -1
  122. package/src/services/hardcopyService/hardcopyService.ts +5 -0
@@ -140,7 +140,7 @@ const PageProvider = ({ children, previewMode = false, onUrlResolverNotReady })
140
140
  pageId = variantInfo.url;
141
141
  break;
142
142
  case VariantTypeEnum.FullPageSalesAgent:
143
- pageType = "full_page_sales_agent";
143
+ pageType = "adaptive_storefront";
144
144
  pageId = variantInfo.url;
145
145
  break;
146
146
  default: return;
@@ -195,4 +195,4 @@ const usePage = () => {
195
195
 
196
196
  //#endregion
197
197
  export { PageProvider, usePage };
198
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZUNvbnRleHQuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJQYWdlUHJvdmlkZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgcHJldmlld01vZGU6IGJvb2xlYW47XG4gIC8qKiBXaGVuIFVSTCByZXNvbHZlciByZXR1cm5zIGByZWFkeTogZmFsc2VgLCBpbnZva2VkIGZvciBleHRlbnNpb24vaW5qZWN0aW9uIGZhaWx1cmUgcmVwb3J0aW5nLiAqL1xuICBvblVybFJlc29sdmVyTm90UmVhZHk/OiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcbn0+IiwiQ29tbWVyY2VBcGlDbGllbnQiLCJwYWdlVHlwZTogc3RyaW5nIiwicGFnZUlkOiBzdHJpbmciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvcGFnZUNvbnRleHQvcGFnZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJlYWN0Tm9kZSxcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgVXJsUmVzb2x2ZXJSZXNwb25zZSxcbiAgaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tLFxuICBwYWdlVXNlckV2ZW50QXRvbSxcbiAgcGFnZVZhcmlhbnRJbmZvQXRvbSxcbiAgdXJsUmVzb2x2ZXJBdG9tLFxuICB2YXJpYW50SW5mb0F0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9hcHAvdmFyaWFudCc7XG5pbXBvcnQgeyB1c2VBdG9tLCB1c2VBdG9tVmFsdWUgfSBmcm9tICdqb3RhaSc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBQYWdlVmlzaXRDYXRlZ29yeSwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgVmFyaWFudFR5cGVFbnVtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCB1c2VBbXBsaXR1ZGUgfSBmcm9tICdzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dCc7XG5pbXBvcnQgeyBtYXBBcGlVc2VyRXZlbnRUb1VzZXJFdmVudCwgbWFwVXJsUmVzb2x2ZXJSZXNwb25zZVRvVmFyaWFudEluZm8gfSBmcm9tICcuL21hcHBpbmcnO1xuaW1wb3J0IHsgUGFnZURldGFpbHMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigncGFnZUNvbnRleHQnKTtcblxuY29uc3QgUGFnZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICB8IChQYWdlRGV0YWlscyAmIHtcbiAgICAgIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgICAgIGlzU3VwcG9ydGVkOiBib29sZWFuO1xuICAgICAgc2V0UGFnZVVybDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH0pXG4gIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBQYWdlUHJvdmlkZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgcHJldmlld01vZGU6IGJvb2xlYW47XG4gIC8qKiBXaGVuIFVSTCByZXNvbHZlciByZXR1cm5zIGByZWFkeTogZmFsc2VgLCBpbnZva2VkIGZvciBleHRlbnNpb24vaW5qZWN0aW9uIGZhaWx1cmUgcmVwb3J0aW5nLiAqL1xuICBvblVybFJlc29sdmVyTm90UmVhZHk/OiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcbn0+ID0gKHsgY2hpbGRyZW4sIHByZXZpZXdNb2RlID0gZmFsc2UsIG9uVXJsUmVzb2x2ZXJOb3RSZWFkeSB9KSA9PiB7XG4gIGNvbnN0IFtwYWdlVXJsLCBzZXRQYWdlVXJsXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgW3VybFJlc29sdmVyUmVzcG9uc2UsIHNldFVybFJlc29sdmVyUmVzcG9uc2VdID0gdXNlQXRvbSh1cmxSZXNvbHZlckF0b20pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdmFyaWFudEluZm8sIHNldFZhcmlhbnRJbmZvXSA9IHVzZUF0b20ocGFnZVZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IFt1c2VyRXZlbnQsIHNldFVzZXJFdmVudF0gPSB1c2VBdG9tKHBhZ2VVc2VyRXZlbnRBdG9tKTtcbiAgY29uc3QgW2lzU3VwcG9ydGVkLCBzZXRJc1N1cHBvcnRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGxhc3ROb3RSZWFkeVVybFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBhZ2VVcmwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB9LCBbXSk7XG5cbiAgLy8gQXV0by1pbml0aWFsaXplIGF0b21zIGZvciBwcmV2aWV3IG1vZGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmlld01vZGUgJiYgIXVzZXJFdmVudCAmJiAhdmFyaWFudEluZm8pIHtcbiAgICAgIGNvbnN0IHVybCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmxvY2F0aW9uLmhyZWYgOiAnJztcbiAgICAgIHNldFVzZXJFdmVudCh7XG4gICAgICAgIGV2ZW50X2lkOiAncHJldmlldy11c2VyLWV2ZW50JyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0LFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgcGFnZV92aXNpdF9jYXRlZ29yeTogUGFnZVZpc2l0Q2F0ZWdvcnkuT3RoZXIsXG4gICAgICAgICAgdXJsLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICBzZXRWYXJpYW50SW5mbyh7XG4gICAgICAgIHZhcmlhbnRUeXBlOiBWYXJpYW50VHlwZUVudW0uUGFnZVZpc2l0LFxuICAgICAgICB1cmwsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtwcmV2aWV3TW9kZSwgdXNlckV2ZW50LCB2YXJpYW50SW5mbywgc2V0VXNlckV2ZW50LCBzZXRWYXJpYW50SW5mb10pO1xuXG4gIGNvbnN0IHNldFZhcmlhbnRGcm9tVXJsUmVzb2x2ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAodXJsOiBzdHJpbmcsIHJlc3BvbnNlOiBVcmxSZXNvbHZlclJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UucmVhZHkpIHtcbiAgICAgICAgY29uc3QgbmV3VmFyaWFudEluZm8gPSBtYXBVcmxSZXNvbHZlclJlc3BvbnNlVG9WYXJpYW50SW5mbyh1cmwsIHJlc3BvbnNlKTtcbiAgICAgICAgY29uc3QgbmV3VXNlckV2ZW50ID0gbWFwQXBpVXNlckV2ZW50VG9Vc2VyRXZlbnQocmVzcG9uc2UudXNlcl9ldmVudCA/PyB1bmRlZmluZWQpO1xuICAgICAgICBsb2dnZXIubG9nRGVidWcoJ3NldHRpbmcgdmFyaWFudCBpbmZvIGFuZCB1c2VyIGV2ZW50JywgeyBuZXdWYXJpYW50SW5mbywgbmV3VXNlckV2ZW50IH0pO1xuICAgICAgICBzZXRWYXJpYW50SW5mbyhuZXdWYXJpYW50SW5mbyk7XG4gICAgICAgIHNldFVzZXJFdmVudChuZXdVc2VyRXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VXNlckV2ZW50KHVuZGVmaW5lZCk7XG4gICAgICAgIHNldFZhcmlhbnRJbmZvKHVuZGVmaW5lZCk7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnc2V0IHZhcmlhbnQgaW5mbyBhbmQgdXNlciBldmVudCB0byB1bmRlZmluZWQnLCB7IHZhcmlhbnRJbmZvLCB1c2VyRXZlbnQgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2V0VmFyaWFudEluZm8sIHNldFVzZXJFdmVudF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlUGFnZVVybCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghcGFnZVVybCkge1xuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgaW4gcHJldmlldyBtb2RlIG9yIGF0b21zIGFyZSBhbHJlYWR5IHNldCAoZS5nLiwgYnkgc3Rvcnlib29rKSwgc2tpcCBBUEkgY2FsbFxuICAgICAgICBpZiAocHJldmlld01vZGUgfHwgdXNlckV2ZW50IHx8IHZhcmlhbnRJbmZvKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGVhbnNlZFVybCA9IHBhZ2VVcmwudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgICAgICB1cmxSZXNvbHZlclJlc3BvbnNlW2NsZWFuc2VkVXJsXSA/P1xuICAgICAgICAgICgoYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQucmVzb2x2ZVVybChjbGVhbnNlZFVybCkpIGFzIFVybFJlc29sdmVyUmVzcG9uc2UpO1xuICAgICAgICBzZXRWYXJpYW50RnJvbVVybFJlc29sdmVyKGNsZWFuc2VkVXJsLCByZXNwb25zZSk7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIHNldElzU3VwcG9ydGVkKHJlc3BvbnNlLnJlYWR5KTtcblxuICAgICAgICBpZiAocmVzcG9uc2UucmVhZHkpIHtcbiAgICAgICAgICBsYXN0Tm90UmVhZHlVcmxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAob25VcmxSZXNvbHZlck5vdFJlYWR5ICYmIGxhc3ROb3RSZWFkeVVybFJlZi5jdXJyZW50ICE9PSBjbGVhbnNlZFVybCkge1xuICAgICAgICAgIGxhc3ROb3RSZWFkeVVybFJlZi5jdXJyZW50ID0gY2xlYW5zZWRVcmw7XG4gICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVUkwgcmVzb2x2ZXIgcmV0dXJuZWQgcmVhZHk9ZmFsc2UgZm9yICR7Y2xlYW5zZWRVcmx9YCk7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG9uVXJsUmVzb2x2ZXJOb3RSZWFkeShlcnIpKS5jYXRjaChjYWxsYmFja0Vycm9yID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnb25VcmxSZXNvbHZlck5vdFJlYWR5IGNhbGxiYWNrIGZhaWxlZCcsIGNhbGxiYWNrRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgcGFnZSBVUkwnLCBlLCB7IHBhZ2VVcmwgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXNvbHZlUGFnZVVybCgpO1xuICB9LCBbXG4gICAgcGFnZVVybCxcbiAgICB1cmxSZXNvbHZlclJlc3BvbnNlLFxuICAgIHNldFVybFJlc29sdmVyUmVzcG9uc2UsXG4gICAgc2V0VmFyaWFudEZyb21VcmxSZXNvbHZlcixcbiAgICB1c2VyRXZlbnQsXG4gICAgdmFyaWFudEluZm8sXG4gICAgcHJldmlld01vZGUsXG4gICAgb25VcmxSZXNvbHZlck5vdFJlYWR5LFxuICBdKTtcblxuICBjb25zdCB7IHRyYWNrRXZlbnQgfSA9IHVzZUFtcGxpdHVkZSgpO1xuICBjb25zdCByZXNvbHZlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKHZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IGhhc1BhcnNlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKGhhc1BhcnNlZFZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IHBhZ2VWaWV3ZWRGaXJlZCA9IHVzZVJlZihmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGFnZVZpZXdlZEZpcmVkLmN1cnJlbnQgfHwgaXNMb2FkaW5nIHx8ICFoYXNQYXJzZWRWYXJpYW50SW5mbyB8fCAhdmFyaWFudEluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGFnZVR5cGU6IHN0cmluZztcbiAgICBsZXQgcGFnZUlkOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhbnRJbmZvLnZhcmlhbnRUeXBlKSB7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QZHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BkcCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnByb2R1Y3RJZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QbHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BscCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnBscElkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkhvbWU6XG4gICAgICAgIHBhZ2VUeXBlID0gJ2hvbWVwYWdlJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLk90aGVyOlxuICAgICAgICBwYWdlVHlwZSA9ICdvdGhlcic7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQ6XG4gICAgICAgIHBhZ2VUeXBlID0gJ290aGVyJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkZ1bGxQYWdlU2FsZXNBZ2VudDpcbiAgICAgICAgcGFnZVR5cGUgPSAnZnVsbF9wYWdlX3NhbGVzX2FnZW50JztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYWdlVmlld2VkRmlyZWQuY3VycmVudCA9IHRydWU7XG5cbiAgICB0cmFja0V2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogRW52aXZlTWV0cmljc0V2ZW50TmFtZS5QYWdlVmlld2VkLFxuICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAnY29udGV4dC5wYWdlX3R5cGUnOiBwYWdlVHlwZSxcbiAgICAgICAgJ2NvbnRleHQucGFnZV9pZCc6IHBhZ2VJZCxcbiAgICAgICAgJ2NvbnRleHQuc3VwcG9ydGVkJzogaXNTdXBwb3J0ZWQsXG4gICAgICAgICdjb250ZXh0LnJlYWR5JzogaXNTdXBwb3J0ZWQsXG4gICAgICAgICdjb250ZXh0LnBhZ2VfdmFyaWFudF9pZCc6IHJlc29sdmVkVmFyaWFudEluZm8udmFyaWFudElkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSwgW2lzTG9hZGluZywgaXNTdXBwb3J0ZWQsIGhhc1BhcnNlZFZhcmlhbnRJbmZvLCB2YXJpYW50SW5mbywgcmVzb2x2ZWRWYXJpYW50SW5mbywgdHJhY2tFdmVudF0pO1xuXG4gIGNvbnN0IHNldFBhZ2VVcmxTdGFibGUgPSB1c2VDYWxsYmFjaygodXJsOiBzdHJpbmcpID0+IHtcbiAgICBzZXRQYWdlVXJsKHVybCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHBhZ2VVcmwsXG4gICAgICB2YXJpYW50SW5mbyxcbiAgICAgIHVzZXJFdmVudCxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIGlzU3VwcG9ydGVkLFxuICAgICAgc2V0UGFnZVVybDogc2V0UGFnZVVybFN0YWJsZSxcbiAgICB9KSxcbiAgICBbcGFnZVVybCwgdXNlckV2ZW50LCB2YXJpYW50SW5mbywgaXNMb2FkaW5nLCBpc1N1cHBvcnRlZCwgc2V0UGFnZVVybFN0YWJsZV0sXG4gICk7XG5cbiAgcmV0dXJuIDxQYWdlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PntjaGlsZHJlbn08L1BhZ2VDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VQYWdlID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChQYWdlQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlUGFnZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgUGFnZVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUEyQkEsTUFBTSxTQUFTLElBQUlBLGVBQU8sY0FBYztBQUV4QyxNQUFNLGNBQWMsY0FPbEIsT0FBVTtBQUVaLE1BQWFDLGdCQUtQLEVBQUUsVUFBVSxjQUFjLE9BQU8sNEJBQTRCO0NBQ2pFLE1BQU0sQ0FBQyxTQUFTLGNBQWMsU0FBNkIsT0FBVTtDQUNyRSxNQUFNLENBQUMscUJBQXFCLDBCQUEwQixRQUFRLGdCQUFnQjtDQUM5RSxNQUFNLENBQUMsV0FBVyxnQkFBZ0IsU0FBUyxNQUFNO0NBQ2pELE1BQU0sQ0FBQyxhQUFhLGtCQUFrQixRQUFRLG9CQUFvQjtDQUNsRSxNQUFNLENBQUMsV0FBVyxnQkFBZ0IsUUFBUSxrQkFB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
198
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZUNvbnRleHQuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJQYWdlUHJvdmlkZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgcHJldmlld01vZGU6IGJvb2xlYW47XG4gIC8qKiBXaGVuIFVSTCByZXNvbHZlciByZXR1cm5zIGByZWFkeTogZmFsc2VgLCBpbnZva2VkIGZvciBleHRlbnNpb24vaW5qZWN0aW9uIGZhaWx1cmUgcmVwb3J0aW5nLiAqL1xuICBvblVybFJlc29sdmVyTm90UmVhZHk/OiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcbn0+IiwiQ29tbWVyY2VBcGlDbGllbnQiLCJwYWdlVHlwZTogc3RyaW5nIiwicGFnZUlkOiBzdHJpbmciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvcGFnZUNvbnRleHQvcGFnZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJlYWN0Tm9kZSxcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgVXJsUmVzb2x2ZXJSZXNwb25zZSxcbiAgaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tLFxuICBwYWdlVXNlckV2ZW50QXRvbSxcbiAgcGFnZVZhcmlhbnRJbmZvQXRvbSxcbiAgdXJsUmVzb2x2ZXJBdG9tLFxuICB2YXJpYW50SW5mb0F0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9hcHAvdmFyaWFudCc7XG5pbXBvcnQgeyB1c2VBdG9tLCB1c2VBdG9tVmFsdWUgfSBmcm9tICdqb3RhaSc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBQYWdlVmlzaXRDYXRlZ29yeSwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgVmFyaWFudFR5cGVFbnVtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCB1c2VBbXBsaXR1ZGUgfSBmcm9tICdzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dCc7XG5pbXBvcnQgeyBtYXBBcGlVc2VyRXZlbnRUb1VzZXJFdmVudCwgbWFwVXJsUmVzb2x2ZXJSZXNwb25zZVRvVmFyaWFudEluZm8gfSBmcm9tICcuL21hcHBpbmcnO1xuaW1wb3J0IHsgUGFnZURldGFpbHMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigncGFnZUNvbnRleHQnKTtcblxuY29uc3QgUGFnZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICB8IChQYWdlRGV0YWlscyAmIHtcbiAgICAgIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgICAgIGlzU3VwcG9ydGVkOiBib29sZWFuO1xuICAgICAgc2V0UGFnZVVybDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH0pXG4gIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBQYWdlUHJvdmlkZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgcHJldmlld01vZGU6IGJvb2xlYW47XG4gIC8qKiBXaGVuIFVSTCByZXNvbHZlciByZXR1cm5zIGByZWFkeTogZmFsc2VgLCBpbnZva2VkIGZvciBleHRlbnNpb24vaW5qZWN0aW9uIGZhaWx1cmUgcmVwb3J0aW5nLiAqL1xuICBvblVybFJlc29sdmVyTm90UmVhZHk/OiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcbn0+ID0gKHsgY2hpbGRyZW4sIHByZXZpZXdNb2RlID0gZmFsc2UsIG9uVXJsUmVzb2x2ZXJOb3RSZWFkeSB9KSA9PiB7XG4gIGNvbnN0IFtwYWdlVXJsLCBzZXRQYWdlVXJsXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgW3VybFJlc29sdmVyUmVzcG9uc2UsIHNldFVybFJlc29sdmVyUmVzcG9uc2VdID0gdXNlQXRvbSh1cmxSZXNvbHZlckF0b20pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdmFyaWFudEluZm8sIHNldFZhcmlhbnRJbmZvXSA9IHVzZUF0b20ocGFnZVZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IFt1c2VyRXZlbnQsIHNldFVzZXJFdmVudF0gPSB1c2VBdG9tKHBhZ2VVc2VyRXZlbnRBdG9tKTtcbiAgY29uc3QgW2lzU3VwcG9ydGVkLCBzZXRJc1N1cHBvcnRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGxhc3ROb3RSZWFkeVVybFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBhZ2VVcmwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB9LCBbXSk7XG5cbiAgLy8gQXV0by1pbml0aWFsaXplIGF0b21zIGZvciBwcmV2aWV3IG1vZGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmlld01vZGUgJiYgIXVzZXJFdmVudCAmJiAhdmFyaWFudEluZm8pIHtcbiAgICAgIGNvbnN0IHVybCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmxvY2F0aW9uLmhyZWYgOiAnJztcbiAgICAgIHNldFVzZXJFdmVudCh7XG4gICAgICAgIGV2ZW50X2lkOiAncHJldmlldy11c2VyLWV2ZW50JyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0LFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgcGFnZV92aXNpdF9jYXRlZ29yeTogUGFnZVZpc2l0Q2F0ZWdvcnkuT3RoZXIsXG4gICAgICAgICAgdXJsLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICBzZXRWYXJpYW50SW5mbyh7XG4gICAgICAgIHZhcmlhbnRUeXBlOiBWYXJpYW50VHlwZUVudW0uUGFnZVZpc2l0LFxuICAgICAgICB1cmwsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtwcmV2aWV3TW9kZSwgdXNlckV2ZW50LCB2YXJpYW50SW5mbywgc2V0VXNlckV2ZW50LCBzZXRWYXJpYW50SW5mb10pO1xuXG4gIGNvbnN0IHNldFZhcmlhbnRGcm9tVXJsUmVzb2x2ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAodXJsOiBzdHJpbmcsIHJlc3BvbnNlOiBVcmxSZXNvbHZlclJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UucmVhZHkpIHtcbiAgICAgICAgY29uc3QgbmV3VmFyaWFudEluZm8gPSBtYXBVcmxSZXNvbHZlclJlc3BvbnNlVG9WYXJpYW50SW5mbyh1cmwsIHJlc3BvbnNlKTtcbiAgICAgICAgY29uc3QgbmV3VXNlckV2ZW50ID0gbWFwQXBpVXNlckV2ZW50VG9Vc2VyRXZlbnQocmVzcG9uc2UudXNlcl9ldmVudCA/PyB1bmRlZmluZWQpO1xuICAgICAgICBsb2dnZXIubG9nRGVidWcoJ3NldHRpbmcgdmFyaWFudCBpbmZvIGFuZCB1c2VyIGV2ZW50JywgeyBuZXdWYXJpYW50SW5mbywgbmV3VXNlckV2ZW50IH0pO1xuICAgICAgICBzZXRWYXJpYW50SW5mbyhuZXdWYXJpYW50SW5mbyk7XG4gICAgICAgIHNldFVzZXJFdmVudChuZXdVc2VyRXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VXNlckV2ZW50KHVuZGVmaW5lZCk7XG4gICAgICAgIHNldFZhcmlhbnRJbmZvKHVuZGVmaW5lZCk7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnc2V0IHZhcmlhbnQgaW5mbyBhbmQgdXNlciBldmVudCB0byB1bmRlZmluZWQnLCB7IHZhcmlhbnRJbmZvLCB1c2VyRXZlbnQgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2V0VmFyaWFudEluZm8sIHNldFVzZXJFdmVudF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlUGFnZVVybCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghcGFnZVVybCkge1xuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgaW4gcHJldmlldyBtb2RlIG9yIGF0b21zIGFyZSBhbHJlYWR5IHNldCAoZS5nLiwgYnkgc3Rvcnlib29rKSwgc2tpcCBBUEkgY2FsbFxuICAgICAgICBpZiAocHJldmlld01vZGUgfHwgdXNlckV2ZW50IHx8IHZhcmlhbnRJbmZvKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGVhbnNlZFVybCA9IHBhZ2VVcmwudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgICAgICB1cmxSZXNvbHZlclJlc3BvbnNlW2NsZWFuc2VkVXJsXSA/P1xuICAgICAgICAgICgoYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQucmVzb2x2ZVVybChjbGVhbnNlZFVybCkpIGFzIFVybFJlc29sdmVyUmVzcG9uc2UpO1xuICAgICAgICBzZXRWYXJpYW50RnJvbVVybFJlc29sdmVyKGNsZWFuc2VkVXJsLCByZXNwb25zZSk7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIHNldElzU3VwcG9ydGVkKHJlc3BvbnNlLnJlYWR5KTtcblxuICAgICAgICBpZiAocmVzcG9uc2UucmVhZHkpIHtcbiAgICAgICAgICBsYXN0Tm90UmVhZHlVcmxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAob25VcmxSZXNvbHZlck5vdFJlYWR5ICYmIGxhc3ROb3RSZWFkeVVybFJlZi5jdXJyZW50ICE9PSBjbGVhbnNlZFVybCkge1xuICAgICAgICAgIGxhc3ROb3RSZWFkeVVybFJlZi5jdXJyZW50ID0gY2xlYW5zZWRVcmw7XG4gICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVUkwgcmVzb2x2ZXIgcmV0dXJuZWQgcmVhZHk9ZmFsc2UgZm9yICR7Y2xlYW5zZWRVcmx9YCk7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG9uVXJsUmVzb2x2ZXJOb3RSZWFkeShlcnIpKS5jYXRjaChjYWxsYmFja0Vycm9yID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnb25VcmxSZXNvbHZlck5vdFJlYWR5IGNhbGxiYWNrIGZhaWxlZCcsIGNhbGxiYWNrRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgcGFnZSBVUkwnLCBlLCB7IHBhZ2VVcmwgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXNvbHZlUGFnZVVybCgpO1xuICB9LCBbXG4gICAgcGFnZVVybCxcbiAgICB1cmxSZXNvbHZlclJlc3BvbnNlLFxuICAgIHNldFVybFJlc29sdmVyUmVzcG9uc2UsXG4gICAgc2V0VmFyaWFudEZyb21VcmxSZXNvbHZlcixcbiAgICB1c2VyRXZlbnQsXG4gICAgdmFyaWFudEluZm8sXG4gICAgcHJldmlld01vZGUsXG4gICAgb25VcmxSZXNvbHZlck5vdFJlYWR5LFxuICBdKTtcblxuICBjb25zdCB7IHRyYWNrRXZlbnQgfSA9IHVzZUFtcGxpdHVkZSgpO1xuICBjb25zdCByZXNvbHZlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKHZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IGhhc1BhcnNlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKGhhc1BhcnNlZFZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IHBhZ2VWaWV3ZWRGaXJlZCA9IHVzZVJlZihmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGFnZVZpZXdlZEZpcmVkLmN1cnJlbnQgfHwgaXNMb2FkaW5nIHx8ICFoYXNQYXJzZWRWYXJpYW50SW5mbyB8fCAhdmFyaWFudEluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGFnZVR5cGU6IHN0cmluZztcbiAgICBsZXQgcGFnZUlkOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhbnRJbmZvLnZhcmlhbnRUeXBlKSB7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QZHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BkcCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnByb2R1Y3RJZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QbHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BscCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnBscElkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkhvbWU6XG4gICAgICAgIHBhZ2VUeXBlID0gJ2hvbWVwYWdlJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLk90aGVyOlxuICAgICAgICBwYWdlVHlwZSA9ICdvdGhlcic7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQ6XG4gICAgICAgIHBhZ2VUeXBlID0gJ290aGVyJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkZ1bGxQYWdlU2FsZXNBZ2VudDpcbiAgICAgICAgcGFnZVR5cGUgPSAnYWRhcHRpdmVfc3RvcmVmcm9udCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFnZVZpZXdlZEZpcmVkLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgdHJhY2tFdmVudCh7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuUGFnZVZpZXdlZCxcbiAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgJ2NvbnRleHQucGFnZV90eXBlJzogcGFnZVR5cGUsXG4gICAgICAgICdjb250ZXh0LnBhZ2VfaWQnOiBwYWdlSWQsXG4gICAgICAgICdjb250ZXh0LnN1cHBvcnRlZCc6IGlzU3VwcG9ydGVkLFxuICAgICAgICAnY29udGV4dC5yZWFkeSc6IGlzU3VwcG9ydGVkLFxuICAgICAgICAnY29udGV4dC5wYWdlX3ZhcmlhbnRfaWQnOiByZXNvbHZlZFZhcmlhbnRJbmZvLnZhcmlhbnRJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sIFtpc0xvYWRpbmcsIGlzU3VwcG9ydGVkLCBoYXNQYXJzZWRWYXJpYW50SW5mbywgdmFyaWFudEluZm8sIHJlc29sdmVkVmFyaWFudEluZm8sIHRyYWNrRXZlbnRdKTtcblxuICBjb25zdCBzZXRQYWdlVXJsU3RhYmxlID0gdXNlQ2FsbGJhY2soKHVybDogc3RyaW5nKSA9PiB7XG4gICAgc2V0UGFnZVVybCh1cmwpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBwYWdlVXJsLFxuICAgICAgdmFyaWFudEluZm8sXG4gICAgICB1c2VyRXZlbnQsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBpc1N1cHBvcnRlZCxcbiAgICAgIHNldFBhZ2VVcmw6IHNldFBhZ2VVcmxTdGFibGUsXG4gICAgfSksXG4gICAgW3BhZ2VVcmwsIHVzZXJFdmVudCwgdmFyaWFudEluZm8sIGlzTG9hZGluZywgaXNTdXBwb3J0ZWQsIHNldFBhZ2VVcmxTdGFibGVdLFxuICApO1xuXG4gIHJldHVybiA8UGFnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9QYWdlQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlUGFnZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUGFnZUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVBhZ2UgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFBhZ2VQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBLE1BQU0sU0FBUyxJQUFJQSxlQUFPLGNBQWM7QUFFeEMsTUFBTSxjQUFjLGNBT2xCLE9BQVU7QUFFWixNQUFhQyxnQkFLUCxFQUFFLFVBQVUsY0FBYyxPQUFPLDRCQUE0QjtDQUNqRSxNQUFNLENBQUMsU0FBUyxjQUFjLFNBQTZCLE9BQVU7Q0FDckUsTUFBTSxDQUFDLHFCQUFxQiwwQkFBMEIsUUFBUSxnQkFBZ0I7Q0FDOUUsTUFBTSxDQUFDLFdBQVcsZ0JBQWdCLFNBQVMsTUFBTTtDQUNqRCxNQUFNLENBQUMsYUFBYSxrQkFBa0IsUUFBUSxvQkFBb0I7Q0FDbEUsTUFBTSxDQUFDLFdBQVcsZ0JBQWdCLFFBQVEsa0JBQWtC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
@@ -6,11 +6,11 @@ const require_eventNames = require('../../services/amplitudeService/eventNames.c
6
6
  require('../../services/amplitudeService/amplitudeService.cjs');
7
7
  const require_variant = require('../../atoms/app/variant.cjs');
8
8
  require('../../atoms/app/index.cjs');
9
- const require_amplitudeContext = require('../amplitudeContext/amplitudeContext.cjs');
10
- require('../amplitudeContext/index.cjs');
11
9
  const require_atoms_chat_chatState = require('../../atoms/chat/chatState.cjs');
12
10
  const require_messageQueue = require('../../atoms/chat/messageQueue.cjs');
13
11
  require('../../atoms/chat/index.cjs');
12
+ const require_amplitudeContext = require('../amplitudeContext/amplitudeContext.cjs');
13
+ require('../amplitudeContext/index.cjs');
14
14
  const require_hooks_WidgetInteraction_types = require('../../hooks/WidgetInteraction/types.cjs');
15
15
  const require_useWidgetInteraction = require('../../hooks/WidgetInteraction/useWidgetInteraction.cjs');
16
16
  require('../../hooks/WidgetInteraction/index.cjs');
@@ -5,11 +5,11 @@ import { EnviveMetricsEventName, SpiffyMetricsEventName } from "../../services/a
5
5
  import "../../services/amplitudeService/amplitudeService.js";
6
6
  import { analyticsContextAtom, hasParsedVariantInfoAtom } from "../../atoms/app/variant.js";
7
7
  import "../../atoms/app/index.js";
8
- import { useAmplitude } from "../amplitudeContext/amplitudeContext.js";
9
- import "../amplitudeContext/index.js";
10
8
  import { formSubmitAtom, replyEventCategoryAtom, suggestionsAtom } from "../../atoms/chat/chatState.js";
11
9
  import { queueUserEventAtom } from "../../atoms/chat/messageQueue.js";
12
10
  import "../../atoms/chat/index.js";
11
+ import { useAmplitude } from "../amplitudeContext/amplitudeContext.js";
12
+ import "../amplitudeContext/index.js";
13
13
  import { WidgetInteractionComponent, WidgetInteractionType } from "../../hooks/WidgetInteraction/types.js";
14
14
  import { useWidgetInteraction } from "../../hooks/WidgetInteraction/useWidgetInteraction.js";
15
15
  import "../../hooks/WidgetInteraction/index.js";
@@ -139,6 +139,7 @@ const useSalesAgent = (contextWidget) => {
139
139
  const pendingMessages = (0, jotai.useAtomValue)(require_messageQueue.userEventQueueAtom);
140
140
  const isResponseStreaming = (0, jotai.useAtomValue)(require_atoms_chat_chatState.responseStreamingAtom);
141
141
  const isPendingResponse = (0, jotai.useAtomValue)(require_atoms_chat_chatState.pendingResponseAtom);
142
+ const isLoadingSuggestions = (0, jotai.useAtomValue)(require_atoms_chat_chatState.suggestionsLoadingAtom);
142
143
  const isInitialized = (0, jotai.useAtomValue)(require_atoms_chat_chatState.initializedAtom);
143
144
  const { logPageVisit, logUserEvent, onSuggestionClicked, onTypedMessageSubmitted, onFormResponseSubmitted } = require_chatAPI.useSalesAgentChatAPI(contextWidget);
144
145
  return (0, react.useMemo)(() => {
@@ -149,6 +150,7 @@ const useSalesAgent = (contextWidget) => {
149
150
  isInitialized,
150
151
  isResponseStreaming,
151
152
  isPendingResponse,
153
+ isLoadingSuggestions,
152
154
  logPageVisit,
153
155
  logUserEvent,
154
156
  onSuggestionClicked,
@@ -162,6 +164,7 @@ const useSalesAgent = (contextWidget) => {
162
164
  isInitialized,
163
165
  isResponseStreaming,
164
166
  isPendingResponse,
167
+ isLoadingSuggestions,
165
168
  logPageVisit,
166
169
  logUserEvent,
167
170
  onSuggestionClicked,
@@ -173,4 +176,4 @@ const useSalesAgent = (contextWidget) => {
173
176
  //#endregion
174
177
  exports.SalesAgentProvider = SalesAgentProvider;
175
178
  exports.useSalesAgent = useSalesAgent;
176
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz4iLCJ1c2VyRXZlbnRRdWV1ZUF0b20iLCJ1c2VyUXVldWVFdmVudENvdW50QXRvbSIsInByb2Nlc3NVc2VyRXZlbnRBdG9tIiwiaW5pdGlhbGl6ZWRBdG9tIiwidXNlU3lzdGVtU2V0dGluZ3NDb250ZXh0IiwibWVzc2FnZXNBdG9tIiwic3VnZ2VzdGlvbnNBdG9tIiwidXNlU2FsZXNBZ2VudFNlcnZpY2UiLCJVc2VyRXZlbnRDYXRlZ29yeSIsIm5ld01lc3NhZ2U6IE1lc3NhZ2UiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiY3JlYXRlRm9ybVN1Ym1pdHRlZFVzZXJNZXNzYWdlIiwiYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQiLCJyZXNwb25zZVN0cmVhbWluZ0F0b20iLCJwZW5kaW5nUmVzcG9uc2VBdG9tIiwidXNlU2FsZXNBZ2VudENoYXRBUEkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudENvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCwgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlUm9sZSwgTWVzc2FnZVR5cGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL21lc3NhZ2UnO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZWRBdG9tLFxuICBtZXNzYWdlc0F0b20sXG4gIHBlbmRpbmdSZXNwb25zZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1VzZXJFdmVudEF0b20sXG4gIHVzZXJFdmVudFF1ZXVlQXRvbSxcbiAgdXNlclF1ZXVlRXZlbnRDb3VudEF0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L21lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQgfSBmcm9tICcuLi8uLi9ob29rcy9TeXN0ZW1TZXR0aW5nc0NvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBTYWxlc0FnZW50Q2hhdEFQSSwgdXNlU2FsZXNBZ2VudENoYXRBUEkgfSBmcm9tICcuL2NoYXRBUEknO1xuaW1wb3J0IHtcbiAgYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQsXG4gIGNyZWF0ZUZvcm1TdWJtaXR0ZWRVc2VyTWVzc2FnZSxcbn0gZnJvbSAnLi9mb3JtU3VibWl0dGVkVXRpbHMnO1xuaW1wb3J0IHsgdXNlU2FsZXNBZ2VudFNlcnZpY2UgfSBmcm9tICcuL3NhbGVzQWdlbnRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBTYWxlc0FnZW50IGV4dGVuZHMgU2FsZXNBZ2VudENoYXRBUEkge1xuICAvLyBNZXNzYWdlcyBhcmUgdGhlIGZ1bGwgbGlzdCBvZiBhbGwgdHVybnNcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVtdO1xuICAvLyBQZW5kaW5nIG1lc3NhZ2VzIGFyZSBtZXNzYWdlcyB0aGF0IHRoZSB1c2VyIGhhcyBjbGlja2VkL3R5cGVkIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiBzZW50IHRvIHRoZSBiYWNrZW5kLlxuICBwZW5kaW5nTWVzc2FnZXM6IFVzZXJFdmVudFtdO1xuICAvLyBTdWdnZXN0aW9ucyBhcmUgdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgdGhhdCB0aGUgdXNlciBjYW4gY2xpY2sgb24gaW4gcmVzcG9uc2UgdG8gdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2UgZnJvbSB0aGUgYmFja2VuZFxuICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBzdHJlYW1pbmcgZnJvbSB0aGUgYmFja2VuZFxuICBpc1Jlc3BvbnNlU3RyZWFtaW5nOiBib29sZWFuO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBwZW5kaW5nIGZyb20gdGhlIGJhY2tlbmRcbiAgaXNQZW5kaW5nUmVzcG9uc2U6IGJvb2xlYW47XG4gIC8vIFRydWUgd2hlbiB0aGUgc2FsZXMgYWdlbnQgaXMgaW5pdGlhbGl6ZWRcbiAgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2NrU2FsZXNBZ2VudERhdGEge1xuICBtZXNzYWdlcz86IE1lc3NhZ2VbXVtdO1xuICBzdWdnZXN0aW9ucz86IFN1Z2dlc3Rpb25bXTtcbn1cblxuY29uc3QgU2FsZXNBZ2VudENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNhbGVzQWdlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ3NhbGVzQWdlbnRDb250ZXh0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudFByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBwcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gIG1vY2tEYXRhPzogTW9ja1NhbGVzQWdlbnREYXRhO1xufVxuXG5leHBvcnQgY29uc3QgU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgcHJldmlld01vZGUgPSBmYWxzZSxcbiAgbW9ja0RhdGEsXG59KSA9PiB7XG4gIGNvbnN0IHVzZXJFdmVudHMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgdXNlclF1ZXVlRXZlbnRDb3VudCA9IHVzZUF0b21WYWx1ZSh1c2VyUXVldWVFdmVudENvdW50QXRvbSk7XG4gIGNvbnN0IG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkID0gdXNlU2V0QXRvbShwcm9jZXNzVXNlckV2ZW50QXRvbSk7XG4gIGNvbnN0IFtpc0h5ZHJhdGVkLCBzZXRJc0h5ZHJhdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzSW5pdGlhbGl6ZWQsIHNldElzSW5pdGlhbGl6ZWRdID0gdXNlQXRvbShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCBzZXR0aW5nc0NvbnRleHQgPSB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQoKTtcbiAgY29uc3Qgc2V0TWVzc2FnZXMgPSB1c2VTZXRBdG9tKG1lc3NhZ2VzQXRvbSk7XG4gIGNvbnN0IHNldFN1Z2dlc3Rpb25zID0gdXNlU2V0QXRvbShzdWdnZXN0aW9uc0F0b20pO1xuXG4gIGNvbnN0IHsgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLCBjcmVhdGVSZXNwb25zZVBheWxvYWQsIGdldFN1Z2dlc3Rpb25zLCBoeWRyYXRlTWVzc2FnZXMgfSA9XG4gICAgdXNlU2FsZXNBZ2VudFNlcnZpY2UoKTtcblxuICBjb25zdCBpc1NlbmRpbmdSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIEluaXRpYWxpemUgd2l0aCBtb2NrIGRhdGEgaW4gcHJldmlldyBtb2RlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZXZpZXdNb2RlICYmIG1vY2tEYXRhKSB7XG4gICAgICBpZiAobW9ja0RhdGEubWVzc2FnZXMpIHtcbiAgICAgICAgc2V0TWVzc2FnZXMobW9ja0RhdGEubWVzc2FnZXMpO1xuICAgICAgfVxuICAgICAgaWYgKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKTtcbiAgICAgIH1cbiAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbcHJldmlld01vZGUsIG1vY2tEYXRhLCBzZXRNZXNzYWdlcywgc2V0U3VnZ2VzdGlvbnMsIHNldElzSW5pdGlhbGl6ZWRdKTtcblxuICAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbXBsaXR1ZGUgZXZlbnRzIGFyZSBiZWluZyBlbWl0dGVkXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBzdHJlYW1pbmcgcmVzcG9uc2VzIHRvIGZ1bmN0aW9uXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBoeWRyYXRpb24gb2YgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmQgb24gaW5pdGlhbGl6YXRpb25cbiAgY29uc3Qgc2VuZE1lc3NhZ2VzVG9CYWNrZW5kID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlcXVlc3RQYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdldFN0cmVhbWluZ1Jlc3BvbnNlcyhyZXF1ZXN0UGF5bG9hZCk7XG4gICAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwZW5kaW5nIG1lc3NhZ2UgZnJvbSB0aGUgdXNlciBldmVudHNcbiAgICAgICAgcmVxdWVzdFBheWxvYWQudXNlckV2ZW50cz8ubWFwKHVzZXJFdmVudCA9PiBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZChbdXNlckV2ZW50LmV2ZW50SWRdKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIubG9nRXJyb3IoJ2Vycm9yIHNlbmRpbmcgbWVzc2FnZScsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXRTdHJlYW1pbmdSZXNwb25zZXMsIHNldElzSW5pdGlhbGl6ZWQsIG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkXSxcbiAgKTtcblxuICAvLyBUaGlzIGlzIHRoZSBwcmltYXJ5IGV2ZW50IGxvb3AgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCBBUElcbiAgLy8gSXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSBiYWNrZW5kXG4gIC8vIEl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdGhlIG1lc3NhZ2VzIHRvIHRoZSBiYWNrZW5kIGFuZCByZWNlaXZpbmcgdGhlIHJlc3BvbnNlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNraXAgYmFja2VuZCBjb21tdW5pY2F0aW9uIGluIHByZXZpZXcgbW9kZVxuICAgIGlmIChwcmV2aWV3TW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBXYWl0IGZvciB0aGUgbWVzc2FnZXMgdG8gYmUgaHlkcmF0ZWQgYmVmb3JlIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIGJhY2tlbmRcbiAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodXNlclF1ZXVlRXZlbnRDb3VudCA+IDAgJiYgIWlzU2VuZGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICBpc1NlbmRpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICBjb25zdCBwYXlsb2FkRXZlbnRzID0gdXNlckV2ZW50cy5zbGljZSgwLCB1c2VyUXVldWVFdmVudENvdW50KTtcblxuICAgICAgcGF5bG9hZEV2ZW50cy5mb3JFYWNoKHVzZXJFdmVudCA9PiB7XG4gICAgICAgIGlmICh1c2VyRXZlbnQgJiYgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMucXVlcnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2V0TWVzc2FnZXMoY3VycmVudCA9PiBbLi4uY3VycmVudCwgW25ld01lc3NhZ2VdXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJFdmVudCAmJiB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCA/PyAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZXRNZXNzYWdlcyhjdXJyZW50ID0+IFsuLi5jdXJyZW50LCBbbmV3TWVzc2FnZV1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckV2ZW50ICYmIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IHsgZm9ybVJlc3BvbnNlSWQsIGZpbGxlZFNjaGVtYSB9ID0gdXNlckV2ZW50LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgc2V0TWVzc2FnZXMocHJldk1lc3NhZ2VzU3RhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybVN1Ym1pdHRlZENvbnRlbnQgPSBidWlsZEZvcm1TdWJtaXR0ZWREaXNwbGF5Q29udGVudChcbiAgICAgICAgICAgICAgcHJldk1lc3NhZ2VzU3RhdGUsXG4gICAgICAgICAgICAgIGZvcm1SZXNwb25zZUlkLFxuICAgICAgICAgICAgICBmaWxsZWRTY2hlbWEsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbmV3VXNlck1lc3NhZ2UgPSBjcmVhdGVGb3JtU3VibWl0dGVkVXNlck1lc3NhZ2UodXNlckV2ZW50LCBmb3JtU3VibWl0dGVkQ29udGVudCk7XG4gICAgICAgICAgICBjb25zdCB0dXJuc1dpdGhvdXRGb3JtID0gcHJldk1lc3NhZ2VzU3RhdGVcbiAgICAgICAgICAgICAgLm1hcCh0dXJuID0+XG4gICAgICAgICAgICAgICAgdHVybi5maWx0ZXIobXNnID0+ICEobXNnLnR5cGUgPT09IE1lc3NhZ2VUeXBlLkZvcm0gJiYgbXNnLmlkID09PSBmb3JtUmVzcG9uc2VJZCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIodHVybiA9PiB0dXJuLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50dXJuc1dpdGhvdXRGb3JtLCBbbmV3VXNlck1lc3NhZ2VdXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlbmRNZXNzYWdlc1RvQmFja2VuZChcbiAgICAgICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkRXZlbnRzLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlzU2VuZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGdldFN1Z2dlc3Rpb25zKFxuICAgICAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQoe1xuICAgICAgICAgIHVzZXJFdmVudHM6IFtdLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9LCBbXG4gICAgaXNIeWRyYXRlZCxcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3VnZ2VzdGlvbnMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBzZXRNZXNzYWdlcyxcbiAgICBzZW5kTWVzc2FnZXNUb0JhY2tlbmQsXG4gICAgc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgdXNlckV2ZW50cyxcbiAgICB1c2VyUXVldWVFdmVudENvdW50LFxuICAgIHByZXZpZXdNb2RlLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0SHlkcmF0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gU2tpcCBoeWRyYXRpb24gaW4gcHJldmlldyBtb2RlXG4gICAgICBpZiAocHJldmlld01vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgICAgLy8gUmVoeWRyYXRlIGFueSBtZXNzYWdlcyBmcm9tIHRoZSBiYWNrZW5kXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaHlkcmF0ZU1lc3NhZ2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdlcnJvciBoeWRyYXRpbmcgbWVzc2FnZXMnLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNIeWRyYXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRIeWRyYXRpb24oKTtcbiAgfSwgW2lzSW5pdGlhbGl6ZWQsIGh5ZHJhdGVNZXNzYWdlcywgcHJldmlld01vZGUsIGlzSHlkcmF0ZWRdKTtcblxuICByZXR1cm4gPFNhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1bmRlZmluZWR9PntjaGlsZHJlbn08L1NhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50ID0gKGNvbnRleHRXaWRnZXQ/OiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudCk6IFNhbGVzQWdlbnQgPT4ge1xuICBjb25zdCBtZXNzYWdlcyA9IHVzZUF0b21WYWx1ZShtZXNzYWdlc0F0b20pO1xuICBjb25zdCBzdWdnZXN0aW9ucyA9IHVzZUF0b21WYWx1ZShzdWdnZXN0aW9uc0F0b20pO1xuICBjb25zdCBwZW5kaW5nTWVzc2FnZXMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgaXNSZXNwb25zZVN0cmVhbWluZyA9IHVzZUF0b21WYWx1ZShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBpc1BlbmRpbmdSZXNwb25zZSA9IHVzZUF0b21WYWx1ZShwZW5kaW5nUmVzcG9uc2VBdG9tKTtcbiAgY29uc3QgaXNJbml0aWFsaXplZCA9IHVzZUF0b21WYWx1ZShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCB7XG4gICAgbG9nUGFnZVZpc2l0LFxuICAgIGxvZ1VzZXJFdmVudCxcbiAgICBvblN1Z2dlc3Rpb25DbGlja2VkLFxuICAgIG9uVHlwZWRNZXNzYWdlU3VibWl0dGVkLFxuICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICB9ID0gdXNlU2FsZXNBZ2VudENoYXRBUEkoY29udGV4dFdpZGdldCk7XG5cbiAgY29uc3Qgc2FsZXNBZ2VudDogU2FsZXNBZ2VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcGVuZGluZ01lc3NhZ2VzLFxuICAgICAgaXNJbml0aWFsaXplZCxcbiAgICAgIGlzUmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICBpc1BlbmRpbmdSZXNwb25zZSxcbiAgICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICAgIGxvZ1VzZXJFdmVudCxcbiAgICAgIG9uU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICAgIH07XG4gIH0sIFtcbiAgICBtZXNzYWdlcyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBwZW5kaW5nTWVzc2FnZXMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nLFxuICAgIGlzUGVuZGluZ1Jlc3BvbnNlLFxuICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICBsb2dVc2VyRXZlbnQsXG4gICAgb25TdWdnZXN0aW9uQ2xpY2tlZCxcbiAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICBvbkZvcm1SZXNwb25zZVN1Ym1pdHRlZCxcbiAgXSk7XG4gIHJldHVybiBzYWxlc0FnZW50O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSxNQUFNLDZD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
179
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz4iLCJ1c2VyRXZlbnRRdWV1ZUF0b20iLCJ1c2VyUXVldWVFdmVudENvdW50QXRvbSIsInByb2Nlc3NVc2VyRXZlbnRBdG9tIiwiaW5pdGlhbGl6ZWRBdG9tIiwidXNlU3lzdGVtU2V0dGluZ3NDb250ZXh0IiwibWVzc2FnZXNBdG9tIiwic3VnZ2VzdGlvbnNBdG9tIiwidXNlU2FsZXNBZ2VudFNlcnZpY2UiLCJVc2VyRXZlbnRDYXRlZ29yeSIsIm5ld01lc3NhZ2U6IE1lc3NhZ2UiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiY3JlYXRlRm9ybVN1Ym1pdHRlZFVzZXJNZXNzYWdlIiwiYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQiLCJyZXNwb25zZVN0cmVhbWluZ0F0b20iLCJwZW5kaW5nUmVzcG9uc2VBdG9tIiwic3VnZ2VzdGlvbnNMb2FkaW5nQXRvbSIsInVzZVNhbGVzQWdlbnRDaGF0QVBJIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyB1c2VBdG9tLCB1c2VBdG9tVmFsdWUsIHVzZVNldEF0b20gfSBmcm9tICdqb3RhaSc7XG5pbXBvcnQgeyBSZWFjdE5vZGUsIGNyZWF0ZUNvbnRleHQsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBOZXh0TWVzc2FnZVJlcXVlc3QsIFN1Z2dlc3Rpb24sIFVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVJvbGUsIE1lc3NhZ2VUeXBlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tZXNzYWdlJztcbmltcG9ydCB7XG4gIGluaXRpYWxpemVkQXRvbSxcbiAgbWVzc2FnZXNBdG9tLFxuICBwZW5kaW5nUmVzcG9uc2VBdG9tLFxuICByZXNwb25zZVN0cmVhbWluZ0F0b20sXG4gIHN1Z2dlc3Rpb25zQXRvbSxcbiAgc3VnZ2VzdGlvbnNMb2FkaW5nQXRvbSxcbn0gZnJvbSAnc3JjL2F0b21zL2NoYXQvY2hhdFN0YXRlJztcbmltcG9ydCB7XG4gIHByb2Nlc3NVc2VyRXZlbnRBdG9tLFxuICB1c2VyRXZlbnRRdWV1ZUF0b20sXG4gIHVzZXJRdWV1ZUV2ZW50Q291bnRBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9tZXNzYWdlUXVldWUnO1xuaW1wb3J0IHsgdXNlU3lzdGVtU2V0dGluZ3NDb250ZXh0IH0gZnJvbSAnLi4vLi4vaG9va3MvU3lzdGVtU2V0dGluZ3NDb250ZXh0JztcbmltcG9ydCB7IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaG9va3MvV2lkZ2V0SW50ZXJhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgU2FsZXNBZ2VudENoYXRBUEksIHVzZVNhbGVzQWdlbnRDaGF0QVBJIH0gZnJvbSAnLi9jaGF0QVBJJztcbmltcG9ydCB7XG4gIGJ1aWxkRm9ybVN1Ym1pdHRlZERpc3BsYXlDb250ZW50LFxuICBjcmVhdGVGb3JtU3VibWl0dGVkVXNlck1lc3NhZ2UsXG59IGZyb20gJy4vZm9ybVN1Ym1pdHRlZFV0aWxzJztcbmltcG9ydCB7IHVzZVNhbGVzQWdlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zYWxlc0FnZW50U2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudCBleHRlbmRzIFNhbGVzQWdlbnRDaGF0QVBJIHtcbiAgLy8gTWVzc2FnZXMgYXJlIHRoZSBmdWxsIGxpc3Qgb2YgYWxsIHR1cm5zXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW11bXTtcbiAgLy8gUGVuZGluZyBtZXNzYWdlcyBhcmUgbWVzc2FnZXMgdGhhdCB0aGUgdXNlciBoYXMgY2xpY2tlZC90eXBlZCBidXQgaGF2ZSBub3QgeWV0IGJlZW4gc2VudCB0byB0aGUgYmFja2VuZC5cbiAgcGVuZGluZ01lc3NhZ2VzOiBVc2VyRXZlbnRbXTtcbiAgLy8gU3VnZ2VzdGlvbnMgYXJlIHRoZSBsaXN0IG9mIHN1Z2dlc3Rpb25zIHRoYXQgdGhlIHVzZXIgY2FuIGNsaWNrIG9uIGluIHJlc3BvbnNlIHRvIHRoZSBtb3N0IHJlY2VudCBtZXNzYWdlIGZyb20gdGhlIGJhY2tlbmRcbiAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgLy8gVHJ1ZSB3aGlsZSB0aGUgcmVzcG9uc2UgaXMgc3RyZWFtaW5nIGZyb20gdGhlIGJhY2tlbmRcbiAgaXNSZXNwb25zZVN0cmVhbWluZzogYm9vbGVhbjtcbiAgLy8gVHJ1ZSB3aGlsZSB0aGUgcmVzcG9uc2UgaXMgcGVuZGluZyBmcm9tIHRoZSBiYWNrZW5kXG4gIGlzUGVuZGluZ1Jlc3BvbnNlOiBib29sZWFuO1xuICAvLyBUcnVlIHdoaWxlIHN1Z2dlc3Rpb25zIGZvciB0aGUgbW9zdCByZWNlbnQgbWVzc2FnZSBhcmUgYmVpbmcgZmV0Y2hlZCAoc2VwYXJhdGUgZnJvbSB0aGVcbiAgLy8gbWVzc2FnZSByZXNwb25zZSBpdHNlbGYg4oCUIHN1Z2dlc3Rpb25zIGFyZSByZXF1ZXN0ZWQgYXMgYSBmb2xsb3ctdXAgY2FsbCBvbmNlIGl0IGNvbXBsZXRlcylcbiAgaXNMb2FkaW5nU3VnZ2VzdGlvbnM6IGJvb2xlYW47XG4gIC8vIFRydWUgd2hlbiB0aGUgc2FsZXMgYWdlbnQgaXMgaW5pdGlhbGl6ZWRcbiAgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2NrU2FsZXNBZ2VudERhdGEge1xuICBtZXNzYWdlcz86IE1lc3NhZ2VbXVtdO1xuICBzdWdnZXN0aW9ucz86IFN1Z2dlc3Rpb25bXTtcbn1cblxuY29uc3QgU2FsZXNBZ2VudENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNhbGVzQWdlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ3NhbGVzQWdlbnRDb250ZXh0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudFByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBwcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gIG1vY2tEYXRhPzogTW9ja1NhbGVzQWdlbnREYXRhO1xufVxuXG5leHBvcnQgY29uc3QgU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgcHJldmlld01vZGUgPSBmYWxzZSxcbiAgbW9ja0RhdGEsXG59KSA9PiB7XG4gIGNvbnN0IHVzZXJFdmVudHMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgdXNlclF1ZXVlRXZlbnRDb3VudCA9IHVzZUF0b21WYWx1ZSh1c2VyUXVldWVFdmVudENvdW50QXRvbSk7XG4gIGNvbnN0IG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkID0gdXNlU2V0QXRvbShwcm9jZXNzVXNlckV2ZW50QXRvbSk7XG4gIGNvbnN0IFtpc0h5ZHJhdGVkLCBzZXRJc0h5ZHJhdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzSW5pdGlhbGl6ZWQsIHNldElzSW5pdGlhbGl6ZWRdID0gdXNlQXRvbShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCBzZXR0aW5nc0NvbnRleHQgPSB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQoKTtcbiAgY29uc3Qgc2V0TWVzc2FnZXMgPSB1c2VTZXRBdG9tKG1lc3NhZ2VzQXRvbSk7XG4gIGNvbnN0IHNldFN1Z2dlc3Rpb25zID0gdXNlU2V0QXRvbShzdWdnZXN0aW9uc0F0b20pO1xuXG4gIGNvbnN0IHsgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLCBjcmVhdGVSZXNwb25zZVBheWxvYWQsIGdldFN1Z2dlc3Rpb25zLCBoeWRyYXRlTWVzc2FnZXMgfSA9XG4gICAgdXNlU2FsZXNBZ2VudFNlcnZpY2UoKTtcblxuICBjb25zdCBpc1NlbmRpbmdSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIEluaXRpYWxpemUgd2l0aCBtb2NrIGRhdGEgaW4gcHJldmlldyBtb2RlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZXZpZXdNb2RlICYmIG1vY2tEYXRhKSB7XG4gICAgICBpZiAobW9ja0RhdGEubWVzc2FnZXMpIHtcbiAgICAgICAgc2V0TWVzc2FnZXMobW9ja0RhdGEubWVzc2FnZXMpO1xuICAgICAgfVxuICAgICAgaWYgKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKTtcbiAgICAgIH1cbiAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbcHJldmlld01vZGUsIG1vY2tEYXRhLCBzZXRNZXNzYWdlcywgc2V0U3VnZ2VzdGlvbnMsIHNldElzSW5pdGlhbGl6ZWRdKTtcblxuICAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbXBsaXR1ZGUgZXZlbnRzIGFyZSBiZWluZyBlbWl0dGVkXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBzdHJlYW1pbmcgcmVzcG9uc2VzIHRvIGZ1bmN0aW9uXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBoeWRyYXRpb24gb2YgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmQgb24gaW5pdGlhbGl6YXRpb25cbiAgY29uc3Qgc2VuZE1lc3NhZ2VzVG9CYWNrZW5kID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlcXVlc3RQYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdldFN0cmVhbWluZ1Jlc3BvbnNlcyhyZXF1ZXN0UGF5bG9hZCk7XG4gICAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwZW5kaW5nIG1lc3NhZ2UgZnJvbSB0aGUgdXNlciBldmVudHNcbiAgICAgICAgcmVxdWVzdFBheWxvYWQudXNlckV2ZW50cz8ubWFwKHVzZXJFdmVudCA9PiBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZChbdXNlckV2ZW50LmV2ZW50SWRdKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIubG9nRXJyb3IoJ2Vycm9yIHNlbmRpbmcgbWVzc2FnZScsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXRTdHJlYW1pbmdSZXNwb25zZXMsIHNldElzSW5pdGlhbGl6ZWQsIG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkXSxcbiAgKTtcblxuICAvLyBUaGlzIGlzIHRoZSBwcmltYXJ5IGV2ZW50IGxvb3AgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCBBUElcbiAgLy8gSXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSBiYWNrZW5kXG4gIC8vIEl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdGhlIG1lc3NhZ2VzIHRvIHRoZSBiYWNrZW5kIGFuZCByZWNlaXZpbmcgdGhlIHJlc3BvbnNlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNraXAgYmFja2VuZCBjb21tdW5pY2F0aW9uIGluIHByZXZpZXcgbW9kZVxuICAgIGlmIChwcmV2aWV3TW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBXYWl0IGZvciB0aGUgbWVzc2FnZXMgdG8gYmUgaHlkcmF0ZWQgYmVmb3JlIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIGJhY2tlbmRcbiAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodXNlclF1ZXVlRXZlbnRDb3VudCA+IDAgJiYgIWlzU2VuZGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICBpc1NlbmRpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICBjb25zdCBwYXlsb2FkRXZlbnRzID0gdXNlckV2ZW50cy5zbGljZSgwLCB1c2VyUXVldWVFdmVudENvdW50KTtcblxuICAgICAgcGF5bG9hZEV2ZW50cy5mb3JFYWNoKHVzZXJFdmVudCA9PiB7XG4gICAgICAgIGlmICh1c2VyRXZlbnQgJiYgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMucXVlcnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2V0TWVzc2FnZXMoY3VycmVudCA9PiBbLi4uY3VycmVudCwgW25ld01lc3NhZ2VdXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJFdmVudCAmJiB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCA/PyAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZXRNZXNzYWdlcyhjdXJyZW50ID0+IFsuLi5jdXJyZW50LCBbbmV3TWVzc2FnZV1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckV2ZW50ICYmIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IHsgZm9ybVJlc3BvbnNlSWQsIGZpbGxlZFNjaGVtYSB9ID0gdXNlckV2ZW50LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgc2V0TWVzc2FnZXMocHJldk1lc3NhZ2VzU3RhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybVN1Ym1pdHRlZENvbnRlbnQgPSBidWlsZEZvcm1TdWJtaXR0ZWREaXNwbGF5Q29udGVudChcbiAgICAgICAgICAgICAgcHJldk1lc3NhZ2VzU3RhdGUsXG4gICAgICAgICAgICAgIGZvcm1SZXNwb25zZUlkLFxuICAgICAgICAgICAgICBmaWxsZWRTY2hlbWEsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbmV3VXNlck1lc3NhZ2UgPSBjcmVhdGVGb3JtU3VibWl0dGVkVXNlck1lc3NhZ2UodXNlckV2ZW50LCBmb3JtU3VibWl0dGVkQ29udGVudCk7XG4gICAgICAgICAgICBjb25zdCB0dXJuc1dpdGhvdXRGb3JtID0gcHJldk1lc3NhZ2VzU3RhdGVcbiAgICAgICAgICAgICAgLm1hcCh0dXJuID0+XG4gICAgICAgICAgICAgICAgdHVybi5maWx0ZXIobXNnID0+ICEobXNnLnR5cGUgPT09IE1lc3NhZ2VUeXBlLkZvcm0gJiYgbXNnLmlkID09PSBmb3JtUmVzcG9uc2VJZCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIodHVybiA9PiB0dXJuLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50dXJuc1dpdGhvdXRGb3JtLCBbbmV3VXNlck1lc3NhZ2VdXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlbmRNZXNzYWdlc1RvQmFja2VuZChcbiAgICAgICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkRXZlbnRzLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlzU2VuZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGdldFN1Z2dlc3Rpb25zKFxuICAgICAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQoe1xuICAgICAgICAgIHVzZXJFdmVudHM6IFtdLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9LCBbXG4gICAgaXNIeWRyYXRlZCxcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3VnZ2VzdGlvbnMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBzZXRNZXNzYWdlcyxcbiAgICBzZW5kTWVzc2FnZXNUb0JhY2tlbmQsXG4gICAgc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgdXNlckV2ZW50cyxcbiAgICB1c2VyUXVldWVFdmVudENvdW50LFxuICAgIHByZXZpZXdNb2RlLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0SHlkcmF0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gU2tpcCBoeWRyYXRpb24gaW4gcHJldmlldyBtb2RlXG4gICAgICBpZiAocHJldmlld01vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgICAgLy8gUmVoeWRyYXRlIGFueSBtZXNzYWdlcyBmcm9tIHRoZSBiYWNrZW5kXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaHlkcmF0ZU1lc3NhZ2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdlcnJvciBoeWRyYXRpbmcgbWVzc2FnZXMnLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNIeWRyYXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRIeWRyYXRpb24oKTtcbiAgfSwgW2lzSW5pdGlhbGl6ZWQsIGh5ZHJhdGVNZXNzYWdlcywgcHJldmlld01vZGUsIGlzSHlkcmF0ZWRdKTtcblxuICByZXR1cm4gPFNhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1bmRlZmluZWR9PntjaGlsZHJlbn08L1NhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50ID0gKGNvbnRleHRXaWRnZXQ/OiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudCk6IFNhbGVzQWdlbnQgPT4ge1xuICBjb25zdCBtZXNzYWdlcyA9IHVzZUF0b21WYWx1ZShtZXNzYWdlc0F0b20pO1xuICBjb25zdCBzdWdnZXN0aW9ucyA9IHVzZUF0b21WYWx1ZShzdWdnZXN0aW9uc0F0b20pO1xuICBjb25zdCBwZW5kaW5nTWVzc2FnZXMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgaXNSZXNwb25zZVN0cmVhbWluZyA9IHVzZUF0b21WYWx1ZShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBpc1BlbmRpbmdSZXNwb25zZSA9IHVzZUF0b21WYWx1ZShwZW5kaW5nUmVzcG9uc2VBdG9tKTtcbiAgY29uc3QgaXNMb2FkaW5nU3VnZ2VzdGlvbnMgPSB1c2VBdG9tVmFsdWUoc3VnZ2VzdGlvbnNMb2FkaW5nQXRvbSk7XG4gIGNvbnN0IGlzSW5pdGlhbGl6ZWQgPSB1c2VBdG9tVmFsdWUoaW5pdGlhbGl6ZWRBdG9tKTtcbiAgY29uc3Qge1xuICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICBsb2dVc2VyRXZlbnQsXG4gICAgb25TdWdnZXN0aW9uQ2xpY2tlZCxcbiAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICBvbkZvcm1SZXNwb25zZVN1Ym1pdHRlZCxcbiAgfSA9IHVzZVNhbGVzQWdlbnRDaGF0QVBJKGNvbnRleHRXaWRnZXQpO1xuXG4gIGNvbnN0IHNhbGVzQWdlbnQ6IFNhbGVzQWdlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICBzdWdnZXN0aW9ucyxcbiAgICAgIHBlbmRpbmdNZXNzYWdlcyxcbiAgICAgIGlzSW5pdGlhbGl6ZWQsXG4gICAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgaXNQZW5kaW5nUmVzcG9uc2UsXG4gICAgICBpc0xvYWRpbmdTdWdnZXN0aW9ucyxcbiAgICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICAgIGxvZ1VzZXJFdmVudCxcbiAgICAgIG9uU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICAgIH07XG4gIH0sIFtcbiAgICBtZXNzYWdlcyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBwZW5kaW5nTWVzc2FnZXMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nLFxuICAgIGlzUGVuZGluZ1Jlc3BvbnNlLFxuICAgIGlzTG9hZGluZ1N1Z2dlc3Rpb25zLFxuICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICBsb2dVc2VyRXZlbnQsXG4gICAgb25TdWdnZXN0aW9uQ2xpY2tlZCxcbiAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICBvbkZvcm1SZXNwb25zZVN1Ym1pdHRlZCxcbiAgXSk7XG4gIHJldHVybiBzYWxlc0FnZW50O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQW1EQSxNQUFNLDZDQUEwRCxPQUFVO0FBRTFFLE1BQU0sU0FBUyxJQUFJQSx1QkFBTyxvQkFBb0I7QUFROUMsTUFBYUMsc0JBQXlELEVBQ3BFLFVBQ0EsY0FBYyxPQUNkLGVBQ0k7Q0FDSixNQUFNLHFDQUEwQkMsd0NBQW1CO0NBQ25ELE1BQU0sOENBQW1DQyw2Q0FBd0I7Q0FDakUsTUFBTSxnREFBcUNDLDBDQUFxQjtDQUNoRSxNQUFNLENBQUMsWUFBWSxxQ0FBMEIsTUFBTTtDQUNuRCxNQUFNLENBQUMsZUFBZSx1Q0FBNEJDLDZDQUFnQjtDQUNsRSxNQUFNLGtCQUFrQkMsMkRBQTBCO0NBQ2xELE1BQU0sb0NBQXlCQywwQ0FBYTtDQUM1QyxNQUFNLHVDQUE0QkMsNkNBQWdCO0NBRWxELE1BQU0sRUFBRSx1QkFBdUIsdUJBQXVCLGdCQUFnQixvQkFDcEVDLGdEQUFzQjtDQUV4QixNQUFNLGlDQUFzQixNQUFNO0FBR2xDLDRCQUFnQjtBQUNkLE1BQUksZUFBZSxVQUFVO0FBQzNCLE9BQUksU0FBUyxTQUNYLGFBQVksU0FBUyxTQUFTO0FBRWhDLE9BQUksU0FBUyxZQUNYLGdCQUFlLFNBQVMsWUFBWTtB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
@@ -12,6 +12,7 @@ interface SalesAgent extends SalesAgentChatAPI {
12
12
  suggestions: Suggestion[];
13
13
  isResponseStreaming: boolean;
14
14
  isPendingResponse: boolean;
15
+ isLoadingSuggestions: boolean;
15
16
  isInitialized: boolean;
16
17
  }
17
18
  interface MockSalesAgentData {
@@ -27,4 +28,4 @@ declare const SalesAgentProvider: React.FC<SalesAgentProviderProps>;
27
28
  declare const useSalesAgent: (contextWidget?: WidgetInteractionComponent) => SalesAgent;
28
29
  //#endregion
29
30
  export { MockSalesAgentData, SalesAgent, SalesAgentProvider, SalesAgentProviderProps, useSalesAgent };
30
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRDb250ZXh0LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tZXNzYWdlJztcbmltcG9ydCB7IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaG9va3MvV2lkZ2V0SW50ZXJhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgU2FsZXNBZ2VudENoYXRBUEkgfSBmcm9tICcuL2NoYXRBUEknO1xuZXhwb3J0IGludGVyZmFjZSBTYWxlc0FnZW50IGV4dGVuZHMgU2FsZXNBZ2VudENoYXRBUEkge1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW11bXTtcbiAgICBwZW5kaW5nTWVzc2FnZXM6IFVzZXJFdmVudFtdO1xuICAgIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gICAgaXNSZXNwb25zZVN0cmVhbWluZzogYm9vbGVhbjtcbiAgICBpc1BlbmRpbmdSZXNwb25zZTogYm9vbGVhbjtcbiAgICBpc0luaXRpYWxpemVkOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBNb2NrU2FsZXNBZ2VudERhdGEge1xuICAgIG1lc3NhZ2VzPzogTWVzc2FnZVtdW107XG4gICAgc3VnZ2VzdGlvbnM/OiBTdWdnZXN0aW9uW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFNhbGVzQWdlbnRQcm92aWRlclByb3BzIHtcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgIHByZXZpZXdNb2RlPzogYm9vbGVhbjtcbiAgICBtb2NrRGF0YT86IE1vY2tTYWxlc0FnZW50RGF0YTtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFNhbGVzQWdlbnRQcm92aWRlcjogUmVhY3QuRkM8U2FsZXNBZ2VudFByb3ZpZGVyUHJvcHM+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlU2FsZXNBZ2VudDogKGNvbnRleHRXaWRnZXQ/OiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudCkgPT4gU2FsZXNBZ2VudDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxJQUFXLGFBQWE7Q0FBQztPQUFXO09BQWU7T0FBRztPQUFBO0NBQUE7QUFDdEQsSUFBVyxxQkFBYztDQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3pCLElBQVcsMEJBQXFCO0NBQUE7T0FBQTtPQUFBO0NBQUE7QUFDaEMsSUFBVyxxQkFBa0I7Q0FBQTtPQUFBO09BQUEsTUFBQTtDQUFBO0FBQzdCLElBQVcsZ0JBQWdCO0NBQUM7T0FBSTtPQUFBO0NBQUEifQ==
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRDb250ZXh0LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tZXNzYWdlJztcbmltcG9ydCB7IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaG9va3MvV2lkZ2V0SW50ZXJhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgU2FsZXNBZ2VudENoYXRBUEkgfSBmcm9tICcuL2NoYXRBUEknO1xuZXhwb3J0IGludGVyZmFjZSBTYWxlc0FnZW50IGV4dGVuZHMgU2FsZXNBZ2VudENoYXRBUEkge1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW11bXTtcbiAgICBwZW5kaW5nTWVzc2FnZXM6IFVzZXJFdmVudFtdO1xuICAgIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gICAgaXNSZXNwb25zZVN0cmVhbWluZzogYm9vbGVhbjtcbiAgICBpc1BlbmRpbmdSZXNwb25zZTogYm9vbGVhbjtcbiAgICBpc0xvYWRpbmdTdWdnZXN0aW9uczogYm9vbGVhbjtcbiAgICBpc0luaXRpYWxpemVkOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBNb2NrU2FsZXNBZ2VudERhdGEge1xuICAgIG1lc3NhZ2VzPzogTWVzc2FnZVtdW107XG4gICAgc3VnZ2VzdGlvbnM/OiBTdWdnZXN0aW9uW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFNhbGVzQWdlbnRQcm92aWRlclByb3BzIHtcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgIHByZXZpZXdNb2RlPzogYm9vbGVhbjtcbiAgICBtb2NrRGF0YT86IE1vY2tTYWxlc0FnZW50RGF0YTtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFNhbGVzQWdlbnRQcm92aWRlcjogUmVhY3QuRkM8U2FsZXNBZ2VudFByb3ZpZGVyUHJvcHM+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlU2FsZXNBZ2VudDogKGNvbnRleHRXaWRnZXQ/OiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudCkgPT4gU2FsZXNBZ2VudDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxJQUFXLGFBQWE7Q0FBQztPQUFXO09BQWU7T0FBRztPQUFBO0NBQUE7QUFDdEQsSUFBVyxxQkFBYztDQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3pCLElBQVcsMEJBQXFCO0NBQUE7T0FBQTtPQUFBO0NBQUE7QUFDaEMsSUFBVyxxQkFBa0I7Q0FBQTtPQUFBO09BQUEsTUFBQTtDQUFBO0FBQzdCLElBQVcsZ0JBQWdCO0NBQUM7T0FBSTtPQUFBO0NBQUEifQ==
@@ -12,6 +12,7 @@ interface SalesAgent extends SalesAgentChatAPI {
12
12
  suggestions: Suggestion[];
13
13
  isResponseStreaming: boolean;
14
14
  isPendingResponse: boolean;
15
+ isLoadingSuggestions: boolean;
15
16
  isInitialized: boolean;
16
17
  }
17
18
  interface MockSalesAgentData {
@@ -27,4 +28,4 @@ declare const SalesAgentProvider: React.FC<SalesAgentProviderProps>;
27
28
  declare const useSalesAgent: (contextWidget?: WidgetInteractionComponent) => SalesAgent;
28
29
  //#endregion
29
30
  export { MockSalesAgentData, SalesAgent, SalesAgentProvider, SalesAgentProviderProps, useSalesAgent };
30
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudENvbnRleHQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdWdnZXN0aW9uLCBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL21lc3NhZ2UnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBTYWxlc0FnZW50Q2hhdEFQSSB9IGZyb20gJy4vY2hhdEFQSSc7XG5leHBvcnQgaW50ZXJmYWNlIFNhbGVzQWdlbnQgZXh0ZW5kcyBTYWxlc0FnZW50Q2hhdEFQSSB7XG4gICAgbWVzc2FnZXM6IE1lc3NhZ2VbXVtdO1xuICAgIHBlbmRpbmdNZXNzYWdlczogVXNlckV2ZW50W107XG4gICAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nOiBib29sZWFuO1xuICAgIGlzUGVuZGluZ1Jlc3BvbnNlOiBib29sZWFuO1xuICAgIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE1vY2tTYWxlc0FnZW50RGF0YSB7XG4gICAgbWVzc2FnZXM/OiBNZXNzYWdlW11bXTtcbiAgICBzdWdnZXN0aW9ucz86IFN1Z2dlc3Rpb25bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudFByb3ZpZGVyUHJvcHMge1xuICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgcHJldmlld01vZGU/OiBib29sZWFuO1xuICAgIG1vY2tEYXRhPzogTW9ja1NhbGVzQWdlbnREYXRhO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz47XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VTYWxlc0FnZW50OiAoY29udGV4dFdpZGdldD86IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50KSA9PiBTYWxlc0FnZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLElBQVcsYUFBYTtDQUFDO09BQVc7T0FBZTtPQUFHO09BQUE7Q0FBQTtBQUN0RCxJQUFXLHFCQUFjO0NBQUE7T0FBQTtPQUFBO0NBQUE7QUFDekIsSUFBVywwQkFBcUI7Q0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNoQyxJQUFXLHFCQUFrQjtDQUFBO09BQUE7T0FBQSxNQUFBO0NBQUE7QUFDN0IsSUFBVyxnQkFBZ0I7Q0FBQztPQUFJO09BQUE7Q0FBQSJ9
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudENvbnRleHQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdWdnZXN0aW9uLCBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL21lc3NhZ2UnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBTYWxlc0FnZW50Q2hhdEFQSSB9IGZyb20gJy4vY2hhdEFQSSc7XG5leHBvcnQgaW50ZXJmYWNlIFNhbGVzQWdlbnQgZXh0ZW5kcyBTYWxlc0FnZW50Q2hhdEFQSSB7XG4gICAgbWVzc2FnZXM6IE1lc3NhZ2VbXVtdO1xuICAgIHBlbmRpbmdNZXNzYWdlczogVXNlckV2ZW50W107XG4gICAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nOiBib29sZWFuO1xuICAgIGlzUGVuZGluZ1Jlc3BvbnNlOiBib29sZWFuO1xuICAgIGlzTG9hZGluZ1N1Z2dlc3Rpb25zOiBib29sZWFuO1xuICAgIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE1vY2tTYWxlc0FnZW50RGF0YSB7XG4gICAgbWVzc2FnZXM/OiBNZXNzYWdlW11bXTtcbiAgICBzdWdnZXN0aW9ucz86IFN1Z2dlc3Rpb25bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudFByb3ZpZGVyUHJvcHMge1xuICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgcHJldmlld01vZGU/OiBib29sZWFuO1xuICAgIG1vY2tEYXRhPzogTW9ja1NhbGVzQWdlbnREYXRhO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz47XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VTYWxlc0FnZW50OiAoY29udGV4dFdpZGdldD86IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50KSA9PiBTYWxlc0FnZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLElBQVcsYUFBYTtDQUFDO09BQVc7T0FBZTtPQUFHO09BQUE7Q0FBQTtBQUN0RCxJQUFXLHFCQUFjO0NBQUE7T0FBQTtPQUFBO0NBQUE7QUFDekIsSUFBVywwQkFBcUI7Q0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNoQyxJQUFXLHFCQUFrQjtDQUFBO09BQUE7T0FBQSxNQUFBO0NBQUE7QUFDN0IsSUFBVyxnQkFBZ0I7Q0FBQztPQUFJO09BQUE7Q0FBQSJ9
@@ -1,6 +1,6 @@
1
1
  import logger_default from "../../application/logging/logger.js";
2
2
  import { MessageRole, MessageType } from "../../application/models/message.js";
3
- import { initializedAtom, messagesAtom, pendingResponseAtom, responseStreamingAtom, suggestionsAtom } from "../../atoms/chat/chatState.js";
3
+ import { initializedAtom, messagesAtom, pendingResponseAtom, responseStreamingAtom, suggestionsAtom, suggestionsLoadingAtom } from "../../atoms/chat/chatState.js";
4
4
  import { processUserEventAtom, userEventQueueAtom, userQueueEventCountAtom } from "../../atoms/chat/messageQueue.js";
5
5
  import { useSystemSettingsContext } from "../../hooks/SystemSettingsContext/useSystemSettingsContext.js";
6
6
  import "../../hooks/SystemSettingsContext/index.js";
@@ -138,6 +138,7 @@ const useSalesAgent = (contextWidget) => {
138
138
  const pendingMessages = useAtomValue(userEventQueueAtom);
139
139
  const isResponseStreaming = useAtomValue(responseStreamingAtom);
140
140
  const isPendingResponse = useAtomValue(pendingResponseAtom);
141
+ const isLoadingSuggestions = useAtomValue(suggestionsLoadingAtom);
141
142
  const isInitialized = useAtomValue(initializedAtom);
142
143
  const { logPageVisit, logUserEvent, onSuggestionClicked, onTypedMessageSubmitted, onFormResponseSubmitted } = useSalesAgentChatAPI(contextWidget);
143
144
  return useMemo(() => {
@@ -148,6 +149,7 @@ const useSalesAgent = (contextWidget) => {
148
149
  isInitialized,
149
150
  isResponseStreaming,
150
151
  isPendingResponse,
152
+ isLoadingSuggestions,
151
153
  logPageVisit,
152
154
  logUserEvent,
153
155
  onSuggestionClicked,
@@ -161,6 +163,7 @@ const useSalesAgent = (contextWidget) => {
161
163
  isInitialized,
162
164
  isResponseStreaming,
163
165
  isPendingResponse,
166
+ isLoadingSuggestions,
164
167
  logPageVisit,
165
168
  logUserEvent,
166
169
  onSuggestionClicked,
@@ -171,4 +174,4 @@ const useSalesAgent = (contextWidget) => {
171
174
 
172
175
  //#endregion
173
176
  export { SalesAgentProvider, useSalesAgent };
174
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJTYWxlc0FnZW50UHJvdmlkZXI6IFJlYWN0LkZDPFNhbGVzQWdlbnRQcm92aWRlclByb3BzPiIsIm5ld01lc3NhZ2U6IE1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudENvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCwgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlUm9sZSwgTWVzc2FnZVR5cGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL21lc3NhZ2UnO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZWRBdG9tLFxuICBtZXNzYWdlc0F0b20sXG4gIHBlbmRpbmdSZXNwb25zZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1VzZXJFdmVudEF0b20sXG4gIHVzZXJFdmVudFF1ZXVlQXRvbSxcbiAgdXNlclF1ZXVlRXZlbnRDb3VudEF0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L21lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQgfSBmcm9tICcuLi8uLi9ob29rcy9TeXN0ZW1TZXR0aW5nc0NvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBTYWxlc0FnZW50Q2hhdEFQSSwgdXNlU2FsZXNBZ2VudENoYXRBUEkgfSBmcm9tICcuL2NoYXRBUEknO1xuaW1wb3J0IHtcbiAgYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQsXG4gIGNyZWF0ZUZvcm1TdWJtaXR0ZWRVc2VyTWVzc2FnZSxcbn0gZnJvbSAnLi9mb3JtU3VibWl0dGVkVXRpbHMnO1xuaW1wb3J0IHsgdXNlU2FsZXNBZ2VudFNlcnZpY2UgfSBmcm9tICcuL3NhbGVzQWdlbnRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBTYWxlc0FnZW50IGV4dGVuZHMgU2FsZXNBZ2VudENoYXRBUEkge1xuICAvLyBNZXNzYWdlcyBhcmUgdGhlIGZ1bGwgbGlzdCBvZiBhbGwgdHVybnNcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVtdO1xuICAvLyBQZW5kaW5nIG1lc3NhZ2VzIGFyZSBtZXNzYWdlcyB0aGF0IHRoZSB1c2VyIGhhcyBjbGlja2VkL3R5cGVkIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiBzZW50IHRvIHRoZSBiYWNrZW5kLlxuICBwZW5kaW5nTWVzc2FnZXM6IFVzZXJFdmVudFtdO1xuICAvLyBTdWdnZXN0aW9ucyBhcmUgdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgdGhhdCB0aGUgdXNlciBjYW4gY2xpY2sgb24gaW4gcmVzcG9uc2UgdG8gdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2UgZnJvbSB0aGUgYmFja2VuZFxuICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBzdHJlYW1pbmcgZnJvbSB0aGUgYmFja2VuZFxuICBpc1Jlc3BvbnNlU3RyZWFtaW5nOiBib29sZWFuO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBwZW5kaW5nIGZyb20gdGhlIGJhY2tlbmRcbiAgaXNQZW5kaW5nUmVzcG9uc2U6IGJvb2xlYW47XG4gIC8vIFRydWUgd2hlbiB0aGUgc2FsZXMgYWdlbnQgaXMgaW5pdGlhbGl6ZWRcbiAgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2NrU2FsZXNBZ2VudERhdGEge1xuICBtZXNzYWdlcz86IE1lc3NhZ2VbXVtdO1xuICBzdWdnZXN0aW9ucz86IFN1Z2dlc3Rpb25bXTtcbn1cblxuY29uc3QgU2FsZXNBZ2VudENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNhbGVzQWdlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ3NhbGVzQWdlbnRDb250ZXh0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudFByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBwcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gIG1vY2tEYXRhPzogTW9ja1NhbGVzQWdlbnREYXRhO1xufVxuXG5leHBvcnQgY29uc3QgU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgcHJldmlld01vZGUgPSBmYWxzZSxcbiAgbW9ja0RhdGEsXG59KSA9PiB7XG4gIGNvbnN0IHVzZXJFdmVudHMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgdXNlclF1ZXVlRXZlbnRDb3VudCA9IHVzZUF0b21WYWx1ZSh1c2VyUXVldWVFdmVudENvdW50QXRvbSk7XG4gIGNvbnN0IG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkID0gdXNlU2V0QXRvbShwcm9jZXNzVXNlckV2ZW50QXRvbSk7XG4gIGNvbnN0IFtpc0h5ZHJhdGVkLCBzZXRJc0h5ZHJhdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzSW5pdGlhbGl6ZWQsIHNldElzSW5pdGlhbGl6ZWRdID0gdXNlQXRvbShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCBzZXR0aW5nc0NvbnRleHQgPSB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQoKTtcbiAgY29uc3Qgc2V0TWVzc2FnZXMgPSB1c2VTZXRBdG9tKG1lc3NhZ2VzQXRvbSk7XG4gIGNvbnN0IHNldFN1Z2dlc3Rpb25zID0gdXNlU2V0QXRvbShzdWdnZXN0aW9uc0F0b20pO1xuXG4gIGNvbnN0IHsgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLCBjcmVhdGVSZXNwb25zZVBheWxvYWQsIGdldFN1Z2dlc3Rpb25zLCBoeWRyYXRlTWVzc2FnZXMgfSA9XG4gICAgdXNlU2FsZXNBZ2VudFNlcnZpY2UoKTtcblxuICBjb25zdCBpc1NlbmRpbmdSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIEluaXRpYWxpemUgd2l0aCBtb2NrIGRhdGEgaW4gcHJldmlldyBtb2RlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZXZpZXdNb2RlICYmIG1vY2tEYXRhKSB7XG4gICAgICBpZiAobW9ja0RhdGEubWVzc2FnZXMpIHtcbiAgICAgICAgc2V0TWVzc2FnZXMobW9ja0RhdGEubWVzc2FnZXMpO1xuICAgICAgfVxuICAgICAgaWYgKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKTtcbiAgICAgIH1cbiAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbcHJldmlld01vZGUsIG1vY2tEYXRhLCBzZXRNZXNzYWdlcywgc2V0U3VnZ2VzdGlvbnMsIHNldElzSW5pdGlhbGl6ZWRdKTtcblxuICAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbXBsaXR1ZGUgZXZlbnRzIGFyZSBiZWluZyBlbWl0dGVkXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBzdHJlYW1pbmcgcmVzcG9uc2VzIHRvIGZ1bmN0aW9uXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBoeWRyYXRpb24gb2YgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmQgb24gaW5pdGlhbGl6YXRpb25cbiAgY29uc3Qgc2VuZE1lc3NhZ2VzVG9CYWNrZW5kID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlcXVlc3RQYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdldFN0cmVhbWluZ1Jlc3BvbnNlcyhyZXF1ZXN0UGF5bG9hZCk7XG4gICAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwZW5kaW5nIG1lc3NhZ2UgZnJvbSB0aGUgdXNlciBldmVudHNcbiAgICAgICAgcmVxdWVzdFBheWxvYWQudXNlckV2ZW50cz8ubWFwKHVzZXJFdmVudCA9PiBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZChbdXNlckV2ZW50LmV2ZW50SWRdKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIubG9nRXJyb3IoJ2Vycm9yIHNlbmRpbmcgbWVzc2FnZScsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXRTdHJlYW1pbmdSZXNwb25zZXMsIHNldElzSW5pdGlhbGl6ZWQsIG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkXSxcbiAgKTtcblxuICAvLyBUaGlzIGlzIHRoZSBwcmltYXJ5IGV2ZW50IGxvb3AgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCBBUElcbiAgLy8gSXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSBiYWNrZW5kXG4gIC8vIEl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdGhlIG1lc3NhZ2VzIHRvIHRoZSBiYWNrZW5kIGFuZCByZWNlaXZpbmcgdGhlIHJlc3BvbnNlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNraXAgYmFja2VuZCBjb21tdW5pY2F0aW9uIGluIHByZXZpZXcgbW9kZVxuICAgIGlmIChwcmV2aWV3TW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBXYWl0IGZvciB0aGUgbWVzc2FnZXMgdG8gYmUgaHlkcmF0ZWQgYmVmb3JlIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIGJhY2tlbmRcbiAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodXNlclF1ZXVlRXZlbnRDb3VudCA+IDAgJiYgIWlzU2VuZGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICBpc1NlbmRpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICBjb25zdCBwYXlsb2FkRXZlbnRzID0gdXNlckV2ZW50cy5zbGljZSgwLCB1c2VyUXVldWVFdmVudENvdW50KTtcblxuICAgICAgcGF5bG9hZEV2ZW50cy5mb3JFYWNoKHVzZXJFdmVudCA9PiB7XG4gICAgICAgIGlmICh1c2VyRXZlbnQgJiYgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMucXVlcnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2V0TWVzc2FnZXMoY3VycmVudCA9PiBbLi4uY3VycmVudCwgW25ld01lc3NhZ2VdXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJFdmVudCAmJiB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCA/PyAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZXRNZXNzYWdlcyhjdXJyZW50ID0+IFsuLi5jdXJyZW50LCBbbmV3TWVzc2FnZV1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckV2ZW50ICYmIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IHsgZm9ybVJlc3BvbnNlSWQsIGZpbGxlZFNjaGVtYSB9ID0gdXNlckV2ZW50LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgc2V0TWVzc2FnZXMocHJldk1lc3NhZ2VzU3RhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybVN1Ym1pdHRlZENvbnRlbnQgPSBidWlsZEZvcm1TdWJtaXR0ZWREaXNwbGF5Q29udGVudChcbiAgICAgICAgICAgICAgcHJldk1lc3NhZ2VzU3RhdGUsXG4gICAgICAgICAgICAgIGZvcm1SZXNwb25zZUlkLFxuICAgICAgICAgICAgICBmaWxsZWRTY2hlbWEsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbmV3VXNlck1lc3NhZ2UgPSBjcmVhdGVGb3JtU3VibWl0dGVkVXNlck1lc3NhZ2UodXNlckV2ZW50LCBmb3JtU3VibWl0dGVkQ29udGVudCk7XG4gICAgICAgICAgICBjb25zdCB0dXJuc1dpdGhvdXRGb3JtID0gcHJldk1lc3NhZ2VzU3RhdGVcbiAgICAgICAgICAgICAgLm1hcCh0dXJuID0+XG4gICAgICAgICAgICAgICAgdHVybi5maWx0ZXIobXNnID0+ICEobXNnLnR5cGUgPT09IE1lc3NhZ2VUeXBlLkZvcm0gJiYgbXNnLmlkID09PSBmb3JtUmVzcG9uc2VJZCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIodHVybiA9PiB0dXJuLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50dXJuc1dpdGhvdXRGb3JtLCBbbmV3VXNlck1lc3NhZ2VdXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlbmRNZXNzYWdlc1RvQmFja2VuZChcbiAgICAgICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkRXZlbnRzLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlzU2VuZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGdldFN1Z2dlc3Rpb25zKFxuICAgICAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQoe1xuICAgICAgICAgIHVzZXJFdmVudHM6IFtdLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9LCBbXG4gICAgaXNIeWRyYXRlZCxcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3VnZ2VzdGlvbnMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBzZXRNZXNzYWdlcyxcbiAgICBzZW5kTWVzc2FnZXNUb0JhY2tlbmQsXG4gICAgc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgdXNlckV2ZW50cyxcbiAgICB1c2VyUXVldWVFdmVudENvdW50LFxuICAgIHByZXZpZXdNb2RlLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0SHlkcmF0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gU2tpcCBoeWRyYXRpb24gaW4gcHJldmlldyBtb2RlXG4gICAgICBpZiAocHJldmlld01vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgICAgLy8gUmVoeWRyYXRlIGFueSBtZXNzYWdlcyBmcm9tIHRoZSBiYWNrZW5kXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaHlkcmF0ZU1lc3NhZ2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdlcnJvciBoeWRyYXRpbmcgbWVzc2FnZXMnLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNIeWRyYXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRIeWRyYXRpb24oKTtcbiAgfSwgW2lzSW5pdGlhbGl6ZWQsIGh5ZHJhdGVNZXNzYWdlcywgcHJldmlld01vZGUsIGlzSHlkcmF0ZWRdKTtcblxuICByZXR1cm4gPFNhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1bmRlZmluZWR9PntjaGlsZHJlbn08L1NhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50ID0gKGNvbnRleHRXaWRnZXQ/OiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudCk6IFNhbGVzQWdlbnQgPT4ge1xuICBjb25zdCBtZXNzYWdlcyA9IHVzZUF0b21WYWx1ZShtZXNzYWdlc0F0b20pO1xuICBjb25zdCBzdWdnZXN0aW9ucyA9IHVzZUF0b21WYWx1ZShzdWdnZXN0aW9uc0F0b20pO1xuICBjb25zdCBwZW5kaW5nTWVzc2FnZXMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgaXNSZXNwb25zZVN0cmVhbWluZyA9IHVzZUF0b21WYWx1ZShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBpc1BlbmRpbmdSZXNwb25zZSA9IHVzZUF0b21WYWx1ZShwZW5kaW5nUmVzcG9uc2VBdG9tKTtcbiAgY29uc3QgaXNJbml0aWFsaXplZCA9IHVzZUF0b21WYWx1ZShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCB7XG4gICAgbG9nUGFnZVZpc2l0LFxuICAgIGxvZ1VzZXJFdmVudCxcbiAgICBvblN1Z2dlc3Rpb25DbGlja2VkLFxuICAgIG9uVHlwZWRNZXNzYWdlU3VibWl0dGVkLFxuICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICB9ID0gdXNlU2FsZXNBZ2VudENoYXRBUEkoY29udGV4dFdpZGdldCk7XG5cbiAgY29uc3Qgc2FsZXNBZ2VudDogU2FsZXNBZ2VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcGVuZGluZ01lc3NhZ2VzLFxuICAgICAgaXNJbml0aWFsaXplZCxcbiAgICAgIGlzUmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICBpc1BlbmRpbmdSZXNwb25zZSxcbiAgICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICAgIGxvZ1VzZXJFdmVudCxcbiAgICAgIG9uU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICAgIH07XG4gIH0sIFtcbiAgICBtZXNzYWdlcyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBwZW5kaW5nTWVzc2FnZXMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nLFxuICAgIGlzUGVuZGluZ1Jlc3BvbnNlLFxuICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICBsb2dVc2VyRXZlbnQsXG4gICAgb25TdWdnZXN0aW9uQ2xpY2tlZCxcbiAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICBvbkZvcm1SZXNwb25zZVN1Ym1pdHRlZCxcbiAgXSk7XG4gIHJldHVybiBzYWxlc0FnZW50O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBK0NBLE1BQU0sb0JBQW9CLGNBQXNDLE9BQVU7QUFFMUUsTUFBTSxTQUFTLElBQUlBLGVBQU8sb0JBQW9CO0FBUTlDLE1BQWFDLHNCQUF5RCxFQUNwRSxVQUNBLGNBQWMsT0FDZCxlQUNJO0NBQ0osTUFBTSxhQUFhLGFBQWEsbUJBQW1CO0NBQ25ELE1BQU0sc0JBQXNCLGFBQWEsd0JBQXdCO0NBQ2pFLE1BQU0sMEJBQTBCLFdBQVcscUJBQXFCO0NBQ2hFLE1BQU0sQ0FBQyxZQUFZLGlCQUFpQixTQUFTLE1BQU07Q0FDbkQsTUFBTSxDQUFDLGVBQWUsb0JBQW9CLFFBQVEsZ0JBQWdCO0NBQ2xFLE1BQU0sa0JBQWtCLDBCQUEwQjtDQUNsRCxNQUFNLGNBQWMsV0FBVyxhQUFhO0NBQzVDLE1BQU0saUJBQWlCLFdBQVcsZ0JBQWdCO0NBRWxELE1BQU0sRUFBRSx1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
177
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJTYWxlc0FnZW50UHJvdmlkZXI6IFJlYWN0LkZDPFNhbGVzQWdlbnRQcm92aWRlclByb3BzPiIsIm5ld01lc3NhZ2U6IE1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudENvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCwgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlUm9sZSwgTWVzc2FnZVR5cGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL21lc3NhZ2UnO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZWRBdG9tLFxuICBtZXNzYWdlc0F0b20sXG4gIHBlbmRpbmdSZXNwb25zZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxuICBzdWdnZXN0aW9uc0xvYWRpbmdBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1VzZXJFdmVudEF0b20sXG4gIHVzZXJFdmVudFF1ZXVlQXRvbSxcbiAgdXNlclF1ZXVlRXZlbnRDb3VudEF0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L21lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQgfSBmcm9tICcuLi8uLi9ob29rcy9TeXN0ZW1TZXR0aW5nc0NvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBTYWxlc0FnZW50Q2hhdEFQSSwgdXNlU2FsZXNBZ2VudENoYXRBUEkgfSBmcm9tICcuL2NoYXRBUEknO1xuaW1wb3J0IHtcbiAgYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQsXG4gIGNyZWF0ZUZvcm1TdWJtaXR0ZWRVc2VyTWVzc2FnZSxcbn0gZnJvbSAnLi9mb3JtU3VibWl0dGVkVXRpbHMnO1xuaW1wb3J0IHsgdXNlU2FsZXNBZ2VudFNlcnZpY2UgfSBmcm9tICcuL3NhbGVzQWdlbnRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBTYWxlc0FnZW50IGV4dGVuZHMgU2FsZXNBZ2VudENoYXRBUEkge1xuICAvLyBNZXNzYWdlcyBhcmUgdGhlIGZ1bGwgbGlzdCBvZiBhbGwgdHVybnNcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVtdO1xuICAvLyBQZW5kaW5nIG1lc3NhZ2VzIGFyZSBtZXNzYWdlcyB0aGF0IHRoZSB1c2VyIGhhcyBjbGlja2VkL3R5cGVkIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiBzZW50IHRvIHRoZSBiYWNrZW5kLlxuICBwZW5kaW5nTWVzc2FnZXM6IFVzZXJFdmVudFtdO1xuICAvLyBTdWdnZXN0aW9ucyBhcmUgdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgdGhhdCB0aGUgdXNlciBjYW4gY2xpY2sgb24gaW4gcmVzcG9uc2UgdG8gdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2UgZnJvbSB0aGUgYmFja2VuZFxuICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBzdHJlYW1pbmcgZnJvbSB0aGUgYmFja2VuZFxuICBpc1Jlc3BvbnNlU3RyZWFtaW5nOiBib29sZWFuO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBwZW5kaW5nIGZyb20gdGhlIGJhY2tlbmRcbiAgaXNQZW5kaW5nUmVzcG9uc2U6IGJvb2xlYW47XG4gIC8vIFRydWUgd2hpbGUgc3VnZ2VzdGlvbnMgZm9yIHRoZSBtb3N0IHJlY2VudCBtZXNzYWdlIGFyZSBiZWluZyBmZXRjaGVkIChzZXBhcmF0ZSBmcm9tIHRoZVxuICAvLyBtZXNzYWdlIHJlc3BvbnNlIGl0c2VsZiDigJQgc3VnZ2VzdGlvbnMgYXJlIHJlcXVlc3RlZCBhcyBhIGZvbGxvdy11cCBjYWxsIG9uY2UgaXQgY29tcGxldGVzKVxuICBpc0xvYWRpbmdTdWdnZXN0aW9uczogYm9vbGVhbjtcbiAgLy8gVHJ1ZSB3aGVuIHRoZSBzYWxlcyBhZ2VudCBpcyBpbml0aWFsaXplZFxuICBpc0luaXRpYWxpemVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tTYWxlc0FnZW50RGF0YSB7XG4gIG1lc3NhZ2VzPzogTWVzc2FnZVtdW107XG4gIHN1Z2dlc3Rpb25zPzogU3VnZ2VzdGlvbltdO1xufVxuXG5jb25zdCBTYWxlc0FnZW50Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2FsZXNBZ2VudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignc2FsZXNBZ2VudENvbnRleHQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTYWxlc0FnZW50UHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHByZXZpZXdNb2RlPzogYm9vbGVhbjtcbiAgbW9ja0RhdGE/OiBNb2NrU2FsZXNBZ2VudERhdGE7XG59XG5cbmV4cG9ydCBjb25zdCBTYWxlc0FnZW50UHJvdmlkZXI6IFJlYWN0LkZDPFNhbGVzQWdlbnRQcm92aWRlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBwcmV2aWV3TW9kZSA9IGZhbHNlLFxuICBtb2NrRGF0YSxcbn0pID0+IHtcbiAgY29uc3QgdXNlckV2ZW50cyA9IHVzZUF0b21WYWx1ZSh1c2VyRXZlbnRRdWV1ZUF0b20pO1xuICBjb25zdCB1c2VyUXVldWVFdmVudENvdW50ID0gdXNlQXRvbVZhbHVlKHVzZXJRdWV1ZUV2ZW50Q291bnRBdG9tKTtcbiAgY29uc3QgbWFya1VzZXJFdmVudHNQcm9jZXNzZWQgPSB1c2VTZXRBdG9tKHByb2Nlc3NVc2VyRXZlbnRBdG9tKTtcbiAgY29uc3QgW2lzSHlkcmF0ZWQsIHNldElzSHlkcmF0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNJbml0aWFsaXplZCwgc2V0SXNJbml0aWFsaXplZF0gPSB1c2VBdG9tKGluaXRpYWxpemVkQXRvbSk7XG4gIGNvbnN0IHNldHRpbmdzQ29udGV4dCA9IHVzZVN5c3RlbVNldHRpbmdzQ29udGV4dCgpO1xuICBjb25zdCBzZXRNZXNzYWdlcyA9IHVzZVNldEF0b20obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0U3VnZ2VzdGlvbnMgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zQXRvbSk7XG5cbiAgY29uc3QgeyBnZXRTdHJlYW1pbmdSZXNwb25zZXMsIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCwgZ2V0U3VnZ2VzdGlvbnMsIGh5ZHJhdGVNZXNzYWdlcyB9ID1cbiAgICB1c2VTYWxlc0FnZW50U2VydmljZSgpO1xuXG4gIGNvbnN0IGlzU2VuZGluZ1JlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB3aXRoIG1vY2sgZGF0YSBpbiBwcmV2aWV3IG1vZGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmlld01vZGUgJiYgbW9ja0RhdGEpIHtcbiAgICAgIGlmIChtb2NrRGF0YS5tZXNzYWdlcykge1xuICAgICAgICBzZXRNZXNzYWdlcyhtb2NrRGF0YS5tZXNzYWdlcyk7XG4gICAgICB9XG4gICAgICBpZiAobW9ja0RhdGEuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgc2V0U3VnZ2VzdGlvbnMobW9ja0RhdGEuc3VnZ2VzdGlvbnMpO1xuICAgICAgfVxuICAgICAgc2V0SXNJbml0aWFsaXplZCh0cnVlKTtcbiAgICB9XG4gIH0sIFtwcmV2aWV3TW9kZSwgbW9ja0RhdGEsIHNldE1lc3NhZ2VzLCBzZXRTdWdnZXN0aW9ucywgc2V0SXNJbml0aWFsaXplZF0pO1xuXG4gIC8vIFRPRE86IEVuc3VyZSB0aGF0IGFtcGxpdHVkZSBldmVudHMgYXJlIGJlaW5nIGVtaXR0ZWRcblxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIHN0cmVhbWluZyByZXNwb25zZXMgdG8gZnVuY3Rpb25cblxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGh5ZHJhdGlvbiBvZiB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgYmFja2VuZCBvbiBpbml0aWFsaXphdGlvblxuICBjb25zdCBzZW5kTWVzc2FnZXNUb0JhY2tlbmQgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVxdWVzdFBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzKHJlcXVlc3RQYXlsb2FkKTtcbiAgICAgICAgc2V0SXNJbml0aWFsaXplZCh0cnVlKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhlIHBlbmRpbmcgbWVzc2FnZSBmcm9tIHRoZSB1c2VyIGV2ZW50c1xuICAgICAgICByZXF1ZXN0UGF5bG9hZC51c2VyRXZlbnRzPy5tYXAodXNlckV2ZW50ID0+IG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkKFt1c2VyRXZlbnQuZXZlbnRJZF0pKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignZXJyb3Igc2VuZGluZyBtZXNzYWdlJywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2dldFN0cmVhbWluZ1Jlc3BvbnNlcywgc2V0SXNJbml0aWFsaXplZCwgbWFya1VzZXJFdmVudHNQcm9jZXNzZWRdLFxuICApO1xuXG4gIC8vIFRoaXMgaXMgdGhlIHByaW1hcnkgZXZlbnQgbG9vcCBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBiYWNrZW5kIEFQSVxuICAvLyBJdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZXJlIGFyZSBwZW5kaW5nIG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIGJhY2tlbmRcbiAgLy8gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3Igc2VuZGluZyB0aGUgbWVzc2FnZXMgdG8gdGhlIGJhY2tlbmQgYW5kIHJlY2VpdmluZyB0aGUgcmVzcG9uc2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2tpcCBiYWNrZW5kIGNvbW11bmljYXRpb24gaW4gcHJldmlldyBtb2RlXG4gICAgaWYgKHByZXZpZXdNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFdhaXQgZm9yIHRoZSBtZXNzYWdlcyB0byBiZSBoeWRyYXRlZCBiZWZvcmUgc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgYmFja2VuZFxuICAgIGlmICghaXNIeWRyYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh1c2VyUXVldWVFdmVudENvdW50ID4gMCAmJiAhaXNTZW5kaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU2VuZGluZ1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBheWxvYWRFdmVudHMgPSB1c2VyRXZlbnRzLnNsaWNlKDAsIHVzZXJRdWV1ZUV2ZW50Q291bnQpO1xuXG4gICAgICBwYXlsb2FkRXZlbnRzLmZvckVhY2godXNlckV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHVzZXJFdmVudCAmJiB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgICAgICAgaWQ6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgICAgICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICAgICAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQsXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHVzZXJFdmVudC5jcmVhdGVkQXQsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBjb250ZW50OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZXRNZXNzYWdlcyhjdXJyZW50ID0+IFsuLi5jdXJyZW50LCBbbmV3TWVzc2FnZV1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckV2ZW50ICYmIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgICAgICAgaWQ6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgICAgICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICAgICAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQsXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHVzZXJFdmVudC5jcmVhdGVkQXQsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBjb250ZW50OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5jb250ZW50ID8/ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNldE1lc3NhZ2VzKGN1cnJlbnQgPT4gWy4uLmN1cnJlbnQsIFtuZXdNZXNzYWdlXV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VyRXZlbnQgJiYgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkKSB7XG4gICAgICAgICAgY29uc3QgeyBmb3JtUmVzcG9uc2VJZCwgZmlsbGVkU2NoZW1hIH0gPSB1c2VyRXZlbnQuYXR0cmlidXRlcztcbiAgICAgICAgICBzZXRNZXNzYWdlcyhwcmV2TWVzc2FnZXNTdGF0ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtU3VibWl0dGVkQ29udGVudCA9IGJ1aWxkRm9ybVN1Ym1pdHRlZERpc3BsYXlDb250ZW50KFxuICAgICAgICAgICAgICBwcmV2TWVzc2FnZXNTdGF0ZSxcbiAgICAgICAgICAgICAgZm9ybVJlc3BvbnNlSWQsXG4gICAgICAgICAgICAgIGZpbGxlZFNjaGVtYSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBuZXdVc2VyTWVzc2FnZSA9IGNyZWF0ZUZvcm1TdWJtaXR0ZWRVc2VyTWVzc2FnZSh1c2VyRXZlbnQsIGZvcm1TdWJtaXR0ZWRDb250ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHR1cm5zV2l0aG91dEZvcm0gPSBwcmV2TWVzc2FnZXNTdGF0ZVxuICAgICAgICAgICAgICAubWFwKHR1cm4gPT5cbiAgICAgICAgICAgICAgICB0dXJuLmZpbHRlcihtc2cgPT4gIShtc2cudHlwZSA9PT0gTWVzc2FnZVR5cGUuRm9ybSAmJiBtc2cuaWQgPT09IGZvcm1SZXNwb25zZUlkKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcih0dXJuID0+IHR1cm4ubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnR1cm5zV2l0aG91dEZvcm0sIFtuZXdVc2VyTWVzc2FnZV1dO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VuZE1lc3NhZ2VzVG9CYWNrZW5kKFxuICAgICAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQoe1xuICAgICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWRFdmVudHMsXG4gICAgICAgICAgZ2VuZXJhdGlvblBhcmFtczogc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgICAgIH0pLFxuICAgICAgKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaXNTZW5kaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsaXplZCkge1xuICAgICAgZ2V0U3VnZ2VzdGlvbnMoXG4gICAgICAgIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCh7XG4gICAgICAgICAgdXNlckV2ZW50czogW10sXG4gICAgICAgICAgZ2VuZXJhdGlvblBhcmFtczogc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH0sIFtcbiAgICBpc0h5ZHJhdGVkLFxuICAgIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCxcbiAgICBnZXRTdWdnZXN0aW9ucyxcbiAgICBpc0luaXRpYWxpemVkLFxuICAgIHNldE1lc3NhZ2VzLFxuICAgIHNlbmRNZXNzYWdlc1RvQmFja2VuZCxcbiAgICBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgICB1c2VyRXZlbnRzLFxuICAgIHVzZXJRdWV1ZUV2ZW50Q291bnQsXG4gICAgcHJldmlld01vZGUsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRIeWRyYXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTa2lwIGh5ZHJhdGlvbiBpbiBwcmV2aWV3IG1vZGVcbiAgICAgIGlmIChwcmV2aWV3TW9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNIeWRyYXRlZCkge1xuICAgICAgICAvLyBSZWh5ZHJhdGUgYW55IG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoeWRyYXRlTWVzc2FnZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIubG9nRXJyb3IoJ2Vycm9yIGh5ZHJhdGluZyBtZXNzYWdlcycsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc0h5ZHJhdGVkKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBzdGFydEh5ZHJhdGlvbigpO1xuICB9LCBbaXNJbml0aWFsaXplZCwgaHlkcmF0ZU1lc3NhZ2VzLCBwcmV2aWV3TW9kZSwgaXNIeWRyYXRlZF0pO1xuXG4gIHJldHVybiA8U2FsZXNBZ2VudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3VuZGVmaW5lZH0+e2NoaWxkcmVufTwvU2FsZXNBZ2VudENvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVNhbGVzQWdlbnQgPSAoY29udGV4dFdpZGdldD86IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50KTogU2FsZXNBZ2VudCA9PiB7XG4gIGNvbnN0IG1lc3NhZ2VzID0gdXNlQXRvbVZhbHVlKG1lc3NhZ2VzQXRvbSk7XG4gIGNvbnN0IHN1Z2dlc3Rpb25zID0gdXNlQXRvbVZhbHVlKHN1Z2dlc3Rpb25zQXRvbSk7XG4gIGNvbnN0IHBlbmRpbmdNZXNzYWdlcyA9IHVzZUF0b21WYWx1ZSh1c2VyRXZlbnRRdWV1ZUF0b20pO1xuICBjb25zdCBpc1Jlc3BvbnNlU3RyZWFtaW5nID0gdXNlQXRvbVZhbHVlKHJlc3BvbnNlU3RyZWFtaW5nQXRvbSk7XG4gIGNvbnN0IGlzUGVuZGluZ1Jlc3BvbnNlID0gdXNlQXRvbVZhbHVlKHBlbmRpbmdSZXNwb25zZUF0b20pO1xuICBjb25zdCBpc0xvYWRpbmdTdWdnZXN0aW9ucyA9IHVzZUF0b21WYWx1ZShzdWdnZXN0aW9uc0xvYWRpbmdBdG9tKTtcbiAgY29uc3QgaXNJbml0aWFsaXplZCA9IHVzZUF0b21WYWx1ZShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCB7XG4gICAgbG9nUGFnZVZpc2l0LFxuICAgIGxvZ1VzZXJFdmVudCxcbiAgICBvblN1Z2dlc3Rpb25DbGlja2VkLFxuICAgIG9uVHlwZWRNZXNzYWdlU3VibWl0dGVkLFxuICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICB9ID0gdXNlU2FsZXNBZ2VudENoYXRBUEkoY29udGV4dFdpZGdldCk7XG5cbiAgY29uc3Qgc2FsZXNBZ2VudDogU2FsZXNBZ2VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcGVuZGluZ01lc3NhZ2VzLFxuICAgICAgaXNJbml0aWFsaXplZCxcbiAgICAgIGlzUmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICBpc1BlbmRpbmdSZXNwb25zZSxcbiAgICAgIGlzTG9hZGluZ1N1Z2dlc3Rpb25zLFxuICAgICAgbG9nUGFnZVZpc2l0LFxuICAgICAgbG9nVXNlckV2ZW50LFxuICAgICAgb25TdWdnZXN0aW9uQ2xpY2tlZCxcbiAgICAgIG9uVHlwZWRNZXNzYWdlU3VibWl0dGVkLFxuICAgICAgb25Gb3JtUmVzcG9uc2VTdWJtaXR0ZWQsXG4gICAgfTtcbiAgfSwgW1xuICAgIG1lc3NhZ2VzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIHBlbmRpbmdNZXNzYWdlcyxcbiAgICBpc0luaXRpYWxpemVkLFxuICAgIGlzUmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgaXNQZW5kaW5nUmVzcG9uc2UsXG4gICAgaXNMb2FkaW5nU3VnZ2VzdGlvbnMsXG4gICAgbG9nUGFnZVZpc2l0LFxuICAgIGxvZ1VzZXJFdmVudCxcbiAgICBvblN1Z2dlc3Rpb25DbGlja2VkLFxuICAgIG9uVHlwZWRNZXNzYWdlU3VibWl0dGVkLFxuICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICBdKTtcbiAgcmV0dXJuIHNhbGVzQWdlbnQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7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
@@ -11,11 +11,11 @@ const require_atoms_app_index = require('../../atoms/app/index.cjs');
11
11
  const require_resolvedBaseConfigVersion = require('../../atoms/envive/resolvedBaseConfigVersion.cjs');
12
12
  const require_application_commerce_api = require('../../application/commerce-api.cjs');
13
13
  const require_useMessageInterceptor = require('../../interceptors/useMessageInterceptor.cjs');
14
+ const require_atoms_chat_chatState = require('../../atoms/chat/chatState.cjs');
14
15
  const require_featureFlagServiceContext = require('../featureFlagServiceContext/featureFlagServiceContext.cjs');
15
16
  const require_amplitudeContext = require('../amplitudeContext/amplitudeContext.cjs');
16
17
  require('../amplitudeContext/index.cjs');
17
18
  require('../featureFlagServiceContext/index.cjs');
18
- const require_atoms_chat_chatState = require('../../atoms/chat/chatState.cjs');
19
19
  const require_statusCodeError = require('./statusCodeError.cjs');
20
20
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
21
21
  let react = require("react");
@@ -135,6 +135,7 @@ const useSalesAgentService = () => {
135
135
  const setSuggestions = (0, jotai.useSetAtom)(require_atoms_chat_chatState.suggestionsAtom);
136
136
  const setPendingResponse = (0, jotai.useSetAtom)(require_atoms_chat_chatState.pendingResponseAtom);
137
137
  const setResponseStreaming = (0, jotai.useSetAtom)(require_atoms_chat_chatState.responseStreamingAtom);
138
+ const setSuggestionsLoading = (0, jotai.useSetAtom)(require_atoms_chat_chatState.suggestionsLoadingAtom);
138
139
  const analyticsContext = (0, jotai.useAtomValue)(require_variant.analyticsContextAtom);
139
140
  const messageInterceptor = require_useMessageInterceptor.useMessageInterceptor();
140
141
  const { trackEvent } = require_amplitudeContext.useAmplitude();
@@ -165,6 +166,7 @@ const useSalesAgentService = () => {
165
166
  let successfulResponse;
166
167
  setPendingResponse(true);
167
168
  setSuggestions([]);
169
+ setSuggestionsLoading(true);
168
170
  const stream = require_application_commerce_api.default.getNextResponseStreaming(payload);
169
171
  let responseAnalytics;
170
172
  try {
@@ -204,13 +206,19 @@ const useSalesAgentService = () => {
204
206
  setResponseStreaming,
205
207
  setRequestFailure,
206
208
  setSuggestions,
209
+ setSuggestionsLoading,
207
210
  messageInterceptor,
208
211
  setMessages,
209
212
  setPendingResponse
210
213
  ]),
211
214
  getSuggestions: (0, react.useCallback)(async (payload) => {
212
- setSuggestions(await require_application_commerce_api.default.getNextSuggestions(payload));
213
- }, [setSuggestions]),
215
+ setSuggestionsLoading(true);
216
+ try {
217
+ setSuggestions(await require_application_commerce_api.default.getNextSuggestions(payload));
218
+ } finally {
219
+ setSuggestionsLoading(false);
220
+ }
221
+ }, [setSuggestions, setSuggestionsLoading]),
214
222
  hydrateMessages: (0, react.useCallback)(async () => {
215
223
  const { orgId, chatId, userId } = context;
216
224
  const { messages: existingMessages } = await require_application_commerce_api.default.getResponses(orgId, chatId, userId);
@@ -221,4 +229,4 @@ const useSalesAgentService = () => {
221
229
 
222
230
  //#endregion
223
231
  exports.useSalesAgentService = useSalesAgentService;
224
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJTdGF0dXNDb2RlRXJyb3IiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+IiwibWVzc2FnZUZyb21SZXNwb25zZSIsImVycm9yOiB1bmtub3duIiwidXNlU2FsZXNBZ2VudFNlcnZpY2U6ICgpID0+IFNhbGVzQWdlbnRTZXJ2aWNlIiwicmVxdWVzdEZhaWx1cmVBdG9tIiwibWVzc2FnZXNBdG9tIiwic3VnZ2VzdGlvbnNBdG9tIiwicGVuZGluZ1Jlc3BvbnNlQXRvbSIsInJlc3BvbnNlU3RyZWFtaW5nQXRvbSIsImFuYWx5dGljc0NvbnRleHRBdG9tIiwidXNlTWVzc2FnZUludGVyY2VwdG9yIiwidXNlQW1wbGl0dWRlIiwidXNlRmVhdHVyZUZsYWdTZXJ2aWNlIiwiYXBwRGV0YWlsc0F0b20iLCJyZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSIsInN1Y2Nlc3NmdWxSZXNwb25zZTogYm9vbGVhbiB8IHVuZGVmaW5lZCIsIkNvbW1lcmNlQXBpQ2xpZW50IiwicmVzcG9uc2VBbmFseXRpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSIsIkVudml2ZU1ldHJpY3NFdmVudE5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudFNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgdXNlQXRvbVZhbHVlLCB1c2VTZXRBdG9tIH0gZnJvbSAnam90YWknO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQge1xuICBHZW5lcmF0aW9uUGFyYW1zLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIE5leHRNZXNzYWdlUmVxdWVzdCxcbiAgUmVzcG9uc2UsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbVJlc3BvbnNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzJztcbmltcG9ydCB7IGFwcERldGFpbHNBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyBhbmFseXRpY3NDb250ZXh0QXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAvdmFyaWFudCc7XG5pbXBvcnQgeyByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbic7XG5pbXBvcnQge1xuICBtZXNzYWdlc0F0b20sXG4gIHBlbmRpbmdSZXNwb25zZUF0b20sXG4gIHJlcXVlc3RGYWlsdXJlQXRvbSxcbiAgcmVzcG9uc2VTdHJlYW1pbmdBdG9tLFxuICBzdWdnZXN0aW9uc0F0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L2NoYXRTdGF0ZSc7XG5pbXBvcnQgeyB1c2VBbXBsaXR1ZGUgfSBmcm9tICdzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VNZXNzYWdlSW50ZXJjZXB0b3IgfSBmcm9tICdzcmMvaW50ZXJjZXB0b3JzL3VzZU1lc3NhZ2VJbnRlcmNlcHRvcic7XG5pbXBvcnQge1xuICBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxufSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgU3RhdHVzQ29kZUVycm9yIH0gZnJvbSAnLi9zdGF0dXNDb2RlRXJyb3InO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdzYWxlc0FnZW50U2VydmljZScpO1xuXG5pbnRlcmZhY2UgU2FsZXNBZ2VudFNlcnZpY2Uge1xuICBjcmVhdGVSZXNwb25zZVBheWxvYWQ6IChwYXlsb2FkOiB7XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgZ2VuZXJhdGlvblBhcmFtcz86IEdlbmVyYXRpb25QYXJhbXM7XG4gIH0pID0+IE5leHRNZXNzYWdlUmVxdWVzdDtcbiAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzOiAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdWdnZXN0aW9uczogKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaHlkcmF0ZU1lc3NhZ2VzOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jb25zdCBpbnB1dFByb3BzVG9UcmFja2luZ1Byb3BzID0gKFxuICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IFt1c2VyRXZlbnRdID0gcGF5bG9hZC51c2VyRXZlbnRzIHx8IFtdO1xuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlX2lkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgIHVzZXJfZXZlbnRfdHlwZTogJ3N1Z2dlc3Rpb25fY2xpY2tlZCcsXG4gICAgICB1c2VyX3F1ZXJ5OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5jb250ZW50LFxuICAgIH07XG4gIH1cbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlX2lkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgIHVzZXJfZXZlbnRfdHlwZTogJ3F1ZXJ5X3R5cGVkJyxcbiAgICAgIHVzZXJfcXVlcnk6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuY29uc3QgaW5wdXRQcm9wc1RvRW52aXZlVHJhY2tpbmdQcm9wcyA9IChcbiAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBbdXNlckV2ZW50XSA9IHBheWxvYWQudXNlckV2ZW50cyB8fCBbXTtcbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3N1Z2dlc3Rpb24nLFxuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90ZXh0JzogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICAgICdjaGF0LnN1Z2dlc3Rpb25faWQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5zdWdnZXN0aW9uSWQsXG4gICAgICAnY2hhdC51c2VyX3R5cGVkJzogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICd0ZXh0JyxcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdGV4dCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgJ2NoYXQudXNlcl90eXBlZCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnVzZXJUeXBlZCxcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCB8fFxuICAgIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgfHxcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBscFZpc2l0XG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAncGFnZV92aXNpdCcsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtID0gKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICByZXR1cm4gdXJsT2JqLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbn07XG5cbmNvbnN0IGdldEVycm9yTWVzc2FnZSA9IChfZXJyb3I6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBpZiAoX2Vycm9yIGluc3RhbmNlb2YgU3RhdHVzQ29kZUVycm9yKSB7XG4gICAgaWYgKF9lcnJvci5zdGF0dXNDb2RlID09PSA0MjMpIHtcbiAgICAgIHJldHVybiAnRHVlIHRvIHZpb2xhdGlvbiBvZiB0ZXJtcyBhbmQgc2VydmljZXMsIHRoaXMgc2Vzc2lvbiBoYXMgYmVlbiB0ZXJtaW5hdGVkLic7XG4gICAgfVxuICAgIC8vIEtlZXBpbmcgdGhlIDQyOSBlcnJvciBtZXNzYWdlcyBhcyB0aGUgZ2VuZXJpYyBlcnJvciBtZXNzYWdlIGZvciBub3cuXG4gICAgLy8gaWYgKF9lcnJvci5zdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAvLyAgIHJldHVybiBcIkknbSBzb3JyeSEgVGhlIHN5c3RlbSBpcyBidXN5IHJpZ2h0IG5vdy4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBtaW51dGVzLlwiO1xuICAgIC8vIH1cbiAgfVxuXG4gIHJldHVybiBcIkknbSBzb3JyeSEgSSdtIGhhdmluZyB0cm91YmxlIHJpZ2h0IG5vdy4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2Ugb3IgdHJ5IGFnYWluIGluIGEgbW9tZW50LlwiO1xufTtcblxuY29uc3QgaGFuZGxlU3RyZWFtaW5nRXJyb3IgPSAoXG4gIF9lcnJvcjogdW5rbm93bixcbiAgc2V0UmVxdWVzdEZhaWx1cmU6IChmYWlsZWQ6IGJvb2xlYW4pID0+IHZvaWQsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbikgPT4ge1xuICBzZXRSZXF1ZXN0RmFpbHVyZSh0cnVlKTtcblxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoX2Vycm9yKTtcbiAgc2V0TWVzc2FnZXMocHJldiA9PiBbXG4gICAgLi4ucHJldixcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dCxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgY29udGVudDogZXJyb3JNZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn07XG5cbmNvbnN0IHVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IChcbiAgbWVzc2FnZTogTWVzc2FnZSxcbiAgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbik6IE1lc3NhZ2UgPT4ge1xuICBpZiAobGFzdE1lc3NhZ2UgPT0gbnVsbCkge1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4gWy4uLnByZXYsIFttZXNzYWdlXV0pO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG4gIGlmIChsYXN0TWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5UZXh0ICYmIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCkge1xuICAgIGNvbnN0IG5ld01lc3NhZ2UgPSB7XG4gICAgICAuLi5sYXN0TWVzc2FnZSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLmxhc3RNZXNzYWdlLm1ldGFkYXRhLFxuICAgICAgICBjb250ZW50OiBsYXN0TWVzc2FnZS5tZXRhZGF0YS5jb250ZW50ICsgbWVzc2FnZS5tZXRhZGF0YS5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4ge1xuICAgICAgY29uc3QgbGFzdFR1cm4gPSBwcmV2W3ByZXYubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksXG4gICAgICAgIFsuLi5sYXN0VHVybi5zbGljZSgwLCBsYXN0VHVybi5sZW5ndGggLSAxKSwgbmV3TWVzc2FnZV0sXG4gICAgICBdO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICB9XG4gIHNldE1lc3NhZ2VzKHByZXYgPT4gWy4uLnByZXYuc2xpY2UoMCwgcHJldi5sZW5ndGggLSAxKSwgWy4uLnByZXZbcHJldi5sZW5ndGggLSAxXSwgbWVzc2FnZV1dKTtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG5jb25zdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UgPSBhc3luYyAoXG4gIHN0cmVhbTogQXN5bmNJdGVyYWJsZTxSZXNwb25zZT4sXG4gIG1lc3NhZ2VJbnRlcmNlcHRvcjogeyBpbnRlcmNlcHQ6IChyZXNwb25zZT86IFJlc3BvbnNlKSA9PiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbiAgc2V0UmVzcG9uc2VTdHJlYW1pbmc6IChyZXNwb25zZVN0cmVhbWluZzogYm9vbGVhbikgPT4gdm9pZCxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+PiA9PiB7XG4gIGxldCBsYXN0TWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgc2V0UmVzcG9uc2VTdHJlYW1pbmcodHJ1ZSk7XG4gIGNvbnN0IHJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmdbXT4gPSB7fTtcbiAgY29uc3QgcHJvZHVjdElkcyA9IFtdO1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2Ygc3RyZWFtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXNzYWdlSW50ZXJjZXB0b3IuaW50ZXJjZXB0KHJlc3BvbnNlKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZXNwb25zZSBmcm9tIHN0cmVhbScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwb25zZSk7XG4gICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdHJhbnNmb3JtIEFQSSByZXNwb25zZSB0byBjbGllbnQgbWVzc2FnZScpO1xuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdCkge1xuICAgICAgICBjb25zdCBjYXJkc0NvdW50ZXIgPSAocmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9jYXJkc19yZXR1cm5lZCddIGFzIG51bWJlcikgfHwgMDtcbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9jYXJkc19yZXR1cm5lZCddID0gY2FyZHNDb3VudGVyICsgMTtcblxuICAgICAgICBjb25zdCBwcm9kdWN0SWRzID0gcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9pZHNfcmV0dXJuZWQnXSBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKCFwcm9kdWN0SWRzKSB7XG4gICAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9pZHNfcmV0dXJuZWQnXSA9IFttZXNzYWdlLm1ldGFkYXRhLmlkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9kdWN0SWRzLnB1c2gobWVzc2FnZS5tZXRhZGF0YS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlJldmlldykge1xuICAgICAgICBjb25zdCBjYXJkc0NvdW50ZXIgPSAocmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gYXMgbnVtYmVyKSB8fCAwO1xuICAgICAgICByZXNwb25zZUFuYWx5dGljc1snY2hhdC5yZXZpZXdfY2FyZHNfcmV0dXJuZWQnXSA9IGNhcmRzQ291bnRlciArIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIHN1cHBvcnQgZm9yIENoYXRTZWFyY2ggbWVzc2FnZXMgYXQgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIC8vIFBlcmhhcHMgd2UgYWRkIHN1cHBvcnQgYmFjayBpbiB0aGUgZnV0dXJlXG4gICAgICAvLyBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgICAvLyAgIGhhbmRsZVNlYXJjaFJlc3VsdHMobWVzc2FnZSk7XG4gICAgICAvLyAgIGhhc1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgLy8gICBzZXRTZWFyY2hJc0xvYWRpbmcoZmFsc2UpOyAvLyBVcGRhdGUgc2VhcmNoIGxvYWRpbmcgaW1tZWRpYXRlbHkgd2hlbiByZXN1bHRzIGFyZSBkZXRlY3RlZFxuICAgICAgLy8gfVxuXG4gICAgICBsYXN0TWVzc2FnZSA9IHVwZGF0ZU1lc3NhZ2VTdGF0ZShtZXNzYWdlLCBsYXN0TWVzc2FnZSEsIHNldE1lc3NhZ2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ0ZhaWxlZCB0byBnZW5lcmF0ZSByZXNwb25zZXMgZnJvbSBzdHJlYW0nLCBlcnJvciwge1xuICAgICAgICBsYXN0UmVzcG9uc2U6IGxhc3RNZXNzYWdlLFxuICAgICAgICByZXNwb25zZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlQW5hbHl0aWNzO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVNhbGVzQWdlbnRTZXJ2aWNlOiAoKSA9PiBTYWxlc0FnZW50U2VydmljZSA9ICgpID0+IHtcbiAgY29uc3Qgc2V0UmVxdWVzdEZhaWx1cmUgPSB1c2VTZXRBdG9tKHJlcXVlc3RGYWlsdXJlQXRvbSk7XG4gIGNvbnN0IHNldE1lc3NhZ2VzID0gdXNlU2V0QXRvbShtZXNzYWdlc0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9ucyA9IHVzZVNldEF0b20oc3VnZ2VzdGlvbnNBdG9tKTtcbiAgY29uc3Qgc2V0UGVuZGluZ1Jlc3BvbnNlID0gdXNlU2V0QXRvbShwZW5kaW5nUmVzcG9uc2VBdG9tKTtcbiAgY29uc3Qgc2V0UmVzcG9uc2VTdHJlYW1pbmcgPSB1c2VTZXRBdG9tKHJlc3BvbnNlU3RyZWFtaW5nQXRvbSk7XG4gIGNvbnN0IGFuYWx5dGljc0NvbnRleHQgPSB1c2VBdG9tVmFsdWUoYW5hbHl0aWNzQ29udGV4dEF0b20pO1xuICBjb25zdCBtZXNzYWdlSW50ZXJjZXB0b3IgPSB1c2VNZXNzYWdlSW50ZXJjZXB0b3IoKTtcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcblxuICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UoKTtcbiAgY29uc3QgY29udGV4dCA9IHVzZUF0b21WYWx1ZShhcHBEZXRhaWxzQXRvbSk7XG4gIGNvbnN0IHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb24gPSB1c2VBdG9tVmFsdWUocmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbkF0b20pO1xuXG4gIGNvbnN0IGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgICh7XG4gICAgICB1c2VyRXZlbnRzLFxuICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICB9OiB7XG4gICAgICB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXTtcbiAgICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xuICAgIH0pOiBOZXh0TWVzc2FnZVJlcXVlc3QgPT4ge1xuICAgICAgY29uc3QgZmVhdHVyZUZsYWdzID0gZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZUNvbmZpZ1ZlcnNpb24gPVxuICAgICAgICBnZXRRdWVyeVBhcmFtKCdzcGlmZnlfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgICBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgICByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uIHx8XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG92ZXJyaWRlTW9kZWxEYXRldGltZSA9IGdldFF1ZXJ5UGFyYW0oJ292ZXJyaWRlX21vZGVsX2RhdGV0aW1lJykgfHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdXNlckV2ZW50cyxcbiAgICAgICAgZmVhdHVyZUZsYWdzLFxuICAgICAgICBnZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICBvdmVycmlkZUNvbmZpZ1ZlcnNpb24sXG4gICAgICAgIG92ZXJyaWRlTW9kZWxEYXRldGltZSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBbY29udGV4dCwgZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2UsIHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25dLFxuICApO1xuXG4gIGNvbnN0IGdldFN0cmVhbWluZ1Jlc3BvbnNlcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBsZXQgc3VjY2Vzc2Z1bFJlc3BvbnNlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgc2V0UGVuZGluZ1Jlc3BvbnNlKHRydWUpO1xuICAgICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgICAgY29uc3Qgc3RyZWFtID0gQ29tbWVyY2VBcGlDbGllbnQuZ2V0TmV4dFJlc3BvbnNlU3RyZWFtaW5nKHBheWxvYWQpO1xuICAgICAgbGV0IHJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFJlcXVlc3RGYWlsdXJlKGZhbHNlKTtcblxuICAgICAgICByZXNwb25zZUFuYWx5dGljcyA9IGF3YWl0IHByb2Nlc3NTdHJlYW1pbmdSZXNwb25zZShcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgbWVzc2FnZUludGVyY2VwdG9yLFxuICAgICAgICAgIHNldE1lc3NhZ2VzLFxuICAgICAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgICApO1xuICAgICAgICBzdWNjZXNzZnVsUmVzcG9uc2UgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciB0aGUgQ2hyb21lIEV4dGVuc2lvbiBjb21tdW5pY2F0aW9uXG4gICAgICAgIC8vIGF3YWl0IGxvZ0J1bmRsZUV2ZW50KHtcbiAgICAgICAgLy8gICBsZXZlbDogJ2luZm8nLFxuICAgICAgICAvLyAgIGV2ZW50OiAnTkVYVF9SRVNQT05TRV9TVUNDRVNTJyxcbiAgICAgICAgLy8gICBjb250ZXh0OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgZW5kcG9pbnQ6ICcvdjEvbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICAvLyAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBnZXR0aW5nIHN0cmVhbWluZyByZXNwb25zZXMnLCBlKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gZmFsc2U7XG4gICAgICAgIC8vIExvZyBmYWlsZWQgbmV4dF9yZXNwb25zZXMgY2FsbFxuICAgICAgICAvLyBjb25zdCByZXNwb25zZVRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIC8vICAgZXZlbnQ6ICdORVhUX1JFU1BPTlNFX0ZBSUxFRCcsXG4gICAgICAgIC8vICAgbWVzc2FnZTogYEZhaWxlZCB0byBnZXQgc3RyZWFtaW5nIHJlc3BvbnNlOiAke2V9YCxcbiAgICAgICAgLy8gICBjb250ZXh0OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgZW5kcG9pbnQ6ICcvdjEvbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgICAvLyAgICAgZXJyb3I6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcblxuICAgICAgICBoYW5kbGVTdHJlYW1pbmdFcnJvcihlLCBzZXRSZXF1ZXN0RmFpbHVyZSwgc2V0TWVzc2FnZXMpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gTG9nIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRBc3Npc3RhbnRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICByZXNwb25zZVRpbWVNczogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzdWNjZXNzZnVsX3Jlc3BvbnNlOiBzdWNjZXNzZnVsUmVzcG9uc2UsXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9UcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuQ2hhdFJlc3BvbnNlLFxuICAgICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICAgIC4uLmFuYWx5dGljc0NvbnRleHQsXG4gICAgICAgICAgICAnY2hhdC5yZXNwb25zZV90aW1lX21zJzogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9FbnZpdmVUcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgICAgLi4ucmVzcG9uc2VBbmFseXRpY3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFBlbmRpbmdSZXNwb25zZShmYWxzZSk7XG4gICAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nKGZhbHNlKTtcbiAgICAgICAgLy8gbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFJlc3BvbnNlQ29tcGxldGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFuYWx5dGljc0NvbnRleHQsXG4gICAgICB0cmFja0V2ZW50LFxuICAgICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICAvLyBsb2dQZXJmTWV0cmljLFxuICAgICAgc2V0UmVxdWVzdEZhaWx1cmUsXG4gICAgICBzZXRTdWdnZXN0aW9ucyxcbiAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgIHNldE1lc3NhZ2VzLFxuICAgICAgc2V0UGVuZGluZ1Jlc3BvbnNlLFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3QgZ2V0U3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRTdWdnZXN0aW9ucyhwYXlsb2FkKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKG5ld1N1Z2dlc3Rpb25zKTtcbiAgICB9LFxuICAgIFtzZXRTdWdnZXN0aW9uc10sXG4gICk7XG5cbiAgY29uc3QgaHlkcmF0ZU1lc3NhZ2VzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgb3JnSWQsIGNoYXRJZCwgdXNlcklkIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgbWVzc2FnZXM6IGV4aXN0aW5nTWVzc2FnZXMgfSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldFJlc3BvbnNlcyhcbiAgICAgIG9yZ0lkLFxuICAgICAgY2hhdElkLFxuICAgICAgdXNlcklkLFxuICAgICk7XG4gICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgfSwgW2NvbnRleHQsIHNldE1lc3NhZ2VzXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLFxuICAgIGdldFN1Z2dlc3Rpb25zLFxuICAgIGh5ZHJhdGVNZXNzYWdlcyxcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQ0EsTUFBTSxTQUFTLElBQUlBLHVCQUFPLG9CQUFvQjtBQVk5QyxNQUFNLDZCQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FBYyxFQUFFO0FBQzVDLEtBQUksVUFBVSxhQUFhQyxrREFBa0Isa0JBQzNDLFFBQU87RUFDTCxZQUFZLFVBQVU7RUFDdEIsaUJBQWlCO0VBQ2pCLFlBQVksVUFBVSxXQUFXO0VBQ2xDO0FBRUgsS0FBSSxVQUFVLGFBQWFBLGtEQUFrQixXQUMzQyxRQUFPO0VBQ0wsWUFBWSxVQUFVO0VBQ3RCLGlCQUFpQjtFQUNqQixZQUFZLFVBQVUsV0FBVztFQUNsQztBQUVILFFBQU8sRUFBRTs7QUFHWCxNQUFNLG1DQUNKLFlB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
232
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJTdGF0dXNDb2RlRXJyb3IiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+IiwibWVzc2FnZUZyb21SZXNwb25zZSIsImVycm9yOiB1bmtub3duIiwidXNlU2FsZXNBZ2VudFNlcnZpY2U6ICgpID0+IFNhbGVzQWdlbnRTZXJ2aWNlIiwicmVxdWVzdEZhaWx1cmVBdG9tIiwibWVzc2FnZXNBdG9tIiwic3VnZ2VzdGlvbnNBdG9tIiwicGVuZGluZ1Jlc3BvbnNlQXRvbSIsInJlc3BvbnNlU3RyZWFtaW5nQXRvbSIsInN1Z2dlc3Rpb25zTG9hZGluZ0F0b20iLCJhbmFseXRpY3NDb250ZXh0QXRvbSIsInVzZU1lc3NhZ2VJbnRlcmNlcHRvciIsInVzZUFtcGxpdHVkZSIsInVzZUZlYXR1cmVGbGFnU2VydmljZSIsImFwcERldGFpbHNBdG9tIiwicmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbkF0b20iLCJzdWNjZXNzZnVsUmVzcG9uc2U6IGJvb2xlYW4gfCB1bmRlZmluZWQiLCJDb21tZXJjZUFwaUNsaWVudCIsInJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgR2VuZXJhdGlvblBhcmFtcyxcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxuICBVc2VyRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgbWVzc2FnZUZyb21SZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscyc7XG5pbXBvcnQgeyBhcHBEZXRhaWxzQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IHsgYW5hbHl0aWNzQ29udGV4dEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbkF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL3Jlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb24nO1xuaW1wb3J0IHtcbiAgbWVzc2FnZXNBdG9tLFxuICBwZW5kaW5nUmVzcG9uc2VBdG9tLFxuICByZXF1ZXN0RmFpbHVyZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxuICBzdWdnZXN0aW9uc0xvYWRpbmdBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlTWVzc2FnZUludGVyY2VwdG9yIH0gZnJvbSAnc3JjL2ludGVyY2VwdG9ycy91c2VNZXNzYWdlSW50ZXJjZXB0b3InO1xuaW1wb3J0IHtcbiAgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbn0gZnJvbSAnc3JjL3NlcnZpY2VzL2FtcGxpdHVkZVNlcnZpY2UvYW1wbGl0dWRlU2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVFcnJvciB9IGZyb20gJy4vc3RhdHVzQ29kZUVycm9yJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignc2FsZXNBZ2VudFNlcnZpY2UnKTtcblxuaW50ZXJmYWNlIFNhbGVzQWdlbnRTZXJ2aWNlIHtcbiAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkOiAocGF5bG9hZDoge1xuICAgIHVzZXJFdmVudHM6IFVzZXJFdmVudFtdO1xuICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xuICB9KSA9PiBOZXh0TWVzc2FnZVJlcXVlc3Q7XG4gIGdldFN0cmVhbWluZ1Jlc3BvbnNlczogKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3VnZ2VzdGlvbnM6IChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IFByb21pc2U8dm9pZD47XG4gIGh5ZHJhdGVNZXNzYWdlczogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyA9IChcbiAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBbdXNlckV2ZW50XSA9IHBheWxvYWQudXNlckV2ZW50cyB8fCBbXTtcbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdzdWdnZXN0aW9uX2NsaWNrZWQnLFxuICAgICAgdXNlcl9xdWVyeTogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdxdWVyeV90eXBlZCcsXG4gICAgICB1c2VyX3F1ZXJ5OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmNvbnN0IGlucHV0UHJvcHNUb0Vudml2ZVRyYWNraW5nUHJvcHMgPSAoXG4gIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgW3VzZXJFdmVudF0gPSBwYXlsb2FkLnVzZXJFdmVudHMgfHwgW107XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICdzdWdnZXN0aW9uJyxcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdGV4dCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLmNvbnRlbnQsXG4gICAgICAnY2hhdC5zdWdnZXN0aW9uX2lkJzogdXNlckV2ZW50LmF0dHJpYnV0ZXMuc3VnZ2VzdGlvbklkLFxuICAgICAgJ2NoYXQudXNlcl90eXBlZCc6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAndGV4dCcsXG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3RleHQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgICdjaGF0LnVzZXJfdHlwZWQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy51c2VyVHlwZWQsXG4gICAgfTtcbiAgfVxuICBpZiAoXG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQgfHxcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0IHx8XG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3BhZ2VfdmlzaXQnLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgcmV0dXJuIHVybE9iai5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG59O1xuXG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoX2Vycm9yOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKF9lcnJvciBpbnN0YW5jZW9mIFN0YXR1c0NvZGVFcnJvcikge1xuICAgIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDIzKSB7XG4gICAgICByZXR1cm4gJ0R1ZSB0byB2aW9sYXRpb24gb2YgdGVybXMgYW5kIHNlcnZpY2VzLCB0aGlzIHNlc3Npb24gaGFzIGJlZW4gdGVybWluYXRlZC4nO1xuICAgIH1cbiAgICAvLyBLZWVwaW5nIHRoZSA0MjkgZXJyb3IgbWVzc2FnZXMgYXMgdGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSBmb3Igbm93LlxuICAgIC8vIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgLy8gICByZXR1cm4gXCJJJ20gc29ycnkhIFRoZSBzeXN0ZW0gaXMgYnVzeSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy5cIjtcbiAgICAvLyB9XG4gIH1cblxuICByZXR1cm4gXCJJJ20gc29ycnkhIEknbSBoYXZpbmcgdHJvdWJsZSByaWdodCBub3cuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIG9yIHRyeSBhZ2FpbiBpbiBhIG1vbWVudC5cIjtcbn07XG5cbmNvbnN0IGhhbmRsZVN0cmVhbWluZ0Vycm9yID0gKFxuICBfZXJyb3I6IHVua25vd24sXG4gIHNldFJlcXVlc3RGYWlsdXJlOiAoZmFpbGVkOiBib29sZWFuKSA9PiB2b2lkLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pID0+IHtcbiAgc2V0UmVxdWVzdEZhaWx1cmUodHJ1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKF9lcnJvcik7XG4gIHNldE1lc3NhZ2VzKHByZXYgPT4gW1xuICAgIC4uLnByZXYsXG4gICAgW1xuICAgICAge1xuICAgICAgICBpZDogdXVpZCgpLFxuICAgICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlRleHQsXG4gICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNvbnRlbnQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59O1xuXG5jb25zdCB1cGRhdGVNZXNzYWdlU3RhdGUgPSAoXG4gIG1lc3NhZ2U6IE1lc3NhZ2UsXG4gIGxhc3RNZXNzYWdlOiBNZXNzYWdlLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pOiBNZXNzYWdlID0+IHtcbiAgaWYgKGxhc3RNZXNzYWdlID09IG51bGwpIHtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LCBbbWVzc2FnZV1dKTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCAmJiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlRleHQpIHtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0ge1xuICAgICAgLi4ubGFzdE1lc3NhZ2UsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5sYXN0TWVzc2FnZS5tZXRhZGF0YSxcbiAgICAgICAgY29udGVudDogbGFzdE1lc3NhZ2UubWV0YWRhdGEuY29udGVudCArIG1lc3NhZ2UubWV0YWRhdGEuY29udGVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGxhc3RUdXJuID0gcHJldltwcmV2Lmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4ucHJldi5zbGljZSgwLCBwcmV2Lmxlbmd0aCAtIDEpLFxuICAgICAgICBbLi4ubGFzdFR1cm4uc2xpY2UoMCwgbGFzdFR1cm4ubGVuZ3RoIC0gMSksIG5ld01lc3NhZ2VdLFxuICAgICAgXTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgfVxuICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksIFsuLi5wcmV2W3ByZXYubGVuZ3RoIC0gMV0sIG1lc3NhZ2VdXSk7XG4gIHJldHVybiBtZXNzYWdlO1xufTtcblxuY29uc3QgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlID0gYXN5bmMgKFxuICBzdHJlYW06IEFzeW5jSXRlcmFibGU8UmVzcG9uc2U+LFxuICBtZXNzYWdlSW50ZXJjZXB0b3I6IHsgaW50ZXJjZXB0OiAocmVzcG9uc2U/OiBSZXNwb25zZSkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nOiAocmVzcG9uc2VTdHJlYW1pbmc6IGJvb2xlYW4pID0+IHZvaWQsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZ1tdPj4gPT4ge1xuICBsZXQgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nKHRydWUpO1xuICBjb25zdCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+ID0ge307XG4gIGNvbnN0IHByb2R1Y3RJZHMgPSBbXTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHN0cmVhbSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAobWVzc2FnZUludGVyY2VwdG9yLmludGVyY2VwdChyZXNwb25zZSkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVzcG9uc2UgZnJvbSBzdHJlYW0nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRyYW5zZm9ybSBBUEkgcmVzcG9uc2UgdG8gY2xpZW50IG1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSBhcyBudW1iZXIpIHx8IDA7XG4gICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSA9IGNhcmRzQ291bnRlciArIDE7XG5cbiAgICAgICAgY29uc3QgcHJvZHVjdElkcyA9IHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gYXMgc3RyaW5nW107XG4gICAgICAgIGlmICghcHJvZHVjdElkcykge1xuICAgICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gPSBbbWVzc2FnZS5tZXRhZGF0YS5pZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvZHVjdElkcy5wdXNoKG1lc3NhZ2UubWV0YWRhdGEuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5SZXZpZXcpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnJldmlld19jYXJkc19yZXR1cm5lZCddIGFzIG51bWJlcikgfHwgMDtcbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gPSBjYXJkc0NvdW50ZXIgKyAxO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBzdXBwb3J0IGZvciBDaGF0U2VhcmNoIG1lc3NhZ2VzIGF0IHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAvLyBQZXJoYXBzIHdlIGFkZCBzdXBwb3J0IGJhY2sgaW4gdGhlIGZ1dHVyZVxuICAgICAgLy8gaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCkge1xuICAgICAgLy8gICBoYW5kbGVTZWFyY2hSZXN1bHRzKG1lc3NhZ2UpO1xuICAgICAgLy8gICBoYXNTZWFyY2hSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIC8vICAgc2V0U2VhcmNoSXNMb2FkaW5nKGZhbHNlKTsgLy8gVXBkYXRlIHNlYXJjaCBsb2FkaW5nIGltbWVkaWF0ZWx5IHdoZW4gcmVzdWx0cyBhcmUgZGV0ZWN0ZWRcbiAgICAgIC8vIH1cblxuICAgICAgbGFzdE1lc3NhZ2UgPSB1cGRhdGVNZXNzYWdlU3RhdGUobWVzc2FnZSwgbGFzdE1lc3NhZ2UhLCBzZXRNZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKCdGYWlsZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2VzIGZyb20gc3RyZWFtJywgZXJyb3IsIHtcbiAgICAgICAgbGFzdFJlc3BvbnNlOiBsYXN0TWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcoZmFsc2UpO1xuICB9XG4gIHJldHVybiByZXNwb25zZUFuYWx5dGljcztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50U2VydmljZTogKCkgPT4gU2FsZXNBZ2VudFNlcnZpY2UgPSAoKSA9PiB7XG4gIGNvbnN0IHNldFJlcXVlc3RGYWlsdXJlID0gdXNlU2V0QXRvbShyZXF1ZXN0RmFpbHVyZUF0b20pO1xuICBjb25zdCBzZXRNZXNzYWdlcyA9IHVzZVNldEF0b20obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0U3VnZ2VzdGlvbnMgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zQXRvbSk7XG4gIGNvbnN0IHNldFBlbmRpbmdSZXNwb25zZSA9IHVzZVNldEF0b20ocGVuZGluZ1Jlc3BvbnNlQXRvbSk7XG4gIGNvbnN0IHNldFJlc3BvbnNlU3RyZWFtaW5nID0gdXNlU2V0QXRvbShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9uc0xvYWRpbmcgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zTG9hZGluZ0F0b20pO1xuICBjb25zdCBhbmFseXRpY3NDb250ZXh0ID0gdXNlQXRvbVZhbHVlKGFuYWx5dGljc0NvbnRleHRBdG9tKTtcbiAgY29uc3QgbWVzc2FnZUludGVyY2VwdG9yID0gdXNlTWVzc2FnZUludGVyY2VwdG9yKCk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG5cbiAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VBdG9tVmFsdWUoYXBwRGV0YWlsc0F0b20pO1xuICBjb25zdCByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uID0gdXNlQXRvbVZhbHVlKHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tKTtcblxuICBjb25zdCBjcmVhdGVSZXNwb25zZVBheWxvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgdXNlckV2ZW50cyxcbiAgICAgIGdlbmVyYXRpb25QYXJhbXMsXG4gICAgfToge1xuICAgICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgICBnZW5lcmF0aW9uUGFyYW1zPzogR2VuZXJhdGlvblBhcmFtcztcbiAgICB9KTogTmV4dE1lc3NhZ2VSZXF1ZXN0ID0+IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9IGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbiB8fFxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvdmVycmlkZU1vZGVsRGF0ZXRpbWUgPSBnZXRRdWVyeVBhcmFtKCdvdmVycmlkZV9tb2RlbF9kYXRldGltZScpIHx8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHMsXG4gICAgICAgIGZlYXR1cmVGbGFncyxcbiAgICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgICBvdmVycmlkZU1vZGVsRGF0ZXRpbWUsXG4gICAgICB9O1xuICAgIH0sXG4gICAgW2NvbnRleHQsIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlLCByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uXSxcbiAgKTtcblxuICBjb25zdCBnZXRTdHJlYW1pbmdSZXNwb25zZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHN1Y2Nlc3NmdWxSZXNwb25zZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSh0cnVlKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRSZXNwb25zZVN0cmVhbWluZyhwYXlsb2FkKTtcbiAgICAgIGxldCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXF1ZXN0RmFpbHVyZShmYWxzZSk7XG5cbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3MgPSBhd2FpdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UoXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgICAgICBzZXRNZXNzYWdlcyxcbiAgICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyxcbiAgICAgICAgKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gdHJ1ZTtcblxuICAgICAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIENocm9tZSBFeHRlbnNpb24gY29tbXVuaWNhdGlvblxuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgLy8gICBldmVudDogJ05FWFRfUkVTUE9OU0VfU1VDQ0VTUycsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZXJyb3IgZ2V0dGluZyBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZSk7XG4gICAgICAgIHN1Y2Nlc3NmdWxSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgICAvLyBMb2cgZmFpbGVkIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgLy8gY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgLy8gYXdhaXQgbG9nQnVuZGxlRXZlbnQoe1xuICAgICAgICAvLyAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAvLyAgIGV2ZW50OiAnTkVYVF9SRVNQT05TRV9GQUlMRUQnLFxuICAgICAgICAvLyAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZ2V0IHN0cmVhbWluZyByZXNwb25zZTogJHtlfWAsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICAgIGVycm9yOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgIC8vICAgfSxcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaGFuZGxlU3RyZWFtaW5nRXJyb3IoZSwgc2V0UmVxdWVzdEZhaWx1cmUsIHNldE1lc3NhZ2VzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIExvZyBuZXh0X3Jlc3BvbnNlcyBjYWxsXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0QXNzaXN0YW50UmVzcG9uc2UsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgcmVzcG9uc2VUaW1lTXM6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3VjY2Vzc2Z1bF9yZXNwb25zZTogc3VjY2Vzc2Z1bFJlc3BvbnNlLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLkNoYXRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICAuLi5hbmFseXRpY3NDb250ZXh0LFxuICAgICAgICAgICAgJ2NoYXQucmVzcG9uc2VfdGltZV9tcyc6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvRW52aXZlVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICAgIC4uLnJlc3BvbnNlQW5hbHl0aWNzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQZW5kaW5nUmVzcG9uc2UoZmFsc2UpO1xuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gICAgICAgIC8vIGxvZ1BlcmZNZXRyaWMoUGVyZk1ldHJpY3NFdmVudHMuRmlyc3RSZXNwb25zZUNvbXBsZXRlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhbmFseXRpY3NDb250ZXh0LFxuICAgICAgdHJhY2tFdmVudCxcbiAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgLy8gbG9nUGVyZk1ldHJpYyxcbiAgICAgIHNldFJlcXVlc3RGYWlsdXJlLFxuICAgICAgc2V0U3VnZ2VzdGlvbnMsXG4gICAgICBzZXRTdWdnZXN0aW9uc0xvYWRpbmcsXG4gICAgICBtZXNzYWdlSW50ZXJjZXB0b3IsXG4gICAgICBzZXRNZXNzYWdlcyxcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSxcbiAgICBdLFxuICApO1xuXG4gIGNvbnN0IGdldFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nKHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3U3VnZ2VzdGlvbnMgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXROZXh0U3VnZ2VzdGlvbnMocGF5bG9hZCk7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKG5ld1N1Z2dlc3Rpb25zKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2V0U3VnZ2VzdGlvbnMsIHNldFN1Z2dlc3Rpb25zTG9hZGluZ10sXG4gICk7XG5cbiAgY29uc3QgaHlkcmF0ZU1lc3NhZ2VzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgb3JnSWQsIGNoYXRJZCwgdXNlcklkIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgbWVzc2FnZXM6IGV4aXN0aW5nTWVzc2FnZXMgfSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldFJlc3BvbnNlcyhcbiAgICAgIG9yZ0lkLFxuICAgICAgY2hhdElkLFxuICAgICAgdXNlcklkLFxuICAgICk7XG4gICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgfSwgW2NvbnRleHQsIHNldE1lc3NhZ2VzXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLFxuICAgIGdldFN1Z2dlc3Rpb25zLFxuICAgIGh5ZHJhdGVNZXNzYWdlcyxcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQ0EsTUFBTSxTQUFTLElBQUlBLHVCQUFPLG9CQUFvQjtBQVk5QyxNQUFNLDZCQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FBYyxFQUFFO0FBQzVDLEtBQUksVUFBVSxhQUFhQyxrREFBa0Isa0JBQzNDLFFBQU87RUFDTCxZQUFZLFVBQVU7RUFDdEIsaUJBQWlCO0VBQ2pCLFlBQVksVUFBVSxXQUFXO0VBQ2xDO0FBRUgsS0FBSSxVQUFVLGFBQWFBLGtEQUFrQixXQUMzQyxRQUFPO0VBQ0wsWUFBWSxVQUFVO0VBQ3RCLGlCQUFpQjtFQUNqQixZQUFZLFVBQVUsV0FBVztFQUNsQztBQUVILFFBQU8sRUFBRTs7QUFHWCxNQUFNLG1DQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FBYyxFQUFFO0FBQzVDLEtBQUksVUFBVSxhQUFhQSxrREFBa0Isa0JBQzNDLFFBQU87RUFDTCxxQkFBcUI7RUFDckIsbUJBQW1CLFVBQVU7RUFDN0IscUJBQXFCLFVBQVUsV0FBVztFQUMxQyxzQkFBc0IsVUFBVSxXQUFXO0VBQzNDLG1CQUFtQjtFQUNwQjtBQUVILEtBQUksVUFBVSxhQUFhQSxrREFBa0IsV0FDM0MsUUFBTztFQUNMLHFCQUFxQjtFQUNyQixtQkFBbUIsVUFBVTtFQUM3QixxQkFBcUIsVUFBVSxXQUFXO0VBQzFDLG1CQUFtQixVQUFVLFdBQVc7RUFDekM7QUFFSCxLQUNFLFVBQVUsYUFBYUEsa0RBQWtCLGFBQ3pDLFVBQVUsYUFBYUEsa0RBQWtCLFlBQ3pDLFVBQVUsYUFBYUEsa0RBQWtCLFNBRXpDLFFBQU87RUFDTCxtQkFBbUIsVUFBVTtFQUM3QixxQkFBcUI7RUFDdEI7QUFHSCxRQUFPLEVBQUU7O0FBR1gsTUFBYSxpQkFBaUIsUUFBK0I7QUFFM0QsUUFEZSxJQUFJLElBQUksT0FBTyxTQUFTLEtBQUssQ0FDOUIsYUFBYSxJQUFJLElBQUk7O0FBR3JDLE1BQU0sbUJBQW1CLFdBQTRCO0FBQ25ELEtBQUksa0JBQWtCQyx5Q0FDcEI7TUFBSSxPQUFPLGVBQWUsSUFDeEIsUUFBTzs7QUFRWCxRQUFPOztBQUdULE1BQU0sd0JBQ0osUUFDQSxtQkFDQSxnQkFDRztBQUNILG1CQUFrQixLQUFLO0NBRXZCLE1BQU0sZUFBZSxnQkFBZ0IsT0FBTztBQUM1QyxjQUFZLFNBQVEsQ0FDbEIsR0FBRyxNQUNILENBQ0U7RUFDRSxrQkFBVTtFQUNWLE1BQU1DLDRCQUFZO0VBQ2xCLE1BQU1DLDRCQUFZO0VBQ2xCLDRCQUFXLElBQUksTUFBTSxFQUFDLGFBQWE7RUFDbkMsVUFBVSxFQUNSLFNBQVMsY0FDVjtFQUNGLENBQ0YsQ0FDRixDQUFDOztBQUdKLE1BQU0sc0JBQ0osU0FDQSxhQUNBLGdCQUNZO0FBQ1osS0FBSSxlQUFlLE1BQU07QUFDdkIsZUFBWSxTQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsU0FBTzs7QUFFVCxLQUFJLFlBQVksU0FBU0EsNEJBQVksUUFBUSxRQUFRLFNBQVNBLDRCQUFZLE1BQU07RUFDOUUsTUFBTSxhQUFhO0dBQ2pCLEdBQUc7R0FDSCxVQUFVO0lBQ1IsR0FBRyxZQUFZO0lBQ2YsU0FBUyxZQUFZLFNBQVMsVUFBVSxRQUFRLFNBQVM7SUFDMUQ7R0FDRjtBQUNELGVBQVksU0FBUTtHQUNsQixNQUFNLFdBQVcsS0FBSyxLQUFLLFNBQVM7QUFDcEMsVUFBTyxDQUNMLEdBQUcsS0FBSyxNQUFNLEdBQUcsS0FBSyxTQUFTLEVBQUUsRUFDakMsQ0FBQyxHQUFHLFNBQVMsTUFBTSxHQUFHLFNBQVMsU0FBUyxFQUFFLEVBQUUsV0FBVyxDQUN4RDtJQUNEO0FBQ0YsU0FBTzs7QUFFVCxjQUFZLFNBQVEsQ0FBQyxHQUFHLEtBQUssTUFBTSxHQUFHLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLENBQUM7QUFDN0YsUUFBTzs7QUFHVCxNQUFNLDJCQUEyQixPQUMvQixRQUNBLG9CQUNBLGFBQ0EseUJBQytDO0NBQy9DLElBQUlDO0FBQ0osc0JBQXFCLEtBQUs7Q0FDMUIsTUFBTUMsb0JBQXVELEVBQUU7QUFHL0QsWUFBVyxNQUFNLFlBQVksUUFBUTtBQUNuQyxNQUFJO0FBQ0YsT0FBSSxtQkFBbUIsVUFBVSxTQUFTLENBQ3hDLFFBQU8sRUFBRTtBQUdYLE9BQUksQ0FBQyxTQUNILE9BQU0sSUFBSSxNQUFNLDBCQUEwQjtHQUc1QyxNQUFNLFVBQVVDLGdEQUFvQixTQUFTO0FBQzdDLE9BQUksQ0FBQyxRQUNILE9BQU0sSUFBSSxNQUFNLHFEQUFxRDtBQUV2RSxPQUFJLFFBQVEsU0FBU0gsNEJBQVksU0FBUztBQUV4QyxzQkFBa0Isa0NBREksa0JBQWtCLGtDQUE2QyxLQUNuQjtJQUVsRSxNQUFNLGFBQWEsa0JBQWtCO0FBQ3JDLFFBQUksQ0FBQyxXQUNILG1CQUFrQiwrQkFBK0IsQ0FBQyxRQUFRLFNBQVMsR0FBRztRQUV0RSxZQUFXLEtBQUssUUFBUSxTQUFTLEdBQUc7O0FBR3hDLE9BQUksUUFBUSxTQUFTQSw0QkFBWSxPQUUvQixtQkFBa0IsaUNBREksa0JBQWtCLGlDQUE0QyxLQUNuQjtBQVduRSxpQkFBYyxtQkFBbUIsU0FBUyxhQUFjLFlBQVk7V0FDN0RJLE9BQWdCO0FBQ3ZCLFVBQU8sUUFBUSw0Q0FBNEMsT0FBTztJQUNoRSxjQUFjO0lBQ2Q7SUFDRCxDQUFDOztBQUVKLHVCQUFxQixNQUFNOztBQUU3QixRQUFPOztBQUdULE1BQWFDLDZCQUFzRDtDQUNqRSxNQUFNLDBDQUErQkMsZ0RBQW1CO0NBQ3hELE1BQU0sb0NBQXlCQywwQ0FBYTtDQUM1QyxNQUFNLHVDQUE0QkMsNkNBQWdCO0NBQ2xELE1BQU0sMkNBQWdDQyxpREFBb0I7Q0FDMUQsTUFBTSw2Q0FBa0NDLG1EQUFzQjtDQUM5RCxNQUFNLDhDQUFtQ0Msb0RBQXVCO0NBQ2hFLE1BQU0sMkNBQWdDQyxxQ0FBcUI7Q0FDM0QsTUFBTSxxQkFBcUJDLHFEQUF1QjtDQUNsRCxNQUFNLEVBQUUsZUFBZUMsdUNBQWM7Q0FFckMsTUFBTSxxQkFBcUJDLHlEQUF1QjtDQUNsRCxNQUFNLGtDQUF1QkMsdUNBQWU7Q0FDNUMsTUFBTSxvREFBeUNDLGdFQUE4QjtBQStJN0UsUUFBTztFQUNMLCtDQTdJQyxFQUNDLFlBQ0EsdUJBSXdCO0dBQ3hCLE1BQU0sZUFBZSxvQkFBb0Isb0JBQW9CLGlCQUFpQixJQUFJLEVBQUU7R0FFcEYsTUFBTSx3QkFDSixjQUFjLHdCQUF3QixJQUN0QyxjQUFjLHdCQUF3QixJQUN0Qyw2QkFDQTtHQUNGLE1BQU0sd0JBQXdCLGNBQWMsMEJBQTBCLElBQUk7QUFDMUUsVUFBTztJQUNMLGtCQUFVO0lBQ1Y7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7S0FFSDtHQUFDO0dBQVMsb0JBQW9CO0dBQW9CO0dBQTBCLENBQzdFO0VBb0hDLDhDQWpIQSxPQUFPLFlBQStDO0dBQ3BELE1BQU0sWUFBWSxLQUFLLEtBQUs7R0FDNUIsSUFBSUM7QUFDSixzQkFBbUIsS0FBSztBQUN4QixrQkFBZSxFQUFFLENBQUM7QUFDbEIseUJBQXNCLEtBQUs7R0FDM0IsTUFBTSxTQUFTQyx5Q0FBa0IseUJBQXlCLFFBQVE7R0FDbEUsSUFBSUM7QUFDSixPQUFJO0FBQ0Ysc0JBQWtCLE1BQU07QUFFeEIsd0JBQW9CLE1BQU0seUJBQ3hCLFFBQ0Esb0JBQ0EsYUFDQSxxQkFDRDtBQUNELHlCQUFxQjtZQWFkLEdBQUc7QUFDVixZQUFRLE1BQU0scUNBQXFDLEVBQUU7QUFDckQseUJBQXFCO0FBZXJCLHlCQUFxQixHQUFHLG1CQUFtQixZQUFZO0FBQ3ZELFVBQU07YUFDRTtJQUVSLE1BQU0sZUFBZSxLQUFLLEtBQUssR0FBRztBQUNsQyxlQUFXO0tBQ1QsV0FBV0MsMENBQXVCO0tBQ2xDLFlBQVk7TUFDVixnQkFBZ0IsYUFBYSxVQUFVO01BQ3ZDLHFCQUFxQjtNQUNyQixHQUFHLDBCQUEwQixRQUFRO01BQ3RDO0tBQ0YsQ0FBQztBQUNGLGVBQVc7S0FDVCxXQUFXQywwQ0FBdUI7S0FDbEMsWUFBWTtNQUNWLEdBQUc7TUFDSCx5QkFBeUIsYUFBYSxVQUFVO01BQ2hELEdBQUcsZ0NBQWdDLFFBQVE7TUFDM0MsR0FBRztNQUNKO0tBQ0YsQ0FBQztBQUNGLHVCQUFtQixNQUFNO0FBQ3pCLHlCQUFxQixNQUFNOztLQUkvQjtHQUNFO0dBQ0E7R0FDQTtHQUVBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNELENBQ0Y7RUE0QkMsdUNBekJBLE9BQU8sWUFBK0M7QUFDcEQseUJBQXNCLEtBQUs7QUFDM0IsT0FBSTtBQUVGLG1CQUR1QixNQUFNSCx5Q0FBa0IsbUJBQW1CLFFBQVEsQ0FDNUM7YUFDdEI7QUFDUiwwQkFBc0IsTUFBTTs7S0FHaEMsQ0FBQyxnQkFBZ0Isc0JBQXNCLENBQ3hDO0VBZ0JDLHdDQWRrQyxZQUFZO0dBQzlDLE1BQU0sRUFBRSxPQUFPLFFBQVEsV0FBVztHQUNsQyxNQUFNLEVBQUUsVUFBVSxxQkFBcUIsTUFBTUEseUNBQWtCLGFBQzdELE9BQ0EsUUFDQSxPQUNEO0FBQ0QsZUFBWSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7S0FDakMsQ0FBQyxTQUFTLFlBQVksQ0FBQztFQU96QiJ9