@hedia/recommendation-screen 2.1.21 → 2.1.22-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/clover.xml +716 -0
- package/coverage/coverage-final.json +28 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +79 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +201 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +170 -0
- package/coverage/lcov-report/src/RecommendationScreen.tsx.html +2483 -0
- package/coverage/lcov-report/src/__tests__/index.html +111 -0
- package/coverage/lcov-report/src/__tests__/utils.tsx.html +533 -0
- package/coverage/lcov-report/src/components/Header.tsx.html +356 -0
- package/coverage/lcov-report/src/components/InfoBars.tsx.html +518 -0
- package/coverage/lcov-report/src/components/InvisibleNumberInput.tsx.html +566 -0
- package/coverage/lcov-report/src/components/LimitationMessage.tsx.html +209 -0
- package/coverage/lcov-report/src/components/LineSeparator.tsx.html +161 -0
- package/coverage/lcov-report/src/components/RecentInsulin.tsx.html +410 -0
- package/coverage/lcov-report/src/components/RecommendationModal.tsx.html +923 -0
- package/coverage/lcov-report/src/components/RecommendedCarbs.tsx.html +1061 -0
- package/coverage/lcov-report/src/components/RecommendedInsulin.tsx.html +779 -0
- package/coverage/lcov-report/src/components/Remeasure.tsx.html +551 -0
- package/coverage/lcov-report/src/components/TransferToLogbook.tsx.html +443 -0
- package/coverage/lcov-report/src/components/TwoOptionModal.tsx.html +665 -0
- package/coverage/lcov-report/src/components/activity/Activity.tsx.html +371 -0
- package/coverage/lcov-report/src/components/activity/ActivityIcon.tsx.html +281 -0
- package/coverage/lcov-report/src/components/activity/ActivityIntensity.tsx.html +281 -0
- package/coverage/lcov-report/src/components/activity/index.html +141 -0
- package/coverage/lcov-report/src/components/index.html +276 -0
- package/coverage/lcov-report/src/components/mood/Emotion.tsx.html +353 -0
- package/coverage/lcov-report/src/components/mood/MoodIcon.tsx.html +335 -0
- package/coverage/lcov-report/src/components/mood/index.html +126 -0
- package/coverage/lcov-report/src/index.html +111 -0
- package/coverage/lcov-report/src/locale/i18nUtils.ts.html +206 -0
- package/coverage/lcov-report/src/locale/index.html +111 -0
- package/coverage/lcov-report/src/utils/AttentionMessages.tsx.html +554 -0
- package/coverage/lcov-report/src/utils/Constants.ts.html +248 -0
- package/coverage/lcov-report/src/utils/RecommendationError.tsx.html +620 -0
- package/coverage/lcov-report/src/utils/RecommendationUtils.ts.html +764 -0
- package/coverage/lcov-report/src/utils/Translations.ts.html +131 -0
- package/coverage/lcov-report/src/utils/Utils.ts.html +545 -0
- package/coverage/lcov-report/src/utils/Validations.ts.html +1544 -0
- package/coverage/lcov-report/src/utils/index.html +201 -0
- package/coverage/lcov.info +1611 -0
- package/package.json +2 -2
- package/src/__tests__/utils.js +2 -2
|
@@ -0,0 +1,1544 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/utils/Validations.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/utils</a> Validations.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>99/99</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>74/74</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>32/32</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>96/96</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 high'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-neutral"> </span>
|
|
553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-neutral"> </span>
|
|
571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
573
|
+
<span class="cline-any cline-neutral"> </span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-neutral"> </span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
602
|
+
<span class="cline-any cline-neutral"> </span>
|
|
603
|
+
<span class="cline-any cline-neutral"> </span>
|
|
604
|
+
<span class="cline-any cline-neutral"> </span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
608
|
+
<span class="cline-any cline-yes">2x</span>
|
|
609
|
+
<span class="cline-any cline-yes">2x</span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-neutral"> </span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-yes">64x</span>
|
|
631
|
+
<span class="cline-any cline-yes">64x</span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-yes">64x</span>
|
|
634
|
+
<span class="cline-any cline-yes">64x</span>
|
|
635
|
+
<span class="cline-any cline-yes">64x</span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </span>
|
|
637
|
+
<span class="cline-any cline-yes">64x</span>
|
|
638
|
+
<span class="cline-any cline-yes">64x</span>
|
|
639
|
+
<span class="cline-any cline-yes">64x</span>
|
|
640
|
+
<span class="cline-any cline-yes">63x</span>
|
|
641
|
+
<span class="cline-any cline-yes">63x</span>
|
|
642
|
+
<span class="cline-any cline-yes">5x</span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-neutral"> </span>
|
|
655
|
+
<span class="cline-any cline-yes">69x</span>
|
|
656
|
+
<span class="cline-any cline-yes">2x</span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-neutral"> </span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-neutral"> </span>
|
|
662
|
+
<span class="cline-any cline-neutral"> </span>
|
|
663
|
+
<span class="cline-any cline-neutral"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-yes">74x</span>
|
|
670
|
+
<span class="cline-any cline-yes">5x</span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
685
|
+
<span class="cline-any cline-yes">71x</span>
|
|
686
|
+
<span class="cline-any cline-yes">1x</span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
688
|
+
<span class="cline-any cline-yes">70x</span>
|
|
689
|
+
<span class="cline-any cline-yes">68x</span>
|
|
690
|
+
<span class="cline-any cline-yes">4x</span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-neutral"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-neutral"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-yes">70x</span>
|
|
705
|
+
<span class="cline-any cline-yes">83x</span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-yes">70x</span>
|
|
708
|
+
<span class="cline-any cline-yes">3x</span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-neutral"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-neutral"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
720
|
+
<span class="cline-any cline-yes">76x</span>
|
|
721
|
+
<span class="cline-any cline-yes">69x</span>
|
|
722
|
+
<span class="cline-any cline-yes">3x</span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-neutral"> </span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-neutral"> </span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-neutral"> </span>
|
|
733
|
+
<span class="cline-any cline-neutral"> </span>
|
|
734
|
+
<span class="cline-any cline-neutral"> </span>
|
|
735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
736
|
+
<span class="cline-any cline-yes">70x</span>
|
|
737
|
+
<span class="cline-any cline-yes">76x</span>
|
|
738
|
+
<span class="cline-any cline-yes">68x</span>
|
|
739
|
+
<span class="cline-any cline-yes">3x</span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-neutral"> </span>
|
|
742
|
+
<span class="cline-any cline-neutral"> </span>
|
|
743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
745
|
+
<span class="cline-any cline-neutral"> </span>
|
|
746
|
+
<span class="cline-any cline-neutral"> </span>
|
|
747
|
+
<span class="cline-any cline-neutral"> </span>
|
|
748
|
+
<span class="cline-any cline-neutral"> </span>
|
|
749
|
+
<span class="cline-any cline-neutral"> </span>
|
|
750
|
+
<span class="cline-any cline-neutral"> </span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-yes">72x</span>
|
|
753
|
+
<span class="cline-any cline-yes">4x</span>
|
|
754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
756
|
+
<span class="cline-any cline-neutral"> </span>
|
|
757
|
+
<span class="cline-any cline-neutral"> </span>
|
|
758
|
+
<span class="cline-any cline-neutral"> </span>
|
|
759
|
+
<span class="cline-any cline-neutral"> </span>
|
|
760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-neutral"> </span>
|
|
762
|
+
<span class="cline-any cline-neutral"> </span>
|
|
763
|
+
<span class="cline-any cline-neutral"> </span>
|
|
764
|
+
<span class="cline-any cline-neutral"> </span>
|
|
765
|
+
<span class="cline-any cline-neutral"> </span>
|
|
766
|
+
<span class="cline-any cline-neutral"> </span>
|
|
767
|
+
<span class="cline-any cline-neutral"> </span>
|
|
768
|
+
<span class="cline-any cline-neutral"> </span>
|
|
769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
770
|
+
<span class="cline-any cline-neutral"> </span>
|
|
771
|
+
<span class="cline-any cline-neutral"> </span>
|
|
772
|
+
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-yes">64x</span>
|
|
774
|
+
<span class="cline-any cline-yes">64x</span>
|
|
775
|
+
<span class="cline-any cline-yes">64x</span>
|
|
776
|
+
<span class="cline-any cline-yes">64x</span>
|
|
777
|
+
<span class="cline-any cline-yes">64x</span>
|
|
778
|
+
<span class="cline-any cline-yes">64x</span>
|
|
779
|
+
<span class="cline-any cline-yes">64x</span>
|
|
780
|
+
<span class="cline-any cline-yes">64x</span>
|
|
781
|
+
<span class="cline-any cline-yes">64x</span>
|
|
782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
783
|
+
<span class="cline-any cline-neutral"> </span>
|
|
784
|
+
<span class="cline-any cline-neutral"> </span>
|
|
785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
786
|
+
<span class="cline-any cline-neutral"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-neutral"> </span>
|
|
789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
790
|
+
<span class="cline-any cline-neutral"> </span>
|
|
791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
792
|
+
<span class="cline-any cline-neutral"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </span>
|
|
796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-yes">66x</span>
|
|
798
|
+
<span class="cline-any cline-yes">7x</span>
|
|
799
|
+
<span class="cline-any cline-yes">6x</span>
|
|
800
|
+
<span class="cline-any cline-yes">6x</span>
|
|
801
|
+
<span class="cline-any cline-yes">6x</span>
|
|
802
|
+
<span class="cline-any cline-yes">6x</span>
|
|
803
|
+
<span class="cline-any cline-neutral"> </span>
|
|
804
|
+
<span class="cline-any cline-neutral"> </span>
|
|
805
|
+
<span class="cline-any cline-neutral"> </span>
|
|
806
|
+
<span class="cline-any cline-neutral"> </span>
|
|
807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
808
|
+
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-neutral"> </span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
814
|
+
<span class="cline-any cline-yes">66x</span>
|
|
815
|
+
<span class="cline-any cline-yes">2x</span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
818
|
+
<span class="cline-any cline-neutral"> </span>
|
|
819
|
+
<span class="cline-any cline-neutral"> </span>
|
|
820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-neutral"> </span>
|
|
824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-neutral"> </span>
|
|
829
|
+
<span class="cline-any cline-yes">70x</span>
|
|
830
|
+
<span class="cline-any cline-yes">93x</span>
|
|
831
|
+
<span class="cline-any cline-yes">3x</span>
|
|
832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span>
|
|
839
|
+
<span class="cline-any cline-neutral"> </span>
|
|
840
|
+
<span class="cline-any cline-neutral"> </span>
|
|
841
|
+
<span class="cline-any cline-neutral"> </span>
|
|
842
|
+
<span class="cline-any cline-neutral"> </span>
|
|
843
|
+
<span class="cline-any cline-neutral"> </span>
|
|
844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
845
|
+
<span class="cline-any cline-neutral"> </span>
|
|
846
|
+
<span class="cline-any cline-yes">70x</span>
|
|
847
|
+
<span class="cline-any cline-yes">94x</span>
|
|
848
|
+
<span class="cline-any cline-yes">3x</span>
|
|
849
|
+
<span class="cline-any cline-neutral"> </span>
|
|
850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
851
|
+
<span class="cline-any cline-neutral"> </span>
|
|
852
|
+
<span class="cline-any cline-neutral"> </span>
|
|
853
|
+
<span class="cline-any cline-neutral"> </span>
|
|
854
|
+
<span class="cline-any cline-neutral"> </span>
|
|
855
|
+
<span class="cline-any cline-neutral"> </span>
|
|
856
|
+
<span class="cline-any cline-neutral"> </span>
|
|
857
|
+
<span class="cline-any cline-neutral"> </span>
|
|
858
|
+
<span class="cline-any cline-neutral"> </span>
|
|
859
|
+
<span class="cline-any cline-neutral"> </span>
|
|
860
|
+
<span class="cline-any cline-neutral"> </span>
|
|
861
|
+
<span class="cline-any cline-yes">14x</span>
|
|
862
|
+
<span class="cline-any cline-yes">4x</span>
|
|
863
|
+
<span class="cline-any cline-neutral"> </span>
|
|
864
|
+
<span class="cline-any cline-neutral"> </span>
|
|
865
|
+
<span class="cline-any cline-neutral"> </span>
|
|
866
|
+
<span class="cline-any cline-neutral"> </span>
|
|
867
|
+
<span class="cline-any cline-neutral"> </span>
|
|
868
|
+
<span class="cline-any cline-neutral"> </span>
|
|
869
|
+
<span class="cline-any cline-neutral"> </span>
|
|
870
|
+
<span class="cline-any cline-neutral"> </span>
|
|
871
|
+
<span class="cline-any cline-neutral"> </span>
|
|
872
|
+
<span class="cline-any cline-neutral"> </span>
|
|
873
|
+
<span class="cline-any cline-neutral"> </span>
|
|
874
|
+
<span class="cline-any cline-neutral"> </span>
|
|
875
|
+
<span class="cline-any cline-yes">13x</span>
|
|
876
|
+
<span class="cline-any cline-yes">31x</span>
|
|
877
|
+
<span class="cline-any cline-neutral"> </span>
|
|
878
|
+
<span class="cline-any cline-yes">13x</span>
|
|
879
|
+
<span class="cline-any cline-yes">4x</span>
|
|
880
|
+
<span class="cline-any cline-neutral"> </span>
|
|
881
|
+
<span class="cline-any cline-neutral"> </span>
|
|
882
|
+
<span class="cline-any cline-neutral"> </span>
|
|
883
|
+
<span class="cline-any cline-neutral"> </span>
|
|
884
|
+
<span class="cline-any cline-neutral"> </span>
|
|
885
|
+
<span class="cline-any cline-neutral"> </span>
|
|
886
|
+
<span class="cline-any cline-neutral"> </span>
|
|
887
|
+
<span class="cline-any cline-neutral"> </span>
|
|
888
|
+
<span class="cline-any cline-neutral"> </span>
|
|
889
|
+
<span class="cline-any cline-neutral"> </span>
|
|
890
|
+
<span class="cline-any cline-neutral"> </span>
|
|
891
|
+
<span class="cline-any cline-neutral"> </span>
|
|
892
|
+
<span class="cline-any cline-yes">45x</span>
|
|
893
|
+
<span class="cline-any cline-yes">15x</span>
|
|
894
|
+
<span class="cline-any cline-yes">5x</span>
|
|
895
|
+
<span class="cline-any cline-neutral"> </span>
|
|
896
|
+
<span class="cline-any cline-neutral"> </span>
|
|
897
|
+
<span class="cline-any cline-neutral"> </span>
|
|
898
|
+
<span class="cline-any cline-neutral"> </span>
|
|
899
|
+
<span class="cline-any cline-neutral"> </span>
|
|
900
|
+
<span class="cline-any cline-neutral"> </span>
|
|
901
|
+
<span class="cline-any cline-neutral"> </span>
|
|
902
|
+
<span class="cline-any cline-neutral"> </span>
|
|
903
|
+
<span class="cline-any cline-neutral"> </span>
|
|
904
|
+
<span class="cline-any cline-neutral"> </span>
|
|
905
|
+
<span class="cline-any cline-neutral"> </span>
|
|
906
|
+
<span class="cline-any cline-neutral"> </span>
|
|
907
|
+
<span class="cline-any cline-neutral"> </span>
|
|
908
|
+
<span class="cline-any cline-yes">11x</span>
|
|
909
|
+
<span class="cline-any cline-neutral"> </span>
|
|
910
|
+
<span class="cline-any cline-neutral"> </span>
|
|
911
|
+
<span class="cline-any cline-yes">11x</span>
|
|
912
|
+
<span class="cline-any cline-yes">3x</span>
|
|
913
|
+
<span class="cline-any cline-neutral"> </span>
|
|
914
|
+
<span class="cline-any cline-neutral"> </span>
|
|
915
|
+
<span class="cline-any cline-neutral"> </span>
|
|
916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
917
|
+
<span class="cline-any cline-neutral"> </span>
|
|
918
|
+
<span class="cline-any cline-neutral"> </span>
|
|
919
|
+
<span class="cline-any cline-neutral"> </span>
|
|
920
|
+
<span class="cline-any cline-neutral"> </span>
|
|
921
|
+
<span class="cline-any cline-neutral"> </span>
|
|
922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
923
|
+
<span class="cline-any cline-neutral"> </span>
|
|
924
|
+
<span class="cline-any cline-neutral"> </span>
|
|
925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
926
|
+
<span class="cline-any cline-yes">12x</span>
|
|
927
|
+
<span class="cline-any cline-yes">49x</span>
|
|
928
|
+
<span class="cline-any cline-yes">49x</span>
|
|
929
|
+
<span class="cline-any cline-yes">117x</span>
|
|
930
|
+
<span class="cline-any cline-yes">117x</span>
|
|
931
|
+
<span class="cline-any cline-yes">117x</span>
|
|
932
|
+
<span class="cline-any cline-yes">11x</span>
|
|
933
|
+
<span class="cline-any cline-yes">1x</span>
|
|
934
|
+
<span class="cline-any cline-neutral"> </span>
|
|
935
|
+
<span class="cline-any cline-yes">106x</span>
|
|
936
|
+
<span class="cline-any cline-yes">2x</span>
|
|
937
|
+
<span class="cline-any cline-neutral"> </span>
|
|
938
|
+
<span class="cline-any cline-neutral"> </span>
|
|
939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
940
|
+
<span class="cline-any cline-neutral"> </span>
|
|
941
|
+
<span class="cline-any cline-neutral"> </span>
|
|
942
|
+
<span class="cline-any cline-neutral"> </span>
|
|
943
|
+
<span class="cline-any cline-neutral"> </span>
|
|
944
|
+
<span class="cline-any cline-neutral"> </span>
|
|
945
|
+
<span class="cline-any cline-neutral"> </span>
|
|
946
|
+
<span class="cline-any cline-neutral"> </span>
|
|
947
|
+
<span class="cline-any cline-neutral"> </span>
|
|
948
|
+
<span class="cline-any cline-neutral"> </span>
|
|
949
|
+
<span class="cline-any cline-neutral"> </span>
|
|
950
|
+
<span class="cline-any cline-yes">14x</span>
|
|
951
|
+
<span class="cline-any cline-yes">4x</span>
|
|
952
|
+
<span class="cline-any cline-neutral"> </span>
|
|
953
|
+
<span class="cline-any cline-neutral"> </span>
|
|
954
|
+
<span class="cline-any cline-neutral"> </span>
|
|
955
|
+
<span class="cline-any cline-neutral"> </span>
|
|
956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
957
|
+
<span class="cline-any cline-neutral"> </span>
|
|
958
|
+
<span class="cline-any cline-neutral"> </span>
|
|
959
|
+
<span class="cline-any cline-neutral"> </span>
|
|
960
|
+
<span class="cline-any cline-neutral"> </span>
|
|
961
|
+
<span class="cline-any cline-neutral"> </span>
|
|
962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
963
|
+
<span class="cline-any cline-yes">72x</span>
|
|
964
|
+
<span class="cline-any cline-yes">70x</span>
|
|
965
|
+
<span class="cline-any cline-yes">4x</span>
|
|
966
|
+
<span class="cline-any cline-neutral"> </span>
|
|
967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-neutral"> </span>
|
|
970
|
+
<span class="cline-any cline-neutral"> </span>
|
|
971
|
+
<span class="cline-any cline-neutral"> </span>
|
|
972
|
+
<span class="cline-any cline-neutral"> </span>
|
|
973
|
+
<span class="cline-any cline-neutral"> </span>
|
|
974
|
+
<span class="cline-any cline-neutral"> </span>
|
|
975
|
+
<span class="cline-any cline-neutral"> </span>
|
|
976
|
+
<span class="cline-any cline-neutral"> </span>
|
|
977
|
+
<span class="cline-any cline-neutral"> </span>
|
|
978
|
+
<span class="cline-any cline-yes">72x</span>
|
|
979
|
+
<span class="cline-any cline-yes">4x</span>
|
|
980
|
+
<span class="cline-any cline-neutral"> </span>
|
|
981
|
+
<span class="cline-any cline-neutral"> </span>
|
|
982
|
+
<span class="cline-any cline-neutral"> </span>
|
|
983
|
+
<span class="cline-any cline-neutral"> </span>
|
|
984
|
+
<span class="cline-any cline-neutral"> </span>
|
|
985
|
+
<span class="cline-any cline-neutral"> </span>
|
|
986
|
+
<span class="cline-any cline-neutral"> </span>
|
|
987
|
+
<span class="cline-any cline-neutral"> </span>
|
|
988
|
+
<span class="cline-any cline-neutral"> </span>
|
|
989
|
+
<span class="cline-any cline-neutral"> </span>
|
|
990
|
+
<span class="cline-any cline-neutral"> </span>
|
|
991
|
+
<span class="cline-any cline-yes">72x</span>
|
|
992
|
+
<span class="cline-any cline-yes">69x</span>
|
|
993
|
+
<span class="cline-any cline-yes">4x</span>
|
|
994
|
+
<span class="cline-any cline-neutral"> </span>
|
|
995
|
+
<span class="cline-any cline-neutral"> </span>
|
|
996
|
+
<span class="cline-any cline-neutral"> </span>
|
|
997
|
+
<span class="cline-any cline-neutral"> </span>
|
|
998
|
+
<span class="cline-any cline-neutral"> </span>
|
|
999
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1000
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1001
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1002
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1003
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1005
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1006
|
+
<span class="cline-any cline-yes">72x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1008
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1009
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1010
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1011
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1012
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1013
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1016
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1017
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1018
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
+
<span class="cline-any cline-yes">72x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1022
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1023
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1024
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1025
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1026
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1027
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1028
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1029
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1031
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
+
<span class="cline-any cline-yes">72x</span>
|
|
1033
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1034
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1035
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1036
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
1037
|
+
* The validations module contains functions for checking the integrity of every single value that is being passed in to the recommendation screen from the outside.
|
|
1038
|
+
* If any of the individual integrity checks fails, then an exception will be thrown to indicate that the data that was passed in is untrustworthy
|
|
1039
|
+
* and prevent a recommendation to be shown to the user based on the corrupted data.
|
|
1040
|
+
* @module
|
|
1041
|
+
*/
|
|
1042
|
+
|
|
1043
|
+
import {
|
|
1044
|
+
Activity,
|
|
1045
|
+
BloodGlucoseUnit,
|
|
1046
|
+
BloodKetonesUnit,
|
|
1047
|
+
BolusCalculator,
|
|
1048
|
+
Languages,
|
|
1049
|
+
Logbook,
|
|
1050
|
+
UserSettings,
|
|
1051
|
+
} from "@hedia/types";
|
|
1052
|
+
import moment from "moment";
|
|
1053
|
+
import { IRecommendationProps } from "../RecommendationScreen";
|
|
1054
|
+
import {
|
|
1055
|
+
ACTIVITY_BUFFER_MINUTES,
|
|
1056
|
+
ACTIVITY_DURATION_MINUTES_LIMITS,
|
|
1057
|
+
ACTIVITY_SETTINGS_INTERVAL_LIMITS,
|
|
1058
|
+
ACTIVITY_TARGET_BGL_MMOL_LIMITS,
|
|
1059
|
+
BOLUS_SECONDS_PASSED_LIMITS,
|
|
1060
|
+
CARBOHYDRATES_LIMTS,
|
|
1061
|
+
CURRENT_BGL_MMOL_LIMITS,
|
|
1062
|
+
CURRENT_BKL_MMOL_LIMITS,
|
|
1063
|
+
INSULIN_DOSE_LIMITS,
|
|
1064
|
+
INSULIN_SENSITIVITY_MMOL_LIMITS,
|
|
1065
|
+
INSULIN_TO_CARBS_RATIO_LIMITS,
|
|
1066
|
+
ONE_HOUR_MINUTES,
|
|
1067
|
+
REMINDER_HOURS_LIMITS,
|
|
1068
|
+
TARGET_BGL_MMOL_LIMITS,
|
|
1069
|
+
} from "./Constants";
|
|
1070
|
+
import {
|
|
1071
|
+
ActivityDateError,
|
|
1072
|
+
ActivityDurationError,
|
|
1073
|
+
ActivityIntensityError,
|
|
1074
|
+
ActivitySettingsError,
|
|
1075
|
+
ActivityTargetBGLError,
|
|
1076
|
+
ActivityTypeError,
|
|
1077
|
+
BloodGlucoseUnitError,
|
|
1078
|
+
BloodKetonePropsError,
|
|
1079
|
+
BloodKetoneUnitError,
|
|
1080
|
+
BolusInsulinDoseError,
|
|
1081
|
+
BolusInsulinSecondsPassedError,
|
|
1082
|
+
CarbohydrateLimitError,
|
|
1083
|
+
CurrentBGLError,
|
|
1084
|
+
CurrentBKLError,
|
|
1085
|
+
InjectionMethodError,
|
|
1086
|
+
InsulinSensitivityError,
|
|
1087
|
+
InsulinToCarbsRatioError,
|
|
1088
|
+
LanguageError,
|
|
1089
|
+
LatestLogbook6HoursBGLError,
|
|
1090
|
+
RecentBolusError,
|
|
1091
|
+
TargetBGLError,
|
|
1092
|
+
UserReminderError,
|
|
1093
|
+
} from "./RecommendationError";
|
|
1094
|
+
import { Utils } from "./Utils";
|
|
1095
|
+
|
|
1096
|
+
const { hard } = Activity.Enums.ActivityIntensity;
|
|
1097
|
+
const { fromFortysix } = Activity.Enums.ActivityReductionIntervals;
|
|
1098
|
+
|
|
1099
|
+
/**
|
|
1100
|
+
* Main function for validating all input properties for the insulin recommendation screen component.
|
|
1101
|
+
* Throws an exception if any of the individual checks fail.
|
|
1102
|
+
*
|
|
1103
|
+
* Steps:
|
|
1104
|
+
* 1. Call checkCalculatorParams() with the calculatorParams property of the props as argument.
|
|
1105
|
+
* 2. Call checkBGLUnit() with the bloodGlucoseUnit property of the props as argument.
|
|
1106
|
+
* 3. Call checkBKProps() with the bloodKetoneUnit and currentBKL properties of the props as arguments.
|
|
1107
|
+
* 4. Call checkBKLUnit() with the bloodKetoneUnit property of the props as argument.
|
|
1108
|
+
* 5. Call checkBloodKetoneLevel() with the currentBKL property of the props as argument.
|
|
1109
|
+
* 6. Call checkInjectionMethod() with the injectionMethod property of the props as argument.
|
|
1110
|
+
* 7. Call checkUserReminder() with the userReminder property of the props as argument.
|
|
1111
|
+
* 8. Call checkLanguage() with the language property of the props as argument.
|
|
1112
|
+
* 9. Call checkLatestLogbook6Hours() with the latestLogbookFrom6Hours property of the props as argument.
|
|
1113
|
+
* 10. If the activity property of the calculatorParams prop is truthy, and the activityDisplayProps prop is truthy:
|
|
1114
|
+
* call the checkActivityType method with the activityType property of the activityDisplayProps prop as the argument.
|
|
1115
|
+
* @param props All the props that were passed in to the RecommendationScreen component.
|
|
1116
|
+
*/
|
|
1117
|
+
export function validateParams(props: IRecommendationProps): void {
|
|
1118
|
+
checkCalculatorParams(props.calculatorParams);
|
|
1119
|
+
checkBGLUnit(props.bloodGlucoseUnit);
|
|
1120
|
+
|
|
1121
|
+
checkBKProps(props.bloodKetoneUnit, props.currentBKL);
|
|
1122
|
+
checkBKLUnit(props.bloodKetoneUnit);
|
|
1123
|
+
checkBloodKetoneLevel(props.currentBKL);
|
|
1124
|
+
|
|
1125
|
+
checkInjectionMethod(props.injectionMethod);
|
|
1126
|
+
checkUserReminder(props.userReminder);
|
|
1127
|
+
checkLanguage(props.language);
|
|
1128
|
+
checkLatestLogbook6Hours(props.latestLogbookFrom6Hours);
|
|
1129
|
+
if (props?.calculatorParams?.activity && props?.activityDisplayProps) {
|
|
1130
|
+
checkActivityType(props.activityDisplayProps.activityType);
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
/**
|
|
1135
|
+
* In case the users is providing a blood ketone current level, check if the blood ketone unit is defined.
|
|
1136
|
+
*
|
|
1137
|
+
* Steps:
|
|
1138
|
+
* 1. If the currentBKL is not null and the bloodKetoneUnit is null throw an BloodKetonePropsError
|
|
1139
|
+
* @param bloodKetoneUnit The user’s blood ketone unit.
|
|
1140
|
+
* @param currentBKL The users’s current blood ketone level.
|
|
1141
|
+
*/
|
|
1142
|
+
export function checkBKProps(bloodKetoneUnit: BloodKetonesUnit | null, currentBKL: number | null): void {
|
|
1143
|
+
if (currentBKL !== null && bloodKetoneUnit === null) {
|
|
1144
|
+
throw BloodKetonePropsError();
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
/**
|
|
1149
|
+
* The user’s preferred language for using the app.
|
|
1150
|
+
*
|
|
1151
|
+
* Steps:
|
|
1152
|
+
* 1. Search in the Languages enum values the language provided as an argument.
|
|
1153
|
+
* If language is not present in the Languages enum values array, throw a LanguageError.
|
|
1154
|
+
* @param language The user’s preferred language for using the app.
|
|
1155
|
+
*/
|
|
1156
|
+
export function checkLanguage(language: Languages): void {
|
|
1157
|
+
if (!Object.values(Languages).includes(language)) {
|
|
1158
|
+
throw LanguageError();
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
/**
|
|
1163
|
+
* Check if the latest logbook from the last 6 hours is valid.
|
|
1164
|
+
*
|
|
1165
|
+
* Steps:
|
|
1166
|
+
* 1. If logbook is undefined, throw an LatestLogbook6HoursBGLError.
|
|
1167
|
+
* 2. If logbook is not null and if the blood_glucose_millimolar property of the logbook object is not null,
|
|
1168
|
+
* check if the blood_glucose_millimolar is inside the allowed range for blood glucose level.
|
|
1169
|
+
* If it is not, throw LatestLogbook6HoursBGLError.
|
|
1170
|
+
* @param logbook The user’s latest logbook from the last 6 hours
|
|
1171
|
+
*/
|
|
1172
|
+
export function checkLatestLogbook6Hours(logbook: Logbook.Types.ILogbookEntry | null): void {
|
|
1173
|
+
if (logbook === undefined) {
|
|
1174
|
+
throw LatestLogbook6HoursBGLError();
|
|
1175
|
+
}
|
|
1176
|
+
if (logbook !== null && logbook.blood_glucose_millimolar !== null) {
|
|
1177
|
+
if (!Utils.isInRange(logbook.blood_glucose_millimolar, CURRENT_BGL_MMOL_LIMITS)) {
|
|
1178
|
+
throw LatestLogbook6HoursBGLError();
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
/**
|
|
1184
|
+
* Check if the injectionMethod parameter is valid.
|
|
1185
|
+
*
|
|
1186
|
+
* Steps:
|
|
1187
|
+
* 1. Search in the InjectionMethod enum values the injectionMethod provided as an argument.
|
|
1188
|
+
* If injectionMethod is not present in the InjectionMethod enum values array, throw a InjectionMethodError.
|
|
1189
|
+
* @param injectionMethod The user’s insulin injection method.
|
|
1190
|
+
*/
|
|
1191
|
+
export function checkInjectionMethod(injectionMethod: UserSettings.Enums.InjectionMethod): void {
|
|
1192
|
+
const check = Object.values(UserSettings.Enums.InjectionMethod).some(
|
|
1193
|
+
(method): boolean => method === injectionMethod,
|
|
1194
|
+
);
|
|
1195
|
+
if (!check) {
|
|
1196
|
+
throw InjectionMethodError();
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
/**
|
|
1201
|
+
* Check if the blood glucose unit parameter is valid.
|
|
1202
|
+
* Steps:
|
|
1203
|
+
* 1. Search in the BloodGlucoseUnit enum values the unit provided as an argument.
|
|
1204
|
+
* If unit is not present in the BloodGlucoseUnit enum values array, throw a BloodGlucoseUnitError.
|
|
1205
|
+
* @param unit The user’s preferred blood glucose unit for using the app.
|
|
1206
|
+
*/
|
|
1207
|
+
export function checkBGLUnit(unit: BloodGlucoseUnit): void {
|
|
1208
|
+
const check = Object.values(BloodGlucoseUnit).some((enumUnit): boolean => enumUnit === unit);
|
|
1209
|
+
if (!check) {
|
|
1210
|
+
throw BloodGlucoseUnitError();
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
/**
|
|
1215
|
+
* Check if the blood ketones unit parameter is valid.
|
|
1216
|
+
*
|
|
1217
|
+
* Steps:
|
|
1218
|
+
* 1. If the unit is not null, search in the BloodKetonesUnit enum values the unit provided as an argument.
|
|
1219
|
+
* If unit is not present in the BloodKetonesUnit enum values array, throw a BloodKetoneUnitError.
|
|
1220
|
+
* @param unit The user’s preferred blood ketones unit for using the app.
|
|
1221
|
+
* It can be null if the user did not choose a measurement unit at the moment of this validation.
|
|
1222
|
+
*/
|
|
1223
|
+
export function checkBKLUnit(unit: BloodKetonesUnit | null): void {
|
|
1224
|
+
if (unit !== null) {
|
|
1225
|
+
const check = Object.values(BloodKetonesUnit).some((enumUnit): boolean => enumUnit === unit);
|
|
1226
|
+
if (!check) {
|
|
1227
|
+
throw BloodKetoneUnitError();
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
|
|
1232
|
+
/**
|
|
1233
|
+
* Check if the users preferred default reminder duration is valid by verifying that it is within the allowed range.
|
|
1234
|
+
*
|
|
1235
|
+
* Steps:
|
|
1236
|
+
* 1. Use isInRange() {@link Utils} to check if userReminder is in the interval [0; 6]. If it isn’t then throw an UserReminderError().
|
|
1237
|
+
* @param userReminder The default reminder time in hours from the user’s settings
|
|
1238
|
+
*/
|
|
1239
|
+
export function checkUserReminder(userReminder: number): void {
|
|
1240
|
+
if (!Utils.isInRange(userReminder, REMINDER_HOURS_LIMITS)) {
|
|
1241
|
+
throw UserReminderError();
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
/**
|
|
1246
|
+
* Check validity of the values that are used as input for the actual insulin recommendation calculation.
|
|
1247
|
+
*
|
|
1248
|
+
* Steps:
|
|
1249
|
+
* 1. Call checkActivity() with the activity property of the calculatorParams as argument.
|
|
1250
|
+
* 2. Call checkCarbohydrates() with the carbohydrates property of the calculatorParams as argument.
|
|
1251
|
+
* 3. Call checkCurrentBGL() with the currentBGL property of the calculatorParams as argument.
|
|
1252
|
+
* 4. Call checkTargetBGL() with the targetBGL property of the calculatorParams as argument.
|
|
1253
|
+
* 5. Call checkInsulinToCarbRatio() with the carbohydrateRatio property of the calculatorParams as argument.
|
|
1254
|
+
* 6. Call checkInsulinSensitivity() with the insulinSensitivity property of the calculatorParams as argument.
|
|
1255
|
+
* 7. Call checkRecentBolus() with the recentBoluses property of the calculatorParams as argument.
|
|
1256
|
+
* 8. Call checkRecentBolusesInsulinDose() with the recentBoluses property of the calculatorParams as argument.
|
|
1257
|
+
* 9. Call checkRecentBolusesSecondsPassed() with the recentBoluses property of the calculatorParams as argument.
|
|
1258
|
+
* @param calculatorParams The inputs for calculation to be checked
|
|
1259
|
+
*/
|
|
1260
|
+
export function checkCalculatorParams(calculatorParams: BolusCalculator.Types.IRecommendationParams): void {
|
|
1261
|
+
checkActivity(calculatorParams.activity);
|
|
1262
|
+
checkCarbohydrates(calculatorParams.carbohydrates);
|
|
1263
|
+
checkCurrentBGL(calculatorParams.currentBGL);
|
|
1264
|
+
checkTargetBGL(calculatorParams.targetBGL);
|
|
1265
|
+
checkInsulinToCarbRatio(calculatorParams.carbohydrateRatio);
|
|
1266
|
+
checkInsulinSensitivity(calculatorParams.insulinSensitivity);
|
|
1267
|
+
checkRecentBolus(calculatorParams.recentBoluses);
|
|
1268
|
+
checkRecentBolusesInsulinDose(calculatorParams.recentBoluses);
|
|
1269
|
+
checkRecentBolusesSecondsPassed(calculatorParams.recentBoluses);
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
/**
|
|
1273
|
+
* Check the validity of the values inputted for physical activity
|
|
1274
|
+
*
|
|
1275
|
+
* Steps:
|
|
1276
|
+
* 1. If the activity argument is truthy do the following:
|
|
1277
|
+
* - Call checkActivityDate() with the activity as argument
|
|
1278
|
+
* - Call checkActivityDuration() with the activityDuration property of the activity as argument
|
|
1279
|
+
* - Call checkActivityIntensity() with the activityIntensity property of the activity as argument
|
|
1280
|
+
* - Call checkActivitySettings() with the activitySettings property of the activity as argument
|
|
1281
|
+
* - Call checkActivityTargetBGL() with the activitySettings.target property of the activity as argument
|
|
1282
|
+
* @param activity The activity that is associated with the calculation, or null if no activity was entered
|
|
1283
|
+
*/
|
|
1284
|
+
export function checkActivity(activity: BolusCalculator.Types.IActivityParams | null): void {
|
|
1285
|
+
if (activity) {
|
|
1286
|
+
checkActivityDate(activity);
|
|
1287
|
+
checkActivityDuration(activity.activityDuration);
|
|
1288
|
+
checkActivityIntensity(activity.activityIntensity);
|
|
1289
|
+
checkActivitySettings(activity.activitySettings);
|
|
1290
|
+
checkActivityTargetBGL(activity.activitySettings.target);
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
/**
|
|
1295
|
+
* Check if the recentBoluses is in the right format.
|
|
1296
|
+
*
|
|
1297
|
+
* Steps:
|
|
1298
|
+
* 1. If recentBoluses is null or undefined throw a RecentBolusError.
|
|
1299
|
+
* @param recentBoluses List of all known bolus injections from the past 4 hours including insulin amount and how many seconds has passed since the injection.
|
|
1300
|
+
*/
|
|
1301
|
+
export function checkRecentBolus(recentBoluses: Array<BolusCalculator.Types.IRecentBolus>): void {
|
|
1302
|
+
if (recentBoluses === null || recentBoluses === undefined) {
|
|
1303
|
+
throw RecentBolusError();
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
/**
|
|
1308
|
+
* Check if the insulin dose in each of the given recent insulin injections is valid by verifying that they are within the allowed range.
|
|
1309
|
+
*
|
|
1310
|
+
* Steps
|
|
1311
|
+
* 1. If recentBoluses isn’t null, for each bolus element in recentBoluses
|
|
1312
|
+
* use isInRange() to check if the insulinDose parameter of the bolus element is in the interval [0; 50].
|
|
1313
|
+
* If it isn’t then throw an BolusInsulinDoseError().
|
|
1314
|
+
* @param recentBoluses List of all known bolus injections from the past 4 hours including insulin amount and how many seconds has passed since the injection.
|
|
1315
|
+
*/
|
|
1316
|
+
export function checkRecentBolusesInsulinDose(recentBoluses: Array<BolusCalculator.Types.IRecentBolus>): void {
|
|
1317
|
+
recentBoluses.forEach((bolus: BolusCalculator.Types.IRecentBolus): void => {
|
|
1318
|
+
if (!Utils.isInRange(bolus.insulinDose, INSULIN_DOSE_LIMITS)) {
|
|
1319
|
+
throw BolusInsulinDoseError();
|
|
1320
|
+
}
|
|
1321
|
+
});
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
/**
|
|
1325
|
+
* Check if the amount of time since each recent insulin injection is valid by verifying that they are within the allowed range.
|
|
1326
|
+
*
|
|
1327
|
+
* Steps:
|
|
1328
|
+
* 1. If recentBoluses isn’t null, for each bolus element in recentBoluses
|
|
1329
|
+
* use isInRange() to check if the secondsPassed parameter of the bolus element is in the interval [0; 1440].
|
|
1330
|
+
* If it isn’t then throw an BolusInsulinSecondsPassedError().
|
|
1331
|
+
* @param recentBoluses List of all known bolus injections from the past 4 hours including insulin amount and how many seconds has passed since the injection.
|
|
1332
|
+
*/
|
|
1333
|
+
export function checkRecentBolusesSecondsPassed(recentBoluses: Array<BolusCalculator.Types.IRecentBolus>): void {
|
|
1334
|
+
recentBoluses.forEach((bolus: BolusCalculator.Types.IRecentBolus): void => {
|
|
1335
|
+
if (!Utils.isInRange(bolus.secondsPassed, BOLUS_SECONDS_PASSED_LIMITS)) {
|
|
1336
|
+
throw BolusInsulinSecondsPassedError();
|
|
1337
|
+
}
|
|
1338
|
+
});
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
/**
|
|
1342
|
+
* Check if the duration of an entered activity is valid by verifying that it is within the allowed range.
|
|
1343
|
+
*
|
|
1344
|
+
* Steps:
|
|
1345
|
+
* 1. Use isInRange() to check if activityDuration is in the interval [0; 60]. If it isn’t then throw an ActivityDurationError().
|
|
1346
|
+
* @param activityDuration The duration of an entered physical activity in minutes.
|
|
1347
|
+
*/
|
|
1348
|
+
export function checkActivityDuration(activityDuration: number): void {
|
|
1349
|
+
if (!Utils.isInRange(activityDuration, ACTIVITY_DURATION_MINUTES_LIMITS)) {
|
|
1350
|
+
throw ActivityDurationError();
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
/**
|
|
1355
|
+
* Check if the activity intensity parameter is valid.
|
|
1356
|
+
*
|
|
1357
|
+
* Steps:
|
|
1358
|
+
* 1. Search in the {@link ActivityIntensity} enum values the activityIntensity provided as an argument.
|
|
1359
|
+
* If activityIntensity is not present in the ActivityIntensity enum values array, throw an ActivityIntensityError.
|
|
1360
|
+
* @param activityIntensity The intensity of the entered activity.
|
|
1361
|
+
*/
|
|
1362
|
+
export function checkActivityIntensity(activityIntensity: Activity.Enums.ActivityIntensity): void {
|
|
1363
|
+
const check = Object.values(Activity.Enums.ActivityIntensity).some(
|
|
1364
|
+
(method): boolean => method === activityIntensity?.toLowerCase(),
|
|
1365
|
+
);
|
|
1366
|
+
if (!check) {
|
|
1367
|
+
throw ActivityIntensityError();
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
/**
|
|
1372
|
+
* Check if the activity type parameter is valid.
|
|
1373
|
+
*
|
|
1374
|
+
* Steps:
|
|
1375
|
+
* 1. Search in the {@link ActivityEnum} enum values the activityType provided as an argument.
|
|
1376
|
+
* If activityType is not present in the ActivityEnum enum values array, throw an ActivityTypeError.
|
|
1377
|
+
* @param activityType The type of the entered activity.
|
|
1378
|
+
*/
|
|
1379
|
+
export function checkActivityType(activityType: Activity.Enums.ActivityEnum | null): void {
|
|
1380
|
+
const check = Object.values(Activity.Enums.ActivityEnum).some((method): boolean => method === activityType);
|
|
1381
|
+
if (!check) {
|
|
1382
|
+
throw ActivityTypeError();
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
/**
|
|
1387
|
+
* Verify that the ending time of the given activity has not been passed by more than 4 hours and 10 minutes.
|
|
1388
|
+
*
|
|
1389
|
+
* Steps:
|
|
1390
|
+
* 1. Use the moment library to create an object that represents the start time of the activity by loading from the activityDate property of the activity argument.
|
|
1391
|
+
* Add to the object the duration of the activity plus 4 hours and 10 minutes and save the resulting date as maximumDate.
|
|
1392
|
+
* 2. Check if the current time is after maximumDate throw an ActivityDateError().
|
|
1393
|
+
* @param activity The activity for which we want to check the date
|
|
1394
|
+
*/
|
|
1395
|
+
export function checkActivityDate(activity: BolusCalculator.Types.IActivityParams): void {
|
|
1396
|
+
const maximumDate = moment
|
|
1397
|
+
.utc(activity.activityDate)
|
|
1398
|
+
.add(activity.activityDuration + ONE_HOUR_MINUTES * 4 + ACTIVITY_BUFFER_MINUTES, `minutes`);
|
|
1399
|
+
if (moment.utc().isAfter(maximumDate)) {
|
|
1400
|
+
throw ActivityDateError();
|
|
1401
|
+
}
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
/**
|
|
1405
|
+
* Steps:
|
|
1406
|
+
* 1. Iterate over all combinations of activity intensities and activity duration intervals and for each one:
|
|
1407
|
+
* - If the current intensity is hard and the duration is long (fromFortysix) then check that the value from activitySettings
|
|
1408
|
+
* for the current combination of activity intensity is either null or in the interval [0; 1]
|
|
1409
|
+
* - If the current intensity isn’t hard or the duration isn’t long then use isInRange() to check that the value from activitySettings
|
|
1410
|
+
* for the current combination of activity intensity is in the interval [0; 1].
|
|
1411
|
+
* @param activitySettings The user’s settings for doing physical activity
|
|
1412
|
+
*/
|
|
1413
|
+
export function checkActivitySettings(activitySettings: Activity.Types.ActivitySettings): void {
|
|
1414
|
+
for (const intensity of Object.keys(activitySettings) as Array<Activity.Enums.ActivityIntensity>) {
|
|
1415
|
+
const reductionIntervals = activitySettings[intensity];
|
|
1416
|
+
for (const interval of Object.keys(reductionIntervals) as Array<keyof typeof reductionIntervals>) {
|
|
1417
|
+
const value = activitySettings[intensity][interval];
|
|
1418
|
+
const isInInterval: boolean = Utils.isInRange(value, ACTIVITY_SETTINGS_INTERVAL_LIMITS);
|
|
1419
|
+
if (intensity === hard && interval === fromFortysix) {
|
|
1420
|
+
if (!isInInterval && value !== null) {
|
|
1421
|
+
throw ActivitySettingsError();
|
|
1422
|
+
}
|
|
1423
|
+
} else if (!isInInterval) {
|
|
1424
|
+
throw ActivitySettingsError();
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
/**
|
|
1431
|
+
* Check if the target blood glucose level for doing exercise is valid by verifying that it is within the allowed range.
|
|
1432
|
+
*
|
|
1433
|
+
* Steps:
|
|
1434
|
+
* 1. Use isInRange() to check if activitySettingsTargetBGL is in the interval [5.0; 13.9]. If it isn’t then throw an ActivityTargetBGLError().
|
|
1435
|
+
* @param activitySettingsTargetBGL The target blood glucose level for doing exercise in mmol/L from the user’s settings.
|
|
1436
|
+
*/
|
|
1437
|
+
export function checkActivityTargetBGL(activitySettingsTargetBGL: number): void {
|
|
1438
|
+
if (!Utils.isInRange(activitySettingsTargetBGL, ACTIVITY_TARGET_BGL_MMOL_LIMITS)) {
|
|
1439
|
+
throw ActivityTargetBGLError();
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
/**
|
|
1444
|
+
* Check if the current blood glucose level is valid by verifying that it is either null or within the allowed range.
|
|
1445
|
+
* Steps:
|
|
1446
|
+
* 1. If currentBGL is not null then use isInRange() to check if currentBGL is in the interval [1.1; 33.3].
|
|
1447
|
+
* If it isn’t then throw a CurrentBGLError().
|
|
1448
|
+
* @param currentBGL The current blood glucose level in mmol/L entered by the user, or null to indicate that the value is unknown because it wasn’t given.
|
|
1449
|
+
*/
|
|
1450
|
+
export function checkCurrentBGL(currentBGL: number | null): void {
|
|
1451
|
+
if (currentBGL !== null) {
|
|
1452
|
+
if (!Utils.isInRange(currentBGL, CURRENT_BGL_MMOL_LIMITS)) {
|
|
1453
|
+
throw CurrentBGLError();
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
|
|
1458
|
+
/**
|
|
1459
|
+
* Check if the target blood glucose level is valid by verifying that it is within the allowed range.
|
|
1460
|
+
*
|
|
1461
|
+
* Steps:
|
|
1462
|
+
* 1. Use isInRange() to check if targetBGL is in the interval [5.0; 13.9]. If it isn’t then throw a TargetBGLError().
|
|
1463
|
+
* @param targetBGL The target blood glucose level in mmol/L extracted from the user’s settings depending on the time of day.
|
|
1464
|
+
*/
|
|
1465
|
+
export function checkTargetBGL(targetBGL: number): void {
|
|
1466
|
+
if (!Utils.isInRange(targetBGL, TARGET_BGL_MMOL_LIMITS)) {
|
|
1467
|
+
throw TargetBGLError();
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
/**
|
|
1472
|
+
* Check if the current blood ketones concentration is valid by verifying that it is either null or within the allowed range.
|
|
1473
|
+
*
|
|
1474
|
+
* Steps:
|
|
1475
|
+
* 1. If currentBKL is not null then use isInRange() to check if currentBGL is in the interval [0.0; 8.0]. If it isn’t then throw a CurrentBKLError().
|
|
1476
|
+
* @param currentBKL The current blood ketones concentration in mmol/L entered by the user, or null to indicate that the value is unknown because it wasn’t given.
|
|
1477
|
+
*/
|
|
1478
|
+
export function checkBloodKetoneLevel(currentBKL: number | null): void {
|
|
1479
|
+
if (currentBKL !== null) {
|
|
1480
|
+
if (!Utils.isInRange(currentBKL, CURRENT_BKL_MMOL_LIMITS)) {
|
|
1481
|
+
throw CurrentBKLError();
|
|
1482
|
+
}
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
/**
|
|
1487
|
+
* Check if the insulin sensitivity is valid by verifying that it is within the allowed range.
|
|
1488
|
+
*
|
|
1489
|
+
* Steps:
|
|
1490
|
+
* 1. Use isInRange() to check if insulinSensitivity is in the interval [0.3; 10]. If it isn’t then throw an InsulinSensitivityError().
|
|
1491
|
+
* @param insulinSensitivity The insulin sensitivity in (mmol/L)/IU extracted from the user’s settings depending on the time of day.
|
|
1492
|
+
*/
|
|
1493
|
+
export function checkInsulinSensitivity(insulinSensitivity: number): void {
|
|
1494
|
+
if (!Utils.isInRange(insulinSensitivity, INSULIN_SENSITIVITY_MMOL_LIMITS)) {
|
|
1495
|
+
throw InsulinSensitivityError();
|
|
1496
|
+
}
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
/**
|
|
1500
|
+
* Check if the insulin-to-carbs ratio is valid by verifying that it is within the allowed range.
|
|
1501
|
+
*
|
|
1502
|
+
* Steps:
|
|
1503
|
+
* 1. Use isInRange() to check if insulinToCarbRatio is in the interval [1; 50]. If it isn’t then throw an InsulinToCarbsRatioError().
|
|
1504
|
+
* @param insulinToCarbRatio The insulin-to-carbs ratio in g/IU extracted from the user’s settings depending on the time of day.
|
|
1505
|
+
*/
|
|
1506
|
+
export function checkInsulinToCarbRatio(insulinToCarbRatio: number): void {
|
|
1507
|
+
if (!Utils.isInRange(insulinToCarbRatio, INSULIN_TO_CARBS_RATIO_LIMITS)) {
|
|
1508
|
+
throw InsulinToCarbsRatioError();
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
/**
|
|
1513
|
+
* Check if the entered amount of carbohydrates is valid by verifying that it is within the allowed range.
|
|
1514
|
+
*
|
|
1515
|
+
* Steps:
|
|
1516
|
+
* 1. Use isInRange() to check if carbohydrates is in the interval [0; 300]. If it isn’t then throw a CarbohydrateLimitError().
|
|
1517
|
+
* @param carbohydrates The amount of carbohydrates that the user is eating in grams.
|
|
1518
|
+
*/
|
|
1519
|
+
export function checkCarbohydrates(carbohydrates: number): void {
|
|
1520
|
+
if (!Utils.isInRange(carbohydrates, CARBOHYDRATES_LIMTS)) {
|
|
1521
|
+
throw CarbohydrateLimitError();
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
</pre></td></tr></table></pre>
|
|
1525
|
+
|
|
1526
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1527
|
+
</div><!-- /wrapper -->
|
|
1528
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1529
|
+
Code coverage generated by
|
|
1530
|
+
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
1531
|
+
at Thu Sep 23 2021 09:47:17 GMT+0000 (Coordinated Universal Time)
|
|
1532
|
+
</div>
|
|
1533
|
+
</div>
|
|
1534
|
+
<script src="../../prettify.js"></script>
|
|
1535
|
+
<script>
|
|
1536
|
+
window.onload = function () {
|
|
1537
|
+
prettyPrint();
|
|
1538
|
+
};
|
|
1539
|
+
</script>
|
|
1540
|
+
<script src="../../sorter.js"></script>
|
|
1541
|
+
<script src="../../block-navigation.js"></script>
|
|
1542
|
+
</body>
|
|
1543
|
+
</html>
|
|
1544
|
+
|