@envive-ai/react-hooks 0.3.56 → 0.3.57

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 (96) hide show
  1. package/dist/application/commerce-api.cjs +11 -12
  2. package/dist/application/commerce-api.js +11 -12
  3. package/dist/application/logging/index.cjs +13 -0
  4. package/dist/application/logging/index.d.cts +3 -0
  5. package/dist/application/logging/index.d.ts +3 -0
  6. package/dist/application/logging/index.js +4 -0
  7. package/dist/application/logging/logLevel.cjs +123 -0
  8. package/dist/application/logging/logLevel.d.cts +47 -0
  9. package/dist/application/logging/logLevel.d.ts +47 -0
  10. package/dist/application/logging/logLevel.js +115 -0
  11. package/dist/application/logging/logger.cjs +6 -1
  12. package/dist/application/logging/logger.d.cts +13 -0
  13. package/dist/application/logging/logger.d.ts +13 -0
  14. package/dist/application/logging/logger.js +7 -1
  15. package/dist/atoms/app/index.d.cts +7 -7
  16. package/dist/atoms/app/index.d.ts +7 -7
  17. package/dist/atoms/app/variant.d.cts +6 -6
  18. package/dist/atoms/app/variant.d.ts +6 -6
  19. package/dist/atoms/chat/chatState.d.cts +19 -19
  20. package/dist/atoms/chat/chatState.d.ts +1 -1
  21. package/dist/atoms/chat/form.d.cts +2 -2
  22. package/dist/atoms/chat/form.d.ts +2 -2
  23. package/dist/atoms/chat/index.d.cts +2 -2
  24. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  25. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  26. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  27. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  28. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  29. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  30. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  31. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  32. package/dist/atoms/chat/replies.d.cts +3 -3
  33. package/dist/atoms/chat/suggestions.d.cts +2 -2
  34. package/dist/atoms/chat/suggestions.d.ts +2 -2
  35. package/dist/atoms/envive/enviveConfig.d.cts +14 -14
  36. package/dist/atoms/envive/enviveConfig.d.ts +14 -14
  37. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  38. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  39. package/dist/atoms/org/customerService.d.cts +6 -6
  40. package/dist/atoms/org/customerService.d.ts +6 -6
  41. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  42. package/dist/atoms/org/graphqlConfig.d.ts +5 -5
  43. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  44. package/dist/atoms/org/newOrgConfigAtom.d.ts +3 -3
  45. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  46. package/dist/atoms/search/chatSearch.d.cts +17 -17
  47. package/dist/atoms/search/chatSearch.d.ts +17 -17
  48. package/dist/atoms/search/searchAPI.d.cts +13 -13
  49. package/dist/atoms/search/types.d.ts +1 -1
  50. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  51. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  52. package/dist/contexts/salesAgentContext/salesAgentService.cjs +2 -2
  53. package/dist/contexts/salesAgentContext/salesAgentService.js +2 -2
  54. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  55. package/dist/contexts/types.d.cts +1 -1
  56. package/dist/contexts/types.d.ts +1 -1
  57. package/dist/contexts/typesV3.d.cts +1 -1
  58. package/dist/contexts/typesV3.d.ts +1 -1
  59. package/dist/hooks/ChatToggle/useChatToggle.cjs +10 -8
  60. package/dist/hooks/ChatToggle/useChatToggle.d.cts +4 -3
  61. package/dist/hooks/ChatToggle/useChatToggle.d.ts +4 -3
  62. package/dist/hooks/ChatToggle/useChatToggle.js +11 -9
  63. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  64. package/dist/hooks/Intersection/useIntersection.cjs +7 -5
  65. package/dist/hooks/Intersection/useIntersection.js +7 -5
  66. package/dist/hooks/Search/useSearchInput.cjs +1 -1
  67. package/dist/hooks/Search/useSearchInput.js +1 -1
  68. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.cts +2 -2
  69. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts +2 -2
  70. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +8 -6
  71. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +8 -6
  72. package/dist/hooks/WidgetInteraction/types.cjs +40 -1
  73. package/dist/hooks/WidgetInteraction/types.d.cts +16 -2
  74. package/dist/hooks/WidgetInteraction/types.d.ts +16 -2
  75. package/dist/hooks/WidgetInteraction/types.js +41 -2
  76. package/dist/hooks/utils.d.cts +1 -1
  77. package/dist/hooks/utils.d.ts +1 -1
  78. package/dist/services/amplitudeService/amplitudeService.cjs +14 -5
  79. package/dist/services/amplitudeService/amplitudeService.js +14 -5
  80. package/package.json +5 -1
  81. package/src/application/__tests__/commerceApiStreaming.test.ts +171 -0
  82. package/src/application/commerce-api.ts +21 -21
  83. package/src/application/logging/__tests__/logger.test.ts +159 -0
  84. package/src/application/logging/index.ts +12 -0
  85. package/src/application/logging/logLevel.ts +162 -0
  86. package/src/application/logging/logger.ts +13 -0
  87. package/src/contexts/salesAgentContext/salesAgentService.ts +1 -1
  88. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +4 -5
  89. package/src/hooks/ChatToggle/__tests__/useChatToggle.test.ts +273 -0
  90. package/src/hooks/ChatToggle/useChatToggle.ts +39 -12
  91. package/src/hooks/Intersection/useIntersection.ts +7 -4
  92. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +8 -5
  93. package/src/hooks/WidgetInteraction/__tests__/chatTriggerWidget.test.ts +51 -0
  94. package/src/hooks/WidgetInteraction/types.ts +53 -0
  95. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +76 -0
  96. package/src/services/amplitudeService/amplitudeService.ts +37 -5
@@ -1,21 +1,21 @@
1
1
  import { ChatState } from "../../types/custservice-types.cjs";
2
2
  import { AttachmentRequest, CustServiceConversationMessages } from "@spiffy-ai/commerce-api-client";
3
- import * as jotai68 from "jotai";
3
+ import * as jotai77 from "jotai";
4
4
 
5
5
  //#region src/atoms/org/customerService.d.ts
6
- declare const isBusinessHoursAtom: jotai68.PrimitiveAtom<boolean> & {
6
+ declare const isBusinessHoursAtom: jotai77.PrimitiveAtom<boolean> & {
7
7
  init: boolean;
8
8
  };
9
- declare const isCustomerServiceOpenAtom: jotai68.PrimitiveAtom<boolean> & {
9
+ declare const isCustomerServiceOpenAtom: jotai77.PrimitiveAtom<boolean> & {
10
10
  init: boolean;
11
11
  };
12
- declare const customerServiceResponseAtom: jotai68.PrimitiveAtom<CustServiceConversationMessages | undefined> & {
12
+ declare const customerServiceResponseAtom: jotai77.PrimitiveAtom<CustServiceConversationMessages | undefined> & {
13
13
  init: CustServiceConversationMessages | undefined;
14
14
  };
15
- declare const customerServiceChatStateAtom: jotai68.PrimitiveAtom<ChatState | undefined> & {
15
+ declare const customerServiceChatStateAtom: jotai77.PrimitiveAtom<ChatState | undefined> & {
16
16
  init: ChatState | undefined;
17
17
  };
18
- declare const customerServiceAttachment: jotai68.PrimitiveAtom<AttachmentRequest | undefined> & {
18
+ declare const customerServiceAttachment: jotai77.PrimitiveAtom<AttachmentRequest | undefined> & {
19
19
  init: AttachmentRequest | undefined;
20
20
  };
21
21
  //#endregion
@@ -1,21 +1,21 @@
1
1
  import { ChatState } from "../../types/custservice-types.js";
2
2
  import { AttachmentRequest, CustServiceConversationMessages } from "@spiffy-ai/commerce-api-client";
3
- import * as jotai98 from "jotai";
3
+ import * as jotai51 from "jotai";
4
4
 
5
5
  //#region src/atoms/org/customerService.d.ts
6
- declare const isBusinessHoursAtom: jotai98.PrimitiveAtom<boolean> & {
6
+ declare const isBusinessHoursAtom: jotai51.PrimitiveAtom<boolean> & {
7
7
  init: boolean;
8
8
  };
9
- declare const isCustomerServiceOpenAtom: jotai98.PrimitiveAtom<boolean> & {
9
+ declare const isCustomerServiceOpenAtom: jotai51.PrimitiveAtom<boolean> & {
10
10
  init: boolean;
11
11
  };
12
- declare const customerServiceResponseAtom: jotai98.PrimitiveAtom<CustServiceConversationMessages | undefined> & {
12
+ declare const customerServiceResponseAtom: jotai51.PrimitiveAtom<CustServiceConversationMessages | undefined> & {
13
13
  init: CustServiceConversationMessages | undefined;
14
14
  };
15
- declare const customerServiceChatStateAtom: jotai98.PrimitiveAtom<ChatState | undefined> & {
15
+ declare const customerServiceChatStateAtom: jotai51.PrimitiveAtom<ChatState | undefined> & {
16
16
  init: ChatState | undefined;
17
17
  };
18
- declare const customerServiceAttachment: jotai98.PrimitiveAtom<AttachmentRequest | undefined> & {
18
+ declare const customerServiceAttachment: jotai51.PrimitiveAtom<AttachmentRequest | undefined> & {
19
19
  init: AttachmentRequest | undefined;
20
20
  };
21
21
  //#endregion
@@ -1,16 +1,16 @@
1
1
  import { ColorMapping } from "../../application/models/colorsConfig.cjs";
2
2
  import { FrontendConfig } from "../../application/models/frontendConfig.cjs";
3
3
  import { FeatureFlagContextType } from "../../contexts/featureFlagServiceContext/featureFlagServiceContext.cjs";
4
- import * as jotai77 from "jotai";
4
+ import * as jotai71 from "jotai";
5
5
 
6
6
  //#region src/atoms/org/graphqlConfig.d.ts
7
- declare const internalGraphQLColorsConfigAtom: jotai77.PrimitiveAtom<ColorMapping | undefined> & {
7
+ declare const internalGraphQLColorsConfigAtom: jotai71.PrimitiveAtom<ColorMapping | undefined> & {
8
8
  init: ColorMapping | undefined;
9
9
  };
10
- declare const featureFlagServiceAtom: jotai77.PrimitiveAtom<FeatureFlagContextType | undefined> & {
10
+ declare const featureFlagServiceAtom: jotai71.PrimitiveAtom<FeatureFlagContextType | undefined> & {
11
11
  init: FeatureFlagContextType | undefined;
12
12
  };
13
- declare const frontendConfigAtom: jotai77.WritableAtom<FrontendConfig | undefined, [value: FrontendConfig | undefined], void>;
13
+ declare const frontendConfigAtom: jotai71.WritableAtom<FrontendConfig | undefined, [value: FrontendConfig | undefined], void>;
14
14
  //#endregion
15
15
  export { featureFlagServiceAtom, frontendConfigAtom, internalGraphQLColorsConfigAtom };
16
16
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbmZpZy5kLmN0cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXRvbXMvb3JnL2dyYXBocWxDb25maWcuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvck1hcHBpbmcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZyc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWcnO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpbnRlcm5hbEdyYXBoUUxDb2xvcnNDb25maWdBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5QcmltaXRpdmVBdG9tPENvbG9yTWFwcGluZyB8IHVuZGVmaW5lZD4gJiB7XG4gICAgaW5pdDogQ29sb3JNYXBwaW5nIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGZlYXR1cmVGbGFnU2VydmljZUF0b206IGltcG9ydChcImpvdGFpXCIpLlByaW1pdGl2ZUF0b208RmVhdHVyZUZsYWdDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gJiB7XG4gICAgaW5pdDogRmVhdHVyZUZsYWdDb250ZXh0VHlwZSB8IHVuZGVmaW5lZDtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBmcm9udGVuZENvbmZpZ0F0b206IGltcG9ydChcImpvdGFpXCIpLldyaXRhYmxlQXRvbTxGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZCwgW3ZhbHVlOiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZF0sIHZvaWQ+O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxJQUFXLGtDQUF1QjtDQUFBO09BQUE7T0FBQSxRQUFBO09BQUE7Q0FBQTtBQUNsQyxJQUFDLHlCQUFBO0NBQUE7T0FBQTtPQUFBLFFBQUE7T0FBQTtDQUFBO0FBQ0QsSUFBVyxxQkFBcUI7Q0FBQztPQUFXO09BQXNCO09BQXNCLFFBQVE7Q0FBYSJ9
@@ -1,16 +1,16 @@
1
1
  import { ColorMapping } from "../../application/models/colorsConfig.js";
2
2
  import { FrontendConfig } from "../../application/models/frontendConfig.js";
3
3
  import { FeatureFlagContextType } from "../../contexts/featureFlagServiceContext/featureFlagServiceContext.js";
4
- import * as jotai103 from "jotai";
4
+ import * as jotai69 from "jotai";
5
5
 
6
6
  //#region src/atoms/org/graphqlConfig.d.ts
7
- declare const internalGraphQLColorsConfigAtom: jotai103.PrimitiveAtom<ColorMapping | undefined> & {
7
+ declare const internalGraphQLColorsConfigAtom: jotai69.PrimitiveAtom<ColorMapping | undefined> & {
8
8
  init: ColorMapping | undefined;
9
9
  };
10
- declare const featureFlagServiceAtom: jotai103.PrimitiveAtom<FeatureFlagContextType | undefined> & {
10
+ declare const featureFlagServiceAtom: jotai69.PrimitiveAtom<FeatureFlagContextType | undefined> & {
11
11
  init: FeatureFlagContextType | undefined;
12
12
  };
13
- declare const frontendConfigAtom: jotai103.WritableAtom<FrontendConfig | undefined, [value: FrontendConfig | undefined], void>;
13
+ declare const frontendConfigAtom: jotai69.WritableAtom<FrontendConfig | undefined, [value: FrontendConfig | undefined], void>;
14
14
  //#endregion
15
15
  export { featureFlagServiceAtom, frontendConfigAtom, internalGraphQLColorsConfigAtom };
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbmZpZy5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yTWFwcGluZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY29sb3JzQ29uZmlnJztcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGludGVybmFsR3JhcGhRTENvbG9yc0NvbmZpZ0F0b206IGltcG9ydChcImpvdGFpXCIpLlByaW1pdGl2ZUF0b208Q29sb3JNYXBwaW5nIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbTogaW1wb3J0KFwiam90YWlcIikuUHJpbWl0aXZlQXRvbTxGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGZyb250ZW5kQ29uZmlnQXRvbTogaW1wb3J0KFwiam90YWlcIikuV3JpdGFibGVBdG9tPEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkLCBbdmFsdWU6IEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkXSwgdm9pZD47XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQVcsa0NBQXVCO0NBQUE7T0FBQTtPQUFBLFNBQUE7T0FBQTtDQUFBO0FBQ2xDLElBQUMseUJBQUE7Q0FBQTtPQUFBO09BQUEsU0FBQTtPQUFBO0NBQUE7QUFDRCxJQUFXLHFCQUFxQjtDQUFDO09BQVc7T0FBc0I7T0FBc0IsU0FBUztDQUFhIn0=
16
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbmZpZy5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yTWFwcGluZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY29sb3JzQ29uZmlnJztcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGludGVybmFsR3JhcGhRTENvbG9yc0NvbmZpZ0F0b206IGltcG9ydChcImpvdGFpXCIpLlByaW1pdGl2ZUF0b208Q29sb3JNYXBwaW5nIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbTogaW1wb3J0KFwiam90YWlcIikuUHJpbWl0aXZlQXRvbTxGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGZyb250ZW5kQ29uZmlnQXRvbTogaW1wb3J0KFwiam90YWlcIikuV3JpdGFibGVBdG9tPEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkLCBbdmFsdWU6IEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkXSwgdm9pZD47XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQVcsa0NBQXVCO0NBQUE7T0FBQTtPQUFBLFFBQUE7T0FBQTtDQUFBO0FBQ2xDLElBQUMseUJBQUE7Q0FBQTtPQUFBO09BQUEsUUFBQTtPQUFBO0NBQUE7QUFDRCxJQUFXLHFCQUFxQjtDQUFDO09BQVc7T0FBc0I7T0FBc0IsUUFBUTtDQUFhIn0=
@@ -1,8 +1,8 @@
1
1
  import { GraphQlConfigValues } from "../../contexts/graphqlContext/graphqlContext.cjs";
2
- import * as jotai73 from "jotai";
2
+ import * as jotai70 from "jotai";
3
3
 
4
4
  //#region src/atoms/org/newOrgConfigAtom.d.ts
5
- declare const newOrgConfigAtom: jotai73.PrimitiveAtom<GraphQlConfigValues | null> & {
5
+ declare const newOrgConfigAtom: jotai70.PrimitiveAtom<GraphQlConfigValues | null> & {
6
6
  init: GraphQlConfigValues | null;
7
7
  };
8
8
  //#endregion
@@ -1,10 +1,10 @@
1
1
  import { GraphQlConfigValues } from "../../contexts/graphqlContext/graphqlContext.js";
2
- import * as jotai109 from "jotai";
2
+ import * as jotai68 from "jotai";
3
3
 
4
4
  //#region src/atoms/org/newOrgConfigAtom.d.ts
5
- declare const newOrgConfigAtom: jotai109.PrimitiveAtom<GraphQlConfigValues | null> & {
5
+ declare const newOrgConfigAtom: jotai68.PrimitiveAtom<GraphQlConfigValues | null> & {
6
6
  init: GraphQlConfigValues | null;
7
7
  };
8
8
  //#endregion
9
9
  export { newOrgConfigAtom };
10
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3T3JnQ29uZmlnQXRvbS5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdG9tcy9vcmcvbmV3T3JnQ29uZmlnQXRvbS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoUWxDb25maWdWYWx1ZXMgfSBmcm9tICdzcmMvY29udGV4dHMvZ3JhcGhxbENvbnRleHQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgbmV3T3JnQ29uZmlnQXRvbTogaW1wb3J0KFwiam90YWlcIikuUHJpbWl0aXZlQXRvbTxHcmFwaFFsQ29uZmlnVmFsdWVzIHwgbnVsbD4gJiB7XG4gICAgaW5pdDogR3JhcGhRbENvbmZpZ1ZhbHVlcyB8IG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBVyxtQkFBbUI7Q0FBQztPQUFLO09BQUEsU0FBQTtPQUFBO0NBQUEifQ==
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3T3JnQ29uZmlnQXRvbS5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdG9tcy9vcmcvbmV3T3JnQ29uZmlnQXRvbS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoUWxDb25maWdWYWx1ZXMgfSBmcm9tICdzcmMvY29udGV4dHMvZ3JhcGhxbENvbnRleHQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgbmV3T3JnQ29uZmlnQXRvbTogaW1wb3J0KFwiam90YWlcIikuUHJpbWl0aXZlQXRvbTxHcmFwaFFsQ29uZmlnVmFsdWVzIHwgbnVsbD4gJiB7XG4gICAgaW5pdDogR3JhcGhRbENvbmZpZ1ZhbHVlcyB8IG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBVyxtQkFBbUI7Q0FBQztPQUFLO09BQUEsUUFBQTtPQUFBO0NBQUEifQ==
@@ -1,10 +1,10 @@
1
1
  import { OrgAnalyticsAmplitudeConfig, OrgAnalyticsConfig, OrgAnalyticsCustomerServiceConfig } from "../../application/models/api/orgAnalyticsConfig.js";
2
- import * as jotai106 from "jotai";
2
+ import * as jotai76 from "jotai";
3
3
 
4
4
  //#region src/atoms/org/orgAnalyticsConfig.d.ts
5
- declare const orgAnalyticsConfigAtom: jotai106.WritableAtom<OrgAnalyticsConfig | undefined, [value: OrgAnalyticsConfig], void>;
6
- declare const orgAnalyticsAmplitudeConfigAtom: jotai106.Atom<OrgAnalyticsAmplitudeConfig | undefined>;
7
- declare const orgAnalyticsCustomerServiceConfigAtom: jotai106.Atom<OrgAnalyticsCustomerServiceConfig | undefined>;
5
+ declare const orgAnalyticsConfigAtom: jotai76.WritableAtom<OrgAnalyticsConfig | undefined, [value: OrgAnalyticsConfig], void>;
6
+ declare const orgAnalyticsAmplitudeConfigAtom: jotai76.Atom<OrgAnalyticsAmplitudeConfig | undefined>;
7
+ declare const orgAnalyticsCustomerServiceConfigAtom: jotai76.Atom<OrgAnalyticsCustomerServiceConfig | undefined>;
8
8
  //#endregion
9
9
  export { orgAnalyticsAmplitudeConfigAtom, orgAnalyticsConfigAtom, orgAnalyticsCustomerServiceConfigAtom };
10
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnQW5hbHl0aWNzQ29uZmlnLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F0b21zL29yZy9vcmdBbmFseXRpY3NDb25maWcuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmdBbmFseXRpY3NBbXBsaXR1ZGVDb25maWcsIE9yZ0FuYWx5dGljc0NvbmZpZywgT3JnQW5hbHl0aWNzQ3VzdG9tZXJTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQW5hbHl0aWNzQ29uZmlnJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG9yZ0FuYWx5dGljc0NvbmZpZ0F0b206IGltcG9ydChcImpvdGFpXCIpLldyaXRhYmxlQXRvbTxPcmdBbmFseXRpY3NDb25maWcgfCB1bmRlZmluZWQsIFt2YWx1ZTogT3JnQW5hbHl0aWNzQ29uZmlnXSwgdm9pZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBvcmdBbmFseXRpY3NBbXBsaXR1ZGVDb25maWdBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5BdG9tPE9yZ0FuYWx5dGljc0FtcGxpdHVkZUNvbmZpZyB8IHVuZGVmaW5lZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBvcmdBbmFseXRpY3NDdXN0b21lclNlcnZpY2VDb25maWdBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5BdG9tPE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZyB8IHVuZGVmaW5lZD47XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxJQUFXLHlCQUF5QjtDQUFDO09BQVc7T0FBMEI7T0FBMEIsU0FBUztDQUFNO0FBQ25ILElBQVcsa0NBQWtDO0NBQUM7T0FBVztPQUFtQyxTQUFTO0NBQUsifQ==
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnQW5hbHl0aWNzQ29uZmlnLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F0b21zL29yZy9vcmdBbmFseXRpY3NDb25maWcuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmdBbmFseXRpY3NBbXBsaXR1ZGVDb25maWcsIE9yZ0FuYWx5dGljc0NvbmZpZywgT3JnQW5hbHl0aWNzQ3VzdG9tZXJTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQW5hbHl0aWNzQ29uZmlnJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG9yZ0FuYWx5dGljc0NvbmZpZ0F0b206IGltcG9ydChcImpvdGFpXCIpLldyaXRhYmxlQXRvbTxPcmdBbmFseXRpY3NDb25maWcgfCB1bmRlZmluZWQsIFt2YWx1ZTogT3JnQW5hbHl0aWNzQ29uZmlnXSwgdm9pZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBvcmdBbmFseXRpY3NBbXBsaXR1ZGVDb25maWdBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5BdG9tPE9yZ0FuYWx5dGljc0FtcGxpdHVkZUNvbmZpZyB8IHVuZGVmaW5lZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBvcmdBbmFseXRpY3NDdXN0b21lclNlcnZpY2VDb25maWdBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5BdG9tPE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZyB8IHVuZGVmaW5lZD47XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxJQUFXLHlCQUF5QjtDQUFDO09BQVc7T0FBMEI7T0FBMEIsUUFBUTtDQUFPO0FBQ25ILElBQVcsa0NBQWtDO0NBQUM7T0FBVztPQUFtQyxRQUFRO0NBQUsifQ==
@@ -1,16 +1,16 @@
1
1
  import { ProductResponseAttributes } from "../../application/models/api/response.cjs";
2
2
  import { ChatSearchFilter, ChatSearchStateType, ProductSorting } from "./types.cjs";
3
3
  import { Message } from "../../application/models/message.cjs";
4
- import * as jotai40 from "jotai";
4
+ import * as jotai94 from "jotai";
5
5
 
6
6
  //#region src/atoms/search/chatSearch.d.ts
7
- declare const chatSearchStateAtom: jotai40.PrimitiveAtom<ChatSearchStateType> & {
7
+ declare const chatSearchStateAtom: jotai94.PrimitiveAtom<ChatSearchStateType> & {
8
8
  init: ChatSearchStateType;
9
9
  };
10
- declare const chatSearchHasProductsAtom: jotai40.PrimitiveAtom<boolean> & {
10
+ declare const chatSearchHasProductsAtom: jotai94.PrimitiveAtom<boolean> & {
11
11
  init: boolean;
12
12
  };
13
- declare const chatSearchProductSortingAtom: jotai40.PrimitiveAtom<ProductSorting> & {
13
+ declare const chatSearchProductSortingAtom: jotai94.PrimitiveAtom<ProductSorting> & {
14
14
  init: ProductSorting;
15
15
  };
16
16
  type ChatSearchTurn = {
@@ -21,7 +21,7 @@ type ChatSearchTurn = {
21
21
  filterList: string[];
22
22
  messages: Message[];
23
23
  };
24
- declare const chatSearchIsLoadingAtom: jotai40.PrimitiveAtom<boolean> & {
24
+ declare const chatSearchIsLoadingAtom: jotai94.PrimitiveAtom<boolean> & {
25
25
  init: boolean;
26
26
  };
27
27
  type SelectedChatSearchFilterOption = {
@@ -30,21 +30,21 @@ type SelectedChatSearchFilterOption = {
30
30
  filterId: string;
31
31
  filterItemId: string;
32
32
  };
33
- declare const selectedFilterOptionsAtom: jotai40.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
33
+ declare const selectedFilterOptionsAtom: jotai94.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
34
34
  init: SelectedChatSearchFilterOption[];
35
35
  };
36
- declare const additiveDynamicFiltersAtom: jotai40.Atom<boolean>;
36
+ declare const additiveDynamicFiltersAtom: jotai94.Atom<boolean>;
37
37
  declare const createChatSearchFilterOption: (filterId: string, filterItemId: string, displayName: string) => SelectedChatSearchFilterOption;
38
- declare const chatSearchParamsAtom: jotai40.WritableAtom<{
38
+ declare const chatSearchParamsAtom: jotai94.WritableAtom<{
39
39
  id: string | null;
40
40
  query: string | null;
41
41
  }, [value: {
42
42
  id: string | null;
43
43
  query: string | null;
44
44
  }], void>;
45
- declare const chatSearchQueryAtom: jotai40.WritableAtom<string | null, [value: string | null], void>;
46
- declare const chatSearchIdAtom: jotai40.WritableAtom<string | null, [value: string | null], void>;
47
- declare const ChatSearchTurnAtom: jotai40.Atom<{
45
+ declare const chatSearchQueryAtom: jotai94.WritableAtom<string | null, [value: string | null], void>;
46
+ declare const chatSearchIdAtom: jotai94.WritableAtom<string | null, [value: string | null], void>;
47
+ declare const ChatSearchTurnAtom: jotai94.Atom<{
48
48
  productList: {
49
49
  averageRating?: number | undefined;
50
50
  colors?: string[] | undefined;
@@ -74,7 +74,7 @@ declare const ChatSearchTurnAtom: jotai40.Atom<{
74
74
  filterList: string[];
75
75
  messages: Message[];
76
76
  } | null>;
77
- declare const chatSearchProducts: jotai40.Atom<{
77
+ declare const chatSearchProducts: jotai94.Atom<{
78
78
  averageRating?: number | undefined;
79
79
  colors?: string[] | undefined;
80
80
  description?: string | undefined;
@@ -97,19 +97,19 @@ declare const chatSearchProducts: jotai40.Atom<{
97
97
  title: string;
98
98
  url: string;
99
99
  }[]>;
100
- declare const chatSearchFiltersAtom: jotai40.Atom<ChatSearchFilter[]>;
100
+ declare const chatSearchFiltersAtom: jotai94.Atom<ChatSearchFilter[]>;
101
101
  declare const setSearchParams: (query: string) => void;
102
- declare const getSearchParamsAtom: jotai40.Atom<{
102
+ declare const getSearchParamsAtom: jotai94.Atom<{
103
103
  es: string | null;
104
104
  esq: string | null;
105
105
  }>;
106
- declare const initiateChatSearchAtom: jotai40.WritableAtom<null, [query: string], void> & {
106
+ declare const initiateChatSearchAtom: jotai94.WritableAtom<null, [query: string], void> & {
107
107
  init: null;
108
108
  };
109
- declare const handleSearchResultsAtom: jotai40.WritableAtom<null, [message: Message | undefined], void> & {
109
+ declare const handleSearchResultsAtom: jotai94.WritableAtom<null, [message: Message | undefined], void> & {
110
110
  init: null;
111
111
  };
112
- declare const setChatSearchParamsAtom: jotai40.WritableAtom<null, [query: string], void> & {
112
+ declare const setChatSearchParamsAtom: jotai94.WritableAtom<null, [query: string], void> & {
113
113
  init: null;
114
114
  };
115
115
  //#endregion
@@ -1,16 +1,16 @@
1
1
  import { ProductResponseAttributes } from "../../application/models/api/response.js";
2
2
  import { ChatSearchFilter, ChatSearchStateType, ProductSorting } from "./types.js";
3
3
  import { Message } from "../../application/models/message.js";
4
- import * as jotai68 from "jotai";
4
+ import * as jotai35 from "jotai";
5
5
 
6
6
  //#region src/atoms/search/chatSearch.d.ts
7
- declare const chatSearchStateAtom: jotai68.PrimitiveAtom<ChatSearchStateType> & {
7
+ declare const chatSearchStateAtom: jotai35.PrimitiveAtom<ChatSearchStateType> & {
8
8
  init: ChatSearchStateType;
9
9
  };
10
- declare const chatSearchHasProductsAtom: jotai68.PrimitiveAtom<boolean> & {
10
+ declare const chatSearchHasProductsAtom: jotai35.PrimitiveAtom<boolean> & {
11
11
  init: boolean;
12
12
  };
13
- declare const chatSearchProductSortingAtom: jotai68.PrimitiveAtom<ProductSorting> & {
13
+ declare const chatSearchProductSortingAtom: jotai35.PrimitiveAtom<ProductSorting> & {
14
14
  init: ProductSorting;
15
15
  };
16
16
  type ChatSearchTurn = {
@@ -21,7 +21,7 @@ type ChatSearchTurn = {
21
21
  filterList: string[];
22
22
  messages: Message[];
23
23
  };
24
- declare const chatSearchIsLoadingAtom: jotai68.PrimitiveAtom<boolean> & {
24
+ declare const chatSearchIsLoadingAtom: jotai35.PrimitiveAtom<boolean> & {
25
25
  init: boolean;
26
26
  };
27
27
  type SelectedChatSearchFilterOption = {
@@ -30,21 +30,21 @@ type SelectedChatSearchFilterOption = {
30
30
  filterId: string;
31
31
  filterItemId: string;
32
32
  };
33
- declare const selectedFilterOptionsAtom: jotai68.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
33
+ declare const selectedFilterOptionsAtom: jotai35.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
34
34
  init: SelectedChatSearchFilterOption[];
35
35
  };
36
- declare const additiveDynamicFiltersAtom: jotai68.Atom<boolean>;
36
+ declare const additiveDynamicFiltersAtom: jotai35.Atom<boolean>;
37
37
  declare const createChatSearchFilterOption: (filterId: string, filterItemId: string, displayName: string) => SelectedChatSearchFilterOption;
38
- declare const chatSearchParamsAtom: jotai68.WritableAtom<{
38
+ declare const chatSearchParamsAtom: jotai35.WritableAtom<{
39
39
  id: string | null;
40
40
  query: string | null;
41
41
  }, [value: {
42
42
  id: string | null;
43
43
  query: string | null;
44
44
  }], void>;
45
- declare const chatSearchQueryAtom: jotai68.WritableAtom<string | null, [value: string | null], void>;
46
- declare const chatSearchIdAtom: jotai68.WritableAtom<string | null, [value: string | null], void>;
47
- declare const ChatSearchTurnAtom: jotai68.Atom<{
45
+ declare const chatSearchQueryAtom: jotai35.WritableAtom<string | null, [value: string | null], void>;
46
+ declare const chatSearchIdAtom: jotai35.WritableAtom<string | null, [value: string | null], void>;
47
+ declare const ChatSearchTurnAtom: jotai35.Atom<{
48
48
  productList: {
49
49
  averageRating?: number | undefined;
50
50
  colors?: string[] | undefined;
@@ -74,7 +74,7 @@ declare const ChatSearchTurnAtom: jotai68.Atom<{
74
74
  filterList: string[];
75
75
  messages: Message[];
76
76
  } | null>;
77
- declare const chatSearchProducts: jotai68.Atom<{
77
+ declare const chatSearchProducts: jotai35.Atom<{
78
78
  averageRating?: number | undefined;
79
79
  colors?: string[] | undefined;
80
80
  description?: string | undefined;
@@ -97,19 +97,19 @@ declare const chatSearchProducts: jotai68.Atom<{
97
97
  title: string;
98
98
  url: string;
99
99
  }[]>;
100
- declare const chatSearchFiltersAtom: jotai68.Atom<ChatSearchFilter[]>;
100
+ declare const chatSearchFiltersAtom: jotai35.Atom<ChatSearchFilter[]>;
101
101
  declare const setSearchParams: (query: string) => void;
102
- declare const getSearchParamsAtom: jotai68.Atom<{
102
+ declare const getSearchParamsAtom: jotai35.Atom<{
103
103
  es: string | null;
104
104
  esq: string | null;
105
105
  }>;
106
- declare const initiateChatSearchAtom: jotai68.WritableAtom<null, [query: string], void> & {
106
+ declare const initiateChatSearchAtom: jotai35.WritableAtom<null, [query: string], void> & {
107
107
  init: null;
108
108
  };
109
- declare const handleSearchResultsAtom: jotai68.WritableAtom<null, [message: Message | undefined], void> & {
109
+ declare const handleSearchResultsAtom: jotai35.WritableAtom<null, [message: Message | undefined], void> & {
110
110
  init: null;
111
111
  };
112
- declare const setChatSearchParamsAtom: jotai68.WritableAtom<null, [query: string], void> & {
112
+ declare const setChatSearchParamsAtom: jotai35.WritableAtom<null, [query: string], void> & {
113
113
  init: null;
114
114
  };
115
115
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { ChatSearchFilter, ProductSorting } from "./types.cjs";
2
2
  import { SearchParams, SearchResult } from "../../application/models/api/search.cjs";
3
- import * as jotai56 from "jotai";
3
+ import * as jotai82 from "jotai";
4
4
 
5
5
  //#region src/atoms/search/searchAPI.d.ts
6
6
  type SelectedFilterOption = {
@@ -15,28 +15,28 @@ interface SearchState {
15
15
  error: string | null;
16
16
  lastQuery: string | null;
17
17
  }
18
- declare const searchAtom: jotai56.PrimitiveAtom<SearchState> & {
18
+ declare const searchAtom: jotai82.PrimitiveAtom<SearchState> & {
19
19
  init: SearchState;
20
20
  };
21
- declare const searchProductSortingAtom: jotai56.PrimitiveAtom<ProductSorting> & {
21
+ declare const searchProductSortingAtom: jotai82.PrimitiveAtom<ProductSorting> & {
22
22
  init: ProductSorting;
23
23
  };
24
- declare const searchSelectedFiltersAtom: jotai56.PrimitiveAtom<SelectedFilterOption[]> & {
24
+ declare const searchSelectedFiltersAtom: jotai82.PrimitiveAtom<SelectedFilterOption[]> & {
25
25
  init: SelectedFilterOption[];
26
26
  };
27
27
  declare const createFilterOption: (filterId: string, filterItemId: string, displayName: string) => SelectedFilterOption;
28
- declare const searchParamsAtom: jotai56.WritableAtom<{
28
+ declare const searchParamsAtom: jotai82.WritableAtom<{
29
29
  id: string | null;
30
30
  query: string | null;
31
31
  }, [value: {
32
32
  id: string | null;
33
33
  query: string | null;
34
34
  }], void>;
35
- declare const internalSearchSystemStateAtom: jotai56.PrimitiveAtom<boolean> & {
35
+ declare const internalSearchSystemStateAtom: jotai82.PrimitiveAtom<boolean> & {
36
36
  init: boolean;
37
37
  };
38
- declare const searchSystemAtom: jotai56.WritableAtom<boolean, [value: boolean], void>;
39
- declare const filteredSearchProductsAtom: jotai56.Atom<{
38
+ declare const searchSystemAtom: jotai82.WritableAtom<boolean, [value: boolean], void>;
39
+ declare const filteredSearchProductsAtom: jotai82.Atom<{
40
40
  averageRating?: number | undefined;
41
41
  colors?: string[] | undefined;
42
42
  description?: string | undefined;
@@ -59,17 +59,17 @@ declare const filteredSearchProductsAtom: jotai56.Atom<{
59
59
  title: string;
60
60
  url: string;
61
61
  }[]>;
62
- declare const searchFiltersAtom: jotai56.Atom<ChatSearchFilter[]>;
63
- declare const addSearchFilterAtom: jotai56.WritableAtom<null, [filter: SelectedFilterOption], void> & {
62
+ declare const searchFiltersAtom: jotai82.Atom<ChatSearchFilter[]>;
63
+ declare const addSearchFilterAtom: jotai82.WritableAtom<null, [filter: SelectedFilterOption], void> & {
64
64
  init: null;
65
65
  };
66
- declare const removeSearchFilterAtom: jotai56.WritableAtom<null, [filterId: string], void> & {
66
+ declare const removeSearchFilterAtom: jotai82.WritableAtom<null, [filterId: string], void> & {
67
67
  init: null;
68
68
  };
69
- declare const clearSearchFiltersAtom: jotai56.WritableAtom<null, [], void> & {
69
+ declare const clearSearchFiltersAtom: jotai82.WritableAtom<null, [], void> & {
70
70
  init: null;
71
71
  };
72
- declare const performSearchAtom: jotai56.WritableAtom<null, [params: SearchParams, allowRedirect?: unknown], Promise<void>> & {
72
+ declare const performSearchAtom: jotai82.WritableAtom<null, [params: SearchParams, allowRedirect?: unknown], Promise<void>> & {
73
73
  init: null;
74
74
  };
75
75
  //#endregion
@@ -57,4 +57,4 @@ interface ProductRetrievalParams {
57
57
  }
58
58
  //#endregion
59
59
  export { ChatSearchFilter, ChatSearchFilterItem, ChatSearchSortModalProps, ChatSearchSortOverrides, ChatSearchSortProps, ChatSearchStateType, ProductRetrievalParams, ProductRetrievalResult, ProductSorting, ProductSortingNames, SortOption };
60
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXRvbXMvc2VhcmNoL3R5cGVzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VhcmNoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlJztcbmV4cG9ydCBkZWNsYXJlIGVudW0gUHJvZHVjdFNvcnRpbmcge1xuICAgIEZFQVRVUkVEID0gXCJmZWF0dXJlZFwiLFxuICAgIFBSSUNFX0FTQyA9IFwicHJpY2VfYXNjXCIsXG4gICAgUFJJQ0VfREVTQyA9IFwicHJpY2VfZGVzY1wiXG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBQcm9kdWN0U29ydGluZ05hbWVzOiB7XG4gICAgZmVhdHVyZWQ6IHN0cmluZztcbiAgICBwcmljZV9hc2M6IHN0cmluZztcbiAgICBwcmljZV9kZXNjOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaFN0YXRlVHlwZSA9ICdlbnRyeXBvaW50JyB8ICdpbml0aWFsaXppbmctc2VhcmNoJyB8ICdwcm9kdWN0LXBhZ2UnO1xuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaEZpbHRlciA9IHtcbiAgICBmaWx0ZXJJZDogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgaXRlbXM6IENoYXRTZWFyY2hGaWx0ZXJJdGVtW107XG59O1xuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaEZpbHRlckl0ZW0gPSB7XG4gICAgZmlsdGVySXRlbUlkOiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBwcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xufTtcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFNlYXJjaFNvcnRQcm9wcyB7XG4gICAgb3B0aW9uczogUHJvZHVjdFNvcnRpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFNlYXJjaFNvcnRNb2RhbFByb3BzIGV4dGVuZHMgQ2hhdFNlYXJjaFNvcnRQcm9wcyB7XG4gICAgb3BlbjogYm9vbGVhbjtcbiAgICBoYW5kbGVQb3B1cFN0YXRlOiAoc3RhdGU6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNvcnRPcHRpb24ge1xuICAgIHZhbHVlOiBQcm9kdWN0U29ydGluZztcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIG9uU2VsZWN0OiAob3B0aW9uOiBQcm9kdWN0U29ydGluZykgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWNsYXJlIGVudW0gQ2hhdFNlYXJjaFNvcnRPdmVycmlkZXMge1xuICAgIERFU0tUT1BfRklMVEVSX0NPTlRBSU5FUiA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1jb250YWluZXJcIixcbiAgICBERVNLVE9QX0ZJTFRFUl9TRUxFQ1RfQ09NUE9ORU5UID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLXNlbGVjdC1jb21wb25lbnRcIixcbiAgICBERVNLVE9QX0ZJTFRFUl9TRUxFQ1RfSUNPTiA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1zZWxlY3QtaWNvblwiLFxuICAgIE1PQklMRV9GSUxURVJfQlVUVE9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLWJ1dHRvblwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfQ09OVEFJTkVSID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWNvbnRhaW5lclwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfSEVBREVSID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWhlYWRlclwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfU0VMRUNUSU9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLXNlbGVjdGlvblwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfT1BUSU9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLW9wdGlvblwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfT1BUSU9OX1BJTEwgPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtb3B0aW9uLXBpbGxcIixcbiAgICBNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9ERVNDUklQVElPTiA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1vcHRpb24tZGVzY1wiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfQVBQTFlfQlVUVE9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWFwcGx5LWJ1dHRvblwiXG59XG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQge1xuICAgIHByb2R1Y3RzOiBTZWFyY2hSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXTtcbiAgICB0b3RhbFByb2R1Y3RDb3VudDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0UmV0cmlldmFsUGFyYW1zIHtcbiAgICBwcm9kdWN0SWRzOiBzdHJpbmdbXTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxpQkFBaUIsQ0FBQyxHQUFHO0FBQ2hDLElBQVcsc0JBQWMsQ0FBQSxHQUFBO0FBQ3pCLElBQVcsc0JBQWdCLENBQUEsR0FBQTtBQUMzQixJQUFXLG1CQUFpQixDQUFBLFVBQUEscUJBQUE7QUFDNUIsSUFBQSx1QkFBQSxDQUFBLEdBQUE7QUFDQSxJQUFXLHNCQUFzQixDQUFDLFVBQVEsZUFBQTtBQUMxQyxJQUFXLDJCQUFTLENBQUEsVUFBQSxvQkFBQTtBQUNwQixJQUFXLGFBQVU7Q0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNyQixJQUFXLDBCQUFXLENBQUEsR0FBQTtBQUN0QixJQUFDLHlCQUFBLENBQUEsVUFBQSxnQ0FBQTtBQUNELElBQVcseUJBQXlCLENBQUMsR0FBRyJ9
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXRvbXMvc2VhcmNoL3R5cGVzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VhcmNoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlJztcbmV4cG9ydCBkZWNsYXJlIGVudW0gUHJvZHVjdFNvcnRpbmcge1xuICAgIEZFQVRVUkVEID0gXCJmZWF0dXJlZFwiLFxuICAgIFBSSUNFX0FTQyA9IFwicHJpY2VfYXNjXCIsXG4gICAgUFJJQ0VfREVTQyA9IFwicHJpY2VfZGVzY1wiXG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBQcm9kdWN0U29ydGluZ05hbWVzOiB7XG4gICAgZmVhdHVyZWQ6IHN0cmluZztcbiAgICBwcmljZV9hc2M6IHN0cmluZztcbiAgICBwcmljZV9kZXNjOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaFN0YXRlVHlwZSA9ICdlbnRyeXBvaW50JyB8ICdpbml0aWFsaXppbmctc2VhcmNoJyB8ICdwcm9kdWN0LXBhZ2UnO1xuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaEZpbHRlciA9IHtcbiAgICBmaWx0ZXJJZDogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgaXRlbXM6IENoYXRTZWFyY2hGaWx0ZXJJdGVtW107XG59O1xuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaEZpbHRlckl0ZW0gPSB7XG4gICAgZmlsdGVySXRlbUlkOiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBwcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xufTtcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFNlYXJjaFNvcnRQcm9wcyB7XG4gICAgb3B0aW9uczogUHJvZHVjdFNvcnRpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFNlYXJjaFNvcnRNb2RhbFByb3BzIGV4dGVuZHMgQ2hhdFNlYXJjaFNvcnRQcm9wcyB7XG4gICAgb3BlbjogYm9vbGVhbjtcbiAgICBoYW5kbGVQb3B1cFN0YXRlOiAoc3RhdGU6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNvcnRPcHRpb24ge1xuICAgIHZhbHVlOiBQcm9kdWN0U29ydGluZztcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIG9uU2VsZWN0OiAob3B0aW9uOiBQcm9kdWN0U29ydGluZykgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWNsYXJlIGVudW0gQ2hhdFNlYXJjaFNvcnRPdmVycmlkZXMge1xuICAgIERFU0tUT1BfRklMVEVSX0NPTlRBSU5FUiA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1jb250YWluZXJcIixcbiAgICBERVNLVE9QX0ZJTFRFUl9TRUxFQ1RfQ09NUE9ORU5UID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLXNlbGVjdC1jb21wb25lbnRcIixcbiAgICBERVNLVE9QX0ZJTFRFUl9TRUxFQ1RfSUNPTiA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1zZWxlY3QtaWNvblwiLFxuICAgIE1PQklMRV9GSUxURVJfQlVUVE9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLWJ1dHRvblwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfQ09OVEFJTkVSID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWNvbnRhaW5lclwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfSEVBREVSID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWhlYWRlclwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfU0VMRUNUSU9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLXNlbGVjdGlvblwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfT1BUSU9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLW9wdGlvblwiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfT1BUSU9OX1BJTEwgPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtb3B0aW9uLXBpbGxcIixcbiAgICBNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9ERVNDUklQVElPTiA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1vcHRpb24tZGVzY1wiLFxuICAgIE1PQklMRV9GSUxURVJfTU9EQUxfQVBQTFlfQlVUVE9OID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWFwcGx5LWJ1dHRvblwiXG59XG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQge1xuICAgIHByb2R1Y3RzOiBTZWFyY2hSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXTtcbiAgICB0b3RhbFByb2R1Y3RDb3VudDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0UmV0cmlldmFsUGFyYW1zIHtcbiAgICBwcm9kdWN0SWRzOiBzdHJpbmdbXTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxpQkFBaUIsQ0FBQyxJQUFJO0FBQ2pDLElBQVcsc0JBQWMsQ0FBQSxJQUFBO0FBQ3pCLElBQVcsc0JBQWdCLENBQUEsSUFBQTtBQUMzQixJQUFXLG1CQUFpQixDQUFBLFdBQUEscUJBQUE7QUFDNUIsSUFBQSx1QkFBQSxDQUFBLElBQUE7QUFDQSxJQUFXLHNCQUFzQixDQUFDLFdBQVEsZUFBQTtBQUMxQyxJQUFXLDJCQUFTLENBQUEsV0FBQSxvQkFBQTtBQUNwQixJQUFXLGFBQVU7Q0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNyQixJQUFXLDBCQUFXLENBQUEsSUFBQTtBQUN0QixJQUFDLHlCQUFBLENBQUEsV0FBQSxnQ0FBQTtBQUNELElBQVcseUJBQXlCLENBQUMsSUFBSSJ9
@@ -1,4 +1,4 @@
1
- import * as jotai35 from "jotai";
1
+ import * as jotai39 from "jotai";
2
2
  import { WidgetWrapperVariant } from "@envive-ai/react-toolkit-v3/WidgetWrapper";
3
3
 
4
4
  //#region src/atoms/widget/chatPreviewLoading.d.ts
@@ -17,7 +17,7 @@ type ChatPreviewLoadingData = {
17
17
  /**
18
18
  * Atom to read ChatPreviewLoading data for a specific widgetConfigId.
19
19
  */
20
- declare const chatPreviewLoadingDataAtom: jotai35.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
20
+ declare const chatPreviewLoadingDataAtom: jotai39.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
21
21
  widgetConfigId: string;
22
22
  data: ChatPreviewLoadingData;
23
23
  }], void>;
@@ -1,4 +1,4 @@
1
- import * as jotai51 from "jotai";
1
+ import * as jotai93 from "jotai";
2
2
  import { WidgetWrapperVariant } from "@envive-ai/react-toolkit-v3/WidgetWrapper";
3
3
 
4
4
  //#region src/atoms/widget/chatPreviewLoading.d.ts
@@ -17,7 +17,7 @@ type ChatPreviewLoadingData = {
17
17
  /**
18
18
  * Atom to read ChatPreviewLoading data for a specific widgetConfigId.
19
19
  */
20
- declare const chatPreviewLoadingDataAtom: jotai51.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
20
+ declare const chatPreviewLoadingDataAtom: jotai93.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
21
21
  widgetConfigId: string;
22
22
  data: ChatPreviewLoadingData;
23
23
  }], void>;
@@ -174,7 +174,7 @@ const useSalesAgentService = () => {
174
174
  responseAnalytics = await processStreamingResponse(stream, messageInterceptor, setMessages, setResponseStreaming);
175
175
  successfulResponse = true;
176
176
  } catch (e) {
177
- console.error("error getting streaming responses", e);
177
+ logger.logError("error getting streaming responses", e);
178
178
  successfulResponse = false;
179
179
  handleStreamingError(e, setRequestFailure, setMessages);
180
180
  throw e;
@@ -229,4 +229,4 @@ const useSalesAgentService = () => {
229
229
 
230
230
  //#endregion
231
231
  exports.useSalesAgentService = useSalesAgentService;
232
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJTdGF0dXNDb2RlRXJyb3IiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+IiwibWVzc2FnZUZyb21SZXNwb25zZSIsImVycm9yOiB1bmtub3duIiwidXNlU2FsZXNBZ2VudFNlcnZpY2U6ICgpID0+IFNhbGVzQWdlbnRTZXJ2aWNlIiwicmVxdWVzdEZhaWx1cmVBdG9tIiwibWVzc2FnZXNBdG9tIiwic3VnZ2VzdGlvbnNBdG9tIiwicGVuZGluZ1Jlc3BvbnNlQXRvbSIsInJlc3BvbnNlU3RyZWFtaW5nQXRvbSIsInN1Z2dlc3Rpb25zTG9hZGluZ0F0b20iLCJhbmFseXRpY3NDb250ZXh0QXRvbSIsInVzZU1lc3NhZ2VJbnRlcmNlcHRvciIsInVzZUFtcGxpdHVkZSIsInVzZUZlYXR1cmVGbGFnU2VydmljZSIsImFwcERldGFpbHNBdG9tIiwicmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbkF0b20iLCJzdWNjZXNzZnVsUmVzcG9uc2U6IGJvb2xlYW4gfCB1bmRlZmluZWQiLCJDb21tZXJjZUFwaUNsaWVudCIsInJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgR2VuZXJhdGlvblBhcmFtcyxcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxuICBVc2VyRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgbWVzc2FnZUZyb21SZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscyc7XG5pbXBvcnQgeyBhcHBEZXRhaWxzQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IHsgYW5hbHl0aWNzQ29udGV4dEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbkF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL3Jlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb24nO1xuaW1wb3J0IHtcbiAgbWVzc2FnZXNBdG9tLFxuICBwZW5kaW5nUmVzcG9uc2VBdG9tLFxuICByZXF1ZXN0RmFpbHVyZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxuICBzdWdnZXN0aW9uc0xvYWRpbmdBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlTWVzc2FnZUludGVyY2VwdG9yIH0gZnJvbSAnc3JjL2ludGVyY2VwdG9ycy91c2VNZXNzYWdlSW50ZXJjZXB0b3InO1xuaW1wb3J0IHtcbiAgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbn0gZnJvbSAnc3JjL3NlcnZpY2VzL2FtcGxpdHVkZVNlcnZpY2UvYW1wbGl0dWRlU2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVFcnJvciB9IGZyb20gJy4vc3RhdHVzQ29kZUVycm9yJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignc2FsZXNBZ2VudFNlcnZpY2UnKTtcblxuaW50ZXJmYWNlIFNhbGVzQWdlbnRTZXJ2aWNlIHtcbiAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkOiAocGF5bG9hZDoge1xuICAgIHVzZXJFdmVudHM6IFVzZXJFdmVudFtdO1xuICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xuICB9KSA9PiBOZXh0TWVzc2FnZVJlcXVlc3Q7XG4gIGdldFN0cmVhbWluZ1Jlc3BvbnNlczogKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3VnZ2VzdGlvbnM6IChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IFByb21pc2U8dm9pZD47XG4gIGh5ZHJhdGVNZXNzYWdlczogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyA9IChcbiAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBbdXNlckV2ZW50XSA9IHBheWxvYWQudXNlckV2ZW50cyB8fCBbXTtcbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdzdWdnZXN0aW9uX2NsaWNrZWQnLFxuICAgICAgdXNlcl9xdWVyeTogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdxdWVyeV90eXBlZCcsXG4gICAgICB1c2VyX3F1ZXJ5OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmNvbnN0IGlucHV0UHJvcHNUb0Vudml2ZVRyYWNraW5nUHJvcHMgPSAoXG4gIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgW3VzZXJFdmVudF0gPSBwYXlsb2FkLnVzZXJFdmVudHMgfHwgW107XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICdzdWdnZXN0aW9uJyxcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdGV4dCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLmNvbnRlbnQsXG4gICAgICAnY2hhdC5zdWdnZXN0aW9uX2lkJzogdXNlckV2ZW50LmF0dHJpYnV0ZXMuc3VnZ2VzdGlvbklkLFxuICAgICAgJ2NoYXQudXNlcl90eXBlZCc6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAndGV4dCcsXG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3RleHQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgICdjaGF0LnVzZXJfdHlwZWQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy51c2VyVHlwZWQsXG4gICAgfTtcbiAgfVxuICBpZiAoXG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQgfHxcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0IHx8XG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3BhZ2VfdmlzaXQnLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgcmV0dXJuIHVybE9iai5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG59O1xuXG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoX2Vycm9yOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKF9lcnJvciBpbnN0YW5jZW9mIFN0YXR1c0NvZGVFcnJvcikge1xuICAgIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDIzKSB7XG4gICAgICByZXR1cm4gJ0R1ZSB0byB2aW9sYXRpb24gb2YgdGVybXMgYW5kIHNlcnZpY2VzLCB0aGlzIHNlc3Npb24gaGFzIGJlZW4gdGVybWluYXRlZC4nO1xuICAgIH1cbiAgICAvLyBLZWVwaW5nIHRoZSA0MjkgZXJyb3IgbWVzc2FnZXMgYXMgdGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSBmb3Igbm93LlxuICAgIC8vIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgLy8gICByZXR1cm4gXCJJJ20gc29ycnkhIFRoZSBzeXN0ZW0gaXMgYnVzeSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy5cIjtcbiAgICAvLyB9XG4gIH1cblxuICByZXR1cm4gXCJJJ20gc29ycnkhIEknbSBoYXZpbmcgdHJvdWJsZSByaWdodCBub3cuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIG9yIHRyeSBhZ2FpbiBpbiBhIG1vbWVudC5cIjtcbn07XG5cbmNvbnN0IGhhbmRsZVN0cmVhbWluZ0Vycm9yID0gKFxuICBfZXJyb3I6IHVua25vd24sXG4gIHNldFJlcXVlc3RGYWlsdXJlOiAoZmFpbGVkOiBib29sZWFuKSA9PiB2b2lkLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pID0+IHtcbiAgc2V0UmVxdWVzdEZhaWx1cmUodHJ1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKF9lcnJvcik7XG4gIHNldE1lc3NhZ2VzKHByZXYgPT4gW1xuICAgIC4uLnByZXYsXG4gICAgW1xuICAgICAge1xuICAgICAgICBpZDogdXVpZCgpLFxuICAgICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlRleHQsXG4gICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNvbnRlbnQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59O1xuXG5jb25zdCB1cGRhdGVNZXNzYWdlU3RhdGUgPSAoXG4gIG1lc3NhZ2U6IE1lc3NhZ2UsXG4gIGxhc3RNZXNzYWdlOiBNZXNzYWdlLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pOiBNZXNzYWdlID0+IHtcbiAgaWYgKGxhc3RNZXNzYWdlID09IG51bGwpIHtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LCBbbWVzc2FnZV1dKTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCAmJiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlRleHQpIHtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0ge1xuICAgICAgLi4ubGFzdE1lc3NhZ2UsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5sYXN0TWVzc2FnZS5tZXRhZGF0YSxcbiAgICAgICAgY29udGVudDogbGFzdE1lc3NhZ2UubWV0YWRhdGEuY29udGVudCArIG1lc3NhZ2UubWV0YWRhdGEuY29udGVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGxhc3RUdXJuID0gcHJldltwcmV2Lmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4ucHJldi5zbGljZSgwLCBwcmV2Lmxlbmd0aCAtIDEpLFxuICAgICAgICBbLi4ubGFzdFR1cm4uc2xpY2UoMCwgbGFzdFR1cm4ubGVuZ3RoIC0gMSksIG5ld01lc3NhZ2VdLFxuICAgICAgXTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgfVxuICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksIFsuLi5wcmV2W3ByZXYubGVuZ3RoIC0gMV0sIG1lc3NhZ2VdXSk7XG4gIHJldHVybiBtZXNzYWdlO1xufTtcblxuY29uc3QgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlID0gYXN5bmMgKFxuICBzdHJlYW06IEFzeW5jSXRlcmFibGU8UmVzcG9uc2U+LFxuICBtZXNzYWdlSW50ZXJjZXB0b3I6IHsgaW50ZXJjZXB0OiAocmVzcG9uc2U/OiBSZXNwb25zZSkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nOiAocmVzcG9uc2VTdHJlYW1pbmc6IGJvb2xlYW4pID0+IHZvaWQsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZ1tdPj4gPT4ge1xuICBsZXQgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nKHRydWUpO1xuICBjb25zdCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+ID0ge307XG4gIGNvbnN0IHByb2R1Y3RJZHMgPSBbXTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHN0cmVhbSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAobWVzc2FnZUludGVyY2VwdG9yLmludGVyY2VwdChyZXNwb25zZSkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVzcG9uc2UgZnJvbSBzdHJlYW0nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRyYW5zZm9ybSBBUEkgcmVzcG9uc2UgdG8gY2xpZW50IG1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSBhcyBudW1iZXIpIHx8IDA7XG4gICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSA9IGNhcmRzQ291bnRlciArIDE7XG5cbiAgICAgICAgY29uc3QgcHJvZHVjdElkcyA9IHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gYXMgc3RyaW5nW107XG4gICAgICAgIGlmICghcHJvZHVjdElkcykge1xuICAgICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gPSBbbWVzc2FnZS5tZXRhZGF0YS5pZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvZHVjdElkcy5wdXNoKG1lc3NhZ2UubWV0YWRhdGEuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5SZXZpZXcpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnJldmlld19jYXJkc19yZXR1cm5lZCddIGFzIG51bWJlcikgfHwgMDtcbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gPSBjYXJkc0NvdW50ZXIgKyAxO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBzdXBwb3J0IGZvciBDaGF0U2VhcmNoIG1lc3NhZ2VzIGF0IHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAvLyBQZXJoYXBzIHdlIGFkZCBzdXBwb3J0IGJhY2sgaW4gdGhlIGZ1dHVyZVxuICAgICAgLy8gaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCkge1xuICAgICAgLy8gICBoYW5kbGVTZWFyY2hSZXN1bHRzKG1lc3NhZ2UpO1xuICAgICAgLy8gICBoYXNTZWFyY2hSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIC8vICAgc2V0U2VhcmNoSXNMb2FkaW5nKGZhbHNlKTsgLy8gVXBkYXRlIHNlYXJjaCBsb2FkaW5nIGltbWVkaWF0ZWx5IHdoZW4gcmVzdWx0cyBhcmUgZGV0ZWN0ZWRcbiAgICAgIC8vIH1cblxuICAgICAgbGFzdE1lc3NhZ2UgPSB1cGRhdGVNZXNzYWdlU3RhdGUobWVzc2FnZSwgbGFzdE1lc3NhZ2UhLCBzZXRNZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKCdGYWlsZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2VzIGZyb20gc3RyZWFtJywgZXJyb3IsIHtcbiAgICAgICAgbGFzdFJlc3BvbnNlOiBsYXN0TWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcoZmFsc2UpO1xuICB9XG4gIHJldHVybiByZXNwb25zZUFuYWx5dGljcztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50U2VydmljZTogKCkgPT4gU2FsZXNBZ2VudFNlcnZpY2UgPSAoKSA9PiB7XG4gIGNvbnN0IHNldFJlcXVlc3RGYWlsdXJlID0gdXNlU2V0QXRvbShyZXF1ZXN0RmFpbHVyZUF0b20pO1xuICBjb25zdCBzZXRNZXNzYWdlcyA9IHVzZVNldEF0b20obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0U3VnZ2VzdGlvbnMgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zQXRvbSk7XG4gIGNvbnN0IHNldFBlbmRpbmdSZXNwb25zZSA9IHVzZVNldEF0b20ocGVuZGluZ1Jlc3BvbnNlQXRvbSk7XG4gIGNvbnN0IHNldFJlc3BvbnNlU3RyZWFtaW5nID0gdXNlU2V0QXRvbShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9uc0xvYWRpbmcgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zTG9hZGluZ0F0b20pO1xuICBjb25zdCBhbmFseXRpY3NDb250ZXh0ID0gdXNlQXRvbVZhbHVlKGFuYWx5dGljc0NvbnRleHRBdG9tKTtcbiAgY29uc3QgbWVzc2FnZUludGVyY2VwdG9yID0gdXNlTWVzc2FnZUludGVyY2VwdG9yKCk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG5cbiAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VBdG9tVmFsdWUoYXBwRGV0YWlsc0F0b20pO1xuICBjb25zdCByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uID0gdXNlQXRvbVZhbHVlKHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tKTtcblxuICBjb25zdCBjcmVhdGVSZXNwb25zZVBheWxvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgdXNlckV2ZW50cyxcbiAgICAgIGdlbmVyYXRpb25QYXJhbXMsXG4gICAgfToge1xuICAgICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgICBnZW5lcmF0aW9uUGFyYW1zPzogR2VuZXJhdGlvblBhcmFtcztcbiAgICB9KTogTmV4dE1lc3NhZ2VSZXF1ZXN0ID0+IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9IGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbiB8fFxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvdmVycmlkZU1vZGVsRGF0ZXRpbWUgPSBnZXRRdWVyeVBhcmFtKCdvdmVycmlkZV9tb2RlbF9kYXRldGltZScpIHx8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHMsXG4gICAgICAgIGZlYXR1cmVGbGFncyxcbiAgICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgICBvdmVycmlkZU1vZGVsRGF0ZXRpbWUsXG4gICAgICB9O1xuICAgIH0sXG4gICAgW2NvbnRleHQsIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlLCByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uXSxcbiAgKTtcblxuICBjb25zdCBnZXRTdHJlYW1pbmdSZXNwb25zZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHN1Y2Nlc3NmdWxSZXNwb25zZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSh0cnVlKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRSZXNwb25zZVN0cmVhbWluZyhwYXlsb2FkKTtcbiAgICAgIGxldCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXF1ZXN0RmFpbHVyZShmYWxzZSk7XG5cbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3MgPSBhd2FpdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UoXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgICAgICBzZXRNZXNzYWdlcyxcbiAgICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyxcbiAgICAgICAgKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gdHJ1ZTtcblxuICAgICAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIENocm9tZSBFeHRlbnNpb24gY29tbXVuaWNhdGlvblxuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgLy8gICBldmVudDogJ05FWFRfUkVTUE9OU0VfU1VDQ0VTUycsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZXJyb3IgZ2V0dGluZyBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZSk7XG4gICAgICAgIHN1Y2Nlc3NmdWxSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgICAvLyBMb2cgZmFpbGVkIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgLy8gY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgLy8gYXdhaXQgbG9nQnVuZGxlRXZlbnQoe1xuICAgICAgICAvLyAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAvLyAgIGV2ZW50OiAnTkVYVF9SRVNQT05TRV9GQUlMRUQnLFxuICAgICAgICAvLyAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZ2V0IHN0cmVhbWluZyByZXNwb25zZTogJHtlfWAsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICAgIGVycm9yOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgIC8vICAgfSxcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaGFuZGxlU3RyZWFtaW5nRXJyb3IoZSwgc2V0UmVxdWVzdEZhaWx1cmUsIHNldE1lc3NhZ2VzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIExvZyBuZXh0X3Jlc3BvbnNlcyBjYWxsXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0QXNzaXN0YW50UmVzcG9uc2UsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgcmVzcG9uc2VUaW1lTXM6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3VjY2Vzc2Z1bF9yZXNwb25zZTogc3VjY2Vzc2Z1bFJlc3BvbnNlLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLkNoYXRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICAuLi5hbmFseXRpY3NDb250ZXh0LFxuICAgICAgICAgICAgJ2NoYXQucmVzcG9uc2VfdGltZV9tcyc6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvRW52aXZlVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICAgIC4uLnJlc3BvbnNlQW5hbHl0aWNzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQZW5kaW5nUmVzcG9uc2UoZmFsc2UpO1xuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gICAgICAgIC8vIGxvZ1BlcmZNZXRyaWMoUGVyZk1ldHJpY3NFdmVudHMuRmlyc3RSZXNwb25zZUNvbXBsZXRlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhbmFseXRpY3NDb250ZXh0LFxuICAgICAgdHJhY2tFdmVudCxcbiAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgLy8gbG9nUGVyZk1ldHJpYyxcbiAgICAgIHNldFJlcXVlc3RGYWlsdXJlLFxuICAgICAgc2V0U3VnZ2VzdGlvbnMsXG4gICAgICBzZXRTdWdnZXN0aW9uc0xvYWRpbmcsXG4gICAgICBtZXNzYWdlSW50ZXJjZXB0b3IsXG4gICAgICBzZXRNZXNzYWdlcyxcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSxcbiAgICBdLFxuICApO1xuXG4gIGNvbnN0IGdldFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nKHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3U3VnZ2VzdGlvbnMgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXROZXh0U3VnZ2VzdGlvbnMocGF5bG9hZCk7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKG5ld1N1Z2dlc3Rpb25zKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2V0U3VnZ2VzdGlvbnMsIHNldFN1Z2dlc3Rpb25zTG9hZGluZ10sXG4gICk7XG5cbiAgY29uc3QgaHlkcmF0ZU1lc3NhZ2VzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgb3JnSWQsIGNoYXRJZCwgdXNlcklkIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgbWVzc2FnZXM6IGV4aXN0aW5nTWVzc2FnZXMgfSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldFJlc3BvbnNlcyhcbiAgICAgIG9yZ0lkLFxuICAgICAgY2hhdElkLFxuICAgICAgdXNlcklkLFxuICAgICk7XG4gICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgfSwgW2NvbnRleHQsIHNldE1lc3NhZ2VzXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLFxuICAgIGdldFN1Z2dlc3Rpb25zLFxuICAgIGh5ZHJhdGVNZXNzYWdlcyxcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7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
232
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJTdGF0dXNDb2RlRXJyb3IiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+IiwibWVzc2FnZUZyb21SZXNwb25zZSIsImVycm9yOiB1bmtub3duIiwidXNlU2FsZXNBZ2VudFNlcnZpY2U6ICgpID0+IFNhbGVzQWdlbnRTZXJ2aWNlIiwicmVxdWVzdEZhaWx1cmVBdG9tIiwibWVzc2FnZXNBdG9tIiwic3VnZ2VzdGlvbnNBdG9tIiwicGVuZGluZ1Jlc3BvbnNlQXRvbSIsInJlc3BvbnNlU3RyZWFtaW5nQXRvbSIsInN1Z2dlc3Rpb25zTG9hZGluZ0F0b20iLCJhbmFseXRpY3NDb250ZXh0QXRvbSIsInVzZU1lc3NhZ2VJbnRlcmNlcHRvciIsInVzZUFtcGxpdHVkZSIsInVzZUZlYXR1cmVGbGFnU2VydmljZSIsImFwcERldGFpbHNBdG9tIiwicmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbkF0b20iLCJzdWNjZXNzZnVsUmVzcG9uc2U6IGJvb2xlYW4gfCB1bmRlZmluZWQiLCJDb21tZXJjZUFwaUNsaWVudCIsInJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgR2VuZXJhdGlvblBhcmFtcyxcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxuICBVc2VyRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgbWVzc2FnZUZyb21SZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscyc7XG5pbXBvcnQgeyBhcHBEZXRhaWxzQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IHsgYW5hbHl0aWNzQ29udGV4dEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbkF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL3Jlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb24nO1xuaW1wb3J0IHtcbiAgbWVzc2FnZXNBdG9tLFxuICBwZW5kaW5nUmVzcG9uc2VBdG9tLFxuICByZXF1ZXN0RmFpbHVyZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxuICBzdWdnZXN0aW9uc0xvYWRpbmdBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlTWVzc2FnZUludGVyY2VwdG9yIH0gZnJvbSAnc3JjL2ludGVyY2VwdG9ycy91c2VNZXNzYWdlSW50ZXJjZXB0b3InO1xuaW1wb3J0IHtcbiAgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbn0gZnJvbSAnc3JjL3NlcnZpY2VzL2FtcGxpdHVkZVNlcnZpY2UvYW1wbGl0dWRlU2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVFcnJvciB9IGZyb20gJy4vc3RhdHVzQ29kZUVycm9yJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignc2FsZXNBZ2VudFNlcnZpY2UnKTtcblxuaW50ZXJmYWNlIFNhbGVzQWdlbnRTZXJ2aWNlIHtcbiAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkOiAocGF5bG9hZDoge1xuICAgIHVzZXJFdmVudHM6IFVzZXJFdmVudFtdO1xuICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xuICB9KSA9PiBOZXh0TWVzc2FnZVJlcXVlc3Q7XG4gIGdldFN0cmVhbWluZ1Jlc3BvbnNlczogKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3VnZ2VzdGlvbnM6IChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IFByb21pc2U8dm9pZD47XG4gIGh5ZHJhdGVNZXNzYWdlczogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyA9IChcbiAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBbdXNlckV2ZW50XSA9IHBheWxvYWQudXNlckV2ZW50cyB8fCBbXTtcbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdzdWdnZXN0aW9uX2NsaWNrZWQnLFxuICAgICAgdXNlcl9xdWVyeTogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdxdWVyeV90eXBlZCcsXG4gICAgICB1c2VyX3F1ZXJ5OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmNvbnN0IGlucHV0UHJvcHNUb0Vudml2ZVRyYWNraW5nUHJvcHMgPSAoXG4gIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgW3VzZXJFdmVudF0gPSBwYXlsb2FkLnVzZXJFdmVudHMgfHwgW107XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICdzdWdnZXN0aW9uJyxcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdGV4dCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLmNvbnRlbnQsXG4gICAgICAnY2hhdC5zdWdnZXN0aW9uX2lkJzogdXNlckV2ZW50LmF0dHJpYnV0ZXMuc3VnZ2VzdGlvbklkLFxuICAgICAgJ2NoYXQudXNlcl90eXBlZCc6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAndGV4dCcsXG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3RleHQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgICdjaGF0LnVzZXJfdHlwZWQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy51c2VyVHlwZWQsXG4gICAgfTtcbiAgfVxuICBpZiAoXG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQgfHxcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0IHx8XG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3BhZ2VfdmlzaXQnLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgcmV0dXJuIHVybE9iai5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG59O1xuXG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoX2Vycm9yOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKF9lcnJvciBpbnN0YW5jZW9mIFN0YXR1c0NvZGVFcnJvcikge1xuICAgIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDIzKSB7XG4gICAgICByZXR1cm4gJ0R1ZSB0byB2aW9sYXRpb24gb2YgdGVybXMgYW5kIHNlcnZpY2VzLCB0aGlzIHNlc3Npb24gaGFzIGJlZW4gdGVybWluYXRlZC4nO1xuICAgIH1cbiAgICAvLyBLZWVwaW5nIHRoZSA0MjkgZXJyb3IgbWVzc2FnZXMgYXMgdGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSBmb3Igbm93LlxuICAgIC8vIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgLy8gICByZXR1cm4gXCJJJ20gc29ycnkhIFRoZSBzeXN0ZW0gaXMgYnVzeSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy5cIjtcbiAgICAvLyB9XG4gIH1cblxuICByZXR1cm4gXCJJJ20gc29ycnkhIEknbSBoYXZpbmcgdHJvdWJsZSByaWdodCBub3cuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIG9yIHRyeSBhZ2FpbiBpbiBhIG1vbWVudC5cIjtcbn07XG5cbmNvbnN0IGhhbmRsZVN0cmVhbWluZ0Vycm9yID0gKFxuICBfZXJyb3I6IHVua25vd24sXG4gIHNldFJlcXVlc3RGYWlsdXJlOiAoZmFpbGVkOiBib29sZWFuKSA9PiB2b2lkLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pID0+IHtcbiAgc2V0UmVxdWVzdEZhaWx1cmUodHJ1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKF9lcnJvcik7XG4gIHNldE1lc3NhZ2VzKHByZXYgPT4gW1xuICAgIC4uLnByZXYsXG4gICAgW1xuICAgICAge1xuICAgICAgICBpZDogdXVpZCgpLFxuICAgICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlRleHQsXG4gICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNvbnRlbnQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59O1xuXG5jb25zdCB1cGRhdGVNZXNzYWdlU3RhdGUgPSAoXG4gIG1lc3NhZ2U6IE1lc3NhZ2UsXG4gIGxhc3RNZXNzYWdlOiBNZXNzYWdlLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pOiBNZXNzYWdlID0+IHtcbiAgaWYgKGxhc3RNZXNzYWdlID09IG51bGwpIHtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LCBbbWVzc2FnZV1dKTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCAmJiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlRleHQpIHtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0ge1xuICAgICAgLi4ubGFzdE1lc3NhZ2UsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5sYXN0TWVzc2FnZS5tZXRhZGF0YSxcbiAgICAgICAgY29udGVudDogbGFzdE1lc3NhZ2UubWV0YWRhdGEuY29udGVudCArIG1lc3NhZ2UubWV0YWRhdGEuY29udGVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGxhc3RUdXJuID0gcHJldltwcmV2Lmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4ucHJldi5zbGljZSgwLCBwcmV2Lmxlbmd0aCAtIDEpLFxuICAgICAgICBbLi4ubGFzdFR1cm4uc2xpY2UoMCwgbGFzdFR1cm4ubGVuZ3RoIC0gMSksIG5ld01lc3NhZ2VdLFxuICAgICAgXTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgfVxuICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksIFsuLi5wcmV2W3ByZXYubGVuZ3RoIC0gMV0sIG1lc3NhZ2VdXSk7XG4gIHJldHVybiBtZXNzYWdlO1xufTtcblxuY29uc3QgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlID0gYXN5bmMgKFxuICBzdHJlYW06IEFzeW5jSXRlcmFibGU8UmVzcG9uc2U+LFxuICBtZXNzYWdlSW50ZXJjZXB0b3I6IHsgaW50ZXJjZXB0OiAocmVzcG9uc2U/OiBSZXNwb25zZSkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nOiAocmVzcG9uc2VTdHJlYW1pbmc6IGJvb2xlYW4pID0+IHZvaWQsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZ1tdPj4gPT4ge1xuICBsZXQgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nKHRydWUpO1xuICBjb25zdCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+ID0ge307XG4gIGNvbnN0IHByb2R1Y3RJZHMgPSBbXTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHN0cmVhbSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAobWVzc2FnZUludGVyY2VwdG9yLmludGVyY2VwdChyZXNwb25zZSkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVzcG9uc2UgZnJvbSBzdHJlYW0nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRyYW5zZm9ybSBBUEkgcmVzcG9uc2UgdG8gY2xpZW50IG1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSBhcyBudW1iZXIpIHx8IDA7XG4gICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSA9IGNhcmRzQ291bnRlciArIDE7XG5cbiAgICAgICAgY29uc3QgcHJvZHVjdElkcyA9IHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gYXMgc3RyaW5nW107XG4gICAgICAgIGlmICghcHJvZHVjdElkcykge1xuICAgICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gPSBbbWVzc2FnZS5tZXRhZGF0YS5pZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvZHVjdElkcy5wdXNoKG1lc3NhZ2UubWV0YWRhdGEuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5SZXZpZXcpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnJldmlld19jYXJkc19yZXR1cm5lZCddIGFzIG51bWJlcikgfHwgMDtcbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gPSBjYXJkc0NvdW50ZXIgKyAxO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBzdXBwb3J0IGZvciBDaGF0U2VhcmNoIG1lc3NhZ2VzIGF0IHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAvLyBQZXJoYXBzIHdlIGFkZCBzdXBwb3J0IGJhY2sgaW4gdGhlIGZ1dHVyZVxuICAgICAgLy8gaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCkge1xuICAgICAgLy8gICBoYW5kbGVTZWFyY2hSZXN1bHRzKG1lc3NhZ2UpO1xuICAgICAgLy8gICBoYXNTZWFyY2hSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIC8vICAgc2V0U2VhcmNoSXNMb2FkaW5nKGZhbHNlKTsgLy8gVXBkYXRlIHNlYXJjaCBsb2FkaW5nIGltbWVkaWF0ZWx5IHdoZW4gcmVzdWx0cyBhcmUgZGV0ZWN0ZWRcbiAgICAgIC8vIH1cblxuICAgICAgbGFzdE1lc3NhZ2UgPSB1cGRhdGVNZXNzYWdlU3RhdGUobWVzc2FnZSwgbGFzdE1lc3NhZ2UhLCBzZXRNZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKCdGYWlsZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2VzIGZyb20gc3RyZWFtJywgZXJyb3IsIHtcbiAgICAgICAgbGFzdFJlc3BvbnNlOiBsYXN0TWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcoZmFsc2UpO1xuICB9XG4gIHJldHVybiByZXNwb25zZUFuYWx5dGljcztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50U2VydmljZTogKCkgPT4gU2FsZXNBZ2VudFNlcnZpY2UgPSAoKSA9PiB7XG4gIGNvbnN0IHNldFJlcXVlc3RGYWlsdXJlID0gdXNlU2V0QXRvbShyZXF1ZXN0RmFpbHVyZUF0b20pO1xuICBjb25zdCBzZXRNZXNzYWdlcyA9IHVzZVNldEF0b20obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0U3VnZ2VzdGlvbnMgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zQXRvbSk7XG4gIGNvbnN0IHNldFBlbmRpbmdSZXNwb25zZSA9IHVzZVNldEF0b20ocGVuZGluZ1Jlc3BvbnNlQXRvbSk7XG4gIGNvbnN0IHNldFJlc3BvbnNlU3RyZWFtaW5nID0gdXNlU2V0QXRvbShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9uc0xvYWRpbmcgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zTG9hZGluZ0F0b20pO1xuICBjb25zdCBhbmFseXRpY3NDb250ZXh0ID0gdXNlQXRvbVZhbHVlKGFuYWx5dGljc0NvbnRleHRBdG9tKTtcbiAgY29uc3QgbWVzc2FnZUludGVyY2VwdG9yID0gdXNlTWVzc2FnZUludGVyY2VwdG9yKCk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG5cbiAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VBdG9tVmFsdWUoYXBwRGV0YWlsc0F0b20pO1xuICBjb25zdCByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uID0gdXNlQXRvbVZhbHVlKHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tKTtcblxuICBjb25zdCBjcmVhdGVSZXNwb25zZVBheWxvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgdXNlckV2ZW50cyxcbiAgICAgIGdlbmVyYXRpb25QYXJhbXMsXG4gICAgfToge1xuICAgICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgICBnZW5lcmF0aW9uUGFyYW1zPzogR2VuZXJhdGlvblBhcmFtcztcbiAgICB9KTogTmV4dE1lc3NhZ2VSZXF1ZXN0ID0+IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9IGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbiB8fFxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvdmVycmlkZU1vZGVsRGF0ZXRpbWUgPSBnZXRRdWVyeVBhcmFtKCdvdmVycmlkZV9tb2RlbF9kYXRldGltZScpIHx8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHMsXG4gICAgICAgIGZlYXR1cmVGbGFncyxcbiAgICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgICBvdmVycmlkZU1vZGVsRGF0ZXRpbWUsXG4gICAgICB9O1xuICAgIH0sXG4gICAgW2NvbnRleHQsIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlLCByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uXSxcbiAgKTtcblxuICBjb25zdCBnZXRTdHJlYW1pbmdSZXNwb25zZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHN1Y2Nlc3NmdWxSZXNwb25zZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSh0cnVlKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRSZXNwb25zZVN0cmVhbWluZyhwYXlsb2FkKTtcbiAgICAgIGxldCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXF1ZXN0RmFpbHVyZShmYWxzZSk7XG5cbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3MgPSBhd2FpdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UoXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgICAgICBzZXRNZXNzYWdlcyxcbiAgICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyxcbiAgICAgICAgKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gdHJ1ZTtcblxuICAgICAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIENocm9tZSBFeHRlbnNpb24gY29tbXVuaWNhdGlvblxuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgLy8gICBldmVudDogJ05FWFRfUkVTUE9OU0VfU1VDQ0VTUycsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdlcnJvciBnZXR0aW5nIHN0cmVhbWluZyByZXNwb25zZXMnLCBlKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gZmFsc2U7XG4gICAgICAgIC8vIExvZyBmYWlsZWQgbmV4dF9yZXNwb25zZXMgY2FsbFxuICAgICAgICAvLyBjb25zdCByZXNwb25zZVRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIC8vICAgZXZlbnQ6ICdORVhUX1JFU1BPTlNFX0ZBSUxFRCcsXG4gICAgICAgIC8vICAgbWVzc2FnZTogYEZhaWxlZCB0byBnZXQgc3RyZWFtaW5nIHJlc3BvbnNlOiAke2V9YCxcbiAgICAgICAgLy8gICBjb250ZXh0OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgZW5kcG9pbnQ6ICcvdjEvbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgICAvLyAgICAgZXJyb3I6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcblxuICAgICAgICBoYW5kbGVTdHJlYW1pbmdFcnJvcihlLCBzZXRSZXF1ZXN0RmFpbHVyZSwgc2V0TWVzc2FnZXMpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gTG9nIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRBc3Npc3RhbnRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICByZXNwb25zZVRpbWVNczogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzdWNjZXNzZnVsX3Jlc3BvbnNlOiBzdWNjZXNzZnVsUmVzcG9uc2UsXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9UcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuQ2hhdFJlc3BvbnNlLFxuICAgICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICAgIC4uLmFuYWx5dGljc0NvbnRleHQsXG4gICAgICAgICAgICAnY2hhdC5yZXNwb25zZV90aW1lX21zJzogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9FbnZpdmVUcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgICAgLi4ucmVzcG9uc2VBbmFseXRpY3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFBlbmRpbmdSZXNwb25zZShmYWxzZSk7XG4gICAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nKGZhbHNlKTtcbiAgICAgICAgLy8gbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFJlc3BvbnNlQ29tcGxldGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFuYWx5dGljc0NvbnRleHQsXG4gICAgICB0cmFja0V2ZW50LFxuICAgICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICAvLyBsb2dQZXJmTWV0cmljLFxuICAgICAgc2V0UmVxdWVzdEZhaWx1cmUsXG4gICAgICBzZXRTdWdnZXN0aW9ucyxcbiAgICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyxcbiAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgIHNldE1lc3NhZ2VzLFxuICAgICAgc2V0UGVuZGluZ1Jlc3BvbnNlLFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3QgZ2V0U3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBzZXRTdWdnZXN0aW9uc0xvYWRpbmcodHJ1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRTdWdnZXN0aW9ucyhwYXlsb2FkKTtcbiAgICAgICAgc2V0U3VnZ2VzdGlvbnMobmV3U3VnZ2VzdGlvbnMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRTdWdnZXN0aW9ucywgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nXSxcbiAgKTtcblxuICBjb25zdCBoeWRyYXRlTWVzc2FnZXMgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBvcmdJZCwgY2hhdElkLCB1c2VySWQgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgeyBtZXNzYWdlczogZXhpc3RpbmdNZXNzYWdlcyB9ID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0UmVzcG9uc2VzKFxuICAgICAgb3JnSWQsXG4gICAgICBjaGF0SWQsXG4gICAgICB1c2VySWQsXG4gICAgKTtcbiAgICBzZXRNZXNzYWdlcyhbLi4uZXhpc3RpbmdNZXNzYWdlc10pO1xuICB9LCBbY29udGV4dCwgc2V0TWVzc2FnZXNdKTtcblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCxcbiAgICBnZXRTdHJlYW1pbmdSZXNwb25zZXMsXG4gICAgZ2V0U3VnZ2VzdGlvbnMsXG4gICAgaHlkcmF0ZU1lc3NhZ2VzLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7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