@sinequa/assistant 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/chat/charts/chart/chart.component.d.ts +13 -13
  2. package/chat/chat-message/chat-message.component.d.ts +85 -81
  3. package/chat/chat-message/i18n/en.json +11 -0
  4. package/chat/chat-message/i18n/fr.json +11 -0
  5. package/chat/chat-reference/chat-reference.component.d.ts +14 -14
  6. package/chat/chat-reference/i18n/en.json +4 -0
  7. package/chat/chat-reference/i18n/fr.json +4 -0
  8. package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
  9. package/chat/chat-settings-v3/i18n/en.json +14 -0
  10. package/chat/chat-settings-v3/i18n/fr.json +14 -0
  11. package/chat/chat.component.d.ts +388 -1405
  12. package/chat/chat.service.d.ts +247 -228
  13. package/chat/debug-message/debug-message.component.d.ts +17 -17
  14. package/chat/debug-message/i18n/en.json +3 -0
  15. package/chat/debug-message/i18n/fr.json +3 -0
  16. package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
  17. package/chat/dialogs/i18n/en.json +19 -0
  18. package/chat/dialogs/i18n/fr.json +19 -0
  19. package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
  20. package/chat/dialogs/updates.component.d.ts +15 -0
  21. package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
  22. package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
  23. package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
  24. package/chat/documents-upload/documents-upload.model.d.ts +66 -66
  25. package/chat/documents-upload/documents-upload.service.d.ts +170 -174
  26. package/chat/documents-upload/i18n/en.json +24 -0
  27. package/chat/documents-upload/i18n/fr.json +24 -0
  28. package/chat/format-icon/format-icon.component.d.ts +10 -10
  29. package/chat/format-icon/icons.d.ts +5 -5
  30. package/chat/i18n/en.json +42 -0
  31. package/chat/i18n/fr.json +42 -0
  32. package/chat/index.d.ts +5 -5
  33. package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
  34. package/chat/instance-manager.service.d.ts +28 -28
  35. package/chat/pipes/message-content.pipe.d.ts +16 -0
  36. package/chat/prompt.component.d.ts +25 -21
  37. package/chat/public-api.d.ts +17 -17
  38. package/chat/references/i18n/en.json +6 -0
  39. package/chat/references/i18n/fr.json +6 -0
  40. package/chat/references/inline-image-reference.d.ts +21 -0
  41. package/chat/references/inline-page-reference.d.ts +21 -0
  42. package/chat/rest-chat.service.d.ts +31 -33
  43. package/chat/saved-chats/i18n/en.json +4 -0
  44. package/chat/saved-chats/i18n/fr.json +4 -0
  45. package/chat/saved-chats/saved-chats.component.d.ts +30 -36
  46. package/chat/services/app.service.d.ts +8 -0
  47. package/chat/services/dialog.service.d.ts +12 -0
  48. package/chat/services/notification.service.d.ts +10 -0
  49. package/chat/services/principal.service.d.ts +7 -0
  50. package/chat/services/search.service.d.ts +7 -0
  51. package/chat/services/signalR.web.service.d.ts +45 -0
  52. package/chat/services/ui.service.d.ts +13 -0
  53. package/chat/services/user-settings.service.d.ts +7 -0
  54. package/chat/token-progress-bar/i18n/en.json +4 -0
  55. package/chat/token-progress-bar/i18n/fr.json +4 -0
  56. package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
  57. package/chat/tooltip/tooltip.component.d.ts +12 -0
  58. package/chat/tooltip/tooltip.directive.d.ts +81 -0
  59. package/chat/types/message-content.types.d.ts +54 -0
  60. package/chat/types/message-reference.types.d.ts +11 -0
  61. package/chat/types.d.ts +913 -873
  62. package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
  63. package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
  64. package/chat/utils/assistant-json.d.ts +2 -0
  65. package/chat/websocket-chat.service.d.ts +102 -103
  66. package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
  67. package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
  68. package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
  69. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
  70. package/esm2022/chat/chat.component.mjs +1090 -0
  71. package/esm2022/chat/chat.service.mjs +417 -0
  72. package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
  73. package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
  74. package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
  75. package/esm2022/chat/dialogs/updates.component.mjs +61 -0
  76. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
  77. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
  78. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
  79. package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
  80. package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
  81. package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
  82. package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
  83. package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
  84. package/esm2022/chat/instance-manager.service.mjs +46 -0
  85. package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
  86. package/esm2022/chat/prompt.component.mjs +88 -0
  87. package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
  88. package/esm2022/chat/references/inline-image-reference.mjs +110 -0
  89. package/esm2022/chat/references/inline-page-reference.mjs +110 -0
  90. package/esm2022/chat/rest-chat.service.mjs +296 -0
  91. package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
  92. package/esm2022/chat/services/app.service.mjs +19 -0
  93. package/esm2022/chat/services/dialog.service.mjs +40 -0
  94. package/esm2022/chat/services/notification.service.mjs +25 -0
  95. package/esm2022/chat/services/principal.service.mjs +16 -0
  96. package/esm2022/chat/services/search.service.mjs +13 -0
  97. package/esm2022/chat/services/signalR.web.service.mjs +79 -0
  98. package/esm2022/chat/services/ui.service.mjs +61 -0
  99. package/esm2022/chat/services/user-settings.service.mjs +22 -0
  100. package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
  101. package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
  102. package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
  103. package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
  104. package/esm2022/chat/types/message-content.types.mjs +2 -0
  105. package/esm2022/chat/types/message-reference.types.mjs +2 -0
  106. package/esm2022/chat/types.mjs +130 -0
  107. package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
  108. package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
  109. package/esm2022/chat/utils/assistant-json.mjs +12 -0
  110. package/esm2022/chat/websocket-chat.service.mjs +654 -0
  111. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  112. package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
  113. package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
  114. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
  115. package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
  116. package/index.d.ts +5 -5
  117. package/package.json +52 -25
  118. package/public-api.d.ts +1 -1
  119. package/chat/messages/de.d.ts +0 -4
  120. package/chat/messages/en.d.ts +0 -4
  121. package/chat/messages/fr.d.ts +0 -4
  122. package/chat/messages/index.d.ts +0 -4
  123. package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
  124. package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
  125. package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
  126. package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
  127. package/esm2020/chat/chat.component.mjs +0 -1069
  128. package/esm2020/chat/chat.service.mjs +0 -333
  129. package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
  130. package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
  131. package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
  132. package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
  133. package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
  134. package/esm2020/chat/instance-manager.service.mjs +0 -46
  135. package/esm2020/chat/messages/de.mjs +0 -4
  136. package/esm2020/chat/messages/en.mjs +0 -4
  137. package/esm2020/chat/messages/fr.mjs +0 -4
  138. package/esm2020/chat/messages/index.mjs +0 -9
  139. package/esm2020/chat/prompt.component.mjs +0 -88
  140. package/esm2020/chat/rest-chat.service.mjs +0 -241
  141. package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
  142. package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
  143. package/esm2020/chat/types.mjs +0 -112
  144. package/esm2020/chat/websocket-chat.service.mjs +0 -641
  145. package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
  146. package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
  147. package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
  148. package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
  149. package/fesm2020/sinequa-assistant.mjs +0 -9
  150. package/fesm2020/sinequa-assistant.mjs.map +0 -1
  151. /package/{fesm2015 → fesm2022}/sinequa-assistant.mjs.map +0 -0
@@ -1,112 +0,0 @@
1
- import { z } from 'zod';
2
- // Define the Zod representation for the connectionSettings object
3
- export const connectionSettingsSchema = z.object({
4
- connectionErrorMessage: z.string(),
5
- restEndpoint: z.string().optional(),
6
- websocketEndpoint: z.string().optional(),
7
- signalRTransport: z.enum(["WebSockets", "ServerSentEvents", "LongPolling", "None"]),
8
- signalRLogLevel: z.enum(["Critical", "Debug", "Error", "Information", "None", "Trace", "Warning"]),
9
- signalRServerTimeoutInMilliseconds: z.number().optional()
10
- }).refine(data => (!!data.restEndpoint || !!data.websocketEndpoint), {
11
- message: "Based on the provided input() protocol ('REST' or 'WEBSOCKET') to the Chat Component, either 'restEndpoint' or 'websocketEndpoint' property should be provided in the 'globalSettings' of the assistant instance.",
12
- });
13
- // Define the Zod representation for the serviceSettings object
14
- const serviceSettingsSchema = z.object({
15
- service_id: z.string(),
16
- model_id: z.string(),
17
- temperature: z.number(),
18
- top_p: z.number(),
19
- max_tokens: z.number()
20
- });
21
- // Define the Zod representation for the additionalServiceSettings object
22
- const additionalServiceSettingsSchema = z.object({});
23
- // Define the Zod representation for the additionalWorkflowProperties object
24
- const additionalWorkflowPropertiesSchema = z.object({});
25
- // Define the Zod representation for the uiSettings object
26
- const uiSettingsSchema = z.object({
27
- display: z.boolean(),
28
- servicesModels: z.boolean(),
29
- functions: z.boolean(),
30
- temperature: z.boolean(),
31
- top_p: z.boolean(),
32
- max_tokens: z.boolean(),
33
- debug: z.boolean().optional(),
34
- displaySystemPrompt: z.boolean(),
35
- displayUserPrompt: z.boolean()
36
- });
37
- // Define the Zod representation for the defaultValues object
38
- const defaultValuesSchema = z.object({
39
- service_id: z.string(),
40
- model_id: z.string(),
41
- functions: z.array(z.object({
42
- name: z.string(),
43
- enabled: z.boolean()
44
- })),
45
- temperature: z.number(),
46
- top_p: z.number(),
47
- max_tokens: z.number(),
48
- debug: z.boolean().optional(),
49
- systemPrompt: z.string(),
50
- userPrompt: z.string()
51
- });
52
- // Define the Zod representation for the action object
53
- const actionSchema = z.object({
54
- forcedWorkflow: z.string(),
55
- forcedWorkflowProperties: z.record(z.unknown()).optional() // forcedWorkflowProperties must be an object (Map equivalent)
56
- });
57
- // Define the Zod representation for the modeSettings object
58
- const initializationSchema = z.object({
59
- event: z.enum(['Query', 'Prompt']),
60
- forcedWorkflow: z.string().optional(),
61
- forcedFunction: z.string().optional(),
62
- displayUserQuery: z.boolean().optional()
63
- })
64
- // ❌ Rule 1: Cannot have both forcedWorkflow and forcedFunction
65
- .refine(data => (data.event !== "Query") || !(data.forcedWorkflow && data.forcedFunction), {
66
- message: "Both 'forcedFunction' and 'forcedWorkflow' properties are set, but they should not.",
67
- })
68
- // ❌ Rule 2: Must have one of forcedWorkflow or forcedFunction when event is 'Query'
69
- .refine(data => (data.event !== "Query") || !!data.forcedWorkflow || !!data.forcedFunction, {
70
- message: "One of 'forcedWorkflow' or 'forcedFunction' must be provided when the initialization's event is 'Query'."
71
- })
72
- // ❌ Rule 3: Must have displayUserQuery set when event is 'Query'
73
- .refine(data => (data.event !== "Query") || (data.displayUserQuery !== undefined && data.displayUserQuery !== null), {
74
- message: "'displayUserQuery' must be provided when the initialization's event is 'Query'."
75
- });
76
- const modeSettingsSchema = z.object({
77
- enabledUserInput: z.boolean(),
78
- displayUserPrompt: z.boolean(),
79
- sendUserPrompt: z.boolean(),
80
- initialization: initializationSchema,
81
- actions: z.record(actionSchema).optional()
82
- });
83
- // Define the Zod representation for the savedChatSettings object
84
- const savedChatSettingsSchema = z.object({
85
- enabled: z.boolean(),
86
- display: z.boolean()
87
- });
88
- // Define the Zod representation for the globalSettings object
89
- const globalSettingsSchema = z.object({
90
- searchWarningMessage: z.string(),
91
- disclaimer: z.string().optional(),
92
- genericChatErrorMessage: z.string().optional(),
93
- displayUserQuotaConsumption: z.boolean().optional(),
94
- displayChatTokensConsumption: z.boolean().optional()
95
- });
96
- // Define the Zod representation for the auditSettings object
97
- const auditSettingsSchema = z.object({
98
- issueTypes: z.array(z.string()).optional()
99
- });
100
- // Define the Zod representation for the entire ChatConfig object
101
- export const chatConfigSchema = z.object({
102
- connectionSettings: connectionSettingsSchema,
103
- defaultValues: defaultValuesSchema,
104
- modeSettings: modeSettingsSchema,
105
- uiSettings: uiSettingsSchema,
106
- savedChatSettings: savedChatSettingsSchema,
107
- globalSettings: globalSettingsSchema,
108
- auditSettings: auditSettingsSchema.optional(),
109
- additionalServiceSettings: additionalServiceSettingsSchema,
110
- additionalWorkflowProperties: additionalWorkflowPropertiesSchema
111
- });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBNEl4QixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkYsZUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRyxrQ0FBa0MsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtJQUNuRSxPQUFPLEVBQUUsbU5BQW1OO0NBQzdOLENBQUMsQ0FBQztBQUlILCtEQUErRDtBQUMvRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDckMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDdEIsUUFBUSxFQUFF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QyxNQUFNLENBQUM7SUFDcEMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbkQsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNyRCxDQUFDLENBQUE7QUFFRiw2REFBNkQ7QUFDN0QsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUMzQyxDQUFDLENBQUM7QUFJSCxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxrQkFBa0IsRUFBRSx3QkFBd0I7SUFDNUMsYUFBYSxFQUFFLG1CQUFtQjtJQUNsQyxZQUFZLEVBQUUsa0JBQWtCO0lBQ2hDLFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsaUJBQWlCLEVBQUUsdUJBQXVCO0lBQzFDLGNBQWMsRUFBRSxvQkFBb0I7SUFDcEMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtJQUM3Qyx5QkFBeUIsRUFBRSwrQkFBK0I7SUFDMUQsNEJBQTRCLEVBQUUsa0NBQWtDO0NBQ2pFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJ0BzaW5lcXVhL2NvcmUvYXBwLXV0aWxzJztcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gXCJAc2luZXF1YS9jb3JlL3dlYi1zZXJ2aWNlc1wiO1xuXG4vKipcbiAqIEluZGl2aWR1YWwgbWVzc2FnZSBzZW50ICYgcmV0dXJuZWQgYnkgdGhlIENoYXRHUFQgQVBJLlxuICogSWYgdGhpcyBtZXNzYWdlIGlzIGFuIGF0dGFjaG1lbnQsIHdlIGF0dGFjaCB0aGUgbWluaW1hbFxuICogaW5mb3JtYXRpb24gbmVlZGVkIHRvIHJlY29uc3RydWN0IHRoaXMgYXR0YWNobWVudCAoUmF3QXR0YWNobWVudClcbiAqIGFzIHdlbGwgYXMgdGhlIHJlZmVyZW5jZSBpZCBjb21wdXRlZCBhdCB0aGUgbW9tZW50IG9mIHNlbmRpbmdcbiAqIHRoZSBhdHRhY2htZW50IHRvIHRoZSBBUEkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3TWVzc2FnZSB7XG4gIHJvbGU6IHN0cmluZztcbiAgY29udGVudDogc3RyaW5nO1xuICBtZXNzYWdlVHlwZT86ICdDSEFSVCcgfCAnTUFSS0RPV04nXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55XG4gIH07XG59XG5cbi8qKlxuICogQSBjaGF0IG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgdG8gaW5jbHVkZSB0aGUgbWFya2Rvd24tZm9ybWF0dGVkXG4gKiBjb250ZW50IGZvciBkaXNwbGF5LCBhcyB3ZWxsIGFzIGRldGFpbGVkIGF0dGFjaG1lbnQgZGF0YSwgYW5kIG9wdGlvbmFsbHlcbiAqIGEgbGlzdCBvZiB0aGUgcmVmZXJlbmNlcyBleHRyYWN0ZWQgZnJvbSB0aGF0IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0TWVzc2FnZSBleHRlbmRzIFJhd01lc3NhZ2Uge1xuICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgIGRpc3BsYXk/OiBib29sZWFuO1xuICAgICRwcm9ncmVzcz86IENoYXRQcm9ncmVzc1tdO1xuICAgICRhdHRhY2htZW50PzogQ2hhdENvbnRleHRBdHRhY2htZW50W107XG4gICAgJHN1Z2dlc3RlZEFjdGlvbj86IFN1Z2dlc3RlZEFjdGlvbltdO1xuICAgICRkZWJ1Zz86IERlYnVnTWVzc2FnZVtdO1xuICAgIGZvcmNlZFdvcmtmbG93Pzogc3RyaW5nO1xuICAgIGZvcmNlZFdvcmtmbG93UHJvcGVydGllcz86IGFueTtcbiAgICBxdWVyeT86IFF1ZXJ5O1xuICAgIGlzVXNlcklucHV0PzogYm9vbGVhbjtcbiAgICB1c2FnZU1ldHJpY3M/OiBDaGF0VXNhZ2VNZXRyaWNzO1xuICAgIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXM/OiBhbnk7XG4gICAgJGxpa2VkPzogYm9vbGVhbjtcbiAgICAkZGlzbGlrZWQ/OiBib29sZWFuO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0UHJvZ3Jlc3Mge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgY29udGVudD86IHN0cmluZztcbiAgICBkb25lPzogYm9vbGVhbjtcbiAgICB0aW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhd0F0dGFjaG1lbnQge1xuICAvKiogVHlwZSBvZiB0aGUgYXR0YWNobWVudCAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBSZWNvcmQgaWQgZnJvbSB3aGljaCB0aGlzIGF0dGFjaG1lbnQgaXMgdGFrZW4gKi9cbiAgcmVjb3JkSWQ6IHN0cmluZztcbiAgLyoqIFJlY29yZCBmcm9tIHdoaWNoIHRoaXMgdGhpcyBhdHRhY2htZW50IGlzIHRha2VuICovXG4gIHJlY29yZDogUmVjb3JkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50UGFydCB7XG4gIHBhcnRJZDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29udGV4dEF0dGFjaG1lbnQgZXh0ZW5kcyBSYXdBdHRhY2htZW50IHtcbiAgLyoqIFR5cGUgb2YgdGhlIGF0dGFjaG1lbnQgKi9cbiAgdHlwZTogXCJDb250ZXh0XCI7XG4gIC8qKiBSYW5rIG9mIHRoZSBhdHRhY2htZW50IGluIHRoZSBjb250ZXh0IG1lc3NhZ2UgKi9cbiAgY29udGV4dElkOiBudW1iZXI7XG4gIC8qKiBQYXJ0cyBvZiB0aGUgcmVjb3JkIHRoYXQgdGhlIGFzc2lzdGFudCB1c2VzIHRvIGFuc3dlciAqL1xuICBwYXJ0czogRG9jdW1lbnRQYXJ0W107XG4gIC8qKiBUaGUgc3BlY2lmaWMgaWQgdXNlZCBvZiB0aGUgcmVmZXJlbmNlZCBwYXJ0ICovXG4gICRwYXJ0SWQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmF3IHJlc3BvbnNlIG9mIHRoZSBjaGF0IEFQSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd1Jlc3BvbnNlIHtcbiAgaGlzdG9yeTogUmF3TWVzc2FnZVtdO1xuICBleGVjdXRpb25UaW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRW5yaWNoZWQgcmVzcG9uc2Ugb2YgdGhlIGNoYXQgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFJlc3BvbnNlIGV4dGVuZHMgUmF3UmVzcG9uc2V7XG4gIGhpc3Rvcnk6IENoYXRNZXNzYWdlW107XG59XG5cbi8qKlxuICogUmVzcG9uc2Ugb2YgdGhlIExpc3RNb2RlbHMgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2xsbU1vZGVsRGVzY3JpcHRpb24ge1xuICBwcm92aWRlcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNlcnZpY2VJZDogc3RyaW5nO1xuICBtb2RlbElkOiBzdHJpbmc7XG4gIGVuYWJsZTogYm9vbGVhbjtcbiAgbWF4R2VuZXJhdGlvblNpemU6IG51bWJlcjtcbiAgY29udGV4dFdpbmRvd1NpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBvZiB0aGUgTGlzdEZ1bmN0aW9ucyBBUElcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbGxtRnVuY3Rpb24ge1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgcGFyYW1ldGVyczogR2xsbUZ1bmN0aW9uUGFyYW1ldGVyW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xsbUZ1bmN0aW9uUGFyYW1ldGVyIHtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaXNSZXF1aXJlZDogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWluaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIHNhdmVkIGNoYXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYXZlZENoYXQge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBtb2RpZmllZFVUQzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERhdGEgc3RydWN0dXJlIHNhdmVkIHRvIHJlY29uc3RydWN0IGEgc2F2ZWQgY2hhdCBjb252ZXJzYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYXZlZENoYXRIaXN0b3J5IGV4dGVuZHMgU2F2ZWRDaGF0e1xuICBoaXN0b3J5OiBDaGF0TWVzc2FnZVtdO1xufVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb25TZXR0aW5ncyBvYmplY3RcbmV4cG9ydCBjb25zdCBjb25uZWN0aW9uU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3Rpb25FcnJvck1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIHJlc3RFbmRwb2ludDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB3ZWJzb2NrZXRFbmRwb2ludDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzaWduYWxSVHJhbnNwb3J0OiB6LmVudW0oW1wiV2ViU29ja2V0c1wiLCBcIlNlcnZlclNlbnRFdmVudHNcIiwgXCJMb25nUG9sbGluZ1wiLCBcIk5vbmVcIl0pLFxuICBzaWduYWxSTG9nTGV2ZWw6IHouZW51bShbXCJDcml0aWNhbFwiLCBcIkRlYnVnXCIsIFwiRXJyb3JcIiwgXCJJbmZvcm1hdGlvblwiLCBcIk5vbmVcIiwgXCJUcmFjZVwiLCBcIldhcm5pbmdcIl0pLFxuICBzaWduYWxSU2VydmVyVGltZW91dEluTWlsbGlzZWNvbmRzOiB6Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pLnJlZmluZShkYXRhID0+ICghIWRhdGEucmVzdEVuZHBvaW50IHx8ICEhZGF0YS53ZWJzb2NrZXRFbmRwb2ludCksIHtcbiAgbWVzc2FnZTogXCJCYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5wdXQoKSBwcm90b2NvbCAoJ1JFU1QnIG9yICdXRUJTT0NLRVQnKSB0byB0aGUgQ2hhdCBDb21wb25lbnQsIGVpdGhlciAncmVzdEVuZHBvaW50JyBvciAnd2Vic29ja2V0RW5kcG9pbnQnIHByb3BlcnR5IHNob3VsZCBiZSBwcm92aWRlZCBpbiB0aGUgJ2dsb2JhbFNldHRpbmdzJyBvZiB0aGUgYXNzaXN0YW50IGluc3RhbmNlLlwiLFxufSk7XG4vLyBEZWZpbmUgdGhlIENvbm5lY3Rpb25TZXR0aW5ncyBpbnRlcmZhY2VcbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25TZXR0aW5ncyA9IHouaW5mZXI8dHlwZW9mIGNvbm5lY3Rpb25TZXR0aW5nc1NjaGVtYT47XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgc2VydmljZVNldHRpbmdzIG9iamVjdFxuY29uc3Qgc2VydmljZVNldHRpbmdzU2NoZW1hID0gei5vYmplY3Qoe1xuICBzZXJ2aWNlX2lkOiB6LnN0cmluZygpLFxuICBtb2RlbF9pZDogei5zdHJpbmcoKSxcbiAgdGVtcGVyYXR1cmU6IHoubnVtYmVyKCksXG4gIHRvcF9wOiB6Lm51bWJlcigpLFxuICBtYXhfdG9rZW5zOiB6Lm51bWJlcigpXG59KTtcbi8vIERlZmluZSB0aGUgU2VydmljZVNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlU2V0dGluZ3MgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBzZXJ2aWNlU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYWRkaXRpb25hbFNlcnZpY2VTZXR0aW5ncyBvYmplY3RcbmNvbnN0IGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7fSk7XG4vLyBEZWZpbmUgdGhlIEFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3MgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBhZGRpdGlvbmFsU2VydmljZVNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXMgb2JqZWN0XG5jb25zdCBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzU2NoZW1hID0gei5vYmplY3Qoe30pO1xuLy8gRGVmaW5lIHRoZSBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB1aVNldHRpbmdzIG9iamVjdFxuY29uc3QgdWlTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGlzcGxheTogei5ib29sZWFuKCksXG4gIHNlcnZpY2VzTW9kZWxzOiB6LmJvb2xlYW4oKSxcbiAgZnVuY3Rpb25zOiB6LmJvb2xlYW4oKSxcbiAgdGVtcGVyYXR1cmU6IHouYm9vbGVhbigpLFxuICB0b3BfcDogei5ib29sZWFuKCksXG4gIG1heF90b2tlbnM6IHouYm9vbGVhbigpLFxuICBkZWJ1Zzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheVN5c3RlbVByb21wdDogei5ib29sZWFuKCksXG4gIGRpc3BsYXlVc2VyUHJvbXB0OiB6LmJvb2xlYW4oKVxufSk7XG4vLyBEZWZpbmUgdGhlIFVpU2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFVpU2V0dGluZ3MgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiB1aVNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGRlZmF1bHRWYWx1ZXMgb2JqZWN0XG5jb25zdCBkZWZhdWx0VmFsdWVzU2NoZW1hID0gei5vYmplY3Qoe1xuICBzZXJ2aWNlX2lkOiB6LnN0cmluZygpLFxuICBtb2RlbF9pZDogei5zdHJpbmcoKSxcbiAgZnVuY3Rpb25zOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICBlbmFibGVkOiB6LmJvb2xlYW4oKVxuICAgIH0pXG4gICksXG4gIHRlbXBlcmF0dXJlOiB6Lm51bWJlcigpLFxuICB0b3BfcDogei5udW1iZXIoKSxcbiAgbWF4X3Rva2Vuczogei5udW1iZXIoKSxcbiAgZGVidWc6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKSxcbiAgdXNlclByb21wdDogei5zdHJpbmcoKVxufSk7XG4vLyBEZWZpbmUgdGhlIERlZmF1bHRWYWx1ZXMgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRWYWx1ZXMgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBkZWZhdWx0VmFsdWVzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGFjdGlvbiBvYmplY3RcbmNvbnN0IGFjdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZm9yY2VkV29ya2Zsb3c6IHouc3RyaW5nKCksIC8vIGZvcmNlZFdvcmtmbG93IG11c3QgYmUgYSBzdHJpbmdcbiAgZm9yY2VkV29ya2Zsb3dQcm9wZXJ0aWVzOiB6LnJlY29yZCh6LnVua25vd24oKSkub3B0aW9uYWwoKSAvLyBmb3JjZWRXb3JrZmxvd1Byb3BlcnRpZXMgbXVzdCBiZSBhbiBvYmplY3QgKE1hcCBlcXVpdmFsZW50KVxufSk7XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgbW9kZVNldHRpbmdzIG9iamVjdFxuY29uc3QgaW5pdGlhbGl6YXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGV2ZW50OiB6LmVudW0oWydRdWVyeScsICdQcm9tcHQnXSksXG4gIGZvcmNlZFdvcmtmbG93OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZvcmNlZEZ1bmN0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXlVc2VyUXVlcnk6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pXG4vLyDinYwgUnVsZSAxOiBDYW5ub3QgaGF2ZSBib3RoIGZvcmNlZFdvcmtmbG93IGFuZCBmb3JjZWRGdW5jdGlvblxuLnJlZmluZShkYXRhID0+IChkYXRhLmV2ZW50ICE9PSBcIlF1ZXJ5XCIpIHx8ICEoZGF0YS5mb3JjZWRXb3JrZmxvdyAmJiBkYXRhLmZvcmNlZEZ1bmN0aW9uKSwge1xuICBtZXNzYWdlOiBcIkJvdGggJ2ZvcmNlZEZ1bmN0aW9uJyBhbmQgJ2ZvcmNlZFdvcmtmbG93JyBwcm9wZXJ0aWVzIGFyZSBzZXQsIGJ1dCB0aGV5IHNob3VsZCBub3QuXCIsXG59KVxuLy8g4p2MIFJ1bGUgMjogTXVzdCBoYXZlIG9uZSBvZiBmb3JjZWRXb3JrZmxvdyBvciBmb3JjZWRGdW5jdGlvbiB3aGVuIGV2ZW50IGlzICdRdWVyeSdcbi5yZWZpbmUoZGF0YSA9PiAoZGF0YS5ldmVudCAhPT0gXCJRdWVyeVwiKSB8fCAhIWRhdGEuZm9yY2VkV29ya2Zsb3cgfHwgISFkYXRhLmZvcmNlZEZ1bmN0aW9uLCB7XG4gIG1lc3NhZ2U6IFwiT25lIG9mICdmb3JjZWRXb3JrZmxvdycgb3IgJ2ZvcmNlZEZ1bmN0aW9uJyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdGhlIGluaXRpYWxpemF0aW9uJ3MgZXZlbnQgaXMgJ1F1ZXJ5Jy5cIlxufSlcbi8vIOKdjCBSdWxlIDM6IE11c3QgaGF2ZSBkaXNwbGF5VXNlclF1ZXJ5IHNldCB3aGVuIGV2ZW50IGlzICdRdWVyeSdcbi5yZWZpbmUoZGF0YSA9PiAoZGF0YS5ldmVudCAhPT0gXCJRdWVyeVwiKSB8fCAoZGF0YS5kaXNwbGF5VXNlclF1ZXJ5ICE9PSB1bmRlZmluZWQgJiYgZGF0YS5kaXNwbGF5VXNlclF1ZXJ5ICE9PSBudWxsKSwge1xuICBtZXNzYWdlOiBcIidkaXNwbGF5VXNlclF1ZXJ5JyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdGhlIGluaXRpYWxpemF0aW9uJ3MgZXZlbnQgaXMgJ1F1ZXJ5Jy5cIlxufSk7XG5cbmNvbnN0IG1vZGVTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5hYmxlZFVzZXJJbnB1dDogei5ib29sZWFuKCksXG4gIGRpc3BsYXlVc2VyUHJvbXB0OiB6LmJvb2xlYW4oKSxcbiAgc2VuZFVzZXJQcm9tcHQ6IHouYm9vbGVhbigpLFxuICBpbml0aWFsaXphdGlvbjogaW5pdGlhbGl6YXRpb25TY2hlbWEsXG4gIGFjdGlvbnM6IHoucmVjb3JkKGFjdGlvblNjaGVtYSkub3B0aW9uYWwoKVxufSk7XG4vLyBEZWZpbmUgdGhlIE1vZGVTZXR0aW5ncyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgTW9kZVNldHRpbmdzIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgbW9kZVNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHNhdmVkQ2hhdFNldHRpbmdzIG9iamVjdFxuY29uc3Qgc2F2ZWRDaGF0U2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVuYWJsZWQ6IHouYm9vbGVhbigpLFxuICBkaXNwbGF5OiB6LmJvb2xlYW4oKVxufSlcbi8vIERlZmluZSB0aGUgU2F2ZWRDaGF0U2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVkQ2hhdFNldHRpbmdzIGV4dGVuZHMgei5pbmZlcjx0eXBlb2Ygc2F2ZWRDaGF0U2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZ2xvYmFsU2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBnbG9iYWxTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgc2VhcmNoV2FybmluZ01lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGRpc2NsYWltZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZ2VuZXJpY0NoYXRFcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheVVzZXJRdW90YUNvbnN1bXB0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5Q2hhdFRva2Vuc0NvbnN1bXB0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGF1ZGl0U2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBhdWRpdFNldHRpbmdzU2NoZW1hID0gei5vYmplY3Qoe1xuICBpc3N1ZVR5cGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuLy8gRGVmaW5lIHRoZSBTYXZlZENoYXRTZXR0aW5ncyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZWRDaGF0U2V0dGluZ3MgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBzYXZlZENoYXRTZXR0aW5nc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBlbnRpcmUgQ2hhdENvbmZpZyBvYmplY3RcbmV4cG9ydCBjb25zdCBjaGF0Q29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb25uZWN0aW9uU2V0dGluZ3M6IGNvbm5lY3Rpb25TZXR0aW5nc1NjaGVtYSxcbiAgZGVmYXVsdFZhbHVlczogZGVmYXVsdFZhbHVlc1NjaGVtYSxcbiAgbW9kZVNldHRpbmdzOiBtb2RlU2V0dGluZ3NTY2hlbWEsXG4gIHVpU2V0dGluZ3M6IHVpU2V0dGluZ3NTY2hlbWEsXG4gIHNhdmVkQ2hhdFNldHRpbmdzOiBzYXZlZENoYXRTZXR0aW5nc1NjaGVtYSxcbiAgZ2xvYmFsU2V0dGluZ3M6IGdsb2JhbFNldHRpbmdzU2NoZW1hLFxuICBhdWRpdFNldHRpbmdzOiBhdWRpdFNldHRpbmdzU2NoZW1hLm9wdGlvbmFsKCksXG4gIGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3M6IGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NTY2hlbWEsXG4gIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXM6IGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXNTY2hlbWFcbn0pO1xuLy8gRGVmaW5lIHRoZSBDaGF0Q29uZmlnIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29uZmlnIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgY2hhdENvbmZpZ1NjaGVtYT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0UGF5bG9hZCB7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZnVuY3Rpb25zOiBzdHJpbmdbXTtcbiAgaGlzdG9yeTogQ2hhdE1lc3NhZ2VbXTtcbiAgc2VydmljZVNldHRpbmdzOiBTZXJ2aWNlU2V0dGluZ3M7XG4gIGFwcFF1ZXJ5OiB7XG4gICAgYXBwOiBzdHJpbmc7XG4gICAgcXVlcnk6IFF1ZXJ5IHwgdW5kZWZpbmVkO1xuICAgIHRhcmdldFVybD86IHN0cmluZztcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgfTtcbiAgaW5zdGFuY2VJZD86IHN0cmluZztcbiAgc2F2ZWRDaGF0SWQ/OiBzdHJpbmc7XG4gIGdlbmVyaWNDaGF0RXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25NZXNzYWdlID0ge1xuICBndWlkOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nXG4gIGRpc3BsYXlWYWx1ZT86IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXh0Q2h1bmtzT3B0aW9ucyB7XG4gIGV4dGVuZE1vZGU/OiAnTm9uZScgfCAnU2VudGVuY2UnIHwgJ0NoYXJzJztcbiAgZXh0ZW5kU2NvcGU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGEge1xuICBsYXN0UmVxdWVzdDogc3RyaW5nO1xuICBwcm9tcHRUb2tlbkNvdW50OiBudW1iZXI7XG4gIGNvbXBsZXRpb25Ub2tlbkNvdW50OiBudW1iZXI7XG4gIHBlcmlvZFRva2VuczogbnVtYmVyO1xuICByZXNldEhvdXJzOiBudW1iZXI7XG4gIHRva2VuQ291bnQ6IG51bWJlcjtcbiAgbmV4dFJlc2V0OiBzdHJpbmc7XG4gIGxhc3RSZXNldFVUQzogc3RyaW5nO1xuICBuZXh0UmVzZXRVVEM6IHN0cmluZztcbiAgbWF4UXVvdGFSZWFjaGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3RlZEFjdGlvbiB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRDaGF0IHtcbiAgbWVzc2FnZXM6IFJhd01lc3NhZ2VbXTtcbn1cblxuLyoqXG4gKiBMaXN0IG9mIGV2ZW50cyBkYXRhIHRoYXQgY2FuIGJlIGVtaXR0ZWQgYnkgdGhlIHdlYnNvY2tldCBjaGF0IGVuZHBvaW50XG4gKi9cbmV4cG9ydCB0eXBlIFN1Z2dlc3RlZEFjdGlvbnNFdmVudCA9IHsgc3VnZ2VzdGVkQWN0aW9uczogU3VnZ2VzdGVkQWN0aW9uW10gfTtcbmV4cG9ydCB0eXBlIFF1b3RhRXZlbnQgPSB7IHF1b3RhOiBRdW90YSB9O1xuZXhwb3J0IHR5cGUgTWVzc2FnZUV2ZW50ID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgQ29udGV4dE1lc3NhZ2VFdmVudCA9IHsgY29udGVudDogc3RyaW5nOyBtZXRhZGF0YTogQ2hhdENvbnRleHRBdHRhY2htZW50IH07XG5leHBvcnQgdHlwZSBFcnJvckV2ZW50ID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgQWN0aW9uU3RhcnRFdmVudCA9IHsgZ3VpZDogc3RyaW5nOyBkaXNwbGF5TmFtZTogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBBY3Rpb25SZXN1bHRFdmVudCA9IHsgZ3VpZDogc3RyaW5nOyBkaXNwbGF5VmFsdWU6IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgQWN0aW9uU3RvcEV2ZW50ID0geyBndWlkOiBzdHJpbmc7IGV4ZWN1dGlvblRpbWU6IG51bWJlciB9O1xuZXhwb3J0IHR5cGUgSGlzdG9yeUV2ZW50ID0geyBoaXN0b3J5OiBSYXdNZXNzYWdlW107IGV4ZWN1dGlvblRpbWU6IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgRGVidWdNZXNzYWdlRXZlbnQgPSBEZWJ1Z01lc3NhZ2U7XG5cbi8qKlxuICogRGF0YSBlbWl0dGVkIGJ5IHRoZSBodHRwIGNoYXQgZW5kcG9pbnRcbiAqL1xuZXhwb3J0IHR5cGUgSHR0cENoYXRSZXNwb25zZSA9IHtcbiAgcXVvdGE6IFF1b3RhO1xuICBzdWdnZXN0ZWRBY3Rpb25zOiBTdWdnZXN0ZWRBY3Rpb25bXTtcbiAgZGVidWc6IGFueTtcbiAgY29udGV4dDogeyBjb250ZW50OiBzdHJpbmc7IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBDaGF0Q29udGV4dEF0dGFjaG1lbnQgfVtdO1xuICBhY3Rpb25zOiBBY3Rpb25NZXNzYWdlW107XG4gIGhpc3Rvcnk6IFJhd01lc3NhZ2VbXTtcbiAgZXhlY3V0aW9uVGltZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuQ29uc3VtcHRpb24ge1xuICBwZXJjZW50YWdlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclRva2VuQ29uc3VtcHRpb24gZXh0ZW5kcyBUb2tlbkNvbnN1bXB0aW9uIHtcbiAgbmV4dFJlc2V0RGF0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRVc2FnZU1ldHJpY3Mge1xuICB0b3RhbFRva2VuQ291bnQ6IG51bWJlcjtcbiAgcHJvbXB0VG9rZW5Db3VudDogbnVtYmVyO1xuICBjb21wbGV0aW9uVG9rZW5Db3VudDogbnVtYmVyO1xuICB0b2tlbml6ZXJUeXBlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLdk9iamVjdCB7XG4gIGRhdGE6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55OyAvLyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCB8IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIH07XG4gIHR5cGU6ICdLVic7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE9iamVjdCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ0xJU1QnO1xuICBpc0Vycm9yOiBib29sZWFuO1xuICBpdGVtczogKEt2T2JqZWN0IHwgTGlzdE9iamVjdClbXTtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERlYnVnTWVzc2FnZSA9IEt2T2JqZWN0IHwgTGlzdE9iamVjdDtcblxuXG5leHBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlcjxUPiA9IHtcbiAgaGFuZGxlcjogKGRhdGE6IFQpID0+IHZvaWQ7XG4gIGlzR2xvYmFsSGFuZGxlcjogYm9vbGVhbjtcbn07XG5cbiJdfQ==