@grnsft/if 0.7.1 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/CONTRIBUTING.md +19 -6
  2. package/ENABLEMENT.md +115 -0
  3. package/README.md +0 -6
  4. package/SECURITY.md +100 -0
  5. package/adopters.md +9 -0
  6. package/build/common/config/strings.d.ts +2 -0
  7. package/build/common/config/strings.js +5 -3
  8. package/build/common/util/logger.js +3 -3
  9. package/build/common/util/yaml.js +19 -7
  10. package/build/if-check/util/npm.js +55 -9
  11. package/build/if-run/builtins/divide/index.js +2 -4
  12. package/build/if-run/builtins/exponent/index.js +3 -5
  13. package/build/if-run/builtins/interpolation/index.js +18 -10
  14. package/build/if-run/builtins/shell/index.js +2 -2
  15. package/build/if-run/lib/compute.js +8 -10
  16. package/build/if-run/lib/explain.js +69 -44
  17. package/build/if-run/lib/initialize.js +2 -2
  18. package/build/if-run/lib/regroup.d.ts +1 -1
  19. package/build/if-run/lib/regroup.js +41 -49
  20. package/build/if-run/types/explain.d.ts +3 -7
  21. package/build/if-run/types/explain.js +1 -1
  22. package/build/if-run/util/aggregation-helper.js +3 -3
  23. package/manifests/examples/builtins/interpolation/success-with-off.yml +24 -0
  24. package/manifests/outputs/bugs/package.json +24 -0
  25. package/manifests/outputs/builtins/coefficient/package.json +24 -0
  26. package/manifests/outputs/builtins/csv-lookup/cloud-metadata/package.json +24 -0
  27. package/manifests/outputs/builtins/csv-lookup/region-metadata/package.json +24 -0
  28. package/manifests/outputs/builtins/csv-lookup/tdp-finder/package.json +24 -0
  29. package/manifests/outputs/builtins/divide/package.json +24 -0
  30. package/manifests/outputs/builtins/exponent/package.json +24 -0
  31. package/manifests/outputs/builtins/interpolation/package.json +24 -0
  32. package/manifests/outputs/builtins/mock-observations/package.json +24 -0
  33. package/manifests/outputs/builtins/multiply/package.json +24 -0
  34. package/manifests/outputs/builtins/regex/package.json +24 -0
  35. package/manifests/outputs/builtins/sci/package.json +24 -0
  36. package/manifests/outputs/builtins/sci-embodied/package.json +24 -0
  37. package/manifests/outputs/builtins/shell/package.json +24 -0
  38. package/manifests/outputs/builtins/subtract/package.json +24 -0
  39. package/manifests/outputs/builtins/sum/package.json +24 -0
  40. package/manifests/outputs/builtins/time-converter/package.json +24 -0
  41. package/manifests/outputs/builtins/time-sync/package.json +24 -0
  42. package/manifests/outputs/features/package.json +24 -0
  43. package/manifests/outputs/features/regroup/package.json +24 -0
  44. package/manifests/outputs/pipelines/package.json +24 -0
  45. package/okrs.md +14 -0
  46. package/package.json +2 -2
  47. package/src/if-run/builtins/interpolation/README.md +1 -1
  48. package/.env +0 -5
  49. package/coverage/clover.xml +0 -2045
  50. package/coverage/coverage-final.json +0 -55
  51. package/coverage/lcov-report/base.css +0 -224
  52. package/coverage/lcov-report/block-navigation.js +0 -87
  53. package/coverage/lcov-report/builtins/coefficient/index.html +0 -116
  54. package/coverage/lcov-report/builtins/coefficient/index.ts.html +0 -298
  55. package/coverage/lcov-report/builtins/csv-lookup/index.html +0 -116
  56. package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +0 -826
  57. package/coverage/lcov-report/builtins/divide/index.html +0 -116
  58. package/coverage/lcov-report/builtins/divide/index.ts.html +0 -358
  59. package/coverage/lcov-report/builtins/exponent/index.html +0 -116
  60. package/coverage/lcov-report/builtins/exponent/index.ts.html +0 -361
  61. package/coverage/lcov-report/builtins/export-csv-raw.ts.html +0 -553
  62. package/coverage/lcov-report/builtins/export-csv.ts.html +0 -436
  63. package/coverage/lcov-report/builtins/export-log.ts.html +0 -148
  64. package/coverage/lcov-report/builtins/export-yaml.ts.html +0 -193
  65. package/coverage/lcov-report/builtins/group-by.ts.html +0 -370
  66. package/coverage/lcov-report/builtins/index.html +0 -206
  67. package/coverage/lcov-report/builtins/index.ts.html +0 -130
  68. package/coverage/lcov-report/builtins/interpolation/index.html +0 -116
  69. package/coverage/lcov-report/builtins/interpolation/index.ts.html +0 -676
  70. package/coverage/lcov-report/builtins/interpolation/types.ts.html +0 -100
  71. package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +0 -184
  72. package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +0 -131
  73. package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -289
  74. package/coverage/lcov-report/builtins/mock-observations/index.html +0 -116
  75. package/coverage/lcov-report/builtins/mock-observations/index.ts.html +0 -619
  76. package/coverage/lcov-report/builtins/multiply/index.html +0 -116
  77. package/coverage/lcov-report/builtins/multiply/index.ts.html +0 -343
  78. package/coverage/lcov-report/builtins/regex/index.html +0 -116
  79. package/coverage/lcov-report/builtins/regex/index.ts.html +0 -373
  80. package/coverage/lcov-report/builtins/sci/config.ts.html +0 -205
  81. package/coverage/lcov-report/builtins/sci/index.html +0 -116
  82. package/coverage/lcov-report/builtins/sci/index.ts.html +0 -325
  83. package/coverage/lcov-report/builtins/sci-embodied/index.html +0 -116
  84. package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +0 -478
  85. package/coverage/lcov-report/builtins/shell/index.html +0 -116
  86. package/coverage/lcov-report/builtins/shell/index.ts.html +0 -280
  87. package/coverage/lcov-report/builtins/subtract/index.html +0 -116
  88. package/coverage/lcov-report/builtins/subtract/index.ts.html +0 -379
  89. package/coverage/lcov-report/builtins/sum/index.html +0 -116
  90. package/coverage/lcov-report/builtins/sum/index.ts.html +0 -334
  91. package/coverage/lcov-report/builtins/time-sync.ts.html +0 -1462
  92. package/coverage/lcov-report/common/config/index.html +0 -131
  93. package/coverage/lcov-report/common/config/index.ts.html +0 -88
  94. package/coverage/lcov-report/common/config/strings.ts.html +0 -121
  95. package/coverage/lcov-report/common/lib/index.html +0 -116
  96. package/coverage/lcov-report/common/lib/load.ts.html +0 -139
  97. package/coverage/lcov-report/common/util/debug-logger.ts.html +0 -511
  98. package/coverage/lcov-report/common/util/fs.ts.html +0 -289
  99. package/coverage/lcov-report/common/util/helpers.ts.html +0 -280
  100. package/coverage/lcov-report/common/util/index.html +0 -191
  101. package/coverage/lcov-report/common/util/logger.ts.html +0 -151
  102. package/coverage/lcov-report/common/util/validations.ts.html +0 -613
  103. package/coverage/lcov-report/common/util/yaml.ts.html +0 -193
  104. package/coverage/lcov-report/config/config.ts.html +0 -463
  105. package/coverage/lcov-report/config/index.html +0 -161
  106. package/coverage/lcov-report/config/index.ts.html +0 -94
  107. package/coverage/lcov-report/config/params.ts.html +0 -697
  108. package/coverage/lcov-report/config/strings.ts.html +0 -490
  109. package/coverage/lcov-report/favicon.png +0 -0
  110. package/coverage/lcov-report/if-check/config/config.ts.html +0 -184
  111. package/coverage/lcov-report/if-check/config/index.html +0 -146
  112. package/coverage/lcov-report/if-check/config/index.ts.html +0 -91
  113. package/coverage/lcov-report/if-check/config/strings.ts.html +0 -142
  114. package/coverage/lcov-report/if-check/util/args.ts.html +0 -304
  115. package/coverage/lcov-report/if-check/util/helpers.ts.html +0 -136
  116. package/coverage/lcov-report/if-check/util/index.html +0 -146
  117. package/coverage/lcov-report/if-check/util/npm.ts.html +0 -232
  118. package/coverage/lcov-report/if-csv/util/helpers.ts.html +0 -346
  119. package/coverage/lcov-report/if-csv/util/index.html +0 -116
  120. package/coverage/lcov-report/if-diff/config/config.ts.html +0 -184
  121. package/coverage/lcov-report/if-diff/config/index.html +0 -146
  122. package/coverage/lcov-report/if-diff/config/index.ts.html +0 -91
  123. package/coverage/lcov-report/if-diff/config/strings.ts.html +0 -100
  124. package/coverage/lcov-report/if-diff/lib/compare.ts.html +0 -286
  125. package/coverage/lcov-report/if-diff/lib/index.html +0 -131
  126. package/coverage/lcov-report/if-diff/lib/load.ts.html +0 -199
  127. package/coverage/lcov-report/if-diff/util/args.ts.html +0 -268
  128. package/coverage/lcov-report/if-diff/util/helpers.ts.html +0 -337
  129. package/coverage/lcov-report/if-diff/util/index.html +0 -131
  130. package/coverage/lcov-report/if-env/config/config.ts.html +0 -211
  131. package/coverage/lcov-report/if-env/config/index.html +0 -146
  132. package/coverage/lcov-report/if-env/config/index.ts.html +0 -91
  133. package/coverage/lcov-report/if-env/config/strings.ts.html +0 -109
  134. package/coverage/lcov-report/if-env/util/args.ts.html +0 -250
  135. package/coverage/lcov-report/if-env/util/index.html +0 -131
  136. package/coverage/lcov-report/if-env/util/npm.ts.html +0 -526
  137. package/coverage/lcov-report/if-merge/util/args.ts.html +0 -295
  138. package/coverage/lcov-report/if-merge/util/helpers.ts.html +0 -301
  139. package/coverage/lcov-report/if-merge/util/index.html +0 -131
  140. package/coverage/lcov-report/if-run/builtins/coefficient/index.html +0 -116
  141. package/coverage/lcov-report/if-run/builtins/coefficient/index.ts.html +0 -382
  142. package/coverage/lcov-report/if-run/builtins/copy-param/index.html +0 -116
  143. package/coverage/lcov-report/if-run/builtins/copy-param/index.ts.html +0 -415
  144. package/coverage/lcov-report/if-run/builtins/csv-lookup/index.html +0 -116
  145. package/coverage/lcov-report/if-run/builtins/csv-lookup/index.ts.html +0 -868
  146. package/coverage/lcov-report/if-run/builtins/divide/index.html +0 -116
  147. package/coverage/lcov-report/if-run/builtins/divide/index.ts.html +0 -469
  148. package/coverage/lcov-report/if-run/builtins/exponent/index.html +0 -116
  149. package/coverage/lcov-report/if-run/builtins/exponent/index.ts.html +0 -394
  150. package/coverage/lcov-report/if-run/builtins/export-csv-raw.ts.html +0 -553
  151. package/coverage/lcov-report/if-run/builtins/export-csv.ts.html +0 -436
  152. package/coverage/lcov-report/if-run/builtins/export-log.ts.html +0 -148
  153. package/coverage/lcov-report/if-run/builtins/export-yaml.ts.html +0 -193
  154. package/coverage/lcov-report/if-run/builtins/group-by.ts.html +0 -370
  155. package/coverage/lcov-report/if-run/builtins/index.html +0 -146
  156. package/coverage/lcov-report/if-run/builtins/index.ts.html +0 -133
  157. package/coverage/lcov-report/if-run/builtins/interpolation/index.html +0 -116
  158. package/coverage/lcov-report/if-run/builtins/interpolation/index.ts.html +0 -709
  159. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/common-generator.ts.html +0 -184
  160. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/index.html +0 -131
  161. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -289
  162. package/coverage/lcov-report/if-run/builtins/mock-observations/index.html +0 -116
  163. package/coverage/lcov-report/if-run/builtins/mock-observations/index.ts.html +0 -709
  164. package/coverage/lcov-report/if-run/builtins/multiply/index.html +0 -116
  165. package/coverage/lcov-report/if-run/builtins/multiply/index.ts.html +0 -406
  166. package/coverage/lcov-report/if-run/builtins/regex/index.html +0 -116
  167. package/coverage/lcov-report/if-run/builtins/regex/index.ts.html +0 -433
  168. package/coverage/lcov-report/if-run/builtins/sci/index.html +0 -116
  169. package/coverage/lcov-report/if-run/builtins/sci/index.ts.html +0 -502
  170. package/coverage/lcov-report/if-run/builtins/sci-embodied/index.html +0 -116
  171. package/coverage/lcov-report/if-run/builtins/sci-embodied/index.ts.html +0 -577
  172. package/coverage/lcov-report/if-run/builtins/shell/index.html +0 -116
  173. package/coverage/lcov-report/if-run/builtins/shell/index.ts.html +0 -343
  174. package/coverage/lcov-report/if-run/builtins/subtract/index.html +0 -116
  175. package/coverage/lcov-report/if-run/builtins/subtract/index.ts.html +0 -418
  176. package/coverage/lcov-report/if-run/builtins/sum/index.html +0 -116
  177. package/coverage/lcov-report/if-run/builtins/sum/index.ts.html +0 -400
  178. package/coverage/lcov-report/if-run/builtins/time-converter/config.ts.html +0 -205
  179. package/coverage/lcov-report/if-run/builtins/time-converter/index.html +0 -131
  180. package/coverage/lcov-report/if-run/builtins/time-converter/index.ts.html +0 -412
  181. package/coverage/lcov-report/if-run/builtins/time-sync/index.html +0 -116
  182. package/coverage/lcov-report/if-run/builtins/time-sync/index.ts.html +0 -1651
  183. package/coverage/lcov-report/if-run/builtins/time-sync.ts.html +0 -1462
  184. package/coverage/lcov-report/if-run/config/config.ts.html +0 -271
  185. package/coverage/lcov-report/if-run/config/index.html +0 -161
  186. package/coverage/lcov-report/if-run/config/index.ts.html +0 -94
  187. package/coverage/lcov-report/if-run/config/params.ts.html +0 -679
  188. package/coverage/lcov-report/if-run/config/strings.ts.html +0 -460
  189. package/coverage/lcov-report/if-run/lib/aggregate.ts.html +0 -580
  190. package/coverage/lcov-report/if-run/lib/compute.ts.html +0 -709
  191. package/coverage/lcov-report/if-run/lib/environment.ts.html +0 -373
  192. package/coverage/lcov-report/if-run/lib/exhaust.ts.html +0 -193
  193. package/coverage/lcov-report/if-run/lib/explain.ts.html +0 -217
  194. package/coverage/lcov-report/if-run/lib/index.html +0 -206
  195. package/coverage/lcov-report/if-run/lib/initialize.ts.html +0 -475
  196. package/coverage/lcov-report/if-run/lib/parameterize.ts.html +0 -322
  197. package/coverage/lcov-report/if-run/lib/regroup.ts.html +0 -325
  198. package/coverage/lcov-report/if-run/lib/time-sync.ts.html +0 -1510
  199. package/coverage/lcov-report/if-run/types/aggregation.ts.html +0 -94
  200. package/coverage/lcov-report/if-run/types/index.html +0 -146
  201. package/coverage/lcov-report/if-run/types/interface.ts.html +0 -112
  202. package/coverage/lcov-report/if-run/types/parameters.ts.html +0 -106
  203. package/coverage/lcov-report/if-run/util/aggregation-helper.ts.html +0 -280
  204. package/coverage/lcov-report/if-run/util/args.ts.html +0 -313
  205. package/coverage/lcov-report/if-run/util/helpers.ts.html +0 -304
  206. package/coverage/lcov-report/if-run/util/index.html +0 -191
  207. package/coverage/lcov-report/if-run/util/json.ts.html +0 -115
  208. package/coverage/lcov-report/if-run/util/log-memoize.ts.html +0 -145
  209. package/coverage/lcov-report/if-run/util/os-checker.ts.html +0 -421
  210. package/coverage/lcov-report/if-run/util/plugin-storage.ts.html +0 -202
  211. package/coverage/lcov-report/index.html +0 -521
  212. package/coverage/lcov-report/lib/aggregate.ts.html +0 -358
  213. package/coverage/lcov-report/lib/compare.ts.html +0 -286
  214. package/coverage/lcov-report/lib/compute.ts.html +0 -436
  215. package/coverage/lcov-report/lib/environment.ts.html +0 -376
  216. package/coverage/lcov-report/lib/exhaust.ts.html +0 -289
  217. package/coverage/lcov-report/lib/index.html +0 -221
  218. package/coverage/lcov-report/lib/initialize.ts.html +0 -430
  219. package/coverage/lcov-report/lib/load.ts.html +0 -268
  220. package/coverage/lcov-report/lib/parameterize.ts.html +0 -316
  221. package/coverage/lcov-report/prettify.css +0 -1
  222. package/coverage/lcov-report/prettify.js +0 -2
  223. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  224. package/coverage/lcov-report/sorter.js +0 -196
  225. package/coverage/lcov-report/types/aggregation.ts.html +0 -94
  226. package/coverage/lcov-report/types/index.html +0 -146
  227. package/coverage/lcov-report/types/interface.ts.html +0 -112
  228. package/coverage/lcov-report/types/parameters.ts.html +0 -106
  229. package/coverage/lcov-report/util/aggregation-helper.ts.html +0 -289
  230. package/coverage/lcov-report/util/args.ts.html +0 -649
  231. package/coverage/lcov-report/util/debug-logger.ts.html +0 -481
  232. package/coverage/lcov-report/util/errors.ts.html +0 -232
  233. package/coverage/lcov-report/util/fs.ts.html +0 -124
  234. package/coverage/lcov-report/util/helpers.ts.html +0 -895
  235. package/coverage/lcov-report/util/index.html +0 -296
  236. package/coverage/lcov-report/util/json.ts.html +0 -115
  237. package/coverage/lcov-report/util/log-memoize.ts.html +0 -145
  238. package/coverage/lcov-report/util/logger.ts.html +0 -151
  239. package/coverage/lcov-report/util/npm.ts.html +0 -499
  240. package/coverage/lcov-report/util/os-checker.ts.html +0 -421
  241. package/coverage/lcov-report/util/plugin-storage.ts.html +0 -202
  242. package/coverage/lcov-report/util/validations.ts.html +0 -544
  243. package/coverage/lcov-report/util/yaml.ts.html +0 -193
  244. package/coverage/lcov.info +0 -3392
  245. package/manifests/outputs/features/regroup/test.yml +0 -92
@@ -1,1510 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for if-run/lib/time-sync.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">if-run/lib</a> time-sync.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'>155/155</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'>42/42</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'>25/25</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'>153/153</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 oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-yes">2x</span>
544
- <span class="cline-any cline-yes">2x</span>
545
- <span class="cline-any cline-yes">2x</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-yes">2x</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">2x</span>
557
- <span class="cline-any cline-yes">2x</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-yes">2x</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">2x</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">2x</span>
594
- <span class="cline-any cline-yes">24x</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">24x</span>
602
- <span class="cline-any cline-yes">21x</span>
603
- <span class="cline-any cline-yes">15x</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&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-yes">15x</span>
611
- <span class="cline-any cline-yes">14x</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">12x</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-yes">12x</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-yes">54x</span>
618
- <span class="cline-any cline-yes">52x</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-yes">52x</span>
622
- <span class="cline-any cline-yes">41x</span>
623
- <span class="cline-any cline-yes">41x</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-yes">41x</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-yes">2x</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-yes">39x</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-yes">39x</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-yes">39x</span>
644
- <span class="cline-any cline-yes">3x</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-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&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-yes">50x</span>
655
- <span class="cline-any cline-yes">209x</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-yes">209x</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-yes">50x</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-yes">8x</span>
666
- <span class="cline-any cline-yes">100x</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-yes">8x</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-yes">24x</span>
678
- <span class="cline-any cline-yes">2806x</span>
679
- <span class="cline-any cline-yes">16x</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-yes">2790x</span>
683
- <span class="cline-any cline-yes">3x</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-yes">2787x</span>
687
- <span class="cline-any cline-yes">2786x</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-yes">1x</span>
691
- <span class="cline-any cline-neutral">&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-yes">24x</span>
697
- <span class="cline-any cline-yes">54x</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&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-yes">54x</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-yes">24x</span>
716
- <span class="cline-any cline-yes">21x</span>
717
- <span class="cline-any cline-yes">1x</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-yes">20x</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-yes">20x</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-yes">20x</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-yes">24x</span>
738
- <span class="cline-any cline-yes">182x</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-yes">24x</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-yes">209x</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-yes">209x</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-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-yes">24x</span>
756
- <span class="cline-any cline-yes">209x</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-yes">209x</span>
759
- <span class="cline-any cline-yes">635x</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-yes">635x</span>
762
- <span class="cline-any cline-yes">209x</span>
763
- <span class="cline-any cline-yes">209x</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-yes">209x</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-yes">426x</span>
770
- <span class="cline-any cline-yes">209x</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-yes">209x</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-yes">217x</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-yes">217x</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-yes">24x</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-yes">142x</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-yes">142x</span>
794
- <span class="cline-any cline-yes">430x</span>
795
- <span class="cline-any cline-yes">142x</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-yes">142x</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-yes">288x</span>
802
- <span class="cline-any cline-yes">142x</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-yes">142x</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-yes">146x</span>
808
- <span class="cline-any cline-yes">4x</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-yes">4x</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-yes">142x</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-yes">142x</span>
816
- <span class="cline-any cline-yes">127x</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-yes">127x</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-yes">15x</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-yes">15x</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-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-yes">24x</span>
831
- <span class="cline-any cline-yes">14x</span>
832
- <span class="cline-any cline-yes">14x</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-yes">14x</span>
835
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-yes">24x</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-yes">15x</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-yes">14x</span>
851
- <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-yes">14x</span>
853
- <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-yes">14x</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-neutral">&nbsp;</span>
863
- <span class="cline-any cline-neutral">&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-yes">24x</span>
868
- <span class="cline-any cline-yes">108x</span>
869
- <span class="cline-any cline-yes">108x</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-yes">108x</span>
872
- <span class="cline-any cline-yes">334x</span>
873
- <span class="cline-any cline-yes">334x</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-yes">334x</span>
876
- <span class="cline-any cline-yes">108x</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-yes">108x</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-yes">226x</span>
882
- <span class="cline-any cline-yes">186x</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-yes">186x</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-yes">40x</span>
888
- <span class="cline-any cline-yes">30x</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-yes">30x</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-neutral">&nbsp;</span>
897
- <span class="cline-any cline-yes">10x</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-yes">2x</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-yes">2x</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-yes">8x</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-yes">108x</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-yes">24x</span>
916
- <span class="cline-any cline-yes">8x</span>
917
- <span class="cline-any cline-yes">108x</span>
918
- <span class="cline-any cline-yes">108x</span>
919
- <span class="cline-any cline-yes">108x</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-yes">108x</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-yes">108x</span>
925
- <span class="cline-any cline-yes">36x</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-neutral">&nbsp;</span>
928
- <span class="cline-any cline-yes">108x</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-neutral">&nbsp;</span>
934
- <span class="cline-any cline-yes">24x</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-yes">12x</span>
940
- <span class="cline-any cline-yes">12x</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-yes">12x</span>
943
- <span class="cline-any cline-yes">1x</span>
944
- <span class="cline-any cline-neutral">&nbsp;</span>
945
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
949
- <span class="cline-any cline-neutral">&nbsp;</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-yes">12x</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-yes">12x</span>
955
- <span class="cline-any cline-yes">8x</span>
956
- <span class="cline-any cline-yes">8x</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-yes">8x</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-neutral">&nbsp;</span>
968
- <span class="cline-any cline-yes">12x</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-yes">24x</span>
972
- <span class="cline-any cline-neutral">&nbsp;</span>
973
- <span class="cline-any cline-neutral">&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-yes">12x</span>
977
- <span class="cline-any cline-yes">12x</span>
978
- <span class="cline-any cline-neutral">&nbsp;</span>
979
- <span class="cline-any cline-yes">12x</span>
980
- <span class="cline-any cline-yes">142x</span>
981
- <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-neutral">&nbsp;</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-neutral">&nbsp;</span>
985
- <span class="cline-any cline-neutral">&nbsp;</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-yes">12x</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-yes">24x</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-yes">50x</span>
1002
- <span class="cline-any cline-yes">1135x</span>
1003
- <span class="cline-any cline-neutral">&nbsp;</span>
1004
- <span class="cline-any cline-yes">1135x</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-yes">1058x</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-yes">1135x</span>
1012
- <span class="cline-any cline-neutral">&nbsp;</span>
1013
- <span class="cline-any cline-neutral">&nbsp;</span>
1014
- <span class="cline-any cline-yes">24x</span>
1015
- <span class="cline-any cline-neutral">&nbsp;</span>
1016
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {isDate} from 'node:util/types';
1017
- &nbsp;
1018
- import {Settings, DateTime, DateTimeMaybeValid, Interval} from 'luxon';
1019
- import {z} from 'zod';
1020
- import {ERRORS} from '@grnsft/if-core/utils';
1021
- import {
1022
- ExecutePlugin,
1023
- PluginParams,
1024
- PaddingReceipt,
1025
- TimeNormalizerConfig,
1026
- TimeParams,
1027
- } from '@grnsft/if-core/types';
1028
- &nbsp;
1029
- import {validate} from '../../common/util/validations';
1030
- &nbsp;
1031
- import {STRINGS} from '../config';
1032
- import {getAggregationMethod} from '../lib/aggregate';
1033
- &nbsp;
1034
- Settings.defaultZone = 'utc';
1035
- &nbsp;
1036
- const {
1037
- GlobalConfigError,
1038
- InvalidDateInInputError,
1039
- InvalidPaddingError,
1040
- InvalidInputError,
1041
- } = ERRORS;
1042
- &nbsp;
1043
- const {
1044
- INVALID_TIME_NORMALIZATION,
1045
- INVALID_OBSERVATION_OVERLAP,
1046
- AVOIDING_PADDING_BY_EDGES,
1047
- INVALID_DATE_TYPE,
1048
- START_LOWER_END,
1049
- TIMESTAMP_REQUIRED,
1050
- INVALID_DATETIME,
1051
- } = STRINGS;
1052
- &nbsp;
1053
- /**
1054
- * Time synchronization plugin converted into framework integrated tool.
1055
- * It can't be requested in `initialize.plugins` section anymore. Instead describe configuration in context.
1056
- * @example
1057
- * ```yaml
1058
- * name: time-sync
1059
- * description: sample in time sync lib
1060
- * tags: sample, time, sync
1061
- * time-sync:
1062
- * start-time: '2023-12-12T00:00:00.000Z'
1063
- * end-time: '2023-12-12T00:01:00.000Z'
1064
- * interval: 5
1065
- * allow-padding: true
1066
- * ```
1067
- */
1068
- export const TimeSync = (globalConfig: TimeNormalizerConfig): ExecutePlugin =&gt; {
1069
- const metadata = {
1070
- kind: 'execute',
1071
- };
1072
- &nbsp;
1073
- /**
1074
- * Take input array and return time-synchronized input array.
1075
- */
1076
- const execute = (inputs: PluginParams[]): PluginParams[] =&gt; {
1077
- const validatedConfig = validateGlobalConfig();
1078
- const timeParams = {
1079
- startTime: DateTime.fromISO(validatedConfig['start-time']),
1080
- endTime: DateTime.fromISO(validatedConfig['end-time']),
1081
- interval: validatedConfig.interval,
1082
- allowPadding: validatedConfig['allow-padding'],
1083
- };
1084
- &nbsp;
1085
- const pad = checkForPadding(inputs, timeParams);
1086
- validatePadding(pad, timeParams);
1087
- &nbsp;
1088
- const paddedInputs = padInputs(inputs, pad, timeParams);
1089
- &nbsp;
1090
- const flattenInputs = paddedInputs.reduce(
1091
- (acc: PluginParams[], input, index) =&gt; {
1092
- const safeInput = Object.assign({}, input, validateInput(input, index));
1093
- const currentMoment = parseDate(safeInput.timestamp);
1094
- &nbsp;
1095
- /** Checks if not the first input, then check consistency with previous ones. */
1096
- if (index &gt; 0) {
1097
- const previousInput = paddedInputs[index - 1];
1098
- const previousInputTimestamp = parseDate(previousInput.timestamp);
1099
- &nbsp;
1100
- /** Checks for timestamps overlap. */
1101
- if (
1102
- parseDate(previousInput.timestamp).plus({
1103
- seconds: previousInput.duration,
1104
- }) &gt; currentMoment
1105
- ) {
1106
- throw new InvalidInputError(INVALID_OBSERVATION_OVERLAP);
1107
- }
1108
- &nbsp;
1109
- const compareableTime = previousInputTimestamp.plus({
1110
- seconds: previousInput.duration,
1111
- });
1112
- &nbsp;
1113
- const timelineGapSize = currentMoment
1114
- .diff(compareableTime)
1115
- .as('seconds');
1116
- &nbsp;
1117
- /** Checks if there is gap in timeline. */
1118
- if (timelineGapSize &gt; 1) {
1119
- acc.push(
1120
- ...getZeroishInputPerSecondBetweenRange(
1121
- compareableTime,
1122
- currentMoment,
1123
- safeInput
1124
- )
1125
- );
1126
- }
1127
- }
1128
- /** Break down current observation. */
1129
- for (let i = 0; i &lt; safeInput.duration; i++) {
1130
- const normalizedInput = breakDownInput(safeInput, i);
1131
- &nbsp;
1132
- acc.push(normalizedInput);
1133
- }
1134
- &nbsp;
1135
- return trimInputsByGlobalTimeline(acc, timeParams);
1136
- },
1137
- [] as PluginParams[]
1138
- );
1139
- &nbsp;
1140
- const sortedInputs = flattenInputs.sort((a, b) =&gt;
1141
- parseDate(a.timestamp).diff(parseDate(b.timestamp)).as('seconds')
1142
- );
1143
- &nbsp;
1144
- return resampleInputs(sortedInputs, timeParams) as PluginParams[];
1145
- };
1146
- &nbsp;
1147
- /**
1148
- * Dates are passed to `time-sync` both in ISO 8601 format
1149
- * and as a Date object (from the deserialization of a YAML file).
1150
- * If the YAML parser fails to identify as a date, it passes as a string.
1151
- */
1152
- const parseDate = (date: Date | string) =&gt; {
1153
- if (!date) {
1154
- return DateTime.invalid('Invalid date');
1155
- }
1156
- &nbsp;
1157
- if (isDate(date)) {
1158
- return DateTime.fromJSDate(date);
1159
- }
1160
- &nbsp;
1161
- if (typeof date === 'string') {
1162
- return DateTime.fromISO(date);
1163
- }
1164
- &nbsp;
1165
- throw new InvalidDateInInputError(INVALID_DATE_TYPE(date));
1166
- };
1167
- &nbsp;
1168
- /**
1169
- * Validates input parameters.
1170
- */
1171
- const validateInput = (input: PluginParams, index: number) =&gt; {
1172
- const schema = z.object({
1173
- timestamp: z
1174
- .string({
1175
- required_error: TIMESTAMP_REQUIRED(index),
1176
- })
1177
- .datetime({
1178
- message: INVALID_DATETIME(index),
1179
- })
1180
- .or(z.date()),
1181
- duration: z.number(),
1182
- });
1183
- &nbsp;
1184
- return validate&lt;z.infer&lt;typeof schema&gt;&gt;(schema, input);
1185
- };
1186
- &nbsp;
1187
- /**
1188
- * Validates global config parameters.
1189
- */
1190
- const validateGlobalConfig = () =&gt; {
1191
- if (globalConfig === undefined) {
1192
- throw new GlobalConfigError(INVALID_TIME_NORMALIZATION);
1193
- }
1194
- &nbsp;
1195
- const schema = z
1196
- .object({
1197
- 'start-time': z.string().datetime(),
1198
- 'end-time': z.string().datetime(),
1199
- interval: z.number(),
1200
- 'allow-padding': z.boolean(),
1201
- })
1202
- .refine(data =&gt; data['start-time'] &lt; data['end-time'], {
1203
- message: START_LOWER_END,
1204
- });
1205
- &nbsp;
1206
- return validate&lt;z.infer&lt;typeof schema&gt;&gt;(schema, globalConfig);
1207
- };
1208
- &nbsp;
1209
- /**
1210
- * Calculates minimal factor.
1211
- */
1212
- const convertPerInterval = (value: number, duration: number) =&gt;
1213
- value / duration;
1214
- &nbsp;
1215
- /**
1216
- * Normalize time per given second.
1217
- */
1218
- const normalizeTimePerSecond = (
1219
- currentRoundMoment: Date | string,
1220
- i: number
1221
- ) =&gt; {
1222
- const thisMoment = parseDate(currentRoundMoment).startOf('second');
1223
- &nbsp;
1224
- return thisMoment.plus({seconds: i});
1225
- };
1226
- &nbsp;
1227
- /**
1228
- * Breaks down input per minimal time unit.
1229
- */
1230
- const breakDownInput = (input: PluginParams, i: number) =&gt; {
1231
- const inputKeys = Object.keys(input);
1232
- &nbsp;
1233
- return inputKeys.reduce((acc, key) =&gt; {
1234
- const method = getAggregationMethod(key);
1235
- &nbsp;
1236
- if (key === 'timestamp') {
1237
- const perSecond = normalizeTimePerSecond(input.timestamp, i);
1238
- acc[key] = perSecond.toUTC().toISO() ?? '';
1239
- &nbsp;
1240
- return acc;
1241
- }
1242
- &nbsp;
1243
- /** @todo use user defined resolution later */
1244
- if (key === 'duration') {
1245
- acc[key] = 1;
1246
- &nbsp;
1247
- return acc;
1248
- }
1249
- &nbsp;
1250
- acc[key] =
1251
- method === 'sum'
1252
- ? convertPerInterval(input[key], input['duration'])
1253
- : input[key];
1254
- &nbsp;
1255
- return acc;
1256
- }, {} as PluginParams);
1257
- };
1258
- &nbsp;
1259
- /**
1260
- * Populates object to fill the gaps in observational timeline using zeroish values.
1261
- */
1262
- const fillWithZeroishInput = (
1263
- input: PluginParams,
1264
- missingTimestamp: DateTimeMaybeValid
1265
- ) =&gt; {
1266
- const metrics = Object.keys(input);
1267
- &nbsp;
1268
- return metrics.reduce((acc, metric) =&gt; {
1269
- if (metric === 'timestamp') {
1270
- acc[metric] = missingTimestamp.startOf('second').toUTC().toISO() ?? '';
1271
- &nbsp;
1272
- return acc;
1273
- }
1274
- &nbsp;
1275
- /** @todo later will be changed to user defined interval */
1276
- if (metric === 'duration') {
1277
- acc[metric] = 1;
1278
- &nbsp;
1279
- return acc;
1280
- }
1281
- &nbsp;
1282
- if (metric === 'time-reserved') {
1283
- acc[metric] = acc['duration'];
1284
- &nbsp;
1285
- return acc;
1286
- }
1287
- &nbsp;
1288
- const method = getAggregationMethod(metric);
1289
- &nbsp;
1290
- if (method === 'avg' || method === 'sum') {
1291
- acc[metric] = 0;
1292
- &nbsp;
1293
- return acc;
1294
- }
1295
- &nbsp;
1296
- acc[metric] = input[metric];
1297
- &nbsp;
1298
- return acc;
1299
- }, {} as PluginParams);
1300
- };
1301
- &nbsp;
1302
- /**
1303
- * Checks if `error on padding` is enabled and padding is needed. If so, then throws error.
1304
- */
1305
- const validatePadding = (pad: PaddingReceipt, params: TimeParams): void =&gt; {
1306
- const {start, end} = pad;
1307
- const isPaddingNeeded = start || end;
1308
- &nbsp;
1309
- if (!params.allowPadding &amp;&amp; isPaddingNeeded) {
1310
- throw new InvalidPaddingError(AVOIDING_PADDING_BY_EDGES(start, end));
1311
- }
1312
- };
1313
- &nbsp;
1314
- /**
1315
- * Checks if padding is needed either at start of the timeline or the end and returns status.
1316
- */
1317
- const checkForPadding = (
1318
- inputs: PluginParams[],
1319
- params: TimeParams
1320
- ): PaddingReceipt =&gt; {
1321
- const startDiffInSeconds = parseDate(inputs[0].timestamp)
1322
- .diff(params.startTime)
1323
- .as('seconds');
1324
- &nbsp;
1325
- const lastInput = inputs[inputs.length - 1];
1326
- &nbsp;
1327
- const endDiffInSeconds = parseDate(lastInput.timestamp)
1328
- .plus({second: lastInput.duration})
1329
- .diff(params.endTime)
1330
- .as('seconds');
1331
- &nbsp;
1332
- return {
1333
- start: startDiffInSeconds &gt; 0,
1334
- end: endDiffInSeconds &lt; 0,
1335
- };
1336
- };
1337
- &nbsp;
1338
- /**
1339
- * Iterates over given inputs frame, meanwhile checking if aggregation method is `sum`, then calculates it.
1340
- * For methods is `avg` and `none` calculating average of the frame.
1341
- */
1342
- const resampleInputFrame = (inputsInTimeslot: PluginParams[]) =&gt;
1343
- inputsInTimeslot.reduce((acc, input, index, inputs) =&gt; {
1344
- const metrics = Object.keys(input);
1345
- &nbsp;
1346
- metrics.forEach(metric =&gt; {
1347
- const method = getAggregationMethod(metric);
1348
- acc[metric] = acc[metric] ?? 0;
1349
- &nbsp;
1350
- if (metric === 'timestamp') {
1351
- acc[metric] = inputs[0][metric];
1352
- &nbsp;
1353
- return;
1354
- }
1355
- &nbsp;
1356
- if (method === 'sum') {
1357
- acc[metric] += input[metric];
1358
- &nbsp;
1359
- return;
1360
- }
1361
- &nbsp;
1362
- if (method === 'none') {
1363
- acc[metric] = input[metric];
1364
- &nbsp;
1365
- return;
1366
- }
1367
- &nbsp;
1368
- /**
1369
- * If timeslot contains records more than one, then divide each metric by the timeslot length,
1370
- * so that their sum yields the timeslot average.
1371
- */
1372
- if (
1373
- inputsInTimeslot.length &gt; 1 &amp;&amp;
1374
- index === inputsInTimeslot.length - 1
1375
- ) {
1376
- acc[metric] /= inputsInTimeslot.length;
1377
- &nbsp;
1378
- return;
1379
- }
1380
- &nbsp;
1381
- acc[metric] += input[metric];
1382
- });
1383
- &nbsp;
1384
- return acc;
1385
- }, {} as PluginParams);
1386
- &nbsp;
1387
- /**
1388
- * Takes each array frame with interval length, then aggregating them together as from units.yaml file.
1389
- */
1390
- const resampleInputs = (inputs: PluginParams[], params: TimeParams) =&gt;
1391
- inputs.reduce((acc: PluginParams[], _input, index, inputs) =&gt; {
1392
- const frameStart = index * params.interval;
1393
- const frameEnd = (index + 1) * params.interval;
1394
- const inputsFrame = inputs.slice(frameStart, frameEnd);
1395
- &nbsp;
1396
- const resampledInput = resampleInputFrame(inputsFrame);
1397
- &nbsp;
1398
- /** Checks if resampled input is not empty, then includes in result. */
1399
- if (Object.keys(resampledInput).length &gt; 0) {
1400
- acc.push(resampledInput);
1401
- }
1402
- &nbsp;
1403
- return acc;
1404
- }, [] as PluginParams[]);
1405
- &nbsp;
1406
- /**
1407
- * Pads zeroish inputs from the beginning or at the end of the inputs if needed.
1408
- */
1409
- const padInputs = (
1410
- inputs: PluginParams[],
1411
- pad: PaddingReceipt,
1412
- params: TimeParams
1413
- ): PluginParams[] =&gt; {
1414
- const {start, end} = pad;
1415
- const paddedFromBeginning = [];
1416
- &nbsp;
1417
- if (start) {
1418
- paddedFromBeginning.push(
1419
- ...getZeroishInputPerSecondBetweenRange(
1420
- params.startTime,
1421
- parseDate(inputs[0].timestamp),
1422
- inputs[0]
1423
- )
1424
- );
1425
- }
1426
- &nbsp;
1427
- const paddedArray = paddedFromBeginning.concat(inputs);
1428
- &nbsp;
1429
- if (end) {
1430
- const lastInput = inputs[inputs.length - 1];
1431
- const lastInputEnd = parseDate(lastInput.timestamp).plus({
1432
- seconds: lastInput.duration,
1433
- });
1434
- paddedArray.push(
1435
- ...getZeroishInputPerSecondBetweenRange(
1436
- lastInputEnd,
1437
- params.endTime.plus({seconds: 1}),
1438
- lastInput
1439
- )
1440
- );
1441
- }
1442
- &nbsp;
1443
- return paddedArray;
1444
- };
1445
- &nbsp;
1446
- const getZeroishInputPerSecondBetweenRange = (
1447
- startDate: DateTimeMaybeValid,
1448
- endDate: DateTimeMaybeValid,
1449
- templateInput: PluginParams
1450
- ) =&gt; {
1451
- const array: PluginParams[] = [];
1452
- const dateRange = Interval.fromDateTimes(startDate, endDate);
1453
- &nbsp;
1454
- for (const interval of dateRange.splitBy({second: 1})) {
1455
- array.push(
1456
- fillWithZeroishInput(
1457
- templateInput,
1458
- // as far as I can tell, start will never be null
1459
- // because if we pass an invalid start/endDate to
1460
- // Interval, we get a zero length array as the range
1461
- interval.start || DateTime.invalid('not expected - start is null')
1462
- )
1463
- );
1464
- }
1465
- &nbsp;
1466
- return array;
1467
- };
1468
- &nbsp;
1469
- /*
1470
- * Checks if input's timestamp is included in global specified period then leaves it, otherwise.
1471
- */
1472
- const trimInputsByGlobalTimeline = (
1473
- inputs: PluginParams[],
1474
- params: TimeParams
1475
- ): PluginParams[] =&gt;
1476
- inputs.reduce((acc: PluginParams[], item) =&gt; {
1477
- const {timestamp} = item;
1478
- &nbsp;
1479
- if (
1480
- parseDate(timestamp) &gt;= params.startTime &amp;&amp;
1481
- parseDate(timestamp) &lt;= params.endTime
1482
- ) {
1483
- acc.push(item);
1484
- }
1485
- &nbsp;
1486
- return acc;
1487
- }, [] as PluginParams[]);
1488
- &nbsp;
1489
- return {metadata, execute};
1490
- };
1491
- &nbsp;</pre></td></tr></table></pre>
1492
-
1493
- <div class='push'></div><!-- for sticky footer -->
1494
- </div><!-- /wrapper -->
1495
- <div class='footer quiet pad2 space-top1 center small'>
1496
- Code coverage generated by
1497
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1498
- at 2024-07-24T18:53:51.959Z
1499
- </div>
1500
- <script src="../../prettify.js"></script>
1501
- <script>
1502
- window.onload = function () {
1503
- prettyPrint();
1504
- };
1505
- </script>
1506
- <script src="../../sorter.js"></script>
1507
- <script src="../../block-navigation.js"></script>
1508
- </body>
1509
- </html>
1510
-