repoburg 1.3.147 → 1.3.149

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 (503) hide show
  1. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
  2. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +0 -3
  3. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
  4. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  5. package/package.json +1 -1
  6. package/.claude/settings.local.json +0 -7
  7. package/.playwright-mcp/console-2026-05-12T09-54-31-560Z.log +0 -13
  8. package/.playwright-mcp/console-2026-05-12T10-04-14-892Z.log +0 -13
  9. package/.playwright-mcp/console-2026-05-12T10-50-32-398Z.log +0 -14
  10. package/.playwright-mcp/console-2026-05-12T12-50-09-889Z.log +0 -13
  11. package/.playwright-mcp/console-2026-05-12T12-58-49-817Z.log +0 -60
  12. package/.playwright-mcp/console-2026-05-13T18-41-50-654Z.log +0 -13
  13. package/.playwright-mcp/console-2026-05-13T18-54-58-000Z.log +0 -13
  14. package/.playwright-mcp/console-2026-05-13T19-13-30-875Z.log +0 -95
  15. package/.playwright-mcp/console-2026-05-13T20-09-13-456Z.log +0 -17
  16. package/.playwright-mcp/console-2026-05-13T20-21-01-662Z.log +0 -13
  17. package/.playwright-mcp/console-2026-05-13T20-22-00-038Z.log +0 -15
  18. package/.playwright-mcp/console-2026-05-13T20-26-26-665Z.log +0 -28
  19. package/.playwright-mcp/console-2026-05-13T20-35-49-544Z.log +0 -26
  20. package/.playwright-mcp/console-2026-05-13T20-38-10-958Z.log +0 -676
  21. package/.playwright-mcp/console-2026-05-14T21-27-06-074Z.log +0 -69
  22. package/.playwright-mcp/console-2026-05-14T22-13-07-470Z.log +0 -101
  23. package/.playwright-mcp/console-2026-05-14T23-58-12-858Z.log +0 -28
  24. package/.playwright-mcp/console-2026-05-15T00-15-00-760Z.log +0 -81
  25. package/.playwright-mcp/page-2026-05-12T09-54-32-920Z.yml +0 -223
  26. package/.playwright-mcp/page-2026-05-12T09-54-42-067Z.yml +0 -190
  27. package/.playwright-mcp/page-2026-05-12T09-55-12-019Z.yml +0 -389
  28. package/.playwright-mcp/page-2026-05-12T09-55-49-065Z.yml +0 -428
  29. package/.playwright-mcp/page-2026-05-12T09-56-06-607Z.yml +0 -389
  30. package/.playwright-mcp/page-2026-05-12T09-56-23-371Z.yml +0 -196
  31. package/.playwright-mcp/page-2026-05-12T09-56-55-792Z.yml +0 -389
  32. package/.playwright-mcp/page-2026-05-12T10-04-15-716Z.yml +0 -164
  33. package/.playwright-mcp/page-2026-05-12T10-04-43-994Z.yml +0 -190
  34. package/.playwright-mcp/page-2026-05-12T10-05-04-616Z.yml +0 -389
  35. package/.playwright-mcp/page-2026-05-12T10-05-27-643Z.yml +0 -428
  36. package/.playwright-mcp/page-2026-05-12T10-05-47-851Z.yml +0 -389
  37. package/.playwright-mcp/page-2026-05-12T10-06-13-429Z.yml +0 -196
  38. package/.playwright-mcp/page-2026-05-12T10-06-58-147Z.yml +0 -389
  39. package/.playwright-mcp/page-2026-05-12T10-08-20-216Z.yml +0 -428
  40. package/.playwright-mcp/page-2026-05-12T10-08-38-177Z.yml +0 -389
  41. package/.playwright-mcp/page-2026-05-12T10-09-01-851Z.yml +0 -196
  42. package/.playwright-mcp/page-2026-05-12T10-09-24-888Z.yml +0 -389
  43. package/.playwright-mcp/page-2026-05-12T10-50-33-049Z.yml +0 -212
  44. package/.playwright-mcp/page-2026-05-12T10-50-48-496Z.yml +0 -196
  45. package/.playwright-mcp/page-2026-05-12T10-51-51-308Z.yml +0 -196
  46. package/.playwright-mcp/page-2026-05-12T10-52-07-379Z.yml +0 -196
  47. package/.playwright-mcp/page-2026-05-12T12-50-10-589Z.yml +0 -143
  48. package/.playwright-mcp/page-2026-05-12T12-50-25-461Z.yml +0 -196
  49. package/.playwright-mcp/page-2026-05-12T12-51-11-190Z.yml +0 -394
  50. package/.playwright-mcp/page-2026-05-12T12-52-21-138Z.yml +0 -524
  51. package/.playwright-mcp/page-2026-05-12T12-53-42-423Z.yml +0 -431
  52. package/.playwright-mcp/page-2026-05-12T12-54-18-549Z.yml +0 -196
  53. package/.playwright-mcp/page-2026-05-12T12-54-26-818Z.yml +0 -390
  54. package/.playwright-mcp/page-2026-05-12T12-55-32-697Z.yml +0 -520
  55. package/.playwright-mcp/page-2026-05-12T12-58-50-450Z.yml +0 -164
  56. package/.playwright-mcp/page-2026-05-12T12-59-12-954Z.yml +0 -196
  57. package/.playwright-mcp/page-2026-05-12T12-59-38-479Z.yml +0 -394
  58. package/.playwright-mcp/page-2026-05-12T13-01-17-580Z.yml +0 -524
  59. package/.playwright-mcp/page-2026-05-12T13-01-58-447Z.yml +0 -271
  60. package/.playwright-mcp/page-2026-05-12T13-03-12-109Z.yml +0 -394
  61. package/.playwright-mcp/page-2026-05-13T18-41-51-436Z.yml +0 -159
  62. package/.playwright-mcp/page-2026-05-13T18-42-27-482Z.yml +0 -4814
  63. package/.playwright-mcp/page-2026-05-13T18-54-58-644Z.yml +0 -154
  64. package/.playwright-mcp/page-2026-05-13T18-56-11-217Z.yml +0 -1560
  65. package/.playwright-mcp/page-2026-05-13T18-56-32-205Z.yml +0 -1560
  66. package/.playwright-mcp/page-2026-05-13T19-13-31-457Z.yml +0 -164
  67. package/.playwright-mcp/page-2026-05-13T19-14-26-248Z.yml +0 -1560
  68. package/.playwright-mcp/page-2026-05-13T19-15-02-355Z.yml +0 -1560
  69. package/.playwright-mcp/page-2026-05-13T20-09-14-478Z.yml +0 -149
  70. package/.playwright-mcp/page-2026-05-13T20-10-49-292Z.yml +0 -4814
  71. package/.playwright-mcp/page-2026-05-13T20-21-02-852Z.yml +0 -143
  72. package/.playwright-mcp/page-2026-05-13T20-22-01-084Z.yml +0 -143
  73. package/.playwright-mcp/page-2026-05-13T20-22-09-334Z.yml +0 -1561
  74. package/.playwright-mcp/page-2026-05-13T20-26-27-690Z.yml +0 -143
  75. package/.playwright-mcp/page-2026-05-13T20-26-53-324Z.yml +0 -1561
  76. package/.playwright-mcp/page-2026-05-13T20-27-35-395Z.yml +0 -1561
  77. package/.playwright-mcp/page-2026-05-13T20-35-50-708Z.yml +0 -149
  78. package/.playwright-mcp/page-2026-05-13T20-37-41-379Z.yml +0 -0
  79. package/.playwright-mcp/page-2026-05-13T20-38-12-049Z.yml +0 -149
  80. package/.playwright-mcp/page-2026-05-13T20-38-19-708Z.yml +0 -1561
  81. package/.playwright-mcp/page-2026-05-14T21-27-07-278Z.yml +0 -164
  82. package/.playwright-mcp/page-2026-05-14T22-13-07-628Z.yml +0 -5
  83. package/.playwright-mcp/page-2026-05-14T22-13-27-676Z.yml +0 -1561
  84. package/.playwright-mcp/page-2026-05-14T23-58-13-064Z.yml +0 -3
  85. package/.playwright-mcp/page-2026-05-14T23-58-33-500Z.yml +0 -1561
  86. package/.playwright-mcp/page-2026-05-15T00-15-00-945Z.yml +0 -3
  87. package/.run/backend _ build.run.xml +0 -12
  88. package/.run/backend _ lint.run.xml +0 -12
  89. package/.run/backend _ test.run.xml +0 -12
  90. package/.run/frontend _ build.run.xml +0 -12
  91. package/.run/frontend _ lint_fix.run.xml +0 -12
  92. package/CODEMAP.md +0 -53
  93. package/backend/.repoburg/hooks/README.md +0 -53
  94. package/backend/.repoburg/hooks/eslint-hook.ts +0 -46
  95. package/backend/.repoburg/hooks/example-hook.ts +0 -62
  96. package/backend/CODEMAP.md +0 -48
  97. package/backend/README.md +0 -3
  98. package/backend/coverage/clover.xml +0 -12003
  99. package/backend/coverage/coverage-final.json +0 -313
  100. package/backend/coverage/lcov-report/base.css +0 -224
  101. package/backend/coverage/lcov-report/block-navigation.js +0 -87
  102. package/backend/coverage/lcov-report/favicon.png +0 -0
  103. package/backend/coverage/lcov-report/index.html +0 -1301
  104. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +0 -116
  105. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +0 -445
  106. package/backend/coverage/lcov-report/packages/gemini-core/index.html +0 -116
  107. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +0 -127
  108. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +0 -193
  109. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +0 -832
  110. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +0 -206
  111. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +0 -469
  112. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +0 -1705
  113. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +0 -790
  114. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +0 -454
  115. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +0 -685
  116. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +0 -307
  117. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +0 -146
  118. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +0 -151
  119. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +0 -172
  120. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +0 -490
  121. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +0 -1237
  122. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +0 -139
  123. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +0 -176
  124. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +0 -409
  125. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +0 -181
  126. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +0 -116
  127. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +0 -187
  128. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +0 -229
  129. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +0 -634
  130. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +0 -373
  131. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +0 -191
  132. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +0 -124
  133. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +0 -835
  134. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +0 -211
  135. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +0 -421
  136. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +0 -191
  137. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +0 -592
  138. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +0 -388
  139. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +0 -877
  140. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +0 -112
  141. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +0 -502
  142. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +0 -161
  143. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +0 -415
  144. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +0 -139
  145. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +0 -1249
  146. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +0 -131
  147. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +0 -187
  148. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +0 -193
  149. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +0 -178
  150. package/backend/coverage/lcov-report/prettify.css +0 -1
  151. package/backend/coverage/lcov-report/prettify.js +0 -2
  152. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  153. package/backend/coverage/lcov-report/sorter.js +0 -210
  154. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +0 -1549
  155. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +0 -904
  156. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +0 -175
  157. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +0 -1534
  158. package/backend/coverage/lcov-report/src/ai-actions/index.html +0 -161
  159. package/backend/coverage/lcov-report/src/app.controller.ts.html +0 -151
  160. package/backend/coverage/lcov-report/src/app.module.ts.html +0 -451
  161. package/backend/coverage/lcov-report/src/app.service.ts.html +0 -163
  162. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +0 -1609
  163. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +0 -136
  164. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +0 -2281
  165. package/backend/coverage/lcov-report/src/application-state/dto/index.html +0 -416
  166. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +0 -109
  167. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +0 -118
  168. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +0 -109
  169. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +0 -124
  170. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +0 -121
  171. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +0 -124
  172. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +0 -115
  173. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +0 -115
  174. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +0 -127
  175. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +0 -118
  176. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +0 -109
  177. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +0 -139
  178. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +0 -109
  179. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +0 -109
  180. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +0 -118
  181. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +0 -124
  182. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +0 -118
  183. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +0 -109
  184. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +0 -124
  185. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +0 -118
  186. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +0 -109
  187. package/backend/coverage/lcov-report/src/application-state/index.html +0 -146
  188. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +0 -1297
  189. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +0 -712
  190. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +0 -379
  191. package/backend/coverage/lcov-report/src/common/cache/index.html +0 -146
  192. package/backend/coverage/lcov-report/src/common/common.module.ts.html +0 -121
  193. package/backend/coverage/lcov-report/src/common/index.html +0 -116
  194. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +0 -337
  195. package/backend/coverage/lcov-report/src/common/interceptors/index.html +0 -116
  196. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +0 -265
  197. package/backend/coverage/lcov-report/src/common/middleware/index.html +0 -116
  198. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +0 -118
  199. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +0 -1501
  200. package/backend/coverage/lcov-report/src/context-generation/index.html +0 -131
  201. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +0 -427
  202. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +0 -142
  203. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +0 -442
  204. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +0 -211
  205. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +0 -116
  206. package/backend/coverage/lcov-report/src/context-snippets/index.html +0 -146
  207. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +0 -724
  208. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +0 -142
  209. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +0 -1015
  210. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +0 -511
  211. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +0 -116
  212. package/backend/coverage/lcov-report/src/context-templates/index.html +0 -146
  213. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +0 -613
  214. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +0 -124
  215. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +0 -211
  216. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +0 -190
  217. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +0 -439
  218. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +0 -205
  219. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +0 -241
  220. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +0 -553
  221. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +0 -208
  222. package/backend/coverage/lcov-report/src/core-entities/index.html +0 -371
  223. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +0 -136
  224. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +0 -388
  225. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +0 -256
  226. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +0 -256
  227. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +0 -181
  228. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +0 -745
  229. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +0 -688
  230. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +0 -349
  231. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +0 -235
  232. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +0 -442
  233. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +0 -124
  234. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +0 -304
  235. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +0 -205
  236. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +0 -116
  237. package/backend/coverage/lcov-report/src/custom-snippets/index.html +0 -146
  238. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +0 -463
  239. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +0 -124
  240. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +0 -310
  241. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +0 -244
  242. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +0 -116
  243. package/backend/coverage/lcov-report/src/custom-variables/index.html +0 -146
  244. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +0 -295
  245. package/backend/coverage/lcov-report/src/events/events.module.ts.html +0 -109
  246. package/backend/coverage/lcov-report/src/events/index.html +0 -146
  247. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +0 -466
  248. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +0 -130
  249. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +0 -116
  250. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +0 -130
  251. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +0 -124
  252. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +0 -238
  253. package/backend/coverage/lcov-report/src/execution-logs/index.html +0 -146
  254. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +0 -553
  255. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +0 -109
  256. package/backend/coverage/lcov-report/src/gemini/index.html +0 -131
  257. package/backend/coverage/lcov-report/src/global-config/dto/index.html +0 -116
  258. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +0 -367
  259. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +0 -220
  260. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +0 -115
  261. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +0 -397
  262. package/backend/coverage/lcov-report/src/global-config/index.html +0 -146
  263. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +0 -340
  264. package/backend/coverage/lcov-report/src/index.html +0 -206
  265. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +0 -187
  266. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +0 -1825
  267. package/backend/coverage/lcov-report/src/interactive-chat/index.html +0 -146
  268. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +0 -343
  269. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +0 -116
  270. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +0 -214
  271. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +0 -146
  272. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +0 -634
  273. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +0 -124
  274. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +0 -643
  275. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +0 -1090
  276. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +0 -433
  277. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +0 -757
  278. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +0 -586
  279. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +0 -1153
  280. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +0 -124
  281. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +0 -103
  282. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +0 -124
  283. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +0 -106
  284. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +0 -106
  285. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +0 -118
  286. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +0 -190
  287. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +0 -196
  288. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +0 -91
  289. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +0 -356
  290. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +0 -106
  291. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +0 -124
  292. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +0 -124
  293. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +0 -214
  294. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +0 -202
  295. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +0 -151
  296. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +0 -181
  297. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +0 -130
  298. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +0 -631
  299. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +0 -469
  300. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +0 -448
  301. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +0 -1351
  302. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +0 -868
  303. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +0 -481
  304. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +0 -416
  305. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +0 -580
  306. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +0 -352
  307. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +0 -1054
  308. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +0 -331
  309. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +0 -403
  310. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +0 -176
  311. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +0 -100
  312. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +0 -724
  313. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +0 -358
  314. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +0 -379
  315. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +0 -838
  316. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +0 -1702
  317. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +0 -1459
  318. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +0 -679
  319. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +0 -964
  320. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +0 -625
  321. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +0 -103
  322. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +0 -116
  323. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +0 -1645
  324. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +0 -238
  325. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +0 -181
  326. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +0 -161
  327. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +0 -313
  328. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +0 -466
  329. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +0 -176
  330. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +0 -319
  331. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +0 -706
  332. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +0 -1150
  333. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +0 -131
  334. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +0 -658
  335. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +0 -127
  336. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +0 -547
  337. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +0 -1681
  338. package/backend/coverage/lcov-report/src/llm-provider/index.html +0 -236
  339. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +0 -187
  340. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +0 -361
  341. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +0 -175
  342. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +0 -1780
  343. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +0 -1867
  344. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +0 -1891
  345. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +0 -304
  346. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +0 -1666
  347. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +0 -131
  348. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +0 -436
  349. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +0 -319
  350. package/backend/coverage/lcov-report/src/llm-responses/index.html +0 -146
  351. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +0 -283
  352. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +0 -184
  353. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +0 -1474
  354. package/backend/coverage/lcov-report/src/main.ts.html +0 -463
  355. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +0 -145
  356. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +0 -127
  357. package/backend/coverage/lcov-report/src/mcp/dto/index.html +0 -146
  358. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +0 -112
  359. package/backend/coverage/lcov-report/src/mcp/index.html +0 -146
  360. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +0 -340
  361. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +0 -124
  362. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +0 -1345
  363. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +0 -116
  364. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +0 -109
  365. package/backend/coverage/lcov-report/src/message-bus/index.html +0 -146
  366. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +0 -148
  367. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +0 -115
  368. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +0 -151
  369. package/backend/coverage/lcov-report/src/projects/dto/index.html +0 -116
  370. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +0 -196
  371. package/backend/coverage/lcov-report/src/projects/index.html +0 -146
  372. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +0 -322
  373. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +0 -124
  374. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +0 -235
  375. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +0 -280
  376. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +0 -439
  377. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +0 -271
  378. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +0 -271
  379. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +0 -172
  380. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +0 -116
  381. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +0 -157
  382. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +0 -148
  383. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +0 -151
  384. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +0 -161
  385. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +0 -247
  386. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +0 -94
  387. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +0 -100
  388. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +0 -97
  389. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +0 -100
  390. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +0 -304
  391. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +0 -94
  392. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +0 -341
  393. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +0 -100
  394. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +0 -97
  395. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +0 -94
  396. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +0 -94
  397. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +0 -94
  398. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +0 -94
  399. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +0 -94
  400. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +0 -100
  401. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +0 -94
  402. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +0 -94
  403. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +0 -94
  404. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +0 -97
  405. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +0 -131
  406. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +0 -121
  407. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +0 -116
  408. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +0 -115
  409. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +0 -136
  410. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +0 -131
  411. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +0 -190
  412. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +0 -421
  413. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +0 -265
  414. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +0 -161
  415. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +0 -388
  416. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +0 -265
  417. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +0 -274
  418. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +0 -146
  419. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +0 -250
  420. package/backend/coverage/lcov-report/src/seeding/index.html +0 -236
  421. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +0 -193
  422. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +0 -211
  423. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +0 -187
  424. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +0 -742
  425. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +0 -397
  426. package/backend/coverage/lcov-report/src/session-followup/index.html +0 -131
  427. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +0 -130
  428. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +0 -718
  429. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +0 -116
  430. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +0 -577
  431. package/backend/coverage/lcov-report/src/session-inputs/index.html +0 -176
  432. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +0 -832
  433. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +0 -220
  434. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +0 -685
  435. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +0 -229
  436. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +0 -1981
  437. package/backend/coverage/lcov-report/src/session-transfer/index.html +0 -131
  438. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +0 -160
  439. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +0 -883
  440. package/backend/coverage/lcov-report/src/sessions/dto/index.html +0 -116
  441. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +0 -769
  442. package/backend/coverage/lcov-report/src/sessions/index.html +0 -146
  443. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +0 -1306
  444. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +0 -220
  445. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +0 -2797
  446. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +0 -355
  447. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +0 -131
  448. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +0 -295
  449. package/backend/coverage/lcov-report/src/sub-agents/index.html +0 -221
  450. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +0 -463
  451. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +0 -2428
  452. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +0 -580
  453. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +0 -550
  454. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +0 -475
  455. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +0 -373
  456. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +0 -205
  457. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +0 -619
  458. package/backend/coverage/lcov-report/src/syntax-validation/index.html +0 -131
  459. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +0 -109
  460. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +0 -724
  461. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +0 -176
  462. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +0 -157
  463. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +0 -148
  464. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +0 -517
  465. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +0 -121
  466. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +0 -118
  467. package/backend/coverage/lcov-report/src/system-prompts/index.html +0 -146
  468. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +0 -1060
  469. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +0 -160
  470. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +0 -2254
  471. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +0 -178
  472. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +0 -181
  473. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +0 -131
  474. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +0 -178
  475. package/backend/coverage/lcov-report/src/tool-hooks/index.html +0 -146
  476. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +0 -481
  477. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +0 -127
  478. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +0 -1222
  479. package/backend/coverage/lcov-report/src/tracing.ts.html +0 -214
  480. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +0 -130
  481. package/backend/coverage/lcov-report/src/types/index.html +0 -116
  482. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +0 -253
  483. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +0 -310
  484. package/backend/coverage/lcov-report/src/utils/index.html +0 -191
  485. package/backend/coverage/lcov-report/src/utils/index.ts.html +0 -100
  486. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +0 -109
  487. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +0 -412
  488. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +0 -223
  489. package/backend/coverage/lcov-report/src/visual-editor/index.html +0 -146
  490. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +0 -409
  491. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +0 -130
  492. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +0 -118
  493. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +0 -112
  494. package/backend/coverage/lcov-report/src/workspace/dto/index.html +0 -131
  495. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +0 -193
  496. package/backend/coverage/lcov-report/src/workspace/index.html +0 -146
  497. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +0 -394
  498. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +0 -121
  499. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +0 -1027
  500. package/backend/coverage/lcov.info +0 -20220
  501. package/backend/packages/tokenpatch/CODEMAP.md +0 -25
  502. package/daemon/CODEMAP.md +0 -23
  503. package/visual-editor-proxy/CODEMAP.md +0 -21
@@ -1,1705 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for packages/gemini-core/src/code_assist/oauth2.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">packages/gemini-core/src/code_assist</a> oauth2.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">22.58% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>49/217</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">4.65% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>2/43</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">17.24% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>5/29</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">22.89% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>49/214</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">6x</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-yes">6x</span>
619
- <span class="cline-any cline-yes">6x</span>
620
- <span class="cline-any cline-yes">6x</span>
621
- <span class="cline-any cline-yes">6x</span>
622
- <span class="cline-any cline-yes">6x</span>
623
- <span class="cline-any cline-yes">6x</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-yes">6x</span>
626
- <span class="cline-any cline-yes">6x</span>
627
- <span class="cline-any cline-yes">6x</span>
628
- <span class="cline-any cline-yes">6x</span>
629
- <span class="cline-any cline-yes">6x</span>
630
- <span class="cline-any cline-yes">6x</span>
631
- <span class="cline-any cline-yes">6x</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-yes">6x</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-yes">6x</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-yes">6x</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-yes">6x</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-yes">6x</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-yes">6x</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-yes">6x</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">6x</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">12x</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-yes">6x</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-yes">6x</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-yes">6x</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-no">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-no">&nbsp;</span>
694
- <span class="cline-any cline-no">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">6x</span>
698
- <span class="cline-any cline-no">&nbsp;</span>
699
- <span class="cline-any cline-no">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-no">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-yes">6x</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-no">&nbsp;</span>
710
- <span class="cline-any cline-no">&nbsp;</span>
711
- <span class="cline-any cline-no">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-no">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-no">&nbsp;</span>
718
- <span class="cline-any cline-no">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-yes">4x</span>
725
- <span class="cline-any cline-no">&nbsp;</span>
726
- <span class="cline-any cline-no">&nbsp;</span>
727
- <span class="cline-any cline-no">&nbsp;</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-no">&nbsp;</span>
732
- <span class="cline-any cline-no">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-no">&nbsp;</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-no">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-yes">4x</span>
746
- <span class="cline-any cline-no">&nbsp;</span>
747
- <span class="cline-any cline-no">&nbsp;</span>
748
- <span class="cline-any cline-no">&nbsp;</span>
749
- <span class="cline-any cline-no">&nbsp;</span>
750
- <span class="cline-any cline-no">&nbsp;</span>
751
- <span class="cline-any cline-no">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-no">&nbsp;</span>
758
- <span class="cline-any cline-no">&nbsp;</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-no">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-no">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-no">&nbsp;</span>
771
- <span class="cline-any cline-no">&nbsp;</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-no">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-no">&nbsp;</span>
782
- <span class="cline-any cline-no">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-no">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-no">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-no">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-no">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-no">&nbsp;</span>
802
- <span class="cline-any cline-no">&nbsp;</span>
803
- <span class="cline-any cline-no">&nbsp;</span>
804
- <span class="cline-any cline-no">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-no">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-yes">6x</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-yes">6x</span>
824
- <span class="cline-any cline-yes">6x</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-yes">6x</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-no">&nbsp;</span>
842
- <span class="cline-any cline-no">&nbsp;</span>
843
- <span class="cline-any cline-no">&nbsp;</span>
844
- <span class="cline-any cline-no">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-no">&nbsp;</span>
847
- <span class="cline-any cline-no">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-no">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-no">&nbsp;</span>
858
- <span class="cline-any cline-no">&nbsp;</span>
859
- <span class="cline-any cline-no">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-neutral">&nbsp;</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-no">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-no">&nbsp;</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-no">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-no">&nbsp;</span>
888
- <span class="cline-any cline-no">&nbsp;</span>
889
- <span class="cline-any cline-no">&nbsp;</span>
890
- <span class="cline-any cline-neutral">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-no">&nbsp;</span>
897
- <span class="cline-any cline-no">&nbsp;</span>
898
- <span class="cline-any cline-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-no">&nbsp;</span>
910
- <span class="cline-any cline-no">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
912
- <span class="cline-any cline-no">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-no">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-no">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-neutral">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-neutral">&nbsp;</span>
928
- <span class="cline-any cline-neutral">&nbsp;</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-no">&nbsp;</span>
931
- <span class="cline-any cline-no">&nbsp;</span>
932
- <span class="cline-any cline-no">&nbsp;</span>
933
- <span class="cline-any cline-neutral">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-no">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-no">&nbsp;</span>
940
- <span class="cline-any cline-no">&nbsp;</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-no">&nbsp;</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-neutral">&nbsp;</span>
945
- <span class="cline-any cline-neutral">&nbsp;</span>
946
- <span class="cline-any cline-neutral">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-neutral">&nbsp;</span>
949
- <span class="cline-any cline-no">&nbsp;</span>
950
- <span class="cline-any cline-no">&nbsp;</span>
951
- <span class="cline-any cline-no">&nbsp;</span>
952
- <span class="cline-any cline-neutral">&nbsp;</span>
953
- <span class="cline-any cline-no">&nbsp;</span>
954
- <span class="cline-any cline-no">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-neutral">&nbsp;</span>
961
- <span class="cline-any cline-neutral">&nbsp;</span>
962
- <span class="cline-any cline-no">&nbsp;</span>
963
- <span class="cline-any cline-neutral">&nbsp;</span>
964
- <span class="cline-any cline-neutral">&nbsp;</span>
965
- <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-neutral">&nbsp;</span>
967
- <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-neutral">&nbsp;</span>
969
- <span class="cline-any cline-neutral">&nbsp;</span>
970
- <span class="cline-any cline-no">&nbsp;</span>
971
- <span class="cline-any cline-no">&nbsp;</span>
972
- <span class="cline-any cline-neutral">&nbsp;</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-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-no">&nbsp;</span>
981
- <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-neutral">&nbsp;</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
989
- <span class="cline-any cline-no">&nbsp;</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
996
- <span class="cline-any cline-neutral">&nbsp;</span>
997
- <span class="cline-any cline-no">&nbsp;</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-neutral">&nbsp;</span>
1002
- <span class="cline-any cline-neutral">&nbsp;</span>
1003
- <span class="cline-any cline-yes">6x</span>
1004
- <span class="cline-any cline-no">&nbsp;</span>
1005
- <span class="cline-any cline-no">&nbsp;</span>
1006
- <span class="cline-any cline-no">&nbsp;</span>
1007
- <span class="cline-any cline-no">&nbsp;</span>
1008
- <span class="cline-any cline-no">&nbsp;</span>
1009
- <span class="cline-any cline-no">&nbsp;</span>
1010
- <span class="cline-any cline-no">&nbsp;</span>
1011
- <span class="cline-any cline-no">&nbsp;</span>
1012
- <span class="cline-any cline-neutral">&nbsp;</span>
1013
- <span class="cline-any cline-neutral">&nbsp;</span>
1014
- <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-no">&nbsp;</span>
1016
- <span class="cline-any cline-neutral">&nbsp;</span>
1017
- <span class="cline-any cline-no">&nbsp;</span>
1018
- <span class="cline-any cline-no">&nbsp;</span>
1019
- <span class="cline-any cline-no">&nbsp;</span>
1020
- <span class="cline-any cline-no">&nbsp;</span>
1021
- <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-no">&nbsp;</span>
1023
- <span class="cline-any cline-no">&nbsp;</span>
1024
- <span class="cline-any cline-no">&nbsp;</span>
1025
- <span class="cline-any cline-neutral">&nbsp;</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-no">&nbsp;</span>
1028
- <span class="cline-any cline-neutral">&nbsp;</span>
1029
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1033
- <span class="cline-any cline-neutral">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-yes">6x</span>
1036
- <span class="cline-any cline-yes">6x</span>
1037
- <span class="cline-any cline-no">&nbsp;</span>
1038
- <span class="cline-any cline-no">&nbsp;</span>
1039
- <span class="cline-any cline-no">&nbsp;</span>
1040
- <span class="cline-any cline-no">&nbsp;</span>
1041
- <span class="cline-any cline-neutral">&nbsp;</span>
1042
- <span class="cline-any cline-no">&nbsp;</span>
1043
- <span class="cline-any cline-neutral">&nbsp;</span>
1044
- <span class="cline-any cline-neutral">&nbsp;</span>
1045
- <span class="cline-any cline-yes">6x</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">12x</span>
1049
- <span class="cline-any cline-neutral">&nbsp;</span>
1050
- <span class="cline-any cline-yes">6x</span>
1051
- <span class="cline-any cline-yes">6x</span>
1052
- <span class="cline-any cline-yes">6x</span>
1053
- <span class="cline-any cline-yes">6x</span>
1054
- <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-yes">6x</span>
1057
- <span class="cline-any cline-no">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
1063
- <span class="cline-any cline-neutral">&nbsp;</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-yes">4x</span>
1068
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1073
- <span class="cline-any cline-neutral">&nbsp;</span>
1074
- <span class="cline-any cline-yes">4x</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-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-no">&nbsp;</span>
1079
- <span class="cline-any cline-no">&nbsp;</span>
1080
- <span class="cline-any cline-neutral">&nbsp;</span>
1081
- <span class="cline-any cline-no">&nbsp;</span>
1082
- <span class="cline-any cline-no">&nbsp;</span>
1083
- <span class="cline-any cline-no">&nbsp;</span>
1084
- <span class="cline-any cline-no">&nbsp;</span>
1085
- <span class="cline-any cline-neutral">&nbsp;</span>
1086
- <span class="cline-any cline-neutral">&nbsp;</span>
1087
- <span class="cline-any cline-neutral">&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-yes">6x</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-yes">6x</span>
1095
- <span class="cline-any cline-no">&nbsp;</span>
1096
- <span class="cline-any cline-no">&nbsp;</span>
1097
- <span class="cline-any cline-no">&nbsp;</span>
1098
- <span class="cline-any cline-no">&nbsp;</span>
1099
- <span class="cline-any cline-neutral">&nbsp;</span>
1100
- <span class="cline-any cline-no">&nbsp;</span>
1101
- <span class="cline-any cline-neutral">&nbsp;</span>
1102
- <span class="cline-any cline-neutral">&nbsp;</span>
1103
- <span class="cline-any cline-no">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-no">&nbsp;</span>
1106
- <span class="cline-any cline-neutral">&nbsp;</span>
1107
- <span class="cline-any cline-no">&nbsp;</span>
1108
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1113
- <span class="cline-any cline-no">&nbsp;</span>
1114
- <span class="cline-any cline-no">&nbsp;</span>
1115
- <span class="cline-any cline-no">&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-no">&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-neutral">&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-no">&nbsp;</span>
1128
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1132
- <span class="cline-any cline-neutral">&nbsp;</span>
1133
- <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
1141
- <span class="cline-any cline-neutral">&nbsp;</span>
1142
- <span class="cline-any cline-neutral">&nbsp;</span>
1143
- <span class="cline-any cline-neutral">&nbsp;</span>
1144
- <span class="cline-any cline-yes">6x</span>
1145
- <span class="cline-any cline-no">&nbsp;</span>
1146
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1147
- * @license
1148
- * Copyright 2025 Google LLC
1149
- * SPDX-License-Identifier: Apache-2.0
1150
- */
1151
- &nbsp;
1152
- import type { Credentials } from 'google-auth-library';
1153
- import {
1154
- OAuth2Client,
1155
- Compute,
1156
- CodeChallengeMethod,
1157
- } from 'google-auth-library';
1158
- import * as http from 'node:http';
1159
- import url from 'node:url';
1160
- import * as crypto from 'node:crypto';
1161
- import * as net from 'node:net';
1162
- import * as path from 'node:path';
1163
- import { promises as fs } from 'node:fs';
1164
- import type { Config } from '../config/config';
1165
- import { getErrorMessage, FatalAuthenticationError } from '../utils/errors';
1166
- import { UserAccountManager } from '../utils/userAccountManager';
1167
- import { AuthType } from '../core/contentGenerator';
1168
- import readline from 'node:readline';
1169
- import { Storage } from '../config/storage';
1170
- import { OAuthCredentialStorage } from './oauth-credential-storage';
1171
- import { FORCE_ENCRYPTED_FILE_ENV_VAR } from '../mcp/token-storage/index';
1172
- &nbsp;
1173
- const userAccountManager = new UserAccountManager();
1174
- &nbsp;
1175
- // OAuth Client ID used to initiate OAuth2Client class.
1176
- const OAUTH_CLIENT_ID =
1177
- '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
1178
- &nbsp;
1179
- // OAuth Secret value used to initiate OAuth2Client class.
1180
- // Note: It's ok to save this in git because this is an installed application
1181
- // as described here: https://developers.google.com/identity/protocols/oauth2#installed
1182
- // "The process results in a client ID and, in some cases, a client secret,
1183
- // which you embed in the source code of your application. (In this context,
1184
- // the client secret is obviously not treated as a secret.)"
1185
- const OAUTH_CLIENT_SECRET = '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';
1186
- &nbsp;
1187
- // OAuth Scopes for Cloud Code authorization.
1188
- const OAUTH_SCOPE = [
1189
- 'https://www.googleapis.com/auth/cloud-platform',
1190
- 'https://www.googleapis.com/auth/userinfo.email',
1191
- 'https://www.googleapis.com/auth/userinfo.profile',
1192
- ];
1193
- &nbsp;
1194
- const HTTP_REDIRECT = 301;
1195
- const SIGN_IN_SUCCESS_URL =
1196
- 'https://developers.google.com/gemini-code-assist/auth_success_gemini';
1197
- const SIGN_IN_FAILURE_URL =
1198
- 'https://developers.google.com/gemini-code-assist/auth_failure_gemini';
1199
- &nbsp;
1200
- /**
1201
- * An Authentication URL for updating the credentials of a Oauth2Client
1202
- * as well as a promise that will resolve when the credentials have
1203
- * been refreshed (or which throws error when refreshing credentials failed).
1204
- */
1205
- export interface OauthWebLogin {
1206
- authUrl: string;
1207
- loginCompletePromise: Promise&lt;void&gt;;
1208
- }
1209
- &nbsp;
1210
- const oauthClientPromises = new Map&lt;AuthType, Promise&lt;OAuth2Client&gt;&gt;();
1211
- &nbsp;
1212
- function getUseEncryptedStorageFlag() {
1213
- return process.env[FORCE_ENCRYPTED_FILE_ENV_VAR] === 'true';
1214
- }
1215
- &nbsp;
1216
- async function initOauthClient(
1217
- authType: AuthType,
1218
- config: Config,
1219
- ): Promise&lt;OAuth2Client&gt; {
1220
- const client = new OAuth2Client({
1221
- clientId: OAUTH_CLIENT_ID,
1222
- clientSecret: OAUTH_CLIENT_SECRET,
1223
- });
1224
- const useEncryptedStorage = getUseEncryptedStorageFlag();
1225
- &nbsp;
1226
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
1227
- process.env['GOOGLE_GENAI_USE_GCA'] &amp;&amp;
1228
- <span class="branch-1 cbranch-no" title="branch not covered" > process.env['GOOGLE_CLOUD_ACCESS_TOKEN']</span>
1229
- ) {
1230
- <span class="cstat-no" title="statement not covered" > client.setCredentials({</span>
1231
- access_token: process.env['GOOGLE_CLOUD_ACCESS_TOKEN'],
1232
- });
1233
- <span class="cstat-no" title="statement not covered" > await fetchAndCacheUserInfo(client);</span>
1234
- <span class="cstat-no" title="statement not covered" > return client;</span>
1235
- }
1236
- &nbsp;
1237
- client.on('tokens', <span class="fstat-no" title="function not covered" >async </span>(tokens: Credentials) =&gt; {
1238
- <span class="cstat-no" title="statement not covered" > if (useEncryptedStorage) {</span>
1239
- <span class="cstat-no" title="statement not covered" > await OAuthCredentialStorage.saveCredentials(tokens);</span>
1240
- } else {
1241
- <span class="cstat-no" title="statement not covered" > await cacheCredentials(tokens);</span>
1242
- }
1243
- });
1244
- &nbsp;
1245
- // If there are cached creds on disk, they always take precedence
1246
- <span class="missing-if-branch" title="if path not taken" >I</span>if (await loadCachedCredentials(client)) {
1247
- // Found valid cached credentials.
1248
- // Check if we need to retrieve Google Account ID or Email
1249
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!userAccountManager.getCachedGoogleAccount()) {</span>
1250
- <span class="cstat-no" title="statement not covered" > try {</span>
1251
- <span class="cstat-no" title="statement not covered" > await fetchAndCacheUserInfo(client);</span>
1252
- } catch (error) {
1253
- // Non-fatal, continue with existing auth.
1254
- <span class="cstat-no" title="statement not covered" > console.warn('Failed to fetch user info:', getErrorMessage(error));</span>
1255
- }
1256
- }
1257
- <span class="cstat-no" title="statement not covered" > console.log('Loaded cached credentials.');</span>
1258
- <span class="cstat-no" title="statement not covered" > return client;</span>
1259
- }
1260
- &nbsp;
1261
- // In Google Cloud Shell, we can use Application Default Credentials (ADC)
1262
- // provided via its metadata server to authenticate non-interactively using
1263
- // the identity of the user logged into Cloud Shell.
1264
- <span class="missing-if-branch" title="if path not taken" >I</span>if (authType === AuthType.CLOUD_SHELL) {
1265
- <span class="cstat-no" title="statement not covered" > try {</span>
1266
- <span class="cstat-no" title="statement not covered" > console.log("Attempting to authenticate via Cloud Shell VM's ADC.");</span>
1267
- const computeClient = <span class="cstat-no" title="statement not covered" >new Compute({</span>
1268
- // We can leave this empty, since the metadata server will provide
1269
- // the service account email.
1270
- });
1271
- <span class="cstat-no" title="statement not covered" > await computeClient.getAccessToken();</span>
1272
- <span class="cstat-no" title="statement not covered" > console.log('Authentication successful.');</span>
1273
- &nbsp;
1274
- // Do not cache creds in this case; note that Compute client will handle its own refresh
1275
- <span class="cstat-no" title="statement not covered" > return computeClient;</span>
1276
- } catch (e) {
1277
- <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1278
- `Could not authenticate using Cloud Shell credentials. Please select a different authentication method or ensure you are in a properly configured environment. Error: ${getErrorMessage(
1279
- e,
1280
- )}`,
1281
- );
1282
- }
1283
- }
1284
- &nbsp;
1285
- if (config.isBrowserLaunchSuppressed()) {
1286
- let success = <span class="cstat-no" title="statement not covered" >false;</span>
1287
- const maxRetries = <span class="cstat-no" title="statement not covered" >2;</span>
1288
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> !success &amp;&amp; i &lt; maxRetries; i++) {</span>
1289
- <span class="cstat-no" title="statement not covered" > success = await authWithUserCode(client);</span>
1290
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!success) {</span>
1291
- <span class="cstat-no" title="statement not covered" > console.error(</span>
1292
- '\nFailed to authenticate with user code.',
1293
- i === maxRetries - 1 ? '' : 'Retrying...\n',
1294
- );
1295
- }
1296
- }
1297
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!success) {</span>
1298
- <span class="cstat-no" title="statement not covered" > throw new FatalAuthenticationError(</span>
1299
- 'Failed to authenticate with user code.',
1300
- );
1301
- }
1302
- } else {
1303
- const webLogin = <span class="cstat-no" title="statement not covered" >await authWithWeb(client);</span>
1304
- &nbsp;
1305
- <span class="cstat-no" title="statement not covered" > console.log(</span>
1306
- `\n\nCode Assist login required.\n` +
1307
- `Attempting to open authentication page in your browser.\n` +
1308
- `Otherwise navigate to:\n\n${webLogin.authUrl}\n\n`,
1309
- );
1310
- <span class="cstat-no" title="statement not covered" > try {</span>
1311
- const { default: open } = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >await import('</span>open');</span>
1312
- // Attempt to open the authentication URL in the default browser.
1313
- // We do not use the `wait` option here because the main script's execution
1314
- // is already paused by `loginCompletePromise`, which awaits the server callback.
1315
- const childProcess = <span class="cstat-no" title="statement not covered" >await open(webLogin.authUrl);</span>
1316
- &nbsp;
1317
- // IMPORTANT: Attach an error handler to the returned child process.
1318
- // Without this, if `open` fails to spawn a process (e.g., `xdg-open` is not found
1319
- // in a minimal Docker container), it will emit an unhandled 'error' event,
1320
- // causing the entire Node.js process to crash.
1321
- <span class="cstat-no" title="statement not covered" > childProcess.on('error', <span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; {</span>
1322
- <span class="cstat-no" title="statement not covered" > console.error(</span>
1323
- 'Failed to open browser automatically. Please try running again with NO_BROWSER=true set.',
1324
- );
1325
- <span class="cstat-no" title="statement not covered" > console.error('Browser error details:', getErrorMessage(error));</span>
1326
- });
1327
- } catch (err) {
1328
- <span class="cstat-no" title="statement not covered" > console.error(</span>
1329
- 'An unexpected error occurred while trying to open the browser:',
1330
- getErrorMessage(err),
1331
- '\nThis might be due to browser compatibility issues or system configuration.',
1332
- '\nPlease try running again with NO_BROWSER=true set for manual authentication.',
1333
- );
1334
- <span class="cstat-no" title="statement not covered" > throw new FatalAuthenticationError(</span>
1335
- `Failed to open browser: ${getErrorMessage(err)}`,
1336
- );
1337
- }
1338
- <span class="cstat-no" title="statement not covered" > console.log('Waiting for authentication...');</span>
1339
- &nbsp;
1340
- // Add timeout to prevent infinite waiting when browser tab gets stuck
1341
- const authTimeout = <span class="cstat-no" title="statement not covered" >5 * 60 * 1000;</span> // 5 minutes timeout
1342
- const timeoutPromise = <span class="cstat-no" title="statement not covered" >new Promise&lt;never&gt;(<span class="fstat-no" title="function not covered" >(_</span>, reject) =&gt; {</span>
1343
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1344
- <span class="cstat-no" title="statement not covered" > reject(</span>
1345
- new FatalAuthenticationError(
1346
- 'Authentication timed out after 5 minutes. The browser tab may have gotten stuck in a loading state. ' +
1347
- 'Please try again or use NO_BROWSER=true for manual authentication.',
1348
- ),
1349
- );
1350
- }, authTimeout);
1351
- });
1352
- &nbsp;
1353
- <span class="cstat-no" title="statement not covered" > await Promise.race([webLogin.loginCompletePromise, timeoutPromise]);</span>
1354
- }
1355
- &nbsp;
1356
- <span class="cstat-no" title="statement not covered" > return client;</span>
1357
- }
1358
- &nbsp;
1359
- export async function getOauthClient(
1360
- authType: AuthType,
1361
- config: Config,
1362
- ): Promise&lt;OAuth2Client&gt; {
1363
- if (!oauthClientPromises.has(authType)) {
1364
- oauthClientPromises.set(authType, initOauthClient(authType, config));
1365
- }
1366
- return oauthClientPromises.get(authType)!;
1367
- }
1368
- &nbsp;
1369
- async function <span class="fstat-no" title="function not covered" >authWithUserCode(</span>client: OAuth2Client): Promise&lt;boolean&gt; {
1370
- const redirectUri = <span class="cstat-no" title="statement not covered" >'https://codeassist.google.com/authcode';</span>
1371
- const codeVerifier = <span class="cstat-no" title="statement not covered" >await client.generateCodeVerifierAsync();</span>
1372
- const state = <span class="cstat-no" title="statement not covered" >crypto.randomBytes(32).toString('hex');</span>
1373
- const authUrl: string = <span class="cstat-no" title="statement not covered" >client.generateAuthUrl({</span>
1374
- redirect_uri: redirectUri,
1375
- access_type: 'offline',
1376
- scope: OAUTH_SCOPE,
1377
- code_challenge_method: CodeChallengeMethod.S256,
1378
- code_challenge: codeVerifier.codeChallenge,
1379
- state,
1380
- });
1381
- <span class="cstat-no" title="statement not covered" > console.log('Please visit the following URL to authorize the application:');</span>
1382
- <span class="cstat-no" title="statement not covered" > console.log('');</span>
1383
- <span class="cstat-no" title="statement not covered" > console.log(authUrl);</span>
1384
- <span class="cstat-no" title="statement not covered" > console.log('');</span>
1385
- &nbsp;
1386
- const code = <span class="cstat-no" title="statement not covered" >await new Promise&lt;string&gt;(<span class="fstat-no" title="function not covered" >(r</span>esolve) =&gt; {</span>
1387
- const rl = <span class="cstat-no" title="statement not covered" >readline.createInterface({</span>
1388
- input: process.stdin,
1389
- output: process.stdout,
1390
- });
1391
- <span class="cstat-no" title="statement not covered" > rl.question('Enter the authorization code: ', <span class="fstat-no" title="function not covered" >(c</span>ode) =&gt; {</span>
1392
- <span class="cstat-no" title="statement not covered" > rl.close();</span>
1393
- <span class="cstat-no" title="statement not covered" > resolve(code.trim());</span>
1394
- });
1395
- });
1396
- &nbsp;
1397
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!code) {</span>
1398
- <span class="cstat-no" title="statement not covered" > console.error('Authorization code is required.');</span>
1399
- <span class="cstat-no" title="statement not covered" > return false;</span>
1400
- }
1401
- &nbsp;
1402
- <span class="cstat-no" title="statement not covered" > try {</span>
1403
- const { tokens } = <span class="cstat-no" title="statement not covered" >await client.getToken({</span>
1404
- code,
1405
- codeVerifier: codeVerifier.codeVerifier,
1406
- redirect_uri: redirectUri,
1407
- });
1408
- <span class="cstat-no" title="statement not covered" > client.setCredentials(tokens);</span>
1409
- } catch (error) {
1410
- <span class="cstat-no" title="statement not covered" > console.error(</span>
1411
- 'Failed to authenticate with authorization code:',
1412
- getErrorMessage(error),
1413
- );
1414
- <span class="cstat-no" title="statement not covered" > return false;</span>
1415
- }
1416
- <span class="cstat-no" title="statement not covered" > return true;</span>
1417
- }
1418
- &nbsp;
1419
- async function <span class="fstat-no" title="function not covered" >authWithWeb(</span>client: OAuth2Client): Promise&lt;OauthWebLogin&gt; {
1420
- const port = <span class="cstat-no" title="statement not covered" >await getAvailablePort();</span>
1421
- // The hostname used for the HTTP server binding (e.g., '0.0.0.0' in Docker).
1422
- const host = <span class="cstat-no" title="statement not covered" >process.env['OAUTH_CALLBACK_HOST'] || 'localhost';</span>
1423
- // The `redirectUri` sent to Google's authorization server MUST use a loopback IP literal
1424
- // (i.e., 'localhost' or '127.0.0.1'). This is a strict security policy for credentials of
1425
- // type 'Desktop app' or 'Web application' (when using loopback flow) to mitigate
1426
- // authorization code interception attacks.
1427
- const redirectUri = <span class="cstat-no" title="statement not covered" >`http://localhost:${port}/oauth2callback`;</span>
1428
- const state = <span class="cstat-no" title="statement not covered" >crypto.randomBytes(32).toString('hex');</span>
1429
- const authUrl = <span class="cstat-no" title="statement not covered" >client.generateAuthUrl({</span>
1430
- redirect_uri: redirectUri,
1431
- access_type: 'offline',
1432
- scope: OAUTH_SCOPE,
1433
- state,
1434
- });
1435
- &nbsp;
1436
- const loginCompletePromise = <span class="cstat-no" title="statement not covered" >new Promise&lt;void&gt;(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1437
- const server = <span class="cstat-no" title="statement not covered" >http.createServer(<span class="fstat-no" title="function not covered" >async </span>(req, res) =&gt; {</span>
1438
- <span class="cstat-no" title="statement not covered" > try {</span>
1439
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (req.url!.indexOf('/oauth2callback') === -1) {</span>
1440
- <span class="cstat-no" title="statement not covered" > res.writeHead(HTTP_REDIRECT, { Location: SIGN_IN_FAILURE_URL });</span>
1441
- <span class="cstat-no" title="statement not covered" > res.end();</span>
1442
- <span class="cstat-no" title="statement not covered" > reject(</span>
1443
- new FatalAuthenticationError(
1444
- 'OAuth callback not received. Unexpected request: ' + req.url,
1445
- ),
1446
- );
1447
- }
1448
- // acquire the code from the querystring, and close the web server.
1449
- const qs = <span class="cstat-no" title="statement not covered" >new url.URL(req.url!, 'http://localhost:3000').searchParams;</span>
1450
- <span class="cstat-no" title="statement not covered" > if (qs.get('error')) {</span>
1451
- <span class="cstat-no" title="statement not covered" > res.writeHead(HTTP_REDIRECT, { Location: SIGN_IN_FAILURE_URL });</span>
1452
- <span class="cstat-no" title="statement not covered" > res.end();</span>
1453
- &nbsp;
1454
- const errorCode = <span class="cstat-no" title="statement not covered" >qs.get('error');</span>
1455
- const errorDescription =
1456
- <span class="cstat-no" title="statement not covered" > qs.get('error_description') || 'No additional details provided';</span>
1457
- <span class="cstat-no" title="statement not covered" > reject(</span>
1458
- new FatalAuthenticationError(
1459
- `Google OAuth error: ${errorCode}. ${errorDescription}`,
1460
- ),
1461
- );
1462
- } else <span class="cstat-no" title="statement not covered" >if (qs.get('state') !== state) {</span>
1463
- <span class="cstat-no" title="statement not covered" > res.end('State mismatch. Possible CSRF attack');</span>
1464
- &nbsp;
1465
- <span class="cstat-no" title="statement not covered" > reject(</span>
1466
- new FatalAuthenticationError(
1467
- 'OAuth state mismatch. Possible CSRF attack or browser session issue.',
1468
- ),
1469
- );
1470
- } else <span class="cstat-no" title="statement not covered" >if (qs.get('code')) {</span>
1471
- <span class="cstat-no" title="statement not covered" > try {</span>
1472
- const { tokens } = <span class="cstat-no" title="statement not covered" >await client.getToken({</span>
1473
- code: qs.get('code')!,
1474
- redirect_uri: redirectUri,
1475
- });
1476
- <span class="cstat-no" title="statement not covered" > client.setCredentials(tokens);</span>
1477
- &nbsp;
1478
- // Retrieve and cache Google Account ID during authentication
1479
- <span class="cstat-no" title="statement not covered" > try {</span>
1480
- <span class="cstat-no" title="statement not covered" > await fetchAndCacheUserInfo(client);</span>
1481
- } catch (error) {
1482
- <span class="cstat-no" title="statement not covered" > console.warn(</span>
1483
- 'Failed to retrieve Google Account ID during authentication:',
1484
- getErrorMessage(error),
1485
- );
1486
- // Don't fail the auth flow if Google Account ID retrieval fails
1487
- }
1488
- &nbsp;
1489
- <span class="cstat-no" title="statement not covered" > res.writeHead(HTTP_REDIRECT, { Location: SIGN_IN_SUCCESS_URL });</span>
1490
- <span class="cstat-no" title="statement not covered" > res.end();</span>
1491
- <span class="cstat-no" title="statement not covered" > resolve();</span>
1492
- } catch (error) {
1493
- <span class="cstat-no" title="statement not covered" > res.writeHead(HTTP_REDIRECT, { Location: SIGN_IN_FAILURE_URL });</span>
1494
- <span class="cstat-no" title="statement not covered" > res.end();</span>
1495
- <span class="cstat-no" title="statement not covered" > reject(</span>
1496
- new FatalAuthenticationError(
1497
- `Failed to exchange authorization code for tokens: ${getErrorMessage(error)}`,
1498
- ),
1499
- );
1500
- }
1501
- } else {
1502
- <span class="cstat-no" title="statement not covered" > reject(</span>
1503
- new FatalAuthenticationError(
1504
- 'No authorization code received from Google OAuth. Please try authenticating again.',
1505
- ),
1506
- );
1507
- }
1508
- } catch (e) {
1509
- // Provide more specific error message for unexpected errors during OAuth flow
1510
- <span class="cstat-no" title="statement not covered" > if (e instanceof FatalAuthenticationError) {</span>
1511
- <span class="cstat-no" title="statement not covered" > reject(e);</span>
1512
- } else {
1513
- <span class="cstat-no" title="statement not covered" > reject(</span>
1514
- new FatalAuthenticationError(
1515
- `Unexpected error during OAuth authentication: ${getErrorMessage(e)}`,
1516
- ),
1517
- );
1518
- }
1519
- } finally {
1520
- <span class="cstat-no" title="statement not covered" > server.close();</span>
1521
- }
1522
- });
1523
- &nbsp;
1524
- <span class="cstat-no" title="statement not covered" > server.listen(port, host, <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1525
- // Server started successfully
1526
- });
1527
- &nbsp;
1528
- <span class="cstat-no" title="statement not covered" > server.on('error', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {</span>
1529
- <span class="cstat-no" title="statement not covered" > reject(</span>
1530
- new FatalAuthenticationError(
1531
- `OAuth callback server error: ${getErrorMessage(err)}`,
1532
- ),
1533
- );
1534
- });
1535
- });
1536
- &nbsp;
1537
- <span class="cstat-no" title="statement not covered" > return {</span>
1538
- authUrl,
1539
- loginCompletePromise,
1540
- };
1541
- }
1542
- &nbsp;
1543
- export function <span class="fstat-no" title="function not covered" >getAvailablePort(</span>): Promise&lt;number&gt; {
1544
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1545
- let port = <span class="cstat-no" title="statement not covered" >0;</span>
1546
- <span class="cstat-no" title="statement not covered" > try {</span>
1547
- const portStr = <span class="cstat-no" title="statement not covered" >process.env['OAUTH_CALLBACK_PORT'];</span>
1548
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (portStr) {</span>
1549
- <span class="cstat-no" title="statement not covered" > port = parseInt(portStr, 10);</span>
1550
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isNaN(port) || port &lt;= 0 || port &gt; 65535) {</span>
1551
- <span class="cstat-no" title="statement not covered" > return reject(</span>
1552
- new Error(`Invalid value for OAUTH_CALLBACK_PORT: "${portStr}"`),
1553
- );
1554
- }
1555
- <span class="cstat-no" title="statement not covered" > return resolve(port);</span>
1556
- }
1557
- const server = <span class="cstat-no" title="statement not covered" >net.createServer();</span>
1558
- <span class="cstat-no" title="statement not covered" > server.listen(0, <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1559
- const address = <span class="cstat-no" title="statement not covered" >server.address()! as net.AddressInfo;</span>
1560
- <span class="cstat-no" title="statement not covered" > port = address.port;</span>
1561
- });
1562
- <span class="cstat-no" title="statement not covered" > server.on('listening', <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1563
- <span class="cstat-no" title="statement not covered" > server.close();</span>
1564
- <span class="cstat-no" title="statement not covered" > server.unref();</span>
1565
- });
1566
- <span class="cstat-no" title="statement not covered" > server.on('error', <span class="fstat-no" title="function not covered" >(e</span>) =&gt; <span class="cstat-no" title="statement not covered" >reject(e))</span>;</span>
1567
- <span class="cstat-no" title="statement not covered" > server.on('close', <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >resolve(port))</span>;</span>
1568
- } catch (e) {
1569
- <span class="cstat-no" title="statement not covered" > reject(e);</span>
1570
- }
1571
- });
1572
- }
1573
- &nbsp;
1574
- async function loadCachedCredentials(client: OAuth2Client): Promise&lt;boolean&gt; {
1575
- const useEncryptedStorage = getUseEncryptedStorageFlag();
1576
- <span class="missing-if-branch" title="if path not taken" >I</span>if (useEncryptedStorage) {
1577
- const credentials = <span class="cstat-no" title="statement not covered" >await OAuthCredentialStorage.loadCredentials();</span>
1578
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (credentials) {</span>
1579
- <span class="cstat-no" title="statement not covered" > client.setCredentials(credentials);</span>
1580
- <span class="cstat-no" title="statement not covered" > return true;</span>
1581
- }
1582
- <span class="cstat-no" title="statement not covered" > return false;</span>
1583
- }
1584
- &nbsp;
1585
- const pathsToTry = [
1586
- Storage.getOAuthCredsPath(),
1587
- process.env['GOOGLE_APPLICATION_CREDENTIALS'],
1588
- ].filter((p): p is string =&gt; !!p);
1589
- &nbsp;
1590
- for (const keyFile of pathsToTry) {
1591
- try {
1592
- const creds = await fs.readFile(keyFile, 'utf-8');
1593
- client.setCredentials(JSON.parse(creds));
1594
- &nbsp;
1595
- // This will verify locally that the credentials look good.
1596
- const { token } = await client.getAccessToken();
1597
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!token) {</span>
1598
- <span class="cstat-no" title="statement not covered" > continue;</span>
1599
- }
1600
- &nbsp;
1601
- // This will check with the server to see if it hasn't been revoked.
1602
- <span class="cstat-no" title="statement not covered" > await client.getTokenInfo(token);</span>
1603
- &nbsp;
1604
- <span class="cstat-no" title="statement not covered" > return true;</span>
1605
- } catch (error) {
1606
- // Log specific error for debugging, but continue trying other paths
1607
- console.debug(
1608
- `Failed to load credentials from ${keyFile}:`,
1609
- getErrorMessage(error),
1610
- );
1611
- }
1612
- }
1613
- &nbsp;
1614
- return false;
1615
- }
1616
- &nbsp;
1617
- async function <span class="fstat-no" title="function not covered" >cacheCredentials(</span>credentials: Credentials) {
1618
- const filePath = <span class="cstat-no" title="statement not covered" >Storage.getOAuthCredsPath();</span>
1619
- <span class="cstat-no" title="statement not covered" > await fs.mkdir(path.dirname(filePath), { recursive: true });</span>
1620
- &nbsp;
1621
- const credString = <span class="cstat-no" title="statement not covered" >JSON.stringify(credentials, null, 2);</span>
1622
- <span class="cstat-no" title="statement not covered" > await fs.writeFile(filePath, credString, { mode: 0o600 });</span>
1623
- <span class="cstat-no" title="statement not covered" > try {</span>
1624
- <span class="cstat-no" title="statement not covered" > await fs.chmod(filePath, 0o600);</span>
1625
- } catch {
1626
- /* empty */
1627
- }
1628
- }
1629
- &nbsp;
1630
- export function <span class="fstat-no" title="function not covered" >clearOauthClientCache(</span>) {
1631
- <span class="cstat-no" title="statement not covered" > oauthClientPromises.clear();</span>
1632
- }
1633
- &nbsp;
1634
- export async function <span class="fstat-no" title="function not covered" >clearCachedCredentialFile(</span>) {
1635
- <span class="cstat-no" title="statement not covered" > try {</span>
1636
- const useEncryptedStorage = <span class="cstat-no" title="statement not covered" >getUseEncryptedStorageFlag();</span>
1637
- <span class="cstat-no" title="statement not covered" > if (useEncryptedStorage) {</span>
1638
- <span class="cstat-no" title="statement not covered" > await OAuthCredentialStorage.clearCredentials();</span>
1639
- } else {
1640
- <span class="cstat-no" title="statement not covered" > await fs.rm(Storage.getOAuthCredsPath(), { force: true });</span>
1641
- }
1642
- // Clear the Google Account ID cache when credentials are cleared
1643
- <span class="cstat-no" title="statement not covered" > await userAccountManager.clearCachedGoogleAccount();</span>
1644
- // Clear the in-memory OAuth client cache to force re-authentication
1645
- <span class="cstat-no" title="statement not covered" > clearOauthClientCache();</span>
1646
- } catch (e) {
1647
- <span class="cstat-no" title="statement not covered" > console.error('Failed to clear cached credentials:', e);</span>
1648
- }
1649
- }
1650
- &nbsp;
1651
- async function <span class="fstat-no" title="function not covered" >fetchAndCacheUserInfo(</span>client: OAuth2Client): Promise&lt;void&gt; {
1652
- <span class="cstat-no" title="statement not covered" > try {</span>
1653
- const { token } = <span class="cstat-no" title="statement not covered" >await client.getAccessToken();</span>
1654
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!token) {</span>
1655
- <span class="cstat-no" title="statement not covered" > return;</span>
1656
- }
1657
- &nbsp;
1658
- const response = <span class="cstat-no" title="statement not covered" >await fetch(</span>
1659
- 'https://www.googleapis.com/oauth2/v2/userinfo',
1660
- {
1661
- headers: {
1662
- Authorization: `Bearer ${token}`,
1663
- },
1664
- },
1665
- );
1666
- &nbsp;
1667
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!response.ok) {</span>
1668
- <span class="cstat-no" title="statement not covered" > console.error(</span>
1669
- 'Failed to fetch user info:',
1670
- response.status,
1671
- response.statusText,
1672
- );
1673
- <span class="cstat-no" title="statement not covered" > return;</span>
1674
- }
1675
- &nbsp;
1676
- const userInfo = <span class="cstat-no" title="statement not covered" >await response.json();</span>
1677
- <span class="cstat-no" title="statement not covered" > await userAccountManager.cacheGoogleAccount(userInfo.email);</span>
1678
- } catch (error) {
1679
- <span class="cstat-no" title="statement not covered" > console.error('Error retrieving user info:', error);</span>
1680
- }
1681
- }
1682
- &nbsp;
1683
- // Helper to ensure test isolation
1684
- export function <span class="fstat-no" title="function not covered" >resetOauthClientForTesting(</span>) {
1685
- <span class="cstat-no" title="statement not covered" > oauthClientPromises.clear();</span>
1686
- }</pre></td></tr></table></pre>
1687
-
1688
- <div class='push'></div><!-- for sticky footer -->
1689
- </div><!-- /wrapper -->
1690
- <div class='footer quiet pad2 space-top1 center small'>
1691
- Code coverage generated by
1692
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1693
- at 2026-05-09T01:03:45.353Z
1694
- </div>
1695
- <script src="../../../../prettify.js"></script>
1696
- <script>
1697
- window.onload = function () {
1698
- prettyPrint();
1699
- };
1700
- </script>
1701
- <script src="../../../../sorter.js"></script>
1702
- <script src="../../../../block-navigation.js"></script>
1703
- </body>
1704
- </html>
1705
-