bsv-bap 0.0.1 → 0.0.3

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 (71) hide show
  1. package/dist/api.d.ts +10 -0
  2. package/dist/apiTypes.d.ts +36 -0
  3. package/dist/{src/constants.d.ts → constants.d.ts} +2 -2
  4. package/dist/{src/id.d.ts → id.d.ts} +13 -32
  5. package/dist/index.cjs +2 -0
  6. package/dist/index.cjs.map +1 -0
  7. package/dist/index.d.ts +234 -0
  8. package/dist/index.modern.js +2 -0
  9. package/dist/index.modern.js.map +1 -0
  10. package/dist/index.module.js +2 -0
  11. package/dist/index.module.js.map +1 -0
  12. package/dist/index.umd.js +2 -0
  13. package/dist/index.umd.js.map +1 -0
  14. package/dist/{src/interface.d.ts → interface.d.ts} +8 -4
  15. package/dist/{src/poa.d.ts → poa.d.ts} +1 -1
  16. package/dist/{src/utils.d.ts → utils.d.ts} +0 -1
  17. package/package.json +30 -57
  18. package/.babelrc +0 -20
  19. package/.eslintrc +0 -46
  20. package/babel.config.js +0 -6
  21. package/bun.lockb +0 -0
  22. package/coverage/clover.xml +0 -6
  23. package/coverage/coverage-final.json +0 -1
  24. package/coverage/lcov-report/base.css +0 -224
  25. package/coverage/lcov-report/block-navigation.js +0 -87
  26. package/coverage/lcov-report/favicon.png +0 -0
  27. package/coverage/lcov-report/index.html +0 -101
  28. package/coverage/lcov-report/prettify.css +0 -1
  29. package/coverage/lcov-report/prettify.js +0 -2
  30. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  31. package/coverage/lcov-report/sorter.js +0 -196
  32. package/coverage/lcov-report/src/constants.ts.html +0 -113
  33. package/coverage/lcov-report/src/id.ts.html +0 -2207
  34. package/coverage/lcov-report/src/index.html +0 -156
  35. package/coverage/lcov-report/src/index.ts.html +0 -1877
  36. package/coverage/lcov-report/src/utils.ts.html +0 -404
  37. package/coverage/lcov-report/tests/data/index.html +0 -111
  38. package/coverage/lcov-report/tests/data/keys.js.html +0 -86
  39. package/coverage/lcov.info +0 -0
  40. package/dist/jest.config.d.ts +0 -8
  41. package/dist/src/index.d.ts +0 -238
  42. package/dist/typescript-npm-package.cjs.d.ts +0 -554
  43. package/dist/typescript-npm-package.cjs.js +0 -1320
  44. package/dist/typescript-npm-package.cjs.js.map +0 -1
  45. package/dist/typescript-npm-package.esm.d.ts +0 -554
  46. package/dist/typescript-npm-package.esm.js +0 -1312
  47. package/dist/typescript-npm-package.esm.js.map +0 -1
  48. package/dist/typescript-npm-package.umd.d.ts +0 -554
  49. package/dist/typescript-npm-package.umd.js +0 -110193
  50. package/dist/typescript-npm-package.umd.js.map +0 -1
  51. package/jest.config.ts +0 -196
  52. package/jsdoc.json +0 -16
  53. package/rollup.config.js +0 -64
  54. package/setup-jest.js +0 -1
  55. package/src/README.md +0 -80
  56. package/src/attributes.json +0 -119
  57. package/src/constants.ts +0 -11
  58. package/src/id.ts +0 -783
  59. package/src/index.ts +0 -631
  60. package/src/interface.ts +0 -26
  61. package/src/poa.ts +0 -9
  62. package/src/utils.ts +0 -111
  63. package/tests/data/ids.json +0 -30
  64. package/tests/data/keys.js +0 -2
  65. package/tests/data/old-ids.json +0 -25
  66. package/tests/data/test-vectors.json +0 -122
  67. package/tests/id.test.js +0 -286
  68. package/tests/index.test.js +0 -335
  69. package/tests/regression.test.js +0 -28
  70. package/tests/utils.test.js +0 -27
  71. package/tsconfig.json +0 -17
@@ -1,2207 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/id.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> id.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">7.98% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>15/188</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">4.88% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>4/82</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">3.92% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>2/51</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">8.02% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>15/187</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
- </div>
58
- <div class='status-line low'></div>
59
- <pre><table class="coverage">
60
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
- <a name='L2'></a><a href='#L2'>2</a>
62
- <a name='L3'></a><a href='#L3'>3</a>
63
- <a name='L4'></a><a href='#L4'>4</a>
64
- <a name='L5'></a><a href='#L5'>5</a>
65
- <a name='L6'></a><a href='#L6'>6</a>
66
- <a name='L7'></a><a href='#L7'>7</a>
67
- <a name='L8'></a><a href='#L8'>8</a>
68
- <a name='L9'></a><a href='#L9'>9</a>
69
- <a name='L10'></a><a href='#L10'>10</a>
70
- <a name='L11'></a><a href='#L11'>11</a>
71
- <a name='L12'></a><a href='#L12'>12</a>
72
- <a name='L13'></a><a href='#L13'>13</a>
73
- <a name='L14'></a><a href='#L14'>14</a>
74
- <a name='L15'></a><a href='#L15'>15</a>
75
- <a name='L16'></a><a href='#L16'>16</a>
76
- <a name='L17'></a><a href='#L17'>17</a>
77
- <a name='L18'></a><a href='#L18'>18</a>
78
- <a name='L19'></a><a href='#L19'>19</a>
79
- <a name='L20'></a><a href='#L20'>20</a>
80
- <a name='L21'></a><a href='#L21'>21</a>
81
- <a name='L22'></a><a href='#L22'>22</a>
82
- <a name='L23'></a><a href='#L23'>23</a>
83
- <a name='L24'></a><a href='#L24'>24</a>
84
- <a name='L25'></a><a href='#L25'>25</a>
85
- <a name='L26'></a><a href='#L26'>26</a>
86
- <a name='L27'></a><a href='#L27'>27</a>
87
- <a name='L28'></a><a href='#L28'>28</a>
88
- <a name='L29'></a><a href='#L29'>29</a>
89
- <a name='L30'></a><a href='#L30'>30</a>
90
- <a name='L31'></a><a href='#L31'>31</a>
91
- <a name='L32'></a><a href='#L32'>32</a>
92
- <a name='L33'></a><a href='#L33'>33</a>
93
- <a name='L34'></a><a href='#L34'>34</a>
94
- <a name='L35'></a><a href='#L35'>35</a>
95
- <a name='L36'></a><a href='#L36'>36</a>
96
- <a name='L37'></a><a href='#L37'>37</a>
97
- <a name='L38'></a><a href='#L38'>38</a>
98
- <a name='L39'></a><a href='#L39'>39</a>
99
- <a name='L40'></a><a href='#L40'>40</a>
100
- <a name='L41'></a><a href='#L41'>41</a>
101
- <a name='L42'></a><a href='#L42'>42</a>
102
- <a name='L43'></a><a href='#L43'>43</a>
103
- <a name='L44'></a><a href='#L44'>44</a>
104
- <a name='L45'></a><a href='#L45'>45</a>
105
- <a name='L46'></a><a href='#L46'>46</a>
106
- <a name='L47'></a><a href='#L47'>47</a>
107
- <a name='L48'></a><a href='#L48'>48</a>
108
- <a name='L49'></a><a href='#L49'>49</a>
109
- <a name='L50'></a><a href='#L50'>50</a>
110
- <a name='L51'></a><a href='#L51'>51</a>
111
- <a name='L52'></a><a href='#L52'>52</a>
112
- <a name='L53'></a><a href='#L53'>53</a>
113
- <a name='L54'></a><a href='#L54'>54</a>
114
- <a name='L55'></a><a href='#L55'>55</a>
115
- <a name='L56'></a><a href='#L56'>56</a>
116
- <a name='L57'></a><a href='#L57'>57</a>
117
- <a name='L58'></a><a href='#L58'>58</a>
118
- <a name='L59'></a><a href='#L59'>59</a>
119
- <a name='L60'></a><a href='#L60'>60</a>
120
- <a name='L61'></a><a href='#L61'>61</a>
121
- <a name='L62'></a><a href='#L62'>62</a>
122
- <a name='L63'></a><a href='#L63'>63</a>
123
- <a name='L64'></a><a href='#L64'>64</a>
124
- <a name='L65'></a><a href='#L65'>65</a>
125
- <a name='L66'></a><a href='#L66'>66</a>
126
- <a name='L67'></a><a href='#L67'>67</a>
127
- <a name='L68'></a><a href='#L68'>68</a>
128
- <a name='L69'></a><a href='#L69'>69</a>
129
- <a name='L70'></a><a href='#L70'>70</a>
130
- <a name='L71'></a><a href='#L71'>71</a>
131
- <a name='L72'></a><a href='#L72'>72</a>
132
- <a name='L73'></a><a href='#L73'>73</a>
133
- <a name='L74'></a><a href='#L74'>74</a>
134
- <a name='L75'></a><a href='#L75'>75</a>
135
- <a name='L76'></a><a href='#L76'>76</a>
136
- <a name='L77'></a><a href='#L77'>77</a>
137
- <a name='L78'></a><a href='#L78'>78</a>
138
- <a name='L79'></a><a href='#L79'>79</a>
139
- <a name='L80'></a><a href='#L80'>80</a>
140
- <a name='L81'></a><a href='#L81'>81</a>
141
- <a name='L82'></a><a href='#L82'>82</a>
142
- <a name='L83'></a><a href='#L83'>83</a>
143
- <a name='L84'></a><a href='#L84'>84</a>
144
- <a name='L85'></a><a href='#L85'>85</a>
145
- <a name='L86'></a><a href='#L86'>86</a>
146
- <a name='L87'></a><a href='#L87'>87</a>
147
- <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a>
149
- <a name='L90'></a><a href='#L90'>90</a>
150
- <a name='L91'></a><a href='#L91'>91</a>
151
- <a name='L92'></a><a href='#L92'>92</a>
152
- <a name='L93'></a><a href='#L93'>93</a>
153
- <a name='L94'></a><a href='#L94'>94</a>
154
- <a name='L95'></a><a href='#L95'>95</a>
155
- <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a>
157
- <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a>
159
- <a name='L100'></a><a href='#L100'>100</a>
160
- <a name='L101'></a><a href='#L101'>101</a>
161
- <a name='L102'></a><a href='#L102'>102</a>
162
- <a name='L103'></a><a href='#L103'>103</a>
163
- <a name='L104'></a><a href='#L104'>104</a>
164
- <a name='L105'></a><a href='#L105'>105</a>
165
- <a name='L106'></a><a href='#L106'>106</a>
166
- <a name='L107'></a><a href='#L107'>107</a>
167
- <a name='L108'></a><a href='#L108'>108</a>
168
- <a name='L109'></a><a href='#L109'>109</a>
169
- <a name='L110'></a><a href='#L110'>110</a>
170
- <a name='L111'></a><a href='#L111'>111</a>
171
- <a name='L112'></a><a href='#L112'>112</a>
172
- <a name='L113'></a><a href='#L113'>113</a>
173
- <a name='L114'></a><a href='#L114'>114</a>
174
- <a name='L115'></a><a href='#L115'>115</a>
175
- <a name='L116'></a><a href='#L116'>116</a>
176
- <a name='L117'></a><a href='#L117'>117</a>
177
- <a name='L118'></a><a href='#L118'>118</a>
178
- <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a>
180
- <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a>
182
- <a name='L123'></a><a href='#L123'>123</a>
183
- <a name='L124'></a><a href='#L124'>124</a>
184
- <a name='L125'></a><a href='#L125'>125</a>
185
- <a name='L126'></a><a href='#L126'>126</a>
186
- <a name='L127'></a><a href='#L127'>127</a>
187
- <a name='L128'></a><a href='#L128'>128</a>
188
- <a name='L129'></a><a href='#L129'>129</a>
189
- <a name='L130'></a><a href='#L130'>130</a>
190
- <a name='L131'></a><a href='#L131'>131</a>
191
- <a name='L132'></a><a href='#L132'>132</a>
192
- <a name='L133'></a><a href='#L133'>133</a>
193
- <a name='L134'></a><a href='#L134'>134</a>
194
- <a name='L135'></a><a href='#L135'>135</a>
195
- <a name='L136'></a><a href='#L136'>136</a>
196
- <a name='L137'></a><a href='#L137'>137</a>
197
- <a name='L138'></a><a href='#L138'>138</a>
198
- <a name='L139'></a><a href='#L139'>139</a>
199
- <a name='L140'></a><a href='#L140'>140</a>
200
- <a name='L141'></a><a href='#L141'>141</a>
201
- <a name='L142'></a><a href='#L142'>142</a>
202
- <a name='L143'></a><a href='#L143'>143</a>
203
- <a name='L144'></a><a href='#L144'>144</a>
204
- <a name='L145'></a><a href='#L145'>145</a>
205
- <a name='L146'></a><a href='#L146'>146</a>
206
- <a name='L147'></a><a href='#L147'>147</a>
207
- <a name='L148'></a><a href='#L148'>148</a>
208
- <a name='L149'></a><a href='#L149'>149</a>
209
- <a name='L150'></a><a href='#L150'>150</a>
210
- <a name='L151'></a><a href='#L151'>151</a>
211
- <a name='L152'></a><a href='#L152'>152</a>
212
- <a name='L153'></a><a href='#L153'>153</a>
213
- <a name='L154'></a><a href='#L154'>154</a>
214
- <a name='L155'></a><a href='#L155'>155</a>
215
- <a name='L156'></a><a href='#L156'>156</a>
216
- <a name='L157'></a><a href='#L157'>157</a>
217
- <a name='L158'></a><a href='#L158'>158</a>
218
- <a name='L159'></a><a href='#L159'>159</a>
219
- <a name='L160'></a><a href='#L160'>160</a>
220
- <a name='L161'></a><a href='#L161'>161</a>
221
- <a name='L162'></a><a href='#L162'>162</a>
222
- <a name='L163'></a><a href='#L163'>163</a>
223
- <a name='L164'></a><a href='#L164'>164</a>
224
- <a name='L165'></a><a href='#L165'>165</a>
225
- <a name='L166'></a><a href='#L166'>166</a>
226
- <a name='L167'></a><a href='#L167'>167</a>
227
- <a name='L168'></a><a href='#L168'>168</a>
228
- <a name='L169'></a><a href='#L169'>169</a>
229
- <a name='L170'></a><a href='#L170'>170</a>
230
- <a name='L171'></a><a href='#L171'>171</a>
231
- <a name='L172'></a><a href='#L172'>172</a>
232
- <a name='L173'></a><a href='#L173'>173</a>
233
- <a name='L174'></a><a href='#L174'>174</a>
234
- <a name='L175'></a><a href='#L175'>175</a>
235
- <a name='L176'></a><a href='#L176'>176</a>
236
- <a name='L177'></a><a href='#L177'>177</a>
237
- <a name='L178'></a><a href='#L178'>178</a>
238
- <a name='L179'></a><a href='#L179'>179</a>
239
- <a name='L180'></a><a href='#L180'>180</a>
240
- <a name='L181'></a><a href='#L181'>181</a>
241
- <a name='L182'></a><a href='#L182'>182</a>
242
- <a name='L183'></a><a href='#L183'>183</a>
243
- <a name='L184'></a><a href='#L184'>184</a>
244
- <a name='L185'></a><a href='#L185'>185</a>
245
- <a name='L186'></a><a href='#L186'>186</a>
246
- <a name='L187'></a><a href='#L187'>187</a>
247
- <a name='L188'></a><a href='#L188'>188</a>
248
- <a name='L189'></a><a href='#L189'>189</a>
249
- <a name='L190'></a><a href='#L190'>190</a>
250
- <a name='L191'></a><a href='#L191'>191</a>
251
- <a name='L192'></a><a href='#L192'>192</a>
252
- <a name='L193'></a><a href='#L193'>193</a>
253
- <a name='L194'></a><a href='#L194'>194</a>
254
- <a name='L195'></a><a href='#L195'>195</a>
255
- <a name='L196'></a><a href='#L196'>196</a>
256
- <a name='L197'></a><a href='#L197'>197</a>
257
- <a name='L198'></a><a href='#L198'>198</a>
258
- <a name='L199'></a><a href='#L199'>199</a>
259
- <a name='L200'></a><a href='#L200'>200</a>
260
- <a name='L201'></a><a href='#L201'>201</a>
261
- <a name='L202'></a><a href='#L202'>202</a>
262
- <a name='L203'></a><a href='#L203'>203</a>
263
- <a name='L204'></a><a href='#L204'>204</a>
264
- <a name='L205'></a><a href='#L205'>205</a>
265
- <a name='L206'></a><a href='#L206'>206</a>
266
- <a name='L207'></a><a href='#L207'>207</a>
267
- <a name='L208'></a><a href='#L208'>208</a>
268
- <a name='L209'></a><a href='#L209'>209</a>
269
- <a name='L210'></a><a href='#L210'>210</a>
270
- <a name='L211'></a><a href='#L211'>211</a>
271
- <a name='L212'></a><a href='#L212'>212</a>
272
- <a name='L213'></a><a href='#L213'>213</a>
273
- <a name='L214'></a><a href='#L214'>214</a>
274
- <a name='L215'></a><a href='#L215'>215</a>
275
- <a name='L216'></a><a href='#L216'>216</a>
276
- <a name='L217'></a><a href='#L217'>217</a>
277
- <a name='L218'></a><a href='#L218'>218</a>
278
- <a name='L219'></a><a href='#L219'>219</a>
279
- <a name='L220'></a><a href='#L220'>220</a>
280
- <a name='L221'></a><a href='#L221'>221</a>
281
- <a name='L222'></a><a href='#L222'>222</a>
282
- <a name='L223'></a><a href='#L223'>223</a>
283
- <a name='L224'></a><a href='#L224'>224</a>
284
- <a name='L225'></a><a href='#L225'>225</a>
285
- <a name='L226'></a><a href='#L226'>226</a>
286
- <a name='L227'></a><a href='#L227'>227</a>
287
- <a name='L228'></a><a href='#L228'>228</a>
288
- <a name='L229'></a><a href='#L229'>229</a>
289
- <a name='L230'></a><a href='#L230'>230</a>
290
- <a name='L231'></a><a href='#L231'>231</a>
291
- <a name='L232'></a><a href='#L232'>232</a>
292
- <a name='L233'></a><a href='#L233'>233</a>
293
- <a name='L234'></a><a href='#L234'>234</a>
294
- <a name='L235'></a><a href='#L235'>235</a>
295
- <a name='L236'></a><a href='#L236'>236</a>
296
- <a name='L237'></a><a href='#L237'>237</a>
297
- <a name='L238'></a><a href='#L238'>238</a>
298
- <a name='L239'></a><a href='#L239'>239</a>
299
- <a name='L240'></a><a href='#L240'>240</a>
300
- <a name='L241'></a><a href='#L241'>241</a>
301
- <a name='L242'></a><a href='#L242'>242</a>
302
- <a name='L243'></a><a href='#L243'>243</a>
303
- <a name='L244'></a><a href='#L244'>244</a>
304
- <a name='L245'></a><a href='#L245'>245</a>
305
- <a name='L246'></a><a href='#L246'>246</a>
306
- <a name='L247'></a><a href='#L247'>247</a>
307
- <a name='L248'></a><a href='#L248'>248</a>
308
- <a name='L249'></a><a href='#L249'>249</a>
309
- <a name='L250'></a><a href='#L250'>250</a>
310
- <a name='L251'></a><a href='#L251'>251</a>
311
- <a name='L252'></a><a href='#L252'>252</a>
312
- <a name='L253'></a><a href='#L253'>253</a>
313
- <a name='L254'></a><a href='#L254'>254</a>
314
- <a name='L255'></a><a href='#L255'>255</a>
315
- <a name='L256'></a><a href='#L256'>256</a>
316
- <a name='L257'></a><a href='#L257'>257</a>
317
- <a name='L258'></a><a href='#L258'>258</a>
318
- <a name='L259'></a><a href='#L259'>259</a>
319
- <a name='L260'></a><a href='#L260'>260</a>
320
- <a name='L261'></a><a href='#L261'>261</a>
321
- <a name='L262'></a><a href='#L262'>262</a>
322
- <a name='L263'></a><a href='#L263'>263</a>
323
- <a name='L264'></a><a href='#L264'>264</a>
324
- <a name='L265'></a><a href='#L265'>265</a>
325
- <a name='L266'></a><a href='#L266'>266</a>
326
- <a name='L267'></a><a href='#L267'>267</a>
327
- <a name='L268'></a><a href='#L268'>268</a>
328
- <a name='L269'></a><a href='#L269'>269</a>
329
- <a name='L270'></a><a href='#L270'>270</a>
330
- <a name='L271'></a><a href='#L271'>271</a>
331
- <a name='L272'></a><a href='#L272'>272</a>
332
- <a name='L273'></a><a href='#L273'>273</a>
333
- <a name='L274'></a><a href='#L274'>274</a>
334
- <a name='L275'></a><a href='#L275'>275</a>
335
- <a name='L276'></a><a href='#L276'>276</a>
336
- <a name='L277'></a><a href='#L277'>277</a>
337
- <a name='L278'></a><a href='#L278'>278</a>
338
- <a name='L279'></a><a href='#L279'>279</a>
339
- <a name='L280'></a><a href='#L280'>280</a>
340
- <a name='L281'></a><a href='#L281'>281</a>
341
- <a name='L282'></a><a href='#L282'>282</a>
342
- <a name='L283'></a><a href='#L283'>283</a>
343
- <a name='L284'></a><a href='#L284'>284</a>
344
- <a name='L285'></a><a href='#L285'>285</a>
345
- <a name='L286'></a><a href='#L286'>286</a>
346
- <a name='L287'></a><a href='#L287'>287</a>
347
- <a name='L288'></a><a href='#L288'>288</a>
348
- <a name='L289'></a><a href='#L289'>289</a>
349
- <a name='L290'></a><a href='#L290'>290</a>
350
- <a name='L291'></a><a href='#L291'>291</a>
351
- <a name='L292'></a><a href='#L292'>292</a>
352
- <a name='L293'></a><a href='#L293'>293</a>
353
- <a name='L294'></a><a href='#L294'>294</a>
354
- <a name='L295'></a><a href='#L295'>295</a>
355
- <a name='L296'></a><a href='#L296'>296</a>
356
- <a name='L297'></a><a href='#L297'>297</a>
357
- <a name='L298'></a><a href='#L298'>298</a>
358
- <a name='L299'></a><a href='#L299'>299</a>
359
- <a name='L300'></a><a href='#L300'>300</a>
360
- <a name='L301'></a><a href='#L301'>301</a>
361
- <a name='L302'></a><a href='#L302'>302</a>
362
- <a name='L303'></a><a href='#L303'>303</a>
363
- <a name='L304'></a><a href='#L304'>304</a>
364
- <a name='L305'></a><a href='#L305'>305</a>
365
- <a name='L306'></a><a href='#L306'>306</a>
366
- <a name='L307'></a><a href='#L307'>307</a>
367
- <a name='L308'></a><a href='#L308'>308</a>
368
- <a name='L309'></a><a href='#L309'>309</a>
369
- <a name='L310'></a><a href='#L310'>310</a>
370
- <a name='L311'></a><a href='#L311'>311</a>
371
- <a name='L312'></a><a href='#L312'>312</a>
372
- <a name='L313'></a><a href='#L313'>313</a>
373
- <a name='L314'></a><a href='#L314'>314</a>
374
- <a name='L315'></a><a href='#L315'>315</a>
375
- <a name='L316'></a><a href='#L316'>316</a>
376
- <a name='L317'></a><a href='#L317'>317</a>
377
- <a name='L318'></a><a href='#L318'>318</a>
378
- <a name='L319'></a><a href='#L319'>319</a>
379
- <a name='L320'></a><a href='#L320'>320</a>
380
- <a name='L321'></a><a href='#L321'>321</a>
381
- <a name='L322'></a><a href='#L322'>322</a>
382
- <a name='L323'></a><a href='#L323'>323</a>
383
- <a name='L324'></a><a href='#L324'>324</a>
384
- <a name='L325'></a><a href='#L325'>325</a>
385
- <a name='L326'></a><a href='#L326'>326</a>
386
- <a name='L327'></a><a href='#L327'>327</a>
387
- <a name='L328'></a><a href='#L328'>328</a>
388
- <a name='L329'></a><a href='#L329'>329</a>
389
- <a name='L330'></a><a href='#L330'>330</a>
390
- <a name='L331'></a><a href='#L331'>331</a>
391
- <a name='L332'></a><a href='#L332'>332</a>
392
- <a name='L333'></a><a href='#L333'>333</a>
393
- <a name='L334'></a><a href='#L334'>334</a>
394
- <a name='L335'></a><a href='#L335'>335</a>
395
- <a name='L336'></a><a href='#L336'>336</a>
396
- <a name='L337'></a><a href='#L337'>337</a>
397
- <a name='L338'></a><a href='#L338'>338</a>
398
- <a name='L339'></a><a href='#L339'>339</a>
399
- <a name='L340'></a><a href='#L340'>340</a>
400
- <a name='L341'></a><a href='#L341'>341</a>
401
- <a name='L342'></a><a href='#L342'>342</a>
402
- <a name='L343'></a><a href='#L343'>343</a>
403
- <a name='L344'></a><a href='#L344'>344</a>
404
- <a name='L345'></a><a href='#L345'>345</a>
405
- <a name='L346'></a><a href='#L346'>346</a>
406
- <a name='L347'></a><a href='#L347'>347</a>
407
- <a name='L348'></a><a href='#L348'>348</a>
408
- <a name='L349'></a><a href='#L349'>349</a>
409
- <a name='L350'></a><a href='#L350'>350</a>
410
- <a name='L351'></a><a href='#L351'>351</a>
411
- <a name='L352'></a><a href='#L352'>352</a>
412
- <a name='L353'></a><a href='#L353'>353</a>
413
- <a name='L354'></a><a href='#L354'>354</a>
414
- <a name='L355'></a><a href='#L355'>355</a>
415
- <a name='L356'></a><a href='#L356'>356</a>
416
- <a name='L357'></a><a href='#L357'>357</a>
417
- <a name='L358'></a><a href='#L358'>358</a>
418
- <a name='L359'></a><a href='#L359'>359</a>
419
- <a name='L360'></a><a href='#L360'>360</a>
420
- <a name='L361'></a><a href='#L361'>361</a>
421
- <a name='L362'></a><a href='#L362'>362</a>
422
- <a name='L363'></a><a href='#L363'>363</a>
423
- <a name='L364'></a><a href='#L364'>364</a>
424
- <a name='L365'></a><a href='#L365'>365</a>
425
- <a name='L366'></a><a href='#L366'>366</a>
426
- <a name='L367'></a><a href='#L367'>367</a>
427
- <a name='L368'></a><a href='#L368'>368</a>
428
- <a name='L369'></a><a href='#L369'>369</a>
429
- <a name='L370'></a><a href='#L370'>370</a>
430
- <a name='L371'></a><a href='#L371'>371</a>
431
- <a name='L372'></a><a href='#L372'>372</a>
432
- <a name='L373'></a><a href='#L373'>373</a>
433
- <a name='L374'></a><a href='#L374'>374</a>
434
- <a name='L375'></a><a href='#L375'>375</a>
435
- <a name='L376'></a><a href='#L376'>376</a>
436
- <a name='L377'></a><a href='#L377'>377</a>
437
- <a name='L378'></a><a href='#L378'>378</a>
438
- <a name='L379'></a><a href='#L379'>379</a>
439
- <a name='L380'></a><a href='#L380'>380</a>
440
- <a name='L381'></a><a href='#L381'>381</a>
441
- <a name='L382'></a><a href='#L382'>382</a>
442
- <a name='L383'></a><a href='#L383'>383</a>
443
- <a name='L384'></a><a href='#L384'>384</a>
444
- <a name='L385'></a><a href='#L385'>385</a>
445
- <a name='L386'></a><a href='#L386'>386</a>
446
- <a name='L387'></a><a href='#L387'>387</a>
447
- <a name='L388'></a><a href='#L388'>388</a>
448
- <a name='L389'></a><a href='#L389'>389</a>
449
- <a name='L390'></a><a href='#L390'>390</a>
450
- <a name='L391'></a><a href='#L391'>391</a>
451
- <a name='L392'></a><a href='#L392'>392</a>
452
- <a name='L393'></a><a href='#L393'>393</a>
453
- <a name='L394'></a><a href='#L394'>394</a>
454
- <a name='L395'></a><a href='#L395'>395</a>
455
- <a name='L396'></a><a href='#L396'>396</a>
456
- <a name='L397'></a><a href='#L397'>397</a>
457
- <a name='L398'></a><a href='#L398'>398</a>
458
- <a name='L399'></a><a href='#L399'>399</a>
459
- <a name='L400'></a><a href='#L400'>400</a>
460
- <a name='L401'></a><a href='#L401'>401</a>
461
- <a name='L402'></a><a href='#L402'>402</a>
462
- <a name='L403'></a><a href='#L403'>403</a>
463
- <a name='L404'></a><a href='#L404'>404</a>
464
- <a name='L405'></a><a href='#L405'>405</a>
465
- <a name='L406'></a><a href='#L406'>406</a>
466
- <a name='L407'></a><a href='#L407'>407</a>
467
- <a name='L408'></a><a href='#L408'>408</a>
468
- <a name='L409'></a><a href='#L409'>409</a>
469
- <a name='L410'></a><a href='#L410'>410</a>
470
- <a name='L411'></a><a href='#L411'>411</a>
471
- <a name='L412'></a><a href='#L412'>412</a>
472
- <a name='L413'></a><a href='#L413'>413</a>
473
- <a name='L414'></a><a href='#L414'>414</a>
474
- <a name='L415'></a><a href='#L415'>415</a>
475
- <a name='L416'></a><a href='#L416'>416</a>
476
- <a name='L417'></a><a href='#L417'>417</a>
477
- <a name='L418'></a><a href='#L418'>418</a>
478
- <a name='L419'></a><a href='#L419'>419</a>
479
- <a name='L420'></a><a href='#L420'>420</a>
480
- <a name='L421'></a><a href='#L421'>421</a>
481
- <a name='L422'></a><a href='#L422'>422</a>
482
- <a name='L423'></a><a href='#L423'>423</a>
483
- <a name='L424'></a><a href='#L424'>424</a>
484
- <a name='L425'></a><a href='#L425'>425</a>
485
- <a name='L426'></a><a href='#L426'>426</a>
486
- <a name='L427'></a><a href='#L427'>427</a>
487
- <a name='L428'></a><a href='#L428'>428</a>
488
- <a name='L429'></a><a href='#L429'>429</a>
489
- <a name='L430'></a><a href='#L430'>430</a>
490
- <a name='L431'></a><a href='#L431'>431</a>
491
- <a name='L432'></a><a href='#L432'>432</a>
492
- <a name='L433'></a><a href='#L433'>433</a>
493
- <a name='L434'></a><a href='#L434'>434</a>
494
- <a name='L435'></a><a href='#L435'>435</a>
495
- <a name='L436'></a><a href='#L436'>436</a>
496
- <a name='L437'></a><a href='#L437'>437</a>
497
- <a name='L438'></a><a href='#L438'>438</a>
498
- <a name='L439'></a><a href='#L439'>439</a>
499
- <a name='L440'></a><a href='#L440'>440</a>
500
- <a name='L441'></a><a href='#L441'>441</a>
501
- <a name='L442'></a><a href='#L442'>442</a>
502
- <a name='L443'></a><a href='#L443'>443</a>
503
- <a name='L444'></a><a href='#L444'>444</a>
504
- <a name='L445'></a><a href='#L445'>445</a>
505
- <a name='L446'></a><a href='#L446'>446</a>
506
- <a name='L447'></a><a href='#L447'>447</a>
507
- <a name='L448'></a><a href='#L448'>448</a>
508
- <a name='L449'></a><a href='#L449'>449</a>
509
- <a name='L450'></a><a href='#L450'>450</a>
510
- <a name='L451'></a><a href='#L451'>451</a>
511
- <a name='L452'></a><a href='#L452'>452</a>
512
- <a name='L453'></a><a href='#L453'>453</a>
513
- <a name='L454'></a><a href='#L454'>454</a>
514
- <a name='L455'></a><a href='#L455'>455</a>
515
- <a name='L456'></a><a href='#L456'>456</a>
516
- <a name='L457'></a><a href='#L457'>457</a>
517
- <a name='L458'></a><a href='#L458'>458</a>
518
- <a name='L459'></a><a href='#L459'>459</a>
519
- <a name='L460'></a><a href='#L460'>460</a>
520
- <a name='L461'></a><a href='#L461'>461</a>
521
- <a name='L462'></a><a href='#L462'>462</a>
522
- <a name='L463'></a><a href='#L463'>463</a>
523
- <a name='L464'></a><a href='#L464'>464</a>
524
- <a name='L465'></a><a href='#L465'>465</a>
525
- <a name='L466'></a><a href='#L466'>466</a>
526
- <a name='L467'></a><a href='#L467'>467</a>
527
- <a name='L468'></a><a href='#L468'>468</a>
528
- <a name='L469'></a><a href='#L469'>469</a>
529
- <a name='L470'></a><a href='#L470'>470</a>
530
- <a name='L471'></a><a href='#L471'>471</a>
531
- <a name='L472'></a><a href='#L472'>472</a>
532
- <a name='L473'></a><a href='#L473'>473</a>
533
- <a name='L474'></a><a href='#L474'>474</a>
534
- <a name='L475'></a><a href='#L475'>475</a>
535
- <a name='L476'></a><a href='#L476'>476</a>
536
- <a name='L477'></a><a href='#L477'>477</a>
537
- <a name='L478'></a><a href='#L478'>478</a>
538
- <a name='L479'></a><a href='#L479'>479</a>
539
- <a name='L480'></a><a href='#L480'>480</a>
540
- <a name='L481'></a><a href='#L481'>481</a>
541
- <a name='L482'></a><a href='#L482'>482</a>
542
- <a name='L483'></a><a href='#L483'>483</a>
543
- <a name='L484'></a><a href='#L484'>484</a>
544
- <a name='L485'></a><a href='#L485'>485</a>
545
- <a name='L486'></a><a href='#L486'>486</a>
546
- <a name='L487'></a><a href='#L487'>487</a>
547
- <a name='L488'></a><a href='#L488'>488</a>
548
- <a name='L489'></a><a href='#L489'>489</a>
549
- <a name='L490'></a><a href='#L490'>490</a>
550
- <a name='L491'></a><a href='#L491'>491</a>
551
- <a name='L492'></a><a href='#L492'>492</a>
552
- <a name='L493'></a><a href='#L493'>493</a>
553
- <a name='L494'></a><a href='#L494'>494</a>
554
- <a name='L495'></a><a href='#L495'>495</a>
555
- <a name='L496'></a><a href='#L496'>496</a>
556
- <a name='L497'></a><a href='#L497'>497</a>
557
- <a name='L498'></a><a href='#L498'>498</a>
558
- <a name='L499'></a><a href='#L499'>499</a>
559
- <a name='L500'></a><a href='#L500'>500</a>
560
- <a name='L501'></a><a href='#L501'>501</a>
561
- <a name='L502'></a><a href='#L502'>502</a>
562
- <a name='L503'></a><a href='#L503'>503</a>
563
- <a name='L504'></a><a href='#L504'>504</a>
564
- <a name='L505'></a><a href='#L505'>505</a>
565
- <a name='L506'></a><a href='#L506'>506</a>
566
- <a name='L507'></a><a href='#L507'>507</a>
567
- <a name='L508'></a><a href='#L508'>508</a>
568
- <a name='L509'></a><a href='#L509'>509</a>
569
- <a name='L510'></a><a href='#L510'>510</a>
570
- <a name='L511'></a><a href='#L511'>511</a>
571
- <a name='L512'></a><a href='#L512'>512</a>
572
- <a name='L513'></a><a href='#L513'>513</a>
573
- <a name='L514'></a><a href='#L514'>514</a>
574
- <a name='L515'></a><a href='#L515'>515</a>
575
- <a name='L516'></a><a href='#L516'>516</a>
576
- <a name='L517'></a><a href='#L517'>517</a>
577
- <a name='L518'></a><a href='#L518'>518</a>
578
- <a name='L519'></a><a href='#L519'>519</a>
579
- <a name='L520'></a><a href='#L520'>520</a>
580
- <a name='L521'></a><a href='#L521'>521</a>
581
- <a name='L522'></a><a href='#L522'>522</a>
582
- <a name='L523'></a><a href='#L523'>523</a>
583
- <a name='L524'></a><a href='#L524'>524</a>
584
- <a name='L525'></a><a href='#L525'>525</a>
585
- <a name='L526'></a><a href='#L526'>526</a>
586
- <a name='L527'></a><a href='#L527'>527</a>
587
- <a name='L528'></a><a href='#L528'>528</a>
588
- <a name='L529'></a><a href='#L529'>529</a>
589
- <a name='L530'></a><a href='#L530'>530</a>
590
- <a name='L531'></a><a href='#L531'>531</a>
591
- <a name='L532'></a><a href='#L532'>532</a>
592
- <a name='L533'></a><a href='#L533'>533</a>
593
- <a name='L534'></a><a href='#L534'>534</a>
594
- <a name='L535'></a><a href='#L535'>535</a>
595
- <a name='L536'></a><a href='#L536'>536</a>
596
- <a name='L537'></a><a href='#L537'>537</a>
597
- <a name='L538'></a><a href='#L538'>538</a>
598
- <a name='L539'></a><a href='#L539'>539</a>
599
- <a name='L540'></a><a href='#L540'>540</a>
600
- <a name='L541'></a><a href='#L541'>541</a>
601
- <a name='L542'></a><a href='#L542'>542</a>
602
- <a name='L543'></a><a href='#L543'>543</a>
603
- <a name='L544'></a><a href='#L544'>544</a>
604
- <a name='L545'></a><a href='#L545'>545</a>
605
- <a name='L546'></a><a href='#L546'>546</a>
606
- <a name='L547'></a><a href='#L547'>547</a>
607
- <a name='L548'></a><a href='#L548'>548</a>
608
- <a name='L549'></a><a href='#L549'>549</a>
609
- <a name='L550'></a><a href='#L550'>550</a>
610
- <a name='L551'></a><a href='#L551'>551</a>
611
- <a name='L552'></a><a href='#L552'>552</a>
612
- <a name='L553'></a><a href='#L553'>553</a>
613
- <a name='L554'></a><a href='#L554'>554</a>
614
- <a name='L555'></a><a href='#L555'>555</a>
615
- <a name='L556'></a><a href='#L556'>556</a>
616
- <a name='L557'></a><a href='#L557'>557</a>
617
- <a name='L558'></a><a href='#L558'>558</a>
618
- <a name='L559'></a><a href='#L559'>559</a>
619
- <a name='L560'></a><a href='#L560'>560</a>
620
- <a name='L561'></a><a href='#L561'>561</a>
621
- <a name='L562'></a><a href='#L562'>562</a>
622
- <a name='L563'></a><a href='#L563'>563</a>
623
- <a name='L564'></a><a href='#L564'>564</a>
624
- <a name='L565'></a><a href='#L565'>565</a>
625
- <a name='L566'></a><a href='#L566'>566</a>
626
- <a name='L567'></a><a href='#L567'>567</a>
627
- <a name='L568'></a><a href='#L568'>568</a>
628
- <a name='L569'></a><a href='#L569'>569</a>
629
- <a name='L570'></a><a href='#L570'>570</a>
630
- <a name='L571'></a><a href='#L571'>571</a>
631
- <a name='L572'></a><a href='#L572'>572</a>
632
- <a name='L573'></a><a href='#L573'>573</a>
633
- <a name='L574'></a><a href='#L574'>574</a>
634
- <a name='L575'></a><a href='#L575'>575</a>
635
- <a name='L576'></a><a href='#L576'>576</a>
636
- <a name='L577'></a><a href='#L577'>577</a>
637
- <a name='L578'></a><a href='#L578'>578</a>
638
- <a name='L579'></a><a href='#L579'>579</a>
639
- <a name='L580'></a><a href='#L580'>580</a>
640
- <a name='L581'></a><a href='#L581'>581</a>
641
- <a name='L582'></a><a href='#L582'>582</a>
642
- <a name='L583'></a><a href='#L583'>583</a>
643
- <a name='L584'></a><a href='#L584'>584</a>
644
- <a name='L585'></a><a href='#L585'>585</a>
645
- <a name='L586'></a><a href='#L586'>586</a>
646
- <a name='L587'></a><a href='#L587'>587</a>
647
- <a name='L588'></a><a href='#L588'>588</a>
648
- <a name='L589'></a><a href='#L589'>589</a>
649
- <a name='L590'></a><a href='#L590'>590</a>
650
- <a name='L591'></a><a href='#L591'>591</a>
651
- <a name='L592'></a><a href='#L592'>592</a>
652
- <a name='L593'></a><a href='#L593'>593</a>
653
- <a name='L594'></a><a href='#L594'>594</a>
654
- <a name='L595'></a><a href='#L595'>595</a>
655
- <a name='L596'></a><a href='#L596'>596</a>
656
- <a name='L597'></a><a href='#L597'>597</a>
657
- <a name='L598'></a><a href='#L598'>598</a>
658
- <a name='L599'></a><a href='#L599'>599</a>
659
- <a name='L600'></a><a href='#L600'>600</a>
660
- <a name='L601'></a><a href='#L601'>601</a>
661
- <a name='L602'></a><a href='#L602'>602</a>
662
- <a name='L603'></a><a href='#L603'>603</a>
663
- <a name='L604'></a><a href='#L604'>604</a>
664
- <a name='L605'></a><a href='#L605'>605</a>
665
- <a name='L606'></a><a href='#L606'>606</a>
666
- <a name='L607'></a><a href='#L607'>607</a>
667
- <a name='L608'></a><a href='#L608'>608</a>
668
- <a name='L609'></a><a href='#L609'>609</a>
669
- <a name='L610'></a><a href='#L610'>610</a>
670
- <a name='L611'></a><a href='#L611'>611</a>
671
- <a name='L612'></a><a href='#L612'>612</a>
672
- <a name='L613'></a><a href='#L613'>613</a>
673
- <a name='L614'></a><a href='#L614'>614</a>
674
- <a name='L615'></a><a href='#L615'>615</a>
675
- <a name='L616'></a><a href='#L616'>616</a>
676
- <a name='L617'></a><a href='#L617'>617</a>
677
- <a name='L618'></a><a href='#L618'>618</a>
678
- <a name='L619'></a><a href='#L619'>619</a>
679
- <a name='L620'></a><a href='#L620'>620</a>
680
- <a name='L621'></a><a href='#L621'>621</a>
681
- <a name='L622'></a><a href='#L622'>622</a>
682
- <a name='L623'></a><a href='#L623'>623</a>
683
- <a name='L624'></a><a href='#L624'>624</a>
684
- <a name='L625'></a><a href='#L625'>625</a>
685
- <a name='L626'></a><a href='#L626'>626</a>
686
- <a name='L627'></a><a href='#L627'>627</a>
687
- <a name='L628'></a><a href='#L628'>628</a>
688
- <a name='L629'></a><a href='#L629'>629</a>
689
- <a name='L630'></a><a href='#L630'>630</a>
690
- <a name='L631'></a><a href='#L631'>631</a>
691
- <a name='L632'></a><a href='#L632'>632</a>
692
- <a name='L633'></a><a href='#L633'>633</a>
693
- <a name='L634'></a><a href='#L634'>634</a>
694
- <a name='L635'></a><a href='#L635'>635</a>
695
- <a name='L636'></a><a href='#L636'>636</a>
696
- <a name='L637'></a><a href='#L637'>637</a>
697
- <a name='L638'></a><a href='#L638'>638</a>
698
- <a name='L639'></a><a href='#L639'>639</a>
699
- <a name='L640'></a><a href='#L640'>640</a>
700
- <a name='L641'></a><a href='#L641'>641</a>
701
- <a name='L642'></a><a href='#L642'>642</a>
702
- <a name='L643'></a><a href='#L643'>643</a>
703
- <a name='L644'></a><a href='#L644'>644</a>
704
- <a name='L645'></a><a href='#L645'>645</a>
705
- <a name='L646'></a><a href='#L646'>646</a>
706
- <a name='L647'></a><a href='#L647'>647</a>
707
- <a name='L648'></a><a href='#L648'>648</a>
708
- <a name='L649'></a><a href='#L649'>649</a>
709
- <a name='L650'></a><a href='#L650'>650</a>
710
- <a name='L651'></a><a href='#L651'>651</a>
711
- <a name='L652'></a><a href='#L652'>652</a>
712
- <a name='L653'></a><a href='#L653'>653</a>
713
- <a name='L654'></a><a href='#L654'>654</a>
714
- <a name='L655'></a><a href='#L655'>655</a>
715
- <a name='L656'></a><a href='#L656'>656</a>
716
- <a name='L657'></a><a href='#L657'>657</a>
717
- <a name='L658'></a><a href='#L658'>658</a>
718
- <a name='L659'></a><a href='#L659'>659</a>
719
- <a name='L660'></a><a href='#L660'>660</a>
720
- <a name='L661'></a><a href='#L661'>661</a>
721
- <a name='L662'></a><a href='#L662'>662</a>
722
- <a name='L663'></a><a href='#L663'>663</a>
723
- <a name='L664'></a><a href='#L664'>664</a>
724
- <a name='L665'></a><a href='#L665'>665</a>
725
- <a name='L666'></a><a href='#L666'>666</a>
726
- <a name='L667'></a><a href='#L667'>667</a>
727
- <a name='L668'></a><a href='#L668'>668</a>
728
- <a name='L669'></a><a href='#L669'>669</a>
729
- <a name='L670'></a><a href='#L670'>670</a>
730
- <a name='L671'></a><a href='#L671'>671</a>
731
- <a name='L672'></a><a href='#L672'>672</a>
732
- <a name='L673'></a><a href='#L673'>673</a>
733
- <a name='L674'></a><a href='#L674'>674</a>
734
- <a name='L675'></a><a href='#L675'>675</a>
735
- <a name='L676'></a><a href='#L676'>676</a>
736
- <a name='L677'></a><a href='#L677'>677</a>
737
- <a name='L678'></a><a href='#L678'>678</a>
738
- <a name='L679'></a><a href='#L679'>679</a>
739
- <a name='L680'></a><a href='#L680'>680</a>
740
- <a name='L681'></a><a href='#L681'>681</a>
741
- <a name='L682'></a><a href='#L682'>682</a>
742
- <a name='L683'></a><a href='#L683'>683</a>
743
- <a name='L684'></a><a href='#L684'>684</a>
744
- <a name='L685'></a><a href='#L685'>685</a>
745
- <a name='L686'></a><a href='#L686'>686</a>
746
- <a name='L687'></a><a href='#L687'>687</a>
747
- <a name='L688'></a><a href='#L688'>688</a>
748
- <a name='L689'></a><a href='#L689'>689</a>
749
- <a name='L690'></a><a href='#L690'>690</a>
750
- <a name='L691'></a><a href='#L691'>691</a>
751
- <a name='L692'></a><a href='#L692'>692</a>
752
- <a name='L693'></a><a href='#L693'>693</a>
753
- <a name='L694'></a><a href='#L694'>694</a>
754
- <a name='L695'></a><a href='#L695'>695</a>
755
- <a name='L696'></a><a href='#L696'>696</a>
756
- <a name='L697'></a><a href='#L697'>697</a>
757
- <a name='L698'></a><a href='#L698'>698</a>
758
- <a name='L699'></a><a href='#L699'>699</a>
759
- <a name='L700'></a><a href='#L700'>700</a>
760
- <a name='L701'></a><a href='#L701'>701</a>
761
- <a name='L702'></a><a href='#L702'>702</a>
762
- <a name='L703'></a><a href='#L703'>703</a>
763
- <a name='L704'></a><a href='#L704'>704</a>
764
- <a name='L705'></a><a href='#L705'>705</a>
765
- <a name='L706'></a><a href='#L706'>706</a>
766
- <a name='L707'></a><a href='#L707'>707</a>
767
- <a name='L708'></a><a href='#L708'>708</a>
768
- <a name='L709'></a><a href='#L709'>709</a>
769
- <a name='L710'></a><a href='#L710'>710</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-yes">32x</span>
789
- <span class="cline-any cline-yes">32x</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-yes">32x</span>
804
- <span class="cline-any cline-yes">32x</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-yes">1x</span>
807
- <span class="cline-any cline-no">&nbsp;</span>
808
- <span class="cline-any cline-no">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-yes">31x</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-yes">31x</span>
814
- <span class="cline-any cline-yes">31x</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-yes">31x</span>
817
- <span class="cline-any cline-yes">31x</span>
818
- <span class="cline-any cline-yes">31x</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-yes">31x</span>
821
- <span class="cline-any cline-yes">31x</span>
822
- <span class="cline-any cline-yes">31x</span>
823
- <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-no">&nbsp;</span>
826
- <span class="cline-any cline-no">&nbsp;</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-no">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-no">&nbsp;</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-yes">31x</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-no">&nbsp;</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-no">&nbsp;</span>
859
- <span class="cline-any cline-no">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-neutral">&nbsp;</span>
867
- <span class="cline-any cline-no">&nbsp;</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-neutral">&nbsp;</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-no">&nbsp;</span>
885
- <span class="cline-any cline-no">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-neutral">&nbsp;</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-no">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&nbsp;</span>
892
- <span class="cline-any cline-no">&nbsp;</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-neutral">&nbsp;</span>
901
- <span class="cline-any cline-neutral">&nbsp;</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-no">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-neutral">&nbsp;</span>
922
- <span class="cline-any cline-neutral">&nbsp;</span>
923
- <span class="cline-any cline-neutral">&nbsp;</span>
924
- <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-neutral">&nbsp;</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-no">&nbsp;</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-no">&nbsp;</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-neutral">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-neutral">&nbsp;</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-neutral">&nbsp;</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-no">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-no">&nbsp;</span>
949
- <span class="cline-any cline-neutral">&nbsp;</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-neutral">&nbsp;</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-neutral">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-no">&nbsp;</span>
961
- <span class="cline-any cline-neutral">&nbsp;</span>
962
- <span class="cline-any cline-neutral">&nbsp;</span>
963
- <span class="cline-any cline-neutral">&nbsp;</span>
964
- <span class="cline-any cline-neutral">&nbsp;</span>
965
- <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-neutral">&nbsp;</span>
967
- <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-neutral">&nbsp;</span>
969
- <span class="cline-any cline-no">&nbsp;</span>
970
- <span class="cline-any cline-no">&nbsp;</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-no">&nbsp;</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-no">&nbsp;</span>
975
- <span class="cline-any cline-neutral">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-neutral">&nbsp;</span>
978
- <span class="cline-any cline-no">&nbsp;</span>
979
- <span class="cline-any cline-neutral">&nbsp;</span>
980
- <span class="cline-any cline-neutral">&nbsp;</span>
981
- <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-neutral">&nbsp;</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-neutral">&nbsp;</span>
985
- <span class="cline-any cline-neutral">&nbsp;</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-no">&nbsp;</span>
989
- <span class="cline-any cline-no">&nbsp;</span>
990
- <span class="cline-any cline-no">&nbsp;</span>
991
- <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-neutral">&nbsp;</span>
993
- <span class="cline-any cline-no">&nbsp;</span>
994
- <span class="cline-any cline-neutral">&nbsp;</span>
995
- <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-neutral">&nbsp;</span>
997
- <span class="cline-any cline-neutral">&nbsp;</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-neutral">&nbsp;</span>
1002
- <span class="cline-any cline-neutral">&nbsp;</span>
1003
- <span class="cline-any cline-neutral">&nbsp;</span>
1004
- <span class="cline-any cline-no">&nbsp;</span>
1005
- <span class="cline-any cline-no">&nbsp;</span>
1006
- <span class="cline-any cline-neutral">&nbsp;</span>
1007
- <span class="cline-any cline-neutral">&nbsp;</span>
1008
- <span class="cline-any cline-no">&nbsp;</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-neutral">&nbsp;</span>
1013
- <span class="cline-any cline-neutral">&nbsp;</span>
1014
- <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-neutral">&nbsp;</span>
1016
- <span class="cline-any cline-neutral">&nbsp;</span>
1017
- <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-neutral">&nbsp;</span>
1019
- <span class="cline-any cline-neutral">&nbsp;</span>
1020
- <span class="cline-any cline-neutral">&nbsp;</span>
1021
- <span class="cline-any cline-no">&nbsp;</span>
1022
- <span class="cline-any cline-no">&nbsp;</span>
1023
- <span class="cline-any cline-no">&nbsp;</span>
1024
- <span class="cline-any cline-neutral">&nbsp;</span>
1025
- <span class="cline-any cline-neutral">&nbsp;</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-no">&nbsp;</span>
1028
- <span class="cline-any cline-neutral">&nbsp;</span>
1029
- <span class="cline-any cline-neutral">&nbsp;</span>
1030
- <span class="cline-any cline-no">&nbsp;</span>
1031
- <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-no">&nbsp;</span>
1033
- <span class="cline-any cline-no">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-no">&nbsp;</span>
1037
- <span class="cline-any cline-neutral">&nbsp;</span>
1038
- <span class="cline-any cline-neutral">&nbsp;</span>
1039
- <span class="cline-any cline-no">&nbsp;</span>
1040
- <span class="cline-any cline-no">&nbsp;</span>
1041
- <span class="cline-any cline-neutral">&nbsp;</span>
1042
- <span class="cline-any cline-neutral">&nbsp;</span>
1043
- <span class="cline-any cline-neutral">&nbsp;</span>
1044
- <span class="cline-any cline-neutral">&nbsp;</span>
1045
- <span class="cline-any cline-no">&nbsp;</span>
1046
- <span class="cline-any cline-neutral">&nbsp;</span>
1047
- <span class="cline-any cline-neutral">&nbsp;</span>
1048
- <span class="cline-any cline-neutral">&nbsp;</span>
1049
- <span class="cline-any cline-no">&nbsp;</span>
1050
- <span class="cline-any cline-neutral">&nbsp;</span>
1051
- <span class="cline-any cline-neutral">&nbsp;</span>
1052
- <span class="cline-any cline-neutral">&nbsp;</span>
1053
- <span class="cline-any cline-neutral">&nbsp;</span>
1054
- <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-neutral">&nbsp;</span>
1057
- <span class="cline-any cline-neutral">&nbsp;</span>
1058
- <span class="cline-any cline-neutral">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-neutral">&nbsp;</span>
1062
- <span class="cline-any cline-neutral">&nbsp;</span>
1063
- <span class="cline-any cline-no">&nbsp;</span>
1064
- <span class="cline-any cline-no">&nbsp;</span>
1065
- <span class="cline-any cline-neutral">&nbsp;</span>
1066
- <span class="cline-any cline-neutral">&nbsp;</span>
1067
- <span class="cline-any cline-no">&nbsp;</span>
1068
- <span class="cline-any cline-no">&nbsp;</span>
1069
- <span class="cline-any cline-neutral">&nbsp;</span>
1070
- <span class="cline-any cline-neutral">&nbsp;</span>
1071
- <span class="cline-any cline-neutral">&nbsp;</span>
1072
- <span class="cline-any cline-no">&nbsp;</span>
1073
- <span class="cline-any cline-neutral">&nbsp;</span>
1074
- <span class="cline-any cline-neutral">&nbsp;</span>
1075
- <span class="cline-any cline-neutral">&nbsp;</span>
1076
- <span class="cline-any cline-no">&nbsp;</span>
1077
- <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-neutral">&nbsp;</span>
1079
- <span class="cline-any cline-neutral">&nbsp;</span>
1080
- <span class="cline-any cline-neutral">&nbsp;</span>
1081
- <span class="cline-any cline-neutral">&nbsp;</span>
1082
- <span class="cline-any cline-neutral">&nbsp;</span>
1083
- <span class="cline-any cline-neutral">&nbsp;</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span>
1085
- <span class="cline-any cline-no">&nbsp;</span>
1086
- <span class="cline-any cline-neutral">&nbsp;</span>
1087
- <span class="cline-any cline-neutral">&nbsp;</span>
1088
- <span class="cline-any cline-neutral">&nbsp;</span>
1089
- <span class="cline-any cline-neutral">&nbsp;</span>
1090
- <span class="cline-any cline-neutral">&nbsp;</span>
1091
- <span class="cline-any cline-neutral">&nbsp;</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-no">&nbsp;</span>
1095
- <span class="cline-any cline-neutral">&nbsp;</span>
1096
- <span class="cline-any cline-neutral">&nbsp;</span>
1097
- <span class="cline-any cline-neutral">&nbsp;</span>
1098
- <span class="cline-any cline-neutral">&nbsp;</span>
1099
- <span class="cline-any cline-neutral">&nbsp;</span>
1100
- <span class="cline-any cline-neutral">&nbsp;</span>
1101
- <span class="cline-any cline-neutral">&nbsp;</span>
1102
- <span class="cline-any cline-neutral">&nbsp;</span>
1103
- <span class="cline-any cline-neutral">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-neutral">&nbsp;</span>
1106
- <span class="cline-any cline-no">&nbsp;</span>
1107
- <span class="cline-any cline-no">&nbsp;</span>
1108
- <span class="cline-any cline-no">&nbsp;</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-neutral">&nbsp;</span>
1112
- <span class="cline-any cline-neutral">&nbsp;</span>
1113
- <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-neutral">&nbsp;</span>
1115
- <span class="cline-any cline-neutral">&nbsp;</span>
1116
- <span class="cline-any cline-no">&nbsp;</span>
1117
- <span class="cline-any cline-neutral">&nbsp;</span>
1118
- <span class="cline-any cline-neutral">&nbsp;</span>
1119
- <span class="cline-any cline-neutral">&nbsp;</span>
1120
- <span class="cline-any cline-no">&nbsp;</span>
1121
- <span class="cline-any cline-neutral">&nbsp;</span>
1122
- <span class="cline-any cline-neutral">&nbsp;</span>
1123
- <span class="cline-any cline-neutral">&nbsp;</span>
1124
- <span class="cline-any cline-neutral">&nbsp;</span>
1125
- <span class="cline-any cline-neutral">&nbsp;</span>
1126
- <span class="cline-any cline-neutral">&nbsp;</span>
1127
- <span class="cline-any cline-neutral">&nbsp;</span>
1128
- <span class="cline-any cline-neutral">&nbsp;</span>
1129
- <span class="cline-any cline-no">&nbsp;</span>
1130
- <span class="cline-any cline-neutral">&nbsp;</span>
1131
- <span class="cline-any cline-neutral">&nbsp;</span>
1132
- <span class="cline-any cline-neutral">&nbsp;</span>
1133
- <span class="cline-any cline-neutral">&nbsp;</span>
1134
- <span class="cline-any cline-neutral">&nbsp;</span>
1135
- <span class="cline-any cline-neutral">&nbsp;</span>
1136
- <span class="cline-any cline-neutral">&nbsp;</span>
1137
- <span class="cline-any cline-neutral">&nbsp;</span>
1138
- <span class="cline-any cline-no">&nbsp;</span>
1139
- <span class="cline-any cline-no">&nbsp;</span>
1140
- <span class="cline-any cline-neutral">&nbsp;</span>
1141
- <span class="cline-any cline-neutral">&nbsp;</span>
1142
- <span class="cline-any cline-no">&nbsp;</span>
1143
- <span class="cline-any cline-neutral">&nbsp;</span>
1144
- <span class="cline-any cline-neutral">&nbsp;</span>
1145
- <span class="cline-any cline-neutral">&nbsp;</span>
1146
- <span class="cline-any cline-neutral">&nbsp;</span>
1147
- <span class="cline-any cline-neutral">&nbsp;</span>
1148
- <span class="cline-any cline-neutral">&nbsp;</span>
1149
- <span class="cline-any cline-no">&nbsp;</span>
1150
- <span class="cline-any cline-neutral">&nbsp;</span>
1151
- <span class="cline-any cline-no">&nbsp;</span>
1152
- <span class="cline-any cline-neutral">&nbsp;</span>
1153
- <span class="cline-any cline-neutral">&nbsp;</span>
1154
- <span class="cline-any cline-neutral">&nbsp;</span>
1155
- <span class="cline-any cline-neutral">&nbsp;</span>
1156
- <span class="cline-any cline-neutral">&nbsp;</span>
1157
- <span class="cline-any cline-neutral">&nbsp;</span>
1158
- <span class="cline-any cline-neutral">&nbsp;</span>
1159
- <span class="cline-any cline-neutral">&nbsp;</span>
1160
- <span class="cline-any cline-neutral">&nbsp;</span>
1161
- <span class="cline-any cline-no">&nbsp;</span>
1162
- <span class="cline-any cline-no">&nbsp;</span>
1163
- <span class="cline-any cline-neutral">&nbsp;</span>
1164
- <span class="cline-any cline-neutral">&nbsp;</span>
1165
- <span class="cline-any cline-neutral">&nbsp;</span>
1166
- <span class="cline-any cline-neutral">&nbsp;</span>
1167
- <span class="cline-any cline-neutral">&nbsp;</span>
1168
- <span class="cline-any cline-neutral">&nbsp;</span>
1169
- <span class="cline-any cline-neutral">&nbsp;</span>
1170
- <span class="cline-any cline-neutral">&nbsp;</span>
1171
- <span class="cline-any cline-no">&nbsp;</span>
1172
- <span class="cline-any cline-neutral">&nbsp;</span>
1173
- <span class="cline-any cline-neutral">&nbsp;</span>
1174
- <span class="cline-any cline-neutral">&nbsp;</span>
1175
- <span class="cline-any cline-neutral">&nbsp;</span>
1176
- <span class="cline-any cline-neutral">&nbsp;</span>
1177
- <span class="cline-any cline-neutral">&nbsp;</span>
1178
- <span class="cline-any cline-no">&nbsp;</span>
1179
- <span class="cline-any cline-no">&nbsp;</span>
1180
- <span class="cline-any cline-neutral">&nbsp;</span>
1181
- <span class="cline-any cline-no">&nbsp;</span>
1182
- <span class="cline-any cline-neutral">&nbsp;</span>
1183
- <span class="cline-any cline-neutral">&nbsp;</span>
1184
- <span class="cline-any cline-neutral">&nbsp;</span>
1185
- <span class="cline-any cline-neutral">&nbsp;</span>
1186
- <span class="cline-any cline-neutral">&nbsp;</span>
1187
- <span class="cline-any cline-neutral">&nbsp;</span>
1188
- <span class="cline-any cline-no">&nbsp;</span>
1189
- <span class="cline-any cline-neutral">&nbsp;</span>
1190
- <span class="cline-any cline-no">&nbsp;</span>
1191
- <span class="cline-any cline-neutral">&nbsp;</span>
1192
- <span class="cline-any cline-neutral">&nbsp;</span>
1193
- <span class="cline-any cline-neutral">&nbsp;</span>
1194
- <span class="cline-any cline-neutral">&nbsp;</span>
1195
- <span class="cline-any cline-neutral">&nbsp;</span>
1196
- <span class="cline-any cline-neutral">&nbsp;</span>
1197
- <span class="cline-any cline-neutral">&nbsp;</span>
1198
- <span class="cline-any cline-neutral">&nbsp;</span>
1199
- <span class="cline-any cline-neutral">&nbsp;</span>
1200
- <span class="cline-any cline-no">&nbsp;</span>
1201
- <span class="cline-any cline-no">&nbsp;</span>
1202
- <span class="cline-any cline-no">&nbsp;</span>
1203
- <span class="cline-any cline-neutral">&nbsp;</span>
1204
- <span class="cline-any cline-no">&nbsp;</span>
1205
- <span class="cline-any cline-no">&nbsp;</span>
1206
- <span class="cline-any cline-no">&nbsp;</span>
1207
- <span class="cline-any cline-no">&nbsp;</span>
1208
- <span class="cline-any cline-neutral">&nbsp;</span>
1209
- <span class="cline-any cline-no">&nbsp;</span>
1210
- <span class="cline-any cline-neutral">&nbsp;</span>
1211
- <span class="cline-any cline-no">&nbsp;</span>
1212
- <span class="cline-any cline-neutral">&nbsp;</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-neutral">&nbsp;</span>
1215
- <span class="cline-any cline-neutral">&nbsp;</span>
1216
- <span class="cline-any cline-neutral">&nbsp;</span>
1217
- <span class="cline-any cline-neutral">&nbsp;</span>
1218
- <span class="cline-any cline-neutral">&nbsp;</span>
1219
- <span class="cline-any cline-neutral">&nbsp;</span>
1220
- <span class="cline-any cline-no">&nbsp;</span>
1221
- <span class="cline-any cline-no">&nbsp;</span>
1222
- <span class="cline-any cline-no">&nbsp;</span>
1223
- <span class="cline-any cline-no">&nbsp;</span>
1224
- <span class="cline-any cline-no">&nbsp;</span>
1225
- <span class="cline-any cline-no">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-no">&nbsp;</span>
1228
- <span class="cline-any cline-neutral">&nbsp;</span>
1229
- <span class="cline-any cline-neutral">&nbsp;</span>
1230
- <span class="cline-any cline-neutral">&nbsp;</span>
1231
- <span class="cline-any cline-neutral">&nbsp;</span>
1232
- <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-neutral">&nbsp;</span>
1234
- <span class="cline-any cline-neutral">&nbsp;</span>
1235
- <span class="cline-any cline-neutral">&nbsp;</span>
1236
- <span class="cline-any cline-neutral">&nbsp;</span>
1237
- <span class="cline-any cline-neutral">&nbsp;</span>
1238
- <span class="cline-any cline-no">&nbsp;</span>
1239
- <span class="cline-any cline-no">&nbsp;</span>
1240
- <span class="cline-any cline-neutral">&nbsp;</span>
1241
- <span class="cline-any cline-no">&nbsp;</span>
1242
- <span class="cline-any cline-no">&nbsp;</span>
1243
- <span class="cline-any cline-no">&nbsp;</span>
1244
- <span class="cline-any cline-no">&nbsp;</span>
1245
- <span class="cline-any cline-neutral">&nbsp;</span>
1246
- <span class="cline-any cline-no">&nbsp;</span>
1247
- <span class="cline-any cline-neutral">&nbsp;</span>
1248
- <span class="cline-any cline-no">&nbsp;</span>
1249
- <span class="cline-any cline-neutral">&nbsp;</span>
1250
- <span class="cline-any cline-neutral">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-neutral">&nbsp;</span>
1253
- <span class="cline-any cline-neutral">&nbsp;</span>
1254
- <span class="cline-any cline-neutral">&nbsp;</span>
1255
- <span class="cline-any cline-neutral">&nbsp;</span>
1256
- <span class="cline-any cline-neutral">&nbsp;</span>
1257
- <span class="cline-any cline-neutral">&nbsp;</span>
1258
- <span class="cline-any cline-no">&nbsp;</span>
1259
- <span class="cline-any cline-no">&nbsp;</span>
1260
- <span class="cline-any cline-no">&nbsp;</span>
1261
- <span class="cline-any cline-no">&nbsp;</span>
1262
- <span class="cline-any cline-no">&nbsp;</span>
1263
- <span class="cline-any cline-neutral">&nbsp;</span>
1264
- <span class="cline-any cline-no">&nbsp;</span>
1265
- <span class="cline-any cline-neutral">&nbsp;</span>
1266
- <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-neutral">&nbsp;</span>
1268
- <span class="cline-any cline-no">&nbsp;</span>
1269
- <span class="cline-any cline-no">&nbsp;</span>
1270
- <span class="cline-any cline-neutral">&nbsp;</span>
1271
- <span class="cline-any cline-no">&nbsp;</span>
1272
- <span class="cline-any cline-no">&nbsp;</span>
1273
- <span class="cline-any cline-neutral">&nbsp;</span>
1274
- <span class="cline-any cline-neutral">&nbsp;</span>
1275
- <span class="cline-any cline-neutral">&nbsp;</span>
1276
- <span class="cline-any cline-neutral">&nbsp;</span>
1277
- <span class="cline-any cline-neutral">&nbsp;</span>
1278
- <span class="cline-any cline-neutral">&nbsp;</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-neutral">&nbsp;</span>
1281
- <span class="cline-any cline-neutral">&nbsp;</span>
1282
- <span class="cline-any cline-no">&nbsp;</span>
1283
- <span class="cline-any cline-no">&nbsp;</span>
1284
- <span class="cline-any cline-neutral">&nbsp;</span>
1285
- <span class="cline-any cline-neutral">&nbsp;</span>
1286
- <span class="cline-any cline-neutral">&nbsp;</span>
1287
- <span class="cline-any cline-neutral">&nbsp;</span>
1288
- <span class="cline-any cline-neutral">&nbsp;</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-neutral">&nbsp;</span>
1291
- <span class="cline-any cline-neutral">&nbsp;</span>
1292
- <span class="cline-any cline-neutral">&nbsp;</span>
1293
- <span class="cline-any cline-no">&nbsp;</span>
1294
- <span class="cline-any cline-no">&nbsp;</span>
1295
- <span class="cline-any cline-neutral">&nbsp;</span>
1296
- <span class="cline-any cline-no">&nbsp;</span>
1297
- <span class="cline-any cline-no">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-no">&nbsp;</span>
1300
- <span class="cline-any cline-neutral">&nbsp;</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-neutral">&nbsp;</span>
1304
- <span class="cline-any cline-neutral">&nbsp;</span>
1305
- <span class="cline-any cline-neutral">&nbsp;</span>
1306
- <span class="cline-any cline-neutral">&nbsp;</span>
1307
- <span class="cline-any cline-neutral">&nbsp;</span>
1308
- <span class="cline-any cline-neutral">&nbsp;</span>
1309
- <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-no">&nbsp;</span>
1312
- <span class="cline-any cline-neutral">&nbsp;</span>
1313
- <span class="cline-any cline-neutral">&nbsp;</span>
1314
- <span class="cline-any cline-no">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-no">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-neutral">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-neutral">&nbsp;</span>
1321
- <span class="cline-any cline-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-neutral">&nbsp;</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-neutral">&nbsp;</span>
1329
- <span class="cline-any cline-neutral">&nbsp;</span>
1330
- <span class="cline-any cline-neutral">&nbsp;</span>
1331
- <span class="cline-any cline-neutral">&nbsp;</span>
1332
- <span class="cline-any cline-neutral">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-neutral">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-neutral">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-neutral">&nbsp;</span>
1345
- <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-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-no">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-neutral">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-neutral">&nbsp;</span>
1359
- <span class="cline-any cline-neutral">&nbsp;</span>
1360
- <span class="cline-any cline-neutral">&nbsp;</span>
1361
- <span class="cline-any cline-neutral">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-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-no">&nbsp;</span>
1373
- <span class="cline-any cline-no">&nbsp;</span>
1374
- <span class="cline-any cline-neutral">&nbsp;</span>
1375
- <span class="cline-any cline-no">&nbsp;</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-no">&nbsp;</span>
1378
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1382
- <span class="cline-any cline-neutral">&nbsp;</span>
1383
- <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
1394
- <span class="cline-any cline-neutral">&nbsp;</span>
1395
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1407
- <span class="cline-any cline-neutral">&nbsp;</span>
1408
- <span class="cline-any cline-neutral">&nbsp;</span>
1409
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1413
- <span class="cline-any cline-neutral">&nbsp;</span>
1414
- <span class="cline-any cline-no">&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-neutral">&nbsp;</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-neutral">&nbsp;</span>
1422
- <span class="cline-any cline-neutral">&nbsp;</span>
1423
- <span class="cline-any cline-neutral">&nbsp;</span>
1424
- <span class="cline-any cline-neutral">&nbsp;</span>
1425
- <span class="cline-any cline-no">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-neutral">&nbsp;</span>
1428
- <span class="cline-any cline-neutral">&nbsp;</span>
1429
- <span class="cline-any cline-neutral">&nbsp;</span>
1430
- <span class="cline-any cline-neutral">&nbsp;</span>
1431
- <span class="cline-any cline-neutral">&nbsp;</span>
1432
- <span class="cline-any cline-neutral">&nbsp;</span>
1433
- <span class="cline-any cline-neutral">&nbsp;</span>
1434
- <span class="cline-any cline-neutral">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-no">&nbsp;</span>
1446
- <span class="cline-any cline-no">&nbsp;</span>
1447
- <span class="cline-any cline-no">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-no">&nbsp;</span>
1450
- <span class="cline-any cline-no">&nbsp;</span>
1451
- <span class="cline-any cline-no">&nbsp;</span>
1452
- <span class="cline-any cline-no">&nbsp;</span>
1453
- <span class="cline-any cline-neutral">&nbsp;</span>
1454
- <span class="cline-any cline-neutral">&nbsp;</span>
1455
- <span class="cline-any cline-neutral">&nbsp;</span>
1456
- <span class="cline-any cline-neutral">&nbsp;</span>
1457
- <span class="cline-any cline-neutral">&nbsp;</span>
1458
- <span class="cline-any cline-neutral">&nbsp;</span>
1459
- <span class="cline-any cline-neutral">&nbsp;</span>
1460
- <span class="cline-any cline-no">&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></td><td class="text"><pre class="prettyprint lang-js">import {
1479
- MAX_INT,
1480
- SIGNING_PATH_PREFIX,
1481
- BAP_SERVER,
1482
- BAP_BITCOM_ADDRESS,
1483
- AIP_BITCOM_ADDRESS, ENCRYPTION_PATH,
1484
- } from './constants';
1485
- import { Utils } from './utils';
1486
- import type {Identity} from "./interface";
1487
- &nbsp;
1488
- /**
1489
- * BAP_ID class
1490
- *
1491
- * This class should be used in conjunction with the BAP class
1492
- *
1493
- * @type {BAP_ID}
1494
- */
1495
- class BAP_ID {
1496
- #HDPrivateKey: bsv.HDPrivateKey;
1497
- #BAP_SERVER: string = BAP_SERVER;
1498
- #BAP_TOKEN = '';
1499
- #rootPath: string;
1500
- #previousPath: string;
1501
- #currentPath: string;
1502
- #idSeed: string;
1503
- &nbsp;
1504
- idName: string;
1505
- description: string;
1506
- &nbsp;
1507
- rootAddress: string;
1508
- identityKey: string;
1509
- identityAttributes: { [key: string]: any }
1510
- &nbsp;
1511
- constructor(HDPrivateKey: bsv.HDPrivateKey, identityAttributes: { [key: string]: any } = {}, idSeed = '') {
1512
- this.#idSeed = idSeed;
1513
- if (idSeed) {
1514
- // create a new HDPrivateKey based on the seed
1515
- const seedHex = bsv.crypto.Hash.sha256(Buffer.from(idSeed)).toString('hex');
1516
- const seedPath = <span class="cstat-no" title="statement not covered" >Utils.getSigningPathFromHex(seedHex);</span>
1517
- <span class="cstat-no" title="statement not covered" > this.#HDPrivateKey = HDPrivateKey.deriveChild(seedPath);</span>
1518
- } else {
1519
- this.#HDPrivateKey = HDPrivateKey;
1520
- }
1521
- &nbsp;
1522
- this.idName = 'ID 1';
1523
- this.description = '';
1524
- &nbsp;
1525
- this.#rootPath = `${SIGNING_PATH_PREFIX}/0/0/0`;
1526
- this.#previousPath = `${SIGNING_PATH_PREFIX}/0/0/0`;
1527
- this.#currentPath = `${SIGNING_PATH_PREFIX}/0/0/1`;
1528
- &nbsp;
1529
- const rootChild = this.#HDPrivateKey.deriveChild(this.#rootPath);
1530
- this.rootAddress = rootChild.privateKey.publicKey.toAddress().toString();
1531
- this.identityKey = this.deriveIdentityKey(this.rootAddress);
1532
- &nbsp;
1533
- // unlink the object
1534
- <span class="cstat-no" title="statement not covered" > identityAttributes = { ...identityAttributes };</span>
1535
- <span class="cstat-no" title="statement not covered" > this.identityAttributes = this.parseAttributes(identityAttributes);</span>
1536
- }
1537
- &nbsp;
1538
- <span class="fstat-no" title="function not covered" > se</span>t BAP_SERVER(bapServer) {
1539
- <span class="cstat-no" title="statement not covered" > this.#BAP_SERVER = bapServer;</span>
1540
- }
1541
- &nbsp;
1542
- <span class="fstat-no" title="function not covered" > ge</span>t BAP_SERVER(): string {
1543
- <span class="cstat-no" title="statement not covered" > return this.#BAP_SERVER;</span>
1544
- }
1545
- &nbsp;
1546
- <span class="fstat-no" title="function not covered" > se</span>t BAP_TOKEN(token) {
1547
- <span class="cstat-no" title="statement not covered" > this.#BAP_TOKEN = token;</span>
1548
- }
1549
- &nbsp;
1550
- <span class="fstat-no" title="function not covered" > ge</span>t BAP_TOKEN(): string {
1551
- <span class="cstat-no" title="statement not covered" > return this.#BAP_TOKEN;</span>
1552
- }
1553
- &nbsp;
1554
- deriveIdentityKey(address: string): string {
1555
- const rootAddressHash = bsv.crypto.Hash.sha256(Buffer.from(address));
1556
- // @ts-ignore
1557
- <span class="cstat-no" title="statement not covered" > return bsv.encoding.Base58(bsv.crypto.Hash.ripemd160(rootAddressHash)).toString();</span>
1558
- }
1559
- &nbsp;
1560
- /**
1561
- * Helper function to parse identity attributes
1562
- *
1563
- * @param identityAttributes
1564
- * @returns {{}}
1565
- */
1566
- <span class="fstat-no" title="function not covered" > pa</span>rseAttributes(identityAttributes: { [key: string]: any } | string): { [key: string]: any } {
1567
- <span class="cstat-no" title="statement not covered" > if (typeof identityAttributes === 'string') {</span>
1568
- <span class="cstat-no" title="statement not covered" > return this.parseStringUrns(identityAttributes);</span>
1569
- }
1570
- &nbsp;
1571
- <span class="cstat-no" title="statement not covered" > Object.keys(identityAttributes).forEach(<span class="fstat-no" title="function not covered" >(k</span>ey) =&gt; {</span>
1572
- <span class="cstat-no" title="statement not covered" > if (</span>
1573
- !identityAttributes[key].hasOwnProperty('value')
1574
- || !identityAttributes[key].hasOwnProperty('nonce')
1575
- ) {
1576
- <span class="cstat-no" title="statement not covered" > throw new Error('Invalid identity attribute');</span>
1577
- }
1578
- });
1579
- &nbsp;
1580
- <span class="cstat-no" title="statement not covered" > return identityAttributes || {};</span>
1581
- }
1582
- &nbsp;
1583
- /**
1584
- * Parse a text of urn string into identity attributes
1585
- *
1586
- * urn:bap:id:name:John Doe:e2c6fb4063cc04af58935737eaffc938011dff546d47b7fbb18ed346f8c4d4fa
1587
- * urn:bap:id:birthday:1990-05-22:e61f23cbbb2284842d77965e2b0e32f0ca890b1894ca4ce652831347ee3596d9
1588
- * urn:bap:id:over18:1:480ca17ccaacd671b28dc811332525f2f2cd594d8e8e7825de515ce5d52d30e8
1589
- *
1590
- * @param urnIdentityAttributes
1591
- */
1592
- <span class="fstat-no" title="function not covered" > pa</span>rseStringUrns(urnIdentityAttributes: string): { [key: string]: any } {
1593
- const identityAttributes: { [key: string]: any } = <span class="cstat-no" title="statement not covered" >{};</span>
1594
- <span class="cstat-no" title="statement not covered" > urnIdentityAttributes.replace(/^\s+/g, '').replace(/\r/gm, '')</span>
1595
- .split('\n')
1596
- .forEach(<span class="fstat-no" title="function not covered" >(l</span>ine) =&gt; {
1597
- // remove any whitespace from the string (trim)
1598
- <span class="cstat-no" title="statement not covered" > line = line.replace(/^\s+/g, '').replace(/\s+$/g, '');</span>
1599
- const urn = <span class="cstat-no" title="statement not covered" >line.split(':');</span>
1600
- <span class="cstat-no" title="statement not covered" > if (urn[0] === 'urn' &amp;&amp; urn[1] === 'bap' &amp;&amp; urn[2] === 'id' &amp;&amp; urn[3] &amp;&amp; urn[4] &amp;&amp; urn[5]) {</span>
1601
- <span class="cstat-no" title="statement not covered" > identityAttributes[urn[3]] = {</span>
1602
- value: urn[4],
1603
- nonce: urn[5],
1604
- };
1605
- }
1606
- });
1607
- &nbsp;
1608
- <span class="cstat-no" title="statement not covered" > return identityAttributes;</span>
1609
- }
1610
- &nbsp;
1611
- /**
1612
- * Returns the identity key
1613
- *
1614
- * @returns {*|string}
1615
- */
1616
- <span class="fstat-no" title="function not covered" > ge</span>tIdentityKey(): string {
1617
- <span class="cstat-no" title="statement not covered" > return this.identityKey;</span>
1618
- }
1619
- &nbsp;
1620
- /**
1621
- * Returns all the attributes in the identity
1622
- *
1623
- * @returns {*}
1624
- */
1625
- <span class="fstat-no" title="function not covered" > ge</span>tAttributes(): { [key: string]: any } {
1626
- <span class="cstat-no" title="statement not covered" > return this.identityAttributes;</span>
1627
- }
1628
- &nbsp;
1629
- /**
1630
- * Get the value of the given attribute
1631
- *
1632
- * @param attributeName
1633
- * @returns {{}|null}
1634
- */
1635
- <span class="fstat-no" title="function not covered" > ge</span>tAttribute(attributeName: string): any {
1636
- <span class="cstat-no" title="statement not covered" > if (this.identityAttributes.hasOwnProperty(attributeName)) {</span>
1637
- <span class="cstat-no" title="statement not covered" > return this.identityAttributes[attributeName];</span>
1638
- }
1639
- &nbsp;
1640
- <span class="cstat-no" title="statement not covered" > return null;</span>
1641
- }
1642
- &nbsp;
1643
- /**
1644
- * Set the value of the given attribute
1645
- *
1646
- * If an empty value ('' || null || false) is given, the attribute is removed from the ID
1647
- *
1648
- * @param attributeName string
1649
- * @param attributeValue any
1650
- * @returns {{}|null}
1651
- */
1652
- <span class="fstat-no" title="function not covered" > se</span>tAttribute(attributeName: string, attributeValue: any): void {
1653
- <span class="cstat-no" title="statement not covered" > if (attributeValue) {</span>
1654
- <span class="cstat-no" title="statement not covered" > if (this.identityAttributes.hasOwnProperty(attributeName)) {</span>
1655
- <span class="cstat-no" title="statement not covered" > this.identityAttributes[attributeName].value = attributeValue;</span>
1656
- } else {
1657
- <span class="cstat-no" title="statement not covered" > this.addAttribute(attributeName, attributeValue);</span>
1658
- }
1659
- }
1660
- }
1661
- &nbsp;
1662
- /**
1663
- * Unset the given attribute from the ID
1664
- *
1665
- * @param attributeName
1666
- * @returns {{}|null}
1667
- */
1668
- <span class="fstat-no" title="function not covered" > un</span>setAttribute(attributeName: string): void {
1669
- <span class="cstat-no" title="statement not covered" > delete this.identityAttributes[attributeName];</span>
1670
- }
1671
- &nbsp;
1672
- /**
1673
- * Get all attribute urn's for this id
1674
- *
1675
- * @returns {string}
1676
- */
1677
- <span class="fstat-no" title="function not covered" > ge</span>tAttributeUrns(): string {
1678
- let urns = <span class="cstat-no" title="statement not covered" >'';</span>
1679
- <span class="cstat-no" title="statement not covered" > Object.keys(this.identityAttributes)</span>
1680
- .forEach(<span class="fstat-no" title="function not covered" >(k</span>ey) =&gt; {
1681
- const urn = <span class="cstat-no" title="statement not covered" >this.getAttributeUrn(key);</span>
1682
- <span class="cstat-no" title="statement not covered" > if (urn) {</span>
1683
- <span class="cstat-no" title="statement not covered" > urns += `${urn}\n`;</span>
1684
- }
1685
- });
1686
- &nbsp;
1687
- <span class="cstat-no" title="statement not covered" > return urns;</span>
1688
- }
1689
- &nbsp;
1690
- /**
1691
- * Create an return the attribute urn for the given attribute
1692
- *
1693
- * @param attributeName
1694
- * @returns {string|null}
1695
- */
1696
- <span class="fstat-no" title="function not covered" > ge</span>tAttributeUrn(attributeName: string) {
1697
- const attribute = <span class="cstat-no" title="statement not covered" >this.identityAttributes[attributeName];</span>
1698
- <span class="cstat-no" title="statement not covered" > if (attribute) {</span>
1699
- <span class="cstat-no" title="statement not covered" > return `urn:bap:id:${attributeName}:${attribute.value}:${attribute.nonce}`;</span>
1700
- }
1701
- &nbsp;
1702
- <span class="cstat-no" title="statement not covered" > return null;</span>
1703
- }
1704
- &nbsp;
1705
- /**
1706
- * Add an attribute to this identity
1707
- *
1708
- * @param attributeName
1709
- * @param value
1710
- * @param nonce
1711
- */
1712
- <span class="fstat-no" title="function not covered" > ad</span>dAttribute(attributeName: string, value: any, nonce = <span class="branch-0 cbranch-no" title="branch not covered" >'')</span>: void {
1713
- <span class="cstat-no" title="statement not covered" > if (!nonce) {</span>
1714
- <span class="cstat-no" title="statement not covered" > nonce = Utils.getRandomString();</span>
1715
- }
1716
- &nbsp;
1717
- <span class="cstat-no" title="statement not covered" > this.identityAttributes[attributeName] = {</span>
1718
- value,
1719
- nonce,
1720
- };
1721
- }
1722
- &nbsp;
1723
- /**
1724
- * This should be called with the last part of the signing path (/.../.../...)
1725
- * This library assumes the first part is m/424150'/0'/0' as defined at the top of this file
1726
- *
1727
- * @param path The second path of the signing path in the format [0-9]{0,9}/[0-9]{0,9}/[0-9]{0,9}
1728
- */
1729
- <span class="fstat-no" title="function not covered" > se</span>t rootPath(path) {
1730
- <span class="cstat-no" title="statement not covered" > if (this.#HDPrivateKey) {</span>
1731
- <span class="cstat-no" title="statement not covered" > if (path.split('/').length &lt; 5) {</span>
1732
- <span class="cstat-no" title="statement not covered" > path = `${SIGNING_PATH_PREFIX}${path}`;</span>
1733
- }
1734
- &nbsp;
1735
- <span class="cstat-no" title="statement not covered" > if (!this.validatePath(path)) {</span>
1736
- <span class="cstat-no" title="statement not covered" > throw new Error('invalid signing path given ' + path);</span>
1737
- }
1738
- &nbsp;
1739
- <span class="cstat-no" title="statement not covered" > this.#rootPath = path;</span>
1740
- &nbsp;
1741
- const derivedChild = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(path);</span>
1742
- <span class="cstat-no" title="statement not covered" > this.rootAddress = derivedChild.publicKey.toAddress().toString();</span>
1743
- // Identity keys should be derivatives of the root address - this allows checking
1744
- // of the creation transaction
1745
- <span class="cstat-no" title="statement not covered" > this.identityKey = this.deriveIdentityKey(this.rootAddress);</span>
1746
- &nbsp;
1747
- // we also set this previousPath / currentPath to the root as we seem to be (re)setting this ID
1748
- <span class="cstat-no" title="statement not covered" > this.#previousPath = path;</span>
1749
- <span class="cstat-no" title="statement not covered" > this.#currentPath = path;</span>
1750
- }
1751
- }
1752
- &nbsp;
1753
- <span class="fstat-no" title="function not covered" > ge</span>t rootPath(): string {
1754
- <span class="cstat-no" title="statement not covered" > return this.#rootPath;</span>
1755
- }
1756
- &nbsp;
1757
- <span class="fstat-no" title="function not covered" > ge</span>tRootPath(): string {
1758
- <span class="cstat-no" title="statement not covered" > return this.#rootPath;</span>
1759
- }
1760
- &nbsp;
1761
- /**
1762
- * This should be called with the last part of the signing path (/.../.../...)
1763
- * This library assumes the first part is m/424150'/0'/0' as defined at the top of this file
1764
- *
1765
- * @param path The second path of the signing path in the format [0-9]{0,9}/[0-9]{0,9}/[0-9]{0,9}
1766
- */
1767
- <span class="fstat-no" title="function not covered" > se</span>t currentPath(path) {
1768
- <span class="cstat-no" title="statement not covered" > if (path.split('/').length &lt; 5) {</span>
1769
- <span class="cstat-no" title="statement not covered" > path = `${SIGNING_PATH_PREFIX}${path}`;</span>
1770
- }
1771
- &nbsp;
1772
- <span class="cstat-no" title="statement not covered" > if (!this.validatePath(path)) {</span>
1773
- <span class="cstat-no" title="statement not covered" > throw new Error('invalid signing path given');</span>
1774
- }
1775
- &nbsp;
1776
- <span class="cstat-no" title="statement not covered" > this.#previousPath = this.#currentPath;</span>
1777
- <span class="cstat-no" title="statement not covered" > this.#currentPath = path;</span>
1778
- }
1779
- &nbsp;
1780
- <span class="fstat-no" title="function not covered" > ge</span>t currentPath(): string {
1781
- <span class="cstat-no" title="statement not covered" > return this.#currentPath;</span>
1782
- }
1783
- &nbsp;
1784
- <span class="fstat-no" title="function not covered" > ge</span>t previousPath(): string {
1785
- <span class="cstat-no" title="statement not covered" > return this.#previousPath;</span>
1786
- }
1787
- &nbsp;
1788
- /**
1789
- * This can be used to break the deterministic way child keys are created to make it harder for
1790
- * an attacker to steal the identites when the root key is compromised. This does however require
1791
- * the seeds to be stored at all times. If the seed is lost, the identity will not be recoverable.
1792
- */
1793
- <span class="fstat-no" title="function not covered" > ge</span>t idSeed(): string {
1794
- <span class="cstat-no" title="statement not covered" > return this.#idSeed;</span>
1795
- }
1796
- &nbsp;
1797
- /**
1798
- * Increment current path to a new path
1799
- *
1800
- * @returns {*}
1801
- */
1802
- <span class="fstat-no" title="function not covered" > in</span>crementPath(): void {
1803
- <span class="cstat-no" title="statement not covered" > this.currentPath = Utils.getNextPath(this.currentPath);</span>
1804
- }
1805
- &nbsp;
1806
- /**
1807
- * Check whether the given path is a valid path for use with this class
1808
- * The signing paths used here always have a length of 3
1809
- *
1810
- * @param path The last part of the signing path (example "/0/0/1")
1811
- * @returns {boolean}
1812
- */
1813
- <span class="fstat-no" title="function not covered" > va</span>lidatePath(path: string) {
1814
- /* eslint-disable max-len */
1815
- <span class="cstat-no" title="statement not covered" > if (path.match(/\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?\/[0-9]{1,10}'?/)) {</span>
1816
- const pathValues = <span class="cstat-no" title="statement not covered" >path.split('/');</span>
1817
- <span class="cstat-no" title="statement not covered" > if (pathValues.length === 7</span>
1818
- &amp;&amp; Number(pathValues[1].replace('\'', '')) &lt;= MAX_INT
1819
- &amp;&amp; Number(pathValues[2].replace('\'', '')) &lt;= MAX_INT
1820
- &amp;&amp; Number(pathValues[3].replace('\'', '')) &lt;= MAX_INT
1821
- &amp;&amp; Number(pathValues[4].replace('\'', '')) &lt;= MAX_INT
1822
- &amp;&amp; Number(pathValues[5].replace('\'', '')) &lt;= MAX_INT
1823
- &amp;&amp; Number(pathValues[6].replace('\'', '')) &lt;= MAX_INT
1824
- ) {
1825
- <span class="cstat-no" title="statement not covered" > return true;</span>
1826
- }
1827
- }
1828
- &nbsp;
1829
- <span class="cstat-no" title="statement not covered" > return false;</span>
1830
- }
1831
- &nbsp;
1832
- /**
1833
- * Get the OP_RETURN for the initial ID transaction (signed with root address)
1834
- *
1835
- * @returns {[]}
1836
- */
1837
- <span class="fstat-no" title="function not covered" > ge</span>tInitialIdTransaction() {
1838
- <span class="cstat-no" title="statement not covered" > return this.getIdTransaction(this.#rootPath);</span>
1839
- }
1840
- &nbsp;
1841
- /**
1842
- * Get the OP_RETURN for the ID transaction of the current address / path
1843
- *
1844
- * @returns {[]}
1845
- */
1846
- <span class="fstat-no" title="function not covered" > ge</span>tIdTransaction(previousPath = <span class="branch-0 cbranch-no" title="branch not covered" >'')</span> {
1847
- <span class="cstat-no" title="statement not covered" > if (this.#currentPath === this.#rootPath) {</span>
1848
- <span class="cstat-no" title="statement not covered" > throw new Error('Current path equals rootPath. ID was probably not initialized properly');</span>
1849
- }
1850
- &nbsp;
1851
- const opReturn = <span class="cstat-no" title="statement not covered" >[</span>
1852
- Buffer.from(BAP_BITCOM_ADDRESS).toString('hex'),
1853
- Buffer.from('ID').toString('hex'),
1854
- Buffer.from(this.identityKey).toString('hex'),
1855
- Buffer.from(this.getCurrentAddress()).toString('hex'),
1856
- ];
1857
- &nbsp;
1858
- <span class="cstat-no" title="statement not covered" > previousPath = previousPath || this.#previousPath;</span>
1859
- &nbsp;
1860
- <span class="cstat-no" title="statement not covered" > return this.signOpReturnWithAIP(opReturn, previousPath);</span>
1861
- }
1862
- &nbsp;
1863
- /**
1864
- * Get address for given path
1865
- *
1866
- * @param path
1867
- * @returns {*}
1868
- */
1869
- <span class="fstat-no" title="function not covered" > ge</span>tAddress(path: string): string {
1870
- const derivedChild = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(path);</span>
1871
- <span class="cstat-no" title="statement not covered" > return derivedChild.privateKey.publicKey.toAddress().toString();</span>
1872
- }
1873
- &nbsp;
1874
- /**
1875
- * Get current signing address
1876
- *
1877
- * @returns {*}
1878
- */
1879
- <span class="fstat-no" title="function not covered" > ge</span>tCurrentAddress(): string {
1880
- <span class="cstat-no" title="statement not covered" > return this.getAddress(this.#currentPath);</span>
1881
- }
1882
- &nbsp;
1883
- /**
1884
- * Get the public key for encrypting data for this identity
1885
- */
1886
- <span class="fstat-no" title="function not covered" > ge</span>tEncryptionPublicKey(): string {
1887
- const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
1888
- const encryptionKey = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(ENCRYPTION_PATH).privateKey;</span>
1889
- // @ts-ignore
1890
- <span class="cstat-no" title="statement not covered" > return encryptionKey.publicKey.toString('hex');</span>
1891
- }
1892
- &nbsp;
1893
- /**
1894
- * Get the public key for encrypting data for this identity, using a seed for the encryption
1895
- */
1896
- <span class="fstat-no" title="function not covered" > ge</span>tEncryptionPublicKeyWithSeed(seed: string): string {
1897
- const encryptionKey = <span class="cstat-no" title="statement not covered" >this.getEncryptionPrivateKeyWithSeed(seed);</span>
1898
- // @ts-ignore
1899
- <span class="cstat-no" title="statement not covered" > return encryptionKey.publicKey.toString('hex');</span>
1900
- }
1901
- &nbsp;
1902
- /**
1903
- * Encrypt the given string data with the identity encryption key
1904
- * @param stringData
1905
- * @param counterPartyPublicKey Optional public key of the counterparty
1906
- * @return string Base64
1907
- */
1908
- <span class="fstat-no" title="function not covered" > en</span>crypt(stringData: string, counterPartyPublicKey?: string): string {
1909
- const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
1910
- const encryptionKey = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(ENCRYPTION_PATH).privateKey;</span>
1911
- const publicKey = <span class="cstat-no" title="statement not covered" >encryptionKey.publicKey;</span>
1912
- &nbsp;
1913
- const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
1914
- <span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
1915
- <span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey)</span>
1916
- <span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
1917
- } else {
1918
- <span class="cstat-no" title="statement not covered" > ecies.publicKey(publicKey);</span>
1919
- }
1920
- <span class="cstat-no" title="statement not covered" > return ecies.encrypt(stringData).toString('base64');</span>
1921
- }
1922
- &nbsp;
1923
- /**
1924
- * Decrypt the given ciphertext with the identity encryption key
1925
- * @param ciphertext
1926
- * @param counterPartyPublicKey Optional public key of the counterparty
1927
- */
1928
- <span class="fstat-no" title="function not covered" > de</span>crypt(ciphertext: string, counterPartyPublicKey?: string): string {
1929
- const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
1930
- const encryptionKey = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(ENCRYPTION_PATH).privateKey;</span>
1931
- const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
1932
- <span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey);</span>
1933
- <span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
1934
- <span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
1935
- }
1936
- <span class="cstat-no" title="statement not covered" > return ecies.decrypt(Buffer.from(ciphertext, 'base64')).toString();</span>
1937
- }
1938
- &nbsp;
1939
- /**
1940
- * Encrypt the given string data with the identity encryption key
1941
- * @param stringData
1942
- * @param seed String seed
1943
- * @param counterPartyPublicKey Optional public key of the counterparty
1944
- * @return string Base64
1945
- */
1946
- <span class="fstat-no" title="function not covered" > en</span>cryptWithSeed(stringData: string, seed: string, counterPartyPublicKey?: string): string {
1947
- const encryptionKey = <span class="cstat-no" title="statement not covered" >this.getEncryptionPrivateKeyWithSeed(seed);</span>
1948
- const publicKey = <span class="cstat-no" title="statement not covered" >encryptionKey.publicKey;</span>
1949
- &nbsp;
1950
- const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
1951
- <span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
1952
- <span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey);</span>
1953
- <span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
1954
- } else {
1955
- <span class="cstat-no" title="statement not covered" > ecies.publicKey(publicKey);</span>
1956
- }
1957
- <span class="cstat-no" title="statement not covered" > return ecies.encrypt(stringData).toString('base64');</span>
1958
- }
1959
- &nbsp;
1960
- /**
1961
- * Decrypt the given ciphertext with the identity encryption key
1962
- * @param ciphertext
1963
- * @param seed String seed
1964
- * @param counterPartyPublicKey Public key of the counterparty
1965
- */
1966
- <span class="fstat-no" title="function not covered" > de</span>cryptWithSeed(ciphertext: string, seed: string, counterPartyPublicKey?: string): string {
1967
- const encryptionKey = <span class="cstat-no" title="statement not covered" >this.getEncryptionPrivateKeyWithSeed(seed);</span>
1968
- const ecies = <span class="cstat-no" title="statement not covered" >new ECIES();</span>
1969
- <span class="cstat-no" title="statement not covered" > ecies.privateKey(encryptionKey);</span>
1970
- <span class="cstat-no" title="statement not covered" > if (counterPartyPublicKey) {</span>
1971
- <span class="cstat-no" title="statement not covered" > ecies.publicKey(counterPartyPublicKey);</span>
1972
- }
1973
- <span class="cstat-no" title="statement not covered" > return ecies.decrypt(Buffer.from(ciphertext, 'base64')).toString();</span>
1974
- }
1975
- &nbsp;
1976
- <span class="fstat-no" title="function not covered" > pr</span>ivate getEncryptionPrivateKeyWithSeed(seed: string) {
1977
- const pathHex = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(seed)).toString('hex');</span>
1978
- const path = <span class="cstat-no" title="statement not covered" >Utils.getSigningPathFromHex(pathHex);</span>
1979
- &nbsp;
1980
- const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
1981
- <span class="cstat-no" title="statement not covered" > return HDPrivateKey.deriveChild(path).privateKey;</span>
1982
- }
1983
- &nbsp;
1984
- /**
1985
- * Get an attestation string for the given urn for this identity
1986
- *
1987
- * @param urn
1988
- * @returns {string}
1989
- */
1990
- <span class="fstat-no" title="function not covered" > ge</span>tAttestation(urn: string) {
1991
- const urnHash = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(urn));</span>
1992
- <span class="cstat-no" title="statement not covered" > return `bap:attest:${urnHash.toString('hex')}:${this.getIdentityKey()}`;</span>
1993
- }
1994
- &nbsp;
1995
- /**
1996
- * Generate and return the attestation hash for the given attribute of this identity
1997
- *
1998
- * @param attribute Attribute name (name, email etc.)
1999
- * @returns {string}
2000
- */
2001
- <span class="fstat-no" title="function not covered" > ge</span>tAttestationHash(attribute: string) {
2002
- const urn = <span class="cstat-no" title="statement not covered" >this.getAttributeUrn(attribute);</span>
2003
- <span class="cstat-no" title="statement not covered" > if (!urn) <span class="cstat-no" title="statement not covered" >return null;</span></span>
2004
- &nbsp;
2005
- const attestation = <span class="cstat-no" title="statement not covered" >this.getAttestation(urn);</span>
2006
- const attestationHash = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(attestation));</span>
2007
- &nbsp;
2008
- <span class="cstat-no" title="statement not covered" > return attestationHash.toString('hex');</span>
2009
- }
2010
- &nbsp;
2011
- /**
2012
- * Sign a message with the current signing address of this identity
2013
- *
2014
- * @param message
2015
- * @param signingPath
2016
- * @returns {{address, signature}}
2017
- */
2018
- <span class="fstat-no" title="function not covered" > si</span>gnMessage(message: string | Buffer, signingPath = <span class="branch-0 cbranch-no" title="branch not covered" >'')</span> {
2019
- <span class="cstat-no" title="statement not covered" > if (!(message instanceof Buffer)) {</span>
2020
- <span class="cstat-no" title="statement not covered" > message = Buffer.from(message);</span>
2021
- }
2022
- &nbsp;
2023
- <span class="cstat-no" title="statement not covered" > signingPath = signingPath || this.#currentPath;</span>
2024
- const derivedChild = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(signingPath);</span>
2025
- const address = <span class="cstat-no" title="statement not covered" >derivedChild.privateKey.publicKey.toAddress().toString();</span>
2026
- const signature = <span class="cstat-no" title="statement not covered" >Message(message).sign(derivedChild.privateKey);</span>
2027
- &nbsp;
2028
- <span class="cstat-no" title="statement not covered" > return { address, signature };</span>
2029
- }
2030
- &nbsp;
2031
- /**
2032
- * Sign a message using a key based on the given string seed
2033
- *
2034
- * This works by creating a private key from the root key of this identity. It will always
2035
- * work with the rootPath / rootKey, to be deterministic. It will not change even if the keys
2036
- * are rotated for this ID.
2037
- *
2038
- * This is used in for instance deterministic login systems, that do not support BAP.
2039
- *
2040
- * @param message
2041
- * @param seed {string} String seed that will be used to generate a path
2042
- */
2043
- <span class="fstat-no" title="function not covered" > si</span>gnMessageWithSeed(message: string, seed: string): { address: string, signature: string } {
2044
- const pathHex = <span class="cstat-no" title="statement not covered" >bsv.crypto.Hash.sha256(Buffer.from(seed)).toString('hex');</span>
2045
- const path = <span class="cstat-no" title="statement not covered" >Utils.getSigningPathFromHex(pathHex);</span>
2046
- &nbsp;
2047
- const HDPrivateKey = <span class="cstat-no" title="statement not covered" >this.#HDPrivateKey.deriveChild(this.#rootPath);</span>
2048
- const derivedChild = <span class="cstat-no" title="statement not covered" >HDPrivateKey.deriveChild(path);</span>
2049
- const address = <span class="cstat-no" title="statement not covered" >derivedChild.privateKey.publicKey.toAddress().toString();</span>
2050
- const signature = <span class="cstat-no" title="statement not covered" >Message(message).sign(derivedChild.privateKey);</span>
2051
- &nbsp;
2052
- <span class="cstat-no" title="statement not covered" > return { address, signature };</span>
2053
- }
2054
- &nbsp;
2055
- /**
2056
- * Sign an op_return hex array with AIP
2057
- * @param opReturn {array}
2058
- * @param signingPath {string}
2059
- * @param outputType {string}
2060
- * @return {[]}
2061
- */
2062
- <span class="fstat-no" title="function not covered" > si</span>gnOpReturnWithAIP(opReturn: string[], signingPath = <span class="branch-0 cbranch-no" title="branch not covered" >'',</span> outputType: BufferEncoding = <span class="branch-0 cbranch-no" title="branch not covered" >'hex')</span>: string[] {
2063
- const aipMessageBuffer = <span class="cstat-no" title="statement not covered" >this.getAIPMessageBuffer(opReturn);</span>
2064
- const { address, signature } = <span class="cstat-no" title="statement not covered" >this.signMessage(aipMessageBuffer, signingPath);</span>
2065
- &nbsp;
2066
- <span class="cstat-no" title="statement not covered" > return opReturn.concat([</span>
2067
- Buffer.from('|').toString(outputType),
2068
- Buffer.from(AIP_BITCOM_ADDRESS).toString(outputType),
2069
- Buffer.from('BITCOIN_ECDSA').toString(outputType),
2070
- Buffer.from(address).toString(outputType),
2071
- Buffer.from(signature, 'base64').toString(outputType),
2072
- ]);
2073
- }
2074
- &nbsp;
2075
- /**
2076
- * Construct an AIP buffer from the op return data
2077
- * @param opReturn
2078
- * @returns {Buffer}
2079
- */
2080
- <span class="fstat-no" title="function not covered" > ge</span>tAIPMessageBuffer(opReturn: string[]): Buffer {
2081
- const buffers = <span class="cstat-no" title="statement not covered" >[];</span>
2082
- <span class="cstat-no" title="statement not covered" > if (opReturn[0].replace('0x', '') !== '6a') {</span>
2083
- // include OP_RETURN in constructing the signature buffer
2084
- <span class="cstat-no" title="statement not covered" > buffers.push(Buffer.from('6a', 'hex'));</span>
2085
- }
2086
- <span class="cstat-no" title="statement not covered" > opReturn.forEach(<span class="fstat-no" title="function not covered" >(o</span>p) =&gt; {</span>
2087
- <span class="cstat-no" title="statement not covered" > buffers.push(Buffer.from(op.replace('0x', ''), 'hex'));</span>
2088
- });
2089
- // add a trailing "|" - this is the AIP way
2090
- <span class="cstat-no" title="statement not covered" > buffers.push(Buffer.from('|'));</span>
2091
- &nbsp;
2092
- <span class="cstat-no" title="statement not covered" > return Buffer.concat([...buffers]);</span>
2093
- }
2094
- &nbsp;
2095
- /**
2096
- * Get all signing keys for this identity
2097
- */
2098
- <span class="fstat-no" title="function not covered" > as</span>ync getIdSigningKeys(): Promise&lt;any&gt; {
2099
- const signingKeys = <span class="cstat-no" title="statement not covered" >await this.getApiData('/signing-keys', {</span>
2100
- idKey: this.identityKey,
2101
- });
2102
- <span class="cstat-no" title="statement not covered" > console.log('getIdSigningKeys', signingKeys);</span>
2103
- &nbsp;
2104
- <span class="cstat-no" title="statement not covered" > return signingKeys;</span>
2105
- }
2106
- &nbsp;
2107
- /**
2108
- * Get all attestations for the given attribute
2109
- *
2110
- * @param attribute
2111
- */
2112
- <span class="fstat-no" title="function not covered" > as</span>ync getAttributeAttestations(attribute: string): Promise&lt;any&gt; {
2113
- // This function needs to make a call to a BAP server to get all the attestations for this
2114
- // identity for the given attribute
2115
- const attestationHash = <span class="cstat-no" title="statement not covered" >this.getAttestationHash(attribute);</span>
2116
- &nbsp;
2117
- // get all BAP ATTEST records for the given attestationHash
2118
- const attestations = <span class="cstat-no" title="statement not covered" >await this.getApiData('/attestations', {</span>
2119
- hash: attestationHash,
2120
- });
2121
- <span class="cstat-no" title="statement not covered" > console.log('getAttestations', attribute, attestationHash, attestations);</span>
2122
- &nbsp;
2123
- <span class="cstat-no" title="statement not covered" > return attestations;</span>
2124
- }
2125
- &nbsp;
2126
- /**
2127
- * Helper function to get attestation from a BAP API server
2128
- *
2129
- * @param apiUrl
2130
- * @param apiData
2131
- * @returns {Promise&lt;any&gt;}
2132
- */
2133
- <span class="fstat-no" title="function not covered" > as</span>ync getApiData(apiUrl: string, apiData: any): Promise&lt;any&gt; {
2134
- const url = <span class="cstat-no" title="statement not covered" >`${this.#BAP_SERVER}${apiUrl}`;</span>
2135
- const response = <span class="cstat-no" title="statement not covered" >await fetch(url, {</span>
2136
- method: 'post',
2137
- headers: {
2138
- 'Content-type': 'application/json; charset=utf-8',
2139
- token: this.#BAP_TOKEN,
2140
- format: 'json',
2141
- },
2142
- body: JSON.stringify(apiData),
2143
- });
2144
- <span class="cstat-no" title="statement not covered" > return response.json();</span>
2145
- }
2146
- &nbsp;
2147
- /**
2148
- * Import an identity from a JSON object
2149
- *
2150
- * @param identity{{}}
2151
- */
2152
- <span class="fstat-no" title="function not covered" > im</span>port(identity: Identity): void {
2153
- <span class="cstat-no" title="statement not covered" > this.idName = identity.name;</span>
2154
- <span class="cstat-no" title="statement not covered" > this.description = identity.description || '';</span>
2155
- <span class="cstat-no" title="statement not covered" > this.identityKey = identity.identityKey;</span>
2156
- <span class="cstat-no" title="statement not covered" > this.#rootPath = identity.rootPath;</span>
2157
- <span class="cstat-no" title="statement not covered" > this.rootAddress = identity.rootAddress;</span>
2158
- <span class="cstat-no" title="statement not covered" > this.#previousPath = identity.previousPath;</span>
2159
- <span class="cstat-no" title="statement not covered" > this.#currentPath = identity.currentPath;</span>
2160
- <span class="cstat-no" title="statement not covered" > this.#idSeed = identity.idSeed || '';</span>
2161
- <span class="cstat-no" title="statement not covered" > this.identityAttributes = this.parseAttributes(identity.identityAttributes);</span>
2162
- }
2163
- &nbsp;
2164
- /**
2165
- * Export this identity to a JSON object
2166
- * @returns {{}}
2167
- */
2168
- <span class="fstat-no" title="function not covered" > ex</span>port(): Identity {
2169
- <span class="cstat-no" title="statement not covered" > return {</span>
2170
- name: this.idName,
2171
- description: this.description,
2172
- identityKey: this.identityKey,
2173
- rootPath: this.#rootPath,
2174
- rootAddress: this.rootAddress,
2175
- previousPath: this.#previousPath,
2176
- currentPath: this.#currentPath,
2177
- idSeed: this.#idSeed,
2178
- identityAttributes: this.getAttributes(),
2179
- lastIdPath: ''
2180
- };
2181
- }
2182
- }
2183
- &nbsp;
2184
- export {
2185
- BAP_ID,
2186
- }
2187
- &nbsp;</pre></td></tr></table></pre>
2188
-
2189
- <div class='push'></div><!-- for sticky footer -->
2190
- </div><!-- /wrapper -->
2191
- <div class='footer quiet pad2 space-top1 center small'>
2192
- Code coverage generated by
2193
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
2194
- at Tue Aug 27 2024 10:04:22 GMT-0400 (Eastern Daylight Time)
2195
- </div>
2196
- </div>
2197
- <script src="../prettify.js"></script>
2198
- <script>
2199
- window.onload = function () {
2200
- prettyPrint();
2201
- };
2202
- </script>
2203
- <script src="../sorter.js"></script>
2204
- <script src="../block-navigation.js"></script>
2205
- </body>
2206
- </html>
2207
-