repoburg 1.3.127 → 1.3.129

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 (470) hide show
  1. package/backend/.env +2 -2
  2. package/backend/coverage/clover.xml +12003 -0
  3. package/backend/coverage/coverage-final.json +313 -0
  4. package/backend/coverage/lcov-report/base.css +224 -0
  5. package/backend/coverage/lcov-report/block-navigation.js +87 -0
  6. package/backend/coverage/lcov-report/favicon.png +0 -0
  7. package/backend/coverage/lcov-report/index.html +1301 -0
  8. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +116 -0
  9. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +445 -0
  10. package/backend/coverage/lcov-report/packages/gemini-core/index.html +116 -0
  11. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +127 -0
  12. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +193 -0
  13. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +832 -0
  14. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +206 -0
  15. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +469 -0
  16. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +1705 -0
  17. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +790 -0
  18. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +454 -0
  19. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +685 -0
  20. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +307 -0
  21. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +146 -0
  22. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +151 -0
  23. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +172 -0
  24. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +490 -0
  25. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +1237 -0
  26. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +139 -0
  27. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +176 -0
  28. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +409 -0
  29. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +181 -0
  30. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +116 -0
  31. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +187 -0
  32. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +229 -0
  33. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +634 -0
  34. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +373 -0
  35. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +191 -0
  36. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +124 -0
  37. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +835 -0
  38. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +211 -0
  39. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +421 -0
  40. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +191 -0
  41. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +592 -0
  42. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +388 -0
  43. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +877 -0
  44. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +112 -0
  45. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +502 -0
  46. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +161 -0
  47. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +415 -0
  48. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +139 -0
  49. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +1249 -0
  50. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +131 -0
  51. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +187 -0
  52. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +193 -0
  53. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +178 -0
  54. package/backend/coverage/lcov-report/prettify.css +1 -0
  55. package/backend/coverage/lcov-report/prettify.js +2 -0
  56. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  57. package/backend/coverage/lcov-report/sorter.js +210 -0
  58. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +1549 -0
  59. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +904 -0
  60. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +175 -0
  61. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +1534 -0
  62. package/backend/coverage/lcov-report/src/ai-actions/index.html +161 -0
  63. package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
  64. package/backend/coverage/lcov-report/src/app.module.ts.html +451 -0
  65. package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
  66. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +1609 -0
  67. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +136 -0
  68. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +2281 -0
  69. package/backend/coverage/lcov-report/src/application-state/dto/index.html +416 -0
  70. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +109 -0
  71. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +118 -0
  72. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +109 -0
  73. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +124 -0
  74. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +121 -0
  75. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +124 -0
  76. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +115 -0
  77. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +115 -0
  78. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +127 -0
  79. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +118 -0
  80. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +109 -0
  81. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +139 -0
  82. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +109 -0
  83. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +109 -0
  84. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +118 -0
  85. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +124 -0
  86. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +118 -0
  87. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +109 -0
  88. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +124 -0
  89. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +118 -0
  90. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +109 -0
  91. package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
  92. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +1297 -0
  93. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +712 -0
  94. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +379 -0
  95. package/backend/coverage/lcov-report/src/common/cache/index.html +146 -0
  96. package/backend/coverage/lcov-report/src/common/common.module.ts.html +121 -0
  97. package/backend/coverage/lcov-report/src/common/index.html +116 -0
  98. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +337 -0
  99. package/backend/coverage/lcov-report/src/common/interceptors/index.html +116 -0
  100. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +265 -0
  101. package/backend/coverage/lcov-report/src/common/middleware/index.html +116 -0
  102. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
  103. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1501 -0
  104. package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
  105. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +427 -0
  106. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +142 -0
  107. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +442 -0
  108. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
  109. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
  110. package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
  111. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +724 -0
  112. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +142 -0
  113. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +1015 -0
  114. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +511 -0
  115. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
  116. package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
  117. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +613 -0
  118. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +124 -0
  119. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +211 -0
  120. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +190 -0
  121. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +439 -0
  122. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +205 -0
  123. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +241 -0
  124. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +553 -0
  125. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +208 -0
  126. package/backend/coverage/lcov-report/src/core-entities/index.html +371 -0
  127. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +136 -0
  128. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +388 -0
  129. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +256 -0
  130. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +256 -0
  131. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +181 -0
  132. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +745 -0
  133. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +688 -0
  134. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +349 -0
  135. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +235 -0
  136. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +442 -0
  137. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
  138. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
  139. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
  140. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
  141. package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
  142. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +463 -0
  143. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +124 -0
  144. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +310 -0
  145. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +244 -0
  146. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +116 -0
  147. package/backend/coverage/lcov-report/src/custom-variables/index.html +146 -0
  148. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +295 -0
  149. package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
  150. package/backend/coverage/lcov-report/src/events/index.html +146 -0
  151. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +466 -0
  152. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
  153. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
  154. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
  155. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
  156. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
  157. package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
  158. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +553 -0
  159. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +109 -0
  160. package/backend/coverage/lcov-report/src/gemini/index.html +131 -0
  161. package/backend/coverage/lcov-report/src/global-config/dto/index.html +116 -0
  162. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +367 -0
  163. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +220 -0
  164. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +115 -0
  165. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +397 -0
  166. package/backend/coverage/lcov-report/src/global-config/index.html +146 -0
  167. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
  168. package/backend/coverage/lcov-report/src/index.html +206 -0
  169. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +187 -0
  170. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +1825 -0
  171. package/backend/coverage/lcov-report/src/interactive-chat/index.html +146 -0
  172. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +343 -0
  173. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +116 -0
  174. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +214 -0
  175. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +146 -0
  176. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +634 -0
  177. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +124 -0
  178. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +643 -0
  179. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +1090 -0
  180. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +433 -0
  181. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +757 -0
  182. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +586 -0
  183. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +1153 -0
  184. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +124 -0
  185. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +103 -0
  186. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +124 -0
  187. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +106 -0
  188. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +106 -0
  189. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +118 -0
  190. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +190 -0
  191. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +196 -0
  192. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +91 -0
  193. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +356 -0
  194. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +106 -0
  195. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +124 -0
  196. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +124 -0
  197. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +214 -0
  198. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +202 -0
  199. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +151 -0
  200. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +181 -0
  201. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +130 -0
  202. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +631 -0
  203. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +469 -0
  204. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +448 -0
  205. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +1351 -0
  206. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +868 -0
  207. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +481 -0
  208. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +416 -0
  209. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +580 -0
  210. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +352 -0
  211. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +1054 -0
  212. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +331 -0
  213. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +403 -0
  214. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +176 -0
  215. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +100 -0
  216. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +724 -0
  217. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +358 -0
  218. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +379 -0
  219. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +838 -0
  220. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +1702 -0
  221. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +1459 -0
  222. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +679 -0
  223. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +964 -0
  224. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +625 -0
  225. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +103 -0
  226. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +116 -0
  227. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +1645 -0
  228. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +238 -0
  229. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +181 -0
  230. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +161 -0
  231. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +313 -0
  232. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +466 -0
  233. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +176 -0
  234. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +319 -0
  235. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +706 -0
  236. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +1150 -0
  237. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +131 -0
  238. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +658 -0
  239. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +127 -0
  240. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +547 -0
  241. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +1681 -0
  242. package/backend/coverage/lcov-report/src/llm-provider/index.html +236 -0
  243. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +187 -0
  244. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +361 -0
  245. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +175 -0
  246. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +1780 -0
  247. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +1867 -0
  248. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +1891 -0
  249. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +304 -0
  250. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +1666 -0
  251. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +131 -0
  252. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +436 -0
  253. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +319 -0
  254. package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
  255. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +283 -0
  256. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +184 -0
  257. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +1474 -0
  258. package/backend/coverage/lcov-report/src/main.ts.html +463 -0
  259. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +145 -0
  260. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +127 -0
  261. package/backend/coverage/lcov-report/src/mcp/dto/index.html +146 -0
  262. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +112 -0
  263. package/backend/coverage/lcov-report/src/mcp/index.html +146 -0
  264. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +340 -0
  265. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +124 -0
  266. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +1345 -0
  267. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +116 -0
  268. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +109 -0
  269. package/backend/coverage/lcov-report/src/message-bus/index.html +146 -0
  270. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +148 -0
  271. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +115 -0
  272. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +151 -0
  273. package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
  274. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +196 -0
  275. package/backend/coverage/lcov-report/src/projects/index.html +146 -0
  276. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +322 -0
  277. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
  278. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +235 -0
  279. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +280 -0
  280. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +439 -0
  281. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
  282. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +271 -0
  283. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +172 -0
  284. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +116 -0
  285. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +157 -0
  286. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
  287. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +151 -0
  288. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +161 -0
  289. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +247 -0
  290. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
  291. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +100 -0
  292. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +97 -0
  293. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +100 -0
  294. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +304 -0
  295. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
  296. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +341 -0
  297. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +100 -0
  298. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +97 -0
  299. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
  300. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
  301. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
  302. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
  303. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
  304. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
  305. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +94 -0
  306. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
  307. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +94 -0
  308. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +97 -0
  309. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +131 -0
  310. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +121 -0
  311. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +116 -0
  312. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +115 -0
  313. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +136 -0
  314. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +131 -0
  315. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +190 -0
  316. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +421 -0
  317. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +265 -0
  318. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
  319. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +388 -0
  320. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +265 -0
  321. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +274 -0
  322. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +146 -0
  323. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +250 -0
  324. package/backend/coverage/lcov-report/src/seeding/index.html +236 -0
  325. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +193 -0
  326. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +211 -0
  327. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +187 -0
  328. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +742 -0
  329. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +397 -0
  330. package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
  331. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
  332. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +718 -0
  333. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
  334. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +577 -0
  335. package/backend/coverage/lcov-report/src/session-inputs/index.html +176 -0
  336. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +832 -0
  337. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +220 -0
  338. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +685 -0
  339. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +229 -0
  340. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1981 -0
  341. package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
  342. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +160 -0
  343. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +883 -0
  344. package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
  345. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +769 -0
  346. package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
  347. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +1306 -0
  348. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +220 -0
  349. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +2797 -0
  350. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +355 -0
  351. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +131 -0
  352. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +295 -0
  353. package/backend/coverage/lcov-report/src/sub-agents/index.html +221 -0
  354. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +463 -0
  355. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +2428 -0
  356. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +580 -0
  357. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +550 -0
  358. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +475 -0
  359. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +373 -0
  360. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +205 -0
  361. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +619 -0
  362. package/backend/coverage/lcov-report/src/syntax-validation/index.html +131 -0
  363. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +109 -0
  364. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +724 -0
  365. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +176 -0
  366. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +157 -0
  367. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +148 -0
  368. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +517 -0
  369. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +121 -0
  370. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +118 -0
  371. package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
  372. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +1060 -0
  373. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +160 -0
  374. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +2254 -0
  375. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
  376. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +181 -0
  377. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +131 -0
  378. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +178 -0
  379. package/backend/coverage/lcov-report/src/tool-hooks/index.html +146 -0
  380. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +481 -0
  381. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +127 -0
  382. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +1222 -0
  383. package/backend/coverage/lcov-report/src/tracing.ts.html +214 -0
  384. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +130 -0
  385. package/backend/coverage/lcov-report/src/types/index.html +116 -0
  386. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +253 -0
  387. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
  388. package/backend/coverage/lcov-report/src/utils/index.html +191 -0
  389. package/backend/coverage/lcov-report/src/utils/index.ts.html +100 -0
  390. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +109 -0
  391. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +412 -0
  392. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +223 -0
  393. package/backend/coverage/lcov-report/src/visual-editor/index.html +146 -0
  394. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +409 -0
  395. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +130 -0
  396. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +118 -0
  397. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +112 -0
  398. package/backend/coverage/lcov-report/src/workspace/dto/index.html +131 -0
  399. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
  400. package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
  401. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +394 -0
  402. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
  403. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +1027 -0
  404. package/backend/coverage/lcov.info +20220 -0
  405. package/backend/dist/src/context-templates/context-templates.service.js +0 -3
  406. package/backend/dist/src/context-templates/context-templates.service.js.map +1 -1
  407. package/backend/dist/src/core-entities/system-prompt.entity.d.ts +1 -0
  408. package/backend/dist/src/core-entities/system-prompt.entity.js +8 -0
  409. package/backend/dist/src/core-entities/system-prompt.entity.js.map +1 -1
  410. package/backend/dist/src/llm-orchestration/action-handlers/mcp-tool-action.handler.js +2 -0
  411. package/backend/dist/src/llm-orchestration/action-handlers/mcp-tool-action.handler.js.map +1 -1
  412. package/backend/dist/src/llm-orchestration/tool-schema.service.js +8 -4
  413. package/backend/dist/src/llm-orchestration/tool-schema.service.js.map +1 -1
  414. package/backend/dist/src/mcp/mcp.service.d.ts +1 -0
  415. package/backend/dist/src/mcp/mcp.service.js +16 -0
  416. package/backend/dist/src/mcp/mcp.service.js.map +1 -1
  417. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
  418. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +4 -0
  419. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
  420. package/backend/dist/src/seeding/data/sub-agents/browser-use.d.ts +9 -0
  421. package/backend/dist/src/seeding/data/sub-agents/browser-use.js +13 -0
  422. package/backend/dist/src/seeding/data/sub-agents/browser-use.js.map +1 -0
  423. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.d.ts +4 -0
  424. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js +40 -0
  425. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js.map +1 -0
  426. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.d.ts +1 -0
  427. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js +2 -1
  428. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js.map +1 -1
  429. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.d.ts +1 -0
  430. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js +2 -1
  431. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js.map +1 -1
  432. package/backend/dist/src/seeding/sub-agent-seeding.service.js +14 -1
  433. package/backend/dist/src/seeding/sub-agent-seeding.service.js.map +1 -1
  434. package/backend/dist/src/seeding/system-prompt-seeding.service.js +3 -1
  435. package/backend/dist/src/seeding/system-prompt-seeding.service.js.map +1 -1
  436. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.d.ts +1 -0
  437. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.js +8 -0
  438. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.js.map +1 -1
  439. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.d.ts +1 -0
  440. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.js +7 -0
  441. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.js.map +1 -1
  442. package/backend/dist/src/sub-agents/sub-agent-run.entity.d.ts +1 -1
  443. package/backend/dist/src/sub-agents/sub-agent-run.entity.js +1 -1
  444. package/backend/dist/src/sub-agents/sub-agent-run.entity.js.map +1 -1
  445. package/backend/dist/src/sub-agents/sub-agent-runner.service.d.ts +2 -0
  446. package/backend/dist/src/sub-agents/sub-agent-runner.service.js +68 -2
  447. package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
  448. package/backend/dist/src/sub-agents/sub-agent.entity.d.ts +1 -0
  449. package/backend/dist/src/sub-agents/sub-agent.entity.js +8 -0
  450. package/backend/dist/src/sub-agents/sub-agent.entity.js.map +1 -1
  451. package/backend/dist/src/sub-agents/sub-agents.service.d.ts +2 -0
  452. package/backend/dist/src/sub-agents/sub-agents.service.js +42 -5
  453. package/backend/dist/src/sub-agents/sub-agents.service.js.map +1 -1
  454. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.d.ts +4 -0
  455. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.js +38 -0
  456. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.js.map +1 -0
  457. package/backend/dist/src/system-prompts/dto/system-prompt.dto.d.ts +2 -0
  458. package/backend/dist/src/system-prompts/dto/system-prompt.dto.js +16 -0
  459. package/backend/dist/src/system-prompts/dto/system-prompt.dto.js.map +1 -1
  460. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.d.ts +3 -0
  461. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.js +27 -0
  462. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.js.map +1 -0
  463. package/backend/dist/src/system-prompts/system-prompts.controller.d.ts +17 -0
  464. package/backend/dist/src/system-prompts/system-prompts.controller.js +83 -0
  465. package/backend/dist/src/system-prompts/system-prompts.controller.js.map +1 -1
  466. package/backend/dist/src/system-prompts/system-prompts.service.d.ts +13 -1
  467. package/backend/dist/src/system-prompts/system-prompts.service.js +125 -5
  468. package/backend/dist/src/system-prompts/system-prompts.service.js.map +1 -1
  469. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  470. package/package.json +1 -1
@@ -0,0 +1,2797 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/sessions/sessions.service.ts</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">src/sessions</a> sessions.service.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">88.71% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>291/328</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">74.54% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>82/110</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">82.35% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>28/34</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">88.47% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>284/321</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 high'></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>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a>
790
+ <a name='L725'></a><a href='#L725'>725</a>
791
+ <a name='L726'></a><a href='#L726'>726</a>
792
+ <a name='L727'></a><a href='#L727'>727</a>
793
+ <a name='L728'></a><a href='#L728'>728</a>
794
+ <a name='L729'></a><a href='#L729'>729</a>
795
+ <a name='L730'></a><a href='#L730'>730</a>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a>
824
+ <a name='L759'></a><a href='#L759'>759</a>
825
+ <a name='L760'></a><a href='#L760'>760</a>
826
+ <a name='L761'></a><a href='#L761'>761</a>
827
+ <a name='L762'></a><a href='#L762'>762</a>
828
+ <a name='L763'></a><a href='#L763'>763</a>
829
+ <a name='L764'></a><a href='#L764'>764</a>
830
+ <a name='L765'></a><a href='#L765'>765</a>
831
+ <a name='L766'></a><a href='#L766'>766</a>
832
+ <a name='L767'></a><a href='#L767'>767</a>
833
+ <a name='L768'></a><a href='#L768'>768</a>
834
+ <a name='L769'></a><a href='#L769'>769</a>
835
+ <a name='L770'></a><a href='#L770'>770</a>
836
+ <a name='L771'></a><a href='#L771'>771</a>
837
+ <a name='L772'></a><a href='#L772'>772</a>
838
+ <a name='L773'></a><a href='#L773'>773</a>
839
+ <a name='L774'></a><a href='#L774'>774</a>
840
+ <a name='L775'></a><a href='#L775'>775</a>
841
+ <a name='L776'></a><a href='#L776'>776</a>
842
+ <a name='L777'></a><a href='#L777'>777</a>
843
+ <a name='L778'></a><a href='#L778'>778</a>
844
+ <a name='L779'></a><a href='#L779'>779</a>
845
+ <a name='L780'></a><a href='#L780'>780</a>
846
+ <a name='L781'></a><a href='#L781'>781</a>
847
+ <a name='L782'></a><a href='#L782'>782</a>
848
+ <a name='L783'></a><a href='#L783'>783</a>
849
+ <a name='L784'></a><a href='#L784'>784</a>
850
+ <a name='L785'></a><a href='#L785'>785</a>
851
+ <a name='L786'></a><a href='#L786'>786</a>
852
+ <a name='L787'></a><a href='#L787'>787</a>
853
+ <a name='L788'></a><a href='#L788'>788</a>
854
+ <a name='L789'></a><a href='#L789'>789</a>
855
+ <a name='L790'></a><a href='#L790'>790</a>
856
+ <a name='L791'></a><a href='#L791'>791</a>
857
+ <a name='L792'></a><a href='#L792'>792</a>
858
+ <a name='L793'></a><a href='#L793'>793</a>
859
+ <a name='L794'></a><a href='#L794'>794</a>
860
+ <a name='L795'></a><a href='#L795'>795</a>
861
+ <a name='L796'></a><a href='#L796'>796</a>
862
+ <a name='L797'></a><a href='#L797'>797</a>
863
+ <a name='L798'></a><a href='#L798'>798</a>
864
+ <a name='L799'></a><a href='#L799'>799</a>
865
+ <a name='L800'></a><a href='#L800'>800</a>
866
+ <a name='L801'></a><a href='#L801'>801</a>
867
+ <a name='L802'></a><a href='#L802'>802</a>
868
+ <a name='L803'></a><a href='#L803'>803</a>
869
+ <a name='L804'></a><a href='#L804'>804</a>
870
+ <a name='L805'></a><a href='#L805'>805</a>
871
+ <a name='L806'></a><a href='#L806'>806</a>
872
+ <a name='L807'></a><a href='#L807'>807</a>
873
+ <a name='L808'></a><a href='#L808'>808</a>
874
+ <a name='L809'></a><a href='#L809'>809</a>
875
+ <a name='L810'></a><a href='#L810'>810</a>
876
+ <a name='L811'></a><a href='#L811'>811</a>
877
+ <a name='L812'></a><a href='#L812'>812</a>
878
+ <a name='L813'></a><a href='#L813'>813</a>
879
+ <a name='L814'></a><a href='#L814'>814</a>
880
+ <a name='L815'></a><a href='#L815'>815</a>
881
+ <a name='L816'></a><a href='#L816'>816</a>
882
+ <a name='L817'></a><a href='#L817'>817</a>
883
+ <a name='L818'></a><a href='#L818'>818</a>
884
+ <a name='L819'></a><a href='#L819'>819</a>
885
+ <a name='L820'></a><a href='#L820'>820</a>
886
+ <a name='L821'></a><a href='#L821'>821</a>
887
+ <a name='L822'></a><a href='#L822'>822</a>
888
+ <a name='L823'></a><a href='#L823'>823</a>
889
+ <a name='L824'></a><a href='#L824'>824</a>
890
+ <a name='L825'></a><a href='#L825'>825</a>
891
+ <a name='L826'></a><a href='#L826'>826</a>
892
+ <a name='L827'></a><a href='#L827'>827</a>
893
+ <a name='L828'></a><a href='#L828'>828</a>
894
+ <a name='L829'></a><a href='#L829'>829</a>
895
+ <a name='L830'></a><a href='#L830'>830</a>
896
+ <a name='L831'></a><a href='#L831'>831</a>
897
+ <a name='L832'></a><a href='#L832'>832</a>
898
+ <a name='L833'></a><a href='#L833'>833</a>
899
+ <a name='L834'></a><a href='#L834'>834</a>
900
+ <a name='L835'></a><a href='#L835'>835</a>
901
+ <a name='L836'></a><a href='#L836'>836</a>
902
+ <a name='L837'></a><a href='#L837'>837</a>
903
+ <a name='L838'></a><a href='#L838'>838</a>
904
+ <a name='L839'></a><a href='#L839'>839</a>
905
+ <a name='L840'></a><a href='#L840'>840</a>
906
+ <a name='L841'></a><a href='#L841'>841</a>
907
+ <a name='L842'></a><a href='#L842'>842</a>
908
+ <a name='L843'></a><a href='#L843'>843</a>
909
+ <a name='L844'></a><a href='#L844'>844</a>
910
+ <a name='L845'></a><a href='#L845'>845</a>
911
+ <a name='L846'></a><a href='#L846'>846</a>
912
+ <a name='L847'></a><a href='#L847'>847</a>
913
+ <a name='L848'></a><a href='#L848'>848</a>
914
+ <a name='L849'></a><a href='#L849'>849</a>
915
+ <a name='L850'></a><a href='#L850'>850</a>
916
+ <a name='L851'></a><a href='#L851'>851</a>
917
+ <a name='L852'></a><a href='#L852'>852</a>
918
+ <a name='L853'></a><a href='#L853'>853</a>
919
+ <a name='L854'></a><a href='#L854'>854</a>
920
+ <a name='L855'></a><a href='#L855'>855</a>
921
+ <a name='L856'></a><a href='#L856'>856</a>
922
+ <a name='L857'></a><a href='#L857'>857</a>
923
+ <a name='L858'></a><a href='#L858'>858</a>
924
+ <a name='L859'></a><a href='#L859'>859</a>
925
+ <a name='L860'></a><a href='#L860'>860</a>
926
+ <a name='L861'></a><a href='#L861'>861</a>
927
+ <a name='L862'></a><a href='#L862'>862</a>
928
+ <a name='L863'></a><a href='#L863'>863</a>
929
+ <a name='L864'></a><a href='#L864'>864</a>
930
+ <a name='L865'></a><a href='#L865'>865</a>
931
+ <a name='L866'></a><a href='#L866'>866</a>
932
+ <a name='L867'></a><a href='#L867'>867</a>
933
+ <a name='L868'></a><a href='#L868'>868</a>
934
+ <a name='L869'></a><a href='#L869'>869</a>
935
+ <a name='L870'></a><a href='#L870'>870</a>
936
+ <a name='L871'></a><a href='#L871'>871</a>
937
+ <a name='L872'></a><a href='#L872'>872</a>
938
+ <a name='L873'></a><a href='#L873'>873</a>
939
+ <a name='L874'></a><a href='#L874'>874</a>
940
+ <a name='L875'></a><a href='#L875'>875</a>
941
+ <a name='L876'></a><a href='#L876'>876</a>
942
+ <a name='L877'></a><a href='#L877'>877</a>
943
+ <a name='L878'></a><a href='#L878'>878</a>
944
+ <a name='L879'></a><a href='#L879'>879</a>
945
+ <a name='L880'></a><a href='#L880'>880</a>
946
+ <a name='L881'></a><a href='#L881'>881</a>
947
+ <a name='L882'></a><a href='#L882'>882</a>
948
+ <a name='L883'></a><a href='#L883'>883</a>
949
+ <a name='L884'></a><a href='#L884'>884</a>
950
+ <a name='L885'></a><a href='#L885'>885</a>
951
+ <a name='L886'></a><a href='#L886'>886</a>
952
+ <a name='L887'></a><a href='#L887'>887</a>
953
+ <a name='L888'></a><a href='#L888'>888</a>
954
+ <a name='L889'></a><a href='#L889'>889</a>
955
+ <a name='L890'></a><a href='#L890'>890</a>
956
+ <a name='L891'></a><a href='#L891'>891</a>
957
+ <a name='L892'></a><a href='#L892'>892</a>
958
+ <a name='L893'></a><a href='#L893'>893</a>
959
+ <a name='L894'></a><a href='#L894'>894</a>
960
+ <a name='L895'></a><a href='#L895'>895</a>
961
+ <a name='L896'></a><a href='#L896'>896</a>
962
+ <a name='L897'></a><a href='#L897'>897</a>
963
+ <a name='L898'></a><a href='#L898'>898</a>
964
+ <a name='L899'></a><a href='#L899'>899</a>
965
+ <a name='L900'></a><a href='#L900'>900</a>
966
+ <a name='L901'></a><a href='#L901'>901</a>
967
+ <a name='L902'></a><a href='#L902'>902</a>
968
+ <a name='L903'></a><a href='#L903'>903</a>
969
+ <a name='L904'></a><a href='#L904'>904</a>
970
+ <a name='L905'></a><a href='#L905'>905</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">19x</span>
971
+ <span class="cline-any cline-yes">19x</span>
972
+ <span class="cline-any cline-yes">19x</span>
973
+ <span class="cline-any cline-yes">19x</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-neutral">&nbsp;</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-yes">19x</span>
983
+ <span class="cline-any cline-yes">19x</span>
984
+ <span class="cline-any cline-yes">19x</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&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-yes">19x</span>
991
+ <span class="cline-any cline-yes">19x</span>
992
+ <span class="cline-any cline-yes">19x</span>
993
+ <span class="cline-any cline-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-yes">19x</span>
996
+ <span class="cline-any cline-yes">51x</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-yes">51x</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-yes">51x</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-yes">51x</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-yes">51x</span>
1006
+ <span class="cline-any cline-yes">51x</span>
1007
+ <span class="cline-any cline-yes">51x</span>
1008
+ <span class="cline-any cline-yes">51x</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-yes">19x</span>
1013
+ <span class="cline-any cline-yes">5x</span>
1014
+ <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-yes">5x</span>
1016
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1020
+ <span class="cline-any cline-yes">5x</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-yes">5x</span>
1023
+ <span class="cline-any cline-yes">5x</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-yes">5x</span>
1026
+ <span class="cline-any cline-yes">5x</span>
1027
+ <span class="cline-any cline-yes">5x</span>
1028
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-yes">5x</span>
1033
+ <span class="cline-any cline-yes">2x</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-yes">2x</span>
1037
+ <span class="cline-any cline-yes">1x</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-neutral">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-yes">1x</span>
1042
+ <span class="cline-any cline-neutral">&nbsp;</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-yes">4x</span>
1045
+ <span class="cline-any cline-yes">1x</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-yes">1x</span>
1049
+ <span class="cline-any cline-yes">1x</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-neutral">&nbsp;</span>
1052
+ <span class="cline-any cline-neutral">&nbsp;</span>
1053
+ <span class="cline-any cline-no">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-yes">3x</span>
1056
+ <span class="cline-any cline-neutral">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-yes">3x</span>
1059
+ <span class="cline-any cline-yes">1x</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-yes">3x</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-neutral">&nbsp;</span>
1066
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-no">&nbsp;</span>
1073
+ <span class="cline-any cline-neutral">&nbsp;</span>
1074
+ <span class="cline-any cline-yes">3x</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-yes">3x</span>
1078
+ <span class="cline-any cline-yes">1x</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-neutral">&nbsp;</span>
1082
+ <span class="cline-any cline-yes">3x</span>
1083
+ <span class="cline-any cline-no">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-neutral">&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-yes">3x</span>
1094
+ <span class="cline-any cline-neutral">&nbsp;</span>
1095
+ <span class="cline-any cline-neutral">&nbsp;</span>
1096
+ <span class="cline-any cline-yes">3x</span>
1097
+ <span class="cline-any cline-yes">1x</span>
1098
+ <span class="cline-any cline-neutral">&nbsp;</span>
1099
+ <span class="cline-any cline-neutral">&nbsp;</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-yes">3x</span>
1102
+ <span class="cline-any cline-yes">3x</span>
1103
+ <span class="cline-any cline-yes">3x</span>
1104
+ <span class="cline-any cline-neutral">&nbsp;</span>
1105
+ <span class="cline-any cline-neutral">&nbsp;</span>
1106
+ <span class="cline-any cline-neutral">&nbsp;</span>
1107
+ <span class="cline-any cline-yes">19x</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-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-neutral">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1121
+ <span class="cline-any cline-neutral">&nbsp;</span>
1122
+ <span class="cline-any cline-neutral">&nbsp;</span>
1123
+ <span class="cline-any cline-neutral">&nbsp;</span>
1124
+ <span class="cline-any cline-no">&nbsp;</span>
1125
+ <span class="cline-any cline-neutral">&nbsp;</span>
1126
+ <span class="cline-any cline-neutral">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-neutral">&nbsp;</span>
1136
+ <span class="cline-any cline-neutral">&nbsp;</span>
1137
+ <span class="cline-any cline-no">&nbsp;</span>
1138
+ <span class="cline-any cline-neutral">&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-neutral">&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-yes">19x</span>
1148
+ <span class="cline-any cline-yes">95x</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1155
+ <span class="cline-any cline-neutral">&nbsp;</span>
1156
+ <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-neutral">&nbsp;</span>
1158
+ <span class="cline-any cline-neutral">&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-yes">95x</span>
1162
+ <span class="cline-any cline-yes">15x</span>
1163
+ <span class="cline-any cline-neutral">&nbsp;</span>
1164
+ <span class="cline-any cline-neutral">&nbsp;</span>
1165
+ <span class="cline-any cline-yes">95x</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-neutral">&nbsp;</span>
1168
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1172
+ <span class="cline-any cline-neutral">&nbsp;</span>
1173
+ <span class="cline-any cline-neutral">&nbsp;</span>
1174
+ <span class="cline-any cline-neutral">&nbsp;</span>
1175
+ <span class="cline-any cline-neutral">&nbsp;</span>
1176
+ <span class="cline-any cline-neutral">&nbsp;</span>
1177
+ <span class="cline-any cline-yes">95x</span>
1178
+ <span class="cline-any cline-yes">7x</span>
1179
+ <span class="cline-any cline-neutral">&nbsp;</span>
1180
+ <span class="cline-any cline-yes">88x</span>
1181
+ <span class="cline-any cline-neutral">&nbsp;</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-neutral">&nbsp;</span>
1184
+ <span class="cline-any cline-neutral">&nbsp;</span>
1185
+ <span class="cline-any cline-neutral">&nbsp;</span>
1186
+ <span class="cline-any cline-neutral">&nbsp;</span>
1187
+ <span class="cline-any cline-neutral">&nbsp;</span>
1188
+ <span class="cline-any cline-neutral">&nbsp;</span>
1189
+ <span class="cline-any cline-yes">19x</span>
1190
+ <span class="cline-any cline-yes">5x</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-neutral">&nbsp;</span>
1194
+ <span class="cline-any cline-neutral">&nbsp;</span>
1195
+ <span class="cline-any cline-neutral">&nbsp;</span>
1196
+ <span class="cline-any cline-neutral">&nbsp;</span>
1197
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1201
+ <span class="cline-any cline-yes">5x</span>
1202
+ <span class="cline-any cline-yes">3x</span>
1203
+ <span class="cline-any cline-neutral">&nbsp;</span>
1204
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
1208
+ <span class="cline-any cline-yes">19x</span>
1209
+ <span class="cline-any cline-neutral">&nbsp;</span>
1210
+ <span class="cline-any cline-yes">3x</span>
1211
+ <span class="cline-any cline-yes">3x</span>
1212
+ <span class="cline-any cline-yes">1x</span>
1213
+ <span class="cline-any cline-neutral">&nbsp;</span>
1214
+ <span class="cline-any cline-yes">2x</span>
1215
+ <span class="cline-any cline-neutral">&nbsp;</span>
1216
+ <span class="cline-any cline-neutral">&nbsp;</span>
1217
+ <span class="cline-any cline-yes">2x</span>
1218
+ <span class="cline-any cline-neutral">&nbsp;</span>
1219
+ <span class="cline-any cline-yes">1x</span>
1220
+ <span class="cline-any cline-neutral">&nbsp;</span>
1221
+ <span class="cline-any cline-yes">1x</span>
1222
+ <span class="cline-any cline-neutral">&nbsp;</span>
1223
+ <span class="cline-any cline-no">&nbsp;</span>
1224
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-yes">19x</span>
1229
+ <span class="cline-any cline-no">&nbsp;</span>
1230
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1234
+ <span class="cline-any cline-neutral">&nbsp;</span>
1235
+ <span class="cline-any cline-yes">19x</span>
1236
+ <span class="cline-any cline-neutral">&nbsp;</span>
1237
+ <span class="cline-any cline-yes">3x</span>
1238
+ <span class="cline-any cline-yes">3x</span>
1239
+ <span class="cline-any cline-yes">1x</span>
1240
+ <span class="cline-any cline-neutral">&nbsp;</span>
1241
+ <span class="cline-any cline-yes">2x</span>
1242
+ <span class="cline-any cline-neutral">&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-yes">19x</span>
1246
+ <span class="cline-any cline-neutral">&nbsp;</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-neutral">&nbsp;</span>
1249
+ <span class="cline-any cline-yes">4x</span>
1250
+ <span class="cline-any cline-yes">4x</span>
1251
+ <span class="cline-any cline-yes">1x</span>
1252
+ <span class="cline-any cline-neutral">&nbsp;</span>
1253
+ <span class="cline-any cline-neutral">&nbsp;</span>
1254
+ <span class="cline-any cline-yes">3x</span>
1255
+ <span class="cline-any cline-no">&nbsp;</span>
1256
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-yes">3x</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-yes">3x</span>
1263
+ <span class="cline-any cline-yes">1x</span>
1264
+ <span class="cline-any cline-neutral">&nbsp;</span>
1265
+ <span class="cline-any cline-yes">3x</span>
1266
+ <span class="cline-any cline-yes">2x</span>
1267
+ <span class="cline-any cline-yes">2x</span>
1268
+ <span class="cline-any cline-neutral">&nbsp;</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-neutral">&nbsp;</span>
1271
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
1275
+ <span class="cline-any cline-neutral">&nbsp;</span>
1276
+ <span class="cline-any cline-neutral">&nbsp;</span>
1277
+ <span class="cline-any cline-neutral">&nbsp;</span>
1278
+ <span class="cline-any cline-yes">3x</span>
1279
+ <span class="cline-any cline-no">&nbsp;</span>
1280
+ <span class="cline-any cline-neutral">&nbsp;</span>
1281
+ <span class="cline-any cline-neutral">&nbsp;</span>
1282
+ <span class="cline-any cline-yes">3x</span>
1283
+ <span class="cline-any cline-no">&nbsp;</span>
1284
+ <span class="cline-any cline-neutral">&nbsp;</span>
1285
+ <span class="cline-any cline-neutral">&nbsp;</span>
1286
+ <span class="cline-any cline-neutral">&nbsp;</span>
1287
+ <span class="cline-any cline-yes">3x</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-neutral">&nbsp;</span>
1291
+ <span class="cline-any cline-neutral">&nbsp;</span>
1292
+ <span class="cline-any cline-yes">3x</span>
1293
+ <span class="cline-any cline-no">&nbsp;</span>
1294
+ <span class="cline-any cline-neutral">&nbsp;</span>
1295
+ <span class="cline-any cline-neutral">&nbsp;</span>
1296
+ <span class="cline-any cline-yes">3x</span>
1297
+ <span class="cline-any cline-no">&nbsp;</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-yes">3x</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-neutral">&nbsp;</span>
1304
+ <span class="cline-any cline-yes">3x</span>
1305
+ <span class="cline-any cline-yes">3x</span>
1306
+ <span class="cline-any cline-neutral">&nbsp;</span>
1307
+ <span class="cline-any cline-neutral">&nbsp;</span>
1308
+ <span class="cline-any cline-neutral">&nbsp;</span>
1309
+ <span class="cline-any cline-yes">19x</span>
1310
+ <span class="cline-any cline-yes">5x</span>
1311
+ <span class="cline-any cline-neutral">&nbsp;</span>
1312
+ <span class="cline-any cline-neutral">&nbsp;</span>
1313
+ <span class="cline-any cline-yes">4x</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-neutral">&nbsp;</span>
1316
+ <span class="cline-any cline-neutral">&nbsp;</span>
1317
+ <span class="cline-any cline-yes">4x</span>
1318
+ <span class="cline-any cline-yes">3x</span>
1319
+ <span class="cline-any cline-neutral">&nbsp;</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-yes">3x</span>
1322
+ <span class="cline-any cline-yes">3x</span>
1323
+ <span class="cline-any cline-neutral">&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-yes">4x</span>
1328
+ <span class="cline-any cline-neutral">&nbsp;</span>
1329
+ <span class="cline-any cline-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-neutral">&nbsp;</span>
1331
+ <span class="cline-any cline-neutral">&nbsp;</span>
1332
+ <span class="cline-any cline-neutral">&nbsp;</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-neutral">&nbsp;</span>
1335
+ <span class="cline-any cline-neutral">&nbsp;</span>
1336
+ <span class="cline-any cline-neutral">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-yes">7x</span>
1339
+ <span class="cline-any cline-neutral">&nbsp;</span>
1340
+ <span class="cline-any cline-neutral">&nbsp;</span>
1341
+ <span class="cline-any cline-neutral">&nbsp;</span>
1342
+ <span class="cline-any cline-neutral">&nbsp;</span>
1343
+ <span class="cline-any cline-yes">7x</span>
1344
+ <span class="cline-any cline-neutral">&nbsp;</span>
1345
+ <span class="cline-any cline-yes">7x</span>
1346
+ <span class="cline-any cline-yes">3x</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-yes">3x</span>
1349
+ <span class="cline-any cline-yes">3x</span>
1350
+ <span class="cline-any cline-neutral">&nbsp;</span>
1351
+ <span class="cline-any cline-neutral">&nbsp;</span>
1352
+ <span class="cline-any cline-yes">7x</span>
1353
+ <span class="cline-any cline-neutral">&nbsp;</span>
1354
+ <span class="cline-any cline-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-neutral">&nbsp;</span>
1356
+ <span class="cline-any cline-yes">19x</span>
1357
+ <span class="cline-any cline-no">&nbsp;</span>
1358
+ <span class="cline-any cline-neutral">&nbsp;</span>
1359
+ <span class="cline-any cline-neutral">&nbsp;</span>
1360
+ <span class="cline-any cline-neutral">&nbsp;</span>
1361
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-yes">19x</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-neutral">&nbsp;</span>
1369
+ <span class="cline-any cline-neutral">&nbsp;</span>
1370
+ <span class="cline-any cline-neutral">&nbsp;</span>
1371
+ <span class="cline-any cline-neutral">&nbsp;</span>
1372
+ <span class="cline-any cline-yes">9x</span>
1373
+ <span class="cline-any cline-yes">8x</span>
1374
+ <span class="cline-any cline-neutral">&nbsp;</span>
1375
+ <span class="cline-any cline-neutral">&nbsp;</span>
1376
+ <span class="cline-any cline-yes">8x</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-neutral">&nbsp;</span>
1380
+ <span class="cline-any cline-neutral">&nbsp;</span>
1381
+ <span class="cline-any cline-neutral">&nbsp;</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-yes">8x</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-yes">8x</span>
1387
+ <span class="cline-any cline-yes">8x</span>
1388
+ <span class="cline-any cline-yes">14x</span>
1389
+ <span class="cline-any cline-yes">12x</span>
1390
+ <span class="cline-any cline-yes">12x</span>
1391
+ <span class="cline-any cline-yes">12x</span>
1392
+ <span class="cline-any cline-neutral">&nbsp;</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-neutral">&nbsp;</span>
1396
+ <span class="cline-any cline-neutral">&nbsp;</span>
1397
+ <span class="cline-any cline-neutral">&nbsp;</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-neutral">&nbsp;</span>
1400
+ <span class="cline-any cline-yes">8x</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-yes">8x</span>
1403
+ <span class="cline-any cline-neutral">&nbsp;</span>
1404
+ <span class="cline-any cline-yes">12x</span>
1405
+ <span class="cline-any cline-neutral">&nbsp;</span>
1406
+ <span class="cline-any cline-no">&nbsp;</span>
1407
+ <span class="cline-any cline-neutral">&nbsp;</span>
1408
+ <span class="cline-any cline-neutral">&nbsp;</span>
1409
+ <span class="cline-any cline-neutral">&nbsp;</span>
1410
+ <span class="cline-any cline-yes">12x</span>
1411
+ <span class="cline-any cline-yes">12x</span>
1412
+ <span class="cline-any cline-neutral">&nbsp;</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-yes">12x</span>
1415
+ <span class="cline-any cline-yes">12x</span>
1416
+ <span class="cline-any cline-yes">12x</span>
1417
+ <span class="cline-any cline-yes">12x</span>
1418
+ <span class="cline-any cline-yes">12x</span>
1419
+ <span class="cline-any cline-neutral">&nbsp;</span>
1420
+ <span class="cline-any cline-neutral">&nbsp;</span>
1421
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
+ <span class="cline-any cline-yes">12x</span>
1423
+ <span class="cline-any cline-neutral">&nbsp;</span>
1424
+ <span class="cline-any cline-neutral">&nbsp;</span>
1425
+ <span class="cline-any cline-yes">12x</span>
1426
+ <span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-yes">8x</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-neutral">&nbsp;</span>
1436
+ <span class="cline-any cline-neutral">&nbsp;</span>
1437
+ <span class="cline-any cline-yes">19x</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-yes">7x</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-yes">6x</span>
1442
+ <span class="cline-any cline-yes">6x</span>
1443
+ <span class="cline-any cline-yes">6x</span>
1444
+ <span class="cline-any cline-neutral">&nbsp;</span>
1445
+ <span class="cline-any cline-yes">6x</span>
1446
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
+ <span class="cline-any cline-yes">6x</span>
1448
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1452
+ <span class="cline-any cline-neutral">&nbsp;</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-neutral">&nbsp;</span>
1458
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1462
+ <span class="cline-any cline-neutral">&nbsp;</span>
1463
+ <span class="cline-any cline-neutral">&nbsp;</span>
1464
+ <span class="cline-any cline-yes">6x</span>
1465
+ <span class="cline-any cline-neutral">&nbsp;</span>
1466
+ <span class="cline-any cline-neutral">&nbsp;</span>
1467
+ <span class="cline-any cline-yes">6x</span>
1468
+ <span class="cline-any cline-yes">6x</span>
1469
+ <span class="cline-any cline-yes">7x</span>
1470
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1475
+ <span class="cline-any cline-neutral">&nbsp;</span>
1476
+ <span class="cline-any cline-neutral">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-neutral">&nbsp;</span>
1479
+ <span class="cline-any cline-neutral">&nbsp;</span>
1480
+ <span class="cline-any cline-neutral">&nbsp;</span>
1481
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1486
+ <span class="cline-any cline-neutral">&nbsp;</span>
1487
+ <span class="cline-any cline-neutral">&nbsp;</span>
1488
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1492
+ <span class="cline-any cline-yes">7x</span>
1493
+ <span class="cline-any cline-neutral">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-yes">7x</span>
1496
+ <span class="cline-any cline-yes">7x</span>
1497
+ <span class="cline-any cline-yes">4x</span>
1498
+ <span class="cline-any cline-neutral">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-neutral">&nbsp;</span>
1501
+ <span class="cline-any cline-neutral">&nbsp;</span>
1502
+ <span class="cline-any cline-neutral">&nbsp;</span>
1503
+ <span class="cline-any cline-neutral">&nbsp;</span>
1504
+ <span class="cline-any cline-neutral">&nbsp;</span>
1505
+ <span class="cline-any cline-neutral">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-neutral">&nbsp;</span>
1508
+ <span class="cline-any cline-neutral">&nbsp;</span>
1509
+ <span class="cline-any cline-neutral">&nbsp;</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-neutral">&nbsp;</span>
1513
+ <span class="cline-any cline-neutral">&nbsp;</span>
1514
+ <span class="cline-any cline-neutral">&nbsp;</span>
1515
+ <span class="cline-any cline-neutral">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-yes">4x</span>
1518
+ <span class="cline-any cline-neutral">&nbsp;</span>
1519
+ <span class="cline-any cline-neutral">&nbsp;</span>
1520
+ <span class="cline-any cline-yes">4x</span>
1521
+ <span class="cline-any cline-yes">4x</span>
1522
+ <span class="cline-any cline-yes">2x</span>
1523
+ <span class="cline-any cline-neutral">&nbsp;</span>
1524
+ <span class="cline-any cline-neutral">&nbsp;</span>
1525
+ <span class="cline-any cline-neutral">&nbsp;</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-yes">2x</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span>
1531
+ <span class="cline-any cline-neutral">&nbsp;</span>
1532
+ <span class="cline-any cline-neutral">&nbsp;</span>
1533
+ <span class="cline-any cline-neutral">&nbsp;</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-yes">6x</span>
1536
+ <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-neutral">&nbsp;</span>
1538
+ <span class="cline-any cline-yes">6x</span>
1539
+ <span class="cline-any cline-neutral">&nbsp;</span>
1540
+ <span class="cline-any cline-no">&nbsp;</span>
1541
+ <span class="cline-any cline-no">&nbsp;</span>
1542
+ <span class="cline-any cline-neutral">&nbsp;</span>
1543
+ <span class="cline-any cline-yes">6x</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-neutral">&nbsp;</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-neutral">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-yes">19x</span>
1553
+ <span class="cline-any cline-yes">15x</span>
1554
+ <span class="cline-any cline-yes">14x</span>
1555
+ <span class="cline-any cline-neutral">&nbsp;</span>
1556
+ <span class="cline-any cline-neutral">&nbsp;</span>
1557
+ <span class="cline-any cline-yes">14x</span>
1558
+ <span class="cline-any cline-neutral">&nbsp;</span>
1559
+ <span class="cline-any cline-neutral">&nbsp;</span>
1560
+ <span class="cline-any cline-neutral">&nbsp;</span>
1561
+ <span class="cline-any cline-neutral">&nbsp;</span>
1562
+ <span class="cline-any cline-neutral">&nbsp;</span>
1563
+ <span class="cline-any cline-neutral">&nbsp;</span>
1564
+ <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-yes">14x</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-yes">14x</span>
1568
+ <span class="cline-any cline-yes">14x</span>
1569
+ <span class="cline-any cline-yes">23x</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-neutral">&nbsp;</span>
1573
+ <span class="cline-any cline-yes">16x</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-neutral">&nbsp;</span>
1577
+ <span class="cline-any cline-neutral">&nbsp;</span>
1578
+ <span class="cline-any cline-yes">14x</span>
1579
+ <span class="cline-any cline-yes">2x</span>
1580
+ <span class="cline-any cline-neutral">&nbsp;</span>
1581
+ <span class="cline-any cline-neutral">&nbsp;</span>
1582
+ <span class="cline-any cline-neutral">&nbsp;</span>
1583
+ <span class="cline-any cline-neutral">&nbsp;</span>
1584
+ <span class="cline-any cline-neutral">&nbsp;</span>
1585
+ <span class="cline-any cline-yes">12x</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1587
+ <span class="cline-any cline-yes">4x</span>
1588
+ <span class="cline-any cline-neutral">&nbsp;</span>
1589
+ <span class="cline-any cline-neutral">&nbsp;</span>
1590
+ <span class="cline-any cline-yes">12x</span>
1591
+ <span class="cline-any cline-yes">12x</span>
1592
+ <span class="cline-any cline-neutral">&nbsp;</span>
1593
+ <span class="cline-any cline-yes">12x</span>
1594
+ <span class="cline-any cline-yes">12x</span>
1595
+ <span class="cline-any cline-yes">1x</span>
1596
+ <span class="cline-any cline-neutral">&nbsp;</span>
1597
+ <span class="cline-any cline-neutral">&nbsp;</span>
1598
+ <span class="cline-any cline-yes">11x</span>
1599
+ <span class="cline-any cline-yes">11x</span>
1600
+ <span class="cline-any cline-neutral">&nbsp;</span>
1601
+ <span class="cline-any cline-yes">6x</span>
1602
+ <span class="cline-any cline-yes">3x</span>
1603
+ <span class="cline-any cline-neutral">&nbsp;</span>
1604
+ <span class="cline-any cline-neutral">&nbsp;</span>
1605
+ <span class="cline-any cline-yes">5x</span>
1606
+ <span class="cline-any cline-yes">5x</span>
1607
+ <span class="cline-any cline-yes">5x</span>
1608
+ <span class="cline-any cline-neutral">&nbsp;</span>
1609
+ <span class="cline-any cline-neutral">&nbsp;</span>
1610
+ <span class="cline-any cline-neutral">&nbsp;</span>
1611
+ <span class="cline-any cline-yes">8x</span>
1612
+ <span class="cline-any cline-yes">12x</span>
1613
+ <span class="cline-any cline-yes">12x</span>
1614
+ <span class="cline-any cline-neutral">&nbsp;</span>
1615
+ <span class="cline-any cline-neutral">&nbsp;</span>
1616
+ <span class="cline-any cline-yes">3x</span>
1617
+ <span class="cline-any cline-yes">3x</span>
1618
+ <span class="cline-any cline-neutral">&nbsp;</span>
1619
+ <span class="cline-any cline-neutral">&nbsp;</span>
1620
+ <span class="cline-any cline-neutral">&nbsp;</span>
1621
+ <span class="cline-any cline-neutral">&nbsp;</span>
1622
+ <span class="cline-any cline-neutral">&nbsp;</span>
1623
+ <span class="cline-any cline-neutral">&nbsp;</span>
1624
+ <span class="cline-any cline-neutral">&nbsp;</span>
1625
+ <span class="cline-any cline-neutral">&nbsp;</span>
1626
+ <span class="cline-any cline-yes">19x</span>
1627
+ <span class="cline-any cline-neutral">&nbsp;</span>
1628
+ <span class="cline-any cline-neutral">&nbsp;</span>
1629
+ <span class="cline-any cline-neutral">&nbsp;</span>
1630
+ <span class="cline-any cline-neutral">&nbsp;</span>
1631
+ <span class="cline-any cline-neutral">&nbsp;</span>
1632
+ <span class="cline-any cline-neutral">&nbsp;</span>
1633
+ <span class="cline-any cline-neutral">&nbsp;</span>
1634
+ <span class="cline-any cline-neutral">&nbsp;</span>
1635
+ <span class="cline-any cline-neutral">&nbsp;</span>
1636
+ <span class="cline-any cline-yes">21x</span>
1637
+ <span class="cline-any cline-neutral">&nbsp;</span>
1638
+ <span class="cline-any cline-neutral">&nbsp;</span>
1639
+ <span class="cline-any cline-yes">30x</span>
1640
+ <span class="cline-any cline-yes">20x</span>
1641
+ <span class="cline-any cline-yes">28x</span>
1642
+ <span class="cline-any cline-yes">2x</span>
1643
+ <span class="cline-any cline-neutral">&nbsp;</span>
1644
+ <span class="cline-any cline-neutral">&nbsp;</span>
1645
+ <span class="cline-any cline-neutral">&nbsp;</span>
1646
+ <span class="cline-any cline-neutral">&nbsp;</span>
1647
+ <span class="cline-any cline-neutral">&nbsp;</span>
1648
+ <span class="cline-any cline-neutral">&nbsp;</span>
1649
+ <span class="cline-any cline-yes">18x</span>
1650
+ <span class="cline-any cline-yes">28x</span>
1651
+ <span class="cline-any cline-neutral">&nbsp;</span>
1652
+ <span class="cline-any cline-neutral">&nbsp;</span>
1653
+ <span class="cline-any cline-neutral">&nbsp;</span>
1654
+ <span class="cline-any cline-yes">18x</span>
1655
+ <span class="cline-any cline-neutral">&nbsp;</span>
1656
+ <span class="cline-any cline-neutral">&nbsp;</span>
1657
+ <span class="cline-any cline-neutral">&nbsp;</span>
1658
+ <span class="cline-any cline-neutral">&nbsp;</span>
1659
+ <span class="cline-any cline-neutral">&nbsp;</span>
1660
+ <span class="cline-any cline-neutral">&nbsp;</span>
1661
+ <span class="cline-any cline-neutral">&nbsp;</span>
1662
+ <span class="cline-any cline-yes">18x</span>
1663
+ <span class="cline-any cline-neutral">&nbsp;</span>
1664
+ <span class="cline-any cline-yes">18x</span>
1665
+ <span class="cline-any cline-yes">24x</span>
1666
+ <span class="cline-any cline-yes">35x</span>
1667
+ <span class="cline-any cline-yes">31x</span>
1668
+ <span class="cline-any cline-yes">31x</span>
1669
+ <span class="cline-any cline-yes">31x</span>
1670
+ <span class="cline-any cline-neutral">&nbsp;</span>
1671
+ <span class="cline-any cline-neutral">&nbsp;</span>
1672
+ <span class="cline-any cline-neutral">&nbsp;</span>
1673
+ <span class="cline-any cline-neutral">&nbsp;</span>
1674
+ <span class="cline-any cline-neutral">&nbsp;</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-neutral">&nbsp;</span>
1677
+ <span class="cline-any cline-neutral">&nbsp;</span>
1678
+ <span class="cline-any cline-yes">18x</span>
1679
+ <span class="cline-any cline-neutral">&nbsp;</span>
1680
+ <span class="cline-any cline-yes">18x</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1682
+ <span class="cline-any cline-yes">27x</span>
1683
+ <span class="cline-any cline-neutral">&nbsp;</span>
1684
+ <span class="cline-any cline-yes">4x</span>
1685
+ <span class="cline-any cline-neutral">&nbsp;</span>
1686
+ <span class="cline-any cline-neutral">&nbsp;</span>
1687
+ <span class="cline-any cline-neutral">&nbsp;</span>
1688
+ <span class="cline-any cline-yes">27x</span>
1689
+ <span class="cline-any cline-yes">27x</span>
1690
+ <span class="cline-any cline-neutral">&nbsp;</span>
1691
+ <span class="cline-any cline-neutral">&nbsp;</span>
1692
+ <span class="cline-any cline-neutral">&nbsp;</span>
1693
+ <span class="cline-any cline-neutral">&nbsp;</span>
1694
+ <span class="cline-any cline-yes">27x</span>
1695
+ <span class="cline-any cline-yes">27x</span>
1696
+ <span class="cline-any cline-neutral">&nbsp;</span>
1697
+ <span class="cline-any cline-yes">27x</span>
1698
+ <span class="cline-any cline-neutral">&nbsp;</span>
1699
+ <span class="cline-any cline-neutral">&nbsp;</span>
1700
+ <span class="cline-any cline-neutral">&nbsp;</span>
1701
+ <span class="cline-any cline-neutral">&nbsp;</span>
1702
+ <span class="cline-any cline-neutral">&nbsp;</span>
1703
+ <span class="cline-any cline-neutral">&nbsp;</span>
1704
+ <span class="cline-any cline-neutral">&nbsp;</span>
1705
+ <span class="cline-any cline-yes">18x</span>
1706
+ <span class="cline-any cline-neutral">&nbsp;</span>
1707
+ <span class="cline-any cline-neutral">&nbsp;</span>
1708
+ <span class="cline-any cline-neutral">&nbsp;</span>
1709
+ <span class="cline-any cline-neutral">&nbsp;</span>
1710
+ <span class="cline-any cline-neutral">&nbsp;</span>
1711
+ <span class="cline-any cline-neutral">&nbsp;</span>
1712
+ <span class="cline-any cline-neutral">&nbsp;</span>
1713
+ <span class="cline-any cline-yes">19x</span>
1714
+ <span class="cline-any cline-neutral">&nbsp;</span>
1715
+ <span class="cline-any cline-neutral">&nbsp;</span>
1716
+ <span class="cline-any cline-neutral">&nbsp;</span>
1717
+ <span class="cline-any cline-yes">17x</span>
1718
+ <span class="cline-any cline-yes">16x</span>
1719
+ <span class="cline-any cline-neutral">&nbsp;</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-yes">19x</span>
1722
+ <span class="cline-any cline-yes">16x</span>
1723
+ <span class="cline-any cline-yes">18x</span>
1724
+ <span class="cline-any cline-yes">2x</span>
1725
+ <span class="cline-any cline-neutral">&nbsp;</span>
1726
+ <span class="cline-any cline-neutral">&nbsp;</span>
1727
+ <span class="cline-any cline-neutral">&nbsp;</span>
1728
+ <span class="cline-any cline-neutral">&nbsp;</span>
1729
+ <span class="cline-any cline-neutral">&nbsp;</span>
1730
+ <span class="cline-any cline-neutral">&nbsp;</span>
1731
+ <span class="cline-any cline-yes">14x</span>
1732
+ <span class="cline-any cline-yes">17x</span>
1733
+ <span class="cline-any cline-neutral">&nbsp;</span>
1734
+ <span class="cline-any cline-neutral">&nbsp;</span>
1735
+ <span class="cline-any cline-neutral">&nbsp;</span>
1736
+ <span class="cline-any cline-yes">14x</span>
1737
+ <span class="cline-any cline-neutral">&nbsp;</span>
1738
+ <span class="cline-any cline-neutral">&nbsp;</span>
1739
+ <span class="cline-any cline-neutral">&nbsp;</span>
1740
+ <span class="cline-any cline-neutral">&nbsp;</span>
1741
+ <span class="cline-any cline-neutral">&nbsp;</span>
1742
+ <span class="cline-any cline-neutral">&nbsp;</span>
1743
+ <span class="cline-any cline-neutral">&nbsp;</span>
1744
+ <span class="cline-any cline-yes">14x</span>
1745
+ <span class="cline-any cline-neutral">&nbsp;</span>
1746
+ <span class="cline-any cline-yes">14x</span>
1747
+ <span class="cline-any cline-yes">14x</span>
1748
+ <span class="cline-any cline-yes">17x</span>
1749
+ <span class="cline-any cline-yes">15x</span>
1750
+ <span class="cline-any cline-yes">15x</span>
1751
+ <span class="cline-any cline-yes">15x</span>
1752
+ <span class="cline-any cline-neutral">&nbsp;</span>
1753
+ <span class="cline-any cline-neutral">&nbsp;</span>
1754
+ <span class="cline-any cline-neutral">&nbsp;</span>
1755
+ <span class="cline-any cline-neutral">&nbsp;</span>
1756
+ <span class="cline-any cline-yes">14x</span>
1757
+ <span class="cline-any cline-neutral">&nbsp;</span>
1758
+ <span class="cline-any cline-neutral">&nbsp;</span>
1759
+ <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-neutral">&nbsp;</span>
1761
+ <span class="cline-any cline-neutral">&nbsp;</span>
1762
+ <span class="cline-any cline-neutral">&nbsp;</span>
1763
+ <span class="cline-any cline-yes">14x</span>
1764
+ <span class="cline-any cline-yes">14x</span>
1765
+ <span class="cline-any cline-yes">14x</span>
1766
+ <span class="cline-any cline-yes">17x</span>
1767
+ <span class="cline-any cline-neutral">&nbsp;</span>
1768
+ <span class="cline-any cline-neutral">&nbsp;</span>
1769
+ <span class="cline-any cline-yes">14x</span>
1770
+ <span class="cline-any cline-yes">14x</span>
1771
+ <span class="cline-any cline-yes">3x</span>
1772
+ <span class="cline-any cline-yes">3x</span>
1773
+ <span class="cline-any cline-yes">3x</span>
1774
+ <span class="cline-any cline-neutral">&nbsp;</span>
1775
+ <span class="cline-any cline-neutral">&nbsp;</span>
1776
+ <span class="cline-any cline-neutral">&nbsp;</span>
1777
+ <span class="cline-any cline-neutral">&nbsp;</span>
1778
+ <span class="cline-any cline-neutral">&nbsp;</span>
1779
+ <span class="cline-any cline-yes">14x</span>
1780
+ <span class="cline-any cline-yes">13x</span>
1781
+ <span class="cline-any cline-yes">13x</span>
1782
+ <span class="cline-any cline-neutral">&nbsp;</span>
1783
+ <span class="cline-any cline-yes">2x</span>
1784
+ <span class="cline-any cline-neutral">&nbsp;</span>
1785
+ <span class="cline-any cline-neutral">&nbsp;</span>
1786
+ <span class="cline-any cline-yes">13x</span>
1787
+ <span class="cline-any cline-yes">13x</span>
1788
+ <span class="cline-any cline-neutral">&nbsp;</span>
1789
+ <span class="cline-any cline-yes">13x</span>
1790
+ <span class="cline-any cline-yes">13x</span>
1791
+ <span class="cline-any cline-yes">1x</span>
1792
+ <span class="cline-any cline-yes">1x</span>
1793
+ <span class="cline-any cline-yes">1x</span>
1794
+ <span class="cline-any cline-neutral">&nbsp;</span>
1795
+ <span class="cline-any cline-neutral">&nbsp;</span>
1796
+ <span class="cline-any cline-yes">12x</span>
1797
+ <span class="cline-any cline-neutral">&nbsp;</span>
1798
+ <span class="cline-any cline-yes">6x</span>
1799
+ <span class="cline-any cline-yes">4x</span>
1800
+ <span class="cline-any cline-neutral">&nbsp;</span>
1801
+ <span class="cline-any cline-neutral">&nbsp;</span>
1802
+ <span class="cline-any cline-neutral">&nbsp;</span>
1803
+ <span class="cline-any cline-neutral">&nbsp;</span>
1804
+ <span class="cline-any cline-yes">6x</span>
1805
+ <span class="cline-any cline-yes">6x</span>
1806
+ <span class="cline-any cline-yes">6x</span>
1807
+ <span class="cline-any cline-neutral">&nbsp;</span>
1808
+ <span class="cline-any cline-neutral">&nbsp;</span>
1809
+ <span class="cline-any cline-neutral">&nbsp;</span>
1810
+ <span class="cline-any cline-neutral">&nbsp;</span>
1811
+ <span class="cline-any cline-neutral">&nbsp;</span>
1812
+ <span class="cline-any cline-yes">10x</span>
1813
+ <span class="cline-any cline-yes">12x</span>
1814
+ <span class="cline-any cline-yes">12x</span>
1815
+ <span class="cline-any cline-neutral">&nbsp;</span>
1816
+ <span class="cline-any cline-neutral">&nbsp;</span>
1817
+ <span class="cline-any cline-yes">10x</span>
1818
+ <span class="cline-any cline-neutral">&nbsp;</span>
1819
+ <span class="cline-any cline-yes">2x</span>
1820
+ <span class="cline-any cline-yes">2x</span>
1821
+ <span class="cline-any cline-neutral">&nbsp;</span>
1822
+ <span class="cline-any cline-neutral">&nbsp;</span>
1823
+ <span class="cline-any cline-neutral">&nbsp;</span>
1824
+ <span class="cline-any cline-yes">14x</span>
1825
+ <span class="cline-any cline-neutral">&nbsp;</span>
1826
+ <span class="cline-any cline-neutral">&nbsp;</span>
1827
+ <span class="cline-any cline-neutral">&nbsp;</span>
1828
+ <span class="cline-any cline-neutral">&nbsp;</span>
1829
+ <span class="cline-any cline-neutral">&nbsp;</span>
1830
+ <span class="cline-any cline-neutral">&nbsp;</span>
1831
+ <span class="cline-any cline-neutral">&nbsp;</span>
1832
+ <span class="cline-any cline-yes">19x</span>
1833
+ <span class="cline-any cline-yes">9x</span>
1834
+ <span class="cline-any cline-neutral">&nbsp;</span>
1835
+ <span class="cline-any cline-yes">8x</span>
1836
+ <span class="cline-any cline-neutral">&nbsp;</span>
1837
+ <span class="cline-any cline-neutral">&nbsp;</span>
1838
+ <span class="cline-any cline-neutral">&nbsp;</span>
1839
+ <span class="cline-any cline-neutral">&nbsp;</span>
1840
+ <span class="cline-any cline-neutral">&nbsp;</span>
1841
+ <span class="cline-any cline-neutral">&nbsp;</span>
1842
+ <span class="cline-any cline-yes">8x</span>
1843
+ <span class="cline-any cline-yes">12x</span>
1844
+ <span class="cline-any cline-neutral">&nbsp;</span>
1845
+ <span class="cline-any cline-yes">8x</span>
1846
+ <span class="cline-any cline-yes">12x</span>
1847
+ <span class="cline-any cline-neutral">&nbsp;</span>
1848
+ <span class="cline-any cline-neutral">&nbsp;</span>
1849
+ <span class="cline-any cline-neutral">&nbsp;</span>
1850
+ <span class="cline-any cline-yes">8x</span>
1851
+ <span class="cline-any cline-no">&nbsp;</span>
1852
+ <span class="cline-any cline-no">&nbsp;</span>
1853
+ <span class="cline-any cline-no">&nbsp;</span>
1854
+ <span class="cline-any cline-neutral">&nbsp;</span>
1855
+ <span class="cline-any cline-no">&nbsp;</span>
1856
+ <span class="cline-any cline-no">&nbsp;</span>
1857
+ <span class="cline-any cline-neutral">&nbsp;</span>
1858
+ <span class="cline-any cline-neutral">&nbsp;</span>
1859
+ <span class="cline-any cline-neutral">&nbsp;</span>
1860
+ <span class="cline-any cline-neutral">&nbsp;</span>
1861
+ <span class="cline-any cline-yes">8x</span>
1862
+ <span class="cline-any cline-yes">12x</span>
1863
+ <span class="cline-any cline-yes">12x</span>
1864
+ <span class="cline-any cline-yes">7x</span>
1865
+ <span class="cline-any cline-neutral">&nbsp;</span>
1866
+ <span class="cline-any cline-yes">5x</span>
1867
+ <span class="cline-any cline-yes">5x</span>
1868
+ <span class="cline-any cline-neutral">&nbsp;</span>
1869
+ <span class="cline-any cline-neutral">&nbsp;</span>
1870
+ <span class="cline-any cline-neutral">&nbsp;</span>
1871
+ <span class="cline-any cline-yes">8x</span>
1872
+ <span class="cline-any cline-neutral">&nbsp;</span>
1873
+ <span class="cline-any cline-neutral">&nbsp;</span>
1874
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, NotFoundException, Logger } from '@nestjs/common';
1875
+ import { InjectRepository } from '@nestjs/typeorm';
1876
+ import { DataSource, Repository } from 'typeorm';
1877
+ import {
1878
+ Session,
1879
+ Project,
1880
+ ContextTemplate,
1881
+ SystemPrompt,
1882
+ SessionInput,
1883
+ AIAction,
1884
+ ExecutionLog,
1885
+ } from '../core-entities';
1886
+ import * as fs from 'fs/promises';
1887
+ import * as path from 'path';
1888
+ import {
1889
+ CreateSessionDto,
1890
+ UpdateSessionDto,
1891
+ SessionStatus,
1892
+ RevertSessionResponseDto,
1893
+ } from './dto/session.dto';
1894
+ import { ApplicationStateService } from '../application-state/application-state.service';
1895
+ import { Trace } from '../utils';
1896
+ import { MessageBusService } from '../message-bus/message-bus.service';
1897
+ &nbsp;
1898
+ @Injectable()
1899
+ export class SessionsService {
1900
+ private readonly logger = new Logger(SessionsService.name);
1901
+ constructor(
1902
+ @InjectRepository(Session)
1903
+ private sessionsRepository: Repository&lt;Session&gt;,
1904
+ @InjectRepository(Project)
1905
+ private projectsRepository: Repository&lt;Project&gt;,
1906
+ @InjectRepository(ContextTemplate)
1907
+ private contextTemplatesRepository: Repository&lt;ContextTemplate&gt;,
1908
+ @InjectRepository(SystemPrompt)
1909
+ private systemPromptsRepository: Repository&lt;SystemPrompt&gt;,
1910
+ private readonly applicationStateService: ApplicationStateService,
1911
+ private readonly messageBusService: MessageBusService,
1912
+ private readonly dataSource: DataSource,
1913
+ ) {}
1914
+ &nbsp;
1915
+ @Trace()
1916
+ async create(createSessionDto: CreateSessionDto): Promise&lt;Session&gt; {
1917
+ this.messageBusService.clear();
1918
+ &nbsp;
1919
+ const session = this.sessionsRepository.create({
1920
+ ...createSessionDto,
1921
+ status: SessionStatus.ACTIVE,
1922
+ });
1923
+ &nbsp;
1924
+ if (!createSessionDto.model_id) {
1925
+ const manualModeEnabled =
1926
+ await this.applicationStateService.getManualLlmEnabled();
1927
+ if (!manualModeEnabled) {
1928
+ const recentModels =
1929
+ await this.applicationStateService.getRecentModels();
1930
+ if (recentModels.length &gt; 0) {
1931
+ session.model_id = recentModels[0];
1932
+ }
1933
+ }
1934
+ }
1935
+ &nbsp;
1936
+ if (createSessionDto.project_id) {
1937
+ const project = await this.projectsRepository.findOneBy({
1938
+ id: createSessionDto.project_id,
1939
+ });
1940
+ if (!project) {
1941
+ throw new NotFoundException(
1942
+ `Project with ID "${createSessionDto.project_id}" not found`,
1943
+ );
1944
+ }
1945
+ session.project = project;
1946
+ }
1947
+ &nbsp;
1948
+ if (createSessionDto.system_prompt_id) {
1949
+ const systemPrompt = await this.systemPromptsRepository.findOneBy({
1950
+ id: createSessionDto.system_prompt_id,
1951
+ });
1952
+ if (!systemPrompt) {
1953
+ throw new NotFoundException(
1954
+ `SystemPrompt with ID "${createSessionDto.system_prompt_id}" not found`,
1955
+ );
1956
+ }
1957
+ <span class="cstat-no" title="statement not covered" > session.systemPrompt = systemPrompt;</span>
1958
+ } else {
1959
+ const defaultSystemPrompt = await this.systemPromptsRepository.findOneBy({
1960
+ is_default: true,
1961
+ });
1962
+ if (defaultSystemPrompt) {
1963
+ session.systemPrompt = defaultSystemPrompt;
1964
+ }
1965
+ }
1966
+ &nbsp;
1967
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (createSessionDto.default_initial_context_template_id) {
1968
+ const template = <span class="cstat-no" title="statement not covered" >await this.contextTemplatesRepository.findOneBy({</span>
1969
+ id: createSessionDto.default_initial_context_template_id,
1970
+ });
1971
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!template) {</span>
1972
+ <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1973
+ `ContextTemplate with ID "${createSessionDto.default_initial_context_template_id}" not found`,
1974
+ );
1975
+ }
1976
+ <span class="cstat-no" title="statement not covered" > session.defaultInitialContextTemplate = template;</span>
1977
+ } else {
1978
+ const defaultInitial = await this.contextTemplatesRepository.findOneBy({
1979
+ is_default_initial: true,
1980
+ });
1981
+ if (defaultInitial) {
1982
+ session.defaultInitialContextTemplate = defaultInitial;
1983
+ }
1984
+ }
1985
+ &nbsp;
1986
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (createSessionDto.default_followup_context_template_id) {
1987
+ const template = <span class="cstat-no" title="statement not covered" >await this.contextTemplatesRepository.findOneBy({</span>
1988
+ id: createSessionDto.default_followup_context_template_id,
1989
+ });
1990
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!template) {</span>
1991
+ <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1992
+ `ContextTemplate with ID "${createSessionDto.default_followup_context_template_id}" not found`,
1993
+ );
1994
+ }
1995
+ <span class="cstat-no" title="statement not covered" > session.defaultFollowupContextTemplate = template;</span>
1996
+ } else {
1997
+ const defaultFollowup = await this.contextTemplatesRepository.findOneBy({
1998
+ is_default_followup: true,
1999
+ });
2000
+ if (defaultFollowup) {
2001
+ session.defaultFollowupContextTemplate = defaultFollowup;
2002
+ }
2003
+ }
2004
+ &nbsp;
2005
+ const savedSession = await this.sessionsRepository.save(session);
2006
+ await this.applicationStateService.setActiveSessionId(savedSession.id);
2007
+ return this.findOne(savedSession.id);
2008
+ }
2009
+ &nbsp;
2010
+ @Trace()
2011
+ <span class="fstat-no" title="function not covered" > async </span>findAll(filter?: string): Promise&lt;Session[]&gt; {
2012
+ const query = <span class="cstat-no" title="statement not covered" >this.sessionsRepository</span>
2013
+ .createQueryBuilder('session')
2014
+ .leftJoinAndSelect('session.project', 'project')
2015
+ .leftJoinAndSelect(
2016
+ 'session.defaultInitialContextTemplate',
2017
+ 'defaultInitialContextTemplate',
2018
+ )
2019
+ .leftJoinAndSelect(
2020
+ 'session.defaultFollowupContextTemplate',
2021
+ 'defaultFollowupContextTemplate',
2022
+ )
2023
+ .leftJoinAndSelect('session.systemPrompt', 'systemPrompt')
2024
+ .leftJoinAndSelect('session.subAgent', 'subAgent')
2025
+ .leftJoinAndSelect('session.parentSession', 'parentSession')
2026
+ .addSelect(
2027
+ <span class="fstat-no" title="function not covered" > (s</span>ubQuery) =&gt;
2028
+ <span class="cstat-no" title="statement not covered" > subQuery</span>
2029
+ .select('COUNT(si.id)')
2030
+ .from(SessionInput, 'si')
2031
+ .where('si.session_id = session.id'),
2032
+ 'sessionInputCount',
2033
+ );
2034
+ &nbsp;
2035
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (filter === 'non-empty') {</span>
2036
+ <span class="cstat-no" title="statement not covered" > query.where(</span>
2037
+ 'EXISTS (SELECT 1 FROM session_inputs si WHERE si.session_id = session.id)',
2038
+ );
2039
+ }
2040
+ &nbsp;
2041
+ const result = <span class="cstat-no" title="statement not covered" >await query.getRawAndEntities();</span>
2042
+ &nbsp;
2043
+ <span class="cstat-no" title="statement not covered" > return result.entities.map(<span class="fstat-no" title="function not covered" >(s</span>ession, index) =&gt; {</span>
2044
+ const raw = <span class="cstat-no" title="statement not covered" >result.raw[index];</span>
2045
+ <span class="cstat-no" title="statement not covered" > session.sessionInputCount = parseInt(raw.sessionInputCount, 10) || 0;</span>
2046
+ <span class="cstat-no" title="statement not covered" > return session;</span>
2047
+ });
2048
+ }
2049
+ &nbsp;
2050
+ @Trace()
2051
+ async findOne(id: string, includeExecutionLogs = false): Promise&lt;Session&gt; {
2052
+ const relations: string[] = [
2053
+ 'project',
2054
+ 'defaultInitialContextTemplate',
2055
+ 'defaultFollowupContextTemplate',
2056
+ 'systemPrompt',
2057
+ 'sessionInputs',
2058
+ 'sessionInputs.contextTemplate',
2059
+ 'sessionInputs.aiActions',
2060
+ 'subAgent',
2061
+ 'parentSession',
2062
+ ];
2063
+ &nbsp;
2064
+ // Only load executionLogs when explicitly requested (they can be large)
2065
+ if (includeExecutionLogs) {
2066
+ relations.push('sessionInputs.aiActions.executionLogs');
2067
+ }
2068
+ &nbsp;
2069
+ const session = await this.sessionsRepository.findOne({
2070
+ where: { id },
2071
+ relations,
2072
+ order: {
2073
+ sessionInputs: {
2074
+ sequence_number: 'ASC',
2075
+ aiActions: {
2076
+ order_of_execution: 'ASC',
2077
+ },
2078
+ },
2079
+ },
2080
+ });
2081
+ if (!session) {
2082
+ throw new NotFoundException(`Session with ID "${id}" not found`);
2083
+ }
2084
+ return session;
2085
+ }
2086
+ &nbsp;
2087
+ /**
2088
+ * Lightweight version of findOne() for boot/initial load.
2089
+ * Excludes heavy sessionInputs relation with nested aiActions and executionLogs.
2090
+ * Used by findActive() to speed up initial session loading.
2091
+ */
2092
+ @Trace()
2093
+ async findOneLight(id: string): Promise&lt;Session&gt; {
2094
+ const session = await this.sessionsRepository.findOne({
2095
+ where: { id },
2096
+ relations: [
2097
+ 'project',
2098
+ 'defaultInitialContextTemplate',
2099
+ 'defaultFollowupContextTemplate',
2100
+ 'systemPrompt',
2101
+ 'subAgent',
2102
+ 'parentSession',
2103
+ ],
2104
+ });
2105
+ if (!session) {
2106
+ throw new NotFoundException(`Session with ID "${id}" not found`);
2107
+ }
2108
+ return session;
2109
+ }
2110
+ &nbsp;
2111
+ @Trace()
2112
+ async findActive(): Promise&lt;Session | null&gt; {
2113
+ const activeSessionId =
2114
+ await this.applicationStateService.getActiveSessionId();
2115
+ if (!activeSessionId) {
2116
+ return null;
2117
+ }
2118
+ try {
2119
+ // Use lightweight findOneLight for boot performance
2120
+ // Frontend can call findOne() separately when full details needed
2121
+ return await this.findOneLight(activeSessionId);
2122
+ } catch (error) {
2123
+ if (error instanceof NotFoundException) {
2124
+ // The active session ID points to a session that no longer exists.
2125
+ return null;
2126
+ }
2127
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2128
+ }
2129
+ }
2130
+ &nbsp;
2131
+ @Trace()
2132
+ <span class="fstat-no" title="function not covered" > async </span>findLatest(): Promise&lt;Session | null&gt; {
2133
+ <span class="cstat-no" title="statement not covered" > return this.sessionsRepository.findOne({</span>
2134
+ order: { created_at: 'DESC' },
2135
+ });
2136
+ }
2137
+ &nbsp;
2138
+ @Trace()
2139
+ async setActive(id: string): Promise&lt;void&gt; {
2140
+ // Use lightweight existence check instead of heavy findOne()
2141
+ const exists = await this.sessionsRepository.existsBy({ id });
2142
+ if (!exists) {
2143
+ throw new NotFoundException(`Session with ID "${id}" not found`);
2144
+ }
2145
+ await this.applicationStateService.setActiveSessionId(id);
2146
+ }
2147
+ &nbsp;
2148
+ @Trace()
2149
+ async update(
2150
+ id: string,
2151
+ updateSessionDto: UpdateSessionDto,
2152
+ ): Promise&lt;Session&gt; {
2153
+ const session = await this.sessionsRepository.findOneBy({ id });
2154
+ if (!session) {
2155
+ throw new NotFoundException(`Session with ID "${id}" not found`);
2156
+ }
2157
+ &nbsp;
2158
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.model_id !== undefined) {
2159
+ <span class="cstat-no" title="statement not covered" > session.model_id = updateSessionDto.model_id;</span>
2160
+ }
2161
+ &nbsp;
2162
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.reasoning_effort !== undefined) {
2163
+ <span class="cstat-no" title="statement not covered" > session.reasoning_effort = updateSessionDto.reasoning_effort;</span>
2164
+ }
2165
+ &nbsp;
2166
+ if (updateSessionDto.session_title !== undefined) {
2167
+ session.session_title = updateSessionDto.session_title;
2168
+ }
2169
+ if (updateSessionDto.status !== undefined) {
2170
+ session.status = updateSessionDto.status;
2171
+ if (
2172
+ [
2173
+ SessionStatus.COMPLETED,
2174
+ SessionStatus.ABORTED,
2175
+ SessionStatus.FAILED,
2176
+ ].includes(updateSessionDto.status)
2177
+ ) {
2178
+ session.end_time = new Date();
2179
+ }
2180
+ }
2181
+ &nbsp;
2182
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.system_prompt_id !== undefined) {
2183
+ <span class="cstat-no" title="statement not covered" > session.system_prompt_id = updateSessionDto.system_prompt_id;</span>
2184
+ }
2185
+ &nbsp;
2186
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.default_initial_context_template_id !== undefined) {
2187
+ <span class="cstat-no" title="statement not covered" > session.default_initial_context_template_id =</span>
2188
+ updateSessionDto.default_initial_context_template_id;
2189
+ }
2190
+ &nbsp;
2191
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.default_followup_context_template_id !== undefined) {
2192
+ <span class="cstat-no" title="statement not covered" > session.default_followup_context_template_id =</span>
2193
+ updateSessionDto.default_followup_context_template_id;
2194
+ }
2195
+ &nbsp;
2196
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.url !== undefined) {
2197
+ <span class="cstat-no" title="statement not covered" > session.url = updateSessionDto.url;</span>
2198
+ }
2199
+ &nbsp;
2200
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.sub_agent_id !== undefined) {
2201
+ <span class="cstat-no" title="statement not covered" > session.sub_agent_id = updateSessionDto.sub_agent_id;</span>
2202
+ }
2203
+ &nbsp;
2204
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (updateSessionDto.parent_session_id !== undefined) {
2205
+ <span class="cstat-no" title="statement not covered" > session.parent_session_id = updateSessionDto.parent_session_id;</span>
2206
+ }
2207
+ &nbsp;
2208
+ await this.sessionsRepository.save(session);
2209
+ return this.findOne(id);
2210
+ }
2211
+ &nbsp;
2212
+ @Trace()
2213
+ async remove(id: string): Promise&lt;void&gt; {
2214
+ const session = await this.findOne(id);
2215
+ &nbsp;
2216
+ // Get all descendant sessions recursively (children, grandchildren, etc.)
2217
+ const descendantIds = await this.findAllDescendantSessions(id);
2218
+ &nbsp;
2219
+ // Delete descendants first (bottom-up) to avoid FK violations
2220
+ // Process in reverse order (deepest first)
2221
+ for (const descendantId of descendantIds.reverse()) {
2222
+ const descendant = await this.sessionsRepository.findOneBy({
2223
+ id: descendantId,
2224
+ });
2225
+ if (descendant) {
2226
+ await this.sessionsRepository.remove(descendant);
2227
+ }
2228
+ }
2229
+ &nbsp;
2230
+ // Finally delete the target session
2231
+ await this.sessionsRepository.remove(session);
2232
+ }
2233
+ &nbsp;
2234
+ /**
2235
+ * Recursively finds all descendant session IDs in depth-first order.
2236
+ * Returns sessions in order from root to leaves (parent before children).
2237
+ * For deletion, reverse this order to delete children first.
2238
+ */
2239
+ private async findAllDescendantSessions(
2240
+ parentSessionId: string,
2241
+ ): Promise&lt;string[]&gt; {
2242
+ const children = await this.sessionsRepository.find({
2243
+ where: { parent_session_id: parentSessionId },
2244
+ select: ['id'],
2245
+ });
2246
+ &nbsp;
2247
+ const result: string[] = [];
2248
+ &nbsp;
2249
+ for (const child of children) {
2250
+ result.push(child.id);
2251
+ // Recursively find grandchildren
2252
+ const descendants = await this.findAllDescendantSessions(child.id);
2253
+ result.push(...descendants);
2254
+ }
2255
+ &nbsp;
2256
+ return result;
2257
+ }
2258
+ &nbsp;
2259
+ @Trace()
2260
+ <span class="fstat-no" title="function not covered" > async </span>findChildSessions(parentSessionId: string): Promise&lt;Session[]&gt; {
2261
+ <span class="cstat-no" title="statement not covered" > return this.sessionsRepository.find({</span>
2262
+ where: { parent_session_id: parentSessionId },
2263
+ relations: ['subAgent', 'sessionInputs', 'sessionInputs.contextTemplate'],
2264
+ order: { created_at: 'DESC' },
2265
+ });
2266
+ }
2267
+ &nbsp;
2268
+ @Trace()
2269
+ async getFileChanges(sessionId: string): Promise&lt;
2270
+ {
2271
+ file_path: string;
2272
+ initial_content: string | null;
2273
+ current_content: string | null;
2274
+ }[]
2275
+ &gt; {
2276
+ const session = await this.findOne(sessionId);
2277
+ const projectRoot = process.env.REPOBURG_PROJECT_PATH || process.cwd();
2278
+ &nbsp;
2279
+ // Collect all file actions from all session inputs
2280
+ const fileActionTypes = [
2281
+ 'create_file',
2282
+ 'overwrite_file',
2283
+ 'delete_file',
2284
+ 'quick_edit',
2285
+ 'patch',
2286
+ 'apply_diff',
2287
+ ];
2288
+ const fileActionsMap = new Map&lt;string, AIAction[]&gt;();
2289
+ &nbsp;
2290
+ for (const input of session.sessionInputs || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
2291
+ for (const action of input.aiActions || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
2292
+ if (action.file_path &amp;&amp; fileActionTypes.includes(action.action_type)) {
2293
+ const existing = fileActionsMap.get(action.file_path) || [];
2294
+ existing.push(action);
2295
+ fileActionsMap.set(action.file_path, existing);
2296
+ }
2297
+ }
2298
+ }
2299
+ &nbsp;
2300
+ const changes: {
2301
+ file_path: string;
2302
+ initial_content: string | null;
2303
+ current_content: string | null;
2304
+ }[] = [];
2305
+ &nbsp;
2306
+ for (const [filePath, actions] of fileActionsMap) {
2307
+ // Sort by creation time to find oldest
2308
+ const sortedActions = actions.sort(
2309
+ <span class="fstat-no" title="function not covered" > (a</span>, b) =&gt;
2310
+ <span class="cstat-no" title="statement not covered" > new Date(a.created_at).getTime() - new Date(b.created_at).getTime(),</span>
2311
+ );
2312
+ &nbsp;
2313
+ // Get initial content from oldest action's original_content_for_revert
2314
+ const oldestAction = sortedActions[0];
2315
+ const initialContent = oldestAction.original_content_for_revert;
2316
+ &nbsp;
2317
+ // Read current content from filesystem
2318
+ let currentContent: string | null = null;
2319
+ try {
2320
+ const safePath = path.resolve(projectRoot, filePath);
2321
+ if (safePath.startsWith(projectRoot)) {
2322
+ currentContent = await fs.readFile(safePath, 'utf8');
2323
+ }
2324
+ } catch {
2325
+ // File doesn't exist or can't be read
2326
+ currentContent = null;
2327
+ }
2328
+ &nbsp;
2329
+ changes.push({
2330
+ file_path: filePath,
2331
+ initial_content: initialContent,
2332
+ current_content: currentContent,
2333
+ });
2334
+ }
2335
+ &nbsp;
2336
+ // Sort by file path
2337
+ return changes.sort((a, b) =&gt; a.file_path.localeCompare(b.file_path));
2338
+ }
2339
+ &nbsp;
2340
+ @Trace()
2341
+ async cloneSession(sourceSessionId: string): Promise&lt;Session&gt; {
2342
+ // Load source session with all relations INCLUDING executionLogs for cloning
2343
+ const sourceSession = await this.findOne(sourceSessionId, true);
2344
+ &nbsp;
2345
+ const queryRunner = this.dataSource.createQueryRunner();
2346
+ await queryRunner.connect();
2347
+ await queryRunner.startTransaction();
2348
+ &nbsp;
2349
+ try {
2350
+ // Create new session
2351
+ const newSession = queryRunner.manager.create(Session, {
2352
+ project_id: sourceSession.project_id,
2353
+ session_title: sourceSession.session_title
2354
+ ? `${sourceSession.session_title} (Copy)`
2355
+ : <span class="branch-1 cbranch-no" title="branch not covered" >'Cloned Session',</span>
2356
+ status: SessionStatus.ACTIVE,
2357
+ system_prompt_id: sourceSession.system_prompt_id,
2358
+ default_initial_context_template_id:
2359
+ sourceSession.default_initial_context_template_id,
2360
+ default_followup_context_template_id:
2361
+ sourceSession.default_followup_context_template_id,
2362
+ model_id: sourceSession.model_id,
2363
+ reasoning_effort: sourceSession.reasoning_effort,
2364
+ url: sourceSession.url,
2365
+ sub_agent_id: sourceSession.sub_agent_id,
2366
+ // parent_session_id is intentionally NULL - not linked to parent
2367
+ });
2368
+ await queryRunner.manager.save(newSession);
2369
+ &nbsp;
2370
+ // Clone session inputs with their actions and logs
2371
+ if (sourceSession.sessionInputs) {
2372
+ for (const sourceInput of sourceSession.sessionInputs) {
2373
+ const newInput = queryRunner.manager.create(SessionInput, {
2374
+ session_id: newSession.id,
2375
+ sequence_number: sourceInput.sequence_number,
2376
+ user_prompt: sourceInput.user_prompt,
2377
+ context_template_id: sourceInput.context_template_id,
2378
+ ad_hoc_context_definition: sourceInput.ad_hoc_context_definition,
2379
+ generated_context_string: sourceInput.generated_context_string,
2380
+ execution_strategy: sourceInput.execution_strategy,
2381
+ raw_llm_response: sourceInput.raw_llm_response,
2382
+ llm_response_explanation: sourceInput.llm_response_explanation,
2383
+ raw_studio_request_body: sourceInput.raw_studio_request_body,
2384
+ idempotency_key: sourceInput.idempotency_key,
2385
+ is_context_carrier: sourceInput.is_context_carrier,
2386
+ thoughts: sourceInput.thoughts,
2387
+ role: sourceInput.role,
2388
+ external_conversation_id: sourceInput.external_conversation_id,
2389
+ external_turn_id: sourceInput.external_turn_id,
2390
+ input_token_count: sourceInput.input_token_count,
2391
+ cached_token_count: sourceInput.cached_token_count,
2392
+ output_token_count: sourceInput.output_token_count,
2393
+ error_message: sourceInput.error_message,
2394
+ tool_calls: sourceInput.tool_calls,
2395
+ });
2396
+ await queryRunner.manager.save(newInput);
2397
+ &nbsp;
2398
+ // Clone AIActions for this input
2399
+ if (sourceInput.aiActions) {
2400
+ for (const sourceAction of sourceInput.aiActions) {
2401
+ const newAction = queryRunner.manager.create(AIAction, {
2402
+ input_id: newInput.id,
2403
+ action_type: sourceAction.action_type,
2404
+ file_path: sourceAction.file_path,
2405
+ content: sourceAction.content,
2406
+ original_content_for_revert:
2407
+ sourceAction.original_content_for_revert,
2408
+ command_string: sourceAction.command_string,
2409
+ files: sourceAction.files,
2410
+ folders: sourceAction.folders,
2411
+ reason: sourceAction.reason,
2412
+ handover_string: sourceAction.handover_string,
2413
+ status: sourceAction.status,
2414
+ order_of_execution: sourceAction.order_of_execution,
2415
+ server_name: sourceAction.server_name,
2416
+ tool_name: sourceAction.tool_name,
2417
+ arguments: sourceAction.arguments,
2418
+ plain: sourceAction.plain,
2419
+ tool_call_id: sourceAction.tool_call_id,
2420
+ });
2421
+ await queryRunner.manager.save(newAction);
2422
+ &nbsp;
2423
+ // Clone ExecutionLogs for this action
2424
+ if (sourceAction.executionLogs) {
2425
+ for (const sourceLog of sourceAction.executionLogs) {
2426
+ const newLog = queryRunner.manager.create(ExecutionLog, {
2427
+ action_id: newAction.id,
2428
+ output: sourceLog.output,
2429
+ error_message: sourceLog.error_message,
2430
+ });
2431
+ await queryRunner.manager.save(newLog);
2432
+ }
2433
+ }
2434
+ }
2435
+ }
2436
+ }
2437
+ }
2438
+ &nbsp;
2439
+ await queryRunner.commitTransaction();
2440
+ &nbsp;
2441
+ // Return the cloned session with all relations including executionLogs
2442
+ return this.findOne(newSession.id, true);
2443
+ } catch (error) {
2444
+ <span class="cstat-no" title="statement not covered" > await queryRunner.rollbackTransaction();</span>
2445
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2446
+ } finally {
2447
+ await queryRunner.release();
2448
+ }
2449
+ }
2450
+ &nbsp;
2451
+ /**
2452
+ * Revert a specific file to its state before the session started.
2453
+ * Finds the oldest action for this file and restores original_content_for_revert.
2454
+ */
2455
+ @Trace()
2456
+ async revertFile(sessionId: string, filePath: string): Promise&lt;void&gt; {
2457
+ const session = await this.findOne(sessionId);
2458
+ const projectRoot = process.env.REPOBURG_PROJECT_PATH || process.cwd();
2459
+ &nbsp;
2460
+ // Collect all file actions for this specific file path
2461
+ const fileActionTypes = [
2462
+ 'create_file',
2463
+ 'overwrite_file',
2464
+ 'delete_file',
2465
+ 'quick_edit',
2466
+ 'patch',
2467
+ 'apply_diff',
2468
+ ];
2469
+ const fileActions: AIAction[] = [];
2470
+ &nbsp;
2471
+ for (const input of session.sessionInputs || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
2472
+ for (const action of input.aiActions || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
2473
+ if (
2474
+ action.file_path === filePath &amp;&amp;
2475
+ fileActionTypes.includes(action.action_type)
2476
+ ) {
2477
+ fileActions.push(action);
2478
+ }
2479
+ }
2480
+ }
2481
+ &nbsp;
2482
+ if (fileActions.length === 0) {
2483
+ throw new NotFoundException(
2484
+ `No file actions found for path "${filePath}" in session ${sessionId}`,
2485
+ );
2486
+ }
2487
+ &nbsp;
2488
+ // Sort by creation time to find oldest
2489
+ const sortedActions = fileActions.sort(
2490
+ (a, b) =&gt;
2491
+ new Date(a.created_at).getTime() - new Date(b.created_at).getTime(),
2492
+ );
2493
+ &nbsp;
2494
+ const oldestAction = sortedActions[0];
2495
+ const originalContent = oldestAction.original_content_for_revert;
2496
+ &nbsp;
2497
+ const safePath = path.resolve(projectRoot, filePath);
2498
+ if (!safePath.startsWith(projectRoot)) {
2499
+ throw new NotFoundException(`Path traversal detected: ${filePath}`);
2500
+ }
2501
+ &nbsp;
2502
+ try {
2503
+ if (originalContent === null) {
2504
+ // File was created by this session - delete it
2505
+ await fs.unlink(safePath);
2506
+ this.logger.log(`Reverted created file by deleting: ${filePath}`);
2507
+ } else {
2508
+ // File was modified - restore original content
2509
+ await fs.mkdir(path.dirname(safePath), { recursive: true });
2510
+ await fs.writeFile(safePath, originalContent, 'utf8');
2511
+ this.logger.log(`Reverted file to original content: ${filePath}`);
2512
+ }
2513
+ &nbsp;
2514
+ // Mark all actions for this file as confirmed_reverted
2515
+ for (const action of fileActions) {
2516
+ action.status = 'confirmed_reverted';
2517
+ await this.dataSource.manager.save(AIAction, action);
2518
+ }
2519
+ } catch (error) {
2520
+ this.logger.error(`Failed to revert file ${filePath}: ${error.message}`);
2521
+ throw error;
2522
+ }
2523
+ }
2524
+ &nbsp;
2525
+ /**
2526
+ * Get file changes for specific inputs within a session.
2527
+ * Used for section-level diff view.
2528
+ */
2529
+ @Trace()
2530
+ async getInputFileChanges(
2531
+ sessionId: string,
2532
+ inputIds: string[],
2533
+ ): Promise&lt;
2534
+ {
2535
+ file_path: string;
2536
+ initial_content: string | null;
2537
+ current_content: string | null;
2538
+ }[]
2539
+ &gt; {
2540
+ const session = await this.findOne(sessionId);
2541
+ &nbsp;
2542
+ // Validate inputIds belong to this session
2543
+ const sessionInputIds = (session.sessionInputs || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.map((i) =&gt; i.id);
2544
+ for (const inputId of inputIds) {
2545
+ if (!sessionInputIds.includes(inputId)) {
2546
+ throw new NotFoundException(
2547
+ `Input with ID "${inputId}" not found in session ${sessionId}`,
2548
+ );
2549
+ }
2550
+ }
2551
+ &nbsp;
2552
+ // Filter inputs to the specified IDs
2553
+ const targetInputs = (session.sessionInputs || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.filter((i) =&gt;
2554
+ inputIds.includes(i.id),
2555
+ );
2556
+ &nbsp;
2557
+ // Collect file actions from target inputs
2558
+ const fileActionTypes = [
2559
+ 'create_file',
2560
+ 'overwrite_file',
2561
+ 'delete_file',
2562
+ 'quick_edit',
2563
+ 'patch',
2564
+ 'apply_diff',
2565
+ ];
2566
+ const fileActionsMap = new Map&lt;string, AIAction[]&gt;();
2567
+ &nbsp;
2568
+ for (const input of targetInputs) {
2569
+ for (const action of input.aiActions || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
2570
+ if (action.file_path &amp;&amp; fileActionTypes.includes(action.action_type)) {
2571
+ const existing = fileActionsMap.get(action.file_path) || [];
2572
+ existing.push(action);
2573
+ fileActionsMap.set(action.file_path, existing);
2574
+ }
2575
+ }
2576
+ }
2577
+ &nbsp;
2578
+ const changes: {
2579
+ file_path: string;
2580
+ initial_content: string | null;
2581
+ current_content: string | null;
2582
+ }[] = [];
2583
+ &nbsp;
2584
+ for (const [filePath, actions] of fileActionsMap) {
2585
+ // Sort by creation time to find oldest and newest actions in this section
2586
+ const sortedActions = actions.sort(
2587
+ (a, b) =&gt;
2588
+ new Date(a.created_at).getTime() - new Date(b.created_at).getTime(),
2589
+ );
2590
+ &nbsp;
2591
+ // Get initial content from oldest action's original_content_for_revert
2592
+ const oldestAction = sortedActions[0];
2593
+ const initialContent = oldestAction.original_content_for_revert;
2594
+ &nbsp;
2595
+ // Get current content from newest action's content (what this section produced)
2596
+ // This ensures section diff shows only changes made within this section,
2597
+ // not cumulative changes from later sections that exist on filesystem
2598
+ const newestAction = sortedActions[sortedActions.length - 1];
2599
+ const currentContent = newestAction.content;
2600
+ &nbsp;
2601
+ changes.push({
2602
+ file_path: filePath,
2603
+ initial_content: initialContent,
2604
+ current_content: currentContent,
2605
+ });
2606
+ }
2607
+ &nbsp;
2608
+ // Sort by file path
2609
+ return changes.sort((a, b) =&gt; a.file_path.localeCompare(b.file_path));
2610
+ }
2611
+ &nbsp;
2612
+ /**
2613
+ * Revert file changes for specific inputs within a session.
2614
+ * Used for section-level revert.
2615
+ */
2616
+ @Trace()
2617
+ async revertInputFileChanges(
2618
+ sessionId: string,
2619
+ inputIds: string[],
2620
+ ): Promise&lt;RevertSessionResponseDto&gt; {
2621
+ const session = await this.findOne(sessionId);
2622
+ const projectRoot = process.env.REPOBURG_PROJECT_PATH || process.cwd();
2623
+ &nbsp;
2624
+ // Validate inputIds belong to this session
2625
+ const sessionInputIds = (session.sessionInputs || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.map((i) =&gt; i.id);
2626
+ for (const inputId of inputIds) {
2627
+ if (!sessionInputIds.includes(inputId)) {
2628
+ throw new NotFoundException(
2629
+ `Input with ID "${inputId}" not found in session ${sessionId}`,
2630
+ );
2631
+ }
2632
+ }
2633
+ &nbsp;
2634
+ // Filter inputs to the specified IDs
2635
+ const targetInputs = (session.sessionInputs || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.filter((i) =&gt;
2636
+ inputIds.includes(i.id),
2637
+ );
2638
+ &nbsp;
2639
+ // Collect file actions from target inputs
2640
+ const fileActionTypes = [
2641
+ 'create_file',
2642
+ 'overwrite_file',
2643
+ 'delete_file',
2644
+ 'quick_edit',
2645
+ 'patch',
2646
+ 'apply_diff',
2647
+ ];
2648
+ const fileActionsMap = new Map&lt;string, AIAction[]&gt;();
2649
+ &nbsp;
2650
+ for (const input of targetInputs) {
2651
+ for (const action of input.aiActions || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
2652
+ if (action.file_path &amp;&amp; fileActionTypes.includes(action.action_type)) {
2653
+ const existing = fileActionsMap.get(action.file_path) || [];
2654
+ existing.push(action);
2655
+ fileActionsMap.set(action.file_path, existing);
2656
+ }
2657
+ }
2658
+ }
2659
+ &nbsp;
2660
+ const result: RevertSessionResponseDto = {
2661
+ reverted: [],
2662
+ failed: [],
2663
+ errors: [],
2664
+ };
2665
+ &nbsp;
2666
+ // Also check for conflicts - files modified in inputs after our target inputs
2667
+ const targetInputSequences = targetInputs.map((i) =&gt; i.sequence_number);
2668
+ const maxTargetSequence = Math.max(...targetInputSequences);
2669
+ const laterInputs = (session.sessionInputs || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.filter(
2670
+ (i) =&gt; i.sequence_number &gt; maxTargetSequence,
2671
+ );
2672
+ &nbsp;
2673
+ const laterFilePaths = new Set&lt;string&gt;();
2674
+ for (const input of laterInputs) {
2675
+ for (const action of input.aiActions || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
2676
+ if (action.file_path &amp;&amp; fileActionTypes.includes(action.action_type)) {
2677
+ laterFilePaths.add(action.file_path);
2678
+ }
2679
+ }
2680
+ }
2681
+ &nbsp;
2682
+ // Process each file
2683
+ for (const [filePath, actions] of fileActionsMap) {
2684
+ try {
2685
+ const sortedActions = actions.sort(
2686
+ (a, b) =&gt;
2687
+ new Date(a.created_at).getTime() - new Date(b.created_at).getTime(),
2688
+ );
2689
+ &nbsp;
2690
+ const oldestAction = sortedActions[0];
2691
+ const originalContent = oldestAction.original_content_for_revert;
2692
+ &nbsp;
2693
+ const safePath = path.resolve(projectRoot, filePath);
2694
+ if (!safePath.startsWith(projectRoot)) {
2695
+ result.failed.push(filePath);
2696
+ result.errors.push(`Path traversal detected: ${filePath}`);
2697
+ continue;
2698
+ }
2699
+ &nbsp;
2700
+ if (originalContent === null) {
2701
+ // File was created - delete it
2702
+ await fs.unlink(safePath);
2703
+ this.logger.log(
2704
+ `Reverted section-created file by deleting: ${filePath}`,
2705
+ );
2706
+ } else {
2707
+ // File was modified - restore original content
2708
+ await fs.mkdir(path.dirname(safePath), { recursive: true });
2709
+ await fs.writeFile(safePath, originalContent, 'utf8');
2710
+ this.logger.log(
2711
+ `Reverted file to section-start content: ${filePath}`,
2712
+ );
2713
+ }
2714
+ &nbsp;
2715
+ // Mark these specific actions as confirmed_reverted
2716
+ for (const action of actions) {
2717
+ action.status = 'confirmed_reverted';
2718
+ await this.dataSource.manager.save(AIAction, action);
2719
+ }
2720
+ &nbsp;
2721
+ result.reverted.push(filePath);
2722
+ } catch (error) {
2723
+ result.failed.push(filePath);
2724
+ result.errors.push(error.message);
2725
+ }
2726
+ }
2727
+ &nbsp;
2728
+ return result;
2729
+ }
2730
+ &nbsp;
2731
+ /**
2732
+ * Revert all file changes made in this session.
2733
+ * Returns lists of reverted and failed files.
2734
+ */
2735
+ @Trace()
2736
+ async revertSession(sessionId: string): Promise&lt;RevertSessionResponseDto&gt; {
2737
+ const changes = await this.getFileChanges(sessionId);
2738
+ &nbsp;
2739
+ const result: RevertSessionResponseDto = {
2740
+ reverted: [],
2741
+ failed: [],
2742
+ errors: [],
2743
+ };
2744
+ &nbsp;
2745
+ // Process in order: first delete created files, then restore modified/deleted
2746
+ const createdFiles = changes.filter(
2747
+ (c) =&gt; c.initial_content === null &amp;&amp; c.current_content !== null,
2748
+ );
2749
+ const otherFiles = changes.filter(
2750
+ (c) =&gt; c.initial_content !== null || c.current_content === null,
2751
+ );
2752
+ &nbsp;
2753
+ // Revert created files first (delete them)
2754
+ for (const change of createdFiles) {
2755
+ <span class="cstat-no" title="statement not covered" > try {</span>
2756
+ <span class="cstat-no" title="statement not covered" > await this.revertFile(sessionId, change.file_path);</span>
2757
+ <span class="cstat-no" title="statement not covered" > result.reverted.push(change.file_path);</span>
2758
+ } catch (error) {
2759
+ <span class="cstat-no" title="statement not covered" > result.failed.push(change.file_path);</span>
2760
+ <span class="cstat-no" title="statement not covered" > result.errors.push(error.message);</span>
2761
+ }
2762
+ }
2763
+ &nbsp;
2764
+ // Then revert modified/deleted files (restore them)
2765
+ for (const change of otherFiles) {
2766
+ try {
2767
+ await this.revertFile(sessionId, change.file_path);
2768
+ result.reverted.push(change.file_path);
2769
+ } catch (error) {
2770
+ result.failed.push(change.file_path);
2771
+ result.errors.push(error.message);
2772
+ }
2773
+ }
2774
+ &nbsp;
2775
+ return result;
2776
+ }
2777
+ }
2778
+ &nbsp;</pre></td></tr></table></pre>
2779
+
2780
+ <div class='push'></div><!-- for sticky footer -->
2781
+ </div><!-- /wrapper -->
2782
+ <div class='footer quiet pad2 space-top1 center small'>
2783
+ Code coverage generated by
2784
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2785
+ at 2026-05-09T01:03:45.353Z
2786
+ </div>
2787
+ <script src="../../prettify.js"></script>
2788
+ <script>
2789
+ window.onload = function () {
2790
+ prettyPrint();
2791
+ };
2792
+ </script>
2793
+ <script src="../../sorter.js"></script>
2794
+ <script src="../../block-navigation.js"></script>
2795
+ </body>
2796
+ </html>
2797
+