@marktoflow/gui 2.0.3 → 2.0.4-alpha.1

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 (159) hide show
  1. package/README.md +5 -3
  2. package/dist/client/assets/index-DqVkoerZ.js +838 -0
  3. package/dist/client/assets/index-DqVkoerZ.js.map +1 -0
  4. package/dist/client/assets/{index-DipWdkNl.css → index-eEWndJyn.css} +1 -1
  5. package/dist/client/index.html +2 -2
  6. package/dist/server/routes/execute.js +43 -8
  7. package/dist/server/routes/execute.js.map +1 -1
  8. package/dist/server/routes/tools.js +30 -884
  9. package/dist/server/routes/tools.js.map +1 -1
  10. package/dist/server/routes/workflows.js +24 -5
  11. package/dist/server/routes/workflows.js.map +1 -1
  12. package/dist/server/services/WorkflowService.js +15 -6
  13. package/dist/server/services/WorkflowService.js.map +1 -1
  14. package/dist/server/services/agents/openai-provider.js +31 -1
  15. package/dist/server/services/agents/openai-provider.js.map +1 -1
  16. package/dist/shared/constants.js +42 -0
  17. package/dist/shared/constants.js.map +1 -1
  18. package/package.json +21 -6
  19. package/coverage/base.css +0 -224
  20. package/coverage/block-navigation.js +0 -87
  21. package/coverage/client/App.tsx.html +0 -2230
  22. package/coverage/client/components/Accessibility/LiveRegion.tsx.html +0 -166
  23. package/coverage/client/components/Accessibility/SkipNav.tsx.html +0 -106
  24. package/coverage/client/components/Accessibility/index.html +0 -131
  25. package/coverage/client/components/Admin/AuditViewer.tsx.html +0 -214
  26. package/coverage/client/components/Admin/EnvironmentSwitcher.tsx.html +0 -187
  27. package/coverage/client/components/Admin/RoleManager.tsx.html +0 -250
  28. package/coverage/client/components/Admin/SecretsVault.tsx.html +0 -241
  29. package/coverage/client/components/Admin/index.html +0 -161
  30. package/coverage/client/components/Canvas/AlignmentTools.tsx.html +0 -694
  31. package/coverage/client/components/Canvas/Canvas.tsx.html +0 -1513
  32. package/coverage/client/components/Canvas/DataPreviewBadge.tsx.html +0 -307
  33. package/coverage/client/components/Canvas/ExecutionInputDialog.tsx.html +0 -769
  34. package/coverage/client/components/Canvas/ExecutionOverlay.tsx.html +0 -2938
  35. package/coverage/client/components/Canvas/ForEachNode.tsx.html +0 -568
  36. package/coverage/client/components/Canvas/GroupNode.tsx.html +0 -421
  37. package/coverage/client/components/Canvas/IfElseNode.tsx.html +0 -508
  38. package/coverage/client/components/Canvas/InlineEditor.tsx.html +0 -472
  39. package/coverage/client/components/Canvas/NodeContextMenu.tsx.html +0 -661
  40. package/coverage/client/components/Canvas/NodeTooltip.tsx.html +0 -316
  41. package/coverage/client/components/Canvas/OutputNode.tsx.html +0 -418
  42. package/coverage/client/components/Canvas/ParallelNode.tsx.html +0 -556
  43. package/coverage/client/components/Canvas/StepNode.tsx.html +0 -463
  44. package/coverage/client/components/Canvas/StickyNoteNode.tsx.html +0 -442
  45. package/coverage/client/components/Canvas/SubWorkflowNode.tsx.html +0 -508
  46. package/coverage/client/components/Canvas/SwitchNode.tsx.html +0 -640
  47. package/coverage/client/components/Canvas/Toolbar.tsx.html +0 -1030
  48. package/coverage/client/components/Canvas/TransformNode.tsx.html +0 -667
  49. package/coverage/client/components/Canvas/TriggerNode.tsx.html +0 -469
  50. package/coverage/client/components/Canvas/TryCatchNode.tsx.html +0 -577
  51. package/coverage/client/components/Canvas/WhileNode.tsx.html +0 -595
  52. package/coverage/client/components/Canvas/index.html +0 -446
  53. package/coverage/client/components/Canvas/index.ts.html +0 -157
  54. package/coverage/client/components/Collaboration/ActivityFeed.tsx.html +0 -253
  55. package/coverage/client/components/Collaboration/CommentThread.tsx.html +0 -397
  56. package/coverage/client/components/Collaboration/LockIndicator.tsx.html +0 -172
  57. package/coverage/client/components/Collaboration/PresenceIndicator.tsx.html +0 -214
  58. package/coverage/client/components/Collaboration/index.html +0 -161
  59. package/coverage/client/components/CommandPalette/CommandItem.tsx.html +0 -313
  60. package/coverage/client/components/CommandPalette/CommandPalette.tsx.html +0 -685
  61. package/coverage/client/components/CommandPalette/index.html +0 -131
  62. package/coverage/client/components/Debug/VariableInspector.tsx.html +0 -529
  63. package/coverage/client/components/Debug/index.html +0 -116
  64. package/coverage/client/components/Editor/InputsEditor.tsx.html +0 -1459
  65. package/coverage/client/components/Editor/NewStepWizard.tsx.html +0 -1117
  66. package/coverage/client/components/Editor/StepEditor.tsx.html +0 -1681
  67. package/coverage/client/components/Editor/YamlEditor.tsx.html +0 -565
  68. package/coverage/client/components/Editor/index.html +0 -161
  69. package/coverage/client/components/Execution/TimelineView.tsx.html +0 -397
  70. package/coverage/client/components/Execution/index.html +0 -116
  71. package/coverage/client/components/Onboarding/OnboardingTour.tsx.html +0 -265
  72. package/coverage/client/components/Onboarding/index.html +0 -116
  73. package/coverage/client/components/Panels/PropertiesPanel.tsx.html +0 -2035
  74. package/coverage/client/components/Panels/ValidationPanel.tsx.html +0 -856
  75. package/coverage/client/components/Panels/index.html +0 -131
  76. package/coverage/client/components/Prompt/ChangePreview.tsx.html +0 -928
  77. package/coverage/client/components/Prompt/PromptHistoryPanel.tsx.html +0 -712
  78. package/coverage/client/components/Prompt/PromptInput.tsx.html +0 -415
  79. package/coverage/client/components/Prompt/index.html +0 -146
  80. package/coverage/client/components/Settings/ProviderSwitcher.tsx.html +0 -1306
  81. package/coverage/client/components/Settings/SettingsPanel.tsx.html +0 -355
  82. package/coverage/client/components/Settings/controls/SettingNumber.tsx.html +0 -211
  83. package/coverage/client/components/Settings/controls/SettingSelect.tsx.html +0 -196
  84. package/coverage/client/components/Settings/controls/SettingToggle.tsx.html +0 -199
  85. package/coverage/client/components/Settings/controls/index.html +0 -146
  86. package/coverage/client/components/Settings/index.html +0 -131
  87. package/coverage/client/components/Settings/sections/AISettings.tsx.html +0 -154
  88. package/coverage/client/components/Settings/sections/CanvasSettings.tsx.html +0 -220
  89. package/coverage/client/components/Settings/sections/EditorSettings.tsx.html +0 -208
  90. package/coverage/client/components/Settings/sections/ExecutionSettings.tsx.html +0 -172
  91. package/coverage/client/components/Settings/sections/GeneralSettings.tsx.html +0 -151
  92. package/coverage/client/components/Settings/sections/NotificationSettings.tsx.html +0 -190
  93. package/coverage/client/components/Settings/sections/index.html +0 -191
  94. package/coverage/client/components/Sidebar/ImportDialog.tsx.html +0 -856
  95. package/coverage/client/components/Sidebar/NewWorkflowDialog.tsx.html +0 -694
  96. package/coverage/client/components/Sidebar/Sidebar.tsx.html +0 -1456
  97. package/coverage/client/components/Sidebar/index.html +0 -146
  98. package/coverage/client/components/Templates/TemplateCard.tsx.html +0 -181
  99. package/coverage/client/components/Templates/TemplateGallery.tsx.html +0 -307
  100. package/coverage/client/components/Templates/index.html +0 -131
  101. package/coverage/client/components/Versions/DiffViewer.tsx.html +0 -220
  102. package/coverage/client/components/Versions/VersionHistory.tsx.html +0 -352
  103. package/coverage/client/components/Versions/index.html +0 -131
  104. package/coverage/client/components/common/Breadcrumb.tsx.html +0 -205
  105. package/coverage/client/components/common/Button.tsx.html +0 -289
  106. package/coverage/client/components/common/ContextMenu.tsx.html +0 -691
  107. package/coverage/client/components/common/KeyboardShortcuts.tsx.html +0 -541
  108. package/coverage/client/components/common/Modal.tsx.html +0 -364
  109. package/coverage/client/components/common/Tabs.tsx.html +0 -256
  110. package/coverage/client/components/common/ThemeToggle.tsx.html +0 -301
  111. package/coverage/client/components/common/index.html +0 -206
  112. package/coverage/client/components/index.html +0 -116
  113. package/coverage/client/components/index.ts.html +0 -181
  114. package/coverage/client/hooks/index.html +0 -176
  115. package/coverage/client/hooks/index.ts.html +0 -97
  116. package/coverage/client/hooks/useAIPrompt.ts.html +0 -409
  117. package/coverage/client/hooks/useCanvas.ts.html +0 -739
  118. package/coverage/client/hooks/useWebSocket.ts.html +0 -580
  119. package/coverage/client/hooks/useWorkflow.ts.html +0 -502
  120. package/coverage/client/index.html +0 -131
  121. package/coverage/client/main.tsx.html +0 -115
  122. package/coverage/client/stores/agentStore.ts.html +0 -421
  123. package/coverage/client/stores/canvasStore.ts.html +0 -1129
  124. package/coverage/client/stores/collaborationStore.ts.html +0 -544
  125. package/coverage/client/stores/commandStore.ts.html +0 -610
  126. package/coverage/client/stores/editorStore.ts.html +0 -484
  127. package/coverage/client/stores/executionStore.ts.html +0 -1594
  128. package/coverage/client/stores/governanceStore.ts.html +0 -493
  129. package/coverage/client/stores/index.html +0 -341
  130. package/coverage/client/stores/index.ts.html +0 -112
  131. package/coverage/client/stores/layoutStore.ts.html +0 -439
  132. package/coverage/client/stores/navigationStore.ts.html +0 -232
  133. package/coverage/client/stores/onboardingStore.ts.html +0 -247
  134. package/coverage/client/stores/promptStore.ts.html +0 -430
  135. package/coverage/client/stores/settingsStore.ts.html +0 -472
  136. package/coverage/client/stores/themeStore.ts.html +0 -271
  137. package/coverage/client/stores/versionStore.ts.html +0 -340
  138. package/coverage/client/stores/workflowStore.ts.html +0 -739
  139. package/coverage/client/utils/applyDagreLayout.ts.html +0 -286
  140. package/coverage/client/utils/cn.ts.html +0 -112
  141. package/coverage/client/utils/index.html +0 -206
  142. package/coverage/client/utils/index.ts.html +0 -97
  143. package/coverage/client/utils/platform.ts.html +0 -223
  144. package/coverage/client/utils/serviceIcons.tsx.html +0 -376
  145. package/coverage/client/utils/stepValidation.ts.html +0 -550
  146. package/coverage/client/utils/workflowToGraph.ts.html +0 -1624
  147. package/coverage/coverage-final.json +0 -107
  148. package/coverage/favicon.png +0 -0
  149. package/coverage/index.html +0 -461
  150. package/coverage/prettify.css +0 -1
  151. package/coverage/prettify.js +0 -2
  152. package/coverage/shared/constants.ts.html +0 -655
  153. package/coverage/shared/index.html +0 -146
  154. package/coverage/shared/settings.ts.html +0 -406
  155. package/coverage/shared/types.ts.html +0 -622
  156. package/coverage/sort-arrow-sprite.png +0 -0
  157. package/coverage/sorter.js +0 -210
  158. package/dist/client/assets/index-DtX_BPDj.js +0 -833
  159. package/dist/client/assets/index-DtX_BPDj.js.map +0 -1
@@ -1,2230 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for client/App.tsx</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">client</a> App.tsx</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>0/502</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>0/502</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-no">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-no">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-no">&nbsp;</span>
825
- <span class="cline-any cline-no">&nbsp;</span>
826
- <span class="cline-any cline-no">&nbsp;</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-no">&nbsp;</span>
844
- <span class="cline-any cline-no">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-no">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-no">&nbsp;</span>
850
- <span class="cline-any cline-no">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-no">&nbsp;</span>
856
- <span class="cline-any cline-no">&nbsp;</span>
857
- <span class="cline-any cline-no">&nbsp;</span>
858
- <span class="cline-any cline-no">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-no">&nbsp;</span>
861
- <span class="cline-any cline-no">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-no">&nbsp;</span>
865
- <span class="cline-any cline-no">&nbsp;</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-no">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-no">&nbsp;</span>
875
- <span class="cline-any cline-no">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
877
- <span class="cline-any cline-no">&nbsp;</span>
878
- <span class="cline-any cline-no">&nbsp;</span>
879
- <span class="cline-any cline-no">&nbsp;</span>
880
- <span class="cline-any cline-no">&nbsp;</span>
881
- <span class="cline-any cline-no">&nbsp;</span>
882
- <span class="cline-any cline-no">&nbsp;</span>
883
- <span class="cline-any cline-no">&nbsp;</span>
884
- <span class="cline-any cline-no">&nbsp;</span>
885
- <span class="cline-any cline-no">&nbsp;</span>
886
- <span class="cline-any cline-no">&nbsp;</span>
887
- <span class="cline-any cline-no">&nbsp;</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&nbsp;</span>
892
- <span class="cline-any cline-no">&nbsp;</span>
893
- <span class="cline-any cline-no">&nbsp;</span>
894
- <span class="cline-any cline-no">&nbsp;</span>
895
- <span class="cline-any cline-no">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-no">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-no">&nbsp;</span>
907
- <span class="cline-any cline-no">&nbsp;</span>
908
- <span class="cline-any cline-no">&nbsp;</span>
909
- <span class="cline-any cline-no">&nbsp;</span>
910
- <span class="cline-any cline-no">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
912
- <span class="cline-any cline-no">&nbsp;</span>
913
- <span class="cline-any cline-no">&nbsp;</span>
914
- <span class="cline-any cline-no">&nbsp;</span>
915
- <span class="cline-any cline-no">&nbsp;</span>
916
- <span class="cline-any cline-no">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-no">&nbsp;</span>
921
- <span class="cline-any cline-no">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-no">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
926
- <span class="cline-any cline-no">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-no">&nbsp;</span>
929
- <span class="cline-any cline-no">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-no">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-no">&nbsp;</span>
935
- <span class="cline-any cline-no">&nbsp;</span>
936
- <span class="cline-any cline-no">&nbsp;</span>
937
- <span class="cline-any cline-no">&nbsp;</span>
938
- <span class="cline-any cline-no">&nbsp;</span>
939
- <span class="cline-any cline-no">&nbsp;</span>
940
- <span class="cline-any cline-no">&nbsp;</span>
941
- <span class="cline-any cline-no">&nbsp;</span>
942
- <span class="cline-any cline-neutral">&nbsp;</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-no">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-neutral">&nbsp;</span>
949
- <span class="cline-any cline-no">&nbsp;</span>
950
- <span class="cline-any cline-no">&nbsp;</span>
951
- <span class="cline-any cline-no">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-no">&nbsp;</span>
959
- <span class="cline-any cline-no">&nbsp;</span>
960
- <span class="cline-any cline-neutral">&nbsp;</span>
961
- <span class="cline-any cline-no">&nbsp;</span>
962
- <span class="cline-any cline-no">&nbsp;</span>
963
- <span class="cline-any cline-no">&nbsp;</span>
964
- <span class="cline-any cline-no">&nbsp;</span>
965
- <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-no">&nbsp;</span>
967
- <span class="cline-any cline-no">&nbsp;</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-no">&nbsp;</span>
970
- <span class="cline-any cline-no">&nbsp;</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-no">&nbsp;</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-no">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-no">&nbsp;</span>
978
- <span class="cline-any cline-no">&nbsp;</span>
979
- <span class="cline-any cline-no">&nbsp;</span>
980
- <span class="cline-any cline-no">&nbsp;</span>
981
- <span class="cline-any cline-no">&nbsp;</span>
982
- <span class="cline-any cline-no">&nbsp;</span>
983
- <span class="cline-any cline-no">&nbsp;</span>
984
- <span class="cline-any cline-no">&nbsp;</span>
985
- <span class="cline-any cline-no">&nbsp;</span>
986
- <span class="cline-any cline-no">&nbsp;</span>
987
- <span class="cline-any cline-no">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-no">&nbsp;</span>
991
- <span class="cline-any cline-no">&nbsp;</span>
992
- <span class="cline-any cline-no">&nbsp;</span>
993
- <span class="cline-any cline-no">&nbsp;</span>
994
- <span class="cline-any cline-no">&nbsp;</span>
995
- <span class="cline-any cline-no">&nbsp;</span>
996
- <span class="cline-any cline-no">&nbsp;</span>
997
- <span class="cline-any cline-neutral">&nbsp;</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-no">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-no">&nbsp;</span>
1002
- <span class="cline-any cline-no">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-neutral">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-no">&nbsp;</span>
1007
- <span class="cline-any cline-no">&nbsp;</span>
1008
- <span class="cline-any cline-neutral">&nbsp;</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-neutral">&nbsp;</span>
1013
- <span class="cline-any cline-no">&nbsp;</span>
1014
- <span class="cline-any cline-no">&nbsp;</span>
1015
- <span class="cline-any cline-no">&nbsp;</span>
1016
- <span class="cline-any cline-no">&nbsp;</span>
1017
- <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-neutral">&nbsp;</span>
1019
- <span class="cline-any cline-no">&nbsp;</span>
1020
- <span class="cline-any cline-no">&nbsp;</span>
1021
- <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-neutral">&nbsp;</span>
1023
- <span class="cline-any cline-no">&nbsp;</span>
1024
- <span class="cline-any cline-neutral">&nbsp;</span>
1025
- <span class="cline-any cline-neutral">&nbsp;</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-no">&nbsp;</span>
1028
- <span class="cline-any cline-no">&nbsp;</span>
1029
- <span class="cline-any cline-neutral">&nbsp;</span>
1030
- <span class="cline-any cline-neutral">&nbsp;</span>
1031
- <span class="cline-any cline-no">&nbsp;</span>
1032
- <span class="cline-any cline-no">&nbsp;</span>
1033
- <span class="cline-any cline-no">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-no">&nbsp;</span>
1037
- <span class="cline-any cline-no">&nbsp;</span>
1038
- <span class="cline-any cline-no">&nbsp;</span>
1039
- <span class="cline-any cline-no">&nbsp;</span>
1040
- <span class="cline-any cline-neutral">&nbsp;</span>
1041
- <span class="cline-any cline-no">&nbsp;</span>
1042
- <span class="cline-any cline-no">&nbsp;</span>
1043
- <span class="cline-any cline-no">&nbsp;</span>
1044
- <span class="cline-any cline-no">&nbsp;</span>
1045
- <span class="cline-any cline-no">&nbsp;</span>
1046
- <span class="cline-any cline-neutral">&nbsp;</span>
1047
- <span class="cline-any cline-neutral">&nbsp;</span>
1048
- <span class="cline-any cline-no">&nbsp;</span>
1049
- <span class="cline-any cline-no">&nbsp;</span>
1050
- <span class="cline-any cline-neutral">&nbsp;</span>
1051
- <span class="cline-any cline-no">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-no">&nbsp;</span>
1054
- <span class="cline-any cline-no">&nbsp;</span>
1055
- <span class="cline-any cline-no">&nbsp;</span>
1056
- <span class="cline-any cline-no">&nbsp;</span>
1057
- <span class="cline-any cline-no">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-no">&nbsp;</span>
1062
- <span class="cline-any cline-no">&nbsp;</span>
1063
- <span class="cline-any cline-no">&nbsp;</span>
1064
- <span class="cline-any cline-no">&nbsp;</span>
1065
- <span class="cline-any cline-no">&nbsp;</span>
1066
- <span class="cline-any cline-no">&nbsp;</span>
1067
- <span class="cline-any cline-no">&nbsp;</span>
1068
- <span class="cline-any cline-no">&nbsp;</span>
1069
- <span class="cline-any cline-neutral">&nbsp;</span>
1070
- <span class="cline-any cline-no">&nbsp;</span>
1071
- <span class="cline-any cline-neutral">&nbsp;</span>
1072
- <span class="cline-any cline-neutral">&nbsp;</span>
1073
- <span class="cline-any cline-no">&nbsp;</span>
1074
- <span class="cline-any cline-no">&nbsp;</span>
1075
- <span class="cline-any cline-no">&nbsp;</span>
1076
- <span class="cline-any cline-no">&nbsp;</span>
1077
- <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-no">&nbsp;</span>
1079
- <span class="cline-any cline-neutral">&nbsp;</span>
1080
- <span class="cline-any cline-no">&nbsp;</span>
1081
- <span class="cline-any cline-no">&nbsp;</span>
1082
- <span class="cline-any cline-no">&nbsp;</span>
1083
- <span class="cline-any cline-neutral">&nbsp;</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span>
1085
- <span class="cline-any cline-no">&nbsp;</span>
1086
- <span class="cline-any cline-no">&nbsp;</span>
1087
- <span class="cline-any cline-no">&nbsp;</span>
1088
- <span class="cline-any cline-no">&nbsp;</span>
1089
- <span class="cline-any cline-no">&nbsp;</span>
1090
- <span class="cline-any cline-no">&nbsp;</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-no">&nbsp;</span>
1095
- <span class="cline-any cline-no">&nbsp;</span>
1096
- <span class="cline-any cline-no">&nbsp;</span>
1097
- <span class="cline-any cline-no">&nbsp;</span>
1098
- <span class="cline-any cline-no">&nbsp;</span>
1099
- <span class="cline-any cline-no">&nbsp;</span>
1100
- <span class="cline-any cline-no">&nbsp;</span>
1101
- <span class="cline-any cline-no">&nbsp;</span>
1102
- <span class="cline-any cline-no">&nbsp;</span>
1103
- <span class="cline-any cline-no">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-no">&nbsp;</span>
1106
- <span class="cline-any cline-no">&nbsp;</span>
1107
- <span class="cline-any cline-no">&nbsp;</span>
1108
- <span class="cline-any cline-no">&nbsp;</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-no">&nbsp;</span>
1112
- <span class="cline-any cline-no">&nbsp;</span>
1113
- <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-neutral">&nbsp;</span>
1115
- <span class="cline-any cline-no">&nbsp;</span>
1116
- <span class="cline-any cline-no">&nbsp;</span>
1117
- <span class="cline-any cline-no">&nbsp;</span>
1118
- <span class="cline-any cline-neutral">&nbsp;</span>
1119
- <span class="cline-any cline-neutral">&nbsp;</span>
1120
- <span class="cline-any cline-no">&nbsp;</span>
1121
- <span class="cline-any cline-neutral">&nbsp;</span>
1122
- <span class="cline-any cline-no">&nbsp;</span>
1123
- <span class="cline-any cline-no">&nbsp;</span>
1124
- <span class="cline-any cline-no">&nbsp;</span>
1125
- <span class="cline-any cline-no">&nbsp;</span>
1126
- <span class="cline-any cline-no">&nbsp;</span>
1127
- <span class="cline-any cline-no">&nbsp;</span>
1128
- <span class="cline-any cline-no">&nbsp;</span>
1129
- <span class="cline-any cline-no">&nbsp;</span>
1130
- <span class="cline-any cline-no">&nbsp;</span>
1131
- <span class="cline-any cline-no">&nbsp;</span>
1132
- <span class="cline-any cline-no">&nbsp;</span>
1133
- <span class="cline-any cline-no">&nbsp;</span>
1134
- <span class="cline-any cline-no">&nbsp;</span>
1135
- <span class="cline-any cline-no">&nbsp;</span>
1136
- <span class="cline-any cline-no">&nbsp;</span>
1137
- <span class="cline-any cline-no">&nbsp;</span>
1138
- <span class="cline-any cline-no">&nbsp;</span>
1139
- <span class="cline-any cline-no">&nbsp;</span>
1140
- <span class="cline-any cline-no">&nbsp;</span>
1141
- <span class="cline-any cline-no">&nbsp;</span>
1142
- <span class="cline-any cline-no">&nbsp;</span>
1143
- <span class="cline-any cline-no">&nbsp;</span>
1144
- <span class="cline-any cline-neutral">&nbsp;</span>
1145
- <span class="cline-any cline-neutral">&nbsp;</span>
1146
- <span class="cline-any cline-neutral">&nbsp;</span>
1147
- <span class="cline-any cline-no">&nbsp;</span>
1148
- <span class="cline-any cline-no">&nbsp;</span>
1149
- <span class="cline-any cline-no">&nbsp;</span>
1150
- <span class="cline-any cline-no">&nbsp;</span>
1151
- <span class="cline-any cline-no">&nbsp;</span>
1152
- <span class="cline-any cline-neutral">&nbsp;</span>
1153
- <span class="cline-any cline-neutral">&nbsp;</span>
1154
- <span class="cline-any cline-no">&nbsp;</span>
1155
- <span class="cline-any cline-no">&nbsp;</span>
1156
- <span class="cline-any cline-no">&nbsp;</span>
1157
- <span class="cline-any cline-no">&nbsp;</span>
1158
- <span class="cline-any cline-no">&nbsp;</span>
1159
- <span class="cline-any cline-neutral">&nbsp;</span>
1160
- <span class="cline-any cline-neutral">&nbsp;</span>
1161
- <span class="cline-any cline-no">&nbsp;</span>
1162
- <span class="cline-any cline-no">&nbsp;</span>
1163
- <span class="cline-any cline-no">&nbsp;</span>
1164
- <span class="cline-any cline-no">&nbsp;</span>
1165
- <span class="cline-any cline-no">&nbsp;</span>
1166
- <span class="cline-any cline-no">&nbsp;</span>
1167
- <span class="cline-any cline-no">&nbsp;</span>
1168
- <span class="cline-any cline-no">&nbsp;</span>
1169
- <span class="cline-any cline-neutral">&nbsp;</span>
1170
- <span class="cline-any cline-neutral">&nbsp;</span>
1171
- <span class="cline-any cline-no">&nbsp;</span>
1172
- <span class="cline-any cline-no">&nbsp;</span>
1173
- <span class="cline-any cline-no">&nbsp;</span>
1174
- <span class="cline-any cline-no">&nbsp;</span>
1175
- <span class="cline-any cline-no">&nbsp;</span>
1176
- <span class="cline-any cline-no">&nbsp;</span>
1177
- <span class="cline-any cline-no">&nbsp;</span>
1178
- <span class="cline-any cline-neutral">&nbsp;</span>
1179
- <span class="cline-any cline-neutral">&nbsp;</span>
1180
- <span class="cline-any cline-no">&nbsp;</span>
1181
- <span class="cline-any cline-no">&nbsp;</span>
1182
- <span class="cline-any cline-neutral">&nbsp;</span>
1183
- <span class="cline-any cline-no">&nbsp;</span>
1184
- <span class="cline-any cline-no">&nbsp;</span>
1185
- <span class="cline-any cline-no">&nbsp;</span>
1186
- <span class="cline-any cline-no">&nbsp;</span>
1187
- <span class="cline-any cline-no">&nbsp;</span>
1188
- <span class="cline-any cline-no">&nbsp;</span>
1189
- <span class="cline-any cline-neutral">&nbsp;</span>
1190
- <span class="cline-any cline-no">&nbsp;</span>
1191
- <span class="cline-any cline-neutral">&nbsp;</span>
1192
- <span class="cline-any cline-neutral">&nbsp;</span>
1193
- <span class="cline-any cline-no">&nbsp;</span>
1194
- <span class="cline-any cline-no">&nbsp;</span>
1195
- <span class="cline-any cline-no">&nbsp;</span>
1196
- <span class="cline-any cline-no">&nbsp;</span>
1197
- <span class="cline-any cline-no">&nbsp;</span>
1198
- <span class="cline-any cline-neutral">&nbsp;</span>
1199
- <span class="cline-any cline-neutral">&nbsp;</span>
1200
- <span class="cline-any cline-no">&nbsp;</span>
1201
- <span class="cline-any cline-no">&nbsp;</span>
1202
- <span class="cline-any cline-no">&nbsp;</span>
1203
- <span class="cline-any cline-no">&nbsp;</span>
1204
- <span class="cline-any cline-no">&nbsp;</span>
1205
- <span class="cline-any cline-neutral">&nbsp;</span>
1206
- <span class="cline-any cline-neutral">&nbsp;</span>
1207
- <span class="cline-any cline-no">&nbsp;</span>
1208
- <span class="cline-any cline-no">&nbsp;</span>
1209
- <span class="cline-any cline-no">&nbsp;</span>
1210
- <span class="cline-any cline-no">&nbsp;</span>
1211
- <span class="cline-any cline-no">&nbsp;</span>
1212
- <span class="cline-any cline-neutral">&nbsp;</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-no">&nbsp;</span>
1215
- <span class="cline-any cline-no">&nbsp;</span>
1216
- <span class="cline-any cline-no">&nbsp;</span>
1217
- <span class="cline-any cline-no">&nbsp;</span>
1218
- <span class="cline-any cline-no">&nbsp;</span>
1219
- <span class="cline-any cline-neutral">&nbsp;</span>
1220
- <span class="cline-any cline-neutral">&nbsp;</span>
1221
- <span class="cline-any cline-no">&nbsp;</span>
1222
- <span class="cline-any cline-no">&nbsp;</span>
1223
- <span class="cline-any cline-no">&nbsp;</span>
1224
- <span class="cline-any cline-no">&nbsp;</span>
1225
- <span class="cline-any cline-neutral">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-no">&nbsp;</span>
1228
- <span class="cline-any cline-no">&nbsp;</span>
1229
- <span class="cline-any cline-no">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
- <span class="cline-any cline-neutral">&nbsp;</span>
1232
- <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-no">&nbsp;</span>
1234
- <span class="cline-any cline-no">&nbsp;</span>
1235
- <span class="cline-any cline-no">&nbsp;</span>
1236
- <span class="cline-any cline-no">&nbsp;</span>
1237
- <span class="cline-any cline-neutral">&nbsp;</span>
1238
- <span class="cline-any cline-neutral">&nbsp;</span>
1239
- <span class="cline-any cline-no">&nbsp;</span>
1240
- <span class="cline-any cline-no">&nbsp;</span>
1241
- <span class="cline-any cline-no">&nbsp;</span>
1242
- <span class="cline-any cline-no">&nbsp;</span>
1243
- <span class="cline-any cline-neutral">&nbsp;</span>
1244
- <span class="cline-any cline-neutral">&nbsp;</span>
1245
- <span class="cline-any cline-no">&nbsp;</span>
1246
- <span class="cline-any cline-no">&nbsp;</span>
1247
- <span class="cline-any cline-no">&nbsp;</span>
1248
- <span class="cline-any cline-no">&nbsp;</span>
1249
- <span class="cline-any cline-neutral">&nbsp;</span>
1250
- <span class="cline-any cline-neutral">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-no">&nbsp;</span>
1253
- <span class="cline-any cline-no">&nbsp;</span>
1254
- <span class="cline-any cline-no">&nbsp;</span>
1255
- <span class="cline-any cline-no">&nbsp;</span>
1256
- <span class="cline-any cline-no">&nbsp;</span>
1257
- <span class="cline-any cline-no">&nbsp;</span>
1258
- <span class="cline-any cline-no">&nbsp;</span>
1259
- <span class="cline-any cline-no">&nbsp;</span>
1260
- <span class="cline-any cline-neutral">&nbsp;</span>
1261
- <span class="cline-any cline-neutral">&nbsp;</span>
1262
- <span class="cline-any cline-no">&nbsp;</span>
1263
- <span class="cline-any cline-no">&nbsp;</span>
1264
- <span class="cline-any cline-no">&nbsp;</span>
1265
- <span class="cline-any cline-no">&nbsp;</span>
1266
- <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-neutral">&nbsp;</span>
1268
- <span class="cline-any cline-no">&nbsp;</span>
1269
- <span class="cline-any cline-no">&nbsp;</span>
1270
- <span class="cline-any cline-no">&nbsp;</span>
1271
- <span class="cline-any cline-no">&nbsp;</span>
1272
- <span class="cline-any cline-neutral">&nbsp;</span>
1273
- <span class="cline-any cline-neutral">&nbsp;</span>
1274
- <span class="cline-any cline-no">&nbsp;</span>
1275
- <span class="cline-any cline-no">&nbsp;</span>
1276
- <span class="cline-any cline-no">&nbsp;</span>
1277
- <span class="cline-any cline-no">&nbsp;</span>
1278
- <span class="cline-any cline-neutral">&nbsp;</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-no">&nbsp;</span>
1281
- <span class="cline-any cline-no">&nbsp;</span>
1282
- <span class="cline-any cline-no">&nbsp;</span>
1283
- <span class="cline-any cline-no">&nbsp;</span>
1284
- <span class="cline-any cline-no">&nbsp;</span>
1285
- <span class="cline-any cline-neutral">&nbsp;</span>
1286
- <span class="cline-any cline-no">&nbsp;</span>
1287
- <span class="cline-any cline-no">&nbsp;</span>
1288
- <span class="cline-any cline-no">&nbsp;</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-no">&nbsp;</span>
1291
- <span class="cline-any cline-no">&nbsp;</span>
1292
- <span class="cline-any cline-no">&nbsp;</span>
1293
- <span class="cline-any cline-no">&nbsp;</span>
1294
- <span class="cline-any cline-no">&nbsp;</span>
1295
- <span class="cline-any cline-no">&nbsp;</span>
1296
- <span class="cline-any cline-no">&nbsp;</span>
1297
- <span class="cline-any cline-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-no">&nbsp;</span>
1299
- <span class="cline-any cline-neutral">&nbsp;</span>
1300
- <span class="cline-any cline-neutral">&nbsp;</span>
1301
- <span class="cline-any cline-no">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-no">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-no">&nbsp;</span>
1309
- <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-no">&nbsp;</span>
1312
- <span class="cline-any cline-no">&nbsp;</span>
1313
- <span class="cline-any cline-no">&nbsp;</span>
1314
- <span class="cline-any cline-neutral">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-no">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-no">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-neutral">&nbsp;</span>
1321
- <span class="cline-any cline-no">&nbsp;</span>
1322
- <span class="cline-any cline-no">&nbsp;</span>
1323
- <span class="cline-any cline-no">&nbsp;</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-neutral">&nbsp;</span>
1326
- <span class="cline-any cline-neutral">&nbsp;</span>
1327
- <span class="cline-any cline-no">&nbsp;</span>
1328
- <span class="cline-any cline-no">&nbsp;</span>
1329
- <span class="cline-any cline-no">&nbsp;</span>
1330
- <span class="cline-any cline-no">&nbsp;</span>
1331
- <span class="cline-any cline-no">&nbsp;</span>
1332
- <span class="cline-any cline-no">&nbsp;</span>
1333
- <span class="cline-any cline-no">&nbsp;</span>
1334
- <span class="cline-any cline-no">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-no">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-no">&nbsp;</span>
1345
- <span class="cline-any cline-no">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-no">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
- <span class="cline-any cline-no">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-neutral">&nbsp;</span>
1357
- <span class="cline-any cline-neutral">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-no">&nbsp;</span>
1361
- <span class="cline-any cline-no">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-no">&nbsp;</span>
1365
- <span class="cline-any cline-no">&nbsp;</span>
1366
- <span class="cline-any cline-neutral">&nbsp;</span>
1367
- <span class="cline-any cline-neutral">&nbsp;</span>
1368
- <span class="cline-any cline-no">&nbsp;</span>
1369
- <span class="cline-any cline-no">&nbsp;</span>
1370
- <span class="cline-any cline-no">&nbsp;</span>
1371
- <span class="cline-any cline-no">&nbsp;</span>
1372
- <span class="cline-any cline-no">&nbsp;</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-no">&nbsp;</span>
1375
- <span class="cline-any cline-no">&nbsp;</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-no">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-neutral">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-neutral">&nbsp;</span>
1389
- <span class="cline-any cline-neutral">&nbsp;</span>
1390
- <span class="cline-any cline-neutral">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-no">&nbsp;</span>
1396
- <span class="cline-any cline-no">&nbsp;</span>
1397
- <span class="cline-any cline-neutral">&nbsp;</span>
1398
- <span class="cline-any cline-no">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-neutral">&nbsp;</span>
1401
- <span class="cline-any cline-neutral">&nbsp;</span>
1402
- <span class="cline-any cline-neutral">&nbsp;</span>
1403
- <span class="cline-any cline-no">&nbsp;</span>
1404
- <span class="cline-any cline-no">&nbsp;</span>
1405
- <span class="cline-any cline-no">&nbsp;</span>
1406
- <span class="cline-any cline-no">&nbsp;</span>
1407
- <span class="cline-any cline-no">&nbsp;</span>
1408
- <span class="cline-any cline-no">&nbsp;</span>
1409
- <span class="cline-any cline-no">&nbsp;</span>
1410
- <span class="cline-any cline-no">&nbsp;</span>
1411
- <span class="cline-any cline-no">&nbsp;</span>
1412
- <span class="cline-any cline-no">&nbsp;</span>
1413
- <span class="cline-any cline-no">&nbsp;</span>
1414
- <span class="cline-any cline-no">&nbsp;</span>
1415
- <span class="cline-any cline-no">&nbsp;</span>
1416
- <span class="cline-any cline-no">&nbsp;</span>
1417
- <span class="cline-any cline-no">&nbsp;</span>
1418
- <span class="cline-any cline-no">&nbsp;</span>
1419
- <span class="cline-any cline-no">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-no">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-no">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-neutral">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-no">&nbsp;</span>
1430
- <span class="cline-any cline-no">&nbsp;</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1432
- <span class="cline-any cline-no">&nbsp;</span>
1433
- <span class="cline-any cline-no">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-no">&nbsp;</span>
1440
- <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-no">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-neutral">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-neutral">&nbsp;</span>
1450
- <span class="cline-any cline-neutral">&nbsp;</span>
1451
- <span class="cline-any cline-no">&nbsp;</span>
1452
- <span class="cline-any cline-no">&nbsp;</span>
1453
- <span class="cline-any cline-no">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-no">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-neutral">&nbsp;</span>
1460
- <span class="cline-any cline-neutral">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-no">&nbsp;</span>
1463
- <span class="cline-any cline-no">&nbsp;</span>
1464
- <span class="cline-any cline-no">&nbsp;</span>
1465
- <span class="cline-any cline-no">&nbsp;</span>
1466
- <span class="cline-any cline-no">&nbsp;</span>
1467
- <span class="cline-any cline-no">&nbsp;</span>
1468
- <span class="cline-any cline-no">&nbsp;</span>
1469
- <span class="cline-any cline-no">&nbsp;</span>
1470
- <span class="cline-any cline-no">&nbsp;</span>
1471
- <span class="cline-any cline-neutral">&nbsp;</span>
1472
- <span class="cline-any cline-neutral">&nbsp;</span>
1473
- <span class="cline-any cline-neutral">&nbsp;</span>
1474
- <span class="cline-any cline-no">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-no">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-no">&nbsp;</span>
1482
- <span class="cline-any cline-neutral">&nbsp;</span>
1483
- <span class="cline-any cline-neutral">&nbsp;</span>
1484
- <span class="cline-any cline-neutral">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-no">&nbsp;</span>
1489
- <span class="cline-any cline-neutral">&nbsp;</span>
1490
- <span class="cline-any cline-neutral">&nbsp;</span>
1491
- <span class="cline-any cline-no">&nbsp;</span>
1492
- <span class="cline-any cline-no">&nbsp;</span>
1493
- <span class="cline-any cline-no">&nbsp;</span>
1494
- <span class="cline-any cline-neutral">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { useEffect, useCallback, useState, useRef } from 'react';</span></span></span>
1497
- import { ReactFlowProvider } from '@xyflow/react';
1498
- import { Menu, PanelRight, PanelLeft, X, Wrench } from 'lucide-react';
1499
- import { Canvas } from './components/Canvas/Canvas';
1500
- import { Toolbar } from './components/Canvas/Toolbar';
1501
- import { ExecutionOverlay } from './components/Canvas/ExecutionOverlay';
1502
- import { ExecutionInputDialog } from './components/Canvas/ExecutionInputDialog';
1503
- import { ValidationPanel } from './components/Panels/ValidationPanel';
1504
- import { Sidebar } from './components/Sidebar/Sidebar';
1505
- import { PropertiesPanel } from './components/Panels/PropertiesPanel';
1506
- import { PromptInput } from './components/Prompt/PromptInput';
1507
- import { ChangePreview } from './components/Prompt/ChangePreview';
1508
- import { NewStepWizard } from './components/Editor/NewStepWizard';
1509
- import {
1510
- KeyboardShortcuts,
1511
- KeyboardShortcutsButton,
1512
- useKeyboardShortcuts,
1513
- } from './components/common/KeyboardShortcuts';
1514
- import { ThemeToggle } from './components/common/ThemeToggle';
1515
- import { Breadcrumb, type BreadcrumbItem } from './components/common/Breadcrumb';
1516
- import { CommandPalette } from './components/CommandPalette/CommandPalette';
1517
- import { OnboardingTour } from './components/Onboarding/OnboardingTour';
1518
- import { SkipNav } from './components/Accessibility/SkipNav';
1519
- import { LiveRegion } from './components/Accessibility/LiveRegion';
1520
- import { useWorkflow } from './hooks/useWorkflow';
1521
- import { useWebSocket } from './hooks/useWebSocket';
1522
- import { usePromptStore } from './stores/promptStore';
1523
- import { useEditorStore } from './stores/editorStore';
1524
- import { useNavigationStore } from './stores/navigationStore';
1525
- import { useWorkflowStore } from './stores/workflowStore';
1526
- import { useExecutionStore } from './stores/executionStore';
1527
- import { useLayoutStore, getBreakpoint } from './stores/layoutStore';
1528
- import { useCommandStore, type Command } from './stores/commandStore';
1529
- import { useThemeStore } from './stores/themeStore';
1530
- import { useOnboardingStore } from './stores/onboardingStore';
1531
- import { useSettingsStore } from './stores/settingsStore';
1532
- import type { WorkflowStep, StepStatus, WorkflowStatus } from '@shared/types';
1533
- &nbsp;
1534
- <span class="cstat-no" title="statement not covered" >export default function App() {</span>
1535
- // Workflow management
1536
- <span class="cstat-no" title="statement not covered" > const {</span>
1537
- <span class="cstat-no" title="statement not covered" > currentWorkflow,</span>
1538
- <span class="cstat-no" title="statement not covered" > selectedWorkflow,</span>
1539
- <span class="cstat-no" title="statement not covered" > saveWorkflow,</span>
1540
- <span class="cstat-no" title="statement not covered" > refreshWorkflows,</span>
1541
- <span class="cstat-no" title="statement not covered" > } = useWorkflow();</span>
1542
- &nbsp;
1543
- // Editor state
1544
- <span class="cstat-no" title="statement not covered" > const {</span>
1545
- <span class="cstat-no" title="statement not covered" > isNewStepOpen,</span>
1546
- <span class="cstat-no" title="statement not covered" > newStepPosition,</span>
1547
- <span class="cstat-no" title="statement not covered" > openNewStepWizard,</span>
1548
- <span class="cstat-no" title="statement not covered" > closeNewStepWizard,</span>
1549
- <span class="cstat-no" title="statement not covered" > } = useEditorStore();</span>
1550
- &nbsp;
1551
- // Prompt state
1552
- <span class="cstat-no" title="statement not covered" > const { pendingChanges, acceptChanges, rejectChanges } = usePromptStore();</span>
1553
- &nbsp;
1554
- // Keyboard shortcuts
1555
- <span class="cstat-no" title="statement not covered" > const { isOpen: isShortcutsOpen, setIsOpen: setShortcutsOpen, openShortcuts } = useKeyboardShortcuts();</span>
1556
- &nbsp;
1557
- // Navigation for sub-workflow drilling
1558
- <span class="cstat-no" title="statement not covered" > const { breadcrumbs, popToIndex, resetNavigation } = useNavigationStore();</span>
1559
- <span class="cstat-no" title="statement not covered" > const { loadWorkflow } = useWorkflowStore();</span>
1560
- &nbsp;
1561
- // Handle breadcrumb navigation
1562
- <span class="cstat-no" title="statement not covered" > const handleBreadcrumbNavigate = useCallback((item: BreadcrumbItem, index: number) =&gt; {</span>
1563
- // Navigate to the clicked breadcrumb
1564
- <span class="cstat-no" title="statement not covered" > popToIndex(index);</span>
1565
- <span class="cstat-no" title="statement not covered" > loadWorkflow(item.path || '');</span>
1566
- <span class="cstat-no" title="statement not covered" > }, [popToIndex, loadWorkflow]);</span>
1567
- &nbsp;
1568
- // WebSocket for real-time updates
1569
- <span class="cstat-no" title="statement not covered" > const { connected, subscribeToExecution, unsubscribeFromExecution } = useWebSocket({</span>
1570
- <span class="cstat-no" title="statement not covered" > onWorkflowUpdated: () =&gt; {</span>
1571
- <span class="cstat-no" title="statement not covered" > refreshWorkflows();</span>
1572
- <span class="cstat-no" title="statement not covered" > },</span>
1573
- <span class="cstat-no" title="statement not covered" > onExecutionStep: (event) =&gt; {</span>
1574
- // Update execution state from WebSocket events
1575
- <span class="cstat-no" title="statement not covered" > setCurrentStepId(event.stepId);</span>
1576
- <span class="cstat-no" title="statement not covered" > setExecutionSteps((prev) =&gt;</span>
1577
- <span class="cstat-no" title="statement not covered" > prev.map((s) =&gt;</span>
1578
- <span class="cstat-no" title="statement not covered" > s.stepId === event.stepId</span>
1579
- <span class="cstat-no" title="statement not covered" > ? { ...s, status: event.status, duration: event.duration, error: event.error }</span>
1580
- <span class="cstat-no" title="statement not covered" > : s</span>
1581
- <span class="cstat-no" title="statement not covered" > )</span>
1582
- <span class="cstat-no" title="statement not covered" > );</span>
1583
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [</span>
1584
- <span class="cstat-no" title="statement not covered" > ...prev,</span>
1585
- <span class="cstat-no" title="statement not covered" > `Step "${event.stepName || event.stepId}": ${event.status}${event.error ? ` - ${event.error}` : ''}`,</span>
1586
- <span class="cstat-no" title="statement not covered" > ]);</span>
1587
- &nbsp;
1588
- // Update execution store
1589
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1590
- <span class="cstat-no" title="statement not covered" > updateStepStatus(runIdRef.current, event.stepId, event.status, event.output, event.error);</span>
1591
- <span class="cstat-no" title="statement not covered" > addLog(runIdRef.current, `Step "${event.stepName || event.stepId}": ${event.status}`);</span>
1592
- <span class="cstat-no" title="statement not covered" > }</span>
1593
- <span class="cstat-no" title="statement not covered" > },</span>
1594
- <span class="cstat-no" title="statement not covered" > onExecutionCompleted: (event) =&gt; {</span>
1595
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus(event.status);</span>
1596
- <span class="cstat-no" title="statement not covered" > setCurrentStepId(null);</span>
1597
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [</span>
1598
- <span class="cstat-no" title="statement not covered" > ...prev,</span>
1599
- <span class="cstat-no" title="statement not covered" > event.status === 'completed'</span>
1600
- <span class="cstat-no" title="statement not covered" > ? 'Workflow completed successfully!'</span>
1601
- <span class="cstat-no" title="statement not covered" > : event.error || 'Workflow execution failed',</span>
1602
- <span class="cstat-no" title="statement not covered" > ]);</span>
1603
- &nbsp;
1604
- // Update execution store
1605
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1606
- <span class="cstat-no" title="statement not covered" > completeExecution(runIdRef.current, event.status);</span>
1607
- <span class="cstat-no" title="statement not covered" > if (event.error) {</span>
1608
- <span class="cstat-no" title="statement not covered" > addLog(runIdRef.current, `Error: ${event.error}`);</span>
1609
- <span class="cstat-no" title="statement not covered" > }</span>
1610
- <span class="cstat-no" title="statement not covered" > }</span>
1611
- &nbsp;
1612
- // Unsubscribe from WebSocket
1613
- <span class="cstat-no" title="statement not covered" > if (event.runId) {</span>
1614
- <span class="cstat-no" title="statement not covered" > unsubscribeFromExecution(event.runId);</span>
1615
- <span class="cstat-no" title="statement not covered" > }</span>
1616
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1617
- <span class="cstat-no" title="statement not covered" > },</span>
1618
- <span class="cstat-no" title="statement not covered" > });</span>
1619
- &nbsp;
1620
- // Execution store
1621
- <span class="cstat-no" title="statement not covered" > const {</span>
1622
- <span class="cstat-no" title="statement not covered" > isExecuting,</span>
1623
- <span class="cstat-no" title="statement not covered" > isPaused,</span>
1624
- <span class="cstat-no" title="statement not covered" > currentRunId,</span>
1625
- <span class="cstat-no" title="statement not covered" > runs,</span>
1626
- <span class="cstat-no" title="statement not covered" > startExecution,</span>
1627
- <span class="cstat-no" title="statement not covered" > updateStepStatus,</span>
1628
- <span class="cstat-no" title="statement not covered" > completeExecution,</span>
1629
- <span class="cstat-no" title="statement not covered" > addLog,</span>
1630
- <span class="cstat-no" title="statement not covered" > pauseExecution,</span>
1631
- <span class="cstat-no" title="statement not covered" > resumeExecution,</span>
1632
- <span class="cstat-no" title="statement not covered" > cancelExecution,</span>
1633
- // Debug methods
1634
- <span class="cstat-no" title="statement not covered" > debug,</span>
1635
- <span class="cstat-no" title="statement not covered" > enableDebugMode,</span>
1636
- <span class="cstat-no" title="statement not covered" > disableDebugMode,</span>
1637
- <span class="cstat-no" title="statement not covered" > toggleBreakpoint,</span>
1638
- <span class="cstat-no" title="statement not covered" > clearAllBreakpoints,</span>
1639
- <span class="cstat-no" title="statement not covered" > stepOver,</span>
1640
- <span class="cstat-no" title="statement not covered" > stepInto,</span>
1641
- <span class="cstat-no" title="statement not covered" > stepOut,</span>
1642
- <span class="cstat-no" title="statement not covered" > addWatchExpression,</span>
1643
- <span class="cstat-no" title="statement not covered" > removeWatchExpression,</span>
1644
- <span class="cstat-no" title="statement not covered" > } = useExecutionStore();</span>
1645
- &nbsp;
1646
- // Layout store for responsive behavior
1647
- <span class="cstat-no" title="statement not covered" > const {</span>
1648
- <span class="cstat-no" title="statement not covered" > breakpoint,</span>
1649
- <span class="cstat-no" title="statement not covered" > setBreakpoint,</span>
1650
- <span class="cstat-no" title="statement not covered" > sidebarOpen,</span>
1651
- <span class="cstat-no" title="statement not covered" > setSidebarOpen,</span>
1652
- <span class="cstat-no" title="statement not covered" > propertiesPanelOpen,</span>
1653
- <span class="cstat-no" title="statement not covered" > setPropertiesPanelOpen,</span>
1654
- <span class="cstat-no" title="statement not covered" > toolbarVisible,</span>
1655
- <span class="cstat-no" title="statement not covered" > setToolbarVisible,</span>
1656
- <span class="cstat-no" title="statement not covered" > } = useLayoutStore();</span>
1657
- &nbsp;
1658
- // Command palette
1659
- <span class="cstat-no" title="statement not covered" > const { open: openCommandPalette, registerCommands } = useCommandStore();</span>
1660
- <span class="cstat-no" title="statement not covered" > const { toggleTheme } = useThemeStore();</span>
1661
- <span class="cstat-no" title="statement not covered" > const { openSettings } = useSettingsStore();</span>
1662
- &nbsp;
1663
- // Load settings on mount
1664
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1665
- <span class="cstat-no" title="statement not covered" > useSettingsStore.getState().loadSettings();</span>
1666
- <span class="cstat-no" title="statement not covered" > }, []);</span>
1667
- <span class="cstat-no" title="statement not covered" > const { workflows } = useWorkflowStore();</span>
1668
- &nbsp;
1669
- // Status message for accessibility live region
1670
- <span class="cstat-no" title="statement not covered" > const [liveMessage, setLiveMessage] = useState('');</span>
1671
- &nbsp;
1672
- // Register commands on mount and when dependencies change
1673
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1674
- <span class="cstat-no" title="statement not covered" > const commands: Command[] = [</span>
1675
- // Actions
1676
- <span class="cstat-no" title="statement not covered" > { id: 'save', label: 'Save Workflow', category: 'action', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + S`, execute: () =&gt; handleSave(), keywords: ['save', 'persist'] },</span>
1677
- <span class="cstat-no" title="statement not covered" > { id: 'execute', label: 'Execute Workflow', category: 'action', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + Enter`, execute: () =&gt; handleExecute(), keywords: ['run', 'start'] },</span>
1678
- <span class="cstat-no" title="statement not covered" > { id: 'validate', label: 'Validate Workflow', category: 'action', execute: () =&gt; handleValidate(), keywords: ['check', 'lint'] },</span>
1679
- <span class="cstat-no" title="statement not covered" > { id: 'add-step', label: 'Add New Step', category: 'action', shortcut: 'N', execute: () =&gt; handleAddStep(), keywords: ['create', 'new'] },</span>
1680
- // Settings
1681
- <span class="cstat-no" title="statement not covered" > { id: 'open-settings', label: 'Open Settings', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + ,`, execute: () =&gt; openSettings(), keywords: ['preferences', 'config'] },</span>
1682
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-theme', label: 'Toggle Theme', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + Shift + T`, execute: () =&gt; toggleTheme(), keywords: ['dark', 'light', 'mode'] },</span>
1683
- <span class="cstat-no" title="statement not covered" > { id: 'show-shortcuts', label: 'Show Keyboard Shortcuts', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + /`, execute: () =&gt; setShortcutsOpen(true), keywords: ['keys', 'hotkeys'] },</span>
1684
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-sidebar', label: 'Toggle Sidebar', category: 'setting', execute: () =&gt; setSidebarOpen(!sidebarOpen), keywords: ['panel', 'left'] },</span>
1685
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-properties', label: 'Toggle Properties Panel', category: 'setting', execute: () =&gt; setPropertiesPanelOpen(!propertiesPanelOpen), keywords: ['panel', 'right'] },</span>
1686
- // Navigation
1687
- <span class="cstat-no" title="statement not covered" > { id: 'nav-back', label: 'Navigate Back', category: 'navigation', execute: () =&gt; handleNavigateBack(), keywords: ['parent', 'up'] },</span>
1688
- <span class="cstat-no" title="statement not covered" > { id: 'nav-root', label: 'Navigate to Root', category: 'navigation', execute: () =&gt; handleNavigateToRoot(), keywords: ['home', 'top'] },</span>
1689
- // Debug
1690
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-debug', label: 'Toggle Debug Mode', category: 'action', shortcut: 'F9', execute: () =&gt; debug.enabled ? disableDebugMode() : enableDebugMode(), keywords: ['breakpoint', 'inspect'] },</span>
1691
- // Workflows
1692
- <span class="cstat-no" title="statement not covered" > ...workflows.map((w) =&gt; ({</span>
1693
- <span class="cstat-no" title="statement not covered" > id: `workflow-${w.path}`,</span>
1694
- <span class="cstat-no" title="statement not covered" > label: w.name,</span>
1695
- <span class="cstat-no" title="statement not covered" > description: w.path,</span>
1696
- <span class="cstat-no" title="statement not covered" > category: 'workflow' as const,</span>
1697
- <span class="cstat-no" title="statement not covered" > execute: () =&gt; { useWorkflowStore.getState().selectWorkflow(w.path); },</span>
1698
- <span class="cstat-no" title="statement not covered" > keywords: [w.name.toLowerCase()],</span>
1699
- <span class="cstat-no" title="statement not covered" > })),</span>
1700
- <span class="cstat-no" title="statement not covered" > ];</span>
1701
- <span class="cstat-no" title="statement not covered" > registerCommands(commands);</span>
1702
- <span class="cstat-no" title="statement not covered" > }, [workflows, sidebarOpen, propertiesPanelOpen, breakpoint, debug.enabled]);</span>
1703
- &nbsp;
1704
- // Breakpoint detection on resize
1705
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1706
- <span class="cstat-no" title="statement not covered" > const handleResize = () =&gt; {</span>
1707
- <span class="cstat-no" title="statement not covered" > const newBreakpoint = getBreakpoint(window.innerWidth);</span>
1708
- <span class="cstat-no" title="statement not covered" > if (newBreakpoint !== breakpoint) {</span>
1709
- <span class="cstat-no" title="statement not covered" > setBreakpoint(newBreakpoint);</span>
1710
- <span class="cstat-no" title="statement not covered" > }</span>
1711
- <span class="cstat-no" title="statement not covered" > };</span>
1712
- &nbsp;
1713
- // Set initial breakpoint
1714
- <span class="cstat-no" title="statement not covered" > handleResize();</span>
1715
- &nbsp;
1716
- <span class="cstat-no" title="statement not covered" > window.addEventListener('resize', handleResize);</span>
1717
- <span class="cstat-no" title="statement not covered" > return () =&gt; window.removeEventListener('resize', handleResize);</span>
1718
- <span class="cstat-no" title="statement not covered" > }, [breakpoint, setBreakpoint]);</span>
1719
- &nbsp;
1720
- // Local execution state for overlay
1721
- <span class="cstat-no" title="statement not covered" > const [workflowStatus, setWorkflowStatus] = useState&lt;WorkflowStatus&gt;('pending');</span>
1722
- <span class="cstat-no" title="statement not covered" > const [executionSteps, setExecutionSteps] = useState&lt;Array&lt;{</span>
1723
- stepId: string;
1724
- stepName: string;
1725
- status: StepStatus;
1726
- duration?: number;
1727
- error?: string;
1728
- <span class="cstat-no" title="statement not covered" > }&gt;&gt;([]);</span>
1729
- <span class="cstat-no" title="statement not covered" > const [executionLogs, setExecutionLogs] = useState&lt;string[]&gt;([]);</span>
1730
- <span class="cstat-no" title="statement not covered" > const [currentStepId, setCurrentStepId] = useState&lt;string | null&gt;(null);</span>
1731
- <span class="cstat-no" title="statement not covered" > const runIdRef = useRef&lt;string | null&gt;(null);</span>
1732
- &nbsp;
1733
- // Input collection dialog state
1734
- <span class="cstat-no" title="statement not covered" > const [showInputDialog, setShowInputDialog] = useState(false);</span>
1735
- <span class="cstat-no" title="statement not covered" > const [pendingInputs, setPendingInputs] = useState&lt;Record&lt;string, any&gt;&gt;({});</span>
1736
- &nbsp;
1737
- // Validation panel state
1738
- <span class="cstat-no" title="statement not covered" > const [showValidationPanel, setShowValidationPanel] = useState(false);</span>
1739
- &nbsp;
1740
- // Handle adding a new step
1741
- <span class="cstat-no" title="statement not covered" > const handleAddStep = useCallback(() =&gt; {</span>
1742
- <span class="cstat-no" title="statement not covered" > openNewStepWizard();</span>
1743
- <span class="cstat-no" title="statement not covered" > }, [openNewStepWizard]);</span>
1744
- &nbsp;
1745
- // Handle step creation
1746
- <span class="cstat-no" title="statement not covered" > const handleCreateStep = useCallback(</span>
1747
- <span class="cstat-no" title="statement not covered" > (step: WorkflowStep) =&gt; {</span>
1748
- <span class="cstat-no" title="statement not covered" > if (!currentWorkflow) return;</span>
1749
- &nbsp;
1750
- // Add step to workflow
1751
- <span class="cstat-no" title="statement not covered" > const updatedWorkflow = {</span>
1752
- <span class="cstat-no" title="statement not covered" > ...currentWorkflow,</span>
1753
- <span class="cstat-no" title="statement not covered" > steps: [...currentWorkflow.steps, step],</span>
1754
- <span class="cstat-no" title="statement not covered" > };</span>
1755
- &nbsp;
1756
- <span class="cstat-no" title="statement not covered" > saveWorkflow(updatedWorkflow);</span>
1757
- <span class="cstat-no" title="statement not covered" > console.log('Created step:', step);</span>
1758
- <span class="cstat-no" title="statement not covered" > },</span>
1759
- <span class="cstat-no" title="statement not covered" > [currentWorkflow, saveWorkflow]</span>
1760
- <span class="cstat-no" title="statement not covered" > );</span>
1761
- &nbsp;
1762
- // Handle workflow execution with input collection
1763
- <span class="cstat-no" title="statement not covered" > const handleExecute = useCallback(async (inputs?: Record&lt;string, any&gt;) =&gt; {</span>
1764
- <span class="cstat-no" title="statement not covered" > if (isExecuting) {</span>
1765
- // Stop execution via API
1766
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1767
- <span class="cstat-no" title="statement not covered" > try {</span>
1768
- <span class="cstat-no" title="statement not covered" > const response = await fetch(`/api/execute/cancel/${runIdRef.current}`, {</span>
1769
- <span class="cstat-no" title="statement not covered" > method: 'POST',</span>
1770
- <span class="cstat-no" title="statement not covered" > });</span>
1771
- <span class="cstat-no" title="statement not covered" > if (response.ok) {</span>
1772
- <span class="cstat-no" title="statement not covered" > cancelExecution(runIdRef.current);</span>
1773
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('cancelled');</span>
1774
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, 'Execution cancelled by user']);</span>
1775
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1776
- <span class="cstat-no" title="statement not covered" > }</span>
1777
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1778
- <span class="cstat-no" title="statement not covered" > console.error('Failed to cancel execution:', error);</span>
1779
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, 'Failed to cancel execution']);</span>
1780
- <span class="cstat-no" title="statement not covered" > }</span>
1781
- <span class="cstat-no" title="statement not covered" > }</span>
1782
- <span class="cstat-no" title="statement not covered" > return;</span>
1783
- <span class="cstat-no" title="statement not covered" > }</span>
1784
- &nbsp;
1785
- <span class="cstat-no" title="statement not covered" > if (!currentWorkflow || !selectedWorkflow) return;</span>
1786
- &nbsp;
1787
- // If inputs are not provided and workflow has inputs, show dialog
1788
- <span class="cstat-no" title="statement not covered" > if (!inputs &amp;&amp; currentWorkflow.inputs &amp;&amp; Object.keys(currentWorkflow.inputs).length &gt; 0) {</span>
1789
- <span class="cstat-no" title="statement not covered" > setShowInputDialog(true);</span>
1790
- <span class="cstat-no" title="statement not covered" > return;</span>
1791
- <span class="cstat-no" title="statement not covered" > }</span>
1792
- &nbsp;
1793
- <span class="cstat-no" title="statement not covered" > try {</span>
1794
- // Update local state for overlay
1795
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('running');</span>
1796
- <span class="cstat-no" title="statement not covered" > setCurrentStepId(null);</span>
1797
- <span class="cstat-no" title="statement not covered" > setExecutionLogs(['Starting workflow execution...']);</span>
1798
- &nbsp;
1799
- // Initialize steps
1800
- <span class="cstat-no" title="statement not covered" > setExecutionSteps(</span>
1801
- <span class="cstat-no" title="statement not covered" > currentWorkflow.steps.map((step) =&gt; ({</span>
1802
- <span class="cstat-no" title="statement not covered" > stepId: step.id,</span>
1803
- <span class="cstat-no" title="statement not covered" > stepName: step.name || step.id,</span>
1804
- <span class="cstat-no" title="statement not covered" > status: 'pending' as StepStatus,</span>
1805
- <span class="cstat-no" title="statement not covered" > }))</span>
1806
- <span class="cstat-no" title="statement not covered" > );</span>
1807
- &nbsp;
1808
- // Call API to start execution - this returns the actual runId
1809
- <span class="cstat-no" title="statement not covered" > const response = await fetch(`/api/execute/${encodeURIComponent(selectedWorkflow)}`, {</span>
1810
- <span class="cstat-no" title="statement not covered" > method: 'POST',</span>
1811
- <span class="cstat-no" title="statement not covered" > headers: {</span>
1812
- <span class="cstat-no" title="statement not covered" > 'Content-Type': 'application/json',</span>
1813
- <span class="cstat-no" title="statement not covered" > },</span>
1814
- <span class="cstat-no" title="statement not covered" > body: JSON.stringify({</span>
1815
- <span class="cstat-no" title="statement not covered" > inputs: inputs || {},</span>
1816
- <span class="cstat-no" title="statement not covered" > dryRun: false,</span>
1817
- <span class="cstat-no" title="statement not covered" > }),</span>
1818
- <span class="cstat-no" title="statement not covered" > });</span>
1819
- &nbsp;
1820
- <span class="cstat-no" title="statement not covered" > if (!response.ok) {</span>
1821
- <span class="cstat-no" title="statement not covered" > const error = await response.json();</span>
1822
- <span class="cstat-no" title="statement not covered" > throw new Error(error.message || 'Failed to start execution');</span>
1823
- <span class="cstat-no" title="statement not covered" > }</span>
1824
- &nbsp;
1825
- // Get the actual runId from the backend response
1826
- <span class="cstat-no" title="statement not covered" > const apiResult = await response.json();</span>
1827
- <span class="cstat-no" title="statement not covered" > const runId = apiResult.runId;</span>
1828
- &nbsp;
1829
- // Store in history and subscribe to the correct runId
1830
- <span class="cstat-no" title="statement not covered" > const workflowName = currentWorkflow.metadata?.name || 'Untitled Workflow';</span>
1831
- <span class="cstat-no" title="statement not covered" > startExecution(selectedWorkflow, workflowName, {}, runId);</span>
1832
- <span class="cstat-no" title="statement not covered" > runIdRef.current = runId;</span>
1833
- &nbsp;
1834
- // Subscribe to WebSocket for real-time updates with the correct runId
1835
- <span class="cstat-no" title="statement not covered" > subscribeToExecution(runId);</span>
1836
- &nbsp;
1837
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, `Execution started: ${runId}`]);</span>
1838
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1839
- <span class="cstat-no" title="statement not covered" > const errorMessage = error instanceof Error ? error.message : 'Unknown error';</span>
1840
- <span class="cstat-no" title="statement not covered" > console.error('Failed to execute workflow:', error);</span>
1841
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('failed');</span>
1842
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, `Error: ${errorMessage}`]);</span>
1843
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1844
- <span class="cstat-no" title="statement not covered" > completeExecution(runIdRef.current, 'failed');</span>
1845
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1846
- <span class="cstat-no" title="statement not covered" > }</span>
1847
- <span class="cstat-no" title="statement not covered" > }</span>
1848
- <span class="cstat-no" title="statement not covered" > }, [</span>
1849
- <span class="cstat-no" title="statement not covered" > isExecuting,</span>
1850
- <span class="cstat-no" title="statement not covered" > currentWorkflow,</span>
1851
- <span class="cstat-no" title="statement not covered" > selectedWorkflow,</span>
1852
- <span class="cstat-no" title="statement not covered" > startExecution,</span>
1853
- <span class="cstat-no" title="statement not covered" > cancelExecution,</span>
1854
- <span class="cstat-no" title="statement not covered" > subscribeToExecution,</span>
1855
- <span class="cstat-no" title="statement not covered" > updateStepStatus,</span>
1856
- <span class="cstat-no" title="statement not covered" > addLog,</span>
1857
- <span class="cstat-no" title="statement not covered" > completeExecution,</span>
1858
- <span class="cstat-no" title="statement not covered" > ]);</span>
1859
- &nbsp;
1860
- &nbsp;
1861
- // Handle save
1862
- <span class="cstat-no" title="statement not covered" > const handleSave = useCallback(() =&gt; {</span>
1863
- <span class="cstat-no" title="statement not covered" > if (currentWorkflow) {</span>
1864
- <span class="cstat-no" title="statement not covered" > saveWorkflow(currentWorkflow);</span>
1865
- <span class="cstat-no" title="statement not covered" > }</span>
1866
- <span class="cstat-no" title="statement not covered" > }, [currentWorkflow, saveWorkflow]);</span>
1867
- &nbsp;
1868
- // Handle validate
1869
- <span class="cstat-no" title="statement not covered" > const handleValidate = useCallback(() =&gt; {</span>
1870
- <span class="cstat-no" title="statement not covered" > if (selectedWorkflow) {</span>
1871
- <span class="cstat-no" title="statement not covered" > setShowValidationPanel(true);</span>
1872
- <span class="cstat-no" title="statement not covered" > }</span>
1873
- <span class="cstat-no" title="statement not covered" > }, [selectedWorkflow]);</span>
1874
- &nbsp;
1875
- // Handle navigating back to parent workflow
1876
- <span class="cstat-no" title="statement not covered" > const handleNavigateBack = useCallback(() =&gt; {</span>
1877
- <span class="cstat-no" title="statement not covered" > if (breadcrumbs.length &gt; 1) {</span>
1878
- <span class="cstat-no" title="statement not covered" > const parentIndex = breadcrumbs.length - 2;</span>
1879
- <span class="cstat-no" title="statement not covered" > const parentItem = breadcrumbs[parentIndex];</span>
1880
- <span class="cstat-no" title="statement not covered" > popToIndex(parentIndex);</span>
1881
- <span class="cstat-no" title="statement not covered" > loadWorkflow(parentItem.path);</span>
1882
- <span class="cstat-no" title="statement not covered" > }</span>
1883
- <span class="cstat-no" title="statement not covered" > }, [breadcrumbs, popToIndex, loadWorkflow]);</span>
1884
- &nbsp;
1885
- // Handle navigating to root workflow
1886
- <span class="cstat-no" title="statement not covered" > const handleNavigateToRoot = useCallback(() =&gt; {</span>
1887
- <span class="cstat-no" title="statement not covered" > if (breadcrumbs.length &gt; 1) {</span>
1888
- <span class="cstat-no" title="statement not covered" > const rootItem = breadcrumbs[0];</span>
1889
- <span class="cstat-no" title="statement not covered" > popToIndex(0);</span>
1890
- <span class="cstat-no" title="statement not covered" > loadWorkflow(rootItem.path);</span>
1891
- <span class="cstat-no" title="statement not covered" > }</span>
1892
- <span class="cstat-no" title="statement not covered" > }, [breadcrumbs, popToIndex, loadWorkflow]);</span>
1893
- &nbsp;
1894
- // Global keyboard shortcuts
1895
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1896
- <span class="cstat-no" title="statement not covered" > const handleKeyDown = (e: KeyboardEvent) =&gt; {</span>
1897
- // Ignore if in an input/textarea
1898
- <span class="cstat-no" title="statement not covered" > if (</span>
1899
- <span class="cstat-no" title="statement not covered" > e.target instanceof HTMLInputElement ||</span>
1900
- <span class="cstat-no" title="statement not covered" > e.target instanceof HTMLTextAreaElement</span>
1901
- <span class="cstat-no" title="statement not covered" > ) {</span>
1902
- <span class="cstat-no" title="statement not covered" > return;</span>
1903
- <span class="cstat-no" title="statement not covered" > }</span>
1904
- &nbsp;
1905
- <span class="cstat-no" title="statement not covered" > const isMeta = e.metaKey || e.ctrlKey;</span>
1906
- &nbsp;
1907
- // Cmd/Ctrl + ,: Open settings
1908
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === ',') {</span>
1909
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1910
- <span class="cstat-no" title="statement not covered" > openSettings();</span>
1911
- <span class="cstat-no" title="statement not covered" > return;</span>
1912
- <span class="cstat-no" title="statement not covered" > }</span>
1913
- &nbsp;
1914
- // Cmd/Ctrl + K: Command palette
1915
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'k') {</span>
1916
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1917
- <span class="cstat-no" title="statement not covered" > openCommandPalette('commands');</span>
1918
- <span class="cstat-no" title="statement not covered" > return;</span>
1919
- <span class="cstat-no" title="statement not covered" > }</span>
1920
- &nbsp;
1921
- // Cmd/Ctrl + P: Quick workflow switcher
1922
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'p') {</span>
1923
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1924
- <span class="cstat-no" title="statement not covered" > openCommandPalette('workflows');</span>
1925
- <span class="cstat-no" title="statement not covered" > return;</span>
1926
- <span class="cstat-no" title="statement not covered" > }</span>
1927
- &nbsp;
1928
- // Cmd/Ctrl + Shift + T: Toggle theme
1929
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.shiftKey &amp;&amp; e.key === 't') {</span>
1930
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1931
- <span class="cstat-no" title="statement not covered" > toggleTheme();</span>
1932
- <span class="cstat-no" title="statement not covered" > return;</span>
1933
- <span class="cstat-no" title="statement not covered" > }</span>
1934
- &nbsp;
1935
- // Cmd/Ctrl + S: Save
1936
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 's') {</span>
1937
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1938
- <span class="cstat-no" title="statement not covered" > handleSave();</span>
1939
- <span class="cstat-no" title="statement not covered" > }</span>
1940
- &nbsp;
1941
- // Cmd/Ctrl + Enter: Execute
1942
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'Enter') {</span>
1943
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1944
- <span class="cstat-no" title="statement not covered" > handleExecute();</span>
1945
- <span class="cstat-no" title="statement not covered" > }</span>
1946
- &nbsp;
1947
- // N: New step (when no modifier)
1948
- <span class="cstat-no" title="statement not covered" > if (e.key === 'n' &amp;&amp; !isMeta &amp;&amp; !e.shiftKey &amp;&amp; !e.altKey) {</span>
1949
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1950
- <span class="cstat-no" title="statement not covered" > handleAddStep();</span>
1951
- <span class="cstat-no" title="statement not covered" > }</span>
1952
- &nbsp;
1953
- // Cmd/Ctrl + Left Arrow: Navigate back to parent workflow
1954
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'ArrowLeft') {</span>
1955
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1956
- <span class="cstat-no" title="statement not covered" > handleNavigateBack();</span>
1957
- <span class="cstat-no" title="statement not covered" > }</span>
1958
- &nbsp;
1959
- // Cmd/Ctrl + Up Arrow: Navigate to root workflow
1960
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'ArrowUp') {</span>
1961
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1962
- <span class="cstat-no" title="statement not covered" > handleNavigateToRoot();</span>
1963
- <span class="cstat-no" title="statement not covered" > }</span>
1964
- &nbsp;
1965
- // Debug keyboard shortcuts
1966
- // F9: Toggle debug mode
1967
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F9') {</span>
1968
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1969
- <span class="cstat-no" title="statement not covered" > if (debug.enabled) {</span>
1970
- <span class="cstat-no" title="statement not covered" > disableDebugMode();</span>
1971
- <span class="cstat-no" title="statement not covered" > } else {</span>
1972
- <span class="cstat-no" title="statement not covered" > enableDebugMode();</span>
1973
- <span class="cstat-no" title="statement not covered" > }</span>
1974
- <span class="cstat-no" title="statement not covered" > }</span>
1975
- &nbsp;
1976
- // F10: Step over (when paused in debug mode)
1977
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F10' &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1978
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1979
- <span class="cstat-no" title="statement not covered" > stepOver();</span>
1980
- <span class="cstat-no" title="statement not covered" > }</span>
1981
- &nbsp;
1982
- // F11: Step into (when paused in debug mode)
1983
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F11' &amp;&amp; !e.shiftKey &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1984
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1985
- <span class="cstat-no" title="statement not covered" > stepInto();</span>
1986
- <span class="cstat-no" title="statement not covered" > }</span>
1987
- &nbsp;
1988
- // Shift+F11: Step out (when paused in debug mode)
1989
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F11' &amp;&amp; e.shiftKey &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1990
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1991
- <span class="cstat-no" title="statement not covered" > stepOut();</span>
1992
- <span class="cstat-no" title="statement not covered" > }</span>
1993
- &nbsp;
1994
- // F5: Continue execution (when paused)
1995
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F5' &amp;&amp; isPaused) {</span>
1996
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1997
- <span class="cstat-no" title="statement not covered" > resumeExecution();</span>
1998
- <span class="cstat-no" title="statement not covered" > }</span>
1999
- <span class="cstat-no" title="statement not covered" > };</span>
2000
- &nbsp;
2001
- <span class="cstat-no" title="statement not covered" > window.addEventListener('keydown', handleKeyDown);</span>
2002
- <span class="cstat-no" title="statement not covered" > return () =&gt; window.removeEventListener('keydown', handleKeyDown);</span>
2003
- <span class="cstat-no" title="statement not covered" > }, [handleSave, handleExecute, handleAddStep, handleNavigateBack, handleNavigateToRoot, debug.enabled, isPaused, enableDebugMode, disableDebugMode, stepOver, stepInto, stepOut, resumeExecution, openCommandPalette, toggleTheme, openSettings]);</span>
2004
- &nbsp;
2005
- <span class="cstat-no" title="statement not covered" > return (</span>
2006
- <span class="cstat-no" title="statement not covered" > &lt;ReactFlowProvider&gt;</span>
2007
- <span class="cstat-no" title="statement not covered" > &lt;SkipNav /&gt;</span>
2008
- <span class="cstat-no" title="statement not covered" > &lt;LiveRegion message={liveMessage} /&gt;</span>
2009
- <span class="cstat-no" title="statement not covered" > &lt;CommandPalette /&gt;</span>
2010
- <span class="cstat-no" title="statement not covered" > &lt;OnboardingTour /&gt;</span>
2011
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex h-screen w-screen overflow-hidden bg-bg-canvas" id="main-content"&gt;</span>
2012
- {/* Left Sidebar - Workflow List &amp; Tools */}
2013
- <span class="cstat-no" title="statement not covered" > &lt;Sidebar /&gt;</span>
2014
- &nbsp;
2015
- {/* Main Canvas Area */}
2016
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex flex-1 flex-col relative"&gt;</span>
2017
- {/* Mobile Header */}
2018
- <span class="cstat-no" title="statement not covered" > {breakpoint === 'mobile' &amp;&amp; (</span>
2019
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex items-center justify-between p-3 border-b border-border-default bg-bg-panel"&gt;</span>
2020
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2021
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setSidebarOpen(true)}</span>
2022
- <span class="cstat-no" title="statement not covered" > className="w-10 h-10 rounded-lg flex items-center justify-center hover:bg-bg-hover transition-colors"</span>
2023
- <span class="cstat-no" title="statement not covered" > aria-label="Open menu"</span>
2024
- &gt;
2025
- <span class="cstat-no" title="statement not covered" > &lt;Menu className="w-5 h-5 text-text-secondary" /&gt;</span>
2026
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2027
- <span class="cstat-no" title="statement not covered" > &lt;h1 className="text-sm font-medium text-text-primary flex items-center gap-1.5"&gt;</span>
2028
- <span class="cstat-no" title="statement not covered" > &lt;img src="/marktoflow-logo.png" alt="Marktoflow" className="w-6 h-6 rounded-full object-cover" /&gt;</span>
2029
- Marktoflow
2030
- <span class="cstat-no" title="statement not covered" > &lt;/h1&gt;</span>
2031
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2032
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setPropertiesPanelOpen(true)}</span>
2033
- <span class="cstat-no" title="statement not covered" > className="w-10 h-10 rounded-lg flex items-center justify-center hover:bg-bg-hover transition-colors"</span>
2034
- <span class="cstat-no" title="statement not covered" > aria-label="Open properties"</span>
2035
- &gt;
2036
- <span class="cstat-no" title="statement not covered" > &lt;PanelRight className="w-5 h-5 text-text-secondary" /&gt;</span>
2037
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2038
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2039
- )}
2040
- &nbsp;
2041
- {/* Desktop: Connection status, theme toggle &amp; shortcuts */}
2042
- <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2043
- <span class="cstat-no" title="statement not covered" > &lt;div className="absolute top-4 right-4 z-10 flex items-center gap-2"&gt;</span>
2044
- <span class="cstat-no" title="statement not covered" > &lt;ThemeToggle showLabel /&gt;</span>
2045
- <span class="cstat-no" title="statement not covered" > &lt;KeyboardShortcutsButton onClick={openShortcuts} /&gt;</span>
2046
- <span class="cstat-no" title="statement not covered" > &lt;div</span>
2047
- <span class="cstat-no" title="statement not covered" > className={`flex items-center gap-2 px-3 py-1.5 rounded-full text-xs ${</span>
2048
- <span class="cstat-no" title="statement not covered" > connected</span>
2049
- <span class="cstat-no" title="statement not covered" > ? 'bg-success/10 text-success'</span>
2050
- <span class="cstat-no" title="statement not covered" > : 'bg-error/10 text-error'</span>
2051
- <span class="cstat-no" title="statement not covered" > }`}</span>
2052
- &gt;
2053
- <span class="cstat-no" title="statement not covered" > &lt;div</span>
2054
- <span class="cstat-no" title="statement not covered" > className={`w-2 h-2 rounded-full ${</span>
2055
- <span class="cstat-no" title="statement not covered" > connected ? 'bg-success' : 'bg-error'</span>
2056
- <span class="cstat-no" title="statement not covered" > }`}</span>
2057
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2058
- <span class="cstat-no" title="statement not covered" > {connected ? 'Connected' : 'Disconnected'}</span>
2059
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2060
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2061
- )}
2062
- &nbsp;
2063
- {/* Toolbar */}
2064
- <span class="cstat-no" title="statement not covered" > &lt;Toolbar</span>
2065
- <span class="cstat-no" title="statement not covered" > onAddStep={handleAddStep}</span>
2066
- <span class="cstat-no" title="statement not covered" > onExecute={handleExecute}</span>
2067
- <span class="cstat-no" title="statement not covered" > onSave={handleSave}</span>
2068
- <span class="cstat-no" title="statement not covered" > onValidate={handleValidate}</span>
2069
- <span class="cstat-no" title="statement not covered" > isExecuting={isExecuting}</span>
2070
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2071
- &nbsp;
2072
- {/* Breadcrumb for sub-workflow navigation */}
2073
- <span class="cstat-no" title="statement not covered" > &lt;Breadcrumb</span>
2074
- <span class="cstat-no" title="statement not covered" > items={breadcrumbs}</span>
2075
- <span class="cstat-no" title="statement not covered" > onNavigate={handleBreadcrumbNavigate}</span>
2076
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2077
- &nbsp;
2078
- {/* Canvas */}
2079
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex-1 relative"&gt;</span>
2080
- <span class="cstat-no" title="statement not covered" > &lt;Canvas /&gt;</span>
2081
- &nbsp;
2082
- {/* Show Toolbar button (when hidden) */}
2083
- <span class="cstat-no" title="statement not covered" > {!toolbarVisible &amp;&amp; breakpoint !== 'mobile' &amp;&amp; (</span>
2084
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2085
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setToolbarVisible(true)}</span>
2086
- <span class="cstat-no" title="statement not covered" > className="absolute top-4 left-1/2 -translate-x-1/2 z-10 p-2 bg-bg-panel/90 backdrop-blur border border-border-default rounded-lg shadow-md hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2087
- <span class="cstat-no" title="statement not covered" > title="Show toolbar"</span>
2088
- &gt;
2089
- <span class="cstat-no" title="statement not covered" > &lt;Wrench className="w-4 h-4" /&gt;</span>
2090
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2091
- )}
2092
- &nbsp;
2093
- {/* Left edge: toggle sidebar */}
2094
- <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2095
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2096
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setSidebarOpen(!sidebarOpen)}</span>
2097
- <span class="cstat-no" title="statement not covered" > className="absolute left-0 top-1/2 -translate-y-1/2 z-10 p-1.5 bg-bg-panel/90 backdrop-blur border border-l-0 border-border-default rounded-r-lg shadow-sm hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2098
- <span class="cstat-no" title="statement not covered" > title={sidebarOpen ? 'Collapse sidebar' : 'Expand sidebar'}</span>
2099
- <span class="cstat-no" title="statement not covered" > aria-label={sidebarOpen ? 'Collapse sidebar' : 'Expand sidebar'}</span>
2100
- &gt;
2101
- <span class="cstat-no" title="statement not covered" > &lt;PanelLeft className="w-4 h-4" /&gt;</span>
2102
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2103
- )}
2104
- &nbsp;
2105
- {/* Right edge: toggle properties panel */}
2106
- <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2107
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2108
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setPropertiesPanelOpen(!propertiesPanelOpen)}</span>
2109
- <span class="cstat-no" title="statement not covered" > className="absolute right-0 top-1/2 -translate-y-1/2 z-10 p-1.5 bg-bg-panel/90 backdrop-blur border border-r-0 border-border-default rounded-l-lg shadow-sm hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2110
- <span class="cstat-no" title="statement not covered" > title={propertiesPanelOpen ? 'Collapse properties' : 'Expand properties'}</span>
2111
- <span class="cstat-no" title="statement not covered" > aria-label={propertiesPanelOpen ? 'Collapse properties' : 'Expand properties'}</span>
2112
- &gt;
2113
- <span class="cstat-no" title="statement not covered" > &lt;PanelRight className="w-4 h-4" /&gt;</span>
2114
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2115
- )}
2116
- &nbsp;
2117
- {/* Execution Overlay */}
2118
- <span class="cstat-no" title="statement not covered" > &lt;ExecutionOverlay</span>
2119
- <span class="cstat-no" title="statement not covered" > isExecuting={isExecuting}</span>
2120
- <span class="cstat-no" title="statement not covered" > isPaused={isPaused}</span>
2121
- <span class="cstat-no" title="statement not covered" > workflowStatus={workflowStatus}</span>
2122
- <span class="cstat-no" title="statement not covered" > currentStepId={currentStepId}</span>
2123
- <span class="cstat-no" title="statement not covered" > steps={executionSteps}</span>
2124
- <span class="cstat-no" title="statement not covered" > logs={executionLogs}</span>
2125
- <span class="cstat-no" title="statement not covered" > onPause={() =&gt; pauseExecution()}</span>
2126
- <span class="cstat-no" title="statement not covered" > onResume={() =&gt; resumeExecution()}</span>
2127
- <span class="cstat-no" title="statement not covered" > onStop={() =&gt; {</span>
2128
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
2129
- <span class="cstat-no" title="statement not covered" > cancelExecution(runIdRef.current);</span>
2130
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
2131
- <span class="cstat-no" title="statement not covered" > }</span>
2132
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('cancelled');</span>
2133
- <span class="cstat-no" title="statement not covered" > }}</span>
2134
- <span class="cstat-no" title="statement not covered" > onStepOver={() =&gt; stepOver()}</span>
2135
- <span class="cstat-no" title="statement not covered" > onClose={() =&gt; {</span>
2136
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('pending');</span>
2137
- <span class="cstat-no" title="statement not covered" > setExecutionSteps([]);</span>
2138
- <span class="cstat-no" title="statement not covered" > setExecutionLogs([]);</span>
2139
- <span class="cstat-no" title="statement not covered" > }}</span>
2140
- // Debug props
2141
- <span class="cstat-no" title="statement not covered" > debug={debug}</span>
2142
- <span class="cstat-no" title="statement not covered" > onToggleDebugMode={() =&gt; {</span>
2143
- <span class="cstat-no" title="statement not covered" > if (debug.enabled) {</span>
2144
- <span class="cstat-no" title="statement not covered" > disableDebugMode();</span>
2145
- <span class="cstat-no" title="statement not covered" > } else {</span>
2146
- <span class="cstat-no" title="statement not covered" > enableDebugMode();</span>
2147
- <span class="cstat-no" title="statement not covered" > }</span>
2148
- <span class="cstat-no" title="statement not covered" > }}</span>
2149
- <span class="cstat-no" title="statement not covered" > onToggleBreakpoint={(stepId) =&gt; toggleBreakpoint(stepId)}</span>
2150
- <span class="cstat-no" title="statement not covered" > onStepInto={() =&gt; stepInto()}</span>
2151
- <span class="cstat-no" title="statement not covered" > onStepOut={() =&gt; stepOut()}</span>
2152
- <span class="cstat-no" title="statement not covered" > onClearBreakpoints={() =&gt; clearAllBreakpoints()}</span>
2153
- <span class="cstat-no" title="statement not covered" > onAddWatchExpression={(expr) =&gt; addWatchExpression(expr)}</span>
2154
- <span class="cstat-no" title="statement not covered" > onRemoveWatchExpression={(expr) =&gt; removeWatchExpression(expr)}</span>
2155
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2156
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2157
- &nbsp;
2158
- {/* AI Prompt Input */}
2159
- <span class="cstat-no" title="statement not covered" > &lt;PromptInput /&gt;</span>
2160
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2161
- &nbsp;
2162
- {/* Right Panel - Properties */}
2163
- <span class="cstat-no" title="statement not covered" > &lt;PropertiesPanel /&gt;</span>
2164
- &nbsp;
2165
- {/* New Step Wizard */}
2166
- <span class="cstat-no" title="statement not covered" > &lt;NewStepWizard</span>
2167
- <span class="cstat-no" title="statement not covered" > open={isNewStepOpen}</span>
2168
- <span class="cstat-no" title="statement not covered" > onOpenChange={(open) =&gt; {</span>
2169
- <span class="cstat-no" title="statement not covered" > if (!open) closeNewStepWizard();</span>
2170
- <span class="cstat-no" title="statement not covered" > }}</span>
2171
- <span class="cstat-no" title="statement not covered" > onCreateStep={handleCreateStep}</span>
2172
- <span class="cstat-no" title="statement not covered" > position={newStepPosition || undefined}</span>
2173
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2174
- &nbsp;
2175
- {/* Change Preview Modal */}
2176
- <span class="cstat-no" title="statement not covered" > {pendingChanges &amp;&amp; (</span>
2177
- <span class="cstat-no" title="statement not covered" > &lt;ChangePreview</span>
2178
- <span class="cstat-no" title="statement not covered" > open={!!pendingChanges}</span>
2179
- <span class="cstat-no" title="statement not covered" > onOpenChange={() =&gt; rejectChanges()}</span>
2180
- <span class="cstat-no" title="statement not covered" > originalWorkflow={currentWorkflow}</span>
2181
- <span class="cstat-no" title="statement not covered" > modifiedWorkflow={pendingChanges}</span>
2182
- <span class="cstat-no" title="statement not covered" > explanation="AI has suggested the following changes to your workflow."</span>
2183
- <span class="cstat-no" title="statement not covered" > onAccept={acceptChanges}</span>
2184
- <span class="cstat-no" title="statement not covered" > onReject={rejectChanges}</span>
2185
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2186
- )}
2187
- &nbsp;
2188
- {/* Execution Input Dialog */}
2189
- <span class="cstat-no" title="statement not covered" > {currentWorkflow?.inputs &amp;&amp; (</span>
2190
- <span class="cstat-no" title="statement not covered" > &lt;ExecutionInputDialog</span>
2191
- <span class="cstat-no" title="statement not covered" > open={showInputDialog}</span>
2192
- <span class="cstat-no" title="statement not covered" > onOpenChange={setShowInputDialog}</span>
2193
- <span class="cstat-no" title="statement not covered" > inputs={currentWorkflow.inputs}</span>
2194
- <span class="cstat-no" title="statement not covered" > onExecute={handleExecute}</span>
2195
- <span class="cstat-no" title="statement not covered" > workflowName={currentWorkflow.metadata?.name}</span>
2196
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2197
- )}
2198
- &nbsp;
2199
- {/* Validation Panel */}
2200
- <span class="cstat-no" title="statement not covered" > &lt;ValidationPanel</span>
2201
- <span class="cstat-no" title="statement not covered" > workflowPath={showValidationPanel ? selectedWorkflow : null}</span>
2202
- <span class="cstat-no" title="statement not covered" > onClose={() =&gt; setShowValidationPanel(false)}</span>
2203
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2204
- &nbsp;
2205
- {/* Keyboard Shortcuts Modal */}
2206
- <span class="cstat-no" title="statement not covered" > &lt;KeyboardShortcuts open={isShortcutsOpen} onOpenChange={setShortcutsOpen} /&gt;</span>
2207
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2208
- <span class="cstat-no" title="statement not covered" > &lt;/ReactFlowProvider&gt;</span>
2209
- );
2210
- <span class="cstat-no" title="statement not covered" >}</span>
2211
- &nbsp;</pre></td></tr></table></pre>
2212
-
2213
- <div class='push'></div><!-- for sticky footer -->
2214
- </div><!-- /wrapper -->
2215
- <div class='footer quiet pad2 space-top1 center small'>
2216
- Code coverage generated by
2217
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2218
- at 2026-02-09T21:07:24.535Z
2219
- </div>
2220
- <script src="../prettify.js"></script>
2221
- <script>
2222
- window.onload = function () {
2223
- prettyPrint();
2224
- };
2225
- </script>
2226
- <script src="../sorter.js"></script>
2227
- <script src="../block-navigation.js"></script>
2228
- </body>
2229
- </html>
2230
-