@envive-ai/react-hooks 0.3.57 → 0.3.59

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 (108) hide show
  1. package/dist/application/commerce-api.cjs +1 -1
  2. package/dist/application/commerce-api.js +1 -1
  3. package/dist/application/models/graphql/index.cjs +0 -4
  4. package/dist/application/models/graphql/index.d.cts +2 -3
  5. package/dist/application/models/graphql/index.d.ts +2 -3
  6. package/dist/application/models/graphql/index.js +1 -3
  7. package/dist/application/models/graphql/queries/getMerchantColorsQuery.d.cts +2 -3
  8. package/dist/application/models/graphql/queries/getMerchantColorsQuery.d.ts +2 -3
  9. package/dist/application/models/graphql/queries/getWidgetConfigQuery.cjs +22 -3
  10. package/dist/application/models/graphql/queries/getWidgetConfigQuery.js +22 -3
  11. package/dist/application/models/index.cjs +0 -4
  12. package/dist/application/models/index.d.cts +2 -3
  13. package/dist/application/models/index.d.ts +2 -3
  14. package/dist/application/models/index.js +1 -3
  15. package/dist/application/utils/elementObserver.d.cts +2 -2
  16. package/dist/application/utils/index.cjs +1 -1
  17. package/dist/application/utils/index.js +1 -1
  18. package/dist/atoms/app/index.d.cts +7 -7
  19. package/dist/atoms/app/index.d.ts +7 -7
  20. package/dist/atoms/app/variant.d.cts +6 -6
  21. package/dist/atoms/chat/chatState.d.cts +19 -19
  22. package/dist/atoms/chat/chatState.d.ts +19 -19
  23. package/dist/atoms/chat/form.d.cts +2 -2
  24. package/dist/atoms/chat/form.d.ts +2 -2
  25. package/dist/atoms/chat/index.d.cts +2 -2
  26. package/dist/atoms/chat/index.d.ts +2 -2
  27. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  28. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  29. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  30. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  31. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  32. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  33. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  34. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  35. package/dist/atoms/chat/replies.d.cts +3 -3
  36. package/dist/atoms/chat/replies.d.ts +3 -3
  37. package/dist/atoms/chat/suggestions.d.cts +2 -2
  38. package/dist/atoms/chat/suggestions.d.ts +2 -2
  39. package/dist/atoms/envive/enviveConfig.d.cts +14 -14
  40. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  41. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  42. package/dist/atoms/org/customerService.d.cts +6 -6
  43. package/dist/atoms/org/customerService.d.ts +6 -6
  44. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  45. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  46. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  47. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  48. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  49. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  50. package/dist/atoms/search/chatSearch.d.cts +17 -17
  51. package/dist/atoms/search/chatSearch.d.ts +17 -17
  52. package/dist/atoms/search/searchAPI.d.cts +13 -13
  53. package/dist/atoms/search/searchAPI.d.ts +13 -13
  54. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  55. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  56. package/dist/contexts/pageContext/pageContext.cjs +1 -1
  57. package/dist/contexts/pageContext/pageContext.js +1 -1
  58. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  59. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  60. package/dist/contexts/types.d.cts +1 -1
  61. package/dist/contexts/types.d.ts +1 -1
  62. package/dist/contexts/typesV3.d.cts +1 -1
  63. package/dist/contexts/typesV3.d.ts +1 -1
  64. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +22 -31
  65. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +22 -31
  66. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  67. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  68. package/dist/hooks/Intersection/useIntersection.cjs +14 -3
  69. package/dist/hooks/Intersection/useIntersection.js +14 -3
  70. package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +1 -1
  71. package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +1 -1
  72. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.cts +2 -2
  73. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts +2 -2
  74. package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
  75. package/dist/hooks/utils.d.ts +1 -1
  76. package/dist/services/enviveConfigService/enviveConfigService.cjs +3 -24
  77. package/dist/services/enviveConfigService/enviveConfigService.js +4 -25
  78. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +59 -54
  79. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +60 -54
  80. package/dist/services/hardcopyService/hardcopyService.cjs +1 -1
  81. package/dist/services/hardcopyService/hardcopyService.js +1 -1
  82. package/dist/types/config-versions.cjs +1 -3
  83. package/dist/types/config-versions.js +2 -3
  84. package/package.json +1 -1
  85. package/src/application/models/graphql/index.ts +0 -1
  86. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +4 -15
  87. package/src/application/models/graphql/queries/getWidgetConfigQuery.ts +35 -14
  88. package/src/application/models/index.ts +0 -1
  89. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +1 -2
  90. package/src/contexts/pageContext/pageContext.tsx +1 -2
  91. package/src/contexts/widgetConfigContext/__tests__/widgetConfigContext.test.tsx +52 -0
  92. package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +39 -36
  93. package/src/hooks/Intersection/__tests__/useIntersection.test.ts +134 -0
  94. package/src/hooks/Intersection/useIntersection.ts +20 -4
  95. package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +51 -75
  96. package/src/services/enviveConfigService/__tests__/fetchGraphQLConfig.test.ts +242 -90
  97. package/src/services/enviveConfigService/enviveConfigService.ts +15 -41
  98. package/src/services/enviveConfigService/fetchGraphQLConfig.ts +106 -68
  99. package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.cjs +0 -18
  100. package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.js +0 -18
  101. package/dist/application/models/graphql/queries/getMerchantColorsQuery.cjs +0 -18
  102. package/dist/application/models/graphql/queries/getMerchantColorsQuery.js +0 -18
  103. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.cjs +0 -18
  104. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.d.cts +0 -75
  105. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.d.ts +0 -75
  106. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.js +0 -18
  107. package/src/application/models/graphql/queries/getColorsAndFrontendQuery.ts +0 -13
  108. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +0 -103
@@ -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 jotai71 from "jotai";
4
+ import * as jotai72 from "jotai";
5
5
 
6
6
  //#region src/atoms/org/graphqlConfig.d.ts
7
- declare const internalGraphQLColorsConfigAtom: jotai71.PrimitiveAtom<ColorMapping | undefined> & {
7
+ declare const internalGraphQLColorsConfigAtom: jotai72.PrimitiveAtom<ColorMapping | undefined> & {
8
8
  init: ColorMapping | undefined;
9
9
  };
10
- declare const featureFlagServiceAtom: jotai71.PrimitiveAtom<FeatureFlagContextType | undefined> & {
10
+ declare const featureFlagServiceAtom: jotai72.PrimitiveAtom<FeatureFlagContextType | undefined> & {
11
11
  init: FeatureFlagContextType | undefined;
12
12
  };
13
- declare const frontendConfigAtom: jotai71.WritableAtom<FrontendConfig | undefined, [value: FrontendConfig | undefined], void>;
13
+ declare const frontendConfigAtom: jotai72.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 jotai69 from "jotai";
4
+ import * as jotai56 from "jotai";
5
5
 
6
6
  //#region src/atoms/org/graphqlConfig.d.ts
7
- declare const internalGraphQLColorsConfigAtom: jotai69.PrimitiveAtom<ColorMapping | undefined> & {
7
+ declare const internalGraphQLColorsConfigAtom: jotai56.PrimitiveAtom<ColorMapping | undefined> & {
8
8
  init: ColorMapping | undefined;
9
9
  };
10
- declare const featureFlagServiceAtom: jotai69.PrimitiveAtom<FeatureFlagContextType | undefined> & {
10
+ declare const featureFlagServiceAtom: jotai56.PrimitiveAtom<FeatureFlagContextType | undefined> & {
11
11
  init: FeatureFlagContextType | undefined;
12
12
  };
13
- declare const frontendConfigAtom: jotai69.WritableAtom<FrontendConfig | undefined, [value: FrontendConfig | undefined], void>;
13
+ declare const frontendConfigAtom: jotai56.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbmZpZy5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yTWFwcGluZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY29sb3JzQ29uZmlnJztcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGludGVybmFsR3JhcGhRTENvbG9yc0NvbmZpZ0F0b206IGltcG9ydChcImpvdGFpXCIpLlByaW1pdGl2ZUF0b208Q29sb3JNYXBwaW5nIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbTogaW1wb3J0KFwiam90YWlcIikuUHJpbWl0aXZlQXRvbTxGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGZyb250ZW5kQ29uZmlnQXRvbTogaW1wb3J0KFwiam90YWlcIikuV3JpdGFibGVBdG9tPEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkLCBbdmFsdWU6IEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkXSwgdm9pZD47XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQVcsa0NBQXVCO0NBQUE7T0FBQTtPQUFBLFFBQUE7T0FBQTtDQUFBO0FBQ2xDLElBQUMseUJBQUE7Q0FBQTtPQUFBO09BQUEsUUFBQTtPQUFBO0NBQUE7QUFDRCxJQUFXLHFCQUFxQjtDQUFDO09BQVc7T0FBc0I7T0FBc0IsUUFBUTtDQUFhIn0=
@@ -1,8 +1,8 @@
1
1
  import { GraphQlConfigValues } from "../../contexts/graphqlContext/graphqlContext.cjs";
2
- import * as jotai70 from "jotai";
2
+ import * as jotai75 from "jotai";
3
3
 
4
4
  //#region src/atoms/org/newOrgConfigAtom.d.ts
5
- declare const newOrgConfigAtom: jotai70.PrimitiveAtom<GraphQlConfigValues | null> & {
5
+ declare const newOrgConfigAtom: jotai75.PrimitiveAtom<GraphQlConfigValues | null> & {
6
6
  init: GraphQlConfigValues | null;
7
7
  };
8
8
  //#endregion
@@ -1,8 +1,8 @@
1
1
  import { GraphQlConfigValues } from "../../contexts/graphqlContext/graphqlContext.js";
2
- import * as jotai68 from "jotai";
2
+ import * as jotai55 from "jotai";
3
3
 
4
4
  //#region src/atoms/org/newOrgConfigAtom.d.ts
5
- declare const newOrgConfigAtom: jotai68.PrimitiveAtom<GraphQlConfigValues | null> & {
5
+ declare const newOrgConfigAtom: jotai55.PrimitiveAtom<GraphQlConfigValues | null> & {
6
6
  init: GraphQlConfigValues | null;
7
7
  };
8
8
  //#endregion
@@ -1,10 +1,10 @@
1
1
  import { OrgAnalyticsAmplitudeConfig, OrgAnalyticsConfig, OrgAnalyticsCustomerServiceConfig } from "../../application/models/api/orgAnalyticsConfig.cjs";
2
- import * as jotai74 from "jotai";
2
+ import * as jotai76 from "jotai";
3
3
 
4
4
  //#region src/atoms/org/orgAnalyticsConfig.d.ts
5
- declare const orgAnalyticsConfigAtom: jotai74.WritableAtom<OrgAnalyticsConfig | undefined, [value: OrgAnalyticsConfig], void>;
6
- declare const orgAnalyticsAmplitudeConfigAtom: jotai74.Atom<OrgAnalyticsAmplitudeConfig | undefined>;
7
- declare const orgAnalyticsCustomerServiceConfigAtom: jotai74.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
10
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnQW5hbHl0aWNzQ29uZmlnLmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdG9tcy9vcmcvb3JnQW5hbHl0aWNzQ29uZmlnLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JnQW5hbHl0aWNzQW1wbGl0dWRlQ29uZmlnLCBPcmdBbmFseXRpY3NDb25maWcsIE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0FuYWx5dGljc0NvbmZpZyc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBvcmdBbmFseXRpY3NDb25maWdBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5Xcml0YWJsZUF0b208T3JnQW5hbHl0aWNzQ29uZmlnIHwgdW5kZWZpbmVkLCBbdmFsdWU6IE9yZ0FuYWx5dGljc0NvbmZpZ10sIHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3Qgb3JnQW5hbHl0aWNzQW1wbGl0dWRlQ29uZmlnQXRvbTogaW1wb3J0KFwiam90YWlcIikuQXRvbTxPcmdBbmFseXRpY3NBbXBsaXR1ZGVDb25maWcgfCB1bmRlZmluZWQ+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3Qgb3JnQW5hbHl0aWNzQ3VzdG9tZXJTZXJ2aWNlQ29uZmlnQXRvbTogaW1wb3J0KFwiam90YWlcIikuQXRvbTxPcmdBbmFseXRpY3NDdXN0b21lclNlcnZpY2VDb25maWcgfCB1bmRlZmluZWQ+O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBVyx5QkFBeUI7Q0FBQztPQUFXO09BQTBCO09BQTBCLFFBQVE7Q0FBTztBQUNuSCxJQUFXLGtDQUFrQztDQUFDO09BQVc7T0FBbUMsUUFBUTtDQUFLIn0=
@@ -1,10 +1,10 @@
1
1
  import { OrgAnalyticsAmplitudeConfig, OrgAnalyticsConfig, OrgAnalyticsCustomerServiceConfig } from "../../application/models/api/orgAnalyticsConfig.js";
2
- import * as jotai76 from "jotai";
2
+ import * as jotai59 from "jotai";
3
3
 
4
4
  //#region src/atoms/org/orgAnalyticsConfig.d.ts
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>;
5
+ declare const orgAnalyticsConfigAtom: jotai59.WritableAtom<OrgAnalyticsConfig | undefined, [value: OrgAnalyticsConfig], void>;
6
+ declare const orgAnalyticsAmplitudeConfigAtom: jotai59.Atom<OrgAnalyticsAmplitudeConfig | undefined>;
7
+ declare const orgAnalyticsCustomerServiceConfigAtom: jotai59.Atom<OrgAnalyticsCustomerServiceConfig | undefined>;
8
8
  //#endregion
9
9
  export { orgAnalyticsAmplitudeConfigAtom, orgAnalyticsConfigAtom, orgAnalyticsCustomerServiceConfigAtom };
10
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 jotai94 from "jotai";
4
+ import * as jotai39 from "jotai";
5
5
 
6
6
  //#region src/atoms/search/chatSearch.d.ts
7
- declare const chatSearchStateAtom: jotai94.PrimitiveAtom<ChatSearchStateType> & {
7
+ declare const chatSearchStateAtom: jotai39.PrimitiveAtom<ChatSearchStateType> & {
8
8
  init: ChatSearchStateType;
9
9
  };
10
- declare const chatSearchHasProductsAtom: jotai94.PrimitiveAtom<boolean> & {
10
+ declare const chatSearchHasProductsAtom: jotai39.PrimitiveAtom<boolean> & {
11
11
  init: boolean;
12
12
  };
13
- declare const chatSearchProductSortingAtom: jotai94.PrimitiveAtom<ProductSorting> & {
13
+ declare const chatSearchProductSortingAtom: jotai39.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: jotai94.PrimitiveAtom<boolean> & {
24
+ declare const chatSearchIsLoadingAtom: jotai39.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: jotai94.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
33
+ declare const selectedFilterOptionsAtom: jotai39.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
34
34
  init: SelectedChatSearchFilterOption[];
35
35
  };
36
- declare const additiveDynamicFiltersAtom: jotai94.Atom<boolean>;
36
+ declare const additiveDynamicFiltersAtom: jotai39.Atom<boolean>;
37
37
  declare const createChatSearchFilterOption: (filterId: string, filterItemId: string, displayName: string) => SelectedChatSearchFilterOption;
38
- declare const chatSearchParamsAtom: jotai94.WritableAtom<{
38
+ declare const chatSearchParamsAtom: jotai39.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: 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<{
45
+ declare const chatSearchQueryAtom: jotai39.WritableAtom<string | null, [value: string | null], void>;
46
+ declare const chatSearchIdAtom: jotai39.WritableAtom<string | null, [value: string | null], void>;
47
+ declare const ChatSearchTurnAtom: jotai39.Atom<{
48
48
  productList: {
49
49
  averageRating?: number | undefined;
50
50
  colors?: string[] | undefined;
@@ -74,7 +74,7 @@ declare const ChatSearchTurnAtom: jotai94.Atom<{
74
74
  filterList: string[];
75
75
  messages: Message[];
76
76
  } | null>;
77
- declare const chatSearchProducts: jotai94.Atom<{
77
+ declare const chatSearchProducts: jotai39.Atom<{
78
78
  averageRating?: number | undefined;
79
79
  colors?: string[] | undefined;
80
80
  description?: string | undefined;
@@ -97,19 +97,19 @@ declare const chatSearchProducts: jotai94.Atom<{
97
97
  title: string;
98
98
  url: string;
99
99
  }[]>;
100
- declare const chatSearchFiltersAtom: jotai94.Atom<ChatSearchFilter[]>;
100
+ declare const chatSearchFiltersAtom: jotai39.Atom<ChatSearchFilter[]>;
101
101
  declare const setSearchParams: (query: string) => void;
102
- declare const getSearchParamsAtom: jotai94.Atom<{
102
+ declare const getSearchParamsAtom: jotai39.Atom<{
103
103
  es: string | null;
104
104
  esq: string | null;
105
105
  }>;
106
- declare const initiateChatSearchAtom: jotai94.WritableAtom<null, [query: string], void> & {
106
+ declare const initiateChatSearchAtom: jotai39.WritableAtom<null, [query: string], void> & {
107
107
  init: null;
108
108
  };
109
- declare const handleSearchResultsAtom: jotai94.WritableAtom<null, [message: Message | undefined], void> & {
109
+ declare const handleSearchResultsAtom: jotai39.WritableAtom<null, [message: Message | undefined], void> & {
110
110
  init: null;
111
111
  };
112
- declare const setChatSearchParamsAtom: jotai94.WritableAtom<null, [query: string], void> & {
112
+ declare const setChatSearchParamsAtom: jotai39.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 jotai35 from "jotai";
4
+ import * as jotai74 from "jotai";
5
5
 
6
6
  //#region src/atoms/search/chatSearch.d.ts
7
- declare const chatSearchStateAtom: jotai35.PrimitiveAtom<ChatSearchStateType> & {
7
+ declare const chatSearchStateAtom: jotai74.PrimitiveAtom<ChatSearchStateType> & {
8
8
  init: ChatSearchStateType;
9
9
  };
10
- declare const chatSearchHasProductsAtom: jotai35.PrimitiveAtom<boolean> & {
10
+ declare const chatSearchHasProductsAtom: jotai74.PrimitiveAtom<boolean> & {
11
11
  init: boolean;
12
12
  };
13
- declare const chatSearchProductSortingAtom: jotai35.PrimitiveAtom<ProductSorting> & {
13
+ declare const chatSearchProductSortingAtom: jotai74.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: jotai35.PrimitiveAtom<boolean> & {
24
+ declare const chatSearchIsLoadingAtom: jotai74.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: jotai35.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
33
+ declare const selectedFilterOptionsAtom: jotai74.PrimitiveAtom<SelectedChatSearchFilterOption[]> & {
34
34
  init: SelectedChatSearchFilterOption[];
35
35
  };
36
- declare const additiveDynamicFiltersAtom: jotai35.Atom<boolean>;
36
+ declare const additiveDynamicFiltersAtom: jotai74.Atom<boolean>;
37
37
  declare const createChatSearchFilterOption: (filterId: string, filterItemId: string, displayName: string) => SelectedChatSearchFilterOption;
38
- declare const chatSearchParamsAtom: jotai35.WritableAtom<{
38
+ declare const chatSearchParamsAtom: jotai74.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: 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<{
45
+ declare const chatSearchQueryAtom: jotai74.WritableAtom<string | null, [value: string | null], void>;
46
+ declare const chatSearchIdAtom: jotai74.WritableAtom<string | null, [value: string | null], void>;
47
+ declare const ChatSearchTurnAtom: jotai74.Atom<{
48
48
  productList: {
49
49
  averageRating?: number | undefined;
50
50
  colors?: string[] | undefined;
@@ -74,7 +74,7 @@ declare const ChatSearchTurnAtom: jotai35.Atom<{
74
74
  filterList: string[];
75
75
  messages: Message[];
76
76
  } | null>;
77
- declare const chatSearchProducts: jotai35.Atom<{
77
+ declare const chatSearchProducts: jotai74.Atom<{
78
78
  averageRating?: number | undefined;
79
79
  colors?: string[] | undefined;
80
80
  description?: string | undefined;
@@ -97,19 +97,19 @@ declare const chatSearchProducts: jotai35.Atom<{
97
97
  title: string;
98
98
  url: string;
99
99
  }[]>;
100
- declare const chatSearchFiltersAtom: jotai35.Atom<ChatSearchFilter[]>;
100
+ declare const chatSearchFiltersAtom: jotai74.Atom<ChatSearchFilter[]>;
101
101
  declare const setSearchParams: (query: string) => void;
102
- declare const getSearchParamsAtom: jotai35.Atom<{
102
+ declare const getSearchParamsAtom: jotai74.Atom<{
103
103
  es: string | null;
104
104
  esq: string | null;
105
105
  }>;
106
- declare const initiateChatSearchAtom: jotai35.WritableAtom<null, [query: string], void> & {
106
+ declare const initiateChatSearchAtom: jotai74.WritableAtom<null, [query: string], void> & {
107
107
  init: null;
108
108
  };
109
- declare const handleSearchResultsAtom: jotai35.WritableAtom<null, [message: Message | undefined], void> & {
109
+ declare const handleSearchResultsAtom: jotai74.WritableAtom<null, [message: Message | undefined], void> & {
110
110
  init: null;
111
111
  };
112
- declare const setChatSearchParamsAtom: jotai35.WritableAtom<null, [query: string], void> & {
112
+ declare const setChatSearchParamsAtom: jotai74.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 jotai82 from "jotai";
3
+ import * as jotai55 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: jotai82.PrimitiveAtom<SearchState> & {
18
+ declare const searchAtom: jotai55.PrimitiveAtom<SearchState> & {
19
19
  init: SearchState;
20
20
  };
21
- declare const searchProductSortingAtom: jotai82.PrimitiveAtom<ProductSorting> & {
21
+ declare const searchProductSortingAtom: jotai55.PrimitiveAtom<ProductSorting> & {
22
22
  init: ProductSorting;
23
23
  };
24
- declare const searchSelectedFiltersAtom: jotai82.PrimitiveAtom<SelectedFilterOption[]> & {
24
+ declare const searchSelectedFiltersAtom: jotai55.PrimitiveAtom<SelectedFilterOption[]> & {
25
25
  init: SelectedFilterOption[];
26
26
  };
27
27
  declare const createFilterOption: (filterId: string, filterItemId: string, displayName: string) => SelectedFilterOption;
28
- declare const searchParamsAtom: jotai82.WritableAtom<{
28
+ declare const searchParamsAtom: jotai55.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: jotai82.PrimitiveAtom<boolean> & {
35
+ declare const internalSearchSystemStateAtom: jotai55.PrimitiveAtom<boolean> & {
36
36
  init: boolean;
37
37
  };
38
- declare const searchSystemAtom: jotai82.WritableAtom<boolean, [value: boolean], void>;
39
- declare const filteredSearchProductsAtom: jotai82.Atom<{
38
+ declare const searchSystemAtom: jotai55.WritableAtom<boolean, [value: boolean], void>;
39
+ declare const filteredSearchProductsAtom: jotai55.Atom<{
40
40
  averageRating?: number | undefined;
41
41
  colors?: string[] | undefined;
42
42
  description?: string | undefined;
@@ -59,17 +59,17 @@ declare const filteredSearchProductsAtom: jotai82.Atom<{
59
59
  title: string;
60
60
  url: string;
61
61
  }[]>;
62
- declare const searchFiltersAtom: jotai82.Atom<ChatSearchFilter[]>;
63
- declare const addSearchFilterAtom: jotai82.WritableAtom<null, [filter: SelectedFilterOption], void> & {
62
+ declare const searchFiltersAtom: jotai55.Atom<ChatSearchFilter[]>;
63
+ declare const addSearchFilterAtom: jotai55.WritableAtom<null, [filter: SelectedFilterOption], void> & {
64
64
  init: null;
65
65
  };
66
- declare const removeSearchFilterAtom: jotai82.WritableAtom<null, [filterId: string], void> & {
66
+ declare const removeSearchFilterAtom: jotai55.WritableAtom<null, [filterId: string], void> & {
67
67
  init: null;
68
68
  };
69
- declare const clearSearchFiltersAtom: jotai82.WritableAtom<null, [], void> & {
69
+ declare const clearSearchFiltersAtom: jotai55.WritableAtom<null, [], void> & {
70
70
  init: null;
71
71
  };
72
- declare const performSearchAtom: jotai82.WritableAtom<null, [params: SearchParams, allowRedirect?: unknown], Promise<void>> & {
72
+ declare const performSearchAtom: jotai55.WritableAtom<null, [params: SearchParams, allowRedirect?: unknown], Promise<void>> & {
73
73
  init: null;
74
74
  };
75
75
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { ChatSearchFilter, ProductSorting } from "./types.js";
2
2
  import { SearchParams, SearchResult } from "../../application/models/api/search.js";
3
- import * as jotai56 from "jotai";
3
+ import * as jotai62 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: jotai62.PrimitiveAtom<SearchState> & {
19
19
  init: SearchState;
20
20
  };
21
- declare const searchProductSortingAtom: jotai56.PrimitiveAtom<ProductSorting> & {
21
+ declare const searchProductSortingAtom: jotai62.PrimitiveAtom<ProductSorting> & {
22
22
  init: ProductSorting;
23
23
  };
24
- declare const searchSelectedFiltersAtom: jotai56.PrimitiveAtom<SelectedFilterOption[]> & {
24
+ declare const searchSelectedFiltersAtom: jotai62.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: jotai62.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: jotai62.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: jotai62.WritableAtom<boolean, [value: boolean], void>;
39
+ declare const filteredSearchProductsAtom: jotai62.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: jotai62.Atom<ChatSearchFilter[]>;
63
+ declare const addSearchFilterAtom: jotai62.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: jotai62.WritableAtom<null, [filterId: string], void> & {
67
67
  init: null;
68
68
  };
69
- declare const clearSearchFiltersAtom: jotai56.WritableAtom<null, [], void> & {
69
+ declare const clearSearchFiltersAtom: jotai62.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: jotai62.WritableAtom<null, [params: SearchParams, allowRedirect?: unknown], Promise<void>> & {
73
73
  init: null;
74
74
  };
75
75
  //#endregion
@@ -1,4 +1,4 @@
1
- import * as jotai39 from "jotai";
1
+ import * as jotai79 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: jotai39.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
20
+ declare const chatPreviewLoadingDataAtom: jotai79.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
21
21
  widgetConfigId: string;
22
22
  data: ChatPreviewLoadingData;
23
23
  }], void>;
@@ -1,4 +1,4 @@
1
- import * as jotai93 from "jotai";
1
+ import * as jotai35 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: jotai93.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
20
+ declare const chatPreviewLoadingDataAtom: jotai35.WritableAtom<Record<string, ChatPreviewLoadingData>, [update: {
21
21
  widgetConfigId: string;
22
22
  data: ChatPreviewLoadingData;
23
23
  }], void>;
@@ -222,4 +222,4 @@ const usePage = () => {
222
222
  //#endregion
223
223
  exports.PageProvider = PageProvider;
224
224
  exports.usePage = usePage;
225
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZUNvbnRleHQuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiUGFnZVByb3ZpZGVyOiBSZWFjdC5GQzx7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHByZXZpZXdNb2RlOiBib29sZWFuO1xuICAvKiogV2hlbiBVUkwgcmVzb2x2ZXIgcmV0dXJucyBgcmVhZHk6IGZhbHNlYCwgaW52b2tlZCBmb3IgZXh0ZW5zaW9uL2luamVjdGlvbiBmYWlsdXJlIHJlcG9ydGluZy4gKi9cbiAgb25VcmxSZXNvbHZlck5vdFJlYWR5PzogKGVycm9yOiBFcnJvcikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHZvaWQ7XG59PiIsInVybFJlc29sdmVyQXRvbSIsInBhZ2VWYXJpYW50SW5mb0F0b20iLCJwYWdlVXNlckV2ZW50QXRvbSIsIkZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQiLCJGZWF0dXJlR2F0ZXMiLCJVc2VyRXZlbnRDYXRlZ29yeSIsIlBhZ2VWaXNpdENhdGVnb3J5IiwiVmFyaWFudFR5cGVFbnVtIiwibWFwVXJsUmVzb2x2ZXJSZXNwb25zZVRvVmFyaWFudEluZm8iLCJtYXBBcGlVc2VyRXZlbnRUb1VzZXJFdmVudCIsIkNvbW1lcmNlQXBpQ2xpZW50IiwidXNlQW1wbGl0dWRlIiwidmFyaWFudEluZm9BdG9tIiwiaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tIiwicGFnZVR5cGU6IHN0cmluZyIsInBhZ2VJZDogc3RyaW5nIiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9wYWdlQ29udGV4dC9wYWdlQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUmVhY3ROb2RlLFxuICBjcmVhdGVDb250ZXh0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBVcmxSZXNvbHZlclJlc3BvbnNlLFxuICBoYXNQYXJzZWRWYXJpYW50SW5mb0F0b20sXG4gIHBhZ2VVc2VyRXZlbnRBdG9tLFxuICBwYWdlVmFyaWFudEluZm9BdG9tLFxuICB1cmxSZXNvbHZlckF0b20sXG4gIHZhcmlhbnRJbmZvQXRvbSxcbn0gZnJvbSAnc3JjL2F0b21zL2FwcC92YXJpYW50JztcbmltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCBDb21tZXJjZUFwaUNsaWVudCBmcm9tICdzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IFBhZ2VWaXNpdENhdGVnb3J5LCBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBWYXJpYW50VHlwZUVudW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIHVzZUFtcGxpdHVkZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0JztcbmltcG9ydCB7IG1hcEFwaVVzZXJFdmVudFRvVXNlckV2ZW50LCBtYXBVcmxSZXNvbHZlclJlc3BvbnNlVG9WYXJpYW50SW5mbyB9IGZyb20gJy4vbWFwcGluZyc7XG5pbXBvcnQgeyBQYWdlRGV0YWlscyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdwYWdlQ29udGV4dCcpO1xuXG5jb25zdCBQYWdlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8XG4gIHwgKFBhZ2VEZXRhaWxzICYge1xuICAgICAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAgICAgaXNTdXBwb3J0ZWQ6IGJvb2xlYW47XG4gICAgICBzZXRQYWdlVXJsOiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgfSlcbiAgfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IFBhZ2VQcm92aWRlcjogUmVhY3QuRkM8e1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBwcmV2aWV3TW9kZTogYm9vbGVhbjtcbiAgLyoqIFdoZW4gVVJMIHJlc29sdmVyIHJldHVybnMgYHJlYWR5OiBmYWxzZWAsIGludm9rZWQgZm9yIGV4dGVuc2lvbi9pbmplY3Rpb24gZmFpbHVyZSByZXBvcnRpbmcuICovXG4gIG9uVXJsUmVzb2x2ZXJOb3RSZWFkeT86IChlcnJvcjogRXJyb3IpID0+IFByb21pc2U8dW5rbm93bj4gfCB2b2lkO1xufT4gPSAoeyBjaGlsZHJlbiwgcHJldmlld01vZGUgPSBmYWxzZSwgb25VcmxSZXNvbHZlck5vdFJlYWR5IH0pID0+IHtcbiAgY29uc3QgW3BhZ2VVcmwsIHNldFBhZ2VVcmxdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBbdXJsUmVzb2x2ZXJSZXNwb25zZSwgc2V0VXJsUmVzb2x2ZXJSZXNwb25zZV0gPSB1c2VBdG9tKHVybFJlc29sdmVyQXRvbSk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt2YXJpYW50SW5mbywgc2V0VmFyaWFudEluZm9dID0gdXNlQXRvbShwYWdlVmFyaWFudEluZm9BdG9tKTtcbiAgY29uc3QgW3VzZXJFdmVudCwgc2V0VXNlckV2ZW50XSA9IHVzZUF0b20ocGFnZVVzZXJFdmVudEF0b20pO1xuICBjb25zdCBbaXNTdXBwb3J0ZWQsIHNldElzU3VwcG9ydGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbGFzdE5vdFJlYWR5VXJsUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAvLyBUcmFja3MgdGhlIGxhc3QgVVJMIHdlIHJhbiB0aHJvdWdoIHRoZSByZXNvbHZlciAoZGVkdXBlIGtleSkuIExldHMgdXMgcmUtcmVzb2x2ZSB3aGVuIHRoZVxuICAvLyBwYWdlIFVSTCBjaGFuZ2VzIGNsaWVudC1zaWRlIChlLmcuIGEgUERQIGNvbG9yL3ZhcmlhbnQgc3dhcCB0aGF0IHB1c2hlcyBhIG5ldyBVUkwgd2l0aG91dFxuICAvLyBhIGZ1bGwgcmVsb2FkKSBpbnN0ZWFkIG9mIHNob3J0LWNpcmN1aXRpbmcgb24gdGhlIHN0YWxlIHZhcmlhbnQvdXNlckV2ZW50IGF0b21zLiBDbGVhcmVkXG4gIC8vIG9uIGZhaWx1cmUgc28gdGhlIFVSTCBjYW4gYmUgcmV0cmllZC5cbiAgY29uc3QgbGFzdFJlc29sdmVkVXJsUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAvLyBXaGV0aGVyIHdlIGhhdmUgZXZlciBkcml2ZW4gYSByZXNvbHV0aW9uIG91cnNlbHZlcy4gS2VwdCBzZXBhcmF0ZSBmcm9tXG4gIC8vIGBsYXN0UmVzb2x2ZWRVcmxSZWZgICh3aGljaCBhIGZhaWx1cmUgY2xlYXJzKSBzbyBhIGZhaWxlZCByZXNvbHZlIGNhbiByZXRyeSB3aXRob3V0IHRoZVxuICAvLyBuZXh0IG5hdmlnYXRpb24gbWlzcmVhZGluZyBpdCBhcyBcImF0b21zIHdlcmUgc2VlZGVkIGV4dGVybmFsbHlcIiBhbmQgc2tpcHBpbmcgdGhlIEFQSSBjYWxsLlxuICBjb25zdCBoYXNSZXNvbHZlZE9uY2VSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIEdhdGU6IHJlLXJlc29sdmluZyB0aGUgVVJMIG9uIGEgY2xpZW50LXNpZGUgY2hhbmdlIChQRFAgdmFyaWFudCByZXNldCkgaXMgb3B0LWluIHBlciBvcmdcbiAgLy8gdmlhIFN0YXRzaWcuIFdoZW4gb2ZmLCBrZWVwIHRoZSBvcmlnaW5hbCBiZWhhdmlvciAocmVzb2x2ZSBvbmNlLCB0aGVuIHNob3J0LWNpcmN1aXQpLlxuICAvLyBSZWFkIHZpYSB1c2VDb250ZXh0IChub3QgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKSBzbyBhIGJhcmUgUGFnZVByb3ZpZGVyIOKAlCBlLmcuIGluIHVuaXRcbiAgLy8gdGVzdHMg4oCUIGRvZXMgbm90IHRocm93OyBhYnNlbnQgcHJvdmlkZXIgb3IgZ2F0ZSByZXNvbHZlcyB0byBmYWxzZS5cbiAgY29uc3QgZmVhdHVyZUZsYWdDb250ZXh0ID0gdXNlQ29udGV4dChGZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgaXNWYXJpYW50UmVzZXRFbmFibGVkID1cbiAgICBmZWF0dXJlRmxhZ0NvbnRleHQ/LmZlYXR1cmVGbGFnU2VydmljZT8uaXNGZWF0dXJlR2F0ZUVuYWJsZWQoXG4gICAgICBGZWF0dXJlR2F0ZXMuSXNQZHBWYXJpYW50Q29udGV4dFJlc2V0RW5hYmxlZCxcbiAgICApID8/IGZhbHNlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UGFnZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIH0sIFtdKTtcblxuICAvLyBBdXRvLWluaXRpYWxpemUgYXRvbXMgZm9yIHByZXZpZXcgbW9kZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmV2aWV3TW9kZSAmJiAhdXNlckV2ZW50ICYmICF2YXJpYW50SW5mbykge1xuICAgICAgY29uc3QgdXJsID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6ICcnO1xuICAgICAgc2V0VXNlckV2ZW50KHtcbiAgICAgICAgZXZlbnRfaWQ6ICdwcmV2aWV3LXVzZXItZXZlbnQnLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBwYWdlX3Zpc2l0X2NhdGVnb3J5OiBQYWdlVmlzaXRDYXRlZ29yeS5PdGhlcixcbiAgICAgICAgICB1cmwsXG4gICAgICAgIH0sXG4gICAgICB9IGFzIGFueSk7XG5cbiAgICAgIHNldFZhcmlhbnRJbmZvKHtcbiAgICAgICAgdmFyaWFudFR5cGU6IFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQsXG4gICAgICAgIHVybCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3ByZXZpZXdNb2RlLCB1c2VyRXZlbnQsIHZhcmlhbnRJbmZvLCBzZXRVc2VyRXZlbnQsIHNldFZhcmlhbnRJbmZvXSk7XG5cbiAgY29uc3Qgc2V0VmFyaWFudEZyb21VcmxSZXNvbHZlciA9IHVzZUNhbGxiYWNrKFxuICAgICh1cmw6IHN0cmluZywgcmVzcG9uc2U6IFVybFJlc29sdmVyUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5yZWFkeSkge1xuICAgICAgICBjb25zdCBuZXdWYXJpYW50SW5mbyA9IG1hcFVybFJlc29sdmVyUmVzcG9uc2VUb1ZhcmlhbnRJbmZvKHVybCwgcmVzcG9uc2UpO1xuICAgICAgICBjb25zdCBuZXdVc2VyRXZlbnQgPSBtYXBBcGlVc2VyRXZlbnRUb1VzZXJFdmVudChyZXNwb25zZS51c2VyX2V2ZW50ID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnc2V0dGluZyB2YXJpYW50IGluZm8gYW5kIHVzZXIgZXZlbnQnLCB7IG5ld1ZhcmlhbnRJbmZvLCBuZXdVc2VyRXZlbnQgfSk7XG4gICAgICAgIHNldFZhcmlhbnRJbmZvKG5ld1ZhcmlhbnRJbmZvKTtcbiAgICAgICAgc2V0VXNlckV2ZW50KG5ld1VzZXJFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRVc2VyRXZlbnQodW5kZWZpbmVkKTtcbiAgICAgICAgc2V0VmFyaWFudEluZm8odW5kZWZpbmVkKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdzZXQgdmFyaWFudCBpbmZvIGFuZCB1c2VyIGV2ZW50IHRvIHVuZGVmaW5lZCcsIHsgdmFyaWFudEluZm8sIHVzZXJFdmVudCB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRWYXJpYW50SW5mbywgc2V0VXNlckV2ZW50XSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVQYWdlVXJsID0gYXN5bmMgKCkgPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFwYWdlVXJsKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGVhbnNlZFVybCA9IHBhZ2VVcmwudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgaWYgKCFpc1ZhcmlhbnRSZXNldEVuYWJsZWQpIHtcbiAgICAgICAgICAvLyBHYXRlIG9mZjogb3JpZ2luYWwgYmVoYXZpb3Ig4oCUIHJlc29sdmUgb25jZSwgdGhlbiBzaG9ydC1jaXJjdWl0IGZvcmV2ZXIgd2hpbGUgdGhlXG4gICAgICAgICAgLy8gdmFyaWFudC91c2VyRXZlbnQgYXRvbXMgYXJlIHNldCAoYSBjbGllbnQtc2lkZSBVUkwgY2hhbmdlIG5ldmVyIHJlLXJlc29sdmVzKS5cbiAgICAgICAgICBpZiAocHJldmlld01vZGUgfHwgdXNlckV2ZW50IHx8IHZhcmlhbnRJbmZvKSB7XG4gICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBHYXRlIG9uOiByZS1yZXNvbHZlIHdoZW4gdGhlIFVSTCBjaGFuZ2VzIHNvIGEgUERQIHZhcmlhbnQgc3dhcCBmb2xsb3dzIHRvIHRoZSBuZXdcbiAgICAgICAgICAvLyBwcm9kdWN0LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gQWxyZWFkeSByZXNvbHZlZCB0aGlzIGV4YWN0IFVSTCDigJQgZ3VhcmRzIGFnYWluc3QgdGhlIGVmZmVjdCByZS1ydW5uaW5nIG9uY2UgdGhlXG4gICAgICAgICAgLy8gcmVzb2x2ZXIgd3JpdGVzIHRoZSB2YXJpYW50L3VzZXJFdmVudCBhdG9tcyAodGhleSBhcmUgZWZmZWN0IGRlcGVuZGVuY2llcykuXG4gICAgICAgICAgaWYgKGxhc3RSZXNvbHZlZFVybFJlZi5jdXJyZW50ID09PSBjbGVhbnNlZFVybCkge1xuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSW4gcHJldmlldyBtb2RlLCBvciB3aGVuIHRoZSBhdG9tcyB3ZXJlIHNlZWRlZCBleHRlcm5hbGx5IChlLmcuIGJ5IHN0b3J5Ym9vaylcbiAgICAgICAgICAvLyBiZWZvcmUgd2Ugb3Vyc2VsdmVzIHJlc29sdmVkIGFueXRoaW5nLCBob25vciB0aG9zZSBhdG9tcyBhbmQgc2tpcCB0aGUgQVBJIGNhbGwuXG4gICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHJlc29sdmVkIGF0IGxlYXN0IG9uY2UgKGBoYXNSZXNvbHZlZE9uY2VSZWZgKSwgYSBjaGFuZ2VkIFVSTCBzaG91bGRcbiAgICAgICAgICAvLyByZS1yZXNvbHZlIGV2ZW4gdGhvdWdoIHRoZSBwcmV2aW91cyB2YXJpYW50L3VzZXJFdmVudCBhdG9tcyBhcmUgc2V0LlxuICAgICAgICAgIGlmIChwcmV2aWV3TW9kZSB8fCAoKHVzZXJFdmVudCB8fCB2YXJpYW50SW5mbykgJiYgIWhhc1Jlc29sdmVkT25jZVJlZi5jdXJyZW50KSkge1xuICAgICAgICAgICAgaGFzUmVzb2x2ZWRPbmNlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFJlc29sdmVkVXJsUmVmLmN1cnJlbnQgPSBjbGVhbnNlZFVybDtcbiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhc1Jlc29sdmVkT25jZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBsYXN0UmVzb2x2ZWRVcmxSZWYuY3VycmVudCA9IGNsZWFuc2VkVXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPVxuICAgICAgICAgIHVybFJlc29sdmVyUmVzcG9uc2VbY2xlYW5zZWRVcmxdID8/XG4gICAgICAgICAgKChhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5yZXNvbHZlVXJsKGNsZWFuc2VkVXJsKSkgYXMgVXJsUmVzb2x2ZXJSZXNwb25zZSk7XG5cbiAgICAgICAgLy8gQSBuZXdlciBuYXZpZ2F0aW9uIHN0YXJ0ZWQgcmVzb2x2aW5nIHdoaWxlIHdlIGF3YWl0ZWQgKGUuZy4gdGhlIHNob3BwZXIgY2xpY2tlZFxuICAgICAgICAvLyB0aHJvdWdoIHNldmVyYWwgdmFyaWFudCBzd2F0Y2hlcyBxdWlja2x5KS4gRHJvcCB0aGlzIG5vdy1zdGFsZSByZXNwb25zZSBzbyBhblxuICAgICAgICAvLyBvdXQtb2Ytb3JkZXIgcmVzb2x1dGlvbiBjYW4ndCBvdmVyd3JpdGUgdGhlIGxhdGVzdCB2YXJpYW50LiBEbyBOT1QgY2xlYXIgaXNMb2FkaW5nXG4gICAgICAgIC8vIGhlcmU6IHRoZSBuZXdlciBpbi1mbGlnaHQgcmVxdWVzdCBvd25zIHRoZSBsb2FkaW5nIHN0YXRlLCBhbmQgY2xlYXJpbmcgaXQgd291bGRcbiAgICAgICAgLy8gb3BlbiBhIHdpbmRvdyB3aGVyZSBpc0xvYWRpbmc9ZmFsc2Ugd2hpbGUgdmFyaWFudEluZm8vaXNTdXBwb3J0ZWQgc3RpbGwgYmVsb25nIHRvXG4gICAgICAgIC8vIHRoZSBwcmV2aW91cyBwcm9kdWN0IChjYXVzaW5nIHdpZGdldCBmbGFzaGVzIGFuZCBhIGZpcmUtb25jZSBzdWNjZXNzIHJlZiDigJQgc2VlXG4gICAgICAgIC8vIFdpZGdldHMudHN4IOKAlCB0byBsYXRjaCBvbnRvIHRoZSB3cm9uZyBwcm9kdWN0J3Mgc3RhdGUpLlxuICAgICAgICBpZiAoaXNWYXJpYW50UmVzZXRFbmFibGVkICYmIGxhc3RSZXNvbHZlZFVybFJlZi5jdXJyZW50ICE9PSBjbGVhbnNlZFVybCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFZhcmlhbnRGcm9tVXJsUmVzb2x2ZXIoY2xlYW5zZWRVcmwsIHJlc3BvbnNlKTtcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0SXNTdXBwb3J0ZWQocmVzcG9uc2UucmVhZHkpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWFkeSkge1xuICAgICAgICAgIGxhc3ROb3RSZWFkeVVybFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChvblVybFJlc29sdmVyTm90UmVhZHkgJiYgbGFzdE5vdFJlYWR5VXJsUmVmLmN1cnJlbnQgIT09IGNsZWFuc2VkVXJsKSB7XG4gICAgICAgICAgbGFzdE5vdFJlYWR5VXJsUmVmLmN1cnJlbnQgPSBjbGVhbnNlZFVybDtcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVSTCByZXNvbHZlciByZXR1cm5lZCByZWFkeT1mYWxzZSBmb3IgJHtjbGVhbnNlZFVybH1gKTtcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUob25VcmxSZXNvbHZlck5vdFJlYWR5KGVycikpLmNhdGNoKGNhbGxiYWNrRXJyb3IgPT4ge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdvblVybFJlc29sdmVyTm90UmVhZHkgY2FsbGJhY2sgZmFpbGVkJywgY2FsbGJhY2tFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQWxsb3cgdGhpcyBVUkwgdG8gYmUgcmV0cmllZCBvbiBhIHN1YnNlcXVlbnQgdHJpZ2dlciDigJQgYnV0IG9ubHkgaWYgYSBuZXdlclxuICAgICAgICAvLyBuYXZpZ2F0aW9uIGhhc24ndCBhbHJlYWR5IHN1cGVyc2VkZWQgaXQsIHNvIGEgc3RhbGUgZmFpbHVyZSBjYW4ndCBkaXNjYXJkIGEgbmV3ZXJcbiAgICAgICAgLy8gaW4tZmxpZ2h0IHJlc29sdXRpb24uIGBoYXNSZXNvbHZlZE9uY2VSZWZgIGlzIGludGVudGlvbmFsbHkgbGVmdCBzZXQsIHNvIHJldHJ5aW5nXG4gICAgICAgIC8vIG5ldmVyIGZhbGxzIGludG8gdGhlIHNlZWRlZC1hdG9tcyBicmFuY2ggYWJvdmUuXG4gICAgICAgIGNvbnN0IGZhaWxlZFVybCA9IHBhZ2VVcmw/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICBpZiAoZmFpbGVkVXJsICYmIGxhc3RSZXNvbHZlZFVybFJlZi5jdXJyZW50ID09PSBmYWlsZWRVcmwpIHtcbiAgICAgICAgICBsYXN0UmVzb2x2ZWRVcmxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBwYWdlIFVSTCcsIGUsIHsgcGFnZVVybCB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlc29sdmVQYWdlVXJsKCk7XG4gIH0sIFtcbiAgICBwYWdlVXJsLFxuICAgIHVybFJlc29sdmVyUmVzcG9uc2UsXG4gICAgc2V0VXJsUmVzb2x2ZXJSZXNwb25zZSxcbiAgICBzZXRWYXJpYW50RnJvbVVybFJlc29sdmVyLFxuICAgIHVzZXJFdmVudCxcbiAgICB2YXJpYW50SW5mbyxcbiAgICBwcmV2aWV3TW9kZSxcbiAgICBvblVybFJlc29sdmVyTm90UmVhZHksXG4gICAgaXNWYXJpYW50UmVzZXRFbmFibGVkLFxuICBdKTtcblxuICBjb25zdCB7IHRyYWNrRXZlbnQgfSA9IHVzZUFtcGxpdHVkZSgpO1xuICBjb25zdCByZXNvbHZlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKHZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IGhhc1BhcnNlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKGhhc1BhcnNlZFZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IHBhZ2VWaWV3ZWRGaXJlZCA9IHVzZVJlZihmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGFnZVZpZXdlZEZpcmVkLmN1cnJlbnQgfHwgaXNMb2FkaW5nIHx8ICFoYXNQYXJzZWRWYXJpYW50SW5mbyB8fCAhdmFyaWFudEluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGFnZVR5cGU6IHN0cmluZztcbiAgICBsZXQgcGFnZUlkOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhbnRJbmZvLnZhcmlhbnRUeXBlKSB7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QZHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BkcCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnByb2R1Y3RJZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QbHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BscCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnBscElkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkhvbWU6XG4gICAgICAgIHBhZ2VUeXBlID0gJ2hvbWVwYWdlJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLk90aGVyOlxuICAgICAgICBwYWdlVHlwZSA9ICdvdGhlcic7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQ6XG4gICAgICAgIHBhZ2VUeXBlID0gJ290aGVyJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkZ1bGxQYWdlU2FsZXNBZ2VudDpcbiAgICAgICAgcGFnZVR5cGUgPSAnYWRhcHRpdmVfc3RvcmVmcm9udCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFnZVZpZXdlZEZpcmVkLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgdHJhY2tFdmVudCh7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuUGFnZVZpZXdlZCxcbiAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgJ2NvbnRleHQucGFnZV90eXBlJzogcGFnZVR5cGUsXG4gICAgICAgICdjb250ZXh0LnBhZ2VfaWQnOiBwYWdlSWQsXG4gICAgICAgICdjb250ZXh0LnN1cHBvcnRlZCc6IGlzU3VwcG9ydGVkLFxuICAgICAgICAnY29udGV4dC5yZWFkeSc6IGlzU3VwcG9ydGVkLFxuICAgICAgICAnY29udGV4dC5wYWdlX3ZhcmlhbnRfaWQnOiByZXNvbHZlZFZhcmlhbnRJbmZvLnZhcmlhbnRJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sIFtpc0xvYWRpbmcsIGlzU3VwcG9ydGVkLCBoYXNQYXJzZWRWYXJpYW50SW5mbywgdmFyaWFudEluZm8sIHJlc29sdmVkVmFyaWFudEluZm8sIHRyYWNrRXZlbnRdKTtcblxuICBjb25zdCBzZXRQYWdlVXJsU3RhYmxlID0gdXNlQ2FsbGJhY2soKHVybDogc3RyaW5nKSA9PiB7XG4gICAgc2V0UGFnZVVybCh1cmwpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBwYWdlVXJsLFxuICAgICAgdmFyaWFudEluZm8sXG4gICAgICB1c2VyRXZlbnQsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBpc1N1cHBvcnRlZCxcbiAgICAgIHNldFBhZ2VVcmw6IHNldFBhZ2VVcmxTdGFibGUsXG4gICAgfSksXG4gICAgW3BhZ2VVcmwsIHVzZXJFdmVudCwgdmFyaWFudEluZm8sIGlzTG9hZGluZywgaXNTdXBwb3J0ZWQsIHNldFBhZ2VVcmxTdGFibGVdLFxuICApO1xuXG4gIHJldHVybiA8UGFnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9QYWdlQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlUGFnZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUGFnZUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVBhZ2UgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFBhZ2VQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sY0FBYztBQUV4QyxNQUFNLHVDQU9KLE9BQVU7QUFFWixNQUFhQyxnQkFLUCxFQUFFLFVBQVUsY0FBYyxPQUFPLDRCQUE0QjtDQUNqRSxNQUFNLENBQUMsU0FBUyxrQ0FBMkMsT0FBVTtDQUNyRSxNQUFNLENBQUMscUJBQXFCLDZDQUFrQ0MsZ0NBQWdCO0NBQzlFLE1BQU0sQ0FBQyxXQUFXLG9DQUF5QixNQUFNO0NBQ2pELE1BQU0sQ0FBQyxhQUFhLHFDQUEwQkMsb0NBQW9CO0NBQ2xFLE1BQU0sQ0FBQyxXQUFXLG1DQUF3QkMsa0NBQWtCO0NBQzVELE1BQU0sQ0FBQyxhQUFhLHNDQUEyQixNQUFNO0NBQ3JELE1BQU0sdUNBQTJDLEtBQUs7Q0FLdEQsTUFBTSx1Q0FBMkMsS0FBSztDQUl0RCxNQUFNLHVDQUE0QixNQUFNO0NBT3hDLE1BQU0sOENBRGdD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
225
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZUNvbnRleHQuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiUGFnZVByb3ZpZGVyOiBSZWFjdC5GQzx7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHByZXZpZXdNb2RlOiBib29sZWFuO1xuICAvKiogV2hlbiBVUkwgcmVzb2x2ZXIgcmV0dXJucyBgcmVhZHk6IGZhbHNlYCwgaW52b2tlZCBmb3IgZXh0ZW5zaW9uL2luamVjdGlvbiBmYWlsdXJlIHJlcG9ydGluZy4gKi9cbiAgb25VcmxSZXNvbHZlck5vdFJlYWR5PzogKGVycm9yOiBFcnJvcikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHZvaWQ7XG59PiIsInVybFJlc29sdmVyQXRvbSIsInBhZ2VWYXJpYW50SW5mb0F0b20iLCJwYWdlVXNlckV2ZW50QXRvbSIsIkZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQiLCJGZWF0dXJlR2F0ZXMiLCJVc2VyRXZlbnRDYXRlZ29yeSIsIlBhZ2VWaXNpdENhdGVnb3J5IiwiVmFyaWFudFR5cGVFbnVtIiwibWFwVXJsUmVzb2x2ZXJSZXNwb25zZVRvVmFyaWFudEluZm8iLCJtYXBBcGlVc2VyRXZlbnRUb1VzZXJFdmVudCIsIkNvbW1lcmNlQXBpQ2xpZW50IiwidXNlQW1wbGl0dWRlIiwidmFyaWFudEluZm9BdG9tIiwiaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tIiwicGFnZVR5cGU6IHN0cmluZyIsInBhZ2VJZDogc3RyaW5nIiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9wYWdlQ29udGV4dC9wYWdlQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUmVhY3ROb2RlLFxuICBjcmVhdGVDb250ZXh0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBVcmxSZXNvbHZlclJlc3BvbnNlLFxuICBoYXNQYXJzZWRWYXJpYW50SW5mb0F0b20sXG4gIHBhZ2VVc2VyRXZlbnRBdG9tLFxuICBwYWdlVmFyaWFudEluZm9BdG9tLFxuICB1cmxSZXNvbHZlckF0b20sXG4gIHZhcmlhbnRJbmZvQXRvbSxcbn0gZnJvbSAnc3JjL2F0b21zL2FwcC92YXJpYW50JztcbmltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IEZlYXR1cmVHYXRlcywgVmFyaWFudFR5cGVFbnVtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0IH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgUGFnZVZpc2l0Q2F0ZWdvcnksIFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIHVzZUFtcGxpdHVkZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0JztcbmltcG9ydCB7IG1hcEFwaVVzZXJFdmVudFRvVXNlckV2ZW50LCBtYXBVcmxSZXNvbHZlclJlc3BvbnNlVG9WYXJpYW50SW5mbyB9IGZyb20gJy4vbWFwcGluZyc7XG5pbXBvcnQgeyBQYWdlRGV0YWlscyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdwYWdlQ29udGV4dCcpO1xuXG5jb25zdCBQYWdlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8XG4gIHwgKFBhZ2VEZXRhaWxzICYge1xuICAgICAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAgICAgaXNTdXBwb3J0ZWQ6IGJvb2xlYW47XG4gICAgICBzZXRQYWdlVXJsOiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgfSlcbiAgfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IFBhZ2VQcm92aWRlcjogUmVhY3QuRkM8e1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBwcmV2aWV3TW9kZTogYm9vbGVhbjtcbiAgLyoqIFdoZW4gVVJMIHJlc29sdmVyIHJldHVybnMgYHJlYWR5OiBmYWxzZWAsIGludm9rZWQgZm9yIGV4dGVuc2lvbi9pbmplY3Rpb24gZmFpbHVyZSByZXBvcnRpbmcuICovXG4gIG9uVXJsUmVzb2x2ZXJOb3RSZWFkeT86IChlcnJvcjogRXJyb3IpID0+IFByb21pc2U8dW5rbm93bj4gfCB2b2lkO1xufT4gPSAoeyBjaGlsZHJlbiwgcHJldmlld01vZGUgPSBmYWxzZSwgb25VcmxSZXNvbHZlck5vdFJlYWR5IH0pID0+IHtcbiAgY29uc3QgW3BhZ2VVcmwsIHNldFBhZ2VVcmxdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBbdXJsUmVzb2x2ZXJSZXNwb25zZSwgc2V0VXJsUmVzb2x2ZXJSZXNwb25zZV0gPSB1c2VBdG9tKHVybFJlc29sdmVyQXRvbSk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt2YXJpYW50SW5mbywgc2V0VmFyaWFudEluZm9dID0gdXNlQXRvbShwYWdlVmFyaWFudEluZm9BdG9tKTtcbiAgY29uc3QgW3VzZXJFdmVudCwgc2V0VXNlckV2ZW50XSA9IHVzZUF0b20ocGFnZVVzZXJFdmVudEF0b20pO1xuICBjb25zdCBbaXNTdXBwb3J0ZWQsIHNldElzU3VwcG9ydGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbGFzdE5vdFJlYWR5VXJsUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAvLyBUcmFja3MgdGhlIGxhc3QgVVJMIHdlIHJhbiB0aHJvdWdoIHRoZSByZXNvbHZlciAoZGVkdXBlIGtleSkuIExldHMgdXMgcmUtcmVzb2x2ZSB3aGVuIHRoZVxuICAvLyBwYWdlIFVSTCBjaGFuZ2VzIGNsaWVudC1zaWRlIChlLmcuIGEgUERQIGNvbG9yL3ZhcmlhbnQgc3dhcCB0aGF0IHB1c2hlcyBhIG5ldyBVUkwgd2l0aG91dFxuICAvLyBhIGZ1bGwgcmVsb2FkKSBpbnN0ZWFkIG9mIHNob3J0LWNpcmN1aXRpbmcgb24gdGhlIHN0YWxlIHZhcmlhbnQvdXNlckV2ZW50IGF0b21zLiBDbGVhcmVkXG4gIC8vIG9uIGZhaWx1cmUgc28gdGhlIFVSTCBjYW4gYmUgcmV0cmllZC5cbiAgY29uc3QgbGFzdFJlc29sdmVkVXJsUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAvLyBXaGV0aGVyIHdlIGhhdmUgZXZlciBkcml2ZW4gYSByZXNvbHV0aW9uIG91cnNlbHZlcy4gS2VwdCBzZXBhcmF0ZSBmcm9tXG4gIC8vIGBsYXN0UmVzb2x2ZWRVcmxSZWZgICh3aGljaCBhIGZhaWx1cmUgY2xlYXJzKSBzbyBhIGZhaWxlZCByZXNvbHZlIGNhbiByZXRyeSB3aXRob3V0IHRoZVxuICAvLyBuZXh0IG5hdmlnYXRpb24gbWlzcmVhZGluZyBpdCBhcyBcImF0b21zIHdlcmUgc2VlZGVkIGV4dGVybmFsbHlcIiBhbmQgc2tpcHBpbmcgdGhlIEFQSSBjYWxsLlxuICBjb25zdCBoYXNSZXNvbHZlZE9uY2VSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIEdhdGU6IHJlLXJlc29sdmluZyB0aGUgVVJMIG9uIGEgY2xpZW50LXNpZGUgY2hhbmdlIChQRFAgdmFyaWFudCByZXNldCkgaXMgb3B0LWluIHBlciBvcmdcbiAgLy8gdmlhIFN0YXRzaWcuIFdoZW4gb2ZmLCBrZWVwIHRoZSBvcmlnaW5hbCBiZWhhdmlvciAocmVzb2x2ZSBvbmNlLCB0aGVuIHNob3J0LWNpcmN1aXQpLlxuICAvLyBSZWFkIHZpYSB1c2VDb250ZXh0IChub3QgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKSBzbyBhIGJhcmUgUGFnZVByb3ZpZGVyIOKAlCBlLmcuIGluIHVuaXRcbiAgLy8gdGVzdHMg4oCUIGRvZXMgbm90IHRocm93OyBhYnNlbnQgcHJvdmlkZXIgb3IgZ2F0ZSByZXNvbHZlcyB0byBmYWxzZS5cbiAgY29uc3QgZmVhdHVyZUZsYWdDb250ZXh0ID0gdXNlQ29udGV4dChGZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgaXNWYXJpYW50UmVzZXRFbmFibGVkID1cbiAgICBmZWF0dXJlRmxhZ0NvbnRleHQ/LmZlYXR1cmVGbGFnU2VydmljZT8uaXNGZWF0dXJlR2F0ZUVuYWJsZWQoXG4gICAgICBGZWF0dXJlR2F0ZXMuSXNQZHBWYXJpYW50Q29udGV4dFJlc2V0RW5hYmxlZCxcbiAgICApID8/IGZhbHNlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UGFnZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIH0sIFtdKTtcblxuICAvLyBBdXRvLWluaXRpYWxpemUgYXRvbXMgZm9yIHByZXZpZXcgbW9kZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmV2aWV3TW9kZSAmJiAhdXNlckV2ZW50ICYmICF2YXJpYW50SW5mbykge1xuICAgICAgY29uc3QgdXJsID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6ICcnO1xuICAgICAgc2V0VXNlckV2ZW50KHtcbiAgICAgICAgZXZlbnRfaWQ6ICdwcmV2aWV3LXVzZXItZXZlbnQnLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBwYWdlX3Zpc2l0X2NhdGVnb3J5OiBQYWdlVmlzaXRDYXRlZ29yeS5PdGhlcixcbiAgICAgICAgICB1cmwsXG4gICAgICAgIH0sXG4gICAgICB9IGFzIGFueSk7XG5cbiAgICAgIHNldFZhcmlhbnRJbmZvKHtcbiAgICAgICAgdmFyaWFudFR5cGU6IFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQsXG4gICAgICAgIHVybCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3ByZXZpZXdNb2RlLCB1c2VyRXZlbnQsIHZhcmlhbnRJbmZvLCBzZXRVc2VyRXZlbnQsIHNldFZhcmlhbnRJbmZvXSk7XG5cbiAgY29uc3Qgc2V0VmFyaWFudEZyb21VcmxSZXNvbHZlciA9IHVzZUNhbGxiYWNrKFxuICAgICh1cmw6IHN0cmluZywgcmVzcG9uc2U6IFVybFJlc29sdmVyUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5yZWFkeSkge1xuICAgICAgICBjb25zdCBuZXdWYXJpYW50SW5mbyA9IG1hcFVybFJlc29sdmVyUmVzcG9uc2VUb1ZhcmlhbnRJbmZvKHVybCwgcmVzcG9uc2UpO1xuICAgICAgICBjb25zdCBuZXdVc2VyRXZlbnQgPSBtYXBBcGlVc2VyRXZlbnRUb1VzZXJFdmVudChyZXNwb25zZS51c2VyX2V2ZW50ID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnc2V0dGluZyB2YXJpYW50IGluZm8gYW5kIHVzZXIgZXZlbnQnLCB7IG5ld1ZhcmlhbnRJbmZvLCBuZXdVc2VyRXZlbnQgfSk7XG4gICAgICAgIHNldFZhcmlhbnRJbmZvKG5ld1ZhcmlhbnRJbmZvKTtcbiAgICAgICAgc2V0VXNlckV2ZW50KG5ld1VzZXJFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRVc2VyRXZlbnQodW5kZWZpbmVkKTtcbiAgICAgICAgc2V0VmFyaWFudEluZm8odW5kZWZpbmVkKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdzZXQgdmFyaWFudCBpbmZvIGFuZCB1c2VyIGV2ZW50IHRvIHVuZGVmaW5lZCcsIHsgdmFyaWFudEluZm8sIHVzZXJFdmVudCB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRWYXJpYW50SW5mbywgc2V0VXNlckV2ZW50XSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVQYWdlVXJsID0gYXN5bmMgKCkgPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFwYWdlVXJsKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGVhbnNlZFVybCA9IHBhZ2VVcmwudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgaWYgKCFpc1ZhcmlhbnRSZXNldEVuYWJsZWQpIHtcbiAgICAgICAgICAvLyBHYXRlIG9mZjogb3JpZ2luYWwgYmVoYXZpb3Ig4oCUIHJlc29sdmUgb25jZSwgdGhlbiBzaG9ydC1jaXJjdWl0IGZvcmV2ZXIgd2hpbGUgdGhlXG4gICAgICAgICAgLy8gdmFyaWFudC91c2VyRXZlbnQgYXRvbXMgYXJlIHNldCAoYSBjbGllbnQtc2lkZSBVUkwgY2hhbmdlIG5ldmVyIHJlLXJlc29sdmVzKS5cbiAgICAgICAgICBpZiAocHJldmlld01vZGUgfHwgdXNlckV2ZW50IHx8IHZhcmlhbnRJbmZvKSB7XG4gICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBHYXRlIG9uOiByZS1yZXNvbHZlIHdoZW4gdGhlIFVSTCBjaGFuZ2VzIHNvIGEgUERQIHZhcmlhbnQgc3dhcCBmb2xsb3dzIHRvIHRoZSBuZXdcbiAgICAgICAgICAvLyBwcm9kdWN0LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gQWxyZWFkeSByZXNvbHZlZCB0aGlzIGV4YWN0IFVSTCDigJQgZ3VhcmRzIGFnYWluc3QgdGhlIGVmZmVjdCByZS1ydW5uaW5nIG9uY2UgdGhlXG4gICAgICAgICAgLy8gcmVzb2x2ZXIgd3JpdGVzIHRoZSB2YXJpYW50L3VzZXJFdmVudCBhdG9tcyAodGhleSBhcmUgZWZmZWN0IGRlcGVuZGVuY2llcykuXG4gICAgICAgICAgaWYgKGxhc3RSZXNvbHZlZFVybFJlZi5jdXJyZW50ID09PSBjbGVhbnNlZFVybCkge1xuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSW4gcHJldmlldyBtb2RlLCBvciB3aGVuIHRoZSBhdG9tcyB3ZXJlIHNlZWRlZCBleHRlcm5hbGx5IChlLmcuIGJ5IHN0b3J5Ym9vaylcbiAgICAgICAgICAvLyBiZWZvcmUgd2Ugb3Vyc2VsdmVzIHJlc29sdmVkIGFueXRoaW5nLCBob25vciB0aG9zZSBhdG9tcyBhbmQgc2tpcCB0aGUgQVBJIGNhbGwuXG4gICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHJlc29sdmVkIGF0IGxlYXN0IG9uY2UgKGBoYXNSZXNvbHZlZE9uY2VSZWZgKSwgYSBjaGFuZ2VkIFVSTCBzaG91bGRcbiAgICAgICAgICAvLyByZS1yZXNvbHZlIGV2ZW4gdGhvdWdoIHRoZSBwcmV2aW91cyB2YXJpYW50L3VzZXJFdmVudCBhdG9tcyBhcmUgc2V0LlxuICAgICAgICAgIGlmIChwcmV2aWV3TW9kZSB8fCAoKHVzZXJFdmVudCB8fCB2YXJpYW50SW5mbykgJiYgIWhhc1Jlc29sdmVkT25jZVJlZi5jdXJyZW50KSkge1xuICAgICAgICAgICAgaGFzUmVzb2x2ZWRPbmNlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFJlc29sdmVkVXJsUmVmLmN1cnJlbnQgPSBjbGVhbnNlZFVybDtcbiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhc1Jlc29sdmVkT25jZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBsYXN0UmVzb2x2ZWRVcmxSZWYuY3VycmVudCA9IGNsZWFuc2VkVXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPVxuICAgICAgICAgIHVybFJlc29sdmVyUmVzcG9uc2VbY2xlYW5zZWRVcmxdID8/XG4gICAgICAgICAgKChhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5yZXNvbHZlVXJsKGNsZWFuc2VkVXJsKSkgYXMgVXJsUmVzb2x2ZXJSZXNwb25zZSk7XG5cbiAgICAgICAgLy8gQSBuZXdlciBuYXZpZ2F0aW9uIHN0YXJ0ZWQgcmVzb2x2aW5nIHdoaWxlIHdlIGF3YWl0ZWQgKGUuZy4gdGhlIHNob3BwZXIgY2xpY2tlZFxuICAgICAgICAvLyB0aHJvdWdoIHNldmVyYWwgdmFyaWFudCBzd2F0Y2hlcyBxdWlja2x5KS4gRHJvcCB0aGlzIG5vdy1zdGFsZSByZXNwb25zZSBzbyBhblxuICAgICAgICAvLyBvdXQtb2Ytb3JkZXIgcmVzb2x1dGlvbiBjYW4ndCBvdmVyd3JpdGUgdGhlIGxhdGVzdCB2YXJpYW50LiBEbyBOT1QgY2xlYXIgaXNMb2FkaW5nXG4gICAgICAgIC8vIGhlcmU6IHRoZSBuZXdlciBpbi1mbGlnaHQgcmVxdWVzdCBvd25zIHRoZSBsb2FkaW5nIHN0YXRlLCBhbmQgY2xlYXJpbmcgaXQgd291bGRcbiAgICAgICAgLy8gb3BlbiBhIHdpbmRvdyB3aGVyZSBpc0xvYWRpbmc9ZmFsc2Ugd2hpbGUgdmFyaWFudEluZm8vaXNTdXBwb3J0ZWQgc3RpbGwgYmVsb25nIHRvXG4gICAgICAgIC8vIHRoZSBwcmV2aW91cyBwcm9kdWN0IChjYXVzaW5nIHdpZGdldCBmbGFzaGVzIGFuZCBhIGZpcmUtb25jZSBzdWNjZXNzIHJlZiDigJQgc2VlXG4gICAgICAgIC8vIFdpZGdldHMudHN4IOKAlCB0byBsYXRjaCBvbnRvIHRoZSB3cm9uZyBwcm9kdWN0J3Mgc3RhdGUpLlxuICAgICAgICBpZiAoaXNWYXJpYW50UmVzZXRFbmFibGVkICYmIGxhc3RSZXNvbHZlZFVybFJlZi5jdXJyZW50ICE9PSBjbGVhbnNlZFVybCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFZhcmlhbnRGcm9tVXJsUmVzb2x2ZXIoY2xlYW5zZWRVcmwsIHJlc3BvbnNlKTtcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0SXNTdXBwb3J0ZWQocmVzcG9uc2UucmVhZHkpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWFkeSkge1xuICAgICAgICAgIGxhc3ROb3RSZWFkeVVybFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChvblVybFJlc29sdmVyTm90UmVhZHkgJiYgbGFzdE5vdFJlYWR5VXJsUmVmLmN1cnJlbnQgIT09IGNsZWFuc2VkVXJsKSB7XG4gICAgICAgICAgbGFzdE5vdFJlYWR5VXJsUmVmLmN1cnJlbnQgPSBjbGVhbnNlZFVybDtcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVSTCByZXNvbHZlciByZXR1cm5lZCByZWFkeT1mYWxzZSBmb3IgJHtjbGVhbnNlZFVybH1gKTtcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUob25VcmxSZXNvbHZlck5vdFJlYWR5KGVycikpLmNhdGNoKGNhbGxiYWNrRXJyb3IgPT4ge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdvblVybFJlc29sdmVyTm90UmVhZHkgY2FsbGJhY2sgZmFpbGVkJywgY2FsbGJhY2tFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQWxsb3cgdGhpcyBVUkwgdG8gYmUgcmV0cmllZCBvbiBhIHN1YnNlcXVlbnQgdHJpZ2dlciDigJQgYnV0IG9ubHkgaWYgYSBuZXdlclxuICAgICAgICAvLyBuYXZpZ2F0aW9uIGhhc24ndCBhbHJlYWR5IHN1cGVyc2VkZWQgaXQsIHNvIGEgc3RhbGUgZmFpbHVyZSBjYW4ndCBkaXNjYXJkIGEgbmV3ZXJcbiAgICAgICAgLy8gaW4tZmxpZ2h0IHJlc29sdXRpb24uIGBoYXNSZXNvbHZlZE9uY2VSZWZgIGlzIGludGVudGlvbmFsbHkgbGVmdCBzZXQsIHNvIHJldHJ5aW5nXG4gICAgICAgIC8vIG5ldmVyIGZhbGxzIGludG8gdGhlIHNlZWRlZC1hdG9tcyBicmFuY2ggYWJvdmUuXG4gICAgICAgIGNvbnN0IGZhaWxlZFVybCA9IHBhZ2VVcmw/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICBpZiAoZmFpbGVkVXJsICYmIGxhc3RSZXNvbHZlZFVybFJlZi5jdXJyZW50ID09PSBmYWlsZWRVcmwpIHtcbiAgICAgICAgICBsYXN0UmVzb2x2ZWRVcmxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBwYWdlIFVSTCcsIGUsIHsgcGFnZVVybCB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlc29sdmVQYWdlVXJsKCk7XG4gIH0sIFtcbiAgICBwYWdlVXJsLFxuICAgIHVybFJlc29sdmVyUmVzcG9uc2UsXG4gICAgc2V0VXJsUmVzb2x2ZXJSZXNwb25zZSxcbiAgICBzZXRWYXJpYW50RnJvbVVybFJlc29sdmVyLFxuICAgIHVzZXJFdmVudCxcbiAgICB2YXJpYW50SW5mbyxcbiAgICBwcmV2aWV3TW9kZSxcbiAgICBvblVybFJlc29sdmVyTm90UmVhZHksXG4gICAgaXNWYXJpYW50UmVzZXRFbmFibGVkLFxuICBdKTtcblxuICBjb25zdCB7IHRyYWNrRXZlbnQgfSA9IHVzZUFtcGxpdHVkZSgpO1xuICBjb25zdCByZXNvbHZlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKHZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IGhhc1BhcnNlZFZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKGhhc1BhcnNlZFZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IHBhZ2VWaWV3ZWRGaXJlZCA9IHVzZVJlZihmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGFnZVZpZXdlZEZpcmVkLmN1cnJlbnQgfHwgaXNMb2FkaW5nIHx8ICFoYXNQYXJzZWRWYXJpYW50SW5mbyB8fCAhdmFyaWFudEluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGFnZVR5cGU6IHN0cmluZztcbiAgICBsZXQgcGFnZUlkOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhbnRJbmZvLnZhcmlhbnRUeXBlKSB7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QZHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BkcCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnByb2R1Y3RJZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QbHA6XG4gICAgICAgIHBhZ2VUeXBlID0gJ3BscCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnBscElkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkhvbWU6XG4gICAgICAgIHBhZ2VUeXBlID0gJ2hvbWVwYWdlJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLk90aGVyOlxuICAgICAgICBwYWdlVHlwZSA9ICdvdGhlcic7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQ6XG4gICAgICAgIHBhZ2VUeXBlID0gJ290aGVyJztcbiAgICAgICAgcGFnZUlkID0gdmFyaWFudEluZm8udXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkZ1bGxQYWdlU2FsZXNBZ2VudDpcbiAgICAgICAgcGFnZVR5cGUgPSAnYWRhcHRpdmVfc3RvcmVmcm9udCc7XG4gICAgICAgIHBhZ2VJZCA9IHZhcmlhbnRJbmZvLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFnZVZpZXdlZEZpcmVkLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgdHJhY2tFdmVudCh7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuUGFnZVZpZXdlZCxcbiAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgJ2NvbnRleHQucGFnZV90eXBlJzogcGFnZVR5cGUsXG4gICAgICAgICdjb250ZXh0LnBhZ2VfaWQnOiBwYWdlSWQsXG4gICAgICAgICdjb250ZXh0LnN1cHBvcnRlZCc6IGlzU3VwcG9ydGVkLFxuICAgICAgICAnY29udGV4dC5yZWFkeSc6IGlzU3VwcG9ydGVkLFxuICAgICAgICAnY29udGV4dC5wYWdlX3ZhcmlhbnRfaWQnOiByZXNvbHZlZFZhcmlhbnRJbmZvLnZhcmlhbnRJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sIFtpc0xvYWRpbmcsIGlzU3VwcG9ydGVkLCBoYXNQYXJzZWRWYXJpYW50SW5mbywgdmFyaWFudEluZm8sIHJlc29sdmVkVmFyaWFudEluZm8sIHRyYWNrRXZlbnRdKTtcblxuICBjb25zdCBzZXRQYWdlVXJsU3RhYmxlID0gdXNlQ2FsbGJhY2soKHVybDogc3RyaW5nKSA9PiB7XG4gICAgc2V0UGFnZVVybCh1cmwpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBwYWdlVXJsLFxuICAgICAgdmFyaWFudEluZm8sXG4gICAgICB1c2VyRXZlbnQsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBpc1N1cHBvcnRlZCxcbiAgICAgIHNldFBhZ2VVcmw6IHNldFBhZ2VVcmxTdGFibGUsXG4gICAgfSksXG4gICAgW3BhZ2VVcmwsIHVzZXJFdmVudCwgdmFyaWFudEluZm8sIGlzTG9hZGluZywgaXNTdXBwb3J0ZWQsIHNldFBhZ2VVcmxTdGFibGVdLFxuICApO1xuXG4gIHJldHVybiA8UGFnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9QYWdlQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlUGFnZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUGFnZUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVBhZ2UgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFBhZ2VQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sY0FBYztBQUV4QyxNQUFNLHVDQU9KLE9BQVU7QUFFWixNQUFhQyxnQkFLUCxFQUFFLFVBQVUsY0FBYyxPQUFPLDRCQUE0QjtDQUNqRSxNQUFNLENBQUMsU0FBUyxrQ0FBMkMsT0FBVTtDQUNyRSxNQUFNLENBQUMscUJBQXFCLDZDQUFrQ0MsZ0NBQWdCO0NBQzlFLE1BQU0sQ0FBQyxXQUFXLG9DQUF5QixNQUFNO0NBQ2pELE1BQU0sQ0FBQyxhQUFhLHFDQUEwQkMsb0NBQW9CO0NBQ2xFLE1BQU0sQ0FBQyxXQUFXLG1DQUF3QkMsa0NBQWtCO0NBQzVELE1BQU0sQ0FBQyxhQUFhLHNDQUEyQixNQUFNO0NBQ3JELE1BQU0sdUNBQTJDLEtBQUs7Q0FLdEQsTUFBTSx1Q0FBMkMsS0FBSztDQUl0RCxNQUFNLHVDQUE0QixNQUFNO0NBT3hDLE1BQU0sOENBRGdDQyw0REFBMEIsRUFFMUMsb0JBQW9CLHFCQUN0Q0Msa0NBQWEsZ0NBQ2Qs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