repoburg 1.0.38 → 1.0.40
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.
- package/backend/.env +1 -7
- package/backend/coverage/clover.xml +3380 -0
- package/backend/coverage/coverage-final.json +117 -0
- package/backend/coverage/lcov-report/base.css +224 -0
- package/backend/coverage/lcov-report/block-navigation.js +87 -0
- package/backend/coverage/lcov-report/favicon.png +0 -0
- package/backend/coverage/lcov-report/index.html +686 -0
- package/backend/coverage/lcov-report/prettify.css +1 -0
- package/backend/coverage/lcov-report/prettify.js +2 -0
- package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/backend/coverage/lcov-report/sorter.js +196 -0
- package/backend/coverage/lcov-report/src/action-execution/action-execution.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/action-execution/action-execution.service.ts.html +370 -0
- package/backend/coverage/lcov-report/src/action-execution/index.html +131 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +940 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-creation.service.ts.html +1195 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +664 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +154 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +859 -0
- package/backend/coverage/lcov-report/src/ai-actions/index.html +176 -0
- package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
- package/backend/coverage/lcov-report/src/app.module.ts.html +370 -0
- package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +265 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +394 -0
- package/backend/coverage/lcov-report/src/application-state/dto/index.html +146 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1348 -0
- package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +289 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +136 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +400 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +397 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +136 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +832 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +358 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
- package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +241 -0
- package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +115 -0
- package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +145 -0
- package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +130 -0
- package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +223 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +136 -0
- package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +157 -0
- package/backend/coverage/lcov-report/src/core-entities/index.html +281 -0
- package/backend/coverage/lcov-report/src/core-entities/index.ts.html +118 -0
- package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +130 -0
- package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +280 -0
- package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +280 -0
- package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +148 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +277 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +292 -0
- package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/events/index.html +131 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
- package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
- package/backend/coverage/lcov-report/src/index.html +191 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/ai-action.dto.ts.html +400 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/parsing.error.ts.html +118 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html +808 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/parsing.constants.ts.html +139 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +172 -0
- package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +154 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +163 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +766 -0
- package/backend/coverage/lcov-report/src/main.ts.html +382 -0
- package/backend/coverage/lcov-report/src/orchestration/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/orchestration/dto/orchestration.dto.ts.html +184 -0
- package/backend/coverage/lcov-report/src/orchestration/index.html +191 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration-fs.service.ts.html +478 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration-parser.service.ts.html +310 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.controller.ts.html +436 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.module.ts.html +172 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.service.ts.html +1201 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.types.ts.html +169 -0
- package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +154 -0
- package/backend/coverage/lcov-report/src/projects/index.html +146 -0
- package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +232 -0
- package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +223 -0
- package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +355 -0
- package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +136 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +247 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +191 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pm-context.ts.html +250 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pr-description.ts.html +187 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/sample_focused-tree.ts.html +124 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +236 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/codebase-explorer.ts.html +331 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_multi-file-action-generator-with-requester.ts.html +670 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/multi-file-action-generator.ts.html +550 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/packup.ts.html +184 -0
- package/backend/coverage/lcov-report/src/seeding/index.html +176 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +145 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +151 -0
- package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +289 -0
- package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +667 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +235 -0
- package/backend/coverage/lcov-report/src/session-inputs/index.html +161 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +751 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +337 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +202 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1615 -0
- package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +172 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +574 -0
- package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +340 -0
- package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +457 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +214 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +844 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +208 -0
- package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +298 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +127 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +352 -0
- package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
- package/backend/coverage/lcov-report/src/workspace/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
- package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +247 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +700 -0
- package/backend/coverage/lcov.info +5492 -0
- package/backend/dist/ai-actions/ai-action-creation.service.d.ts +2 -0
- package/backend/dist/ai-actions/ai-action-creation.service.js +65 -0
- package/backend/dist/ai-actions/ai-action-creation.service.js.map +1 -1
- package/backend/dist/app.module.js +2 -0
- package/backend/dist/app.module.js.map +1 -1
- package/backend/dist/application-state/application-state.service.d.ts +4 -0
- package/backend/dist/application-state/application-state.service.js +25 -0
- package/backend/dist/application-state/application-state.service.js.map +1 -1
- package/backend/dist/context-templates/context-templates.service.d.ts +1 -0
- package/backend/dist/context-templates/context-templates.service.js +3 -0
- package/backend/dist/context-templates/context-templates.service.js.map +1 -1
- package/backend/dist/llm-responses/llm-responses.module.js +4 -1
- package/backend/dist/llm-responses/llm-responses.module.js.map +1 -1
- package/backend/dist/llm-responses/llm-responses.service.d.ts +3 -1
- package/backend/dist/llm-responses/llm-responses.service.js +29 -2
- package/backend/dist/llm-responses/llm-responses.service.js.map +1 -1
- package/backend/dist/orchestration/dto/orchestration.dto.d.ts +15 -0
- package/backend/dist/orchestration/dto/orchestration.dto.js +58 -0
- package/backend/dist/orchestration/dto/orchestration.dto.js.map +1 -0
- package/backend/dist/orchestration/orchestration-fs.service.d.ts +18 -0
- package/backend/dist/orchestration/orchestration-fs.service.js +124 -0
- package/backend/dist/orchestration/orchestration-fs.service.js.map +1 -0
- package/backend/dist/orchestration/orchestration-parser.service.d.ts +16 -0
- package/backend/dist/orchestration/orchestration-parser.service.js +78 -0
- package/backend/dist/orchestration/orchestration-parser.service.js.map +1 -0
- package/backend/dist/orchestration/orchestration.controller.d.ts +28 -0
- package/backend/dist/orchestration/orchestration.controller.js +158 -0
- package/backend/dist/orchestration/orchestration.controller.js.map +1 -0
- package/backend/dist/orchestration/orchestration.module.d.ts +2 -0
- package/backend/dist/orchestration/orchestration.module.js +43 -0
- package/backend/dist/orchestration/orchestration.module.js.map +1 -0
- package/backend/dist/orchestration/orchestration.service.d.ts +38 -0
- package/backend/dist/orchestration/orchestration.service.js +301 -0
- package/backend/dist/orchestration/orchestration.service.js.map +1 -0
- package/backend/dist/orchestration/orchestration.types.d.ts +27 -0
- package/backend/dist/orchestration/orchestration.types.js +20 -0
- package/backend/dist/orchestration/orchestration.types.js.map +1 -0
- package/backend/dist/seeding/data/system-prompts/packup.d.ts +2 -0
- package/backend/dist/seeding/data/system-prompts/packup.js +37 -0
- package/backend/dist/seeding/data/system-prompts/packup.js.map +1 -0
- package/backend/dist/session-inputs/session-inputs.module.js +2 -0
- package/backend/dist/session-inputs/session-inputs.module.js.map +1 -1
- package/backend/dist/session-inputs/session-inputs.service.d.ts +3 -1
- package/backend/dist/session-inputs/session-inputs.service.js +13 -2
- package/backend/dist/session-inputs/session-inputs.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/backend/orchestration-test-2.txt +1 -0
- package/backend/orchestration-test.txt +1 -0
- package/backend/package.json +1 -1
- package/orchestration-test.txt +3 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1615 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/session-inputs/session-inputs.service.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/session-inputs</a> session-inputs.service.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>0/151</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/56</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/13</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>0/149</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></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-no"> </span>
|
|
585
|
+
<span class="cline-any cline-no"> </span>
|
|
586
|
+
<span class="cline-any cline-no"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-neutral"> </span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-no"> </span>
|
|
598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-no"> </span>
|
|
602
|
+
<span class="cline-any cline-no"> </span>
|
|
603
|
+
<span class="cline-any cline-neutral"> </span>
|
|
604
|
+
<span class="cline-any cline-neutral"> </span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-no"> </span>
|
|
607
|
+
<span class="cline-any cline-no"> </span>
|
|
608
|
+
<span class="cline-any cline-no"> </span>
|
|
609
|
+
<span class="cline-any cline-no"> </span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-no"> </span>
|
|
613
|
+
<span class="cline-any cline-no"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-no"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-no"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-no"> </span>
|
|
622
|
+
<span class="cline-any cline-no"> </span>
|
|
623
|
+
<span class="cline-any cline-no"> </span>
|
|
624
|
+
<span class="cline-any cline-no"> </span>
|
|
625
|
+
<span class="cline-any cline-no"> </span>
|
|
626
|
+
<span class="cline-any cline-no"> </span>
|
|
627
|
+
<span class="cline-any cline-no"> </span>
|
|
628
|
+
<span class="cline-any cline-no"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-neutral"> </span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
635
|
+
<span class="cline-any cline-no"> </span>
|
|
636
|
+
<span class="cline-any cline-no"> </span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-no"> </span>
|
|
639
|
+
<span class="cline-any cline-no"> </span>
|
|
640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-neutral"> </span>
|
|
643
|
+
<span class="cline-any cline-no"> </span>
|
|
644
|
+
<span class="cline-any cline-no"> </span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-no"> </span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-no"> </span>
|
|
654
|
+
<span class="cline-any cline-neutral"> </span>
|
|
655
|
+
<span class="cline-any cline-no"> </span>
|
|
656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-no"> </span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-neutral"> </span>
|
|
662
|
+
<span class="cline-any cline-no"> </span>
|
|
663
|
+
<span class="cline-any cline-no"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-no"> </span>
|
|
667
|
+
<span class="cline-any cline-no"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-no"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-no"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-no"> </span>
|
|
684
|
+
<span class="cline-any cline-no"> </span>
|
|
685
|
+
<span class="cline-any cline-neutral"> </span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-no"> </span>
|
|
688
|
+
<span class="cline-any cline-no"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-neutral"> </span>
|
|
691
|
+
<span class="cline-any cline-no"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-no"> </span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-neutral"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-neutral"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-neutral"> </span>
|
|
708
|
+
<span class="cline-any cline-no"> </span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-neutral"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-neutral"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
720
|
+
<span class="cline-any cline-no"> </span>
|
|
721
|
+
<span class="cline-any cline-no"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-no"> </span>
|
|
725
|
+
<span class="cline-any cline-no"> </span>
|
|
726
|
+
<span class="cline-any cline-no"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-no"> </span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-no"> </span>
|
|
733
|
+
<span class="cline-any cline-no"> </span>
|
|
734
|
+
<span class="cline-any cline-no"> </span>
|
|
735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
737
|
+
<span class="cline-any cline-no"> </span>
|
|
738
|
+
<span class="cline-any cline-no"> </span>
|
|
739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-neutral"> </span>
|
|
742
|
+
<span class="cline-any cline-neutral"> </span>
|
|
743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
745
|
+
<span class="cline-any cline-no"> </span>
|
|
746
|
+
<span class="cline-any cline-neutral"> </span>
|
|
747
|
+
<span class="cline-any cline-neutral"> </span>
|
|
748
|
+
<span class="cline-any cline-no"> </span>
|
|
749
|
+
<span class="cline-any cline-neutral"> </span>
|
|
750
|
+
<span class="cline-any cline-neutral"> </span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-neutral"> </span>
|
|
753
|
+
<span class="cline-any cline-neutral"> </span>
|
|
754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-no"> </span>
|
|
756
|
+
<span class="cline-any cline-neutral"> </span>
|
|
757
|
+
<span class="cline-any cline-neutral"> </span>
|
|
758
|
+
<span class="cline-any cline-neutral"> </span>
|
|
759
|
+
<span class="cline-any cline-neutral"> </span>
|
|
760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-neutral"> </span>
|
|
762
|
+
<span class="cline-any cline-neutral"> </span>
|
|
763
|
+
<span class="cline-any cline-neutral"> </span>
|
|
764
|
+
<span class="cline-any cline-no"> </span>
|
|
765
|
+
<span class="cline-any cline-neutral"> </span>
|
|
766
|
+
<span class="cline-any cline-neutral"> </span>
|
|
767
|
+
<span class="cline-any cline-no"> </span>
|
|
768
|
+
<span class="cline-any cline-neutral"> </span>
|
|
769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
770
|
+
<span class="cline-any cline-no"> </span>
|
|
771
|
+
<span class="cline-any cline-no"> </span>
|
|
772
|
+
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
774
|
+
<span class="cline-any cline-neutral"> </span>
|
|
775
|
+
<span class="cline-any cline-no"> </span>
|
|
776
|
+
<span class="cline-any cline-no"> </span>
|
|
777
|
+
<span class="cline-any cline-neutral"> </span>
|
|
778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
779
|
+
<span class="cline-any cline-no"> </span>
|
|
780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
781
|
+
<span class="cline-any cline-no"> </span>
|
|
782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
783
|
+
<span class="cline-any cline-neutral"> </span>
|
|
784
|
+
<span class="cline-any cline-neutral"> </span>
|
|
785
|
+
<span class="cline-any cline-no"> </span>
|
|
786
|
+
<span class="cline-any cline-neutral"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-neutral"> </span>
|
|
789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
790
|
+
<span class="cline-any cline-no"> </span>
|
|
791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
792
|
+
<span class="cline-any cline-neutral"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </span>
|
|
796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-neutral"> </span>
|
|
798
|
+
<span class="cline-any cline-neutral"> </span>
|
|
799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-no"> </span>
|
|
801
|
+
<span class="cline-any cline-no"> </span>
|
|
802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
803
|
+
<span class="cline-any cline-neutral"> </span>
|
|
804
|
+
<span class="cline-any cline-neutral"> </span>
|
|
805
|
+
<span class="cline-any cline-neutral"> </span>
|
|
806
|
+
<span class="cline-any cline-no"> </span>
|
|
807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
808
|
+
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-neutral"> </span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
813
|
+
<span class="cline-any cline-no"> </span>
|
|
814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
816
|
+
<span class="cline-any cline-no"> </span>
|
|
817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
818
|
+
<span class="cline-any cline-neutral"> </span>
|
|
819
|
+
<span class="cline-any cline-neutral"> </span>
|
|
820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-neutral"> </span>
|
|
824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-no"> </span>
|
|
829
|
+
<span class="cline-any cline-no"> </span>
|
|
830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
831
|
+
<span class="cline-any cline-neutral"> </span>
|
|
832
|
+
<span class="cline-any cline-no"> </span>
|
|
833
|
+
<span class="cline-any cline-no"> </span>
|
|
834
|
+
<span class="cline-any cline-no"> </span>
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-no"> </span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span>
|
|
839
|
+
<span class="cline-any cline-neutral"> </span>
|
|
840
|
+
<span class="cline-any cline-no"> </span>
|
|
841
|
+
<span class="cline-any cline-no"> </span>
|
|
842
|
+
<span class="cline-any cline-no"> </span>
|
|
843
|
+
<span class="cline-any cline-neutral"> </span>
|
|
844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
845
|
+
<span class="cline-any cline-no"> </span>
|
|
846
|
+
<span class="cline-any cline-no"> </span>
|
|
847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
848
|
+
<span class="cline-any cline-neutral"> </span>
|
|
849
|
+
<span class="cline-any cline-neutral"> </span>
|
|
850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
851
|
+
<span class="cline-any cline-neutral"> </span>
|
|
852
|
+
<span class="cline-any cline-neutral"> </span>
|
|
853
|
+
<span class="cline-any cline-no"> </span>
|
|
854
|
+
<span class="cline-any cline-neutral"> </span>
|
|
855
|
+
<span class="cline-any cline-neutral"> </span>
|
|
856
|
+
<span class="cline-any cline-no"> </span>
|
|
857
|
+
<span class="cline-any cline-neutral"> </span>
|
|
858
|
+
<span class="cline-any cline-neutral"> </span>
|
|
859
|
+
<span class="cline-any cline-neutral"> </span>
|
|
860
|
+
<span class="cline-any cline-neutral"> </span>
|
|
861
|
+
<span class="cline-any cline-neutral"> </span>
|
|
862
|
+
<span class="cline-any cline-neutral"> </span>
|
|
863
|
+
<span class="cline-any cline-no"> </span>
|
|
864
|
+
<span class="cline-any cline-neutral"> </span>
|
|
865
|
+
<span class="cline-any cline-neutral"> </span>
|
|
866
|
+
<span class="cline-any cline-neutral"> </span>
|
|
867
|
+
<span class="cline-any cline-neutral"> </span>
|
|
868
|
+
<span class="cline-any cline-neutral"> </span>
|
|
869
|
+
<span class="cline-any cline-neutral"> </span>
|
|
870
|
+
<span class="cline-any cline-neutral"> </span>
|
|
871
|
+
<span class="cline-any cline-neutral"> </span>
|
|
872
|
+
<span class="cline-any cline-neutral"> </span>
|
|
873
|
+
<span class="cline-any cline-neutral"> </span>
|
|
874
|
+
<span class="cline-any cline-neutral"> </span>
|
|
875
|
+
<span class="cline-any cline-no"> </span>
|
|
876
|
+
<span class="cline-any cline-no"> </span>
|
|
877
|
+
<span class="cline-any cline-neutral"> </span>
|
|
878
|
+
<span class="cline-any cline-neutral"> </span>
|
|
879
|
+
<span class="cline-any cline-neutral"> </span>
|
|
880
|
+
<span class="cline-any cline-no"> </span>
|
|
881
|
+
<span class="cline-any cline-neutral"> </span>
|
|
882
|
+
<span class="cline-any cline-neutral"> </span>
|
|
883
|
+
<span class="cline-any cline-no"> </span>
|
|
884
|
+
<span class="cline-any cline-neutral"> </span>
|
|
885
|
+
<span class="cline-any cline-no"> </span>
|
|
886
|
+
<span class="cline-any cline-neutral"> </span>
|
|
887
|
+
<span class="cline-any cline-neutral"> </span>
|
|
888
|
+
<span class="cline-any cline-neutral"> </span>
|
|
889
|
+
<span class="cline-any cline-neutral"> </span>
|
|
890
|
+
<span class="cline-any cline-neutral"> </span>
|
|
891
|
+
<span class="cline-any cline-neutral"> </span>
|
|
892
|
+
<span class="cline-any cline-neutral"> </span>
|
|
893
|
+
<span class="cline-any cline-neutral"> </span>
|
|
894
|
+
<span class="cline-any cline-neutral"> </span>
|
|
895
|
+
<span class="cline-any cline-neutral"> </span>
|
|
896
|
+
<span class="cline-any cline-no"> </span>
|
|
897
|
+
<span class="cline-any cline-neutral"> </span>
|
|
898
|
+
<span class="cline-any cline-neutral"> </span>
|
|
899
|
+
<span class="cline-any cline-neutral"> </span>
|
|
900
|
+
<span class="cline-any cline-no"> </span>
|
|
901
|
+
<span class="cline-any cline-neutral"> </span>
|
|
902
|
+
<span class="cline-any cline-neutral"> </span>
|
|
903
|
+
<span class="cline-any cline-neutral"> </span>
|
|
904
|
+
<span class="cline-any cline-no"> </span>
|
|
905
|
+
<span class="cline-any cline-no"> </span>
|
|
906
|
+
<span class="cline-any cline-neutral"> </span>
|
|
907
|
+
<span class="cline-any cline-neutral"> </span>
|
|
908
|
+
<span class="cline-any cline-neutral"> </span>
|
|
909
|
+
<span class="cline-any cline-no"> </span>
|
|
910
|
+
<span class="cline-any cline-neutral"> </span>
|
|
911
|
+
<span class="cline-any cline-no"> </span>
|
|
912
|
+
<span class="cline-any cline-neutral"> </span>
|
|
913
|
+
<span class="cline-any cline-no"> </span>
|
|
914
|
+
<span class="cline-any cline-neutral"> </span>
|
|
915
|
+
<span class="cline-any cline-neutral"> </span>
|
|
916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
917
|
+
<span class="cline-any cline-no"> </span>
|
|
918
|
+
<span class="cline-any cline-neutral"> </span>
|
|
919
|
+
<span class="cline-any cline-no"> </span>
|
|
920
|
+
<span class="cline-any cline-no"> </span>
|
|
921
|
+
<span class="cline-any cline-neutral"> </span>
|
|
922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
923
|
+
<span class="cline-any cline-neutral"> </span>
|
|
924
|
+
<span class="cline-any cline-no"> </span>
|
|
925
|
+
<span class="cline-any cline-no"> </span>
|
|
926
|
+
<span class="cline-any cline-neutral"> </span>
|
|
927
|
+
<span class="cline-any cline-neutral"> </span>
|
|
928
|
+
<span class="cline-any cline-neutral"> </span>
|
|
929
|
+
<span class="cline-any cline-no"> </span>
|
|
930
|
+
<span class="cline-any cline-no"> </span>
|
|
931
|
+
<span class="cline-any cline-neutral"> </span>
|
|
932
|
+
<span class="cline-any cline-neutral"> </span>
|
|
933
|
+
<span class="cline-any cline-no"> </span>
|
|
934
|
+
<span class="cline-any cline-no"> </span>
|
|
935
|
+
<span class="cline-any cline-neutral"> </span>
|
|
936
|
+
<span class="cline-any cline-neutral"> </span>
|
|
937
|
+
<span class="cline-any cline-neutral"> </span>
|
|
938
|
+
<span class="cline-any cline-no"> </span>
|
|
939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
940
|
+
<span class="cline-any cline-neutral"> </span>
|
|
941
|
+
<span class="cline-any cline-neutral"> </span>
|
|
942
|
+
<span class="cline-any cline-neutral"> </span>
|
|
943
|
+
<span class="cline-any cline-no"> </span>
|
|
944
|
+
<span class="cline-any cline-neutral"> </span>
|
|
945
|
+
<span class="cline-any cline-neutral"> </span>
|
|
946
|
+
<span class="cline-any cline-neutral"> </span>
|
|
947
|
+
<span class="cline-any cline-neutral"> </span>
|
|
948
|
+
<span class="cline-any cline-neutral"> </span>
|
|
949
|
+
<span class="cline-any cline-neutral"> </span>
|
|
950
|
+
<span class="cline-any cline-neutral"> </span>
|
|
951
|
+
<span class="cline-any cline-neutral"> </span>
|
|
952
|
+
<span class="cline-any cline-neutral"> </span>
|
|
953
|
+
<span class="cline-any cline-no"> </span>
|
|
954
|
+
<span class="cline-any cline-no"> </span>
|
|
955
|
+
<span class="cline-any cline-neutral"> </span>
|
|
956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
957
|
+
<span class="cline-any cline-neutral"> </span>
|
|
958
|
+
<span class="cline-any cline-no"> </span>
|
|
959
|
+
<span class="cline-any cline-neutral"> </span>
|
|
960
|
+
<span class="cline-any cline-neutral"> </span>
|
|
961
|
+
<span class="cline-any cline-no"> </span>
|
|
962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
963
|
+
<span class="cline-any cline-neutral"> </span>
|
|
964
|
+
<span class="cline-any cline-neutral"> </span>
|
|
965
|
+
<span class="cline-any cline-neutral"> </span>
|
|
966
|
+
<span class="cline-any cline-neutral"> </span>
|
|
967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-neutral"> </span>
|
|
970
|
+
<span class="cline-any cline-neutral"> </span>
|
|
971
|
+
<span class="cline-any cline-neutral"> </span>
|
|
972
|
+
<span class="cline-any cline-no"> </span>
|
|
973
|
+
<span class="cline-any cline-neutral"> </span>
|
|
974
|
+
<span class="cline-any cline-neutral"> </span>
|
|
975
|
+
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-no"> </span>
|
|
977
|
+
<span class="cline-any cline-no"> </span>
|
|
978
|
+
<span class="cline-any cline-neutral"> </span>
|
|
979
|
+
<span class="cline-any cline-no"> </span>
|
|
980
|
+
<span class="cline-any cline-neutral"> </span>
|
|
981
|
+
<span class="cline-any cline-neutral"> </span>
|
|
982
|
+
<span class="cline-any cline-no"> </span>
|
|
983
|
+
<span class="cline-any cline-neutral"> </span>
|
|
984
|
+
<span class="cline-any cline-neutral"> </span>
|
|
985
|
+
<span class="cline-any cline-neutral"> </span>
|
|
986
|
+
<span class="cline-any cline-neutral"> </span>
|
|
987
|
+
<span class="cline-any cline-neutral"> </span>
|
|
988
|
+
<span class="cline-any cline-neutral"> </span>
|
|
989
|
+
<span class="cline-any cline-neutral"> </span>
|
|
990
|
+
<span class="cline-any cline-neutral"> </span>
|
|
991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
992
|
+
<span class="cline-any cline-no"> </span>
|
|
993
|
+
<span class="cline-any cline-neutral"> </span>
|
|
994
|
+
<span class="cline-any cline-no"> </span>
|
|
995
|
+
<span class="cline-any cline-neutral"> </span>
|
|
996
|
+
<span class="cline-any cline-neutral"> </span>
|
|
997
|
+
<span class="cline-any cline-neutral"> </span>
|
|
998
|
+
<span class="cline-any cline-neutral"> </span>
|
|
999
|
+
<span class="cline-any cline-no"> </span>
|
|
1000
|
+
<span class="cline-any cline-no"> </span>
|
|
1001
|
+
<span class="cline-any cline-no"> </span>
|
|
1002
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1003
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1005
|
+
<span class="cline-any cline-no"> </span>
|
|
1006
|
+
<span class="cline-any cline-no"> </span>
|
|
1007
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1008
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1009
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1010
|
+
<span class="cline-any cline-no"> </span>
|
|
1011
|
+
<span class="cline-any cline-no"> </span>
|
|
1012
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1013
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
+
<span class="cline-any cline-no"> </span>
|
|
1016
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1017
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1018
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1020
|
+
<span class="cline-any cline-no"> </span>
|
|
1021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1022
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1023
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1024
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1025
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1026
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1027
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1028
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1029
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
+
<span class="cline-any cline-no"> </span>
|
|
1031
|
+
<span class="cline-any cline-no"> </span>
|
|
1032
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1033
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1035
|
+
<span class="cline-any cline-no"> </span>
|
|
1036
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1038
|
+
<span class="cline-any cline-no"> </span>
|
|
1039
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1040
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1042
|
+
<span class="cline-any cline-no"> </span>
|
|
1043
|
+
<span class="cline-any cline-no"> </span>
|
|
1044
|
+
<span class="cline-any cline-no"> </span>
|
|
1045
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
+
<span class="cline-any cline-no"> </span>
|
|
1047
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1049
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1050
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1051
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1052
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1055
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1056
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1057
|
+
<span class="cline-any cline-no"> </span>
|
|
1058
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1059
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1060
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1061
|
+
<span class="cline-any cline-no"> </span>
|
|
1062
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1064
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1066
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1067
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1069
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1070
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1071
|
+
<span class="cline-any cline-no"> </span>
|
|
1072
|
+
<span class="cline-any cline-no"> </span>
|
|
1073
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1075
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1076
|
+
<span class="cline-any cline-no"> </span>
|
|
1077
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1078
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1079
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
+
<span class="cline-any cline-no"> </span>
|
|
1081
|
+
<span class="cline-any cline-no"> </span>
|
|
1082
|
+
<span class="cline-any cline-no"> </span>
|
|
1083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1085
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1086
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import {</span>
|
|
1087
|
+
Injectable,
|
|
1088
|
+
NotFoundException,
|
|
1089
|
+
BadRequestException,
|
|
1090
|
+
Logger,
|
|
1091
|
+
forwardRef,
|
|
1092
|
+
Inject,
|
|
1093
|
+
} from '@nestjs/common';
|
|
1094
|
+
<span class="cstat-no" title="statement not covered" >import { InjectRepository } from '@nestjs/typeorm';</span>
|
|
1095
|
+
<span class="cstat-no" title="statement not covered" >import { Repository } from 'typeorm';</span>
|
|
1096
|
+
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1097
|
+
Session,
|
|
1098
|
+
SessionInput,
|
|
1099
|
+
ContextTemplate,
|
|
1100
|
+
AIAction,
|
|
1101
|
+
} from '../core-entities';
|
|
1102
|
+
import {
|
|
1103
|
+
CreateSessionInputDto,
|
|
1104
|
+
PrepareLlmInputResponseDto,
|
|
1105
|
+
SubmitLlmOutputDto,
|
|
1106
|
+
} from './dto/session-input.dto';
|
|
1107
|
+
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1108
|
+
AIActionsService,
|
|
1109
|
+
AIActionStatus,
|
|
1110
|
+
} from '../ai-actions/ai-actions.service';
|
|
1111
|
+
<span class="cstat-no" title="statement not covered" >import { SystemPromptsService } from '../system-prompts/system-prompts.service';</span>
|
|
1112
|
+
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1113
|
+
TITLE_END_TAG,
|
|
1114
|
+
TITLE_START_TAG,
|
|
1115
|
+
} from '../llm-response-parser/parsing.constants';
|
|
1116
|
+
<span class="cstat-no" title="statement not covered" >import { AIActionCreationService } from '../ai-actions/ai-action-creation.service';</span>
|
|
1117
|
+
<span class="cstat-no" title="statement not covered" >import { SessionInputContextService } from './session-input-context.service';</span>
|
|
1118
|
+
<span class="cstat-no" title="statement not covered" >import { ApplicationStateService } from '../application-state/application-state.service';</span>
|
|
1119
|
+
<span class="cstat-no" title="statement not covered" >import { OrchestrationService } from '../orchestration/orchestration.service';</span>
|
|
1120
|
+
|
|
1121
|
+
@Injectable()
|
|
1122
|
+
export class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >SessionInputsService<span class="cstat-no" title="statement not covered" > </span>{</span></span>
|
|
1123
|
+
private readonly <span class="cstat-no" title="statement not covered" >logger = new Logger(SessionInputsService.name);</span>
|
|
1124
|
+
|
|
1125
|
+
<span class="fstat-no" title="function not covered" > constructor(</span>
|
|
1126
|
+
@InjectRepository(Session)
|
|
1127
|
+
private <span class="cstat-no" title="statement not covered" >sessionsRepository: R</span>epository<Session>,
|
|
1128
|
+
@InjectRepository(SessionInput)
|
|
1129
|
+
private <span class="cstat-no" title="statement not covered" >sessionInputsRepository: R</span>epository<SessionInput>,
|
|
1130
|
+
@InjectRepository(ContextTemplate)
|
|
1131
|
+
private <span class="cstat-no" title="statement not covered" >contextTemplatesRepository: R</span>epository<ContextTemplate>,
|
|
1132
|
+
private readonly <span class="cstat-no" title="statement not covered" >aiActionsService: A</span>IActionsService,
|
|
1133
|
+
private readonly <span class="cstat-no" title="statement not covered" >aiActionCreationService: A</span>IActionCreationService,
|
|
1134
|
+
private readonly <span class="cstat-no" title="statement not covered" >systemPromptsService: S</span>ystemPromptsService,
|
|
1135
|
+
private readonly <span class="cstat-no" title="statement not covered" >sessionInputContextService: S</span>essionInputContextService,
|
|
1136
|
+
private readonly <span class="cstat-no" title="statement not covered" >applicationStateService: A</span>pplicationStateService,
|
|
1137
|
+
@Inject(forwardRef(<span class="fstat-no" title="function not covered" >() =</span>> <span class="cstat-no" title="statement not covered" >OrchestrationService)</span>)
|
|
1138
|
+
private readonly <span class="cstat-no" title="statement not covered" >orchestrationService: O</span>rchestrationService,
|
|
1139
|
+
) {}
|
|
1140
|
+
|
|
1141
|
+
private <span class="fstat-no" title="function not covered" >async </span>extractAndUpdateSessionTitle(
|
|
1142
|
+
sessionId: string,
|
|
1143
|
+
rawResponse: string,
|
|
1144
|
+
): Promise<string> {
|
|
1145
|
+
const startIndex = <span class="cstat-no" title="statement not covered" >rawResponse.indexOf(TITLE_START_TAG);</span>
|
|
1146
|
+
const endIndex = <span class="cstat-no" title="statement not covered" >rawResponse.indexOf(TITLE_END_TAG);</span>
|
|
1147
|
+
|
|
1148
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startIndex !== -1 && endIndex !== -1 && endIndex > startIndex) {</span>
|
|
1149
|
+
const title = <span class="cstat-no" title="statement not covered" >rawResponse</span>
|
|
1150
|
+
.substring(startIndex + TITLE_START_TAG.length, endIndex)
|
|
1151
|
+
.trim();
|
|
1152
|
+
|
|
1153
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (title) {</span>
|
|
1154
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1155
|
+
`Extracted session title: "${title}" for session ID ${sessionId}`,
|
|
1156
|
+
);
|
|
1157
|
+
<span class="cstat-no" title="statement not covered" > await this.sessionsRepository.update(sessionId, {</span>
|
|
1158
|
+
session_title: title,
|
|
1159
|
+
});
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
const cleanedResponse =
|
|
1163
|
+
<span class="cstat-no" title="statement not covered" > rawResponse.substring(0, startIndex) +</span>
|
|
1164
|
+
rawResponse.substring(endIndex + TITLE_END_TAG.length);
|
|
1165
|
+
<span class="cstat-no" title="statement not covered" > return cleanedResponse.trim();</span>
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
<span class="cstat-no" title="statement not covered" > return rawResponse;</span>
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
private <span class="fstat-no" title="function not covered" >generatePreviousActionsSummary(</span>session: Session): string {
|
|
1172
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session.sessionInputs || session.sessionInputs.length === 0) {</span>
|
|
1173
|
+
<span class="cstat-no" title="statement not covered" > return '';</span>
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
const lastInput = <span class="cstat-no" title="statement not covered" >session.sessionInputs[session.sessionInputs.length - 1];</span>
|
|
1177
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
1178
|
+
!lastInput ||
|
|
1179
|
+
!lastInput.aiActions ||
|
|
1180
|
+
lastInput.aiActions.length === 0
|
|
1181
|
+
) {
|
|
1182
|
+
<span class="cstat-no" title="statement not covered" > return '';</span>
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
const finalStatuses: string[] = <span class="cstat-no" title="statement not covered" >[</span>
|
|
1186
|
+
AIActionStatus.REJECTED_BEFORE_APPLY,
|
|
1187
|
+
AIActionStatus.CONFIRMED_KEPT,
|
|
1188
|
+
AIActionStatus.CONFIRMED_REVERTED,
|
|
1189
|
+
AIActionStatus.EXECUTION_FAILED,
|
|
1190
|
+
AIActionStatus.REVERT_FAILED,
|
|
1191
|
+
];
|
|
1192
|
+
|
|
1193
|
+
const finalActions = <span class="cstat-no" title="statement not covered" >lastInput.aiActions.filter(<span class="fstat-no" title="function not covered" >(a</span>ction: AIAction) =></span>
|
|
1194
|
+
<span class="cstat-no" title="statement not covered" > finalStatuses.includes(action.status),</span>
|
|
1195
|
+
);
|
|
1196
|
+
|
|
1197
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (finalActions.length === 0) {</span>
|
|
1198
|
+
<span class="cstat-no" title="statement not covered" > return '';</span>
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
<span class="cstat-no" title="statement not covered" > return (</span>
|
|
1202
|
+
'Summary of previous actions:\n' +
|
|
1203
|
+
finalActions
|
|
1204
|
+
.map(
|
|
1205
|
+
<span class="fstat-no" title="function not covered" > (a</span>ction) =>
|
|
1206
|
+
<span class="cstat-no" title="statement not covered" > `- ${action.action_type}(${</span>
|
|
1207
|
+
action.file_path || action.command_string || 'N/A'
|
|
1208
|
+
}): ${action.status}`,
|
|
1209
|
+
)
|
|
1210
|
+
.join('\n')
|
|
1211
|
+
);
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
<span class="fstat-no" title="function not covered" > async </span>create(
|
|
1215
|
+
sessionId: string,
|
|
1216
|
+
createSessionInputDto: CreateSessionInputDto,
|
|
1217
|
+
): Promise<SessionInput> {
|
|
1218
|
+
const session = <span class="cstat-no" title="statement not covered" >await this.sessionsRepository.findOne({</span>
|
|
1219
|
+
where: { id: sessionId },
|
|
1220
|
+
relations: ['systemPrompt', 'sessionInputs', 'sessionInputs.aiActions'],
|
|
1221
|
+
order: {
|
|
1222
|
+
sessionInputs: {
|
|
1223
|
+
created_at: 'ASC',
|
|
1224
|
+
aiActions: {
|
|
1225
|
+
order_of_execution: 'ASC',
|
|
1226
|
+
},
|
|
1227
|
+
},
|
|
1228
|
+
},
|
|
1229
|
+
});
|
|
1230
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session) {</span>
|
|
1231
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(`Session with ID "${sessionId}" not found`);</span>
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
let activeSystemPrompt = <span class="cstat-no" title="statement not covered" >session.systemPrompt;</span>
|
|
1235
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!activeSystemPrompt) {</span>
|
|
1236
|
+
<span class="cstat-no" title="statement not covered" > activeSystemPrompt = await this.systemPromptsService.findDefault();</span>
|
|
1237
|
+
}
|
|
1238
|
+
const systemPromptContent = <span class="cstat-no" title="statement not covered" >activeSystemPrompt</span>
|
|
1239
|
+
? activeSystemPrompt.prompt_content
|
|
1240
|
+
: '';
|
|
1241
|
+
|
|
1242
|
+
let contextTemplate: ContextTemplate | null = <span class="cstat-no" title="statement not covered" >null;</span>
|
|
1243
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (createSessionInputDto.context_template_id) {</span>
|
|
1244
|
+
<span class="cstat-no" title="statement not covered" > contextTemplate = await this.contextTemplatesRepository.findOneBy({</span>
|
|
1245
|
+
id: createSessionInputDto.context_template_id,
|
|
1246
|
+
});
|
|
1247
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!contextTemplate) {</span>
|
|
1248
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
1249
|
+
`ContextTemplate with ID "${createSessionInputDto.context_template_id}" not found`,
|
|
1250
|
+
);
|
|
1251
|
+
}
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
const previous_actions_summary =
|
|
1255
|
+
<span class="cstat-no" title="statement not covered" > this.generatePreviousActionsSummary(session);</span>
|
|
1256
|
+
|
|
1257
|
+
const generated_context_string =
|
|
1258
|
+
<span class="cstat-no" title="statement not covered" > await this.sessionInputContextService.generateContext(</span>
|
|
1259
|
+
createSessionInputDto,
|
|
1260
|
+
contextTemplate,
|
|
1261
|
+
systemPromptContent,
|
|
1262
|
+
previous_actions_summary,
|
|
1263
|
+
);
|
|
1264
|
+
|
|
1265
|
+
const newSessionInputEntity = <span class="cstat-no" title="statement not covered" >this.sessionInputsRepository.create({</span>
|
|
1266
|
+
...createSessionInputDto,
|
|
1267
|
+
session: session,
|
|
1268
|
+
contextTemplate: contextTemplate,
|
|
1269
|
+
generated_context_string: generated_context_string,
|
|
1270
|
+
raw_llm_response:
|
|
1271
|
+
'This response is generated for a non-manual flow and is not intended to be user-facing.',
|
|
1272
|
+
});
|
|
1273
|
+
|
|
1274
|
+
const savedSessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.save(</span>
|
|
1275
|
+
newSessionInputEntity,
|
|
1276
|
+
);
|
|
1277
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.setActiveSessionId(sessionId);</span>
|
|
1278
|
+
|
|
1279
|
+
// Process AI Actions based on execution strategy
|
|
1280
|
+
<span class="cstat-no" title="statement not covered" > if (createSessionInputDto.execution_strategy === 'review_first') {</span>
|
|
1281
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createActionsFromLlmResponse(</span>
|
|
1282
|
+
savedSessionInput,
|
|
1283
|
+
AIActionStatus.PROPOSED,
|
|
1284
|
+
);
|
|
1285
|
+
} else <span class="cstat-no" title="statement not covered" >if (createSessionInputDto.execution_strategy === 'apply_revert') {</span>
|
|
1286
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndTentativelyApplyActions(</span>
|
|
1287
|
+
savedSessionInput,
|
|
1288
|
+
);
|
|
1289
|
+
} else <span class="cstat-no" title="statement not covered" >if (createSessionInputDto.execution_strategy === 'auto_apply') {</span>
|
|
1290
|
+
// This path is used by the orchestration engine. It will throw on failure.
|
|
1291
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndAutoApplyActions(</span>
|
|
1292
|
+
savedSessionInput,
|
|
1293
|
+
);
|
|
1294
|
+
} else {
|
|
1295
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
1296
|
+
`Unsupported execution_strategy: ${createSessionInputDto.execution_strategy}`,
|
|
1297
|
+
);
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
const populatedSessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
|
|
1301
|
+
where: { id: savedSessionInput.id },
|
|
1302
|
+
relations: ['contextTemplate', 'aiActions', 'aiActions.executionLogs'],
|
|
1303
|
+
order: {
|
|
1304
|
+
aiActions: {
|
|
1305
|
+
order_of_execution: 'ASC',
|
|
1306
|
+
},
|
|
1307
|
+
},
|
|
1308
|
+
});
|
|
1309
|
+
|
|
1310
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!populatedSessionInput) {</span>
|
|
1311
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
1312
|
+
`Failed to retrieve session input with ID "${savedSessionInput.id}" after creating/processing actions.`,
|
|
1313
|
+
);
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
<span class="cstat-no" title="statement not covered" > return populatedSessionInput;</span>
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
<span class="fstat-no" title="function not covered" > async </span>prepareLlmInput(
|
|
1320
|
+
sessionId: string,
|
|
1321
|
+
createDto: CreateSessionInputDto,
|
|
1322
|
+
): Promise<PrepareLlmInputResponseDto> {
|
|
1323
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1324
|
+
`Preparing LLM input for session ${sessionId} with strategy ${createDto.execution_strategy}`,
|
|
1325
|
+
);
|
|
1326
|
+
const session = <span class="cstat-no" title="statement not covered" >await this.sessionsRepository.findOne({</span>
|
|
1327
|
+
where: { id: sessionId },
|
|
1328
|
+
relations: ['systemPrompt', 'sessionInputs', 'sessionInputs.aiActions'],
|
|
1329
|
+
order: {
|
|
1330
|
+
sessionInputs: {
|
|
1331
|
+
created_at: 'ASC',
|
|
1332
|
+
aiActions: {
|
|
1333
|
+
order_of_execution: 'ASC',
|
|
1334
|
+
},
|
|
1335
|
+
},
|
|
1336
|
+
},
|
|
1337
|
+
});
|
|
1338
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session) {</span>
|
|
1339
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(`Session with ID "${sessionId}" not found`);</span>
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
let activeSystemPrompt = <span class="cstat-no" title="statement not covered" >session.systemPrompt;</span>
|
|
1343
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!activeSystemPrompt) {</span>
|
|
1344
|
+
<span class="cstat-no" title="statement not covered" > activeSystemPrompt = await this.systemPromptsService.findDefault();</span>
|
|
1345
|
+
}
|
|
1346
|
+
const systemPromptContent = <span class="cstat-no" title="statement not covered" >activeSystemPrompt</span>
|
|
1347
|
+
? activeSystemPrompt.prompt_content
|
|
1348
|
+
: '';
|
|
1349
|
+
|
|
1350
|
+
let contextTemplate: ContextTemplate | null = <span class="cstat-no" title="statement not covered" >null;</span>
|
|
1351
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (createDto.context_template_id) {</span>
|
|
1352
|
+
<span class="cstat-no" title="statement not covered" > contextTemplate = await this.contextTemplatesRepository.findOneBy({</span>
|
|
1353
|
+
id: createDto.context_template_id,
|
|
1354
|
+
});
|
|
1355
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!contextTemplate) {</span>
|
|
1356
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
1357
|
+
`ContextTemplate with ID "${createDto.context_template_id}" not found`,
|
|
1358
|
+
);
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
const previous_actions_summary =
|
|
1363
|
+
<span class="cstat-no" title="statement not covered" > this.generatePreviousActionsSummary(session);</span>
|
|
1364
|
+
|
|
1365
|
+
const generated_context_string =
|
|
1366
|
+
<span class="cstat-no" title="statement not covered" > await this.sessionInputContextService.generateContext(</span>
|
|
1367
|
+
createDto,
|
|
1368
|
+
contextTemplate,
|
|
1369
|
+
systemPromptContent,
|
|
1370
|
+
previous_actions_summary,
|
|
1371
|
+
);
|
|
1372
|
+
|
|
1373
|
+
const newSessionInput = <span class="cstat-no" title="statement not covered" >this.sessionInputsRepository.create({</span>
|
|
1374
|
+
session: { id: sessionId },
|
|
1375
|
+
user_prompt: createDto.user_prompt,
|
|
1376
|
+
context_template_id: createDto.context_template_id || null,
|
|
1377
|
+
contextTemplate: contextTemplate,
|
|
1378
|
+
ad_hoc_context_definition: createDto.ad_hoc_context_definition || null,
|
|
1379
|
+
execution_strategy: createDto.execution_strategy,
|
|
1380
|
+
generated_context_string: generated_context_string,
|
|
1381
|
+
raw_llm_response: null,
|
|
1382
|
+
});
|
|
1383
|
+
|
|
1384
|
+
const savedSessionInput =
|
|
1385
|
+
<span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(newSessionInput);</span>
|
|
1386
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1387
|
+
`Created SessionInput ${savedSessionInput.id} for manual LLM flow preparation.`,
|
|
1388
|
+
);
|
|
1389
|
+
|
|
1390
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.setActiveSessionId(sessionId);</span>
|
|
1391
|
+
|
|
1392
|
+
// If an orchestration is running, update its state.
|
|
1393
|
+
<span class="cstat-no" title="statement not covered" > this.orchestrationService.onPromptPrepared(savedSessionInput.id);</span>
|
|
1394
|
+
|
|
1395
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1396
|
+
input_id: savedSessionInput.id,
|
|
1397
|
+
llm_input_string: generated_context_string,
|
|
1398
|
+
};
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
<span class="fstat-no" title="function not covered" > async </span>submitLlmOutput(
|
|
1402
|
+
sessionId: string,
|
|
1403
|
+
inputId: string,
|
|
1404
|
+
submitDto: SubmitLlmOutputDto,
|
|
1405
|
+
): Promise<SessionInput> {
|
|
1406
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1407
|
+
`Submitting LLM output for SessionInput ${inputId} in Session ${sessionId}.`,
|
|
1408
|
+
);
|
|
1409
|
+
|
|
1410
|
+
const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
|
|
1411
|
+
where: { id: inputId, session_id: sessionId },
|
|
1412
|
+
});
|
|
1413
|
+
|
|
1414
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
|
|
1415
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
1416
|
+
`SessionInput with ID "${inputId}" not found in Session "${sessionId}".`,
|
|
1417
|
+
);
|
|
1418
|
+
}
|
|
1419
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.setActiveSessionId(sessionId);</span>
|
|
1420
|
+
|
|
1421
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionsService.deleteAllByInputId(inputId);</span>
|
|
1422
|
+
|
|
1423
|
+
const cleanedLlmResponse = <span class="cstat-no" title="statement not covered" >await this.extractAndUpdateSessionTitle(</span>
|
|
1424
|
+
sessionId,
|
|
1425
|
+
submitDto.raw_llm_response,
|
|
1426
|
+
);
|
|
1427
|
+
<span class="cstat-no" title="statement not covered" > sessionInput.raw_llm_response = cleanedLlmResponse;</span>
|
|
1428
|
+
const updatedSessionInput =
|
|
1429
|
+
<span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(sessionInput);</span>
|
|
1430
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1431
|
+
`Updated SessionInput ${updatedSessionInput.id} with raw_llm_response.`,
|
|
1432
|
+
);
|
|
1433
|
+
|
|
1434
|
+
<span class="cstat-no" title="statement not covered" > if (updatedSessionInput.execution_strategy === 'review_first') {</span>
|
|
1435
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createActionsFromLlmResponse(</span>
|
|
1436
|
+
updatedSessionInput,
|
|
1437
|
+
AIActionStatus.PROPOSED,
|
|
1438
|
+
);
|
|
1439
|
+
} else <span class="cstat-no" title="statement not covered" >if (updatedSessionInput.execution_strategy === 'apply_revert') {</span>
|
|
1440
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndTentativelyApplyActions(</span>
|
|
1441
|
+
updatedSessionInput,
|
|
1442
|
+
);
|
|
1443
|
+
} else <span class="cstat-no" title="statement not covered" >if (updatedSessionInput.execution_strategy === 'auto_apply') {</span>
|
|
1444
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndAutoApplyActions(</span>
|
|
1445
|
+
updatedSessionInput,
|
|
1446
|
+
);
|
|
1447
|
+
} else {
|
|
1448
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
1449
|
+
`Unsupported execution_strategy: ${updatedSessionInput.execution_strategy}`,
|
|
1450
|
+
);
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
const populatedSessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
|
|
1454
|
+
where: { id: updatedSessionInput.id },
|
|
1455
|
+
relations: ['contextTemplate', 'aiActions', 'aiActions.executionLogs'],
|
|
1456
|
+
order: {
|
|
1457
|
+
aiActions: {
|
|
1458
|
+
order_of_execution: 'ASC',
|
|
1459
|
+
},
|
|
1460
|
+
},
|
|
1461
|
+
});
|
|
1462
|
+
|
|
1463
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!populatedSessionInput) {</span>
|
|
1464
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
1465
|
+
`Failed to retrieve session input with ID "${updatedSessionInput.id}" after processing LLM output.`,
|
|
1466
|
+
);
|
|
1467
|
+
}
|
|
1468
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1469
|
+
`LLM output processed for SessionInput ${populatedSessionInput.id}, ${populatedSessionInput.aiActions.length} actions generated/processed.`,
|
|
1470
|
+
);
|
|
1471
|
+
<span class="cstat-no" title="statement not covered" > return populatedSessionInput;</span>
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
<span class="fstat-no" title="function not covered" > async </span>createFromRawLlmResponse(
|
|
1475
|
+
sessionId: string,
|
|
1476
|
+
dto: {
|
|
1477
|
+
raw_llm_response: string;
|
|
1478
|
+
execution_strategy: string;
|
|
1479
|
+
idempotency_key?: string;
|
|
1480
|
+
},
|
|
1481
|
+
): Promise<SessionInput> {
|
|
1482
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1483
|
+
`Creating new input from raw LLM response for session ${sessionId}`,
|
|
1484
|
+
);
|
|
1485
|
+
const session = <span class="cstat-no" title="statement not covered" >await this.sessionsRepository.findOneBy({ id: sessionId });</span>
|
|
1486
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session) {</span>
|
|
1487
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(`Session with ID "${sessionId}" not found`);</span>
|
|
1488
|
+
}
|
|
1489
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.setActiveSessionId(sessionId);</span>
|
|
1490
|
+
|
|
1491
|
+
// Create a minimal SessionInput
|
|
1492
|
+
const newSessionInput = <span class="cstat-no" title="statement not covered" >this.sessionInputsRepository.create({</span>
|
|
1493
|
+
session: { id: sessionId },
|
|
1494
|
+
user_prompt: 'Pasted LLM response directly.',
|
|
1495
|
+
execution_strategy: dto.execution_strategy,
|
|
1496
|
+
generated_context_string: '', // No context generated
|
|
1497
|
+
raw_llm_response: dto.raw_llm_response,
|
|
1498
|
+
idempotency_key: dto.idempotency_key,
|
|
1499
|
+
});
|
|
1500
|
+
|
|
1501
|
+
let savedSessionInput =
|
|
1502
|
+
<span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(newSessionInput);</span>
|
|
1503
|
+
|
|
1504
|
+
const cleanedLlmResponse = <span class="cstat-no" title="statement not covered" >await this.extractAndUpdateSessionTitle(</span>
|
|
1505
|
+
sessionId,
|
|
1506
|
+
savedSessionInput.raw_llm_response,
|
|
1507
|
+
);
|
|
1508
|
+
|
|
1509
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (cleanedLlmResponse !== savedSessionInput.raw_llm_response) {</span>
|
|
1510
|
+
<span class="cstat-no" title="statement not covered" > savedSessionInput.raw_llm_response = cleanedLlmResponse;</span>
|
|
1511
|
+
<span class="cstat-no" title="statement not covered" > savedSessionInput =</span>
|
|
1512
|
+
await this.sessionInputsRepository.save(savedSessionInput);
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
<span class="cstat-no" title="statement not covered" > if (savedSessionInput.execution_strategy === 'review_first') {</span>
|
|
1516
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createActionsFromLlmResponse(</span>
|
|
1517
|
+
savedSessionInput,
|
|
1518
|
+
AIActionStatus.PROPOSED,
|
|
1519
|
+
);
|
|
1520
|
+
} else <span class="cstat-no" title="statement not covered" >if (savedSessionInput.execution_strategy === 'apply_revert') {</span>
|
|
1521
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndTentativelyApplyActions(</span>
|
|
1522
|
+
savedSessionInput,
|
|
1523
|
+
);
|
|
1524
|
+
} else {
|
|
1525
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
1526
|
+
`Unsupported execution_strategy: ${savedSessionInput.execution_strategy}`,
|
|
1527
|
+
);
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1530
|
+
const populatedSessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
|
|
1531
|
+
where: { id: savedSessionInput.id },
|
|
1532
|
+
relations: ['contextTemplate', 'aiActions', 'aiActions.executionLogs'],
|
|
1533
|
+
order: {
|
|
1534
|
+
aiActions: {
|
|
1535
|
+
order_of_execution: 'ASC',
|
|
1536
|
+
},
|
|
1537
|
+
},
|
|
1538
|
+
});
|
|
1539
|
+
|
|
1540
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!populatedSessionInput) {</span>
|
|
1541
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
1542
|
+
`Failed to retrieve session input with ID "${savedSessionInput.id}" after processing LLM output.`,
|
|
1543
|
+
);
|
|
1544
|
+
}
|
|
1545
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1546
|
+
`LLM output processed for SessionInput ${populatedSessionInput.id}, ${populatedSessionInput.aiActions.length} actions generated/processed.`,
|
|
1547
|
+
);
|
|
1548
|
+
<span class="cstat-no" title="statement not covered" > return populatedSessionInput;</span>
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
<span class="fstat-no" title="function not covered" > async </span>findAllBySessionId(sessionId: string): Promise<SessionInput[]> {
|
|
1552
|
+
const session = <span class="cstat-no" title="statement not covered" >await this.sessionsRepository.findOneBy({ id: sessionId });</span>
|
|
1553
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session) {</span>
|
|
1554
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(`Session with ID "${sessionId}" not found`);</span>
|
|
1555
|
+
}
|
|
1556
|
+
const inputs = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.find({</span>
|
|
1557
|
+
where: { session: { id: sessionId } },
|
|
1558
|
+
relations: ['contextTemplate', 'aiActions', 'aiActions.executionLogs'],
|
|
1559
|
+
order: {
|
|
1560
|
+
created_at: 'ASC',
|
|
1561
|
+
aiActions: {
|
|
1562
|
+
order_of_execution: 'ASC',
|
|
1563
|
+
},
|
|
1564
|
+
},
|
|
1565
|
+
});
|
|
1566
|
+
|
|
1567
|
+
<span class="cstat-no" title="statement not covered" > return inputs;</span>
|
|
1568
|
+
}
|
|
1569
|
+
|
|
1570
|
+
<span class="fstat-no" title="function not covered" > async </span>findOne(sessionId: string, inputId: string): Promise<SessionInput> {
|
|
1571
|
+
const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
|
|
1572
|
+
where: { id: inputId, session: { id: sessionId } },
|
|
1573
|
+
relations: ['contextTemplate', 'aiActions', 'aiActions.executionLogs'],
|
|
1574
|
+
order: {
|
|
1575
|
+
aiActions: {
|
|
1576
|
+
order_of_execution: 'ASC',
|
|
1577
|
+
},
|
|
1578
|
+
},
|
|
1579
|
+
});
|
|
1580
|
+
|
|
1581
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
|
|
1582
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
1583
|
+
`SessionInput with ID "${inputId}" not found in Session "${sessionId}"`,
|
|
1584
|
+
);
|
|
1585
|
+
}
|
|
1586
|
+
<span class="cstat-no" title="statement not covered" > return sessionInput;</span>
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
<span class="fstat-no" title="function not covered" > async </span>remove(sessionId: string, inputId: string): Promise<void> {
|
|
1590
|
+
const sessionInput = <span class="cstat-no" title="statement not covered" >await this.findOne(sessionId, inputId);</span>
|
|
1591
|
+
<span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.remove(sessionInput);</span>
|
|
1592
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1593
|
+
`Deleted SessionInput ${inputId} from Session ${sessionId}.`,
|
|
1594
|
+
);
|
|
1595
|
+
}
|
|
1596
|
+
}</pre></td></tr></table></pre>
|
|
1597
|
+
|
|
1598
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1599
|
+
</div><!-- /wrapper -->
|
|
1600
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1601
|
+
Code coverage generated by
|
|
1602
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1603
|
+
at 2025-07-30T23:37:05.373Z
|
|
1604
|
+
</div>
|
|
1605
|
+
<script src="../../prettify.js"></script>
|
|
1606
|
+
<script>
|
|
1607
|
+
window.onload = function () {
|
|
1608
|
+
prettyPrint();
|
|
1609
|
+
};
|
|
1610
|
+
</script>
|
|
1611
|
+
<script src="../../sorter.js"></script>
|
|
1612
|
+
<script src="../../block-navigation.js"></script>
|
|
1613
|
+
</body>
|
|
1614
|
+
</html>
|
|
1615
|
+
|