@itentialopensource/adapter-mockdevice 2.3.0 → 2.3.2

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.
@@ -1,1612 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for adapter-mockdevice/adapter.js</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">adapter-mockdevice</a> adapter.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">10.18% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>22/216</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">3.33% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>2/60</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">7.14% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>3/42</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">10.32% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>22/213</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-yes">1x</span>
580
- <span class="cline-any cline-yes">1x</span>
581
- <span class="cline-any cline-yes">1x</span>
582
- <span class="cline-any cline-yes">1x</span>
583
- <span class="cline-any cline-yes">1x</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-yes">1x</span>
586
- <span class="cline-any cline-yes">1x</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-yes">1x</span>
589
- <span class="cline-any cline-yes">1x</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-yes">1x</span>
593
- <span class="cline-any cline-yes">1x</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-yes">1x</span>
602
- <span class="cline-any cline-no">&nbsp;</span>
603
- <span class="cline-any cline-no">&nbsp;</span>
604
- <span class="cline-any cline-no">&nbsp;</span>
605
- <span class="cline-any cline-no">&nbsp;</span>
606
- <span class="cline-any cline-no">&nbsp;</span>
607
- <span class="cline-any cline-no">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-no">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-yes">1x</span>
618
- <span class="cline-any cline-no">&nbsp;</span>
619
- <span class="cline-any cline-no">&nbsp;</span>
620
- <span class="cline-any cline-no">&nbsp;</span>
621
- <span class="cline-any cline-no">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-no">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-no">&nbsp;</span>
626
- <span class="cline-any cline-no">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-no">&nbsp;</span>
639
- <span class="cline-any cline-no">&nbsp;</span>
640
- <span class="cline-any cline-no">&nbsp;</span>
641
- <span class="cline-any cline-no">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-no">&nbsp;</span>
648
- <span class="cline-any cline-no">&nbsp;</span>
649
- <span class="cline-any cline-no">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-no">&nbsp;</span>
661
- <span class="cline-any cline-no">&nbsp;</span>
662
- <span class="cline-any cline-no">&nbsp;</span>
663
- <span class="cline-any cline-no">&nbsp;</span>
664
- <span class="cline-any cline-no">&nbsp;</span>
665
- <span class="cline-any cline-no">&nbsp;</span>
666
- <span class="cline-any cline-no">&nbsp;</span>
667
- <span class="cline-any cline-no">&nbsp;</span>
668
- <span class="cline-any cline-no">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-no">&nbsp;</span>
671
- <span class="cline-any cline-no">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-no">&nbsp;</span>
674
- <span class="cline-any cline-no">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-no">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-no">&nbsp;</span>
686
- <span class="cline-any cline-no">&nbsp;</span>
687
- <span class="cline-any cline-no">&nbsp;</span>
688
- <span class="cline-any cline-no">&nbsp;</span>
689
- <span class="cline-any cline-no">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-no">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-no">&nbsp;</span>
700
- <span class="cline-any cline-no">&nbsp;</span>
701
- <span class="cline-any cline-no">&nbsp;</span>
702
- <span class="cline-any cline-no">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-no">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-no">&nbsp;</span>
712
- <span class="cline-any cline-no">&nbsp;</span>
713
- <span class="cline-any cline-no">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-no">&nbsp;</span>
716
- <span class="cline-any cline-no">&nbsp;</span>
717
- <span class="cline-any cline-no">&nbsp;</span>
718
- <span class="cline-any cline-no">&nbsp;</span>
719
- <span class="cline-any cline-no">&nbsp;</span>
720
- <span class="cline-any cline-no">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-no">&nbsp;</span>
723
- <span class="cline-any cline-no">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-no">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-no">&nbsp;</span>
733
- <span class="cline-any cline-no">&nbsp;</span>
734
- <span class="cline-any cline-no">&nbsp;</span>
735
- <span class="cline-any cline-no">&nbsp;</span>
736
- <span class="cline-any cline-no">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-no">&nbsp;</span>
746
- <span class="cline-any cline-no">&nbsp;</span>
747
- <span class="cline-any cline-no">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-yes">1x</span>
753
- <span class="cline-any cline-yes">1x</span>
754
- <span class="cline-any cline-yes">1x</span>
755
- <span class="cline-any cline-yes">1x</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-no">&nbsp;</span>
760
- <span class="cline-any cline-no">&nbsp;</span>
761
- <span class="cline-any cline-no">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-no">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-no">&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-no">&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-yes">1x</span>
781
- <span class="cline-any cline-yes">1x</span>
782
- <span class="cline-any cline-yes">1x</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-no">&nbsp;</span>
789
- <span class="cline-any cline-no">&nbsp;</span>
790
- <span class="cline-any cline-no">&nbsp;</span>
791
- <span class="cline-any cline-no">&nbsp;</span>
792
- <span class="cline-any cline-no">&nbsp;</span>
793
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-no">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-no">&nbsp;</span>
804
- <span class="cline-any cline-no">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-no">&nbsp;</span>
809
- <span class="cline-any cline-no">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-no">&nbsp;</span>
812
- <span class="cline-any cline-no">&nbsp;</span>
813
- <span class="cline-any cline-no">&nbsp;</span>
814
- <span class="cline-any cline-no">&nbsp;</span>
815
- <span class="cline-any cline-no">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
817
- <span class="cline-any cline-no">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-no">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-no">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-no">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</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-no">&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-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
878
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
883
- <span class="cline-any cline-no">&nbsp;</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-neutral">&nbsp;</span>
888
- <span class="cline-any cline-no">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-no">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
912
- <span class="cline-any cline-no">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-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-neutral">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
926
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
931
- <span class="cline-any cline-no">&nbsp;</span>
932
- <span class="cline-any cline-no">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-no">&nbsp;</span>
936
- <span class="cline-any cline-no">&nbsp;</span>
937
- <span class="cline-any cline-no">&nbsp;</span>
938
- <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-neutral">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-no">&nbsp;</span>
949
- <span class="cline-any cline-no">&nbsp;</span>
950
- <span class="cline-any cline-no">&nbsp;</span>
951
- <span class="cline-any cline-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-no">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-neutral">&nbsp;</span>
961
- <span class="cline-any cline-neutral">&nbsp;</span>
962
- <span class="cline-any cline-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-no">&nbsp;</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-neutral">&nbsp;</span>
970
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
975
- <span class="cline-any cline-neutral">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-neutral">&nbsp;</span>
978
- <span class="cline-any cline-no">&nbsp;</span>
979
- <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
994
- <span class="cline-any cline-neutral">&nbsp;</span>
995
- <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-neutral">&nbsp;</span>
997
- <span class="cline-any cline-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-no">&nbsp;</span>
1001
- <span class="cline-any cline-no">&nbsp;</span>
1002
- <span class="cline-any cline-no">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-no">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1010
- <span class="cline-any cline-no">&nbsp;</span>
1011
- <span class="cline-any cline-no">&nbsp;</span>
1012
- <span class="cline-any cline-no">&nbsp;</span>
1013
- <span class="cline-any cline-neutral">&nbsp;</span>
1014
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1019
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1027
- <span class="cline-any cline-neutral">&nbsp;</span>
1028
- <span class="cline-any cline-neutral">&nbsp;</span>
1029
- <span class="cline-any cline-no">&nbsp;</span>
1030
- <span class="cline-any cline-neutral">&nbsp;</span>
1031
- <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-neutral">&nbsp;</span>
1033
- <span class="cline-any cline-neutral">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-neutral">&nbsp;</span>
1037
- <span class="cline-any cline-no">&nbsp;</span>
1038
- <span class="cline-any cline-no">&nbsp;</span>
1039
- <span class="cline-any cline-neutral">&nbsp;</span>
1040
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1050
- <span class="cline-any cline-no">&nbsp;</span>
1051
- <span class="cline-any cline-neutral">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-no">&nbsp;</span>
1054
- <span class="cline-any cline-no">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-no">&nbsp;</span>
1057
- <span class="cline-any cline-neutral">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-neutral">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1067
- <span class="cline-any cline-no">&nbsp;</span>
1068
- <span class="cline-any cline-neutral">&nbsp;</span>
1069
- <span class="cline-any cline-no">&nbsp;</span>
1070
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1075
- <span class="cline-any cline-neutral">&nbsp;</span>
1076
- <span class="cline-any cline-neutral">&nbsp;</span>
1077
- <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-no">&nbsp;</span>
1079
- <span class="cline-any cline-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-yes">1x</span>
1083
- <span class="cline-any cline-yes">1x</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// Set globals
1085
- /* global database pronghornProps log eventSystem */
1086
- /* eslint default-param-last: warn */
1087
- &nbsp;
1088
- const path = require('path');
1089
- const fs = require('fs');
1090
- const { unzip } = require('zlib');
1091
- const EventEmitterCl = require('events').EventEmitter;
1092
- const util = require('util');
1093
- &nbsp;
1094
- const encProps = pronghornProps.pathProps.encrypted;
1095
- const Ajv = require('ajv');
1096
- &nbsp;
1097
- const ajv = new Ajv({ allErrors: true });
1098
- const mockDeviceSchema = JSON.parse(
1099
- fs.readFileSync(path.join(__dirname, './mockDeviceSchema.json'), 'utf-8')
1100
- );
1101
- const configMgrPath = path.join(__dirname, '../../@itential/app-configuration_manager');
1102
- const utilsPath = path.join(__dirname, '../../@itential/itential-utils');
1103
- let MOCK_DEVICES;
1104
- let CONFIG_PARSERS;
1105
- let getDriver;
1106
- let translateChangesToNativeConfig;
1107
- let Discovery;
1108
- let discovery;
1109
- &nbsp;
1110
- <span class="missing-if-branch" title="if path not taken" >I</span>if (process.env.NODE_ENV !== 'test') {
1111
- <span class="cstat-no" title="statement not covered" > ({ Discovery } = require(`${utilsPath}`));</span>
1112
- <span class="cstat-no" title="statement not covered" > discovery = new Discovery();</span>
1113
- <span class="cstat-no" title="statement not covered" > console.log(discovery);</span>
1114
- <span class="cstat-no" title="statement not covered" > MOCK_DEVICES = database.collection('mock_devices');</span>
1115
- <span class="cstat-no" title="statement not covered" > CONFIG_PARSERS = database.collection('ucm_config_parsers');</span>
1116
- <span class="cstat-no" title="statement not covered" > ({ getDriver } = discovery.require(</span>
1117
- `${configMgrPath}/shared/device-config/index.js`,
1118
- encProps
1119
- ));
1120
- <span class="cstat-no" title="statement not covered" > ({ translateChangesToNativeConfig } = discovery.require(</span>
1121
- `${configMgrPath}/config-tools/nativeConfigConverter.js`,
1122
- encProps
1123
- ));
1124
- }
1125
- &nbsp;
1126
- const getDeviceParser = <span class="fstat-no" title="function not covered" >as</span>ync (deviceType) =&gt; {
1127
- <span class="cstat-no" title="statement not covered" > try {</span>
1128
- const parserData = <span class="cstat-no" title="statement not covered" >await CONFIG_PARSERS.findOne({ name: deviceType });</span>
1129
- <span class="cstat-no" title="statement not covered" > if (parserData) {</span>
1130
- <span class="cstat-no" title="statement not covered" > return parserData;</span>
1131
- }
1132
- <span class="cstat-no" title="statement not covered" > return null;</span>
1133
- } catch (error) {
1134
- <span class="cstat-no" title="statement not covered" > log.error(`Failed to get device parser. ${error.message || error}`);</span>
1135
- <span class="cstat-no" title="statement not covered" > return null;</span>
1136
- }
1137
- };
1138
- &nbsp;
1139
- // Converts lines of config into changesets
1140
- // You need changesets to rebuild a config
1141
- /**
1142
- * @param lineObj
1143
- * @param p
1144
- * @param changes
1145
- */
1146
- function <span class="fstat-no" title="function not covered" >lineToChangeSet(</span>lineObj, p, changes) {
1147
- const line = <span class="cstat-no" title="statement not covered" >lineObj.words.join(' ');</span>
1148
- const parent = <span class="cstat-no" title="statement not covered" >[...p];</span>
1149
- <span class="cstat-no" title="statement not covered" > if (lineObj.lines.length === 0) {</span>
1150
- <span class="cstat-no" title="statement not covered" > changes.push({</span>
1151
- parents: p,
1152
- new: line,
1153
- old: null
1154
- });
1155
- } else {
1156
- <span class="cstat-no" title="statement not covered" > parent.push(line);</span>
1157
- <span class="cstat-no" title="statement not covered" > lineObj.lines.forEach(<span class="fstat-no" title="function not covered" >(e</span>lement) =&gt; {</span>
1158
- <span class="cstat-no" title="statement not covered" > lineToChangeSet(element, parent, changes);</span>
1159
- });
1160
- }
1161
- }
1162
- &nbsp;
1163
- // Puts ! comments on new lines because they get removed
1164
- // This is sketchy at best
1165
- /**
1166
- * @param native
1167
- */
1168
- function <span class="fstat-no" title="function not covered" >bangOn(</span>native) {
1169
- let indent = <span class="cstat-no" title="statement not covered" >0;</span>
1170
- const newLines = <span class="cstat-no" title="statement not covered" >[];</span>
1171
- const lines = <span class="cstat-no" title="statement not covered" >native.split('\n');</span>
1172
- <span class="cstat-no" title="statement not covered" > lines.forEach(<span class="fstat-no" title="function not covered" >(l</span>ine) =&gt; {</span>
1173
- const spacecount = <span class="cstat-no" title="statement not covered" >line.search(/\S|$/);</span>
1174
- <span class="cstat-no" title="statement not covered" > if (spacecount &lt; indent) {</span>
1175
- let bString = <span class="cstat-no" title="statement not covered" >'';</span>
1176
- <span class="cstat-no" title="statement not covered" > for (let index = <span class="cstat-no" title="statement not covered" >0;</span> index &lt; spacecount; index += 1) {</span>
1177
- <span class="cstat-no" title="statement not covered" > bString += ' ';</span>
1178
- }
1179
- <span class="cstat-no" title="statement not covered" > bString += '!';</span>
1180
- <span class="cstat-no" title="statement not covered" > newLines.push(bString);</span>
1181
- }
1182
- <span class="cstat-no" title="statement not covered" > newLines.push(line);</span>
1183
- <span class="cstat-no" title="statement not covered" > indent = spacecount;</span>
1184
- });
1185
- <span class="cstat-no" title="statement not covered" > return newLines.join('\n');</span>
1186
- }
1187
- &nbsp;
1188
- // Finds misplaced end and moves it to the end
1189
- // This is mostly important for cisco-ios
1190
- /**
1191
- * @param native
1192
- */
1193
- function <span class="fstat-no" title="function not covered" >findEnd(</span>native) {
1194
- const lines = <span class="cstat-no" title="statement not covered" >native.split('\n');</span>
1195
- const index = <span class="cstat-no" title="statement not covered" >lines.indexOf('end');</span>
1196
- <span class="cstat-no" title="statement not covered" > if (index &gt; -1) {</span>
1197
- <span class="cstat-no" title="statement not covered" > lines.splice(index, 1);</span>
1198
- <span class="cstat-no" title="statement not covered" > lines.push('end');</span>
1199
- }
1200
- <span class="cstat-no" title="statement not covered" > return lines.join('\n');</span>
1201
- }
1202
- &nbsp;
1203
- /**
1204
- * @param native
1205
- * @param line
1206
- */
1207
- function <span class="fstat-no" title="function not covered" >removeLine(</span>native, line) {
1208
- const lines = <span class="cstat-no" title="statement not covered" >native.split('\n');</span>
1209
- const index = <span class="cstat-no" title="statement not covered" >lines.indexOf(line);</span>
1210
- <span class="cstat-no" title="statement not covered" > if (index &gt; -1) {</span>
1211
- <span class="cstat-no" title="statement not covered" > lines.splice(index, 1);</span>
1212
- }
1213
- <span class="cstat-no" title="statement not covered" > return lines.join('\n');</span>
1214
- }
1215
- &nbsp;
1216
- /**
1217
- * @param native
1218
- */
1219
- function <span class="fstat-no" title="function not covered" >negation(</span>native) {
1220
- const regex = <span class="cstat-no" title="statement not covered" >/no .*/g;</span>
1221
- const lines = <span class="cstat-no" title="statement not covered" >native.split('\n');</span>
1222
- const negatives = <span class="cstat-no" title="statement not covered" >lines.filter(<span class="fstat-no" title="function not covered" >(l</span>ine) =&gt; <span class="cstat-no" title="statement not covered" >line.match(regex))</span>;</span>
1223
- &nbsp;
1224
- let updated = <span class="cstat-no" title="statement not covered" >native;</span>
1225
- <span class="cstat-no" title="statement not covered" > negatives.forEach(<span class="fstat-no" title="function not covered" >(n</span>) =&gt; {</span>
1226
- const pieces = <span class="cstat-no" title="statement not covered" >n.split('no ');</span>
1227
- let ltr = <span class="cstat-no" title="statement not covered" >pieces[1];</span>
1228
- <span class="cstat-no" title="statement not covered" > if (pieces[0].length &gt; 0) {</span>
1229
- <span class="cstat-no" title="statement not covered" > ltr = pieces[0].split('no ') + ltr;</span>
1230
- }
1231
- <span class="cstat-no" title="statement not covered" > updated = removeLine(updated, ltr);</span>
1232
- <span class="cstat-no" title="statement not covered" > updated = removeLine(updated, n);</span>
1233
- });
1234
- <span class="cstat-no" title="statement not covered" > return updated;</span>
1235
- }
1236
- &nbsp;
1237
- /**
1238
- * @param data
1239
- */
1240
- function <span class="fstat-no" title="function not covered" >decompressData(</span>data) {
1241
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1242
- const buffer = <span class="cstat-no" title="statement not covered" >Buffer.from(data, 'base64');</span>
1243
- <span class="cstat-no" title="statement not covered" > unzip(buffer, <span class="fstat-no" title="function not covered" >(e</span>rror, bufferString) =&gt; {</span>
1244
- <span class="cstat-no" title="statement not covered" > if (error) <span class="cstat-no" title="statement not covered" >reject(error);</span></span>
1245
- <span class="cstat-no" title="statement not covered" > resolve(bufferString.toString());</span>
1246
- });
1247
- });
1248
- }
1249
- &nbsp;
1250
- /**
1251
- * @param device
1252
- */
1253
- function <span class="fstat-no" title="function not covered" >validateSchema(</span>device) {
1254
- const validate = <span class="cstat-no" title="statement not covered" >ajv.compile(mockDeviceSchema);</span>
1255
- const valid = <span class="cstat-no" title="statement not covered" >validate(device);</span>
1256
- <span class="cstat-no" title="statement not covered" > return valid;</span>
1257
- }
1258
- &nbsp;
1259
- class MockDevice {
1260
- constructor(prongid, properties) {
1261
- log.debug(`Mock device properties ${JSON.stringify(properties)}`);
1262
- console.log(`config path: ${configMgrPath}`);
1263
- this.props = properties;
1264
- this.id = prongid;
1265
- }
1266
- &nbsp;
1267
- <span class="fstat-no" title="function not covered" > co</span>nnect() {
1268
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
1269
- <span class="cstat-no" title="statement not covered" > this.emit('ONLINE', { id: this.id });</span>
1270
- const msg = <span class="cstat-no" title="statement not covered" >{</span>
1271
- id: this.id,
1272
- server: 'foo',
1273
- type: 'MockDevice',
1274
- time: Date.now().toString()
1275
- };
1276
- <span class="cstat-no" title="statement not covered" > eventSystem.publish('adapterOnline', msg);</span>
1277
- }, 1000);
1278
- }
1279
- &nbsp;
1280
- <span class="fstat-no" title="function not covered" > he</span>althCheck(callback) {
1281
- const status = <span class="cstat-no" title="statement not covered" >{</span>
1282
- id: this.id,
1283
- status: 'success'
1284
- };
1285
- <span class="cstat-no" title="statement not covered" > callback(status);</span>
1286
- }
1287
- &nbsp;
1288
- hasEntities(entityType, deviceList, callback) {
1289
- (async () =&gt; {
1290
- <span class="missing-if-branch" title="else path not taken" >E</span>if (entityType !== 'Device') {
1291
- return callback(
1292
- null,
1293
- `${this.id} does not support entity ${entityType}`
1294
- );
1295
- }
1296
- // TODO: $in deviceList
1297
- const devices = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.find({ deleted: false }).toArray();</span>
1298
- const findings = <span class="cstat-no" title="statement not covered" >deviceList.reduce(<span class="fstat-no" title="function not covered" >(m</span>ap, device) =&gt; {</span>
1299
- <span class="cstat-no" title="statement not covered" > map[device] = false;</span>
1300
- <span class="cstat-no" title="statement not covered" > devices.forEach(<span class="fstat-no" title="function not covered" >(f</span>oundDevice) =&gt; {</span>
1301
- <span class="cstat-no" title="statement not covered" > if (foundDevice.name === device) {</span>
1302
- <span class="cstat-no" title="statement not covered" > map[device] = true;</span>
1303
- }
1304
- });
1305
- <span class="cstat-no" title="statement not covered" > return map;</span>
1306
- }, {});
1307
- <span class="cstat-no" title="statement not covered" > return callback(findings);</span>
1308
- })();
1309
- }
1310
- &nbsp;
1311
- <span class="fstat-no" title="function not covered" > ge</span>tDevice(deviceId, callback) {
1312
- <span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
1313
- const device = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.findOne({</span>
1314
- deleted: false,
1315
- name: deviceId
1316
- });
1317
- <span class="cstat-no" title="statement not covered" > if (!device) {</span>
1318
- <span class="cstat-no" title="statement not covered" > return callback(null, 'Device not found');</span>
1319
- }
1320
- const copy = <span class="cstat-no" title="statement not covered" >JSON.parse(JSON.stringify(device));</span>
1321
- <span class="cstat-no" title="statement not covered" > delete copy.states;</span>
1322
- <span class="cstat-no" title="statement not covered" > delete copy.actions;</span>
1323
- <span class="cstat-no" title="statement not covered" > delete copy._id;</span>
1324
- <span class="cstat-no" title="statement not covered" > delete copy.deleted;</span>
1325
- <span class="cstat-no" title="statement not covered" > delete copy.online;</span>
1326
- <span class="cstat-no" title="statement not covered" > return callback(copy);</span>
1327
- })();
1328
- }
1329
- &nbsp;
1330
- <span class="fstat-no" title="function not covered" > ge</span>tDevicesFiltered(searchOptions, callback) {
1331
- <span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
1332
- const result = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.find({</span>
1333
- deleted: false,
1334
- name: { $regex: `.*${searchOptions.filter.name}.*` }
1335
- }).toArray();
1336
- const result2 = <span class="cstat-no" title="statement not covered" >[];</span>
1337
- // eslint-disable-next-line guard-for-in
1338
- <span class="cstat-no" title="statement not covered" > for (const r in result) {</span>
1339
- const validateDevice = <span class="cstat-no" title="statement not covered" >result[r];</span>
1340
- <span class="cstat-no" title="statement not covered" > if (validateSchema(validateDevice)) {</span>
1341
- <span class="cstat-no" title="statement not covered" > delete result[r]._id;</span>
1342
- <span class="cstat-no" title="statement not covered" > delete result[r].deleted;</span>
1343
- <span class="cstat-no" title="statement not covered" > delete result[r].online;</span>
1344
- <span class="cstat-no" title="statement not covered" > result2.push(result[r]);</span>
1345
- }
1346
- }
1347
- // eslint-disable-next-line prefer-object-spread
1348
- <span class="cstat-no" title="statement not covered" > Object.assign({}, result2);</span>
1349
- <span class="cstat-no" title="statement not covered" > return callback({</span>
1350
- total: result2.length,
1351
- list: result2
1352
- });
1353
- })();
1354
- }
1355
- &nbsp;
1356
- <span class="fstat-no" title="function not covered" > ad</span>dDevice(device, callback) {
1357
- <span class="cstat-no" title="statement not covered" > return callback({</span>
1358
- code: 0,
1359
- value: reply
1360
- });
1361
- }
1362
- &nbsp;
1363
- <span class="fstat-no" title="function not covered" > de</span>leteDevice(deviceId, callback) {
1364
- <span class="cstat-no" title="statement not covered" > return callback({</span>
1365
- code: 0,
1366
- value: reply
1367
- });
1368
- }
1369
- &nbsp;
1370
- <span class="fstat-no" title="function not covered" > is</span>Alive(deviceId, callback) {
1371
- <span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
1372
- const device = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.findOne({</span>
1373
- deleted: false,
1374
- name: deviceId
1375
- });
1376
- <span class="cstat-no" title="statement not covered" > if (!device) {</span>
1377
- <span class="cstat-no" title="statement not covered" > return callback(null, 'Device not found');</span>
1378
- }
1379
- const newDev = <span class="cstat-no" title="statement not covered" >{};</span>
1380
- <span class="cstat-no" title="statement not covered" > newDev.response = device.online;</span>
1381
- <span class="cstat-no" title="statement not covered" > return callback(device.online);</span>
1382
- })();
1383
- }
1384
- &nbsp;
1385
- <span class="fstat-no" title="function not covered" > ge</span>tConfig(deviceId, format, callback) {
1386
- <span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
1387
- const result = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.findOne({</span>
1388
- deleted: false,
1389
- name: deviceId
1390
- });
1391
- <span class="cstat-no" title="statement not covered" > if (result) {</span>
1392
- <span class="cstat-no" title="statement not covered" > if (</span>
1393
- result.config !== undefined
1394
- &amp;&amp; Object.hasOwnProperty.call(result.config, 'type')
1395
- &amp;&amp; result.config.type === 'Buffer'
1396
- ) {
1397
- const decompressConfig = <span class="cstat-no" title="statement not covered" >await decompressData(result.config);</span>
1398
- &nbsp;
1399
- <span class="cstat-no" title="statement not covered" > return callback({</span>
1400
- code: 200,
1401
- config: decompressConfig,
1402
- value: '?'
1403
- });
1404
- }
1405
- <span class="cstat-no" title="statement not covered" > return callback({</span>
1406
- code: 200,
1407
- device: deviceId,
1408
- config: result.config
1409
- });
1410
- }
1411
- <span class="cstat-no" title="statement not covered" > return callback({</span>
1412
- code: 404,
1413
- config: '?',
1414
- value: '?'
1415
- });
1416
- })();
1417
- }
1418
- &nbsp;
1419
- <span class="fstat-no" title="function not covered" > se</span>tConfig(deviceId, transactions, callback) {
1420
- <span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
1421
- <span class="cstat-no" title="statement not covered" > console.log(</span>
1422
- `Incoming Changeset:\n ${util.inspect(transactions, {
1423
- showHidden: false,
1424
- depth: null,
1425
- colors: true
1426
- })}`
1427
- );
1428
- <span class="cstat-no" title="statement not covered" > console.log(`Remediating config for: ${deviceId}`);</span>
1429
- const device = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.findOne({</span>
1430
- deleted: false,
1431
- name: deviceId
1432
- });
1433
- <span class="cstat-no" title="statement not covered" > console.log(`Getting parser for OS: ${device.ostype}`);</span>
1434
- const deviceParser = <span class="cstat-no" title="statement not covered" >await getDeviceParser(device.ostype);</span>
1435
- <span class="cstat-no" title="statement not covered" > if (!deviceParser) {</span>
1436
- const e = <span class="cstat-no" title="statement not covered" >`Unable to find a parser for ${deviceId} with type ${device.ostype}`;</span>
1437
- <span class="cstat-no" title="statement not covered" > return callback(null, new Error(e));</span>
1438
- }
1439
- const driver = <span class="cstat-no" title="statement not covered" >getDriver(device.ostype, deviceParser);</span>
1440
- <span class="cstat-no" title="statement not covered" > if (!driver) {</span>
1441
- const e = <span class="cstat-no" title="statement not covered" >`Unable to find a driver for type: ${device.ostype}`;</span>
1442
- <span class="cstat-no" title="statement not covered" > return callback(null, new Error(e));</span>
1443
- }
1444
- const parsedConfig = <span class="cstat-no" title="statement not covered" >driver.parse(device.config);</span>
1445
- const changes = <span class="cstat-no" title="statement not covered" >[];</span>
1446
- <span class="cstat-no" title="statement not covered" > parsedConfig.lines.forEach(<span class="fstat-no" title="function not covered" >(e</span>lement) =&gt; {</span>
1447
- <span class="cstat-no" title="statement not covered" > lineToChangeSet(element, [], changes);</span>
1448
- });
1449
- &nbsp;
1450
- <span class="cstat-no" title="statement not covered" > translateChangesToNativeConfig(</span>
1451
- changes.concat(transactions),
1452
- deviceParser,
1453
- <span class="fstat-no" title="function not covered" > as</span>ync (native) =&gt; {
1454
- <span class="cstat-no" title="statement not covered" > console.log(</span>
1455
- `Remediation changeset successfully integrated into: ${deviceId}`
1456
- );
1457
- const newConfig = <span class="cstat-no" title="statement not covered" >negation(bangOn(findEnd(native)));</span>
1458
- <span class="cstat-no" title="statement not covered" > device.config = newConfig;</span>
1459
- const r = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.updateOne(</span>
1460
- { name: deviceId },
1461
- { $set: device }
1462
- );
1463
- <span class="cstat-no" title="statement not covered" > console.log(`Configuration saved for: ${deviceId}`);</span>
1464
- <span class="cstat-no" title="statement not covered" > return callback({</span>
1465
- status: 200,
1466
- results: {
1467
- attemptedConfig: 'TODO'
1468
- }
1469
- });
1470
- }
1471
- );
1472
- })();
1473
- }
1474
- &nbsp;
1475
- <span class="fstat-no" title="function not covered" > re</span>storeConfig(deviceId, config, callback) {
1476
- <span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
1477
- const result = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.findOne({</span>
1478
- deleted: false,
1479
- name: deviceId
1480
- });
1481
- <span class="cstat-no" title="statement not covered" > if (!result) {</span>
1482
- <span class="cstat-no" title="statement not covered" > return callback(</span>
1483
- null,
1484
- `Cannot call restoreConfig on ${deviceId} not found`
1485
- );
1486
- }
1487
- <span class="cstat-no" title="statement not covered" > result.config = config;</span>
1488
- const r = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.updateOne(</span>
1489
- { name: deviceId },
1490
- { $set: { config } }
1491
- );
1492
- <span class="cstat-no" title="statement not covered" > return callback('success');</span>
1493
- })();
1494
- }
1495
- &nbsp;
1496
- <span class="fstat-no" title="function not covered" > ge</span>tDeviceGroups(callback) {
1497
- const groups = <span class="cstat-no" title="statement not covered" >[];</span>
1498
- <span class="cstat-no" title="statement not covered" > groups.push({ name: 'mock', devices: [] });</span>
1499
- <span class="cstat-no" title="statement not covered" > return callback(groups);</span>
1500
- }
1501
- &nbsp;
1502
- /**
1503
- * @param {Array} devices Array of unique id strings
1504
- * @param {string} command The command to run against the devices
1505
- * @param {object} options (optional) Possible specific options
1506
- * @param {Function} callback The callback function
1507
- */
1508
- <span class="fstat-no" title="function not covered" > ru</span>nCommand(devices, command, options = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> callback) {
1509
- <span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
1510
- const cmd = <span class="cstat-no" title="statement not covered" >command.split(' ')[0];</span>
1511
- const results = <span class="cstat-no" title="statement not covered" >[];</span>
1512
- <span class="cstat-no" title="statement not covered" > for (const deviceId of devices) {</span>
1513
- const device = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.findOne({</span>
1514
- deleted: false,
1515
- name: deviceId
1516
- });
1517
- <span class="cstat-no" title="statement not covered" > if (device) {</span>
1518
- let result = <span class="cstat-no" title="statement not covered" >'ok';</span>
1519
- <span class="cstat-no" title="statement not covered" > if (Object.hasOwnProperty.call(device.actions, cmd)) {</span>
1520
- const r = <span class="cstat-no" title="statement not covered" >await this.doAction(device.actions[cmd], device);</span>
1521
- <span class="cstat-no" title="statement not covered" > results.push({ device: device.name, result: r, status: 'success' });</span>
1522
- } else {
1523
- <span class="cstat-no" title="statement not covered" > if (</span>
1524
- Object.hasOwnProperty.call(device.states, 'type')
1525
- &amp;&amp; device.states.type === 'Buffer'
1526
- ) {
1527
- const decompressedState = <span class="cstat-no" title="statement not covered" >await decompressData(device.states);</span>
1528
- <span class="cstat-no" title="statement not covered" > device.states = JSON.parse(decompressedState);</span>
1529
- }
1530
- <span class="cstat-no" title="statement not covered" > if (Object.hasOwnProperty.call(device.states[device.current_state], command)) {</span>
1531
- <span class="cstat-no" title="statement not covered" > result = device.states[device.current_state][command];</span>
1532
- <span class="cstat-no" title="statement not covered" > results.push({</span>
1533
- device: device.name,
1534
- result,
1535
- status: 'success'
1536
- });
1537
- } else {
1538
- <span class="cstat-no" title="statement not covered" > results.push({</span>
1539
- device: device.name,
1540
- result,
1541
- status: 'error'
1542
- });
1543
- }
1544
- }
1545
- } else {
1546
- <span class="cstat-no" title="statement not covered" > console.error(`${device.name} not found?`);</span>
1547
- <span class="cstat-no" title="statement not covered" > results.push({</span>
1548
- device: device.name,
1549
- result: 'no such device',
1550
- status: 'error'
1551
- });
1552
- }
1553
- }
1554
- <span class="cstat-no" title="statement not covered" > return callback(results);</span>
1555
- })();
1556
- }
1557
- &nbsp;
1558
- <span class="fstat-no" title="function not covered" > as</span>ync doAction(cmd, device) {
1559
- <span class="cstat-no" title="statement not covered" > switch (cmd.action) {</span>
1560
- case 'next_state':
1561
- const max_state = <span class="cstat-no" title="statement not covered" >device.states.length - 1;</span>
1562
- <span class="cstat-no" title="statement not covered" > if (device.current_state &lt; max_state) {</span>
1563
- <span class="cstat-no" title="statement not covered" > device.current_state += 1;</span>
1564
- } else {
1565
- <span class="cstat-no" title="statement not covered" > device.current_state = 0;</span>
1566
- }
1567
- <span class="cstat-no" title="statement not covered" > break;</span>
1568
- case 'reset_state':
1569
- <span class="cstat-no" title="statement not covered" > device.current_state = 0;</span>
1570
- <span class="cstat-no" title="statement not covered" > break;</span>
1571
- case 'turn_on':
1572
- <span class="cstat-no" title="statement not covered" > device.online = true;</span>
1573
- <span class="cstat-no" title="statement not covered" > break;</span>
1574
- case 'turn_off':
1575
- <span class="cstat-no" title="statement not covered" > device.online = false;</span>
1576
- <span class="cstat-no" title="statement not covered" > break;</span>
1577
- case 'overwrite_config':
1578
- <span class="cstat-no" title="statement not covered" > device.config = device.states[device.current_state][cmd.value];</span>
1579
- <span class="cstat-no" title="statement not covered" > break;</span>
1580
- default:
1581
- <span class="cstat-no" title="statement not covered" > console.error(`unsupported action ${action}`);</span>
1582
- }
1583
- const r = <span class="cstat-no" title="statement not covered" >await MOCK_DEVICES.updateOne(</span>
1584
- { name: device.name },
1585
- { $set: device }
1586
- );
1587
- <span class="cstat-no" title="statement not covered" > return 'Device state has been updated!';</span>
1588
- }
1589
- }
1590
- &nbsp;
1591
- util.inherits(MockDevice, EventEmitterCl);
1592
- module.exports = MockDevice;
1593
- &nbsp;</pre></td></tr></table></pre>
1594
-
1595
- <div class='push'></div><!-- for sticky footer -->
1596
- </div><!-- /wrapper -->
1597
- <div class='footer quiet pad2 space-top1 center small'>
1598
- Code coverage generated by
1599
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1600
- at 2025-12-04T17:48:05.864Z
1601
- </div>
1602
- <script src="../prettify.js"></script>
1603
- <script>
1604
- window.onload = function () {
1605
- prettyPrint();
1606
- };
1607
- </script>
1608
- <script src="../sorter.js"></script>
1609
- <script src="../block-navigation.js"></script>
1610
- </body>
1611
- </html>
1612
-