@autofleet/rabbit 4.0.2 → 4.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/coverage/clover.xml +669 -0
  2. package/coverage/coverage-final.json +9 -0
  3. package/coverage/lcov-report/base.css +224 -0
  4. package/coverage/lcov-report/block-navigation.js +87 -0
  5. package/coverage/lcov-report/favicon.png +0 -0
  6. package/coverage/lcov-report/index.html +131 -0
  7. package/coverage/lcov-report/prettify.css +1 -0
  8. package/coverage/lcov-report/prettify.js +2 -0
  9. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  10. package/coverage/lcov-report/sorter.js +196 -0
  11. package/coverage/lcov-report/src/index.html +131 -0
  12. package/coverage/lcov-report/src/index.ts.html +3826 -0
  13. package/coverage/lcov-report/src/lib/celery.ts.html +352 -0
  14. package/coverage/lcov-report/src/lib/consts.ts.html +142 -0
  15. package/coverage/lcov-report/src/lib/index.html +191 -0
  16. package/coverage/lcov-report/src/lib/rabbitError.ts.html +103 -0
  17. package/coverage/lcov-report/src/lib/redis.ts.html +133 -0
  18. package/coverage/lcov-report/src/lib/types.ts.html +268 -0
  19. package/coverage/lcov-report/src/lib/utils.ts.html +142 -0
  20. package/coverage/lcov-report/src/logger.ts.html +100 -0
  21. package/coverage/lcov.info +1076 -0
  22. package/dist/index.d.ts +19 -33
  23. package/dist/index.js +217 -341
  24. package/dist/lib/celery.js +0 -1
  25. package/dist/lib/consts.d.ts +2 -10
  26. package/dist/lib/consts.js +3 -12
  27. package/dist/lib/rabbitError.js +0 -1
  28. package/dist/lib/redis.js +0 -1
  29. package/dist/lib/types.d.ts +0 -8
  30. package/dist/lib/types.js +0 -1
  31. package/dist/lib/utils.d.ts +0 -5
  32. package/dist/lib/utils.js +1 -9
  33. package/dist/logger.js +0 -1
  34. package/dist/{mock/index.d.ts → mock.d.ts} +1 -1
  35. package/dist/{mock/index.js → mock.js} +1 -2
  36. package/package.json +16 -23
  37. package/src/index.ts +243 -417
  38. package/src/lib/consts.ts +2 -11
  39. package/src/lib/types.ts +0 -10
  40. package/src/lib/utils.ts +0 -10
  41. package/src/{mock/index.ts → mock.ts} +2 -2
  42. package/tsconfig.json +2 -2
  43. package/dist/index.js.map +0 -1
  44. package/dist/lib/celery.js.map +0 -1
  45. package/dist/lib/consts.js.map +0 -1
  46. package/dist/lib/rabbitError.js.map +0 -1
  47. package/dist/lib/redis.js.map +0 -1
  48. package/dist/lib/types.js.map +0 -1
  49. package/dist/lib/utils.js.map +0 -1
  50. package/dist/logger.js.map +0 -1
  51. package/dist/mock/index.js.map +0 -1
  52. package/dist/mock/vitest.d.ts +0 -13
  53. package/dist/mock/vitest.js +0 -18
  54. package/dist/mock/vitest.js.map +0 -1
  55. package/src/mock/vitest.ts +0 -24
  56. package/tsconfig.build.json +0 -5
  57. package/vitest.config.ts +0 -17
@@ -0,0 +1,3826 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/index.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</a> index.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">71.28% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>422/592</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">65.53% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>116/177</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">77.38% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>65/84</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">71.13% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>414/582</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 medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a>
790
+ <a name='L725'></a><a href='#L725'>725</a>
791
+ <a name='L726'></a><a href='#L726'>726</a>
792
+ <a name='L727'></a><a href='#L727'>727</a>
793
+ <a name='L728'></a><a href='#L728'>728</a>
794
+ <a name='L729'></a><a href='#L729'>729</a>
795
+ <a name='L730'></a><a href='#L730'>730</a>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a>
824
+ <a name='L759'></a><a href='#L759'>759</a>
825
+ <a name='L760'></a><a href='#L760'>760</a>
826
+ <a name='L761'></a><a href='#L761'>761</a>
827
+ <a name='L762'></a><a href='#L762'>762</a>
828
+ <a name='L763'></a><a href='#L763'>763</a>
829
+ <a name='L764'></a><a href='#L764'>764</a>
830
+ <a name='L765'></a><a href='#L765'>765</a>
831
+ <a name='L766'></a><a href='#L766'>766</a>
832
+ <a name='L767'></a><a href='#L767'>767</a>
833
+ <a name='L768'></a><a href='#L768'>768</a>
834
+ <a name='L769'></a><a href='#L769'>769</a>
835
+ <a name='L770'></a><a href='#L770'>770</a>
836
+ <a name='L771'></a><a href='#L771'>771</a>
837
+ <a name='L772'></a><a href='#L772'>772</a>
838
+ <a name='L773'></a><a href='#L773'>773</a>
839
+ <a name='L774'></a><a href='#L774'>774</a>
840
+ <a name='L775'></a><a href='#L775'>775</a>
841
+ <a name='L776'></a><a href='#L776'>776</a>
842
+ <a name='L777'></a><a href='#L777'>777</a>
843
+ <a name='L778'></a><a href='#L778'>778</a>
844
+ <a name='L779'></a><a href='#L779'>779</a>
845
+ <a name='L780'></a><a href='#L780'>780</a>
846
+ <a name='L781'></a><a href='#L781'>781</a>
847
+ <a name='L782'></a><a href='#L782'>782</a>
848
+ <a name='L783'></a><a href='#L783'>783</a>
849
+ <a name='L784'></a><a href='#L784'>784</a>
850
+ <a name='L785'></a><a href='#L785'>785</a>
851
+ <a name='L786'></a><a href='#L786'>786</a>
852
+ <a name='L787'></a><a href='#L787'>787</a>
853
+ <a name='L788'></a><a href='#L788'>788</a>
854
+ <a name='L789'></a><a href='#L789'>789</a>
855
+ <a name='L790'></a><a href='#L790'>790</a>
856
+ <a name='L791'></a><a href='#L791'>791</a>
857
+ <a name='L792'></a><a href='#L792'>792</a>
858
+ <a name='L793'></a><a href='#L793'>793</a>
859
+ <a name='L794'></a><a href='#L794'>794</a>
860
+ <a name='L795'></a><a href='#L795'>795</a>
861
+ <a name='L796'></a><a href='#L796'>796</a>
862
+ <a name='L797'></a><a href='#L797'>797</a>
863
+ <a name='L798'></a><a href='#L798'>798</a>
864
+ <a name='L799'></a><a href='#L799'>799</a>
865
+ <a name='L800'></a><a href='#L800'>800</a>
866
+ <a name='L801'></a><a href='#L801'>801</a>
867
+ <a name='L802'></a><a href='#L802'>802</a>
868
+ <a name='L803'></a><a href='#L803'>803</a>
869
+ <a name='L804'></a><a href='#L804'>804</a>
870
+ <a name='L805'></a><a href='#L805'>805</a>
871
+ <a name='L806'></a><a href='#L806'>806</a>
872
+ <a name='L807'></a><a href='#L807'>807</a>
873
+ <a name='L808'></a><a href='#L808'>808</a>
874
+ <a name='L809'></a><a href='#L809'>809</a>
875
+ <a name='L810'></a><a href='#L810'>810</a>
876
+ <a name='L811'></a><a href='#L811'>811</a>
877
+ <a name='L812'></a><a href='#L812'>812</a>
878
+ <a name='L813'></a><a href='#L813'>813</a>
879
+ <a name='L814'></a><a href='#L814'>814</a>
880
+ <a name='L815'></a><a href='#L815'>815</a>
881
+ <a name='L816'></a><a href='#L816'>816</a>
882
+ <a name='L817'></a><a href='#L817'>817</a>
883
+ <a name='L818'></a><a href='#L818'>818</a>
884
+ <a name='L819'></a><a href='#L819'>819</a>
885
+ <a name='L820'></a><a href='#L820'>820</a>
886
+ <a name='L821'></a><a href='#L821'>821</a>
887
+ <a name='L822'></a><a href='#L822'>822</a>
888
+ <a name='L823'></a><a href='#L823'>823</a>
889
+ <a name='L824'></a><a href='#L824'>824</a>
890
+ <a name='L825'></a><a href='#L825'>825</a>
891
+ <a name='L826'></a><a href='#L826'>826</a>
892
+ <a name='L827'></a><a href='#L827'>827</a>
893
+ <a name='L828'></a><a href='#L828'>828</a>
894
+ <a name='L829'></a><a href='#L829'>829</a>
895
+ <a name='L830'></a><a href='#L830'>830</a>
896
+ <a name='L831'></a><a href='#L831'>831</a>
897
+ <a name='L832'></a><a href='#L832'>832</a>
898
+ <a name='L833'></a><a href='#L833'>833</a>
899
+ <a name='L834'></a><a href='#L834'>834</a>
900
+ <a name='L835'></a><a href='#L835'>835</a>
901
+ <a name='L836'></a><a href='#L836'>836</a>
902
+ <a name='L837'></a><a href='#L837'>837</a>
903
+ <a name='L838'></a><a href='#L838'>838</a>
904
+ <a name='L839'></a><a href='#L839'>839</a>
905
+ <a name='L840'></a><a href='#L840'>840</a>
906
+ <a name='L841'></a><a href='#L841'>841</a>
907
+ <a name='L842'></a><a href='#L842'>842</a>
908
+ <a name='L843'></a><a href='#L843'>843</a>
909
+ <a name='L844'></a><a href='#L844'>844</a>
910
+ <a name='L845'></a><a href='#L845'>845</a>
911
+ <a name='L846'></a><a href='#L846'>846</a>
912
+ <a name='L847'></a><a href='#L847'>847</a>
913
+ <a name='L848'></a><a href='#L848'>848</a>
914
+ <a name='L849'></a><a href='#L849'>849</a>
915
+ <a name='L850'></a><a href='#L850'>850</a>
916
+ <a name='L851'></a><a href='#L851'>851</a>
917
+ <a name='L852'></a><a href='#L852'>852</a>
918
+ <a name='L853'></a><a href='#L853'>853</a>
919
+ <a name='L854'></a><a href='#L854'>854</a>
920
+ <a name='L855'></a><a href='#L855'>855</a>
921
+ <a name='L856'></a><a href='#L856'>856</a>
922
+ <a name='L857'></a><a href='#L857'>857</a>
923
+ <a name='L858'></a><a href='#L858'>858</a>
924
+ <a name='L859'></a><a href='#L859'>859</a>
925
+ <a name='L860'></a><a href='#L860'>860</a>
926
+ <a name='L861'></a><a href='#L861'>861</a>
927
+ <a name='L862'></a><a href='#L862'>862</a>
928
+ <a name='L863'></a><a href='#L863'>863</a>
929
+ <a name='L864'></a><a href='#L864'>864</a>
930
+ <a name='L865'></a><a href='#L865'>865</a>
931
+ <a name='L866'></a><a href='#L866'>866</a>
932
+ <a name='L867'></a><a href='#L867'>867</a>
933
+ <a name='L868'></a><a href='#L868'>868</a>
934
+ <a name='L869'></a><a href='#L869'>869</a>
935
+ <a name='L870'></a><a href='#L870'>870</a>
936
+ <a name='L871'></a><a href='#L871'>871</a>
937
+ <a name='L872'></a><a href='#L872'>872</a>
938
+ <a name='L873'></a><a href='#L873'>873</a>
939
+ <a name='L874'></a><a href='#L874'>874</a>
940
+ <a name='L875'></a><a href='#L875'>875</a>
941
+ <a name='L876'></a><a href='#L876'>876</a>
942
+ <a name='L877'></a><a href='#L877'>877</a>
943
+ <a name='L878'></a><a href='#L878'>878</a>
944
+ <a name='L879'></a><a href='#L879'>879</a>
945
+ <a name='L880'></a><a href='#L880'>880</a>
946
+ <a name='L881'></a><a href='#L881'>881</a>
947
+ <a name='L882'></a><a href='#L882'>882</a>
948
+ <a name='L883'></a><a href='#L883'>883</a>
949
+ <a name='L884'></a><a href='#L884'>884</a>
950
+ <a name='L885'></a><a href='#L885'>885</a>
951
+ <a name='L886'></a><a href='#L886'>886</a>
952
+ <a name='L887'></a><a href='#L887'>887</a>
953
+ <a name='L888'></a><a href='#L888'>888</a>
954
+ <a name='L889'></a><a href='#L889'>889</a>
955
+ <a name='L890'></a><a href='#L890'>890</a>
956
+ <a name='L891'></a><a href='#L891'>891</a>
957
+ <a name='L892'></a><a href='#L892'>892</a>
958
+ <a name='L893'></a><a href='#L893'>893</a>
959
+ <a name='L894'></a><a href='#L894'>894</a>
960
+ <a name='L895'></a><a href='#L895'>895</a>
961
+ <a name='L896'></a><a href='#L896'>896</a>
962
+ <a name='L897'></a><a href='#L897'>897</a>
963
+ <a name='L898'></a><a href='#L898'>898</a>
964
+ <a name='L899'></a><a href='#L899'>899</a>
965
+ <a name='L900'></a><a href='#L900'>900</a>
966
+ <a name='L901'></a><a href='#L901'>901</a>
967
+ <a name='L902'></a><a href='#L902'>902</a>
968
+ <a name='L903'></a><a href='#L903'>903</a>
969
+ <a name='L904'></a><a href='#L904'>904</a>
970
+ <a name='L905'></a><a href='#L905'>905</a>
971
+ <a name='L906'></a><a href='#L906'>906</a>
972
+ <a name='L907'></a><a href='#L907'>907</a>
973
+ <a name='L908'></a><a href='#L908'>908</a>
974
+ <a name='L909'></a><a href='#L909'>909</a>
975
+ <a name='L910'></a><a href='#L910'>910</a>
976
+ <a name='L911'></a><a href='#L911'>911</a>
977
+ <a name='L912'></a><a href='#L912'>912</a>
978
+ <a name='L913'></a><a href='#L913'>913</a>
979
+ <a name='L914'></a><a href='#L914'>914</a>
980
+ <a name='L915'></a><a href='#L915'>915</a>
981
+ <a name='L916'></a><a href='#L916'>916</a>
982
+ <a name='L917'></a><a href='#L917'>917</a>
983
+ <a name='L918'></a><a href='#L918'>918</a>
984
+ <a name='L919'></a><a href='#L919'>919</a>
985
+ <a name='L920'></a><a href='#L920'>920</a>
986
+ <a name='L921'></a><a href='#L921'>921</a>
987
+ <a name='L922'></a><a href='#L922'>922</a>
988
+ <a name='L923'></a><a href='#L923'>923</a>
989
+ <a name='L924'></a><a href='#L924'>924</a>
990
+ <a name='L925'></a><a href='#L925'>925</a>
991
+ <a name='L926'></a><a href='#L926'>926</a>
992
+ <a name='L927'></a><a href='#L927'>927</a>
993
+ <a name='L928'></a><a href='#L928'>928</a>
994
+ <a name='L929'></a><a href='#L929'>929</a>
995
+ <a name='L930'></a><a href='#L930'>930</a>
996
+ <a name='L931'></a><a href='#L931'>931</a>
997
+ <a name='L932'></a><a href='#L932'>932</a>
998
+ <a name='L933'></a><a href='#L933'>933</a>
999
+ <a name='L934'></a><a href='#L934'>934</a>
1000
+ <a name='L935'></a><a href='#L935'>935</a>
1001
+ <a name='L936'></a><a href='#L936'>936</a>
1002
+ <a name='L937'></a><a href='#L937'>937</a>
1003
+ <a name='L938'></a><a href='#L938'>938</a>
1004
+ <a name='L939'></a><a href='#L939'>939</a>
1005
+ <a name='L940'></a><a href='#L940'>940</a>
1006
+ <a name='L941'></a><a href='#L941'>941</a>
1007
+ <a name='L942'></a><a href='#L942'>942</a>
1008
+ <a name='L943'></a><a href='#L943'>943</a>
1009
+ <a name='L944'></a><a href='#L944'>944</a>
1010
+ <a name='L945'></a><a href='#L945'>945</a>
1011
+ <a name='L946'></a><a href='#L946'>946</a>
1012
+ <a name='L947'></a><a href='#L947'>947</a>
1013
+ <a name='L948'></a><a href='#L948'>948</a>
1014
+ <a name='L949'></a><a href='#L949'>949</a>
1015
+ <a name='L950'></a><a href='#L950'>950</a>
1016
+ <a name='L951'></a><a href='#L951'>951</a>
1017
+ <a name='L952'></a><a href='#L952'>952</a>
1018
+ <a name='L953'></a><a href='#L953'>953</a>
1019
+ <a name='L954'></a><a href='#L954'>954</a>
1020
+ <a name='L955'></a><a href='#L955'>955</a>
1021
+ <a name='L956'></a><a href='#L956'>956</a>
1022
+ <a name='L957'></a><a href='#L957'>957</a>
1023
+ <a name='L958'></a><a href='#L958'>958</a>
1024
+ <a name='L959'></a><a href='#L959'>959</a>
1025
+ <a name='L960'></a><a href='#L960'>960</a>
1026
+ <a name='L961'></a><a href='#L961'>961</a>
1027
+ <a name='L962'></a><a href='#L962'>962</a>
1028
+ <a name='L963'></a><a href='#L963'>963</a>
1029
+ <a name='L964'></a><a href='#L964'>964</a>
1030
+ <a name='L965'></a><a href='#L965'>965</a>
1031
+ <a name='L966'></a><a href='#L966'>966</a>
1032
+ <a name='L967'></a><a href='#L967'>967</a>
1033
+ <a name='L968'></a><a href='#L968'>968</a>
1034
+ <a name='L969'></a><a href='#L969'>969</a>
1035
+ <a name='L970'></a><a href='#L970'>970</a>
1036
+ <a name='L971'></a><a href='#L971'>971</a>
1037
+ <a name='L972'></a><a href='#L972'>972</a>
1038
+ <a name='L973'></a><a href='#L973'>973</a>
1039
+ <a name='L974'></a><a href='#L974'>974</a>
1040
+ <a name='L975'></a><a href='#L975'>975</a>
1041
+ <a name='L976'></a><a href='#L976'>976</a>
1042
+ <a name='L977'></a><a href='#L977'>977</a>
1043
+ <a name='L978'></a><a href='#L978'>978</a>
1044
+ <a name='L979'></a><a href='#L979'>979</a>
1045
+ <a name='L980'></a><a href='#L980'>980</a>
1046
+ <a name='L981'></a><a href='#L981'>981</a>
1047
+ <a name='L982'></a><a href='#L982'>982</a>
1048
+ <a name='L983'></a><a href='#L983'>983</a>
1049
+ <a name='L984'></a><a href='#L984'>984</a>
1050
+ <a name='L985'></a><a href='#L985'>985</a>
1051
+ <a name='L986'></a><a href='#L986'>986</a>
1052
+ <a name='L987'></a><a href='#L987'>987</a>
1053
+ <a name='L988'></a><a href='#L988'>988</a>
1054
+ <a name='L989'></a><a href='#L989'>989</a>
1055
+ <a name='L990'></a><a href='#L990'>990</a>
1056
+ <a name='L991'></a><a href='#L991'>991</a>
1057
+ <a name='L992'></a><a href='#L992'>992</a>
1058
+ <a name='L993'></a><a href='#L993'>993</a>
1059
+ <a name='L994'></a><a href='#L994'>994</a>
1060
+ <a name='L995'></a><a href='#L995'>995</a>
1061
+ <a name='L996'></a><a href='#L996'>996</a>
1062
+ <a name='L997'></a><a href='#L997'>997</a>
1063
+ <a name='L998'></a><a href='#L998'>998</a>
1064
+ <a name='L999'></a><a href='#L999'>999</a>
1065
+ <a name='L1000'></a><a href='#L1000'>1000</a>
1066
+ <a name='L1001'></a><a href='#L1001'>1001</a>
1067
+ <a name='L1002'></a><a href='#L1002'>1002</a>
1068
+ <a name='L1003'></a><a href='#L1003'>1003</a>
1069
+ <a name='L1004'></a><a href='#L1004'>1004</a>
1070
+ <a name='L1005'></a><a href='#L1005'>1005</a>
1071
+ <a name='L1006'></a><a href='#L1006'>1006</a>
1072
+ <a name='L1007'></a><a href='#L1007'>1007</a>
1073
+ <a name='L1008'></a><a href='#L1008'>1008</a>
1074
+ <a name='L1009'></a><a href='#L1009'>1009</a>
1075
+ <a name='L1010'></a><a href='#L1010'>1010</a>
1076
+ <a name='L1011'></a><a href='#L1011'>1011</a>
1077
+ <a name='L1012'></a><a href='#L1012'>1012</a>
1078
+ <a name='L1013'></a><a href='#L1013'>1013</a>
1079
+ <a name='L1014'></a><a href='#L1014'>1014</a>
1080
+ <a name='L1015'></a><a href='#L1015'>1015</a>
1081
+ <a name='L1016'></a><a href='#L1016'>1016</a>
1082
+ <a name='L1017'></a><a href='#L1017'>1017</a>
1083
+ <a name='L1018'></a><a href='#L1018'>1018</a>
1084
+ <a name='L1019'></a><a href='#L1019'>1019</a>
1085
+ <a name='L1020'></a><a href='#L1020'>1020</a>
1086
+ <a name='L1021'></a><a href='#L1021'>1021</a>
1087
+ <a name='L1022'></a><a href='#L1022'>1022</a>
1088
+ <a name='L1023'></a><a href='#L1023'>1023</a>
1089
+ <a name='L1024'></a><a href='#L1024'>1024</a>
1090
+ <a name='L1025'></a><a href='#L1025'>1025</a>
1091
+ <a name='L1026'></a><a href='#L1026'>1026</a>
1092
+ <a name='L1027'></a><a href='#L1027'>1027</a>
1093
+ <a name='L1028'></a><a href='#L1028'>1028</a>
1094
+ <a name='L1029'></a><a href='#L1029'>1029</a>
1095
+ <a name='L1030'></a><a href='#L1030'>1030</a>
1096
+ <a name='L1031'></a><a href='#L1031'>1031</a>
1097
+ <a name='L1032'></a><a href='#L1032'>1032</a>
1098
+ <a name='L1033'></a><a href='#L1033'>1033</a>
1099
+ <a name='L1034'></a><a href='#L1034'>1034</a>
1100
+ <a name='L1035'></a><a href='#L1035'>1035</a>
1101
+ <a name='L1036'></a><a href='#L1036'>1036</a>
1102
+ <a name='L1037'></a><a href='#L1037'>1037</a>
1103
+ <a name='L1038'></a><a href='#L1038'>1038</a>
1104
+ <a name='L1039'></a><a href='#L1039'>1039</a>
1105
+ <a name='L1040'></a><a href='#L1040'>1040</a>
1106
+ <a name='L1041'></a><a href='#L1041'>1041</a>
1107
+ <a name='L1042'></a><a href='#L1042'>1042</a>
1108
+ <a name='L1043'></a><a href='#L1043'>1043</a>
1109
+ <a name='L1044'></a><a href='#L1044'>1044</a>
1110
+ <a name='L1045'></a><a href='#L1045'>1045</a>
1111
+ <a name='L1046'></a><a href='#L1046'>1046</a>
1112
+ <a name='L1047'></a><a href='#L1047'>1047</a>
1113
+ <a name='L1048'></a><a href='#L1048'>1048</a>
1114
+ <a name='L1049'></a><a href='#L1049'>1049</a>
1115
+ <a name='L1050'></a><a href='#L1050'>1050</a>
1116
+ <a name='L1051'></a><a href='#L1051'>1051</a>
1117
+ <a name='L1052'></a><a href='#L1052'>1052</a>
1118
+ <a name='L1053'></a><a href='#L1053'>1053</a>
1119
+ <a name='L1054'></a><a href='#L1054'>1054</a>
1120
+ <a name='L1055'></a><a href='#L1055'>1055</a>
1121
+ <a name='L1056'></a><a href='#L1056'>1056</a>
1122
+ <a name='L1057'></a><a href='#L1057'>1057</a>
1123
+ <a name='L1058'></a><a href='#L1058'>1058</a>
1124
+ <a name='L1059'></a><a href='#L1059'>1059</a>
1125
+ <a name='L1060'></a><a href='#L1060'>1060</a>
1126
+ <a name='L1061'></a><a href='#L1061'>1061</a>
1127
+ <a name='L1062'></a><a href='#L1062'>1062</a>
1128
+ <a name='L1063'></a><a href='#L1063'>1063</a>
1129
+ <a name='L1064'></a><a href='#L1064'>1064</a>
1130
+ <a name='L1065'></a><a href='#L1065'>1065</a>
1131
+ <a name='L1066'></a><a href='#L1066'>1066</a>
1132
+ <a name='L1067'></a><a href='#L1067'>1067</a>
1133
+ <a name='L1068'></a><a href='#L1068'>1068</a>
1134
+ <a name='L1069'></a><a href='#L1069'>1069</a>
1135
+ <a name='L1070'></a><a href='#L1070'>1070</a>
1136
+ <a name='L1071'></a><a href='#L1071'>1071</a>
1137
+ <a name='L1072'></a><a href='#L1072'>1072</a>
1138
+ <a name='L1073'></a><a href='#L1073'>1073</a>
1139
+ <a name='L1074'></a><a href='#L1074'>1074</a>
1140
+ <a name='L1075'></a><a href='#L1075'>1075</a>
1141
+ <a name='L1076'></a><a href='#L1076'>1076</a>
1142
+ <a name='L1077'></a><a href='#L1077'>1077</a>
1143
+ <a name='L1078'></a><a href='#L1078'>1078</a>
1144
+ <a name='L1079'></a><a href='#L1079'>1079</a>
1145
+ <a name='L1080'></a><a href='#L1080'>1080</a>
1146
+ <a name='L1081'></a><a href='#L1081'>1081</a>
1147
+ <a name='L1082'></a><a href='#L1082'>1082</a>
1148
+ <a name='L1083'></a><a href='#L1083'>1083</a>
1149
+ <a name='L1084'></a><a href='#L1084'>1084</a>
1150
+ <a name='L1085'></a><a href='#L1085'>1085</a>
1151
+ <a name='L1086'></a><a href='#L1086'>1086</a>
1152
+ <a name='L1087'></a><a href='#L1087'>1087</a>
1153
+ <a name='L1088'></a><a href='#L1088'>1088</a>
1154
+ <a name='L1089'></a><a href='#L1089'>1089</a>
1155
+ <a name='L1090'></a><a href='#L1090'>1090</a>
1156
+ <a name='L1091'></a><a href='#L1091'>1091</a>
1157
+ <a name='L1092'></a><a href='#L1092'>1092</a>
1158
+ <a name='L1093'></a><a href='#L1093'>1093</a>
1159
+ <a name='L1094'></a><a href='#L1094'>1094</a>
1160
+ <a name='L1095'></a><a href='#L1095'>1095</a>
1161
+ <a name='L1096'></a><a href='#L1096'>1096</a>
1162
+ <a name='L1097'></a><a href='#L1097'>1097</a>
1163
+ <a name='L1098'></a><a href='#L1098'>1098</a>
1164
+ <a name='L1099'></a><a href='#L1099'>1099</a>
1165
+ <a name='L1100'></a><a href='#L1100'>1100</a>
1166
+ <a name='L1101'></a><a href='#L1101'>1101</a>
1167
+ <a name='L1102'></a><a href='#L1102'>1102</a>
1168
+ <a name='L1103'></a><a href='#L1103'>1103</a>
1169
+ <a name='L1104'></a><a href='#L1104'>1104</a>
1170
+ <a name='L1105'></a><a href='#L1105'>1105</a>
1171
+ <a name='L1106'></a><a href='#L1106'>1106</a>
1172
+ <a name='L1107'></a><a href='#L1107'>1107</a>
1173
+ <a name='L1108'></a><a href='#L1108'>1108</a>
1174
+ <a name='L1109'></a><a href='#L1109'>1109</a>
1175
+ <a name='L1110'></a><a href='#L1110'>1110</a>
1176
+ <a name='L1111'></a><a href='#L1111'>1111</a>
1177
+ <a name='L1112'></a><a href='#L1112'>1112</a>
1178
+ <a name='L1113'></a><a href='#L1113'>1113</a>
1179
+ <a name='L1114'></a><a href='#L1114'>1114</a>
1180
+ <a name='L1115'></a><a href='#L1115'>1115</a>
1181
+ <a name='L1116'></a><a href='#L1116'>1116</a>
1182
+ <a name='L1117'></a><a href='#L1117'>1117</a>
1183
+ <a name='L1118'></a><a href='#L1118'>1118</a>
1184
+ <a name='L1119'></a><a href='#L1119'>1119</a>
1185
+ <a name='L1120'></a><a href='#L1120'>1120</a>
1186
+ <a name='L1121'></a><a href='#L1121'>1121</a>
1187
+ <a name='L1122'></a><a href='#L1122'>1122</a>
1188
+ <a name='L1123'></a><a href='#L1123'>1123</a>
1189
+ <a name='L1124'></a><a href='#L1124'>1124</a>
1190
+ <a name='L1125'></a><a href='#L1125'>1125</a>
1191
+ <a name='L1126'></a><a href='#L1126'>1126</a>
1192
+ <a name='L1127'></a><a href='#L1127'>1127</a>
1193
+ <a name='L1128'></a><a href='#L1128'>1128</a>
1194
+ <a name='L1129'></a><a href='#L1129'>1129</a>
1195
+ <a name='L1130'></a><a href='#L1130'>1130</a>
1196
+ <a name='L1131'></a><a href='#L1131'>1131</a>
1197
+ <a name='L1132'></a><a href='#L1132'>1132</a>
1198
+ <a name='L1133'></a><a href='#L1133'>1133</a>
1199
+ <a name='L1134'></a><a href='#L1134'>1134</a>
1200
+ <a name='L1135'></a><a href='#L1135'>1135</a>
1201
+ <a name='L1136'></a><a href='#L1136'>1136</a>
1202
+ <a name='L1137'></a><a href='#L1137'>1137</a>
1203
+ <a name='L1138'></a><a href='#L1138'>1138</a>
1204
+ <a name='L1139'></a><a href='#L1139'>1139</a>
1205
+ <a name='L1140'></a><a href='#L1140'>1140</a>
1206
+ <a name='L1141'></a><a href='#L1141'>1141</a>
1207
+ <a name='L1142'></a><a href='#L1142'>1142</a>
1208
+ <a name='L1143'></a><a href='#L1143'>1143</a>
1209
+ <a name='L1144'></a><a href='#L1144'>1144</a>
1210
+ <a name='L1145'></a><a href='#L1145'>1145</a>
1211
+ <a name='L1146'></a><a href='#L1146'>1146</a>
1212
+ <a name='L1147'></a><a href='#L1147'>1147</a>
1213
+ <a name='L1148'></a><a href='#L1148'>1148</a>
1214
+ <a name='L1149'></a><a href='#L1149'>1149</a>
1215
+ <a name='L1150'></a><a href='#L1150'>1150</a>
1216
+ <a name='L1151'></a><a href='#L1151'>1151</a>
1217
+ <a name='L1152'></a><a href='#L1152'>1152</a>
1218
+ <a name='L1153'></a><a href='#L1153'>1153</a>
1219
+ <a name='L1154'></a><a href='#L1154'>1154</a>
1220
+ <a name='L1155'></a><a href='#L1155'>1155</a>
1221
+ <a name='L1156'></a><a href='#L1156'>1156</a>
1222
+ <a name='L1157'></a><a href='#L1157'>1157</a>
1223
+ <a name='L1158'></a><a href='#L1158'>1158</a>
1224
+ <a name='L1159'></a><a href='#L1159'>1159</a>
1225
+ <a name='L1160'></a><a href='#L1160'>1160</a>
1226
+ <a name='L1161'></a><a href='#L1161'>1161</a>
1227
+ <a name='L1162'></a><a href='#L1162'>1162</a>
1228
+ <a name='L1163'></a><a href='#L1163'>1163</a>
1229
+ <a name='L1164'></a><a href='#L1164'>1164</a>
1230
+ <a name='L1165'></a><a href='#L1165'>1165</a>
1231
+ <a name='L1166'></a><a href='#L1166'>1166</a>
1232
+ <a name='L1167'></a><a href='#L1167'>1167</a>
1233
+ <a name='L1168'></a><a href='#L1168'>1168</a>
1234
+ <a name='L1169'></a><a href='#L1169'>1169</a>
1235
+ <a name='L1170'></a><a href='#L1170'>1170</a>
1236
+ <a name='L1171'></a><a href='#L1171'>1171</a>
1237
+ <a name='L1172'></a><a href='#L1172'>1172</a>
1238
+ <a name='L1173'></a><a href='#L1173'>1173</a>
1239
+ <a name='L1174'></a><a href='#L1174'>1174</a>
1240
+ <a name='L1175'></a><a href='#L1175'>1175</a>
1241
+ <a name='L1176'></a><a href='#L1176'>1176</a>
1242
+ <a name='L1177'></a><a href='#L1177'>1177</a>
1243
+ <a name='L1178'></a><a href='#L1178'>1178</a>
1244
+ <a name='L1179'></a><a href='#L1179'>1179</a>
1245
+ <a name='L1180'></a><a href='#L1180'>1180</a>
1246
+ <a name='L1181'></a><a href='#L1181'>1181</a>
1247
+ <a name='L1182'></a><a href='#L1182'>1182</a>
1248
+ <a name='L1183'></a><a href='#L1183'>1183</a>
1249
+ <a name='L1184'></a><a href='#L1184'>1184</a>
1250
+ <a name='L1185'></a><a href='#L1185'>1185</a>
1251
+ <a name='L1186'></a><a href='#L1186'>1186</a>
1252
+ <a name='L1187'></a><a href='#L1187'>1187</a>
1253
+ <a name='L1188'></a><a href='#L1188'>1188</a>
1254
+ <a name='L1189'></a><a href='#L1189'>1189</a>
1255
+ <a name='L1190'></a><a href='#L1190'>1190</a>
1256
+ <a name='L1191'></a><a href='#L1191'>1191</a>
1257
+ <a name='L1192'></a><a href='#L1192'>1192</a>
1258
+ <a name='L1193'></a><a href='#L1193'>1193</a>
1259
+ <a name='L1194'></a><a href='#L1194'>1194</a>
1260
+ <a name='L1195'></a><a href='#L1195'>1195</a>
1261
+ <a name='L1196'></a><a href='#L1196'>1196</a>
1262
+ <a name='L1197'></a><a href='#L1197'>1197</a>
1263
+ <a name='L1198'></a><a href='#L1198'>1198</a>
1264
+ <a name='L1199'></a><a href='#L1199'>1199</a>
1265
+ <a name='L1200'></a><a href='#L1200'>1200</a>
1266
+ <a name='L1201'></a><a href='#L1201'>1201</a>
1267
+ <a name='L1202'></a><a href='#L1202'>1202</a>
1268
+ <a name='L1203'></a><a href='#L1203'>1203</a>
1269
+ <a name='L1204'></a><a href='#L1204'>1204</a>
1270
+ <a name='L1205'></a><a href='#L1205'>1205</a>
1271
+ <a name='L1206'></a><a href='#L1206'>1206</a>
1272
+ <a name='L1207'></a><a href='#L1207'>1207</a>
1273
+ <a name='L1208'></a><a href='#L1208'>1208</a>
1274
+ <a name='L1209'></a><a href='#L1209'>1209</a>
1275
+ <a name='L1210'></a><a href='#L1210'>1210</a>
1276
+ <a name='L1211'></a><a href='#L1211'>1211</a>
1277
+ <a name='L1212'></a><a href='#L1212'>1212</a>
1278
+ <a name='L1213'></a><a href='#L1213'>1213</a>
1279
+ <a name='L1214'></a><a href='#L1214'>1214</a>
1280
+ <a name='L1215'></a><a href='#L1215'>1215</a>
1281
+ <a name='L1216'></a><a href='#L1216'>1216</a>
1282
+ <a name='L1217'></a><a href='#L1217'>1217</a>
1283
+ <a name='L1218'></a><a href='#L1218'>1218</a>
1284
+ <a name='L1219'></a><a href='#L1219'>1219</a>
1285
+ <a name='L1220'></a><a href='#L1220'>1220</a>
1286
+ <a name='L1221'></a><a href='#L1221'>1221</a>
1287
+ <a name='L1222'></a><a href='#L1222'>1222</a>
1288
+ <a name='L1223'></a><a href='#L1223'>1223</a>
1289
+ <a name='L1224'></a><a href='#L1224'>1224</a>
1290
+ <a name='L1225'></a><a href='#L1225'>1225</a>
1291
+ <a name='L1226'></a><a href='#L1226'>1226</a>
1292
+ <a name='L1227'></a><a href='#L1227'>1227</a>
1293
+ <a name='L1228'></a><a href='#L1228'>1228</a>
1294
+ <a name='L1229'></a><a href='#L1229'>1229</a>
1295
+ <a name='L1230'></a><a href='#L1230'>1230</a>
1296
+ <a name='L1231'></a><a href='#L1231'>1231</a>
1297
+ <a name='L1232'></a><a href='#L1232'>1232</a>
1298
+ <a name='L1233'></a><a href='#L1233'>1233</a>
1299
+ <a name='L1234'></a><a href='#L1234'>1234</a>
1300
+ <a name='L1235'></a><a href='#L1235'>1235</a>
1301
+ <a name='L1236'></a><a href='#L1236'>1236</a>
1302
+ <a name='L1237'></a><a href='#L1237'>1237</a>
1303
+ <a name='L1238'></a><a href='#L1238'>1238</a>
1304
+ <a name='L1239'></a><a href='#L1239'>1239</a>
1305
+ <a name='L1240'></a><a href='#L1240'>1240</a>
1306
+ <a name='L1241'></a><a href='#L1241'>1241</a>
1307
+ <a name='L1242'></a><a href='#L1242'>1242</a>
1308
+ <a name='L1243'></a><a href='#L1243'>1243</a>
1309
+ <a name='L1244'></a><a href='#L1244'>1244</a>
1310
+ <a name='L1245'></a><a href='#L1245'>1245</a>
1311
+ <a name='L1246'></a><a href='#L1246'>1246</a>
1312
+ <a name='L1247'></a><a href='#L1247'>1247</a>
1313
+ <a name='L1248'></a><a href='#L1248'>1248</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-yes">1x</span>
1316
+ <span class="cline-any cline-yes">1x</span>
1317
+ <span class="cline-any cline-yes">1x</span>
1318
+ <span class="cline-any cline-yes">1x</span>
1319
+ <span class="cline-any cline-yes">1x</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-neutral">&nbsp;</span>
1322
+ <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-yes">1x</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-yes">1x</span>
1329
+ <span class="cline-any cline-yes">1x</span>
1330
+ <span class="cline-any cline-yes">1x</span>
1331
+ <span class="cline-any cline-yes">1x</span>
1332
+ <span class="cline-any cline-yes">1x</span>
1333
+ <span class="cline-any cline-yes">1x</span>
1334
+ <span class="cline-any cline-yes">1x</span>
1335
+ <span class="cline-any cline-neutral">&nbsp;</span>
1336
+ <span class="cline-any cline-neutral">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-neutral">&nbsp;</span>
1339
+ <span class="cline-any cline-neutral">&nbsp;</span>
1340
+ <span class="cline-any cline-neutral">&nbsp;</span>
1341
+ <span class="cline-any cline-neutral">&nbsp;</span>
1342
+ <span class="cline-any cline-neutral">&nbsp;</span>
1343
+ <span class="cline-any cline-neutral">&nbsp;</span>
1344
+ <span class="cline-any cline-neutral">&nbsp;</span>
1345
+ <span class="cline-any cline-yes">1x</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-neutral">&nbsp;</span>
1350
+ <span class="cline-any cline-neutral">&nbsp;</span>
1351
+ <span class="cline-any cline-neutral">&nbsp;</span>
1352
+ <span class="cline-any cline-neutral">&nbsp;</span>
1353
+ <span class="cline-any cline-neutral">&nbsp;</span>
1354
+ <span class="cline-any cline-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-neutral">&nbsp;</span>
1356
+ <span class="cline-any cline-neutral">&nbsp;</span>
1357
+ <span class="cline-any cline-neutral">&nbsp;</span>
1358
+ <span class="cline-any cline-neutral">&nbsp;</span>
1359
+ <span class="cline-any cline-yes">1x</span>
1360
+ <span class="cline-any cline-neutral">&nbsp;</span>
1361
+ <span class="cline-any cline-yes">1x</span>
1362
+ <span class="cline-any cline-neutral">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</span>
1364
+ <span class="cline-any cline-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-neutral">&nbsp;</span>
1366
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-neutral">&nbsp;</span>
1369
+ <span class="cline-any cline-neutral">&nbsp;</span>
1370
+ <span class="cline-any cline-neutral">&nbsp;</span>
1371
+ <span class="cline-any cline-neutral">&nbsp;</span>
1372
+ <span class="cline-any cline-neutral">&nbsp;</span>
1373
+ <span class="cline-any cline-neutral">&nbsp;</span>
1374
+ <span class="cline-any cline-neutral">&nbsp;</span>
1375
+ <span class="cline-any cline-neutral">&nbsp;</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-neutral">&nbsp;</span>
1378
+ <span class="cline-any cline-neutral">&nbsp;</span>
1379
+ <span class="cline-any cline-neutral">&nbsp;</span>
1380
+ <span class="cline-any cline-neutral">&nbsp;</span>
1381
+ <span class="cline-any cline-neutral">&nbsp;</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-neutral">&nbsp;</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-neutral">&nbsp;</span>
1387
+ <span class="cline-any cline-neutral">&nbsp;</span>
1388
+ <span class="cline-any cline-neutral">&nbsp;</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-neutral">&nbsp;</span>
1392
+ <span class="cline-any cline-neutral">&nbsp;</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-neutral">&nbsp;</span>
1396
+ <span class="cline-any cline-neutral">&nbsp;</span>
1397
+ <span class="cline-any cline-neutral">&nbsp;</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-neutral">&nbsp;</span>
1400
+ <span class="cline-any cline-neutral">&nbsp;</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-neutral">&nbsp;</span>
1403
+ <span class="cline-any cline-neutral">&nbsp;</span>
1404
+ <span class="cline-any cline-neutral">&nbsp;</span>
1405
+ <span class="cline-any cline-neutral">&nbsp;</span>
1406
+ <span class="cline-any cline-neutral">&nbsp;</span>
1407
+ <span class="cline-any cline-neutral">&nbsp;</span>
1408
+ <span class="cline-any cline-neutral">&nbsp;</span>
1409
+ <span class="cline-any cline-neutral">&nbsp;</span>
1410
+ <span class="cline-any cline-neutral">&nbsp;</span>
1411
+ <span class="cline-any cline-neutral">&nbsp;</span>
1412
+ <span class="cline-any cline-neutral">&nbsp;</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-neutral">&nbsp;</span>
1415
+ <span class="cline-any cline-neutral">&nbsp;</span>
1416
+ <span class="cline-any cline-neutral">&nbsp;</span>
1417
+ <span class="cline-any cline-yes">1x</span>
1418
+ <span class="cline-any cline-neutral">&nbsp;</span>
1419
+ <span class="cline-any cline-neutral">&nbsp;</span>
1420
+ <span class="cline-any cline-neutral">&nbsp;</span>
1421
+ <span class="cline-any cline-yes">57x</span>
1422
+ <span class="cline-any cline-yes">57x</span>
1423
+ <span class="cline-any cline-neutral">&nbsp;</span>
1424
+ <span class="cline-any cline-yes">57x</span>
1425
+ <span class="cline-any cline-yes">57x</span>
1426
+ <span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-yes">57x</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-neutral">&nbsp;</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-yes">217x</span>
1436
+ <span class="cline-any cline-yes">1x</span>
1437
+ <span class="cline-any cline-neutral">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-yes">56x</span>
1442
+ <span class="cline-any cline-yes">56x</span>
1443
+ <span class="cline-any cline-yes">56x</span>
1444
+ <span class="cline-any cline-yes">56x</span>
1445
+ <span class="cline-any cline-yes">56x</span>
1446
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
+ <span class="cline-any cline-neutral">&nbsp;</span>
1448
+ <span class="cline-any cline-neutral">&nbsp;</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-neutral">&nbsp;</span>
1451
+ <span class="cline-any cline-neutral">&nbsp;</span>
1452
+ <span class="cline-any cline-neutral">&nbsp;</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-yes">4x</span>
1458
+ <span class="cline-any cline-neutral">&nbsp;</span>
1459
+ <span class="cline-any cline-yes">4x</span>
1460
+ <span class="cline-any cline-neutral">&nbsp;</span>
1461
+ <span class="cline-any cline-neutral">&nbsp;</span>
1462
+ <span class="cline-any cline-neutral">&nbsp;</span>
1463
+ <span class="cline-any cline-neutral">&nbsp;</span>
1464
+ <span class="cline-any cline-neutral">&nbsp;</span>
1465
+ <span class="cline-any cline-neutral">&nbsp;</span>
1466
+ <span class="cline-any cline-neutral">&nbsp;</span>
1467
+ <span class="cline-any cline-neutral">&nbsp;</span>
1468
+ <span class="cline-any cline-neutral">&nbsp;</span>
1469
+ <span class="cline-any cline-neutral">&nbsp;</span>
1470
+ <span class="cline-any cline-neutral">&nbsp;</span>
1471
+ <span class="cline-any cline-neutral">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-neutral">&nbsp;</span>
1474
+ <span class="cline-any cline-neutral">&nbsp;</span>
1475
+ <span class="cline-any cline-neutral">&nbsp;</span>
1476
+ <span class="cline-any cline-neutral">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-neutral">&nbsp;</span>
1479
+ <span class="cline-any cline-neutral">&nbsp;</span>
1480
+ <span class="cline-any cline-neutral">&nbsp;</span>
1481
+ <span class="cline-any cline-neutral">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-neutral">&nbsp;</span>
1486
+ <span class="cline-any cline-neutral">&nbsp;</span>
1487
+ <span class="cline-any cline-neutral">&nbsp;</span>
1488
+ <span class="cline-any cline-neutral">&nbsp;</span>
1489
+ <span class="cline-any cline-neutral">&nbsp;</span>
1490
+ <span class="cline-any cline-yes">4x</span>
1491
+ <span class="cline-any cline-neutral">&nbsp;</span>
1492
+ <span class="cline-any cline-yes">4x</span>
1493
+ <span class="cline-any cline-neutral">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-neutral">&nbsp;</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span>
1497
+ <span class="cline-any cline-neutral">&nbsp;</span>
1498
+ <span class="cline-any cline-neutral">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-neutral">&nbsp;</span>
1501
+ <span class="cline-any cline-neutral">&nbsp;</span>
1502
+ <span class="cline-any cline-neutral">&nbsp;</span>
1503
+ <span class="cline-any cline-neutral">&nbsp;</span>
1504
+ <span class="cline-any cline-neutral">&nbsp;</span>
1505
+ <span class="cline-any cline-neutral">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-neutral">&nbsp;</span>
1508
+ <span class="cline-any cline-neutral">&nbsp;</span>
1509
+ <span class="cline-any cline-neutral">&nbsp;</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-neutral">&nbsp;</span>
1513
+ <span class="cline-any cline-neutral">&nbsp;</span>
1514
+ <span class="cline-any cline-neutral">&nbsp;</span>
1515
+ <span class="cline-any cline-neutral">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-yes">4x</span>
1519
+ <span class="cline-any cline-neutral">&nbsp;</span>
1520
+ <span class="cline-any cline-neutral">&nbsp;</span>
1521
+ <span class="cline-any cline-yes">4x</span>
1522
+ <span class="cline-any cline-yes">4x</span>
1523
+ <span class="cline-any cline-yes">4x</span>
1524
+ <span class="cline-any cline-yes">4x</span>
1525
+ <span class="cline-any cline-yes">4x</span>
1526
+ <span class="cline-any cline-yes">4x</span>
1527
+ <span class="cline-any cline-yes">4x</span>
1528
+ <span class="cline-any cline-yes">4x</span>
1529
+ <span class="cline-any cline-yes">4x</span>
1530
+ <span class="cline-any cline-yes">4x</span>
1531
+ <span class="cline-any cline-yes">4x</span>
1532
+ <span class="cline-any cline-neutral">&nbsp;</span>
1533
+ <span class="cline-any cline-yes">4x</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-yes">4x</span>
1536
+ <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-neutral">&nbsp;</span>
1538
+ <span class="cline-any cline-yes">4x</span>
1539
+ <span class="cline-any cline-yes">4x</span>
1540
+ <span class="cline-any cline-yes">4x</span>
1541
+ <span class="cline-any cline-neutral">&nbsp;</span>
1542
+ <span class="cline-any cline-yes">4x</span>
1543
+ <span class="cline-any cline-yes">4x</span>
1544
+ <span class="cline-any cline-yes">4x</span>
1545
+ <span class="cline-any cline-yes">4x</span>
1546
+ <span class="cline-any cline-no">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-yes">4x</span>
1549
+ <span class="cline-any cline-no">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-neutral">&nbsp;</span>
1553
+ <span class="cline-any cline-neutral">&nbsp;</span>
1554
+ <span class="cline-any cline-yes">4x</span>
1555
+ <span class="cline-any cline-yes">4x</span>
1556
+ <span class="cline-any cline-yes">4x</span>
1557
+ <span class="cline-any cline-yes">4x</span>
1558
+ <span class="cline-any cline-yes">4x</span>
1559
+ <span class="cline-any cline-yes">4x</span>
1560
+ <span class="cline-any cline-yes">4x</span>
1561
+ <span class="cline-any cline-yes">4x</span>
1562
+ <span class="cline-any cline-yes">4x</span>
1563
+ <span class="cline-any cline-yes">4x</span>
1564
+ <span class="cline-any cline-yes">4x</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-yes">4x</span>
1568
+ <span class="cline-any cline-yes">78x</span>
1569
+ <span class="cline-any cline-yes">74x</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-yes">4x</span>
1573
+ <span class="cline-any cline-no">&nbsp;</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-yes">4x</span>
1577
+ <span class="cline-any cline-yes">4x</span>
1578
+ <span class="cline-any cline-neutral">&nbsp;</span>
1579
+ <span class="cline-any cline-neutral">&nbsp;</span>
1580
+ <span class="cline-any cline-neutral">&nbsp;</span>
1581
+ <span class="cline-any cline-neutral">&nbsp;</span>
1582
+ <span class="cline-any cline-neutral">&nbsp;</span>
1583
+ <span class="cline-any cline-yes">4x</span>
1584
+ <span class="cline-any cline-neutral">&nbsp;</span>
1585
+ <span class="cline-any cline-yes">4x</span>
1586
+ <span class="cline-any cline-yes">4x</span>
1587
+ <span class="cline-any cline-neutral">&nbsp;</span>
1588
+ <span class="cline-any cline-yes">4x</span>
1589
+ <span class="cline-any cline-no">&nbsp;</span>
1590
+ <span class="cline-any cline-neutral">&nbsp;</span>
1591
+ <span class="cline-any cline-neutral">&nbsp;</span>
1592
+ <span class="cline-any cline-yes">4x</span>
1593
+ <span class="cline-any cline-yes">4x</span>
1594
+ <span class="cline-any cline-neutral">&nbsp;</span>
1595
+ <span class="cline-any cline-neutral">&nbsp;</span>
1596
+ <span class="cline-any cline-no">&nbsp;</span>
1597
+ <span class="cline-any cline-no">&nbsp;</span>
1598
+ <span class="cline-any cline-no">&nbsp;</span>
1599
+ <span class="cline-any cline-neutral">&nbsp;</span>
1600
+ <span class="cline-any cline-neutral">&nbsp;</span>
1601
+ <span class="cline-any cline-neutral">&nbsp;</span>
1602
+ <span class="cline-any cline-neutral">&nbsp;</span>
1603
+ <span class="cline-any cline-neutral">&nbsp;</span>
1604
+ <span class="cline-any cline-neutral">&nbsp;</span>
1605
+ <span class="cline-any cline-neutral">&nbsp;</span>
1606
+ <span class="cline-any cline-no">&nbsp;</span>
1607
+ <span class="cline-any cline-no">&nbsp;</span>
1608
+ <span class="cline-any cline-no">&nbsp;</span>
1609
+ <span class="cline-any cline-neutral">&nbsp;</span>
1610
+ <span class="cline-any cline-no">&nbsp;</span>
1611
+ <span class="cline-any cline-no">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-neutral">&nbsp;</span>
1614
+ <span class="cline-any cline-neutral">&nbsp;</span>
1615
+ <span class="cline-any cline-no">&nbsp;</span>
1616
+ <span class="cline-any cline-no">&nbsp;</span>
1617
+ <span class="cline-any cline-neutral">&nbsp;</span>
1618
+ <span class="cline-any cline-neutral">&nbsp;</span>
1619
+ <span class="cline-any cline-neutral">&nbsp;</span>
1620
+ <span class="cline-any cline-yes">4x</span>
1621
+ <span class="cline-any cline-yes">44x</span>
1622
+ <span class="cline-any cline-yes">44x</span>
1623
+ <span class="cline-any cline-yes">44x</span>
1624
+ <span class="cline-any cline-neutral">&nbsp;</span>
1625
+ <span class="cline-any cline-yes">44x</span>
1626
+ <span class="cline-any cline-yes">7x</span>
1627
+ <span class="cline-any cline-yes">7x</span>
1628
+ <span class="cline-any cline-neutral">&nbsp;</span>
1629
+ <span class="cline-any cline-yes">37x</span>
1630
+ <span class="cline-any cline-neutral">&nbsp;</span>
1631
+ <span class="cline-any cline-no">&nbsp;</span>
1632
+ <span class="cline-any cline-neutral">&nbsp;</span>
1633
+ <span class="cline-any cline-neutral">&nbsp;</span>
1634
+ <span class="cline-any cline-yes">31x</span>
1635
+ <span class="cline-any cline-yes">31x</span>
1636
+ <span class="cline-any cline-yes">31x</span>
1637
+ <span class="cline-any cline-yes">31x</span>
1638
+ <span class="cline-any cline-yes">31x</span>
1639
+ <span class="cline-any cline-yes">31x</span>
1640
+ <span class="cline-any cline-neutral">&nbsp;</span>
1641
+ <span class="cline-any cline-yes">31x</span>
1642
+ <span class="cline-any cline-yes">4x</span>
1643
+ <span class="cline-any cline-yes">4x</span>
1644
+ <span class="cline-any cline-yes">4x</span>
1645
+ <span class="cline-any cline-neutral">&nbsp;</span>
1646
+ <span class="cline-any cline-neutral">&nbsp;</span>
1647
+ <span class="cline-any cline-neutral">&nbsp;</span>
1648
+ <span class="cline-any cline-neutral">&nbsp;</span>
1649
+ <span class="cline-any cline-yes">4x</span>
1650
+ <span class="cline-any cline-neutral">&nbsp;</span>
1651
+ <span class="cline-any cline-neutral">&nbsp;</span>
1652
+ <span class="cline-any cline-neutral">&nbsp;</span>
1653
+ <span class="cline-any cline-neutral">&nbsp;</span>
1654
+ <span class="cline-any cline-neutral">&nbsp;</span>
1655
+ <span class="cline-any cline-neutral">&nbsp;</span>
1656
+ <span class="cline-any cline-yes">13x</span>
1657
+ <span class="cline-any cline-neutral">&nbsp;</span>
1658
+ <span class="cline-any cline-neutral">&nbsp;</span>
1659
+ <span class="cline-any cline-neutral">&nbsp;</span>
1660
+ <span class="cline-any cline-neutral">&nbsp;</span>
1661
+ <span class="cline-any cline-neutral">&nbsp;</span>
1662
+ <span class="cline-any cline-yes">13x</span>
1663
+ <span class="cline-any cline-yes">13x</span>
1664
+ <span class="cline-any cline-yes">13x</span>
1665
+ <span class="cline-any cline-neutral">&nbsp;</span>
1666
+ <span class="cline-any cline-neutral">&nbsp;</span>
1667
+ <span class="cline-any cline-neutral">&nbsp;</span>
1668
+ <span class="cline-any cline-neutral">&nbsp;</span>
1669
+ <span class="cline-any cline-neutral">&nbsp;</span>
1670
+ <span class="cline-any cline-neutral">&nbsp;</span>
1671
+ <span class="cline-any cline-yes">6x</span>
1672
+ <span class="cline-any cline-neutral">&nbsp;</span>
1673
+ <span class="cline-any cline-neutral">&nbsp;</span>
1674
+ <span class="cline-any cline-neutral">&nbsp;</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-neutral">&nbsp;</span>
1677
+ <span class="cline-any cline-neutral">&nbsp;</span>
1678
+ <span class="cline-any cline-yes">7x</span>
1679
+ <span class="cline-any cline-yes">7x</span>
1680
+ <span class="cline-any cline-neutral">&nbsp;</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1682
+ <span class="cline-any cline-neutral">&nbsp;</span>
1683
+ <span class="cline-any cline-neutral">&nbsp;</span>
1684
+ <span class="cline-any cline-neutral">&nbsp;</span>
1685
+ <span class="cline-any cline-neutral">&nbsp;</span>
1686
+ <span class="cline-any cline-yes">13x</span>
1687
+ <span class="cline-any cline-yes">13x</span>
1688
+ <span class="cline-any cline-neutral">&nbsp;</span>
1689
+ <span class="cline-any cline-no">&nbsp;</span>
1690
+ <span class="cline-any cline-neutral">&nbsp;</span>
1691
+ <span class="cline-any cline-neutral">&nbsp;</span>
1692
+ <span class="cline-any cline-neutral">&nbsp;</span>
1693
+ <span class="cline-any cline-neutral">&nbsp;</span>
1694
+ <span class="cline-any cline-neutral">&nbsp;</span>
1695
+ <span class="cline-any cline-neutral">&nbsp;</span>
1696
+ <span class="cline-any cline-yes">34x</span>
1697
+ <span class="cline-any cline-yes">34x</span>
1698
+ <span class="cline-any cline-no">&nbsp;</span>
1699
+ <span class="cline-any cline-neutral">&nbsp;</span>
1700
+ <span class="cline-any cline-neutral">&nbsp;</span>
1701
+ <span class="cline-any cline-no">&nbsp;</span>
1702
+ <span class="cline-any cline-neutral">&nbsp;</span>
1703
+ <span class="cline-any cline-yes">34x</span>
1704
+ <span class="cline-any cline-yes">30x</span>
1705
+ <span class="cline-any cline-yes">30x</span>
1706
+ <span class="cline-any cline-neutral">&nbsp;</span>
1707
+ <span class="cline-any cline-neutral">&nbsp;</span>
1708
+ <span class="cline-any cline-yes">30x</span>
1709
+ <span class="cline-any cline-neutral">&nbsp;</span>
1710
+ <span class="cline-any cline-no">&nbsp;</span>
1711
+ <span class="cline-any cline-neutral">&nbsp;</span>
1712
+ <span class="cline-any cline-yes">4x</span>
1713
+ <span class="cline-any cline-no">&nbsp;</span>
1714
+ <span class="cline-any cline-no">&nbsp;</span>
1715
+ <span class="cline-any cline-no">&nbsp;</span>
1716
+ <span class="cline-any cline-no">&nbsp;</span>
1717
+ <span class="cline-any cline-neutral">&nbsp;</span>
1718
+ <span class="cline-any cline-yes">4x</span>
1719
+ <span class="cline-any cline-yes">4x</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-neutral">&nbsp;</span>
1722
+ <span class="cline-any cline-neutral">&nbsp;</span>
1723
+ <span class="cline-any cline-neutral">&nbsp;</span>
1724
+ <span class="cline-any cline-yes">4x</span>
1725
+ <span class="cline-any cline-yes">9x</span>
1726
+ <span class="cline-any cline-yes">9x</span>
1727
+ <span class="cline-any cline-yes">9x</span>
1728
+ <span class="cline-any cline-neutral">&nbsp;</span>
1729
+ <span class="cline-any cline-yes">9x</span>
1730
+ <span class="cline-any cline-yes">9x</span>
1731
+ <span class="cline-any cline-neutral">&nbsp;</span>
1732
+ <span class="cline-any cline-neutral">&nbsp;</span>
1733
+ <span class="cline-any cline-yes">4x</span>
1734
+ <span class="cline-any cline-yes">4x</span>
1735
+ <span class="cline-any cline-neutral">&nbsp;</span>
1736
+ <span class="cline-any cline-neutral">&nbsp;</span>
1737
+ <span class="cline-any cline-neutral">&nbsp;</span>
1738
+ <span class="cline-any cline-yes">4x</span>
1739
+ <span class="cline-any cline-yes">4x</span>
1740
+ <span class="cline-any cline-no">&nbsp;</span>
1741
+ <span class="cline-any cline-no">&nbsp;</span>
1742
+ <span class="cline-any cline-no">&nbsp;</span>
1743
+ <span class="cline-any cline-no">&nbsp;</span>
1744
+ <span class="cline-any cline-no">&nbsp;</span>
1745
+ <span class="cline-any cline-neutral">&nbsp;</span>
1746
+ <span class="cline-any cline-neutral">&nbsp;</span>
1747
+ <span class="cline-any cline-neutral">&nbsp;</span>
1748
+ <span class="cline-any cline-yes">4x</span>
1749
+ <span class="cline-any cline-no">&nbsp;</span>
1750
+ <span class="cline-any cline-no">&nbsp;</span>
1751
+ <span class="cline-any cline-no">&nbsp;</span>
1752
+ <span class="cline-any cline-no">&nbsp;</span>
1753
+ <span class="cline-any cline-no">&nbsp;</span>
1754
+ <span class="cline-any cline-no">&nbsp;</span>
1755
+ <span class="cline-any cline-neutral">&nbsp;</span>
1756
+ <span class="cline-any cline-neutral">&nbsp;</span>
1757
+ <span class="cline-any cline-neutral">&nbsp;</span>
1758
+ <span class="cline-any cline-yes">4x</span>
1759
+ <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-yes">1x</span>
1761
+ <span class="cline-any cline-yes">1x</span>
1762
+ <span class="cline-any cline-yes">1x</span>
1763
+ <span class="cline-any cline-no">&nbsp;</span>
1764
+ <span class="cline-any cline-no">&nbsp;</span>
1765
+ <span class="cline-any cline-neutral">&nbsp;</span>
1766
+ <span class="cline-any cline-yes">1x</span>
1767
+ <span class="cline-any cline-neutral">&nbsp;</span>
1768
+ <span class="cline-any cline-neutral">&nbsp;</span>
1769
+ <span class="cline-any cline-neutral">&nbsp;</span>
1770
+ <span class="cline-any cline-yes">4x</span>
1771
+ <span class="cline-any cline-yes">4x</span>
1772
+ <span class="cline-any cline-yes">4x</span>
1773
+ <span class="cline-any cline-yes">4x</span>
1774
+ <span class="cline-any cline-yes">4x</span>
1775
+ <span class="cline-any cline-yes">4x</span>
1776
+ <span class="cline-any cline-neutral">&nbsp;</span>
1777
+ <span class="cline-any cline-neutral">&nbsp;</span>
1778
+ <span class="cline-any cline-neutral">&nbsp;</span>
1779
+ <span class="cline-any cline-neutral">&nbsp;</span>
1780
+ <span class="cline-any cline-neutral">&nbsp;</span>
1781
+ <span class="cline-any cline-neutral">&nbsp;</span>
1782
+ <span class="cline-any cline-yes">34x</span>
1783
+ <span class="cline-any cline-yes">34x</span>
1784
+ <span class="cline-any cline-neutral">&nbsp;</span>
1785
+ <span class="cline-any cline-no">&nbsp;</span>
1786
+ <span class="cline-any cline-no">&nbsp;</span>
1787
+ <span class="cline-any cline-neutral">&nbsp;</span>
1788
+ <span class="cline-any cline-yes">34x</span>
1789
+ <span class="cline-any cline-yes">34x</span>
1790
+ <span class="cline-any cline-no">&nbsp;</span>
1791
+ <span class="cline-any cline-no">&nbsp;</span>
1792
+ <span class="cline-any cline-neutral">&nbsp;</span>
1793
+ <span class="cline-any cline-yes">34x</span>
1794
+ <span class="cline-any cline-yes">34x</span>
1795
+ <span class="cline-any cline-yes">34x</span>
1796
+ <span class="cline-any cline-yes">34x</span>
1797
+ <span class="cline-any cline-neutral">&nbsp;</span>
1798
+ <span class="cline-any cline-no">&nbsp;</span>
1799
+ <span class="cline-any cline-no">&nbsp;</span>
1800
+ <span class="cline-any cline-neutral">&nbsp;</span>
1801
+ <span class="cline-any cline-neutral">&nbsp;</span>
1802
+ <span class="cline-any cline-neutral">&nbsp;</span>
1803
+ <span class="cline-any cline-neutral">&nbsp;</span>
1804
+ <span class="cline-any cline-yes">24x</span>
1805
+ <span class="cline-any cline-yes">4x</span>
1806
+ <span class="cline-any cline-yes">4x</span>
1807
+ <span class="cline-any cline-no">&nbsp;</span>
1808
+ <span class="cline-any cline-neutral">&nbsp;</span>
1809
+ <span class="cline-any cline-neutral">&nbsp;</span>
1810
+ <span class="cline-any cline-yes">4x</span>
1811
+ <span class="cline-any cline-yes">4x</span>
1812
+ <span class="cline-any cline-yes">4x</span>
1813
+ <span class="cline-any cline-no">&nbsp;</span>
1814
+ <span class="cline-any cline-neutral">&nbsp;</span>
1815
+ <span class="cline-any cline-yes">4x</span>
1816
+ <span class="cline-any cline-yes">4x</span>
1817
+ <span class="cline-any cline-neutral">&nbsp;</span>
1818
+ <span class="cline-any cline-no">&nbsp;</span>
1819
+ <span class="cline-any cline-neutral">&nbsp;</span>
1820
+ <span class="cline-any cline-neutral">&nbsp;</span>
1821
+ <span class="cline-any cline-neutral">&nbsp;</span>
1822
+ <span class="cline-any cline-yes">24x</span>
1823
+ <span class="cline-any cline-neutral">&nbsp;</span>
1824
+ <span class="cline-any cline-neutral">&nbsp;</span>
1825
+ <span class="cline-any cline-neutral">&nbsp;</span>
1826
+ <span class="cline-any cline-no">&nbsp;</span>
1827
+ <span class="cline-any cline-neutral">&nbsp;</span>
1828
+ <span class="cline-any cline-no">&nbsp;</span>
1829
+ <span class="cline-any cline-no">&nbsp;</span>
1830
+ <span class="cline-any cline-no">&nbsp;</span>
1831
+ <span class="cline-any cline-neutral">&nbsp;</span>
1832
+ <span class="cline-any cline-neutral">&nbsp;</span>
1833
+ <span class="cline-any cline-no">&nbsp;</span>
1834
+ <span class="cline-any cline-no">&nbsp;</span>
1835
+ <span class="cline-any cline-neutral">&nbsp;</span>
1836
+ <span class="cline-any cline-neutral">&nbsp;</span>
1837
+ <span class="cline-any cline-no">&nbsp;</span>
1838
+ <span class="cline-any cline-no">&nbsp;</span>
1839
+ <span class="cline-any cline-no">&nbsp;</span>
1840
+ <span class="cline-any cline-neutral">&nbsp;</span>
1841
+ <span class="cline-any cline-neutral">&nbsp;</span>
1842
+ <span class="cline-any cline-neutral">&nbsp;</span>
1843
+ <span class="cline-any cline-neutral">&nbsp;</span>
1844
+ <span class="cline-any cline-yes">8x</span>
1845
+ <span class="cline-any cline-yes">8x</span>
1846
+ <span class="cline-any cline-yes">8x</span>
1847
+ <span class="cline-any cline-no">&nbsp;</span>
1848
+ <span class="cline-any cline-neutral">&nbsp;</span>
1849
+ <span class="cline-any cline-yes">8x</span>
1850
+ <span class="cline-any cline-yes">8x</span>
1851
+ <span class="cline-any cline-neutral">&nbsp;</span>
1852
+ <span class="cline-any cline-neutral">&nbsp;</span>
1853
+ <span class="cline-any cline-neutral">&nbsp;</span>
1854
+ <span class="cline-any cline-no">&nbsp;</span>
1855
+ <span class="cline-any cline-no">&nbsp;</span>
1856
+ <span class="cline-any cline-no">&nbsp;</span>
1857
+ <span class="cline-any cline-no">&nbsp;</span>
1858
+ <span class="cline-any cline-no">&nbsp;</span>
1859
+ <span class="cline-any cline-no">&nbsp;</span>
1860
+ <span class="cline-any cline-neutral">&nbsp;</span>
1861
+ <span class="cline-any cline-neutral">&nbsp;</span>
1862
+ <span class="cline-any cline-neutral">&nbsp;</span>
1863
+ <span class="cline-any cline-neutral">&nbsp;</span>
1864
+ <span class="cline-any cline-yes">1x</span>
1865
+ <span class="cline-any cline-yes">1x</span>
1866
+ <span class="cline-any cline-yes">1x</span>
1867
+ <span class="cline-any cline-neutral">&nbsp;</span>
1868
+ <span class="cline-any cline-neutral">&nbsp;</span>
1869
+ <span class="cline-any cline-neutral">&nbsp;</span>
1870
+ <span class="cline-any cline-neutral">&nbsp;</span>
1871
+ <span class="cline-any cline-yes">21x</span>
1872
+ <span class="cline-any cline-neutral">&nbsp;</span>
1873
+ <span class="cline-any cline-neutral">&nbsp;</span>
1874
+ <span class="cline-any cline-neutral">&nbsp;</span>
1875
+ <span class="cline-any cline-neutral">&nbsp;</span>
1876
+ <span class="cline-any cline-neutral">&nbsp;</span>
1877
+ <span class="cline-any cline-neutral">&nbsp;</span>
1878
+ <span class="cline-any cline-neutral">&nbsp;</span>
1879
+ <span class="cline-any cline-neutral">&nbsp;</span>
1880
+ <span class="cline-any cline-yes">21x</span>
1881
+ <span class="cline-any cline-yes">21x</span>
1882
+ <span class="cline-any cline-yes">21x</span>
1883
+ <span class="cline-any cline-yes">21x</span>
1884
+ <span class="cline-any cline-yes">22x</span>
1885
+ <span class="cline-any cline-neutral">&nbsp;</span>
1886
+ <span class="cline-any cline-yes">21x</span>
1887
+ <span class="cline-any cline-yes">21x</span>
1888
+ <span class="cline-any cline-neutral">&nbsp;</span>
1889
+ <span class="cline-any cline-no">&nbsp;</span>
1890
+ <span class="cline-any cline-no">&nbsp;</span>
1891
+ <span class="cline-any cline-no">&nbsp;</span>
1892
+ <span class="cline-any cline-no">&nbsp;</span>
1893
+ <span class="cline-any cline-no">&nbsp;</span>
1894
+ <span class="cline-any cline-neutral">&nbsp;</span>
1895
+ <span class="cline-any cline-no">&nbsp;</span>
1896
+ <span class="cline-any cline-no">&nbsp;</span>
1897
+ <span class="cline-any cline-no">&nbsp;</span>
1898
+ <span class="cline-any cline-no">&nbsp;</span>
1899
+ <span class="cline-any cline-neutral">&nbsp;</span>
1900
+ <span class="cline-any cline-no">&nbsp;</span>
1901
+ <span class="cline-any cline-neutral">&nbsp;</span>
1902
+ <span class="cline-any cline-neutral">&nbsp;</span>
1903
+ <span class="cline-any cline-neutral">&nbsp;</span>
1904
+ <span class="cline-any cline-yes">21x</span>
1905
+ <span class="cline-any cline-yes">21x</span>
1906
+ <span class="cline-any cline-neutral">&nbsp;</span>
1907
+ <span class="cline-any cline-neutral">&nbsp;</span>
1908
+ <span class="cline-any cline-neutral">&nbsp;</span>
1909
+ <span class="cline-any cline-neutral">&nbsp;</span>
1910
+ <span class="cline-any cline-yes">26x</span>
1911
+ <span class="cline-any cline-neutral">&nbsp;</span>
1912
+ <span class="cline-any cline-yes">26x</span>
1913
+ <span class="cline-any cline-no">&nbsp;</span>
1914
+ <span class="cline-any cline-neutral">&nbsp;</span>
1915
+ <span class="cline-any cline-neutral">&nbsp;</span>
1916
+ <span class="cline-any cline-yes">26x</span>
1917
+ <span class="cline-any cline-yes">24x</span>
1918
+ <span class="cline-any cline-yes">24x</span>
1919
+ <span class="cline-any cline-neutral">&nbsp;</span>
1920
+ <span class="cline-any cline-neutral">&nbsp;</span>
1921
+ <span class="cline-any cline-yes">2x</span>
1922
+ <span class="cline-any cline-neutral">&nbsp;</span>
1923
+ <span class="cline-any cline-neutral">&nbsp;</span>
1924
+ <span class="cline-any cline-neutral">&nbsp;</span>
1925
+ <span class="cline-any cline-yes">26x</span>
1926
+ <span class="cline-any cline-yes">26x</span>
1927
+ <span class="cline-any cline-yes">5x</span>
1928
+ <span class="cline-any cline-yes">5x</span>
1929
+ <span class="cline-any cline-neutral">&nbsp;</span>
1930
+ <span class="cline-any cline-neutral">&nbsp;</span>
1931
+ <span class="cline-any cline-yes">21x</span>
1932
+ <span class="cline-any cline-no">&nbsp;</span>
1933
+ <span class="cline-any cline-neutral">&nbsp;</span>
1934
+ <span class="cline-any cline-neutral">&nbsp;</span>
1935
+ <span class="cline-any cline-yes">21x</span>
1936
+ <span class="cline-any cline-yes">21x</span>
1937
+ <span class="cline-any cline-neutral">&nbsp;</span>
1938
+ <span class="cline-any cline-neutral">&nbsp;</span>
1939
+ <span class="cline-any cline-neutral">&nbsp;</span>
1940
+ <span class="cline-any cline-yes">250x</span>
1941
+ <span class="cline-any cline-yes">30x</span>
1942
+ <span class="cline-any cline-yes">21x</span>
1943
+ <span class="cline-any cline-yes">21x</span>
1944
+ <span class="cline-any cline-neutral">&nbsp;</span>
1945
+ <span class="cline-any cline-neutral">&nbsp;</span>
1946
+ <span class="cline-any cline-neutral">&nbsp;</span>
1947
+ <span class="cline-any cline-neutral">&nbsp;</span>
1948
+ <span class="cline-any cline-neutral">&nbsp;</span>
1949
+ <span class="cline-any cline-neutral">&nbsp;</span>
1950
+ <span class="cline-any cline-neutral">&nbsp;</span>
1951
+ <span class="cline-any cline-neutral">&nbsp;</span>
1952
+ <span class="cline-any cline-neutral">&nbsp;</span>
1953
+ <span class="cline-any cline-yes">12x</span>
1954
+ <span class="cline-any cline-neutral">&nbsp;</span>
1955
+ <span class="cline-any cline-yes">12x</span>
1956
+ <span class="cline-any cline-yes">12x</span>
1957
+ <span class="cline-any cline-neutral">&nbsp;</span>
1958
+ <span class="cline-any cline-neutral">&nbsp;</span>
1959
+ <span class="cline-any cline-neutral">&nbsp;</span>
1960
+ <span class="cline-any cline-neutral">&nbsp;</span>
1961
+ <span class="cline-any cline-yes">21x</span>
1962
+ <span class="cline-any cline-neutral">&nbsp;</span>
1963
+ <span class="cline-any cline-neutral">&nbsp;</span>
1964
+ <span class="cline-any cline-neutral">&nbsp;</span>
1965
+ <span class="cline-any cline-neutral">&nbsp;</span>
1966
+ <span class="cline-any cline-yes">21x</span>
1967
+ <span class="cline-any cline-neutral">&nbsp;</span>
1968
+ <span class="cline-any cline-neutral">&nbsp;</span>
1969
+ <span class="cline-any cline-neutral">&nbsp;</span>
1970
+ <span class="cline-any cline-yes">44x</span>
1971
+ <span class="cline-any cline-yes">44x</span>
1972
+ <span class="cline-any cline-yes">44x</span>
1973
+ <span class="cline-any cline-neutral">&nbsp;</span>
1974
+ <span class="cline-any cline-yes">44x</span>
1975
+ <span class="cline-any cline-yes">4x</span>
1976
+ <span class="cline-any cline-neutral">&nbsp;</span>
1977
+ <span class="cline-any cline-neutral">&nbsp;</span>
1978
+ <span class="cline-any cline-neutral">&nbsp;</span>
1979
+ <span class="cline-any cline-neutral">&nbsp;</span>
1980
+ <span class="cline-any cline-yes">44x</span>
1981
+ <span class="cline-any cline-neutral">&nbsp;</span>
1982
+ <span class="cline-any cline-neutral">&nbsp;</span>
1983
+ <span class="cline-any cline-neutral">&nbsp;</span>
1984
+ <span class="cline-any cline-yes">20x</span>
1985
+ <span class="cline-any cline-yes">4x</span>
1986
+ <span class="cline-any cline-neutral">&nbsp;</span>
1987
+ <span class="cline-any cline-neutral">&nbsp;</span>
1988
+ <span class="cline-any cline-neutral">&nbsp;</span>
1989
+ <span class="cline-any cline-neutral">&nbsp;</span>
1990
+ <span class="cline-any cline-yes">21x</span>
1991
+ <span class="cline-any cline-yes">21x</span>
1992
+ <span class="cline-any cline-yes">21x</span>
1993
+ <span class="cline-any cline-yes">21x</span>
1994
+ <span class="cline-any cline-neutral">&nbsp;</span>
1995
+ <span class="cline-any cline-neutral">&nbsp;</span>
1996
+ <span class="cline-any cline-yes">21x</span>
1997
+ <span class="cline-any cline-yes">21x</span>
1998
+ <span class="cline-any cline-yes">2x</span>
1999
+ <span class="cline-any cline-no">&nbsp;</span>
2000
+ <span class="cline-any cline-neutral">&nbsp;</span>
2001
+ <span class="cline-any cline-yes">2x</span>
2002
+ <span class="cline-any cline-neutral">&nbsp;</span>
2003
+ <span class="cline-any cline-yes">21x</span>
2004
+ <span class="cline-any cline-yes">21x</span>
2005
+ <span class="cline-any cline-yes">22x</span>
2006
+ <span class="cline-any cline-yes">22x</span>
2007
+ <span class="cline-any cline-yes">22x</span>
2008
+ <span class="cline-any cline-neutral">&nbsp;</span>
2009
+ <span class="cline-any cline-neutral">&nbsp;</span>
2010
+ <span class="cline-any cline-yes">5x</span>
2011
+ <span class="cline-any cline-no">&nbsp;</span>
2012
+ <span class="cline-any cline-neutral">&nbsp;</span>
2013
+ <span class="cline-any cline-neutral">&nbsp;</span>
2014
+ <span class="cline-any cline-yes">5x</span>
2015
+ <span class="cline-any cline-yes">5x</span>
2016
+ <span class="cline-any cline-yes">5x</span>
2017
+ <span class="cline-any cline-yes">5x</span>
2018
+ <span class="cline-any cline-yes">5x</span>
2019
+ <span class="cline-any cline-yes">5x</span>
2020
+ <span class="cline-any cline-neutral">&nbsp;</span>
2021
+ <span class="cline-any cline-yes">5x</span>
2022
+ <span class="cline-any cline-neutral">&nbsp;</span>
2023
+ <span class="cline-any cline-neutral">&nbsp;</span>
2024
+ <span class="cline-any cline-yes">5x</span>
2025
+ <span class="cline-any cline-no">&nbsp;</span>
2026
+ <span class="cline-any cline-no">&nbsp;</span>
2027
+ <span class="cline-any cline-neutral">&nbsp;</span>
2028
+ <span class="cline-any cline-neutral">&nbsp;</span>
2029
+ <span class="cline-any cline-neutral">&nbsp;</span>
2030
+ <span class="cline-any cline-neutral">&nbsp;</span>
2031
+ <span class="cline-any cline-no">&nbsp;</span>
2032
+ <span class="cline-any cline-no">&nbsp;</span>
2033
+ <span class="cline-any cline-neutral">&nbsp;</span>
2034
+ <span class="cline-any cline-neutral">&nbsp;</span>
2035
+ <span class="cline-any cline-neutral">&nbsp;</span>
2036
+ <span class="cline-any cline-yes">5x</span>
2037
+ <span class="cline-any cline-no">&nbsp;</span>
2038
+ <span class="cline-any cline-no">&nbsp;</span>
2039
+ <span class="cline-any cline-neutral">&nbsp;</span>
2040
+ <span class="cline-any cline-neutral">&nbsp;</span>
2041
+ <span class="cline-any cline-yes">5x</span>
2042
+ <span class="cline-any cline-no">&nbsp;</span>
2043
+ <span class="cline-any cline-neutral">&nbsp;</span>
2044
+ <span class="cline-any cline-neutral">&nbsp;</span>
2045
+ <span class="cline-any cline-neutral">&nbsp;</span>
2046
+ <span class="cline-any cline-neutral">&nbsp;</span>
2047
+ <span class="cline-any cline-yes">5x</span>
2048
+ <span class="cline-any cline-yes">5x</span>
2049
+ <span class="cline-any cline-yes">2x</span>
2050
+ <span class="cline-any cline-yes">2x</span>
2051
+ <span class="cline-any cline-neutral">&nbsp;</span>
2052
+ <span class="cline-any cline-neutral">&nbsp;</span>
2053
+ <span class="cline-any cline-yes">3x</span>
2054
+ <span class="cline-any cline-neutral">&nbsp;</span>
2055
+ <span class="cline-any cline-neutral">&nbsp;</span>
2056
+ <span class="cline-any cline-yes">3x</span>
2057
+ <span class="cline-any cline-yes">3x</span>
2058
+ <span class="cline-any cline-no">&nbsp;</span>
2059
+ <span class="cline-any cline-neutral">&nbsp;</span>
2060
+ <span class="cline-any cline-yes">3x</span>
2061
+ <span class="cline-any cline-yes">3x</span>
2062
+ <span class="cline-any cline-neutral">&nbsp;</span>
2063
+ <span class="cline-any cline-neutral">&nbsp;</span>
2064
+ <span class="cline-any cline-yes">3x</span>
2065
+ <span class="cline-any cline-no">&nbsp;</span>
2066
+ <span class="cline-any cline-no">&nbsp;</span>
2067
+ <span class="cline-any cline-neutral">&nbsp;</span>
2068
+ <span class="cline-any cline-no">&nbsp;</span>
2069
+ <span class="cline-any cline-no">&nbsp;</span>
2070
+ <span class="cline-any cline-no">&nbsp;</span>
2071
+ <span class="cline-any cline-neutral">&nbsp;</span>
2072
+ <span class="cline-any cline-neutral">&nbsp;</span>
2073
+ <span class="cline-any cline-yes">3x</span>
2074
+ <span class="cline-any cline-yes">3x</span>
2075
+ <span class="cline-any cline-neutral">&nbsp;</span>
2076
+ <span class="cline-any cline-neutral">&nbsp;</span>
2077
+ <span class="cline-any cline-neutral">&nbsp;</span>
2078
+ <span class="cline-any cline-neutral">&nbsp;</span>
2079
+ <span class="cline-any cline-neutral">&nbsp;</span>
2080
+ <span class="cline-any cline-no">&nbsp;</span>
2081
+ <span class="cline-any cline-neutral">&nbsp;</span>
2082
+ <span class="cline-any cline-neutral">&nbsp;</span>
2083
+ <span class="cline-any cline-neutral">&nbsp;</span>
2084
+ <span class="cline-any cline-yes">22x</span>
2085
+ <span class="cline-any cline-no">&nbsp;</span>
2086
+ <span class="cline-any cline-neutral">&nbsp;</span>
2087
+ <span class="cline-any cline-yes">22x</span>
2088
+ <span class="cline-any cline-yes">22x</span>
2089
+ <span class="cline-any cline-neutral">&nbsp;</span>
2090
+ <span class="cline-any cline-neutral">&nbsp;</span>
2091
+ <span class="cline-any cline-neutral">&nbsp;</span>
2092
+ <span class="cline-any cline-neutral">&nbsp;</span>
2093
+ <span class="cline-any cline-neutral">&nbsp;</span>
2094
+ <span class="cline-any cline-neutral">&nbsp;</span>
2095
+ <span class="cline-any cline-yes">9x</span>
2096
+ <span class="cline-any cline-yes">9x</span>
2097
+ <span class="cline-any cline-yes">9x</span>
2098
+ <span class="cline-any cline-yes">9x</span>
2099
+ <span class="cline-any cline-yes">9x</span>
2100
+ <span class="cline-any cline-yes">9x</span>
2101
+ <span class="cline-any cline-yes">9x</span>
2102
+ <span class="cline-any cline-neutral">&nbsp;</span>
2103
+ <span class="cline-any cline-yes">9x</span>
2104
+ <span class="cline-any cline-yes">9x</span>
2105
+ <span class="cline-any cline-yes">9x</span>
2106
+ <span class="cline-any cline-yes">9x</span>
2107
+ <span class="cline-any cline-yes">9x</span>
2108
+ <span class="cline-any cline-yes">9x</span>
2109
+ <span class="cline-any cline-neutral">&nbsp;</span>
2110
+ <span class="cline-any cline-neutral">&nbsp;</span>
2111
+ <span class="cline-any cline-neutral">&nbsp;</span>
2112
+ <span class="cline-any cline-neutral">&nbsp;</span>
2113
+ <span class="cline-any cline-neutral">&nbsp;</span>
2114
+ <span class="cline-any cline-neutral">&nbsp;</span>
2115
+ <span class="cline-any cline-neutral">&nbsp;</span>
2116
+ <span class="cline-any cline-neutral">&nbsp;</span>
2117
+ <span class="cline-any cline-neutral">&nbsp;</span>
2118
+ <span class="cline-any cline-neutral">&nbsp;</span>
2119
+ <span class="cline-any cline-yes">9x</span>
2120
+ <span class="cline-any cline-yes">9x</span>
2121
+ <span class="cline-any cline-yes">9x</span>
2122
+ <span class="cline-any cline-yes">9x</span>
2123
+ <span class="cline-any cline-yes">9x</span>
2124
+ <span class="cline-any cline-yes">9x</span>
2125
+ <span class="cline-any cline-yes">9x</span>
2126
+ <span class="cline-any cline-yes">9x</span>
2127
+ <span class="cline-any cline-neutral">&nbsp;</span>
2128
+ <span class="cline-any cline-neutral">&nbsp;</span>
2129
+ <span class="cline-any cline-neutral">&nbsp;</span>
2130
+ <span class="cline-any cline-neutral">&nbsp;</span>
2131
+ <span class="cline-any cline-neutral">&nbsp;</span>
2132
+ <span class="cline-any cline-neutral">&nbsp;</span>
2133
+ <span class="cline-any cline-neutral">&nbsp;</span>
2134
+ <span class="cline-any cline-neutral">&nbsp;</span>
2135
+ <span class="cline-any cline-neutral">&nbsp;</span>
2136
+ <span class="cline-any cline-neutral">&nbsp;</span>
2137
+ <span class="cline-any cline-neutral">&nbsp;</span>
2138
+ <span class="cline-any cline-neutral">&nbsp;</span>
2139
+ <span class="cline-any cline-neutral">&nbsp;</span>
2140
+ <span class="cline-any cline-yes">14x</span>
2141
+ <span class="cline-any cline-yes">14x</span>
2142
+ <span class="cline-any cline-yes">14x</span>
2143
+ <span class="cline-any cline-yes">13x</span>
2144
+ <span class="cline-any cline-yes">13x</span>
2145
+ <span class="cline-any cline-yes">13x</span>
2146
+ <span class="cline-any cline-neutral">&nbsp;</span>
2147
+ <span class="cline-any cline-neutral">&nbsp;</span>
2148
+ <span class="cline-any cline-neutral">&nbsp;</span>
2149
+ <span class="cline-any cline-neutral">&nbsp;</span>
2150
+ <span class="cline-any cline-neutral">&nbsp;</span>
2151
+ <span class="cline-any cline-neutral">&nbsp;</span>
2152
+ <span class="cline-any cline-neutral">&nbsp;</span>
2153
+ <span class="cline-any cline-neutral">&nbsp;</span>
2154
+ <span class="cline-any cline-neutral">&nbsp;</span>
2155
+ <span class="cline-any cline-neutral">&nbsp;</span>
2156
+ <span class="cline-any cline-neutral">&nbsp;</span>
2157
+ <span class="cline-any cline-neutral">&nbsp;</span>
2158
+ <span class="cline-any cline-neutral">&nbsp;</span>
2159
+ <span class="cline-any cline-yes">43x</span>
2160
+ <span class="cline-any cline-yes">43x</span>
2161
+ <span class="cline-any cline-yes">43x</span>
2162
+ <span class="cline-any cline-neutral">&nbsp;</span>
2163
+ <span class="cline-any cline-no">&nbsp;</span>
2164
+ <span class="cline-any cline-no">&nbsp;</span>
2165
+ <span class="cline-any cline-neutral">&nbsp;</span>
2166
+ <span class="cline-any cline-neutral">&nbsp;</span>
2167
+ <span class="cline-any cline-yes">43x</span>
2168
+ <span class="cline-any cline-yes">43x</span>
2169
+ <span class="cline-any cline-yes">43x</span>
2170
+ <span class="cline-any cline-neutral">&nbsp;</span>
2171
+ <span class="cline-any cline-no">&nbsp;</span>
2172
+ <span class="cline-any cline-no">&nbsp;</span>
2173
+ <span class="cline-any cline-neutral">&nbsp;</span>
2174
+ <span class="cline-any cline-neutral">&nbsp;</span>
2175
+ <span class="cline-any cline-yes">43x</span>
2176
+ <span class="cline-any cline-yes">43x</span>
2177
+ <span class="cline-any cline-neutral">&nbsp;</span>
2178
+ <span class="cline-any cline-neutral">&nbsp;</span>
2179
+ <span class="cline-any cline-yes">43x</span>
2180
+ <span class="cline-any cline-yes">43x</span>
2181
+ <span class="cline-any cline-neutral">&nbsp;</span>
2182
+ <span class="cline-any cline-no">&nbsp;</span>
2183
+ <span class="cline-any cline-no">&nbsp;</span>
2184
+ <span class="cline-any cline-no">&nbsp;</span>
2185
+ <span class="cline-any cline-neutral">&nbsp;</span>
2186
+ <span class="cline-any cline-neutral">&nbsp;</span>
2187
+ <span class="cline-any cline-neutral">&nbsp;</span>
2188
+ <span class="cline-any cline-neutral">&nbsp;</span>
2189
+ <span class="cline-any cline-neutral">&nbsp;</span>
2190
+ <span class="cline-any cline-no">&nbsp;</span>
2191
+ <span class="cline-any cline-no">&nbsp;</span>
2192
+ <span class="cline-any cline-no">&nbsp;</span>
2193
+ <span class="cline-any cline-no">&nbsp;</span>
2194
+ <span class="cline-any cline-no">&nbsp;</span>
2195
+ <span class="cline-any cline-neutral">&nbsp;</span>
2196
+ <span class="cline-any cline-no">&nbsp;</span>
2197
+ <span class="cline-any cline-no">&nbsp;</span>
2198
+ <span class="cline-any cline-no">&nbsp;</span>
2199
+ <span class="cline-any cline-neutral">&nbsp;</span>
2200
+ <span class="cline-any cline-no">&nbsp;</span>
2201
+ <span class="cline-any cline-neutral">&nbsp;</span>
2202
+ <span class="cline-any cline-neutral">&nbsp;</span>
2203
+ <span class="cline-any cline-no">&nbsp;</span>
2204
+ <span class="cline-any cline-no">&nbsp;</span>
2205
+ <span class="cline-any cline-neutral">&nbsp;</span>
2206
+ <span class="cline-any cline-no">&nbsp;</span>
2207
+ <span class="cline-any cline-no">&nbsp;</span>
2208
+ <span class="cline-any cline-neutral">&nbsp;</span>
2209
+ <span class="cline-any cline-neutral">&nbsp;</span>
2210
+ <span class="cline-any cline-neutral">&nbsp;</span>
2211
+ <span class="cline-any cline-neutral">&nbsp;</span>
2212
+ <span class="cline-any cline-yes">3x</span>
2213
+ <span class="cline-any cline-yes">3x</span>
2214
+ <span class="cline-any cline-yes">18x</span>
2215
+ <span class="cline-any cline-yes">18x</span>
2216
+ <span class="cline-any cline-neutral">&nbsp;</span>
2217
+ <span class="cline-any cline-yes">3x</span>
2218
+ <span class="cline-any cline-yes">3x</span>
2219
+ <span class="cline-any cline-yes">3x</span>
2220
+ <span class="cline-any cline-yes">36x</span>
2221
+ <span class="cline-any cline-yes">3x</span>
2222
+ <span class="cline-any cline-no">&nbsp;</span>
2223
+ <span class="cline-any cline-neutral">&nbsp;</span>
2224
+ <span class="cline-any cline-yes">3x</span>
2225
+ <span class="cline-any cline-neutral">&nbsp;</span>
2226
+ <span class="cline-any cline-neutral">&nbsp;</span>
2227
+ <span class="cline-any cline-neutral">&nbsp;</span>
2228
+ <span class="cline-any cline-neutral">&nbsp;</span>
2229
+ <span class="cline-any cline-yes">21x</span>
2230
+ <span class="cline-any cline-yes">21x</span>
2231
+ <span class="cline-any cline-yes">21x</span>
2232
+ <span class="cline-any cline-yes">21x</span>
2233
+ <span class="cline-any cline-neutral">&nbsp;</span>
2234
+ <span class="cline-any cline-neutral">&nbsp;</span>
2235
+ <span class="cline-any cline-yes">21x</span>
2236
+ <span class="cline-any cline-yes">21x</span>
2237
+ <span class="cline-any cline-yes">2x</span>
2238
+ <span class="cline-any cline-no">&nbsp;</span>
2239
+ <span class="cline-any cline-neutral">&nbsp;</span>
2240
+ <span class="cline-any cline-yes">2x</span>
2241
+ <span class="cline-any cline-neutral">&nbsp;</span>
2242
+ <span class="cline-any cline-yes">21x</span>
2243
+ <span class="cline-any cline-yes">21x</span>
2244
+ <span class="cline-any cline-yes">22x</span>
2245
+ <span class="cline-any cline-yes">22x</span>
2246
+ <span class="cline-any cline-yes">22x</span>
2247
+ <span class="cline-any cline-neutral">&nbsp;</span>
2248
+ <span class="cline-any cline-neutral">&nbsp;</span>
2249
+ <span class="cline-any cline-yes">39x</span>
2250
+ <span class="cline-any cline-no">&nbsp;</span>
2251
+ <span class="cline-any cline-neutral">&nbsp;</span>
2252
+ <span class="cline-any cline-neutral">&nbsp;</span>
2253
+ <span class="cline-any cline-yes">39x</span>
2254
+ <span class="cline-any cline-yes">39x</span>
2255
+ <span class="cline-any cline-yes">39x</span>
2256
+ <span class="cline-any cline-yes">39x</span>
2257
+ <span class="cline-any cline-yes">39x</span>
2258
+ <span class="cline-any cline-yes">39x</span>
2259
+ <span class="cline-any cline-neutral">&nbsp;</span>
2260
+ <span class="cline-any cline-yes">39x</span>
2261
+ <span class="cline-any cline-neutral">&nbsp;</span>
2262
+ <span class="cline-any cline-neutral">&nbsp;</span>
2263
+ <span class="cline-any cline-yes">39x</span>
2264
+ <span class="cline-any cline-no">&nbsp;</span>
2265
+ <span class="cline-any cline-no">&nbsp;</span>
2266
+ <span class="cline-any cline-neutral">&nbsp;</span>
2267
+ <span class="cline-any cline-neutral">&nbsp;</span>
2268
+ <span class="cline-any cline-neutral">&nbsp;</span>
2269
+ <span class="cline-any cline-neutral">&nbsp;</span>
2270
+ <span class="cline-any cline-no">&nbsp;</span>
2271
+ <span class="cline-any cline-no">&nbsp;</span>
2272
+ <span class="cline-any cline-neutral">&nbsp;</span>
2273
+ <span class="cline-any cline-neutral">&nbsp;</span>
2274
+ <span class="cline-any cline-neutral">&nbsp;</span>
2275
+ <span class="cline-any cline-yes">39x</span>
2276
+ <span class="cline-any cline-no">&nbsp;</span>
2277
+ <span class="cline-any cline-no">&nbsp;</span>
2278
+ <span class="cline-any cline-neutral">&nbsp;</span>
2279
+ <span class="cline-any cline-neutral">&nbsp;</span>
2280
+ <span class="cline-any cline-yes">39x</span>
2281
+ <span class="cline-any cline-no">&nbsp;</span>
2282
+ <span class="cline-any cline-neutral">&nbsp;</span>
2283
+ <span class="cline-any cline-neutral">&nbsp;</span>
2284
+ <span class="cline-any cline-neutral">&nbsp;</span>
2285
+ <span class="cline-any cline-neutral">&nbsp;</span>
2286
+ <span class="cline-any cline-yes">39x</span>
2287
+ <span class="cline-any cline-yes">39x</span>
2288
+ <span class="cline-any cline-yes">1x</span>
2289
+ <span class="cline-any cline-yes">1x</span>
2290
+ <span class="cline-any cline-neutral">&nbsp;</span>
2291
+ <span class="cline-any cline-neutral">&nbsp;</span>
2292
+ <span class="cline-any cline-yes">38x</span>
2293
+ <span class="cline-any cline-neutral">&nbsp;</span>
2294
+ <span class="cline-any cline-neutral">&nbsp;</span>
2295
+ <span class="cline-any cline-yes">38x</span>
2296
+ <span class="cline-any cline-yes">29x</span>
2297
+ <span class="cline-any cline-yes">4x</span>
2298
+ <span class="cline-any cline-neutral">&nbsp;</span>
2299
+ <span class="cline-any cline-yes">25x</span>
2300
+ <span class="cline-any cline-yes">25x</span>
2301
+ <span class="cline-any cline-neutral">&nbsp;</span>
2302
+ <span class="cline-any cline-neutral">&nbsp;</span>
2303
+ <span class="cline-any cline-yes">38x</span>
2304
+ <span class="cline-any cline-yes">17x</span>
2305
+ <span class="cline-any cline-yes">4x</span>
2306
+ <span class="cline-any cline-neutral">&nbsp;</span>
2307
+ <span class="cline-any cline-yes">13x</span>
2308
+ <span class="cline-any cline-yes">13x</span>
2309
+ <span class="cline-any cline-yes">13x</span>
2310
+ <span class="cline-any cline-neutral">&nbsp;</span>
2311
+ <span class="cline-any cline-neutral">&nbsp;</span>
2312
+ <span class="cline-any cline-yes">38x</span>
2313
+ <span class="cline-any cline-yes">38x</span>
2314
+ <span class="cline-any cline-neutral">&nbsp;</span>
2315
+ <span class="cline-any cline-neutral">&nbsp;</span>
2316
+ <span class="cline-any cline-neutral">&nbsp;</span>
2317
+ <span class="cline-any cline-neutral">&nbsp;</span>
2318
+ <span class="cline-any cline-neutral">&nbsp;</span>
2319
+ <span class="cline-any cline-yes">4x</span>
2320
+ <span class="cline-any cline-neutral">&nbsp;</span>
2321
+ <span class="cline-any cline-neutral">&nbsp;</span>
2322
+ <span class="cline-any cline-neutral">&nbsp;</span>
2323
+ <span class="cline-any cline-yes">22x</span>
2324
+ <span class="cline-any cline-no">&nbsp;</span>
2325
+ <span class="cline-any cline-neutral">&nbsp;</span>
2326
+ <span class="cline-any cline-yes">22x</span>
2327
+ <span class="cline-any cline-yes">22x</span>
2328
+ <span class="cline-any cline-neutral">&nbsp;</span>
2329
+ <span class="cline-any cline-neutral">&nbsp;</span>
2330
+ <span class="cline-any cline-neutral">&nbsp;</span>
2331
+ <span class="cline-any cline-neutral">&nbsp;</span>
2332
+ <span class="cline-any cline-neutral">&nbsp;</span>
2333
+ <span class="cline-any cline-neutral">&nbsp;</span>
2334
+ <span class="cline-any cline-neutral">&nbsp;</span>
2335
+ <span class="cline-any cline-yes">34x</span>
2336
+ <span class="cline-any cline-yes">34x</span>
2337
+ <span class="cline-any cline-neutral">&nbsp;</span>
2338
+ <span class="cline-any cline-no">&nbsp;</span>
2339
+ <span class="cline-any cline-no">&nbsp;</span>
2340
+ <span class="cline-any cline-neutral">&nbsp;</span>
2341
+ <span class="cline-any cline-yes">34x</span>
2342
+ <span class="cline-any cline-yes">34x</span>
2343
+ <span class="cline-any cline-no">&nbsp;</span>
2344
+ <span class="cline-any cline-no">&nbsp;</span>
2345
+ <span class="cline-any cline-neutral">&nbsp;</span>
2346
+ <span class="cline-any cline-yes">34x</span>
2347
+ <span class="cline-any cline-yes">34x</span>
2348
+ <span class="cline-any cline-yes">34x</span>
2349
+ <span class="cline-any cline-yes">34x</span>
2350
+ <span class="cline-any cline-neutral">&nbsp;</span>
2351
+ <span class="cline-any cline-no">&nbsp;</span>
2352
+ <span class="cline-any cline-no">&nbsp;</span>
2353
+ <span class="cline-any cline-neutral">&nbsp;</span>
2354
+ <span class="cline-any cline-neutral">&nbsp;</span>
2355
+ <span class="cline-any cline-neutral">&nbsp;</span>
2356
+ <span class="cline-any cline-neutral">&nbsp;</span>
2357
+ <span class="cline-any cline-yes">34x</span>
2358
+ <span class="cline-any cline-yes">34x</span>
2359
+ <span class="cline-any cline-no">&nbsp;</span>
2360
+ <span class="cline-any cline-neutral">&nbsp;</span>
2361
+ <span class="cline-any cline-neutral">&nbsp;</span>
2362
+ <span class="cline-any cline-no">&nbsp;</span>
2363
+ <span class="cline-any cline-neutral">&nbsp;</span>
2364
+ <span class="cline-any cline-yes">34x</span>
2365
+ <span class="cline-any cline-yes">30x</span>
2366
+ <span class="cline-any cline-yes">30x</span>
2367
+ <span class="cline-any cline-neutral">&nbsp;</span>
2368
+ <span class="cline-any cline-neutral">&nbsp;</span>
2369
+ <span class="cline-any cline-yes">30x</span>
2370
+ <span class="cline-any cline-neutral">&nbsp;</span>
2371
+ <span class="cline-any cline-no">&nbsp;</span>
2372
+ <span class="cline-any cline-neutral">&nbsp;</span>
2373
+ <span class="cline-any cline-yes">4x</span>
2374
+ <span class="cline-any cline-no">&nbsp;</span>
2375
+ <span class="cline-any cline-no">&nbsp;</span>
2376
+ <span class="cline-any cline-no">&nbsp;</span>
2377
+ <span class="cline-any cline-no">&nbsp;</span>
2378
+ <span class="cline-any cline-neutral">&nbsp;</span>
2379
+ <span class="cline-any cline-yes">4x</span>
2380
+ <span class="cline-any cline-yes">4x</span>
2381
+ <span class="cline-any cline-neutral">&nbsp;</span>
2382
+ <span class="cline-any cline-neutral">&nbsp;</span>
2383
+ <span class="cline-any cline-neutral">&nbsp;</span>
2384
+ <span class="cline-any cline-neutral">&nbsp;</span>
2385
+ <span class="cline-any cline-yes">4x</span>
2386
+ <span class="cline-any cline-yes">9x</span>
2387
+ <span class="cline-any cline-yes">9x</span>
2388
+ <span class="cline-any cline-yes">9x</span>
2389
+ <span class="cline-any cline-neutral">&nbsp;</span>
2390
+ <span class="cline-any cline-yes">9x</span>
2391
+ <span class="cline-any cline-neutral">&nbsp;</span>
2392
+ <span class="cline-any cline-yes">9x</span>
2393
+ <span class="cline-any cline-neutral">&nbsp;</span>
2394
+ <span class="cline-any cline-neutral">&nbsp;</span>
2395
+ <span class="cline-any cline-yes">4x</span>
2396
+ <span class="cline-any cline-yes">4x</span>
2397
+ <span class="cline-any cline-neutral">&nbsp;</span>
2398
+ <span class="cline-any cline-neutral">&nbsp;</span>
2399
+ <span class="cline-any cline-neutral">&nbsp;</span>
2400
+ <span class="cline-any cline-yes">4x</span>
2401
+ <span class="cline-any cline-yes">4x</span>
2402
+ <span class="cline-any cline-no">&nbsp;</span>
2403
+ <span class="cline-any cline-no">&nbsp;</span>
2404
+ <span class="cline-any cline-no">&nbsp;</span>
2405
+ <span class="cline-any cline-no">&nbsp;</span>
2406
+ <span class="cline-any cline-no">&nbsp;</span>
2407
+ <span class="cline-any cline-neutral">&nbsp;</span>
2408
+ <span class="cline-any cline-neutral">&nbsp;</span>
2409
+ <span class="cline-any cline-neutral">&nbsp;</span>
2410
+ <span class="cline-any cline-yes">4x</span>
2411
+ <span class="cline-any cline-no">&nbsp;</span>
2412
+ <span class="cline-any cline-no">&nbsp;</span>
2413
+ <span class="cline-any cline-no">&nbsp;</span>
2414
+ <span class="cline-any cline-no">&nbsp;</span>
2415
+ <span class="cline-any cline-no">&nbsp;</span>
2416
+ <span class="cline-any cline-no">&nbsp;</span>
2417
+ <span class="cline-any cline-neutral">&nbsp;</span>
2418
+ <span class="cline-any cline-neutral">&nbsp;</span>
2419
+ <span class="cline-any cline-neutral">&nbsp;</span>
2420
+ <span class="cline-any cline-yes">4x</span>
2421
+ <span class="cline-any cline-yes">1x</span>
2422
+ <span class="cline-any cline-yes">1x</span>
2423
+ <span class="cline-any cline-yes">1x</span>
2424
+ <span class="cline-any cline-no">&nbsp;</span>
2425
+ <span class="cline-any cline-no">&nbsp;</span>
2426
+ <span class="cline-any cline-neutral">&nbsp;</span>
2427
+ <span class="cline-any cline-yes">1x</span>
2428
+ <span class="cline-any cline-neutral">&nbsp;</span>
2429
+ <span class="cline-any cline-neutral">&nbsp;</span>
2430
+ <span class="cline-any cline-neutral">&nbsp;</span>
2431
+ <span class="cline-any cline-yes">4x</span>
2432
+ <span class="cline-any cline-yes">4x</span>
2433
+ <span class="cline-any cline-yes">4x</span>
2434
+ <span class="cline-any cline-yes">4x</span>
2435
+ <span class="cline-any cline-yes">4x</span>
2436
+ <span class="cline-any cline-yes">4x</span>
2437
+ <span class="cline-any cline-neutral">&nbsp;</span>
2438
+ <span class="cline-any cline-neutral">&nbsp;</span>
2439
+ <span class="cline-any cline-neutral">&nbsp;</span>
2440
+ <span class="cline-any cline-neutral">&nbsp;</span>
2441
+ <span class="cline-any cline-neutral">&nbsp;</span>
2442
+ <span class="cline-any cline-yes">250x</span>
2443
+ <span class="cline-any cline-yes">30x</span>
2444
+ <span class="cline-any cline-yes">21x</span>
2445
+ <span class="cline-any cline-yes">21x</span>
2446
+ <span class="cline-any cline-neutral">&nbsp;</span>
2447
+ <span class="cline-any cline-neutral">&nbsp;</span>
2448
+ <span class="cline-any cline-neutral">&nbsp;</span>
2449
+ <span class="cline-any cline-neutral">&nbsp;</span>
2450
+ <span class="cline-any cline-neutral">&nbsp;</span>
2451
+ <span class="cline-any cline-neutral">&nbsp;</span>
2452
+ <span class="cline-any cline-neutral">&nbsp;</span>
2453
+ <span class="cline-any cline-neutral">&nbsp;</span>
2454
+ <span class="cline-any cline-yes">66x</span>
2455
+ <span class="cline-any cline-yes">66x</span>
2456
+ <span class="cline-any cline-yes">40x</span>
2457
+ <span class="cline-any cline-yes">40x</span>
2458
+ <span class="cline-any cline-neutral">&nbsp;</span>
2459
+ <span class="cline-any cline-neutral">&nbsp;</span>
2460
+ <span class="cline-any cline-yes">26x</span>
2461
+ <span class="cline-any cline-no">&nbsp;</span>
2462
+ <span class="cline-any cline-neutral">&nbsp;</span>
2463
+ <span class="cline-any cline-neutral">&nbsp;</span>
2464
+ <span class="cline-any cline-yes">26x</span>
2465
+ <span class="cline-any cline-yes">26x</span>
2466
+ <span class="cline-any cline-neutral">&nbsp;</span>
2467
+ <span class="cline-any cline-neutral">&nbsp;</span>
2468
+ <span class="cline-any cline-neutral">&nbsp;</span>
2469
+ <span class="cline-any cline-neutral">&nbsp;</span>
2470
+ <span class="cline-any cline-yes">26x</span>
2471
+ <span class="cline-any cline-yes">26x</span>
2472
+ <span class="cline-any cline-neutral">&nbsp;</span>
2473
+ <span class="cline-any cline-neutral">&nbsp;</span>
2474
+ <span class="cline-any cline-neutral">&nbsp;</span>
2475
+ <span class="cline-any cline-neutral">&nbsp;</span>
2476
+ <span class="cline-any cline-neutral">&nbsp;</span>
2477
+ <span class="cline-any cline-neutral">&nbsp;</span>
2478
+ <span class="cline-any cline-neutral">&nbsp;</span>
2479
+ <span class="cline-any cline-neutral">&nbsp;</span>
2480
+ <span class="cline-any cline-yes">26x</span>
2481
+ <span class="cline-any cline-yes">26x</span>
2482
+ <span class="cline-any cline-yes">26x</span>
2483
+ <span class="cline-any cline-yes">27x</span>
2484
+ <span class="cline-any cline-yes">26x</span>
2485
+ <span class="cline-any cline-yes">26x</span>
2486
+ <span class="cline-any cline-neutral">&nbsp;</span>
2487
+ <span class="cline-any cline-no">&nbsp;</span>
2488
+ <span class="cline-any cline-no">&nbsp;</span>
2489
+ <span class="cline-any cline-no">&nbsp;</span>
2490
+ <span class="cline-any cline-no">&nbsp;</span>
2491
+ <span class="cline-any cline-no">&nbsp;</span>
2492
+ <span class="cline-any cline-neutral">&nbsp;</span>
2493
+ <span class="cline-any cline-no">&nbsp;</span>
2494
+ <span class="cline-any cline-no">&nbsp;</span>
2495
+ <span class="cline-any cline-no">&nbsp;</span>
2496
+ <span class="cline-any cline-no">&nbsp;</span>
2497
+ <span class="cline-any cline-neutral">&nbsp;</span>
2498
+ <span class="cline-any cline-no">&nbsp;</span>
2499
+ <span class="cline-any cline-neutral">&nbsp;</span>
2500
+ <span class="cline-any cline-neutral">&nbsp;</span>
2501
+ <span class="cline-any cline-neutral">&nbsp;</span>
2502
+ <span class="cline-any cline-yes">26x</span>
2503
+ <span class="cline-any cline-yes">26x</span>
2504
+ <span class="cline-any cline-neutral">&nbsp;</span>
2505
+ <span class="cline-any cline-neutral">&nbsp;</span>
2506
+ <span class="cline-any cline-neutral">&nbsp;</span>
2507
+ <span class="cline-any cline-yes">97x</span>
2508
+ <span class="cline-any cline-yes">4x</span>
2509
+ <span class="cline-any cline-yes">4x</span>
2510
+ <span class="cline-any cline-no">&nbsp;</span>
2511
+ <span class="cline-any cline-neutral">&nbsp;</span>
2512
+ <span class="cline-any cline-neutral">&nbsp;</span>
2513
+ <span class="cline-any cline-yes">4x</span>
2514
+ <span class="cline-any cline-yes">4x</span>
2515
+ <span class="cline-any cline-yes">4x</span>
2516
+ <span class="cline-any cline-no">&nbsp;</span>
2517
+ <span class="cline-any cline-neutral">&nbsp;</span>
2518
+ <span class="cline-any cline-yes">4x</span>
2519
+ <span class="cline-any cline-yes">4x</span>
2520
+ <span class="cline-any cline-neutral">&nbsp;</span>
2521
+ <span class="cline-any cline-no">&nbsp;</span>
2522
+ <span class="cline-any cline-neutral">&nbsp;</span>
2523
+ <span class="cline-any cline-neutral">&nbsp;</span>
2524
+ <span class="cline-any cline-neutral">&nbsp;</span>
2525
+ <span class="cline-any cline-yes">97x</span>
2526
+ <span class="cline-any cline-neutral">&nbsp;</span>
2527
+ <span class="cline-any cline-neutral">&nbsp;</span>
2528
+ <span class="cline-any cline-neutral">&nbsp;</span>
2529
+ <span class="cline-any cline-no">&nbsp;</span>
2530
+ <span class="cline-any cline-no">&nbsp;</span>
2531
+ <span class="cline-any cline-no">&nbsp;</span>
2532
+ <span class="cline-any cline-no">&nbsp;</span>
2533
+ <span class="cline-any cline-no">&nbsp;</span>
2534
+ <span class="cline-any cline-no">&nbsp;</span>
2535
+ <span class="cline-any cline-neutral">&nbsp;</span>
2536
+ <span class="cline-any cline-neutral">&nbsp;</span>
2537
+ <span class="cline-any cline-neutral">&nbsp;</span>
2538
+ <span class="cline-any cline-yes">14x</span>
2539
+ <span class="cline-any cline-neutral">&nbsp;</span>
2540
+ <span class="cline-any cline-yes">14x</span>
2541
+ <span class="cline-any cline-yes">13x</span>
2542
+ <span class="cline-any cline-yes">13x</span>
2543
+ <span class="cline-any cline-neutral">&nbsp;</span>
2544
+ <span class="cline-any cline-neutral">&nbsp;</span>
2545
+ <span class="cline-any cline-yes">1x</span>
2546
+ <span class="cline-any cline-no">&nbsp;</span>
2547
+ <span class="cline-any cline-neutral">&nbsp;</span>
2548
+ <span class="cline-any cline-neutral">&nbsp;</span>
2549
+ <span class="cline-any cline-yes">1x</span>
2550
+ <span class="cline-any cline-yes">1x</span>
2551
+ <span class="cline-any cline-yes">1x</span>
2552
+ <span class="cline-any cline-neutral">&nbsp;</span>
2553
+ <span class="cline-any cline-neutral">&nbsp;</span>
2554
+ <span class="cline-any cline-neutral">&nbsp;</span>
2555
+ <span class="cline-any cline-yes">1x</span>
2556
+ <span class="cline-any cline-neutral">&nbsp;</span>
2557
+ <span class="cline-any cline-yes">1x</span>
2558
+ <span class="cline-any cline-yes">1x</span>
2559
+ <span class="cline-any cline-neutral">&nbsp;</span>
2560
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable no-empty,consistent-return,no-async-promise-executor,@typescript-eslint/no-unused-vars */
2561
+ &nbsp;
2562
+ import { EventEmitter, once } from 'events';
2563
+ import { promisify } from 'util';
2564
+ import moment from 'moment';
2565
+ import RedisLock from 'redis-lock';
2566
+ import {
2567
+ AmqpConnectionManager, ChannelWrapper, connect, CreateChannelOpts,
2568
+ } from 'amqp-connection-manager';
2569
+ import {
2570
+ ConfirmChannel, ConsumeMessage, Options, Replies,
2571
+ } from 'amqplib';
2572
+ import {
2573
+ getCurrentPayload, newTrace, traceTypes, createOrSetRabbitTrace, outbreak,
2574
+ } from '@autofleet/zehut';
2575
+ import { randomUUID } from 'node:crypto';
2576
+ import axios from 'axios';
2577
+ import logger from './logger';
2578
+ import RabbitError from './lib/rabbitError';
2579
+ import getRedisInstance, { RedisConfig } from './lib/redis';
2580
+ import { assertExchangeFanout, rand, wrapSetImmediate } from './lib/utils';
2581
+ import {
2582
+ AUTOMATION_ID_HEADER,
2583
+ CONNECTION_CREATED_CONST,
2584
+ CONNECTION_FAILED_CONST,
2585
+ DEFAULT_LOCK_TIMEOUT,
2586
+ DEFAULT_OPTIONS,
2587
+ RETRY_HEADER,
2588
+ TRACING_HEADER,
2589
+ USER_OBJECT,
2590
+ USER_TRACING_HEADER,
2591
+ } from './lib/consts';
2592
+ import {
2593
+ CallbackFunction,
2594
+ ConsumeMessageOrNull,
2595
+ ConsumeOptions,
2596
+ CustomMessageHeaders,
2597
+ QueuesCache,
2598
+ RedisLockType,
2599
+ ExchangesCache,
2600
+ CONSUMER_DEFAULT_OPTIONS,
2601
+ QueueSetupPromisesDictionary,
2602
+ AssertExchangePromisesDictionary,
2603
+ } from './lib/types';
2604
+ &nbsp;
2605
+ // const debug = nodeDebug('af-rabbitmq')
2606
+ const debug = logger.debug.bind(logger);
2607
+ &nbsp;
2608
+ const PUBLISH_TIMEOUT = 1000 * 10;
2609
+ &nbsp;
2610
+ export interface IAfRabbitMq {
2611
+ ack: any;
2612
+ nack: any;
2613
+ assertChannel: any;
2614
+ assertExchange: any;
2615
+ assertQueue: any;
2616
+ consume: any;
2617
+ consumeFromExchange: any;
2618
+ publish: any;
2619
+ sendToQueue: any;
2620
+ redisClient?: any;
2621
+ }
2622
+ &nbsp;
2623
+ interface NackOptions {
2624
+ skipRetry?: boolean;
2625
+ }
2626
+ &nbsp;
2627
+ export interface AfRabbitOptions {
2628
+ disableReconnect?: boolean;
2629
+ &nbsp;
2630
+ /**
2631
+ * When you want your own grace-full shutdown, set this to true.
2632
+ * @default false
2633
+ */
2634
+ dontGracefulShutdown?: boolean;
2635
+ &nbsp;
2636
+ /**
2637
+ * dont retry on creation error
2638
+ * @default false
2639
+ */
2640
+ dontRetryAssert?: boolean;
2641
+ &nbsp;
2642
+ rabbitHost?: string;
2643
+ &nbsp;
2644
+ vhost?: string;
2645
+ }
2646
+ &nbsp;
2647
+ type newChannelOpts = {
2648
+ name?: string;
2649
+ onClose?: null | ((args: any | null) =&gt; void);
2650
+ options?: CreateChannelOpts | undefined;
2651
+ };
2652
+ &nbsp;
2653
+ type assertChannelOpts = {
2654
+ channelName?: string;
2655
+ force?: boolean;
2656
+ }
2657
+ &nbsp;
2658
+ type AfConsumer = {
2659
+ queue: string;
2660
+ callback: CallbackFunction;
2661
+ options: ConsumeOptions | undefined;
2662
+ }
2663
+ &nbsp;
2664
+ const HEARTBEAT = '60';
2665
+ &nbsp;
2666
+ class RabbitMq implements IAfRabbitMq {
2667
+ static parseMsg(msg: any) : any {
2668
+ let { content } = msg;
2669
+ content = content.toString();
2670
+ &nbsp;
2671
+ try {
2672
+ content = JSON.parse(content);
2673
+ } catch (e) { }
2674
+ &nbsp;
2675
+ return {
2676
+ ...msg,
2677
+ content,
2678
+ };
2679
+ }
2680
+ &nbsp;
2681
+ static validateName(type: string, name: string): void {
2682
+ if (!name || name === '') {
2683
+ throw new RabbitError(`error while using ${type} with no name`);
2684
+ }
2685
+ }
2686
+ &nbsp;
2687
+ static getPublishOptions(customHeaders: CustomMessageHeaders = {}) {
2688
+ const trace = getCurrentPayload();
2689
+ const user = trace?.context?.get(USER_OBJECT);
2690
+ const traceId = trace?.context?.get(TRACING_HEADER);
2691
+ const outbreakTrace = outbreak.getCurrentContext();
2692
+ return {
2693
+ timestamp: moment().unix(),
2694
+ timeout: PUBLISH_TIMEOUT,
2695
+ headers: {
2696
+ creationTimestamp: moment().valueOf(),
2697
+ ...customHeaders,
2698
+ [USER_TRACING_HEADER]: user?.id,
2699
+ [TRACING_HEADER]: traceId || outbreakTrace?.context?.get(TRACING_HEADER),
2700
+ },
2701
+ };
2702
+ }
2703
+ &nbsp;
2704
+ DISCONNECT_MSG = 'rabbit: connection disconnect';
2705
+ &nbsp;
2706
+ RECONNECT_MSG = 'rabbit: connection disconnect - reconnecting';
2707
+ &nbsp;
2708
+ channel: ChannelWrapper | null;
2709
+ &nbsp;
2710
+ publishChannelSetupPromise: Promise&lt;ChannelWrapper&gt; | null;
2711
+ &nbsp;
2712
+ blockReconnect: boolean | null | undefined
2713
+ &nbsp;
2714
+ connection: AmqpConnectionManager | null | undefined
2715
+ &nbsp;
2716
+ em: EventEmitter;
2717
+ &nbsp;
2718
+ creatingConnection: boolean;
2719
+ &nbsp;
2720
+ exchanges: ExchangesCache;
2721
+ &nbsp;
2722
+ queues: QueuesCache;
2723
+ &nbsp;
2724
+ queueSetupPromises: QueueSetupPromisesDictionary;
2725
+ &nbsp;
2726
+ assertExchangePromises: AssertExchangePromisesDictionary;
2727
+ &nbsp;
2728
+ options: AfRabbitOptions | undefined;
2729
+ &nbsp;
2730
+ redisClient: any;
2731
+ &nbsp;
2732
+ redisLock?: RedisLockType;
2733
+ &nbsp;
2734
+ /** Array of consumers tags used for canceling consumption */
2735
+ consumersTags: Array&lt;[ConfirmChannel, string]&gt;;
2736
+ &nbsp;
2737
+ private consumers: Array&lt;AfConsumer&gt; = [];
2738
+ &nbsp;
2739
+ private isVHostExist = false;
2740
+ &nbsp;
2741
+ // TODO: DELETE OLD PROPERTIES
2742
+ &nbsp;
2743
+ oldChannel: ChannelWrapper | null;
2744
+ &nbsp;
2745
+ oldPublishChannelSetupPromise: Promise&lt;ChannelWrapper&gt; | null;
2746
+ &nbsp;
2747
+ oldBlockReconnect: boolean | null | undefined
2748
+ &nbsp;
2749
+ oldConnection: AmqpConnectionManager | null | undefined
2750
+ &nbsp;
2751
+ oldEm: EventEmitter;
2752
+ &nbsp;
2753
+ oldCreatingConnection: boolean;
2754
+ &nbsp;
2755
+ oldExchanges: ExchangesCache;
2756
+ &nbsp;
2757
+ oldQueues: QueuesCache;
2758
+ &nbsp;
2759
+ oldQueueSetupPromises: QueueSetupPromisesDictionary;
2760
+ &nbsp;
2761
+ oldAssertExchangePromises: AssertExchangePromisesDictionary;
2762
+ &nbsp;
2763
+ oldConsumersTags: Array&lt;[ConfirmChannel, string]&gt;;
2764
+ &nbsp;
2765
+ private oldConsumers: Array&lt;AfConsumer&gt; = [];
2766
+ &nbsp;
2767
+ constructor(options: AfRabbitOptions = {}, redisConfig?: RedisConfig) {
2768
+ this.em = new EventEmitter();
2769
+ this.channel = null;
2770
+ this.publishChannelSetupPromise = null;
2771
+ this.connection = null;
2772
+ this.creatingConnection = false;
2773
+ this.exchanges = {};
2774
+ this.queues = {};
2775
+ this.queueSetupPromises = {};
2776
+ this.assertExchangePromises = {};
2777
+ this.consumers = [];
2778
+ this.options = options;
2779
+ &nbsp;
2780
+ if (!options?.vhost) {
2781
+ // TODO: Change the name of the vhost
2782
+ this.options.vhost = 'test-vhost';
2783
+ }
2784
+ &nbsp;
2785
+ this.redisClient = redisConfig &amp;&amp; getRedisInstance(redisConfig);
2786
+ if (this.redisClient) {
2787
+ this.redisLock = promisify(RedisLock(this.redisClient)) as RedisLockType;
2788
+ }
2789
+ this.consumersTags = [];
2790
+ logger.info(`rabbit: [gracefully-shutdown] adding gracefully shutdown for process.pid ${process.pid}`);
2791
+ if (!this.options?.dontGracefulShutdown) {
2792
+ process.on('SIGTERM', <span class="fstat-no" title="function not covered" >async </span>() =&gt; {
2793
+ <span class="cstat-no" title="statement not covered" > await this.gracefulShutdown('SIGTERM');</span>
2794
+ });
2795
+ process.on('SIGINT', <span class="fstat-no" title="function not covered" >async </span>() =&gt; {
2796
+ <span class="cstat-no" title="statement not covered" > await this.gracefulShutdown('SIGINT');</span>
2797
+ });
2798
+ }
2799
+ &nbsp;
2800
+ // TODO: DELETE OLD PROPERTIES
2801
+ this.oldEm = new EventEmitter();
2802
+ this.oldChannel = null;
2803
+ this.oldPublishChannelSetupPromise = null;
2804
+ this.oldConnection = null;
2805
+ this.oldCreatingConnection = false;
2806
+ this.oldExchanges = {};
2807
+ this.oldQueues = {};
2808
+ this.oldQueueSetupPromises = {};
2809
+ this.oldAssertExchangePromises = {};
2810
+ this.oldConsumers = [];
2811
+ this.oldConsumersTags = [];
2812
+ }
2813
+ &nbsp;
2814
+ private assertVHost = async () =&gt; {
2815
+ if (this.isVHostExist) {
2816
+ return;
2817
+ }
2818
+ &nbsp;
2819
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.options?.vhost) {
2820
+ <span class="cstat-no" title="statement not covered" > throw new Error('vhost is not defined');</span>
2821
+ }
2822
+ &nbsp;
2823
+ const { vhost } = this.options;
2824
+ const auth = {
2825
+ auth: {
2826
+ username: process.env.RABBITMQ_USERNAME || 'guest',
2827
+ password: process.env.RABBITMQ_PASSWORD || 'guest',
2828
+ },
2829
+ };
2830
+ const rabbitHost = `http://${(this.options.rabbitHost || process.env.RABBITMQ_SERVICE_HOST || <span class="branch-2 cbranch-no" title="branch not covered" >'localhost')</span>.split(':')[0]}:15672`;
2831
+ &nbsp;
2832
+ try {
2833
+ const response = await axios.get(`${rabbitHost}/api/vhosts/${encodeURIComponent(vhost)}`, auth);
2834
+ &nbsp;
2835
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (response.status !== 200) {
2836
+ <span class="cstat-no" title="statement not covered" > throw new Error('Failed to check vhost');</span>
2837
+ }
2838
+ &nbsp;
2839
+ this.isVHostExist = true;
2840
+ logger.info('Vhost exists', { vhost: this.options?.vhost });
2841
+ } catch (error) {
2842
+ // If the vhost does not exist, create it
2843
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error instanceof axios.AxiosError &amp;&amp; error.response?.status === 404) {</span>
2844
+ <span class="cstat-no" title="statement not covered" > try {</span>
2845
+ <span class="cstat-no" title="statement not covered" > await axios.put(</span>
2846
+ `${rabbitHost}/api/vhosts/${encodeURIComponent(vhost)}`,
2847
+ {
2848
+ default_queue_type: 'quorum',
2849
+ },
2850
+ auth,
2851
+ );
2852
+ &nbsp;
2853
+ <span class="cstat-no" title="statement not covered" > this.isVHostExist = true;</span>
2854
+ <span class="cstat-no" title="statement not covered" > logger.info('Vhost created', { vhost: this.options?.vhost });</span>
2855
+ <span class="cstat-no" title="statement not covered" > return;</span>
2856
+ } catch (createError) {
2857
+ <span class="cstat-no" title="statement not covered" > logger.error('Failed to create vhost', { error: createError });</span>
2858
+ <span class="cstat-no" title="statement not covered" > throw createError;</span>
2859
+ }
2860
+ }
2861
+ &nbsp;
2862
+ <span class="cstat-no" title="statement not covered" > logger.error('Failed to check vhost', { error });</span>
2863
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2864
+ }
2865
+ }
2866
+ &nbsp;
2867
+ private shouldConsumeMessageByTimestamp = async (msg: ConsumeMessageOrNull) =&gt; {
2868
+ if (msg) {
2869
+ const { properties: { headers } } = msg;
2870
+ const timestamp = headers?.creationTimestamp;
2871
+ &nbsp;
2872
+ if (timestamp &amp;&amp; headers?.redisTimestampValidationKey &amp;&amp; this.redisClient) {
2873
+ const lastMessageTimestamp = await this.redisClient.getAsync(headers.redisTimestampValidationKey);
2874
+ return !lastMessageTimestamp || (parseInt(lastMessageTimestamp, 10) &lt;= parseInt(timestamp, 10));
2875
+ }
2876
+ return true;
2877
+ }
2878
+ <span class="cstat-no" title="statement not covered" > return false;</span>
2879
+ }
2880
+ &nbsp;
2881
+ public ack = (channel: ConfirmChannel, msg: ConsumeMessageOrNull, shouldUpdateRedisTimestamp = false, releaseLock = null) =&gt; async (userMsg: ConsumeMessage) : Promise&lt;any&gt; =&gt; {
2882
+ if (msg) {
2883
+ debug('rabbit acking message', { deliveryTag: msg.fields.deliveryTag });
2884
+ await channel.ack(msg);
2885
+ const { properties: { headers } } = msg;
2886
+ const timestamp = headers?.creationTimestamp;
2887
+ &nbsp;
2888
+ if (shouldUpdateRedisTimestamp &amp;&amp; timestamp &amp;&amp; headers?.redisTimestampValidationKey &amp;&amp; this.redisClient) {
2889
+ const parsedTimestamp = parseInt(timestamp, 10);
2890
+ await this.redisClient.setAsync(headers.redisTimestampValidationKey, parsedTimestamp, 'EX', 3600);
2891
+ await this.unlockRedisIfNeeded(releaseLock);
2892
+ }
2893
+ }
2894
+ }
2895
+ &nbsp;
2896
+ public nack = (
2897
+ channel: ConfirmChannel,
2898
+ queue: string,
2899
+ options: any,
2900
+ deadQueueOptions: Options.AssertQueue,
2901
+ msg: ConsumeMessageOrNull,
2902
+ releaseLock: any,
2903
+ ) =&gt; async (
2904
+ userMsg: ConsumeMessageOrNull,
2905
+ {
2906
+ skipRetry = false,
2907
+ }: NackOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{ },</span>
2908
+ ) : Promise&lt;any&gt; =&gt; {
2909
+ await this.unlockRedisIfNeeded(releaseLock);
2910
+ if (channel &amp;&amp; msg) {
2911
+ if (
2912
+ !skipRetry
2913
+ &amp;&amp; (
2914
+ !msg.properties.headers[RETRY_HEADER]
2915
+ || parseInt(msg.properties.headers[RETRY_HEADER], 10) &lt; options.retries
2916
+ )
2917
+ ) {
2918
+ await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
2919
+ ...msg.properties.headers,
2920
+ [RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
2921
+ ? msg.properties.headers[RETRY_HEADER] + 1
2922
+ : 1,
2923
+ });
2924
+ } else {
2925
+ const deadQueue = `${queue}-dead`;
2926
+ await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
2927
+ ...msg.properties.headers,
2928
+ [RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
2929
+ ? msg.properties.headers[RETRY_HEADER] + 1
2930
+ : 1,
2931
+ });
2932
+ }
2933
+ debug('rabbit nacking message', { deliveryTag: msg.fields.deliveryTag });
2934
+ await channel.ack(msg);
2935
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
2936
+ <span class="cstat-no" title="statement not covered" > logger.error('no channel or msg', {</span>
2937
+ msg,
2938
+ });
2939
+ }
2940
+ }
2941
+ &nbsp;
2942
+ async getConnection() {
2943
+ return new Promise&lt;AmqpConnectionManager&gt;(async (resolve, reject) =&gt; {
2944
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.blockReconnect) {
2945
+ <span class="cstat-no" title="statement not covered" > debug('rabbit: block reconnect');</span>
2946
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2947
+ // @ts-ignore
2948
+ <span class="cstat-no" title="statement not covered" > return resolve();</span>
2949
+ }
2950
+ if (this.connection !== null) {
2951
+ if (this.options?.disableReconnect || this.connection?.isConnected()) {
2952
+ debug('rabbit: connection - is connected');
2953
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2954
+ // @ts-ignore
2955
+ return resolve(this.connection);
2956
+ }
2957
+ <span class="cstat-no" title="statement not covered" > debug('rabbit: connection - reconnecting');</span>
2958
+ }
2959
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.creatingConnection) {
2960
+ <span class="cstat-no" title="statement not covered" > debug('rabbit: creating connection emi');</span>
2961
+ <span class="cstat-no" title="statement not covered" > this.em.once(CONNECTION_CREATED_CONST, resolve);</span>
2962
+ <span class="cstat-no" title="statement not covered" > this.em.once(CONNECTION_FAILED_CONST, reject);</span>
2963
+ <span class="cstat-no" title="statement not covered" > return;</span>
2964
+ }
2965
+ this.creatingConnection = true;
2966
+ let isResolved = false;
2967
+ &nbsp;
2968
+ // It is import to use it as a function and not as a variable
2969
+ // because of k8s changes the env variables
2970
+ // and we want to use the new values
2971
+ const findServers = () =&gt; {
2972
+ const userName = process.env.RABBITMQ_USERNAME || 'guest';
2973
+ const password = process.env.RABBITMQ_PASSWORD || 'guest';
2974
+ const host = this.options?.rabbitHost || process.env.RABBITMQ_SERVICE_HOST || <span class="branch-2 cbranch-no" title="branch not covered" >'localhost';</span>
2975
+ &nbsp;
2976
+ debug('rabbit: creating connection', { host, userName, HEARTBEAT });
2977
+ return [`amqp://${userName}:${password}@${host}/${this.options?.vhost}?heartbeat=${HEARTBEAT}`];
2978
+ };
2979
+ &nbsp;
2980
+ const defaultUrls = findServers();
2981
+ const connection: AmqpConnectionManager = await connect(defaultUrls, {
2982
+ findServers,
2983
+ });
2984
+ &nbsp;
2985
+ this.connection = connection;
2986
+ this.connection.on('error', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {
2987
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: connection error', { err });</span>
2988
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isResolved) {</span>
2989
+ <span class="cstat-no" title="statement not covered" > isResolved = true;</span>
2990
+ <span class="cstat-no" title="statement not covered" > reject(err);</span>
2991
+ <span class="cstat-no" title="statement not covered" > this.em.emit(CONNECTION_FAILED_CONST, err);</span>
2992
+ }
2993
+ });
2994
+ &nbsp;
2995
+ this.connection.on('connectFailed', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {
2996
+ <span class="cstat-no" title="statement not covered" > this.consumersTags = [];</span>
2997
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.options?.vhost });</span>
2998
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isResolved) {</span>
2999
+ <span class="cstat-no" title="statement not covered" > isResolved = true;</span>
3000
+ <span class="cstat-no" title="statement not covered" > reject(err);</span>
3001
+ <span class="cstat-no" title="statement not covered" > this.em.emit(CONNECTION_FAILED_CONST, err);</span>
3002
+ }
3003
+ });
3004
+ &nbsp;
3005
+ this.connection.on('disconnect', ({ err }) =&gt; {
3006
+ // this.channel = null;
3007
+ this.consumersTags = [];
3008
+ debug('rabbit: connection closed');
3009
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options?.disableReconnect) {
3010
+ <span class="cstat-no" title="statement not covered" > logger.error(`${this.DISCONNECT_MSG}${err &amp;&amp; ` - ${err}`}`);</span>
3011
+ <span class="cstat-no" title="statement not covered" > this.blockReconnect = true;</span>
3012
+ } else {
3013
+ logger.error(`${this.RECONNECT_MSG}${err &amp;&amp; ` - ${err}`}`);
3014
+ }
3015
+ });
3016
+ &nbsp;
3017
+ this.connection.once('connect', async () =&gt; {
3018
+ debug('rabbit: connection established');
3019
+ this.creatingConnection = false;
3020
+ this.em.emit(CONNECTION_CREATED_CONST, connection);
3021
+ isResolved = true;
3022
+ resolve(connection);
3023
+ });
3024
+ });
3025
+ }
3026
+ &nbsp;
3027
+ async getNewChannel({ name = rand().toString(), onClose = null, options = {} }: newChannelOpts = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
3028
+ let connection!: AmqpConnectionManager;
3029
+ try {
3030
+ connection = await this.getConnection();
3031
+ } catch (e) {
3032
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: error on get connection for new channel ${name} `, { e });</span>
3033
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3034
+ }
3035
+ const channel = connection.createChannel({ ...options });
3036
+ once(channel, 'close').then(<span class="fstat-no" title="function not covered" >(a</span>rgs) =&gt; {
3037
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: channel ${name} closed`);</span>
3038
+ <span class="cstat-no" title="statement not covered" > onClose?.(args);</span>
3039
+ });
3040
+ try {
3041
+ await once(channel, 'connect');
3042
+ debug(`rabbit: channel ${name} CONNECTED`);
3043
+ return channel;
3044
+ } catch (err) {
3045
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: channel error ${name} error`, { err });</span>
3046
+ <span class="cstat-no" title="statement not covered" > throw err;</span>
3047
+ }
3048
+ }
3049
+ &nbsp;
3050
+ async assertChannel({ force = false } : assertChannelOpts = {}): Promise&lt;ChannelWrapper&gt; {
3051
+ if (!this.publishChannelSetupPromise) {
3052
+ this.publishChannelSetupPromise = new Promise&lt;ChannelWrapper&gt;(async (resolve, reject) =&gt; {
3053
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.channel &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!force)</span> {
3054
+ <span class="cstat-no" title="statement not covered" > return resolve(this.channel);</span>
3055
+ }
3056
+ &nbsp;
3057
+ try {
3058
+ const channel = await this.getNewChannel({});
3059
+ channel.on('error', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {
3060
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: channel error', { err });</span>
3061
+ });
3062
+ this.channel = channel;
3063
+ resolve(channel);
3064
+ } catch (e) {
3065
+ <span class="cstat-no" title="statement not covered" > reject(e);</span>
3066
+ }
3067
+ });
3068
+ }
3069
+ return this.publishChannelSetupPromise;
3070
+ }
3071
+ &nbsp;
3072
+ <span class="fstat-no" title="function not covered" > async </span>assertExchange(exchangeName: string, options?: any) {
3073
+ const channel: ChannelWrapper = <span class="cstat-no" title="statement not covered" >await this.assertChannel();</span>
3074
+ &nbsp;
3075
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.exchanges[exchangeName]) {</span>
3076
+ <span class="cstat-no" title="statement not covered" > delete this.assertExchangePromises[exchangeName];</span>
3077
+ <span class="cstat-no" title="statement not covered" > return this.exchanges[exchangeName];</span>
3078
+ }
3079
+ &nbsp;
3080
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.assertExchangePromises[exchangeName]) {</span>
3081
+ <span class="cstat-no" title="statement not covered" > return this.assertExchangePromises[exchangeName];</span>
3082
+ }
3083
+ &nbsp;
3084
+ <span class="cstat-no" title="statement not covered" > this.assertExchangePromises[exchangeName] = assertExchangeFanout(channel, exchangeName);</span>
3085
+ <span class="cstat-no" title="statement not covered" > this.exchanges[exchangeName] = await this.assertExchangePromises[exchangeName];</span>
3086
+ <span class="cstat-no" title="statement not covered" > return this.exchanges[exchangeName];</span>
3087
+ }
3088
+ &nbsp;
3089
+ // TODO: Change the implementation to the new one
3090
+ async getQueueLength(queue: string) {
3091
+ RabbitMq.validateName('queue', queue);
3092
+ const { oldChannel: channel } = this;
3093
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!channel) {
3094
+ <span class="cstat-no" title="statement not covered" > throw new Error('channel is not defined');</span>
3095
+ }
3096
+ debug('rabbit: getting queue length', { queue, connected: this.connection?.isConnected() });
3097
+ return channel?.checkQueue(queue);
3098
+ }
3099
+ &nbsp;
3100
+ private <span class="fstat-no" title="function not covered" >async </span>deleteQueue(queue: string) {
3101
+ <span class="cstat-no" title="statement not covered" > RabbitMq.validateName('queue', queue);</span>
3102
+ const channel: ChannelWrapper = <span class="cstat-no" title="statement not covered" >await this.assertChannel();</span>
3103
+ <span class="cstat-no" title="statement not covered" > logger.info('rabbit: deleting queue', { queue });</span>
3104
+ const deleteQueueRes = <span class="cstat-no" title="statement not covered" >await channel.deleteQueue(queue);</span>
3105
+ <span class="cstat-no" title="statement not covered" > debug('queue deleted', deleteQueueRes);</span>
3106
+ <span class="cstat-no" title="statement not covered" > return deleteQueueRes;</span>
3107
+ }
3108
+ &nbsp;
3109
+ // TODO: Change the implementation to the new one
3110
+ async bindQueue(queue: string, exchange: string) {
3111
+ const channel: ChannelWrapper = await this.assertChannelOld();
3112
+ await channel.addSetup((setupChannel: ConfirmChannel) =&gt; setupChannel.bindQueue(queue, exchange, ''));
3113
+ return channel.bindQueue(queue, exchange, '');
3114
+ }
3115
+ &nbsp;
3116
+ async setupQueue(queueName: string, options?: Options.AssertQueue): Promise&lt;Replies.AssertQueue&gt; {
3117
+ let queue: Replies.AssertQueue;
3118
+ const localeOptions = {
3119
+ ...options,
3120
+ durable: true,
3121
+ arguments: {
3122
+ ...options?.arguments,
3123
+ 'x-consumer-timeout': 1000 * 60 * 60 * 24,
3124
+ 'x-queue-type': 'quorum',
3125
+ },
3126
+ };
3127
+ try {
3128
+ const channel: ChannelWrapper = await this.assertChannel();
3129
+ debug('assertQueue-&gt;channel.addSetup', { queueName });
3130
+ await channel.addSetup(async (setupChannel: ConfirmChannel) =&gt; {
3131
+ await setupChannel.assertQueue(queueName, localeOptions);
3132
+ });
3133
+ debug('assertQueue-&gt;channel.assertQueue', { queueName });
3134
+ queue = await channel.assertQueue(queueName, localeOptions);
3135
+ } catch (e) {
3136
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: assertQueue error', { queueName, options, error: e });</span>
3137
+ <span class="cstat-no" title="statement not covered" > if (!this.options?.dontRetryAssert) {</span>
3138
+ <span class="cstat-no" title="statement not covered" > debug('retrying assertQueue', { queueName });</span>
3139
+ const channel = <span class="cstat-no" title="statement not covered" >await this.assertChannel({ force: true });</span>
3140
+ <span class="cstat-no" title="statement not covered" > await this.deleteQueue(queueName);</span>
3141
+ &nbsp;
3142
+ <span class="cstat-no" title="statement not covered" > debug('retrying assertQueue-&gt;channel.addSetup', { queueName });</span>
3143
+ <span class="cstat-no" title="statement not covered" > await channel.addSetup(<span class="fstat-no" title="function not covered" >(s</span>etupChannel: ConfirmChannel) =&gt; <span class="cstat-no" title="statement not covered" >setupChannel.assertQueue(queueName, localeOptions))</span>;</span>
3144
+ <span class="cstat-no" title="statement not covered" > debug('retrying assertQueue-&gt;channel.assertQueue', { queueName });</span>
3145
+ <span class="cstat-no" title="statement not covered" > queue = await channel.assertQueue(queueName, localeOptions);</span>
3146
+ } else {
3147
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3148
+ }
3149
+ }
3150
+ &nbsp;
3151
+ this.queues[queueName] = queue;
3152
+ return queue;
3153
+ }
3154
+ &nbsp;
3155
+ // TODO: Can be deleted after deleting the old consumers
3156
+ static shouldUseQuorum(queueName: string): boolean {
3157
+ const envQuorumQueuesWhitelist = process.env.QUORUM_QUEUES_WHITELIST;
3158
+ &nbsp;
3159
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (envQuorumQueuesWhitelist === '*') {
3160
+ <span class="cstat-no" title="statement not covered" > return true;</span>
3161
+ }
3162
+ &nbsp;
3163
+ if (envQuorumQueuesWhitelist) {
3164
+ const whitelist = envQuorumQueuesWhitelist.split(',');
3165
+ return whitelist.includes(queueName);
3166
+ }
3167
+ &nbsp;
3168
+ return false;
3169
+ }
3170
+ &nbsp;
3171
+ async assertQueue(queueName: string, options?: Options.AssertQueue): Promise&lt;any&gt; {
3172
+ RabbitMq.validateName('queue', queueName);
3173
+ if (this.queues[queueName]) {
3174
+ delete this.queueSetupPromises[queueName];
3175
+ return this.queues[queueName];
3176
+ }
3177
+ &nbsp;
3178
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.queueSetupPromises[queueName]) {
3179
+ <span class="cstat-no" title="statement not covered" > return this.queueSetupPromises[queueName];</span>
3180
+ }
3181
+ &nbsp;
3182
+ this.queueSetupPromises[queueName] = this.setupQueue(queueName, options);
3183
+ return this.queueSetupPromises[queueName];
3184
+ }
3185
+ &nbsp;
3186
+ private saveConsumer(queue: string, callback: CallbackFunction, options: ConsumeOptions | undefined) {
3187
+ const isConsumerExist :boolean = this.consumers.some((consumer) =&gt; consumer.queue === queue);
3188
+ if (!isConsumerExist) {
3189
+ logger.info(`rabbit: consumer: ${queue} saved in consumer array`);
3190
+ this.consumers.push({
3191
+ queue,
3192
+ callback,
3193
+ options,
3194
+ });
3195
+ }
3196
+ }
3197
+ &nbsp;
3198
+ // Used by the microservices to consume messages from the queue
3199
+ async consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise&lt;any&gt; {
3200
+ await this.assertVHost();
3201
+ // TODO: USE THE IMPLEMENTATION OF THE NEW CONSUME AND DELETE THE NEW AND OLD
3202
+ await this.consumeNew(queue, callback, options);
3203
+ await this.consumeOld(queue, callback, options);
3204
+ }
3205
+ &nbsp;
3206
+ // TODO: DELETE
3207
+ async consumeNew(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise&lt;any&gt; {
3208
+ await this.consumeFromRabbit(queue, callback, options);
3209
+ }
3210
+ &nbsp;
3211
+ // TODO: DELETE
3212
+ async consumeOld(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise&lt;any&gt; {
3213
+ await this.consumeFromRabbitOld(queue, callback, options);
3214
+ }
3215
+ &nbsp;
3216
+ private async lockRedisIfNeeded(msg: any, options: any) {
3217
+ const { properties: { headers } } = msg;
3218
+ const timestamp = headers?.creationTimestamp;
3219
+ let releaseLock = null;
3220
+ &nbsp;
3221
+ if (options.useConsumeWithLock &amp;&amp; timestamp &amp;&amp; headers?.redisTimestampValidationKey &amp;&amp; this.redisLock) {
3222
+ releaseLock = await this.redisLock(
3223
+ headers.redisTimestampValidationKey,
3224
+ options?.lockTimeout || <span class="branch-1 cbranch-no" title="branch not covered" >DEFAULT_LOCK_TIMEOUT,</span>
3225
+ );
3226
+ }
3227
+ return releaseLock;
3228
+ }
3229
+ &nbsp;
3230
+ private async unlockRedisIfNeeded(releaseLock: any) {
3231
+ if (this.redisLock &amp;&amp; releaseLock) {
3232
+ await releaseLock();
3233
+ }
3234
+ }
3235
+ &nbsp;
3236
+ private async consumeFromRabbit(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise&lt;any&gt; {
3237
+ const optionsWithDefaults = { ...DEFAULT_OPTIONS, ...options };
3238
+ RabbitMq.validateName('queue', queue);
3239
+ this.saveConsumer(queue, callback, options);
3240
+ const uniqueId = randomUUID();
3241
+ const {
3242
+ limit, deadMessageTtl, useConsumeWithLock, lockTimeout, auditContext, enableRabbitTrace,
3243
+ } = optionsWithDefaults;
3244
+ if (useConsumeWithLock) {
3245
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.redisLock) {
3246
+ <span class="cstat-no" title="statement not covered" > throw new Error('Usage of consumeWithLock requires RedisInstance');</span>
3247
+ }
3248
+ logger.info(`rabbit: Consuming with lock from queue ${queue} with lockTimeout: ${lockTimeout}ms`);
3249
+ }
3250
+ const channel = await this.getNewChannel({});
3251
+ return channel.addSetup(async (confirmChannel: ConfirmChannel) =&gt; {
3252
+ const q = await this.assertQueue(queue, optionsWithDefaults);
3253
+ await confirmChannel.prefetch(limit, false);
3254
+ const { consumerTag } = await confirmChannel.consume(
3255
+ queue,
3256
+ async (msg: ConsumeMessageOrNull) =&gt; {
3257
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!msg) {
3258
+ <span class="cstat-no" title="statement not covered" > return null;</span>
3259
+ }
3260
+ &nbsp;
3261
+ const traceId = msg.properties.headers[TRACING_HEADER];
3262
+ const userId = msg.properties.headers[USER_TRACING_HEADER];
3263
+ const automationId = msg.properties.headers[AUTOMATION_ID_HEADER];
3264
+ const parsedMessage = RabbitMq.parseMsg(msg);
3265
+ const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
3266
+ const trace = newTrace(traceTypes.RABBIT);
3267
+ // setting also outbreak trace as part of legacy code
3268
+ const outbreakTrace = outbreak.newTrace(traceTypes.RABBIT);
3269
+ // enableRabbitTrace is a flag to protect from different flows that doesn't work with permission
3270
+ // and we don't want to fail the flow because of it
3271
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (userId &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >enableRabbitTrace)</span> {
3272
+ <span class="cstat-no" title="statement not covered" > try {</span>
3273
+ <span class="cstat-no" title="statement not covered" > await Promise.all([</span>
3274
+ createOrSetRabbitTrace(trace, userId),
3275
+ createOrSetRabbitTrace(outbreakTrace, userId),
3276
+ ]);
3277
+ } catch (e) {
3278
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: failed to setRabbitTrace', { userId, e });</span>
3279
+ <span class="cstat-no" title="statement not covered" > return this.nack(confirmChannel, queue, optionsWithDefaults, { messageTtl: deadMessageTtl }, msg, releaseLock)(msg);</span>
3280
+ }
3281
+ }
3282
+ &nbsp;
3283
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (traceId) {
3284
+ (<span class="cstat-no" title="statement not covered" >trace as any)?.context?.set(TRACING_HEADER, traceId);</span>
3285
+ (<span class="cstat-no" title="statement not covered" >outbreakTrace as any)?.context.set(TRACING_HEADER, traceId);</span>
3286
+ }
3287
+ &nbsp;
3288
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (auditContext) {
3289
+ <span class="cstat-no" title="statement not covered" > await auditContext(queue, {</span>
3290
+ userId,
3291
+ automationId,
3292
+ });
3293
+ }
3294
+ const shouldConsume = await this.shouldConsumeMessageByTimestamp(parsedMessage);
3295
+ if (!shouldConsume) {
3296
+ await this.unlockRedisIfNeeded(releaseLock);
3297
+ return this.ack(confirmChannel, msg)(msg);
3298
+ }
3299
+ &nbsp;
3300
+ let messageAcked = false;
3301
+ // setting the localAck function to be used in the callback
3302
+ &nbsp;
3303
+ const localAck = async () =&gt; {
3304
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (messageAcked) {
3305
+ <span class="cstat-no" title="statement not covered" > return;</span>
3306
+ }
3307
+ messageAcked = true;
3308
+ return this.ack(confirmChannel, msg, true, releaseLock)(msg);
3309
+ };
3310
+ &nbsp;
3311
+ const localNack = <span class="fstat-no" title="function not covered" >async </span>(_: ConsumeMessageOrNull, nackOptions: NackOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> =&gt; {
3312
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (messageAcked) {</span>
3313
+ <span class="cstat-no" title="statement not covered" > return;</span>
3314
+ }
3315
+ <span class="cstat-no" title="statement not covered" > debug('rabbit localNack', { messageAcked, uniqueId, deliveryTag: msg.fields.deliveryTag });</span>
3316
+ <span class="cstat-no" title="statement not covered" > messageAcked = true;</span>
3317
+ <span class="cstat-no" title="statement not covered" > return this.nack(confirmChannel, queue, optionsWithDefaults, { messageTtl: deadMessageTtl }, msg, releaseLock)(msg, nackOptions);</span>
3318
+ };
3319
+ &nbsp;
3320
+ try {
3321
+ await callback(
3322
+ parsedMessage,
3323
+ localAck,
3324
+ localNack,
3325
+ );
3326
+ } catch (e) {
3327
+ <span class="cstat-no" title="statement not covered" > await localNack(msg);</span>
3328
+ }
3329
+ }, CONSUMER_DEFAULT_OPTIONS,
3330
+ );
3331
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!consumerTag) {
3332
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: failed to consume from queue ${queue}`);</span>
3333
+ } else {
3334
+ logger.info(`rabbit: adding tag ${consumerTag} to the array.`);
3335
+ this.consumersTags.push([confirmChannel, consumerTag]);
3336
+ }
3337
+ });
3338
+ }
3339
+ &nbsp;
3340
+ // Used by the microservices to consume messages from the exchange
3341
+ async consumeFromExchange(queue: string, exchange: string, callback: CallbackFunction, options?: ConsumeOptions) : Promise&lt;any&gt; {
3342
+ await this.assertVHost();
3343
+ const optionsWithDefaults = { ...DEFAULT_OPTIONS, ...options };
3344
+ RabbitMq.validateName('exchange', exchange);
3345
+ RabbitMq.validateName('queue', queue);
3346
+ const { limit, deadMessageTtl } = optionsWithDefaults;
3347
+ await this.saveConsumer(queue, callback, options);
3348
+ const channel: ChannelWrapper = await this.getNewChannel({ name: `consume-exchange-${exchange}-queue-${queue}` });
3349
+ &nbsp;
3350
+ await channel.addSetup(async (c: ConfirmChannel) =&gt; {
3351
+ const assertExchange = await assertExchangeFanout(c, exchange);
3352
+ await c.assertQueue(queue);
3353
+ this.exchanges[exchange] = assertExchange;
3354
+ await c.prefetch(limit, false);
3355
+ return Promise.all([
3356
+ c.bindQueue(queue, exchange, ''),
3357
+ this.consumeNew(
3358
+ queue,
3359
+ callback,
3360
+ options,
3361
+ ),
3362
+ ]);
3363
+ });
3364
+ &nbsp;
3365
+ // TODO: DELETE OLD
3366
+ await this.saveConsumerOld(queue, callback, options);
3367
+ const channelOld: ChannelWrapper = await this.getNewChannelOld({ name: `consume-exchange-${exchange}-queue-${queue}-old` });
3368
+ await channelOld.addSetup(async (c: ConfirmChannel) =&gt; {
3369
+ const assertExchange = await assertExchangeFanout(c, exchange);
3370
+ await c.assertQueue(queue);
3371
+ this.oldExchanges[exchange] = assertExchange;
3372
+ await c.prefetch(limit, false);
3373
+ return Promise.all([
3374
+ c.bindQueue(queue, exchange, ''),
3375
+ this.consumeOld(
3376
+ queue,
3377
+ callback,
3378
+ options,
3379
+ ),
3380
+ ]);
3381
+ });
3382
+ }
3383
+ &nbsp;
3384
+ // Used by the microservices to publish messages to the exchange
3385
+ // TODO: Change the implementation to the new one
3386
+ async publish(exchange: string, content: any, customHeaders?: any) : Promise&lt;boolean&gt; {
3387
+ return wrapSetImmediate(async () =&gt; {
3388
+ await this.assertVHost();
3389
+ RabbitMq.validateName('exchange', exchange);
3390
+ const channel: ChannelWrapper = await this.assertChannelOld();
3391
+ await this.assertExchangeOld(exchange);
3392
+ await channel.publish(exchange, '',
3393
+ Buffer.from(JSON.stringify(content)),
3394
+ RabbitMq.getPublishOptions(customHeaders));
3395
+ });
3396
+ }
3397
+ &nbsp;
3398
+ // Used by the microservices to send messages to the queue
3399
+ // TODO: Change the implementation to the new one
3400
+ async sendToQueue(
3401
+ queue: string,
3402
+ content: any,
3403
+ options?: any,
3404
+ customHeaders?: any,
3405
+ ): Promise&lt;boolean | undefined&gt; {
3406
+ try {
3407
+ await this.assertVHost();
3408
+ await this.assertChannelOld();
3409
+ } catch (e) {
3410
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit sendToQueue: failed to send assert channel when sending to queue ${queue}`, { e });</span>
3411
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3412
+ }
3413
+ &nbsp;
3414
+ try {
3415
+ RabbitMq.validateName('queue', queue);
3416
+ await this.assertQueueOld(queue, options);
3417
+ } catch (e) {
3418
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit sendToQueue: failed to assert queue ${queue}`, { e });</span>
3419
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3420
+ }
3421
+ &nbsp;
3422
+ try {
3423
+ const res = await this.oldChannel?.sendToQueue(queue,
3424
+ Buffer.from(JSON.stringify(content)),
3425
+ RabbitMq.getPublishOptions(customHeaders));
3426
+ debug(`rabbit: sending to queue ${queue}`, { res });
3427
+ return res;
3428
+ } catch (e) {
3429
+ const isConnected = <span class="cstat-no" title="statement not covered" >await this.isConnected();</span>
3430
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit sendToQueue: failed to send to queue ${queue}, isConnected: ${isConnected}`, { e });</span>
3431
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3432
+ }
3433
+ }
3434
+ &nbsp;
3435
+ // TODO: After changing the publish to the new implementation change the from the old to the new
3436
+ <span class="fstat-no" title="function not covered" > async </span>isConnected() : Promise&lt;boolean&gt; {
3437
+ const connection = <span class="cstat-no" title="statement not covered" >await this.getConnectionOld();</span>
3438
+ const isConnected = <span class="cstat-no" title="statement not covered" >connection.isConnected();</span>
3439
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isConnected) {</span>
3440
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: isConnected - false');</span>
3441
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3442
+ }
3443
+ const channel: any = <span class="cstat-no" title="statement not covered" >await this.assertChannelOld();</span>
3444
+ <span class="cstat-no" title="statement not covered" > try {</span>
3445
+ <span class="cstat-no" title="statement not covered" > await Promise.all([</span>
3446
+ channel.waitForConnect(),
3447
+ ...this.oldConsumers.map(<span class="fstat-no" title="function not covered" >(c</span>: AfConsumer) =&gt; <span class="cstat-no" title="statement not covered" >channel.checkQueue(c.queue))</span>,
3448
+ ]);
3449
+ } catch (e) {
3450
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: isConnected - false');</span>
3451
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3452
+ }
3453
+ <span class="cstat-no" title="statement not covered" > logger.info('rabbit: isConnected - true');</span>
3454
+ <span class="cstat-no" title="statement not covered" > return true;</span>
3455
+ }
3456
+ &nbsp;
3457
+ async gracefulShutdown(signal: string) : Promise&lt;void&gt; {
3458
+ // TODO: DELETE OLD
3459
+ const tagsNumber = this.consumersTags.length + this.oldConsumersTags.length;
3460
+ logger.info(`rabbit: [gracefully-shutdown] received ${signal}! canceling #${tagsNumber} tags...`);
3461
+ const cancelTagPromises = this.consumersTags.map(([channel, tag]) =&gt; channel.cancel(tag));
3462
+ const cancelTagPromisesOld = this.oldConsumersTags.map(([channel, tag]) =&gt; channel.cancel(tag));
3463
+ // Clean the array to avoid race
3464
+ this.consumersTags = [];
3465
+ this.oldConsumersTags = [];
3466
+ const results = await Promise.allSettled([...cancelTagPromises, ...cancelTagPromisesOld]);
3467
+ const rejected = results.filter((p) =&gt; p.status === 'rejected');
3468
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (rejected.length &gt; 0) {
3469
+ <span class="cstat-no" title="statement not covered" > logger.warn(`rabbit: [gracefully-shutdown] #${rejected.length}/${tagsNumber} tags failed to cancel: ${rejected}`);</span>
3470
+ } else {
3471
+ logger.info('rabbit: [gracefully-shutdown] all tags successfully canceled.');
3472
+ }
3473
+ }
3474
+ &nbsp;
3475
+ private async consumeFromRabbitOld(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise&lt;any&gt; {
3476
+ const optionsWithDefaults = { ...DEFAULT_OPTIONS, ...options };
3477
+ RabbitMq.validateName('queue', queue);
3478
+ this.saveConsumerOld(queue, callback, options);
3479
+ const uniqueId = randomUUID();
3480
+ const {
3481
+ limit, deadMessageTtl, useConsumeWithLock, lockTimeout, auditContext, enableRabbitTrace,
3482
+ } = optionsWithDefaults;
3483
+ if (useConsumeWithLock) {
3484
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.redisLock) {
3485
+ <span class="cstat-no" title="statement not covered" > throw new Error('Usage of consumeWithLock requires RedisInstance');</span>
3486
+ }
3487
+ logger.info(`rabbit: Consuming with lock from queue ${queue} with lockTimeout: ${lockTimeout}ms`);
3488
+ }
3489
+ const channel = await this.getNewChannelOld({});
3490
+ return channel.addSetup(async (confirmChannel: ConfirmChannel) =&gt; {
3491
+ const q = await this.assertQueueOld(queue, optionsWithDefaults);
3492
+ await confirmChannel.prefetch(limit, false);
3493
+ const { consumerTag } = await confirmChannel.consume(
3494
+ queue,
3495
+ async (msg: ConsumeMessageOrNull) =&gt; {
3496
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!msg) {
3497
+ <span class="cstat-no" title="statement not covered" > return null;</span>
3498
+ }
3499
+ &nbsp;
3500
+ const traceId = msg.properties.headers[TRACING_HEADER];
3501
+ const userId = msg.properties.headers[USER_TRACING_HEADER];
3502
+ const automationId = msg.properties.headers[AUTOMATION_ID_HEADER];
3503
+ const parsedMessage = RabbitMq.parseMsg(msg);
3504
+ const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
3505
+ const trace = newTrace(traceTypes.RABBIT);
3506
+ // setting also outbreak trace as part of legacy code
3507
+ const outbreakTrace = outbreak.newTrace(traceTypes.RABBIT);
3508
+ // enableRabbitTrace is a flag to protect from different flows that doesn't work with permission
3509
+ // and we don't want to fail the flow because of it
3510
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (userId &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >enableRabbitTrace)</span> {
3511
+ <span class="cstat-no" title="statement not covered" > try {</span>
3512
+ <span class="cstat-no" title="statement not covered" > await Promise.all([</span>
3513
+ createOrSetRabbitTrace(trace, userId),
3514
+ createOrSetRabbitTrace(outbreakTrace, userId),
3515
+ ]);
3516
+ } catch (e) {
3517
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: failed to setRabbitTrace', { userId, e });</span>
3518
+ <span class="cstat-no" title="statement not covered" > return this.nack(confirmChannel, queue, optionsWithDefaults, { messageTtl: deadMessageTtl }, msg, releaseLock)(msg);</span>
3519
+ }
3520
+ }
3521
+ &nbsp;
3522
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (traceId) {
3523
+ (<span class="cstat-no" title="statement not covered" >trace as any)?.context?.set(TRACING_HEADER, traceId);</span>
3524
+ (<span class="cstat-no" title="statement not covered" >outbreakTrace as any)?.context.set(TRACING_HEADER, traceId);</span>
3525
+ }
3526
+ &nbsp;
3527
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (auditContext) {
3528
+ <span class="cstat-no" title="statement not covered" > await auditContext(queue, {</span>
3529
+ userId,
3530
+ automationId,
3531
+ });
3532
+ }
3533
+ const shouldConsume = await this.shouldConsumeMessageByTimestamp(parsedMessage);
3534
+ if (!shouldConsume) {
3535
+ await this.unlockRedisIfNeeded(releaseLock);
3536
+ return this.ack(confirmChannel, msg)(msg);
3537
+ }
3538
+ &nbsp;
3539
+ let messageAcked = false;
3540
+ // setting the localAck function to be used in the callback
3541
+ &nbsp;
3542
+ const localAck = async () =&gt; {
3543
+ if (messageAcked) {
3544
+ return;
3545
+ }
3546
+ messageAcked = true;
3547
+ return this.ack(confirmChannel, msg, true, releaseLock)(msg);
3548
+ };
3549
+ &nbsp;
3550
+ const localNack = async (_: ConsumeMessageOrNull, nackOptions: NackOptions = {}) =&gt; {
3551
+ if (messageAcked) {
3552
+ return;
3553
+ }
3554
+ debug('rabbit localNack', { messageAcked, uniqueId, deliveryTag: msg.fields.deliveryTag });
3555
+ messageAcked = true;
3556
+ return this.nack(confirmChannel, queue, optionsWithDefaults, { messageTtl: deadMessageTtl }, msg, releaseLock)(msg, nackOptions);
3557
+ };
3558
+ &nbsp;
3559
+ try {
3560
+ await callback(
3561
+ parsedMessage,
3562
+ localAck,
3563
+ localNack,
3564
+ );
3565
+ } catch (e) {
3566
+ await localNack(msg);
3567
+ }
3568
+ }, CONSUMER_DEFAULT_OPTIONS,
3569
+ );
3570
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!consumerTag) {
3571
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: failed to consume from queue ${queue}`);</span>
3572
+ } else {
3573
+ logger.info(`rabbit: adding tag ${consumerTag} to the array.`);
3574
+ this.oldConsumersTags.push([confirmChannel, consumerTag]);
3575
+ }
3576
+ });
3577
+ }
3578
+ &nbsp;
3579
+ // TODO: DELETE OLD PROPERTIES UNDER THIS LINE
3580
+ async getNewChannelOld({ name = rand().toString(), onClose = null, options = {} }: newChannelOpts = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
3581
+ let connection!: AmqpConnectionManager;
3582
+ try {
3583
+ connection = await this.getConnectionOld();
3584
+ } catch (e) {
3585
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: error on get connection for new channel ${name} `, { e });</span>
3586
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3587
+ }
3588
+ const channel = connection.createChannel({ ...options });
3589
+ once(channel, 'close').then(<span class="fstat-no" title="function not covered" >(a</span>rgs) =&gt; {
3590
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: channel ${name} closed`);</span>
3591
+ <span class="cstat-no" title="statement not covered" > onClose?.(args);</span>
3592
+ });
3593
+ try {
3594
+ await once(channel, 'connect');
3595
+ debug(`rabbit: channel ${name} CONNECTED`);
3596
+ return channel;
3597
+ } catch (err) {
3598
+ <span class="cstat-no" title="statement not covered" > logger.error(`rabbit: channel error ${name} error`, { err });</span>
3599
+ <span class="cstat-no" title="statement not covered" > throw err;</span>
3600
+ }
3601
+ }
3602
+ &nbsp;
3603
+ async getConnectionOld() {
3604
+ return new Promise&lt;AmqpConnectionManager&gt;(async (resolve, reject) =&gt; {
3605
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.oldBlockReconnect) {
3606
+ <span class="cstat-no" title="statement not covered" > debug('rabbit: block reconnect');</span>
3607
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3608
+ // @ts-ignore
3609
+ <span class="cstat-no" title="statement not covered" > return resolve();</span>
3610
+ }
3611
+ if (this.oldConnection !== null) {
3612
+ if (this.options?.disableReconnect || this.oldConnection?.isConnected()) {
3613
+ debug('rabbit: connection - is connected');
3614
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3615
+ // @ts-ignore
3616
+ return resolve(this.oldConnection);
3617
+ }
3618
+ <span class="cstat-no" title="statement not covered" > debug('rabbit: connection - reconnecting');</span>
3619
+ }
3620
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.oldCreatingConnection) {
3621
+ <span class="cstat-no" title="statement not covered" > debug('rabbit: creating connection emi');</span>
3622
+ <span class="cstat-no" title="statement not covered" > this.oldEm.once(CONNECTION_CREATED_CONST, resolve);</span>
3623
+ <span class="cstat-no" title="statement not covered" > this.oldEm.once(CONNECTION_FAILED_CONST, reject);</span>
3624
+ <span class="cstat-no" title="statement not covered" > return;</span>
3625
+ }
3626
+ this.oldCreatingConnection = true;
3627
+ let isResolved = false;
3628
+ &nbsp;
3629
+ // It is import to use it as a function and not as a variable
3630
+ // because of k8s changes the env variables
3631
+ // and we want to use the new values
3632
+ const findServers = () =&gt; {
3633
+ const userName = process.env.RABBITMQ_USERNAME || 'guest';
3634
+ const password = process.env.RABBITMQ_PASSWORD || 'guest';
3635
+ const host = this.options?.rabbitHost || process.env.RABBITMQ_SERVICE_HOST || <span class="branch-2 cbranch-no" title="branch not covered" >'localhost';</span>
3636
+ &nbsp;
3637
+ debug('rabbit: creating connection', { host, userName, HEARTBEAT });
3638
+ &nbsp;
3639
+ return [`amqp://${userName}:${password}@${host}?heartbeat=${HEARTBEAT}`];
3640
+ };
3641
+ &nbsp;
3642
+ const defaultUrls = findServers();
3643
+ const connection: AmqpConnectionManager = await connect(defaultUrls, {
3644
+ findServers,
3645
+ });
3646
+ &nbsp;
3647
+ this.oldConnection = connection;
3648
+ this.oldConnection.on('error', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {
3649
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: connection error', { err });</span>
3650
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isResolved) {</span>
3651
+ <span class="cstat-no" title="statement not covered" > isResolved = true;</span>
3652
+ <span class="cstat-no" title="statement not covered" > reject(err);</span>
3653
+ <span class="cstat-no" title="statement not covered" > this.oldEm.emit(CONNECTION_FAILED_CONST, err);</span>
3654
+ }
3655
+ });
3656
+ &nbsp;
3657
+ this.oldConnection.on('connectFailed', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {
3658
+ <span class="cstat-no" title="statement not covered" > this.oldConsumersTags = [];</span>
3659
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: connection connectFailed', { err });</span>
3660
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isResolved) {</span>
3661
+ <span class="cstat-no" title="statement not covered" > isResolved = true;</span>
3662
+ <span class="cstat-no" title="statement not covered" > reject(err);</span>
3663
+ <span class="cstat-no" title="statement not covered" > this.oldEm.emit(CONNECTION_FAILED_CONST, err);</span>
3664
+ }
3665
+ });
3666
+ &nbsp;
3667
+ this.oldConnection.on('disconnect', ({ err }) =&gt; {
3668
+ this.oldConsumersTags = [];
3669
+ debug('rabbit: connection closed');
3670
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options?.disableReconnect) {
3671
+ <span class="cstat-no" title="statement not covered" > logger.error(`${this.DISCONNECT_MSG}${err &amp;&amp; ` - ${err}`}`);</span>
3672
+ <span class="cstat-no" title="statement not covered" > this.oldBlockReconnect = true;</span>
3673
+ } else {
3674
+ logger.error(`${this.RECONNECT_MSG}${err &amp;&amp; ` - ${err}`}`);
3675
+ }
3676
+ });
3677
+ &nbsp;
3678
+ this.oldConnection.once('connect', async () =&gt; {
3679
+ debug('rabbit: connection established');
3680
+ this.oldCreatingConnection = false;
3681
+ this.oldEm.emit(CONNECTION_CREATED_CONST, connection);
3682
+ isResolved = true;
3683
+ resolve(connection);
3684
+ });
3685
+ });
3686
+ }
3687
+ &nbsp;
3688
+ private saveConsumerOld(queue: string, callback: CallbackFunction, options: ConsumeOptions | undefined) {
3689
+ const isConsumerExist :boolean = this.oldConsumers.some((consumer) =&gt; consumer.queue === queue);
3690
+ if (!isConsumerExist) {
3691
+ logger.info(`rabbit: consumer: ${queue} saved in consumer array`);
3692
+ this.oldConsumers.push({
3693
+ queue,
3694
+ callback,
3695
+ options,
3696
+ });
3697
+ }
3698
+ }
3699
+ &nbsp;
3700
+ async assertQueueOld(queueName: string, options?: Options.AssertQueue): Promise&lt;any&gt; {
3701
+ RabbitMq.validateName('queue', queueName);
3702
+ if (this.oldQueues[queueName]) {
3703
+ delete this.oldQueueSetupPromises[queueName];
3704
+ return this.oldQueues[queueName];
3705
+ }
3706
+ &nbsp;
3707
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.oldQueueSetupPromises[queueName]) {
3708
+ <span class="cstat-no" title="statement not covered" > return this.oldQueueSetupPromises[queueName];</span>
3709
+ }
3710
+ &nbsp;
3711
+ this.oldQueueSetupPromises[queueName] = this.setupQueueOld(queueName, options);
3712
+ return this.oldQueueSetupPromises[queueName];
3713
+ }
3714
+ &nbsp;
3715
+ async setupQueueOld(queueName: string, options?: Options.AssertQueue): Promise&lt;Replies.AssertQueue&gt; {
3716
+ let queue: Replies.AssertQueue;
3717
+ const shouldUseQuorum = RabbitMq.shouldUseQuorum(queueName);
3718
+ const localeOptions = {
3719
+ ...options,
3720
+ durable: true,
3721
+ arguments: {
3722
+ ...options?.arguments,
3723
+ 'x-consumer-timeout': 1000 * 60 * 60 * 24,
3724
+ 'x-queue-type': shouldUseQuorum ? 'quorum' : 'classic',
3725
+ },
3726
+ };
3727
+ try {
3728
+ const channel: ChannelWrapper = await this.assertChannelOld();
3729
+ debug('assertQueue-&gt;channel.addSetup', { queueName });
3730
+ await channel.addSetup((setupChannel: ConfirmChannel) =&gt; setupChannel.assertQueue(queueName, localeOptions));
3731
+ debug('assertQueue-&gt;channel.assertQueue', { queueName });
3732
+ queue = await channel.assertQueue(queueName, localeOptions);
3733
+ } catch (e) {
3734
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: assertQueue error', { queueName, options, error: e });</span>
3735
+ <span class="cstat-no" title="statement not covered" > if (!this.options?.dontRetryAssert) {</span>
3736
+ <span class="cstat-no" title="statement not covered" > debug('retrying assertQueue', { queueName });</span>
3737
+ const channel = <span class="cstat-no" title="statement not covered" >await this.assertChannelOld({ force: true });</span>
3738
+ <span class="cstat-no" title="statement not covered" > await this.deleteQueueOld(queueName);</span>
3739
+ &nbsp;
3740
+ <span class="cstat-no" title="statement not covered" > debug('retrying assertQueue-&gt;channel.addSetup', { queueName });</span>
3741
+ <span class="cstat-no" title="statement not covered" > await channel.addSetup(<span class="fstat-no" title="function not covered" >(s</span>etupChannel: ConfirmChannel) =&gt; <span class="cstat-no" title="statement not covered" >setupChannel.assertQueue(queueName, localeOptions))</span>;</span>
3742
+ <span class="cstat-no" title="statement not covered" > debug('retrying assertQueue-&gt;channel.assertQueue', { queueName });</span>
3743
+ <span class="cstat-no" title="statement not covered" > queue = await channel.assertQueue(queueName, localeOptions);</span>
3744
+ } else {
3745
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3746
+ }
3747
+ }
3748
+ &nbsp;
3749
+ this.oldQueues[queueName] = queue;
3750
+ return queue;
3751
+ }
3752
+ &nbsp;
3753
+ async assertChannelOld({ force = false } : assertChannelOpts = {}): Promise&lt;ChannelWrapper&gt; {
3754
+ if (!this.oldPublishChannelSetupPromise) {
3755
+ this.oldPublishChannelSetupPromise = new Promise&lt;ChannelWrapper&gt;(async (resolve, reject) =&gt; {
3756
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.oldChannel &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!force)</span> {
3757
+ <span class="cstat-no" title="statement not covered" > return resolve(this.oldChannel);</span>
3758
+ }
3759
+ &nbsp;
3760
+ try {
3761
+ const channel = await this.getNewChannelOld({});
3762
+ channel.on('error', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {
3763
+ <span class="cstat-no" title="statement not covered" > logger.error('rabbit: channel error', { err });</span>
3764
+ });
3765
+ this.oldChannel = channel;
3766
+ resolve(channel);
3767
+ } catch (e) {
3768
+ <span class="cstat-no" title="statement not covered" > reject(e);</span>
3769
+ }
3770
+ });
3771
+ }
3772
+ return this.oldPublishChannelSetupPromise;
3773
+ }
3774
+ &nbsp;
3775
+ private <span class="fstat-no" title="function not covered" >async </span>deleteQueueOld(queue: string) {
3776
+ <span class="cstat-no" title="statement not covered" > RabbitMq.validateName('queue', queue);</span>
3777
+ const channel: ChannelWrapper = <span class="cstat-no" title="statement not covered" >await this.assertChannelOld();</span>
3778
+ <span class="cstat-no" title="statement not covered" > logger.info('rabbit: deleting queue', { queue });</span>
3779
+ const deleteQueueRes = <span class="cstat-no" title="statement not covered" >await channel.deleteQueue(queue);</span>
3780
+ <span class="cstat-no" title="statement not covered" > debug('queue deleted', deleteQueueRes);</span>
3781
+ <span class="cstat-no" title="statement not covered" > return deleteQueueRes;</span>
3782
+ }
3783
+ &nbsp;
3784
+ async assertExchangeOld(exchangeName: string, options?: any) {
3785
+ const channel: ChannelWrapper = await this.assertChannelOld();
3786
+ &nbsp;
3787
+ if (this.oldExchanges[exchangeName]) {
3788
+ delete this.oldAssertExchangePromises[exchangeName];
3789
+ return this.oldExchanges[exchangeName];
3790
+ }
3791
+ &nbsp;
3792
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.oldAssertExchangePromises[exchangeName]) {
3793
+ <span class="cstat-no" title="statement not covered" > return this.oldAssertExchangePromises[exchangeName];</span>
3794
+ }
3795
+ &nbsp;
3796
+ this.oldAssertExchangePromises[exchangeName] = assertExchangeFanout(channel, exchangeName);
3797
+ this.oldExchanges[exchangeName] = await this.oldAssertExchangePromises[exchangeName];
3798
+ return this.oldExchanges[exchangeName];
3799
+ }
3800
+ }
3801
+ &nbsp;
3802
+ export default RabbitMq;
3803
+ &nbsp;
3804
+ export {
3805
+ <span class="fstat-no" title="function not covered" > sendCeleryTaskViaHttp,</span>
3806
+ } from './lib/celery';
3807
+ &nbsp;</pre></td></tr></table></pre>
3808
+
3809
+ <div class='push'></div><!-- for sticky footer -->
3810
+ </div><!-- /wrapper -->
3811
+ <div class='footer quiet pad2 space-top1 center small'>
3812
+ Code coverage generated by
3813
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3814
+ at 2025-03-27T13:05:08.358Z
3815
+ </div>
3816
+ <script src="../prettify.js"></script>
3817
+ <script>
3818
+ window.onload = function () {
3819
+ prettyPrint();
3820
+ };
3821
+ </script>
3822
+ <script src="../sorter.js"></script>
3823
+ <script src="../block-navigation.js"></script>
3824
+ </body>
3825
+ </html>
3826
+