@envive-ai/react-hooks 0.3.18 → 0.3.19-alpha-marlo-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/application/commerce-api.cjs +14 -13
  2. package/dist/application/commerce-api.js +14 -13
  3. package/dist/application/logging/logger.cjs +16 -10
  4. package/dist/application/logging/logger.js +16 -10
  5. package/dist/application/models/guards/api/isApiFormResponse.cjs +9 -8
  6. package/dist/application/models/guards/api/isApiFormResponse.js +9 -8
  7. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.cjs +6 -5
  8. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +6 -5
  9. package/dist/application/models/guards/api/isApiOrderResponseAttributes.cjs +19 -18
  10. package/dist/application/models/guards/api/isApiOrderResponseAttributes.js +19 -18
  11. package/dist/application/models/guards/api/isApiOrgConfigResults.cjs +27 -26
  12. package/dist/application/models/guards/api/isApiOrgConfigResults.js +27 -26
  13. package/dist/application/models/guards/api/isApiOrganizationConfig.cjs +23 -22
  14. package/dist/application/models/guards/api/isApiOrganizationConfig.js +23 -22
  15. package/dist/application/models/guards/api/isApiProductResponseAttributes.cjs +12 -11
  16. package/dist/application/models/guards/api/isApiProductResponseAttributes.js +12 -11
  17. package/dist/application/models/guards/api/isApiResponse.cjs +7 -6
  18. package/dist/application/models/guards/api/isApiResponse.js +7 -6
  19. package/dist/application/models/guards/graphQL/isGraphQLColorsConfig.cjs +5 -4
  20. package/dist/application/models/guards/graphQL/isGraphQLColorsConfig.js +5 -4
  21. package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +15 -14
  22. package/dist/application/models/validators/validateGraphQLFrontendConfig.js +15 -14
  23. package/dist/application/utils/analyticsUtils.cjs +4 -3
  24. package/dist/application/utils/analyticsUtils.js +4 -3
  25. package/dist/application/utils/nextMessageRequestToApiRequest.cjs +3 -1
  26. package/dist/application/utils/nextMessageRequestToApiRequest.js +3 -1
  27. package/dist/atoms/app/index.d.cts +1 -1
  28. package/dist/atoms/app/index.d.ts +7 -7
  29. package/dist/atoms/app/variant.cjs +3 -2
  30. package/dist/atoms/app/variant.d.cts +6 -6
  31. package/dist/atoms/app/variant.js +3 -2
  32. package/dist/atoms/chat/chatState.d.cts +18 -18
  33. package/dist/atoms/chat/chatState.d.ts +18 -18
  34. package/dist/atoms/chat/form.d.cts +3 -3
  35. package/dist/atoms/chat/form.d.ts +2 -2
  36. package/dist/atoms/chat/index.d.cts +3 -3
  37. package/dist/atoms/chat/index.d.ts +3 -3
  38. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  39. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  40. package/dist/atoms/chat/messageQueue.d.cts +7 -7
  41. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  42. package/dist/atoms/chat/performanceMetrics.cjs +3 -2
  43. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  44. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  45. package/dist/atoms/chat/performanceMetrics.js +3 -2
  46. package/dist/atoms/chat/renderedWidgetRefs.d.cts +3 -3
  47. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  48. package/dist/atoms/chat/replies.d.cts +3 -3
  49. package/dist/atoms/chat/replies.d.ts +3 -3
  50. package/dist/atoms/chat/suggestions.d.cts +3 -3
  51. package/dist/atoms/chat/suggestions.d.ts +2 -2
  52. package/dist/atoms/envive/enviveConfig.cjs +5 -4
  53. package/dist/atoms/envive/enviveConfig.d.cts +13 -13
  54. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  55. package/dist/atoms/envive/enviveConfig.js +5 -4
  56. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  57. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  58. package/dist/atoms/org/customerService.d.cts +6 -6
  59. package/dist/atoms/org/customerService.d.ts +6 -6
  60. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  61. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  62. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  63. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  64. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  65. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  66. package/dist/atoms/search/chatSearch.d.cts +17 -17
  67. package/dist/atoms/search/searchAPI.d.cts +13 -13
  68. package/dist/atoms/search/types.d.cts +1 -1
  69. package/dist/atoms/search/utils.d.cts +1 -1
  70. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  71. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +4 -3
  72. package/dist/contexts/amplitudeContext/amplitudeContext.js +3 -2
  73. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +26 -15
  74. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +2 -4
  75. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +2 -4
  76. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +29 -16
  77. package/dist/contexts/enviveConfigContext/index.cjs +2 -1
  78. package/dist/contexts/enviveConfigContext/index.d.cts +2 -1
  79. package/dist/contexts/enviveConfigContext/index.d.ts +2 -1
  80. package/dist/contexts/enviveConfigContext/index.js +2 -1
  81. package/dist/contexts/enviveConfigContext/useEnviveConfig.cjs +12 -0
  82. package/dist/contexts/enviveConfigContext/useEnviveConfig.d.cts +7 -0
  83. package/dist/contexts/enviveConfigContext/useEnviveConfig.d.ts +7 -0
  84. package/dist/contexts/enviveConfigContext/useEnviveConfig.js +11 -0
  85. package/dist/contexts/enviveContext/WindowChatToggleBinder.cjs +7 -5
  86. package/dist/contexts/enviveContext/WindowChatToggleBinder.js +6 -4
  87. package/dist/contexts/enviveContext/enviveContext.cjs +74 -45
  88. package/dist/contexts/enviveContext/enviveContext.d.cts +8 -2
  89. package/dist/contexts/enviveContext/enviveContext.d.ts +8 -2
  90. package/dist/contexts/enviveContext/enviveContext.js +75 -46
  91. package/dist/contexts/enviveContext/index.d.cts +2 -2
  92. package/dist/contexts/enviveContext/index.d.ts +2 -2
  93. package/dist/contexts/enviveContext/types.d.cts +1 -1
  94. package/dist/contexts/enviveContext/types.d.ts +1 -1
  95. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +7 -6
  96. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +7 -6
  97. package/dist/contexts/graphqlContext/graphqlContext.cjs +8 -7
  98. package/dist/contexts/graphqlContext/graphqlContext.js +8 -7
  99. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +9 -8
  100. package/dist/contexts/hardcopyContext/hardcopyContext.js +9 -8
  101. package/dist/contexts/localStorageContext/localStorageContext.cjs +4 -3
  102. package/dist/contexts/localStorageContext/localStorageContext.js +4 -3
  103. package/dist/contexts/pageContext/pageContext.cjs +23 -4
  104. package/dist/contexts/pageContext/pageContext.d.cts +3 -1
  105. package/dist/contexts/pageContext/pageContext.d.ts +3 -1
  106. package/dist/contexts/pageContext/pageContext.js +24 -5
  107. package/dist/contexts/pageContext/types.d.ts +1 -1
  108. package/dist/contexts/salesAgentContext/chatAPI.cjs +3 -2
  109. package/dist/contexts/salesAgentContext/chatAPI.js +3 -2
  110. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +4 -3
  111. package/dist/contexts/salesAgentContext/salesAgentContext.js +4 -3
  112. package/dist/contexts/salesAgentContext/salesAgentService.cjs +3 -2
  113. package/dist/contexts/salesAgentContext/salesAgentService.js +3 -2
  114. package/dist/contexts/searchContext/searchContext.cjs +8 -6
  115. package/dist/contexts/searchContext/searchContext.js +7 -5
  116. package/dist/contexts/sessionStorageContext/sessionStorageContext.cjs +3 -2
  117. package/dist/contexts/sessionStorageContext/sessionStorageContext.js +3 -2
  118. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  119. package/dist/contexts/types.d.cts +1 -1
  120. package/dist/contexts/types.d.ts +1 -1
  121. package/dist/contexts/typesV3.d.cts +1 -1
  122. package/dist/contexts/uiConfigContext/index.cjs +0 -1
  123. package/dist/contexts/uiConfigContext/index.d.cts +2 -2
  124. package/dist/contexts/uiConfigContext/index.d.ts +2 -2
  125. package/dist/contexts/uiConfigContext/index.js +2 -2
  126. package/dist/contexts/uiConfigContext/uiConfigContext.cjs +13 -30
  127. package/dist/contexts/uiConfigContext/uiConfigContext.d.cts +5 -9
  128. package/dist/contexts/uiConfigContext/uiConfigContext.d.ts +5 -9
  129. package/dist/contexts/uiConfigContext/uiConfigContext.js +14 -29
  130. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +7 -7
  131. package/dist/contexts/userIdentityContext/userIdentityContext.js +7 -7
  132. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +4 -3
  133. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +4 -3
  134. package/dist/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.cjs +4 -3
  135. package/dist/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.js +4 -3
  136. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  137. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  138. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.cts +2 -2
  139. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts +2 -2
  140. package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.ts +2 -2
  141. package/dist/hooks/WidgetInteraction/useWidgetInteraction.cjs +2 -2
  142. package/dist/hooks/WidgetInteraction/useWidgetInteraction.js +2 -2
  143. package/dist/hooks/WidgetInteraction/utils.cjs +2 -1
  144. package/dist/hooks/WidgetInteraction/utils.js +2 -1
  145. package/dist/hooks/utils.d.cts +1 -1
  146. package/dist/hooks/utils.d.ts +1 -1
  147. package/dist/services/amplitudeService/amplitudeService.cjs +15 -7
  148. package/dist/services/amplitudeService/amplitudeService.d.cts +2 -1
  149. package/dist/services/amplitudeService/amplitudeService.d.ts +2 -1
  150. package/dist/services/amplitudeService/amplitudeService.js +15 -7
  151. package/dist/services/ga4ProjectionService/ga4ProjectionService.cjs +3 -2
  152. package/dist/services/ga4ProjectionService/ga4ProjectionService.js +3 -2
  153. package/dist/services/userIdentityService/userIdentityService.cjs +8 -7
  154. package/dist/services/userIdentityService/userIdentityService.js +8 -7
  155. package/package.json +2 -2
  156. package/src/application/commerce-api.ts +14 -12
  157. package/src/application/logging/logger.ts +33 -8
  158. package/src/application/models/guards/api/isApiFormResponse.ts +9 -7
  159. package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +6 -4
  160. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +19 -17
  161. package/src/application/models/guards/api/isApiOrgConfigResults.ts +40 -48
  162. package/src/application/models/guards/api/isApiOrganizationConfig.ts +25 -38
  163. package/src/application/models/guards/api/isApiProductResponseAttributes.ts +12 -10
  164. package/src/application/models/guards/api/isApiResponse.ts +7 -5
  165. package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +5 -3
  166. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +15 -13
  167. package/src/application/utils/analyticsUtils.ts +4 -4
  168. package/src/application/utils/nextMessageRequestToApiRequest.ts +2 -0
  169. package/src/atoms/app/variant.ts +3 -1
  170. package/src/atoms/chat/performanceMetrics.ts +3 -1
  171. package/src/atoms/envive/enviveConfig.ts +5 -3
  172. package/src/contexts/amplitudeContext/amplitudeContext.tsx +1 -1
  173. package/src/contexts/enviveConfigContext/__tests__/enviveConfigContext.test.tsx +4 -3
  174. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +50 -35
  175. package/src/contexts/enviveConfigContext/index.ts +1 -0
  176. package/src/contexts/enviveConfigContext/useEnviveConfig.ts +9 -0
  177. package/src/contexts/enviveContext/WindowChatToggleBinder.tsx +6 -4
  178. package/src/contexts/enviveContext/enviveContext.tsx +109 -50
  179. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +11 -12
  180. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +4 -4
  181. package/src/contexts/graphqlContext/graphqlContext.tsx +8 -6
  182. package/src/contexts/hardcopyContext/hardcopyContext.tsx +9 -7
  183. package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +6 -6
  184. package/src/contexts/localStorageContext/localStorageContext.tsx +4 -2
  185. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +5 -5
  186. package/src/contexts/pageContext/pageContext.tsx +22 -2
  187. package/src/contexts/salesAgentContext/chatAPI.ts +5 -5
  188. package/src/contexts/salesAgentContext/salesAgentContext.tsx +4 -2
  189. package/src/contexts/salesAgentContext/salesAgentService.ts +4 -2
  190. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +15 -12
  191. package/src/contexts/searchContext/searchContext.tsx +6 -4
  192. package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +3 -1
  193. package/src/contexts/uiConfigContext/__tests__/uiConfigContext.test.tsx +7 -32
  194. package/src/contexts/uiConfigContext/uiConfigContext.tsx +17 -29
  195. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +5 -5
  196. package/src/contexts/userIdentityContext/userIdentityContext.tsx +7 -6
  197. package/src/contexts/widgetConfigContext/__tests__/widgetConfigContext.test.tsx +7 -7
  198. package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +4 -2
  199. package/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.ts +4 -2
  200. package/src/hooks/Search/__tests__/useSearch.test.tsx +14 -8
  201. package/src/hooks/WidgetInteraction/useWidgetInteraction.ts +3 -2
  202. package/src/hooks/WidgetInteraction/utils.ts +3 -1
  203. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +3 -3
  204. package/src/services/amplitudeService/amplitudeService.ts +19 -6
  205. package/src/services/ga4ProjectionService/ga4ProjectionService.ts +3 -1
  206. package/src/services/userIdentityService/userIdentityService.ts +8 -8
@@ -14,6 +14,11 @@ interface AgentWrapperProps {
14
14
  children: ReactNode;
15
15
  enabledAgents: EnviveAgent[];
16
16
  }
17
+ interface ExtensionStatusCallbacks {
18
+ onInjectionLoading?: () => Promise<unknown> | void;
19
+ onInjectionSuccess?: () => Promise<unknown> | void;
20
+ onInjectionError?: (error: Error) => Promise<unknown> | void;
21
+ }
17
22
  interface EnviveProviderProps extends AgentWrapperProps {
18
23
  amplitudeApiKey?: string;
19
24
  dataResidency?: string;
@@ -42,8 +47,9 @@ interface EnviveProviderProps extends AgentWrapperProps {
42
47
  overrideConfig?: GraphQlConfigValues;
43
48
  mockSalesAgentData?: any;
44
49
  hardcopyOverride?: Partial<Record<WidgetTypeV3, HardcopyResponse>>;
50
+ extensionService?: ExtensionStatusCallbacks;
45
51
  }
46
52
  declare const EnviveProvider: React.FC<EnviveProviderProps>;
47
53
  //#endregion
48
- export { EnviveProvider };
49
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29udGV4dC5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9lbnZpdmVDb250ZXh0L2Vudml2ZUNvbnRleHQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRW52aXZlQ29uZmlnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB7IEFtcGxpdHVkZVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJJZGVudGl0eVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvdXNlcklkZW50aXR5U2VydmljZSc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICcuLi9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IEdyYXBoUWxDb25maWdWYWx1ZXMgfSBmcm9tICcuLi9ncmFwaHFsQ29udGV4dCc7XG5pbXBvcnQgeyBFbnZpdmVBZ2VudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgSGFyZGNvcHlSZXNwb25zZSB9IGZyb20gJy4uL2hhcmRjb3B5Q29udGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmludGVyZmFjZSBBZ2VudFdyYXBwZXJQcm9wcyB7XG4gICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICBlbmFibGVkQWdlbnRzOiBFbnZpdmVBZ2VudFtdO1xufVxuaW50ZXJmYWNlIEVudml2ZVByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBBZ2VudFdyYXBwZXJQcm9wcyB7XG4gICAgYW1wbGl0dWRlQXBpS2V5Pzogc3RyaW5nO1xuICAgIGRhdGFSZXNpZGVuY3k/OiBzdHJpbmc7XG4gICAgZW52Pzogc3RyaW5nO1xuICAgIGJhc2VVcmw/OiBzdHJpbmc7XG4gICAgcmVhY3RBcHBOYW1lPzogc3RyaW5nO1xuICAgIGNkblVybD86IHN0cmluZztcbiAgICBjb250ZXh0U291cmNlPzogc3RyaW5nO1xuICAgIG9yZ0xldmVsQXBpS2V5Pzogc3RyaW5nO1xuICAgIG9yZ1Nob3J0TmFtZT86IHN0cmluZztcbiAgICBpZGVudGlmeWluZ1ByZWZpeDogc3RyaW5nO1xuICAgIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICB2YXJpYW50VXJsT3ZlcnJpZGU/OiBzdHJpbmc7XG4gICAgdmFyaWFudEluZm9PdmVycmlkZT86IGFueTtcbiAgICBzaG93PzogYm9vbGVhbjtcbiAgICBlbnZpdmVPbj86IGJvb2xlYW47XG4gICAgcHVibGljS2V5Pzogc3RyaW5nO1xuICAgIGZlYXR1cmVHYXRlcz86IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107XG4gICAgZmVhdHVyZUZsYWdTZXJ2aWNlPzogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICAgIGVudml2ZUNvbmZpZ1NlcnZpY2U/OiBFbnZpdmVDb25maWdTZXJ2aWNlO1xuICAgIGFtcGxpdHVkZVNlcnZpY2U/OiBBbXBsaXR1ZGVTZXJ2aWNlO1xuICAgIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZz86IGJvb2xlYW47XG4gICAgcmVxdWVzdFYzQ29uZmlnPzogYm9vbGVhbjtcbiAgICB1c2VySWRlbnRpdHlTZXJ2aWNlPzogVXNlcklkZW50aXR5U2VydmljZTtcbiAgICBwcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gICAgb3ZlcnJpZGVDb25maWc/OiBHcmFwaFFsQ29uZmlnVmFsdWVzO1xuICAgIG1vY2tTYWxlc0FnZW50RGF0YT86IGFueTtcbiAgICBoYXJkY29weU92ZXJyaWRlPzogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj47XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBFbnZpdmVQcm92aWRlcjogUmVhY3QuRkM8RW52aXZlUHJvdmlkZXJQcm9wcz47XG5leHBvcnQge307XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLElBQUksb0JBQW9CO0NBQUM7T0FBRztPQUFBO0NBQUE7QUFDNUIsSUFBSSxzQkFBbUI7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3ZCLElBQVcsaUJBQWlCO0NBQUM7T0FBRztPQUFBLE1BQUE7Q0FBQSJ9
54
+ export { EnviveProvider, ExtensionStatusCallbacks };
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29udGV4dC5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9lbnZpdmVDb250ZXh0L2Vudml2ZUNvbnRleHQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRW52aXZlQ29uZmlnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB7IEFtcGxpdHVkZVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJJZGVudGl0eVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvdXNlcklkZW50aXR5U2VydmljZSc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICcuLi9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IEdyYXBoUWxDb25maWdWYWx1ZXMgfSBmcm9tICcuLi9ncmFwaHFsQ29udGV4dCc7XG5pbXBvcnQgeyBFbnZpdmVBZ2VudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgSGFyZGNvcHlSZXNwb25zZSB9IGZyb20gJy4uL2hhcmRjb3B5Q29udGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmludGVyZmFjZSBBZ2VudFdyYXBwZXJQcm9wcyB7XG4gICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICBlbmFibGVkQWdlbnRzOiBFbnZpdmVBZ2VudFtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25TdGF0dXNDYWxsYmFja3Mge1xuICAgIG9uSW5qZWN0aW9uTG9hZGluZz86ICgpID0+IFByb21pc2U8dW5rbm93bj4gfCB2b2lkO1xuICAgIG9uSW5qZWN0aW9uU3VjY2Vzcz86ICgpID0+IFByb21pc2U8dW5rbm93bj4gfCB2b2lkO1xuICAgIG9uSW5qZWN0aW9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcbn1cbmludGVyZmFjZSBFbnZpdmVQcm92aWRlclByb3BzIGV4dGVuZHMgQWdlbnRXcmFwcGVyUHJvcHMge1xuICAgIGFtcGxpdHVkZUFwaUtleT86IHN0cmluZztcbiAgICBkYXRhUmVzaWRlbmN5Pzogc3RyaW5nO1xuICAgIGVudj86IHN0cmluZztcbiAgICBiYXNlVXJsPzogc3RyaW5nO1xuICAgIHJlYWN0QXBwTmFtZT86IHN0cmluZztcbiAgICBjZG5Vcmw/OiBzdHJpbmc7XG4gICAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgICBvcmdMZXZlbEFwaUtleT86IHN0cmluZztcbiAgICBvcmdTaG9ydE5hbWU/OiBzdHJpbmc7XG4gICAgaWRlbnRpZnlpbmdQcmVmaXg6IHN0cmluZztcbiAgICBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgdmFyaWFudFVybE92ZXJyaWRlPzogc3RyaW5nO1xuICAgIHZhcmlhbnRJbmZvT3ZlcnJpZGU/OiBhbnk7XG4gICAgc2hvdz86IGJvb2xlYW47XG4gICAgZW52aXZlT24/OiBib29sZWFuO1xuICAgIHB1YmxpY0tleT86IHN0cmluZztcbiAgICBmZWF0dXJlR2F0ZXM/OiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xuICAgIGZlYXR1cmVGbGFnU2VydmljZT86IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgICBlbnZpdmVDb25maWdTZXJ2aWNlPzogRW52aXZlQ29uZmlnU2VydmljZTtcbiAgICBhbXBsaXR1ZGVTZXJ2aWNlPzogQW1wbGl0dWRlU2VydmljZTtcbiAgICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xuICAgIHJlcXVlc3RWM0NvbmZpZz86IGJvb2xlYW47XG4gICAgdXNlcklkZW50aXR5U2VydmljZT86IFVzZXJJZGVudGl0eVNlcnZpY2U7XG4gICAgcHJldmlld01vZGU/OiBib29sZWFuO1xuICAgIG92ZXJyaWRlQ29uZmlnPzogR3JhcGhRbENvbmZpZ1ZhbHVlcztcbiAgICBtb2NrU2FsZXNBZ2VudERhdGE/OiBhbnk7XG4gICAgaGFyZGNvcHlPdmVycmlkZT86IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+O1xuICAgIGV4dGVuc2lvblNlcnZpY2U/OiBFeHRlbnNpb25TdGF0dXNDYWxsYmFja3M7XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBFbnZpdmVQcm92aWRlcjogUmVhY3QuRkM8RW52aXZlUHJvdmlkZXJQcm9wcz47XG5leHBvcnQge307XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLElBQUksb0JBQW9CO0NBQUM7T0FBRztPQUFBO0NBQUE7QUFDNUIsSUFBVywyQkFBWTtDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUN2QixJQUFJLHNCQUFzQjtDQUFDO09BQUs7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNoQyxJQUFBLGlCQUFBO0NBQUE7T0FBQTtPQUFBLE1BQUE7Q0FBQSJ9
@@ -2,10 +2,10 @@ import logger_default from "../../application/logging/logger.js";
2
2
  import { LocalStorageProvider } from "../localStorageContext/localStorageContext.js";
3
3
  import "../localStorageContext/index.js";
4
4
  import { EnviveConfigProvider } from "../enviveConfigContext/enviveConfigContext.js";
5
+ import "../enviveConfigContext/index.js";
5
6
  import { FeatureFlagService, FeatureFlagServiceProvider } from "../featureFlagServiceContext/featureFlagServiceContext.js";
6
7
  import { AmplitudeProvider } from "../amplitudeContext/amplitudeContext.js";
7
8
  import "../amplitudeContext/index.js";
8
- import "../enviveConfigContext/index.js";
9
9
  import { EnviveConfigService } from "../../services/enviveConfigService/enviveConfigService.js";
10
10
  import { UserIdentityService } from "../../services/userIdentityService/userIdentityService.js";
11
11
  import "../../services/userIdentityService/index.js";
@@ -30,14 +30,12 @@ import { WidgetConfigProvider } from "../widgetConfigContext/widgetConfigContext
30
30
  import "../widgetConfigContext/index.js";
31
31
  import { PageProvider } from "../pageContext/pageContext.js";
32
32
  import "../pageContext/index.js";
33
- import { UiConfigProvider } from "../uiConfigContext/uiConfigContext.js";
34
- import "../uiConfigContext/index.js";
35
33
  import { WindowChatToggleBinder } from "./WindowChatToggleBinder.js";
36
- import { createContext, useEffect, useMemo, useState } from "react";
34
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
37
35
  import { jsx, jsxs } from "react/jsx-runtime";
38
36
 
39
37
  //#region src/contexts/enviveContext/enviveContext.tsx
40
- const EnviveContext = createContext(null);
38
+ const logger = new logger_default("enviveContext");
41
39
  const SearchAgentWrapper = ({ children, enabledAgents }) => {
42
40
  if (!enabledAgents.includes(EnviveAgent.SearchAgent)) return children;
43
41
  return /* @__PURE__ */ jsx(SearchProvider, { children });
@@ -53,8 +51,21 @@ const SalesAgentWrapper = ({ children, enabledAgents, previewMode, showDebugBar,
53
51
  })
54
52
  });
55
53
  };
56
- const EnviveProvider = ({ children, previewMode = false, overrideConfig, enabledAgents, enviveConfigService: inputEnviveConfigService, featureFlagService: inputFeatureFlagService, amplitudeService: inputAmplitudeService, userIdentityService: inputUserIdentityService, mockV3ConfigToDeprecatedConfig = false, requestV3Config = false, mockSalesAgentData, hardcopyOverride, ...config }) => {
54
+ const EnviveProvider = ({ children, previewMode = false, overrideConfig, enabledAgents, enviveConfigService: inputEnviveConfigService, featureFlagService: inputFeatureFlagService, amplitudeService: inputAmplitudeService, userIdentityService: inputUserIdentityService, mockV3ConfigToDeprecatedConfig = false, requestV3Config = false, mockSalesAgentData, hardcopyOverride, extensionService, ...config }) => {
57
55
  const [userId, setUserId] = useState("");
56
+ const didReportSuccessRef = useRef(false);
57
+ const invokeExtensionCallback = useCallback((callback) => {
58
+ if (!callback) return;
59
+ Promise.resolve(callback()).catch((error) => {
60
+ logger.logDebug("Extension status callback failed", error);
61
+ });
62
+ }, []);
63
+ const invokeExtensionErrorCallback = useCallback((error) => {
64
+ if (!extensionService?.onInjectionError) return;
65
+ Promise.resolve(extensionService.onInjectionError(error)).catch((callbackError) => {
66
+ logger.logDebug("Extension error callback failed", callbackError);
67
+ });
68
+ }, [extensionService]);
58
69
  const userIdService = useMemo(() => inputUserIdentityService ?? new UserIdentityService({ apiKey: config?.amplitudeApiKey || "" }), [config?.amplitudeApiKey, inputUserIdentityService]);
59
70
  useEffect(() => {
60
71
  const fetchUserId = async () => {
@@ -70,22 +81,42 @@ const EnviveProvider = ({ children, previewMode = false, overrideConfig, enabled
70
81
  const source = "app";
71
82
  const [enviveServiceConfig, setEnviveServiceConfig] = useState(null);
72
83
  useEffect(() => {
73
- (inputEnviveConfigService ?? new EnviveConfigService({
84
+ invokeExtensionCallback(extensionService?.onInjectionLoading);
85
+ const enviveConfigService = inputEnviveConfigService ?? new EnviveConfigService({
74
86
  baseUrl: config?.baseUrl || "",
75
87
  apiKey: config?.orgLevelApiKey || "",
76
88
  userId,
77
89
  namespace,
78
90
  source
79
- })).getEnviveConfig().then((newConfig) => {
80
- setEnviveServiceConfig(newConfig);
81
- return newConfig;
82
91
  });
92
+ const fetchEnviveConfig = async () => {
93
+ try {
94
+ setEnviveServiceConfig(await enviveConfigService.getEnviveConfig());
95
+ } catch (error) {
96
+ const resolvedError = error instanceof Error ? error : /* @__PURE__ */ new Error("Failed to load envive config");
97
+ logger.logError("Failed to initialize EnviveProvider", resolvedError);
98
+ invokeExtensionErrorCallback(resolvedError);
99
+ }
100
+ };
101
+ fetchEnviveConfig();
83
102
  }, [
84
103
  config,
85
104
  userId,
86
105
  namespace,
87
106
  source,
88
- inputEnviveConfigService
107
+ inputEnviveConfigService,
108
+ extensionService,
109
+ invokeExtensionCallback,
110
+ invokeExtensionErrorCallback
111
+ ]);
112
+ useEffect(() => {
113
+ if (!enviveServiceConfig || didReportSuccessRef.current) return;
114
+ didReportSuccessRef.current = true;
115
+ invokeExtensionCallback(extensionService?.onInjectionSuccess);
116
+ }, [
117
+ enviveServiceConfig,
118
+ extensionService,
119
+ invokeExtensionCallback
89
120
  ]);
90
121
  const enviveConfig = useMemo(() => ({
91
122
  ...config,
@@ -93,45 +124,43 @@ const EnviveProvider = ({ children, previewMode = false, overrideConfig, enabled
93
124
  orgShortName: enviveServiceConfig?.org?.org?.short_name || "",
94
125
  orgId: enviveServiceConfig?.org?.org?.id || ""
95
126
  }), [config, enviveServiceConfig]);
96
- logger_default.logDebug("enviveContext: enviveServiceConfig", enviveServiceConfig, config);
97
- logger_default.logDebug("enviveContext: enviveConfig", enviveConfig);
127
+ logger.logDebug("enviveContext: enviveServiceConfig", enviveServiceConfig, config);
128
+ logger.logDebug("enviveContext: enviveConfig", enviveConfig);
98
129
  const featureFlagService = useMemo(() => inputFeatureFlagService ?? new FeatureFlagService(enviveConfig.featureGates), [enviveConfig.featureGates, inputFeatureFlagService]);
99
130
  if (enviveServiceConfig === null || enviveConfig === null) return null;
100
- return /* @__PURE__ */ jsx(EnviveContext.Provider, {
101
- value: null,
102
- children: /* @__PURE__ */ jsx(EnviveConfigProvider, {
103
- ...enviveConfig,
104
- children: /* @__PURE__ */ jsx(GraphQLProvider, {
105
- mockV3ConfigToDeprecatedConfig,
106
- requestV3Config,
107
- children: /* @__PURE__ */ jsx(NewOrgConfigProvider, {
108
- overrideConfig,
109
- children: /* @__PURE__ */ jsx(LocalStorageProvider, { children: /* @__PURE__ */ jsx(FeatureFlagServiceProvider, {
110
- featureFlagService,
111
- children: /* @__PURE__ */ jsx(UserIdentityProvider, {
112
- userIdService,
113
- children: /* @__PURE__ */ jsx(AmplitudeProvider, {
114
- externalAmplitudeService: inputAmplitudeService,
115
- children: /* @__PURE__ */ jsx(PageProvider, {
116
- previewMode,
117
- children: /* @__PURE__ */ jsx(UiConfigProvider, { children: /* @__PURE__ */ jsx(WidgetConfigProvider, { children: /* @__PURE__ */ jsx(HardcopyProvider, {
118
- hardcopyOverride,
119
- children: /* @__PURE__ */ jsx(EnviveCssProvider, { children: /* @__PURE__ */ jsxs(SearchAgentWrapper, {
131
+ return /* @__PURE__ */ jsx(EnviveConfigProvider, {
132
+ ...enviveConfig,
133
+ children: /* @__PURE__ */ jsx(GraphQLProvider, {
134
+ mockV3ConfigToDeprecatedConfig,
135
+ requestV3Config,
136
+ children: /* @__PURE__ */ jsx(NewOrgConfigProvider, {
137
+ overrideConfig,
138
+ children: /* @__PURE__ */ jsx(LocalStorageProvider, { children: /* @__PURE__ */ jsx(FeatureFlagServiceProvider, {
139
+ featureFlagService,
140
+ children: /* @__PURE__ */ jsx(UserIdentityProvider, {
141
+ userIdService,
142
+ children: /* @__PURE__ */ jsx(AmplitudeProvider, {
143
+ externalAmplitudeService: inputAmplitudeService,
144
+ children: /* @__PURE__ */ jsx(PageProvider, {
145
+ previewMode,
146
+ onUrlResolverNotReady: extensionService?.onInjectionError,
147
+ children: /* @__PURE__ */ jsx(WidgetConfigProvider, { children: /* @__PURE__ */ jsx(HardcopyProvider, {
148
+ hardcopyOverride,
149
+ children: /* @__PURE__ */ jsx(EnviveCssProvider, { children: /* @__PURE__ */ jsxs(SearchAgentWrapper, {
150
+ enabledAgents,
151
+ children: [/* @__PURE__ */ jsx(WindowChatToggleBinder, {}), /* @__PURE__ */ jsx(SalesAgentWrapper, {
120
152
  enabledAgents,
121
- children: [/* @__PURE__ */ jsx(WindowChatToggleBinder, {}), /* @__PURE__ */ jsx(SalesAgentWrapper, {
122
- enabledAgents,
123
- showDebugBar: config.enviveOn || false,
124
- previewMode,
125
- mockSalesAgentData,
126
- children
127
- })]
128
- }) })
129
- }) }) })
130
- })
153
+ showDebugBar: config.enviveOn || false,
154
+ previewMode,
155
+ mockSalesAgentData,
156
+ children
157
+ })]
158
+ }) })
159
+ }) })
131
160
  })
132
161
  })
133
- }) })
134
- })
162
+ })
163
+ }) })
135
164
  })
136
165
  })
137
166
  });
@@ -139,4 +168,4 @@ const EnviveProvider = ({ children, previewMode = false, overrideConfig, enabled
139
168
 
140
169
  //#endregion
141
170
  export { EnviveProvider };
142
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29udGV4dC5qcyIsIm5hbWVzIjpbIlNlYXJjaEFnZW50V3JhcHBlcjogUmVhY3QuRkM8QWdlbnRXcmFwcGVyUHJvcHM+IiwiU2FsZXNBZ2VudFdyYXBwZXI6IFJlYWN0LkZDPFNhbGVzQWdlbnRXcmFwcGVyUHJvcHM+IiwiRW52aXZlUHJvdmlkZXI6IFJlYWN0LkZDPEVudml2ZVByb3ZpZGVyUHJvcHM+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2Vudml2ZUNvbnRleHQvZW52aXZlQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRW52aXZlQ29uZmlnU2VydmljZSwgRW52aXZlU2VydmljZUNvbmZpZyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB7IEFtcGxpdHVkZVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IFVzZXJJZGVudGl0eVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvdXNlcklkZW50aXR5U2VydmljZSc7XG5pbXBvcnQgeyBBbXBsaXR1ZGVQcm92aWRlciB9IGZyb20gJy4uL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgRW52aXZlQ29uZmlnUHJvdmlkZXIgfSBmcm9tICcuLi9lbnZpdmVDb25maWdDb250ZXh0JztcbmltcG9ydCB7IEVudml2ZUNzc1Byb3ZpZGVyIH0gZnJvbSAnLi4vZW52aXZlQ3NzQ29udGV4dCc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UsIEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCc7XG5pbXBvcnQgeyBHcmFwaFFMUHJvdmlkZXIsIEdyYXBoUWxDb25maWdWYWx1ZXMgfSBmcm9tICcuLi9ncmFwaHFsQ29udGV4dCc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VQcm92aWRlciB9IGZyb20gJy4uL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IHsgTmV3T3JnQ29uZmlnUHJvdmlkZXIgfSBmcm9tICcuLi9uZXdPcmdDb25maWdDb250ZXh0JztcbmltcG9ydCB7IFVzZXJJZGVudGl0eVByb3ZpZGVyIH0gZnJvbSAnLi4vdXNlcklkZW50aXR5Q29udGV4dCc7XG5pbXBvcnQgeyBFbnZpdmVBZ2VudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU2VhcmNoUHJvdmlkZXIgfSBmcm9tICcuLi9zZWFyY2hDb250ZXh0JztcbmltcG9ydCB7IFNhbGVzQWdlbnRQcm92aWRlciB9IGZyb20gJy4uL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRDb250ZXh0JztcbmltcG9ydCB7IFN5c3RlbVNldHRpbmdzQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnLi4vc3lzdGVtU2V0dGluZ3NDb250ZXh0JztcbmltcG9ydCB7IEhhcmRjb3B5UHJvdmlkZXIsIEhhcmRjb3B5UmVzcG9uc2UgfSBmcm9tICcuLi9oYXJkY29weUNvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnLi4vdHlwZXNWMyc7XG5pbXBvcnQgeyBXaWRnZXRDb25maWdQcm92aWRlciB9IGZyb20gJy4uL3dpZGdldENvbmZpZ0NvbnRleHQnO1xuaW1wb3J0IHsgUGFnZVByb3ZpZGVyIH0gZnJvbSAnLi4vcGFnZUNvbnRleHQnO1xuaW1wb3J0IHsgVWlDb25maWdQcm92aWRlciB9IGZyb20gJy4uL3VpQ29uZmlnQ29udGV4dCc7XG5pbXBvcnQgeyBXaW5kb3dDaGF0VG9nZ2xlQmluZGVyIH0gZnJvbSAnLi9XaW5kb3dDaGF0VG9nZ2xlQmluZGVyJztcblxuY29uc3QgRW52aXZlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8bnVsbD4obnVsbCk7XG5cbmludGVyZmFjZSBBZ2VudFdyYXBwZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGVuYWJsZWRBZ2VudHM6IEVudml2ZUFnZW50W107XG59XG5cbmludGVyZmFjZSBFbnZpdmVQcm92aWRlclByb3BzIGV4dGVuZHMgQWdlbnRXcmFwcGVyUHJvcHMge1xuICBhbXBsaXR1ZGVBcGlLZXk/OiBzdHJpbmc7XG4gIGRhdGFSZXNpZGVuY3k/OiBzdHJpbmc7XG4gIGVudj86IHN0cmluZztcbiAgYmFzZVVybD86IHN0cmluZztcbiAgcmVhY3RBcHBOYW1lPzogc3RyaW5nO1xuICBjZG5Vcmw/OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U/OiBzdHJpbmc7XG4gIG9yZ0xldmVsQXBpS2V5Pzogc3RyaW5nO1xuICBvcmdTaG9ydE5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aWZ5aW5nUHJlZml4OiBzdHJpbmc7XG4gIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgdmFyaWFudFVybE92ZXJyaWRlPzogc3RyaW5nO1xuICB2YXJpYW50SW5mb092ZXJyaWRlPzogYW55O1xuICBzaG93PzogYm9vbGVhbjtcbiAgZW52aXZlT24/OiBib29sZWFuO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIGZlYXR1cmVHYXRlcz86IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107IC8vIE5ldyBwcm9wIGZvciBmZWF0dXJlIGdhdGVzXG4gIGZlYXR1cmVGbGFnU2VydmljZT86IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgZW52aXZlQ29uZmlnU2VydmljZT86IEVudml2ZUNvbmZpZ1NlcnZpY2U7XG4gIGFtcGxpdHVkZVNlcnZpY2U/OiBBbXBsaXR1ZGVTZXJ2aWNlO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICB1c2VySWRlbnRpdHlTZXJ2aWNlPzogVXNlcklkZW50aXR5U2VydmljZTtcbiAgcHJldmlld01vZGU/OiBib29sZWFuO1xuICBvdmVycmlkZUNvbmZpZz86IEdyYXBoUWxDb25maWdWYWx1ZXM7XG4gIG1vY2tTYWxlc0FnZW50RGF0YT86IGFueTtcbiAgaGFyZGNvcHlPdmVycmlkZT86IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+O1xufVxuXG5jb25zdCBTZWFyY2hBZ2VudFdyYXBwZXI6IFJlYWN0LkZDPEFnZW50V3JhcHBlclByb3BzPiA9ICh7IGNoaWxkcmVuLCBlbmFibGVkQWdlbnRzIH0pID0+IHtcbiAgaWYgKCFlbmFibGVkQWdlbnRzLmluY2x1ZGVzKEVudml2ZUFnZW50LlNlYXJjaEFnZW50KSkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICByZXR1cm4gPFNlYXJjaFByb3ZpZGVyPntjaGlsZHJlbn08L1NlYXJjaFByb3ZpZGVyPjtcbn07XG5cbmludGVyZmFjZSBTYWxlc0FnZW50V3JhcHBlclByb3BzIGV4dGVuZHMgQWdlbnRXcmFwcGVyUHJvcHMge1xuICBwcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gIHNob3dEZWJ1Z0JhcjogYm9vbGVhbjtcbiAgbW9ja1NhbGVzQWdlbnREYXRhPzogYW55O1xufVxuXG5jb25zdCBTYWxlc0FnZW50V3JhcHBlcjogUmVhY3QuRkM8U2FsZXNBZ2VudFdyYXBwZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgZW5hYmxlZEFnZW50cyxcbiAgcHJldmlld01vZGUsXG4gIHNob3dEZWJ1Z0JhcixcbiAgbW9ja1NhbGVzQWdlbnREYXRhLFxufSkgPT4ge1xuICBpZiAoIWVuYWJsZWRBZ2VudHMuaW5jbHVkZXMoRW52aXZlQWdlbnQuU2FsZXNBZ2VudCkpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8U3lzdGVtU2V0dGluZ3NDb250ZXh0UHJvdmlkZXIgc2hvd0RlYnVnQmFyPXtzaG93RGVidWdCYXJ9PlxuICAgICAgPFNhbGVzQWdlbnRQcm92aWRlclxuICAgICAgICBwcmV2aWV3TW9kZT17cHJldmlld01vZGV9XG4gICAgICAgIG1vY2tEYXRhPXttb2NrU2FsZXNBZ2VudERhdGF9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU2FsZXNBZ2VudFByb3ZpZGVyPlxuICAgIDwvU3lzdGVtU2V0dGluZ3NDb250ZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgRW52aXZlUHJvdmlkZXI6IFJlYWN0LkZDPEVudml2ZVByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIHByZXZpZXdNb2RlID0gZmFsc2UsXG4gIG92ZXJyaWRlQ29uZmlnLFxuICBlbmFibGVkQWdlbnRzLFxuICBlbnZpdmVDb25maWdTZXJ2aWNlOiBpbnB1dEVudml2ZUNvbmZpZ1NlcnZpY2UsXG4gIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRGZWF0dXJlRmxhZ1NlcnZpY2UsXG4gIGFtcGxpdHVkZVNlcnZpY2U6IGlucHV0QW1wbGl0dWRlU2VydmljZSxcbiAgdXNlcklkZW50aXR5U2VydmljZTogaW5wdXRVc2VySWRlbnRpdHlTZXJ2aWNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbiAgcmVxdWVzdFYzQ29uZmlnID0gZmFsc2UsXG4gIG1vY2tTYWxlc0FnZW50RGF0YSxcbiAgaGFyZGNvcHlPdmVycmlkZSxcbiAgLi4uY29uZmlnXG59KSA9PiB7XG4gIGNvbnN0IFt1c2VySWQsIHNldFVzZXJJZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcblxuICBjb25zdCB1c2VySWRTZXJ2aWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgaW5wdXRVc2VySWRlbnRpdHlTZXJ2aWNlID8/XG4gICAgICBuZXcgVXNlcklkZW50aXR5U2VydmljZSh7IGFwaUtleTogY29uZmlnPy5hbXBsaXR1ZGVBcGlLZXkgfHwgJycgfSksXG4gICAgW2NvbmZpZz8uYW1wbGl0dWRlQXBpS2V5LCBpbnB1dFVzZXJJZGVudGl0eVNlcnZpY2VdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZmV0Y2hVc2VySWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHVzZXJJZFNlcnZpY2UuZ2V0VXNlcklkT3JEZWZhdWx0KCk7XG4gICAgICBzZXRVc2VySWQoaWQpO1xuICAgIH07XG5cbiAgICBmZXRjaFVzZXJJZCgpO1xuICB9LCBbY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgaW5wdXRVc2VySWRlbnRpdHlTZXJ2aWNlLCB1c2VySWRTZXJ2aWNlXSk7XG5cbiAgY29uc3QgbmFtZXNwYWNlID0gJ3NwaWZmeS1yZWFjdC1jb21wb25lbnRzJzsgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgbmFtZXNwYWNlP1xuICBjb25zdCBzb3VyY2UgPSAnYXBwJzsgLy8gVE9ETzogTWFrZSB0aGlzIGRlcGVuZGVudCB1cG9uIHRoZSBcInNwaWZmeV9vblwiIHF1ZXJ5IHBhcmFtXG4gIGNvbnN0IFtlbnZpdmVTZXJ2aWNlQ29uZmlnLCBzZXRFbnZpdmVTZXJ2aWNlQ29uZmlnXSA9IHVzZVN0YXRlPEVudml2ZVNlcnZpY2VDb25maWcgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFJlYWxseSBub3QgaGFwcHkgd2l0aCB0aGlzIGFwcHJvYWNoLCBidXQgSSdtIHNlZWluZyA0MjkgZXJyb3JzIGluIHRoZSB0ZXN0c1xuICAgIC8vIGJlY2F1c2Ugb2YgdGhlIHJhdGUgbGltaXRpbmcgb24gdGhlIEFQSS5cbiAgICBjb25zdCBlbnZpdmVDb25maWdTZXJ2aWNlID1cbiAgICAgIGlucHV0RW52aXZlQ29uZmlnU2VydmljZSA/P1xuICAgICAgbmV3IEVudml2ZUNvbmZpZ1NlcnZpY2Uoe1xuICAgICAgICBiYXNlVXJsOiBjb25maWc/LmJhc2VVcmwgfHwgJycsXG4gICAgICAgIGFwaUtleTogY29uZmlnPy5vcmdMZXZlbEFwaUtleSB8fCAnJyxcbiAgICAgICAgdXNlcklkLFxuICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSB8fCAnJyxcbiAgICAgICAgc291cmNlOiBzb3VyY2UgfHwgJycsXG4gICAgICB9KTtcbiAgICBlbnZpdmVDb25maWdTZXJ2aWNlLmdldEVudml2ZUNvbmZpZygpLnRoZW4obmV3Q29uZmlnID0+IHtcbiAgICAgIHNldEVudml2ZVNlcnZpY2VDb25maWcobmV3Q29uZmlnKTtcbiAgICAgIHJldHVybiBuZXdDb25maWc7XG4gICAgfSk7XG4gIH0sIFtjb25maWcsIHVzZXJJZCwgbmFtZXNwYWNlLCBzb3VyY2UsIGlucHV0RW52aXZlQ29uZmlnU2VydmljZV0pO1xuXG4gIGNvbnN0IGVudml2ZUNvbmZpZyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGZlYXR1cmVHYXRlczogZW52aXZlU2VydmljZUNvbmZpZz8uZ2F0ZXMgfHwgW10sXG4gICAgICBvcmdTaG9ydE5hbWU6IGVudml2ZVNlcnZpY2VDb25maWc/Lm9yZz8ub3JnPy5zaG9ydF9uYW1lIHx8ICcnLFxuICAgICAgb3JnSWQ6IGVudml2ZVNlcnZpY2VDb25maWc/Lm9yZz8ub3JnPy5pZCB8fCAnJyxcbiAgICB9KSxcbiAgICBbY29uZmlnLCBlbnZpdmVTZXJ2aWNlQ29uZmlnXSxcbiAgKTtcbiAgTG9nZ2VyLmxvZ0RlYnVnKCdlbnZpdmVDb250ZXh0OiBlbnZpdmVTZXJ2aWNlQ29uZmlnJywgZW52aXZlU2VydmljZUNvbmZpZywgY29uZmlnKTtcbiAgTG9nZ2VyLmxvZ0RlYnVnKCdlbnZpdmVDb250ZXh0OiBlbnZpdmVDb25maWcnLCBlbnZpdmVDb25maWcpO1xuXG4gIGNvbnN0IGZlYXR1cmVGbGFnU2VydmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gaW5wdXRGZWF0dXJlRmxhZ1NlcnZpY2UgPz8gbmV3IEZlYXR1cmVGbGFnU2VydmljZShlbnZpdmVDb25maWcuZmVhdHVyZUdhdGVzKSxcbiAgICBbZW52aXZlQ29uZmlnLmZlYXR1cmVHYXRlcywgaW5wdXRGZWF0dXJlRmxhZ1NlcnZpY2VdLFxuICApO1xuXG4gIGlmIChlbnZpdmVTZXJ2aWNlQ29uZmlnID09PSBudWxsIHx8IGVudml2ZUNvbmZpZyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RW52aXZlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17bnVsbH0+XG4gICAgICA8RW52aXZlQ29uZmlnUHJvdmlkZXIgey4uLmVudml2ZUNvbmZpZ30+XG4gICAgICAgIDxHcmFwaFFMUHJvdmlkZXJcbiAgICAgICAgICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc9e21vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ31cbiAgICAgICAgICByZXF1ZXN0VjNDb25maWc9e3JlcXVlc3RWM0NvbmZpZ31cbiAgICAgICAgPlxuICAgICAgICAgIDxOZXdPcmdDb25maWdQcm92aWRlciBvdmVycmlkZUNvbmZpZz17b3ZlcnJpZGVDb25maWd9PlxuICAgICAgICAgICAgPExvY2FsU3RvcmFnZVByb3ZpZGVyPlxuICAgICAgICAgICAgICA8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXIgZmVhdHVyZUZsYWdTZXJ2aWNlPXtmZWF0dXJlRmxhZ1NlcnZpY2V9PlxuICAgICAgICAgICAgICAgIDxVc2VySWRlbnRpdHlQcm92aWRlciB1c2VySWRTZXJ2aWNlPXt1c2VySWRTZXJ2aWNlfT5cbiAgICAgICAgICAgICAgICAgIDxBbXBsaXR1ZGVQcm92aWRlciBleHRlcm5hbEFtcGxpdHVkZVNlcnZpY2U9e2lucHV0QW1wbGl0dWRlU2VydmljZX0+XG4gICAgICAgICAgICAgICAgICAgIDxQYWdlUHJvdmlkZXIgcHJldmlld01vZGU9e3ByZXZpZXdNb2RlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VWlDb25maWdQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxXaWRnZXRDb25maWdQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhcmRjb3B5UHJvdmlkZXIgaGFyZGNvcHlPdmVycmlkZT17aGFyZGNvcHlPdmVycmlkZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVudml2ZUNzc1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEFnZW50V3JhcHBlciBlbmFibGVkQWdlbnRzPXtlbmFibGVkQWdlbnRzfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFdpbmRvd0NoYXRUb2dnbGVCaW5kZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNhbGVzQWdlbnRXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEFnZW50cz17ZW5hYmxlZEFnZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93RGVidWdCYXI9e2NvbmZpZy5lbnZpdmVPbiB8fCBmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3TW9kZT17cHJldmlld01vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja1NhbGVzQWdlbnREYXRhPXttb2NrU2FsZXNBZ2VudERhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2FsZXNBZ2VudFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlYXJjaEFnZW50V3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Vudml2ZUNzc1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhcmRjb3B5UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1dpZGdldENvbmZpZ1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlDb25maWdQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9QYWdlUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8L0FtcGxpdHVkZVByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvVXNlcklkZW50aXR5UHJvdmlkZXI+XG4gICAgICAgICAgICAgIDwvRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0xvY2FsU3RvcmFnZVByb3ZpZGVyPlxuICAgICAgICAgIDwvTmV3T3JnQ29uZmlnUHJvdmlkZXI+XG4gICAgICAgIDwvR3JhcGhRTFByb3ZpZGVyPlxuICAgICAgPC9FbnZpdmVDb25maWdQcm92aWRlcj5cbiAgICA8L0Vudml2ZUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkEsTUFBTSxnQkFBZ0IsY0FBb0IsS0FBSztBQXFDL0MsTUFBTUEsc0JBQW1ELEVBQUUsVUFBVSxvQkFBb0I7QUFDdkYsS0FBSSxDQUFDLGNBQWMsU0FBUyxZQUFZLFlBQVksQ0FDbEQsUUFBTztBQUVULFFBQU8sb0JBQUMsa0JBQWdCLFdBQTBCOztBQVNwRCxNQUFNQyxxQkFBdUQsRUFDM0QsVUFDQSxlQUNBLGFBQ0EsY0FDQSx5QkFDSTtBQUNKLEtBQUksQ0FBQyxjQUFjLFNBQVMsWUFBWSxXQUFXLENBQ2pELFFBQU87QUFFVCxRQUNFLG9C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
171
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsIlNlYXJjaEFnZW50V3JhcHBlcjogUmVhY3QuRkM8QWdlbnRXcmFwcGVyUHJvcHM+IiwiU2FsZXNBZ2VudFdyYXBwZXI6IFJlYWN0LkZDPFNhbGVzQWdlbnRXcmFwcGVyUHJvcHM+IiwiRW52aXZlUHJvdmlkZXI6IFJlYWN0LkZDPEVudml2ZVByb3ZpZGVyUHJvcHM+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2Vudml2ZUNvbnRleHQvZW52aXZlQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRW52aXZlQ29uZmlnU2VydmljZSwgRW52aXZlU2VydmljZUNvbmZpZyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB7IEFtcGxpdHVkZVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IFVzZXJJZGVudGl0eVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvdXNlcklkZW50aXR5U2VydmljZSc7XG5pbXBvcnQgeyBBbXBsaXR1ZGVQcm92aWRlciB9IGZyb20gJy4uL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgRW52aXZlQ29uZmlnUHJvdmlkZXIgfSBmcm9tICcuLi9lbnZpdmVDb25maWdDb250ZXh0JztcbmltcG9ydCB7IEVudml2ZUNzc1Byb3ZpZGVyIH0gZnJvbSAnLi4vZW52aXZlQ3NzQ29udGV4dCc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UsIEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCc7XG5pbXBvcnQgeyBHcmFwaFFMUHJvdmlkZXIsIEdyYXBoUWxDb25maWdWYWx1ZXMgfSBmcm9tICcuLi9ncmFwaHFsQ29udGV4dCc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VQcm92aWRlciB9IGZyb20gJy4uL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IHsgTmV3T3JnQ29uZmlnUHJvdmlkZXIgfSBmcm9tICcuLi9uZXdPcmdDb25maWdDb250ZXh0JztcbmltcG9ydCB7IFVzZXJJZGVudGl0eVByb3ZpZGVyIH0gZnJvbSAnLi4vdXNlcklkZW50aXR5Q29udGV4dCc7XG5pbXBvcnQgeyBFbnZpdmVBZ2VudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU2VhcmNoUHJvdmlkZXIgfSBmcm9tICcuLi9zZWFyY2hDb250ZXh0JztcbmltcG9ydCB7IFNhbGVzQWdlbnRQcm92aWRlciB9IGZyb20gJy4uL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRDb250ZXh0JztcbmltcG9ydCB7IFN5c3RlbVNldHRpbmdzQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnLi4vc3lzdGVtU2V0dGluZ3NDb250ZXh0JztcbmltcG9ydCB7IEhhcmRjb3B5UHJvdmlkZXIsIEhhcmRjb3B5UmVzcG9uc2UgfSBmcm9tICcuLi9oYXJkY29weUNvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnLi4vdHlwZXNWMyc7XG5pbXBvcnQgeyBXaWRnZXRDb25maWdQcm92aWRlciB9IGZyb20gJy4uL3dpZGdldENvbmZpZ0NvbnRleHQnO1xuaW1wb3J0IHsgUGFnZVByb3ZpZGVyIH0gZnJvbSAnLi4vcGFnZUNvbnRleHQnO1xuaW1wb3J0IHsgV2luZG93Q2hhdFRvZ2dsZUJpbmRlciB9IGZyb20gJy4vV2luZG93Q2hhdFRvZ2dsZUJpbmRlcic7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2Vudml2ZUNvbnRleHQnKTtcblxuaW50ZXJmYWNlIEFnZW50V3JhcHBlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgZW5hYmxlZEFnZW50czogRW52aXZlQWdlbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25TdGF0dXNDYWxsYmFja3Mge1xuICBvbkluamVjdGlvbkxvYWRpbmc/OiAoKSA9PiBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcbiAgb25JbmplY3Rpb25TdWNjZXNzPzogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHZvaWQ7XG4gIG9uSW5qZWN0aW9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcbn1cblxuaW50ZXJmYWNlIEVudml2ZVByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBBZ2VudFdyYXBwZXJQcm9wcyB7XG4gIGFtcGxpdHVkZUFwaUtleT86IHN0cmluZztcbiAgZGF0YVJlc2lkZW5jeT86IHN0cmluZztcbiAgZW52Pzogc3RyaW5nO1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICByZWFjdEFwcE5hbWU/OiBzdHJpbmc7XG4gIGNkblVybD86IHN0cmluZztcbiAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgb3JnTGV2ZWxBcGlLZXk/OiBzdHJpbmc7XG4gIG9yZ1Nob3J0TmFtZT86IHN0cmluZztcbiAgaWRlbnRpZnlpbmdQcmVmaXg6IHN0cmluZztcbiAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICB2YXJpYW50VXJsT3ZlcnJpZGU/OiBzdHJpbmc7XG4gIHZhcmlhbnRJbmZvT3ZlcnJpZGU/OiBhbnk7XG4gIHNob3c/OiBib29sZWFuO1xuICBlbnZpdmVPbj86IGJvb2xlYW47XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgZmVhdHVyZUdhdGVzPzogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXTsgLy8gTmV3IHByb3AgZm9yIGZlYXR1cmUgZ2F0ZXNcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlPzogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBlbnZpdmVDb25maWdTZXJ2aWNlPzogRW52aXZlQ29uZmlnU2VydmljZTtcbiAgYW1wbGl0dWRlU2VydmljZT86IEFtcGxpdHVkZVNlcnZpY2U7XG4gIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZz86IGJvb2xlYW47XG4gIHJlcXVlc3RWM0NvbmZpZz86IGJvb2xlYW47XG4gIHVzZXJJZGVudGl0eVNlcnZpY2U/OiBVc2VySWRlbnRpdHlTZXJ2aWNlO1xuICBwcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gIG92ZXJyaWRlQ29uZmlnPzogR3JhcGhRbENvbmZpZ1ZhbHVlcztcbiAgbW9ja1NhbGVzQWdlbnREYXRhPzogYW55O1xuICBoYXJkY29weU92ZXJyaWRlPzogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj47XG4gIGV4dGVuc2lvblNlcnZpY2U/OiBFeHRlbnNpb25TdGF0dXNDYWxsYmFja3M7XG59XG5cbmNvbnN0IFNlYXJjaEFnZW50V3JhcHBlcjogUmVhY3QuRkM8QWdlbnRXcmFwcGVyUHJvcHM+ID0gKHsgY2hpbGRyZW4sIGVuYWJsZWRBZ2VudHMgfSkgPT4ge1xuICBpZiAoIWVuYWJsZWRBZ2VudHMuaW5jbHVkZXMoRW52aXZlQWdlbnQuU2VhcmNoQWdlbnQpKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHJldHVybiA8U2VhcmNoUHJvdmlkZXI+e2NoaWxkcmVufTwvU2VhcmNoUHJvdmlkZXI+O1xufTtcblxuaW50ZXJmYWNlIFNhbGVzQWdlbnRXcmFwcGVyUHJvcHMgZXh0ZW5kcyBBZ2VudFdyYXBwZXJQcm9wcyB7XG4gIHByZXZpZXdNb2RlPzogYm9vbGVhbjtcbiAgc2hvd0RlYnVnQmFyOiBib29sZWFuO1xuICBtb2NrU2FsZXNBZ2VudERhdGE/OiBhbnk7XG59XG5cbmNvbnN0IFNhbGVzQWdlbnRXcmFwcGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50V3JhcHBlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBlbmFibGVkQWdlbnRzLFxuICBwcmV2aWV3TW9kZSxcbiAgc2hvd0RlYnVnQmFyLFxuICBtb2NrU2FsZXNBZ2VudERhdGEsXG59KSA9PiB7XG4gIGlmICghZW5hYmxlZEFnZW50cy5pbmNsdWRlcyhFbnZpdmVBZ2VudC5TYWxlc0FnZW50KSkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxTeXN0ZW1TZXR0aW5nc0NvbnRleHRQcm92aWRlciBzaG93RGVidWdCYXI9e3Nob3dEZWJ1Z0Jhcn0+XG4gICAgICA8U2FsZXNBZ2VudFByb3ZpZGVyXG4gICAgICAgIHByZXZpZXdNb2RlPXtwcmV2aWV3TW9kZX1cbiAgICAgICAgbW9ja0RhdGE9e21vY2tTYWxlc0FnZW50RGF0YX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9TYWxlc0FnZW50UHJvdmlkZXI+XG4gICAgPC9TeXN0ZW1TZXR0aW5nc0NvbnRleHRQcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBFbnZpdmVQcm92aWRlcjogUmVhY3QuRkM8RW52aXZlUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgcHJldmlld01vZGUgPSBmYWxzZSxcbiAgb3ZlcnJpZGVDb25maWcsXG4gIGVuYWJsZWRBZ2VudHMsXG4gIGVudml2ZUNvbmZpZ1NlcnZpY2U6IGlucHV0RW52aXZlQ29uZmlnU2VydmljZSxcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBpbnB1dEZlYXR1cmVGbGFnU2VydmljZSxcbiAgYW1wbGl0dWRlU2VydmljZTogaW5wdXRBbXBsaXR1ZGVTZXJ2aWNlLFxuICB1c2VySWRlbnRpdHlTZXJ2aWNlOiBpbnB1dFVzZXJJZGVudGl0eVNlcnZpY2UsXG4gIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZyA9IGZhbHNlLFxuICByZXF1ZXN0VjNDb25maWcgPSBmYWxzZSxcbiAgbW9ja1NhbGVzQWdlbnREYXRhLFxuICBoYXJkY29weU92ZXJyaWRlLFxuICBleHRlbnNpb25TZXJ2aWNlLFxuICAuLi5jb25maWdcbn0pID0+IHtcbiAgY29uc3QgW3VzZXJJZCwgc2V0VXNlcklkXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xuICBjb25zdCBkaWRSZXBvcnRTdWNjZXNzUmVmID0gdXNlUmVmKGZhbHNlKTtcblxuICBjb25zdCBpbnZva2VFeHRlbnNpb25DYWxsYmFjayA9IHVzZUNhbGxiYWNrKChjYWxsYmFjaz86ICgpID0+IFByb21pc2U8dW5rbm93bj4gfCB2b2lkKSA9PiB7XG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFByb21pc2UucmVzb2x2ZShjYWxsYmFjaygpKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0V4dGVuc2lvbiBzdGF0dXMgY2FsbGJhY2sgZmFpbGVkJywgZXJyb3IpO1xuICAgIH0pO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaW52b2tlRXh0ZW5zaW9uRXJyb3JDYWxsYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGlmICghZXh0ZW5zaW9uU2VydmljZT8ub25JbmplY3Rpb25FcnJvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIFByb21pc2UucmVzb2x2ZShleHRlbnNpb25TZXJ2aWNlLm9uSW5qZWN0aW9uRXJyb3IoZXJyb3IpKS5jYXRjaChjYWxsYmFja0Vycm9yID0+IHtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdFeHRlbnNpb24gZXJyb3IgY2FsbGJhY2sgZmFpbGVkJywgY2FsbGJhY2tFcnJvcik7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleHRlbnNpb25TZXJ2aWNlXSxcbiAgKTtcblxuICBjb25zdCB1c2VySWRTZXJ2aWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgaW5wdXRVc2VySWRlbnRpdHlTZXJ2aWNlID8/XG4gICAgICBuZXcgVXNlcklkZW50aXR5U2VydmljZSh7IGFwaUtleTogY29uZmlnPy5hbXBsaXR1ZGVBcGlLZXkgfHwgJycgfSksXG4gICAgW2NvbmZpZz8uYW1wbGl0dWRlQXBpS2V5LCBpbnB1dFVzZXJJZGVudGl0eVNlcnZpY2VdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZmV0Y2hVc2VySWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHVzZXJJZFNlcnZpY2UuZ2V0VXNlcklkT3JEZWZhdWx0KCk7XG4gICAgICBzZXRVc2VySWQoaWQpO1xuICAgIH07XG5cbiAgICBmZXRjaFVzZXJJZCgpO1xuICB9LCBbY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgaW5wdXRVc2VySWRlbnRpdHlTZXJ2aWNlLCB1c2VySWRTZXJ2aWNlXSk7XG5cbiAgY29uc3QgbmFtZXNwYWNlID0gJ3NwaWZmeS1yZWFjdC1jb21wb25lbnRzJzsgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgbmFtZXNwYWNlP1xuICBjb25zdCBzb3VyY2UgPSAnYXBwJzsgLy8gVE9ETzogTWFrZSB0aGlzIGRlcGVuZGVudCB1cG9uIHRoZSBcInNwaWZmeV9vblwiIHF1ZXJ5IHBhcmFtXG4gIGNvbnN0IFtlbnZpdmVTZXJ2aWNlQ29uZmlnLCBzZXRFbnZpdmVTZXJ2aWNlQ29uZmlnXSA9IHVzZVN0YXRlPEVudml2ZVNlcnZpY2VDb25maWcgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGludm9rZUV4dGVuc2lvbkNhbGxiYWNrKGV4dGVuc2lvblNlcnZpY2U/Lm9uSW5qZWN0aW9uTG9hZGluZyk7XG5cbiAgICAvLyBSZWFsbHkgbm90IGhhcHB5IHdpdGggdGhpcyBhcHByb2FjaCwgYnV0IEknbSBzZWVpbmcgNDI5IGVycm9ycyBpbiB0aGUgdGVzdHNcbiAgICAvLyBiZWNhdXNlIG9mIHRoZSByYXRlIGxpbWl0aW5nIG9uIHRoZSBBUEkuXG4gICAgY29uc3QgZW52aXZlQ29uZmlnU2VydmljZSA9XG4gICAgICBpbnB1dEVudml2ZUNvbmZpZ1NlcnZpY2UgPz9cbiAgICAgIG5ldyBFbnZpdmVDb25maWdTZXJ2aWNlKHtcbiAgICAgICAgYmFzZVVybDogY29uZmlnPy5iYXNlVXJsIHx8ICcnLFxuICAgICAgICBhcGlLZXk6IGNvbmZpZz8ub3JnTGV2ZWxBcGlLZXkgfHwgJycsXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UgfHwgJycsXG4gICAgICAgIHNvdXJjZTogc291cmNlIHx8ICcnLFxuICAgICAgfSk7XG4gICAgY29uc3QgZmV0Y2hFbnZpdmVDb25maWcgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdDb25maWcgPSBhd2FpdCBlbnZpdmVDb25maWdTZXJ2aWNlLmdldEVudml2ZUNvbmZpZygpO1xuICAgICAgICBzZXRFbnZpdmVTZXJ2aWNlQ29uZmlnKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCByZXNvbHZlZEVycm9yID1cbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGVudml2ZSBjb25maWcnKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBFbnZpdmVQcm92aWRlcicsIHJlc29sdmVkRXJyb3IpO1xuICAgICAgICBpbnZva2VFeHRlbnNpb25FcnJvckNhbGxiYWNrKHJlc29sdmVkRXJyb3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmZXRjaEVudml2ZUNvbmZpZygpO1xuICB9LCBbXG4gICAgY29uZmlnLFxuICAgIHVzZXJJZCxcbiAgICBuYW1lc3BhY2UsXG4gICAgc291cmNlLFxuICAgIGlucHV0RW52aXZlQ29uZmlnU2VydmljZSxcbiAgICBleHRlbnNpb25TZXJ2aWNlLFxuICAgIGludm9rZUV4dGVuc2lvbkNhbGxiYWNrLFxuICAgIGludm9rZUV4dGVuc2lvbkVycm9yQ2FsbGJhY2ssXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlbnZpdmVTZXJ2aWNlQ29uZmlnIHx8IGRpZFJlcG9ydFN1Y2Nlc3NSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFJlcG9ydFN1Y2Nlc3NSZWYuY3VycmVudCA9IHRydWU7XG4gICAgaW52b2tlRXh0ZW5zaW9uQ2FsbGJhY2soZXh0ZW5zaW9uU2VydmljZT8ub25JbmplY3Rpb25TdWNjZXNzKTtcbiAgfSwgW2Vudml2ZVNlcnZpY2VDb25maWcsIGV4dGVuc2lvblNlcnZpY2UsIGludm9rZUV4dGVuc2lvbkNhbGxiYWNrXSk7XG5cbiAgY29uc3QgZW52aXZlQ29uZmlnID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgZmVhdHVyZUdhdGVzOiBlbnZpdmVTZXJ2aWNlQ29uZmlnPy5nYXRlcyB8fCBbXSxcbiAgICAgIG9yZ1Nob3J0TmFtZTogZW52aXZlU2VydmljZUNvbmZpZz8ub3JnPy5vcmc/LnNob3J0X25hbWUgfHwgJycsXG4gICAgICBvcmdJZDogZW52aXZlU2VydmljZUNvbmZpZz8ub3JnPy5vcmc/LmlkIHx8ICcnLFxuICAgIH0pLFxuICAgIFtjb25maWcsIGVudml2ZVNlcnZpY2VDb25maWddLFxuICApO1xuICBsb2dnZXIubG9nRGVidWcoJ2Vudml2ZUNvbnRleHQ6IGVudml2ZVNlcnZpY2VDb25maWcnLCBlbnZpdmVTZXJ2aWNlQ29uZmlnLCBjb25maWcpO1xuICBsb2dnZXIubG9nRGVidWcoJ2Vudml2ZUNvbnRleHQ6IGVudml2ZUNvbmZpZycsIGVudml2ZUNvbmZpZyk7XG5cbiAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBpbnB1dEZlYXR1cmVGbGFnU2VydmljZSA/PyBuZXcgRmVhdHVyZUZsYWdTZXJ2aWNlKGVudml2ZUNvbmZpZy5mZWF0dXJlR2F0ZXMpLFxuICAgIFtlbnZpdmVDb25maWcuZmVhdHVyZUdhdGVzLCBpbnB1dEZlYXR1cmVGbGFnU2VydmljZV0sXG4gICk7XG5cbiAgaWYgKGVudml2ZVNlcnZpY2VDb25maWcgPT09IG51bGwgfHwgZW52aXZlQ29uZmlnID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFbnZpdmVDb25maWdQcm92aWRlciB7Li4uZW52aXZlQ29uZmlnfT5cbiAgICAgIDxHcmFwaFFMUHJvdmlkZXJcbiAgICAgICAgbW9ja1YzQ29uZmlnVG9EZXByZWNhdGVkQ29uZmlnPXttb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWd9XG4gICAgICAgIHJlcXVlc3RWM0NvbmZpZz17cmVxdWVzdFYzQ29uZmlnfVxuICAgICAgPlxuICAgICAgICA8TmV3T3JnQ29uZmlnUHJvdmlkZXIgb3ZlcnJpZGVDb25maWc9e292ZXJyaWRlQ29uZmlnfT5cbiAgICAgICAgICA8TG9jYWxTdG9yYWdlUHJvdmlkZXI+XG4gICAgICAgICAgICA8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXIgZmVhdHVyZUZsYWdTZXJ2aWNlPXtmZWF0dXJlRmxhZ1NlcnZpY2V9PlxuICAgICAgICAgICAgICA8VXNlcklkZW50aXR5UHJvdmlkZXIgdXNlcklkU2VydmljZT17dXNlcklkU2VydmljZX0+XG4gICAgICAgICAgICAgICAgPEFtcGxpdHVkZVByb3ZpZGVyIGV4dGVybmFsQW1wbGl0dWRlU2VydmljZT17aW5wdXRBbXBsaXR1ZGVTZXJ2aWNlfT5cbiAgICAgICAgICAgICAgICAgIDxQYWdlUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld01vZGU9e3ByZXZpZXdNb2RlfVxuICAgICAgICAgICAgICAgICAgICBvblVybFJlc29sdmVyTm90UmVhZHk9e2V4dGVuc2lvblNlcnZpY2U/Lm9uSW5qZWN0aW9uRXJyb3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxXaWRnZXRDb25maWdQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8SGFyZGNvcHlQcm92aWRlciBoYXJkY29weU92ZXJyaWRlPXtoYXJkY29weU92ZXJyaWRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFbnZpdmVDc3NQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEFnZW50V3JhcHBlciBlbmFibGVkQWdlbnRzPXtlbmFibGVkQWdlbnRzfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8V2luZG93Q2hhdFRvZ2dsZUJpbmRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTYWxlc0FnZW50V3JhcHBlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEFnZW50cz17ZW5hYmxlZEFnZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dEZWJ1Z0Jhcj17Y29uZmlnLmVudml2ZU9uIHx8IGZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld01vZGU9e3ByZXZpZXdNb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja1NhbGVzQWdlbnREYXRhPXttb2NrU2FsZXNBZ2VudERhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2FsZXNBZ2VudFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VhcmNoQWdlbnRXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9FbnZpdmVDc3NQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L0hhcmRjb3B5UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvV2lkZ2V0Q29uZmlnUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8L1BhZ2VQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0FtcGxpdHVkZVByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L1VzZXJJZGVudGl0eVByb3ZpZGVyPlxuICAgICAgICAgICAgPC9GZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcj5cbiAgICAgICAgICA8L0xvY2FsU3RvcmFnZVByb3ZpZGVyPlxuICAgICAgICA8L05ld09yZ0NvbmZpZ1Byb3ZpZGVyPlxuICAgICAgPC9HcmFwaFFMUHJvdmlkZXI+XG4gICAgPC9FbnZpdmVDb25maWdQcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkEsTUFBTSxTQUFTLElBQUlBLGVBQU8sZ0JBQWdCO0FBNEMxQyxNQUFNQyxzQkFBbUQsRUFBRSxVQUFVLG9CQUFvQjtBQUN2RixLQUFJLENBQUMsY0FBYyxTQUFTLFlBQVksWUFBWSxDQUNsRCxRQUFPO0FBRVQsUUFBTyxvQkFBQyxrQkFBZ0IsV0FBMEI7O0FBU3BELE1BQU1DLHFCQUF1RCxFQUMzRCxVQUNBLGVBQ0EsYUFDQSxjQUNBLHlCQUNJO0FBQ0osS0FBSSxDQUFDLGNBQWMsU0FBUyxZQUFZLFdBQVcsQ0FDakQsUUFBTztBQUVULFFBQ0Usb0JBQUM7RUFBNEM7WUFDM0Msb0JBQUM7R0FDYztHQUNiLFVBQVU7R0FFVDtJQUNrQjtHQUNTOztBQUlwQyxNQUFhQyxrQkFBaUQsRUFDNUQsVUFDQSxjQUFjLE9BQ2QsZ0JBQ0EsZUFDQSxxQkFBcUIsMEJBQ3JCLG9CQUFvQix5QkFDcEIsa0JBQWtCLHVCQUNsQixxQkFBcUIs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
@@ -1,3 +1,3 @@
1
1
  import { EnviveAgent } from "./types.cjs";
2
- import { EnviveProvider } from "./enviveContext.cjs";
3
- export { EnviveAgent, EnviveProvider };
2
+ import { EnviveProvider, ExtensionStatusCallbacks } from "./enviveContext.cjs";
3
+ export { EnviveAgent, EnviveProvider, ExtensionStatusCallbacks };
@@ -1,3 +1,3 @@
1
1
  import { EnviveAgent } from "./types.js";
2
- import { EnviveProvider } from "./enviveContext.js";
3
- export { EnviveAgent, EnviveProvider };
2
+ import { EnviveProvider, ExtensionStatusCallbacks } from "./enviveContext.js";
3
+ export { EnviveAgent, EnviveProvider, ExtensionStatusCallbacks };
@@ -5,4 +5,4 @@ declare enum EnviveAgent {
5
5
  }
6
6
  //#endregion
7
7
  export { EnviveAgent };
8
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2Vudml2ZUNvbnRleHQvdHlwZXMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVjbGFyZSBlbnVtIEVudml2ZUFnZW50IHtcbiAgICBTYWxlc0FnZW50ID0gXCJzYWxlc1wiLFxuICAgIFNlYXJjaEFnZW50ID0gXCJzZWFyY2hcIlxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsSUFBVyxjQUFjLENBQUMsSUFBSSJ9
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2Vudml2ZUNvbnRleHQvdHlwZXMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVjbGFyZSBlbnVtIEVudml2ZUFnZW50IHtcbiAgICBTYWxlc0FnZW50ID0gXCJzYWxlc1wiLFxuICAgIFNlYXJjaEFnZW50ID0gXCJzZWFyY2hcIlxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsSUFBVyxjQUFjLENBQUMsR0FBRyJ9
@@ -5,4 +5,4 @@ declare enum EnviveAgent {
5
5
  }
6
6
  //#endregion
7
7
  export { EnviveAgent };
8
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvZW52aXZlQ29udGV4dC90eXBlcy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWNsYXJlIGVudW0gRW52aXZlQWdlbnQge1xuICAgIFNhbGVzQWdlbnQgPSBcInNhbGVzXCIsXG4gICAgU2VhcmNoQWdlbnQgPSBcInNlYXJjaFwiXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFXLGNBQWMsQ0FBQyxJQUFJIn0=
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvZW52aXZlQ29udGV4dC90eXBlcy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWNsYXJlIGVudW0gRW52aXZlQWdlbnQge1xuICAgIFNhbGVzQWdlbnQgPSBcInNhbGVzXCIsXG4gICAgU2VhcmNoQWdlbnQgPSBcInNlYXJjaFwiXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFXLGNBQWMsQ0FBQyxFQUFFIn0=
@@ -7,6 +7,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
7
7
 
8
8
  //#region src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx
9
9
  const FEATURE_FLAGS_STORAGE_KEY = "spiffy-feature-flags";
10
+ const logger = new require_logger.default("featureFlagServiceContext");
10
11
  var FeatureFlagService = class FeatureFlagService {
11
12
  constructor(featureGates) {
12
13
  this.isFeatureGateEnabled = (featureGate) => {
@@ -14,7 +15,7 @@ var FeatureFlagService = class FeatureFlagService {
14
15
  const featureFlagOverride = FeatureFlagService.getFeatureFlagOverride(featureGate);
15
16
  if (featureFlagOverride !== void 0) return featureFlagOverride;
16
17
  if (gateValue == null || gateValue.value == null) {
17
- require_logger.default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} value is undefined - returning false`);
18
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} value is undefined - returning false`);
18
19
  return false;
19
20
  }
20
21
  return gateValue.value;
@@ -68,24 +69,24 @@ var FeatureFlagService = class FeatureFlagService {
68
69
  if (!featureFlags) return;
69
70
  return JSON.parse(featureFlags)[featureGate];
70
71
  } catch (err) {
71
- require_logger.default.logError("[spiffy-ai] getStoredFeatureGateOverrides: error parsing feature flags", err);
72
+ logger.logError("getStoredFeatureGateOverrides: error parsing feature flags", err);
72
73
  return;
73
74
  }
74
75
  }
75
76
  static getFeatureFlagOverride(featureGate) {
76
77
  const queryOverride = FeatureFlagService.getQueryParamFeatureGateOverrides(featureGate);
77
78
  if (queryOverride != null) {
78
- require_logger.default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by URL param. New value: ${queryOverride}`);
79
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} overridden by URL param. New value: ${queryOverride}`);
79
80
  return queryOverride;
80
81
  }
81
82
  const windowOverride = FeatureFlagService.getWindowFeatureGateOverrides(featureGate);
82
83
  if (windowOverride != null) {
83
- require_logger.default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by window param. New value: ${windowOverride}`);
84
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} overridden by window param. New value: ${windowOverride}`);
84
85
  return windowOverride;
85
86
  }
86
87
  const storedOverride = FeatureFlagService.getStoredFeatureGateOverrides(featureGate);
87
88
  if (storedOverride != null) {
88
- require_logger.default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by stored value. New value: ${storedOverride}`);
89
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} overridden by stored value. New value: ${storedOverride}`);
89
90
  return storedOverride;
90
91
  }
91
92
  }
@@ -116,4 +117,4 @@ const useFeatureFlagService = () => {
116
117
  exports.FeatureFlagService = FeatureFlagService;
117
118
  exports.FeatureFlagServiceProvider = FeatureFlagServiceProvider;
118
119
  exports.useFeatureFlagService = useFeatureFlagService;
119
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5janMiLCJuYW1lcyI6WyJGZWF0dXJlR2F0ZXMiLCJmZWF0dXJlR2F0ZXMiLCJGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgT3JnQ29uZmlnRmVhdHVyZUdhdGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZmVhdHVyZUdhdGVzJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgRkVBVFVSRV9GTEFHU19TVE9SQUdFX0tFWSA9ICdzcGlmZnktZmVhdHVyZS1mbGFncyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVsbEZsYWdWYWx1ZSB7XG4gIHJlc29sdmVkOiBib29sZWFuO1xuICBpbml0aWFsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBxdWVyeV9wYXJhbV9vdmVycmlkZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgd2luZG93X3BhcmFtX292ZXJyaWRlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzdG9yZWRfb3ZlcnJpZGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8vIFRoaXMgaXMgdGhlIGNsYXNzIHRoYXQgd2FzIHByZXZpb3VzbHkgaW1wbGljaXRseSB1c2VkIG9yIGRlZmluZWQgZWxzZXdoZXJlXG5leHBvcnQgY2xhc3MgRmVhdHVyZUZsYWdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmZWF0dXJlR2F0ZXM6IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107XG5cbiAgY29uc3RydWN0b3IoZmVhdHVyZUdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdKSB7XG4gICAgdGhpcy5mZWF0dXJlR2F0ZXMgPSBmZWF0dXJlR2F0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0UXVlcnlQYXJhbUZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24/LmhyZWYgPz8gJyc7XG4gICAgaWYgKHVybC5pbmNsdWRlcygnPycpKSB7XG4gICAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybCk7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybE9iai5zZWFyY2gpO1xuICAgICAgY29uc3QgcGFyYW1zT2JqID0gT2JqZWN0LmZyb21FbnRyaWVzKHBhcmFtcy5lbnRyaWVzKCkpO1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXNPYmpbZmVhdHVyZUdhdGVdO1xuXG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGdldFdpbmRvd0ZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHdpbmRvd092ZXJyaWRlID0gd2luZG93IGFzIFdpbmRvdyAmIHtcbiAgICAgIF9lbnZpdmU/OiB7IGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB9O1xuICAgICAgX3NwaWZmeT86IHsgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IH07XG4gICAgfTtcbiAgICBjb25zdCBmZWF0dXJlT3ZlcnJpZGVzID1cbiAgICAgIHdpbmRvd092ZXJyaWRlPy5fZW52aXZlPy5mZWF0dXJlT3ZlcnJpZGVzID8/IHdpbmRvd092ZXJyaWRlPy5fc3BpZmZ5Py5mZWF0dXJlT3ZlcnJpZGVzO1xuICAgIGNvbnN0IHZhbHVlID0gZmVhdHVyZU92ZXJyaWRlcz8uW1N0cmluZyhmZWF0dXJlR2F0ZSldO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RvcmVkRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LmxvY2FsU3RvcmFnZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ3MgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oRkVBVFVSRV9GTEFHU19TVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoIWZlYXR1cmVGbGFncykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgZmVhdHVyZUZsYWdzT2JqID0gSlNPTi5wYXJzZShmZWF0dXJlRmxhZ3MpIGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgICAgcmV0dXJuIGZlYXR1cmVGbGFnc09ialtmZWF0dXJlR2F0ZV07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAgICdbc3BpZmZ5LWFpXSBnZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlczogZXJyb3IgcGFyc2luZyBmZWF0dXJlIGZsYWdzJyxcbiAgICAgICAgZXJyLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEZlYXR1cmVGbGFnT3ZlcnJpZGUoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHF1ZXJ5T3ZlcnJpZGUgPSBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0UXVlcnlQYXJhbUZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAocXVlcnlPdmVycmlkZSAhPSBudWxsKSB7XG4gICAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBbc3BpZmZ5LWFpXSBpc0ZlYXR1cmVHYXRlRW5hYmxlZCBmZWF0dXJlR2F0ZToke2ZlYXR1cmVHYXRlfSBvdmVycmlkZGVuIGJ5IFVSTCBwYXJhbS4gTmV3IHZhbHVlOiAke3F1ZXJ5T3ZlcnJpZGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gcXVlcnlPdmVycmlkZTtcbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3dPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRXaW5kb3dGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSk7XG4gICAgaWYgKHdpbmRvd092ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgd2luZG93IHBhcmFtLiBOZXcgdmFsdWU6ICR7d2luZG93T3ZlcnJpZGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gd2luZG93T3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVkT3ZlcnJpZGUgPSBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0U3RvcmVkRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChzdG9yZWRPdmVycmlkZSAhPSBudWxsKSB7XG4gICAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBbc3BpZmZ5LWFpXSBpc0ZlYXR1cmVHYXRlRW5hYmxlZCBmZWF0dXJlR2F0ZToke2ZlYXR1cmVHYXRlfSBvdmVycmlkZGVuIGJ5IHN0b3JlZCB2YWx1ZS4gTmV3IHZhbHVlOiAke3N0b3JlZE92ZXJyaWRlfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0b3JlZE92ZXJyaWRlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpc0ZlYXR1cmVHYXRlRW5hYmxlZCA9IChmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgZ2F0ZVZhbHVlID0gdGhpcy5mZWF0dXJlR2F0ZXMuZmluZChnYXRlID0+IGdhdGUubmFtZSA9PT0gZmVhdHVyZUdhdGUpO1xuXG4gICAgY29uc3QgZmVhdHVyZUZsYWdPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ092ZXJyaWRlKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAoZmVhdHVyZUZsYWdPdmVycmlkZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmVhdHVyZUZsYWdPdmVycmlkZTtcbiAgICB9XG5cbiAgICBpZiAoZ2F0ZVZhbHVlID09IG51bGwgfHwgZ2F0ZVZhbHVlLnZhbHVlID09IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IHZhbHVlIGlzIHVuZGVmaW5lZCAtIHJldHVybmluZyBmYWxzZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0ZVZhbHVlLnZhbHVlO1xuICB9O1xuXG4gIC8vIEVuc3VyZSB0aGF0IHN0YW5kYXJkIG92ZXJyaWRlcyB3b3JrIGFzIGV4cGVjdGVkXG4gIGlzQ2xpZW50U2Vzc2lvbkVuYWJsZWQgPSAoKTogYm9vbGVhbiA9PlxuICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoRmVhdHVyZUdhdGVzLklzQ2xpZW50U2Vzc2lvbkVuYWJsZWQpO1xuXG4gIGdldEZlYXR1cmVGbGFncyA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC52YWx1ZXMoRmVhdHVyZUdhdGVzKS5tYXAoKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpID0+IFtcbiAgICAgICAgZmVhdHVyZUdhdGUsXG4gICAgICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoZmVhdHVyZUdhdGUpLFxuICAgICAgXSksXG4gICAgKTtcbiAgfTtcblxuICBnZXRGdWxsRmxhZ1ZhbHVlID0gKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBGdWxsRmxhZ1ZhbHVlID0+IHtcbiAgICBjb25zdCBnYXRlVmFsdWUgPSB0aGlzLmZlYXR1cmVHYXRlcy5maW5kKGdhdGUgPT4gZ2F0ZS5uYW1lID09PSBmZWF0dXJlR2F0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkOiB0aGlzLmlzRmVhdHVyZUdhdGVFbmFibGVkKGZlYXR1cmVHYXRlKSxcbiAgICAgIGluaXRpYWw6IGdhdGVWYWx1ZT8udmFsdWUsXG4gICAgICBxdWVyeV9wYXJhbV9vdmVycmlkZTogRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFF1ZXJ5UGFyYW1GZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSksXG4gICAgICB3aW5kb3dfcGFyYW1fb3ZlcnJpZGU6IEZlYXR1cmVGbGFnU2VydmljZS5nZXRXaW5kb3dGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSksXG4gICAgICBzdG9yZWRfb3ZlcnJpZGU6IEZlYXR1cmVGbGFnU2VydmljZS5nZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSksXG4gICAgfTtcbiAgfTtcblxuICBnZXRGdWxsRmxhZ1ZhbHVlcyA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBGdWxsRmxhZ1ZhbHVlPiA9PiB7XG4gICAgY29uc3QgZmVhdHVyZUdhdGVzID0gT2JqZWN0LnZhbHVlcyhGZWF0dXJlR2F0ZXMpLm1hcCgoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcykgPT4gW1xuICAgICAgZmVhdHVyZUdhdGUsXG4gICAgICB0aGlzLmdldEZ1bGxGbGFnVmFsdWUoZmVhdHVyZUdhdGUpLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVHYXRlcy5sZW5ndGggPiAwXG4gICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgRnVsbEZsYWdWYWx1ZT4+KChhY2MsIGVudHJ5KSA9PiB7XG4gICAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IGVudHJ5IGFzIFtGZWF0dXJlR2F0ZXMsIEZ1bGxGbGFnVmFsdWVdO1xuICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSlcbiAgICAgIDoge307XG4gIH07XG5cbiAgc3RhdGljIHBlcnNpc3RGZWF0dXJlR2F0ZU92ZXJyaWRlcygpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG92ZXJyaWRlcyA9IE9iamVjdC52YWx1ZXMoRmVhdHVyZUdhdGVzKVxuICAgICAgLm1hcChcbiAgICAgICAgZmVhdHVyZUdhdGUgPT5cbiAgICAgICAgICBbZmVhdHVyZUdhdGUsIEZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ092ZXJyaWRlKGZlYXR1cmVHYXRlKV0gYXMgY29uc3QsXG4gICAgICApXG4gICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7IC4uLmFjYywgW2tleV06IHZhbHVlISB9KSwge30pO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShvdmVycmlkZXMpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFnQ29udGV4dFR5cGUge1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZSB8IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8RmVhdHVyZUZsYWdDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuaW50ZXJmYWNlIEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyUHJvcHMge1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiA9ICh7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRTZXJ2aWNlLFxuICBjaGlsZHJlbixcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBpbnB1dFNlcnZpY2UsXG4gICAgfSksXG4gICAgW2lucHV0U2VydmljZV0sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8RmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChGZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0KTtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlRmVhdHVyZUZsYWdTZXJ2aWNlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxNQUFNLDRCQUE0QjtBQVdsQyxJQUFhLHFCQUFiLE1BQWEsbUJBQW1CO0NBRzlCLFlBQVksY0FBc0M7K0JBcUYxQixnQkFBdUM7R0FDN0QsTUFBTSxZQUFZLEtBQUssYUFBYSxNQUFLLFNBQVEsS0FBSyxTQUFTLFlBQVk7R0FFM0UsTUFBTSxzQkFBc0IsbUJBQW1CLHVCQUF1QixZQUFZO0FBQ2xGLE9BQUksd0JBQXdCLE9BQzFCLFFBQU87QUFHVCxPQUFJLGFBQWEsUUFBUSxVQUFVLFNBQVMsTUFBTTtBQUNoRCwyQkFBTyxTQUNMLGdEQUFnRCxZQUFZLHVDQUM3RDtBQUNELFdBQU87O0FBRVQsVUFBTyxVQUFVOztzQ0FLakIsS0FBSyxxQkFBcUJBLGtDQUFhLHVCQUF1QjsrQkFFZjtBQUMvQyxVQUFPLE9BQU8sWUFDWixPQUFPLE9BQU9BLGtDQUFhLENBQUMsS0FBSyxnQkFBOEIsQ0FDN0QsYUFDQSxLQUFLLHFCQUFxQixZQUFZLENBQ3ZDLENBQUMsQ0FDSDs7MkJBR2lCLGdCQUE2QztHQUMvRCxNQUFNLFlBQVksS0FBSyxhQUFhLE1BQUssU0FBUSxLQUFLLFNBQVMsWUFBWTtBQUMzRSxVQUFPO0lBQ0wsVUFBVSxLQUFLLHFCQUFxQixZQUFZO0lBQ2hELFNBQVMsV0FBVztJQUNwQixzQkFBc0IsbUJBQW1CLGtDQUFrQyxZQUFZO0lBQ3ZGLHVCQUF1QixtQkFBbUIsOEJBQThCLFlBQVk7SUFDcEYsaUJBQWlCLG1CQUFtQiw4QkFBOEIsWUFBWTtJQUMvRTs7aUNBR3NEO0dBQ3ZELE1BQU1DLGlCQUFlLE9BQU8sT0FBT0Qsa0NBQWEsQ0FBQyxLQUFLLGdCQUE4QixDQUNsRixhQUNBLEtBQUssaUJBQWlCLFlBQVksQ0FDbkMsQ0FBQztBQUVGLFVBQU9DLGVBQWEsU0FBUyxJQUN6QkEsZUFBYSxRQUF1QyxLQUFLLFVBQVU7SUFDakUsTUFBTSxDQUFDLE1BQU0sU0FBUztBQUN0QixRQUFJLFFBQVEsU0FBUyxLQUNuQixRQUFPO0tBQUUsR0FBRztNQUFNLGdCQUFnQixTQUFTO0tBQU87QUFFcEQsV0FBTztNQUNOLEVBQUUsQ0FBQyxHQUNOLEVBQUU7O0FBM0lOLE9BQUssZUFBZTs7Q0FHdEIsT0FBTyxrQ0FBa0MsYUFBZ0Q7RUFDdkYsTUFBTSxNQUFNLE9BQU8sVUFBVSxRQUFRO0FBQ3JDLE1BQUksSUFBSSxTQUFTLElBQUksRUFBRTtHQUNyQixNQUFNLFNBQVMsSUFBSSxJQUFJLElBQUk7R0FDM0IsTUFBTSxTQUFTLElBQUksZ0JBQWdCLE9BQU8sT0FBTztHQUVqRCxNQUFNLFFBRFksT0FBTyxZQUFZLE9BQU8sU0FBUyxDQUFDLENBQzlCO0FBRXhCLE9BQUksU0FBUyxLQUNYLFFBQU8sVUFBVTs7O0NBT3ZCLE9BQU8sOEJBQThCLGFBQWdEO0FBQ25GLE1BQUksT0FBTyxXQUFXLFlBQ3BCO0VBRUYsTUFBTSxpQkFBaUI7RUFNdkIsTUFBTSxTQURKLGdCQUFnQixTQUFTLG9CQUFvQixnQkFBZ0IsU0FBUyxvQkFDdkMsT0FBTyxZQUFZO0FBQ3BELE1BQUksU0FBUyxLQUNYLFFBQU87O0NBS1gsT0FBTyw4QkFBOEIsYUFBZ0Q7QUFDbkYsTUFBSSxPQUFPLFdBQVcsZUFBZSxPQUFPLE9BQU8saUJBQWlCLFlBQ2xFO0FBRUYsTUFBSTtHQUNGLE1BQU0sZUFBZSxPQUFPLGFBQWEsUUFBUSwwQkFBMEI7QUFDM0UsT0FBSSxDQUFDLGFBQ0g7QUFHRixVQUR3QixLQUFLLE1BQU0sYUFBYSxDQUN6QjtXQUNoQixLQUFLO0FBQ1osMEJBQU8sU0FDTCwwRUFDQSxJQUNEO0FBQ0Q7OztDQUlKLE9BQU8sdUJBQXVCLGFBQWdEO0VBQzVFLE1BQU0sZ0JBQWdCLG1CQUFtQixrQ0FBa0MsWUFBWTtBQUN2RixNQUFJLGlCQUFpQixNQUFNO0FBQ3pCLDBCQUFPLFNBQ0wsZ0RBQWdELFlBQVksdUNBQXVDLGdCQUNwRztBQUNELFVBQU87O0VBR1QsTUFBTSxpQkFBaUIsbUJBQW1CLDhCQUE4QixZQUFZO0FBQ3BGLE1BQUksa0JBQWtCLE1BQU07QUFDMUIsMEJBQU8sU0FDTCxnREFBZ0QsWUFBWSwwQ0FBMEMsaUJBQ3ZHO0FBQ0QsVUFBTzs7RUFHVCxNQUFNLGlCQUFpQixtQkFBbUIsOEJBQThCLFlBQVk7QUFDcEYsTUFBSSxrQkFBa0IsTUFBTTtBQUMxQiwwQkFBTyxTQUNMLGdEQUFnRCxZQUFZLDBDQUEwQyxpQkFDdkc7QUFDRCxVQUFPOzs7Q0FnRVgsT0FBTyw4QkFBb0M7QUFDekMsTUFBSSxPQUFPLFdBQVcsZUFBZSxPQUFPLE9BQU8saUJBQWlCLFlBQ2xFO0VBRUYsTUFBTSxZQUFZLE9BQU8sT0FBT0Qsa0NBQWEsQ0FDMUMsS0FDQyxnQkFDRSxDQUFDLGFBQWEsbUJBQW1CLHVCQUF1QixZQUFZLENBQUMsQ0FDeEUsQ0FDQSxRQUFRLEdBQUcsV0FBVyxVQUFVLE9BQVUsQ0FDMUMsUUFBaUMsS0FBSyxDQUFDLEtBQUssWUFBWTtHQUFFLEdBQUc7SUFBTSxNQUFNO0dBQVEsR0FBRyxFQUFFLENBQUM7QUFDMUYsU0FBTyxhQUFhLFFBQVEsMkJBQTJCLEtBQUssVUFBVSxVQUFVLENBQUM7OztBQVFyRixNQUFNLHFEQUE4RSxPQUFVO0FBTzlGLE1BQWFFLDhCQUF5RSxFQUNwRixvQkFBb0IsY0FDcEIsZUFDSTtDQUNKLE1BQU0seUNBQ0csRUFDTCxvQkFBb0IsY0FDckIsR0FDRCxDQUFDLGFBQWEsQ0FDZjtBQUVELFFBQ0UsMkNBQUMsMEJBQTBCO0VBQVMsT0FBTztFQUN4QztHQUNrQzs7QUFJekMsTUFBYSw4QkFBOEI7Q0FDekMsTUFBTSxnQ0FBcUIsMEJBQTBCO0FBQ3JELEtBQUksWUFBWSxPQUNkLE9BQU0sSUFBSSxNQUFNLHlFQUF5RTtBQUUzRixRQUFPIn0=
120
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5janMiLCJuYW1lcyI6WyJMb2dnZXIiLCJGZWF0dXJlR2F0ZXMiLCJmZWF0dXJlR2F0ZXMiLCJGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgT3JnQ29uZmlnRmVhdHVyZUdhdGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZmVhdHVyZUdhdGVzJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgRkVBVFVSRV9GTEFHU19TVE9SQUdFX0tFWSA9ICdzcGlmZnktZmVhdHVyZS1mbGFncyc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBGdWxsRmxhZ1ZhbHVlIHtcbiAgcmVzb2x2ZWQ6IGJvb2xlYW47XG4gIGluaXRpYWw6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHF1ZXJ5X3BhcmFtX292ZXJyaWRlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB3aW5kb3dfcGFyYW1fb3ZlcnJpZGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHN0b3JlZF9vdmVycmlkZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLy8gVGhpcyBpcyB0aGUgY2xhc3MgdGhhdCB3YXMgcHJldmlvdXNseSBpbXBsaWNpdGx5IHVzZWQgb3IgZGVmaW5lZCBlbHNld2hlcmVcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2Uge1xuICBwcml2YXRlIGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXTtcblxuICBjb25zdHJ1Y3RvcihmZWF0dXJlR2F0ZXM6IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW10pIHtcbiAgICB0aGlzLmZlYXR1cmVHYXRlcyA9IGZlYXR1cmVHYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbj8uaHJlZiA/PyAnJztcbiAgICBpZiAodXJsLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsT2JqLnNlYXJjaCk7XG4gICAgICBjb25zdCBwYXJhbXNPYmogPSBPYmplY3QuZnJvbUVudHJpZXMocGFyYW1zLmVudHJpZXMoKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc09ialtmZWF0dXJlR2F0ZV07XG5cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0V2luZG93RmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgd2luZG93T3ZlcnJpZGUgPSB3aW5kb3cgYXMgV2luZG93ICYge1xuICAgICAgX2Vudml2ZT86IHsgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IH07XG4gICAgICBfc3BpZmZ5PzogeyBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfTtcbiAgICB9O1xuICAgIGNvbnN0IGZlYXR1cmVPdmVycmlkZXMgPVxuICAgICAgd2luZG93T3ZlcnJpZGU/Ll9lbnZpdmU/LmZlYXR1cmVPdmVycmlkZXMgPz8gd2luZG93T3ZlcnJpZGU/Ll9zcGlmZnk/LmZlYXR1cmVPdmVycmlkZXM7XG4gICAgY29uc3QgdmFsdWUgPSBmZWF0dXJlT3ZlcnJpZGVzPy5bU3RyaW5nKGZlYXR1cmVHYXRlKV07XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZKTtcbiAgICAgIGlmICghZmVhdHVyZUZsYWdzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ3NPYmogPSBKU09OLnBhcnNlKGZlYXR1cmVGbGFncykgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgICByZXR1cm4gZmVhdHVyZUZsYWdzT2JqW2ZlYXR1cmVHYXRlXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignZ2V0U3RvcmVkRmVhdHVyZUdhdGVPdmVycmlkZXM6IGVycm9yIHBhcnNpbmcgZmVhdHVyZSBmbGFncycsIGVycik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRGZWF0dXJlRmxhZ092ZXJyaWRlKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBxdWVyeU92ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFF1ZXJ5UGFyYW1GZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSk7XG4gICAgaWYgKHF1ZXJ5T3ZlcnJpZGUgIT0gbnVsbCkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gb3ZlcnJpZGRlbiBieSBVUkwgcGFyYW0uIE5ldyB2YWx1ZTogJHtxdWVyeU92ZXJyaWRlfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHF1ZXJ5T3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93T3ZlcnJpZGUgPSBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0V2luZG93RmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpO1xuICAgIGlmICh3aW5kb3dPdmVycmlkZSAhPSBudWxsKSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBpc0ZlYXR1cmVHYXRlRW5hYmxlZCBmZWF0dXJlR2F0ZToke2ZlYXR1cmVHYXRlfSBvdmVycmlkZGVuIGJ5IHdpbmRvdyBwYXJhbS4gTmV3IHZhbHVlOiAke3dpbmRvd092ZXJyaWRlfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHdpbmRvd092ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlZE92ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFN0b3JlZEZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAoc3RvcmVkT3ZlcnJpZGUgIT0gbnVsbCkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gb3ZlcnJpZGRlbiBieSBzdG9yZWQgdmFsdWUuIE5ldyB2YWx1ZTogJHtzdG9yZWRPdmVycmlkZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBzdG9yZWRPdmVycmlkZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNGZWF0dXJlR2F0ZUVuYWJsZWQgPSAoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGdhdGVWYWx1ZSA9IHRoaXMuZmVhdHVyZUdhdGVzLmZpbmQoZ2F0ZSA9PiBnYXRlLm5hbWUgPT09IGZlYXR1cmVHYXRlKTtcblxuICAgIGNvbnN0IGZlYXR1cmVGbGFnT3ZlcnJpZGUgPSBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdPdmVycmlkZShmZWF0dXJlR2F0ZSk7XG4gICAgaWYgKGZlYXR1cmVGbGFnT3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZlYXR1cmVGbGFnT3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgaWYgKGdhdGVWYWx1ZSA9PSBudWxsIHx8IGdhdGVWYWx1ZS52YWx1ZSA9PSBudWxsKSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBpc0ZlYXR1cmVHYXRlRW5hYmxlZCBmZWF0dXJlR2F0ZToke2ZlYXR1cmVHYXRlfSB2YWx1ZSBpcyB1bmRlZmluZWQgLSByZXR1cm5pbmcgZmFsc2VgLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGdhdGVWYWx1ZS52YWx1ZTtcbiAgfTtcblxuICAvLyBFbnN1cmUgdGhhdCBzdGFuZGFyZCBvdmVycmlkZXMgd29yayBhcyBleHBlY3RlZFxuICBpc0NsaWVudFNlc3Npb25FbmFibGVkID0gKCk6IGJvb2xlYW4gPT5cbiAgICB0aGlzLmlzRmVhdHVyZUdhdGVFbmFibGVkKEZlYXR1cmVHYXRlcy5Jc0NsaWVudFNlc3Npb25FbmFibGVkKTtcblxuICBnZXRGZWF0dXJlRmxhZ3MgPSAoKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QudmFsdWVzKEZlYXR1cmVHYXRlcykubWFwKChmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKSA9PiBbXG4gICAgICAgIGZlYXR1cmVHYXRlLFxuICAgICAgICB0aGlzLmlzRmVhdHVyZUdhdGVFbmFibGVkKGZlYXR1cmVHYXRlKSxcbiAgICAgIF0pLFxuICAgICk7XG4gIH07XG5cbiAgZ2V0RnVsbEZsYWdWYWx1ZSA9IChmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogRnVsbEZsYWdWYWx1ZSA9PiB7XG4gICAgY29uc3QgZ2F0ZVZhbHVlID0gdGhpcy5mZWF0dXJlR2F0ZXMuZmluZChnYXRlID0+IGdhdGUubmFtZSA9PT0gZmVhdHVyZUdhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZDogdGhpcy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChmZWF0dXJlR2F0ZSksXG4gICAgICBpbml0aWFsOiBnYXRlVmFsdWU/LnZhbHVlLFxuICAgICAgcXVlcnlfcGFyYW1fb3ZlcnJpZGU6IEZlYXR1cmVGbGFnU2VydmljZS5nZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpLFxuICAgICAgd2luZG93X3BhcmFtX292ZXJyaWRlOiBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0V2luZG93RmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpLFxuICAgICAgc3RvcmVkX292ZXJyaWRlOiBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0U3RvcmVkRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpLFxuICAgIH07XG4gIH07XG5cbiAgZ2V0RnVsbEZsYWdWYWx1ZXMgPSAoKTogUmVjb3JkPHN0cmluZywgRnVsbEZsYWdWYWx1ZT4gPT4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC52YWx1ZXMoRmVhdHVyZUdhdGVzKS5tYXAoKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpID0+IFtcbiAgICAgIGZlYXR1cmVHYXRlLFxuICAgICAgdGhpcy5nZXRGdWxsRmxhZ1ZhbHVlKGZlYXR1cmVHYXRlKSxcbiAgICBdKTtcblxuICAgIHJldHVybiBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIEZ1bGxGbGFnVmFsdWU+PigoYWNjLCBlbnRyeSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBlbnRyeSBhcyBbRmVhdHVyZUdhdGVzLCBGdWxsRmxhZ1ZhbHVlXTtcbiAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtgZmVhdHVyZV9nYXRlLiR7bmFtZX1gXTogdmFsdWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pXG4gICAgICA6IHt9O1xuICB9O1xuXG4gIHN0YXRpYyBwZXJzaXN0RmVhdHVyZUdhdGVPdmVycmlkZXMoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdmVycmlkZXMgPSBPYmplY3QudmFsdWVzKEZlYXR1cmVHYXRlcylcbiAgICAgIC5tYXAoXG4gICAgICAgIGZlYXR1cmVHYXRlID0+XG4gICAgICAgICAgW2ZlYXR1cmVHYXRlLCBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdPdmVycmlkZShmZWF0dXJlR2F0ZSldIGFzIGNvbnN0LFxuICAgICAgKVxuICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoeyAuLi5hY2MsIFtrZXldOiB2YWx1ZSEgfSksIHt9KTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oRkVBVFVSRV9GTEFHU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkob3ZlcnJpZGVzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2UgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmludGVyZmFjZSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IGlucHV0U2VydmljZSxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRTZXJ2aWNlLFxuICAgIH0pLFxuICAgIFtpbnB1dFNlcnZpY2VdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9GZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUZlYXR1cmVGbGFnU2VydmljZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCk7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUZlYXR1cmVGbGFnU2VydmljZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsTUFBTSw0QkFBNEI7QUFFbEMsTUFBTSxTQUFTLElBQUlBLHVCQUFPLDRCQUE0QjtBQVd0RCxJQUFhLHFCQUFiLE1BQWEsbUJBQW1CO0NBRzlCLFlBQVksY0FBc0M7K0JBa0YxQixnQkFBdUM7R0FDN0QsTUFBTSxZQUFZLEtBQUssYUFBYSxNQUFLLFNBQVEsS0FBSyxTQUFTLFlBQVk7R0FFM0UsTUFBTSxzQkFBc0IsbUJBQW1CLHVCQUF1QixZQUFZO0FBQ2xGLE9BQUksd0JBQXdCLE9BQzFCLFFBQU87QUFHVCxPQUFJLGFBQWEsUUFBUSxVQUFVLFNBQVMsTUFBTTtBQUNoRCxXQUFPLFNBQ0wsb0NBQW9DLFlBQVksdUNBQ2pEO0FBQ0QsV0FBTzs7QUFFVCxVQUFPLFVBQVU7O3NDQUtqQixLQUFL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
@@ -5,6 +5,7 @@ import { jsx } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx
7
7
  const FEATURE_FLAGS_STORAGE_KEY = "spiffy-feature-flags";
8
+ const logger = new logger_default("featureFlagServiceContext");
8
9
  var FeatureFlagService = class FeatureFlagService {
9
10
  constructor(featureGates) {
10
11
  this.isFeatureGateEnabled = (featureGate) => {
@@ -12,7 +13,7 @@ var FeatureFlagService = class FeatureFlagService {
12
13
  const featureFlagOverride = FeatureFlagService.getFeatureFlagOverride(featureGate);
13
14
  if (featureFlagOverride !== void 0) return featureFlagOverride;
14
15
  if (gateValue == null || gateValue.value == null) {
15
- logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} value is undefined - returning false`);
16
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} value is undefined - returning false`);
16
17
  return false;
17
18
  }
18
19
  return gateValue.value;
@@ -66,24 +67,24 @@ var FeatureFlagService = class FeatureFlagService {
66
67
  if (!featureFlags) return;
67
68
  return JSON.parse(featureFlags)[featureGate];
68
69
  } catch (err) {
69
- logger_default.logError("[spiffy-ai] getStoredFeatureGateOverrides: error parsing feature flags", err);
70
+ logger.logError("getStoredFeatureGateOverrides: error parsing feature flags", err);
70
71
  return;
71
72
  }
72
73
  }
73
74
  static getFeatureFlagOverride(featureGate) {
74
75
  const queryOverride = FeatureFlagService.getQueryParamFeatureGateOverrides(featureGate);
75
76
  if (queryOverride != null) {
76
- logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by URL param. New value: ${queryOverride}`);
77
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} overridden by URL param. New value: ${queryOverride}`);
77
78
  return queryOverride;
78
79
  }
79
80
  const windowOverride = FeatureFlagService.getWindowFeatureGateOverrides(featureGate);
80
81
  if (windowOverride != null) {
81
- logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by window param. New value: ${windowOverride}`);
82
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} overridden by window param. New value: ${windowOverride}`);
82
83
  return windowOverride;
83
84
  }
84
85
  const storedOverride = FeatureFlagService.getStoredFeatureGateOverrides(featureGate);
85
86
  if (storedOverride != null) {
86
- logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by stored value. New value: ${storedOverride}`);
87
+ logger.logDebug(`isFeatureGateEnabled featureGate:${featureGate} overridden by stored value. New value: ${storedOverride}`);
87
88
  return storedOverride;
88
89
  }
89
90
  }
@@ -112,4 +113,4 @@ const useFeatureFlagService = () => {
112
113
 
113
114
  //#endregion
114
115
  export { FeatureFlagService, FeatureFlagServiceProvider, useFeatureFlagService };
115
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5qcyIsIm5hbWVzIjpbImZlYXR1cmVHYXRlcyIsIkZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZID0gJ3NwaWZmeS1mZWF0dXJlLWZsYWdzJztcblxuZXhwb3J0IGludGVyZmFjZSBGdWxsRmxhZ1ZhbHVlIHtcbiAgcmVzb2x2ZWQ6IGJvb2xlYW47XG4gIGluaXRpYWw6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHF1ZXJ5X3BhcmFtX292ZXJyaWRlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB3aW5kb3dfcGFyYW1fb3ZlcnJpZGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHN0b3JlZF9vdmVycmlkZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLy8gVGhpcyBpcyB0aGUgY2xhc3MgdGhhdCB3YXMgcHJldmlvdXNseSBpbXBsaWNpdGx5IHVzZWQgb3IgZGVmaW5lZCBlbHNld2hlcmVcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2Uge1xuICBwcml2YXRlIGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXTtcblxuICBjb25zdHJ1Y3RvcihmZWF0dXJlR2F0ZXM6IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW10pIHtcbiAgICB0aGlzLmZlYXR1cmVHYXRlcyA9IGZlYXR1cmVHYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbj8uaHJlZiA/PyAnJztcbiAgICBpZiAodXJsLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsT2JqLnNlYXJjaCk7XG4gICAgICBjb25zdCBwYXJhbXNPYmogPSBPYmplY3QuZnJvbUVudHJpZXMocGFyYW1zLmVudHJpZXMoKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc09ialtmZWF0dXJlR2F0ZV07XG5cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0V2luZG93RmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgd2luZG93T3ZlcnJpZGUgPSB3aW5kb3cgYXMgV2luZG93ICYge1xuICAgICAgX2Vudml2ZT86IHsgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IH07XG4gICAgICBfc3BpZmZ5PzogeyBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfTtcbiAgICB9O1xuICAgIGNvbnN0IGZlYXR1cmVPdmVycmlkZXMgPVxuICAgICAgd2luZG93T3ZlcnJpZGU/Ll9lbnZpdmU/LmZlYXR1cmVPdmVycmlkZXMgPz8gd2luZG93T3ZlcnJpZGU/Ll9zcGlmZnk/LmZlYXR1cmVPdmVycmlkZXM7XG4gICAgY29uc3QgdmFsdWUgPSBmZWF0dXJlT3ZlcnJpZGVzPy5bU3RyaW5nKGZlYXR1cmVHYXRlKV07XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZKTtcbiAgICAgIGlmICghZmVhdHVyZUZsYWdzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ3NPYmogPSBKU09OLnBhcnNlKGZlYXR1cmVGbGFncykgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgICByZXR1cm4gZmVhdHVyZUZsYWdzT2JqW2ZlYXR1cmVHYXRlXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgJ1tzcGlmZnktYWldIGdldFN0b3JlZEZlYXR1cmVHYXRlT3ZlcnJpZGVzOiBlcnJvciBwYXJzaW5nIGZlYXR1cmUgZmxhZ3MnLFxuICAgICAgICBlcnIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RmVhdHVyZUZsYWdPdmVycmlkZShmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcXVlcnlPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChxdWVyeU92ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgVVJMIHBhcmFtLiBOZXcgdmFsdWU6ICR7cXVlcnlPdmVycmlkZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBxdWVyeU92ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd092ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFdpbmRvd0ZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAod2luZG93T3ZlcnJpZGUgIT0gbnVsbCkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gb3ZlcnJpZGRlbiBieSB3aW5kb3cgcGFyYW0uIE5ldyB2YWx1ZTogJHt3aW5kb3dPdmVycmlkZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB3aW5kb3dPdmVycmlkZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZWRPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSk7XG4gICAgaWYgKHN0b3JlZE92ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgc3RvcmVkIHZhbHVlLiBOZXcgdmFsdWU6ICR7c3RvcmVkT3ZlcnJpZGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RvcmVkT3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRmVhdHVyZUdhdGVFbmFibGVkID0gKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBnYXRlVmFsdWUgPSB0aGlzLmZlYXR1cmVHYXRlcy5maW5kKGdhdGUgPT4gZ2F0ZS5uYW1lID09PSBmZWF0dXJlR2F0ZSk7XG5cbiAgICBjb25zdCBmZWF0dXJlRmxhZ092ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZlYXR1cmVGbGFnT3ZlcnJpZGUoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChmZWF0dXJlRmxhZ092ZXJyaWRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmZWF0dXJlRmxhZ092ZXJyaWRlO1xuICAgIH1cblxuICAgIGlmIChnYXRlVmFsdWUgPT0gbnVsbCB8fCBnYXRlVmFsdWUudmFsdWUgPT0gbnVsbCkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gdmFsdWUgaXMgdW5kZWZpbmVkIC0gcmV0dXJuaW5nIGZhbHNlYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBnYXRlVmFsdWUudmFsdWU7XG4gIH07XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3RhbmRhcmQgb3ZlcnJpZGVzIHdvcmsgYXMgZXhwZWN0ZWRcbiAgaXNDbGllbnRTZXNzaW9uRW5hYmxlZCA9ICgpOiBib29sZWFuID0+XG4gICAgdGhpcy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChGZWF0dXJlR2F0ZXMuSXNDbGllbnRTZXNzaW9uRW5hYmxlZCk7XG5cbiAgZ2V0RmVhdHVyZUZsYWdzID0gKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LnZhbHVlcyhGZWF0dXJlR2F0ZXMpLm1hcCgoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcykgPT4gW1xuICAgICAgICBmZWF0dXJlR2F0ZSxcbiAgICAgICAgdGhpcy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChmZWF0dXJlR2F0ZSksXG4gICAgICBdKSxcbiAgICApO1xuICB9O1xuXG4gIGdldEZ1bGxGbGFnVmFsdWUgPSAoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IEZ1bGxGbGFnVmFsdWUgPT4ge1xuICAgIGNvbnN0IGdhdGVWYWx1ZSA9IHRoaXMuZmVhdHVyZUdhdGVzLmZpbmQoZ2F0ZSA9PiBnYXRlLm5hbWUgPT09IGZlYXR1cmVHYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWQ6IHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoZmVhdHVyZUdhdGUpLFxuICAgICAgaW5pdGlhbDogZ2F0ZVZhbHVlPy52YWx1ZSxcbiAgICAgIHF1ZXJ5X3BhcmFtX292ZXJyaWRlOiBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0UXVlcnlQYXJhbUZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKSxcbiAgICAgIHdpbmRvd19wYXJhbV9vdmVycmlkZTogRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFdpbmRvd0ZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKSxcbiAgICAgIHN0b3JlZF9vdmVycmlkZTogRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFN0b3JlZEZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKSxcbiAgICB9O1xuICB9O1xuXG4gIGdldEZ1bGxGbGFnVmFsdWVzID0gKCk6IFJlY29yZDxzdHJpbmcsIEZ1bGxGbGFnVmFsdWU+ID0+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QudmFsdWVzKEZlYXR1cmVHYXRlcykubWFwKChmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKSA9PiBbXG4gICAgICBmZWF0dXJlR2F0ZSxcbiAgICAgIHRoaXMuZ2V0RnVsbEZsYWdWYWx1ZShmZWF0dXJlR2F0ZSksXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgID8gZmVhdHVyZUdhdGVzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBGdWxsRmxhZ1ZhbHVlPj4oKGFjYywgZW50cnkpID0+IHtcbiAgICAgICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gZW50cnkgYXMgW0ZlYXR1cmVHYXRlcywgRnVsbEZsYWdWYWx1ZV07XG4gICAgICAgICAgaWYgKG5hbWUgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbYGZlYXR1cmVfZ2F0ZS4ke25hbWV9YF06IHZhbHVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KVxuICAgICAgOiB7fTtcbiAgfTtcblxuICBzdGF0aWMgcGVyc2lzdEZlYXR1cmVHYXRlT3ZlcnJpZGVzKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LmxvY2FsU3RvcmFnZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gT2JqZWN0LnZhbHVlcyhGZWF0dXJlR2F0ZXMpXG4gICAgICAubWFwKFxuICAgICAgICBmZWF0dXJlR2F0ZSA9PlxuICAgICAgICAgIFtmZWF0dXJlR2F0ZSwgRmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZlYXR1cmVGbGFnT3ZlcnJpZGUoZmVhdHVyZUdhdGUpXSBhcyBjb25zdCxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIC5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHsgLi4uYWNjLCBba2V5XTogdmFsdWUhIH0pLCB7fSk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEZFQVRVUkVfRkxBR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KG92ZXJyaWRlcykpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZUZsYWdDb250ZXh0VHlwZSB7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBGZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG5pbnRlcmZhY2UgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcyB7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgY29uc3QgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXI6IFJlYWN0LkZDPEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBpbnB1dFNlcnZpY2UsXG4gIGNoaWxkcmVuLFxufSkgPT4ge1xuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBmZWF0dXJlRmxhZ1NlcnZpY2U6IGlucHV0U2VydmljZSxcbiAgICB9KSxcbiAgICBbaW5wdXRTZXJ2aWNlXSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxGZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQpO1xuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFLQSxNQUFNLDRCQUE0QjtBQVdsQyxJQUFhLHFCQUFiLE1BQWEsbUJBQW1CO0NBRzlCLFlBQVksY0FBc0M7K0JBcUYxQixnQkFBdUM7R0FDN0QsTUFBTSxZQUFZLEtBQUssYUFBYSxNQUFLLFNBQVEsS0FBSyxTQUFTLFlBQVk7R0FFM0UsTUFBTSxzQkFBc0IsbUJBQW1CLHVCQUF1QixZQUFZO0FBQ2xGLE9BQUksd0JBQXdCLE9BQzFCLFFBQU87QUFHVCxPQUFJLGFBQWEsUUFBUSxVQUFVLFNBQVMsTUFBTTtBQUNoRCxtQkFBTyxTQUNMLGdEQUFnRCxZQUFZLHVDQUM3RDtBQUNELFdBQU87O0FBRVQsVUFBTyxVQUFVOztzQ0FLakIsS0FBSyxxQkFBcUIsYUFBYSx1QkFBdUI7K0JBRWY7QUFDL0Ms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
116
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsImZlYXR1cmVHYXRlcyIsIkZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZID0gJ3NwaWZmeS1mZWF0dXJlLWZsYWdzJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bGxGbGFnVmFsdWUge1xuICByZXNvbHZlZDogYm9vbGVhbjtcbiAgaW5pdGlhbDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcXVlcnlfcGFyYW1fb3ZlcnJpZGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHdpbmRvd19wYXJhbV9vdmVycmlkZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc3RvcmVkX292ZXJyaWRlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vLyBUaGlzIGlzIHRoZSBjbGFzcyB0aGF0IHdhcyBwcmV2aW91c2x5IGltcGxpY2l0bHkgdXNlZCBvciBkZWZpbmVkIGVsc2V3aGVyZVxuZXhwb3J0IGNsYXNzIEZlYXR1cmVGbGFnU2VydmljZSB7XG4gIHByaXZhdGUgZmVhdHVyZUdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xuXG4gIGNvbnN0cnVjdG9yKGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXSkge1xuICAgIHRoaXMuZmVhdHVyZUdhdGVzID0gZmVhdHVyZUdhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldFF1ZXJ5UGFyYW1GZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uPy5ocmVmID8/ICcnO1xuICAgIGlmICh1cmwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmxPYmouc2VhcmNoKTtcbiAgICAgIGNvbnN0IHBhcmFtc09iaiA9IE9iamVjdC5mcm9tRW50cmllcyhwYXJhbXMuZW50cmllcygpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zT2JqW2ZlYXR1cmVHYXRlXTtcblxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRXaW5kb3dGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB3aW5kb3dPdmVycmlkZSA9IHdpbmRvdyBhcyBXaW5kb3cgJiB7XG4gICAgICBfZW52aXZlPzogeyBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfTtcbiAgICAgIF9zcGlmZnk/OiB7IGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB9O1xuICAgIH07XG4gICAgY29uc3QgZmVhdHVyZU92ZXJyaWRlcyA9XG4gICAgICB3aW5kb3dPdmVycmlkZT8uX2Vudml2ZT8uZmVhdHVyZU92ZXJyaWRlcyA/PyB3aW5kb3dPdmVycmlkZT8uX3NwaWZmeT8uZmVhdHVyZU92ZXJyaWRlcztcbiAgICBjb25zdCB2YWx1ZSA9IGZlYXR1cmVPdmVycmlkZXM/LltTdHJpbmcoZmVhdHVyZUdhdGUpXTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGdldFN0b3JlZEZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZUZsYWdzID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEZFQVRVUkVfRkxBR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKCFmZWF0dXJlRmxhZ3MpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFnc09iaiA9IEpTT04ucGFyc2UoZmVhdHVyZUZsYWdzKSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICAgIHJldHVybiBmZWF0dXJlRmxhZ3NPYmpbZmVhdHVyZUdhdGVdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdnZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlczogZXJyb3IgcGFyc2luZyBmZWF0dXJlIGZsYWdzJywgZXJyKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEZlYXR1cmVGbGFnT3ZlcnJpZGUoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHF1ZXJ5T3ZlcnJpZGUgPSBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0UXVlcnlQYXJhbUZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAocXVlcnlPdmVycmlkZSAhPSBudWxsKSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBpc0ZlYXR1cmVHYXRlRW5hYmxlZCBmZWF0dXJlR2F0ZToke2ZlYXR1cmVHYXRlfSBvdmVycmlkZGVuIGJ5IFVSTCBwYXJhbS4gTmV3IHZhbHVlOiAke3F1ZXJ5T3ZlcnJpZGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gcXVlcnlPdmVycmlkZTtcbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3dPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRXaW5kb3dGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSk7XG4gICAgaWYgKHdpbmRvd092ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgd2luZG93IHBhcmFtLiBOZXcgdmFsdWU6ICR7d2luZG93T3ZlcnJpZGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gd2luZG93T3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVkT3ZlcnJpZGUgPSBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0U3RvcmVkRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChzdG9yZWRPdmVycmlkZSAhPSBudWxsKSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBpc0ZlYXR1cmVHYXRlRW5hYmxlZCBmZWF0dXJlR2F0ZToke2ZlYXR1cmVHYXRlfSBvdmVycmlkZGVuIGJ5IHN0b3JlZCB2YWx1ZS4gTmV3IHZhbHVlOiAke3N0b3JlZE92ZXJyaWRlfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0b3JlZE92ZXJyaWRlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpc0ZlYXR1cmVHYXRlRW5hYmxlZCA9IChmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgZ2F0ZVZhbHVlID0gdGhpcy5mZWF0dXJlR2F0ZXMuZmluZChnYXRlID0+IGdhdGUubmFtZSA9PT0gZmVhdHVyZUdhdGUpO1xuXG4gICAgY29uc3QgZmVhdHVyZUZsYWdPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ092ZXJyaWRlKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAoZmVhdHVyZUZsYWdPdmVycmlkZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmVhdHVyZUZsYWdPdmVycmlkZTtcbiAgICB9XG5cbiAgICBpZiAoZ2F0ZVZhbHVlID09IG51bGwgfHwgZ2F0ZVZhbHVlLnZhbHVlID09IG51bGwpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IHZhbHVlIGlzIHVuZGVmaW5lZCAtIHJldHVybmluZyBmYWxzZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0ZVZhbHVlLnZhbHVlO1xuICB9O1xuXG4gIC8vIEVuc3VyZSB0aGF0IHN0YW5kYXJkIG92ZXJyaWRlcyB3b3JrIGFzIGV4cGVjdGVkXG4gIGlzQ2xpZW50U2Vzc2lvbkVuYWJsZWQgPSAoKTogYm9vbGVhbiA9PlxuICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoRmVhdHVyZUdhdGVzLklzQ2xpZW50U2Vzc2lvbkVuYWJsZWQpO1xuXG4gIGdldEZlYXR1cmVGbGFncyA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC52YWx1ZXMoRmVhdHVyZUdhdGVzKS5tYXAoKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpID0+IFtcbiAgICAgICAgZmVhdHVyZUdhdGUsXG4gICAgICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoZmVhdHVyZUdhdGUpLFxuICAgICAgXSksXG4gICAgKTtcbiAgfTtcblxuICBnZXRGdWxsRmxhZ1ZhbHVlID0gKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBGdWxsRmxhZ1ZhbHVlID0+IHtcbiAgICBjb25zdCBnYXRlVmFsdWUgPSB0aGlzLmZlYXR1cmVHYXRlcy5maW5kKGdhdGUgPT4gZ2F0ZS5uYW1lID09PSBmZWF0dXJlR2F0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkOiB0aGlzLmlzRmVhdHVyZUdhdGVFbmFibGVkKGZlYXR1cmVHYXRlKSxcbiAgICAgIGluaXRpYWw6IGdhdGVWYWx1ZT8udmFsdWUsXG4gICAgICBxdWVyeV9wYXJhbV9vdmVycmlkZTogRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFF1ZXJ5UGFyYW1GZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSksXG4gICAgICB3aW5kb3dfcGFyYW1fb3ZlcnJpZGU6IEZlYXR1cmVGbGFnU2VydmljZS5nZXRXaW5kb3dGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSksXG4gICAgICBzdG9yZWRfb3ZlcnJpZGU6IEZlYXR1cmVGbGFnU2VydmljZS5nZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSksXG4gICAgfTtcbiAgfTtcblxuICBnZXRGdWxsRmxhZ1ZhbHVlcyA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBGdWxsRmxhZ1ZhbHVlPiA9PiB7XG4gICAgY29uc3QgZmVhdHVyZUdhdGVzID0gT2JqZWN0LnZhbHVlcyhGZWF0dXJlR2F0ZXMpLm1hcCgoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcykgPT4gW1xuICAgICAgZmVhdHVyZUdhdGUsXG4gICAgICB0aGlzLmdldEZ1bGxGbGFnVmFsdWUoZmVhdHVyZUdhdGUpLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVHYXRlcy5sZW5ndGggPiAwXG4gICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgRnVsbEZsYWdWYWx1ZT4+KChhY2MsIGVudHJ5KSA9PiB7XG4gICAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IGVudHJ5IGFzIFtGZWF0dXJlR2F0ZXMsIEZ1bGxGbGFnVmFsdWVdO1xuICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSlcbiAgICAgIDoge307XG4gIH07XG5cbiAgc3RhdGljIHBlcnNpc3RGZWF0dXJlR2F0ZU92ZXJyaWRlcygpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG92ZXJyaWRlcyA9IE9iamVjdC52YWx1ZXMoRmVhdHVyZUdhdGVzKVxuICAgICAgLm1hcChcbiAgICAgICAgZmVhdHVyZUdhdGUgPT5cbiAgICAgICAgICBbZmVhdHVyZUdhdGUsIEZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ092ZXJyaWRlKGZlYXR1cmVHYXRlKV0gYXMgY29uc3QsXG4gICAgICApXG4gICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7IC4uLmFjYywgW2tleV06IHZhbHVlISB9KSwge30pO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShvdmVycmlkZXMpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFnQ29udGV4dFR5cGUge1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZSB8IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8RmVhdHVyZUZsYWdDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuaW50ZXJmYWNlIEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyUHJvcHMge1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiA9ICh7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRTZXJ2aWNlLFxuICBjaGlsZHJlbixcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBpbnB1dFNlcnZpY2UsXG4gICAgfSksXG4gICAgW2lucHV0U2VydmljZV0sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8RmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChGZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0KTtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlRmVhdHVyZUZsYWdTZXJ2aWNlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsTUFBTSw0QkFBNEI7QUFFbEMsTUFBTSxTQUFTLElBQUlBLGVBQU8sNEJBQTRCO0FBV3RELElBQWEscUJBQWIsTUFBYSxtQkFBbUI7Q0FHOUIsWUFBWSxjQUFzQzsrQkFrRjFCLGdCQUF1QztHQUM3RCxNQUFNLFlBQVksS0FBSyxhQUFhLE1BQUssU0FBUSxLQUFLLFNBQVMsWUFBWTtHQUUzRSxNQUFNLHNCQUFzQixtQkFBbUIsdUJBQXVCLFlBQVk7QUFDbEYsT0FBSSx3QkFBd0IsT0FDMUIsUUFBTztBQUdULE9BQUksYUFBYSxRQUFRLFVBQVUsU0FBUyxNQUFNO0FBQ2hELFdBQU8sU0FDTCxvQ0FBb0MsWUFBWSx1Q0FDakQ7QUFDRCxXQUFPOztBQUVULFVBQU8sVUFBVTs7c0NBS2pCLEtBQUsscUJBQXFCLGFBQWEsdUJBQXVC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