@tutti-os/agent-gui 0.0.107 → 0.0.108

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 (126) hide show
  1. package/dist/{AgentGUI-Do6py-T_.d.ts → AgentGUI-CkxdEB8F.d.ts} +6 -3
  2. package/dist/AgentRichTextReadonly-42TUVYX5.js +18 -0
  3. package/dist/agent-conversation/index.d.ts +4 -4
  4. package/dist/agent-conversation/index.js +13 -12
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.js +1 -1
  7. package/dist/agent-gui.d.ts +5 -4
  8. package/dist/agent-gui.js +27 -25
  9. package/dist/agent-message-center/index.d.ts +3 -1
  10. package/dist/agent-message-center/index.js +22 -10
  11. package/dist/agent-message-center/index.js.map +1 -1
  12. package/dist/{agentConversationVM-Bf3Zv3iI.d.ts → agentConversationVM-D3Dn2LqN.d.ts} +18 -2
  13. package/dist/{agentGuiNodeTypes-DbgQBiYz.d.ts → agentGuiNodeTypes-B3N_hJZp.d.ts} +5 -3
  14. package/dist/agents.d.ts +1 -1
  15. package/dist/agents.js +1 -1
  16. package/dist/app/renderer/agentactivity.css +64 -2
  17. package/dist/app/renderer/assets/icons/agent-vinyl-beta-tag.svg +5 -0
  18. package/dist/{chunk-OWW7CU4U.js → chunk-25BPR75P.js} +2 -2
  19. package/dist/{chunk-N4WVVCNI.js → chunk-2QHKXI5N.js} +2 -2
  20. package/dist/{chunk-KJQERFKX.js → chunk-6CUELYIF.js} +3 -3
  21. package/dist/chunk-6CUELYIF.js.map +1 -0
  22. package/dist/{chunk-TKBEVCHG.js → chunk-7BN2WQ2M.js} +32 -2
  23. package/dist/chunk-7BN2WQ2M.js.map +1 -0
  24. package/dist/chunk-7KVZPJ3O.js +25 -0
  25. package/dist/chunk-7KVZPJ3O.js.map +1 -0
  26. package/dist/{chunk-C35SNDVZ.js → chunk-7OYHDOGG.js} +2 -1
  27. package/dist/chunk-7OYHDOGG.js.map +1 -0
  28. package/dist/{chunk-4ZWV57MF.js → chunk-AIZJHA4Q.js} +14 -9
  29. package/dist/chunk-AIZJHA4Q.js.map +1 -0
  30. package/dist/{chunk-QY22OBJS.js → chunk-AY5AFMT2.js} +8 -84
  31. package/dist/chunk-AY5AFMT2.js.map +1 -0
  32. package/dist/{chunk-V5ROOS2O.js → chunk-BM3CSFWU.js} +22 -6
  33. package/dist/chunk-BM3CSFWU.js.map +1 -0
  34. package/dist/{chunk-F7Q7QK42.js → chunk-BRLKORQI.js} +1432 -1902
  35. package/dist/chunk-BRLKORQI.js.map +1 -0
  36. package/dist/{chunk-LDZ6C3YV.js → chunk-E74BMFHI.js} +3 -3
  37. package/dist/chunk-E74BMFHI.js.map +1 -0
  38. package/dist/{chunk-ZSJBCZUH.js → chunk-EBXOSQ5G.js} +102 -73
  39. package/dist/chunk-EBXOSQ5G.js.map +1 -0
  40. package/dist/chunk-J4K7KIFZ.js +75 -0
  41. package/dist/chunk-J4K7KIFZ.js.map +1 -0
  42. package/dist/{chunk-UFIEUC3Y.js → chunk-JBX3JPTC.js} +9 -8
  43. package/dist/chunk-JBX3JPTC.js.map +1 -0
  44. package/dist/{chunk-4YVKAPKW.js → chunk-JLRPIEIE.js} +2 -17
  45. package/dist/chunk-JLRPIEIE.js.map +1 -0
  46. package/dist/{chunk-ZWY32ZKZ.js → chunk-KXZMIZ5H.js} +1269 -728
  47. package/dist/chunk-KXZMIZ5H.js.map +1 -0
  48. package/dist/{chunk-4YG7YK7S.js → chunk-L2GENUG3.js} +3 -3
  49. package/dist/{chunk-J2HG7UCP.js → chunk-OEYXSD3O.js} +3 -3
  50. package/dist/{chunk-P3CVAWGJ.js → chunk-QTW5CH62.js} +5 -5
  51. package/dist/{chunk-L3GMMGRS.js → chunk-R2ZADXRB.js} +2 -2
  52. package/dist/chunk-R7AXDQCA.js +146 -0
  53. package/dist/chunk-R7AXDQCA.js.map +1 -0
  54. package/dist/{chunk-7MPN2JGL.js → chunk-U4CVBCHD.js} +37 -119
  55. package/dist/chunk-U4CVBCHD.js.map +1 -0
  56. package/dist/{chunk-BXOKBZH4.js → chunk-UFD2QKGC.js} +9 -6
  57. package/dist/chunk-UFD2QKGC.js.map +1 -0
  58. package/dist/{chunk-4YCCATI4.js → chunk-USIFGHT3.js} +17 -4
  59. package/dist/chunk-USIFGHT3.js.map +1 -0
  60. package/dist/{chunk-7BXWPI4F.js → chunk-VMQNG2KI.js} +13 -1
  61. package/dist/{chunk-7BXWPI4F.js.map → chunk-VMQNG2KI.js.map} +1 -1
  62. package/dist/{chunk-SN6UYX54.js → chunk-W6TO6K2X.js} +4 -4
  63. package/dist/{chunk-UGVI47X6.js → chunk-YNSXUEIR.js} +6 -6
  64. package/dist/context-mention-palette/index.js +13 -12
  65. package/dist/{contribution-C6K5YfJ7.d.ts → contribution-C2LDwLA7.d.ts} +3 -2
  66. package/dist/dock-icons.js +3 -3
  67. package/dist/i18n/index.d.ts +31 -1
  68. package/dist/i18n/index.js +2 -2
  69. package/dist/index.d.ts +8 -7
  70. package/dist/index.js +27 -25
  71. package/dist/index.js.map +1 -1
  72. package/dist/mention-search.js +11 -10
  73. package/dist/provider-icons.js +1 -1
  74. package/dist/provider-identity.js +1 -1
  75. package/dist/{types-CnT8rNUI.d.ts → types-yF_0mrNS.d.ts} +1 -0
  76. package/dist/workbench/contribution.d.ts +2 -2
  77. package/dist/workbench/contribution.js +11 -11
  78. package/dist/workbench/index.d.ts +4 -4
  79. package/dist/workbench/index.js +22 -28
  80. package/dist/workbench/launch.d.ts +11 -14
  81. package/dist/workbench/launch.js +5 -11
  82. package/dist/workbench/providerCatalog.js +2 -2
  83. package/dist/workbench/sessionTitle.js +3 -3
  84. package/dist/workbench/state.d.ts +2 -12
  85. package/dist/workbench/state.js +3 -9
  86. package/dist/workspace-agent-generated-files.js +2 -1
  87. package/dist/workspace-query-cache.d.ts +19 -0
  88. package/dist/workspace-query-cache.js +7 -0
  89. package/dist/workspace-query-cache.js.map +1 -0
  90. package/package.json +21 -14
  91. package/dist/@-bold-lined-BLLFKBFI.svg +0 -10
  92. package/dist/AgentRichTextReadonly-F6PHC5SX.js +0 -18
  93. package/dist/add-lined-bold-5QPUDZCU.svg +0 -3
  94. package/dist/chunk-4YCCATI4.js.map +0 -1
  95. package/dist/chunk-4YVKAPKW.js.map +0 -1
  96. package/dist/chunk-4ZWV57MF.js.map +0 -1
  97. package/dist/chunk-7MPN2JGL.js.map +0 -1
  98. package/dist/chunk-BXOKBZH4.js.map +0 -1
  99. package/dist/chunk-C35SNDVZ.js.map +0 -1
  100. package/dist/chunk-F7Q7QK42.js.map +0 -1
  101. package/dist/chunk-H6IQ63DQ.js +0 -14
  102. package/dist/chunk-H6IQ63DQ.js.map +0 -1
  103. package/dist/chunk-KJQERFKX.js.map +0 -1
  104. package/dist/chunk-LDZ6C3YV.js.map +0 -1
  105. package/dist/chunk-QY22OBJS.js.map +0 -1
  106. package/dist/chunk-TKBEVCHG.js.map +0 -1
  107. package/dist/chunk-UFIEUC3Y.js.map +0 -1
  108. package/dist/chunk-V5ROOS2O.js.map +0 -1
  109. package/dist/chunk-ZSJBCZUH.js.map +0 -1
  110. package/dist/chunk-ZWY32ZKZ.js.map +0 -1
  111. package/dist/claudecode-flat-filled-NHO4JCVK.svg +0 -10
  112. package/dist/codex-flat-filled-WYHCF5VR.svg +0 -10
  113. package/dist/cursor-flat-filled-CL7N3BTZ.svg +0 -3
  114. package/dist/handoff-lined-4WQUBVG3.svg +0 -11
  115. package/dist/open-link-lined-JWEKUKME.svg +0 -4
  116. package/dist/opencode-flat-filled-CYAJPX45.svg +0 -4
  117. package/dist/tutti-flat-filled-K32QBTZE.svg +0 -12
  118. /package/dist/{AgentRichTextReadonly-F6PHC5SX.js.map → AgentRichTextReadonly-42TUVYX5.js.map} +0 -0
  119. /package/dist/{chunk-OWW7CU4U.js.map → chunk-25BPR75P.js.map} +0 -0
  120. /package/dist/{chunk-N4WVVCNI.js.map → chunk-2QHKXI5N.js.map} +0 -0
  121. /package/dist/{chunk-4YG7YK7S.js.map → chunk-L2GENUG3.js.map} +0 -0
  122. /package/dist/{chunk-J2HG7UCP.js.map → chunk-OEYXSD3O.js.map} +0 -0
  123. /package/dist/{chunk-P3CVAWGJ.js.map → chunk-QTW5CH62.js.map} +0 -0
  124. /package/dist/{chunk-L3GMMGRS.js.map → chunk-R2ZADXRB.js.map} +0 -0
  125. /package/dist/{chunk-SN6UYX54.js.map → chunk-W6TO6K2X.js.map} +0 -0
  126. /package/dist/{chunk-UGVI47X6.js.map → chunk-YNSXUEIR.js.map} +0 -0
@@ -1,3 +1,6 @@
1
+ import {
2
+ createWorkspaceQueryCache
3
+ } from "./chunk-J4K7KIFZ.js";
1
4
  import {
2
5
  AGENT_GUI_COLLAPSED_MIN_WIDTH_PX,
3
6
  AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
@@ -9,11 +12,12 @@ import {
9
12
  resolveAgentGuiSessionProviderFlatIconUrl,
10
13
  resolveNextAgentGUIConversationRailWidthPx,
11
14
  shouldAutoCollapseAgentGUIConversationRail
12
- } from "./chunk-ZSJBCZUH.js";
15
+ } from "./chunk-EBXOSQ5G.js";
13
16
  import {
14
17
  AGENT_PROVIDERS,
15
18
  AGENT_PROVIDER_LABEL,
16
19
  deriveAgentGUIOptimisticConversationTitle,
20
+ isAgentGUIConversationTitleIconMentionKind,
17
21
  isAgentGUIProviderUnresolved,
18
22
  normalizeAgentGUIProviderIdentity,
19
23
  resolveAgentGUIConversationBrowserFreeTitle,
@@ -25,10 +29,10 @@ import {
25
29
  resolveAgentGUIFirstUserMessageDisplayPrompt,
26
30
  resolveAgentGUIProviderDisplayLabel,
27
31
  resolveAgentGUIProviderIdentity
28
- } from "./chunk-V5ROOS2O.js";
32
+ } from "./chunk-BM3CSFWU.js";
29
33
  import {
30
34
  resolveAgentGuiWorkbenchProviderLabel
31
- } from "./chunk-L3GMMGRS.js";
35
+ } from "./chunk-R2ZADXRB.js";
32
36
  import {
33
37
  AgentConversationFlow,
34
38
  Button,
@@ -60,7 +64,7 @@ import {
60
64
  toLocalShortDateTime,
61
65
  updateAgentComposerDraft,
62
66
  useProjectedAgentConversation
63
- } from "./chunk-F7Q7QK42.js";
67
+ } from "./chunk-BRLKORQI.js";
64
68
  import {
65
69
  agentRichTextContentToPromptText,
66
70
  createAgentRichTextInputExtensions,
@@ -70,25 +74,25 @@ import {
70
74
  plainTextToAgentRichTextInlineContent,
71
75
  skillDescriptionForDisplay,
72
76
  skillTriggerForPrefix
73
- } from "./chunk-UFIEUC3Y.js";
77
+ } from "./chunk-JBX3JPTC.js";
74
78
  import {
75
79
  openAgentEnvPanel
76
- } from "./chunk-7BXWPI4F.js";
80
+ } from "./chunk-VMQNG2KI.js";
77
81
  import {
78
82
  AgentFileMentionPalette,
79
83
  agentMentionItemKey
80
- } from "./chunk-P3CVAWGJ.js";
84
+ } from "./chunk-QTW5CH62.js";
81
85
  import {
82
86
  normalizeAgentGUIAgents,
83
87
  projectAgentGUIAgentsToInternalTargets
84
- } from "./chunk-C35SNDVZ.js";
88
+ } from "./chunk-7OYHDOGG.js";
85
89
  import {
86
90
  AGENT_MENTION_FILTER_TAB_ORDER,
87
91
  AgentMentionSearchController,
88
92
  DEFAULT_AGENT_MENTION_FILTER,
89
93
  agentGuiScheduler,
90
94
  buildWorkspaceAgentActivityListViewModel
91
- } from "./chunk-BXOKBZH4.js";
95
+ } from "./chunk-UFD2QKGC.js";
92
96
  import {
93
97
  AGENT_RICH_TEXT_CARET_ANCHOR,
94
98
  createAgentSessionMarkdownLink,
@@ -99,7 +103,7 @@ import {
99
103
  mentionItemToAttrs,
100
104
  normalizeAgentSessionMentionTitle,
101
105
  parseMentionItemFromHref
102
- } from "./chunk-J2HG7UCP.js";
106
+ } from "./chunk-OEYXSD3O.js";
103
107
  import {
104
108
  AgentInteractivePromptSurface,
105
109
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
@@ -109,15 +113,16 @@ import {
109
113
  dispatchAgentPlanPromptAction,
110
114
  latestPlanTurnId,
111
115
  planImplementationPromptFromPlanTurn
112
- } from "./chunk-4ZWV57MF.js";
116
+ } from "./chunk-AIZJHA4Q.js";
113
117
  import {
114
118
  useEngineSelector
115
119
  } from "./chunk-2RQM7PJN.js";
116
120
  import {
117
121
  AgentMessageMarkdown,
118
122
  ZoomableImage,
123
+ normalizeAgentApprovalPurpose,
119
124
  resolveWorkspaceLinkAction
120
- } from "./chunk-7MPN2JGL.js";
125
+ } from "./chunk-U4CVBCHD.js";
121
126
  import {
122
127
  AgentTargetPresentationProvider,
123
128
  cn,
@@ -135,36 +140,37 @@ import {
135
140
  useAgentHostApi,
136
141
  useOptionalAgentActivityRuntime,
137
142
  useOptionalAgentHostApi
138
- } from "./chunk-LDZ6C3YV.js";
143
+ } from "./chunk-E74BMFHI.js";
139
144
  import {
140
145
  MANAGED_AGENT_ICON_FALLBACK_URL,
141
146
  MANAGED_AGENT_ICON_URLS,
142
147
  MANAGED_AGENT_PROVIDER_RAIL_ICON_URLS
143
- } from "./chunk-SN6UYX54.js";
148
+ } from "./chunk-W6TO6K2X.js";
144
149
  import {
150
+ isBetaAgentProvider,
145
151
  normalizeManagedAgentProvider
146
- } from "./chunk-H6IQ63DQ.js";
152
+ } from "./chunk-7KVZPJ3O.js";
147
153
  import {
148
154
  AgentGuiI18nProvider,
149
155
  translate,
150
156
  useTranslation
151
- } from "./chunk-OWW7CU4U.js";
157
+ } from "./chunk-25BPR75P.js";
152
158
  import {
153
159
  migratedAgentGUIProviderIdentityCatalog,
154
160
  resolveAgentGUIProviderCatalogIdentity,
155
161
  resolveMigratedAgentGUIProviderIdentity
156
- } from "./chunk-KJQERFKX.js";
162
+ } from "./chunk-6CUELYIF.js";
157
163
  import {
158
164
  agentColorfulUrl,
159
165
  resolveProviderIconAsset
160
- } from "./chunk-UGVI47X6.js";
166
+ } from "./chunk-YNSXUEIR.js";
161
167
 
162
168
  // AgentGUI.tsx
163
169
  import { memo as memo15 } from "react";
164
170
  import { TooltipProvider as TooltipProvider5 } from "@tutti-os/ui-system";
165
171
 
166
172
  // agent-gui/agentGuiNode/AgentGUINode.tsx
167
- import { memo as memo14, useCallback as useCallback50, useEffect as useEffect39, useMemo as useMemo39 } from "react";
173
+ import { memo as memo14, useCallback as useCallback51, useEffect as useEffect39, useMemo as useMemo39 } from "react";
168
174
  import { createWorkspaceUserProjectI18nRuntime } from "@tutti-os/workspace-user-project/i18n";
169
175
  import { createWorkspaceFileManagerI18nRuntime } from "@tutti-os/workspace-file-manager";
170
176
  import { useReferenceProvenanceFilterCatalog } from "@tutti-os/workspace-file-reference/react";
@@ -2019,7 +2025,7 @@ import {
2019
2025
  selectEngineSessionIsRespondingToInteraction as selectEngineSessionIsRespondingToInteraction2,
2020
2026
  selectWorkspaceAgentConsumerSessions as selectWorkspaceAgentConsumerSessions2
2021
2027
  } from "@tutti-os/agent-activity-core";
2022
- import { useCallback as useCallback24, useEffect as useEffect14, useMemo as useMemo18, useRef as useRef17 } from "react";
2028
+ import { useCallback as useCallback25, useEffect as useEffect14, useMemo as useMemo18, useRef as useRef18 } from "react";
2023
2029
 
2024
2030
  // host/agentHostAccountStore.ts
2025
2031
  import { create as create2 } from "zustand";
@@ -2333,6 +2339,8 @@ function mergeMessageSnapshot(previous, next) {
2333
2339
  return {
2334
2340
  ...previous,
2335
2341
  ...next,
2342
+ sequence: next.sequence ?? previous?.sequence,
2343
+ createdAtUnixMs: next.createdAtUnixMs ?? previous?.createdAtUnixMs,
2336
2344
  ...semantics ? { semantics } : {},
2337
2345
  payload: {
2338
2346
  ...previous?.payload ?? {},
@@ -2388,6 +2396,11 @@ function workspaceTimelineFields(workspaceId) {
2388
2396
  };
2389
2397
  }
2390
2398
  function compareMessagesByDisplayOrder(left, right) {
2399
+ const leftSequence = normalizedPositiveNumber(left.sequence);
2400
+ const rightSequence = normalizedPositiveNumber(right.sequence);
2401
+ if (leftSequence > 0 && rightSequence > 0 && leftSequence !== rightSequence) {
2402
+ return leftSequence - rightSequence;
2403
+ }
2391
2404
  const leftTime = messageDisplayOrderTime(left);
2392
2405
  const rightTime = messageDisplayOrderTime(right);
2393
2406
  if (leftTime > 0 && rightTime > 0 && leftTime !== rightTime) {
@@ -2408,7 +2421,7 @@ function normalizedPositiveNumber(value) {
2408
2421
  return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
2409
2422
  }
2410
2423
  function messageDisplayOrderTime(message) {
2411
- return normalizedPositiveNumber(message.startedAtUnixMs) || normalizedPositiveNumber(message.occurredAtUnixMs) || normalizedPositiveNumber(message.completedAtUnixMs);
2424
+ return normalizedPositiveNumber(message.startedAtUnixMs) || normalizedPositiveNumber(message.createdAtUnixMs) || normalizedPositiveNumber(message.occurredAtUnixMs) || normalizedPositiveNumber(message.completedAtUnixMs);
2412
2425
  }
2413
2426
  function toolCallItemType(status) {
2414
2427
  switch (normalizeToken(status)) {
@@ -3244,6 +3257,7 @@ function buildAgentGUIConversationDetail({
3244
3257
  const detail = buildWorkspaceAgentSessionDetailViewModel({
3245
3258
  activity: resolvedActivity,
3246
3259
  session,
3260
+ sessionTurns: conversation.sessionTurns,
3247
3261
  timelineItems: [...timelineItems],
3248
3262
  workspaceRoot
3249
3263
  });
@@ -3758,6 +3772,11 @@ function resolveAgentGUIAgentTarget(input) {
3758
3772
  );
3759
3773
  return targetById.get(input.defaultAgentTargetId?.trim() ?? "") ?? targetById.get(localAgentGUIAgentTargetId(input.provider)) ?? agentTargets.find((target) => target.disabled !== true) ?? agentTargets[0] ?? (input.useStaticCatalog === false ? null : createLocalAgentGUIAgentTarget(input.provider));
3760
3774
  }
3775
+ function isAgentGUIAgentTargetComingSoon(target, comingSoonProviders = []) {
3776
+ return Boolean(
3777
+ target && (target.availability?.status === "coming_soon" || comingSoonProviders.includes(target.provider))
3778
+ );
3779
+ }
3761
3780
  function agentGUIAgentTargetRefsEqual(left, right) {
3762
3781
  if (left === right) {
3763
3782
  return true;
@@ -4900,7 +4919,7 @@ function useAgentConversationMessagePaging(input) {
4900
4919
  if (!agentSessionId) return;
4901
4920
  const current = inputRef.current;
4902
4921
  const activationStatus = current.reload.getActivationStatus(agentSessionId);
4903
- if (activationStatus === "failed" || activationStatus === "requested" || activationStatus === "uncertain")
4922
+ if (activationStatus === "failed" || activationStatus === "canceled" || activationStatus === "requested" || activationStatus === "uncertain")
4904
4923
  return;
4905
4924
  if (options.reloadConversations) {
4906
4925
  current.reload.syncConversationList(agentSessionId);
@@ -5145,12 +5164,16 @@ function interactiveApprovalFromInteraction(interaction) {
5145
5164
  };
5146
5165
  }).filter((option) => option !== null);
5147
5166
  if (!callId || normalizedOptions.length === 0) return null;
5167
+ const approvalPurpose = normalizeAgentApprovalPurpose(
5168
+ interaction.metadata?.approvalPurpose
5169
+ );
5148
5170
  return {
5149
5171
  kind: "approval",
5150
5172
  id: `approval:${callId}`,
5151
5173
  turnId: interaction.turnId,
5152
5174
  requestId: interaction.requestId,
5153
5175
  callId,
5176
+ ...approvalPurpose ? { approvalPurpose } : {},
5154
5177
  title: interaction.toolName?.trim() || "Approval required",
5155
5178
  status: "waiting_approval",
5156
5179
  toolName: interaction.toolName?.trim() || null,
@@ -5308,7 +5331,7 @@ function stabilizeConversationDetail(previous, next) {
5308
5331
  previous.activity,
5309
5332
  next.activity
5310
5333
  );
5311
- if (previous.cwd === next.cwd && previous.workspaceRoot === next.workspaceRoot && previous.showProcessingIndicator === next.showProcessingIndicator && previous.turns === next.turns && previous.session === session && previous.activity === activity) {
5334
+ if (previous.cwd === next.cwd && previous.workspaceRoot === next.workspaceRoot && previous.showProcessingIndicator === next.showProcessingIndicator && previous.turns === next.turns && previous.sessionTurns === next.sessionTurns && previous.session === session && previous.activity === activity) {
5312
5335
  return previous;
5313
5336
  }
5314
5337
  return {
@@ -5979,6 +6002,9 @@ function useAgentGUIActivation({
5979
6002
  }
5980
6003
 
5981
6004
  // agent-gui/agentGuiNode/controller/useAgentGUIActiveMessages.ts
6005
+ import {
6006
+ isPendingActivationViable
6007
+ } from "@tutti-os/agent-activity-core";
5982
6008
  import { useMemo as useMemo4 } from "react";
5983
6009
 
5984
6010
  // host/workspaceAgentSessionMessages.ts
@@ -6045,7 +6071,7 @@ function useAgentGUIActiveMessages(input) {
6045
6071
  workspaceId
6046
6072
  })
6047
6073
  );
6048
- const pendingActivationMessage = activePendingActivation?.mode === "new" && activePendingActivation.status !== "failed" && activePendingActivation.clientSubmitId && activePendingActivation.content.length > 0 ? createOptimisticPromptMessage({
6074
+ const pendingActivationMessage = activePendingActivation?.mode === "new" && isPendingActivationViable(activePendingActivation) && activePendingActivation.clientSubmitId && activePendingActivation.content.length > 0 ? createOptimisticPromptMessage({
6049
6075
  agentSessionId: activePendingActivation.agentSessionId,
6050
6076
  clientSubmitId: activePendingActivation.clientSubmitId,
6051
6077
  content: [...activePendingActivation.content],
@@ -6077,7 +6103,9 @@ function useAgentGUIActiveMessages(input) {
6077
6103
 
6078
6104
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationRouting.ts
6079
6105
  import {
6106
+ isPendingActivationViable as isPendingActivationViable2,
6080
6107
  selectEngineSessionReconcile,
6108
+ selectLatestActivationForSession as selectLatestActivationForSession2,
6081
6109
  selectWorkspaceAgentConsumerSession
6082
6110
  } from "@tutti-os/agent-activity-core";
6083
6111
  import { useCallback as useCallback6, useEffect as useEffect3 } from "react";
@@ -6247,6 +6275,16 @@ function useAgentGUIConversationRouting(input) {
6247
6275
  ensureTransientOpenSessionConversation(requestedId);
6248
6276
  return;
6249
6277
  }
6278
+ if (intent.tag !== "home") {
6279
+ const activation = selectLatestActivationForSession2(
6280
+ sessionEngine.getSnapshot(),
6281
+ intent.id
6282
+ );
6283
+ if (activation?.mode === "new" && !isPendingActivationViable2(activation)) {
6284
+ setIntent({ tag: "home" });
6285
+ return;
6286
+ }
6287
+ }
6250
6288
  switch (intent.tag) {
6251
6289
  case "home":
6252
6290
  return;
@@ -6278,8 +6316,9 @@ function useAgentGUIConversationRouting(input) {
6278
6316
 
6279
6317
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationSelectionController.ts
6280
6318
  import {
6319
+ isPendingActivationViable as isPendingActivationViable3,
6281
6320
  selectEngineSessionDetailHydrated,
6282
- selectLatestActivationForSession
6321
+ selectLatestActivationForSession as selectLatestActivationForSession3
6283
6322
  } from "@tutti-os/agent-activity-core";
6284
6323
  import { useEffect as useEffect4 } from "react";
6285
6324
  function clearFailedAgentGUIActivationSelection(current, failedAgentSessionId) {
@@ -6325,7 +6364,7 @@ function useAgentGUIConversationSelectionController(input) {
6325
6364
  });
6326
6365
  }, [currentUserId, sessionEngine, workspaceId]);
6327
6366
  useEffect4(() => {
6328
- if (activePendingActivation?.mode === "new" && activePendingActivation.status === "failed" && activeConversationIdRef.current === activePendingActivation.agentSessionId) {
6367
+ if (activePendingActivation?.mode === "new" && !isPendingActivationViable3(activePendingActivation) && activeConversationIdRef.current === activePendingActivation.agentSessionId) {
6329
6368
  activeConversationIdRef.current = null;
6330
6369
  setActiveConversationId(null);
6331
6370
  isComposerHomeRef.current = true;
@@ -6337,9 +6376,11 @@ function useAgentGUIConversationSelectionController(input) {
6337
6376
  activePendingActivation.agentSessionId
6338
6377
  )
6339
6378
  );
6340
- setDetailError(
6341
- activePendingActivation.errorMessage || translate("agentHost.agentGui.sessionActivationFailed")
6342
- );
6379
+ if (activePendingActivation.status === "failed") {
6380
+ setDetailError(
6381
+ activePendingActivation.errorMessage || translate("agentHost.agentGui.sessionActivationFailed")
6382
+ );
6383
+ }
6343
6384
  return;
6344
6385
  }
6345
6386
  if (!activeConversationId) return;
@@ -6406,7 +6447,7 @@ function useAgentGUIConversationSelectionController(input) {
6406
6447
  activation: {
6407
6448
  forget: activation.clearFailure,
6408
6449
  isPending: (agentSessionId) => isPendingNewConversationActivation(
6409
- selectLatestActivationForSession(
6450
+ selectLatestActivationForSession3(
6410
6451
  sessionEngine.getSnapshot(),
6411
6452
  agentSessionId
6412
6453
  )
@@ -6484,6 +6525,7 @@ import { useMemo as useMemo6, useRef as useRef7, useState as useState3 } from "r
6484
6525
  // contexts/workspace/presentation/renderer/agentGuiConversationList/useAgentGuiConversationList.ts
6485
6526
  import { useMemo as useMemo5 } from "react";
6486
6527
  import {
6528
+ isPendingActivationViable as isPendingActivationViable4,
6487
6529
  selectWorkspaceAgentConsumerSessions,
6488
6530
  selectPendingActivations,
6489
6531
  selectWorkspaceReconcileState
@@ -6593,11 +6635,11 @@ function useAgentGuiConversationList(engine, query, agentTargets = EMPTY_AGENT_G
6593
6635
  );
6594
6636
  const latestNewActivationBySessionId = new Map(
6595
6637
  pendingActivations.filter(
6596
- (activation) => activation.mode === "new" && activation.status !== "failed"
6638
+ (activation) => activation.mode === "new" && isPendingActivationViable4(activation)
6597
6639
  ).map((activation) => [activation.agentSessionId, activation])
6598
6640
  );
6599
6641
  const pendingConversations = pendingActivations.filter(
6600
- (activation) => activation.mode === "new" && activation.status !== "failed" && !canonicalIds.has(activation.agentSessionId)
6642
+ (activation) => activation.mode === "new" && isPendingActivationViable4(activation) && !canonicalIds.has(activation.agentSessionId)
6601
6643
  ).map((activation) => {
6602
6644
  const target = agentTargets.find(
6603
6645
  (candidate) => candidate.agentTargetId === activation.agentTargetId
@@ -6918,7 +6960,7 @@ function useAgentGUIComposerCapabilities(input) {
6918
6960
 
6919
6961
  // agent-gui/agentGuiNode/controller/useAgentGUIComposerOptionsSync.ts
6920
6962
  import {
6921
- selectLatestActivationForSession as selectLatestActivationForSession2
6963
+ selectLatestActivationForSession as selectLatestActivationForSession4
6922
6964
  } from "@tutti-os/agent-activity-core";
6923
6965
  import { useCallback as useCallback7, useEffect as useEffect5, useRef as useRef8 } from "react";
6924
6966
 
@@ -7128,21 +7170,6 @@ function useAgentGUIComposerOptionsSync(input) {
7128
7170
  ]
7129
7171
  );
7130
7172
  input.loadDraftComposerOptionsRef.current = loadDraftComposerOptions;
7131
- useEffect5(() => {
7132
- if (input.previewMode) return;
7133
- const projectKey = `${input.composerTargetData.agentTargetId ?? input.composerTargetData.provider}\0${input.selectedProjectPath ?? ""}`;
7134
- const previous = input.composerOptionsProjectKeyRef.current;
7135
- input.composerOptionsProjectKeyRef.current = projectKey;
7136
- if (previous !== null && previous !== projectKey) {
7137
- loadDraftComposerOptions({ force: true });
7138
- }
7139
- }, [
7140
- input.composerTargetData.agentTargetId,
7141
- input.composerTargetData.provider,
7142
- input.previewMode,
7143
- input.selectedProjectPath,
7144
- loadDraftComposerOptions
7145
- ]);
7146
7173
  useEffect5(() => {
7147
7174
  if (input.previewMode) return void 0;
7148
7175
  return subscribeCoalesced(
@@ -7190,6 +7217,7 @@ function useAgentGUIComposerOptionsSync(input) {
7190
7217
  input.isCreatingConversation,
7191
7218
  input.previewMode,
7192
7219
  input.providerComposerOptions?.behavior?.prewarmDraftSession,
7220
+ input.selectedProjectPath,
7193
7221
  loadDraftComposerOptions
7194
7222
  ]);
7195
7223
  useEffect5(() => {
@@ -7207,11 +7235,11 @@ function useAgentGUIComposerOptionsSync(input) {
7207
7235
  ]);
7208
7236
  useEffect5(() => {
7209
7237
  if (input.previewMode || !input.activeConversationId) return;
7210
- const activation = selectLatestActivationForSession2(
7238
+ const activation = selectLatestActivationForSession4(
7211
7239
  input.sessionEngine.getSnapshot(),
7212
7240
  input.activeConversationId
7213
7241
  );
7214
- if (activation?.status === "failed" || activation?.status === "requested" || activation?.status === "uncertain") {
7242
+ if (activation?.status === "failed" || activation?.status === "canceled" || activation?.status === "requested" || activation?.status === "uncertain") {
7215
7243
  return;
7216
7244
  }
7217
7245
  input.reloadSelectedConversation(input.activeConversationId, {
@@ -7224,7 +7252,7 @@ function useAgentGUIComposerOptionsSync(input) {
7224
7252
  input.reloadSelectedConversation,
7225
7253
  input.sessionEngine
7226
7254
  ]);
7227
- return { loadComposerOptionsForTarget, loadDraftComposerOptions };
7255
+ return { loadDraftComposerOptions };
7228
7256
  }
7229
7257
 
7230
7258
  // agent-gui/agentGuiNode/controller/useAgentGUIControllerRefs.ts
@@ -7235,7 +7263,6 @@ function useAgentGUIControllerRefs(input) {
7235
7263
  const userProjectsRef = useRef9(input.userProjects);
7236
7264
  const isNoProjectPathRef = useRef9(input.isNoProjectPath);
7237
7265
  const userProjectsLoadSeqRef = useRef9(0);
7238
- const composerOptionsProjectKeyRef = useRef9(null);
7239
7266
  const conversationsRef = useRef9(input.conversations);
7240
7267
  const isMountedRef = useRef9(true);
7241
7268
  const agentActivitySnapshotRef = useRef9(input.agentActivitySnapshot);
@@ -7300,7 +7327,6 @@ function useAgentGUIControllerRefs(input) {
7300
7327
  return {
7301
7328
  activeConversationIdRef,
7302
7329
  agentActivitySnapshotRef,
7303
- composerOptionsProjectKeyRef,
7304
7330
  conversationIdsRef,
7305
7331
  conversationsRef,
7306
7332
  dataRef,
@@ -7335,8 +7361,8 @@ function useAgentGUIControllerRefs(input) {
7335
7361
  }
7336
7362
 
7337
7363
  // agent-gui/agentGuiNode/controller/useAgentGUIOperationActions.ts
7338
- import { selectEngineSession as selectEngineSession2 } from "@tutti-os/agent-activity-core";
7339
- import { useCallback as useCallback18 } from "react";
7364
+ import { selectEngineSession as selectEngineSession3 } from "@tutti-os/agent-activity-core";
7365
+ import { useCallback as useCallback19 } from "react";
7340
7366
 
7341
7367
  // agent-gui/agentGuiNode/controller/useAgentGUIComposerSettingsActions.ts
7342
7368
  import {
@@ -8441,7 +8467,10 @@ function useAgentGUIConversationMetadataActions(input) {
8441
8467
  }
8442
8468
 
8443
8469
  // agent-gui/agentGuiNode/controller/useAgentGUINewConversationActivation.ts
8444
- import { selectLatestActivationForSession as selectLatestActivationForSession3 } from "@tutti-os/agent-activity-core";
8470
+ import {
8471
+ isPendingActivationViable as isPendingActivationViable5,
8472
+ selectLatestActivationForSession as selectLatestActivationForSession5
8473
+ } from "@tutti-os/agent-activity-core";
8445
8474
  import { useCallback as useCallback14 } from "react";
8446
8475
  function useAgentGUINewConversationActivation(input) {
8447
8476
  const {
@@ -8554,10 +8583,12 @@ function useAgentGUINewConversationActivation(input) {
8554
8583
  options: snapshotComposerOptions
8555
8584
  });
8556
8585
  const prewarmedSessionId = normalizedInitialContent.length > 0 && snapshotComposerOptions?.behavior?.prewarmDraftSession === true ? draftAgentSessionIdFromComposerOptions(snapshotComposerOptions) : null;
8557
- const agentSessionId = prewarmedSessionId && activation.stateFor(prewarmedSessionId) === "inactive" && selectLatestActivationForSession3(
8558
- sessionEngine.getSnapshot(),
8559
- prewarmedSessionId
8560
- )?.status !== "failed" ? prewarmedSessionId : createAgentGUIConversationId();
8586
+ const agentSessionId = prewarmedSessionId && activation.stateFor(prewarmedSessionId) === "inactive" && isPendingActivationViable5(
8587
+ selectLatestActivationForSession5(
8588
+ sessionEngine.getSnapshot(),
8589
+ prewarmedSessionId
8590
+ )
8591
+ ) ? prewarmedSessionId : createAgentGUIConversationId();
8561
8592
  const submitTrace = createAgentSubmitTraceState({
8562
8593
  agentSessionId,
8563
8594
  content: normalizedInitialContent,
@@ -8776,9 +8807,9 @@ function useAgentGUIQueueActions({
8776
8807
  import {
8777
8808
  selectEngineCancelState,
8778
8809
  selectEngineHasVisibleQueuedSubmit,
8779
- selectPendingSubmitsForSession as selectPendingSubmitsForSession2
8810
+ selectPendingSubmitsForSession as selectPendingSubmitsForSession3
8780
8811
  } from "@tutti-os/agent-activity-core";
8781
- import { useCallback as useCallback17, useEffect as useEffect7 } from "react";
8812
+ import { useCallback as useCallback18, useEffect as useEffect7 } from "react";
8782
8813
 
8783
8814
  // agent-gui/agentGuiNode/controller/agentGuiController.homeDraftHelpers.ts
8784
8815
  function clearSubmittedAgentGUIHomeDraft(input) {
@@ -8810,7 +8841,7 @@ function restoreFailedAgentGUIHomeDraft(input) {
8810
8841
  // agent-gui/agentGuiNode/controller/AgentGUIHomeDraftSettlementController.ts
8811
8842
  import {
8812
8843
  selectPendingActivations as selectPendingActivations2,
8813
- selectPendingSubmitsForSession
8844
+ selectPendingSubmitsForSession as selectPendingSubmitsForSession2
8814
8845
  } from "@tutti-os/agent-activity-core";
8815
8846
  var AgentGUIHomeDraftSettlementController = class {
8816
8847
  applyDraftUpdate;
@@ -8841,7 +8872,7 @@ var AgentGUIHomeDraftSettlementController = class {
8841
8872
  );
8842
8873
  for (const [clientSubmitId, snapshot] of Object.entries(this.snapshots)) {
8843
8874
  const activation = activationsByClientSubmitId.get(clientSubmitId);
8844
- if (activation?.status === "confirmed" || activation?.status === "failed") {
8875
+ if (activation?.status === "confirmed" || activation?.status === "failed" || activation?.status === "canceled") {
8845
8876
  this.applyDraftUpdate(
8846
8877
  (drafts) => activation.status === "confirmed" ? clearSubmittedDraftIfUnchanged({ drafts, snapshot }) : restoreFailedAgentGUIHomeDraft({
8847
8878
  agentSessionId: activation.agentSessionId,
@@ -8855,7 +8886,7 @@ var AgentGUIHomeDraftSettlementController = class {
8855
8886
  }
8856
8887
  const targetAgentSessionId = snapshot.targetAgentSessionId ?? (snapshot.sourceScopeKey.startsWith("session:") ? snapshot.sourceScopeKey.slice("session:".length) : "");
8857
8888
  if (!targetAgentSessionId) continue;
8858
- const submit = selectPendingSubmitsForSession(
8889
+ const submit = selectPendingSubmitsForSession2(
8859
8890
  state,
8860
8891
  targetAgentSessionId
8861
8892
  ).find((record) => record.clientSubmitId === clientSubmitId);
@@ -8890,6 +8921,150 @@ function resolveAgentGUIInteractionTarget(interactions, requestId) {
8890
8921
  return null;
8891
8922
  }
8892
8923
 
8924
+ // agent-gui/agentGuiNode/controller/useAgentGUIGoalControlActions.ts
8925
+ import {
8926
+ selectEngineSession as selectEngineSession2
8927
+ } from "@tutti-os/agent-activity-core";
8928
+ import { useCallback as useCallback17, useRef as useRef11 } from "react";
8929
+
8930
+ // agent-gui/agentGuiNode/controller/agentGuiOptimisticGoal.ts
8931
+ function projectOptimisticGoalControl(currentGoal, action, objective) {
8932
+ switch (action) {
8933
+ case "clear":
8934
+ return null;
8935
+ case "pause":
8936
+ return currentGoal ? { ...currentGoal, status: "paused" } : null;
8937
+ case "resume":
8938
+ return currentGoal ? { ...currentGoal, status: "active" } : null;
8939
+ case "set": {
8940
+ const normalizedObjective = objective?.trim() ?? "";
8941
+ return normalizedObjective ? { objective: normalizedObjective, status: "active" } : currentGoal;
8942
+ }
8943
+ }
8944
+ }
8945
+ function canonicalGoalConfirmsOptimisticGoal(canonicalGoal, optimisticGoal, reconcileOnObjectiveMatch) {
8946
+ if (optimisticGoal === null) {
8947
+ return canonicalGoal === null;
8948
+ }
8949
+ if (canonicalGoal?.objective !== optimisticGoal.objective) {
8950
+ return false;
8951
+ }
8952
+ return reconcileOnObjectiveMatch || canonicalGoal.status === optimisticGoal.status;
8953
+ }
8954
+ function unresolvedOptimisticGoalControl(optimisticGoalControl, agentSessionId, canonicalSession) {
8955
+ if (optimisticGoalControl?.agentSessionId !== agentSessionId || canonicalSession?.agentSessionId !== agentSessionId) {
8956
+ return optimisticGoalControl?.agentSessionId === agentSessionId ? optimisticGoalControl : null;
8957
+ }
8958
+ return canonicalGoalConfirmsOptimisticGoal(
8959
+ canonicalSession.goal,
8960
+ optimisticGoalControl.goal,
8961
+ optimisticGoalControl.reconcileOnObjectiveMatch
8962
+ ) ? null : optimisticGoalControl;
8963
+ }
8964
+
8965
+ // agent-gui/agentGuiNode/controller/useAgentGUIGoalControlActions.ts
8966
+ function useAgentGUIGoalControlActions(input) {
8967
+ const requestSequenceRef = useRef11(0);
8968
+ const beginOptimisticGoalControl = useCallback17(
8969
+ (agentSessionId, action, objective, requestId, reconcileOnObjectiveMatch = false) => {
8970
+ const canonicalSession = selectEngineSession2(
8971
+ input.sessionEngine.getSnapshot(),
8972
+ agentSessionId
8973
+ ) ?? null;
8974
+ const pendingGoalControl = unresolvedOptimisticGoalControl(
8975
+ input.optimisticGoalControl,
8976
+ agentSessionId,
8977
+ canonicalSession
8978
+ );
8979
+ const nextRequestId = requestId ?? `goal-control:${Date.now()}:${++requestSequenceRef.current}`;
8980
+ input.setOptimisticGoalControl({
8981
+ agentSessionId,
8982
+ goal: projectOptimisticGoalControl(
8983
+ pendingGoalControl?.goal ?? canonicalSession?.goal ?? null,
8984
+ action,
8985
+ objective
8986
+ ),
8987
+ reconcileOnObjectiveMatch,
8988
+ requestId: nextRequestId
8989
+ });
8990
+ return nextRequestId;
8991
+ },
8992
+ [
8993
+ input.optimisticGoalControl,
8994
+ input.sessionEngine,
8995
+ input.setOptimisticGoalControl
8996
+ ]
8997
+ );
8998
+ const clearOptimisticGoalControl = useCallback17(
8999
+ (requestId) => {
9000
+ input.setOptimisticGoalControl(
9001
+ (current) => current?.requestId === requestId ? null : current
9002
+ );
9003
+ },
9004
+ [input.setOptimisticGoalControl]
9005
+ );
9006
+ const goalControl = useCallback17(
9007
+ (action, objective, submittedDraftScopeKey) => {
9008
+ if (input.previewMode) return;
9009
+ const agentSessionId = input.activeConversationIdRef.current;
9010
+ if (!agentSessionId) return;
9011
+ const submittedDraftSnapshot = submittedDraftScopeKey ? {
9012
+ sourceScopeKey: submittedDraftScopeKey,
9013
+ content: snapshotAgentComposerDraft(
9014
+ input.draftByScopeKeyRef.current[submittedDraftScopeKey] ?? emptyAgentComposerDraft()
9015
+ ),
9016
+ targetAgentSessionId: agentSessionId
9017
+ } : null;
9018
+ input.setDetailError(null);
9019
+ const optimisticRequestId = beginOptimisticGoalControl(
9020
+ agentSessionId,
9021
+ action,
9022
+ objective
9023
+ );
9024
+ void input.agentActivityRuntime.goalControl({
9025
+ workspaceId: input.workspaceId,
9026
+ agentSessionId,
9027
+ action,
9028
+ ...objective !== void 0 ? { objective } : {}
9029
+ }).then(() => {
9030
+ clearOptimisticGoalControl(optimisticRequestId);
9031
+ if (submittedDraftSnapshot) {
9032
+ input.setDraftByScopeKey((current) => {
9033
+ const next = clearSubmittedDraftIfUnchanged({
9034
+ drafts: current,
9035
+ snapshot: submittedDraftSnapshot
9036
+ });
9037
+ input.draftByScopeKeyRef.current = next;
9038
+ return next;
9039
+ });
9040
+ }
9041
+ if (action === "clear" && input.isCurrentConversation(agentSessionId)) {
9042
+ input.setGoalClearNoticeSequence((current) => current + 1);
9043
+ }
9044
+ }).catch((error) => {
9045
+ clearOptimisticGoalControl(optimisticRequestId);
9046
+ if (input.isCurrentConversation(agentSessionId)) {
9047
+ input.setDetailError(getAgentGUIErrorMessage(error));
9048
+ }
9049
+ });
9050
+ },
9051
+ [
9052
+ beginOptimisticGoalControl,
9053
+ clearOptimisticGoalControl,
9054
+ input.activeConversationIdRef,
9055
+ input.agentActivityRuntime,
9056
+ input.draftByScopeKeyRef,
9057
+ input.isCurrentConversation,
9058
+ input.previewMode,
9059
+ input.setDetailError,
9060
+ input.setDraftByScopeKey,
9061
+ input.setGoalClearNoticeSequence,
9062
+ input.workspaceId
9063
+ ]
9064
+ );
9065
+ return { beginOptimisticGoalControl, goalControl };
9066
+ }
9067
+
8893
9068
  // agent-gui/agentGuiNode/controller/useAgentGUISubmitInteractionActions.ts
8894
9069
  function typedGoalControlFromComposer(content, _displayPrompt) {
8895
9070
  if (content.length !== 1 || content[0]?.type !== "text") {
@@ -8934,19 +9109,35 @@ function useAgentGUISubmitInteractionActions(input) {
8934
9109
  planActionsRef,
8935
9110
  previewMode,
8936
9111
  promptImagesSupported,
9112
+ optimisticGoalControl,
8937
9113
  sessionEngine,
8938
9114
  setActiveConversationId,
8939
9115
  setDetailError,
8940
9116
  setDraftByScopeKey,
8941
9117
  setGoalClearNoticeSequence,
8942
9118
  setIntent,
9119
+ setOptimisticGoalControl,
8943
9120
  submittedDraftSnapshotsRef,
8944
9121
  startConversation,
8945
9122
  submitPromptRef,
8946
9123
  transientConversation,
8947
9124
  workspaceId
8948
9125
  } = input;
8949
- const retryActivation = useCallback17(() => {
9126
+ const { beginOptimisticGoalControl, goalControl } = useAgentGUIGoalControlActions({
9127
+ activeConversationIdRef,
9128
+ agentActivityRuntime,
9129
+ draftByScopeKeyRef,
9130
+ isCurrentConversation,
9131
+ optimisticGoalControl,
9132
+ previewMode,
9133
+ sessionEngine,
9134
+ setDetailError,
9135
+ setDraftByScopeKey,
9136
+ setGoalClearNoticeSequence,
9137
+ setOptimisticGoalControl,
9138
+ workspaceId
9139
+ });
9140
+ const retryActivation = useCallback18(() => {
8950
9141
  const agentSessionId = activeConversationIdRef.current;
8951
9142
  if (!agentSessionId) {
8952
9143
  return;
@@ -8966,7 +9157,7 @@ function useAgentGUISubmitInteractionActions(input) {
8966
9157
  isSessionMarkedNonResumable,
8967
9158
  workspaceId
8968
9159
  ]);
8969
- const executePrompt = useCallback17(
9160
+ const executePrompt = useCallback18(
8970
9161
  (agentSessionId, content, displayPrompt, options) => {
8971
9162
  const normalizedContent = normalizeAgentPromptContentBlocks(content);
8972
9163
  if (!agentSessionId || normalizedContent.length === 0) {
@@ -9035,7 +9226,7 @@ function useAgentGUISubmitInteractionActions(input) {
9035
9226
  submitTrace.clientSubmitId
9036
9227
  )
9037
9228
  );
9038
- const accepted = selectPendingSubmitsForSession2(
9229
+ const accepted = selectPendingSubmitsForSession3(
9039
9230
  sessionEngine.getSnapshot(),
9040
9231
  agentSessionId
9041
9232
  ).some((record) => record.clientSubmitId === submitTrace.clientSubmitId);
@@ -9094,7 +9285,7 @@ function useAgentGUISubmitInteractionActions(input) {
9094
9285
  setDraftByScopeKey,
9095
9286
  submittedDraftSnapshotsRef
9096
9287
  ]);
9097
- const submitExistingPrompt = useCallback17(
9288
+ const submitExistingPrompt = useCallback18(
9098
9289
  (agentSessionId, normalizedContent, displayPromptText, options) => {
9099
9290
  if (isSessionMarkedNonResumable(agentSessionId)) {
9100
9291
  setDetailError(
@@ -9123,61 +9314,7 @@ function useAgentGUISubmitInteractionActions(input) {
9123
9314
  },
9124
9315
  [activation, executePrompt, isSessionMarkedNonResumable, workspaceId]
9125
9316
  );
9126
- const goalControl = useCallback17(
9127
- (action, objective, submittedDraftScopeKey) => {
9128
- if (previewMode) {
9129
- return;
9130
- }
9131
- const agentSessionId = activeConversationIdRef.current;
9132
- if (!agentSessionId) {
9133
- return;
9134
- }
9135
- const submittedDraftSnapshot = submittedDraftScopeKey ? {
9136
- sourceScopeKey: submittedDraftScopeKey,
9137
- content: snapshotAgentComposerDraft(
9138
- draftByScopeKeyRef.current[submittedDraftScopeKey] ?? emptyAgentComposerDraft()
9139
- ),
9140
- targetAgentSessionId: agentSessionId
9141
- } : null;
9142
- setDetailError(null);
9143
- void agentActivityRuntime.goalControl({
9144
- workspaceId,
9145
- agentSessionId,
9146
- action,
9147
- ...objective !== void 0 ? { objective } : {}
9148
- }).then(() => {
9149
- if (submittedDraftSnapshot) {
9150
- setDraftByScopeKey((current) => {
9151
- const next = clearSubmittedDraftIfUnchanged({
9152
- drafts: current,
9153
- snapshot: submittedDraftSnapshot
9154
- });
9155
- draftByScopeKeyRef.current = next;
9156
- return next;
9157
- });
9158
- }
9159
- if (action !== "clear" || !isCurrentConversation(agentSessionId)) {
9160
- return;
9161
- }
9162
- setGoalClearNoticeSequence((current) => current + 1);
9163
- }).catch((error) => {
9164
- if (!isCurrentConversation(agentSessionId)) {
9165
- return;
9166
- }
9167
- setDetailError(getAgentGUIErrorMessage(error));
9168
- });
9169
- },
9170
- [
9171
- agentActivityRuntime,
9172
- isCurrentConversation,
9173
- previewMode,
9174
- setDraftByScopeKey,
9175
- setDetailError,
9176
- setGoalClearNoticeSequence,
9177
- workspaceId
9178
- ]
9179
- );
9180
- const submitPrompt = useCallback17(
9317
+ const submitPrompt = useCallback18(
9181
9318
  (content, displayPrompt, options) => {
9182
9319
  if (previewMode) {
9183
9320
  return;
@@ -9258,6 +9395,15 @@ function useAgentGUISubmitInteractionActions(input) {
9258
9395
  typedGoal ? false : void 0
9259
9396
  );
9260
9397
  if (activationResult) {
9398
+ if (typedGoal) {
9399
+ beginOptimisticGoalControl(
9400
+ activationResult.agentSessionId,
9401
+ typedGoal.action,
9402
+ typedGoal.objective,
9403
+ `goal-activation:${activationResult.requestId}`,
9404
+ true
9405
+ );
9406
+ }
9261
9407
  draftByScopeKeyRef.current = clearSubmittedAgentGUIHomeDraft({
9262
9408
  draftKey: homeDraftKey,
9263
9409
  drafts: draftByScopeKeyRef.current,
@@ -9293,6 +9439,7 @@ function useAgentGUISubmitInteractionActions(input) {
9293
9439
  },
9294
9440
  [
9295
9441
  agentActivityRuntime,
9442
+ beginOptimisticGoalControl,
9296
9443
  conversationListQuery,
9297
9444
  previewMode,
9298
9445
  promptImagesSupported,
@@ -9306,7 +9453,7 @@ function useAgentGUISubmitInteractionActions(input) {
9306
9453
  useEffect7(() => {
9307
9454
  submitPromptRef.current = submitPrompt;
9308
9455
  }, [submitPrompt]);
9309
- const submitGuidancePrompt = useCallback17(
9456
+ const submitGuidancePrompt = useCallback18(
9310
9457
  (content, displayPrompt) => {
9311
9458
  const agentSessionId = activeConversationIdRef.current;
9312
9459
  const normalizedContent = normalizeAgentPromptContentBlocks(content);
@@ -9336,10 +9483,10 @@ function useAgentGUISubmitInteractionActions(input) {
9336
9483
  translate
9337
9484
  ]
9338
9485
  );
9339
- const showPromptImagesUnsupported = useCallback17(() => {
9486
+ const showPromptImagesUnsupported = useCallback18(() => {
9340
9487
  setDetailError(translate("agentHost.agentGui.promptImagesUnsupported"));
9341
9488
  }, []);
9342
- const submitInteractivePrompt = useCallback17(
9489
+ const submitInteractivePrompt = useCallback18(
9343
9490
  (input2) => {
9344
9491
  if (input2.action === PLAN_IMPLEMENTATION_ACTION_IMPLEMENT) {
9345
9492
  planActionsRef.current.implement();
@@ -9387,13 +9534,13 @@ function useAgentGUISubmitInteractionActions(input) {
9387
9534
  workspaceId
9388
9535
  ]
9389
9536
  );
9390
- const submitApprovalOption = useCallback17(
9537
+ const submitApprovalOption = useCallback18(
9391
9538
  (requestId, optionId) => {
9392
9539
  void submitInteractivePrompt({ requestId, optionId });
9393
9540
  },
9394
9541
  [submitInteractivePrompt]
9395
9542
  );
9396
- const interruptCurrentTurn = useCallback17(
9543
+ const interruptCurrentTurn = useCallback18(
9397
9544
  (noRunningResponseMessage) => {
9398
9545
  const agentSessionId = activeConversationIdRef.current;
9399
9546
  const cancelStatus = agentSessionId ? selectEngineCancelState(sessionEngine.getSnapshot(), agentSessionId)?.status : null;
@@ -9401,23 +9548,19 @@ function useAgentGUISubmitInteractionActions(input) {
9401
9548
  return;
9402
9549
  }
9403
9550
  void noRunningResponseMessage;
9404
- sessionEngine.dispatch({
9405
- agentSessionId,
9406
- reason: "user_stop",
9407
- type: "queue/suspended"
9408
- });
9409
9551
  setDetailError(null);
9410
9552
  sessionEngine.dispatch({
9411
9553
  agentSessionId,
9412
9554
  awaitingTurnExpiresAtUnixMs: Date.now() + 3e4,
9413
9555
  commandId: createAgentGUIConversationId(),
9414
9556
  timeoutMs: 3e4,
9415
- type: "session/cancelRequested"
9557
+ type: "session/stopRequested",
9558
+ workspaceId
9416
9559
  });
9417
9560
  },
9418
- [sessionEngine]
9561
+ [sessionEngine, workspaceId]
9419
9562
  );
9420
- const updateDraftContent = useCallback17(
9563
+ const updateDraftContent = useCallback18(
9421
9564
  (draftContent, sourceScopeKey) => {
9422
9565
  const agentSessionId = activeConversationIdRef.current;
9423
9566
  const draftKey = sourceScopeKey ?? resolveAgentComposerDraftScopeKey({
@@ -9465,9 +9608,9 @@ function useAgentGUIOperationActions(input) {
9465
9608
  ...input,
9466
9609
  createConversation
9467
9610
  });
9468
- const isSessionMarkedNonResumable = useCallback18(
9611
+ const isSessionMarkedNonResumable = useCallback19(
9469
9612
  (agentSessionId) => {
9470
- if (selectEngineSession2(input.sessionEngine.getSnapshot(), agentSessionId)?.resumable === false) {
9613
+ if (selectEngineSession3(input.sessionEngine.getSnapshot(), agentSessionId)?.resumable === false) {
9471
9614
  return true;
9472
9615
  }
9473
9616
  const conversation = resolveConversationSummaryById(
@@ -10444,14 +10587,19 @@ function useAgentGUIControllerActions(actions) {
10444
10587
 
10445
10588
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationDetail.ts
10446
10589
  import {
10447
- selectEngineAvailableCommands
10590
+ selectEngineAvailableCommands,
10591
+ selectEngineTurnsForSession
10448
10592
  } from "@tutti-os/agent-activity-core";
10449
- import { useEffect as useEffect9, useMemo as useMemo11, useRef as useRef11 } from "react";
10593
+ import { useEffect as useEffect9, useMemo as useMemo11, useRef as useRef12 } from "react";
10450
10594
  function useAgentGUIConversationDetail(input) {
10451
- const projectionConversationRef = useRef11(null);
10595
+ const projectionConversationRef = useRef12(null);
10452
10596
  const activeCanonicalLiveTurn = Boolean(
10453
10597
  input.activeTurn && input.activeTurn.phase !== "settled"
10454
10598
  );
10599
+ const sessionTurns = useEngineSelector(
10600
+ input.sessionEngine,
10601
+ (state) => selectEngineTurnsForSession(state, input.activeConversationId)
10602
+ );
10455
10603
  const projectionConversation = useMemo11(() => {
10456
10604
  if (!input.activeConversation) {
10457
10605
  projectionConversationRef.current = null;
@@ -10459,7 +10607,7 @@ function useAgentGUIConversationDetail(input) {
10459
10607
  }
10460
10608
  const current = input.activeConversation;
10461
10609
  const previous = projectionConversationRef.current;
10462
- if (previous && previous.id === current.id && previous.userId === current.userId && previous.provider === current.provider && previous.title === current.title && previous.titleFallback === current.titleFallback && previous.status === current.status && previous.cwd === current.cwd && previous.activeTurn === input.activeTurn) {
10610
+ if (previous && previous.id === current.id && previous.userId === current.userId && previous.provider === current.provider && previous.title === current.title && previous.titleFallback === current.titleFallback && previous.status === current.status && previous.cwd === current.cwd && previous.activeTurn === input.activeTurn && previous.sessionTurns === sessionTurns) {
10463
10611
  return previous;
10464
10612
  }
10465
10613
  const next = {
@@ -10471,11 +10619,12 @@ function useAgentGUIConversationDetail(input) {
10471
10619
  status: current.status,
10472
10620
  cwd: current.cwd,
10473
10621
  updatedAtUnixMs: current.updatedAtUnixMs,
10474
- activeTurn: input.activeTurn
10622
+ activeTurn: input.activeTurn,
10623
+ sessionTurns
10475
10624
  };
10476
10625
  projectionConversationRef.current = next;
10477
10626
  return next;
10478
- }, [input.activeConversation, input.activeTurn]);
10627
+ }, [input.activeConversation, input.activeTurn, sessionTurns]);
10479
10628
  const draftContent = input.activeConversationId ? input.draftByScopeKey[resolveAgentComposerDraftScopeKey({
10480
10629
  agentSessionId: input.activeConversationId
10481
10630
  })] ?? EMPTY_AGENT_COMPOSER_DRAFT : readAgentComposerDraftContent({
@@ -10533,7 +10682,7 @@ function useAgentGUIConversationDetail(input) {
10533
10682
  }
10534
10683
  return conversationModels.conversation;
10535
10684
  }, [conversationDetail, conversationModels.conversation]);
10536
- const diagnosticKeyRef = useRef11(null);
10685
+ const diagnosticKeyRef = useRef12(null);
10537
10686
  useEffect9(() => {
10538
10687
  if (!input.activeConversationId || !conversation) {
10539
10688
  diagnosticKeyRef.current = null;
@@ -10624,9 +10773,9 @@ function useAgentGUIConversationDetail(input) {
10624
10773
  }
10625
10774
 
10626
10775
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationPresentation.ts
10627
- import { useEffect as useEffect10, useMemo as useMemo12, useRef as useRef12 } from "react";
10776
+ import { useEffect as useEffect10, useMemo as useMemo12, useRef as useRef13 } from "react";
10628
10777
  function useAgentGUIConversationPresentation(input) {
10629
- const visibleConversationsRef = useRef12(
10778
+ const visibleConversationsRef = useRef13(
10630
10779
  null
10631
10780
  );
10632
10781
  const conversationProjection = useMemo12(() => {
@@ -10657,7 +10806,7 @@ function useAgentGUIConversationPresentation(input) {
10657
10806
  input.userProjects
10658
10807
  ]);
10659
10808
  const visibleConversations = conversationProjection.visibleConversations;
10660
- const activeConversationRef = useRef12(
10809
+ const activeConversationRef = useRef13(
10661
10810
  null
10662
10811
  );
10663
10812
  const activeConversation = useMemo12(() => {
@@ -10786,14 +10935,14 @@ function useAgentGUIConversationPresentation(input) {
10786
10935
 
10787
10936
  // agent-gui/agentGuiNode/controller/useAgentGUIProviderHome.ts
10788
10937
  import {
10789
- useCallback as useCallback19,
10938
+ useCallback as useCallback20,
10790
10939
  useEffect as useEffect11,
10791
- useRef as useRef13
10940
+ useRef as useRef14
10792
10941
  } from "react";
10793
10942
  function useAgentGUIProviderHome(input) {
10794
- const inputRef = useRef13(input);
10943
+ const inputRef = useRef14(input);
10795
10944
  inputRef.current = input;
10796
- const resolveDefaultHomeComposerTarget = useCallback19(() => {
10945
+ const resolveDefaultHomeComposerTarget = useCallback20(() => {
10797
10946
  const current = inputRef.current;
10798
10947
  const defaultTargetId = current.defaultAgentTargetId?.trim() ?? "";
10799
10948
  const explicitDefaultTarget = defaultTargetId ? current.normalizedProviderTargets.find(
@@ -10803,7 +10952,7 @@ function useAgentGUIProviderHome(input) {
10803
10952
  (target) => target.disabled !== true
10804
10953
  ) ?? current.normalizedProviderTargets[0] ?? null;
10805
10954
  }, []);
10806
- const resetHomeComposerAgentTargetToDefault = useCallback19(() => {
10955
+ const resetHomeComposerAgentTargetToDefault = useCallback20(() => {
10807
10956
  const currentInput = inputRef.current;
10808
10957
  if (currentInput.previewMode) return;
10809
10958
  const nextTarget = resolveDefaultHomeComposerTarget();
@@ -10837,13 +10986,8 @@ function useAgentGUIProviderHome(input) {
10837
10986
  ...nextTargetData.data,
10838
10987
  lastActiveAgentSessionId: null
10839
10988
  };
10840
- if (nextTarget.disabled !== true) {
10841
- currentInput.loadComposerOptionsForTarget(nextTargetData, {
10842
- force: true
10843
- });
10844
- }
10845
10989
  }, [resolveDefaultHomeComposerTarget]);
10846
- const updateConversationFilter = useCallback19(
10990
+ const updateConversationFilter = useCallback20(
10847
10991
  (filter) => {
10848
10992
  const current = inputRef.current;
10849
10993
  const nextFilter = normalizeAgentGUIConversationFilter(filter);
@@ -10854,7 +10998,7 @@ function useAgentGUIProviderHome(input) {
10854
10998
  },
10855
10999
  [resetHomeComposerAgentTargetToDefault]
10856
11000
  );
10857
- const selectHomeComposerAgentTarget = useCallback19(
11001
+ const selectHomeComposerAgentTarget = useCallback20(
10858
11002
  (selection) => {
10859
11003
  const currentInput = inputRef.current;
10860
11004
  if (currentInput.previewMode) return;
@@ -10869,11 +11013,6 @@ function useAgentGUIProviderHome(input) {
10869
11013
  const nextTargetIsExplicit = currentInput.normalizedExplicitProviderTargets.some(
10870
11014
  (target) => target.provider === nextTarget.provider && target.targetId === nextTarget.targetId && agentGUIAgentTargetRefsEqual(target.ref, nextTarget.ref)
10871
11015
  );
10872
- const nextTargetData = composerTargetDataFromProviderTarget({
10873
- current: currentInput.dataRef.current,
10874
- isExplicit: nextTargetIsExplicit,
10875
- target: nextTarget
10876
- });
10877
11016
  const shouldSyncScopedRailFilter = currentInput.conversationFilterRef.current.kind === "agentTarget";
10878
11017
  currentInput.setHomeComposerTargetOverride(nextTarget);
10879
11018
  if (shouldSyncScopedRailFilter) {
@@ -10917,11 +11056,6 @@ function useAgentGUIProviderHome(input) {
10917
11056
  currentInput.dataRef.current = nextData;
10918
11057
  return nextData;
10919
11058
  });
10920
- if (nextTarget.disabled !== true) {
10921
- currentInput.loadComposerOptionsForTarget(nextTargetData, {
10922
- force: true
10923
- });
10924
- }
10925
11059
  },
10926
11060
  []
10927
11061
  );
@@ -10957,7 +11091,7 @@ function useAgentGUIProviderHome(input) {
10957
11091
  input.providerReadinessGates,
10958
11092
  selectHomeComposerAgentTarget
10959
11093
  ]);
10960
- const selectConversationFilterTarget = useCallback19(
11094
+ const selectConversationFilterTarget = useCallback20(
10961
11095
  (selection) => {
10962
11096
  const current = inputRef.current;
10963
11097
  const nextTarget = resolveAgentGUIAgentTarget({
@@ -11095,13 +11229,27 @@ function useAgentGUISessionPresentation(input) {
11095
11229
  const activeSessionResumable = input.activeEngineSession?.resumable ?? input.activeConversation?.resumable ?? input.activeSessionState?.resumable;
11096
11230
  const activeConversationRequiresResume = input.activeConversationId !== null && input.activationState !== "active";
11097
11231
  const activeConversationResumeUnavailable = activeConversationRequiresResume && activeSessionResumable === false;
11098
- const sessionChromeRawState = useMemo13(
11099
- () => input.activeEngineSession ? {
11100
- agentSessionId: input.activeEngineSession.agentSessionId,
11101
- goal: input.activeEngineSession.goal
11102
- } : null,
11103
- [input.activeEngineSession?.agentSessionId, input.activeEngineSession?.goal]
11104
- );
11232
+ const sessionChromeRawState = useMemo13(() => {
11233
+ const optimisticGoalControl = unresolvedOptimisticGoalControl(
11234
+ input.optimisticGoalControl,
11235
+ input.activeConversationId,
11236
+ input.activeEngineSession
11237
+ );
11238
+ const agentSessionId = input.activeEngineSession?.agentSessionId ?? optimisticGoalControl?.agentSessionId;
11239
+ if (!agentSessionId) {
11240
+ return null;
11241
+ }
11242
+ return {
11243
+ agentSessionId,
11244
+ goal: optimisticGoalControl ? optimisticGoalControl.goal : input.activeEngineSession?.goal ?? null,
11245
+ goalIsOptimistic: optimisticGoalControl !== null
11246
+ };
11247
+ }, [
11248
+ input.activeConversationId,
11249
+ input.activeEngineSession?.agentSessionId,
11250
+ input.activeEngineSession?.goal,
11251
+ input.optimisticGoalControl
11252
+ ]);
11105
11253
  const sessionChrome = useMemo13(() => {
11106
11254
  const normalizedError = input.activationError?.trim() ?? "";
11107
11255
  const authState = input.activeSessionState?.authState?.trim() ?? "";
@@ -11586,7 +11734,7 @@ import {
11586
11734
  selectEnginePendingInteractions,
11587
11735
  selectEnginePromptQueue,
11588
11736
  selectEnginePromptQueueError,
11589
- selectEngineSession as selectEngineSession3,
11737
+ selectEngineSession as selectEngineSession4,
11590
11738
  selectEngineSessionDeleted,
11591
11739
  selectEngineSessionDetailHydrated as selectEngineSessionDetailHydrated2,
11592
11740
  selectEngineSessionDetailLoading,
@@ -11595,9 +11743,9 @@ import {
11595
11743
  selectEngineSessionReconcile as selectEngineSessionReconcile2,
11596
11744
  selectEngineSessionSettingsUpdate as selectEngineSessionSettingsUpdate2,
11597
11745
  selectEngineSubmitAvailability,
11598
- selectLatestActivationForSession as selectLatestActivationForSession4,
11746
+ selectLatestActivationForSession as selectLatestActivationForSession6,
11599
11747
  selectLatestPendingSubmitForSession,
11600
- selectPendingSubmitsForSession as selectPendingSubmitsForSession3,
11748
+ selectPendingSubmitsForSession as selectPendingSubmitsForSession4,
11601
11749
  selectSessionHasUnconfirmedSubmit,
11602
11750
  selectSessionIsSubmitting
11603
11751
  } from "@tutti-os/agent-activity-core";
@@ -11623,7 +11771,7 @@ function useAgentGUISessionEngineState(input) {
11623
11771
  );
11624
11772
  const activePendingSubmits = useEngineSelector(
11625
11773
  sessionEngine,
11626
- (state) => selectPendingSubmitsForSession3(state, activeConversationId),
11774
+ (state) => selectPendingSubmitsForSession4(state, activeConversationId),
11627
11775
  pendingSubmitRecordListsEqual
11628
11776
  );
11629
11777
  const activeLatestPendingSubmit = useEngineSelector(
@@ -11632,7 +11780,7 @@ function useAgentGUISessionEngineState(input) {
11632
11780
  );
11633
11781
  const activePendingActivation = useEngineSelector(
11634
11782
  sessionEngine,
11635
- (state) => selectLatestActivationForSession4(state, activeConversationId)
11783
+ (state) => selectLatestActivationForSession6(state, activeConversationId)
11636
11784
  );
11637
11785
  const isCreatingConversation = isPendingNewConversationActivation(
11638
11786
  activePendingActivation
@@ -11651,7 +11799,7 @@ function useAgentGUISessionEngineState(input) {
11651
11799
  );
11652
11800
  const activeEngineSession = useEngineSelector(
11653
11801
  sessionEngine,
11654
- (state) => selectEngineSession3(state, activeConversationId)
11802
+ (state) => selectEngineSession4(state, activeConversationId)
11655
11803
  );
11656
11804
  const activeSessionReconcile = useEngineSelector(
11657
11805
  sessionEngine,
@@ -11774,15 +11922,15 @@ function useAgentGUISessionEngineState(input) {
11774
11922
 
11775
11923
  // agent-gui/agentGuiNode/controller/useAgentGUISessionDetailTransport.ts
11776
11924
  import {
11777
- selectLatestActivationForSession as selectLatestActivationForSession5
11925
+ selectLatestActivationForSession as selectLatestActivationForSession7
11778
11926
  } from "@tutti-os/agent-activity-core";
11779
- import { useCallback as useCallback23, useMemo as useMemo17 } from "react";
11927
+ import { useCallback as useCallback24, useMemo as useMemo17 } from "react";
11780
11928
 
11781
11929
  // contexts/workspace/presentation/renderer/agentSessions/useAgentSessionControllerState.ts
11782
- import { useCallback as useCallback22 } from "react";
11930
+ import { useCallback as useCallback23 } from "react";
11783
11931
 
11784
11932
  // contexts/workspace/presentation/renderer/agentSessions/useAgentSessionPagingState.ts
11785
- import { useCallback as useCallback20, useRef as useRef14, useState as useState5 } from "react";
11933
+ import { useCallback as useCallback21, useRef as useRef15, useState as useState5 } from "react";
11786
11934
  var EMPTY_ENTRY = {
11787
11935
  error: null,
11788
11936
  isLoadingMessages: false,
@@ -11790,9 +11938,9 @@ var EMPTY_ENTRY = {
11790
11938
  };
11791
11939
  function useAgentSessionPagingState() {
11792
11940
  const [entries, setEntries] = useState5({});
11793
- const entriesRef = useRef14(entries);
11941
+ const entriesRef = useRef15(entries);
11794
11942
  entriesRef.current = entries;
11795
- const update = useCallback20(
11943
+ const update = useCallback21(
11796
11944
  (ref, updater) => {
11797
11945
  const key = sessionKey(ref);
11798
11946
  if (!key) return;
@@ -11804,11 +11952,11 @@ function useAgentSessionPagingState() {
11804
11952
  },
11805
11953
  []
11806
11954
  );
11807
- const get = useCallback20((ref) => {
11955
+ const get = useCallback21((ref) => {
11808
11956
  const key = sessionKey(ref);
11809
11957
  return key ? entriesRef.current[key] ?? null : null;
11810
11958
  }, []);
11811
- const remove = useCallback20((ref) => {
11959
+ const remove = useCallback21((ref) => {
11812
11960
  const key = sessionKey(ref);
11813
11961
  if (!key) return;
11814
11962
  setEntries((current) => {
@@ -11818,11 +11966,11 @@ function useAgentSessionPagingState() {
11818
11966
  return next;
11819
11967
  });
11820
11968
  }, []);
11821
- const flag = useCallback20(
11969
+ const flag = useCallback21(
11822
11970
  (field, ref, value) => update(ref, (entry) => ({ ...entry, [field]: value })),
11823
11971
  [update]
11824
11972
  );
11825
- const setError = useCallback20(
11973
+ const setError = useCallback21(
11826
11974
  (ref, error) => update(ref, (entry) => ({ ...entry, error })),
11827
11975
  [update]
11828
11976
  );
@@ -11836,7 +11984,7 @@ function sessionKey(ref) {
11836
11984
  }
11837
11985
 
11838
11986
  // contexts/workspace/presentation/renderer/agentSessions/useAgentSessionTransport.ts
11839
- import { useCallback as useCallback21, useRef as useRef15, useState as useState6 } from "react";
11987
+ import { useCallback as useCallback22, useRef as useRef16, useState as useState6 } from "react";
11840
11988
  var EMPTY_ENTRY2 = {
11841
11989
  olderMessages: [],
11842
11990
  hasOlderMessages: false,
@@ -11844,9 +11992,9 @@ var EMPTY_ENTRY2 = {
11844
11992
  };
11845
11993
  function useAgentSessionTransport() {
11846
11994
  const [entries, setEntries] = useState6({});
11847
- const entriesRef = useRef15(entries);
11995
+ const entriesRef = useRef16(entries);
11848
11996
  entriesRef.current = entries;
11849
- const update = useCallback21(
11997
+ const update = useCallback22(
11850
11998
  (ref, updater) => {
11851
11999
  const key = sessionKey2(ref);
11852
12000
  if (!key) return;
@@ -11858,11 +12006,11 @@ function useAgentSessionTransport() {
11858
12006
  },
11859
12007
  []
11860
12008
  );
11861
- const get = useCallback21((ref) => {
12009
+ const get = useCallback22((ref) => {
11862
12010
  const key = sessionKey2(ref);
11863
12011
  return key ? entriesRef.current[key] ?? null : null;
11864
12012
  }, []);
11865
- const remove = useCallback21((ref) => {
12013
+ const remove = useCallback22((ref) => {
11866
12014
  const key = sessionKey2(ref);
11867
12015
  if (!key) return;
11868
12016
  setEntries((current) => {
@@ -11872,7 +12020,7 @@ function useAgentSessionTransport() {
11872
12020
  return next;
11873
12021
  });
11874
12022
  }, []);
11875
- const mergeOlder = useCallback21(
12023
+ const mergeOlder = useCallback22(
11876
12024
  (ref, messages, options = {}) => update(ref, (entry) => {
11877
12025
  const olderMessages = mergeWorkspaceAgentMessages(
11878
12026
  entry.olderMessages,
@@ -11887,7 +12035,7 @@ function useAgentSessionTransport() {
11887
12035
  }),
11888
12036
  [update]
11889
12037
  );
11890
- const resetOlder = useCallback21(
12038
+ const resetOlder = useCallback22(
11891
12039
  (ref) => update(ref, (entry) => ({
11892
12040
  ...entry,
11893
12041
  olderMessages: [],
@@ -11919,7 +12067,7 @@ function oldestVersion(messages) {
11919
12067
  function useAgentSessionControllerState(activeRef, canonicalMessages = []) {
11920
12068
  const transport = useAgentSessionTransport();
11921
12069
  const paging = useAgentSessionPagingState();
11922
- const getAgentSessionView = useCallback22(
12070
+ const getAgentSessionView = useCallback23(
11923
12071
  (ref) => {
11924
12072
  const transportEntry = transport.get(ref);
11925
12073
  const pagingEntry = paging.get(ref);
@@ -11938,18 +12086,18 @@ function useAgentSessionControllerState(activeRef, canonicalMessages = []) {
11938
12086
  },
11939
12087
  [paging.get, transport.get]
11940
12088
  );
11941
- const deleteAgentSessionView = useCallback22(
12089
+ const deleteAgentSessionView = useCallback23(
11942
12090
  (ref) => {
11943
12091
  transport.remove(ref);
11944
12092
  paging.remove(ref);
11945
12093
  },
11946
12094
  [paging.remove, transport.remove]
11947
12095
  );
11948
- const setAgentSessionViewMessagesLoading = useCallback22(
12096
+ const setAgentSessionViewMessagesLoading = useCallback23(
11949
12097
  (ref, value) => paging.flag("isLoadingMessages", ref, value),
11950
12098
  [paging.flag]
11951
12099
  );
11952
- const setAgentSessionViewOlderMessagesLoading = useCallback22(
12100
+ const setAgentSessionViewOlderMessagesLoading = useCallback23(
11953
12101
  (ref, value) => paging.flag("isLoadingOlderMessages", ref, value),
11954
12102
  [paging.flag]
11955
12103
  );
@@ -12004,7 +12152,7 @@ function useAgentGUISessionDetailTransport(input) {
12004
12152
  syncConversationListProjectionRef,
12005
12153
  workspaceId
12006
12154
  } = input;
12007
- const sessionViewRef = useCallback23(
12155
+ const sessionViewRef = useCallback24(
12008
12156
  (agentSessionId) => ({
12009
12157
  workspaceId,
12010
12158
  agentSessionId,
@@ -12016,7 +12164,7 @@ function useAgentGUISessionDetailTransport(input) {
12016
12164
  sessionViewRef(activeConversationId),
12017
12165
  activeConversationId ? agentActivitySnapshot.sessionMessagesById[activeConversationId] ?? [] : []
12018
12166
  );
12019
- const resolveSessionMessages = useCallback23(
12167
+ const resolveSessionMessages = useCallback24(
12020
12168
  (agentSessionId) => {
12021
12169
  const normalized = agentSessionId?.trim() ?? "";
12022
12170
  if (!normalized) return EMPTY_AGENT_GUI_MESSAGES;
@@ -12079,7 +12227,7 @@ function useAgentGUISessionDetailTransport(input) {
12079
12227
  windowHasTurnMissingUserPrompt
12080
12228
  },
12081
12229
  reload: {
12082
- getActivationStatus: (agentSessionId) => selectLatestActivationForSession5(
12230
+ getActivationStatus: (agentSessionId) => selectLatestActivationForSession7(
12083
12231
  sessionEngine.getSnapshot(),
12084
12232
  agentSessionId
12085
12233
  )?.status ?? null,
@@ -12096,7 +12244,7 @@ function useAgentGUISessionDetailTransport(input) {
12096
12244
  workspaceId
12097
12245
  });
12098
12246
  reloadSelectedConversationRef.current = paging.reloadSelectedConversation;
12099
- const markSelectedConversationDetailPending = useCallback23(
12247
+ const markSelectedConversationDetailPending = useCallback24(
12100
12248
  (agentSessionId) => {
12101
12249
  const normalized = agentSessionId.trim();
12102
12250
  if (!normalized) return null;
@@ -12121,7 +12269,7 @@ function useAgentGUISessionDetailTransport(input) {
12121
12269
  }
12122
12270
 
12123
12271
  // agent-gui/agentGuiNode/controller/useAgentGUILocalState.ts
12124
- import { useRef as useRef16, useState as useState7 } from "react";
12272
+ import { useRef as useRef17, useState as useState7 } from "react";
12125
12273
  function useAgentGUILocalState({
12126
12274
  data,
12127
12275
  userProjectsApi
@@ -12140,7 +12288,7 @@ function useAgentGUILocalState({
12140
12288
  data.lastActiveAgentSessionId === null
12141
12289
  );
12142
12290
  const [draftByScopeKey, setDraftByScopeKey] = useState7({});
12143
- const submittedDraftSnapshotsRef = useRef16({});
12291
+ const submittedDraftSnapshotsRef = useRef17({});
12144
12292
  const [draftSettingsBySessionId, setDraftSettingsBySessionId] = useState7({});
12145
12293
  const [isLoadingMessages, setIsLoadingMessages] = useState7(false);
12146
12294
  const [isDeletingConversation, setIsDeletingConversation] = useState7(false);
@@ -12153,6 +12301,7 @@ function useAgentGUILocalState({
12153
12301
  const [listError, setListError] = useState7(null);
12154
12302
  const [detailError, setDetailError] = useState7(null);
12155
12303
  const [goalClearNoticeSequence, setGoalClearNoticeSequence] = useState7(0);
12304
+ const [optimisticGoalControl, setOptimisticGoalControl] = useState7(null);
12156
12305
  return {
12157
12306
  activeConversationId,
12158
12307
  detailError,
@@ -12165,6 +12314,7 @@ function useAgentGUILocalState({
12165
12314
  isDeletingProjectConversations,
12166
12315
  isLoadingMessages,
12167
12316
  listError,
12317
+ optimisticGoalControl,
12168
12318
  pendingDeleteConversation,
12169
12319
  pendingDeleteProjectConversations,
12170
12320
  selectedProjectPath,
@@ -12179,6 +12329,7 @@ function useAgentGUILocalState({
12179
12329
  setIsDeletingProjectConversations,
12180
12330
  setIsLoadingMessages,
12181
12331
  setListError,
12332
+ setOptimisticGoalControl,
12182
12333
  setPendingDeleteConversation,
12183
12334
  setPendingDeleteProjectConversations,
12184
12335
  setSelectedProjectPath,
@@ -12318,9 +12469,9 @@ function useAgentGUINodeController({
12318
12469
  )
12319
12470
  )
12320
12471
  );
12321
- const updateComposerSettingsRef = useRef17(() => {
12472
+ const updateComposerSettingsRef = useRef18(() => {
12322
12473
  });
12323
- const planActionsRef = useRef17({ implement: () => {
12474
+ const planActionsRef = useRef18({ implement: () => {
12324
12475
  }, feedback: () => {
12325
12476
  }, skip: () => {
12326
12477
  } });
@@ -12339,7 +12490,7 @@ function useAgentGUINodeController({
12339
12490
  defaultReasoningEffort,
12340
12491
  providerComposerOptions
12341
12492
  } = composerCapabilities;
12342
- const planImplementationTurnIdRef = useRef17(null);
12493
+ const planImplementationTurnIdRef = useRef18(null);
12343
12494
  const accountProfilesByUserId = useAccountStore(
12344
12495
  (state) => state.profilesByUserId
12345
12496
  );
@@ -12367,7 +12518,6 @@ function useAgentGUINodeController({
12367
12518
  const {
12368
12519
  activeConversationIdRef,
12369
12520
  agentActivitySnapshotRef,
12370
- composerOptionsProjectKeyRef,
12371
12521
  conversationIdsRef,
12372
12522
  conversationsRef,
12373
12523
  dataRef,
@@ -12440,7 +12590,7 @@ function useAgentGUINodeController({
12440
12590
  getErrorCode: getAgentGUIErrorCode
12441
12591
  });
12442
12592
  const activeConversationLiveState = activation.stateFor(activeConversationId);
12443
- const removeConversations = useCallback24(
12593
+ const removeConversations = useCallback25(
12444
12594
  (conversationIds) => {
12445
12595
  for (const agentSessionId of conversationIds) {
12446
12596
  sessionEngine.dispatch({
@@ -12451,7 +12601,7 @@ function useAgentGUINodeController({
12451
12601
  },
12452
12602
  [sessionEngine]
12453
12603
  );
12454
- const setUserProjectsSnapshot = useCallback24(
12604
+ const setUserProjectsSnapshot = useCallback25(
12455
12605
  (projects) => {
12456
12606
  setUserProjects(
12457
12607
  (current) => areAgentGUIUserProjectsEqual(current, projects) ? current : [...projects]
@@ -12528,7 +12678,7 @@ function useAgentGUINodeController({
12528
12678
  const selectConversation = conversationSelection.selectConversation;
12529
12679
  const syncConversationListProjection = conversationSelection.syncConversationListProjection;
12530
12680
  syncConversationListProjectionRef.current = syncConversationListProjection;
12531
- const updateSelectedProjectPath = useCallback24(
12681
+ const updateSelectedProjectPath = useCallback25(
12532
12682
  (path, metadata) => {
12533
12683
  const normalizedPath = normalizeAgentComposerDraftProjectPath(path);
12534
12684
  const project = metadata?.project;
@@ -12594,11 +12744,10 @@ function useAgentGUINodeController({
12594
12744
  transientConversation,
12595
12745
  workspaceId
12596
12746
  });
12597
- const { loadComposerOptionsForTarget, loadDraftComposerOptions } = useAgentGUIComposerOptionsSync({
12747
+ const { loadDraftComposerOptions } = useAgentGUIComposerOptionsSync({
12598
12748
  activeConversationId,
12599
12749
  activeConversationIdRef,
12600
12750
  agentActivityRuntime,
12601
- composerOptionsProjectKeyRef,
12602
12751
  composerTargetData,
12603
12752
  conversationFilter,
12604
12753
  currentUserId,
@@ -12699,7 +12848,6 @@ function useAgentGUINodeController({
12699
12848
  isCreatingConversation,
12700
12849
  isLoadingConversations,
12701
12850
  isLoadingMessages,
12702
- loadComposerOptionsForTarget,
12703
12851
  normalizedComingSoonProviders,
12704
12852
  operationActions,
12705
12853
  persistActiveConversation,
@@ -12722,10 +12870,10 @@ function useAgentGUINodeController({
12722
12870
 
12723
12871
  // agent-gui/agentGuiNode/AgentGUINodeView.tsx
12724
12872
  import {
12725
- useCallback as useCallback48,
12873
+ useCallback as useCallback49,
12726
12874
  useEffect as useEffect37,
12727
12875
  useMemo as useMemo37,
12728
- useRef as useRef43,
12876
+ useRef as useRef44,
12729
12877
  useState as useState36
12730
12878
  } from "react";
12731
12879
  import { TooltipProvider as TooltipProvider4 } from "@tutti-os/ui-system";
@@ -12922,6 +13070,7 @@ var styles = {
12922
13070
  projectRailTitle: "agent-gui-node__project-rail-title",
12923
13071
  providerRail: "agent-gui-node__provider-rail",
12924
13072
  providerRailAvatar: "agent-gui-node__provider-rail-avatar",
13073
+ providerRailBetaBadge: "agent-gui-node__provider-rail-beta-badge",
12925
13074
  providerRailAvatarIcon: "agent-gui-node__provider-rail-avatar-icon",
12926
13075
  providerRailAvatarImage: "agent-gui-node__provider-rail-avatar-image",
12927
13076
  emptyHeroIconSlot: "agent-gui-node__empty-hero-icon-slot",
@@ -12961,7 +13110,7 @@ var styles = {
12961
13110
  var AgentGUINode_styles_default = styles;
12962
13111
 
12963
13112
  // agent-gui/agentGuiNode/view/agentGUIViewUtils.ts
12964
- import { useCallback as useCallback25, useLayoutEffect, useMemo as useMemo19, useRef as useRef18 } from "react";
13113
+ import { useCallback as useCallback26, useLayoutEffect, useMemo as useMemo19, useRef as useRef19 } from "react";
12965
13114
  function objectRecord(value) {
12966
13115
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
12967
13116
  }
@@ -12979,14 +13128,14 @@ function stringValue3(value) {
12979
13128
  return typeof value === "string" ? value : "";
12980
13129
  }
12981
13130
  function useStableEventCallback(callback) {
12982
- const callbackRef = useRef18(callback);
13131
+ const callbackRef = useRef19(callback);
12983
13132
  useLayoutEffect(() => {
12984
13133
  callbackRef.current = callback;
12985
13134
  }, [callback]);
12986
- return useCallback25((...args) => callbackRef.current(...args), []);
13135
+ return useCallback26((...args) => callbackRef.current(...args), []);
12987
13136
  }
12988
13137
  function useOptionalStableEventCallback(callback) {
12989
- const callbackRef = useRef18(callback);
13138
+ const callbackRef = useRef19(callback);
12990
13139
  useLayoutEffect(() => {
12991
13140
  callbackRef.current = callback;
12992
13141
  }, [callback]);
@@ -13017,7 +13166,7 @@ function conversationPlainTitle(conversation, labels, uiLanguage) {
13017
13166
  }
13018
13167
 
13019
13168
  // agent-gui/agentGuiNode/view/AgentGUIAccountConfig.tsx
13020
- import { memo, useCallback as useCallback26, useEffect as useEffect16, useState as useState9 } from "react";
13169
+ import { memo, useCallback as useCallback27, useEffect as useEffect16, useState as useState9 } from "react";
13021
13170
  import {
13022
13171
  Coins,
13023
13172
  Crown as Crown2,
@@ -13252,7 +13401,7 @@ var AgentGUIAccountRailMenu = memo(function AgentGUIAccountRailMenu2({
13252
13401
  const membershipLabel = accountMenuState.membershipLabel.trim() || labels.accountMenuFree;
13253
13402
  const creditsLabel = accountMenuState.loading && !accountMenuState.creditsLabel ? labels.accountMenuLoading : accountMenuState.creditsLabel ?? labels.accountMenuUnavailable;
13254
13403
  const errorLabel = accountMenuState.error || (accountMenuState.partialError ? labels.accountMenuDataUnavailable : null);
13255
- const openExternal = useCallback26(
13404
+ const openExternal = useCallback27(
13256
13405
  (url) => {
13257
13406
  accountMenuState.onOpenExternal(url);
13258
13407
  },
@@ -13628,9 +13777,9 @@ function AgentGUIConfigMenu({
13628
13777
  // agent-gui/agentGuiNode/view/AgentGUIProviderRail.tsx
13629
13778
  import {
13630
13779
  memo as memo4,
13631
- useCallback as useCallback40,
13780
+ useCallback as useCallback41,
13632
13781
  useMemo as useMemo30,
13633
- useRef as useRef32,
13782
+ useRef as useRef33,
13634
13783
  useState as useState24
13635
13784
  } from "react";
13636
13785
  import { Tooltip as Tooltip5, TooltipContent as TooltipContent5, TooltipTrigger as TooltipTrigger5 } from "@tutti-os/ui-system";
@@ -14577,6 +14726,9 @@ var agent_vinyl_player_chassis_default = "data:image/png;base64,iVBORw0KGgoAAAAN
14577
14726
  // app/renderer/assets/icons/agent-vinyl-tonearm.png
14578
14727
  var agent_vinyl_tonearm_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAU4AAAO9CAYAAADtyo73AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwABRi9JREFUeAHs/WmQZNl1Hgie+55vsaZHZta+pBeIlaS6gi2xh6J6xAQ3geCIANWiGi1pBgUbSSNqzMRCj4kGjY0ZCqYxSb9EUDMjypo2hoKNWYsa2RiKM8OWmuq2SpokACRIIUEIRKFQVem1ZOWeEZGxebi/927fs917PaoAVqFi8Uier+DwCN/CI9Lii3PP953vODAYDIZDhF9b669D8wSA+7GmrlZ9A/3G133nCvB1PQQHw/Cwi+1W+TtQdi6urKwMYcbhwGAwGA4Ba2s3zvvKf3pSV+fHe3swnkygnoyhqRuomjowqqdLUZZ06Xa60GqHS1leCE///AMPP/w0zCiMOA0Gw4FibW1ttZrs/Uo1Hp/f2dqG0TiQZrjUdR1IkwmzDmUn8iaE66IowQUmarU64dKGTqcD7W4H5npzQw/uMw8/+ujTMGMw4jQYDAeGtVu3fmlSjT+7vbkFO9tbMNrZhUkzCSQZKkuX6KZpmkA+Djxw1ekK/KyAJnxaFEUg0FCB9nowNzcfiLR7YfFU/xOzdIQ34jQYDO8YocrsV9XkC/WkOr+1dQe2t7ZgMtmDpmoCy3giTiRG5U4kTio46XYvr+LoP/yfD/dDOL73ul3oBfJstzvD00vLH1x54IEhzACMOA0GwztCIM3BaHf72aJwg421jVBpbodbkRhDL3NcgQ/EGT4kYIXphHZqJEc8rxd0R6hICyZSZNfwefg0EKyHTiDPbm8u9D5b6/eePvNDs0CeBRgMBsP3iN3d3cH29uazgesGeDzf3dkJR20XisWCiLAMx27nU33mpLj0Xj4gkgxU6gr51DF5htfAI3sRXidUsuEyDuLSXv/ytWvPYnULxwwjToPB8D0hEFx/487Gs0HwGaDog5VmSYSH5OdI9ClbLSJAyCpNJEaiTScVKJGnp4+VNIlAAfg1wpF9Mh5jxQl7e7uD11977XNwzDDiNBgM3xN2dnZ+afPOnUGn04bt7R0mvbIg0kMupKoxkF0ZLi4QIMJJk9MBdzSZQX1qGob7S8evUQBfY9VK5Bmqzvn5ebh9++ZHr7z66nk4RhhxGgyGt41AkoPbt2491VQ1CT17eyOqLOkI7rXq9MSHrVB1YuUJhVSRXGCymi5HcwQTbkHkScRJx30mYHwNXzf0uu12Cy5fvfJpOEYYcRoMhreN8Xj8xLXr1wCrzdFoBOgjcngkRw6k6rFgu5HzQnwl9T2pzsS+J3B70zkvhImVZclECWxJoovjC76WHtlPLS/D+trt81euXDkPxwQjToPB8LYR+pkfv3njJhHneLTH1iLtVwKr4U4Ir/H8cUnH9pKqTSRThFei1SqTBKEyvg6b45mmSqloO+126HcWcPvm9fNwTDDiNBgMbwt+7Fdv3Lw+QK8mVok0BQQQxR/kPD2qR28mAJFmKxyzQYiQCNXzEb2gC6voeGGBqJCqlP6PHk/PC0LUwuICrK/f+QgcE4w4DQbD20Mbzr/88stQVRUdu9l7iab1eE5no7uDJBQBU2gZjuzYo0xezYLU8hbNq/PxHAmTrotkjVclHskV7UkL83MQhKnVtUvHY00y4jQYDG8LdV1/5IUXXgjXVTxyI5RA+WOYug+ZEyvGUJxS1YnVJwpGbTx2t9pQtFpEoqyk64WrzkZel8g2vCZWnDjPXk3GsNvdPQ/HACNOg8HwtrCxfnv10ksvBSV9D6iz2fCFRysbrg7DNfY5UXGn66CIe/qYVXgk0rJkwSdWn0KMEOtM7ptqvapTRZ4EI0dfY3d7ewDHACNOg8HwluHH49UXX3yxf2djA3AmHQnTYXkp45M0g67EWddCnA0lI+EIJt5XTSZ0mYSjfhWqViJbvBcJ1vM19k0bz3OaTozyaHOKJW0gz3F4/mg8PpajegsMBoPhLaKq6/43vvEN6ITj9e21NRiNdqlvWQci9NLX9EJ+TKD4LNbcm4Y/rgPh4TG/wVFLqNj0Ho7pDQ60N3zEJ0IG7osWhRCmk8qVjvwNjnvS9BIcA6ziNBgMbxk3bt1afeXVV2FhYZ5i465cvUrRb0h66TjepH6n50qUjtaBDCdVTeEeXubYqbqkytSLN0lEJs+kqRVrQy2AULliAHJ4LQxF3gnEOdftrsMxwIjTYDC8Zbz2yiuD0FckgQfV8BdfeBHaQahBYYfIrfEpKi4QXiGijlagTJo6IcQCkM/J08nF+0ytT73RJlSqaKS/s3mH3s/i4iIcB4w4DQbDW8arV14/p9UgBg1fuXIF1tbXYCEQWNVUnB7npVeJ5Cf9SaxGObwYqPqkYlQj5JxUll6EI7kvXRoqXIEItiID/KuvvBpIcxkWlhaGcAww4jQYDG8Z12/c6LPBnf2X+DFWnRi+gbYiJDZqVVJl6aeO2kqcSpg4odkIOYKo5CQoBZLVSjOq9HVD1SpWqvg1Xro0hEcefRi63bkhHAOMOA0Gw1vG2u3bfUorosi4IvQ6F+DmzZtw9cpVOH36NCvo4VjN7c1GjuCsmvuYBJ+UcTbHq/nTiYVJniP9UXpoeMh4MoalUNl++9svwGhvDI8++ij6QC/AMcCI02AwvGWM9/b6hUz5tDttaONytVbodb74IuyNRrCysgKTcGTHqaJGe5NSNaolM187QcEghU/BxsBVal3VrMU3HDmHpImtgbr28O/+/b+Hhx9+GM6cOXsBjglGnAaD4S0jHKX7ThLeceoHDew4xbM32oPnn/82kR1WhePxGCaTSkShhqxIOgnko9Fd+p1x2oiZlbcGs0CEaj2+FvY157s9+OKXvkjH9A984AO4xO3zcEww4jQYDG8ZoRrsI88RYbY6NHeO5IZ5mbdv3YZvf+v50I/00JvrQZMRIB27gUM9NCqO5tHlv8Ilczup8OHxk2pC1SdWmmXRgotf+xpc+J0LJAo9+NBDw0DYT8MxwQzwBoPhbYIT2bEKpCQjOYVj5ubNGzeot3n6ntNkdG8CF87Ndek+L75M7yvZM8Q9TQTZmOSYzsRc0G517KVubm3CN//oOfjmc98i0/0P/dCfhl5v/tiqTYQRp8FgeMtAz2YTCLGU3MxC1/mqlSgcwW/evAE7uzswF5R2rDS3t1skIs0vLIVKdE6U9YYV9Vq3t3HaHFWfgTSRdHEW/koQnZ771rfglVdepfUbVVDXH3zogeF99933FBwjjDgNBsNbxoMPPrD+0osvkEBE5EmhGwDVuA69yAkRIrYvt7Z2aBYdxaE9HMcMJLkwv0Dp7cvL/UCqPWhhMlIbdxF56odOwuNGuyPY2t6CG6FyvX7jGrz22hXY2dmGbuhv0mb28DUfGzz2GThmGHEaDIa3jB/4wR/8zddefeXjo1ANsscSYFJXsLFxB/bG4ba6pllzLD4xHR7nzKtAnptbW7ATyBSrVaxEFxexAl2gVHh8kd0gLuFq4c3NzXDZCsS7RfalsmiHx87TbvWr167Cqf6pz/zMz/7c03DMMOI0GAxvGQ888NCTgTwff+Xll1fRSzmZ1OEovgVrt9fTbqFw2durcAsmVaHo69wZ7cLWnc1AsOuhqtwl8QcN80DbLB2Z22mNcCDRdqeLijksLS9BN1xjPxUP8Vubm59/5v/7W0/BDMCI02AwvGU89thjGKrxQ//P/+6/e+LMPWc+UrpisPXS9sC5or+y0ofFQHb9cBwHVwbS3IP1tXW4tXYb9m6MAzl6qKoao+AoVUltR0i2nXYH5kIFioQ5Nz9HwSFzqKZT2HELczc/MyukiXBgMBgM7wD/n3/5L5567bXLn7733ntg+dQyPHDf/XBqZYXcRVh13ghi0aXhJbj00svw6iuvwM1bN0OVuk0rMJCCsNfZwVT4UIGiVIQ2p/7KqUCcc4E0O0Fd733yn/yTf/JZmCFYxWkwGN4R5hcXSS3vhAoRK8ZuL1xCTxIrRTTH00x6U0EdjvXj0Butw8fY+0QxCP2fKPzgaOb2zi4JQxQnF/47c7oYFt79/P/t//HPLsKMwYjTYDC8I4xGY9kd1KIxTN5mWUIRjuAFLnQL/+FRHFX15XCMx54ohR0HsuwFoagbnrO1uRNIc4cei77N5VNLvwpu86l/9uv/r2PJ2/zjYMRpMBjeEXAkEgUhFHeQBGkUM5AoWpXQyM4fF1JdsvDTC1UmHuWxWkX70ubmNlWd+Dqo2P/rf/1vn4QZhhGnwWB4R6iqMXk6ccVvNxzN8aiOEz80jo4hIOE27F+WLd5sSRsuy5IIttvtkGCUEpF4b/qsw4jTYDBEXLp0CXf4xD0+oQ/Zd85N7fUh0vB+vddur19dX4evf+0/nqLtQbRLqKa8TFzdi0SJZSUSZA+FHup3OvJnFqWjHiiSbT3hJCVkTec9nAQYcRoMfwJAhDiZDEZ1vToejwbVZHKu02r3A6kNfCDGOhCkd9DfvrMh+9BlVVrhUmamhHDgviCc9qkmDa3IeODBBymdHStNnCjaDko6HrdLGp3EqaC90NfcDNdjMsAXBa8FxqO75nZO0O9Zo8peZBFzswsjToPhLgOS5Obm+vlQyf1YqP5W66ZZff21V/rYg0RSwmM0bZIM5IWWIEdH54JsQXgfCjs40YOPL/DIXfCoI2VnApJoEVf69vt9uP/++zj5XQQfNLNPaAUwz5vv7u7QRkoXyHU+qO+nT52CFh3lmYxJVGq3qQIdTzhpadZhxGkw3AX4+te/fv7mzes/5uv6oy+9+O1VJMRW4WK6OhImCTPYV8QeZCAnNZi3Oi0mzLLFYg6GdxSlkKUsVgPgNb2ayeF5l5COXdbSl6ypX1lR3xJ3p/e6Y+h0WWnHNCR6HBWzBXk5sTLFY/rS0jItadve3iUC/da3XoBZhhngDYYTCqwsL19+9Yk7dzY+Eqq7876u6BcaiRH3nqOpnIhOjt4dUrw7gciYMHH+G6d2WjhT7ri6bJV8jaD0o4w4abGarvAF2T5Jn/i4Elh3A2EFiglHSJ574xHNnm9sbMCtmzfD5RbcvH0b7tBc+iZNGNW1rP+V6wcffBgWF+YuLs4vr4cK+Hf6/dMX77v33uFP/+zPzoSn04jTYDiB+L0vf/mXbq/feurm9Zt9JJqlhXlYWl6GHvopQwXppDIkxTrcj5UjeilxPhyJs0MGdfZellJxllJl5hdwKbmdgOQo74GucUeQLlSTNb84m46kiZcJjleGYzoR5511uI2keesW3L69Rn7NO5tbsLO3SwnytH8dlfmgtCPxz4VjPc6qL87PB2GpB735HlbN66FXeqHsdH/ngQfuvfDzP/9XjoVIjTgNhhOEtbW1wVd+98ufe/3KlfObWxswFwgFxxNXTvWJaEoiOyYxpDbc0YNWH6wi0ZzebQfCRNLEII1AULgzqJDjuXovHZEoUKVKERxxvUU69uumSs3V5P1C0uOsE3Giuk6pR1JxEnHevoXfB1WcaHofIXEGgsX3jASPie/z4T0ukDm+Q55PHMN0LY6gw+q4EbU+EP8wfKcXArH+ziOPPHLhZ37mZ4ZwBLAep8FwQnDlyqXBl770H5799vPPD7CS6811qTrDqqzV4uN1Q3mYFC9MqyuCIsOreFUUL1KtRPt/vBzBQdb2Usam7FWT5Wogr0W3Z4o3E6g8hHg6NUC9VKaRWL0Qq6wL9kq29FhOg3ciQpVU3Tp6DJI6WpY63Ra3GJjR6YsKUQ/qxj+xM9l8IvR24f/+Tz97oWy3P3///Q+GavTnh3BIMOI0GE4Ivvzlr37u0ksvDrB/yKo07+7BKhNJkIjHiZXIgSjfTp1Fcp+PFWSsGkXd5laoMmGyHxErxiWVTkQhrTj5biVPIkJ5PbyLl7VhBYzG9rT5shZRibybgFRYsL+zKCKJOiVQp7zMX5Oi63Cnu4hfTMyeJphGo+p8qHDPX3rpBfjH/+gfXWiX5ef/T7/8y0/DAcOI02A4Afiff/u3n/hPf/SN88ggqH4T2UgfksKA49KzQlbqchWHicJsKudMSydL0hi86zyWjU43TKoWr5UoCBGnatNJRSjaenw9eQEg1SivOhsWfrTibGquOp0yb0HUGYkzLXMroi3Ku/T1Kc/Tteh7JSuVczKN1KJQZAwMmeyNzm+P987/nz/1y58O7YML958++5lP/v2/P4QDgG25NBhOAC5fvfoR5JiiZPO5kzlwWpamJnXHpZkevXWDpDjYpdKU+4iM0lZJJ5WqVqN0Hb96el0lyXi/FLTeJ7KmqhNkEggJtgE5lifijMd5/br0nrj6JaKMFqgis0MVRLAetNr1sbKtKiZjrHDxcR0Z58TXDOLUYGNj7YnnLr1w6W984oln/95/+98+Ae8QRpwGw4zjC1/4Qn9zc/Oj7Y4cEJ2LSjf5I7PHEq25JODobXz85aMvZERZODnex2LOyZEYYs8y33s+/bGLfVAfv3h6Hq8Gln6mXNfa44Qm9UhVsacseK4+aXEbvWf++vxluHdbyPsnAsU/Gt7FStU3LIbhGGddczJTSe/Tw+bmHdxldP7b337+cx/7K79w6X/7V//qE/A9wojTYJhxhGPmebQK8SbIIpIgH2ddrBhZ3IGMBBPB8TE8EQyCRCS5zxWJCrRqTC9Ct6aepvRM42vLTXRob5p4G6KRCSNHYpCSubwOCBG79IX4eA7cc9XvVd5nfEu8DnNfP1SrXgAudll8wt3sVTOhatTRCuI6qPkb8PLLw8Fw+NLnfvonfuLSX/zwh5+AtwkjToNhxjGZ7H2E1eQkiiPPkSgUj+aJrLyoNVpxFlKpOSf9RHBT5Aby7MLBtDqe3+/e+L78/odrTxOYMFX59qqoS9XJ5O650swIj+6DUgg9XLAVMfUeHO9mp0pWxKN9RE5VrZjoqbKt2B41qScUQkIEig8vPE0uXX79tcHly69+7n/9oz966ad+/MefgLcII06DYcYxHlfnXSZyO1lwhrzByjrVcEIsEBV1fWyszqg/KM+fMrfr+VuZE/QLyTW8afBG7DP66aelozp/iqRZa18T2GMaK2TZpx7fuLyFvPKML+5YgY/tAZ/6ulGoikRdk6cUK+BaU5votoZuJwKVn8PO7i5cufr64PUrlz/3p3/oTz37sY99bAB/DIw4DYYZxrPPPruKXsVIDOhtxDscm9NRHEoE4t9AWopC+psuP6rH0A6G19syX+d+RLIEsR7JC+SPbYRMtQLkY3MtVaf0ObP7CjHZFyL8eLFOcQhIEYWoaLwv3FSp6+V1oxGfRjeZOCsc/aybaMpXo76Xx6l3FdV4TG/a3Nw6/8K3vnXpJ3/yxz8N3wVGnAbDDGM0Gq0m4oCpfqOSnCsS9anfMT+6a39QbT70eFe8aW8TQJ1J2dncqwc0I8jcvylPmqJZp0Sfjs1MnlUiz+z9qv2I7O3aM8gU/mhHVaFIKvBUaWaqPU0vsf2pUrKss/cgHlKtlvV7IDtTqw27ox24fu3qUz/2Y3/+0hNPPDGAN4ERp8EwwwjV1Ef42O2lLwix6iJhqFCt2bPaTMdfkWqUQEVAKgvudk4Z4AGEPPQ2iEySkyp9rg+GpLCzub2Jt0U1XypCOqaLTUiPyirc4IMaeQyiIPGq5O/HZ2q+tCFYDOK2xNTPiNT0hsmz4Z5m4zlQWYOV82klUDUfa/ZCvqfYK+Z1xajEb66vD771zW9+9Wd++qc/uv/fxYjTYJhpeIqIY0JiAkKRRxX1UslEe4YiuICXlqVTghCDfJFmz/X4G2fRvQpI+4AiTzYtpLeRKq7vMpIwK+jkgZfWgVZ6Pptn942etHkyqJH+p8bPRbcAZPPyAPu+h/x9s1CmPlHqa8o6jvyS27SiJQuK+PPgoQF+Pcwlratxf21t7Qs/93M/N3V0N+I0GGYUX/rSlwbjyXigs95MLU0kyoJIhtVnhM+O0w6yRCMCm8tJqXbZZA7J6fqYZBVKFWkmAIGb6p3G4y5MV5tJNFIlXcUaIa+G79MgEhWNyACPx3axm7JIlL4Pfgsu3Qksgvm8moziUH67j/uMWPHnb/CNfyL8VMWN75fWe7QKuHb59af+2l/7b+ICOSNOg2FG0S6K1dHuKFWbXo/rLqay62RN9HICJHN4rCZd6md6yKo1F3uXBH0ciGJNt0GsxuRTgvowIStAcxJVQsyrvarOqj5IYhdo79WlaSBtamoLIX4febUYlXiuYtlYn5T33HgP8XN+hPfpm/Muqz7zPz7hYwxmpu2d3TZcevHSr/ydv/N3VvF+I06DYUaxV1XnMbhCsy69GshdEVXnsnTJEwl55ddMHa0LeY5XNowoYL9h3mci0ZTQJB83kfh0th2iyJOJ3XIs9/vm1NVnmd5nXsZqYhNIxayeVJKNfM7gLlbE+mZ1ciivLLUSnSJR/mbi96uf0R+WwsVest6OAhNG8vlQNV966cVfkZ+awWCYRYSj5uN1MxHhw6dqy2dezGhm97E6i1M/Th+r8+xcqU6Vj3k1t19Vj33F7DHAoSE59VL+p5CN1Gvc4xTCUoU79hkzOxI9WipUp8IVqAMAYGom3oHMsLsokPmM9dVI32QtA2VRVdJBq3FtjsoL5zYrKHjKSn7adB/uUFpYmIeb16+dp4eAwWCYSUzG41Xc/si//1yZsYUxjSamI24qkXQGHIRA8tFEPYom4zh9Fou+PNzDe4jHf9h3W1Smxerkp6xQ2bG4EU8lXqtY41PPEfTID0x4TI5ORKpUTfp4H7vlp3urEKtx6gL71POUhgDkzgTKYaI7MiFNidz7eMwHn5wJ5P0UkQxhxGkwzCC++tWvrk4m4z722JjjmijYxN6mbIp0cgxHcDWlr5LmuIu817nvQo+UxqaLn4hABAC5p9NlxKsFnarf/PXl/0RVr5o0bsnEyVsw01E9qeMqDrms5xmV9SIFe2jvk7NGi7zVmggPstaGZ+1cgz3VAeDBT5G+CmFTVitI12xlAlrVYcRpMMwgQpU22BvvJQU4OzryErWC9gVpNajEp1CCUfED9u1K30+I6cifqjv9OB6rYxWrXyTzbbrpKo3Sj3I7EG63bJJ/M9mChDyhyCrjIla1RKDepR6tVIxEpp6nqKYIrtnXu4zvcfr9NZALR152NCnpTn9vWDFrjzQ842W824jTYJhBhKPq6t5kEqu6WAWK8b0s0/pevE8JViu//cq5h7yPOV1pOpWhQfSX2BoUhoxXelBNj4WMYJWGG7EIcQWrBFoLqbl4/M1dALH1kGWLujz9SNuPRZF6oXll3Pj4PP6bkb5XJlUOHSGzvJOkJq01/XTbF/b1X9kKxt9Tq2gN6X2AwWCYQbjHx3tjYApwsZJyUU0vY48TfFLPfdb/m7IeiSCSE4SPlhy9VuJVsUmP+LHYlCe77EguVVqTV3UgHsomW52RzZFnQcYAKVqOerfRJcBTRLnNyktqEri8z5pI3Pu8wtxPftlt8r5zkvTZz4NubzLVH1hgm0wq6PW6Q/zciNNgmEFUk/FgQhWny46YEPt/RaYEp+prSmPOqs7ijdM2kKpNB/v7nyBjnPq4rFp1ANMHfKk/MxFJiZaN51KxSUJSOvb66fcu3xfFxen6DMh6s0Wmroua7l36gmpjiuZ6IT0idH1/ntPowevPTv9m+PiTEyqXx6ceKFbC+O/RnVuwHqfBMIsIwlB/b2+SKeqejpdxIkhsSEVWfcVf/Vhl0f9HYUhXUajY4rN+aGwDyKfaGnAwragr2ehjuWr18UlRzVeRhbynNZnIU8hHQ6/bZBWnVrdkmwKZuc/ekLYnRKqSPmkid36dZKxP64pl1DPvp4LfV5XGojkl4XvtJkubQ75FfL3FxUUjToNhRrFK1ZmvhaykXyjVlpNszTwiLvdhph4fxCqS4tmmqk43JQ65qTqSd63x7ZBeH/YLSvrgJr2OHLlpn7DXGXXOwuRqUJwBDuL8fJStnJ96j4XsINL2BH3uGyG0RF1xxFJIUdsBMTpuakYdu5U6HKDEnfq6UlTLHw+ICj71kZtm/ZlnnlnHxxtxGgwzhnCc7WP8WuwXxopIJoYKzuEEB1Nqs/62K0lwWhJExdnFqjOJKISsHxjh07FfK0v9XBZYRnLV1wc//fiUj8nJSDrNFO1AQmSpT1vEIz99T7J4jd+z2q4g2pZEYqKvq71UzeX02ibQOfUY8tFMV5yQEqK4spdvo5C+J34NEaTCLRf1x2PEaTDMGErnVvdw1BJ8UoSBCQ8FE0xEKot98+mgvUufiSdp3zrI8TdPR9IJxvxYnI6pIKyR9S4zYQVScZuqUD/tf6TxSiUygGj/4Y+z3iOkyDj9wwBRVYep/ivFzhVpEgpbGPpzUKLUajEew2H/0dxHMUltBFrxgk8/EKcVexH7yRv6b2TEaTDMGAJNPr6L4R6ipDeZOoyVZktSkQpZhRFHDZvpytHnR9/Cxb3k+hC1KYFYgfR1nJxV9Xq/JzJZfpSYGEqajfYTtdqUyaGK2g/NVAanEpnL9qlrMHORhZLoY4kgs+KYvJVe80Abag/4rPrU99xkZJ5X5RB7yC7eLr4lcFkmAD67VbSs4jQYZhWBAAYkDGm11EA8emuvL/cz0u95k87J2t9MCnqRrQFW65KL4ke0IsXCkYkM9HEuHY2TjA5Catn7jkq1HNGFPDlMuI7ikI5C6murSu60DwvTmZv6Xl32+tFfqeTYNFIo8htUoz2oSLWvleGkD+yz6pmfLt1eibNTjym+XqvTM+I0GGYVTV2vTqox5F5FJTOemuGjuvdJ1PH7+pu5SbyIqzUyQchBLo2rp0iqOp3lhliR0b15XxRgqhKN155JPE9DoqqwrqOXE7KjM5mOHJNuJNDCxb6tjoxGkssqXgTVyg1kM/BZlUm31bFXGZV1eR0vxEokyt94Zo1yYkPi3fX4uvOdzrp+70acBsMMAcOLa9nQKL/upAMTIhHqsRYiqSS/Jx/JVfTQSRxpFvKRNFPUtYr0kJGj3BbtQHlZ6ZICHUk16316yNZTqCXIN7GvSe/Pp3aBzDRl31MR3+vUznjtZRap+nRJ9hbVm0lahR4lbpCv4bXahPxpmctAf8bkXEj9YFylgd9L/6wd1Q2GmUSr1Ro0smQMf5E1QV2PnVSNSeK7qsuKWFEpWUyFZrjUtwSIFZvf18PUawdvfr8D9TX6SI75c5t9qnVTV+BrH9dmMLHKRI48hqo6aTnoDiVdl6Gvy+4BUd2z99P4fGNmM7W0LbkSpr2b+ftNDK6EqSuWuarnuwqxIl2witNgmEUUhR/gjiHyP1LvkvMvEbHiEoKJ6rhUpqgKN1oKin0HsoqqiJWVj73RKS/nvsqSXzOvykAt5FNHeLX1KLTqjGuA67RzqG7SHwJV1bWKjnPqUTXfP/GUVaCgCn4TSVP/GkTSlO9De5wihcn3Nf16Uz8n9cdmHwcyvjj17wQGg2F20LgBpr7jcR3hm9SLi8SXr5mAbDTQ+yQS+USe0z1KFmFyotuPIrMUaW8w/xoA6X79OF7LY2tJRKLqOVSdVc1xchLNBjT+mKna4Fw0tudhyzlR6nFdb2ebEX3lqUVsyZaUhCGfrezYX31yn1NfKyfnJLCF1/va1M8IDAbD7MC5xye0C1xIhW+Mv8xlUUwFE8u9wPPWTtuDqSLNmpU+PjYpQ/srTyaXpGRT2O/U20uvm3qMWehHA7ECxCqTquc6W9SWizIxwV5cA7S109Gxnf5I5Bs5CxeFMNhHrJG4m1R5UptDiRqiXSAdzbM/AvpD058mZB/pyGX4mQ/zn4MRp8EwQwhHwj4SJ/jp6RqIZFhIyG8BPvczZqs1tK/JUWupeiqcixVkTpRq80EoEaXKDmKlGZ+TZ15GVT5Vj5qMhDPq2KutZNe5z1ORMmEJX5ZGMF0RBRsNawZ5ea0w03tKqzFyNX9qBfC+Pm5KcMr6wfljnYu3xT8NaEUK773VKuyobjDMKgLZDLyulYhwU2SiCvBUTxKEJ4RQeNcQnvy5zizyynKKtNJjXexrJlsTCi3aHojvZup+n17Xc8lJPc2arUBIOkigtbgEcsGGq87UyyzdtLqeqk5OTWIi9fJ3RFd28MckSsn3qoKak5+JjmHGLmgkSRe/fqzsYdqyhfch8RdFsiIhjDgNhhlCIAyKkwOpkJJlhkLWmDwKiP03xFTfUWxBAHlPE9iuk1WI+rrJT5lXn6n/F8UUvhLCapI4o6q6Vm/Ayjqb3pvY14wL5yBVgK6Y7r9SVUzrQMpIbNzzLLO1ven709CQXEX3akcCT1NKEKtNiM+f6m9CWseh19lpnd4GEv8Xv/hFqzgNhlnEV599tu/KAiZ7k6zqkZ4iGbF5sqYolEgz5dgnYSb+1gPESvPNlOToXQSYEouUaHOlWZ+fHsAhH/E2IavcHoTHdB23VF+lKu3clpXVGA6ikKXfa5G1JYpCb5tW2SHrb4KT2fhcJIrvRX9G8n0WUz+i7HuMLzX1eVXVU6RJP1cwGAwzgcnCAo1aUoAxNf2ACEmDL2hdhpIJ60GgR9fkV0w9yBzas+N+ofohIRJk7CP6KCGlak0Eo/2qtBZmqa3gst3poqhPQo8zfD9Y/WFMXrM/Jcnx8/T7hNg2YMJU5Vz7sNRzhKxybJLirxFyFMnX8ERQqkRhanZ9/0XbFhE+9Ywnk/HL+3+eLTAYDDMB5+r+ZDwGHLcsikQioD3AQJxUdbpkgGcoc+rHSdiJp09Vp13q4yXVHSC3+UQyA4gJ6sJpyRMZe5pA141PSe+NiEFoftf59LquUrCHVrcFf5Z7TGFfRazfh9OjvfR/vbxFSoH3WhFzrzKNekIUw7TvmdoZ8rUBojtAe6LT/yYu/HtUw303W8VpMMwKxuNmMJ6MoaqbKHjonDkd1SlSrZxSmwHcvsrLR2LyPp6qpSKFTKkHyC096fXyPiBkXs30lNgH1TfuYKp6qyrub06qOh3PM0Vd+5Ag78VlbYYYOqL3SZhxsjGlKSiI70USkWgthxBlHmnn/VS7wGctDR9/Hj7+fHKrEj229kPYByNOg2FGECrK/t5kj4lFyikPeX+vpJXACJd5GZUAtLx06bc/qyp91ktMCvsb+ntTH8Ob3v+GapC+nJcFZ2JFyneo71vkxuZ8qYyzHqwKTk7M7qnvWfCMvU87iHjsVGaBhGzjUZzemI+hH41OKsl1E6eMXHwP+vNTMUy/OXIVlKX1OA2GWUUghD72OBG5v5AmakQciiG+siddqyXIenWxOnTZ/SAPa3hNbjTCCwEWEunWSA/UFdM+USXaVKHxU6N9dOoo30TSrONKC8ji3QDeTM3XHen8/nS3utBjJND0vSkZ0vFcK8SpCaImO6Yn8s4r3Aiv7YhUpuP/1+ThbBlxGgyzivCLOqhoaqjJKkUmyRYSZ6g24+qMbNMlwqezb+pBSiWW6igvyve0QVyrriggQUaGbyqmQHqMvG78Cl5WEHkfQ4Zj0LBz8T3AlKwNcbcQVclZZanhyzoJJb2CRLYyUqqVphI753PSd5tSknxKRorvfJ9IFSt34HQkX9XrFy9eXN//b2XikMEwI8DqDMUh9Uo23seTbJEFXhTqf5QqEIlKTd5MDimFXY/bICRTauVKQpPuLZcVFTBNTPQShaSqexFbpEdJY5SiniNJVVWdUo9A1wDr83wm0uhjUkuhkO2WiKJQr5C+f5d6qk4EICJGrmCbjPwAEmlyb7WO/VRNTkotBZ8dzxP5FmqGF2Kumubim/1bGXEaDLOC0p0bTyZypORfdvwlR5LDnh5P0sjxVXuc8nGhR++S+6CYIdlut/nSaUE73NYJH9N9nXYgqFYkzlSCuUjUaScPTvyUUdxRsYeO6bWIKvRlUUUHUbVFIKqm+5v0BwAAogfVZ6lIkIVqFOmoXMQR05zgwx8Z/eOQn7b3V8YNTzBFUoX4g5WvL991kVXuXocD+L66mmy82T+VEafBMCOowzE9nxryTfol182W5OXEhW1liypHKjylsnMa4xZ+9TGNCPcWjfbGUGxv0+v7RqrKIjtm+3RsnlrLURTRnF62+Osh+SrRqTij7E3Zla3sMZltilsLLok9UEOMjJNuId6PI5c+Cx52Lm5OT1Fv2a6iJAjx95Wnv9P3pVVpPkHkkx0pn91Xwsy5lSrOurKK02CYZeDEEIoqyDe6Jxx/+wsXqsRQLXY63VBBduhj/qVuYG9vD3Z2d2FnaxO2R7uBLHdhPEIv6ISImObEoyVICBl0ltvRUbfQXqoq1sA9x7i+Agnb5T1WR2TaCu+lFy6duS69t163SwQ6mYxhe3snkPYoVJ5NrCyZ9JvAr0x+RMjRZlVki9pcFMCIfAsXLVikdDfqEEgsxz3b/ZYjPp67xsfRUHkJek8uq7QRuVgltTR+YsRpMMwykATxaIm/2DVdN0Q2HSTLQC54jB+FKnKvCsS0swPbm1uwubUdyDKQVCBMJCx8DL4G9RjBpwoNIFaA4FTQSYvL9Njrc/IB4F6mZ1+mElSj4osQLU80pRaBJtRrRYhk1IjFyjdqM8LV5aFVINVzq9UmYm5J1UpthBhoku1Yx6En2Wuss/zcHhCybFSgeqN31Gfvn38o6b0g8B2W8sPSrwnNdJycwojTYJgRYHYl/oLTtCVVXCUR1vbONtxeX4fRaA92A2FiNUmZnVn/DqJXEagnqoq66thibozqe+wPRjuPEmYSfTico5bQjiysAwDUrE7E6NO6X93xo/5NNvEX9F7p+I6H85IrzE6nA91wWVqah/n5BfDLS6GKbbHZPxBpuyU92XBRBb2JaR2QSFEq6CiQQRZmnOn4+jT9cSQ3gItqO90mPU8i3vb28M3+rYw4DYYZAXo4OV4NYFyPYWtzGzbWN+jIOx5P5CjJ/UXer86kwhsvGxGMGyqdqqaSUOGGe5qNkEqTCEOVcsj2klMknNdZc1np6xORktosq4PxqVGZr0Up10pPWg3kFMBZ9ZoT7enaM4HTc8Nt7UCWWG3Oz8/DQrj0V07B6dOn4czps7C8vByIdZFIFo/2RVOEDmkFlYhJ2I5QC1cjOaBNk4SfZp/iLg1RrmDle9BxTq7IRd8vyPy+fvHicP3N/q2MOA2GGQHaZ5AER6MduHL1KtxeWwNco0G6Srgdj7DRMSS1UiNHaASNZzYQqzwEW4pk1S0+3jVpE6RrSBEnx6NmgKqXUidq5NhLx2IhPO4xstoPQtZ6XI4Xr5M72e4hbQE0bC3C+XW8bXcM9DobGxv0/bcut0O/tBdIdIFI8/TpM3DmzAqcOXsGlpdOUS8VnIpYTIKVtCf469fRyB5F9Cih8/cXR1ldmhwiFb8oRM0HDCa5+J3+rYw4DYYZwp3NTXjt1VdhLRzNud8ZCKLlxCtZ0S883U4TLVztlVItNY1mZWr/L7MsZWZ5vB1FI08pSXXsOyai8dGhFN2OPqnZ6bjf0J53PR4rMTbRR1m9YUZcvZ4xPETeEf1/waOVk0moKSfb1Me9eesmvPra5VCVllSRLi0tUzW6srICS4uLZLXK32Md05eaqQ2cyZIEsbdJX9OLd9Q5yGYG6LjeTOqvfad/JyNOg2FGcGd9/eUXXnwRNu/cifYbIptKiIyIh8N+QY6lZIaPu3tcHKf0kGLSitTAS2KLJBNxkAZbmZyq2XQnk04hbYC4ijhxDpNfoT1FVe2btE+9SQSWepA6L+7j983xcTKX7yBbSgf0xXDZ23i8R0R648ZNeOXlV8ifOj83B4vLi+E4vxR6pd1MJNI2RObh9ImivUueUXDZ7L3TMGW2SoW/TcPv9G9lxGkwzAheee3y+o0bN2BurhfHLkF9ivRL3VDiT1EoGaBoEo6nUnHGFHU+29PjqNoSYi20AgUxzSPBEGmxeKMKiU4bIaHVdaoLU0KRvIZzMG06z6vLZqoCTfcnYstn35WYPRTxazHZy2ilmvXxpvBe0UmwHS43bt2g/icJTeF43+m06Q8AbdV8w9dPlWeCiw6D+J8c7+s3SUVSGHEaDDOC16+9PpTCkFN5fKb2NkwkTRbcywjk5mrpzTHp1RKIUYh1pynYCkQiEkDs72kFSuZzPPY3LsrOGg5CQpBUnGrRUWsQF8FNPL7vP6rH5WmQ3rOSppIVfQciymTDUOwXldZBfrSm91xiv7fkloP0T3fE7M99ypK+d6zO66nqV4hf7ZuFTpg6SJmgEO8Pzxl+p38rI06DYUbQTIIYQT5uOWK6NOWSJmPCpxWPOeIyTAQfyatsQkcndhz1IHl1MFoSSxFV5NjOT+bHOo6vQyMjcaVUiDS7LTYglx3306w3cFXcqAVIVfk8ODir9jJfENWXMnseA0t8ajGoVsWCTvpe9f1HVb9IIcS+5j8S+D7w54FH+pQK30ShiCp0nypw0FaBfA38fr7xjW+YOGQwzDqC+HMRZ7x77UQwXver+7RITVWVOiMBDtZoIgHq411m8K6LOh7pEdzvhKnHlyWSDk/5cC8SyYZ7fkpGscqUvmusKDV5Pe9vxipTe69NqiC1J+vSXvYinxICrkbjeiU13BdFNNZzpSqeS/le+PvjcrItYSbtcJTfG49hbzSCMQ4aRCdCHtUHcdS0+Q4TQ4oSDAbDTODixYujD7z//efDL/pgv5oNPlOHi+zI69OxOp/Vjsp2XcctkLWssKjqdB8a6Sl0uOYKs4mrMXQVBVeTqOh78XNGM7xalcLzKvJnZv7PTN3PfZTsK03iVVL6daY99TIjoclcexFlb0iz6wKNhostARGgfM1/eGgCS3qh+LGq6/Ta4ovF0U8E/dHw/rnLr1/5/Hf6t7KK02CYIdx3/wOfuXH92nm0GtHxMVaeTfQgQiauNNL7dC71PZMNSUjEJUFEaSpvGzr1LsqopBII7gzCaSWaVBITuxrZvdp4hKTIelQ1ZCXyXpLfQWxRhYtlZ5Er166IhnrKGy1bmcINsfLU96c0qSHG+n3EpoFP3ySPhKb1w1yhOjLaL5CNiSvQSeiLUnEqbgMnFe9kUn1HKxJk78VgMMwInnjif/fZzc07v4STQanizCpQJTyXen15VRcHLZVknVR6kHqFUbUHiIqMkgaOE+HcPM6+I7l1ep24tgM/x7FITmgqiaCwat0b79G8/O7OiKxDtDsptB2wEk2L51SxL0jgKST9qJQRTBqtBEhWIUhthuxtxsoy+7FIL7iJfw20TaDtiKj6yM+P3QGONnDiqCtlA8j3j33RcKT/5O//x4ufhe8AI06DYQbxN/4P//tn127ePk9VUlnQNAzCe59VUmjTcW88DuMxtW7iOKGXCkxFExY/mijwKBFxoG8TqsxdIrPFUJktLCxAt9ejviKORmIYB1ZrFOYRyBOP5ViNbmHoyNYWbG1h4MgO7O7t0ghpFGTEV0nGeyGvlpAxpj3R5+EPhRJ4I75SmOY7gDcY8n384xH/AGRHdrrZJXeC+l2plVDrHxdPBK9/bLq9Loy2dj/4+xcvXvhO/z52VDcYZhCLc0s/33ug9+y1q1dXsXKjasjpZJCQZuGSeCTrKpL1R3udPN6oR/xa49X8vhluIh0mTaxX77vvXlhcWoIYyuFczALV9CK8NGJt6gbym2CKUytUqXj/pAVNy5NXtCUz6Xhcxl5pRWQ7po+5B+sDGbelDaA+Sh/V7RyaHq/fQyM9Bx0HjTYnIVDpZEwp9hycjFUvT1DRXL+0Hrz4RMMt69/t38fEIYNhBvHlL3959OEP/+y/XJibf/9ovPd+7DXGrMqSA4Z1hYamwiOUOOPUkQZ4NGl2PBJrVMOFQMN9uGWz3+/D6TNnkzIvvUYO9EhHa+5xMmEh6eGED1aZlfRE9WuWsg/dSSYnEin2UfG1kbjwmE+9UOfkPdbxfaaUpmxfu4xsNiRSgVScDf3xiBNMelsUijgXNPlJfXQU0HQSkXhFlTS+3lf+4A9+8bv9+xhxGgwzigsXLoy++KUv/ctf+IW/giXS+Z2d3dCTq0JFx7uDKIxXTOLRkxgJqMmEpUSQPluBAS4p806O8Uhc/ZU+HcmRpMhkHq6xf4nkPcIj+KSK1SL2QkejEWxvb8MOXsJ7JNElXKbVdCZqWqfhM7FKPKP4GhpNpyJUI6svatqYiRcfWwxaqUYHgdecUC89X0lJctOz8fEPjP4MQGfVIb7nUFUPX7v8+q9+t38bI06DYcbx7LPPXviv/+p//Tsryyvnt3d3++MRV2hlKcvbRGSJARVuei1wFIoA4pEZsiN97JlS4epIHFHP+ebmDqxTFuiICBd7ksunTsFKf4Uq07m5eTq6YwsAQ5a3MIl+e5uS6OkYPKkiQXmf2aCo/1nHdKeGyHMPdA86pdfnaUtZDmg+PaUVdS2z8G9oV8j6Ee1lxr6uXDfZJBTeMg4qe+jbXrx6/frnv9u/iRGnwXAC8G//x387DBXor/61v/5X3emV0+eRnMgiVHFAMMjIICFT3pW0dD0ueB8JKK/8ICPWSixHSG4bG3eIRJeXFmG5v0Rkef+998H9998PZ86coYCN3lyPCBVfGCvRiVSj9PmEfaKYKcqWJiZBrFqJQJFYpW+LxFvJOJSSI5EnpFxNH9sNqWps5P2r5zT//vQPiG+SiBQns+TrNLGPyiLRaDy+cOvW7d+E7wIjToPhBOF/+rf/04WPfexjn7/n7NmVe++9dxWPxePJHhFQPhGU9zY9pHi1Jota23/NQRvJ0kTVl6/h9OkVOIWBwosLQWlfompz+dRyqDbn2PNJPcI6PH5CNqSJkF+hq4jJFzmh5XE7QX3HUOaGtmd6CREBFqbC90LtgULCPwDihJAI87Fy1Pesn+o6D6X/KYFs6jkw9QdDibWOqjoKZHu/uba2fgG+C0xVNxhOGH7xF39xGK6e+Bf/4l88tbC8+OR4NPnIq6++Mrh16yZZgsAlwzeJH/ncOL7APlLRQrWpU6WKj0fjO1pz0JaEx/FW2YZer0cRbrzWoh2qXM4Jxfs4jZ7XEO+1OkSoRJxUhY7JM7kXyHhvzEvpMMkIX8s5tjVBVNIbSTZi0lVhycWWhNgIXCGL5ZhAed69IVU+Gi2l+mbPvEv+UBHOHGR72+O+Irjwx/0bmI/TYLgL8E//6T99IpDMx69dv37+6pXX4fatWyR28LE7Ja/Xvo55mVEw0ZJOPmbFuyCyO72yQtakTiDCxYUFOHPPGbgnKO7Lp/rQ7XbpKI17kG7fvg1Xr12Ha1evwfrGOmxtbkHlKyJLJGD8HJfL7YY+Zk1V3Yjew9LSEsx1OzDW1cjRt9rE1CSeUZfEJ5eM/8nAv3/2Pv+G0rQSOJcRrz7NTfWEq7oafvObzz/2x/28reI0GO4C/N2/+3efDldP/9qv/dogKO7nH3303Mdv37px/vXLr8PO7g6t4PCyvIyFIUgjnE3u5QRaGew9rxbGjEus62jWu8vriZEwceabdqgHYh7LHna1KiHKdkkpTq4t1a/jwGXM/8T4Ony+mvG1f8nPJfkqxuQlZwC7ABonvk2QatOLMg8s+JBYlvlAAfj7AXkch93zi+JXaGJvl/64DAPNfvCt/LyNOA2GuwhyjH8aL//oH/2jQaCk83PduY9sbm+fv3njRn8jVINoIULVWme8i2ymm0nVRR8lHrvLFi6GK2hNBREmTQ7xx2RVCtWjphoV0tNkxb9Fx20k4EKIVdsH7ENtS9JRMxX4wfH0yWoFLs3WR5HLYee2SEdvSD1M9fjrSHvytUJ8DN/lo6IfHjMMLYMPPvfcc0N4CzDiNBjuUvz9v//3hyAkip//zb/5N1fDMfz8wuL8jwVVfnV7a3uwubnJ0zyB3Jhp1CfZ8Bw5zY/zZs122aJqE0cjsfJk25KTbZUuHoHJIC8meaxyx+UkFreFmPiZGAsRrPDdpZFP7nPKNyH2VBwtTQ1Y7dfigwp5bjJfpVl9fnghR3HHn3Cl2bB5nv2uza9OJvVTw+G319/qz9aI02D4E4Jf//Vfx4xJvFB4xRMf+9hgZ3tn9dSZ/mrgt8f3RrsDJNQq9DbRK7qwME/kiBUnZVq2WfjB8Ui8HatO5CZeayEZmrT9UgM72DxPBnOtSDU5Hh/rPTSxkuTnQjYu6YGDjtMsPfZfkQTTrL64MXm0UsdQ5b9GBCOtXuVLAurn4UuthxufKVz5meee+/YQ3iaMOA2GP6F4+jd+Yxiu8PJMfvuP/vAPr4bjdX9lZeWXAgF+VMckUQWnI3q3E3eh11nKUh4agio7BZDswVT4hq6oaLLsT25BSh8SMp0qCzOJBn8pI3Xc1MueeBXStXoFeSxJYy4tZAuveSGUnL+5uzt6ejgcvuUKcz+MOA0GwxS++JWvUPr5T/6Fv/DEaHuHwoUxwQiP51hxtqjaLGlPUTFxrLpI6jor37gTqKDRUOxvIlR8its7q7SLSHnOgfYjAbhKTISoijh9XqTwDy50Je3JsY1KmZdXh7hh+JoXwh2/MxqPn3knZJnDiNNgMLwpFhcXz413R1RZYl+TNkn2uhIHV/I+94J7jDzjzcdsTFDi5HZZENekVb05QdYyi+7i6t7p/E1JwoNGKlKvOzTqLMjExXXC64Egh+H+i3Xtv4YKebi+8OIBEeV+GHEaDIY3RVNV/VaL+5XY0yQ7EvU3W9LDLJJ3kgiPyZPSj1plnP6JmzHDfzU06/MLC/3l8HpjCgjZ42M7BYqI0MOV41BtR+H/hkBfww2d9xuBNNcn42roS78evtwwCDvD4SER5HeCEafBYHhTTKpqlRRycLK3PBBn6F2SRakQ6pBxRu4vMumhWIQeTx11xLi2Js6HF5/5j3/w1c/CCUcBBoPBsA9PPfVUH/uGpVSP5N+U/mZRtqaWpXmZE0d1m5VvUdULrjYx5MM3nPzeoeP0yYcRp8FgeAPW12+u0pp1VdS7TJxtIs4COP93epumzr+rEV6rTTTbNzovX5ZHeqQ+LNhR3WAwvAHVXt1vLbXBhYoRq0w6plPFWZJQxHYgkIxNnn/XwGQUh9QuVEtqu/Y6QyV6Ee4CGHEaDIY3oNNtDahPGQix2+3EneQ8NcTEqTmWcR0HCTwg6fS82gInkChjU6rRixcvWsVpMBjuTvR6vQEa3jEoGavNud4cHddbLTbBI3HWkmCEcXTU42waWfNbyCI5rEYrIk+qRJ27K6pNhBGnwWB4Azrd3jkkybLwlJDU6XWDmt4lEuVw4jKb7NGpIS9TQyVFx9FRvapl/JHmH++KahNhxGkwGN6AcDzvU8BH4Lve3FwM9WiFKrQsW2R8LyR+KMZmUrXJAR8Y8K5bNRENG+SHcJfAiNNgMLwBnVZnQIHG4uHs4M50VNSLkiaJ8vUV2uvE/y9JOCopbYnW/HqfJoaK1stwl8DsSAaD4Q0I/c0BTQFJIhIFfODEkETGxexM8FFRLyRirpSNkWxVYsUdH99y5RDuEhhxGgyGKZw/f36AQhCSYVsCi9vU7yxJHIq7jEC3UfLMOYJS3CV8kzZayh51TGdvdY04DQbDXQpU1FvtDvUtsa9JwR4tnk+nRCQVhiBFyeG8OVacLalG0+peFoyQaEPVauKQwWC4O3F2ZaWvmZlabbba3LvkRW5A6zU02s3LnnNNg4/reWWXOScmFfDFL37F7EgGg+HuxPKppVXqSwL3OHVevSXrMBiVLKDUDZKeep+UioSndg0nBlHbXXHXVJsIO6obDIYpLCws9HHGHOUfmhKS1RhIonE5ppJj3C/s+BiPViWnGyqT8t7udO6aahNhxGkwGKYwPz93rqomFEbcxiqyLNhm1CplFS+fv5vM9O4KfkzsccpGSu94BUan1d6AuwhGnAaDYQrzC4sD9GFin5NW/ZLoU8iKC0eEyJda5tQ5hb0U8kTCjd5O2ane6naGcBfBiNNgMExhrtcdICFSknshKrquyGjYt8nL1hrJ4fRCsqWIQ7r7x9NaDI6haw3hLoIRp8FgmELoZfaR+KjabAlpet7ei1Wm073k3sexStwkmRvjyY4kGZ1Ivu323RFgrDBV3WAwRHz0ox9epcmfQJyqqOs+dOpnaoczHtd98mq6lAqvAceNJCaF1zNV3WAw3J3oL57u47XOqOOqXz6uo9rDt3sN7lByrNmvWcpxXm+vMBk+VKj4/F5v0VR1g8Fwd2J+cW7Au4YKXsomFSdts+R9GSQG6REd092RHBG0LhiP8RRgXEXxCKePnnnmGas4DQbD3Ynl5aUBHtO5L5lCiwvHVOHFyImp7lUgx2rCBMkGJTbDI5ny/TUd5cv23bEuI4cRp8FgiJhbmB+gYq671EsxwNPyNWpkQppDr2VJG60FdnTBVPhJU1OsXC3BH8VdNjWEMOI0GAwR83Pz56qqibmaSJooEgERYyJNPM5XkwlVlV4IEsUhJEw0z2PFidstg9aOVegQ7jIYcRoMhohOp91HYiwlDQmXs/Fx3XHFCXnFKWHF4T/sbkLh+Zgeju+TSUUf0/N8fdcEGCuMOA0GQ0ToZw6QGIk02+1YeUYvp3g4J6HarIU86aheuGiOn4wnMAlVJz6G9g75Zgh3GYw4DQYD4aMf/Wg/9CMpUo53qLM4VErIh3OFBBTXRJionOPHwPuEiDRrJMzxmI7peEHXvDfiNBgMdyv6/XmqNpEo2+jhLFtxz1AhxEkz6OEx2Muk43hV8UI2z7Pr40Ca1WQs/c+KFPmqGps4ZDAY7k6c7Z/u41Ecj+dInFh1YoixKwuZHnKS9s4kWUvV2fhwXHdciU4CaY7He3RNftCiBRcufNHsSAaD4e7E3MLSKo5PqhUJLxglRxNBtEOdg4vpGE4ezgkJQZr2jrdhX3M84f4mVqfhqXddtYkw4jQYDIT5+fk+UOp7W8zvKg7JDDqJ6p4sSJOqoqqSQj9kv3otohFbkirgvRnurqs2EUacBoOBMLew+DhyXbste4ZQGCp4h1Akx1qO6FUV+5iyO4Oqzzg1RMRJ8+x3VYCxwojTYDAQut1uH6tLXA2M1WaHhKGCrEa6Rp0VdSHNoKDj9BCq8E5Itar4uM4eTnruEO5CWKycwWAghF7mIJzNodPpohGebUgFbVEHOacTUXJvM5DjpNLTewz8QKWd59QbGtNs6noIdyGMOA0GA6FslQNUzrtBUceq07lSZtCBZ9QBxLvJAR4cduxoD5Gq7NTjlFg52s1e3l0Bxgo7qhsMBvjUpz41wOt26GsicfK0kOOFbF7WWaJyrjakpo571fGojoEelXg6URzCuGOccw/H+btSVbeK02AwwMJCb4DXqKb35nri42RxqJBFbYhaj+JEkp75FHijJaYq1VJtYsQckW/ZvitVdSNOg8EAi4un+rqxEglwIl5MTkgCSjnCnufc/Fw4xvco6NiVjiaK8Dl1eE6llahvZN+6hwsXLljFaTAY7k688PzzAxpFD0fuixfnyZLU63Wp8pwLFSiq7FSJhqM8Eux4Z4e8nK0WL3QryNPpeQyz4dn1wKp3ZbWJMOI0GP4EAYM8wtVq4LvVTrv9eCDCVVcWg92drT5ZjUK1uLl5h9dhYCXZcCAxXqOi3sjaXxRHOt0uLC0uwemzp8m6RHPqdSNL3UhvvyurTYQRp8Fwl+Ov//WPnW8VxY8tzM2fD0r3am9urj8/34PF+cVQMZZQdsJZ3Ds6iusRmwgycCfGw6H1aLS3B3vhsr27DTvb27CxcSdc78KdjU14/epVKB1PHGHF2So4JKSp/BDuUjgwGAx3Hf7G33ji/Fx37iNBIX9iaWkxEOVcqA4Xw/EbhZ8uCT7dcE3rfh3IXHkpwg4WlTU473ifkM82V5IwNIHd3V3Y3dmFre0d2NraCUS6QYS6ubkFu6Nd6ne2O+0L1fbuJy58+ctDuMtgxGkw3CV48skng8Az/qWFuYVAlkuD0yt9WJhfgG6vA7RKTcZ/8JoWq3khAMcGdv6M5fNGVgDTkb328S6sRHWFBruUPNRVQ8Eeo0CmaxvrsHZ7Da5fvxEIdQtGo73w9dtP74wmnwlC0RDuEhhxGgwnHJ/61KfOF77++OLS4kdXVlb6y0vLJOK02mWsFOs4Uw6yeI3zNWUZRkw+IiIk0tTdQrz6txHPZjzK1xLu4RyNVpLuHl6vxqzOIBRhBXrj1k147dXXYPPOHdgbV8MgMP3q/++3fuuzcBfAiNNgOKF46qn/y/lq4j+9curU+TP3rMDy4gKmaZI4M6E58orXWXhPJEkEJ7/xhexL1/vpNseG91r2oXshUHxKw3uBeVUGyPoh+QAJVI/6ZFNCC1P4UrhCY219DW7cvAlXXrsSPl4PvdLRsN2d++AzzzwzhBMMI06D4YThH/yDp86P9yaf7vf75++/914IlSYRlQ+ktjsa8ToLEHJD7uONFxIPB1RtIog45RSORKlciH1N7FEWeiSn9b/0irwOGISIhWg5PQlfr8Ujmmh8d0y4OH2E4hKKSNeuXYfh8GW4dfsWThd99l//9m9/Ek4ojDgNhhOCp556qt9qFZ8OR+InH3rwAThz9kyoLx1M6gmMkTCDcOM1xkiqSCK1EsmQiZRXYLhUNZK13RFRMnM2bClSIo09TYjmeAS9DlWsTSRi51wc1eQql6kYX98F9b4eV3Dz1m145dVX4KUXL6HtaTi/1AnV578ZwglDCQaDYebxq7/6T34p1HfP9E/1zw/ODeDs2T71H1GQmeyNZQMl8DWVek6qTE7ocEKYzrPHkkmUH+Ozr0PBxPgyNEXkQc7jUQziI7kEG8cWACeA6CZMAIhCFH9SUEWLdqel5SU4c+YMLC+fCgQ96a+vbT757vd8H7zwwou/AycIVnEaDDOMpz71qcHp+85+zrvy/NnTp+HsPWfpCI3Wn73xHpEfkhWSKNmKfE6DTHi8L6hgRhW1XHcI1WJYpx1scc68oQkiBJreOf0oiUdMxkKOnhg4Ht1VZNK7+F3I42WFcFFy6hIe2Z9/7tvw4qWX0CP6dG9u4ZOh93kiTPNGnAbDjOIf/4N/8EvziwtPtVpl/9777ofTp1dChbkDu+FSV7UINJl9SI7eXhONHB/EUUUnMsvsRp7Yllf6+oItRfxyXnybNT2qqTwtYvPaywSuLPFr46glNEKcWnHKo+jRRdY2kPdC/VHN+Az/290dwaXQ9/zaxa+RcNTtzZ8I4ciI02CYQfzj/+tTv7K8cvrJMjQoH3roQZhfmIetrU06mutxHEnIa/My81Uq9JhOgcJylMcLEylXoerjRB8mkWbNBvhadwl5nxGuhBmT6u6FfIEDj5WgQSrNxqVep1xzX9XR++JkpYZUeCRtJM+vfvUi3NnaHM7NlTPf9zTiNBhmCDhL/qM/8l98od9fPo/E9tCDD0O314WNjXWYjMdCZkxeUiLypE+TKs9oO8p8m2WLF7CxtagJR+MxmdM372zC9u4WbG5tBYFpLNspG+5llg5agRQp2DhcFhYWYX6uRySOE0gY/BF9olgBF+jlnI6hU/hYfPIdKhz5mhoFROSvvfYafOUrfwDrdzbW57vtn3/m//9vLsCMwojTYJgRfOyjHx18/w89/myoMAdFIJgHQqXZKltkJselaAXFFzVANaFWmNKzZCWIe4hciQK02i1KOcIZ8nE1ge1Ajrdv3oa1jTVYW9ug8cg7d+4EAg0CUzWmfiZWil4miaRgpaoQq8ped44Ic3l5MYg8p+DsmdOhfXAGVlb6tG6jCaq+Vq74XpFAWXwSsgRtKWQVLJIuBYdgiHIZFPfLgTy/Amt3NsLDWk/89m//9udhBmHEaTDMAD72sY8Nvv8D73v24QcfHCCvPPTgg5R3uX57gz2WBfcNodH0Ic/p7I0XNZ2Jk6d+ilCl9ijAY3NzG27eugVXrl6Bmzduhtdbw14i2Y+QlEucMGqxhUgN8fiFKkp454kjNsRjOlKqGPGxc3NzcOrUKbjnnnvg/tCDvf++e2D51DK9BgpX0Eg/tMj6rlkrodHPsYjGXirURPavvHwZvvTlL4fWxHb4Ov6J3/6fL8wceRpxGgzHjHA8H6z+Z3/q2XPnHhngL+SDDzxApnWc+WapxYF0FEV24XFI+ZAKOAzfwEd0ehgy3A7H3Ttw5fIVGnm8fvMG7Ozs8LG72w1H7vlwzcdvHZuMay9oi2UtSe41HcGxF9nIhBF+XlPYx4SUdrUZzfXmAoGehocffij0ZB8iIQufszcaixUK0ow7JLuTWp6w6MSvC0GoahUt6nn+3u99BbbC+26q+oMX/v2/vwAzBCNOg+EYgT3N97/vPV997/e9Z9BqF3Dfg/eTQr12+xYRk3omNYSDyadJo5JIZr4m4zn2QndGI3h5+BpceukluHHjBhHi3Pw8nOqfglNLy0SWePTGoz+S4GQyZiKklb4N3a7z6vh1SG13OqsuM+2FE+sSq+81BRhP6L5uu4QzZ8/C4NwjcO7Rc+FIv0z71vF+iq0DiCIUVZo125/YUsVxdkhKZag8X3zhEvzuV34fK+T1BiYfvHDhizMTjGwGeIPhGPHhD//Uv3jve977IxgEfH+oNPGoevvmzcAiRbT3QOaN5NFI6XECV4BImHjkfu21y3Dx4h/CN77xR6F3uRF6kcvwyKOPwIOhV3r69Glae0Exm6GyG9Ne9IrIUqPj6Es1XqbTgcc1xVXP/kwxviOBS34nft4OIhEKRfg55nHe2bwD165ehfX1dbr/VHgfnXaXl7j5VDXTf56/SON93N0uNSmcCT1UHOO8euVKr3Tlhx4d3P+bw+FrM+HzNOI0GI4Jf+tv/Y1Pv/997//bvW4vHHPP0lTNtWtXSaBRZZzsPJFKtEeoi9Fq6IU+Iyrkf/j1r8PFr/0hXLlyNajeC/Cuxx4j0jx1qk9HdDyCj8cTSmmvZdEaTwilfik3UV20GfH0Uc1nbMfEqWq51//Tz5FIw3tuBQJHYWgvfJ319Q24cf0WCU8L4T1hxF0TXo+VdCVOiFNPemwvROTC286cPR1eawLXr1/vtzvdjwZR6vNXr14dwTHDiNNgOAb81Y/9whPvfs+7P3t6ZQXmw1Ea+5oo4GAV2CrLSCxsXNdKk32VjedjNCrct26twe+F4+xz33yejtfnzp2Dd7/7+2isEQ3qSKrjCduMNO0I5PUiEYvFCQASmSl8aqTqQ6Fw2fOBvUbxTk+VJ7YDsFE72h3B7dB2WN/YoFxQbBmw6MRByfrF+HsFYtBCalJsAaBwdfbsPXAzVOFb21v9pcX5+1986dJvwjHDiNNgOGKggn7u0Uc+98gjj/SL8Cv42LseI8sRBv92QsXmpfpzWboGcozzrETjfyjyvBKEny/97u/D5cuvQz8Q8Hvf+x54KIgzSKhY8Y0DaWpSklZzkfAgZWxK4zEa6rGy1K/Dx/QUTUfpST6Vmj4jPr/Pu1mial+gwX1CkXJrt28Tma/0+/L1G5l3B7l28TWpLYAugXD0n5vrhsp5GV5/9TL+cVh9+NGHN4bDV74MxwgjToPhiPFf/rk/+4X3vOfdq3gcf/Chh6k/eP3GdfJcQlyty6FD0TAOafqm02nDpUsvw5e+/Ht0HEYV+z2BNPFYiz1PtBvV2k+U+fImHvE9ZJOaCV6FGR0yF8IU9dtluZt6n5Ktk2o0Vq0NZOlIMpoZPkYf6a1bt0O/swVngupORv66ib1NNfc7SVvSHwJmi66EPwxorn/99ddxSdyPnDl7z7987bXj63cacRoMR4gn/vpf/6V3vetdfxsrqMXFJXjgwXBEf/0KcIZ63mtM0zYImtAJjIR7gl66dAm+HEhzZ2cXHh0M4N3vehcsLM1T/xKngViAcUS8dU01IvdL1StParhPcXHqDRX13Mt8phcypef4VJ1yq8DLTvVUcSqUmL1Ukw5Dk7lJSruKbofKsxXI/2xoJ3jOquPnuez5IlAV0l/F7x/9ojdv3QzH/ju9TrtcfenS8PNwTDDiNBiOCHhEf/jhB/75I+fO9bG/N3hsAHfCER3JBDdDki1HlJJGj8fApISfo5XolVfC8fxLv0v+yMe+7zF4bPBYEIi61Evc25sQ0XC8W5NUa5cRGaRju8/LREjECqB+yzQe6XVm3ac0+PhY8BmxOgn38BmDcvWMqUgIJPfbt9dgcWmJju21HtnleZq0pFUuVubYcsD2xOLiIgxffhlfcnD/vfdvvPraa8dyZC/AYDAcCZYW5j/9wAMPDJBkzpw5S7dtrK2FvmZ7ypvJF452o53mSBqBNDFB/ctf/t1AtHtw7rEBnHv0UZo/R+JFxdzFEtVHMitECeeP3dQRGoFkWBQpiDip5BJALEfyApgDmzqp8em9+kT0Uh1G25GKWTKRhH1PrDa3t7fhD/7gq3Dt+nVS4omcm5QVygK/i6lO2M7YC4Qbfn7wfe9+F4ldc/Pzn15dXe3DMcAqToPhCPBEqDYffOShp++5974gmJREeteuXeMjMvkYOcYN4Xkkhz7GOW6cNcc95v/u3/0HWAvX5849CoPBOapAcRUveicLOZp78QlpbBsfu7OGZkMW0SSCA8SjOX75WtYD83thwmtASb2Zri61D6rVpUIIOn0uRAsQp4jwDaAYthUI9OFHHoIu+jxlHj9NGnEDw/FeDn6pUJX2Q5U6DD3e8K30ws+pF6rO/xGOGFZxGgxHgPbiwufOhh4d2o3uvedesgihiEOqczSg+6lr33DsGhLjV/7gD0J1diP0RB8MyvmD4djapnAOnPgponDkoyKfxhkhU6sBQNLasfosZJwzVZou2p9yUowVJWgvM589zz2YAPk8ev4YouFAnmRDCiIP+T5DpXnlyhX4o288R+0FrDyb3FFQCPlLiwCr1VFoUZw5fRpCn5j8qAuLi0+GqnMARwwjToPhkBF6m+eDEHK+HSpEJAccSUQVHf2amrgOkPI0mTs8VYZFUKS/9fzz8MILL8HZs/fCg0FMwllzFIawp0nhwC4RnEvjNzKHnkhNk+CdEpKDGO5RZP1EDu50kSQlvpir1Ki4Q/Z+lUCTnSgRL6QQEnlf2ILAkUoKQA7V93PPPa9qOfdnpdpUUtfvgzyeBarsNbzv/e+DXng8Ogx6vd6n4YhhxGkwHDLm5rqfRkM69uXuDVXn3t4u7O5si72nZluP9DWd9/FYixXWzRu34A+/9nWY683DffffB8tLiySu7KJ6nnksGemIrIlEmlTsdE8QAOShwkp+vHCNCS/agqBIRK7vC6/rJDLp/WnKCeLX4F1EidC52GUvKf7RwD8i+Ay0G/3h179BafDYftBKt5BkEFckgQqfMw7f+9nwx+fcuUeogl9eXnriqKtOI06D4RDxsb/8l8+f7q+c7831gnJekAXn+o1rpDA3WUKQjIRLpej5CB+OtV//w/8UhJSdUGneDysrpyhBaDdUm1rRUYpRpnJLizNWi4UkvedCDoBWmUXqH3I7UVLh+Xmwr4KMZAk8uZQr71KOxq8RhSh5mUjWWOGWPJvelvn2MvRwrweR6IUXXyJiLEUsiuKQLprTXUcFk/x73/s+ImCMtwuE+wQcIYw4DYZDRLvb+Tj25CbjPTizcpoIB1PX+Zhes4cxqxqVRNttDu24dOkSjU9SSEevQwo6msaTmp0i33xUv0UJL1w8IefH5UJXbQCIop6qwkiweltGnnnV2XixEMWvl3yfIifxF/ZJqef3kZMxUIWJSj22JL79/AtwZ3OTJp+0VcD7ieS5nkmUwkTGY7j//vup8sTM0FB1/tJgMDgyhd2I02A4JGDO5uLS4hPhQpM8D4RfdJzbxj1CfP5N44+xcsMjbai4JuEI+s1vfpOqKwoAWVykRCM87rsiO2JH8tI+aZpHBzn+6zoNrjK5wOSAYVbWObpON2EWkUBjLxOixg76juPtUl3y13MxTanZp6qDbNnUSSMlxDZWmJSyVOAsOnk00UWAlSfEBXOQRCzgrZ3o6293WnBucI6yQRfm5/tLS0sfhSOCEafBcEhoF8V5NnjXFORBu4PW12jkUKs0hB6f6ToQChLH5dev0kTRysoZSlkvWwXshCM7iimKfJrHx4rPp6kfXLjmffRpIrR/KUafWOFKOzJLZYLYd419TNDbHeTKehKl9HsqUiUqPVbwSr8iQpHLk/8AdLodXhuMAcaXhmRTQrN7/B4zIlfWRrKejCfwyCMP0zQVvuby4sLH4YhgxGkwHBLaQRTCSZe90Yh6m9s7W1Bh9Vc68Skmy43LFG40vb/wwgtUFa6c7lOO5h4FdmSWHwBRx1XlVpHGxWMzPSazF6lqrtcFLVdLt3GPknumUZABNrIXcY7cTX2PalHSytNlJvvcpqSmUVeknmUhvVXMIC2CEIb34UQRtihKqUSVoPOeJ7cYHFWaOLp6z9kz4Y9TBfOLC+eP6rhuxGkwHAJ+4Rc+ujrf6w74yAkUUrGxeYeS2uWEHcklkZGjGLW1tTW4fPkyjRcuhWM+3oYqOm2PhFQN8sdCmi71SRutPGNVyAnrurcICVmNRioc0VfHqR/aOLlvR1BmO8okqBjGocLPlC1JSDxVoj5Vml6/OsRpp3anTbdj2DGuzUB/KopH+jyfdQNAnk2bOMN96G3FdgROVy302kdyXDfiNBgOAaFF+cRcUNJpdUUPV+rOkd2mJUlBHMLh0mw5MLFhpfXKK6/CaHePZrnn5+bJAE8bKAUeElExaaavy0f0/LFxCEksQrx9kv2cMqUjH5MCL3PisXWgLYBmn4Cl1kqpAOkxkKpB+n405Uiqa1XqWbRysQr1krupfVhsUdxBAS20LNB9oGq6wklzFv9DV8F9990L7ZIr1HZ3/sfgCGDEaTAcAsLx88d6vXmaEFpcWKRKCyddSrX76DFbj9KOE9QnkxpeffW10AftkNEdVWc0u0crUJ18lU2VVYMN344WpkZEpzg/XmTVoIxf5mb4NKte0HvwPkXPafWqPUaKnnMp4s5lx2fI+pFTR3ZpSfhY9bpM4GLiLGQFMV5wvPTq1atC8iXwRuHkUY2KPx7Xwx8V7COjJQnv7fW65+EIYMRpMBwwUE3vtNurKAbh0XN5cQnG4z36ZSt1Sie71n4fBllgoDHGriERoKCE1SP2N/UoXjcp5g2P1Y2QKQcMNVJt+lR5CqmyGq3cVky1B1xGonGnkNzLBAyxh6qEyc9Ue1Oxr79ZyBHbZ9NHkM3Su6keLK8l5gVtSKCTegKXr1ylqlTtUvrHhUNEvHI0/aHAfe+4lhir8iAqDY6iz2nEaTAcMEqoV7vhmKlm76Vw5N7Z3aX+pp5xo1AjZIWVFYokN27cpBSg7lyXVu6O9vY4i1MyNBtZO6F+yjpf5VuLMb3R6aMmqxYzwsmUcLYFOZqJL6T6LYrcz5laAgom4nTUZlJ2RJSFS0o4aK8TVHUvpsQl/frcTmg4MR6P5uG/18NxHa1X+DOK71se51ym9ssfCuwhY0VPWzwBzsMhw4jTYDhgeCg/gjPUSGR05F5cION6IRMxiTSL5K8seF3FrVu3KPgX7TgomOzt7cmYoo9hxlhZEVkiUSppCqHS0b1p4lQSHdudnzpyR7N8wUfzXGnXfquahyJfTs3Ap/vYB+qi4Z4rzzRRRIRapGO7fq14gcSxCKy6MSpvbe0WbO/u0Odx8snF2hMkZp6/x/BzoF1GvqE/TkGQG8Ahw4jTYDhguBJWMdCDczR79Ms/GdcUJwdZf5OIwxdEBngfHus31tZpqqjT6RFZYqq7Hrup0vRMntTLlN3n+ed1o/mXDa/PoESiNF2EI5tVU8f3qovVSLjZN2apFR33PLNJon1uADl9k+Qde5p6v5cUJu3leojHepDX0zFPJGIkTczr3NrcgvX1Nfq80B5DTK1PIhX+McDvB/vItCspfByI83E4ZLTAYDAcLFyxSgEWuOpirhcrxU7RAk3+kQeKDZN3lKPqjvmUSBZoCsd8yopi2DQRPinWRB6B8HBc0avjRzygUEIiuyJcN+zZpCMxBYlwC4Ffh18Tv36TVYU5cULWjwT5WvGY3UifFp/rXex/FrF3ycvfiux5+EnRcA80+UxdJNFOp0uV9u2bt6F8L1fEtfQ3tY9LRCsrhJvwc+p1O6TMY2BIqNRX4JBhxGkwHCA++gsfXS1lnhp/sdGShOOTnsYe2Xuolp28z4jkMBqNiDBwuRmS5zg8D6vGkkIxmHSaWo2MLs2sa9tQe48i4iA5+goDQzwJLbrhkogIeF+6hoCQOIVVL5rOhf3S1JCPFiQVl3QYyMV8T7mt0fFIepPRMwqgkXXy/mTUM/o+1U8a7kc/JrYeUCSjFia9BrsC6HtoksqPQMsXjm7izwx7yaVVnAbDyULZlIN2r02Egb/kmBnJVZdUTOLz8flzRGHHYGJUlHvtOSLeOogjFAQCTD5lJBeQ6UOt+mRqSOa/KyHkxucGdIjvAbRnGh7XKltxOghbBEhAhRBVIiiZMQcVj+T+SJiixFMxqZYkiF/bS5XtRBzSeXWcVGKSzcc8gbyseAM6DGqZs2eze/zW+f95XzK9R3wOjrLiC9DQwSHDiNNgOECEX+JVNG6rGo0fR+8jPwB0v44eifX4ujvCtb6N9EK5kiKhR4grHpmFLAvx93ge+ZFqD6To9KziQzLAF5K5iUd3nrxhgUnHG1uZl1L7qqmilcpSxCPacOnyIzs/piiSvzO2FRyTsJNepbYNdIMlPZPIk9Vy/Pr4dTa3t2ilCL1rfC9YQftGWh06l69CF77/Nr3H8PwBHDKMOA2GA0QgiUGZEWJcB1HkaebhGonGQRbTBnRMR/GGXgdFj1pWangfDe3yRYhvauCFbkRIRFwi3hTJd6kgfioaOc03LNAEMgpdVGg1NVmBAIWZcOn2WJgicUmeTJVmtuZ3yvguyjq1Img3O8TVwYUe1Usvfc6ksvMfDvlBuLSoDYNM8LWwdUFEG0OWubJlET+t/NBgE2xxqFPhsGHEaTAcIMIv+TkK8UVCw1/mooynSoKKIQX7KhFa3Y3laK49Raw4SbCRWfPoxBEydSq+yAZJEMXZNVzBodoc9Rz8Go6ndvh/jipBPD6joIIV2ySQ5vzCPBEQkiZ+fUxlQiJzjpV/NrIXsfrkQBAHTlsB3sV+JM3Wq6DlZeRSSD2fVorve981OQrEvE9/YFz6eenX8Noj1a9HnlgjToPhxIGPrg2JGk59jyqmSFU4ZSgX9bppkmGdvJmBuHjyp5YpGhf7pUyo9GwRcabHEoU9o22okedFH2aTAj20b4jkuY0rPcJ/vV4XUCdClX56fbCLs+Nko3IQrUVe9xEpcRZRTcr6oTD1vTunz8gtTF7WIlf0eo2MehYZKWs7wqkRNB75XWxRHCaMOA2Gg4SDQT7Rov1NyLyHkA3ekPghHkbuU3oiTKo2xZupR2JU1PM5cIaGC4sdyEfpJEbBQfryyt5kY6JoYrmDRzUdTevgbffcew8sLJyG0c5uqIQrGd/M1wdD/PqRtUCraBWOnNo7WdyRdoXuWdePQd4rBS6L9Yr7u2o3ytcSKxFn8/DyX5zH9x4OG0acBsMBgoos8W0WjSOPYW4KZytOxmZeS0AvSeiOjsnkx5QjPEfRNbEqi31B4Eqz9nV8fVLhC5dVoOE2biGyYNXw62AVi3RcSx9V2waN2qbCbXPz8zDX7dHY54TaCBz7VjdNJDF6n3Lkp+dnJMfE6XiNBvVVxegu/xVZ60DbGVjNkkk/EKdOMlEgM6QKM3U9skpT3vv+ivawYMRpMBwo3ABJh5eoAc9buywX02lvLvXydH9Pt9uhX3zsORKhifKdV3QyPR7V+aR8C0nha9UiHql4Qk9U9Z0rRi9z7U0WGkLG9JL3myNBjscTjsQLhI4fo1jVDs/Da51UKoq02hgRvarep1R5+g6KSK6uzkZOPaTpJGlNImlWkzGt/qWldVUVN2P6zKGgvU41w1OVSj9Pvw6HDCNOg+Eg4blaw0oTf7kx2YhEFSLMJlZcKthwi44rMkx6p0VkgTgr2S3ElWDqV2rV1ajanhGfc2mdLxWgjY/VXOPTEVdTk3gCB1I17FzsEeItSJbtdocIrIOm/ooj61qBNDEjNB/7TEd+7IE2IuoAfc+FYx+mlotJ9aYFxCRayTdBZDoJpDmhPUILNA6K6e6uUZErVZnK1kj2WJXi++XepzPiNBhOEthq09BxE3+teX86xCqTHiMmcILGwYX75ntzFO6xvbVNinInfFzXdezlkcUHppVlJV8mxUYqTCauwrvYgdRxSqlX5ejv47mXBR8NWGYCxmN4NanJJK/eShoBlaVuBfVi8ahfTws+otgzoRZxna/arwqaqpKlcpk6r1U4fu9V+NqnV07zfXUTnxuzRUFFL09/mLCdgM8ruEo34jQYThLCL/PQV/WgpioTYGdnJyrhFFJRJvsMjU2S1SbcVfGU0ULoK25vbpKnE/M8EXHcEBrQQlJFHqrs9EwsR2ZPbOwyMspWYYB+ffFT4pHdJSuRphdRnStVKZJjp8NZmS2fWgCigxM5UjITpD4pzshL+UetAqxCiVALfkydCT3U5mzYJ4pkOxrt0feDAhX1aKOQ5OPqDc0NBbE2jZBsqS9KYSmHTpyWjmQwHCgksafiKgyJE4+dJVVVQmiN9imBf/cdizQY7IFrgHVuXf2OjfYlpWqdnh8XUpSxy4Z9RvEYS8TVNPue16jnPC5tYwKSozqoLUgsUg33Nbnik24lzraHShSDNWjqCK/ptUqqAPNE98KleXwNJi5kaRvIrDu+FxozDUSOEXzYZ73v/vso6IRIWVoVTZPaHOpnxe2YOKNOvlN8jfDzPmxYxWkwHCBCdbnuHaaYVxQnR8EdoRoqw8fVeA9KISTqNcI0geLoY/9UH4rwWDTDq7KsCUlxGihbhcEVnYhF9PWjSA/xeOxlDDLWiPJ8B3G/EBGThHBoKn0au8TWA1AvUpVsGsss5XUL7kFif5MnmXAXUPYzoaq6kF5nHVsVLAi59CNwbIfa3t4G3EV/7z33UL+TouLKMvZokZR9neZLaTxza1NUdY+jq0M4ZFjFaTAcIMKv8TAmtXueftnZHQHmczZNJqKAEFq2TweJ7ey993IGZbgNY+bYiuSn/JlKoHGbpXfxSJtXn7EqlSNzeg1R9iFVrarPxKBh+X4a7ddqkHLTxFUZVHW2SyL8otTKMzy/dLHa1Ncs44y7rsNII5MOJC0q/DcKlSNG6z344EP0R2QUfgapJSACWJNV2vIdrd2+Td8zVvqhYn0ZDhlGnAbDAaJumg285gBhHyrPGu6EnmWHiFNIU4/RXOixv1GI7Z57z8ICHtcD6eA+9rjzHLIJnSYdwxUq7dBMe3aHF2ZigUqUeKla1UfpIAsfBg/7p5qUMPVChCviNqredDQXctSP8ahdZun25FElTUm3amo/VaZ9SvZvojCGR/X3vuc9ocfbISLVYzo4FyvvOI0Uvj4KQxhBhx9jdR+q1iEcMow4DYaDRAFDNZRX4j/EPekaHacTOLEShDSWiPctLy/DfUEUwcqK58Up0TyrOpOqrtfeZ5akrLpU+vMZUUcV3vPhPeaCQhbtpq/bUBk7lTBPT83yMHW6p5WRZLtsC1Gm27iqTC0AXalRiOWAlrSFY/r6xjp0wvf7p37gB8nyhP1hTYfnt92Qos/VchOq8xZsbG7AnY079AdobMRpMJw8ON/wUd2zoILVJeZK7o5Y8Ki1+Seqel5N4kdIBA899BD1R3H3EEbNUUydT5WWPp2eJ9eJKF0kmkiikHqizkEa7Zb+Zn4/9z2zStM3aYeRJjk1jZjWxV4kQg+tF8YKtFXGd1JIBUo744U4eUUyp8LHve7hP+xt3g5/ZB5++BF497veBdubW+w1jUd7/Y5TqwG/1q1bt6mXjPfjdSBtU9UNhpOEsmwucPgwTg/x6OBOOH7iLzfGtbFtx0VRhFAkNkPP4oMPPQhLCwvUF0VbEj4nhQfH0itWYbCvulR+jeS57/iNiAvUhJDiK8ReqKwfzpfEhe+nkb3t4L2o3amiVVVdXiarOKeXtGkEna4QoTSmIKbdvrVOO+T/zJ/5MzC/sAhbW1vyGi5uA41xdp5DRXDm/tq1G7zCOPxfIM71y5cvX4RDhhGnwXCA+I3feGYY+pXrVJkFEkRxA83ct27fgk7o2SlkhZkQQRGv8fjZP3UqiCMPUkYm9jp3tndk3FCfncgzKucZOcYQECVUL33EvLp1RUxv16pPJ3p8NsmjiU2Q9TpB2gM+btJkYmMxSDI5XZGRZXZkFwLk1gV/jtX1ZugD37hxI/zBWIT/1X/xw7C9s8W76KX/q0QbWw3Ayv7O7g7cvHmT7sdj/c7OzqGTJsKI02A4YITf7Yu64xzN3EgkKBDRbhw6dquUnD3JpaoKCe6xdw0Ad7Pj4jJU11XNTqq6jz1JyCaANECDhaJmuqrk+Up5nNqPUmUY1/dGjyQkG1TuBdWNm+DjnnOek08qfmtftcljp9k6ZPm2kTTx53L16g1YX1+H1dVValXcXrtF96fVHJB6ozIlhb5XJNs7dzbo+9mlnU2jr8ERwIjTYDhgNA6+ptYjFCv2JmOqPJEYMCjYyx4dbdnFlB9hNwy1uPe+e+GBBx4QxRlzMnfiziFV5+lredWWUr9UlfSo2usxFyAlskvZlvabOw4KyV6HXkvIUD31NIpJxNlIZTn9OE69b1P4MUgPk47vhfRAxSCvZI1/SHCX/PXr12nc9Kd+6ifojw0ODuSqO+jPCqfbfTrmX778Os2o43vZolHVyipOg+EkIvDcMyqmYBW2i2OX4fbrV5kceKMjPlL2mMsUTyQpTAIKj3nPe76PxjBbQTCiaoqOrmoeT4/PP6YGgE9KubqQsMaLWyXlGkHVpcpKXivYlOa0f+KI1PWa58zV7ZmM8j47kutUUhmrTlTO+ZqJs9Prkmh25coV+qOCR3S0Id2+dYPq5bhF2Wf2K+eod9zu8vH+6pVr9H6RPNH/Gd6fEafBcBIRCsaL4di9rsfoXepz1oEc7gTleAd6KBI1dVxm1sh+Xx9XaXAc3T33nIXHBo+y3ScIKEgUKKLorp5GgzIApsQfLmD5yB+LR5f6n9HArs/2SdWPCrtoVzGVHqtM7XdKdRzj8ppmaiGdGtULV8aFbHjdoqAQzhzFPwb4+dUrV+Ha69fgzJnT8OEPfwh2ApHuhr5lzO6UKL7cfkXjqUE4e/W112Djzh3Q0dYgDA0DARtxGgwnEc8888x6+NW6WIu/sppUpBbjDqDLr1+BhcUF7g/6/MidVXaQRh3f/d7vo9FD3kpZh6pqaypDc2qqKFPEXSwqi2wEMx17i8xjqYvVnBIqkWomXmlNmh2b9xvjIa+YY6+TSTZ5OR3ZlfAPxlx3jvqTrwxfIefAh3/mQ3Du0YdDtXlTeDml2eejqfi1cFIJ/xgNLw2JsPFoj1amqqovwBHBiNNgOASUpfvNfMRy884miTPXr9+g6RaqOn0jtqQmMhuTEB/zca86hn584P3vg0WyJ7XDsX+Xqiv1Y3ohWC4b/ZTXU6tGqhw99xs5zzORn9qg9NhdZD1XL2Ec3COFGNDRSJ8V/xDkeaBNfC/8Bb2OcYqCr+uQ8XvHSvHbz78A165fg//8h/80/MRP/Dis3V7n4OdSIzT0mwTQHE4M/cB9SMOXXyWLF1af2NvEKavw9X8TjghGnAbDoaB8mqpECaNAYzaOEqLF5pVXX4X5uQWZ4JFOpFSKmJQU9/aEp05C7+7BB++H973vvdTvxCMqHvfJ8F246KNU8pzOq8TmpnxcZAvTQMgU9iv0frqK9SA+TvF1ypoNbDPghavN3JqUTPK0QVNi6jjCjtOhet0eCWbffv7b8HL4OZwLrYj/6r/6SyQYbeD0T7RFuRgGouo+b90sqcL81nPfotfBn0VQ0qnHGUj0AhwRjDgNhkMAHtdDpXZB9/NgZbQRBBBkgNeDEowqOZIIJ/pkgRc+eTKJ3DAhKZDIu9/9Lhg8OoD5+XnyL2KVhQSiPUOKW/MysS4qOfgUqkFHbzHaqxeyyI7D/PUatr376SVuSpA6dqnCFxGrZ4Vde5s6VaRTSDpWiqSLq0HQa/lcIL0XXngBTi0vw8f+yl+Bhx98EK7fuM6rO9z02uDcZoUV7lxvDl586SW4du0a7IWfDf4c8D2MJ5On11FhOiIYcRoMhwTnWp8hJVqWiOEvOR6z9wLhXXrxJaoeXXacJoj2woo2Cy7VuIJOuw0f+MD74JGHH6KwYwQdUUN/EFVqDgFmMiPRSQM1ZBTSyXFbX18RBR7IfaFvVOxpCZtUm9Ojl16mivIpIx97no28NnouMSrvuW89D98MxIl9yr/8l/4S/OerPxT6mrfovpYsq6PK2UmvVlwHWG32ws9rPVSl+PxxIODtze24EXNcj4/smI44/AXEBsOfUDz//PPD97z7+54MFNCjgF0knUBAmH60FRTy5f4yLC3Mi81oeue4ijGqzKMwNIcJ8QuL4fjOR1Q8qo4DaWCgMO4FQhWbephqpM+SleKeH+1VRr+m9jaLmM1ZxFUXWQUoliIfj98+ikW6TZMel/tCPT8P3xsGDT/33HPwzW8+R+T6kZ/7OfgLP/0Tode5Dnc2t+L3r+9I+6O8d4kX1qESf/FrX4eXX34ZRuF4jn3j0EvGPyDDG9dv/iIcIYw4DYZDxHvf9965uq7O00iiw7UOE6q+sOLCivG+++7nGfWmSfYblWo8n3eJCD0LQWigXwhCEVZ36IHEZXCYIsQWn3YK/IUUF6ekqap5XnI6cNPL00r52iIKJSJ12YgoQJqOT8KSvqwmK7XD94nP3VjfgG/+0TdDtfktCjH5mQ/9DPzsz/xMaDXsUhyck2EAr69RJCIGaXPMzc3Bq5cvw8WLf0gC2Z1AmpraFH6Onwz94yOxISmMOA2GQ8QP/MDDF0Nh+LcDK1DVieSHGZ1oSdreZGP8A/ffSwSY5rBTUIeagbSSQ7JA8sT4Ocrs3N0jczyq0ayCF0SgvA6Dn+2khFPfKL9eShzSscYiHpPdVKCxEidCj9IItTEl6mRyRwEH3wOSGroInnvum/Dtb78Ay6eW4Wc//LPwk0FBn1RjuHHzpuR6cmmdTyxxfxZ4WVz4I7MXxJ/f/4P/CDdv3iBrF/7RwWpze3t7GH52n8FwDzhCGHEaDIeI554bjt79rsfmQkV5XoUc7MlhBYkEiDPZy0tLJJRgIG8u2HDVGQdmosEc75ifn4N+vx8Elx6tl8DpJFKWmyYeq8lwHrMrIfk5haxyntLUIvp4qkKV5HZJKII4Ce+mvJZ4zanvLVLrt7Y24dVXL8PzocrEyaCHQ2/25/7iX4Qf/dEfJRX8xq0b4NOiS/keXXyT7Ftl0ndlQRXri5eGdOTHIzr2QPGPxc7O9q/evr32DBwxjDgNhkPGI4+eC8dI/7FAZn0O0QAYhwqz3esQUd68fhPuvfce6M31iFTQmkNMIq3GQhUkmTsvZH0E2pNWTvdhaXmJjvhoCkfhCY/uNP4ox+pSRBcvKjgiEqhLqUkIbn8KgZaFvEaadY/R75IETy0CWR+MQs1WqAZvhCrzhVBhvnTpEu2Hf/zxx+Ev/m9+Fn7g+7+fjOprt2/xxk/8Otnud61dC6mysSfcm+vCK69chq9//T+R+X/zzhavAS64txn+WHzyqKtNhBGnwXDIGA6Ho3PnBhuBMD+KkzM63YMEMDc3T2R3Z2MdHnzgASKuCfoVJddSyY0+zMQcJwSGmZ2nTp2C/kqfiBSrWQwUoTFPSqCv4/vQI7gGFdMrxeVuPprqta+ZYujkBZS8HVeltMEyfD91IL+dQIh49B4OX4aXXngR1tbX4P7Qv/0v//yfh5/88Q+Gj++jefTNIAY5GacEnzqlqp7j0jegZW8VGeVv314PgtAfUiwfxuvhag1sBaCbYHNr65PhNS/AMcCI02A4AgTyvHju4YfPl+32QJUPHMXEniBudMSpmb3xiBKRyH4TKjXKt4xmdvr/1FOU4zg0vHdnMSj1Z06foT5iO/QE8diO1qftnW0iUTzW8iikBCkDsAcUUqhwKb1MGossJaBD0pno47KMBnX0biLxb4RjM/Yxw/cHLw9fIa/qcqiA//Sf/iH4yZ/8CfjBH/zB8LpAy9T29nYlBV5WFqsqz38dZC0xL1yjAJDwvr/61a/D669fJkFo8842/SFAut3c2hzevHnrE3BMsPXABsMRwZeTT4zHe1/tdDp9DP1AU/rW5haU7RKWFpfgUjjaol8Tj7RY3tVBGMHqKrcoMX8ycdJpXo7xmIQ+F476g8GjgUBX4L4gOL362mV4LVzW1m+Hym2Lno2qNlZy3U43XM+xkCNHbZ5rT1Wt2qGwovQN90/RCoVC1vbWFmWMbmxwajsKNWfP3gvf932Pwfe///0weGwAc/PzZLtC9RxfEQm9kfXB4rKK3w8Z6sPtOFKJVTS2G77+9W/Aa5dfDb3fXao08T4y/2+j+X/8QThGODAYDEeGP/fn/uyTc725X8GqTs3qWN2dOXsGuu0OjEKV+IM/8APw3ve/J5BURcbwtixrAwkZ1h09CKrYNCYu+23GFCVUnq9cvQavXwkEevl1uHXzNok2pMCH18GQZHxtFJhQuUbCQiLF23ScEwkZj/zoNcXj8SiQJO2Kpx0/DhYW5+Hee+6Dx971GLznPe+GB8KRfC4IV/QYSoVin6mq9T6a2lPfVHcKYTWJ8/g4pfqfAml+61vPw+b2Ju1s2tneJUGoqhpY39j4zPXr15+CY4QRp8FwxAjk+excr3e+kL1DSCAY6HvPPfdQj3Mcep7f/4Hvh/d94H1EWjimWIoiD2of0gkhcJAbgvKoOXw8Hql3Rtuh4lyjUIzr169BOOLC2to6zc5zOIbsLyrULM+vhq/USJI9fowqfSdUrHNzC7Ac2gsP3H8/PPTIQ/Dwgw+FPms/kF6LqkscBcU2BAtZvBZYw0D0aI7Skhru1WalO5n+6I++RdNBuD4DPaAoKPHMug9V7vaFy5cvH2u1Sd8HGAyGI8WP/MiPDDrt8tlutzPASSIoWEtGk/fZe04TyaA/833vfy98IBx7y0BWKCCRGANcYUafp5CPl54hZKHDAGnyiFTq0DtE1R7n5DGdCLdIYqsAfaA7WB2GShSFKSWpQo7w3dBvxCoS9wEtLS1B/xQr+afCBY38SN27OyNKuq/rCXtGKcmYmpn0PnQ5nYpS7DktqaLFG/Br4B+Ib37z2/Ct558P6vw2bIX+6SZuuvQscAVCHq6P9j64fvXqEI4ZRpwGwzHgh3/4h1fn57rPhiNyn2bSgVVq7FOeObtCRDgKZPToo+fg8dU/RZ5PPLoj0bRaaZNkPKI3EgriJZZO7qxrzkFqdF2HSyEiPJXD8+Uc4OGZpGR5XNlq03MwnAMrYuy/8uw7z44j0WLwMK76oD8A6g3liCbpZcbhdxBel2vJ7MQk+NAi2AxtBTyavzhkryb2Rrc2t2WTpscKdn17Z/eHrs4AaSJMVTcYjgGvv/761QceuO9aqMw+Wsg8NleFFY8YBmGlE3qeV8PR+k7o8fWXT5FajeSKqjMCfZa0JkPIydPYJjOpWp44KAM4mEMIUxObHBtDiRCRvHScczEIVfPzi/QxCklt2euOCUeo1uNRnMc998hrqd5LJNlGJ5VUXxK1vBE3gBr8sYXQlor2RmgdoBD0yiuvsMEdSXOLSZMeG77f3dHef3PlypUvw4zAiNNgOCa89trrFx944N5QdBXnNeSXqkRUr0OPcG6+RxUo9iNvBXJpt4qgvi+TX1P7j4hC1goD6Ay5yzI19+9Ub5IZnipMJlxcYYyETAHF4RqPzSgioVEf5+uR0CsidcndFElc12N4icMjm5TjjZcu94HKtBKSoVaZ+PErr16GP/zGN2iFxigIUDgVRJUm+k89Jy2N9safCH9ofgNmCEacBsMxIpDnhQceeIDIM+ZqIvGFIzT2G9vhuIyVH1Z4uD8cqz0ct8RKEPuLfMSuWWTCo3EjfUSfqlAd03TZ6CWClqaBqNpuWukGrRppAknn2nXvOoi67+LOdb1Pj+P0+qr2EznzNSYcoXK/cWcDXnjxJYqZu3X7NvVZMbgDU5/o+9EtoZPxJ1577fLTMGMw4jQYjhmBGAJ53u/CsfW8ig4qAGECPNqV0PaD5LS+tgFr6+t0fMWNmZS0VJRTu87TjHu2j0gr0UxxV0WbCbvJZuGzqDgfXxG4pcA9UyZP+UJM9fx16Dkp+7OR/cVI8q1Om9aG4EpfjJcbhqM5ekHRqH+H/J4jySFlwg893U+8OoOkiTDiNBhmAEieDz/40EZRug+5PBeTLEXhiFw10Ol1qNLcDb1FrNI2gzIOtadVuZh5yelLdSRRTVmCGO6RpyxJwpHuavdpL3qRjYXm5Etwnkc25fZCxCLf5Cki3G5A4uSkpBZMwveA45OY/P7tF16EGzduUpW5tbVF/Uydr5fLeqDxP/vKq6/+G5hRmKpuMMwQfvRHf3i11537QqgiB67EFboFqejYS0R1G4/taA2iLMpQjbZDtdk/vUIe0LNoog+PwfoPK1U0n2PvsnCcGEKncY2W82kGHpyKU/xxGfuton6DEkVBeZ0gRAvZYzQhHs/keVAy9kg3tzbh6tVrcOXq9VAxr1EIMYpAeCxHLym/FK8Bbmo/DBz8wSHOcM4wrOI0GGYIr776+tVzg8d+syzcStkqVlmE4cCNmoSbFB1HiUShwkRPJprbccIGe6A4jx7O/THY2CkRym50RMztyJqecY1GVmHqET7lfPgpMtX7KcYOCV42VOKxG1sKr71ymVKSLl++EnqYG7CNM+fbW3FnEr2m42ZAEJ4ueO+QNK/CjMMqToNhRvGhD/34E65ofzp8OEC7D45F8rpevu6JvxKBqjfahWgMcn4eTvUxMWkFTi0tkbWp3WZPJi5jA+khNl4rSh/T3ahyzI74OqHEU0uFfP1CjvQl9TnxGdVeUOCrPSJE7MPeunUrEOUdMrCjsEWRd0E1x7l2vK7FERDVqqb+5AsvDT8LJwRGnAbDDONDH/rQAFzzVCCoj+N8u5P95E6O1Dyu2UorLWQbJdAselDk5xfg1EoflpeWYXl5EXrhmN9tdyV0mNdssH++idYk3WSp6roq5tj7JIHJcQAJPgYDP/DYfWfjDinl62vrFACiqfRYVaLNCI/k1D4IBI+opVINnDsMFfEnQu/zApwgGHEaDCcAH/rQTz0RhJhPB3YbOEljJ/+mE4EGADTrk8iv5jW/KCoV4QjdabVhMSjzi8tLsLy4TFUojnhiT1RXbWhCPcgGSwRvsOSd6uitHI8rWntBFWS4YAWJYtUOLY/jIBAyyYc+5iiQKo6KUntBeqB5Pmg4oP9q+DpPhaP5kQcRv1MYcRoMJwgf+umffCpQzscDBw2Q7NAWVND/cbWJ1SGu0UXgZBGOaSLhYegGkhY+pyx4KyYmEeF0EibRY9WKnlGtXNX8ic9B0quFONEcjx+TWT5coxrOcXMTMs1jdYnBIWg74scIATdNZtKHYVH4UGUOL8AJhRGnwXDC8KEPnR/Ue+4p75qP8+w3pwshMT34wIOw0u9zMjzuJArXWDGigo2RcpifuSneSbY5hQqw5MQisjOhKq52KF1ZHI3z7Nb0sj8dCRMJGY36Fe47Cs/FGDwkVLU3eTGyq9UpEOlnAn1+9iRWmTmMOA2GE4rz588PXFM/FX6LP07rNoKi/fh/9gNkWVo5tQLnHjtHWZnz4XMEHqdv3LwOV15/nRLbr1+7htmWOJ0TjtgTIk1c/KYGdBKRXDLjUwXqaznKe9qxTonsakcCHyeVarUryaWq6wvd3twnnnvuuSHcBTA7ksFwQoFV2/DlV54ZPPauz4e+40qvN7f68MMPhgKygJWgqJ89ew+cXjkNp8+chn5/hXye6Pc8c/o0zHV78iqeepyYBo95mMiUSMI4M47WIbyg0EP728NRHNdlsD+0pmpVj99IqNELKuCJpPpCy5WfeOGlS5+5efPmia4yc9jqDIPhhOPChQvDcPVEOMI/1SrLS2g9QpM82pecrNnQ7E68b2FhEVYCmZ65fYYmd1qhtwkyTrm1uAnXb96gdcM8B++ILLHa7PW6bGmqIW64ZCM8vgs22XProLkQuPs39/aqp0/6kfw7wYjTYLhL0OvN91HkQeEHe5tIkt0g/OhOIRSG6prn1QsxyJdlm2becWwzFJJkIUKRqN3uUAXZmyvgzp0a9qh3qeZ5J6Eg5ANdd95dDLXm18JNF8Kx/8LdSpY5jDgNhrsEc3OnBjiaiRM8GPyBBNiiGfZCdqvjo1T44SmhVhu9nF2agd8LCjwFdMicPD6HdhG1WsNQX66XRTEMdweiDCQJxXqQ7S9861t3R8/y7cKI02C4S3BqaWkVD8xImkh4fGlTyAbNj+vCtKh0N5Lw3qULjnTyviHxiZb4vNb68y9eegwMUyjAYDDcFVg+tfQ45mTyxkomTNxYqcd0BJGmTAZRulEgTjyW47FdlZ2m8bHiLEp3EQxvgBGnwXCXYG6uN0DrEJJgW0gTQz5KmTFHePFfUnZnIEgkx06nBTzO6WS6h8ch2+HIHx47BMMbYMRpMNwl6LTbqwWtpeiGqrNDJnjOy+QZc/C6lmNCi9bQg4mkigSrGyhxlpyXxzk68td18zIY3gAjToPhLsCHP/zhVZw1L2SdL+70wdR1SjCSarPxTJo1TvvIhI9zEmYMZFKni04J0frepraj+pvAxCGD4S7AqVOnaHa9cC22F2EWJ8XQlXGNRlPxiGSNoRuROF3M2KRlbA2HgyDwGD+Z2FH9zWDEaTDcBVhamFtFEkQVHY/qSJxtMcDTKV0IESd8JhjO0dSya122UlLfEzM95aguKzS+8Y1vWMX5JrCjusFwF2BxISjqgewo9ajdluBiPqanVcCNEGRNwcdkhJeIOoqhwxSkqo7hxaEKHYLhTWHEaTDcBZhf6A0KUsJb0EELUsErM3Q5G4JIs+JKE4/p2ODknew8Ookz6GpTEkFpCIY3hRGnwXAXoNvryVG9RdUmkiab3l3cIURVJZGnrNnwacslRcRVadMkJyI1XwPDm8KI02A44UBFHQUhPHIjaeJKXh6xdDE4ko7qDZMihxLLEraoqFccPCyL2JBQ9yb1EAxvCiNOg+GE49SpxUEnECYa2nEKiDdOtpgzJRKTjufgperkNHcvyUZIqKi2M3ly1Yn7jALBmjD0HWDEaTCccMx151f5I8dz6ThjXhZpgZvMpTeyAoPS4nGsUipSvB0JEy+xx0nEObrrU46+V5gdyWA44Zif7z6uqykoLq7F+eSsqPtInNjbrL0EEDeylhcrTrQnjcey9oJJFYvRr3zlolWc3wFWcRoMJxzz8/MDnTtvlZyERBdZ/atbK5smrzq99EAdfY6bKXEMk47qQIZ5I83vAiNOg+GEIwhDq1hRYl8SgzmYOEvZEwRxJxBo1SlmeC8UiWRJKzFkhh1vC31QO6Z/FxhxGgwnGB/+8E+ttmkdcCDOVsEhxqHqJA+nzKij74jIE4mzYUVd9wOxf7OmhW24/xwFIiTeelKZFem7wIjTYDjBmJtbGKCC3kgOZyljlqWMUkLscbJyjv1MDPnQLZZqfJ/IMR0vWLmGz4dg+I4w4jQYTjC67R5FyaGlqCyYNAuZFpIWpng4ZdSy5pl0rDbJwynG91qnhkJFSruJJmZF+m4w4jQYTjDm5nukqGOgEVqQuL8ZyBNkagiAVHJU0nHtL674rbP0d6w4JxM2v7MwxGlJo6oaguE7wojTYDjBmJ+b67PvUqaGaE1GKSuBJfVdpoX4KB6qTomN0wAQPKrzNJGP8+0XL14cguE7wojTYDjBmJ9fWMXjdouS39vk4yTiLHMPp+dxSkk/aiaSwylHeM7hrOOuoVBw2jH9j4ERp8FwQvFTP/VTq71et49WJF7QxjvU8cgOzkVVnfcMiTCEHk4JMEaTJxImiUZiUcIdRbWvbV3GHwMjToPhhKLb7faRMAH3BgXSpG2VLSZO/A87nXFOHaeDcG0GikBq8AzEycf3iQhDDS15ayoThv44GHEaDCcUnZYjRZ0DjDuxx4lZnHTkdiwO5RNDKAQheKOloyP8RCaJEEi84bYhGL4rjDgNhhOKIOVQeDH+EndxXYYEGGvVKQkfbEVqUvq7Kuo6UaTjmDrrHmrPIRi+K4w4DYYTil63+zhOoyMJUn8TF7RR1alrM5g8uZpsKOgj7hMiEcjH/epehCFMfh+NKjuq/zEw4jQYTijOnj27ioJOKanv7RYTZ/RzuqSsU+ZmrUHFnvqiZEXS2XVc3EbrMmD94sWLNqf+x8Bi5QyGE4innnqqv7ez1acMzkCYVHEGAqWLJCTRSmARfZA4SVGnI3kR7UiVKO1o7cT+qO1Rf2uwitNgOImoRqskBJUFVZq6Sx0Js5QQY0RD/ky+TMR2pOHGVVPH+XTdSxSevwGGPxZWcRoMJxDeuVUkSA4ubgVxiFcCtzQZCX2cnsctG50aqsV2RB7ONE1EkXMcJQenlk9ZxfkWYMRpMJxAOO8GILYjnBhqiRUJV2dw7ehiuMekYg8nGt2xn0npxjXEajNVnA6WevNGnG8BRpwGw0mEKx7HipOqzXBM50i5Mm6u5FQkTUSqKaB4gqlIqKp7R/PqSKZsiq9JKKLpo8WeCUNvAdbjNBhOIILws9qSY7oKQ3hsRwLEgpITkzjdnQgSK8tw7WVR20RS3/E+XtDWEPH2eotWcb4FGHEaDCcMTz75ZD+QYF8tSF0lTseRcpE4Pfc3MUqOKktZ0oYkmQh1Epe5hT7p+mc/+1mrON8CjDgNhhOGhx56aFWnfHDHULfbSQvaZCII/8ONlpVUmrjFspEEpEaO6bRnqKrEGO9D5dq1avMtwojTYDhhOLuy3MdrNLhT1RkqTp1PV0UdFSLub3JkXDySI6E2vLRNq1BKSyqICoZgeEsw4jQYThhGu+PzuAKDPJxBRaeJoVZLyI/3ZdAxHVPdkTxxOqhiDyep7XXDie+TdDs+vtvr2oK2twgjToPhhGF7tPs4kh0SZ0nTQqUkv6OiDnFBWyPZm7icDatPUOEI2IqkazSIT8M9D9xz/xAMbwlGnAbDCcPu9la/4NM4CULo3USUMp+uY5a0CpiM77xviPydTnYQNXwbVaS0oK0F88vLQzC8JRhxGgwnDKO9vVWsMpE0S7EklRLsQWFzkuxO/s26kbUYsmcIj+qqqtN2S74/HNPhH/7Df2ji0FuEEafBcILwW1/4f69OJmMiTBSBuNp0dGSPO4ZQAJpUNJsehSGZRafgD8/+zlrGLbHfOT+/YKT5NmDEaTCcIOyO/QDtRUiU2NOkJCTJ16SpIeDUI95ayWsxJtrjJHg+vsuFposCcS4tLZp/823ARi4NhhOE7Z2t1aripWqlrAEuS642VU33kvhe64w67hTCIA8UjMBH0pzIJBGS56nlU6aovw1YxWkwnCBs7+w8XhZF3J9O19TfLFn4oaM6xLW/aEnCCpMP6cBH8yabJmo44GPl1KkhGN4yjDgNhhOEO+sbA7IhyQUN8Lo+w5NN08k8ehP7mJXsGcKjvEbJjccTmiTCj5F4F5eXrcf5NmDEaTCcIIz2RqsF+TYx3KNNwRxl6djD6UQ1DwRaRVWdr3mPuqMjPB3TkTgr/niu14MzZ5atx/k2YMRpMJwQ/NZv/dbqeG9M2yxRTccZ9ZZstcQWZ+HY3k7hxTRKGYixlokhTv6gynMykXFLGb1cXFiAv/W3/o9Wcb4NGHEaDCcEzXjcRysSVpodTXzHAONCcjgjcTax2kSrERMn71ivKdi4iiuBkVyXl/tGmm8TRpwGwwnB5vb2Kh6tMUaOSZNXAmsSPJFmYEc0uNcyi657hghojCcireLiNiTT/qnll8HwtmDEaTCcEIzG4wGSXUdyODudLvk4ORkJq01Z0Eb70hsSf/DaA6fCE6lKjxMninS/+srpM1Zxvk0YcRoMJwSj0c7jtOKizcf0Du1QL3llRuFk1xBwsIeIQ7Uo6oXuUafjexMj5pA4l/uW+v52YcRpMJwQbG3vrHIaUpsvsh64kDg5rCAbSUWiHE4UhsKloP4nE2fcbMneJWiFXun8vIV7vF0YcRoMJwDPPvtsf2dnh9Zl0JoMWs7WktR3J+OWQMKQLmlrpOpE4P1RNAqKuirs3e4c/PIv/7JVnG8TRpwGwwlAqBJXR6NdUtQLqjoDcbZbVElG0tQFbXUjvcyaKkvqf6IwVIspnsjU02Vhbs5I83uAEafBcAKwdWdrFXcEIXG2cGKIqk0eu8QjeFzO5n1UzCmDUxqfeB/2PWliiHYMsYjUm+uZov49wEI+DIYTgN3RzgB7lx3xbfKseiE9TuCjN/AsuvYxdREbVqWUwVlLIlLNj0UyXVq0UcvvBVZxGgwnAOPx3uPYo+x2mDgpTo7m1V1WVTYsCFUT6mPWuvpXFrRVEi+H5ElJSeFYv7C0ZMT5PcAqToPhBGC0u9vHCpN6my2+bulmS7ZvijCE4k9NpIkfY88TyyMar6w5n5MS4T3bkVZWVmxG/XuAEafBcAJAVqS4JoO9mwWNWrIVSfuWPBnE+4RwaggTOOl/lewYqrJUpEC6i4vm4fxeYEd1g2HG8R/+w39Y3dre4nCPcEFLUtxq6VLyO41a4lG8SalIms9ZReJsZKoIJ5A6w6eeesoqzu8BRpwGw4xjY2NjsLOzw4QZKk28Zv+mzqfzgrYkDNVUeeJFE+E18b2quc+JqUhzc70hGL4nGHEaDDOOzc3N1b29EYV7UG8TTfAlH9l1YkhVcrId1bwz3fta1PYm7h+Ke4YCyc7Pzdu6jO8R1uM0GGYcoeJ8HHuUna5YkQoOMsb5c8rgFMIE8XDiBePneKySRSNKgseKc8IWJTzKLy0vDcHwPcEqToNhxrG7szNAgmy3WzSfrsq6082WRJ6ZHanR/ibwEb7xMfkdvaAUdBw+X1k5a8LQ9wgjToNhxhGO6aSol05sSDKjjuZ3PKpTsQksAOERnNLdiSAbugOJUw3xFVmROLez1+sZcX6PMOI0GGYYzz777Oru7ohWZRRFZkeSHqcreJeQl6qSfZwTEoY4Z87FuXVNfkcfZ3id9c9+9rOmqH+PMOI0GGYYoUrs7+zuyBpguWi1id72gn+Fm4YngSbZdBBZ3LGfqeHFkyQMdTtdqzbfAYw4DYYZxtbW1ureaMQz6ZK9qRmcnPrOKUcoBGmcHIV8eE5499TjrElRn5D5nfcMzS8smKL+DmDEaTDMMHa2tgZ1PQlH6xTsgcd1J+swEJyK1ESr0UTCPZI9qc76np4U9lNLpqi/ExhxGgwzjN3R7uOOFHX2bqp/E6vPpKizSk4L2mpNRcJK1MXUdyVOmi4KFeiplRU7qr8DGHEaDDOMre3tVawyecyyxUHGEiun4cWUwVmxDQkJkknSi0XJp6khsiPxkX55edmEoXcAI06DYUaB6zJ2d3b6VGnijDpdZNyyLGWPuoYUcyVZV2n1LzjeaqlkSv3NUHGGHun6P/tn/8wqzncAmxwyGGYUtC5jd5f6m0Sabc7g5B5nwWt/gckxHtUxHSkP9xCFna1I3O9stdpGmu8QVnEaDDOKye6kv7e3J6b3tsyo40rgFvk3NYczEqco5rXsTEewIb5iXydwL3Rufm4DDO8IRpwGw4xid293FY/YRJiBODsY8oHJSIEUyb+JPcxmv3JeyTw63umo4qQ4Oa1Cw1F9ecnWZbxTGHEaDDOKST15HImRZtQDYbbbHQ73kNR3LioTcTYZeTI8VaDa3/Sivp86ZYr6O4X1OA2GGcXmnY0BNjGRMDu4a4iO7Dw9BNn2SlqZgcb3cI1bLGk1RsMPqLOlbUqcp0+bh/OdwipOg2FGsb0jViQRhspSp4YCmxaawcl9TSZO9nGSg5NO8qK0N6yyo1yEr/frv/60VZzvEEacBsMMAsM9eEa9iKEepKbLGZ3GKcWn2WjFKbPoeLzH+/NUJBSJOCm+NNI8ABhxGgwzCAz3GO2MSBQqZWKo3eKEpMKlX1vN2uRgD+5v6kRRjaEflQR+SGUaBKaXwfCOYcRpMMwgJnt7q3t747hfiDI4sfLUXUPS48RKkvqYuC5jLEZ3CehsZPyyqniFBhLn0pJttTwIGHEaDDOIrZ2dAVaPmviueZyaiuR43pKzNmVB23gyJr9m7u+k/eq17B4KVedpU9QPBEacBsMMYntr63FUy2mXelkm0gwfc6/SsZoux3Qeq6zo2I4rg3VGXROTcP4Sq9P+mTM2o34AMOI0GGYQ29tbqzgdhPYjumAOZ6w2Jbw4W87GAhD7N7EHiid5XRXMJnl+3X6/bxXnAcCI02CYMWC4x/bOdh8nhDT5XfM4OYczrQJuZEe6JiMh2NspFWecGKIq1dZlHBCMOA2GGQOGe+zu7pIViStO3GopGZzZZkv1cNZSbWKFSW6lwpFYpDuIGumFtjsW7nFQMOI0GGYMoXLscyoSE2anLZstQ7VZkqLO527qY9ZJUUeSpJXA4THYz0yKOqckdTo9W5dxQDDiNBhmDHu7u6vjvT02vgdRCMM98LqQqaGCKBRksyX3OMfjij5HAUlN8SgWaRo8kurS0sIQDAcCI06DYcawOxo9jqQXA4wx/V1EIgId0xNpqnqeE2cSjJq4j2hlyYShg4IRp8EwY9ja3Bhg/5JzOFtUbeo+dSfJSHHUUnycPIsOcp8c0+tKHuOJQHuLZn4/KBhxGgwzhq3t7QHmeHCV2ZY9Qy2yIaGfk8M9JE5O9gmpFcnLhJB6O5Vcwx3rTz/9tCnqBwQjToNhhvDss88Otrd3+hohh8f0duhxpj1DrJrrHvVKcjhr2TEEFO7RsGg04amhhtZlWLjHQcKI02CYIYQj9mBvtAttsSF1sL9ZcH8Tje0pFQmIGKni1LFKSEf4SoQh3TnU6dq6jIOEEafBMEPY29tapT1DWGmKMETmdxq5dDw5BJrDWZNajvPpeE2iEaD1SBR1uX8Sqs+FhcULYDgwGHEaDDOEra3dAfYmMUoOL2RFkuVsaEciC6fHZPdG9qlzWDEe3UH7nkiWFe9Rp8g5VNRXVoZgODAYcRoMM4TR7uhxJDtW0VskDOnYZSFTQwg6jlec7u5J/Ek71hvZsa4BH0iqS0u2LuMgYcRpMMwQtrY2+1g5UpxcmxezcQI87xnSPepIlhhSTCEfVS3DRE5UdJ1f51XBeHtQ1E0cOkAYcRoMM4SgqK9iH5PU9HY7kqauBHaimtdNFdOPqqaeiprL4+QaiqZrGWkeMIw4DYYZwbO//duruzs7NI9OE0NifkdCpKg4n7ZaovijCe/c75Rszn2KOlafoXq1dRkHDCNOg2FGsFtVg93RKFSIbd4xRBVnIanvBZ3TkTz1CM4jlbUEFYfbAagCRWFoMqliyPH8woJVnAcMI06DYUawu7sXKs7daEOi/marJaRJSZwxIq6SiSGsLpk82dxJxDlhbydnctZwamHJiPOAYcRpMMwI9vZ2B6MRezhVVacMTjW+g4/HcU1+r2sdt9Rg4wrGYyZUVdhP2bqMA0cLDAbDTGBjff1cNdkjNb1sFdDutChCTrdaan8Tq8im5vDitFMISZNTkSa0JlhtSoAkbBXnAcMqToNhRrCxtraKNk0KLqZIOd6pXmp/s2HirOsqu9SAtSjtUZfxSg738HSsL1ulhXscAow4DYYZAO4Z2tzepHAPHrNMApGLxncfQz1opHKSKk4awWxwRTBODE1IZccKNVSvVm0eAuyobjDMBlZ3gjDUkUkh6nOiAb5VRkUdQTuEsNIURZ2EIfBRba9EMGpEbe+0OrYu4xBgFafBMAPY3d3t7452odftEnFq1UkCUd7jDBfK35StlkicIIp609RT5nd8THdubgiGA4cRp8EwA9jd3l6djMfQDcRJcXKYwVlyJqemvrMVKd+lPqHqk+FIbVcy1amhxcWeHdUPAUacBsMMYH3jzuOywpfm1DVOjqeG+DG0nK3i2XTqbwpJeklGUg9nHLekAGMjzsOAEafBMAPY2QrCUKgs2+LhZBN8K86nO1nQxvmatexNr8nbif3PQJMcJYergpE4Pd2z/swzz5iifggwcchgmAFsbm2t4nilLmhrSfI7ZXDiA+T/aNRSvJw0VkkD7Lw3HY/p4+yoHsjWqs1DglWcBsMx4wtfeLa/s73V78jxHNX0loxaUsVZpIqTpoRkcqjxHCdHiUl12jPkJfAjKOq2LuOQYMRpMBw71le3traCMITG9yKRJi5nw19Rz+keSI7Uu6zqaDdCYDHaSOgHezr5SD8/b+EehwUjToPhmDEZTQaj0Sj0NDu0/jcGfBBxMhoxuPMGSx2pBJlhB55fn8i2S7EuLZ0y4jwsGHEaDMeMzZ3NAVaLGiNH45ZlGUUhmkMnDycfx5U8ueIU0cg3cQQTZBPm0tLiEAyHAiNOg+GYsXln83EkSJoYolSkkuLkiDTJi+TYv6mpSJ6P5Z5m1AHUw4lJ8LUc3/G5//1//6+s4jwkGHEaDMeMtbW1AQpAZYuV9Hw+nYI9ZJH6ZMLGd/ZqNkSmmgpfU4BxHXuc4flGmocII06D4ZixvbU5INO7KOq02RJ7nDH1nY/qtAa45tUYuHMIpOL0nitRyuAUMg09UvNvHiKMOA2GY8TnPve50N8ck/kdFXUetUwL2qjDicSJR3MlSBy1xM2WjWdFPa4D5qM6Pr4oWhbucYgwA7zBcIwIavoAFXSvC9oCcXIWZysKQywOyTI2shzh5BBmImX9z3hMb6g6nbNwj0OFVZwGwzHixtWrq8iNOCFUyLqMtkwNOVHHtc9ZTyY8VikkyUo7h3/QmmAK/HAS7rFoPc5DhBGnwXCMuLl2a4A2IhqzlNR3Eodwz1AUiJq4eE23W2IFqkCinIj53UlSvK3LOFwYcRoMx4i93Z1zeLxuo6JOpMlxcjSj7mlAnSvKqKTXQpxeKtKGju10G3o4aXTdW7jHIcOI02A4RoSaknqcMRVJpoZ4uyX3OPE/9XDqWKWjqSGeKEp7hsSK5MyKdNgw4jQYjhGBJFeRKLu9LlWbfGRHRb3gcUtJfUfTuyrnRJA8V8lbL2nPkKS+h+qzVRQW7nHIMOI0GI4Jn/rUkwOdGOr0Olx1ojCEOZxoRSIfp4v70WtJdcfjOt7e6J4hWpchmy3D5925Oas4DxlGnAbDcaGCAXYxW7IOGD2cbUpG4hxODviQODmsKKnaZCsSi0MuiEI+9jfZilSjFcmI85BhxGkwHBOC1rPqnKdKE8WhTrdDM+qcwcnVJpGnVJKxx5lEoHB7xSOYNY9g4n3drhuC4VBhBniD4ZgQjt4DFM5boqbTLvU2j1uCmtulj+kxwKNWEaiOijuq7ePJmEM/PO8ZeuaZ/8EqzkOGVZwGwzGhAH+uEMM7LWlTD2fcMwRUWab+JpMnTgw5OcKzoj6mHicSZ3i4keYRwIjTYDgm1I2jcA/dM9TDozr2N8MFQelHZEXyoqbjhks2w2OaEiroddylHhPhzb95BDDiNBiOCeH4PWAlvUVH9U6nG4iT7UjxMT7zcNZNWgcMSVFXDycSaTjmW7jHEcCI02A4Bjz11JP9oJT31fiOijrOqeOFje9scNeqspEtlkqcXnqfeFtOnHO9+SEYDh1GnAbDMaCqeqKot4Q425z8XuKvpJcLV5W8mK2mBCTepe5YUfdCptH8XkFvwfYMHQVMVTcYjgHV3lgUdT6at2U1MAcTQ1wH7GWkkmfVJ8mKJMJQVU2ioo5H+l6vZ8R5BLCK02A4BozrZuADOaKSHqPk4oI2foxWm1hR1vGo3nAqPPDitgmlwbNgFC4W7nFEsIrTYDgGNE31OKrnLTG/c7iHlJsAUm3yxBBWm5NaeplsOcoqzoqU9oae56zaPCJYxWkwHAMCGfZ5YqgV7UhFwb+Ojq6EOGsOKK6o2qyoGnXgRVFnKxJtvgy9z6J0Fu5xRDDiNBiOAZPJeLWLpnfqb2Z71AtOcAcJJEbSrMVyhOSJt9E64KqOFaeSaLtsW8V5RDDiNBiOGGhFCi3KPhImHs/pmE75mwURJ+/LALIbxR1DFfcyJWsupSLVHDGH2y978/NGnEcEI06D4YixtYXhHhwnhygkf5MzNoEj4yjYQ4WhVFlyWhLNucdjuqrv8/Pm4TwqGHEaDEcMX1V9vEbPJuZuUnBxqfPpcgFOOkLS5EtNZKr5nOTprOOYJaHT6QzBcCQw4jQYjhiTqlmlmA7Hc+nk3wy/impHEtlcYuTq6OPUiaJG75vI0jZPrzY0K9LRwYjTYDhijMfjgZMKk+fUORGJVwJDTD6iGfVGZ9R5gyWLR0E0CrfjqmAvt5et9hAMRwYjToPhiBEqxXN4NC9bnIzEwR48akkTQzROyYq6rv6tmwp8A1mcHBMqCkhYobbL0sI9jhBGnAbDEaOq64H6NynYo8U9zkL6m4iGQok51Z1CPhqYOqpz/7OmUz1+3pmbG4LhyGDEaTAcMZq6EuIsKcCYepvY5SxYWUeCZNKUgA/dMRTn17ni5PFLTom3GfWjhRGnwXCE+Ht/78lVLBw53KMFHYmV0wVtKPSgVzMRJ17Y9E7Eqaq6JCbJWDssLS2ZMHSEMOI0GI4QflL1sbJE0sS+Js6pc78TYyOKlIoE4uOkS6WRSdTPxEpTfZ1agf6rf/WvrOI8QhhxGgxHiN298Sqq59jXRLLU1cB4bMceJx3XJTYuEScfyXGySHes68I2vDhve4aOGkacBsMRohpPBkiCUVEvU8BH4eTXUSaD6qzPCXyCJzGI59cDcdaexKNQpdox/YhhxGkwHCFCz/IcejY1EYkDjNucjFSoqu55ZYYSJ/YyNaQTkqKuqe9ly/YMHTWMOA2GI8SkqQdloZstJYez5AkiVtS5ncmEKeQpGZ28gwj9m3VKRQoftzq9IRiOFEacBsMRIhDhAPuanXaHrEgFHddLmghyopFjYMcUcdKaYOAjfNWkAGPPBDrf6ViP84hhxGkwHBF+5Vd+pR+O1n3caNmSJW1tEYVAHEe6vbKpU0AxZXBG/6bsH5LEJLws9vtDMBwpjDgNhiNCILlVPG93O11W0vHIXpaQ2peej+l1k5KRRD0nozsocfKaYBSIsP/5G7/xG0MwHCls55DBcETY2L7dR2GoSzvUS7rEAOO4bsjH9CNd1IaL2ZBbNfRjUo1jjzMc4+2YfgywitNgOCKMtvYGqJ5Tb7MspNosKBkJ4eSozsTJ/U2yHeE53qlFibddMnFWoWptvQyGI4dVnAbDEaGqxgMMLy7b7Nsk/yYRJ8Q5dJDNlrUo5jiTnq/SwCg5vPA6jaCot8shGI4cVnEaDEeEUCk+3i55MRulIokViRPfFXxM5xBjJkgvIe+6g4iqTapMG5jr2bqM44ARp8FwRBjv7fVxtJKqTupvykXUIUpFEhtSFY/jNdmTdNSynjBxIom6UIUunjplPc5jgBGnwXBEmIyrARne5Zhexl3qMk8JmorEarlODnG4MYjhXRa04e3hv8XFxSEYjhxGnAbDEQA9nKFS7CNxligQtfjIjsSpe4bQr0kbLCd1JE8yv0v/s5Gep6jp9NtrVqTjgRGnwXAEQA8nCj4tIUzcqc5H9uxX0HHyOye+S4gxhngAyCqNWtZoNOyXLwo7ph8TjDgNhiPAZDLqY9WI+ZulkGdL9qln/veYiqSZm7pTCGSP+oTM7zy/XhZtsyIdE4w4DYYjwN7ueIDz6C08qpft2OPEMpN3DbFq3ghB6t50dsV7uX0Sq1Fa0GZWpGOD+TgNhiPA3niHzO88o14KgXK4Bx27dWpIdglVQpxePJxVrYTKE0NA6zeKIRiOBVZxGgxHgN3R3jn0cLY7Lelz8i71KA7Jgb2J/U2eEqIlbSgMVRNeCTyp6D5EeKb1OI8JVnEaDEeAnZ3dPgpCbQkvxgR4JE6qOHFlBrCqzgHFlazMEA9n46Ihnnat4z51msJsWfL7McEqToPhCFBNJqtsRRJFHbdaynI2ynx3IN5NFoCqesJHcnxuU0dhiOxInr2d//bCBas4jwlWcRoMR4BQMfYx8b0smSwLPaaDE/0HRyjr2NucTMZcWaLKDlxt4m2UloSKellatXmMsIrTYDhk/Nqv/doABR+OkuOlbDlxciBnQ5VkJT3OiWRtaho8EipXojW/qLPNlscJI06D4ZAxGm0NUC1H+5FzZRy1JDlIt1fmAcZNLeZ3JElaQMRH+GyXuvNuAwzHBjuqGwyHjHo86SPhYep74cosTq6QyDi2HDFxNmI5qsFRi9PFGXU6xssYZtk2K9JxwipOg+GQsbO3S7vU2y0Zsyw4+b0okg0pX9BGIlEzIXMnDw15UdUr8nji7eHZ1uM8RhhxGgyHjNFor48kicZ3Jsw0o06qOoZ4NDyPHskThSHebSnEyQZ4vB1T48vCKs7jhBGnwXDIGO+NB0SaBREeEShex1FLL5VlnVedtGVdcjhTuLFalHzRGoLh2GDEaTAcMiZ7k3MY7lGUTJy0oK1gdZ3IEWROvRYVveJZdN21jrfFahNfMJCpiRPHCyNOg+GQMamrPs+mtyT1nSeGoOCKE/IjetPEMcvC81RRI0vaGgr9AE6Mb1VDMBwbjDgNhkNGQ8TZIh8nz6m32ASfHdWRLLGerKmHqcd3SUbCLM6KPZ54GxLvv/k3F4ZgODYYcRoMh4zQoxyQBankVKQC1fWCLUkcjRSqSs/iEBIqK+eyg8hnUXN4lFfzp+FYYcRpMBwicGUGciNVmlh1ttqyqK2QHiaI+53HK7GiRJLksUwn6zSauPGSHUxuCIZjhRGnwXC4GOCxm9ZltDgdqczi5NBapBsskTybKgUVy8L1tBJYNlu2nDMP5zHDiNNgOETggjasGLHKpDxOPKq7Qo7pYn6XhHddyMa3OSJOvKYQY1LcgW4rWhbwcdww4jQYDhHNZNIHTjPiUUsxwHtJfg9UyRsuPUTypFn0gk3x9BqNlwxOz+Egzn5tjxv2L2AwHCIme3sDVM95XUaLjuZInrovg4zvnvuYuipD/ZpemJOIk47p3Pe0Hufxw3y0BsMhYowVJ41Yllx1Fty3ZMtRAxriQdsthTyJQGWvEE0Qib+TLUxF6JdavXPcMOI0GA4Re5O9PvU0NYszVJ6IQozvPDXkiTiRJCuKlWvInoTHcsro9LwOmM6H4Yll2bK1wMcM+9NlMBwiqkl1TkOLQYKLyWbkOcADpKcJuqCtSeEe3nMAiM6w63I3rloNxwn7FzAYDhHjybivu9OJNkXY4RhOL1NDdRy1JILE/1BAcpLTScEeHmRKE8cwTVU/ZhhxGgyHCLQjYYHoMEOz0N4m3+eFLLWHSdVnI6p66UgMasSiRLcBZ3iWbdtuedww4jQYDhHjMVacQJ7NIia+8310xcUkV59kR+J+JlaoGPBBghHOqDc+mubLsmPEecww4jQYDhF1VQ3oA3QRiT+TdSHPN3qI/U4v6e/0sRzXkWjRAI/g1mYBc+22Eecxw4jTYDgk4Jw67grSShHBIlF6DGUgSa8TyRJ5sxDLEsh9Ok1UiCjU6pkZ5rhhxGkwHBpGtKSt0PDisgSRiDiPEyFrh/gELxVp4eIWTPV4alWKBNwG63EeN4w4DYZDQjUKx/QG4qoMNMA7l5Ld1YoURytRKJLYONpJJBFztNmSHstVZ9kDI85jhhGnwXBIwHW+PG7Z5vxN3G6JZnjpbcZIOfBRFOJMTvZw4n2c/M5TQ/jQkgz0PTAcL4w4DYZDQuhNDpxUmlh1IiEW7E3iB2D6keRt8mZLVtYJYk2qKx7BZK5lH+g//+f/fAiGY4URp8FwSBjVDVmRqMrU6SEOIs7I02XEKTPqOsveyDFd8jmJeJ2lv88CjDgNhkNCvTfpa5I7/lfKyCUFGBe8FkPX/zZiRdKRSzzA48eVmt/pRE9eTutvzgCMOA2GQ8LeZNJH0iwk6T1PfdfCkccsfVTPVQRqPH+Oye+Uw0nuJFrkZsQ5AzBDmMFwSKhrjJTjJPciBnMoCcpnuuESiVNI0tMYpqNjel1XpKyzhOSMOGcEVnEaDIeEcMw+R8Z3EoVcOqYDb83QoI/Gp16mb+IMJt2mu4ZqzzJ8EJqMOGcARpwGwyGh1qkhYOJEUDpSVnHGahNtRxL4wbypVWgtH3Pns9XpgOH4YcRpMBwSGkxGir1NTjZy4kYqRDknkoziUNo55GXPUN3w8V0f22q1hmA4dliP02A4JATy65ey7kLFIR6dTFVnE6PkGjLM69GdjupVxZWoeDuxyumU5QYYjh1WcRoMhwTv/IC3WrIVyWuPU62YrPiQDUmTkXi3UDjm+9DfrCdyhJeU+HBHt9ezHucMwIjTYDgkYKWJU0NEnBjyQbFyBY9TKnv6/JjeSLUJaWooCzjGp7TbXSPOGYARp8FwCHjyySdp3LIoW7hcTfapl5Tq7rKpIRZ9IBKnZnVq39NPJSMB9OaNOGcBRpwGwyFgff0qVZdBzKE5dQr4oHQkDSiOwnpMf28ksNhLxanJSSoYYSRdt2vi0CzAiNNgOATcvHlzUMR96i0iUJ1X53F19nNqMpJMVHLVqWuDI2HK7QUSpyUjzQJMVTcYDgHVqOIMTq0626UQZzn1OJ4SEmUd8HhOt8oMOx/fPcXLNWRhWmwtDMFw7LCK02A4BDS+7KMg1KJqs029TkqBL1RZd2I98tl8uo9bMJkw5QJMoki8vb5VnLMAI06D4RAQSI7N73hUb4XK05USQizikBKnmt+99jjxaK7CEFeiqrKXgYB/8Rc/OQTDscOI02A4BIQjeh8rTVrnWwRlHcUhkB5nUWRuJJkQwrBiOZYTqTb5Eje8zZPIZJgNWI/TYDgEtNvtPvY1QfYE4TEdUaiiHmfVWRyqZZOllzAPPZ7zig3eetlqm6I+K7CK02A4BLQ67N/E2fSopuOqDLyTZXIiTVCfphAoVaLseY/L2/hk7wIZ23bLWYFVnAbDIaBTojikPU05nhfl1BFdze1NZj9CgtQRy0b6m5T8Hm7vdGzcclZgxGkwHAJanU6fw4sdHdOR/zgZyUWC9Fnae/JyOtmz7uOxHeSo35ubB8NswIjTYDgElG3uZbZKNsGTWp6FF2uFqRmc7NnknifOtmt/U3ukWK32ut0hGGYC1uM0GA4BLWidwuzistANl1xJSiB8GrP0tSQkNbLFkn8ltSIleP680+lYpNyMwIjTYDgEhKN13ylpSiYn8aAIQ9rf1CxO9WxyZqdWo6lCReJtdzvW45wRGHEaDIeAdit0wbwTUUhala5I+4bkAmp2F49SIZNFTWJNUdsddLuWjDQrMOI0GA4BZbsla325gtT96nr8juZ2Fc4bNr7LZiKOmlNDvOdVGz1T1WcGRpwGwyGgKMq+que8OkMoMZtVR9DpXUYw6b9CGqFacErgBx7h213zcc4KjDgNhkMAzqrjEZtXAxfJhgSZ6IOQHiZ9SFd8nCexiCpUiMRZ+sKIc0ZgxGkwHAIK3aeuay3pqC6KObg4c5ksSpClJqWNlzp+ibe3zDw4MzDiNBgOAYE4+1hNUrgHhRcn4lQfJ6jJPa86AVgYAg7/iHPtSJxgs+qzAvsbZjAcAsqy7JPpvXQxEQmhVaVWnUqiDrIFbjCdyQlScRpmB1ZxGgyHgCLOqfOxncYuRSwiAcirHQnY0wlMkPF4rovbJAUen/KLn7QszlmBEafBcAigjZaqqNNvGQs8oIq6GOFlM1vscXoK+cj2DVE2ZxOP+YbZgP1rGAwHjB9ZXR3gfDqr4aVstXQyFeTf3MvZcMiH01SkwKxVVVNVilmdoWIdgmFmYMRpMBw0ehD9mLpPnczvIFUlZMUmAB/THYW8ywSRrNJoEslimrxhdmDEaTAcOHpRzFFF3WGPs1EZaHqCiAlS0uAbXgdcVxVQ51PIs1WUQzDMDExVNxgOGL1ea1BI2juKRDyr7uIcugroKfndx3QknU33MqvuJDK+aFmNM0uwfw2D4YDRwnqkkIoTiTMwJ1aOzrnMu5klI2V+TgT1OF2WoESZnC2LlJshGHEaDAeMUHGCjpwXjldnkD6kie4IR+vY+CierQDW/3RtsHdyVC+LNTDMDIw4DYYDhnPtPocPi4eTSLSYmlHX3iVe1+LVbJJaxLvW406iBsqWVZyzBOtxGgwHjLLl+hoRV8gOdZeFfbBwpNNDoqDrhksBEadv4uqMTqdtAR8zBKs4DYYDRtHu8Adekt+xv+nZmhRnz8P/1bG/2Yia7uLcehN7oFyFtlsWKTdLsIrTYDhgzHW7/aieF5ICr3mb2eO89DWd5/qzcY3cTt4kniCScJBWy9ZmzBKs4jQYDhilSyHGSJxogNeUd8rYlGO42pA46IMry7jILU4Y8XXZcUacMwSrOA2GAwZ6LqfS3yGbTyf4eFwXLQh0XQY+RhX1QpueBf6ilkacMwSrOA2GA4bOpPMRPXk4nW66BJf8mzodJOFylCIHTUxF0tR4SzGeLdi/hsFwwAgEOfBxYyVIOhKkvUOiqqv4o5FyRVyVATJuKaIR9ThhCIaZgVWcBsMBo93GLE4RfZyLNiM2wLuolDe+mZockrunepzU3ww90l6vB4bZgVWcBsMBo93pnIpJ7+LhZJFISdSx2Z1tnLpwKAlDIgh5IdGyLOCpp/7xEAwzA6s4DYYDRll2RFWHZEPyqfcpG4eyWXWIy9vods3ojBsubW3GrMGI02A4YLQL7WWyOEReTjG/q5MzHt+53SmP5dt4akiXt1FyvCnqMwYjToPhgFGU3MfESSEn6hBWm41PS9d8o8nvTJQQVwNzqcnjll5fx4hzxmDEaTAcMMpWe4DXRJyawQmaNOdTFqcc2RtNfgexLIm7U/2dZWnjlrMGI06D4YBRymK1UipNXczm4s4hHq1s4gRRk/k7p3etU6SczanPHIw4DYYDBh/RmTRxcqiQ47rXmUr6PyHMpkm6kEwXxc/l2N4y8/vMwYjTYDhgFGVrwAEfclSHIirqOlrJ5vZwqdn8Dm9SaaoC32rZvqFZg/0pMxgOGLQuA6+dpCIVWkymOgWFIpwO0oR3cFnAR9xuyZJ7WdqGy1mDVZwGwwEDf6mwrqR96nGrZSPVZ5oc0h1DfurjlNOpPc9W6Sz9fcZgxGkwHCDOn/+RAQtC7N2kaSE5rmtFqRswtaJMqfAwdUTHahRfqywti3PWYMRpMBwoeuLHlFUZtKXNRUUdoeZ2WglMH01ncRbOTc2vl6Vlcc4ajDgNhgOGVpCFTA6BBBrrFFGjqzG85CLxaiFW4kVWF8snVZ5lYVmcswYjToPhALHY6w3wemo5W+GiABQDjHWkEqeGoNGik1zyjViUdIoIxSbDbMGI02A4SLRaceacfZyp+gQ9wru0fSjuuyw0IZ7HLesmkWthdqSZgxGnwXAIQEtRIeOWhfg4oeEjONGhLGpTOCXNJu0iauR+M8DPHow4DYYDRLfb5Z3qDmK1qeuG9GOdDIqhHvxZJFXaOeQbCQVB0jVVfdZgxGkwHCDahe9DTEFKR3KfJyPlYcVSXUpcPFeakNuSADodI85ZgxGnwXCAQCHHc8Bm8nDGGHhI15A88OjXjHuIMhsSrWnjwBAjzhmDEafBcIAoivZAJ4PIu4k3EokWcTpo/+50TUZSTKnq4fbPfvazRpwzBus6GwwHiA6q6uHaxYQkF0WidFSHZEdiD1LcRcSiEW+3BBKYwDCDsH8Wg+EA0epgLcJHb8rlpD5ltjOoSSEe8UITRCwcNfE+WhAMpbNj+izCiNNgOECUrdYAK0zcTFlK1Tm1ao3anbqJTYKMUQ6SVHiUhtSSxLvWbWpoFmHEaTAcINqtNs+XFzzt47INlSmfOFWaTU1Lh+J4ZSTNODVk+4ZmEUacBsMBot3tntKAjzg5VOiaYEiKuliNaFCdA+IJjS5qo8c6qzhnFEacBsMBot0q+6SFy5w6I1mN3pDwLsUl0ap3mcoeOqMSQWeYPdi/isFwgMAjuqa/g/g3ncS774+LUyO8ejjpsC7ikZMVG4GALcR4BmHEaTAcIDTJCBe2aaiHkzlLL/PpqqrTaGXj4wiml2M6rdMAXdRWrIFh5mDEaTAcIAJfDlA1L/ftVGcvu0TLCXmKVZPvBx+VdVXUPa8UtopzBmHEaTAcJFzJie+ciUR2JK46i6yHKZajhi1JBPVuZsvasPpsl20Th2YQRpwGwwGiKFyfvZrTE0NFwf1OqSXJu+mFNPUxSLAcJ9fEyrOw0aGZhP2rGAwHiECB/djXBNWHUgJ83utsmpozN+XxfiqLkz9ut4ohGGYORpwGwwHCSZ8Sf7O4x8keTZ8MnNLfDJdaq0qeJuKtGok4HTvpwTB7sH8Vg+GAcP78+T5Idem8HL8bL4vYJLwDuNKMfU7a1MYqEa3MqOuU1Rme13W24XIWYcRpMBwYRn1NcY9pSJmPE6ItqUmTQ8DVaF5txqBjvLVj4tAswojTYDgw8E51p2nvmYcT4byXdRiOjumau4mc2og3ycsxHYHPalny40zC/lUMhgNCr9UagMykp31DUnV6ujGOXDrQyrPhBCU5yjdZ1Ul1aKtlFecMwipOg+GAQNsodYxSAow1E0nWqYP2QD1kfk41KDXc40TyrKsaHwy9nuVxziKMOA2Gg0IgTg3scNLbRCM8BX6QjzMtaWt8OpIr8mqTCRWMOGcUdlQ3GA4ILdcM+AiOn0lIBx7DPScfERpuamIOZ9xwCUy2Tbb1knqhtG/oaSPOGYQRp8FwQCjKDvUxC0j9zejllAtCBSEEG+XVHN+kMGNKf3dgmE3YUd1gOCB057p9smWCEKZutcz2qSO4ynTxcydL2oguVVFn9d2qzRmFVZwGwwGhLMs+L2pjVZ3tmxxGrDKRrsyILk4tQ52fOrp7Xi9sxDmjsIrTYDggtIpWzNZkixH+erlIininTgbVdcNZnDKrTpWqpCLVtdqRrOKcVRhxGgwHhLIsBjhzXlAakuRxhotHC5LLKk6fb7IEWaeeBxxzRdoqjThnFUacBsMBIRzVJXxYPJyeCZRXYYAYOaWPme0dyhOTsNqkhzYUYgyG2YT9yxgMB4Sy3ToFsuGS1XS2FBX7kuC5jckkypsvHavpsmddEzsLsPT3WYURp8FwQCiLFqUjoRhEglDhYhhx0+TVZZMyN0Emh2QUk9T1mgm1sH1DMwsjToPhgFDKSmCuNmViSJR1p6OXeiyXZWw+e34cvaRd6w5KWw08s7B/GYPhgNBqoR1JjuoU7JEyObXHiZVnLfuGKKwYIN7Hx3gf9w6VrfbLYJhJGHEaDAeEcLTuu3hUT+NC2t9ENOrjxOM6NHEsM/Y5STgC2zc047B/GYPhgFCWOE/iaac6kZ7LdqqD7k2v6fZa5tGVJJNViY/qSLWdjs2nzCqMOP+X9t4EMM76uha/3+y7RrvkdbybxSAChCUscoDEzgIiK7R9D9P+kwd5fYlp04YmTSy/LqFZatOmCU3zivPalyZpWkzShi1gkwBmtwmbAWOPd9mWpdE6Gs3y/e+5v983EmkWsA3Wcg9P0TYzUs3j+N577j1HoThBCPj8GRF1LHGaeGCuJG3l6Nr/8Xw4vVB1x+cteVK1TcczAoFglhQTEkqcCsUJgmOrTFHUpWX3ki6tNGQX3mXRXbaOPNcP4w7vnWP67OP9QT8pJiaUOBWKE4C2tra0MTNyqsRpWnVfVQDCBZHMOO3lurkysuKQd51p550g4bAbyJJiQkKJU6E4AYgQpcnmDHmijpc/VK00qxWnEYVEbXc85d0aIJMXrYEX1RnnRIUSp0JxIhCJVC+EvBmn460leZ6bnq2ca3LUyedW79mrXp1mN0m+pkFtExdKnArFCUAgQJmx2aZV1V3Teo8tudvdTcemWsL13eaumywiryo1F0eRgLbqExVKnArFCQCqQ28Fyby3VaTPy1i3s8yKR6N2x3Ocy3vVZo4M4Ua4ilVMTChxKhQnAhLU5toq05AkWnW3Wm4aYUi8OSvWyKOavz4W0ubds8u0MxJRW7kJCiVOheIEIOiDF6enlo+/WbeVpzOWM+QlWIpzkr0uMoRZscbGuBoiWr9+vRLnBIVOnxWKEwB/yG8Vcfs/jufH6VQrUUCugvhrlXK56snpfdNLt6y47rhKVTERocSpUJwABHzBjEtjt+kmV93MN01apRV/xkepO67d8TQL754fJ974OVptTmBoq65QnAD4eMYps0nXOre73p26fNc4H3nrSGV7k26zhahictZL5Yo9x5QnK3FOYChxKhQnAH6/L+2dCPl8r51xVlHtv+2tumcCQpLUxuRZqgpEPkcz1ScytFVXKE4Agj4nbQyLvbhfcwckIW2uyVEH3Irn/i4laHXHE+mXyBuSFEyTDZwlxYSFVpwKxQmAPxj0VjONM1JVSR+7HHJtUIYnAJHcsZudTxCpzDfLxlLOp+7vExr6b0ehOAEIBfxzvVbcseeW5tOxllsqT2sbhzlnVWm3ccCSp27zh9TEeGJD/+0oFCcAgWDY7Gb6xlT1arqltYlzTIB6dQHeKEhkqlATfWkVdpgh+7OkmLBQ4lQoTgACwWC6UrHL75YmJVPd2+G0uemVarZQpaqye/lD8rH9fsCvXpwTGUqcCsUJgN9ngtpMtemzs03ry2nb9Yo9s5TC0zV+nBWvfXe9aA08UvKGNFN9AkOJU6E4AQj4fdXbc2MVR68hSddWnN7+pnefPt6r03NOwsd+v1/3OCcwlDgVihMAfyCQcTz3d5+Zb8qME9+0HpvepZAnBlVrUbsn7xl9mMsh/U9zIkP/7SgUJwBcIY5bRTI5GI69Ux97s5WlVdAr7i9cEHl+nFiAD2jFOZGhxKlQHCfa2jJpf8CIOdWESzvbdF7jimRnmjLrNEvxsiDvfe54irtDwWBQiXMCQ4lToThOjIxE0n474xTStHuccrvu+KqVpmNjgcd7bzquDXKTq6GKXVlyKegPkWLiQolToThORCJMnHKfTlJp+mxKpXenbtyRbAAbWvNS2ZLq2I6nt8vpWuU9pLEZExpKnArFcSIQCKS9uaYRdeSQsrrH6QVdlq1RsdCoKOokb5WKl6k+NgsNBNRGYiJDiVOhOE6A47y0Sh+LRNVWnWicO5LZ0ax4K0qOXVmischg48XpSuUa0GjgCQ0lToXiOOGjQMYZV3FCIHKsK5K3l2mC2Cpje5wQhipjSnp1FcleF/l8IRWHJjCUOBWK40QoGKzubfodjzjN5RDgWOUcFaWYeVTKxgreSu4gWM9OzizBOxQKKXFOZGg/oFAcJwJBf8bb38RakuMaL05f1SHJzi/tTbq05BXr3ek61p/TU9uNrZwmA09saMWpUBwnIOSIG5JHnI5TzVWvplxaJagilaV1lLOPq3iEWinZhEsf3XLL+iwpJiyUOBWK40TA70+bHHXPTs606jLDdGjsKqji3anTuIRL83206t6cU2MzJj6UOBWK40QgGEqTNffwVU0+vPxKEKM9vSS77G6Vda8S9Vp4L39I79QnPvTfkEJxnAgGgzXmI8ekXdoVI8fvmHv0cTNOY+ZRNtUoeVZyY6q6vIaaGE94KHEqFMcJmBh7ju/eDqdTTbA02+9uNWuo8prneueYuFn3jI2DPjUxnuhQ4lQojhPw4vSMi8GTnsGHR5LeXXqluqc5RpjV74/b6fT5fbqKNMGhxKlQHCcCgWDGVJjjLOVsPHAVrrcAT4YgHXO97jqvtZaToDY1MZ7wUOJUKI4TXj6Q314NieuRpLC51cdUKp6d3FhchsAdqzi9W3W8hmJiQ/8NKRTHiUAwkMF7iOHVqyFTeNqa063GArtVP86xO/YxmzlDqIGAzjgnOpQ4FYrjBNzfzYqRac/FDd6l6smlW022LJt2vWLFoqobUmUcoboUCoaypJjQUOJUKI4DmczSjF/skcaW3wGZd8qH5qxyvL2ctPK2InVtzjru161UhL1QUkxsKHEqFMcB3JT7bMXpwxqRXYA3UcBWHBpHmK6Xp14x1SnmnaXxe5z8lJDf0WjgCQ4lToXiOBAJRDLVW3Wff+zk0udUr4Nc7x8YeuBJdr1z/IzTc4DHE4LhsKrqExxKnArFcQCGwwGpOKmaN0ReTLBt04HxSZeV6g37WPaQd3YpM86QtuoTHUqcCsVxgIkuXY0G5v8RdyRLnJKr7t2j0xgxeueWjnE5tuYf5aqqHgqpp9xEhxKnQnEcCPp8aavzmJNL/gc36u7YYLN6NTRGnhVjZEz/1RkJCAU1qG2iQ4lToTgO+IL+jGcnJ5WnNTSGmbGXYClvwpOurCSZNEt7llkBcZbM1yomTjioLsYTHuoAr1AcB3y+gA1mc2TWaaKAyeaqe9abhj6rmUPuWAywEGepXI3OwP5nOKDi0ESHVpwKxXEghGhgVtMlT93vzTW9yyFnzFLOrhyJwzsZ305Lp1R2uQo1C0wiLoVVVZ/wUOJUKI4DsJQTJR0rSCISjftPyrq/V4Pa7LL7a5zfuXUve99Dxcnz0UhYTy4nOpQ4FYrjQDAQmuulVVYX4B17r+661vHdzDir8b8VIwyJ33vFBLcBkqnOBBwI6IxzokOJU6E4DhgvTk/qccyNOpnVpKrnpn2TeWbFW4Yn6wbP1aa1lBMvT271IwFV1Sc6lDgViuNAIBhIV/037SWQSbn0VT+ncTPOslSb5rEujSVcekadaPsjqqpPeChxKhTHAb+PiVPu1FlV95nq0zP8sBnAhjDtrmbFmhljhWm8aORVp360+0qcEx5KnArFcSAYDmbw3u9gNumrVp5etjrIE8JQWfY3zXWQ47j2+2MrSWRt5nBuef3112dJMaGhxKlQHAdC4ZCdaXq5Q+bcsmrwbr02x59VulXRyKVSqTSWScTEGg6HSTHxocSpUBwjlmYymQhXiI7d4TQXRD6J0HCqjnL23FLs5Co2P51EQapYH87yuIX4aCSSJcWEhxKnQnEcCAaDEriGc0ufXA75rJ2cM5ZsKW92xum69prIVKPlshGGKlZVj4SjWVJMeChxKhTHikgkw6q6icsIBGSPU6zlbEmJWSZZQw/XrYwzKzZXQxVr8AEYqzkHrbqaGE8CKHEqFMcIJGYEA8buIeAP2GhgnzE0JnpNVEZVPZfVozFXJFScePOs5sKRcJYUEx5KnArFMSIUimSCgaC05Uim9AXMbNPx2nWyK0kVqu5rmhmnsYCHWIQWvmrwgeV3nXFOCqg7kkJxjAgHw8bEmEzSpU8SLn3Gi5NeW2kaByTbrttLI1lTspZyIE+0+bFELEuKCQ+tOBWKY0Q4CuL0iaIekBmnjc6QdSPrflSxRh4VW1l6pMrMWRZLOWs1x6SK58bVGWlSQIlToThGsJCTdixZBqw45NgZp3cV5HrXQvK+VHVGqowj1JK9KsLlUSCSyJJiwkOJU6E4RsRikbRxfg9YVd1nHODRrlu3D2+uaXY4y2OWct7X7f06FHasNt10001ZUkx4KHEqFMeIeCwx15EdTp/cmFdb9YoResi6vVdsm44qs1qJ4nuYe/IbRKJyqQSFXtv0SQIlToXiGBGPxmSWiVUkv11+9/kdIU1fdQG+Mq7qdKUSdW1Qm1dtetVnIBTZRopJAVXVFYpjRCgcypisIZ8JanPG8oZe63xkDYyx7C6dumv2N2216QW1hcMhXX6fJNCKU6E4RgRDobRUl7badHzGHcnLHSIaT5ymZZfld8exaZfWMcm6I8XCusM5WaDEqVAcI0JMnGjJ5WrIZ4La8N6cVY5dDsmFUKU0LlPdqOrijFQZO8WMJaI645wkUOJUKI4BbW1t6SDu1F3HriIZ/00RhWyQBrlu1cij7Cnr1m4OZFkSQjX37JiVxmLxLCkmBZQ4FYpjQCQSSQdwbilVpt++NyeWVWck78wShCnnle5rRCNvjxOPM1dDSpyTBUqcCsUxIJFIZGDw4fMb/03PGUnc3623ZnncrqYIQxWyrbzXqpdtq44dzgCloklt1ScJVFVXKI4BiWgwHWBRCGo6rOW8HU5vxmny1CvVO3WcVALSxPP/YL4pX7dVaYhJOBgrZkkxKaAVp0JxDIhFEmk/AtqEOINV93fHU9StF2dVPWfilIA268VZKpasYCT0itfI3XRTp1ackwRKnArFMSBVk8yACHE1hFNJSackayXnhbSVIQCVzBzTVqEg1UrZVJlo1WErh9ZdfTgnF5Q4FYpjQDyRMHfqTJjBoN/mDJldThuRbmacPNtEW15xx/LUPUUdxCqVKLKGwrqKNJmgM06F4hgQjcbSqCCxiuS3qrqQp89cD1WsVZx5K4vvpleNgkRlxlkxV0Ng2bgq6pMKWnEqFMeAWCwyF5VlMBQSdySIQmjbUWliLanqfOSZF5fdcemWZvldVHVp332UiMd3k2LSQCtOheIYwHPNtH1vqs5xwpB3Qmn2NCs2T901EcBEVcf3sj3DBJ+mkurDOZmgFadCcQzw+X1tqCyhqMOL0+GqE5WjrCNVq83y2DzTCkNk9zshGsnjrPN7NJ7KkmLSQIlToXiDWL1qVRr5Qj67ioQeHIvwPlHWXVlFEkGobCrKkmcf55ooDbPDWaq28iDecCym4tAkghKnQvFGkU60ob/GbDPExOmza0ne5RAGmV61KQQps0zrkuSCOItmFcmKQyGek3LLnyXFpIESp0LxBlFV1Jk4ZYez2qab71ektCQhR5OdbmecTKpl28KX7Ht8PRKJIDJDK85JBCVOheINIhaOtIHwQqGgkKe4IzljFWfV3MOSprTpZM4t0ZqDUKWVrxi5KB6LqfP7JIMSp0LxBhGOhs+U9+FQNRbYH/BL1Wm8NiH+jLkfuVY5F+K0wpCntOMyk4lYq81JBl1HUijeIHiumYHIEwqFRdgxQW1+aydH/7XaFOJ0qqtInoExiBOkG45Hs6SYVNCKU6F4g2C+a0OlCeLEe88B3vUs38WL064iFYtmFcnmEJVh7mGFI7zheYmYLr9PNihxKhRvAB/72MfaQHjBYEjUcBCn43lxkqQMjcsY8k4r7dUQkVXUS6bq5MehxY/G49qqTzIocSoUbwCpVDhDdoUoEAoI8fkDPuPsbleRKmWPNIvV6hJw7TJ8cbQo743AFKKGutosKSYVlDgVijeAaDgmF0NhJjyzw+nnqtPMN+UwqELV+/RisWTdj0iUoRK376PcuheZUL2KNBqOUDpdoxXnJIOKQwrFG0AgGD4TbXnImnvAyNix0cCAa5MsMdvE8jvIkzzz4hJXm8VRfitWXZGisRgFInqnPtmgFadC8QYQCvgzIMlQOCS7m4jOMI7vZGebZkezVDQrR2jJHcdEW5YskY6OFsVaDs9PJBJ07bXXZkkxqaAVp0LxOrGqoyPNbXqb3y69i7kH0i2teQeyf+Wksmi8NtGSYxXJiwnG/uYoV5xlMfhA4iVRTU3NZlJMOmjFqVC8TgTS6Ta8l3RLKOkBL93SRGWIlZxdfPeqS5LESysModosFKrzTVSuPN98hhSTDkqcCsXrRCIZNcQpVnJ+WXyXVp18VhhypZqs2JNKc4tORhhC2475ZsEo7ahOsf+ZrkltJsWkg7bqCsXrRCyWuNRfFYZ85tzS72UNkcwtvYyhsoS02UhgZlVTgVpFHYRKxtwjrD6ckxJacSoUrxOxWDjjOSKJuYe4InnCkHmMl2wJkkR77lhFHV/H10p2FQnfi8cTuY9//ONq8DEJocSpULwOdLAw5A8E2/xBQ5zGTs6063KHLl6bxpgYrfjoeOIU1/cSFUYLhlDJRAWnUkklzUkKJU6F4nUgnYi0oawMWOIMBAxxGis5qvpvotrEonvJM/iQctOsIhVGR23OUEXc4+trax8kxaSEEqdC8ToQi6XawYEh70YdsRlYR7IX6lJxWkckVJXeqaVxRXLN/qYsvrtCsCDfGhWGJi2UOBWK14F4Kn4p1ofC4bBEAnutOpbYK2IlVx6bb3JlicshANUo1pNGebY5nlDh5RlJ1GirPkmhxKlQvA7Eo7G2IItB0WhUKk0QJxbfJRLYNVHAno3cWFxGxeaoV4yxhxWGxEouGt+mcRmTF0qcCsVvAAtDbeFQMI02PRKOiLkHrofkYshxx9Ir7X26WUdyTSUKozko6lKFlsCi/FyHEsmEVpuTGEqcCsVvQEtjY5sv4KdwJGwSKQN2AR7L75LLZsmxaOabRWnTXZOVwaw6KsJQUR4j+/CuQ3X1dSoMTWIocSoUvwHJVPJSzDJRbQbkaihQVdTF+QitOJyPykVjG1ceM/FA1TnK1aanqINk8dz6dL1WnJMYSpwKxW9ALB5tAwmGI2PEiXUizy6ubDOGUGmCJL1bdG++CdI0XzexGiww5T7X2anEOYmhxKlQ/Bpg8T0cDLVBDEKr7glDfhsFTDYmw7ToWDni+WaxbPOHzP7myMiI+HCiCsUsNJlIaJs+yaHEqVD8GqTTiXZUmFhDioTD9j7dL8Tpum41X6hkZ5sVKw5510SYbY7kR0QYMo91qTatVnKTHUqcCsWvQSqRaod6jjWkEIgzaOabjq04xX/TkqXn7i6rSTD84LdCoSBvWHqXipP/aWho1jZ9kkOJU6H4NUglkxKVAScjObX0BaXqRDAbvI/Gqs1RWTkaLRZMm85dfBFtOpOmMS82rkmBgD93y1e+spkUkxpKnArFrwDmm5FotH38fDPgKep2vlmyjkejUm2OWlckV74PhR1t+qjNGIJPJ1euWm1OAShxKhS/AjD2CHJrjnyhsJ1volVHi44qdKzahLP7qLi7oyV3bYQGroUKhZFqxhAuidI16TtJMemhxKlQ/Aqk0w0dsI3DXXnI3qeDOL2oDBBnWXY4zX26t4qEvfcKluG9+WbRCkZMuC1NLVpxTgEocSoUvwJ19bVnQj2PRqJVD07TqgekeqwSJ/Y3mRjx5tr9TTi957kKBXGi2kQlyi1+7mu33baZFJMeSpwKxS9BR0c7zzcjdhUpYuebxofTZzPUJSbDriFhxlmRKGBrI4czy0JBzjArtnWPxuJabU4RKHEqFL8E6USLxACHuUXHjDMYMO06KlCJ+0W1WSyPiUOjRjn32ft0j0zF8KNUFrGovr5e55tTBEqcCsUvQbquoQNBbNjf9GaceBNRiMyZJeIwQJrifFQyC+6u3K4b4pSoDKReVsryvPr6ps2kmBJQ4lQofglqUulLsXYUi8W46oR58VhUBon/Js82bbbQqGcZxy06WnUYfoixB7fqEhfMM85QMJT9+te/rq36FIESp0LxC5D79EioDfZxkVhELoaCttp0hRypep8uxFm0Gep4shAnC0MjhWr7jko0kUg8Q4opAyVOheIX0FSfbsf+puSeh8O2TTeikPhvikpuSXO0WF1wx3063svie2FEBCIhTm7d6+vSG0kxZaDEqVD8Amrr6q5CGFs0FmXCjJhwNnF9N/fppbJnWIzdTa+yNFHAMCse4a+N2GV4ECcINR3XYLapBCVOheIXkEok5cwSFSdIE+tIWITH4rtLRk0X4iyM2vmmqThxoo5QNpxZFkYKIhjZYLZt62+7LUuKKQMlToViHD784Y42JstMJBId16bb+abryE4m3I9wTgnSxKklCBKzTTEtHhnl+eaIIVQWhlyuQFM1Neq/OcWgxKlQjENTQ1M7zirNGlJY3kRN9/tkib1SMRnp5s0q6nJOSVRi4syP5Cmfz4vre0Ws5FxqbqjT+eYUgxKnQjEOdZhvMnHG4jFTcQZDhjhN8lr1xLJUGncxVDHKOT5HtTk8PFK9T8fF0W3f2rCZFFMKSpwKhcU1HR2ZeDzWjtZcjIth7BEyiZbG7d0jzZJt0wuy/I4rIrdSFqEonx8WRySZb7IwxPNNvRaaggiQQqEQNM5oaUeFGcN8M8RtetA4IokbEqNchDBkxCAstyNLqMTEyazJlagrLfrw0LBcDGHxHYTK801t06cglDgVCot0Xe1VaK3j8Ti36GPmxY7XpnN7DtJEpTnKpDkilSXWjYy1HIgTM05PZcd6UioU2UyKKQclToWCzLVQIhHvwIVQRPKFzMWQz+dnznTkbBJVZNG6uhcKeVHUIf6AVLEIPzIuXwhv3Opv2/Dd72ZJMeWgM06FgtHUVN8OyzgvlE3OLPlzxzFplmVLhoWCMe/I522bjkpU0ixN6w4ClbA2rjhrUkldQ5qiUOJUKBiNrKaLabGtNmUNCVHAYvbummuhUTPbHBWSLNg79Ioo6IgBlv1NSbk0bXpdQ+0GUkxJaKuumPZAmx6Lx1bhHh1rSBEIQ+GQ5KeLmk7WJk4SKwsyy5QzS64sy/ZuHaRZJVMmTn6t7IYN31E3pCkKrTgV0x4tjXUdIE1Um4jJiLAoJGo6ttqx2F4u2bv0UWnHQZIQg0Co4pKEM8uRvIhGZVwRMdkmk8nNpJiyUOJUTHvUipoepEQM1Sa36ZGILL079vvi8j5qZpvDw8NVZ3dXnJKMMORdC5k23UetM1q+TYopCyVOxbTGNdd0ZFKpVAf2N+PxRHXxXSzk7P05hCHPKk4W3yXu15VqFPubUoWyWGQy1SuI2sh+S6+FpjSUOBXTGjNaZrdDPY/zbDMG4oxFRU2XiAyo6dZCDtXmqHVDgkiENr7inVlytYn5pre7WZNSC7mpDiVOxbRGQ13ddTipTKZSIgyJ9yYTJ/nsGpJV0z3SxDklTinJzjdRhQ4NG7EIrT0W5ltaZ2qbPsWhxKmYtli9+oZMOBxpj0VjlEqkZAUJC/D+gCFNsrfpEH9G7Ykl1o5AmCY6o8wzzzwT57AQLBAOhbK3aXb6lIcSp2LaIpVIr0blmKqpoXgiIffpqDghpmN/cyw33arp3JJDJEJpWRFRqFC9TTfRGfyaKVXTpwOUOBXTFjzTvApEma7hNp1nmxCGfKyIk+OrZqPLiaW9S6+ad8juZtmYenC1icfg8ZhvNreqmj4doMSpmJb49KdXt/v9TiaZTFAiHmfSjIiFnE9yhWxuOuJ/R02lieV3Uc2xEA+nd65C0aZjpxOXQ6hAQ+Fw9mtf0zZ9OkCJUzEtUZuquc7v+KmG23Rxe8dsk0nTx/NNmWFaNR2GHqOoNpkgK7L0jvjfSrXaFDW9bEg2XZPUanOaQIlTMe2w+oYbMn6/fxWuhBKspkdjMfIHzQqSwJp6FOSM0rToOLUEoZJTkUA2EOfgUL6anQ7SjcRSG0gxLaDEqZh2SDXUrXJY/UnxbDMRT4iaLr6bduFdYjDseSXWj0CSReuxadr3Ag2xKISl9zLadK44WZnfvGHDhiwppgWUOBXTDrFo5DpE/9aka+RaSHY37Ykl/oOAaQcI0yNNMSfmrxGZoDbMNodld7MgRh+YiTY3NWqbPo2gxKmYVvj8Z29exS05ziwplTLzzWAoLLNLL+IXy+4w7cAMU5yQYFjMlSYEI7Tm+Ppwflj2O0GcXLFmN/zTdzaQYtpAbeUU0wrJdOK6kD9EtelagqJu2nQ/kSVOuUsvmNA1EGQBuelFTxQqiYqeH8H3rcpeEZOQzaSYVtCKUzFt8Kc3f7rd5/jbU8mkqOmxWBy+meJyJLfpFbeqpA8NDlcD2cRjk58v8Rh5M98ctRdEQX+AkqnoWlJMK2jFqZg2qG2ov87v+LjaTOPChyKSKeSTpXfMN8slY1Y8JGtGZgWpKDfortjImbv0YSbOISqVi/J1fh3WhDRXaLpBK07FtEBnZ2eGCXIVlt3lxDJuqk2054j/LZUqVacjcTvyHI/slZDx3Byh/oEB+TrEIijxs2e3qig0DaHEqZgWSMTCa/w+P6Vr01YUipHPHxDTYbToOKMcLTA5Duer/pqoMk1iZUlEIVSag4NDYmSM3j2VSGZvU9/NaQlt1RVTHqg2g8HAqngsRmkWhRIsCgWtWbHYw7kmjA2zTYhC+aEhWXhHDAYs5YpluCBxtdk/KMIQZp6oVpsbm3S2OU2hFadiyiMZi6wJBYOsftdRja02/ag2TYSliDwFT0kfMitIJev6LitI/H5wcJAGh0y1CRPjeCya/cd/+qcNpJiWUOJUTGmg2gyHw6twIVTHxJlgRR0L74gCFtJEtektteeHzAoSgtnkrUilSkm+1t8/IIQKgw+uXqkuVXsrKaYtlDgVUxo1sdgaJFbWsJKeZCU9xu06HN5xXok9pEqlbNIrudLECpJ3Xmlu0I1gNDAwSAODA3IphCI1iqujRGIjKaYtlDgVUxY3f/rT7ZFwiKvNmOxtxmNm4d04vJOIQjAqzouL+xC/N6bEBYn5rYj3Joh0gNt0PMaYFSNTqGbDbXqXPq2hxKmYspgxo+V2XAWlmTRTyZRUm35r5iGemxCEcAWEE0omzpFCngr8OQShUsXMOFGFekq647hMvCGKJ0MqCk1zKHEqpiT+bO3aT4UCgQwUdLO3GaNwxCy8w/3IRF+MSiWJ2aYIQ3lj7FF2zU06qk3sbWLGKXnprsNz0to7deFdocSpmHK44YYbMqlkYnUASnptLeHEMhKNsJLut49wZIEd+5po0Y0olBfyLJVL1b3NQf4e5psF/hhteigUpsy8zHpSTHvoHqdiymFGc+OaYMCXSaVTYh0Xi8dltunId7Hsbow80J4bMw+uOrFqVBgV2zi5V+fKE6QJUw84Izk8D22sr89+5SvrN5Ni2kMrTsWUwu9/4n98qjZdswoZQvX19ZRIpLjajBq/TR5sok0HQWKu6b0NsfiD6hMKO6pNzDmHBu2VEFebWEGC/dyc+RmdbSoESpyKKYOOjo7MnFkzO5EfBNIUJd06vCO50sWVULnCZDki55NebhAEILOzWTHWcfz1vn4z20RLj7PMlpbW7Je//NcbSKEgJU7FFMLiBfM2pVKpdDKR4NlmHZOmnW0G/KKiVy+EQJbWjBgECtPisoSzwQGpYGabqEJhYMwteoJfLzNvnlabiiqUOBVTAv/f765a09LakoGAU9eAFj1JMW6vcSXkkE/8NEs2ZG04n7fnlUNMnIPi5I4Ty2LBKOl9fQOisGOPEy3+jNaW7F/ecssGUigslDgVkx7corfPnjOnMxqLSAAb3I9QJYat36a3s1mwkRhi5MFvg0PDMs9E/AXIMy+C0IC8oTIl47dJs2bPVus4xWugxKmY1Dj//PMzixbMv72hjlvzWIxb9LQ4u6NFxzqSa88qPWf3YRu+hrkmZphFriphJ4fvezfpw9K6lygYDDFpzszObGzeQArFOChxKiY1Tlu69PaZM2dkImGTI4QLoUQiTiGpNh2JEsLsctS24Sah0rggQTHH90o2S2jAc0Dir8MEpLYmTbNnzf72jTfdlCWFYhx0j1MxafGRD31ozcKFC9pj4Sgr6GlK19SKih6NwaTYL/foqBy9KyAIQcNMjrJ+VMhLLIbx2zS2cf19/SIOAeFQhObOnp2dNad1AykUvwCtOBWTEitWrGhftGhhJy6DUGHCMg6RvyDOYCgoLkZYXEcbLgFrg0NSZQ6JIDQsN+oiCpVNJMYAt+ioOFF9Bnx+amCBafbcOd++/vobs6RQ/AKUOBWTDue3tWWWLF5w+4zWVopFotTY1CAGxQkmTqk2bRwGdjLNhdCwVJS4FJITS4SxcesOUQhuSHB2x94mTiuBKL/mggXzsn/0mT/pJIXil0CJUzHpsOCUpbfPnTM3AxW9vrHexGGk4H4UlQA1L0fIO50EWZq8oEGz7M6k6VJZ2nR83t/fL4/BhVDAF6DWGa00f9583dtU/EoocSomFd73nvesWbJkUTtSKtPpGmqo5xY9kZL1I+xsAlDSJc4XJh7Sng/KziZuzyEOQUkvl8r89byo6HBAgrkHlCSkYC5etCD78Rv/5wZSKH4FlDgVkwYXX3xBx6JFCzobG7HgHmPSbJCdzXgyLj6ZjuMtupdkDxPEiXvzocEBfu+dUBYkPx12cnB17x/olzUlXBWhWp2TmUMzZ868iRSKXwMlTsWkwNKlSzOLFy9ZN3/eXIqGI9RYVy/rRzEWg2Di4XiJlTirRBQGdjYxz+RqE+Q5wG8gUxOLUeDqs59yfTlZP8KsE85J9Vy9Llq8YMP1/9//0FgMxa+FriMpJjwymUyaxaBNSxcvziSkRU/LLTrUdMw14eoOeIvuBet+NDiAvcxBc4+eN0vt+D7IMtfXL0o6lHUgwoLQwgULcvX1LTrbVPxGaMWpmPCYk5m55swzlmXqatMyg5QWvcYo6Ahi8ypNLLNDJcd1EMgRgo/XopvVo5Lkoudy/aKiY2fTrZCcZc6ePYvmzpuz9vrrr8+SQvEboMSpmNB429va1py57MzVs2fNlOqyDnZx3KLHRQwKy2UQ7OIMaY7KXFPa8yGTTAnylPA1tPAjo9K290MkytvwNceR5XkeBWR///dvUnd3xeuCEqdiwqLttNPaTjv1tE5u0SVoDUvu0qKneK4ZifBc0xgTI5GyWBxlYmTSRLgaSJNnmFDMseguBsUIXmMS7evvk2oU1afrOhQKhmjx4oWUrq1fTgrF64QSp2JCgueamQWLF93RdsYySiFwLZkS0kTwGkw8jMemI/uaOKkUn0206Lg3Rw76wICZa7LCjjYda0j9nvMREyzx83CPPmPGDJo7Z/baG2/UCyHF64eKQ4oJCa4C7xg/16xnFd2ziwsEgujPmfvMEjuug0CcQpqoNvv75bxSvocleK46B+QWfUDOK7GyhDt2OMSz6LT5Uzf9UScpFG8AWnEqJhzeccF569rOXNbWOqOFSZNbdK40QXIgTblD95m55uio8dccHTWrR2LUwaQpyZRMpCXrwYm5Zq6vz9yi89fQ3uOsctHCRdlZzfXXk0LxBqEVp2JC4RyIQWeesXr+3LmGNLnSrElx1Zm02UHkVC+DYEIsYhCiLvrNkjuIEyr6qOxrjsrHff1m9ahQZBWdZXS/z0+ZeXNp4ZKFN11/4//KkkLxBqHEqZgwaGOccuqpnacsXSrVJWzi0tyqJ5MJ2bOUXHS4uQtpjghpwpR4wFaaWGiHZdwoE6QXk4Hq04hEI9KfY/WoubGR5s2bt/YTn/hfuuiuOCYocSomBHAZdMpSTwxKUg2W3OvqJN43xsQJMQhwYRUnYtCIib8YMGIQiBN+mvha0Z5cglD7pAIdogr/A9KMRWK0eMmizZ/7/JpOUiiOEUqcipMOXAYtXbJ40xmnn56Bv2ZNKmXifa0YhJUhTOPlMogFH1SbEHnEX9NWmyBI3J9jLQnEOgCrOMw1YeABj01/gIkzwJVmJjuraYbONRXHBSVOxUnHGWectqbtzDMyDdxCJ5NMmg2Ndq6ZpHAkYpbcKxUqI76X55pwNZLLIHE86heCxMdwdC8gO4gJtTeXE0IdLY4IYaLNb2lpyTXV1i/XKAzF8UJVdcVJxZUd71uz7PRlq1tbW5k0k9TY1Ci36Kg0seTu85v/L1ou20z0vAlZM/6aA1JpQk3HqSUEIVSiuENH247rIJgao83HKtP8zLzrO2+5JUsKxXFCiVNx0rBy5cqOpYuWdM6aOdPcoDc2sCBkSTNmxCBUmjiNRPs9ZAlzeHhQSDOX6xO1HGSJTPSCuB6Zr+OxAKrNSDiCRfe1nX/+5yoGKU4IlDgVJwUr2tszixcvvH3OnFlmwb3B2MR5pBkKBrF4JOtDslY0NGwjMEyV2Z/rl1Yc9nFmrlkQUu1j0hQxiOehWDvCsnxDQ+3av/na1zpJoThBUOJUvOVAFvq8pUs2zZ83L52IJ1k9r5U79GQqSTFE+4ZCJg+dTLSvIU205oYsB0QM6pO2HdEYaOGH+eMczzVRcRZLo9Ke+5g4a+vSG/9xwz93kkJxAqHEqXjLwQr6HQsXLsgksatZm2YFvUGU9EQiyW11WNaGEFNp4i/yZu2IK02z5G72MlF9FuyNOu7Q+zyrOFbc4QQP0mQizjY1t6qCrjjhUFVd8Zbiox/5yLolixe11bAQhDjfhoYGyQ5KsJoOBd2BhC5L7mXjdsSkCVcj7GTKmyXNUevynufHIP6iV1r0YSFckGYkFMkmU+Hl69evz5FCcYKhFafiLUMHK+innrp0dUN9PSW5umzkSrNWdjWTFI1GJM/cOB7xXHPEGhIj9oLbby+lUkgT6jpXoqgucRkEMQjrSZJSyYISz0dz8VBo+YYN382SQvEmQIlT8Zbg/e9f2XHqKad2zmhpZjEoYRR0G+srmUEOLoNcmW0ivnfYi74YHLJWcQNCpGjPcUopYWtMlrKvaVMq/f4ABVkMqm9suP67GzdmSaF4k6DEqXjTAQV9yaIlt2fmzhHVvB7teW2txF/AoDgABZ1b7IrrikKet2tH1Sx0WUEaljNLmXna9Mpcb07mnaP8nCCLQcFgAO3/2n/+53/RtSPFmwolTsWbinZW0BcvO3XTgvkL0qg0a7lNr2MVHQp6NMGkGTLemuJ4JAp6vkqaQ6g2XzPTNGbFoqD39cnF0EghL/ueqDbj8fja7//g3ztJoXiTocSpeFOx5Mwz7li0aFEmVZOUKrOeSTPFpIndzRC8NR3Rc0RBxyK7VJlCmlxpDlj1PD8ip5YgzSEo6P3GyX2Yq08o6GjPo9Hoxn/f+MNOUijeAqiqrnjTsGrVf1u3cOGCttqatJxR1mNXk4WgeCIu3pqOuLi7VMHaEYQgEYF4nml3NaGmj9r2XNr1fF6C1vr6+HtcdTJrUjgUolgkmvUHQrp2pHjLoBWn4k3B7/zONWsWLViwurHOzDLr5H2NJc2IXPUACFEbsVlBQ7KraZbc8TmUc2MfZ9pzzyYO801cBuGUMhaNZeOh8PKNGzfq2pHiLYNWnIoTjo985IMd8+fN72xpapZdTSHNFJNmnOeakYjMI7E6VKqYXU0QoZCmJFP2SdWZHxmWdSO05kM2J11u07niRPhaOBJmNT6W8wdDy1VBV7zV0IpTcULR0dGRWZCZd3trS6tUmFDQkRcE0oTbkT9g/q4uSc55wa4bmasgsYdDpclzTakyh/PVmSfacy9LCCeZcRaamIyv36ikqTgJ0IpTccKwYsWKzKJF8zbNmDkjnQZpsoJuLOJSsuCOdSGgLCFqBbtqhIsgmxU0NChKOuaXIgQNISN9WGziIAihdQ+EAtLuJ2Lxtf/yL7p2pDg50IpTcULQ3t6eXrp40abZM2ZmhDThdoRdTRaDYtGokKaDU8qyibUwK0dmsX2w3xAoKsxha9whM01UmpIl1C9VJ7w5cWXE1eba737/B52kUJwkaMWpOCFoO/PMdZm5szOYaYIwa2vTsnYUi8dlwR2AGTH2MfNQyNGC2yA1s7Npqsu8pFYOSwsP0sQNOipTsC7a80Q8sfH73//XTlIoTiKUOBXHjU9+8vfXzJ4zcxXSKGvSKVk7SiW5PWfSRA66uT8v02ihKKeSIEbTlg8aAh0aEMV8BO7uLAqBTPsgFPUZ0qy4FSbNGFeb8WxstKhrR4qTDm3VFceFT3zif3xq9uzZnTVMlHirRw56GmtHCQoFgkjktQ7uRSv4YK3IXgTlLWn2m9Uj2dPsG5CroFxvn+xsViolOcuMReJZvz+0fIOuHSkmALTiVBwzPvaxj7XNnj1nfS0LQKmEMe6ora2TwLWw9dVEtViUXc0RmxXEM80BzCwHx/Y1YdrBxNnPH8O0Ay06FHQYd8S40mTizIXD0eXf/a66HSkmBrTiVBwTVq1alZk/b+4dDTzPTHJL3sikCRf3VE1a3I7giemSKwvuBY80B+xF0BDiL3ImUE3MO/KipmMdqW9gQBT0QrGAM0rJQY/H49craSomEpQ4FW8Y11xzTWbe3DmbGurqxcW9rr6O6rjSxL5mNBalgN3VROxFwbsxR4U5MCCVpJd3jtZ8BAo7zz377f05RKFRJs1IJMzEGcObuh0pJhy0VVe8YSxdsuCOlpbmjPhqNtSbSjNlLOKkPa+4YtrhkeagdW4XU2J7Uuk5HmFXExVmvyVNrCqFwyGcUlI0El77ne9+t5MUigkGrTgVbwif/9zn1rU0t7SlkghZS3OlWUs1qRqzdsSVpkOIvSiJS/tIPl/NP8dcU04qB/plXxOGxCBPVJr9dqaJVaRA0E/xaJzisfhG3dVUTFRoxal43Vi79k/XNNQ1rk7Gk9KWQ0HHDToqz2AwKJ6a5UqZiuKdadpzIU2uJPsHBm2lmRfjYVjIydcGTLUJJySYGeOWnYkzG40nde1IMWGhFafideGzn/nMp2rTdZ3w0YQJsTmnrJGldLOradaOiqNFc/kDMchGXoiKPtgv10CFUdO+S/CaJU5cBaFURcJlJBLL+iQvaIOuHSkmLLTiVPxGdHb+aXtdum59IsakCTGoNi1xvqx28zwyKKRXKpX5rSg2cOMjLyTOd8BTzwvirQmirJImV6OuWxEFPRqJ5SLRmK4dKSY8tOJU/Fp0dt6cYcX8jrglTdyg16TTQppwKXL8LAaVza6mVJO20hwatOYd4uKelwX4EXFDGq5mow/YBfdIFO15jBrq63XtSDEpoBWn4lfi5ptXZ2rTzZuY1NKJeMwYd6RrRUGHH6bjd0Q9R1bQKJPm8PBQNS8Iq0XenqbkBckNel6IM9dnCLVYLnozTapLp9f+nw0bdO1IMSmgxKn4pVi9enW6uWnGpmQ8lsFqUGNjo6wdJZNJaav9AT9XmmUWekoiBuEG3cw0udLsM+r5kDgdFaq7moPW7QirSahATaUZR9u/9h//7z93kkIxSaDEqfilmD2r9fbamnQGLXQtEyYcj2TBPWp2Ncsy0zSkKaYdttrEnbm3p2nifM3MU2Iv8D2uNEdkVzOIrCAITBu//c/f6SSFYhJBiVPxX7Duq3+1hlvyDswxoZ577TlOKQNcacraUQluR6PGnMOzgeszt+fDI3lr2jEi70GaiL0wZsQjosLDo5MFp2xtQ6OuHSkmHZQ4Fa/BV7/8xTWpRKoTYhAIU8yIU2mK4ZTSH5SVI5gRi69m3jga4c4cVaa3WoSvYU8Txh4QgECaEIPy3Lr7WUzCXLMmWZOtTSaXr1+/XteOFJMOSpyKKr7ylb+8LhFPdsaYNNO1aXNKmUyJF2YgiIA1LLizgl4oSguOahIVZvXNCkN5Vs9HRo3LO+zhUInm88bBHa5JyXgyx3PTq9ffdluWFIpJCF1HUgi+9KW/aIuG4xuiPHdEW56uSYsQBBLFKWXFZqDjnLJQMNXmkE2nlLC1Qbi6m13NYtGSZl9ORCI8Fgo8MtCxC9rc3HzTP2zYsI0UikkKrTgV1NnZmYmHY3dACKpmoCcSZleTRRzYw7llkGbRrBbZJXesHHlnlSBNnFIiuhczT1SaaNFxSulj0kSbD3WeSXPt33796xtIoZjE0IpzmsMsuKc2hcORDKIvGuobxFMzzlVniNtqLjRNiy7JlGbtSM4o7WVQvwStYVdzxJJmngkzJwq6XAXx8wN+P0VCYWpuabn167d9s5MUikkOrTinMbjSTNfW1nClyaSZSFJDQwOJmzsc3KMRkxVU4pkmFPRRzyJugPoH++UqSBR0ri4xzywUiyIKocrs4WpTUil9Dr8FKBgM08w5s7Z9/RvfXE0KxRSAEuc0RjoZuz0WibTFxy24J5g0I7EI+cS0w5X4CnEzQlaQOBmZlSMhTiZHtO0F5AmNGNLszfVKLAbaezgmoUWfOWtmtqm57mpSKKYIlDinKf721nVrYrFIRzQclV1Nz4wYDu5YGQJpljGzlLygvDXrGJDLIIhC+SF4ahrSRNWJ1ry3p1fWj7DnGQyANAM0o6U1m66rX97ZeUuWFIopAp1xTkN89a++uCYSCnVGwxEJWKvHXNMuuPt9Pp5pVsxVUNGsHXnrRp5xh+d0NGrVdawbgTSxq4k5p+Mz/9+qpbkFUcFX33KLkqZiakGJc5rhK1/5q+sSqURnlNtxLLjX19dRurZG7s/hvu6IRVxJQtbkxrxKmHjrN9Umt+Ujo8Zzsw/teW+vVJw4sfQ5Pv7/VA61tLTQ3Mzsm/7yy1/WtSPFlIO26tMI6770F21cVW7AjThEILGIswFr4uDO7TnifHFOKQ7uA4NiQCx7mv2GNM39OX8PpMmtO+J8c705IVPcsJPrUFNTE2Uyc9b+6RfWrieFYgpCiXOa4IudnZlYKn1HLBwW1byurl6ug7DgHgyGxIzYha+mLLgXrDGH8czs52oS+5qFEWPagZ1Nc3+ekyV3OLujUgVxovWfP2/erWs6/7yTFIopCiXOaQAsuNc21G1iBT2TsruaaW7TTexFSBRwrB3hBh2k6c00oaD35/qq6rncpsPQw7og9XKliccBWDuqra2jBQsXbJs7b0EnKRRTGDrjnOLArmZTXXpTIhE3u5r1jWITl0gkKBQKm13NshGDTKU5aBIpYdph3Y5kppk3xDk4PCQiEGabg+LgXpGTTOQPzZ8/P1tf33j19ddfr8YdiikNrTinOBrq0nekkskM7s6hnqdraynBVacsuPsMaeIqyMs4H7CVJtpwOaVkssRM03NCGugflEoTO53lSknafLT+8+ZlcunauuU33XRTlhSKKQ4lzimMv1n31XU1yUQ7iLJeroJqCWeVkUjE7mryTLNiHdztruag5JwbpyOcT44U8qKugzSxxwlCxXssxYf5dRANPHv2HGqdMeP6T3/6M1lSKKYBlDinKP72b9etSUXjq5OJODU01BnSTCUNaQbwr70sTkclkKbd1RzATHNw7A69MFJggjS7nP0DQ1JpIvoC807Yw8UiMWpqbqLm1sa1TJqaF6SYNlDinIJY99Uvr4lHo52oNHERBCGIZ5xMmlg7CsiCu7k/H5W5Zl4U9H5p0wf7jTCE9rxYLEkypak0e8WsGJVpOBxiNT4mLX9DQ/3az31uTScpFNMISpxTDLfe+tfXxULhzkQ8LvZwNaKeJyUrKCCVJu7PyyauVxbch6TSHLBBa3iDco4ESsT9gkSxpyk5QkyaUOGjEbP3Wd9Qv/Ev//JLnaRQTDOoqj6FsG7durZYJLI+xS05VoPSaWPaEeXqEDk/EIPKZVdOKSXOd2jItueD1Qsh7GSac8sSzzmH5SoIQtDwUJ7non5u9xNMvQ6lUjWsoDdpXpBiWkIrzikCJs1MTVLMiFncrjVRvqkUxcSMOGR9NStCmvDVBBFCIR+wO5v4GKbDpVKRq82SxPnmJOZ3UD6G+3uaSditEILWsulobHlnZ6euHSmmJZQ4pwDWffGLmXQquSkRi2YgAqXr05SqqaE4djXDuAqCcQfUc9N+52WJ3QhAQ1ZJFzGIv49qM299NbGviRkoWnuo8TDvqJQruXg4onlBimkNbdUnObDgnsSCeyyWQSJlXX0d1aRq5CoIyjcsN7CrWSyWjRAE0hwwOUGoMEVB5/dYLypXyqKwQznHAjzUdKjqWJYPR8OisqdTNTdt+M531LhDMa2hxDnJ0diQ3sQKtyy4i6cmV5oxJs2ILLj7rGlHiUbtLqYJVhsYR57DQo5Ir0Q1ih3OfkmlHJG2Hq5JcVbk0a7zvHTtP33nOxtIoZjm0FZ9kuBzn/vMutHR0Y6jXd1rD+w9svnuzXdn16/70u3RcLQN1SUMO5LSnidlXcjn88uCe8VeBUEpH+gbi7yQt4EhqULL5Yq06X3cmvf24WJomD8fpRAr6GjRe1ggCobDt/7gBz/oJIVCAU8cxUTG6tWr03V18XVBJ7QqGApI1ZjN7snVNdRuO2XJkvbaGm7NuUWfOXOmrB4Jafp9kkpZqZSsEfGQrBP195lTSbThIND88IgIQag0e3P91H2kWx4HogXxwnJuoL+PCsXRbffdd/9ZpFAoBFpxTmCsXr0qHY+HN0Uj8bZYOEqxWISaAz5uz+vTvblc++GuI9RQ10hNzY1VIQgrQ4iuwD9otSWVEpXmgPHVhDnHgCy4D8vKER6Dz3t7ekQMgqu73+8wCafEUo6/l43G4poXpFCMgxLnBMWqVasybiW2KZlIZML+ENXWpSkUDFI4EKY5s+fSCFeFe3bvo917dlMtC0IzZswWP0y03fDGxFwTjkYDNpWyf9DknA8OmZA1KOylsskL6um2Du7FEXkuKs0ii0VHug9nIxHf8rvvvjtLCoWiCj8pJhxuXr06M1oubwr4/ZmW5ibCQns0FqZEPEVNTY0S49vQ0EgtLc3iobl7z17JLYfzujmnHKUCkybIECbEIMwcInutko5bc0RjDDJpwrQDN+ioTDETTTNpYn1pd3YXt/Cl5Y8++uR2UigUr4ES5wQDFtlD0eCmcDicGRkaoWDAT7Nnz6RkPClrQTDViMVxPunnryWomT/H7uXLL79MOKeESTH2MHtlD7NPiBEEajLQh6TCLBWNsUeO55ogVDmx5NeAIQgcj3a8ugMplTc98eRTatyhUPwSKHFOIPzd361r4055SzgQamlsbKA4E6QspnP1ODczV6pN3JsjiRK2cOirQ+ZmnIlwmF54YbtUkrFoVPLNvbklqkzsbyLyYqQwYt2OrBnx4JCsI0WjEYonk1xpZhGRsfaJp7beQgqF4pdCiXOC4E/++I+vY6X8u8FgMB30hSgSDlNza7O031gPgrlwAxNkbU0tV5hlVs4dM9NkIcjh1hruR1DEX9z+klSWmFVKpTlkUimFNGFIPDoiRh6y5M7voaiDfCEGHTx4EM/Z+PNnX7iRFArFr4QS5wTAJz/5iU9VSnRbKBCJ1DWmietJ7E0Soi5mzpxBM7lVh9oNYotGwpROp2VhHUIQ2nPxzWSxKMjVKLKAXn75Fa5UB4Q8UV3C2R2tOapNkGWf3KAPcEtfIART1qRS1NPTS11d+7OhcHxlV1fXCCkUil8JJc6TjE98/IY1gaD/Fti0oYKMssiDtjldV0MBf4ArwTQ1NTYSWnfMMvfu2QPthlLJGjHrkKhebrexvA43Ix8qTf549+49UoGCPfEYuLkP2mTKfntOibUlhLdhJrpn9+6s43eXP/fc9i5SKBS/FkqcJxGf/MQn1rgOdY4MI4YiQPWNdVQpE38c5jlljGKxqCjqoVDEzDLr67nAdIUUUWFi1tkvu5mmgsQ+Zt5mBKEaRWWZ6+2VtSOcUPb29lVJEwp6ksWmSsWlnTt35gaG8hdks/uypFAofiOUOE8S/uBTn1qXqkve3MJzTJ/jl/tw163IqhHmlaVCieKJmOxvYoaJahRECcu4UrFMO3dlRQjCEjuIE4Q5WiyIf+bQUJ4aWUhKJmN0qOsQdR89ataPEPOLSpN/fpRHAcFgmHbt2sXfK1y7d9+BR0mhULwuKHG+xVi1alX67DPbvsHEdUNzaxOleb44Y0YrpetrqfeoSZZsbWmWuF1Uh6lUjdyLV3Aci5EmOZSurRFbuP379ks1OTI6Im7uUNAxw4Qaj+fg/BK36kcOm1NK5AuhdQ+HQuKctI+fz6372t17999GCoXidUOJ8y0ESJPcyiZWzFeEgiEK+ILckkcoHo3SrFkzqXVmq1z0HOUKkRV2JsA4f9wrVnFwKcI1j4ty0XHF/air6zBXk91yXokZJipPEGJtfVrmoVDPA36fJFUe7emR6hTfj0Yi1N3dTfv3H7j1QFfXzaRQKN4QlDjfIuCEslIsbkmmEkvRgscTUeY/H6Vqktyq+5g8Y9TS0kSZ+fPIz6LQ/n37xM4Nc86jR3soEUtIFVlg8uztyYlCDiI8fOQwi0QjcvmDlj+dTrHi7srn+fyQVKFyZjk4TDxPFeEJxsX79+/btvfAQb1BVyiOAUqcbwFAmkG/bxNXjRlk9kRCQW7Na6SiRPBZTV2KUkx4Af4Hd+Jz5szhStFP2WxWjDtQnR4+coQCwQCTo0NHu4/KLBMz0VxfTipNKPC4KEL079DAkCzED3HFicoyB0GIxaFQOMiNvktHjnTzv3j/yiM9PaqgKxTHADX5eJMB0oyGQ5sSqVgGFaavEmDijFLACbAIFJOY3WAgJO0zqkpUn1BvTjllqUT5Pv/CdmrgVh2V53PPPi/PwbCzh6tOLK+jdR/sH6JQI4s9rMwj3hfXRiOjw3T0yFHqg8kHfw2tu59JN18pEgSpc88+O/38LV8hhULxxqHE+SbiYx/7WFssGtoUCobT8Rhac0cugiI8rwR5pmpShBhfqvAccmiURZ8AxZNxKuRZLR8t06LFC0XM2bb157Kk7gv6aGd2N41inYirTexh+njeiUoUju6RSFDmmQMShzEoglAff1wYyXMl6pcVpjKT7imnzqcZs1rb+FfcTAqF4g1DifNNwu9df/11kVBgfX19fdpB8o+PSZPV7FQ6QQGuMOOxJAtDCbkOglJeKbmSNBkOhcVooziK5fZRuVHHovvWp7cx4YbktY929wqJukyugVCAGprTdPhQN+3J7qdoPCzVZk9vTvY4h5k0oaxXKmWpbMv8c7CSVCxW2vml1pNCoXjDUOJ8E7Dqv//3T3FFuH6IBZloZFDcjbAzidyfWCwhFnBxriATsZQsoQfDAa4KR2UOCVKsb6oXM+H8gFk1mjV7Bg0MDdLWp7ZxAepQLBkVA+KRSomoVKFoIEzIHHp5/6tEuQpXsBWZew4MDjEnV5iESzICiLAAVWFC3pvdS4vmLbqUFArFMUGJ8wTjmo9cs8bno064tY/kR+nw4SOyuL7klCWyvI778TiTJ84oUzW1so4EwaYcL8upZJ7JtufwUQrz88tMinnJNy/IaWS6tpb27z3ApBulMpNhLBWT1aTeo4NiXOwPOHTg4BEqFopU5lZekiv56whIiYQjNritSOEwgtycW0mhUBwTlDjfIDo7OzPnnXeefNzVZUVpbn13795NO/ftu86tlDtBhrCAg1HH4MAwHe46RJXt2+nMM8+kmTNmSPVZW1tHSa46IQDhEgiKkD8YpF4muZ4j3Irj7txPEtnbfbiXK8heVs1D/BahYevTCeMPhx8Da7i+3n4z9+RqEzfrgRASLl0mzzKFWMWPMBGPclUL1X7RooUb/+TzazpJoVAcE5Q43wD+Yu0X1pxz7rmdi5cs4JlkkRLcYsO6zfHXEPHMsW/ICDKhQFCudzCrrK9toLp0mg4e6pI5ZTQSp7POapOF9krZlX8DASZMEJ6PX9PPzw2EcILJSni5xGJOUbw1EbBWdktCgiBMuCON5PPcqZclHmO4YO7UcXse4t9rdLQoHwf498JzyqWykPRpp52anTtz9k2kUCiOGbrH+TrxZ0ya77joks5zzj2Hwkx0MNKAgAOzDFRzUL2hcoM4ccmT4NY64ASFIGe0tvKcciYTXYF27cpK6FomM48gGqGihOLNlaqIQMYjMy82cLj86e8bELEHLf5gX54iLP6UWOwZYrXcF3CZuI1NHAgW4hKSK8nHhMwKPsgyGg2LWzyq2lNOWZqbO3/OBX/0J5/PkkKhOGYocb4O/OWf//l1F174jvUgzWJxhPbu2c0q9mGZP7o8YwQpOa4hS7TLIDXMIGG0kZk3l1KpNLW0ttCc2bMJLfnLO3bQyPCIkGmQq0G8jldBIvJigGeduAyCuIRYC/HerBTFp9PP1WiJK9MBJlRzMVRg5XxYqs3hobwsxUMzwrI7CNPhf8rFEi1evIBOP3PZjTff/IXNpFAojgtKnL8BnZ/9bNsFF73j7vPOP4+V72GZZfYcPcoECrIkcWKHFRzIDW12MhkXUQc2b35ukxcuWkj1dQ1iFZeuTdOsGUyW4RC9wuR5tLubGhobzLUPzyURrDYwNCDEC8d2WME5flfIkfmQEukYFfKjQrDDw4OU6xlg4i4LyfYe7ROlPcxtOjLRg0ycWJbH6lFzUzMtW7Zs7ec+v1bXjxSKEwAlzl+D1atXZ955+WVbzr/gwkilNErZXbuot6dXvif55fgH0RUS/+OIByYMiXFK6fP7JAgtz1XgzFkzZF+zyK1zhOeeCFhDDvqOHa9w676bhaI0P94v55HD+SEa5koTV0G49kGKZankygwUgg+qyhyTZL4wTENcqaLqLBQKUsFirgkJHaQJM48CjwaiPBY4Y9myjX/xV1/ROAyF4gRBifNX4IYbbsisWLFy04UXXtCCdaJsdpdUmmh94Y+JlhumGWJuSYY48YZFd3hn4m4cu5No6Ye43YaajuX2IvfRAa4I6+pq5Upo16s7pfoMhgISxNYHsuVKE0IQsoVwReQ43Kq7LAL1DUrw2oDMPUckS8i07IWqAIR9ULToZZ6DYl66bNnp2XkL5157zz3350ihUJwQKHH+EuC+/LLL3rmpvb09g8TIvXuy1H2kW0gTlSTI0vKliDa4F8d7GHDIFRC31X5WsKOxqFSm+/YdkBvy1pktcpuO00dUqqhCIyze7Nuzn155+RV5figUkrA1Y1JclJkl3o9yBZrr7ec2vl9IUwgUCZYDQ6KyB4N+SbcEmSODCCJVZl4mNzez4ILPf35tlhQKxQmDEucvAJ6Zl156yV2XX37F0nRNDR3Yv5erxi5uldGSO8KYqCyxVF6FJU3XJk7Kt/l/Alx5hsVpPUB79+5nMuulxoYmWYAvc+UJFd3lyhBCDgw5QJ6Yi4IA4eIuxMkzTLT7UMwHELA2khezY1wGIakSpCljA5fESam+oY6K/DUEup199ttu/OItX9pMCoXihEKJ8xfwsd/93W9cdsXlK1pbW+lw10E6eOAAV38lFmlMpWm6czPb9ODI7Q+ZslPgSrvutfXxeFRa6T279zBBdotIBAV+hGeUPb29YlAci0SZCPu4dX9ViBBuSBB2CqKuD4nDESpRqOx9ErjGn3NLD+/OaByXQD6ZiWJW2tLUxNXmvLVf+etbVQxSKN4EKHGOw1e/+tU13J6vXrBwASveh5k094tII1Wkz5Ciac2tKGTnml6r7j1mDI4o3HhMPBYTZf3A/gN0iCtYxPxCiYfYhCwgtOR4TF9vjnbyPDUUCcrME+040imhnMuFEKJ9ea45zMo6yBk7pFi4xxI9voe79NNPP3Xjulu/pmKQQvEmQYnT4gtf+FMmzeWdp55yGpNVjvbv3cfq9pBUfwKJrDDVJpGpMqvw5puuaeEtxdqnOOLMjvzyBCvpURaNjhw5Ink/ID/MLkcLPMMsmbty+HLmcn1iYhzkahKkDRd3CExYcerj76GNd2QMEBLVHPuduGAq8Oxz8aKFIgbdf/9mFYMUijcJSpyMz3zmjz7Vfuklt5zV1ibt8MGD+yR10lPJAcdTgVxPQcdXXaqMqzZxG16lS/m+eS9KO+aQaNtZSUckBhbdD3cdFqFHVpkqZbn6qbhlmVXC5f3AwS75uFgqymrTwEC/3KGDjEGamJ9C3wfRYil+6dIluZmz517wF39xS5YUCsWbhmlPnH/4h3/YcdFF79hw/nnn8SxzlCvNvZTD/bkVesb2jci252PPNXNNK7HLzFOmn6Kqe/pR9fEgYcT8cvWJPU9Un1DXczyvzOeHCQws60RcgWLmiWf35HolIgPXRSOslOdyxsgDyjvafj+PAXq41Q+zuHTWWWfSqUsW3viXt3x5MykUijcV05o4P/GxT7S1v/OSOy56xzsiIL79+/fLzLFSLsn8UGCJz5tnAjAFBolWZC+pIkSJGSUA4nTcMcJ07IoSvoB/zOK8Iy05gtrQ3aO6xKUQnltANvrRPpln4ipJzIjtPLPAYhDIF/NRZBLlWEyqqUnReW9/Oy2YN2ftzZ//MxWDFIq3ANOWOFfdsCpzxeWX33XxRRe1hFiEOXBgH1dvR2Xp3BnHmV7LDZKslA05eq23z5IpjD7whssh8xxPezeTUJCjaOw++aD6cTgYpmQqKT+kf6BP5pS4DEKKZd8AZpajUslCPDKKuU9+ZpDFIJiAQJm/4PwLaF5m7sY/+KPPqhikULxF8NE0xDWrrslcet4lm7jSzMDg9+DBg0yaPdIqo9B0xrXdpYpZQAcF4lwSbkc4qwQ3gixBqlC/sW40RqJudUG+Yl6qCle+V6kuzodDETECWbJ0iSReinM7zzIx14Tz0Sj/7FDI3LJLLno0zFWp+X3OOrONZs+elQ1G/GoTp1C8hZh2fpwdHR3pS869aNPy5csziK3Yv99UmiAl6bztfibabTEG5o9BaP6gXwQj7Fr2cGs9UijI4yPcNoNMa9M1cn/u8AxzVC5+ZBlJWmvXe114bvrN50K6rtnzjDB5zpo5W8LckImO6nNUjD0qNIoq13HF5AMuShCWsCQ/o2UGtba05iqub/mNN96UJYVC8ZZh2hHnZcvbN11xxbsyjQ0NdIBJs7sbURMFmSFC2fbmmLj1xjwSfpa40MnuztKe7D6eK+aq1zpBrjTRakPs6etLUV1dHbU0N1fPKkuliqkupTkfKztlPloxCrxPqlRHFtlnzZktV0Rwfn/qiadpqDxMvoBfQtv8AR+FuUUfHsxLRMbMmTO50g3exMiSQqF4SzGtZpxf/epXbn/3u969Ys7cuXT40EE6fLhLSNBgjNgqFXMihNPHPXv30MMPP0I/f+Y5OnTokCyt43oHuea4B4epBhyMENGLqhWzSERiQDXH6+B7gNy4A3YuaiUj+aky+vSZJMx4LC5nk5inHuo6LJdDIHE8srmlSTw6o+Eo9jXXfuF/qxikUJwMTBvi/KsvfnHNu979rtWLFy1i1bpbFPTCyIi9MTdzSU9IR+WJKhJL6Pfe+xPas2evLJzX19eJKPPqq6/S7t176GDXISbfw9R99KgkVGLnMhwKyUJ7fWODtO4ITMNc0w/itCtKPuNDV12ql8oz4JNP3DIW5ePUxBUxhCqQNSI0sMY0a/YsauLXra1Lb/y7v/8HFYMUipOEaUGcf/qnn13z7ne/u/P0ZWfQ4ECO9uzbLfNCM2OsmPkjGI0JDiSFO/GjLBb96Ef/wcJRFxNgUqo93I4/vXUb7dyVNTk/MNwYGpTHdjGJwog4EomJUITXa+E5JKpI45NpV5p8vtdY0cn80nXsDNSVEQBy0HER1MgkOTg8LOJUTaqGhaDZNGferGw0XnPtQw89pJdBCsVJwpQnzk9+8vc/9d73vPeWs885Vxbc93HrjZmlj6ynpju2YlQpGfEGfpY//s+76OVXXqG6hnqqqUnLaaSQ5s6dQq4BOYd07MUQSWV5lCtPmHbEEzEhQDwXs1QQLnKCHGnHTVnrOSwZgxCz6uRaMUqW7XHfzlUvlt2LTLyIFq6tq8vVpBNqE6dQnGRMaeK84YYb2leuWPndiy66mFtdl/bv2yuXOI5rTiEdW2k65ixIzIJBVi9uf5Huvec+qkkzWdXXSnv+zLZnuUXfKTNOuQACCTI5wuTYz220sXZz5ZYcs88Yvw5ckDJz5sopJsyGrd/c2CK9vUSSFSWufJF6iV1Q5BhBbcdlECzp8Jog60Q8euMfa2aQQnHSMWX3OK+55prMFZdfdsfFl1wi88WuAwdk7Qglnc/eoDseATpm/gjyQ8X5xFNb+X2AGurrxYnoxRdf5PZ8l+x54jF+qUoDsoaEJXTsggb8QYrw55hz7t27j5588il68YXt4uYOw2KIR4Bv3M2mTAcqpup1XOOyBNIsM4FCaMLPMkJTUqrOYsW/kRQKxUnHlCTOjo6OzLvfdcWm9uXvTOO08VDXfhFxKrgKwgNcs6eJNtvxLnqwT8nEBwciPHZOZi4NFYbpuedfoF07s7J3CQFHDIoDJlcolUyKCh6NR/m5Ea4QAxLEFuT2GqFujz/+hMw+EaMRDIWNHR15Fe6YPZ3Z63Sr4hEqUHPX7pPXh0s8xKdc7nCGFArFSceUI84VK1ZkLrnowk2XX355JsnVILwvu7q6qFgqjXNud+QcUj4ymRfyWTQakzUjZKSjcnyBK8a9e/fKcwMs+CD/HDPHEFeYkRiqyzCFgmEx4YAvJnYx0V6HImEhwueff55e4jkpiBTPA8y1kYEX9AYWr8is1Sy641eC+xHadLzHOhLOMXNHc22kUChOOqYUcXZ0tKcvuOCcO1asfE+mqbmJjh45JBZxaHNNJWdJyys75f8ZAjV7lH5R25tbWugQV5179+yV74P40Dbjwgf7mVhwx4tgyR1XPCI08UtDCcf3UDGGuMLEGef2l16WayCcaUrF6xohCAQ61qrbE8+KK1/HY6HMR7mKhcIOByQIWgMDw0qcCsUEwJS6HFq0qO32lSvf05aZl6G+3qO0d98eiadACy1eRtIOG/J0vP9xbZaQzycEBtLCNRCMgyHU4KQSc8lAkCtAnmMma+KSow6VHJEakgvE/5hKMyBfK4tRiCPL8Ij8BSliLmqukXxVJR8AmYsdiIPXrEjVGubxAhzdQ/y245VXpe0fzg/z7xLNkEKhOOmYMsS5+lP/a92V77uqAw7u+cEBrhb30CALO1gbglou80yrYANyBGnjL7wdIBBakueWxvItJe21CEF+IwShRQ8xgVLQPAVpklhhQguP58AEGW7tMBXGrBOPwTwUQpKZZVak2nT8juxsGlXdVL4VGwYXQxQG/1y83oGDB+mRLY/IqKHEVTOPB84khUJx0jEliHP1Jz+55n3vec/qM888k0qFglk74vbWzwPESsXsRvpcc9Lo2kPHip1rCmdK1emTSrGmpkZU8JkzZ3HrbW7Og0G4rUfkc5Mv5MpcE69XKpZlFglSlIiLoSEhW4nM4NecOaMFlSKVYSJifepca5kkgpPPqRqLgCzl53CVm+vtpU2bHmRx6jk58UQFiqshhUJx8jHpZ5w33PDxNZdfcVnnOeeeI20vfDWPdB+pGmlg79K1fpmyZG5ni27FraraVqGRFSCQY31dA2XmzqGW1hZivhVnJMw5UZ2CJLEgb9aaTIJlnFVzGA6jvSd7d46fizWl0049VZ4zij1OMn6cVXXd8dyYHInBwNURlP1hHi/87KGH6amnnjIVbLlEM2bNzEbjqeWkUChOOiY1cX784x+/7vLLLut8x4UXCgkdOnSQ3w5zdVeu5pxXBSG0xjDLqDoTVaRVrgozrvk+SLWurlYW1886q43JL2xa7qBJqwwEfeRZdEBMggiEyyCo3lJBymOCUiWesnQJtZ11Fo2O5IUMJTLYyyzCb4D9Ta440ZrD6xNrR8VigR577DF69NFHJcKjzKOAxsbGXHO6fvktt2iWkEIxETBpiXPVqlVtF19y8YZL2y8Ve7ejLMIc6jrEJDVqI3uNpZtRqyvWW9O1ZGm8MMlWfrJDaQm1xGIP5pkN9Q10MRPy6aedSq5VwcWsuJphSfI5vn6Ef7Yo7Nyio60vMnGDDD/y0Y9y5TqXuo90y0kmlHmzdG9I3VwGIT8oJKtN+D23bt1GP/3pQ6LIQ1yCsciczOzr1992W5YUCsWEwKQ8ucRV0DsvW77lPStWRuJMcr09R7lFP0BDLAqhCqymUfpstIVnTmzTKcVc2L6WZzJsHkeyU+nYarI2naa6+lo6cviI5AKhZYc4BI9MvAa8M9GeHzncLaTsGXogD6jjAx2oiCnOleSePbvF3NiLvsDPRPWJayLEYEBICgR8tP3F7XTffffTwYMHRNGHQJWZN+emv/nbv99ACoViwmDSESeugt75zuWb3vPe97Ska9LUl+sRoumTOF/cd1uPS5CmW01MM++lTfZVBSEZb7rjDIZty0527ghya2luFZciRPfmcr0yq/RuzEFu3Ue7Je6iOFoQ782mpmZ6/5XvpxtvvIEys+eIWTKSLEG03gI+XhfVJ4hTyJNbe1wn/eT++ymb3S2VJhyaWKBae9s3/88tpFAoJhQmFXHiKuiiiy/cdNVVV2VAUAP9Oeo6eFCISYjOGbsGcnzGc92tLphbIQZft627mUnKM+xPMNZu3l4lvo/qsaWlVVpunFnildCWw7RjYHDQRAnzizQ3NdLZbzubPvqRj9J/+2+/TXNnzxZ3+SNHDpsTSv+YoITqEoo/yBMxv/AG/cn9D9ArO14VZT/EZMqkees/bvi/N5NCoZhwcGiSAFlBZ7W1bfrghz/YtnDBQhoc6GPSPCDzQ3FIt7tFZmhrr3P4PVphzB6lhYco5HfkrBHfhYpesQYbQmxUqa4o+eVzk4UOsQdXPKNcCXax+AQTD4hQfUzYRfh3sqo+b16Glp12Oi2Yv0Bmn729R6nnaI+QLKIzjO8miZuSjAt8ZvfzyNEjdPc999DPn33OtPmocluaN/7Td753NSkUigmJSbPHuWDRgttXrlzRtnD+QsoPDUqlidA0KOEyNyQz05SikcnMz4JRhAkMbS/OFWGSgSVycBguiUB2OI9ERYmWu1w2yZHmJaC5G/9MrCpBMBpm1oNotHDBfIKLPO7Xy7hhD5g5JVprOCqNFkYklgMqerlUrApVoqjzi0MQAnCeOTgwQA899DA9/8Lz8rsF+HutLU3b5je1Xk8KhWLCYlIQ5x/8wR+suer9V3acdvpp3CLnWT0/yJXmEVk7QogZWnCfMB5SIkti0AGigsvRjh075AJncGBQ8oWwU2l2NeuoobFRQs/S6RrCwiZI1vhl2hgL7IA6FakO0bZjuX2UyTAkSniYwkykqCBxdon5J+7ci6yeS2KmKTKlTQdhetZ1eIeTyiJXolsefYy2bdsmz8fv39TclK1rar26c/16dXdXKCYwJjxxfuITN6y54orLO9va2qS6PMQk2HWoS4w7AmIeXJHKEJUdqkDcd0O8ee65Z+npp57mGeMR+TqIC3lAQ0xuWCgHcaYOHqJebrch4syY0SKkCtLzyRqTbfpdO/M0aUFUZPIFAeO80iNXjArcSlk+RtVJZGzhKkjNJGN4TFbRB+FiVrB161Z68sknaWQkL1VyXX19trG5dvn69euzpFAoJjQmtDh0ww03rFm54t2dF130DqkgUWnu37dPbsTFLAMPsg7uIEvsc4LEHn3sMXrwwZ/KjDGZTEnsxHxuscFcL7+6UzwyRwqjdjnepeGhYZl9ItcHCrdrnZNkNjn+NHOckISnghhlqV6+7FYzhADvIgh37OKfxL9vWAxDfELqP/3pz2RXE79vKpXOpZPplV+/7VvbSaFQTHhMWOL8/d+/seOKy991GxbcoTIjynffvr1UyOdfc3PuC5hFdlR1aKkf2fIYbdq0WVrrOXNmU2NjE7+fJeeMjz3xBL3w4nZR4XtZDR9kVRxuRhKuRibCt5nbd5AbnIq8cDURdcaNBMSsAx87RsEXArZ5v2PmxCZ4DXNLvAZOKqM8Qti+/SV6cPOD4hMKh6VoNE5zZs+69uvf/NZmUigUkwITslX/2MdWtV1xxbtuv+SSdia8IIstXXRg334aGcqbFEi5N69USQskGg3CePhFemDTAwQGmzdvPtXWYoG9Xqq+n/2URZjnXxRTDodfA+37ASRTskAznB+S5XbsVCIuo7W5lWelQ9LSU8Vc+hj3Ip+9bbcikpxuupYwaZyvJolbvOxu8ldgggzi3LUrK2IQZq6lUkXONVtaWtau/9o3NBJDoZhEmHDEiaugd7975R0XX3xpOhaNsAh0iA7sP0D5fN6uCLn21tvMIUFeASagARZ/Nj34oKjZp512GhMmzzDRenOV98RTT9GTTz9t/DXFHNgEokEVR8v+0suvyqthxlkvxNkiqjtC18zZpt/krjuvvUAqk717t850btnYxDk+v107ckTdxyrTQSZLnFJmd+82vpz8mIaGxrW3ffNbnaRQKCYVJhRxSsDaFZdvuuSS5RJ7cfTIYZ5p7qfhwSERguTevGwDgzyTDFbDw1xtPv3UNtq541WaO3ee3HenUikRap5k0nz80SeEIMMgTa70yo7Z+xRxif+B5Vs2m+VWOky1NWnqX7IElaAYdaCdBjn6febnybmma8Qi08p7S/YQqVzx+ZTRqM/ONYX8u5k0f0ovv/KyeHWiMG1oqMeCeycpFIpJhwlj8oEF9wsvvHDTu9+1IgPi6+/LySklVnyMOYZjb8gdQ06iaBvywhrRi9u3i7DT3Nwo2UHFUpm2bttKTzz2JM8yh8R9KMTVH1aV5E1MigPyPh5DDnqQiXcnvfTSy5KPHrI5QZXKmFGIU/FSN9yqIbJ8WjFVsNnV9Em1iY+x4N7f30cPcqUJX81iaVQ4v66uduOGf/7OalIoFJMSE4Y4L7zwgk3vfe97M60zW2mI545Qz7F7CfVcjIFtHrlPltKNUYZjjTWwX4mIipp0jSRODg4NyqrP09yeD+dHZNk8HA7KBRDCz8JiqmFIM2Qd2nFOCYHphRdfZBHqgAhNmEsaX0/rrmSdlYzC7tp7d3PGaZbvzYWSOaWM0Air/48++jhte2YbjYwWpHKtra3L1uuCu0IxqTEhWvXONWtuX7lyZVsmk6E8kyBut/tyfWa9R06ByKrZxo5NLoWQDGmNOECOuPFOxBNMoD20e3eWZ4l7pOrETNNnXZI8YccQsKkYcWUkZ5WwjOPH7TtwkF7duUt+LCpYmaZKNLAZFVDFsUYhVjBy3OrvJovu8Oi0yZRPP80V75MYE4zIz0omU9m6VA12NXXBXaGYxDjpxHnzH//xmpUrVq5aynPFPKvbB5g0JeDMU6mN8y95x+ggrUpVIDKmGRVu1ROJuKjUzz77HHUdPiQtMzwuoagDEGPEOg4tN74UICMS+Y3hBi6CBrilHxwcpt179omDO/KCPKck164fGb8Qs+dZ3d20vweIM8iVLYj9mZ8/Sw9veUQEJgxCY9FYNhKLL1dfTYVi8uOktuqrV39yzRXvelfnsjOWSVUG5fnwoUNiHGwvFKuXOyIE2WrRcz/y9iwl22fmDCFJ5KCLq1HA/J3gs983Vm7GkQiVpGSgI/KXyRUkid1O7HXiuRCFjOGwEY88h3iyZC2RvmTc3h2xi/OJeCQ2cUy2L7/0Cj300EM8K+2RytTvC+TC0dDVGzZsyJJCoZj0OGkV58c+9nufuuKyd3Wefc7ZYrCBu3KQJnYn/VXlmqpVItGYraZUmSAtt0xlflyExaDGhkazHsSkG5B9dmMRJ8+zohIgiZOI4cVfGXafcwC7nLgeQsvNrxuNx2QeCtf2aj6Q8KfYFRPZI0zvENOx/poIWtv56i4Rg+CiJC19pUy19TU3/dN3vruNFArFlMBJqThX/c7vdFx+2eXr337e20WtPnrkCB06hNiLESZNx548ulUrNsfau1WvxiW7x8w3KzzH9OJ8Z7S2UktLE42yEOPavHSpXh1zFUTexblEXATkRHOYZ6p4E7EoaFp7WMNBmYcrkrT21oDYLLlXrFnHWLwwngvDjwM8H33wpz+lPVz1olotMfGmkvG1TJobSKFQTBm85cT54d/6cNs7L7/s9ksvuURmhj1Hj0iLPiLtsSv333J6Q2NBalQ1cneqsRdjgWfw2PTJlVA6VUPnnP02acVxSmkvzA1divhtLn5AmnA4yjNRD7ECD3U9lUrK+5amJkL4Gx4zPDJcFZO8n2UmniTVrM+q/JFIWMxENm3eTK+++qqQKk5DY7HI2u//+w87SaFQTCm8pcSJ2It3t192xzsve2caxAQrtq6DXZIV5HhJk5XK2L23tWQDpNb0jf26jtcqo5UvIw89zZVnlNrazqDTTj1FroJwXimVpiRYGqIza0hByQDK9eeE+LDGhIX5AD/23VdcQeedfz4r9cPSvnuRF449D3K8z+0/MO7ow67mz35GL720XX7vPP8lEAwFb934H3d3kkKhmHJ4y0w+EHtx+eXv3IT3qZoacU/v6uqiQVad/X4zWwR8tjoku+YDOOOqPs9Mw/u6uL2LGOQ31aStHnt6c2IZB6IEIcJuDovp4WhYDDwOc4U4ki8IYWI5Hk7tixYupP/1yU/SokULaP++vTTAv5sj5iEmZE3C1ny+6noTSLPIavyWLY/RU089zSJTWZbx+edsu+u+n6iDu0IxRfGWEGd7e3v6ne9cvuWqK6/KIHZ3kCtMpFL25/qENL2oXqrKLaY9f21bbt2JHFN1eumV9nxcvhcUJd2hNM87UUXiYgju7yAzE4oWkNWgI0e7qbe3V56LpEogMzdDv/t7v0vtl7ZLVhAqYfweUN+Ngu+T+acYffA/WKLH1596ais9/tjjckuPHCL+HbKhWOKC7du3j5BCoZiSeEuIc9Wq6+76wNVXt82YMUOEGJgRdx89asLVzA2jLSQdKwC5Y2q6x6OWW71qz7Nwk/WgcUmVYuXmh8tRHTXxvBKPLXA1WRJDjxFW749IpQsjZMwmW1ua6VxW9n/7t3+HmNzFJGTvnj2S/yOnntasA2KPzzEmI7C5C4fC9OKLL9DPHnpYdjUL/PjuI0cpnkzkLrng3Hvue2BzFykUiimJN504O9d8fl1Hx1XXzJs/T1zTDx3uktUj46Fp23PrElwRQ42ysCTaasnzCZmdy4C4qBs1u6p0E1UTLGWOid3KcdUhojHmzZlNzc3NXIXCpNgvG0qIFUY7fv7559GVV15JHVddScvOOEN+P5DmCItGAVu9emee+H3kd+b3uG1/ZccO2rz5Z9Td082V5ijleDSAuSrPZdPc3l/zgY73vLRp80NqTKxQTEG8qSmXf7Z27Zr3Xfm+zsWLForQcujwIWnR4UYkFnF2qR1shvmgkCVMhb1LIcRSkInpxYzSLK4bP04srQvJVtzqQrp8bmekHqGa/CFHMn6GuJ0eHsqL7VttfS01c0Va39CEEyIWqvqkfYca7wWreetG1dNP/jwei9OBQwfprh/fRfv27RfjDpiCFAslCXPDtVIimaC5c2cz6ftv+uu//rv1pFAophTeNOL8409/es2HP/zhztOWncYq8xAdPnRYXM9HeA4oSY9YObJL5ag0MYPE5zDo6GFRp69vgIYHB6nsmj3MRCIpdnENDQ2STikrR6WyUeHR0nNBiNNL8c307tpRmeIMEutH4Yj4YkYiJo0Slz5o3/MjBVlJQo6QsZoLVAnTGBYbQ5GKW6Z4PEa9PTm6976f0I4dr8gtPKzvRkZHKBaNUyxu3iLcxsfiUZ53+pmMBzq//4MfrCWFQjFl8KYQ5yf/5/+87gMf+tCG87HWMzxA3TxXxGwRCZAks8uyVJNuxSjisog+Mkw7Xt1J2exu6unpZTIapeEBEGdZ1ofq6urEZHjWzFkEgakJ9nFMgiBWIU7XWL9h3lkZd3UkqrtRmIQE0fbb63MxBjEDVJ81STajAFl0csYC1mCAHONqMs+/4733/IReevklKlVKPNPsEeUdTkhQ8kHK8URciD0CByb+WXBI6sn1dv7gB/+u5KlQTBGc8Bnnb/3Wb7W9733vu/uS9nZZ8enuPkxHu48a13Oo0vZxXuxFgOeOUL4f2bJF3IRwqgh7N5w7HmBlG/feIFJ8jtkjonQh9qA1D/iDYhkHiD+mY5IoyTVmIOTdtNvoYNc14WqoNHFRJH8AsudJ3lb7a9pzfIwRQjgSErLftPlBeuaZZ6lULnJF3E/9/IYZLCpRkCbeED0M0QnvQaIJJlSel7YvWrAw/exzz91DCoVi0uOEEicW3K98//u3rFixIoJWGFlBcDoqlyrVRXSBTYPELHGU29xND/6Utj69TSrDem7FQXoH+bldXQdF5YbpBhbSc719XJnmhfyE1Ph10RLHojFzpuntd/qcsUV1n696fGQMhv1V5/bqKlPVxMM4uDt2Qwo/Bwo6Hv/wI4/QY48/LrPSPM9ru7vNVkAi7lWYESFLzDlxsx6x71EVJ1MpzGjPX7RoUSYzb96DuqqkUExunDDixGL71Vdfvem9731fC4ikC05HLAahHfZVI3adMQd1/HCuQJ/aupUeemiLzDAbWazBrHPnrl10kKtN3Jx7u0iYZ+JEEg5G2P+Egh20DkhQzJERVPaieslnW26nqjP5flGFtxWlF4Ph2vNMcUQCKWPuiht0FnuefOIpib4AgScTCYkbLki8sCtCEMgSvp+4b8eaEtp6ECmeizNOVKJ4Hn/cVi6OrpiTyXxPyVOhmLw4IcS5or098573v2/TlVdelamtS9Ohg6ZaxExTWuZxlpqeVRza8V5uwX989z1CinPmzZH3r7zMokt5VLLTC3YtCE5FcvroJyG0Ia5CBwb65WPMFyEUwVYOPwduR2aF6Bevjuzep81Gt7FF1T1Qp2oRZ2zjQOqoGl988UX6yf0PiFgVDARp8aJF2XAscnVra2sb/7wWn43+RdWL3yUi1WaYCTQk/qD4XsBGdIBk+S+VFv69r5k1a/adTJ5qaKxQTEIcN3HiKuh9V3Xc1XH11Uubm5voyOEu2r9/ryyY+20mOeDtXXp9M4hp67ZnuEXfKsIPlOkdO3ZQYbggVSfuv4WUkBUUMkKL0XFM+w3BprenR8gpznPO5uYWqqutk6p0/JxSLOigzNufbtYxqz5LhlAdt3ql5M1dYVWHOF8o6Ee7e2SPdM6cWdmWWXOW/8VffHHbo489/vfL29treZRwPn6nRDLJJBmV+WYoZH5nrEKBbD2fTvwlkDDiUZp/UEfrjJlKngrFJMRxE+eqVdf9ywc/9JH2WbNmUk/3Edq3d4+02Fg5qrjV5pzIa5vJCDIFrkZ/+tOfUU9vr5wq7mY1fSQ/Ig7qcBpC9YdFc5AOXiNgzx3NjJLsfLREQ6y8g4xAnFiyx2vh58suJo0jbGfsNwFB+ui1e5qOtbODuh6PJ2jPnr1SaWJkgP8rZrS05Ga1Nq38fOf/ri61P/HkU3efsvQUh8m2HaSYTKZkzgnRymvT8Xvje1DzPUNliEmJRCLNc+COmbNaHnzhhe16ZaRQTCIcF3F+5jOfWfeRD39o1YIF8ymXOyqkiQVzv+diNF4L8o21y6joentztGXLo7LXibA1KOYwIR4aHiTQGshLNHLsZJpXIV/AEWJzbQ4QXgfiUZ4JF8R9xrJlMnccGByozirNzx/z0yS7n2kloWrkBR4LckPl2HXwMP3kJ/dLNDHIv7GpnpYuWXzt5//3X27+xT+DF7dv33zq0lOeYbV/Bf8+kWQiJYFxGB+gSg6GzNWTF+ImH/t9MgetSdek+WvXzJg7+7Hnfv5clhQKxaTAMdvK/cHqT655//veu3rx4sXicLR/71652Za9R7GGM56ajmMVa88mzp4w4mbdZVU8xUQFQsGK0PDIkPxKIK9AyFe1lPNbVyKYF+MfL/4Cc1J/wEe7du+i555/Xn4OFtDxeNcdO8s0M1an6q3ptfxeYqaMDpjkUixQQS3ftHmTRHBghlqTSjJpLrrps5/v3Pir/iz+bePGjaWKe1auN5c9fOSwUeND5srJy1fH7xTg3xVEGrRz23Q6TctOPz192tJTNn3k2o9cRwqFYlLgmCrOj//uqjXve//7O8859xwaRVbQvn2yq+ktlnuDzfFtuve5VHlMIrjtPtjVhURdniXuYrFnkEI8z4wzeXktLfm8KaRDXhFr4igqYvcGbi6M5mVNCcbEHR+4mmL8Gr29PbJ36ZB/zAzEij/VKtjn2Yo4Qmqwl4MN3X1cae7cuVP8OhOJGC1cMH/t2j//q1t+058JZpULFy2+kyvPjlKxmMYOZ5yVdCFPxxBmAEYhqDqDfrlmkkRMntE2tzRTOBjuiEcTtP2l7Q+SQqGY0HjDxPnbv33tde+/6sr1F198kZw4Hjy4nwWhQ6bKpEpVQffcjGxEjyHU6nqQj0WcvCyzv/zyDhFhZGE8lpBKzXMjMllB1k7OI7pxfpxo02FRl88XqKYmRb917bXcAofp6JFuEY/GOyl5V0Te1zxCxlihhitcLOFjprl9+8viooTF+nnz5q39q6+s73y9fzZCngsXfbswWlhaKOSXyg5nMmlnnMa1CdWmHxWnL2C8PoVUQ9Ta0sLknWjHStYzzzyj5KlQTGC8IeL8cEdH25VXXvndy6+4IoJ9noP797OCvk8MgSUqdyw/l6pKEHmfOtZdyHy9UipK5fnCCy/xaxygdG1NtSUHyRg3IptVbpfZze25KT3hfwlhadRaxi2YP5+uvfajQpI48fRWjKo/28I3bv6Kn4NRwVB+mO5n0nyW232cSELUmZeZe+tfr//azfQGgf3M559//nvz5s5zBgf62yMxnmWKM1NAlu6DcidvKmH8LlJ5ItedW/eW1haqS6fb58ydS4899piSp0IxQfG6iRNXQR+6+uq73rViRQtmdfu5Pd+3fy/15QakcqzYuFy/45erG29HkmwuJNn9SbnOsSQI4uDqjMnzBTEG9lsRBWQp5GIrTm8P06hFjjgt9RztkTkpCBpmGhdddBFd+f73M6EOsyp/WMjIU9Y9M2Rj/oEXqsjrs7Iti/TICnrq6a1MmqPSUs+dm9n8N1/7xrV0HHj+hRc2Z+bO7hvoH1iBKjOdrpFLIvN/htkSkLhiX8C41/uNg31jYyOLRun2BfPmZR5+5JE7SaFQTDi8LuIEaV591ZWb3r3yPRnERexn9XwvE+cgzyVhdlEWk+CCXPRgjxFVlKdoo6oUnYjGiMtbE8KiOaqxnTtfYbLrFmHHc3j3Ww9Mn/Xf9IScocEhEXBwQYTXwBwyGU/Shz/8IXr7298uiZmYcZqqzrsWoqr3p2Od5TGDRPX68MOP0COPbJEKFsTdOqMl29Iya/nmzZuP+7Lnxe0vPzo3M+/Ogf7cChjT19bWynUR5ryGOP3GOxRtfCAoS/mueSB2UtvmZxZ01DfW65WRQjHB8BuJE6eUH7z66k0rmTSxf4iVowPcog9x1WcieM1OJNaLug50sQotp4XWLd0TYXzVWaNn6e7IYrrLs8SorOi88MKLUhma5xrlvLqcLnNOR8gSO55DAwNCqI31dUwwtTyLzNCqVf9dFun3sRoOweo1wW5VP03TnuMkFHPHbVufoc0PPki9PN/E/y3JRDJb39C8/JZbbjlhe5VMel2ZGTPv7O7t6RgYGErDAxRRxiJUofIMBmw8h6/6hj8X7Ka2NLe0BEPBa2bNmnXntm3bdFFeoZgg+I3E+dmb/2jTyve8d2lNOkUHD+yX3Ua0w64NSUNFiXv0w1wxgplqWJ1GPpC0ngGjYvvGkZjPywoSoSYg6ZMNDfXivbl7d1aEI7TLcslj15fQ+iM/CFUp3sMBrqmpEcTCM8oEXXnVlbR8+XLqPdpt3eWp6m40fiXJL/uTcXE0ev75F+iBBzaLmQgIG1lB0Vhi+be+9a0snWBs37Ej19jUfOee3bvbR0YLLbiwwiqSY8pfqY6r5iOO95eMK7ueTU1Naa7EOxYuXHjno48+quSpUEwA/Fri/Jt1X739fVddtaKurl4iL0CaQwNDdqPHtuL8VuDZIFpdmG2gVUdrLsbERGMzSrta5I4NP6sXOzhLBJn0cyUpCr1VxI1oEpDbdLTnOKfE41M1SWppaRbjjAvfcQF99KMfFXONPXvN9ZEnQHmDVrTqqDA956KXX36JfvKTB2gPjxuEnP2+XCTqv+AHP9iYpTcJ2Ww2t2fv3r/nP5/a/lz/+bjpr6uvl79gXFsJj52JmrNS7KLi/67GhoY0q/Mdpy9bdiePEJQ8FYqTjF9JnF/8sz9b09HxgdWtM1qp+8gh2rNnj4gyJB6VZlfTU9ErXHHiLhsxuyCiIIQerjYrpYrx4ETrHfC/5pLItYwml0D8HJwrzuSfBds2+FyK7yYr3Jidwj0elWaxXKIQk2wTCyjNXHGef955QppcwkmLnuvpMXue9tTTuzqCxR1IE2/Y0fyJ3dWsWJHIH3Qu+NGP7n1L8oF2795zNxO+03P0aHuMiR+5SNhB9XKUhEgdd8yoxDWu9Dz3TMfj8VVvO/vse+677z490VQoTiJ+KXF++tN/sOZDH/pw54IFC6mnp1tIsy/Xb0UdEtMMQFIoybTfcsmDKhHBatJqmz1Mx+5Niljj89aKyD7PzkBtW13D5Dln9kyq5TYWbkO4wEGAGuapeP1kLEHz5mfo7Le10eWXXUbvfd97aObMmZJjhIud8WOBsTNKRxyLoKAf4FEDFty3v/QSlZiEQUg+f/D6H9917930FiK7e/fm+obGZ3I9vStC/MthVIG4DddL+3SMKGZc683pKObIqXRNhMWlG84777zs3Xff/QwpFIqTAucXv/DJT/yPT1372/99fdvbzqJ+Vqd3795NPSz8eCeTEopmndFLoyV+hYoQJO7MK9Ykw+y4++yNtlkLCsm6UaB68jimlkuKhpADKldUqlhVgss7ZpoHuhAl3MvPC8goYP6CuTRnzhyaNXuW/Fyu3KxZcsmK6D4bfUHyc7AFgKugHn6Nu++9l57etk3s7rCEHvT71v747p900kkChLeZM2dsWnb66Zm3ve1tIhphTIE/Z9lGsH/mAtf8hYVNA+yvctvf+Xu/93trSaFQvOV4DXH+/u/f2PHhD37kjnPPezsNDQ5QdtcuOsqkBLEHGb6lYrnqlI7/wEF0FfNftKnwaOxCyFtmB7yYX7IxwKhIQbBlfj2HiRcRRJ7Nmyv7oD6ZlcJhKMhveE4oGJbXQMQvgtXyowXq68nRCBzhQShIvyxXxvl/unKlg7UjmIjcz0LQo489LhdLWJfi0cHau08iaXrAqhdX2JuWLF2cOefcc6mxvlFu5M2t/5ifU8UG23kjkqHBYa6gD3Ze+9vXKnkqFG8xqq36hz/c0fahD374jksuuTSCpfT9+/bSoa5D2BU35OiSvdwhiazw/psGaUkrWTULNu0yZprig+lzrPs6E+9oUSpVmd8ZC2EhO+/5qGT9/AMQwAZTYxA1bs69ULc8i0R9fX2SQ4SQNBCoeX2qtunVuSCTYyIeo3xhhB56ZAs9+vjjsg0gy+Y+36333Hv/G74KejOAM81MJvNtFteWDvQNLMVeazKVlJ3Osg2d83xCvUretZU0/6XQvnLlSvrXf/3XB0mhULxlqBLnB6/+wJZrrv2tFhhQICd8z+69csoIMsLKkOeejkqo4n0ssbzeuo9bbcElX4ioej4J4pNYC8esBFVsxIVUmFKgulYAN4fu3l06qlqEtA3n86LaI3cIfpuGRAwhy2K769pMIzTqPjHRwK5mmeeYjz/xJG3ZskUc3AMg1oBv4z33PXA9TSBgwX3r1q3fWzB/vjMwONAeRWpmMmH/7Cu2orcFuxf14ZrM+EQ83s6z3sz3vvd9vTJSKN4iVBcsly5dmkGoGDLG4ayOag7VmSFMWdmRS5+iZJmX5D9oEJvXPlak1HTM7iYZUpRpI6pFqUqpOu+U1+EZJqpIv8+b5VWq10Qy75TqVpjQPM/a0WEGCpL0jIe9qyLza5jICyzV43tIpHyM23NUqQG/2NRti8YqE4o0x+Nb//iPnV0HDt70OP/OO17dwX9xmXv+svxlZf6sJUdebv7NX1xQ5GfOnLVq48aNW9etW5cmhULxpqNKnBBbKm5ZThrRBgesyEOO511JVcsjGGuganRse+16NAnBh8yTfDZd0i271dtskBtacMeq62UmBrTicmZpCVUaeHFaslWua9V3m3GOIlecmJxKdS5qCJxkBhqOhoVQXnzhRYkcFjd5qXydrC/gXr1x48Teg/zGN7+5/nB391nPbHsm+9KL2+UKyghmJAQqW1yOSHTmYzKz3FkzZ7YtWbJk6ze+8Y0MKRSKNxVV4kRLjVPGMm7PQUSOIa3q4Y0VYIyCzvPKskw+hciE8PymuhQVw6FqlemtI8lrVOxrismwIUjMPEVwsvfspop0qybGY5qIW3Vu95zkjS5ldh6FNFlIwvd27HiVHn54Cx1kRd7uwGfJV1l+992bszQJ8A//8A/bjnYdWv7ss89ln3vueZ7tDlfNmb2KU2bPbqU608VfPs3NjZkFC+Zvuv322zOkUCjeNFSJs/tIN21//kWpNBPJWDW7fLwZMf4b9VtvyTFRyOMzt7pviBtJTxT2SFPI0FZI5Yr5pt9vzDrRkhrmNOs3XpywtwTu2Bmopyh7K03SpvPHISZMLLfj9fbs2cft+RO0j8UtcWByKOv4Jw9perhtw4Zs/9Gjy1955ZVtz2x9RoxLzG6n/QvIMfuz3l8oRiTzU0N9XWb27JlKngrFm4gqcfYP9Et7e2D/Pv6Pr1bEFSyJk1W8vflaKBwU412IPdJ2V79nSFSqUHfMN/M19+JkKldf9XumYgXw2qhkHeugVH2eS9XYXuO4ZLKCpNKU/dCwZJpjttnVdYgeZ9LMZrMiDDHB5LhOu3qykaYHkOeXvvLVs/bs3n3rsz9/lo7gDl/8AbxMeDzKJnZ6sSD8r7SutjYzZ87srd//f99vI4VCccIxVnF2H82C8OBS1H24m1pbmikSizB5Fm1lJzZIUvjBpd2IPGVxgZfq0DWVkFtdobFZQzaO16uWqiYWRHK6aSpKM9+0jXnVRcl13WpLbtdDBaay9clKDoyCQeRHDh+hJ594SkQV7HaWZXZK1//4vs3baJLjy+vWrT5ypHvt888+L8bRmA37vB0s6zxVtfGzN/5MnummGY1bf/Dv/34dKRSKE4pxFefg8oGBvtzI8Ag99+wLokTDfSgejxsVHZUiGSckuf2ORIRQceHjnWCWvfKx6kxEtmW3FzCObc+9NtteD4kabqtQIxCNm4mSFaCqr2eqK6ziRCMxUZX7e3vpqSefphdZTMmPDHvV6k133b95I00R3PKlL3X29PVeveOVHblsdrcIdBiZyC6sV+27XjyJ+TOGU9WMGS0b7rv/vjWkUChOGKp7nHDdSadqHquvS69CtZjL5QiZOU0NDWJWjPUk15Kda805ytxaY68ShGnczL1q0qkSoc/O34yZsPGgJG8+JyRofgVvrukz36SxZEojBxlDEceaAAcoHouLqcgICyePc6W5detWGmRxSwQUctfec9+m3xiwNtnAgtf2c95+3ve4ou7gYUUaEcpGEBv7M61OpO2WAv4dhkLh9gve8Q66c+PGB0mhUBw3XmPy8dwLL2TPOeesPq7iVhS5Be/N9bHoEqHGxgZzuZO3RuSuZ0bsSLsOByNZSKqeWRoLOcdvLnlQdVZJ0xN45IUcG6Vhl9ftfbaQgLVVk0eBEFzHuBkxYUe40sQMFj9769Zt9NijT1CuL2c0ebey9sf33N9JUxQPPfRQ7uJz335n3kvT5D8H/DvyRhvejqtElvB7/OWCNNHsrmz7ypVX3XnPPT9WZyWF4jjxX9yRHnp4y6OXXnyJEwj62+GzebTnKEXDETEORhWDBEhZXEebyBUN7s7NbicLSWQW0H22JTdi+BiheutJLo21lKaStGKS64wTOdzXZAVVpO70yUwTYwLkHr3wwnZ68MGfUjf/joZ73W//6K57V9MUx2Ymz3dcdPG3S6Xi0pH8yFLc9eMvEsfnrWuZfdoY/1lhj/XZ557LDvcNL//jP/nDST/vVSgmAn6prdwD3Le/993vaisWS0ux19nT3cNVTZiaGptkUb0wyuRZNOqumHnYXKESluJtxVgNWwOBohpyxp1mOmSTK6laebp2YbPqCmQJwAgfphqFqW+YSTPM4tTOV1+VZMqDBw9a8qVtP/zPu1bSNAEyke69977vXXzRxc7Q0FA7bOlgnQc/T/zFhkqzr6+fnnvuuc2HDx+++gudX3hL/EYViumAX2lk/K6V77knGgutGBoeaRnJD0uliRIQbXsoGOTZ5qhZLbLsB1MNzNTKVuxBBQliNf8hu1VTYe9qyNtB9C6MvErJez1vxunNTMUtKWIc3A/sP0BMGpTN7rKkXcn6guELpmOo2b333bf50kuW9w0OD65A/Aby6ZEYOjA4QDt3vHrrdatWXauu8QrFicWvJM577rln5AMdHTfv23cwXSjkpbKE6ccozzPra+spGo+Jr+VooWxEnYAJVDNwbOVIJnvItulm6d1fNQQBvIOgKoE65vbd57Xu/EVR0KMxWXLvPtpN9zFpMknaVSbK+kq0fON//Me0nd3de9+9j77zssvuzPX2r+BKPc1/dLk9e/bd+NFrrplyAplCMRHwK4nzjn/7tzU7Xt3ZMVoq0n6EtHGV1wiFvVik/v4B/rieoOpyO09Fbudxk+6zJh+YXUL59qIg5Ad5mTpE1dmmz14SSQa6Y+J/nXHL3CBVOL/H4jEhzoGBfrr/gU307M9/bl+Hsk4ApHl3lqY5+C+6rosvufhO/hNtC4UjKzs6OjaTQqF4U+D8si9u2bIp8/TTz+06uL+LcsM5euqJp6mvt58WZObQxRddRKl0klKxBC1ZvISC8bDJOe8bMiTIxFliMvW5sHAbWy0CkXotuLe25LqVsesg+01xhLd7mwF/UIyI4zy7g60ct5z0yJZHhbyZpHNULi7f+OP7VPBQKBRvKXy/7IsH9h5aVxo18RIvv7hDDIRBgC9sf4k2/+whCVIbHh6ml3a8TMXRgijutfV14oMpSjvac7/167Snk94FkLe/6ZlzVEPJfNbYY5xrPOZ1qDYLIyNM5o/Qk089NRaR4VauVtJUKBQnA/+lVb/3rv9c1Xu052ZUj1u3PcNCzEFxHhLnd27Hsd6CmN4FC+cLGfb29VEqmaI6Jk6MJ43RcNk4usMA2ZKjlzoJeHNNI/uMucZ7IpGIHDzPRKVZ5FHBE48/SVsefVQs7yA4lUvuTT/88d3fJYVCoTgJeA1xokU/3HXkdma79LMvPk8vvbKDAr5A9WbcE3lg11Zyy9Ta0ioXRbneHCWTCapN18q+JVzbcZpJ1tzYc4anX6wy7RmlzzoemShfv5h2YLUGDk24Cnr00S1yAiqxuVRZ+8P/vFtFD4VCcdLwGuK86v0d68qVUjuLQvT01m32CoWMPydg1W94ce7fu58GBwdpRmurGCDDlg5L2PX19fJQLM/DXUlqTLPJ/hrLuOoG57iVI4fMpUucSRhfwVXQQw89JJZqaOPL5fLaH/7HPZ2kUCgUJxFV4rz3P/+zrTeXu623v5cefmQLCzAVcW0HjMGHvfix5FkcLUob3z80wOTZIq35kSOHZd+yvq5BiA7rSuK16VWcRGNiEAjUZ4Qit2LWl4LBEMW40gwFA/Tss8/RpgcflChc+J275cqtP/rxvRMiYE2hUExvVInzve9595b+gcH0k09vFYOPYChg0ixpnBlxyTWxDTZsDdZthw4dkpv2GTNbZP7YdeCQGE80NzeJAbGkVYpRsc8ut3snl2TTL0nI2KwdxblNj9IrL78ia0cgYptHtPFHP77nelIoFIoJACHOJ7ZsWbN3776OF196iXbt3C1VIyHTp0xjFm/WExPnfFiENyKOCVfrOnSYK8MerjxnUCQUEjKNRELU2NgoRh/G9LhiF9vN6/lsSBveB5g04eID0ty7bx/95P4H6MCB/aLKl4ulbYFI7OrpeBWkUCgmJvwv7noxk4hENz7x5FM819zK7XnQJipS1TTCqzwRkIYK0jPN9b6Oxx453E3d3d3UyjNPrBAd6josd+U40fTOLiUj3ewkVeeaIXt/Dpefw6zY37/5Qcru2iXKPPZBHady7Q//48d6Z61QKCYMfIPdPesSLMYUeGYJ8vMy0SsVGnMnsgmTZpHdL1dAWBnyFtmDAZ8Yb2R376G77/0JHeLXwU35c889S/v2H0D2N9XV1Uor7sUD43oILT3cjlBpIsv9wQd/RjtYya+wqIR9TZgUt86YeXtHx4oMKRQKxQSB/0MfuPqUUCDUjuoPC+bYwwxxuy32b2UToIZZ5fhMIFgheXNOsdiUVExHFuBzuX46fPiQLMWna1Ky9xmJxKmJ23YstZs5p09ac7jLh3gs0Nubowd/9jA9/8ILVBod4fa8KEv0rTOaac6cWenB/nx7bX3D97LZrLbrCoXipMP/z//vXzZ/6OoP7G5saugIccv8wvMvSBxGmMlzvBEHADFIPDjIlKOuOfgxHzjG9d0jT8w562pr5b69p6dXxJ8IV5hYpvf7zVWQw5XqQZ6PPrzlUfr5z39OhZE8/ywTzdHC4lJzU7OY9EYi0ZaDhw627Ny5605SKBSKk4zqrfqmTfeuCocitz/80KN05w9/KBc7NakaMSZ2SxVxX0f2EEw9sNeJeSVOL4vFslScZdeIRhVh2QqNjhYonUrRO5cvp7a2M8RYF1VkiatW3J1HuUUfHhymXbuz9MqOV2Tvs8I/M8DkC4V+xoxW/jhM8WRULpXuuus+yvUPLIe/JCkUCsVJRMD7YPnyd23Y8tNNdMml71gXT8TS//Zv/05Huo/IbBLzTLGOw2wTSje36VDHJVco6FDZKYuph4nSqIg1HNpyeEI+sGmTVKHnnHMu9ff30b59B+loT488ZrBvkIZGhqjIFa7DlWbQL7ng1NrSItVpIBghP4tHLz37PA0O5tcqaSoUiomA11wO/Z/bv73t+t/+b/c0NjddM3PmrMiu3bslqxxKezUDyB3LUZcX8Bund2MT50ikhQlVc1j0CUtVilRGmBC3MCFixah/oE8qTFSeaPuLI0UmzQA1NNXTjFZuz8MxMRiJsWi1c+duevHFl9c+9vhjnaRQKBQTAP/F5OMfv/3trgsufMc9yVjsmqWnnhqBDyd2Kv1iC+fdmftoXJ4ik6djqlLH5AiJLyer8yEmXCzS9/cN0M7sLrGmg+0c4jiKpTJ2NOWxYZ5/Yh7aUF9PiUSMn4sZaJy6Dh2hl7a/vPbe++7rJIVCoZgg+KVGxj/60Y+65i2Yc09jY+OKs992brqLVfJ9e/dIdQkTDqFNa/8mBsXGid229OaUEoSJ78F+DueZw8N5Oniwi/YfOEg5FouioYiQZCoe4/dxqkmnxBEJgWzReJQGhoZoO1ea/75xYycpFArFBMKvdIB/5JFHu84669Q76+rqOs499+1pRFbs27NX5ppCoEHj4u63YWw+L0vI57Nvfm7HC9SX65PqEplEaOVHuD2vramhBfPmUTwWoVDIjAFCPNNERIZkpRdGaffuPWv/6f99p5MUCoVigsH/6765efNDuXPPPfPOZCLV8bazzkrncr20f98+MRvGepFJqjQ36GOhbCTrRogLxn4mhCQIRXi8rBk11NP5559LzU1NUrliXjrI6jrIE27vZZ557tmzb+03v/WPnaRQKBQTEP7f9ID779+cO3vZsjsD4WDHGcuWpUcLRdq7f7+05kGIRgGv0vRXfTaRdAn/TLNMz3NOrjYRGxyNhOisM8+gWbNmyOPwPTxncGCI4tyygzwPHDq89uvf+GYnKRQKxQTFbyRO4P7Nm3NLTzn1Trdc6Tj77eekUWnuZsUd1SJMh32uuTuHSAQXJJDm4OCQVJoQlbCiFOSWftnpp9HiRQvFlxNkyg0/FbkilYV4nmse6e5Z+zdf+0YnKRQKxQTG6yJO4KGHHspl5s27M+h3Os4777x0mMWdXayU4/QSV0YBEYl8lM+PUE9PztywMzmKeTE//9TFi+jUU5ZwlRkQogSpYqMJc00EDHNbv3bd3/5dJykUCsUEx+smTuDJJ59k8pxxZzAQar/gHRe1oL3etXOnxGdEIlFxfM9BDCoWZKYp0RhumZYsXEBnLDuVQgGjtAeYPMUkiT93uWVHe77+b77WSQqFQjEJ8IaIE3jyyW25puaW70UjkRVnn3N2S1Njkyy4Y30IxCmJmI4rlaafq85TTllMSxcvpgS34iROSmauGeAqlR9B+w92rV23/m86SaFQKCYJ3jBxAtu2bRtZ0NDwvYJTWdHWdlbLnLlz6ODBA2LsAQ9NOL7XpVO07LRT6ZSli02l6fMqTex5+ikUjfLju9fe8uWvdJJCoVBMIhwTcQKPMnneddfdf79gwfx5y049ve00JklEXRw5dITmZebS5ZdfRvPnzSOHhSGpMO0MFLPNQChMPX0Da9f++Z93kkKhUEwyHDNxerj//gc2Njc0zVt62tK2s9reRtFwhM6/8EI644xlsiw/OlqU+3S/CEUOhWMRrB+t/ewXOjtJoVAoJiGOmziBhx55eOOsWTNrF8xfeP7bzzuX6urrKOgPUjjKajur5mjfIRbhwqh/aHDtZ/50TScpFArFJMUJIU7gpz/92d0LFy1y6utr2xsbGsWz0+fwXDMclNhf7HJ29/Su/ePPfr6TFAqFYhLjhBEn8MADD2xeuGCh4/f725uam80Op8+YgOzevW/t6j/8dCcpFArFJMcJJU7ggU2bNi9ctBAGc+3NLU1See7ds3ftqt/93U5SKBSKKYATTpzAgw/+dPPiJUucUqnUPlIorP3ABz/YSQqFQqH4zfjiF7/YTgqFQjHF8P8DhDSd2nCvn5kAAAAASUVORK5CYII=";
14579
14728
 
14729
+ // app/renderer/assets/icons/agent-vinyl-beta-tag.svg
14730
+ var agent_vinyl_beta_tag_default = 'data:image/svg+xml,<svg width="113" height="47" viewBox="0 0 113 47" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<path d="M98.7754 41.7588C98.7385 41.7575 98.7016 41.7585 98.665 41.7568C98.6099 41.7543 98.5554 41.7485 98.501 41.7451C98.5914 41.7506 98.6829 41.7554 98.7754 41.7588ZM103.861 39.9443C103.763 40.0203 103.665 40.0938 103.567 40.165C103.473 40.2338 103.378 40.299 103.283 40.3633C103.475 40.2324 103.669 40.0935 103.861 39.9443ZM40.6143 37.6377L40.9277 38.0684C40.8192 37.927 40.7151 37.7837 40.6143 37.6377L40.3232 37.1934C40.4162 37.3439 40.5135 37.4918 40.6143 37.6377ZM48.6426 36.9961C48.6186 36.9853 48.5941 36.976 48.5703 36.9648L48.5332 36.9453C48.5695 36.9626 48.6059 36.9796 48.6426 36.9961ZM55.4688 36.5215L55.4121 36.5449C55.4896 36.5101 55.5673 36.4752 55.6445 36.4385C55.5859 36.4664 55.5275 36.4947 55.4688 36.5215ZM25.4287 31.3164C25.4255 31.3031 25.4219 31.291 25.4121 31.2725C25.3956 31.2413 25.3015 31.0794 24.9619 30.8184L24.9463 30.8066L24.917 30.7832C24.8157 30.7042 24.686 30.6205 24.5234 30.5361L24.2354 32.4893C24.5906 32.475 24.8166 32.4236 24.9512 32.376C25.0789 32.3308 25.1677 32.2759 25.2471 32.209C25.3131 32.1426 25.3396 32.0976 25.3584 32.0508C25.3837 31.9879 25.4404 31.8123 25.4404 31.4482C25.4404 31.3714 25.4323 31.3313 25.4287 31.3164ZM52.4131 23.6328L52.0547 24.0615L52.0439 24.0752L51.9785 24.1797L52.043 24.1494L52.4131 23.6328ZM91.4775 23.1846C92.4222 23.1847 93.0076 24.1177 92.9033 25.0566L92.0869 32.4062C92.0512 32.728 91.9792 33.0456 91.8555 33.3447C90.9206 35.604 89.7418 36.4002 88.4531 36.4004C87.7146 36.4004 87.1065 36.1693 86.5859 35.6797L88.1504 34.0098C88.1523 34.0049 88.1544 34 88.1562 33.9951L86.5625 35.6572C86.4722 35.5705 86.384 35.4766 86.2988 35.374C86.2781 35.3476 86.2584 35.3202 86.2383 35.293L88.3525 33.1797L88.3721 33.1992C88.3974 33.0431 88.4133 32.8841 88.4199 32.7227L85.4531 32.9922C85.4321 32.7626 85.4209 32.5203 85.4209 32.2646C85.4209 32.0501 85.4345 31.8145 85.4629 31.5586L85.4668 31.5215C85.6841 28.5416 86.3592 26.4637 87.3711 25.1494C88.3907 23.8347 89.727 23.1846 91.4775 23.1846ZM102.57 35.1699C101.732 36.1573 101.139 36.4002 100.789 36.4004L100.788 35.999L100.789 35.998V36.4004C100.5 36.4004 100.438 36.3212 100.418 36.2959C100.364 36.2286 100.253 36.0133 100.253 35.4805C100.253 34.5922 100.389 33.0811 100.677 30.9082C100.804 29.9523 101.028 28.3396 101.348 26.0684V26.0664C101.668 23.7568 101.973 21.4144 102.262 19.041C102.31 18.6462 102.119 18.2602 101.776 18.0586C100.99 17.5961 99.864 17.4405 98.5811 17.4404C98.0333 17.4404 97.5072 17.4898 97.0059 17.5918L96.5977 17.6689C95.7786 17.8093 94.9385 17.869 94.1191 17.7637L93.7119 17.6973C92.8572 17.5259 91.9675 17.4405 91.0449 17.4404V13.4404C92.2136 13.4405 93.3676 13.5478 94.498 13.7744C94.8428 13.8435 95.3812 13.84 96.208 13.6719C96.9968 13.5114 97.7921 13.4404 98.5811 13.4404L99.1436 13.4482C100.416 13.486 102.021 13.6776 103.473 14.4277L103.805 14.6113L104.117 14.8105C105.635 15.8615 106.457 17.6743 106.232 19.5244C105.978 21.6179 105.709 23.6882 105.43 25.7344C106.679 25.6665 107.97 26.0619 109.021 27.0039L109.022 27.0049C110.488 28.3189 111.665 29.9421 112.334 31.8867C112.677 32.8851 112.695 33.965 112.388 34.9717C111.324 38.4564 109.675 41.7079 106.976 43.8564L106.907 43.9102L106.837 43.9619L106.826 43.9697C104.799 45.5188 102.42 46.6211 99.752 46.7549L99.2051 46.7686C98.1413 46.7685 97.0811 46.671 96.0498 46.4453C94.1296 46.0251 91.9107 45.9701 90.4512 46.3623C89.4471 46.6321 88.4154 46.7774 87.3672 46.8096L86.917 46.8164C83.4797 46.8164 80.3547 45.7321 77.7617 43.5771C77.6671 43.5793 77.5642 43.5832 77.4551 43.5898C77.2683 43.6012 77.0965 43.6179 76.9482 43.6367C76.9363 43.6474 76.9252 43.6594 76.9131 43.6699C74.4682 45.7955 71.5036 46.8164 68.3047 46.8164C65.5232 46.8164 62.4615 46.1052 60.2148 43.7314C59.0999 44.389 57.9142 44.9525 56.667 45.4268C54.2714 46.3504 51.7751 46.8164 49.209 46.8164C45.0826 46.8163 41.2797 45.5641 38.3467 42.6826C38.3357 42.6807 38.3244 42.6776 38.3125 42.6758C38.2125 42.6602 38.0963 42.6491 37.9717 42.6455C37.8472 42.6419 37.7268 42.646 37.6182 42.6562C37.5653 42.6613 37.5189 42.6675 37.4795 42.6738C37.2697 42.844 37.0567 43.012 36.8369 43.1719C33.3828 45.6839 29.2996 46.8164 24.8721 46.8164C22.9197 46.8164 21.0992 46.6903 19.4834 46.3779C18.511 46.1899 17.4809 45.9091 16.4893 45.4697C14.8222 46.2913 12.9924 46.7197 11.0479 46.7197C8.24213 46.7197 5.2674 45.9852 3.00098 43.7188C0.936589 41.6542 1.43051e-05 39.0211 0 36.248C0 31.5465 2.52314 27.9472 6.09375 25.2373C5.46495 24.8649 4.86417 24.4311 4.30176 23.9268L3.95703 23.6035C1.76692 21.4668 0.480469 18.7192 0.480469 15.5596C0.480651 10.7619 2.72153 6.82466 6.53516 4.00684L6.55273 3.99316L6.82812 3.79199L6.86719 3.76465C10.5986 1.10731 15.1724 5.24521e-06 20.168 0C22.8036 0 25.2975 0.269182 27.6113 0.857422L27.6299 0.860352L28.4375 1.06738C30.3085 1.57664 32.0755 2.27148 33.5879 3.25C34.9018 4.1002 36.0852 5.1057 37.1016 6.27832L37.1289 6.30957L37.1553 6.3418L37.4678 6.71777L37.5312 6.79492L37.5918 6.87402L37.5977 6.88184C39.4723 9.35319 40.4293 12.2242 40.3838 15.3311L40.3828 15.3535V15.375L40.3721 15.793L40.3682 15.8916C40.3432 16.3874 40.2851 16.8727 40.2021 17.3477C43.3558 14.7777 47.1023 13.4404 51.2734 13.4404C53.3206 13.4404 55.3336 13.7342 57.2041 14.4346C57.9674 13.8652 58.8895 13.515 59.8721 13.4521L60.8906 4.7998V4.79785C61.109 2.95194 62.335 1.37474 64.0771 0.710938L64.3535 0.611328C65.7402 0.134266 67.2075 0 68.5449 0C70.3559 3.3617e-05 72.6491 0.370695 74.5312 1.98047C76.566 3.72107 77.1924 6.09412 77.1924 8.12012C77.1923 8.47243 77.1471 8.85523 77.1445 8.87891C77.1276 9.03628 77.1028 9.24013 77.0762 9.46387C77.0204 9.93235 76.9388 10.601 76.8301 11.4668C76.7579 12.0418 76.6722 12.7058 76.5762 13.458C78.4968 13.5884 80.1993 14.51 81.3613 15.9004C84.1412 14.2475 87.3165 13.4405 90.7568 13.4404V17.4404C86.7364 17.4405 83.3527 18.7798 80.6855 21.4814C79.9338 22.243 79.2904 23.0748 78.7539 23.9746C78.2696 24.7871 74.1389 25.4678 73.29 24.8477L73.2188 24.7842C72.7233 24.2302 72.9395 23.136 73.6826 23.1357H76.9072C78.0371 23.1357 78.953 22.2197 78.9531 21.0898V20.2881C78.9531 18.7154 77.6782 17.4404 76.1055 17.4404H75.7158L75.5332 17.4355C73.67 17.3329 72.2627 15.6641 72.5029 13.7881C72.6444 12.6839 72.764 11.744 72.8613 10.9688C72.9694 10.1082 73.0501 9.4485 73.1045 8.99121C73.1316 8.76295 73.1529 8.58223 73.167 8.45117C73.1773 8.35508 73.1924 8.21197 73.1924 8.12012C73.1924 6.88166 72.8232 5.78397 71.9307 5.02051C71.068 4.28267 69.8801 4.00002 68.5449 4C67.3637 4 66.3319 4.13275 65.501 4.44922C65.1528 4.58188 64.9071 4.89757 64.8633 5.26758L63.6914 15.2285L63.6523 15.4609C63.408 16.6048 62.3939 17.4404 61.2031 17.4404H60.1924C59.7866 17.4405 59.4211 17.6859 59.2676 18.0615C59.1451 18.3609 59.045 18.6641 58.9668 18.9707L58.9414 19.0459C58.8032 19.3842 58.3593 19.5492 58.0361 19.3799L57.9688 19.3389L57.8398 19.248L57.5049 19.0244C55.8114 17.945 53.712 17.4404 51.2734 17.4404C47.5501 17.4404 44.3226 18.7791 41.6426 21.4248L41.6387 21.4297C40.7849 22.2835 40.0663 23.1887 39.4844 24.1436L39.4131 24.249C38.6243 25.3181 36.215 25.6225 35.1895 24.8086C34.9112 24.5845 34.6263 24.3732 34.335 24.1748L34.042 23.9805C33.1663 23.4179 33.0511 21.9469 33.7871 21.2109L34.0967 20.8887C35.4962 19.3693 36.2753 17.6293 36.373 15.6904L36.3838 15.2725C36.4161 13.0675 35.7507 11.0627 34.4043 9.29102L34.3975 9.28223L34.3916 9.27441L34.0791 8.89844C33.33 8.03412 32.4396 7.27137 31.415 6.6084C30.1991 5.82167 28.6096 5.21113 26.6914 4.74805L26.6885 4.74609V4.74902L25.9473 4.57227C24.1924 4.18865 22.2642 4 20.168 4C15.7463 4 12.0579 4.97829 9.1875 7.02246L8.91211 7.22363C6.00194 9.37388 4.4806 12.1699 4.48047 15.5596C4.48047 17.5483 5.26237 19.2889 6.75 20.7402C7.89514 21.8573 9.37063 22.5531 11.1191 22.8789C12.129 23.0671 12.8941 24.0546 12.7695 25.0742L12.7285 25.2891C12.6037 25.7704 12.2702 26.1215 11.8066 26.3633C6.82652 28.961 4 32.2178 4 36.248C4.00001 38.0827 4.59714 39.6586 5.8291 40.8906C7.10133 42.1629 8.8991 42.7197 11.0479 42.7197C11.6708 42.7197 12.2721 42.6558 12.8516 42.5322C12.9946 42.8159 13.1715 43.0782 13.377 43.3164C13.1783 43.072 13.0108 42.8071 12.876 42.5273C14.0638 42.2703 15.1588 41.7569 16.1523 40.9912L16.4463 40.7549C16.4575 40.7455 16.4724 40.7513 16.4766 40.7627V40.7881C16.4778 40.7918 16.4801 40.7955 16.4834 40.7979L17.085 41.2334C17.8901 41.8171 18.9693 42.2041 20.2422 42.4502C21.5254 42.6983 23.0736 42.8164 24.8721 42.8164C28.5991 42.8164 31.8223 41.8726 34.4844 39.9365C34.7309 39.7573 34.9662 39.5713 35.1904 39.3789C36.4056 38.3364 39.8003 38.4063 40.8965 39.5732L40.9004 39.5771C42.9803 41.7645 45.7911 42.8163 49.209 42.8164C51.2825 42.8164 53.2914 42.4423 55.2285 41.6953C57.1741 40.9573 58.8738 39.9926 60.3135 38.793L60.3242 38.7832C60.8342 38.346 61.6617 38.6012 61.9414 39.2119C62.2061 39.79 62.5541 40.3319 62.9854 40.835L62.9902 40.8398L62.9951 40.8457C64.2156 42.2288 66.0655 42.8164 68.3047 42.8164C70.6082 42.8164 72.6215 42.0993 74.2881 40.6504L74.2891 40.6494C74.4715 40.4936 74.6428 40.3279 74.8047 40.1543C75.0265 39.9164 75.804 39.7348 76.6758 39.6426C76.6931 40.2543 76.8517 40.8683 77.1719 41.4355L78.2812 40.4316C78.2745 40.3056 78.2628 40.1798 78.2441 40.0547C78.2627 40.1796 78.2755 40.305 78.2822 40.4307L79.1191 39.6738C79.3597 39.7235 79.5414 39.7914 79.6338 39.8838L79.6406 39.8896C81.6261 41.8394 84.0725 42.8164 86.917 42.8164C87.6852 42.8164 88.4187 42.735 89.1162 42.5732L89.4131 42.499C91.6916 41.8868 94.5995 42.0338 96.9043 42.5381C97.6133 42.6932 98.3828 42.7685 99.2051 42.7686C101.02 42.7684 102.782 42.0462 104.474 40.7344L104.484 40.7266C105.574 39.8591 106.49 38.645 107.257 37.125C107.324 37.1284 107.392 37.1328 107.46 37.1328C108.169 37.1328 108.821 36.9531 109.384 36.6436L107.784 35.9756C107.854 35.8089 107.923 35.6394 107.989 35.4668L109.981 36.2393C109.999 36.2249 110.016 36.2099 110.033 36.1953L108.008 35.416C108.204 34.904 108.39 34.367 108.562 33.8047C108.623 33.6031 108.619 33.3868 108.551 33.1875C108.136 31.9795 107.388 30.9117 106.353 29.9834C105.804 29.4923 104.932 29.7417 104.726 30.4482C104.071 32.692 103.337 34.2342 102.57 35.1699ZM70.6162 35.5566L69.9336 35.0908C69.9346 35.0678 69.9361 35.0438 69.9375 35.0186L70.3203 35.3027V33.0098L70.3213 33.0078L70.3203 35.3027L70.6309 35.5332L70.6182 35.5586L70.6162 35.5566L70.5928 35.6016L70.6729 35.5947L70.6182 35.5586L70.6309 35.5332L70.71 35.5928L71.3936 35.54C71.3804 35.5747 71.3663 35.6076 71.3525 35.6396L71.2178 35.6562L70.9922 35.8018L71.1865 35.9463L70.9834 35.8076L70.835 35.7061L69.96 35.8184C69.9544 35.7746 69.9486 35.7282 69.9443 35.6787L70.3203 35.6465V35.6221L70.5928 35.6016L70.6162 35.5566ZM11.4072 34.6094L10.4658 35.498L10.6621 35.6943L10.9424 35.666C10.9307 35.6834 10.919 35.7003 10.9072 35.7168L10.7168 35.749L10.8096 35.8418L10.7021 35.751L10.0879 35.8545L10.0352 35.9043L10.1836 35.8926V35.9053L10.0205 35.918L9.57812 35.9521C9.57064 35.9102 9.56402 35.8627 9.55957 35.8086L10.2051 35.7422L10.4336 35.5254L10.1836 35.3145V35.2158L10.4639 35.4961L11.4092 34.6006C11.4083 34.6035 11.4081 34.6065 11.4072 34.6094ZM8.59082 36.1045C8.58667 36.0797 8.5806 36.0549 8.57715 36.0293L8.57617 36.0166C8.58005 36.0465 8.58599 36.0756 8.59082 36.1045ZM68.9678 35.9463C68.9614 35.8967 68.955 35.846 68.9502 35.7939L68.9482 35.7646C68.9536 35.8269 68.9602 35.8875 68.9678 35.9463ZM9.58105 35.9385L10.0352 35.9043L10.0859 35.8545L9.58105 35.9385ZM10.8076 35.8477C10.8045 35.8514 10.8009 35.8547 10.7979 35.8584L10.1836 35.9053V35.8926L10.8096 35.8447L10.8076 35.8477ZM86.7471 35.8105C87.3282 35.3951 87.7925 34.829 88.084 34.1699L86.7471 35.8105ZM70.8594 35.7031L70.9922 35.8018L71.2168 35.6572L70.8594 35.7031ZM70.3203 35.6465L69.9443 35.6787C69.9435 35.6694 69.9431 35.6599 69.9424 35.6504L70.3203 35.6221V35.6465ZM10.4346 35.5264L10.207 35.7422L10.6377 35.6973L10.4346 35.5264ZM10.1836 35.2158V35.3145L9.70801 34.915C9.7247 34.8754 9.74195 34.8348 9.76172 34.7939L10.1836 35.2158ZM86.2383 35.293C86.2103 35.255 86.1829 35.2164 86.1562 35.1768L88.3525 33.1797L86.2383 35.293ZM107.566 33.6406C107.521 33.7866 107.475 33.9305 107.428 34.0723C107.315 34.4123 107.196 34.7391 107.074 35.0547C107.249 34.5987 107.415 34.1176 107.572 33.6113C107.57 33.621 107.569 33.6311 107.566 33.6406ZM92.3848 34.5801L92.1514 34.9971C92.3102 34.7303 92.4611 34.4411 92.6045 34.1299C92.5329 34.2853 92.4603 34.4357 92.3848 34.5801ZM19.1064 32.9424C19.0364 33.3466 18.9585 33.7359 18.874 34.1104C18.9154 33.927 18.9553 33.7402 18.9932 33.5498L19.1064 32.9424ZM59.5713 33.6562L59.1914 34.0098C59.3197 33.8937 59.4462 33.7763 59.5713 33.6562L59.9414 33.29C59.8196 33.4141 59.6963 33.5362 59.5713 33.6562ZM11.5693 33.9365L10.5186 33.7568C10.5252 33.7499 10.5313 33.7423 10.5381 33.7354L11.5693 33.9365ZM10.9092 33.3818L11.6426 33.5078L10.8906 33.3984C10.8968 33.3929 10.903 33.3874 10.9092 33.3818ZM107.561 33.3867C107.563 33.3927 107.564 33.3992 107.565 33.4053C107.532 33.3141 107.497 33.2235 107.459 33.1338L107.46 33.1328C107.495 33.2164 107.529 33.3015 107.561 33.3867ZM60.6523 32.5225L60.3018 32.9121C60.4204 32.784 60.537 32.6546 60.6523 32.5225L60.9932 32.1201C60.8811 32.2562 60.7676 32.3904 60.6523 32.5225ZM30.4121 32.1152C30.4105 32.1336 30.407 32.1517 30.4053 32.1699C30.4076 32.1452 30.411 32.1206 30.4131 32.0957L30.4121 32.1152ZM12.5186 30.9971L11.8867 31.3926C12.0877 31.2609 12.2988 31.1287 12.5186 30.9971ZM100.825 22.4482C100.673 23.6162 100.517 24.7768 100.357 25.9287C100.197 27.0642 100.061 28.0359 99.9492 28.8438L99.6855 30.7764L99.6846 30.7754C99.8126 29.8153 100.037 28.199 100.356 25.9277C100.516 24.7759 100.673 23.6161 100.825 22.4482L101.27 18.9209C101.126 20.1047 100.977 21.2804 100.825 22.4482ZM49.9287 30.1455C50.1285 30.0576 50.32 29.9632 50.5039 29.8633L50.5049 29.8643L50.2236 30.0098C50.1277 30.0566 50.0286 30.1016 49.9287 30.1455C49.6287 30.2775 49.3116 30.3959 48.9756 30.501L49.3047 30.3916C49.5207 30.3156 49.7287 30.2335 49.9287 30.1455ZM10.8428 28.0498C10.4492 28.2875 10.0755 28.5289 9.72168 28.7744C9.7588 28.7487 9.79545 28.722 9.83301 28.6963C10.1015 28.5128 10.3811 28.3314 10.6719 28.1523C10.7282 28.1177 10.7856 28.0843 10.8428 28.0498ZM10.9551 27.9814C11.0085 27.9496 11.0621 27.9175 11.1162 27.8857L11.5781 27.6221C11.3653 27.7408 11.1576 27.8606 10.9551 27.9814ZM51.7295 24.4521L51.2988 24.9678H51.3164L51.2998 24.9688L50.5557 25.8594C50.5925 25.8599 50.6293 25.8598 50.666 25.8613L51.2764 25.0703L51.3506 24.9688L51.7295 24.4521ZM59.625 24.3926L59.6143 24.8486C59.6069 24.9912 59.5954 25.1321 59.5811 25.2715C59.6105 24.9852 59.625 24.6926 59.625 24.3926ZM49.8828 25.0635C49.8953 25.0949 49.9049 25.1236 49.916 25.1475L50.2969 24.9688H50.1172L49.8828 25.0635ZM49.8477 24.9746C49.8583 25.0064 49.8713 25.0348 49.8818 25.0615L50.1143 24.9688H49.8652L49.8477 24.9746ZM49.8477 24.9746L49.8652 24.9688H49.8457C49.8464 24.9707 49.847 24.9727 49.8477 24.9746ZM51.3008 24.4893L50.1182 24.9678H50.2979L51.3613 24.4697L51.3008 24.4893ZM51.2891 24.4932L49.8672 24.9678H50.1152L51.2891 24.4932ZM52.0518 24.0654L51.9414 24.1973L51.9375 24.2021L51.9502 24.1963L51.9541 24.1914L51.9766 24.1807L52.04 24.0801L52.0479 24.0703L52.042 24.0771L52.0439 24.0752L52.0488 24.0684L52.0479 24.0703L52.0518 24.0654ZM52.04 24.0801L51.9541 24.1914L51.9414 24.1973L52.042 24.0771L52.04 24.0801ZM52.0479 24.0703L52.0439 24.0752L52.0547 24.0615L52.0479 24.0703ZM53.5938 23.5762L53.6426 23.709C53.626 23.6593 53.6078 23.6113 53.5889 23.5645L53.5938 23.5762ZM53.0293 22.7988C53.0452 22.8111 53.0598 22.825 53.0752 22.8379C53.0555 22.8214 53.0361 22.8045 53.0156 22.7891L53.0293 22.7988ZM18.8242 10.3682C21.8599 10.3682 24.1234 10.9962 25.7197 12.1406C27.1965 13.2276 27.8112 14.4703 27.7607 15.9092V15.918L27.7598 15.9268C27.7326 17.4699 27.1738 18.5249 26.1318 19.2461C24.2321 20.5434 22.2784 18.3539 22.6143 16.0781L23.2217 11.9619C23.2981 11.4415 22.9584 10.9505 22.4443 10.8389C21.6344 10.6628 20.7947 10.5762 19.9277 10.5762C18.0322 10.5762 16.3217 11.0348 14.832 11.9795C14.5853 12.1363 14.4194 12.3933 14.3779 12.6826C14.3134 13.1343 14.1851 14.0655 13.9932 15.4727L13.9912 15.4844L13.9902 15.4951C13.9232 16.0854 13.8409 16.7562 13.7451 17.5078L13.7305 17.5332C13.7227 17.5395 13.7128 17.5431 13.7021 17.542C12.6956 17.4301 11.9682 17.1334 11.4502 16.7129C10.9556 16.2813 10.7521 15.8171 10.752 15.2725C10.752 13.9492 11.4425 12.8173 13.1982 11.8828L13.209 11.877C15.0589 10.8625 16.9268 10.3682 18.8242 10.3682ZM91.0449 13.4404V17.4404H90.7568V13.4404H91.0449ZM9.78223 15.6904C9.77749 15.6571 9.77213 15.6236 9.76855 15.5898L9.75586 15.4326C9.7604 15.52 9.77022 15.6058 9.78223 15.6904ZM13.7422 15.1289L12.7627 15.2676L12.7822 15.2705L13.7451 15.1689L13.7422 15.1289ZM19.9805 9.39844C20.0716 9.40342 20.162 9.4108 20.252 9.41699C20.1505 9.41 20.0483 9.40291 19.9453 9.39746L19.9805 9.39844ZM26.6914 4.74805L26.6885 4.74902V4.74609L26.6914 4.74805ZM29.4404 31.4482C29.4404 33.0316 28.9368 34.2266 27.9795 35.1338C27.0125 36.0189 25.7352 36.4961 24.0557 36.4961C22.334 36.496 20.8657 36.1554 19.623 35.5059C19.585 35.486 19.5664 35.4417 19.5781 35.4004C19.7696 34.7239 19.9329 34.0028 20.0693 33.2393L20.1973 32.4609V32.457L21.1172 26.2256C21.1391 26.0775 21.2663 25.9678 21.416 25.9678C24.059 25.9678 26.0079 26.561 27.377 27.6289L27.3848 27.6348C28.8048 28.7208 29.4404 29.9782 29.4404 31.4482ZM52.0742 24.1348L52.6299 23.874C52.7333 24.0885 52.8174 24.4268 52.8174 24.9688C52.8172 25.7402 52.4657 26.6564 51.5625 27.7344L51.5576 27.7402L51.5527 27.7471C50.7791 28.701 49.5413 29.4135 47.708 29.7979C47.1579 29.9133 46.8104 30.46 46.9404 31.0068L47.6123 33.8389C47.7345 34.3545 48.238 34.6854 48.7598 34.5928C52.2805 33.9676 55.1379 32.8497 57.2598 31.1826L57.2617 31.1836C59.4845 29.4624 60.6248 27.172 60.625 24.3926V24.375L60.624 24.3164C60.6085 23.7017 61.0667 23.136 61.6816 23.1357C62.2643 23.1357 62.7169 23.6439 62.6494 24.2227L62.2236 27.876C62.1629 28.3963 62.0048 28.9022 61.7324 29.3496C60.542 31.3042 59.0946 32.9187 57.3916 34.2021C55.3297 35.756 53.2317 36.4961 51.0811 36.4961C49.7125 36.496 48.5981 36.0397 47.6748 35.123C46.8314 34.2258 46.3214 32.7909 46.3213 30.6328C46.3213 28.4642 46.8384 26.6667 47.8281 25.1943L47.8291 25.1934C48.4315 24.3067 49.0404 23.7419 49.6514 23.4229C49.6458 23.5166 49.6426 23.612 49.6426 23.709C49.6426 24.1374 49.7113 24.5634 49.8457 24.9688L49.8672 24.9678L51.3613 24.4697L51.9033 24.2148L52.2754 23.709L52.2803 23.7021L52.3809 23.5645C52.4015 23.5782 52.4232 23.5945 52.4453 23.6143L52.0742 24.1348Z" fill="white"/>%0A<path d="M28.4639 3.52802L38.4639 19.528L43.9639 18.528L58.9639 16.528L60.9639 13.028L70.9639 2.52802L74.9639 13.028L77.4639 16.528H84.4639L101.464 15.528L103.464 19.528L104.464 28.528L110.964 34.528L107.464 40.028L95.4639 44.528L79.9639 42.528L69.4639 43.528L60.9639 40.028L48.9639 41.528L35.9639 40.028L28.4639 43.528L3.96387 40.028L6.46387 24.028V8.02802L28.4639 3.52802Z" fill="white"/>%0A<path d="M68.5449 4C69.8801 4.00002 71.068 4.28267 71.9307 5.02051C72.8232 5.78397 73.1924 6.88166 73.1924 8.12012C73.1924 8.21197 73.1773 8.35508 73.167 8.45117C73.1529 8.58223 73.1316 8.76295 73.1045 8.99121C73.0501 9.4485 72.9694 10.1082 72.8613 10.9688C72.6701 12.4915 72.3932 14.6487 72.0332 17.4404H78.9531V23.1357H71.5674C74.42 25.6981 76.1743 28.5122 76.7109 31.5742C76.8326 27.4637 78.1333 24.0668 80.6855 21.4814C83.3527 18.7798 86.7364 17.4405 90.7568 17.4404H91.0449C92.5836 17.4405 94.0307 17.6768 95.377 18.1562C96.3253 17.6699 97.4028 17.4404 98.5811 17.4404C99.864 17.4405 100.99 17.5961 101.776 18.0586L102.341 18.3906L102.262 19.041C101.973 21.4144 101.668 23.7568 101.348 26.0664V26.0684C101.028 28.3396 100.804 29.9523 100.677 30.9082C100.389 33.0811 100.253 34.5922 100.253 35.4805C100.253 36.0133 100.364 36.2286 100.418 36.2959C100.438 36.3212 100.5 36.4004 100.789 36.4004C101.139 36.4002 101.732 36.1573 102.57 35.1699C103.337 34.2342 104.071 32.692 104.726 30.4482L105.17 28.9238L106.353 29.9834C107.388 30.9117 108.136 31.9795 108.551 33.1875L108.656 33.4941L108.562 33.8047C107.606 36.9332 106.278 39.2985 104.484 40.7266L104.474 40.7344C102.782 42.0462 101.02 42.7684 99.2051 42.7686C96.5868 42.7685 94.507 42.002 93.1943 40.3418C91.4862 41.9793 89.3804 42.8163 86.917 42.8164C84.0725 42.8164 81.6261 41.8394 79.6406 39.8896L79.6338 39.8838C78.1318 38.3818 77.2209 36.5257 76.8691 34.3613C76.7467 37.0673 75.9475 39.2323 74.2881 40.6494L74.2891 40.6504C72.6224 42.0997 70.6085 42.8164 68.3047 42.8164C66.0655 42.8164 64.2156 42.2288 62.9951 40.8457L62.9902 40.8398L62.9854 40.835C62.2087 39.9289 61.7033 38.8962 61.4648 37.7549C61.1003 38.0992 60.7211 38.443 60.3242 38.7832L60.3135 38.793C58.8738 39.9926 57.1741 40.9573 55.2285 41.6953C53.2914 42.4423 51.2825 42.8164 49.209 42.8164C45.7911 42.8163 42.9803 41.7645 40.9004 39.5771L40.8965 39.5732C39.5956 38.1884 38.6956 36.5758 38.1777 34.7559C37.5846 36.8372 36.3539 38.5768 34.4844 39.9365C31.8223 41.8726 28.5991 42.8164 24.8721 42.8164C23.0736 42.8164 21.5254 42.6983 20.2422 42.4502C18.9693 42.2041 17.8901 41.8171 17.085 41.2334L16.4717 40.7891L16.501 40.708C14.9375 42.0385 13.1092 42.7197 11.0479 42.7197C8.8991 42.7197 7.10133 42.1629 5.8291 40.8906C4.59714 39.6586 4.00001 38.0827 4 36.248C4 31.9918 7.15267 28.5983 12.665 25.9326C12.7625 25.1241 12.8794 24.1752 13.0156 23.0859C10.4233 22.9821 8.28857 22.241 6.75 20.7402C5.26237 19.2889 4.48047 17.5483 4.48047 15.5596C4.4806 12.1699 6.00194 9.37388 8.91211 7.22363L9.1875 7.02246C12.0579 4.97829 15.7463 4 20.168 4C22.564 4 24.7404 4.24675 26.6895 4.74902L26.6904 4.74805C28.609 5.21115 30.1989 5.82155 31.415 6.6084C32.4396 7.27137 33.33 8.03412 34.0791 8.89844L34.3916 9.27441L34.3975 9.28223L34.4043 9.29102C35.7507 11.0627 36.4161 13.0675 36.3838 15.2725L36.373 15.6904C36.2753 17.6293 35.4962 19.3693 34.0967 20.8887L33.7871 21.2109C33.1443 21.8538 32.4475 22.382 31.7002 22.7959C32.9574 23.2781 34.1219 23.9487 35.1895 24.8086C36.4235 25.788 37.3287 26.9265 37.8945 28.2119C38.3933 25.685 39.6501 23.4183 41.6387 21.4297L41.6426 21.4248C44.3226 18.7791 47.5501 17.4404 51.2734 17.4404C53.8749 17.4404 56.0905 18.0142 57.8389 19.248H57.8398C58.1875 19.4871 58.5032 19.7453 58.7871 20.0215C58.8462 19.3531 59.0069 18.6988 59.2676 18.0615L59.5215 17.4404H63.4307L64.8633 5.26758L64.9346 4.66504L65.501 4.44922C66.3319 4.13275 67.3637 4 68.5449 4ZM99.2051 41.7676C99.1332 41.7676 99.0619 41.7649 98.9912 41.7637C99.062 41.7648 99.1332 41.7686 99.2051 41.7686C99.2988 41.7685 99.3925 41.7653 99.4863 41.7607C99.3925 41.7653 99.2988 41.7676 99.2051 41.7676ZM98.665 41.7568C98.7016 41.7585 98.7385 41.7575 98.7754 41.7588C98.6829 41.7554 98.5914 41.7506 98.501 41.7451C98.5554 41.7485 98.6099 41.7543 98.665 41.7568ZM98.0947 41.7129C98.1682 41.7205 98.2424 41.7264 98.3174 41.7324C98.2424 41.7265 98.1682 41.7203 98.0947 41.7129ZM103.86 39.9443C103.668 40.0935 103.475 40.2324 103.283 40.3633C103.378 40.299 103.473 40.2338 103.567 40.165C103.665 40.0938 103.763 40.0203 103.861 39.9443C103.953 39.8714 104.042 39.7939 104.132 39.7148C104.042 39.794 103.952 39.8713 103.86 39.9443ZM80.3408 39.1768C80.4526 39.2865 80.5658 39.3932 80.6807 39.4961H80.6816C80.5664 39.3929 80.4529 39.2859 80.3408 39.1758C80.2343 39.0692 80.1304 38.9612 80.0303 38.8506C80.1304 38.9612 80.2343 39.0702 80.3408 39.1768ZM41.625 38.8887C41.7409 39.0106 41.8593 39.1289 41.9805 39.2432L41.9814 39.2422C41.8602 39.1278 41.741 39.0097 41.625 38.8877V38.8887ZM40.6133 37.6377C40.7141 37.7837 40.8192 37.927 40.9277 38.0684L40.6143 37.6377C40.5135 37.4918 40.4162 37.3439 40.3232 37.1934L40.6133 37.6377ZM48.5703 36.9648C48.5941 36.976 48.6186 36.9853 48.6426 36.9961C48.6059 36.9796 48.5695 36.9626 48.5332 36.9453L48.5703 36.9648ZM85.9043 36.4111C85.9719 36.4744 86.0401 36.5355 86.1104 36.5928C86.0401 36.5355 85.9718 36.4745 85.9043 36.4111ZM55.4121 36.5449L55.4688 36.5215C55.5275 36.4947 55.5859 36.4664 55.6445 36.4385C55.5673 36.4752 55.4896 36.5101 55.4121 36.5449ZM20.1973 32.458V32.46C20.0352 33.544 19.8225 34.5497 19.5576 35.4717L19.623 35.5059C20.8657 36.1554 22.334 36.496 24.0557 36.4961C25.7352 36.4961 27.0125 36.0189 27.9795 35.1338C28.9368 34.2266 29.4404 33.0316 29.4404 31.4482C29.4404 29.9782 28.8048 28.7208 27.3848 27.6348L27.377 27.6289C26.0079 26.561 24.059 25.9678 21.416 25.9678H21.1553L20.1973 32.458ZM50.9854 23.0889C49.9257 23.0889 48.8689 23.6635 47.8291 25.1943L47.8281 25.1934C46.8381 26.6659 46.3213 28.4638 46.3213 30.6328C46.3214 32.7909 46.8314 34.2258 47.6748 35.123C48.5981 36.0397 49.7125 36.496 51.0811 36.4961C53.2317 36.4961 55.3297 35.756 57.3916 34.2021C59.29 32.7715 60.8707 30.9301 62.1318 28.6641L62.7764 23.1357H60.4922C60.572 23.5318 60.6175 23.9449 60.625 24.375V24.3926C60.6248 27.1723 59.485 29.4624 57.2617 31.1836L57.2607 31.1826C55.1388 32.8499 52.2808 33.9675 48.7598 34.5928L47.8301 34.7578L47.6123 33.8389L46.9404 31.0068L46.7031 30.0088L47.708 29.7979C49.5413 29.4135 50.7791 28.701 51.5527 27.7471L51.5576 27.7402L51.5625 27.7344C52.4657 26.6564 52.8172 25.7402 52.8174 24.9688C52.8174 23.9909 52.5521 23.6721 52.3711 23.5576L52.3447 23.541L52.3203 23.5234C51.913 23.2293 51.4771 23.0889 50.9854 23.0889ZM70.4922 29.6309C70.1122 32.8902 69.9287 34.7529 69.9287 35.2881C69.9287 35.9325 70.0383 36.2437 70.1172 36.3662C70.1472 36.4128 70.1659 36.4222 70.1709 36.4248C70.1789 36.429 70.2191 36.4482 70.3203 36.4482C70.6301 36.4482 70.9048 36.3317 71.1895 35.9482C71.4576 35.5555 71.6729 34.8156 71.6729 33.5596C71.6728 32.2761 71.2961 30.9685 70.4922 29.6309ZM55.7041 36.4102C55.7988 36.3644 55.8929 36.3162 55.9873 36.2676C55.8929 36.3162 55.7988 36.3644 55.7041 36.4102ZM91.4775 23.1846C89.727 23.1846 88.3907 23.8347 87.3711 25.1494C86.3592 26.4637 85.6841 28.5416 85.4668 31.5215L85.4629 31.5586C85.4345 31.8145 85.4209 32.0501 85.4209 32.2646C85.421 33.6713 85.7488 34.6734 86.2988 35.374C86.88 36.0743 87.5747 36.4004 88.4531 36.4004C89.8247 36.4002 91.0723 35.4985 92.0332 32.8906L93.083 23.4355C92.5194 23.2661 91.985 23.1847 91.4775 23.1846ZM85.5244 36.0078C85.6347 36.141 85.7502 36.2639 85.8691 36.3779C85.8022 36.3137 85.7361 36.2471 85.6719 36.1768C85.6223 36.1225 85.5733 36.0667 85.5254 36.0088L85.5244 36.0078ZM11.7607 32.6914C11.2054 33.0968 10.7607 33.4878 10.4189 33.8623C9.76859 34.5749 9.55176 35.1571 9.55176 35.624C9.55176 36.0597 9.65641 36.2005 9.6875 36.2334C9.70897 36.256 9.81054 36.3515 10.1836 36.3516C10.1839 36.3516 10.3933 36.3449 10.8076 35.8477L10.8115 35.8438C11.1088 35.4905 11.3844 34.886 11.5693 33.9365L11.6426 33.5078L11.7607 32.6914ZM8.57715 36.0293C8.5806 36.0549 8.58667 36.0797 8.59082 36.1045C8.58599 36.0756 8.58005 36.0465 8.57617 36.0166L8.57715 36.0293ZM56.8828 35.7598C56.7059 35.8693 56.5287 35.974 56.3506 36.0732C56.5287 35.974 56.7059 35.8694 56.8828 35.7598ZM68.9502 35.7939C68.955 35.846 68.9614 35.8967 68.9678 35.9463C68.9602 35.8875 68.9536 35.8269 68.9482 35.7646L68.9502 35.7939ZM106.861 35.5908C106.927 35.4331 106.991 35.2717 107.055 35.1074C106.991 35.2717 106.927 35.4331 106.861 35.5908ZM107.604 33.5117C107.439 34.0549 107.261 34.5688 107.074 35.0547C107.196 34.7391 107.315 34.4123 107.428 34.0723C107.488 33.8893 107.547 33.7027 107.605 33.5127C107.562 33.3849 107.513 33.2576 107.46 33.1328H107.459C107.512 33.2576 107.561 33.3839 107.604 33.5117ZM92.6045 34.1299C92.4611 34.4411 92.3102 34.7303 92.1514 34.9971L92.3848 34.5801C92.4603 34.4357 92.5329 34.2853 92.6045 34.1299ZM18.9932 33.5498C18.9553 33.7402 18.9154 33.927 18.874 34.1104C18.9585 33.7359 19.0364 33.3466 19.1064 32.9424L18.9932 33.5498ZM59.5713 33.6553C59.4462 33.7753 59.3197 33.8937 59.1914 34.0098L59.5713 33.6562C59.6963 33.5362 59.8196 33.4141 59.9414 33.29L59.5713 33.6553ZM84.4248 32.5547C84.4302 32.7346 84.4414 32.91 84.457 33.0811C84.4416 32.91 84.4312 32.7346 84.4258 32.5547H84.4248ZM60.6523 32.5215C60.537 32.6536 60.4204 32.784 60.3018 32.9121L60.6523 32.5225C60.7676 32.3904 60.8811 32.2562 60.9932 32.1201L60.6523 32.5215ZM30.4053 32.1699C30.407 32.1517 30.4105 32.1336 30.4121 32.1152L30.4131 32.0957C30.411 32.1206 30.4076 32.1452 30.4053 32.1699ZM12.5176 30.9971C12.2978 31.1287 12.0877 31.2609 11.8867 31.3926L12.5186 30.9971C12.6945 30.8916 12.8768 30.7855 13.0645 30.6797C12.8763 30.7858 12.6939 30.8914 12.5176 30.9971ZM45.3467 31.4688C45.3471 31.4753 45.3482 31.4818 45.3486 31.4883C45.3477 31.4733 45.3466 31.4584 45.3457 31.4434L45.3467 31.4688ZM100.824 22.4482C100.672 23.6161 100.516 24.7759 100.356 25.9277C100.036 28.1997 99.8126 29.8164 99.6846 30.7764H99.6855C99.8135 29.8165 100.037 28.2004 100.357 25.9287C100.517 24.7768 100.673 23.6162 100.825 22.4482C100.977 21.2804 101.126 20.1047 101.27 18.9209L100.824 22.4482ZM50.5049 29.8633C50.3208 29.9633 50.1288 30.0575 49.9287 30.1455C49.7287 30.2335 49.5207 30.3156 49.3047 30.3916C49.0887 30.4676 48.8648 30.5376 48.6328 30.6016H48.6338C49.0978 30.4735 49.5297 30.3215 49.9297 30.1455C50.1294 30.0576 50.3212 29.9641 50.5049 29.8643V29.8633ZM10.6719 28.1523C10.3811 28.3314 10.1015 28.5128 9.83301 28.6963C9.79545 28.722 9.7588 28.7487 9.72168 28.7744C10.0755 28.5289 10.4492 28.2875 10.8428 28.0498C10.7856 28.0843 10.7282 28.1177 10.6719 28.1523ZM11.1162 27.8857C11.0621 27.9175 11.0085 27.9496 10.9551 27.9814C11.1576 27.8606 11.3653 27.7408 11.5781 27.6221L11.1162 27.8857ZM59.625 24.3916C59.625 24.6917 59.6105 24.9852 59.5811 25.2715C59.5954 25.1321 59.6069 24.9912 59.6143 24.8486L59.625 24.3926V24.3916ZM53.5889 23.5645C53.6079 23.6115 53.6259 23.66 53.6426 23.71V23.709C53.6123 23.6182 53.5772 23.5325 53.5391 23.4512C53.5563 23.488 53.5732 23.5257 53.5889 23.5645ZM53.0752 22.8379C53.0598 22.825 53.0452 22.8111 53.0293 22.7988L53.0156 22.7891C53.0361 22.8045 53.0555 22.8214 53.0752 22.8379ZM18.8242 10.3682C16.9268 10.3682 15.0589 10.8625 13.209 11.877L13.1982 11.8828C11.4425 12.8173 10.752 13.9492 10.752 15.2725C10.7521 15.8171 10.9556 16.2813 11.4502 16.7129C11.9682 17.1334 12.6956 17.4301 13.7021 17.542L13.7402 17.5459C13.8381 16.7788 13.922 16.0954 13.9902 15.4951L13.9912 15.4844L13.9932 15.4727C14.1851 14.0655 14.3134 13.1343 14.3779 12.6826L14.4434 12.2266L14.832 11.9795C16.3217 11.0348 18.0322 10.5762 19.9277 10.5762C20.7947 10.5762 21.6344 10.6628 22.4443 10.8389L23.3574 11.0371L23.2217 11.9619L21.9736 20.4141C23.6765 20.395 25.0446 19.9885 26.1318 19.2461C27.1738 18.5249 27.7326 17.4699 27.7598 15.9268L27.7607 15.918V15.9092C27.8112 14.4702 27.1968 13.2286 25.7197 12.1416V12.1406C24.1233 10.996 21.8601 10.3682 18.8242 10.3682ZM9.76855 15.5898C9.77213 15.6236 9.77749 15.6571 9.78223 15.6904C9.77022 15.6058 9.7604 15.52 9.75586 15.4326L9.76855 15.5898ZM20.252 9.41699C20.162 9.4108 20.0716 9.40342 19.9805 9.39844L19.9453 9.39746C20.0483 9.40291 20.1505 9.41 20.252 9.41699Z" fill="%236D7FF5"/>%0A</svg>%0A';
14731
+
14580
14732
  // agent-gui/agentGuiNode/AgentGUIVinylPlayer.tsx
14581
14733
  import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
14582
14734
  function AgentGUIVinylPlayer({
@@ -14584,7 +14736,16 @@ function AgentGUIVinylPlayer({
14584
14736
  isPlaying
14585
14737
  }) {
14586
14738
  const selectedAgentCover = selectedAgent?.iconUrl ?? null;
14739
+ const showBetaBadge = isBetaAgentProvider(selectedAgent?.provider);
14587
14740
  return /* @__PURE__ */ jsxs9("div", { className: "agent-gui-vinyl-player", "aria-hidden": "true", children: [
14741
+ showBetaBadge ? /* @__PURE__ */ jsx16(
14742
+ "img",
14743
+ {
14744
+ className: "agent-gui-vinyl-player__beta",
14745
+ src: agent_vinyl_beta_tag_default,
14746
+ alt: ""
14747
+ }
14748
+ ) : null,
14588
14749
  /* @__PURE__ */ jsx16(
14589
14750
  "img",
14590
14751
  {
@@ -15186,10 +15347,10 @@ import { Button as Button2 } from "@tutti-os/ui-system";
15186
15347
  // app/renderer/components/icons/CastIcon.tsx
15187
15348
  import {
15188
15349
  forwardRef as forwardRef2,
15189
- useCallback as useCallback27,
15350
+ useCallback as useCallback28,
15190
15351
  useEffect as useEffect17,
15191
15352
  useImperativeHandle,
15192
- useRef as useRef19
15353
+ useRef as useRef20
15193
15354
  } from "react";
15194
15355
  import {
15195
15356
  motion as motion2,
@@ -15220,14 +15381,14 @@ var CastIcon = forwardRef2(
15220
15381
  }, ref) => {
15221
15382
  const controls = useAnimation();
15222
15383
  const reduceMotion = useReducedMotion();
15223
- const isControlledRef = useRef19(false);
15224
- const startAnimation = useCallback27(() => {
15384
+ const isControlledRef = useRef20(false);
15385
+ const startAnimation = useCallback28(() => {
15225
15386
  if (reduceMotion) {
15226
15387
  return;
15227
15388
  }
15228
15389
  void controls.start("animate");
15229
15390
  }, [controls, reduceMotion]);
15230
- const stopAnimation = useCallback27(() => {
15391
+ const stopAnimation = useCallback28(() => {
15231
15392
  void controls.start("normal");
15232
15393
  }, [controls]);
15233
15394
  useImperativeHandle(ref, () => {
@@ -15244,7 +15405,7 @@ var CastIcon = forwardRef2(
15244
15405
  }
15245
15406
  stopAnimation();
15246
15407
  }, [active, startAnimation, stopAnimation]);
15247
- const handleMouseEnter = useCallback27(
15408
+ const handleMouseEnter = useCallback28(
15248
15409
  (event) => {
15249
15410
  if (isControlledRef.current) {
15250
15411
  onMouseEnter?.(event);
@@ -15254,7 +15415,7 @@ var CastIcon = forwardRef2(
15254
15415
  },
15255
15416
  [onMouseEnter, startAnimation]
15256
15417
  );
15257
- const handleMouseLeave = useCallback27(
15418
+ const handleMouseLeave = useCallback28(
15258
15419
  (event) => {
15259
15420
  if (isControlledRef.current) {
15260
15421
  onMouseLeave?.(event);
@@ -15540,7 +15701,7 @@ function AgentSessionChrome({
15540
15701
  }
15541
15702
 
15542
15703
  // agent-gui/agentGuiNode/AgentComposer.tsx
15543
- import { useEffect as useEffect28, useRef as useRef30, useState as useState20 } from "react";
15704
+ import { useEffect as useEffect28, useRef as useRef31, useState as useState20 } from "react";
15544
15705
  import { repairMentionPaletteHighlight } from "@tutti-os/ui-rich-text/at-panel";
15545
15706
 
15546
15707
  // agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
@@ -15670,8 +15831,8 @@ function AgentSlashStatusPanel({
15670
15831
  // agent-gui/agentGuiNode/composer/useComposerDraftAttachments.ts
15671
15832
  import { flushSync as flushSync3 } from "react-dom";
15672
15833
  import {
15673
- useCallback as useCallback28,
15674
- useRef as useRef20
15834
+ useCallback as useCallback29,
15835
+ useRef as useRef21
15675
15836
  } from "react";
15676
15837
 
15677
15838
  // agent-gui/agentGuiNode/composer/composerDraftUtils.ts
@@ -15733,9 +15894,9 @@ function agentComposerDevConsoleDiagnosticSinkEnabled(runtime) {
15733
15894
 
15734
15895
  // agent-gui/agentGuiNode/composer/useComposerDraftAttachments.ts
15735
15896
  function useStableEventCallback2(callback) {
15736
- const callbackRef = useRef20(callback);
15897
+ const callbackRef = useRef21(callback);
15737
15898
  callbackRef.current = callback;
15738
- return useCallback28((...args) => callbackRef.current(...args), []);
15899
+ return useCallback29((...args) => callbackRef.current(...args), []);
15739
15900
  }
15740
15901
  function useComposerDraftAttachments({
15741
15902
  workspaceId,
@@ -15789,7 +15950,7 @@ function useComposerDraftAttachments({
15789
15950
  return next;
15790
15951
  }
15791
15952
  );
15792
- const openReferencesForEntityRef = useRef20(null);
15953
+ const openReferencesForEntityRef = useRef21(null);
15793
15954
  const handleDraftChange = useStableEventCallback2(
15794
15955
  (nextDraft) => {
15795
15956
  if (isGoalModeActive) {
@@ -15824,7 +15985,7 @@ function useComposerDraftAttachments({
15824
15985
  );
15825
15986
  }
15826
15987
  );
15827
- const clearGoalModeBadge = useCallback28(() => {
15988
+ const clearGoalModeBadge = useCallback29(() => {
15828
15989
  if (!isGoalModeActive) {
15829
15990
  return;
15830
15991
  }
@@ -15842,7 +16003,7 @@ function useComposerDraftAttachments({
15842
16003
  isGoalModeActive,
15843
16004
  publishScopedDraft
15844
16005
  ]);
15845
- const addDraftImages = useCallback28(
16006
+ const addDraftImages = useCallback29(
15846
16007
  (images) => {
15847
16008
  if (images.length === 0) {
15848
16009
  return;
@@ -15986,7 +16147,7 @@ function useComposerDraftAttachments({
15986
16147
  workspaceId
15987
16148
  ]
15988
16149
  );
15989
- const removeDraftImage = useCallback28(
16150
+ const removeDraftImage = useCallback29(
15990
16151
  (id) => {
15991
16152
  const nextDraftImages = draftImagesRef.current.filter(
15992
16153
  (image) => image.id !== id
@@ -16004,7 +16165,7 @@ function useComposerDraftAttachments({
16004
16165
  },
16005
16166
  [draftScopeKey, publishScopedDraft]
16006
16167
  );
16007
- const removeDraftFile = useCallback28(
16168
+ const removeDraftFile = useCallback29(
16008
16169
  (id) => {
16009
16170
  const nextDraftFiles = draftFilesRef.current.filter(
16010
16171
  (file) => file.id !== id
@@ -16022,7 +16183,7 @@ function useComposerDraftAttachments({
16022
16183
  },
16023
16184
  [draftScopeKey, publishScopedDraft]
16024
16185
  );
16025
- const removeDraftLargeText = useCallback28(
16186
+ const removeDraftLargeText = useCallback29(
16026
16187
  (id) => {
16027
16188
  const nextDraftLargeTexts = draftLargeTextsRef.current.filter(
16028
16189
  (item) => item.id !== id
@@ -16040,7 +16201,7 @@ function useComposerDraftAttachments({
16040
16201
  },
16041
16202
  [draftScopeKey, publishScopedDraft]
16042
16203
  );
16043
- const expandDraftLargeTextToPrompt = useCallback28(
16204
+ const expandDraftLargeTextToPrompt = useCallback29(
16044
16205
  (id) => {
16045
16206
  const item = draftLargeTextsRef.current.find((entry) => entry.id === id);
16046
16207
  if (!item || !item.text.trim()) {
@@ -16070,7 +16231,7 @@ ${item.text}` : item.text;
16070
16231
  },
16071
16232
  [draftScopeKey, publishScopedDraft]
16072
16233
  );
16073
- const handlePastedLargeText = useCallback28(
16234
+ const handlePastedLargeText = useCallback29(
16074
16235
  (text) => {
16075
16236
  const normalizedText = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
16076
16237
  if (!normalizedText.trim()) {
@@ -16152,7 +16313,7 @@ ${item.text}` : item.text;
16152
16313
  workspaceId
16153
16314
  ]
16154
16315
  );
16155
- const applyReferencePickResult = useCallback28(
16316
+ const applyReferencePickResult = useCallback29(
16156
16317
  async (result) => {
16157
16318
  if (result.files.length > 0) {
16158
16319
  const uploadPromptContent = promptFileUploadSupported ? agentActivityRuntime?.uploadPromptContent : void 0;
@@ -16201,13 +16362,13 @@ ${item.text}` : item.text;
16201
16362
  },
16202
16363
  [agentActivityRuntime, promptFileUploadSupported, workspaceId]
16203
16364
  );
16204
- const handleWorkspaceReferencePicker = useCallback28(async () => {
16365
+ const handleWorkspaceReferencePicker = useCallback29(async () => {
16205
16366
  if (!onRequestWorkspaceReferences) {
16206
16367
  return;
16207
16368
  }
16208
16369
  await applyReferencePickResult(await onRequestWorkspaceReferences());
16209
16370
  }, [applyReferencePickResult, onRequestWorkspaceReferences]);
16210
- const applyDroppedFileReferences = useCallback28(
16371
+ const applyDroppedFileReferences = useCallback29(
16211
16372
  async (files) => {
16212
16373
  if (!promptFilesSupported || !resolveDroppedFileReferences || files.length === 0) {
16213
16374
  return;
@@ -16224,7 +16385,7 @@ ${item.text}` : item.text;
16224
16385
  resolveDroppedFileReferences
16225
16386
  ]
16226
16387
  );
16227
- const handleOpenReferencesForEntity = useCallback28(
16388
+ const handleOpenReferencesForEntity = useCallback29(
16228
16389
  (entity) => {
16229
16390
  if (!onRequestWorkspaceReferences) {
16230
16391
  return;
@@ -16244,7 +16405,7 @@ ${item.text}` : item.text;
16244
16405
  );
16245
16406
  openReferencesForEntityRef.current = handleOpenReferencesForEntity;
16246
16407
  openReferencesForEntityRef.current = handleOpenReferencesForEntity;
16247
- const handleLinkClick = useCallback28(
16408
+ const handleLinkClick = useCallback29(
16248
16409
  (href) => {
16249
16410
  const item = parseMentionItemFromHref({ name: "", href });
16250
16411
  if (item?.kind === "workspace-reference") {
@@ -16796,7 +16957,7 @@ function useComposerPaletteCatalog({
16796
16957
 
16797
16958
  // agent-gui/agentGuiNode/composer/useMentionPaletteFrame.ts
16798
16959
  import {
16799
- useCallback as useCallback30,
16960
+ useCallback as useCallback31,
16800
16961
  useLayoutEffect as useLayoutEffect3,
16801
16962
  useMemo as useMemo22,
16802
16963
  useState as useState11
@@ -16804,9 +16965,9 @@ import {
16804
16965
 
16805
16966
  // agent-gui/agentGuiNode/composer/AgentComposerChrome.tsx
16806
16967
  import {
16807
- useCallback as useCallback29,
16968
+ useCallback as useCallback30,
16808
16969
  useEffect as useEffect18,
16809
- useRef as useRef21,
16970
+ useRef as useRef22,
16810
16971
  useState as useState10
16811
16972
  } from "react";
16812
16973
  import {
@@ -16817,7 +16978,7 @@ import {
16817
16978
  } from "@tutti-os/ui-system";
16818
16979
 
16819
16980
  // app/renderer/assets/icons/handoff-lined.svg
16820
- var handoff_lined_default = "./handoff-lined-4WQUBVG3.svg";
16981
+ var handoff_lined_default = 'data:image/svg+xml,<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<g clip-path="url(%23clip0_3861_2885)">%0A<rect width="24" height="24" fill="black" fill-opacity="0.01"/>%0A<path d="M12.541 2.64224C13.5268 2.57725 14.7105 3.26414 14.9658 4.31119C14.9807 4.37244 14.971 4.38297 14.999 4.45279C15.0889 4.49497 15.8572 4.41273 16.1084 4.44888C16.6718 4.53003 17.3283 4.81738 17.6679 5.29068C18.3576 6.25256 18.1372 7.15346 17.9668 8.23795C17.891 8.71986 17.8512 9.18553 17.7841 9.66177C18.6508 9.38411 19.6929 9.3859 20.3828 10.0436C20.9482 10.5828 21.022 10.9891 20.9707 11.7506C20.9128 12.6101 20.7133 13.4205 20.5381 14.2594C20.4156 14.8393 20.3126 15.4234 20.1748 15.9997C19.4485 18.9205 17.1783 21.1354 14.1855 21.6169C13.2872 21.7614 12.2326 21.7234 11.3154 21.8883C11.0306 21.9395 10.5122 21.8928 10.2041 21.8737C8.39117 21.7381 6.83082 21.0208 5.55368 19.7018C4.56317 18.6788 3.76665 16.85 3.4736 15.4499C3.27634 14.5072 3.21936 13.2571 3.05173 12.2594C2.92224 11.4892 2.63431 9.90484 2.66306 9.19595C2.69683 8.52466 2.99466 7.89414 3.49118 7.44107C4.00634 6.96741 4.73785 6.86941 5.40915 6.8981C5.26761 6.12888 5.17335 6.00537 5.47849 5.24673C6.26 3.30387 9.35257 3.09898 10.1269 5.15591C10.4457 3.7735 10.9671 2.83356 12.4736 2.6481C12.496 2.64536 12.5185 2.64365 12.541 2.64224ZM7.65329 5.28287C7.34224 5.39341 7.04943 5.51492 6.89841 5.83658C6.87441 5.88847 6.85129 5.94173 6.83005 5.99478C6.84839 6.41774 7.06208 7.04203 7.15817 7.46646C7.52295 9.07758 8.00711 10.6594 8.13474 12.3151C8.16969 12.7687 8.10092 12.9325 7.81833 13.2829C7.39918 13.433 7.31867 13.3947 6.87106 13.3239C6.79013 13.194 6.70881 13.0713 6.65622 12.9128C6.49424 12.424 6.54192 11.9679 6.41599 11.4645C6.21294 10.6528 6.08263 9.60287 5.76266 8.84439C5.65375 8.5874 4.91332 8.33972 4.70407 8.52701C4.33418 8.74784 4.174 9.07895 4.23239 9.50357C4.37588 10.5311 4.54178 11.5642 4.69919 12.5905C4.84794 13.6103 4.89935 14.7715 5.16403 15.7653C5.32709 16.3774 5.8209 17.4421 6.16403 17.9606C6.94094 19.1217 8.14863 19.9258 9.5195 20.195C11.0801 20.5085 12.8188 20.2648 14.1318 19.3473C15.1047 18.6673 15.3727 18.2725 15.9267 17.2819C16.8241 15.5121 16.3967 13.5316 16.2441 11.6442C16.2247 11.4043 16.1772 10.8032 15.955 10.6823C15.5703 10.5916 15.1103 11.0915 14.9013 11.3747C14.8058 12.1456 14.8548 12.899 14.8808 13.6725C14.9036 14.3491 14.979 14.9579 14.2168 15.2184C13.0143 14.9531 13.3798 14.1651 13.2724 13.2438C13.0766 11.5645 13.1952 7.84899 12.2187 6.50552C12.0063 6.39593 11.8598 6.35441 11.6279 6.29556C11.2456 6.3937 11.0664 6.49764 10.8252 6.83755C10.826 7.52781 11.0772 8.09418 11.1601 8.75552C11.296 9.96436 11.4554 11.2031 11.4472 12.4196C11.4402 13.4156 9.94736 13.3695 9.90329 12.5114C9.80551 10.594 9.27439 8.78583 8.98825 6.8981C8.84693 5.96551 8.82536 5.2274 7.65329 5.28287ZM18.79 11.0602C18.3666 11.1286 18.1324 11.2288 17.8457 11.5719C17.8416 12.006 17.944 12.8819 18 13.3678C18.1526 14.6926 18.0601 16.0194 17.6699 17.2985C17.5713 17.6217 17.2346 18.1239 17.0879 18.4733C17.1733 18.3779 17.2854 18.259 17.3603 18.1588C17.7942 17.613 18.0218 17.3011 18.2988 16.6364C18.4293 16.3174 18.5396 15.9898 18.6289 15.6569C18.7615 15.1552 18.8619 14.597 18.9638 14.0895C19.1437 13.1941 19.3738 12.2827 19.416 11.3708C19.4287 11.0806 18.9619 11.0667 18.79 11.0602ZM15.6006 5.99088C15.3568 6.09677 14.9873 6.2966 14.9345 6.55826C14.7769 7.34556 14.5456 8.7319 14.5664 9.49088C14.8154 9.39809 15.0902 9.28813 15.3457 9.22525C15.6499 9.18296 15.9353 9.14924 16.2431 9.14322C16.291 8.79009 16.3293 8.44362 16.3818 8.09048C16.4534 7.6096 16.6054 6.9758 16.5908 6.49869C16.3227 6.07678 16.0915 5.97202 15.6006 5.99088ZM21.0615 7.0065C21.6953 7.12329 21.9585 7.85598 21.4785 8.29068C21.118 8.617 20.8665 8.63861 20.4746 8.63638C19.7722 8.50674 19.6929 8.11655 19.7959 7.48795C20.2895 7.07061 20.4128 7.02325 21.0498 7.00845C21.0537 7.00789 21.0576 7.00707 21.0615 7.0065ZM19.5127 4.57584C20.3899 4.65155 20.4491 5.15673 20.2412 5.88541C20.007 6.11731 19.757 6.3455 19.4375 6.44205C19.0358 6.39425 18.9416 6.32032 18.6582 6.04849C18.5562 5.25112 18.7461 4.8368 19.5127 4.57584ZM12.4502 4.19107C12.2196 4.29653 12.0348 4.53157 11.8662 4.72232C12.5314 4.92175 12.7055 4.93493 13.2549 5.37369L13.498 5.56998C13.512 5.35527 13.5375 5.09491 13.542 4.88443C13.3625 4.57804 13.2165 4.3764 12.8994 4.18619C12.7541 4.18732 12.5938 4.18576 12.4502 4.19107Z" fill="black"/>%0A</g>%0A<defs>%0A<clipPath id="clip0_3861_2885">%0A<rect width="24" height="24" fill="white"/>%0A</clipPath>%0A</defs>%0A</svg>%0A';
16821
16982
 
16822
16983
  // agent-gui/agentGuiNode/composer/AgentComposerChrome.tsx
16823
16984
  import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
@@ -16854,32 +17015,32 @@ function AgentUsageChip({
16854
17015
  }) {
16855
17016
  "use memo";
16856
17017
  const [usagePopoverOpen, setUsagePopoverOpen] = useState10(false);
16857
- const usagePopoverHoverTimerRef = useRef21(null);
16858
- const usagePopoverContentRef = useRef21(null);
17018
+ const usagePopoverHoverTimerRef = useRef22(null);
17019
+ const usagePopoverContentRef = useRef22(null);
16859
17020
  const clampedPercent = Math.max(0, Math.min(100, percentUsed));
16860
17021
  const chipLabel = labels.usageChipLabel({ percent: clampedPercent });
16861
17022
  const showTokens = usedTokens !== null && totalTokens !== null;
16862
17023
  const usageLevel = agentUsageChipLevel(clampedPercent);
16863
17024
  const ringColor = agentUsageRingColor(usageLevel);
16864
- const usagePopoverCloseTimerRef = useRef21(null);
16865
- const clearUsagePopoverHoverTimer = useCallback29(() => {
17025
+ const usagePopoverCloseTimerRef = useRef22(null);
17026
+ const clearUsagePopoverHoverTimer = useCallback30(() => {
16866
17027
  if (usagePopoverHoverTimerRef.current) {
16867
17028
  clearTimeout(usagePopoverHoverTimerRef.current);
16868
17029
  usagePopoverHoverTimerRef.current = null;
16869
17030
  }
16870
17031
  }, []);
16871
- const clearUsagePopoverCloseTimer = useCallback29(() => {
17032
+ const clearUsagePopoverCloseTimer = useCallback30(() => {
16872
17033
  if (usagePopoverCloseTimerRef.current) {
16873
17034
  clearTimeout(usagePopoverCloseTimerRef.current);
16874
17035
  usagePopoverCloseTimerRef.current = null;
16875
17036
  }
16876
17037
  }, []);
16877
- const openUsagePopover = useCallback29(() => {
17038
+ const openUsagePopover = useCallback30(() => {
16878
17039
  clearUsagePopoverHoverTimer();
16879
17040
  clearUsagePopoverCloseTimer();
16880
17041
  setUsagePopoverOpen(true);
16881
17042
  }, [clearUsagePopoverCloseTimer, clearUsagePopoverHoverTimer]);
16882
- const openUsagePopoverAfterHoverDelay = useCallback29(() => {
17043
+ const openUsagePopoverAfterHoverDelay = useCallback30(() => {
16883
17044
  clearUsagePopoverHoverTimer();
16884
17045
  clearUsagePopoverCloseTimer();
16885
17046
  usagePopoverHoverTimerRef.current = setTimeout(() => {
@@ -16887,12 +17048,12 @@ function AgentUsageChip({
16887
17048
  setUsagePopoverOpen(true);
16888
17049
  }, USAGE_POPOVER_HOVER_DELAY_MS);
16889
17050
  }, [clearUsagePopoverCloseTimer, clearUsagePopoverHoverTimer]);
16890
- const closeUsagePopover = useCallback29(() => {
17051
+ const closeUsagePopover = useCallback30(() => {
16891
17052
  clearUsagePopoverHoverTimer();
16892
17053
  clearUsagePopoverCloseTimer();
16893
17054
  setUsagePopoverOpen(false);
16894
17055
  }, [clearUsagePopoverCloseTimer, clearUsagePopoverHoverTimer]);
16895
- const scheduleUsagePopoverClose = useCallback29(() => {
17056
+ const scheduleUsagePopoverClose = useCallback30(() => {
16896
17057
  clearUsagePopoverHoverTimer();
16897
17058
  clearUsagePopoverCloseTimer();
16898
17059
  usagePopoverCloseTimerRef.current = setTimeout(() => {
@@ -16900,7 +17061,7 @@ function AgentUsageChip({
16900
17061
  setUsagePopoverOpen(false);
16901
17062
  }, 140);
16902
17063
  }, [clearUsagePopoverCloseTimer, clearUsagePopoverHoverTimer]);
16903
- const handleUsagePopoverOpenChange = useCallback29(
17064
+ const handleUsagePopoverOpenChange = useCallback30(
16904
17065
  (open) => {
16905
17066
  if (open) {
16906
17067
  openUsagePopover();
@@ -16910,7 +17071,7 @@ function AgentUsageChip({
16910
17071
  },
16911
17072
  [closeUsagePopover, openUsagePopover]
16912
17073
  );
16913
- const handleUsageTriggerBlur = useCallback29(
17074
+ const handleUsageTriggerBlur = useCallback30(
16914
17075
  (event) => {
16915
17076
  const nextFocusTarget = event.relatedTarget;
16916
17077
  if (nextFocusTarget instanceof Node && usagePopoverContentRef.current?.contains(nextFocusTarget)) {
@@ -17203,7 +17364,7 @@ function AgentComposerHandoffIcon({
17203
17364
  // agent-gui/agentGuiNode/composer/useMentionPaletteFrame.ts
17204
17365
  function useMentionPaletteFrame(inputShellRef, showFileMentionPalette) {
17205
17366
  const [mentionPaletteFrame, setMentionPaletteFrame] = useState11(null);
17206
- const syncMentionPaletteFrame = useCallback30(() => {
17367
+ const syncMentionPaletteFrame = useCallback31(() => {
17207
17368
  const anchor = inputShellRef.current;
17208
17369
  if (!anchor || typeof window === "undefined") {
17209
17370
  setMentionPaletteFrame(null);
@@ -17285,14 +17446,14 @@ function useMentionPaletteFrame(inputShellRef, showFileMentionPalette) {
17285
17446
 
17286
17447
  // agent-gui/agentGuiNode/composer/useComposerSlashActions.ts
17287
17448
  import {
17288
- useCallback as useCallback31,
17449
+ useCallback as useCallback32,
17289
17450
  useMemo as useMemo23,
17290
- useRef as useRef22
17451
+ useRef as useRef23
17291
17452
  } from "react";
17292
17453
  function useStableEventCallback3(callback) {
17293
- const callbackRef = useRef22(callback);
17454
+ const callbackRef = useRef23(callback);
17294
17455
  callbackRef.current = callback;
17295
- return useCallback31((...args) => callbackRef.current(...args), []);
17456
+ return useCallback32((...args) => callbackRef.current(...args), []);
17296
17457
  }
17297
17458
  function useComposerSlashActions(input) {
17298
17459
  const {
@@ -17338,13 +17499,13 @@ function useComposerSlashActions(input) {
17338
17499
  setIsSlashStatusPanelOpen,
17339
17500
  setHighlightedIndex
17340
17501
  } = input;
17341
- const clearSlashCommandDraft = useCallback31(() => {
17502
+ const clearSlashCommandDraft = useCallback32(() => {
17342
17503
  draftPromptRef.current = "";
17343
17504
  setPaletteDraftPrompt("");
17344
17505
  setIsPaletteOpen(false);
17345
17506
  onDraftContentChange(emptyAgentComposerDraft());
17346
17507
  }, [onDraftContentChange]);
17347
- const closeSlashStatusPanel = useCallback31(() => {
17508
+ const closeSlashStatusPanel = useCallback32(() => {
17348
17509
  setIsSlashStatusPanelOpen(false);
17349
17510
  }, []);
17350
17511
  const settingsControlsDisabled = isSendingTurn || isSubmittingPrompt || showStopButton;
@@ -17355,15 +17516,15 @@ function useComposerSlashActions(input) {
17355
17516
  showStopButton
17356
17517
  });
17357
17518
  const composerControlsHardDisabled = isSelectedProjectMissing || isSubmittingPrompt || disabled && !isSendingTurn && !showStopButton;
17358
- const closeReviewPicker = useCallback31(() => {
17519
+ const closeReviewPicker = useCallback32(() => {
17359
17520
  setIsReviewPickerOpen(false);
17360
17521
  }, []);
17361
- const closeSlashFloatingMenu = useCallback31(() => {
17522
+ const closeSlashFloatingMenu = useCallback32(() => {
17362
17523
  setIsSlashStatusPanelOpen(false);
17363
17524
  setIsReviewPickerOpen(false);
17364
17525
  setIsPaletteOpen(false);
17365
17526
  }, []);
17366
- const submitReviewCommand = useCallback31(
17527
+ const submitReviewCommand = useCallback32(
17367
17528
  (command) => {
17368
17529
  setIsReviewPickerOpen(false);
17369
17530
  clearSlashCommandDraft();
@@ -17383,7 +17544,7 @@ function useComposerSlashActions(input) {
17383
17544
  }
17384
17545
  return null;
17385
17546
  }, [onRequestGitBranches, selectedProjectPath, slashStatusAgentSessionId]);
17386
- const executeSlashCommandEffect = useCallback31(
17547
+ const executeSlashCommandEffect = useCallback32(
17387
17548
  (effect) => {
17388
17549
  if (effect.kind === "submitPrompt") {
17389
17550
  clearSlashCommandDraft();
@@ -17493,7 +17654,7 @@ function useComposerSlashActions(input) {
17493
17654
  settingsControlsDisabled
17494
17655
  ]
17495
17656
  );
17496
- const selectCommand = useCallback31(
17657
+ const selectCommand = useCallback32(
17497
17658
  (command) => {
17498
17659
  const selectionEffect = resolveSlashCommandSelectionEffect({
17499
17660
  provider,
@@ -17507,7 +17668,7 @@ function useComposerSlashActions(input) {
17507
17668
  },
17508
17669
  [executeSlashCommandEffect, provider, slashCommandPolicy]
17509
17670
  );
17510
- const selectCapability = useCallback31(
17671
+ const selectCapability = useCallback32(
17511
17672
  (capability) => {
17512
17673
  const selectionEffect = resolveSlashCommandSelectionEffect({
17513
17674
  provider,
@@ -17521,14 +17682,14 @@ function useComposerSlashActions(input) {
17521
17682
  },
17522
17683
  [executeSlashCommandEffect, provider, slashCommandPolicy]
17523
17684
  );
17524
- const selectCapabilitySettings = useCallback31(
17685
+ const selectCapabilitySettings = useCallback32(
17525
17686
  (capability) => {
17526
17687
  onCapabilitySettingsRequest?.(capability.capability);
17527
17688
  setIsPaletteOpen(false);
17528
17689
  },
17529
17690
  [onCapabilitySettingsRequest]
17530
17691
  );
17531
- const selectSkill = useCallback31(
17692
+ const selectSkill = useCallback32(
17532
17693
  (skill) => {
17533
17694
  const trigger = skillTriggerForPrefix(skill, skillQueryMatch?.prefix);
17534
17695
  const replacedDraft = trigger && skillQueryMatch && promptBeforeSelection !== "" ? editorHandleRef.current?.replaceTextBeforeSelection(
@@ -17625,7 +17786,7 @@ function useComposerSlashActions(input) {
17625
17786
  }
17626
17787
  }
17627
17788
  );
17628
- const submit = useCallback31(
17789
+ const submit = useCallback32(
17629
17790
  (event) => {
17630
17791
  event.preventDefault();
17631
17792
  submitCurrentPrompt();
@@ -17709,9 +17870,9 @@ function useComposerSlashActions(input) {
17709
17870
 
17710
17871
  // agent-gui/agentGuiNode/composer/useComposerMentionActions.ts
17711
17872
  import {
17712
- useCallback as useCallback32,
17873
+ useCallback as useCallback33,
17713
17874
  useEffect as useEffect19,
17714
- useRef as useRef23
17875
+ useRef as useRef24
17715
17876
  } from "react";
17716
17877
  import {
17717
17878
  createMentionPaletteStateAdapter,
@@ -17731,9 +17892,9 @@ function isAgentRichTextImeComposing(event) {
17731
17892
 
17732
17893
  // agent-gui/agentGuiNode/composer/useComposerMentionActions.ts
17733
17894
  function useStableEventCallback4(callback) {
17734
- const callbackRef = useRef23(callback);
17895
+ const callbackRef = useRef24(callback);
17735
17896
  callbackRef.current = callback;
17736
- return useCallback32((...args) => callbackRef.current(...args), []);
17897
+ return useCallback33((...args) => callbackRef.current(...args), []);
17737
17898
  }
17738
17899
  function useComposerMentionActions(input) {
17739
17900
  const {
@@ -17769,7 +17930,7 @@ function useComposerMentionActions(input) {
17769
17930
  paletteContentRef,
17770
17931
  shouldCenterMentionHighlight
17771
17932
  } = input;
17772
- const selectFileMention = useCallback32(
17933
+ const selectFileMention = useCallback33(
17773
17934
  (entry) => {
17774
17935
  if (entry.kind === "file" && entry.mentionNavigation === "agent-generated-folder-back" && mentionControllerRef.current?.selectAgentGeneratedMentionItem(entry)) {
17775
17936
  return;
@@ -17784,7 +17945,7 @@ function useComposerMentionActions(input) {
17784
17945
  },
17785
17946
  [fileMentionSuggestion]
17786
17947
  );
17787
- const closeFileMentionPalette = useCallback32(() => {
17948
+ const closeFileMentionPalette = useCallback33(() => {
17788
17949
  if (fileMentionSuggestion) {
17789
17950
  exitAgentFileMentionSuggestion(fileMentionSuggestion.editor);
17790
17951
  }
@@ -17792,7 +17953,7 @@ function useComposerMentionActions(input) {
17792
17953
  setFileMentionSuggestion(null);
17793
17954
  setIsPaletteOpen(false);
17794
17955
  }, [fileMentionSuggestion]);
17795
- const clearActiveFileMentionTrigger = useCallback32(() => {
17956
+ const clearActiveFileMentionTrigger = useCallback33(() => {
17796
17957
  if (!fileMentionSuggestion) {
17797
17958
  return;
17798
17959
  }
@@ -17810,14 +17971,14 @@ function useComposerMentionActions(input) {
17810
17971
  updateAgentComposerDraft(draftContent, { prompt: nextDraft })
17811
17972
  );
17812
17973
  }, [draftContent, fileMentionSuggestion, onDraftContentChange]);
17813
- const closeOpenPalette = useCallback32(() => {
17974
+ const closeOpenPalette = useCallback33(() => {
17814
17975
  if (showFileMentionPalette) {
17815
17976
  closeFileMentionPalette();
17816
17977
  return;
17817
17978
  }
17818
17979
  setIsPaletteOpen(false);
17819
17980
  }, [closeFileMentionPalette, showFileMentionPalette]);
17820
- const createFileMentionPaletteAdapter = useCallback32(
17981
+ const createFileMentionPaletteAdapter = useCallback33(
17821
17982
  (highlightedKey = mentionHighlightedKey) => createMentionPaletteStateAdapter({
17822
17983
  state: mentionSearchState,
17823
17984
  highlightedKey,
@@ -17846,23 +18007,23 @@ function useComposerMentionActions(input) {
17846
18007
  }),
17847
18008
  [mentionHighlightedKey, mentionSearchState, selectFileMention]
17848
18009
  );
17849
- const moveFileMentionSelection = useCallback32(
18010
+ const moveFileMentionSelection = useCallback33(
17850
18011
  (delta) => {
17851
18012
  createFileMentionPaletteAdapter().moveSelection(delta);
17852
18013
  },
17853
18014
  [createFileMentionPaletteAdapter]
17854
18015
  );
17855
- const handleMentionHighlightChange = useCallback32((key) => {
18016
+ const handleMentionHighlightChange = useCallback33((key) => {
17856
18017
  autoMentionHighlightedKeyRef.current = null;
17857
18018
  setMentionHighlightedKey(key);
17858
18019
  }, []);
17859
- const cycleFileMentionFilter = useCallback32(
18020
+ const cycleFileMentionFilter = useCallback33(
17860
18021
  (delta = 1) => {
17861
18022
  createFileMentionPaletteAdapter().cycleCategory(delta);
17862
18023
  },
17863
18024
  [createFileMentionPaletteAdapter]
17864
18025
  );
17865
- const navigateFileMentionHierarchy = useCallback32(
18026
+ const navigateFileMentionHierarchy = useCallback33(
17866
18027
  (delta) => {
17867
18028
  if (delta === -1) {
17868
18029
  return mentionControllerRef.current?.exitAgentGeneratedBrowse() ?? false;
@@ -17878,13 +18039,13 @@ function useComposerMentionActions(input) {
17878
18039
  },
17879
18040
  [createFileMentionPaletteAdapter]
17880
18041
  );
17881
- const navigateIntoFileMentionItem = useCallback32(
18042
+ const navigateIntoFileMentionItem = useCallback33(
17882
18043
  (item) => {
17883
18044
  mentionControllerRef.current?.selectAgentGeneratedMentionItem(item);
17884
18045
  },
17885
18046
  []
17886
18047
  );
17887
- const handleFileMentionKeyDown = useCallback32(
18048
+ const handleFileMentionKeyDown = useCallback33(
17888
18049
  (event) => {
17889
18050
  if (!showFileMentionPalette) {
17890
18051
  return false;
@@ -17911,7 +18072,7 @@ function useComposerMentionActions(input) {
17911
18072
  showFileMentionPalette
17912
18073
  ]
17913
18074
  );
17914
- const handlePlanModeToggleKeyDown = useCallback32(
18075
+ const handlePlanModeToggleKeyDown = useCallback33(
17915
18076
  (event) => {
17916
18077
  if (event.key !== "Tab" || !event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) {
17917
18078
  return false;
@@ -17966,7 +18127,7 @@ function useComposerMentionActions(input) {
17966
18127
  });
17967
18128
  };
17968
18129
  }, [handlePaletteKeyDown, showPalette, workspaceReferencePickerOpen]);
17969
- const handleFileMentionSuggestionChange = useCallback32(
18130
+ const handleFileMentionSuggestionChange = useCallback33(
17970
18131
  (state) => {
17971
18132
  setFileMentionSuggestion(state);
17972
18133
  if (!state) {
@@ -18111,7 +18272,7 @@ function useComposerProviderTargets(input) {
18111
18272
  }
18112
18273
 
18113
18274
  // agent-gui/agentGuiNode/composer/useComposerFocusAndDrop.ts
18114
- import { useCallback as useCallback33, useEffect as useEffect21 } from "react";
18275
+ import { useCallback as useCallback34, useEffect as useEffect21 } from "react";
18115
18276
 
18116
18277
  // agent-gui/agentGuiNode/composer/useComposerFileDrop.ts
18117
18278
  import { useEffect as useEffect20, useState as useState12 } from "react";
@@ -18492,13 +18653,13 @@ function useComposerFocusAndDrop(input) {
18492
18653
  applyDroppedFileReferences,
18493
18654
  onPromptImagesUnsupported
18494
18655
  } = input;
18495
- const handleMentionPaletteButton = useCallback33(() => {
18656
+ const handleMentionPaletteButton = useCallback34(() => {
18496
18657
  if (composerControlsHardDisabled || inputDisabled) {
18497
18658
  return;
18498
18659
  }
18499
18660
  editorHandleRef.current?.openMentionPalette();
18500
18661
  }, [composerControlsHardDisabled, inputDisabled]);
18501
- const scheduleComposerFocus = useCallback33(() => {
18662
+ const scheduleComposerFocus = useCallback34(() => {
18502
18663
  if (inputDisabled) {
18503
18664
  return;
18504
18665
  }
@@ -18508,7 +18669,7 @@ function useComposerFocusAndDrop(input) {
18508
18669
  });
18509
18670
  });
18510
18671
  }, [inputDisabled]);
18511
- const handlePastedImages = useCallback33(
18672
+ const handlePastedImages = useCallback34(
18512
18673
  (images) => {
18513
18674
  addDraftImages(images);
18514
18675
  scheduleComposerFocus();
@@ -18553,7 +18714,7 @@ function useComposerFocusAndDrop(input) {
18553
18714
 
18554
18715
  // agent-gui/agentGuiNode/composer/useComposerPresentation.tsx
18555
18716
  import {
18556
- useCallback as useCallback34,
18717
+ useCallback as useCallback35,
18557
18718
  useEffect as useEffect22,
18558
18719
  useState as useState14
18559
18720
  } from "react";
@@ -18814,7 +18975,7 @@ function useComposerPresentation(input) {
18814
18975
  useEffect22(() => {
18815
18976
  setDismissedPromptRequestId(null);
18816
18977
  }, [activePromptRequestId]);
18817
- const submitInteractivePromptAndDismiss = useCallback34(
18978
+ const submitInteractivePromptAndDismiss = useCallback35(
18818
18979
  (input2) => {
18819
18980
  onSubmitInteractivePrompt(input2);
18820
18981
  setDismissedPromptRequestId(input2.requestId);
@@ -18945,7 +19106,7 @@ import {
18945
19106
  import {
18946
19107
  Component as Component2,
18947
19108
  useLayoutEffect as useLayoutEffect4,
18948
- useRef as useRef24,
19109
+ useRef as useRef25,
18949
19110
  useState as useState15
18950
19111
  } from "react";
18951
19112
  import { ChevronRight } from "lucide-react";
@@ -19227,9 +19388,9 @@ function AgentQueuedPromptPanel({
19227
19388
  "use memo";
19228
19389
  const runtime = useOptionalAgentActivityRuntime();
19229
19390
  const [isExpanded, setIsExpanded] = useState15(false);
19230
- const singlePromptTextRef = useRef24(null);
19231
- const queuedPromptListRef = useRef24(null);
19232
- const pointerHandledEditPromptIdRef = useRef24(null);
19391
+ const singlePromptTextRef = useRef25(null);
19392
+ const queuedPromptListRef = useRef25(null);
19393
+ const pointerHandledEditPromptIdRef = useRef25(null);
19233
19394
  const [isSinglePromptOverflowing, setIsSinglePromptOverflowing] = useState15(false);
19234
19395
  const [expandedListMaxHeightPx, setExpandedListMaxHeightPx] = useState15(280);
19235
19396
  const singlePromptHasImages = queuedPrompts.length === 1 && queuedPromptImages(queuedPrompts[0]).length > 0;
@@ -20568,10 +20729,10 @@ function ComposerModelOptionTooltip({
20568
20729
  // agent-gui/agentGuiNode/agentRichText/AgentRichTextEditor.tsx
20569
20730
  import {
20570
20731
  forwardRef as forwardRef3,
20571
- useCallback as useCallback36,
20732
+ useCallback as useCallback37,
20572
20733
  useEffect as useEffect24,
20573
20734
  useMemo as useMemo26,
20574
- useRef as useRef26,
20735
+ useRef as useRef27,
20575
20736
  useState as useState17
20576
20737
  } from "react";
20577
20738
  import { useEditor } from "@tiptap/react";
@@ -21098,8 +21259,8 @@ function useAgentRichTextEditorHandle(input) {
21098
21259
 
21099
21260
  // agent-gui/agentGuiNode/agentRichText/AgentRichTextEditorSurface.tsx
21100
21261
  import {
21101
- useCallback as useCallback35,
21102
- useRef as useRef25
21262
+ useCallback as useCallback36,
21263
+ useRef as useRef26
21103
21264
  } from "react";
21104
21265
  import { createPortal as createPortal2 } from "react-dom";
21105
21266
  import { EditorContent } from "@tiptap/react";
@@ -21187,8 +21348,8 @@ function AgentRichTextContextMenuButton({
21187
21348
  label,
21188
21349
  onSelect
21189
21350
  }) {
21190
- const selectionStartedRef = useRef25(false);
21191
- const select = useCallback35(() => {
21351
+ const selectionStartedRef = useRef26(false);
21352
+ const select = useCallback36(() => {
21192
21353
  if (disabled || selectionStartedRef.current) return;
21193
21354
  selectionStartedRef.current = true;
21194
21355
  void Promise.resolve(onSelect()).finally(() => {
@@ -21289,39 +21450,39 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
21289
21450
  }, ref) {
21290
21451
  "use memo";
21291
21452
  const { t } = useTranslation();
21292
- const lastEmittedPromptRef = useRef26(value);
21293
- const editorRef = useRef26(null);
21294
- const onChangeRef = useRef26(onChange);
21295
- const onFocusRef = useRef26(onFocus);
21296
- const onUserContentChangeRef = useRef26(onUserContentChange);
21297
- const pendingFocusMethodRef = useRef26(null);
21298
- const onSubmitRef = useRef26(onSubmit);
21299
- const onSubmitGuidanceRef = useRef26(onSubmitGuidance);
21300
- const onKeyDownForPaletteRef = useRef26(onKeyDownForPalette);
21301
- const onFileMentionSuggestionChangeRef = useRef26(
21453
+ const lastEmittedPromptRef = useRef27(value);
21454
+ const editorRef = useRef27(null);
21455
+ const onChangeRef = useRef27(onChange);
21456
+ const onFocusRef = useRef27(onFocus);
21457
+ const onUserContentChangeRef = useRef27(onUserContentChange);
21458
+ const pendingFocusMethodRef = useRef27(null);
21459
+ const onSubmitRef = useRef27(onSubmit);
21460
+ const onSubmitGuidanceRef = useRef27(onSubmitGuidance);
21461
+ const onKeyDownForPaletteRef = useRef27(onKeyDownForPalette);
21462
+ const onFileMentionSuggestionChangeRef = useRef27(
21302
21463
  onFileMentionSuggestionChange
21303
21464
  );
21304
- const onFileMentionSuggestionKeyDownRef = useRef26(
21465
+ const onFileMentionSuggestionKeyDownRef = useRef27(
21305
21466
  onFileMentionSuggestionKeyDown
21306
21467
  );
21307
- const onLinkClickRef = useRef26(onLinkClick);
21308
- const onPromptImagesUnsupportedRef = useRef26(onPromptImagesUnsupported);
21309
- const onPasteImagesRef = useRef26(onPasteImages);
21310
- const onPasteLargeTextRef = useRef26(onPasteLargeText);
21311
- const onDropFilesRef = useRef26(onDropFiles);
21312
- const promptImagesSupportedRef = useRef26(promptImagesSupported);
21313
- const getReferenceForFileRef = useRef26(getReferenceForFile);
21314
- const placeholderRef = useRef26(placeholder);
21315
- const removeMentionLabelRef = useRef26(removeMentionLabel);
21316
- const availableSkillsRef = useRef26(availableSkills);
21317
- const availableCapabilitiesRef = useRef26(availableCapabilities);
21318
- const suppressPastedAtSuggestionRef = useRef26(false);
21319
- const scrollFrameRef = useRef26(null);
21468
+ const onLinkClickRef = useRef27(onLinkClick);
21469
+ const onPromptImagesUnsupportedRef = useRef27(onPromptImagesUnsupported);
21470
+ const onPasteImagesRef = useRef27(onPasteImages);
21471
+ const onPasteLargeTextRef = useRef27(onPasteLargeText);
21472
+ const onDropFilesRef = useRef27(onDropFiles);
21473
+ const promptImagesSupportedRef = useRef27(promptImagesSupported);
21474
+ const getReferenceForFileRef = useRef27(getReferenceForFile);
21475
+ const placeholderRef = useRef27(placeholder);
21476
+ const removeMentionLabelRef = useRef27(removeMentionLabel);
21477
+ const availableSkillsRef = useRef27(availableSkills);
21478
+ const availableCapabilitiesRef = useRef27(availableCapabilities);
21479
+ const suppressPastedAtSuggestionRef = useRef27(false);
21480
+ const scrollFrameRef = useRef27(null);
21320
21481
  const [contextMenu, setContextMenu] = useState17(null);
21321
- const closeContextMenu = useCallback36(() => {
21482
+ const closeContextMenu = useCallback37(() => {
21322
21483
  setContextMenu(null);
21323
21484
  }, []);
21324
- const insertPlainText = useCallback36((text) => {
21485
+ const insertPlainText = useCallback37((text) => {
21325
21486
  const currentEditor = editorRef.current;
21326
21487
  if (!currentEditor || currentEditor.isDestroyed || !text) {
21327
21488
  return;
@@ -21341,7 +21502,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
21341
21502
  })
21342
21503
  ).run();
21343
21504
  }, []);
21344
- const copySelection = useCallback36(async () => {
21505
+ const copySelection = useCallback37(async () => {
21345
21506
  const currentEditor = editorRef.current;
21346
21507
  const selectedText = contextMenu && contextMenu.hasSelection && currentEditor ? readPromptTextRange(
21347
21508
  currentEditor,
@@ -21354,7 +21515,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
21354
21515
  }
21355
21516
  await writePlainTextToClipboard(selectedText);
21356
21517
  }, [closeContextMenu, contextMenu]);
21357
- const cutSelection = useCallback36(async () => {
21518
+ const cutSelection = useCallback37(async () => {
21358
21519
  const currentEditor = editorRef.current;
21359
21520
  const selectionFrom = contextMenu?.selectionFrom ?? null;
21360
21521
  const selectionTo = contextMenu?.selectionTo ?? null;
@@ -21373,7 +21534,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
21373
21534
  const { from, to } = selectionFrom !== null && selectionTo !== null && selectionFrom < selectionTo ? { from: selectionFrom, to: selectionTo } : currentEditor.state.selection;
21374
21535
  currentEditor.chain().focus().deleteRange({ from, to }).run();
21375
21536
  }, [closeContextMenu, contextMenu, disabled]);
21376
- const pasteClipboardText = useCallback36(async () => {
21537
+ const pasteClipboardText = useCallback37(async () => {
21377
21538
  closeContextMenu();
21378
21539
  if (disabled) {
21379
21540
  return;
@@ -21901,7 +22062,7 @@ function AgentReferenceProvenanceFilterControl({
21901
22062
  }
21902
22063
 
21903
22064
  // agent-gui/agentGuiNode/AgentSlashCommandPalette.tsx
21904
- import { Fragment as Fragment8, useEffect as useEffect25, useRef as useRef27 } from "react";
22065
+ import { Fragment as Fragment8, useEffect as useEffect25, useRef as useRef28 } from "react";
21905
22066
  import { Spinner as Spinner3 } from "@tutti-os/ui-system";
21906
22067
  import {
21907
22068
  Globe,
@@ -21948,7 +22109,7 @@ function AgentSlashCommandPalette({
21948
22109
  onSelectSkill
21949
22110
  }) {
21950
22111
  "use memo";
21951
- const highlightedOptionRef = useRef27(null);
22112
+ const highlightedOptionRef = useRef28(null);
21952
22113
  useEffect25(() => {
21953
22114
  highlightedOptionRef.current?.scrollIntoView({ block: "nearest" });
21954
22115
  }, [highlightedIndex]);
@@ -22149,7 +22310,7 @@ function slashPaletteEntryIcon(entry) {
22149
22310
  }
22150
22311
 
22151
22312
  // agent-gui/agentGuiNode/AgentReviewPickerPanel.tsx
22152
- import { useCallback as useCallback37, useEffect as useEffect26, useMemo as useMemo27, useRef as useRef28, useState as useState18 } from "react";
22313
+ import { useCallback as useCallback38, useEffect as useEffect26, useMemo as useMemo27, useRef as useRef29, useState as useState18 } from "react";
22153
22314
  import { menuItemClassName } from "@tutti-os/ui-system";
22154
22315
 
22155
22316
  // agent-gui/agentGuiNode/AgentReviewBranchController.ts
@@ -22267,9 +22428,9 @@ function AgentReviewPickerPanel({
22267
22428
  const [stage, setStage] = useState18("root");
22268
22429
  const [query, setQuery] = useState18("");
22269
22430
  const [highlightedIndex, setHighlightedIndex] = useState18(0);
22270
- const searchInputRef = useRef28(null);
22271
- const highlightedOptionRef = useRef28(null);
22272
- const reviewBranchControllerRef = useRef28(
22431
+ const searchInputRef = useRef29(null);
22432
+ const highlightedOptionRef = useRef29(null);
22433
+ const reviewBranchControllerRef = useRef29(
22273
22434
  null
22274
22435
  );
22275
22436
  const [branchState, setBranchState] = useState18({
@@ -22301,18 +22462,18 @@ function AgentReviewPickerPanel({
22301
22462
  useEffect26(() => {
22302
22463
  searchInputRef.current?.focus();
22303
22464
  }, [stage]);
22304
- const submit = useCallback37(
22465
+ const submit = useCallback38(
22305
22466
  (command) => {
22306
22467
  onSubmitReview(command);
22307
22468
  },
22308
22469
  [onSubmitReview]
22309
22470
  );
22310
- const goToStage = useCallback37((next) => {
22471
+ const goToStage = useCallback38((next) => {
22311
22472
  setStage(next);
22312
22473
  setQuery("");
22313
22474
  setHighlightedIndex(0);
22314
22475
  }, []);
22315
- const goBackToRoot = useCallback37(() => {
22476
+ const goBackToRoot = useCallback38(() => {
22316
22477
  setStage("root");
22317
22478
  setQuery("");
22318
22479
  setHighlightedIndex(0);
@@ -22400,7 +22561,7 @@ function AgentReviewPickerPanel({
22400
22561
  emptyMessage = labels.branchEmpty;
22401
22562
  }
22402
22563
  }
22403
- const handleKeyDown = useCallback37(
22564
+ const handleKeyDown = useCallback38(
22404
22565
  (event) => {
22405
22566
  if (event.key === "ArrowDown") {
22406
22567
  event.preventDefault();
@@ -22510,11 +22671,11 @@ function AgentReviewPickerPanel({
22510
22671
  // agent-gui/agentGuiNode/composerFloatingMenu/ComposerFloatingMenuSurface.tsx
22511
22672
  import {
22512
22673
  forwardRef as forwardRef4,
22513
- useCallback as useCallback38,
22674
+ useCallback as useCallback39,
22514
22675
  useEffect as useEffect27,
22515
22676
  useLayoutEffect as useLayoutEffect5,
22516
22677
  useMemo as useMemo28,
22517
- useRef as useRef29,
22678
+ useRef as useRef30,
22518
22679
  useState as useState19
22519
22680
  } from "react";
22520
22681
  import { createPortal as createPortal3 } from "react-dom";
@@ -22608,7 +22769,7 @@ function useComposerAnchoredMenuFrame({
22608
22769
  open
22609
22770
  }) {
22610
22771
  const [frame, setFrame] = useState19(null);
22611
- const syncFrame = useCallback38(() => {
22772
+ const syncFrame = useCallback39(() => {
22612
22773
  const anchor = anchorRef.current;
22613
22774
  if (!anchor || typeof window === "undefined") {
22614
22775
  setFrame(null);
@@ -22661,13 +22822,13 @@ var ComposerFloatingMenuSurface = forwardRef4(function ComposerFloatingMenuSurfa
22661
22822
  surfaceRef,
22662
22823
  testId
22663
22824
  }, forwardedRef) {
22664
- const localSurfaceRef = useRef29(null);
22825
+ const localSurfaceRef = useRef30(null);
22665
22826
  const frame = useComposerAnchoredMenuFrame({
22666
22827
  anchorRef,
22667
22828
  maxHeight,
22668
22829
  open
22669
22830
  });
22670
- const setSurfaceRef = useCallback38(
22831
+ const setSurfaceRef = useCallback39(
22671
22832
  (node) => {
22672
22833
  localSurfaceRef.current = node;
22673
22834
  assignRef(surfaceRef, node);
@@ -22934,10 +23095,10 @@ import {
22934
23095
  } from "@tutti-os/ui-system";
22935
23096
 
22936
23097
  // app/renderer/assets/icons/add-lined-bold.svg
22937
- var add_lined_bold_default = "./add-lined-bold-5QPUDZCU.svg";
23098
+ var add_lined_bold_default = 'data:image/svg+xml,<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<path d="M12 1.75C12.6904 1.75 13.25 2.30964 13.25 3V10.75H21C21.6904 10.75 22.25 11.3096 22.25 12C22.25 12.6904 21.6904 13.25 21 13.25H13.25V21C13.25 21.6904 12.6904 22.25 12 22.25C11.3096 22.25 10.75 21.6904 10.75 21V13.25H3C2.30964 13.25 1.75 12.6904 1.75 12C1.75 11.3096 2.30964 10.75 3 10.75H10.75V3C10.75 2.30964 11.3096 1.75 12 1.75Z" fill="black"/>%0A</svg>%0A';
22938
23099
 
22939
23100
  // app/renderer/assets/icons/@-bold-lined.svg
22940
- var bold_lined_default = "./@-bold-lined-BLLFKBFI.svg";
23101
+ var bold_lined_default = 'data:image/svg+xml,<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<g clip-path="url(%23clip0_3781_26699)">%0A<path d="M7.23227 1.81049C9.52757 0.736535 12.1185 0.468536 14.5848 1.05073C17.0512 1.63299 19.2485 3.03141 20.8211 5.0185C22.3939 7.00572 23.2498 9.46568 23.2498 11.9999V12.9999C23.2498 14.1271 22.8018 15.2078 22.0047 16.0048C21.2077 16.8018 20.127 17.2499 18.9998 17.2499C17.8727 17.2499 16.792 16.8018 15.995 16.0048C15.8984 15.9082 15.8067 15.8076 15.7206 15.7031C14.7698 16.6583 13.454 17.2499 11.9998 17.2499C9.10043 17.2499 6.74985 14.8994 6.74985 11.9999C6.74988 9.10053 9.10045 6.75003 11.9998 6.74995C13.0401 6.74995 14.0093 7.05327 14.825 7.57514C14.999 7.09414 15.4588 6.75001 15.9998 6.74995C16.6902 6.74995 17.2498 7.30962 17.2498 7.99995V12.9999C17.2498 13.464 17.4344 13.9091 17.7625 14.2372C18.0907 14.5654 18.5358 14.7499 18.9998 14.7499C19.464 14.7499 19.909 14.5654 20.2372 14.2372C20.5653 13.9091 20.7498 13.4641 20.7498 12.9999V11.9999C20.7498 10.029 20.0843 8.11582 18.8612 6.57026C17.638 5.0248 15.9288 3.93724 14.0106 3.48432C12.0923 3.03151 10.0771 3.23983 8.29184 4.07514C6.50657 4.91055 5.05517 6.32388 4.17368 8.08686C3.29224 9.84974 3.03167 11.8587 3.43442 13.788C3.83728 15.7175 4.88014 17.4547 6.3934 18.7177C7.90663 19.9806 9.802 20.6957 11.7723 20.747C13.7427 20.7982 15.673 20.1826 17.2498 18.9999C17.8021 18.5858 18.5856 18.6978 18.9998 19.2499C19.4141 19.8022 19.3021 20.5857 18.7498 20.9999C16.7225 22.5204 14.2412 23.3118 11.7079 23.246C9.17468 23.1802 6.73743 22.2612 4.79184 20.6376C2.8463 19.0139 1.50518 16.7803 0.987154 14.2997C0.469201 11.819 0.804003 9.2354 1.93735 6.9687C3.0707 4.702 4.9369 2.88459 7.23227 1.81049ZM11.9998 9.24994C10.4812 9.25003 9.24988 10.4812 9.24985 11.9999C9.24985 13.5187 10.4811 14.7499 11.9998 14.7499C13.5186 14.7499 14.7498 13.5187 14.7498 11.9999C14.7498 10.4812 13.5186 9.24994 11.9998 9.24994Z" fill="black"/>%0A</g>%0A<defs>%0A<clipPath id="clip0_3781_26699">%0A<rect width="24" height="24" fill="white"/>%0A</clipPath>%0A</defs>%0A</svg>%0A';
22941
23102
 
22942
23103
  // agent-gui/agentGuiNode/composer/ComposerFooter.tsx
22943
23104
  import { Fragment as Fragment10, jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
@@ -23545,6 +23706,7 @@ function AgentComposerView(input) {
23545
23706
  onSubmit: submitInteractivePromptAndDismiss,
23546
23707
  labels: {
23547
23708
  approvalLead: labels.approvalLead,
23709
+ fileChangeApprovalLead: labels.fileChangeApprovalLead,
23548
23710
  planLead: labels.planLead,
23549
23711
  planModes: labels.planModes,
23550
23712
  stayInPlan: labels.stayInPlan,
@@ -24069,11 +24231,11 @@ function AgentComposer(props) {
24069
24231
  const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useState20(false);
24070
24232
  const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState20(false);
24071
24233
  const slashStatusAgentSessionId = slashStatus?.agentSessionId ?? null;
24072
- const previousSlashStatusAgentSessionIdRef = useRef30(
24234
+ const previousSlashStatusAgentSessionIdRef = useRef31(
24073
24235
  slashStatusAgentSessionId
24074
24236
  );
24075
24237
  const selectedProjectPath = composerSettings.selectedProjectPath?.trim() ?? "";
24076
- const previousSelectedProjectPathRef = useRef30(selectedProjectPath);
24238
+ const previousSelectedProjectPathRef = useRef31(selectedProjectPath);
24077
24239
  const [mentionSearchState, setMentionSearchState] = useState20({
24078
24240
  status: "idle",
24079
24241
  query: "",
@@ -24083,26 +24245,26 @@ function AgentComposer(props) {
24083
24245
  groups: [],
24084
24246
  error: null
24085
24247
  });
24086
- const composerRef = useRef30(null);
24087
- const inputShellRef = useRef30(null);
24088
- const promptInputAreaRef = useRef30(null);
24089
- const paletteContentRef = useRef30(null);
24090
- const draftPromptRef = useRef30(draftPrompt);
24091
- const draftImagesRef = useRef30(draftImages);
24092
- const draftFilesRef = useRef30(draftFiles);
24093
- const draftLargeTextsRef = useRef30(draftLargeTexts);
24094
- const draftByScopeKeyRef = useRef30({
24248
+ const composerRef = useRef31(null);
24249
+ const inputShellRef = useRef31(null);
24250
+ const promptInputAreaRef = useRef31(null);
24251
+ const paletteContentRef = useRef31(null);
24252
+ const draftPromptRef = useRef31(draftPrompt);
24253
+ const draftImagesRef = useRef31(draftImages);
24254
+ const draftFilesRef = useRef31(draftFiles);
24255
+ const draftLargeTextsRef = useRef31(draftLargeTexts);
24256
+ const draftByScopeKeyRef = useRef31({
24095
24257
  [draftScopeKey]: draftContent
24096
24258
  });
24097
24259
  draftByScopeKeyRef.current[draftScopeKey] = draftContent;
24098
- const promptTipRef = useRef30(null);
24099
- const mentionControllerRef = useRef30(
24260
+ const promptTipRef = useRef31(null);
24261
+ const mentionControllerRef = useRef31(
24100
24262
  null
24101
24263
  );
24102
- const editorHandleRef = useRef30(null);
24103
- const wasActiveRef = useRef30(isActive);
24104
- const lastComposerFocusRequestRef = useRef30(null);
24105
- const autoMentionHighlightedKeyRef = useRef30(null);
24264
+ const editorHandleRef = useRef31(null);
24265
+ const wasActiveRef = useRef31(isActive);
24266
+ const lastComposerFocusRequestRef = useRef31(null);
24267
+ const autoMentionHighlightedKeyRef = useRef31(null);
24106
24268
  const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState20(false);
24107
24269
  const [dockComposerInputHeight, setDockComposerInputHeight] = useState20(
24108
24270
  DOCK_COMPOSER_INPUT_MIN_HEIGHT2
@@ -24822,13 +24984,21 @@ var AgentGUIEmptyHeroCarouselStage = class extends Component3 {
24822
24984
  );
24823
24985
  if (!slot) {
24824
24986
  this.layer.style.removeProperty("--agent-gui-hero-carousel-slot-top");
24987
+ this.layer.style.removeProperty("--agent-gui-hero-carousel-slot-left");
24825
24988
  return;
24826
24989
  }
24827
- const top = slot.getBoundingClientRect().top - this.stage.getBoundingClientRect().top;
24990
+ const stageRect = this.stage.getBoundingClientRect();
24991
+ const slotRect = slot.getBoundingClientRect();
24992
+ const top = slotRect.top - stageRect.top;
24993
+ const left = slotRect.left + slotRect.width / 2 - stageRect.left;
24828
24994
  this.layer.style.setProperty(
24829
24995
  "--agent-gui-hero-carousel-slot-top",
24830
24996
  `${top}px`
24831
24997
  );
24998
+ this.layer.style.setProperty(
24999
+ "--agent-gui-hero-carousel-slot-left",
25000
+ `${left}px`
25001
+ );
24832
25002
  };
24833
25003
  setLayer = (element) => {
24834
25004
  this.layer = element;
@@ -25283,7 +25453,7 @@ function EmptyHeroTitle({
25283
25453
 
25284
25454
  // agent-gui/agentGuiNode/view/AgentGUIProviderManagerDialog.tsx
25285
25455
  import {
25286
- useRef as useRef31,
25456
+ useRef as useRef32,
25287
25457
  useState as useState22
25288
25458
  } from "react";
25289
25459
  import { CircleMinus, CirclePlus } from "lucide-react";
@@ -25325,12 +25495,12 @@ function AgentGUIProviderManagerDialog({
25325
25495
  null
25326
25496
  );
25327
25497
  const [dragPreview, setDragPreview] = useState22(null);
25328
- const dragStateRef = useRef31(null);
25329
- const dragPreviewRef = useRef31(null);
25498
+ const dragStateRef = useRef32(null);
25499
+ const dragPreviewRef = useRef32(null);
25330
25500
  const [longPressTargetId, setLongPressTargetId] = useState22(
25331
25501
  null
25332
25502
  );
25333
- const longPressOriginRef = useRef31(null);
25503
+ const longPressOriginRef = useRef32(null);
25334
25504
  const finalAvailableAgent = availableTargets.length === 1;
25335
25505
  const showRunningAgentBlocked = (targetId) => {
25336
25506
  const target = targets.find((candidate) => candidate.targetId === targetId);
@@ -25566,7 +25736,7 @@ function AgentGUIProviderManagerDialog({
25566
25736
  "div",
25567
25737
  {
25568
25738
  "aria-label": labels.manageAgentsAvailable,
25569
- className: "grid grid-cols-5 gap-x-3 gap-y-4",
25739
+ className: "grid grid-cols-5 gap-x-3 gap-y-4 rounded-[8px] border border-dashed border-[var(--border-1)] px-3 py-4",
25570
25740
  "data-editing": editing ? "true" : "false",
25571
25741
  onClick: exitEditingFromBlankSpace,
25572
25742
  role: "list",
@@ -25690,7 +25860,7 @@ function AgentGUIProviderManagerDialog({
25690
25860
  "div",
25691
25861
  {
25692
25862
  "aria-label": labels.manageAgentsDisabled,
25693
- className: "grid grid-cols-5 gap-x-3 gap-y-4",
25863
+ className: "grid grid-cols-5 gap-x-3 gap-y-4 rounded-[8px] border border-dashed border-[var(--border-1)] px-3 py-4",
25694
25864
  "data-editing": editing ? "true" : "false",
25695
25865
  onClick: exitEditingFromBlankSpace,
25696
25866
  role: "list",
@@ -25787,7 +25957,7 @@ function AgentGUIProviderManagerDialog({
25787
25957
  }
25788
25958
 
25789
25959
  // agent-gui/agentGuiNode/view/useAgentGUIProviderRailPreferences.ts
25790
- import { useCallback as useCallback39, useEffect as useEffect29, useState as useState23 } from "react";
25960
+ import { useCallback as useCallback40, useEffect as useEffect29, useState as useState23 } from "react";
25791
25961
  function readAgentGUIProviderRailPreferences(storageKey) {
25792
25962
  return parseAgentGUIProviderRailPreferences(
25793
25963
  globalThis.localStorage?.getItem(storageKey)
@@ -25820,7 +25990,7 @@ function useAgentGUIProviderRailPreferences() {
25820
25990
  );
25821
25991
  };
25822
25992
  }, [storageKey]);
25823
- const persistPreferences = useCallback39(
25993
+ const persistPreferences = useCallback40(
25824
25994
  (nextPreferences) => {
25825
25995
  setPreferences(nextPreferences);
25826
25996
  globalThis.localStorage?.setItem(
@@ -25929,8 +26099,8 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
25929
26099
  preferences: providerRailPreferences
25930
26100
  } = useAgentGUIProviderRailPreferences();
25931
26101
  const [dragState, setDragState] = useState24(null);
25932
- const dragStateRef = useRef32(null);
25933
- const setProviderRailDragState = useCallback40(
26102
+ const dragStateRef = useRef33(null);
26103
+ const setProviderRailDragState = useCallback41(
25934
26104
  (nextDragState) => {
25935
26105
  dragStateRef.current = nextDragState;
25936
26106
  setDragState(nextDragState);
@@ -25995,7 +26165,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
25995
26165
  );
25996
26166
  const selectedAgentTargetIsPlaceholder = selectedAgentTarget?.disabled === true && selectedAgentTarget.targetId === `local:${selectedAgentTarget.provider}`;
25997
26167
  const allTileSelected = conversationFilter.kind === "all" && !selectedAgentTargetIsPlaceholder;
25998
- const selectAllProviders = useCallback40(() => {
26168
+ const selectAllProviders = useCallback41(() => {
25999
26169
  onUpdateConversationFilter({ kind: "all" });
26000
26170
  if (selectedAgentTargetIsPlaceholder) {
26001
26171
  const fallbackTarget = railProviderTargets.find((target) => target.disabled !== true) ?? null;
@@ -26014,7 +26184,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
26014
26184
  railProviderTargets,
26015
26185
  selectedAgentTargetIsPlaceholder
26016
26186
  ]);
26017
- const selectAgentTargetTile = useCallback40(
26187
+ const selectAgentTargetTile = useCallback41(
26018
26188
  (target) => {
26019
26189
  onSelectConversationFilterTarget({
26020
26190
  provider: target.provider,
@@ -26024,10 +26194,10 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
26024
26194
  },
26025
26195
  [onRequestComposerFocus, onSelectConversationFilterTarget]
26026
26196
  );
26027
- const clearProviderRailDragState = useCallback40(() => {
26197
+ const clearProviderRailDragState = useCallback41(() => {
26028
26198
  setProviderRailDragState(null);
26029
26199
  }, [setProviderRailDragState]);
26030
- const handleProviderRailDragStart = useCallback40(
26200
+ const handleProviderRailDragStart = useCallback41(
26031
26201
  (event, target) => {
26032
26202
  if (previewMode || agentTargetsLoading) {
26033
26203
  event.preventDefault();
@@ -26043,7 +26213,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
26043
26213
  },
26044
26214
  [previewMode, agentTargetsLoading, setProviderRailDragState]
26045
26215
  );
26046
- const handleProviderRailDragOver = useCallback40(
26216
+ const handleProviderRailDragOver = useCallback41(
26047
26217
  (event, target) => {
26048
26218
  if (previewMode || agentTargetsLoading || !dragState) {
26049
26219
  return;
@@ -26075,7 +26245,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
26075
26245
  },
26076
26246
  [dragState, previewMode, agentTargetsLoading, setProviderRailDragState]
26077
26247
  );
26078
- const commitProviderRailDragDrop = useCallback40(
26248
+ const commitProviderRailDragDrop = useCallback41(
26079
26249
  (event) => {
26080
26250
  const fallbackDraggedTargetId = event.dataTransfer.getData("text/plain").trim();
26081
26251
  const activeDragState = dragStateRef.current ?? dragState ?? (fallbackDraggedTargetId ? {
@@ -26201,7 +26371,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
26201
26371
  onUpdateConversationFilter({ kind: "all" });
26202
26372
  }
26203
26373
  };
26204
- const handleProviderRailContainerDragOver = useCallback40(
26374
+ const handleProviderRailContainerDragOver = useCallback41(
26205
26375
  (event) => {
26206
26376
  const activeDragState = dragStateRef.current ?? dragState;
26207
26377
  if (!activeDragState || previewMode || agentTargetsLoading) {
@@ -26381,7 +26551,16 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
26381
26551
  draggable: false,
26382
26552
  src: target.badge.iconUrl
26383
26553
  }
26384
- ) }) : null
26554
+ ) }) : null,
26555
+ providerSelected && isBetaAgentProvider(target.provider) ? /* @__PURE__ */ jsx41(
26556
+ "img",
26557
+ {
26558
+ "aria-hidden": "true",
26559
+ className: AgentGUINode_styles_default.providerRailBetaBadge,
26560
+ src: agent_vinyl_beta_tag_default,
26561
+ alt: ""
26562
+ }
26563
+ ) : null
26385
26564
  ] })
26386
26565
  },
26387
26566
  `${target.provider}:${target.targetId}`
@@ -26408,11 +26587,11 @@ import { memo as memo8, useState as useState28 } from "react";
26408
26587
  import {
26409
26588
  Fragment as Fragment13,
26410
26589
  memo as memo7,
26411
- useCallback as useCallback43,
26590
+ useCallback as useCallback44,
26412
26591
  useEffect as useEffect30,
26413
26592
  useLayoutEffect as useLayoutEffect6,
26414
26593
  useMemo as useMemo32,
26415
- useRef as useRef34,
26594
+ useRef as useRef35,
26416
26595
  useState as useState27
26417
26596
  } from "react";
26418
26597
  import {
@@ -26541,6 +26720,70 @@ function AgentConversationListSkeleton({
26541
26720
  );
26542
26721
  }
26543
26722
 
26723
+ // agent-gui/agentGuiNode/model/agentGuiConversationRailMembershipRefresh.ts
26724
+ function planRuntimeRailMembershipRefresh(input) {
26725
+ const targetId = input.agentTargetId?.trim() ?? "";
26726
+ const visible = (record) => !targetId || record.agentTargetId?.trim() === targetId;
26727
+ const previousPendingIds = new Set(
26728
+ input.previous.filter(
26729
+ (record) => record.projectionSource === "pending_activation" && visible(record)
26730
+ ).map((record) => record.id)
26731
+ );
26732
+ const canonical = (records) => new Map(
26733
+ records.filter(
26734
+ (record) => record.projectionSource !== "pending_activation" && visible(record)
26735
+ ).map((record) => [record.id, record])
26736
+ );
26737
+ const previousById = canonical(input.previous);
26738
+ const nextById = canonical(input.next);
26739
+ const loadedIds = new Set(
26740
+ (input.loadedSections ?? []).flatMap((section) => section.sessionIds)
26741
+ );
26742
+ const pageIds = /* @__PURE__ */ new Set();
26743
+ const reconcilingSessionIds = [];
26744
+ let refreshSearch = false;
26745
+ const addPage = (record) => {
26746
+ const pageId = record.pinnedAtUnixMs != null ? "pinned" : record.railSectionKey?.trim();
26747
+ if (pageId) pageIds.add(pageId);
26748
+ };
26749
+ for (const [id, previous] of previousById) {
26750
+ const next = nextById.get(id);
26751
+ if (!next) {
26752
+ addPage(previous);
26753
+ refreshSearch ||= Boolean(input.searchActive);
26754
+ continue;
26755
+ }
26756
+ if ((previous.pinnedAtUnixMs ?? 0) !== (next.pinnedAtUnixMs ?? 0) || previous.railSectionKey !== next.railSectionKey) {
26757
+ addPage(previous);
26758
+ addPage(next);
26759
+ }
26760
+ if (previous.title !== next.title) {
26761
+ refreshSearch ||= Boolean(input.searchActive);
26762
+ }
26763
+ }
26764
+ for (const [id, next] of nextById) {
26765
+ if (previousById.has(id)) continue;
26766
+ if (previousPendingIds.has(id)) {
26767
+ if (!loadedIds.has(id)) {
26768
+ addPage(next);
26769
+ reconcilingSessionIds.push(id);
26770
+ }
26771
+ continue;
26772
+ }
26773
+ if (id === (input.activeConversationId?.trim() ?? "") || loadedIds.has(id)) {
26774
+ continue;
26775
+ }
26776
+ addPage(next);
26777
+ refreshSearch ||= Boolean(input.searchActive);
26778
+ }
26779
+ return pageIds.size > 0 || refreshSearch ? {
26780
+ kind: "refresh_pages",
26781
+ pageIds: [...pageIds],
26782
+ reconcilingSessionIds,
26783
+ refreshSearch
26784
+ } : { kind: "none" };
26785
+ }
26786
+
26544
26787
  // agent-gui/agentGuiNode/model/agentGuiConversationRail.ts
26545
26788
  function isConversationRailInitialLoadPending(input) {
26546
26789
  return input.runtimeSectionsEnabled && input.pending && input.sections === null;
@@ -26817,70 +27060,6 @@ function projectConversationRailSectionsByExactKey(input) {
26817
27060
  includeEmptySections: input.includeEmptySections
26818
27061
  });
26819
27062
  }
26820
- function planRuntimeRailMembershipRefresh(input) {
26821
- const previousPendingIds = new Set(
26822
- input.previous.flatMap((conversation) => {
26823
- const id = conversation.id.trim();
26824
- return conversation.projectionSource === "pending_activation" && id ? [id] : [];
26825
- })
26826
- );
26827
- const previousConversations = input.previous.filter(
26828
- (conversation) => conversation.projectionSource !== "pending_activation"
26829
- );
26830
- const nextConversations = input.next.filter(
26831
- (conversation) => conversation.projectionSource !== "pending_activation"
26832
- );
26833
- const previousById = new Map(
26834
- previousConversations.flatMap((conversation) => {
26835
- const id = conversation.id.trim();
26836
- return id ? [[id, conversation]] : [];
26837
- })
26838
- );
26839
- const nextById = new Map(
26840
- nextConversations.flatMap((conversation) => {
26841
- const id = conversation.id.trim();
26842
- return id ? [[id, conversation]] : [];
26843
- })
26844
- );
26845
- const loadedIds = new Set(
26846
- (input.loadedSections ?? []).flatMap(
26847
- (section) => section.sessionIds.map((id) => id.trim()).filter(Boolean)
26848
- )
26849
- );
26850
- let requiresRefresh = false;
26851
- const reconcilingSessionIds = [];
26852
- for (const id of previousById.keys()) {
26853
- if (!nextById.has(id)) {
26854
- requiresRefresh = true;
26855
- }
26856
- }
26857
- for (const [id, conversation] of nextById) {
26858
- const previous = previousById.get(id);
26859
- if (!previous) {
26860
- if (previousPendingIds.has(id)) {
26861
- if (!loadedIds.has(id)) {
26862
- requiresRefresh = true;
26863
- reconcilingSessionIds.push(id);
26864
- }
26865
- continue;
26866
- }
26867
- if (id === (input.activeConversationId?.trim() ?? "")) {
26868
- continue;
26869
- }
26870
- if (!loadedIds.has(id)) {
26871
- requiresRefresh = true;
26872
- }
26873
- continue;
26874
- }
26875
- if ((previous.pinnedAtUnixMs ?? 0) !== (conversation.pinnedAtUnixMs ?? 0)) {
26876
- requiresRefresh = true;
26877
- }
26878
- }
26879
- return requiresRefresh ? {
26880
- kind: "refresh_first_pages",
26881
- reconcilingSessionIds
26882
- } : { kind: "none" };
26883
- }
26884
27063
  function mergeConversationRailSessionIds(base, loaded) {
26885
27064
  const ids = new Set(base);
26886
27065
  const merged = [...base];
@@ -27090,7 +27269,7 @@ function preserveConversationRailSectionTemplates(input) {
27090
27269
  }
27091
27270
 
27092
27271
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailSection.tsx
27093
- import { memo as memo6, useCallback as useCallback42, useState as useState26 } from "react";
27272
+ import { memo as memo6, useCallback as useCallback43, useState as useState26 } from "react";
27094
27273
  import { ChevronRight as ChevronRight2 } from "lucide-react";
27095
27274
  import {
27096
27275
  DropdownMenu as DropdownMenu4,
@@ -27112,9 +27291,9 @@ import {
27112
27291
  // agent-gui/agentGuiNode/view/AgentGUIConversationRailItem.tsx
27113
27292
  import {
27114
27293
  memo as memo5,
27115
- useCallback as useCallback41,
27294
+ useCallback as useCallback42,
27116
27295
  useMemo as useMemo31,
27117
- useRef as useRef33,
27296
+ useRef as useRef34,
27118
27297
  useState as useState25
27119
27298
  } from "react";
27120
27299
  import { ExternalLink as ExternalLink2 } from "lucide-react";
@@ -27123,11 +27302,8 @@ import {
27123
27302
  ContextMenuContent,
27124
27303
  ContextMenuItem,
27125
27304
  ContextMenuTrigger,
27126
- AgentSessionsIcon,
27127
27305
  FileIcon,
27128
27306
  IssueIcon,
27129
- NavAgentsIcon,
27130
- NavApplicationsLinedIcon,
27131
27307
  NewWorkspaceLinedIcon as NewWorkspaceLinedIcon2,
27132
27308
  cn as cn5
27133
27309
  } from "@tutti-os/ui-system";
@@ -27327,7 +27503,9 @@ function agentGUIConversationIconUrl(provider, agentTargetId, workspaceId, agent
27327
27503
  }
27328
27504
  function agentGUIConversationRailTitle(item, labels, uiLanguage) {
27329
27505
  const title = conversationPlainTitle(item, labels, uiLanguage);
27330
- return item.titleLeadingMentionKind ? title.replace(/^@\s*/, "") : title;
27506
+ return isAgentGUIConversationTitleIconMentionKind(
27507
+ item.titleLeadingMentionKind
27508
+ ) ? title.replace(/^@\s*/, "") : title;
27331
27509
  }
27332
27510
  var AgentGUIConversationRailItem = memo5(
27333
27511
  function AgentGUIConversationRailItem2({
@@ -27360,18 +27538,18 @@ var AgentGUIConversationRailItem = memo5(
27360
27538
  workspaceId,
27361
27539
  agentTargets
27362
27540
  );
27363
- const setItemElement = useCallback41(
27541
+ const setItemElement = useCallback42(
27364
27542
  (element) => {
27365
27543
  registerItemElement(item.id, element);
27366
27544
  },
27367
27545
  [item.id, registerItemElement]
27368
27546
  );
27369
27547
  const [contextMenuResetKey, setContextMenuResetKey] = useState25(0);
27370
- const contextMenuRenameRequestedRef = useRef33(false);
27371
- const contextMenuOpenConversationWindowRequestedRef = useRef33(false);
27372
- const contextMenuCopySessionLinkRequestedRef = useRef33(false);
27548
+ const contextMenuRenameRequestedRef = useRef34(false);
27549
+ const contextMenuOpenConversationWindowRequestedRef = useRef34(false);
27550
+ const contextMenuCopySessionLinkRequestedRef = useRef34(false);
27373
27551
  const agentHostApi = useOptionalAgentHostApi();
27374
- const handleMouseLeave = useCallback41(() => {
27552
+ const handleMouseLeave = useCallback42(() => {
27375
27553
  if (isPendingDeleteConversation && !isRailInteractionLocked()) {
27376
27554
  onCancelDeleteConversation();
27377
27555
  }
@@ -27380,18 +27558,18 @@ var AgentGUIConversationRailItem = memo5(
27380
27558
  isRailInteractionLocked,
27381
27559
  onCancelDeleteConversation
27382
27560
  ]);
27383
- const handleSelect = useCallback41(() => {
27561
+ const handleSelect = useCallback42(() => {
27384
27562
  if (isRailInteractionLocked()) return;
27385
27563
  onSelectConversation(item.id);
27386
27564
  }, [isRailInteractionLocked, item.id, onSelectConversation]);
27387
- const handleTogglePinned = useCallback41(() => {
27565
+ const handleTogglePinned = useCallback42(() => {
27388
27566
  if (isRailInteractionLocked()) return;
27389
27567
  onToggleConversationPinned(item.id, !pinned);
27390
27568
  }, [isRailInteractionLocked, item.id, onToggleConversationPinned, pinned]);
27391
27569
  const canMarkUnread = Boolean(
27392
27570
  !previewMode && !item.hasUnreadCompletion && item.isImported !== true && (item.unreadCompletionKey || item.status === "completed" || item.status === "ready")
27393
27571
  );
27394
- const handleMarkUnread = useCallback41(() => {
27572
+ const handleMarkUnread = useCallback42(() => {
27395
27573
  if (!canMarkUnread || isRailInteractionLocked()) {
27396
27574
  return;
27397
27575
  }
@@ -27402,19 +27580,19 @@ var AgentGUIConversationRailItem = memo5(
27402
27580
  item.id,
27403
27581
  onMarkConversationUnread
27404
27582
  ]);
27405
- const handleOpenConversationWindow = useCallback41(() => {
27583
+ const handleOpenConversationWindow = useCallback42(() => {
27406
27584
  if (isRailInteractionLocked()) return;
27407
27585
  onOpenConversationWindow?.(item.id);
27408
27586
  }, [isRailInteractionLocked, item.id, onOpenConversationWindow]);
27409
- const handleRequestDelete = useCallback41(() => {
27587
+ const handleRequestDelete = useCallback42(() => {
27410
27588
  if (isRailInteractionLocked()) return;
27411
27589
  onRequestDeleteConversation(item.id);
27412
27590
  }, [isRailInteractionLocked, item.id, onRequestDeleteConversation]);
27413
- const handleRequestRename = useCallback41(() => {
27591
+ const handleRequestRename = useCallback42(() => {
27414
27592
  if (isRailInteractionLocked()) return;
27415
27593
  onRequestRenameConversation(item);
27416
27594
  }, [isRailInteractionLocked, item, onRequestRenameConversation]);
27417
- const handleContextMenuRename = useCallback41(() => {
27595
+ const handleContextMenuRename = useCallback42(() => {
27418
27596
  if (isRailInteractionLocked() || contextMenuRenameRequestedRef.current) {
27419
27597
  return;
27420
27598
  }
@@ -27429,7 +27607,7 @@ var AgentGUIConversationRailItem = memo5(
27429
27607
  contextMenuRenameRequestedRef.current = false;
27430
27608
  }, 0);
27431
27609
  }, [handleRequestRename, isRailInteractionLocked]);
27432
- const handleContextMenuOpenConversationWindow = useCallback41(() => {
27610
+ const handleContextMenuOpenConversationWindow = useCallback42(() => {
27433
27611
  if (isRailInteractionLocked() || contextMenuOpenConversationWindowRequestedRef.current) {
27434
27612
  return;
27435
27613
  }
@@ -27444,7 +27622,7 @@ var AgentGUIConversationRailItem = memo5(
27444
27622
  contextMenuOpenConversationWindowRequestedRef.current = false;
27445
27623
  }, 0);
27446
27624
  }, [handleOpenConversationWindow, isRailInteractionLocked]);
27447
- const handleContextMenuCopySessionLink = useCallback41(() => {
27625
+ const handleContextMenuCopySessionLink = useCallback42(() => {
27448
27626
  if (isRailInteractionLocked() || contextMenuCopySessionLinkRequestedRef.current) {
27449
27627
  return;
27450
27628
  }
@@ -27518,7 +27696,9 @@ var AgentGUIConversationRailItem = memo5(
27518
27696
  }
27519
27697
  }
27520
27698
  ) : null,
27521
- item.titleLeadingMentionKind ? /* @__PURE__ */ jsx47(
27699
+ isAgentGUIConversationTitleIconMentionKind(
27700
+ item.titleLeadingMentionKind
27701
+ ) ? /* @__PURE__ */ jsx47(
27522
27702
  "span",
27523
27703
  {
27524
27704
  "aria-hidden": "true",
@@ -27690,10 +27870,7 @@ function ConversationTitleMentionIcon({
27690
27870
  kind
27691
27871
  }) {
27692
27872
  if (kind === "task") return /* @__PURE__ */ jsx47(IssueIcon, {});
27693
- if (kind === "app") return /* @__PURE__ */ jsx47(NavApplicationsLinedIcon, {});
27694
- if (kind === "file") return /* @__PURE__ */ jsx47(FileIcon, {});
27695
- if (kind === "agent") return /* @__PURE__ */ jsx47(NavAgentsIcon, {});
27696
- return /* @__PURE__ */ jsx47(AgentSessionsIcon, {});
27873
+ return /* @__PURE__ */ jsx47(FileIcon, {});
27697
27874
  }
27698
27875
  function AgentGUIProjectRailHeader({
27699
27876
  disabled,
@@ -27859,7 +28036,7 @@ var AgentGUIConversationRailSection = memo6(
27859
28036
  const visibleCountTowardTotal = visiblePageableIds.size + (activeConversationCountsTowardTotal && activeConversation && visibleItems.some((item) => item.id === activeConversation.id) && !visiblePageableIds.has(activeConversation.id) ? 1 : 0);
27860
28037
  const canShowMore = !isSectionCollapsed && visibleCountTowardTotal < sectionTotalCount && (visibleItemCount < pageableItems.length || sectionHasMore);
27861
28038
  const canShowLess = !isSectionCollapsed && visibleItemCount > AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE;
27862
- const showMoreConversations = useCallback42(() => {
28039
+ const showMoreConversations = useCallback43(() => {
27863
28040
  if (isRailInteractionLocked()) return;
27864
28041
  if (visibleItemCount >= pageableItems.length && sectionHasMore) {
27865
28042
  onLoadMoreConversations(section);
@@ -27885,7 +28062,7 @@ var AgentGUIConversationRailSection = memo6(
27885
28062
  sectionHasMore,
27886
28063
  visibleItemCount
27887
28064
  ]);
27888
- const showLessConversations = useCallback42(() => {
28065
+ const showLessConversations = useCallback43(() => {
27889
28066
  if (isRailInteractionLocked()) return;
27890
28067
  setVisibleItemLimitState({
27891
28068
  limit: AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE,
@@ -27894,7 +28071,7 @@ var AgentGUIConversationRailSection = memo6(
27894
28071
  }, [isRailInteractionLocked, paginationScopeKey]);
27895
28072
  const canCreateConversationFromSection = section.kind === "conversations" || Boolean(projectPath);
27896
28073
  const createConversationLabel = projectPath ? labels.projectSectionEdit : labels.newConversation;
27897
- const handleCreateConversation = useCallback42(() => {
28074
+ const handleCreateConversation = useCallback43(() => {
27898
28075
  if (isRailInteractionLocked()) return;
27899
28076
  if (projectPath) {
27900
28077
  onCreateConversation({ projectPath, source: "project_section" });
@@ -28277,15 +28454,15 @@ var AgentGUIConversationRailPane = memo7(
28277
28454
  const [pendingProjectAction, setPendingProjectAction] = useState27(null);
28278
28455
  const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState27(false);
28279
28456
  const { railSearch } = railQuery;
28280
- const railElementRef = useRef34(null);
28281
- const conversationListRef = useRef34(null);
28282
- const conversationItemElementsRef = useRef34(
28457
+ const railElementRef = useRef35(null);
28458
+ const conversationListRef = useRef35(null);
28459
+ const conversationItemElementsRef = useRef35(
28283
28460
  /* @__PURE__ */ new Map()
28284
28461
  );
28285
- const activeConversationScrollCompletedRef = useRef34(null);
28286
- const previousActiveConversationIdRef = useRef34(null);
28287
- const railActiveConversationRef = useRef34([]);
28288
- const groupedConversationsRef = useRef34(null);
28462
+ const activeConversationScrollCompletedRef = useRef35(null);
28463
+ const previousActiveConversationIdRef = useRef35(null);
28464
+ const railActiveConversationRef = useRef35([]);
28465
+ const groupedConversationsRef = useRef35(null);
28289
28466
  const {
28290
28467
  loadMoreSectionConversations,
28291
28468
  isInteractionLocked,
@@ -28439,7 +28616,7 @@ var AgentGUIConversationRailPane = memo7(
28439
28616
  ]);
28440
28617
  const groupedConversations = groupedConversationResult.groups;
28441
28618
  const sectionPaginationScopeKey = `${conversationFilter.kind === "agentTarget" ? `${workspaceId}:agentTarget:${conversationFilter.agentTargetId.trim()}` : `${workspaceId}:all:${sectionAgentTargetFallbackId?.trim() ?? ""}`}:search:${conversationQuery.trim()}`;
28442
- const toggleProjectSectionCollapsed = useCallback43((sectionId) => {
28619
+ const toggleProjectSectionCollapsed = useCallback44((sectionId) => {
28443
28620
  setCollapsedProjectSectionIds((current) => {
28444
28621
  const next = new Set(current);
28445
28622
  if (next.has(sectionId)) {
@@ -28457,7 +28634,7 @@ var AgentGUIConversationRailPane = memo7(
28457
28634
  [groupedConversations, railActiveOverlay]
28458
28635
  );
28459
28636
  const sectionAgentTargetId = conversationFilter.kind === "agentTarget" ? conversationFilter.agentTargetId.trim() : sectionAgentTargetFallbackId?.trim() ?? "";
28460
- const requestSectionBatchDeletion = useCallback43(
28637
+ const requestSectionBatchDeletion = useCallback44(
28461
28638
  (section) => {
28462
28639
  if (isInteractionLocked() || isDeletingProjectConversations || isRequestingBatchDeletion) {
28463
28640
  return;
@@ -28498,7 +28675,7 @@ var AgentGUIConversationRailPane = memo7(
28498
28675
  );
28499
28676
  const shouldShowConversationEmptyState = !isConversationRailListLoading && groupedConversations.length === 0;
28500
28677
  const shouldShowConversationSearchError = backendSearchActive && railSearch.failed && railSearch.sessionIds.length === 0;
28501
- const registerConversationItemElement = useCallback43(
28678
+ const registerConversationItemElement = useCallback44(
28502
28679
  (itemId, element) => {
28503
28680
  if (element) {
28504
28681
  conversationItemElementsRef.current.set(itemId, element);
@@ -28727,16 +28904,77 @@ var AgentGUIConversationRailPane = memo7(
28727
28904
  import {
28728
28905
  selectWorkspaceAgentConsumerSessions as selectWorkspaceAgentConsumerSessions4
28729
28906
  } from "@tutti-os/agent-activity-core";
28730
- import { useEffect as useEffect31, useMemo as useMemo33, useRef as useRef35 } from "react";
28731
-
28732
- // agent-gui/agentGuiNode/controller/AgentGUIConversationRailQueryController.ts
28733
- import {
28734
- selectPendingActivations as selectPendingActivations3,
28735
- selectWorkspaceAgentConsumerSessions as selectWorkspaceAgentConsumerSessions3
28736
- } from "@tutti-os/agent-activity-core";
28907
+ import { useEffect as useEffect31, useMemo as useMemo33, useRef as useRef36 } from "react";
28737
28908
 
28738
28909
  // agent-gui/agentGuiNode/controller/agentGuiConversationRailDiagnostics.ts
28739
28910
  var CONVERSATION_RAIL_SLOW_DIAGNOSTIC_THRESHOLD_MS = 250;
28911
+ var ConversationRailProviderSwitchDiagnosticTracker = class {
28912
+ constructor(diagnosticLogger, now, workspaceId) {
28913
+ this.diagnosticLogger = diagnosticLogger;
28914
+ this.now = now;
28915
+ this.workspaceId = workspaceId;
28916
+ }
28917
+ diagnosticLogger;
28918
+ now;
28919
+ workspaceId;
28920
+ pending = null;
28921
+ configure(input) {
28922
+ if (input.nextScopeKey !== input.previousScopeKey && this.pending?.scopeKey !== input.nextScopeKey) {
28923
+ this.pending = null;
28924
+ }
28925
+ if (input.attached && input.nextScopeKey !== input.previousScopeKey && input.previousScopeKey !== null && input.previousAgentTargetId !== input.nextAgentTargetId) {
28926
+ this.pending = {
28927
+ cacheStatus: "miss",
28928
+ fromAgentTargetId: input.previousAgentTargetId || null,
28929
+ scopeKey: input.nextScopeKey,
28930
+ startedAtMs: this.now(),
28931
+ toAgentTargetId: input.nextAgentTargetId || null
28932
+ };
28933
+ }
28934
+ }
28935
+ hasPending(scopeKey) {
28936
+ return this.pending?.scopeKey === scopeKey;
28937
+ }
28938
+ setCacheStatus(scopeKey, cacheStatus) {
28939
+ if (this.pending?.scopeKey === scopeKey) {
28940
+ this.pending.cacheStatus = cacheStatus;
28941
+ }
28942
+ }
28943
+ complete(scopeKey, result) {
28944
+ const pending = this.pending;
28945
+ if (!pending || pending.scopeKey !== scopeKey) return;
28946
+ this.pending = null;
28947
+ emitConversationRailProviderSwitchDiagnostic({
28948
+ ...result,
28949
+ diagnosticLogger: this.diagnosticLogger,
28950
+ durationMs: Math.max(0, this.now() - pending.startedAtMs),
28951
+ fromAgentTargetId: pending.fromAgentTargetId,
28952
+ toAgentTargetId: pending.toAgentTargetId,
28953
+ workspaceId: this.workspaceId
28954
+ });
28955
+ }
28956
+ };
28957
+ function emitConversationRailProviderSwitchDiagnostic(input) {
28958
+ const payload = {
28959
+ cacheStatus: input.cacheStatus,
28960
+ controllerApplyMs: input.controllerApplyMs,
28961
+ durationMs: input.durationMs,
28962
+ ...input.status === "error" ? { errorKind: conversationRailErrorKind(input.error) } : {},
28963
+ event: input.status === "error" ? "agent_gui.provider_switch.failed" : "agent_gui.provider_switch.completed",
28964
+ fromAgentTargetId: input.fromAgentTargetId,
28965
+ requestMs: input.requestMs,
28966
+ returnedSessionCount: input.returnedSessionCount,
28967
+ sectionCount: input.sectionCount,
28968
+ status: input.status,
28969
+ toAgentTargetId: input.toAgentTargetId,
28970
+ workspaceId: input.workspaceId
28971
+ };
28972
+ try {
28973
+ input.diagnosticLogger(payload);
28974
+ } catch (error) {
28975
+ ignoreConversationRailDiagnosticFailure(error);
28976
+ }
28977
+ }
28740
28978
  function emitConversationRailFirstPagesDiagnostic(input) {
28741
28979
  if (input.status === "ready" && input.durationMs < input.diagnosticSlowThresholdMs) {
28742
28980
  return;
@@ -28793,11 +29031,163 @@ function conversationRailErrorKind(error) {
28793
29031
  return error === null ? "null" : typeof error;
28794
29032
  }
28795
29033
 
28796
- // agent-gui/agentGuiNode/controller/AgentGUIConversationRailQueryController.ts
28797
- var SECTION_PAGE_SIZE = 5;
28798
- var SEARCH_PAGE_SIZE = 100;
28799
- var CONVERSATION_SEARCH_DEBOUNCE_MS = 300;
28800
- var EMPTY_SEARCH_STATE = {
29034
+ // agent-gui/agentGuiNode/model/agentGuiConversationRailMembershipRecords.ts
29035
+ import {
29036
+ isPendingActivationViable as isPendingActivationViable6,
29037
+ selectPendingActivations as selectPendingActivations3,
29038
+ selectWorkspaceAgentConsumerSessions as selectWorkspaceAgentConsumerSessions3
29039
+ } from "@tutti-os/agent-activity-core";
29040
+ function projectConversationRailMembershipRecords(state) {
29041
+ const sessions = selectWorkspaceAgentConsumerSessions3(state);
29042
+ const canonicalIds = new Set(
29043
+ sessions.map((item) => item.session.agentSessionId)
29044
+ );
29045
+ return [
29046
+ ...sessions.map((item) => ({
29047
+ agentTargetId: item.session.agentTargetId,
29048
+ id: item.session.agentSessionId,
29049
+ pinnedAtUnixMs: item.session.pinnedAtUnixMs ?? null,
29050
+ railSectionKey: item.session.railSectionKey?.trim() || null,
29051
+ title: item.session.title
29052
+ })),
29053
+ ...selectPendingActivations3(state).filter(
29054
+ (record) => record.mode === "new" && isPendingActivationViable6(record) && !canonicalIds.has(record.agentSessionId)
29055
+ ).map((record) => ({
29056
+ agentTargetId: record.agentTargetId,
29057
+ id: record.agentSessionId,
29058
+ pinnedAtUnixMs: null,
29059
+ projectionSource: "pending_activation",
29060
+ railSectionKey: null,
29061
+ title: record.title ?? ""
29062
+ }))
29063
+ ];
29064
+ }
29065
+
29066
+ // agent-gui/agentGuiNode/controller/agentGuiConversationRailQueryCache.ts
29067
+ function cachedConversationRailQueryFromFirstPages(page, scopeKey) {
29068
+ const sections = projectRuntimeSectionsToConversationRailMemberships({
29069
+ pinned: page.pinned,
29070
+ sections: page.sections
29071
+ });
29072
+ const sectionPageStates = /* @__PURE__ */ new Map();
29073
+ if (page.pinned) {
29074
+ sectionPageStates.set("pinned", conversationRailPageState(page.pinned));
29075
+ }
29076
+ for (const section of page.sections) {
29077
+ sectionPageStates.set(
29078
+ section.sectionKey,
29079
+ conversationRailPageState(section)
29080
+ );
29081
+ }
29082
+ const sessions = [
29083
+ ...page.pinned?.sessions ?? [],
29084
+ ...page.sections.flatMap((section) => section.sessions)
29085
+ ];
29086
+ return {
29087
+ queryState: {
29088
+ pending: false,
29089
+ reconcilingSessionIds: [],
29090
+ resolvedScopeKey: scopeKey,
29091
+ sectionPageStates,
29092
+ sections
29093
+ },
29094
+ returnedSessionCount: sessions.length,
29095
+ sectionCount: page.sections.length + (page.pinned ? 1 : 0),
29096
+ sessions
29097
+ };
29098
+ }
29099
+ function applyCachedConversationRailQuery(input) {
29100
+ if (input.cache.claimIngestion(input.scopeKey, input.entry.version)) {
29101
+ input.upsertSessions(input.entry.value.sessions);
29102
+ }
29103
+ return input.entry.value.queryState;
29104
+ }
29105
+ function writeConversationRailQueryCache(input) {
29106
+ const { queryState, scopeKey } = input;
29107
+ if (!scopeKey || queryState.pending || queryState.resolvedScopeKey !== scopeKey || queryState.sections === null) {
29108
+ return;
29109
+ }
29110
+ input.cache.write(scopeKey, {
29111
+ queryState,
29112
+ returnedSessionCount: queryState.sections.reduce(
29113
+ (count, section) => count + section.sessionIds.length,
29114
+ 0
29115
+ ),
29116
+ sectionCount: queryState.sections.length,
29117
+ sessions: []
29118
+ });
29119
+ }
29120
+ function replaceConversationRailFirstPages(input) {
29121
+ let sections = [...input.queryState.sections ?? []];
29122
+ let sectionPageStates = input.queryState.sectionPageStates;
29123
+ for (const refreshed of input.pages) {
29124
+ const sectionId = refreshed.kind === "pinned" ? "pinned" : refreshed.id;
29125
+ sectionPageStates = updateConversationRailSectionPageState(
29126
+ sectionPageStates,
29127
+ sectionId,
29128
+ conversationRailPageState(refreshed.page)
29129
+ );
29130
+ const projected = refreshed.kind === "pinned" ? projectRuntimeSectionsToConversationRailMemberships({
29131
+ pinned: refreshed.page,
29132
+ sections: []
29133
+ })[0] : projectRuntimeSectionsToConversationRailMemberships({
29134
+ sections: [refreshed.page]
29135
+ })[0];
29136
+ const existingIndex = sections.findIndex(
29137
+ (section) => section.id === sectionId
29138
+ );
29139
+ if (!projected) {
29140
+ if (existingIndex >= 0) sections.splice(existingIndex, 1);
29141
+ continue;
29142
+ }
29143
+ if (existingIndex >= 0) {
29144
+ sections[existingIndex] = projected;
29145
+ continue;
29146
+ }
29147
+ if (projected.kind === "pinned") {
29148
+ sections.unshift(projected);
29149
+ continue;
29150
+ }
29151
+ const conversationsIndex = sections.findIndex(
29152
+ (section) => section.kind === "conversations"
29153
+ );
29154
+ if (projected.kind === "project" && conversationsIndex >= 0) {
29155
+ sections.splice(conversationsIndex, 0, projected);
29156
+ } else {
29157
+ sections.push(projected);
29158
+ }
29159
+ }
29160
+ return {
29161
+ ...input.queryState,
29162
+ pending: false,
29163
+ reconcilingSessionIds: [],
29164
+ sectionPageStates,
29165
+ sections
29166
+ };
29167
+ }
29168
+ function updateConversationRailSectionPageState(current, sectionId, value) {
29169
+ const next = new Map(current);
29170
+ next.set(sectionId, value);
29171
+ return next;
29172
+ }
29173
+ function conversationRailPageState(page) {
29174
+ return {
29175
+ hasMore: page.hasMore,
29176
+ isLoading: false,
29177
+ nextCursor: page.nextCursor ?? null,
29178
+ totalCount: page.totalCount
29179
+ };
29180
+ }
29181
+
29182
+ // agent-gui/agentGuiNode/controller/agentGuiConversationRailQuerySnapshot.ts
29183
+ var EMPTY_CONVERSATION_RAIL_QUERY_STATE = {
29184
+ pending: false,
29185
+ reconcilingSessionIds: [],
29186
+ resolvedScopeKey: null,
29187
+ sectionPageStates: /* @__PURE__ */ new Map(),
29188
+ sections: null
29189
+ };
29190
+ var EMPTY_CONVERSATION_SEARCH_QUERY_STATE = {
28801
29191
  failed: false,
28802
29192
  hasMore: false,
28803
29193
  loadingMore: false,
@@ -28807,13 +29197,109 @@ var EMPTY_SEARCH_STATE = {
28807
29197
  resolvedQuery: "",
28808
29198
  sessionIds: []
28809
29199
  };
28810
- var EMPTY_QUERY_STATE = {
28811
- pending: false,
28812
- reconcilingSessionIds: [],
28813
- resolvedScopeKey: null,
28814
- sectionPageStates: /* @__PURE__ */ new Map(),
28815
- sections: null
29200
+ function buildConversationRailQuerySnapshot(input) {
29201
+ const searchResolved = input.searchState.requestKey === input.searchRequestKey && input.searchState.resolvedQuery === input.searchQuery;
29202
+ return {
29203
+ railSearch: {
29204
+ enabled: input.searchEnabled,
29205
+ failed: searchResolved && input.searchState.failed,
29206
+ hasMore: searchResolved && input.searchState.hasMore,
29207
+ loadingMore: searchResolved && input.searchState.loadingMore,
29208
+ pending: Boolean(input.searchQuery) && (!searchResolved || input.searchState.pending),
29209
+ resolvedQuery: searchResolved ? input.searchState.resolvedQuery : "",
29210
+ sessionIds: searchResolved ? input.searchState.sessionIds : []
29211
+ },
29212
+ runtimeSectionsEnabled: input.runtimeSectionsEnabled,
29213
+ runtimeRailMemberships: input.queryState.sections,
29214
+ runtimeRailReconcilingSessionIds: input.queryState.reconcilingSessionIds,
29215
+ runtimeRailSectionsPending: input.queryState.pending,
29216
+ sectionPageStates: input.queryState.sectionPageStates
29217
+ };
29218
+ }
29219
+
29220
+ // agent-gui/agentGuiNode/controller/AgentGUIConversationRailTargetedPageRefresher.ts
29221
+ var SECTION_PAGE_SIZE = 5;
29222
+ var AgentGUIConversationRailTargetedPageRefresher = class {
29223
+ constructor(input) {
29224
+ this.input = input;
29225
+ }
29226
+ input;
29227
+ abortController = null;
29228
+ pendingPageIds = /* @__PURE__ */ new Set();
29229
+ requestSequence = 0;
29230
+ refresh(input) {
29231
+ for (const pageId of input.pageIds) this.pendingPageIds.add(pageId);
29232
+ if (this.pendingPageIds.size === 0) return;
29233
+ this.abortController?.abort();
29234
+ const abortController = new AbortController();
29235
+ this.abortController = abortController;
29236
+ const requestSequence = ++this.requestSequence;
29237
+ const pageIds = [...this.pendingPageIds];
29238
+ const requests = pageIds.flatMap((id) => {
29239
+ if (id === "pinned") {
29240
+ const listPage2 = this.input.runtime.listPinnedSessionsPage;
29241
+ return listPage2 ? [
29242
+ listPage2({
29243
+ agentTargetId: input.agentTargetId || void 0,
29244
+ limit: SECTION_PAGE_SIZE,
29245
+ signal: abortController.signal,
29246
+ workspaceId: this.input.workspaceId
29247
+ }).then(
29248
+ (page) => ({
29249
+ kind: "pinned",
29250
+ page
29251
+ })
29252
+ )
29253
+ ] : [];
29254
+ }
29255
+ const listPage = this.input.runtime.listSessionSectionPage;
29256
+ return listPage ? [
29257
+ listPage({
29258
+ agentTargetId: input.agentTargetId || void 0,
29259
+ limit: SECTION_PAGE_SIZE,
29260
+ sectionKey: id,
29261
+ signal: abortController.signal,
29262
+ workspaceId: this.input.workspaceId
29263
+ }).then(
29264
+ (page) => ({
29265
+ id,
29266
+ kind: "section",
29267
+ page
29268
+ })
29269
+ )
29270
+ ] : [];
29271
+ });
29272
+ if (requests.length !== pageIds.length) {
29273
+ for (const id of pageIds) this.pendingPageIds.delete(id);
29274
+ this.input.onFailed?.();
29275
+ return;
29276
+ }
29277
+ void Promise.all(requests).then((pages) => {
29278
+ if (abortController.signal.aborted || requestSequence !== this.requestSequence) {
29279
+ return;
29280
+ }
29281
+ for (const id of pageIds) this.pendingPageIds.delete(id);
29282
+ this.input.onResolved(pages);
29283
+ }).catch(() => {
29284
+ if (abortController.signal.aborted || requestSequence !== this.requestSequence) {
29285
+ return;
29286
+ }
29287
+ for (const id of pageIds) this.pendingPageIds.delete(id);
29288
+ this.input.onFailed?.();
29289
+ });
29290
+ }
29291
+ cancel() {
29292
+ this.requestSequence += 1;
29293
+ this.abortController?.abort();
29294
+ this.abortController = null;
29295
+ this.pendingPageIds.clear();
29296
+ }
28816
29297
  };
29298
+
29299
+ // agent-gui/agentGuiNode/controller/AgentGUIConversationRailQueryController.ts
29300
+ var SECTION_PAGE_SIZE2 = 5;
29301
+ var CONVERSATION_SEARCH_DEBOUNCE_MS = 300;
29302
+ var CONVERSATION_RAIL_QUERY_CACHE_FRESH_MS = 3e4;
28817
29303
  var AgentGUIConversationRailQueryController = class {
28818
29304
  getSnapshot = () => this.snapshot;
28819
29305
  isInteractionLocked = () => this.queryState.pending && this.queryState.resolvedScopeKey !== this.railSectionQueryKey && !(this.searchQuery && this.snapshot.railSearch.enabled);
@@ -28822,6 +29308,8 @@ var AgentGUIConversationRailQueryController = class {
28822
29308
  return () => this.listeners.delete(listener);
28823
29309
  };
28824
29310
  engine;
29311
+ cacheFreshMs;
29312
+ cacheNow;
28825
29313
  diagnosticLogger;
28826
29314
  diagnosticNow;
28827
29315
  diagnosticSlowThresholdMs;
@@ -28830,9 +29318,12 @@ var AgentGUIConversationRailQueryController = class {
28830
29318
  runtime;
28831
29319
  scheduler;
28832
29320
  workspaceId;
29321
+ sessionSectionsQueryCache;
29322
+ providerSwitchDiagnostics;
28833
29323
  pagingAbortControllers = /* @__PURE__ */ new Map();
28834
- queryState = EMPTY_QUERY_STATE;
28835
- searchState = EMPTY_SEARCH_STATE;
29324
+ targetedPageRefresher;
29325
+ queryState = EMPTY_CONVERSATION_RAIL_QUERY_STATE;
29326
+ searchState = EMPTY_CONVERSATION_SEARCH_QUERY_STATE;
28836
29327
  snapshot;
28837
29328
  scope = null;
28838
29329
  sectionAgentTargetId = "";
@@ -28848,18 +29339,39 @@ var AgentGUIConversationRailQueryController = class {
28848
29339
  previousMembershipRecords;
28849
29340
  unsubscribeEngine = null;
28850
29341
  constructor(input) {
29342
+ this.cacheFreshMs = input.cacheFreshMs ?? CONVERSATION_RAIL_QUERY_CACHE_FRESH_MS;
29343
+ this.cacheNow = input.cacheNow ?? Date.now;
28851
29344
  this.diagnosticLogger = input.diagnosticLogger ?? createConversationRailDiagnosticLogger(input.runtime);
28852
29345
  this.diagnosticNow = input.diagnosticNow ?? Date.now;
28853
29346
  this.diagnosticSlowThresholdMs = input.diagnosticSlowThresholdMs ?? CONVERSATION_RAIL_SLOW_DIAGNOSTIC_THRESHOLD_MS;
28854
29347
  this.engine = input.engine;
28855
29348
  this.getActiveConversationId = input.getActiveConversationId;
28856
29349
  this.runtime = input.runtime;
29350
+ this.providerSwitchDiagnostics = new ConversationRailProviderSwitchDiagnosticTracker(
29351
+ this.diagnosticLogger,
29352
+ this.diagnosticNow,
29353
+ input.workspaceId
29354
+ );
29355
+ this.sessionSectionsQueryCache = input.sessionSectionsQueryCache ?? input.runtime.getSessionSectionsQueryCache?.(input.workspaceId) ?? createWorkspaceQueryCache();
28857
29356
  this.scheduler = input.scheduler ?? agentGuiScheduler;
28858
29357
  this.workspaceId = input.workspaceId;
28859
- this.previousMembershipRecords = membershipRecords(
29358
+ this.targetedPageRefresher = new AgentGUIConversationRailTargetedPageRefresher({
29359
+ onResolved: (pages) => {
29360
+ this.upsertSessions(pages.flatMap(({ page }) => page.sessions));
29361
+ this.queryState = replaceConversationRailFirstPages({
29362
+ pages,
29363
+ queryState: this.queryState
29364
+ });
29365
+ this.writeCurrentQueryCache();
29366
+ this.emit();
29367
+ },
29368
+ runtime: this.runtime,
29369
+ workspaceId: this.workspaceId
29370
+ });
29371
+ this.previousMembershipRecords = projectConversationRailMembershipRecords(
28860
29372
  this.engine.getSnapshot()
28861
29373
  );
28862
- this.snapshot = this.buildSnapshot();
29374
+ this.emit();
28863
29375
  }
28864
29376
  attach() {
28865
29377
  if (this.attached) return () => {
@@ -28873,6 +29385,8 @@ var AgentGUIConversationRailQueryController = class {
28873
29385
  return () => this.detach();
28874
29386
  }
28875
29387
  configure(scope) {
29388
+ const previousScopeKey = this.railSectionQueryKey;
29389
+ const previousAgentTargetId = this.sectionAgentTargetId;
28876
29390
  const sectionAgentTargetId = scope.conversationFilter.kind === "agentTarget" ? scope.conversationFilter.agentTargetId.trim() : scope.sectionAgentTargetFallbackId?.trim() ?? "";
28877
29391
  const userProjectPathKey = JSON.stringify(
28878
29392
  scope.userProjects.map((project) => project.path.trim()).filter((path) => path.length > 0)
@@ -28885,11 +29399,19 @@ var AgentGUIConversationRailQueryController = class {
28885
29399
  userProjectPathKey
28886
29400
  ]);
28887
29401
  const scopeChanged = nextScopeKey !== this.railSectionQueryKey;
29402
+ this.providerSwitchDiagnostics.configure({
29403
+ attached: this.attached,
29404
+ nextAgentTargetId: sectionAgentTargetId,
29405
+ nextScopeKey,
29406
+ previousAgentTargetId,
29407
+ previousScopeKey
29408
+ });
28888
29409
  this.scope = scope;
28889
29410
  this.sectionAgentTargetId = sectionAgentTargetId;
28890
29411
  this.railSectionQueryKey = nextScopeKey;
28891
29412
  if (!scopeChanged) return;
28892
29413
  this.cancelPagingRequests();
29414
+ this.targetedPageRefresher.cancel();
28893
29415
  this.queryState = {
28894
29416
  ...this.queryState,
28895
29417
  pending: this.runtimeSectionsEnabled(),
@@ -28925,7 +29447,7 @@ var AgentGUIConversationRailQueryController = class {
28925
29447
  this.pagingAbortControllers.set(section.id, abortController);
28926
29448
  this.queryState = {
28927
29449
  ...this.queryState,
28928
- sectionPageStates: updateSectionPageState(
29450
+ sectionPageStates: updateConversationRailSectionPageState(
28929
29451
  this.queryState.sectionPageStates,
28930
29452
  section.id,
28931
29453
  { ...currentPageState, isLoading: true }
@@ -28935,13 +29457,13 @@ var AgentGUIConversationRailQueryController = class {
28935
29457
  const request = membership.kind === "pinned" ? this.runtime.listPinnedSessionsPage({
28936
29458
  agentTargetId: this.sectionAgentTargetId || void 0,
28937
29459
  cursor: currentPageState.nextCursor || void 0,
28938
- limit: SECTION_PAGE_SIZE,
29460
+ limit: SECTION_PAGE_SIZE2,
28939
29461
  signal: abortController.signal,
28940
29462
  workspaceId: this.workspaceId
28941
29463
  }) : this.runtime.listSessionSectionPage({
28942
29464
  agentTargetId: this.sectionAgentTargetId || void 0,
28943
29465
  cursor: currentPageState.nextCursor || void 0,
28944
- limit: SECTION_PAGE_SIZE,
29466
+ limit: SECTION_PAGE_SIZE2,
28945
29467
  sectionKey: section.id,
28946
29468
  signal: abortController.signal,
28947
29469
  workspaceId: this.workspaceId
@@ -28953,7 +29475,7 @@ var AgentGUIConversationRailQueryController = class {
28953
29475
  this.upsertSessions(page.sessions);
28954
29476
  this.queryState = {
28955
29477
  ...this.queryState,
28956
- sectionPageStates: updateSectionPageState(
29478
+ sectionPageStates: updateConversationRailSectionPageState(
28957
29479
  this.queryState.sectionPageStates,
28958
29480
  section.id,
28959
29481
  {
@@ -28973,6 +29495,7 @@ var AgentGUIConversationRailQueryController = class {
28973
29495
  } : candidate
28974
29496
  ) ?? null
28975
29497
  };
29498
+ this.writeCurrentQueryCache();
28976
29499
  this.emit();
28977
29500
  }).catch(() => {
28978
29501
  if (abortController.signal.aborted || requestSequence !== this.pagingRequestSequence) {
@@ -28980,12 +29503,13 @@ var AgentGUIConversationRailQueryController = class {
28980
29503
  }
28981
29504
  this.queryState = {
28982
29505
  ...this.queryState,
28983
- sectionPageStates: updateSectionPageState(
29506
+ sectionPageStates: updateConversationRailSectionPageState(
28984
29507
  this.queryState.sectionPageStates,
28985
29508
  section.id,
28986
29509
  { ...currentPageState, isLoading: false }
28987
29510
  )
28988
29511
  };
29512
+ this.writeCurrentQueryCache();
28989
29513
  this.emit();
28990
29514
  }).finally(() => {
28991
29515
  if (this.pagingAbortControllers.get(section.id) === abortController) {
@@ -29007,7 +29531,7 @@ var AgentGUIConversationRailQueryController = class {
29007
29531
  void listSessionsPage({
29008
29532
  agentTargetId: this.sectionAgentTargetId || void 0,
29009
29533
  cursor: this.searchState.nextCursor ?? void 0,
29010
- limit: SEARCH_PAGE_SIZE,
29534
+ limit: 100,
29011
29535
  searchQuery: this.searchQuery,
29012
29536
  signal: abortController.signal,
29013
29537
  workspaceId: this.workspaceId
@@ -29045,19 +29569,24 @@ var AgentGUIConversationRailQueryController = class {
29045
29569
  this.requestSearch();
29046
29570
  };
29047
29571
  handleEngineState(state) {
29048
- const next = membershipRecords(state);
29572
+ const next = projectConversationRailMembershipRecords(state);
29049
29573
  if (this.ingestingSessions || !this.runtimeSectionsEnabled()) {
29050
29574
  this.previousMembershipRecords = next;
29051
29575
  return;
29052
29576
  }
29053
29577
  const plan = planRuntimeRailMembershipRefresh({
29054
29578
  activeConversationId: this.getActiveConversationId(),
29579
+ agentTargetId: this.sectionAgentTargetId || null,
29055
29580
  loadedSections: this.queryState.sections,
29056
29581
  next,
29057
- previous: this.previousMembershipRecords
29582
+ previous: this.previousMembershipRecords,
29583
+ searchActive: Boolean(this.searchQuery && this.searchEnabled())
29058
29584
  });
29059
29585
  this.previousMembershipRecords = next;
29060
- if (plan.kind !== "refresh_first_pages") return;
29586
+ if (plan.kind !== "refresh_pages") return;
29587
+ if (plan.pageIds.length > 0 && this.railSectionQueryKey) {
29588
+ this.sessionSectionsQueryCache.invalidate(this.railSectionQueryKey);
29589
+ }
29061
29590
  this.queryState = {
29062
29591
  ...this.queryState,
29063
29592
  reconcilingSessionIds: mergeConversationRailSessionIds(
@@ -29066,62 +29595,73 @@ var AgentGUIConversationRailQueryController = class {
29066
29595
  )
29067
29596
  };
29068
29597
  this.emit();
29069
- this.refreshFirstPages("membership_change");
29598
+ if (plan.refreshSearch) this.requestSearch();
29599
+ this.cancelPagingRequests();
29600
+ this.targetedPageRefresher.refresh({
29601
+ agentTargetId: this.sectionAgentTargetId,
29602
+ pageIds: plan.pageIds
29603
+ });
29070
29604
  }
29071
29605
  refreshFirstPages(refreshReason) {
29072
29606
  const listSections = this.runtime.listSessionSections;
29073
29607
  const scopeKey = this.railSectionQueryKey;
29074
29608
  if (!this.runtimeSectionsEnabled() || !listSections || !scopeKey) {
29075
- this.queryState = EMPTY_QUERY_STATE;
29609
+ this.queryState = EMPTY_CONVERSATION_RAIL_QUERY_STATE;
29610
+ this.emit();
29611
+ return;
29612
+ }
29613
+ const cached = this.sessionSectionsQueryCache.read(scopeKey);
29614
+ const cacheApplyStartedAt = cached && this.providerSwitchDiagnostics.hasPending(scopeKey) ? this.diagnosticNow() : null;
29615
+ if (cached && this.queryState.resolvedScopeKey !== scopeKey) {
29616
+ this.applyCachedFirstPages(scopeKey, cached);
29076
29617
  this.emit();
29618
+ }
29619
+ if (cached && !cached.stale && this.cacheNow() - cached.resolvedAtUnixMs <= this.cacheFreshMs) {
29620
+ this.providerSwitchDiagnostics.complete(scopeKey, {
29621
+ cacheStatus: "fresh",
29622
+ controllerApplyMs: cacheApplyStartedAt === null ? 0 : Math.max(0, this.diagnosticNow() - cacheApplyStartedAt),
29623
+ requestMs: 0,
29624
+ returnedSessionCount: cached.value.returnedSessionCount,
29625
+ sectionCount: cached.value.sectionCount,
29626
+ status: "ready"
29627
+ });
29077
29628
  return;
29078
29629
  }
29630
+ const cacheStatus = cached ? "stale" : "miss";
29631
+ this.providerSwitchDiagnostics.setCacheStatus(scopeKey, cacheStatus);
29079
29632
  this.pagingRequestSequence += 1;
29080
29633
  const requestSequence = this.pagingRequestSequence;
29081
29634
  const requestStartedAt = this.diagnosticNow();
29082
29635
  const wasResolvedForScope = this.queryState.resolvedScopeKey === scopeKey && this.queryState.sections !== null;
29083
29636
  this.cancelPagingRequests(false);
29084
- const abortController = new AbortController();
29085
- this.pagingAbortControllers.set("__first_pages__", abortController);
29086
29637
  this.queryState = {
29087
29638
  ...this.queryState,
29088
29639
  pending: true
29089
29640
  };
29090
29641
  this.emit();
29091
- void listSections({
29092
- agentTargetId: this.sectionAgentTargetId || void 0,
29093
- limitPerSection: SECTION_PAGE_SIZE,
29094
- signal: abortController.signal,
29095
- workspaceId: this.workspaceId
29096
- }).then((page) => {
29097
- if (abortController.signal.aborted || requestSequence !== this.pagingRequestSequence || scopeKey !== this.railSectionQueryKey) {
29642
+ void this.sessionSectionsQueryCache.request(scopeKey, async () => {
29643
+ const page = await listSections({
29644
+ agentTargetId: this.sectionAgentTargetId || void 0,
29645
+ limitPerSection: SECTION_PAGE_SIZE2,
29646
+ workspaceId: this.workspaceId
29647
+ });
29648
+ return cachedConversationRailQueryFromFirstPages(page, scopeKey);
29649
+ }).then((entry) => {
29650
+ if (requestSequence !== this.pagingRequestSequence || scopeKey !== this.railSectionQueryKey) {
29098
29651
  return;
29099
29652
  }
29100
29653
  const requestResolvedAt = this.diagnosticNow();
29101
- const sections = projectRuntimeSectionsToConversationRailMemberships({
29102
- pinned: page.pinned,
29103
- sections: page.sections
29104
- });
29105
- this.upsertSessions([
29106
- ...page.pinned?.sessions ?? [],
29107
- ...page.sections.flatMap((section) => section.sessions)
29108
- ]);
29109
- const sectionPageStates = /* @__PURE__ */ new Map();
29110
- if (page.pinned) {
29111
- sectionPageStates.set("pinned", pageState(page.pinned));
29112
- }
29113
- for (const section of page.sections) {
29114
- sectionPageStates.set(section.sectionKey, pageState(section));
29115
- }
29116
- this.queryState = {
29117
- pending: false,
29118
- reconcilingSessionIds: [],
29119
- resolvedScopeKey: scopeKey,
29120
- sectionPageStates,
29121
- sections
29122
- };
29654
+ this.applyCachedFirstPages(scopeKey, entry);
29123
29655
  this.emit();
29124
29656
  const completedAt = this.diagnosticNow();
29657
+ this.providerSwitchDiagnostics.complete(scopeKey, {
29658
+ cacheStatus,
29659
+ controllerApplyMs: Math.max(0, completedAt - requestResolvedAt),
29660
+ requestMs: Math.max(0, requestResolvedAt - requestStartedAt),
29661
+ returnedSessionCount: entry.value.returnedSessionCount,
29662
+ sectionCount: entry.value.sectionCount,
29663
+ status: "ready"
29664
+ });
29125
29665
  emitConversationRailFirstPagesDiagnostic({
29126
29666
  agentTargetId: this.sectionAgentTargetId || null,
29127
29667
  controllerApplyMs: Math.max(0, completedAt - requestResolvedAt),
@@ -29131,19 +29671,25 @@ var AgentGUIConversationRailQueryController = class {
29131
29671
  requestId: requestSequence,
29132
29672
  requestMs: Math.max(0, requestResolvedAt - requestStartedAt),
29133
29673
  refreshReason,
29134
- returnedSessionCount: (page.pinned?.sessions.length ?? 0) + page.sections.reduce(
29135
- (count, section) => count + section.sessions.length,
29136
- 0
29137
- ),
29138
- sectionCount: page.sections.length + (page.pinned ? 1 : 0),
29674
+ returnedSessionCount: entry.value.returnedSessionCount,
29675
+ sectionCount: entry.value.sectionCount,
29139
29676
  status: "ready",
29140
29677
  workspaceId: this.workspaceId
29141
29678
  });
29142
29679
  }).catch((error) => {
29143
- if (abortController.signal.aborted || requestSequence !== this.pagingRequestSequence || scopeKey !== this.railSectionQueryKey) {
29680
+ if (requestSequence !== this.pagingRequestSequence || scopeKey !== this.railSectionQueryKey) {
29144
29681
  return;
29145
29682
  }
29146
29683
  const failedAt = this.diagnosticNow();
29684
+ this.providerSwitchDiagnostics.complete(scopeKey, {
29685
+ cacheStatus,
29686
+ controllerApplyMs: 0,
29687
+ error,
29688
+ requestMs: Math.max(0, failedAt - requestStartedAt),
29689
+ returnedSessionCount: 0,
29690
+ sectionCount: 0,
29691
+ status: "error"
29692
+ });
29147
29693
  emitConversationRailFirstPagesDiagnostic({
29148
29694
  agentTargetId: this.sectionAgentTargetId || null,
29149
29695
  controllerApplyMs: 0,
@@ -29171,10 +29717,21 @@ var AgentGUIConversationRailQueryController = class {
29171
29717
  sections: []
29172
29718
  };
29173
29719
  this.emit();
29174
- }).finally(() => {
29175
- if (this.pagingAbortControllers.get("__first_pages__") === abortController) {
29176
- this.pagingAbortControllers.delete("__first_pages__");
29177
- }
29720
+ });
29721
+ }
29722
+ applyCachedFirstPages(scopeKey, entry) {
29723
+ this.queryState = applyCachedConversationRailQuery({
29724
+ cache: this.sessionSectionsQueryCache,
29725
+ entry,
29726
+ scopeKey,
29727
+ upsertSessions: (sessions) => this.upsertSessions(sessions)
29728
+ });
29729
+ }
29730
+ writeCurrentQueryCache() {
29731
+ writeConversationRailQueryCache({
29732
+ cache: this.sessionSectionsQueryCache,
29733
+ queryState: this.queryState,
29734
+ scopeKey: this.railSectionQueryKey
29178
29735
  });
29179
29736
  }
29180
29737
  requestSearch() {
@@ -29190,7 +29747,7 @@ var AgentGUIConversationRailQueryController = class {
29190
29747
  this.searchAbortController = null;
29191
29748
  const listSessionsPage = this.runtime.listSessionsPage;
29192
29749
  if (!this.searchRequestKey || !listSessionsPage) {
29193
- this.searchState = EMPTY_SEARCH_STATE;
29750
+ this.searchState = EMPTY_CONVERSATION_SEARCH_QUERY_STATE;
29194
29751
  this.emit();
29195
29752
  return;
29196
29753
  }
@@ -29199,14 +29756,14 @@ var AgentGUIConversationRailQueryController = class {
29199
29756
  const abortController = new AbortController();
29200
29757
  this.searchAbortController = abortController;
29201
29758
  this.searchState = {
29202
- ...EMPTY_SEARCH_STATE,
29759
+ ...EMPTY_CONVERSATION_SEARCH_QUERY_STATE,
29203
29760
  pending: true,
29204
29761
  requestKey
29205
29762
  };
29206
29763
  this.emit();
29207
29764
  void listSessionsPage({
29208
29765
  agentTargetId: this.sectionAgentTargetId || void 0,
29209
- limit: SEARCH_PAGE_SIZE,
29766
+ limit: 100,
29210
29767
  searchQuery: query,
29211
29768
  signal: abortController.signal,
29212
29769
  workspaceId: this.workspaceId
@@ -29231,7 +29788,7 @@ var AgentGUIConversationRailQueryController = class {
29231
29788
  return;
29232
29789
  }
29233
29790
  this.searchState = {
29234
- ...EMPTY_SEARCH_STATE,
29791
+ ...EMPTY_CONVERSATION_SEARCH_QUERY_STATE,
29235
29792
  failed: true,
29236
29793
  requestKey,
29237
29794
  resolvedQuery: query
@@ -29263,14 +29820,13 @@ var AgentGUIConversationRailQueryController = class {
29263
29820
  this.searchDebounceTask = null;
29264
29821
  }
29265
29822
  upsertSessions(sessions) {
29823
+ if (sessions.length === 0) return;
29266
29824
  this.ingestingSessions = true;
29267
29825
  try {
29268
- for (const session of sessions) {
29269
- this.engine.dispatch({ type: "session/upserted", session });
29270
- }
29826
+ this.engine.dispatch({ type: "session/snapshotReceived", sessions });
29271
29827
  } finally {
29272
29828
  this.ingestingSessions = false;
29273
- this.previousMembershipRecords = membershipRecords(
29829
+ this.previousMembershipRecords = projectConversationRailMembershipRecords(
29274
29830
  this.engine.getSnapshot()
29275
29831
  );
29276
29832
  }
@@ -29283,27 +29839,15 @@ var AgentGUIConversationRailQueryController = class {
29283
29839
  searchEnabled() {
29284
29840
  return Boolean(!this.scope?.previewMode && this.runtime.listSessionsPage);
29285
29841
  }
29286
- buildSnapshot() {
29287
- const searchResolved = this.searchState.requestKey === this.searchRequestKey && this.searchState.resolvedQuery === this.searchQuery;
29288
- return {
29289
- railSearch: {
29290
- enabled: this.searchEnabled(),
29291
- failed: searchResolved && this.searchState.failed,
29292
- hasMore: searchResolved && this.searchState.hasMore,
29293
- loadingMore: searchResolved && this.searchState.loadingMore,
29294
- pending: Boolean(this.searchQuery) && (!searchResolved || this.searchState.pending),
29295
- resolvedQuery: searchResolved ? this.searchState.resolvedQuery : "",
29296
- sessionIds: searchResolved ? this.searchState.sessionIds : []
29297
- },
29298
- runtimeSectionsEnabled: this.runtimeSectionsEnabled(),
29299
- runtimeRailMemberships: this.queryState.sections,
29300
- runtimeRailReconcilingSessionIds: this.queryState.reconcilingSessionIds,
29301
- runtimeRailSectionsPending: this.queryState.pending,
29302
- sectionPageStates: this.queryState.sectionPageStates
29303
- };
29304
- }
29305
29842
  emit() {
29306
- this.snapshot = this.buildSnapshot();
29843
+ this.snapshot = buildConversationRailQuerySnapshot({
29844
+ queryState: this.queryState,
29845
+ runtimeSectionsEnabled: this.runtimeSectionsEnabled(),
29846
+ searchEnabled: this.searchEnabled(),
29847
+ searchQuery: this.searchQuery,
29848
+ searchRequestKey: this.searchRequestKey,
29849
+ searchState: this.searchState
29850
+ });
29307
29851
  for (const listener of this.listeners) listener(this.snapshot);
29308
29852
  }
29309
29853
  cancelPagingRequests(incrementSequence = true) {
@@ -29319,44 +29863,13 @@ var AgentGUIConversationRailQueryController = class {
29319
29863
  this.unsubscribeEngine?.();
29320
29864
  this.unsubscribeEngine = null;
29321
29865
  this.cancelPagingRequests();
29866
+ this.targetedPageRefresher.cancel();
29322
29867
  this.clearSearchDebounceTimer();
29323
29868
  this.searchRequestSequence += 1;
29324
29869
  this.searchAbortController?.abort();
29325
29870
  this.searchAbortController = null;
29326
29871
  }
29327
29872
  };
29328
- function membershipRecords(state) {
29329
- const sessions = selectWorkspaceAgentConsumerSessions3(state);
29330
- const canonicalIds = new Set(
29331
- sessions.map((item) => item.session.agentSessionId)
29332
- );
29333
- return [
29334
- ...sessions.map((item) => ({
29335
- id: item.session.agentSessionId,
29336
- pinnedAtUnixMs: item.session.pinnedAtUnixMs ?? null
29337
- })),
29338
- ...selectPendingActivations3(state).filter(
29339
- (record) => record.mode === "new" && record.status !== "failed" && !canonicalIds.has(record.agentSessionId)
29340
- ).map((record) => ({
29341
- id: record.agentSessionId,
29342
- pinnedAtUnixMs: null,
29343
- projectionSource: "pending_activation"
29344
- }))
29345
- ];
29346
- }
29347
- function pageState(page) {
29348
- return {
29349
- hasMore: page.hasMore,
29350
- isLoading: false,
29351
- nextCursor: page.nextCursor ?? null,
29352
- totalCount: page.totalCount
29353
- };
29354
- }
29355
- function updateSectionPageState(current, sectionId, value) {
29356
- const next = new Map(current);
29357
- next.set(sectionId, value);
29358
- return next;
29359
- }
29360
29873
 
29361
29874
  // agent-gui/agentGuiNode/controller/useAgentGUIConversationRailQuery.ts
29362
29875
  function useAgentGUIConversationRailQuery({
@@ -29373,7 +29886,7 @@ function useAgentGUIConversationRailQuery({
29373
29886
  () => runtime.getSessionEngine(workspaceId),
29374
29887
  [runtime, workspaceId]
29375
29888
  );
29376
- const activeConversationIdRef = useRef35(activeConversationId);
29889
+ const activeConversationIdRef = useRef36(activeConversationId);
29377
29890
  activeConversationIdRef.current = activeConversationId;
29378
29891
  const controller = useMemo33(
29379
29892
  () => new AgentGUIConversationRailQueryController({
@@ -29477,16 +29990,16 @@ var AgentGUIConversationRailController = memo8(
29477
29990
  // agent-gui/agentGuiNode/view/AgentGUIDetailPane.tsx
29478
29991
  import {
29479
29992
  memo as memo12,
29480
- useCallback as useCallback45,
29993
+ useCallback as useCallback46,
29481
29994
  useEffect as useEffect34,
29482
29995
  useMemo as useMemo35,
29483
- useRef as useRef38,
29996
+ useRef as useRef39,
29484
29997
  useState as useState33
29485
29998
  } from "react";
29486
29999
  import { ScrollArea as ScrollArea2 } from "@tutti-os/ui-system/components";
29487
30000
 
29488
30001
  // agent-gui/agentGuiNode/view/agentGUIDetailModelHelpers.ts
29489
- import { useRef as useRef36 } from "react";
30002
+ import { useRef as useRef37 } from "react";
29490
30003
  function commandAppSource(command) {
29491
30004
  if (!command || typeof command !== "object" || !("source" in command)) {
29492
30005
  return null;
@@ -29566,7 +30079,7 @@ function slashStatusesEqual(left, right) {
29566
30079
  return (left.agentSessionId ?? null) === (right.agentSessionId ?? null) && (left.baseUrl ?? null) === (right.baseUrl ?? null) && (left.contextWindow?.usedTokens ?? null) === (right.contextWindow?.usedTokens ?? null) && (left.contextWindow?.totalTokens ?? null) === (right.contextWindow?.totalTokens ?? null) && slashStatusLimitsEqual(left.limits, right.limits) && Boolean(left.limitsLoading) === Boolean(right.limitsLoading) && Boolean(left.limitsUnavailable) === Boolean(right.limitsUnavailable);
29567
30080
  }
29568
30081
  function useStableSlashStatus(status) {
29569
- const statusRef = useRef36(null);
30082
+ const statusRef = useRef37(null);
29570
30083
  if (statusRef.current === null || !slashStatusesEqual(statusRef.current, status)) {
29571
30084
  statusRef.current = status;
29572
30085
  }
@@ -29608,6 +30121,11 @@ function resolveActiveConversationBusyStatus(input) {
29608
30121
  }
29609
30122
  return null;
29610
30123
  }
30124
+ function shouldShowAgentGUIStopButton(input) {
30125
+ if (input.isUnavailable || input.isAuthBlocked) return false;
30126
+ if (input.isCreatingConversation || input.isCancelPending) return true;
30127
+ return !input.isSubmitting && (input.isConversationBusy || input.hasPendingApproval || input.hasPendingInteractivePrompt || input.isInterrupting);
30128
+ }
29611
30129
  function buildAgentConversationHandoffPrompt(input) {
29612
30130
  const conversation = input.activeConversation;
29613
30131
  if (!conversation) {
@@ -29718,7 +30236,8 @@ function AgentGoalBanner({
29718
30236
  status,
29719
30237
  tokenBudget,
29720
30238
  tokensUsed,
29721
- timeUsedSeconds,
30239
+ durationMs,
30240
+ optimistic = false,
29722
30241
  labels,
29723
30242
  onEditObjective,
29724
30243
  onPauseGoal,
@@ -29729,7 +30248,7 @@ function AgentGoalBanner({
29729
30248
  const [editDraft, setEditDraft] = useState29(null);
29730
30249
  const normalizedStatus = normalizeGoalStatus(status);
29731
30250
  const isActive = normalizedStatus === "" || normalizedStatus === "active";
29732
- const serverSeconds = typeof timeUsedSeconds === "number" && timeUsedSeconds >= 0 ? Math.floor(timeUsedSeconds) : null;
30251
+ const serverSeconds = optimistic ? null : typeof durationMs === "number" && durationMs >= 0 ? Math.floor(durationMs / 1e3) : isActive ? 0 : null;
29733
30252
  const [localElapsed, setLocalElapsed] = useState29(0);
29734
30253
  useEffect32(() => {
29735
30254
  setLocalElapsed(0);
@@ -29899,8 +30418,9 @@ var AgentGUIBottomDockPane = memo9(function AgentGUIBottomDockPane2({
29899
30418
  const goalObjective = goal ? stringValue3(goal.objective) : "";
29900
30419
  const goalStatus = goal ? stringValue3(goal.status) : "";
29901
30420
  const goalTokenBudget = goal ? numberValue(goal.tokenBudget) : null;
29902
- const goalTokensUsed = goal ? numberValue(goal.tokensUsed) : null;
29903
- const goalTimeUsedSeconds = goal ? numberValue(goal.timeUsedSeconds) : null;
30421
+ const goalTokensUsed = goal ? numberValue(goal.tokens) : null;
30422
+ const goalDurationMs = goal ? numberValue(goal.durationMs) : null;
30423
+ const goalIsOptimistic = sessionChrome.rawState?.goalIsOptimistic === true;
29904
30424
  const showGoalBanner = isGoalBannerVisible(goalObjective, goalStatus);
29905
30425
  return /* @__PURE__ */ jsxs37(
29906
30426
  "div",
@@ -29976,7 +30496,8 @@ var AgentGUIBottomDockPane = memo9(function AgentGUIBottomDockPane2({
29976
30496
  status: goalStatus,
29977
30497
  tokenBudget: goalTokenBudget ?? void 0,
29978
30498
  tokensUsed: goalTokensUsed ?? void 0,
29979
- timeUsedSeconds: goalTimeUsedSeconds ?? void 0,
30499
+ durationMs: goalDurationMs ?? void 0,
30500
+ optimistic: goalIsOptimistic,
29980
30501
  labels: goalBannerLabels,
29981
30502
  onPauseGoal: goalPauseSupported ? () => onGoalControl("pause") : void 0,
29982
30503
  onResumeGoal: goalPauseSupported ? () => onGoalControl("resume") : void 0,
@@ -30162,10 +30683,10 @@ function setTimelineScrollTopWithUserTransition(element, top) {
30162
30683
 
30163
30684
  // agent-gui/agentGuiNode/view/useAgentGUIDetailScroll.ts
30164
30685
  import {
30165
- useCallback as useCallback44,
30686
+ useCallback as useCallback45,
30166
30687
  useEffect as useEffect33,
30167
30688
  useLayoutEffect as useLayoutEffect7,
30168
- useRef as useRef37,
30689
+ useRef as useRef38,
30169
30690
  useState as useState31
30170
30691
  } from "react";
30171
30692
  var AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX = 24;
@@ -30187,8 +30708,8 @@ function useAgentGUIDetailScroll(input) {
30187
30708
  } = input;
30188
30709
  const [isTimelineScrolledToTop, setIsTimelineScrolledToTop] = useState31(true);
30189
30710
  const [isTimelineScrolledToBottom, setIsTimelineScrolledToBottom] = useState31(true);
30190
- const bottomLockOwnerRef = useRef37(null);
30191
- const userScrollAwayIntentConversationRef = useRef37(null);
30711
+ const bottomLockOwnerRef = useRef38(null);
30712
+ const userScrollAwayIntentConversationRef = useRef38(null);
30192
30713
  useLayoutEffect7(() => {
30193
30714
  const timeline = timelineRef.current;
30194
30715
  if (!timeline) {
@@ -30470,7 +30991,7 @@ function useAgentGUIDetailScroll(input) {
30470
30991
  viewModel.detail.hasOlderMessages,
30471
30992
  viewModel.detail.isLoadingOlderMessages
30472
30993
  ]);
30473
- const scrollTimelineToBottom = useCallback44(() => {
30994
+ const scrollTimelineToBottom = useCallback45(() => {
30474
30995
  const timeline = timelineRef.current;
30475
30996
  const activeConversationId = timelineConversationId;
30476
30997
  if (!timeline || !activeConversationId) {
@@ -30592,7 +31113,10 @@ function useAgentGUIDetailModel(input) {
30592
31113
  conversation: targetConversation
30593
31114
  });
30594
31115
  const hasActiveConversation = viewModel.rail.activeConversationId !== null;
30595
- const selectedAgentTargetComingSoon = viewModel.rail.selectedAgentTarget?.disabled === true;
31116
+ const selectedAgentTargetComingSoon = isAgentGUIAgentTargetComingSoon(
31117
+ viewModel.rail.selectedAgentTarget,
31118
+ viewModel.rail.comingSoonProviders
31119
+ );
30596
31120
  const emptyProviderReadinessGate = !hasActiveConversation ? selectedAgentTargetComingSoon ? { status: "coming_soon" } : viewModel.readiness.providerReadinessGate : null;
30597
31121
  const activePrompt = viewModel.interaction.pendingInteractivePrompt ?? viewModel.interaction.pendingApproval;
30598
31122
  const activePromptRequestId = activePrompt?.requestId ?? null;
@@ -30682,7 +31206,17 @@ function useAgentGUIDetailModel(input) {
30682
31206
  const hasNonRetryableRecoveryFailure = sessionChrome.recovery?.kind === "failed" && sessionChrome.recovery.canRetry === false || sessionChrome.recovery?.kind === "resume-unavailable";
30683
31207
  const submitDisabled = hasNonRetryableRecoveryFailure || isCollaboratorConversation || !viewModel.composer.canSubmit && !canQueueWhileBusy;
30684
31208
  const composerDisabled = hasNonRetryableRecoveryFailure || isCollaboratorConversation || !canQueueWhileBusy && (viewModel.interaction.pendingApproval !== null || viewModel.interaction.pendingInteractivePrompt !== null || viewModel.composer.isSubmitting || viewModel.composer.isInterrupting || viewModel.composer.isCreatingConversation);
30685
- const showStopButton = !viewModel.composer.isSubmitting && viewModel.readiness.activeLiveState !== "failed" && sessionChrome.auth === null && (activeConversationTurnBusy || viewModel.interaction.pendingApproval !== null || viewModel.interaction.pendingInteractivePrompt !== null || viewModel.composer.isInterrupting);
31209
+ const showStopButton = shouldShowAgentGUIStopButton({
31210
+ hasPendingApproval: viewModel.interaction.pendingApproval !== null,
31211
+ hasPendingInteractivePrompt: viewModel.interaction.pendingInteractivePrompt !== null,
31212
+ isAuthBlocked: sessionChrome.auth !== null,
31213
+ isCancelPending: viewModel.composer.isCancelPending,
31214
+ isConversationBusy: activeConversationTurnBusy,
31215
+ isCreatingConversation: viewModel.composer.isCreatingConversation,
31216
+ isInterrupting: viewModel.composer.isInterrupting,
31217
+ isSubmitting: viewModel.composer.isSubmitting,
31218
+ isUnavailable: viewModel.readiness.activeLiveState === "failed"
31219
+ });
30686
31220
  const conversationFlowLabels = useMemo34(
30687
31221
  () => ({
30688
31222
  thinkingLabel: labels.thinkingLabel,
@@ -30767,6 +31301,7 @@ function useAgentGUIDetailModel(input) {
30767
31301
  const interactivePromptLabels = useMemo34(
30768
31302
  () => ({
30769
31303
  approvalLead: labels.approvalRequired,
31304
+ fileChangeApprovalLead: labels.fileChangeApprovalRequired,
30770
31305
  planLead: labels.planLead,
30771
31306
  planModes: labels.planModes,
30772
31307
  stayInPlan: labels.stayInPlan,
@@ -30786,6 +31321,7 @@ function useAgentGUIDetailModel(input) {
30786
31321
  [
30787
31322
  labels.answerPlaceholder,
30788
31323
  labels.approvalRequired,
31324
+ labels.fileChangeApprovalRequired,
30789
31325
  labels.feedbackPlaceholder,
30790
31326
  labels.nextQuestion,
30791
31327
  labels.planLead,
@@ -31161,11 +31697,11 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31161
31697
  renderProviderUnavailableState
31162
31698
  }) {
31163
31699
  "use memo";
31164
- const timelineRef = useRef38(null);
31165
- const bottomDockRef = useRef38(null);
31166
- const timelineScrollAnchorRef = useRef38(null);
31167
- const submittedPromptScrollConversationRef = useRef38(null);
31168
- const pendingPrependScrollAnchorRef = useRef38(null);
31700
+ const timelineRef = useRef39(null);
31701
+ const bottomDockRef = useRef39(null);
31702
+ const timelineScrollAnchorRef = useRef39(null);
31703
+ const submittedPromptScrollConversationRef = useRef39(null);
31704
+ const pendingPrependScrollAnchorRef = useRef39(null);
31169
31705
  const [
31170
31706
  bottomDockDismissedPromptRequestId,
31171
31707
  setBottomDockDismissedPromptRequestId
@@ -31206,7 +31742,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31206
31742
  slashStatusLimitsUnavailable,
31207
31743
  viewModel
31208
31744
  });
31209
- const handleInterruptCurrentTurn = useCallback45(() => {
31745
+ const handleInterruptCurrentTurn = useCallback46(() => {
31210
31746
  actions.interruptCurrentTurn(labels.noRunningResponse);
31211
31747
  }, [actions.interruptCurrentTurn, labels.noRunningResponse]);
31212
31748
  const submitApprovalOption = useStableEventCallback(
@@ -31226,14 +31762,14 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31226
31762
  const selectHomeComposerAgentTarget = useStableEventCallback(
31227
31763
  actions.selectHomeComposerAgentTarget
31228
31764
  );
31229
- const selectHomeComposerAgentTargetAndFocus = useCallback45(
31765
+ const selectHomeComposerAgentTargetAndFocus = useCallback46(
31230
31766
  (input) => {
31231
31767
  selectHomeComposerAgentTarget(input);
31232
31768
  onRequestComposerFocus();
31233
31769
  },
31234
31770
  [onRequestComposerFocus, selectHomeComposerAgentTarget]
31235
31771
  );
31236
- const handleSelectHomeSuggestion = useCallback45(
31772
+ const handleSelectHomeSuggestion = useCallback46(
31237
31773
  (prompt) => {
31238
31774
  updateDraftContent(
31239
31775
  updateAgentComposerDraft(viewModel.composer.draftContent, { prompt })
@@ -31241,7 +31777,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31241
31777
  },
31242
31778
  [updateDraftContent, viewModel.composer.draftContent]
31243
31779
  );
31244
- const handleHomeSuggestionAction = useCallback45(
31780
+ const handleHomeSuggestionAction = useCallback46(
31245
31781
  (action) => {
31246
31782
  if (action === "import-session") {
31247
31783
  window.dispatchEvent(
@@ -31256,7 +31792,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31256
31792
  const submitGuidancePrompt = useStableEventCallback(
31257
31793
  actions.submitGuidancePrompt
31258
31794
  );
31259
- const requestSubmittedPromptScrollToBottom = useCallback45(() => {
31795
+ const requestSubmittedPromptScrollToBottom = useCallback46(() => {
31260
31796
  const activeConversationId = viewModel.rail.activeConversationId;
31261
31797
  if (!activeConversationId) {
31262
31798
  return;
@@ -31264,7 +31800,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31264
31800
  submittedPromptScrollConversationRef.current = activeConversationId;
31265
31801
  pendingPrependScrollAnchorRef.current = null;
31266
31802
  }, [viewModel.rail.activeConversationId]);
31267
- const submitPromptAndScrollToBottom = useCallback45(
31803
+ const submitPromptAndScrollToBottom = useCallback46(
31268
31804
  (content, displayPrompt, options) => {
31269
31805
  requestSubmittedPromptScrollToBottom();
31270
31806
  if (displayPrompt === void 0) {
@@ -31275,7 +31811,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31275
31811
  },
31276
31812
  [requestSubmittedPromptScrollToBottom, submitPrompt]
31277
31813
  );
31278
- const submitGuidancePromptAndScrollToBottom = useCallback45(
31814
+ const submitGuidancePromptAndScrollToBottom = useCallback46(
31279
31815
  (content, displayPrompt) => {
31280
31816
  requestSubmittedPromptScrollToBottom();
31281
31817
  if (displayPrompt === void 0) {
@@ -31306,7 +31842,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31306
31842
  );
31307
31843
  const stableRequestGitBranches = useOptionalStableEventCallback(onRequestGitBranches);
31308
31844
  const authLogin = useOptionalStableEventCallback(onAgentProviderLogin);
31309
- const submitBottomDockInteractivePrompt = useCallback45(
31845
+ const submitBottomDockInteractivePrompt = useCallback46(
31310
31846
  (input) => {
31311
31847
  submitInteractivePrompt(input);
31312
31848
  setBottomDockDismissedPromptRequestId(input.requestId);
@@ -31396,7 +31932,7 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31396
31932
  providerSelectLabel: labels.providerSwitchLabel,
31397
31933
  handoffLabel: labels.handoffConversation,
31398
31934
  handoffMenuLabel: labels.handoffConversationMenu,
31399
- isInterrupting: viewModel.composer.isInterrupting,
31935
+ isInterrupting: viewModel.composer.isInterrupting || viewModel.composer.isCancelPending,
31400
31936
  isSendingTurn: isComposerSending,
31401
31937
  isSubmittingPrompt: viewModel.interaction.isRespondingApproval,
31402
31938
  uiLanguage,
@@ -31660,8 +32196,8 @@ var AgentGUIDetailPane = memo12(function AgentGUIDetailPane2({
31660
32196
  });
31661
32197
 
31662
32198
  // agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
31663
- import { memo as memo13, useCallback as useCallback46, useEffect as useEffect35, useRef as useRef39, useState as useState34 } from "react";
31664
- import { ConfirmationDialog as ConfirmationDialog2 } from "@tutti-os/ui-system";
32199
+ import { memo as memo13, useCallback as useCallback47, useEffect as useEffect35, useRef as useRef40, useState as useState34 } from "react";
32200
+ import { ConfirmationDialog as ConfirmationDialog2, Input as Input2 } from "@tutti-os/ui-system";
31665
32201
  import { jsx as jsx59, jsxs as jsxs43 } from "react/jsx-runtime";
31666
32202
  var AgentGUIRenameConversationDialog = memo13(
31667
32203
  function AgentGUIRenameConversationDialog2({
@@ -31674,9 +32210,9 @@ var AgentGUIRenameConversationDialog = memo13(
31674
32210
  "use memo";
31675
32211
  const [title, setTitle] = useState34("");
31676
32212
  const [isSaving, setIsSaving] = useState34(false);
31677
- const isSavingRef = useRef39(false);
31678
- const armedPointerActionRef = useRef39(null);
31679
- const inputRef = useRef39(null);
32213
+ const isSavingRef = useRef40(false);
32214
+ const armedPointerActionRef = useRef40(null);
32215
+ const inputRef = useRef40(null);
31680
32216
  const trimmedTitle = title.trim();
31681
32217
  useEffect35(() => {
31682
32218
  if (!open || !conversation) {
@@ -31698,12 +32234,12 @@ var AgentGUIRenameConversationDialog = memo13(
31698
32234
  }, 0);
31699
32235
  return () => window.clearTimeout(timer);
31700
32236
  }, [open, conversation?.id]);
31701
- const closeRenameDialog = useCallback46(() => {
32237
+ const closeRenameDialog = useCallback47(() => {
31702
32238
  if (!isSavingRef.current) {
31703
32239
  onOpenChange(false);
31704
32240
  }
31705
32241
  }, [onOpenChange]);
31706
- const confirmRename = useCallback46(() => {
32242
+ const confirmRename = useCallback47(() => {
31707
32243
  if (!conversation || isSavingRef.current || !trimmedTitle) {
31708
32244
  return;
31709
32245
  }
@@ -31822,11 +32358,12 @@ var AgentGUIRenameConversationDialog = memo13(
31822
32358
  onConfirm: confirmRename,
31823
32359
  onOpenChange,
31824
32360
  children: /* @__PURE__ */ jsx59(
31825
- "input",
32361
+ Input2,
31826
32362
  {
31827
32363
  ref: inputRef,
31828
32364
  "aria-label": labels.renameSessionTitle,
31829
- className: "h-10 w-full rounded-md border border-border bg-background px-3 text-[14px] font-medium leading-5 text-text-primary shadow-none outline-none transition-colors placeholder:text-text-tertiary focus:border-primary",
32365
+ className: "h-9",
32366
+ variant: "md",
31830
32367
  placeholder: labels.renameSessionPlaceholder,
31831
32368
  value: title,
31832
32369
  onChange: (event) => setTitle(event.currentTarget.value),
@@ -31904,7 +32441,7 @@ function AgentGUIReferencePickerSurface({
31904
32441
  }
31905
32442
 
31906
32443
  // agent-gui/agentGuiNode/view/useAgentGUIWorkspaceReferencePicker.ts
31907
- import { useCallback as useCallback47, useMemo as useMemo36, useRef as useRef40, useState as useState35 } from "react";
32444
+ import { useCallback as useCallback48, useMemo as useMemo36, useRef as useRef41, useState as useState35 } from "react";
31908
32445
  import { createRichTextMentionHref } from "@tutti-os/ui-rich-text/core";
31909
32446
  function useAgentGUIWorkspaceReferencePicker(input) {
31910
32447
  const {
@@ -31919,17 +32456,17 @@ function useAgentGUIWorkspaceReferencePicker(input) {
31919
32456
  } = input;
31920
32457
  const [workspaceReferencePickerOpen, setWorkspaceReferencePickerOpen] = useState35(false);
31921
32458
  const [workspaceReferencePickerTarget, setWorkspaceReferencePickerTarget] = useState35(null);
31922
- const workspaceReferencePickerResolverRef = useRef40(null);
32459
+ const workspaceReferencePickerResolverRef = useRef41(null);
31923
32460
  const emptyReferencePickResult = useMemo36(
31924
32461
  () => ({ files: [], mentionItems: [] }),
31925
32462
  []
31926
32463
  );
31927
32464
  const hostLocalFileSourceId = "host-local-file";
31928
- const isWorkspaceReferencePickerNodeSelectable = useCallback47(
32465
+ const isWorkspaceReferencePickerNodeSelectable = useCallback48(
31929
32466
  (node) => node.ref.sourceId !== hostLocalFileSourceId || node.kind === "file",
31930
32467
  [hostLocalFileSourceId]
31931
32468
  );
31932
- const requestWorkspaceReferences = useCallback47(
32469
+ const requestWorkspaceReferences = useCallback48(
31933
32470
  async (entity) => {
31934
32471
  if (previewMode) {
31935
32472
  return emptyReferencePickResult;
@@ -31961,13 +32498,13 @@ function useAgentGUIWorkspaceReferencePicker(input) {
31961
32498
  workspaceFileReferenceCopy
31962
32499
  ]
31963
32500
  );
31964
- const closeWorkspaceReferencePicker = useCallback47(() => {
32501
+ const closeWorkspaceReferencePicker = useCallback48(() => {
31965
32502
  workspaceReferencePickerResolverRef.current?.(emptyReferencePickResult);
31966
32503
  workspaceReferencePickerResolverRef.current = null;
31967
32504
  setWorkspaceReferencePickerOpen(false);
31968
32505
  setWorkspaceReferencePickerTarget(null);
31969
32506
  }, [emptyReferencePickResult]);
31970
- const settleReferencePicker = useCallback47(
32507
+ const settleReferencePicker = useCallback48(
31971
32508
  (result, addedFiles) => {
31972
32509
  workspaceReferencePickerResolverRef.current?.(result);
31973
32510
  workspaceReferencePickerResolverRef.current = null;
@@ -31979,13 +32516,13 @@ function useAgentGUIWorkspaceReferencePicker(input) {
31979
32516
  },
31980
32517
  [onWorkspaceFileReferencesAdded]
31981
32518
  );
31982
- const confirmWorkspaceReferencePicker = useCallback47(
32519
+ const confirmWorkspaceReferencePicker = useCallback48(
31983
32520
  (refs) => {
31984
32521
  settleReferencePicker({ files: refs, mentionItems: [] }, refs);
31985
32522
  },
31986
32523
  [settleReferencePicker]
31987
32524
  );
31988
- const confirmWorkspaceReferenceBundles = useCallback47(
32525
+ const confirmWorkspaceReferenceBundles = useCallback48(
31989
32526
  (result) => {
31990
32527
  const workspaceRefs = result.files.filter(
31991
32528
  (ref) => ref.sourceId !== hostLocalFileSourceId
@@ -32034,7 +32571,7 @@ function useAgentGUIWorkspaceReferencePicker(input) {
32034
32571
  }
32035
32572
 
32036
32573
  // agent-gui/agentGuiNode/engagement/useAgentGUINodeEngagement.ts
32037
- import { useRef as useRef42 } from "react";
32574
+ import { useRef as useRef43 } from "react";
32038
32575
 
32039
32576
  // agent-gui/agentGuiNode/engagement/projectAgentGUIEngagementContext.ts
32040
32577
  function projectAgentGUIEngagementContext(viewModel, composerReady) {
@@ -32066,7 +32603,7 @@ function createAgentGUIEngagementContextKey(input) {
32066
32603
  }
32067
32604
 
32068
32605
  // agent-gui/agentGuiNode/engagement/useAgentGUIPanelEngagement.ts
32069
- import { useEffect as useEffect36, useRef as useRef41 } from "react";
32606
+ import { useEffect as useEffect36, useRef as useRef42 } from "react";
32070
32607
 
32071
32608
  // agent-gui/agentGuiNode/engagement/AgentGUIPanelEngagementController.ts
32072
32609
  var AGENT_GUI_PANEL_EXPOSURE_DWELL_MS = 1e3;
@@ -32220,10 +32757,10 @@ function documentIsVisible() {
32220
32757
 
32221
32758
  // agent-gui/agentGuiNode/engagement/useAgentGUIPanelEngagement.ts
32222
32759
  function useAgentGUIPanelEngagement(input) {
32223
- const inputRef = useRef41(input);
32224
- const controllerRef = useRef41(null);
32225
- const intersectionRatioRef = useRef41(0);
32226
- const engagementRef = useRef41(null);
32760
+ const inputRef = useRef42(input);
32761
+ const controllerRef = useRef42(null);
32762
+ const intersectionRatioRef = useRef42(0);
32763
+ const engagementRef = useRef42(null);
32227
32764
  inputRef.current = input;
32228
32765
  if (!engagementRef.current) {
32229
32766
  engagementRef.current = {
@@ -32263,7 +32800,7 @@ function useAgentGUIPanelEngagement(input) {
32263
32800
 
32264
32801
  // agent-gui/agentGuiNode/engagement/useAgentGUINodeEngagement.ts
32265
32802
  function useAgentGUINodeEngagement(input) {
32266
- const layoutElementRef = useRef42(null);
32803
+ const layoutElementRef = useRef43(null);
32267
32804
  const projected = projectAgentGUIEngagementContext(
32268
32805
  input.viewModel,
32269
32806
  input.composerReady
@@ -32352,7 +32889,7 @@ function AgentGUINodeView({
32352
32889
  viewModel
32353
32890
  });
32354
32891
  const [providerManagerOpen, setProviderManagerOpen] = useState36(false);
32355
- const railResizeInteractionRef = useRef43(null);
32892
+ const railResizeInteractionRef = useRef44(null);
32356
32893
  const [isRailResizing, setIsRailResizing] = useState36(false);
32357
32894
  const [railResizeWidthPx, setRailResizeWidthPx] = useState36(
32358
32895
  null
@@ -32361,7 +32898,7 @@ function AgentGUINodeView({
32361
32898
  localComposerFocusRequestSequence,
32362
32899
  setLocalComposerFocusRequestSequence
32363
32900
  ] = useState36(0);
32364
- const handledNewConversationRequestSequenceRef = useRef43(
32901
+ const handledNewConversationRequestSequenceRef = useRef44(
32365
32902
  newConversationRequestSequence
32366
32903
  );
32367
32904
  const {
@@ -32411,10 +32948,10 @@ function AgentGUINodeView({
32411
32948
  );
32412
32949
  const openProjectFiles = useOptionalStableEventCallback(onLinkAction);
32413
32950
  const detailComposerFocusRequestSequence = localComposerFocusRequestSequence === 0 ? composerFocusRequestSequence : (composerFocusRequestSequence ?? 0) + localComposerFocusRequestSequence;
32414
- const requestComposerFocus = useCallback48(() => {
32951
+ const requestComposerFocus = useCallback49(() => {
32415
32952
  setLocalComposerFocusRequestSequence((current) => current + 1);
32416
32953
  }, []);
32417
- const requestCreateConversation = useCallback48(
32954
+ const requestCreateConversation = useCallback49(
32418
32955
  (options) => {
32419
32956
  if (previewMode) {
32420
32957
  return;
@@ -32464,14 +33001,14 @@ function AgentGUINodeView({
32464
33001
  workspaceAppIcons
32465
33002
  ]
32466
33003
  );
32467
- const clampConversationRailWidth = useCallback48(
33004
+ const clampConversationRailWidth = useCallback49(
32468
33005
  (widthPx) => Math.min(
32469
33006
  conversationRailMaxWidthPx,
32470
33007
  Math.max(conversationRailMinWidthPx, widthPx)
32471
33008
  ),
32472
33009
  [conversationRailMaxWidthPx, conversationRailMinWidthPx]
32473
33010
  );
32474
- const handleConversationRailResizePointerDown = useCallback48(
33011
+ const handleConversationRailResizePointerDown = useCallback49(
32475
33012
  (event) => {
32476
33013
  if (previewMode) {
32477
33014
  return;
@@ -32492,7 +33029,7 @@ function AgentGUINodeView({
32492
33029
  },
32493
33030
  [conversationRailCollapsed, conversationRailWidthPx, previewMode]
32494
33031
  );
32495
- const handleConversationRailResizePointerMove = useCallback48(
33032
+ const handleConversationRailResizePointerMove = useCallback49(
32496
33033
  (event) => {
32497
33034
  if (previewMode) {
32498
33035
  return;
@@ -32515,7 +33052,7 @@ function AgentGUINodeView({
32515
33052
  },
32516
33053
  [clampConversationRailWidth, previewMode]
32517
33054
  );
32518
- const endConversationRailResize = useCallback48(
33055
+ const endConversationRailResize = useCallback49(
32519
33056
  (event) => {
32520
33057
  const resizeState = railResizeInteractionRef.current;
32521
33058
  if (event && resizeState?.pointerId === event.pointerId && event.currentTarget.hasPointerCapture?.(event.pointerId)) {
@@ -32546,7 +33083,7 @@ function AgentGUINodeView({
32546
33083
  isRailResizing,
32547
33084
  railResizeWidthPx
32548
33085
  ]);
32549
- const handleConversationRailResizeKeyDown = useCallback48(
33086
+ const handleConversationRailResizeKeyDown = useCallback49(
32550
33087
  (event) => {
32551
33088
  if (previewMode) {
32552
33089
  return;
@@ -32606,15 +33143,15 @@ function AgentGUINodeView({
32606
33143
  (target) => target.disabled !== true && ((target.agentTargetId?.trim() ?? "") || (target.targetId?.trim() ?? ""))
32607
33144
  );
32608
33145
  const sectionAgentTargetFallbackId = enabledProviderTargets.length <= 1 ? viewModel.rail.selectedAgentTarget.agentTargetId?.trim() || viewModel.rail.selectedAgentTarget.targetId?.trim() || null : null;
32609
- const openAgentEnvSetup = useCallback48(() => {
33146
+ const openAgentEnvSetup = useCallback49(() => {
32610
33147
  openAgentEnvPanel({ provider: effectiveRailConfigProvider, focus: null });
32611
33148
  }, [effectiveRailConfigProvider]);
32612
- const openAgentSettings = useCallback48(() => {
33149
+ const openAgentSettings = useCallback49(() => {
32613
33150
  openWorkspaceSettingsPanel({ section: "agent" });
32614
33151
  }, []);
32615
33152
  const [renameConversationTarget, setRenameConversationTarget] = useState36(null);
32616
33153
  const [renameConversationDialogOpen, setRenameConversationDialogOpen] = useState36(false);
32617
- const requestRenameConversation = useCallback48(
33154
+ const requestRenameConversation = useCallback49(
32618
33155
  (conversation) => {
32619
33156
  setRenameConversationTarget(conversation);
32620
33157
  setRenameConversationDialogOpen(true);
@@ -33103,10 +33640,10 @@ function appendDockProbeUsageLines(probe, lines, isLoadingUsage, t) {
33103
33640
  // agent-gui/workspaceDesktop/view/AgentProbeInfoPopover.tsx
33104
33641
  import { Info as Info3 } from "lucide-react";
33105
33642
  import {
33106
- useCallback as useCallback49,
33643
+ useCallback as useCallback50,
33107
33644
  useEffect as useEffect38,
33108
33645
  useLayoutEffect as useLayoutEffect9,
33109
- useRef as useRef44,
33646
+ useRef as useRef45,
33110
33647
  useState as useState37
33111
33648
  } from "react";
33112
33649
  import { createPortal as createPortal5 } from "react-dom";
@@ -33144,24 +33681,24 @@ function AgentProbeInfoPopover({
33144
33681
  onOpen
33145
33682
  }) {
33146
33683
  "use memo";
33147
- const anchorRef = useRef44(null);
33148
- const popoverRef = useRef44(null);
33684
+ const anchorRef = useRef45(null);
33685
+ const popoverRef = useRef45(null);
33149
33686
  const [isOpen, setIsOpen] = useState37(false);
33150
33687
  const [popoverStyle, setPopoverStyle] = useState37(null);
33151
- const openPopover = useCallback49(() => {
33688
+ const openPopover = useCallback50(() => {
33152
33689
  if (!isOpen) {
33153
33690
  onOpen?.();
33154
33691
  }
33155
33692
  setIsOpen(true);
33156
33693
  }, [isOpen, onOpen]);
33157
- const closeIfPointerLeavesPopover = useCallback49((event) => {
33694
+ const closeIfPointerLeavesPopover = useCallback50((event) => {
33158
33695
  const nextTarget = event.relatedTarget;
33159
33696
  if (nextTarget instanceof Node && (anchorRef.current?.contains(nextTarget) || popoverRef.current?.contains(nextTarget))) {
33160
33697
  return;
33161
33698
  }
33162
33699
  setIsOpen(false);
33163
33700
  }, []);
33164
- const updatePopoverPosition = useCallback49(() => {
33701
+ const updatePopoverPosition = useCallback50(() => {
33165
33702
  const anchor = anchorRef.current;
33166
33703
  if (!anchor) {
33167
33704
  return;
@@ -33801,6 +34338,10 @@ function useAgentGUIViewLabels(input) {
33801
34338
  approvalRequired: t("agentHost.agentGui.approvalRequired", {
33802
34339
  provider: displayProviderLabel
33803
34340
  }),
34341
+ fileChangeApprovalRequired: t(
34342
+ "agentHost.agentGui.fileChangeApprovalRequired",
34343
+ { provider: displayProviderLabel }
34344
+ ),
33804
34345
  approvalUnavailable: t("agentHost.agentGui.approvalUnavailable"),
33805
34346
  authRequired: t("agentHost.agentGui.authRequired"),
33806
34347
  authLogin: t("agentHost.agentGui.authLogin"),
@@ -34295,13 +34836,13 @@ var AgentGUINode = memo14(function AgentGUINode2({
34295
34836
  () => typeof i18n?.t === "function" ? createWorkspaceFileManagerI18nRuntime(i18n) : null,
34296
34837
  [i18n]
34297
34838
  );
34298
- const handleLinkAction = useCallback50(
34839
+ const handleLinkAction = useCallback51(
34299
34840
  (action) => {
34300
34841
  onLinkAction?.(action);
34301
34842
  },
34302
34843
  [onLinkAction]
34303
34844
  );
34304
- const handleAgentProviderLogin = useCallback50(
34845
+ const handleAgentProviderLogin = useCallback51(
34305
34846
  (provider) => {
34306
34847
  const resolvedProvider = normalizeAgentGUIProviderIdentity(provider);
34307
34848
  onAgentProviderLogin?.(
@@ -34310,7 +34851,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
34310
34851
  },
34311
34852
  [onAgentProviderLogin, state.provider]
34312
34853
  );
34313
- const handleWorkspaceFileReferencesAdded = useCallback50(
34854
+ const handleWorkspaceFileReferencesAdded = useCallback51(
34314
34855
  (references) => {
34315
34856
  onWorkspaceFileReferencesAdded?.({
34316
34857
  provider: state.provider,
@@ -34319,7 +34860,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
34319
34860
  },
34320
34861
  [onWorkspaceFileReferencesAdded, state.provider]
34321
34862
  );
34322
- const handleDataChange = useCallback50(
34863
+ const handleDataChange = useCallback51(
34323
34864
  (updater) => {
34324
34865
  if (previewMode) {
34325
34866
  return;
@@ -34328,7 +34869,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
34328
34869
  },
34329
34870
  [onUpdateNode, previewMode]
34330
34871
  );
34331
- const handleConversationRailWidthChanged = useCallback50(
34872
+ const handleConversationRailWidthChanged = useCallback51(
34332
34873
  (widthPx) => {
34333
34874
  if (previewMode) {
34334
34875
  return;
@@ -34360,7 +34901,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
34360
34901
  }),
34361
34902
  []
34362
34903
  );
34363
- const toggleConversationRailCollapsed = useCallback50(() => {
34904
+ const toggleConversationRailCollapsed = useCallback51(() => {
34364
34905
  if (previewMode) {
34365
34906
  return;
34366
34907
  }
@@ -34369,7 +34910,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
34369
34910
  conversationRailCollapsed: current.conversationRailCollapsed !== true
34370
34911
  }));
34371
34912
  }, [onUpdateNode, previewMode]);
34372
- const handleConversationRailToggle = useCallback50(() => {
34913
+ const handleConversationRailToggle = useCallback51(() => {
34373
34914
  if (previewMode) {
34374
34915
  return;
34375
34916
  }
@@ -34428,7 +34969,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
34428
34969
  onRememberComposerDefaults,
34429
34970
  onShowMessage
34430
34971
  });
34431
- const handleCreateConversation = useCallback50(
34972
+ const handleCreateConversation = useCallback51(
34432
34973
  (...args) => {
34433
34974
  if (!previewMode) {
34434
34975
  onUpdateNode(
@@ -34552,13 +35093,13 @@ var AgentGUINode = memo14(function AgentGUINode2({
34552
35093
  previewMode,
34553
35094
  railStatusProvider
34554
35095
  ]);
34555
- const handleAgentProbeInfoOpen = useCallback50(() => {
35096
+ const handleAgentProbeInfoOpen = useCallback51(() => {
34556
35097
  if (previewMode || !onAgentProbeRefreshRequest) {
34557
35098
  return;
34558
35099
  }
34559
35100
  onAgentProbeRefreshRequest(activeProbeProvider, `agent-gui:${nodeId}`);
34560
35101
  }, [activeProbeProvider, nodeId, onAgentProbeRefreshRequest, previewMode]);
34561
- const handleAgentConfigMenuOpen = useCallback50(() => {
35102
+ const handleAgentConfigMenuOpen = useCallback51(() => {
34562
35103
  if (previewMode || !onAgentProbeRefreshRequest) {
34563
35104
  return;
34564
35105
  }
@@ -34573,7 +35114,7 @@ var AgentGUINode = memo14(function AgentGUINode2({
34573
35114
  previewMode,
34574
35115
  railStatusProvider
34575
35116
  ]);
34576
- const handleAgentUsageRefresh = useCallback50(() => {
35117
+ const handleAgentUsageRefresh = useCallback51(() => {
34577
35118
  if (previewMode || !onAgentProbeRefreshRequest) {
34578
35119
  return;
34579
35120
  }
@@ -34771,4 +35312,4 @@ export {
34771
35312
  resolveAgentGUIAgentTarget,
34772
35313
  AgentGUI
34773
35314
  };
34774
- //# sourceMappingURL=chunk-ZWY32ZKZ.js.map
35315
+ //# sourceMappingURL=chunk-KXZMIZ5H.js.map