@lcap/nasl 3.5.0-alpha.1 → 3.5.0-beta.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.
Files changed (571) hide show
  1. package/out/bak/translator.js +119 -39
  2. package/out/bak/translator.js.map +1 -1
  3. package/out/breakpoint/generator/BreakpointNode.d.ts +3 -0
  4. package/out/breakpoint/generator/BreakpointNode.js +9 -0
  5. package/out/breakpoint/generator/BreakpointNode.js.map +1 -1
  6. package/out/breakpoint/generator/CallbackNode.js +15 -0
  7. package/out/breakpoint/generator/CallbackNode.js.map +1 -1
  8. package/out/breakpoint/shared/constants.js +1 -0
  9. package/out/breakpoint/shared/constants.js.map +1 -1
  10. package/out/breakpoint/shared/utils.js +12 -6
  11. package/out/breakpoint/shared/utils.js.map +1 -1
  12. package/out/common/BaseNode.d.ts +1 -0
  13. package/out/common/BaseNode.js +23 -34
  14. package/out/common/BaseNode.js.map +1 -1
  15. package/out/concepts/App__.d.ts +51 -51
  16. package/out/concepts/App__.js +87 -92
  17. package/out/concepts/App__.js.map +1 -1
  18. package/out/concepts/BackendVariable__.js +10 -2
  19. package/out/concepts/BackendVariable__.js.map +1 -1
  20. package/out/concepts/BinaryExpression__.d.ts +2 -0
  21. package/out/concepts/BinaryExpression__.js +4 -0
  22. package/out/concepts/BinaryExpression__.js.map +1 -1
  23. package/out/concepts/BindAttribute__.js +16 -6
  24. package/out/concepts/BindAttribute__.js.map +1 -1
  25. package/out/concepts/BindDirective__.d.ts +1 -0
  26. package/out/concepts/BindDirective__.js +19 -4
  27. package/out/concepts/BindDirective__.js.map +1 -1
  28. package/out/concepts/BindEvent__.d.ts +3 -1
  29. package/out/concepts/BindEvent__.js +38 -13
  30. package/out/concepts/BindEvent__.js.map +1 -1
  31. package/out/concepts/BusinessComponent__.d.ts +637 -0
  32. package/out/concepts/BusinessComponent__.js +1892 -0
  33. package/out/concepts/BusinessComponent__.js.map +1 -0
  34. package/out/concepts/BusinessLogic__.d.ts +38 -0
  35. package/out/concepts/BusinessLogic__.js +358 -0
  36. package/out/concepts/BusinessLogic__.js.map +1 -0
  37. package/out/concepts/CallEvent__.d.ts +97 -0
  38. package/out/concepts/CallEvent__.js +263 -0
  39. package/out/concepts/CallEvent__.js.map +1 -0
  40. package/out/concepts/CallFunction__.d.ts +2 -0
  41. package/out/concepts/CallFunction__.js +14 -2
  42. package/out/concepts/CallFunction__.js.map +1 -1
  43. package/out/concepts/CallInterface__.d.ts +2 -0
  44. package/out/concepts/CallInterface__.js +5 -1
  45. package/out/concepts/CallInterface__.js.map +1 -1
  46. package/out/concepts/CallLogic__.d.ts +5 -2
  47. package/out/concepts/CallLogic__.js +43 -50
  48. package/out/concepts/CallLogic__.js.map +1 -1
  49. package/out/concepts/Constant__.js +7 -6
  50. package/out/concepts/Constant__.js.map +1 -1
  51. package/out/concepts/Destination__.js +2 -2
  52. package/out/concepts/Destination__.js.map +1 -1
  53. package/out/concepts/End__.js +2 -1
  54. package/out/concepts/End__.js.map +1 -1
  55. package/out/concepts/Event__.d.ts +10 -0
  56. package/out/concepts/Event__.js +49 -0
  57. package/out/concepts/Event__.js.map +1 -1
  58. package/out/concepts/FrontendType__.d.ts +308 -0
  59. package/out/concepts/FrontendType__.js +605 -0
  60. package/out/concepts/FrontendType__.js.map +1 -0
  61. package/out/concepts/Frontend__.d.ts +0 -88
  62. package/out/concepts/Frontend__.js +1 -143
  63. package/out/concepts/Frontend__.js.map +1 -1
  64. package/out/concepts/Identifier__.d.ts +5 -0
  65. package/out/concepts/Identifier__.js +19 -9
  66. package/out/concepts/Identifier__.js.map +1 -1
  67. package/out/concepts/LogicItem__.d.ts +1 -1
  68. package/out/concepts/LogicItem__.js.map +1 -1
  69. package/out/concepts/Logic__.d.ts +3 -1
  70. package/out/concepts/Logic__.js +16 -13
  71. package/out/concepts/Logic__.js.map +1 -1
  72. package/out/concepts/MemberExpression__.d.ts +1 -1
  73. package/out/concepts/MemberExpression__.js +3 -3
  74. package/out/concepts/MemberExpression__.js.map +1 -1
  75. package/out/concepts/NewComposite__.d.ts +2 -0
  76. package/out/concepts/NewComposite__.js +4 -0
  77. package/out/concepts/NewComposite__.js.map +1 -1
  78. package/out/concepts/NewList__.d.ts +2 -0
  79. package/out/concepts/NewList__.js +4 -0
  80. package/out/concepts/NewList__.js.map +1 -1
  81. package/out/concepts/NewMap__.d.ts +2 -0
  82. package/out/concepts/NewMap__.js +4 -0
  83. package/out/concepts/NewMap__.js.map +1 -1
  84. package/out/concepts/ParamWithGroup__.d.ts +39 -0
  85. package/out/concepts/ParamWithGroup__.js +85 -0
  86. package/out/concepts/ParamWithGroup__.js.map +1 -0
  87. package/out/concepts/Param__.js +11 -3
  88. package/out/concepts/Param__.js.map +1 -1
  89. package/out/concepts/Return__.js +17 -9
  90. package/out/concepts/Return__.js.map +1 -1
  91. package/out/concepts/TypeAnnotation__.js.map +1 -1
  92. package/out/concepts/Variable__.js +17 -8
  93. package/out/concepts/Variable__.js.map +1 -1
  94. package/out/concepts/ViewElement__.d.ts +17 -1
  95. package/out/concepts/ViewElement__.js +141 -15
  96. package/out/concepts/ViewElement__.js.map +1 -1
  97. package/out/concepts/View__.js +4 -4
  98. package/out/concepts/View__.js.map +1 -1
  99. package/out/concepts/index__.d.ts +5 -0
  100. package/out/concepts/index__.js +5 -0
  101. package/out/concepts/index__.js.map +1 -1
  102. package/out/concepts/utils/asserts.d.ts +258 -3
  103. package/out/concepts/utils/asserts.js +351 -13
  104. package/out/concepts/utils/asserts.js.map +1 -1
  105. package/out/concepts/utils/quick-info.d.ts +13 -0
  106. package/out/concepts/utils/quick-info.js +51 -0
  107. package/out/concepts/utils/quick-info.js.map +1 -0
  108. package/out/concepts/utils/types.d.ts +20 -3
  109. package/out/generator/genBundleFiles.js +25 -11
  110. package/out/generator/genBundleFiles.js.map +1 -1
  111. package/out/generator/genReleaseBody.js +12 -3
  112. package/out/generator/genReleaseBody.js.map +1 -1
  113. package/out/generator/permission.js +3 -3
  114. package/out/generator/permission.js.map +1 -1
  115. package/out/server/extendBaseNode.js +6 -4
  116. package/out/server/extendBaseNode.js.map +1 -1
  117. package/out/server/getLogics.js +62 -27
  118. package/out/server/getLogics.js.map +1 -1
  119. package/out/server/getMemberIdentifier.js +6 -1
  120. package/out/server/getMemberIdentifier.js.map +1 -1
  121. package/out/server/naslServer.js +26 -59
  122. package/out/server/naslServer.js.map +1 -1
  123. package/out/server/translator.js +6 -1
  124. package/out/server/translator.js.map +1 -1
  125. package/out/service/storage/init.js +1 -2
  126. package/out/service/storage/init.js.map +1 -1
  127. package/out/templator/genCreateBlock.js +6 -6
  128. package/out/templator/genCreateBlock.js.map +1 -1
  129. package/out/templator/genCurdEditMultipleKeyBlock.js +16 -16
  130. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  131. package/out/templator/genCurdMultipleKeyBlock.js +36 -36
  132. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  133. package/out/templator/genGetBlock.js +4 -4
  134. package/out/templator/genGetBlock.js.map +1 -1
  135. package/out/templator/genGridViewBlock.js +12 -12
  136. package/out/templator/genGridViewBlock.js.map +1 -1
  137. package/out/templator/genListViewBlock.js +4 -4
  138. package/out/templator/genListViewBlock.js.map +1 -1
  139. package/out/templator/genSelectBlock.js +3 -3
  140. package/out/templator/genSelectBlock.js.map +1 -1
  141. package/out/templator/genTableBlock.js +10 -10
  142. package/out/templator/genTableBlock.js.map +1 -1
  143. package/out/templator/genUpdateBlock.js +8 -8
  144. package/out/templator/genUpdateBlock.js.map +1 -1
  145. package/out/templator/utils.d.ts +2 -2
  146. package/out/templator/utils.js.map +1 -1
  147. package/out/translator/utils.d.ts +2 -2
  148. package/out/translator/utils.js +0 -18
  149. package/out/translator/utils.js.map +1 -1
  150. package/out/utils/i18nInfo.js +7 -2
  151. package/out/utils/i18nInfo.js.map +1 -1
  152. package/package.json +1 -1
  153. package/src/bak/translator.js +121 -43
  154. package/src/breakpoint/generator/BreakpointNode.ts +12 -0
  155. package/src/breakpoint/generator/CallbackNode.ts +17 -0
  156. package/src/breakpoint/shared/constants.ts +1 -0
  157. package/src/breakpoint/shared/utils.ts +13 -8
  158. package/src/common/BaseNode.ts +22 -34
  159. package/src/concepts/App__.ts +140 -146
  160. package/src/concepts/BackendVariable__.ts +10 -2
  161. package/src/concepts/BinaryExpression__.ts +5 -1
  162. package/src/concepts/BindAttribute__.ts +15 -6
  163. package/src/concepts/BindDirective__.ts +19 -4
  164. package/src/concepts/BindEvent__.ts +40 -12
  165. package/src/concepts/BusinessComponent__.ts +2659 -0
  166. package/src/concepts/BusinessLogic__.ts +376 -0
  167. package/src/concepts/CallEvent__.ts +334 -0
  168. package/src/concepts/CallFunction__.ts +15 -2
  169. package/src/concepts/CallInterface__.ts +6 -1
  170. package/src/concepts/CallLogic__.ts +50 -58
  171. package/src/concepts/Constant__.ts +5 -7
  172. package/src/concepts/Destination__.ts +2 -2
  173. package/src/concepts/End__.ts +1 -0
  174. package/src/concepts/Event__.ts +57 -0
  175. package/src/concepts/FrontendType__.ts +919 -0
  176. package/src/concepts/Frontend__.ts +3 -251
  177. package/src/concepts/Identifier__.ts +29 -13
  178. package/src/concepts/LogicItem__.ts +1 -0
  179. package/src/concepts/Logic__.ts +21 -14
  180. package/src/concepts/MemberExpression__.ts +3 -3
  181. package/src/concepts/NewComposite__.ts +5 -5
  182. package/src/concepts/NewList__.ts +6 -2
  183. package/src/concepts/NewMap__.ts +6 -3
  184. package/src/concepts/ParamWithGroup__.ts +101 -0
  185. package/src/concepts/Param__.ts +11 -3
  186. package/src/concepts/Return__.ts +15 -12
  187. package/src/concepts/TypeAnnotation__.ts +1 -1
  188. package/src/concepts/Variable__.ts +17 -9
  189. package/src/concepts/ViewElement__.ts +164 -31
  190. package/src/concepts/View__.ts +6 -4
  191. package/src/concepts/index__.ts +5 -0
  192. package/src/concepts/utils/asserts.ts +367 -4
  193. package/src/concepts/utils/quick-info.ts +64 -0
  194. package/src/concepts/utils/types.ts +28 -0
  195. package/src/generator/genBundleFiles.ts +33 -15
  196. package/src/generator/genReleaseBody.ts +14 -3
  197. package/src/generator/permission.ts +8 -6
  198. package/src/server/extendBaseNode.ts +22 -20
  199. package/src/server/getLogics.ts +79 -41
  200. package/src/server/getMemberIdentifier.ts +7 -1
  201. package/src/server/naslServer.ts +28 -57
  202. package/src/server/translator.ts +7 -1
  203. package/src/service/storage/init.ts +1 -2
  204. package/src/templator/genCreateBlock.ts +6 -6
  205. package/src/templator/genCurdEditMultipleKeyBlock.ts +16 -16
  206. package/src/templator/genCurdMultipleKeyBlock.ts +36 -36
  207. package/src/templator/genGetBlock.ts +4 -4
  208. package/src/templator/genGridViewBlock.ts +12 -12
  209. package/src/templator/genListViewBlock.ts +4 -4
  210. package/src/templator/genSelectBlock.ts +3 -3
  211. package/src/templator/genTableBlock.ts +10 -10
  212. package/src/templator/genUpdateBlock.ts +8 -8
  213. package/src/templator/utils.ts +2 -2
  214. package/src/translator/utils.ts +2 -22
  215. package/src/utils/i18nInfo.ts +7 -2
  216. package/test/concepts/binary-expression/__snapshots__/getQuickInfoOffset.spec.ts.snap +25 -0
  217. package/test/concepts/binary-expression/getQuickInfoOffset.spec.ts +19 -0
  218. package/test/concepts/call-function/__snapshots__/getQuickInfoOffset.spec.ts.snap +41 -0
  219. package/test/concepts/call-function/fixtures/from-string.json +68 -59
  220. package/test/concepts/call-function/fixtures/to-string-global-tz.json +67 -58
  221. package/test/concepts/call-function/fixtures/to-string-no-tz.json +57 -48
  222. package/test/concepts/call-function/fixtures/to-string-user-tz.json +69 -60
  223. package/test/concepts/call-function/fixtures/to-string-utc-tz.json +69 -60
  224. package/test/concepts/call-function/getQuickInfoOffset.spec.ts +19 -0
  225. package/test/concepts/call-interface/__snapshots__/getQuickInfoOffset.spec.ts.snap +86 -0
  226. package/test/concepts/call-interface/__snapshots__/toEmbeddedTS.spec.ts.snap +3 -3
  227. package/test/concepts/call-interface/fixtures/only-interface.json +81 -72
  228. package/test/concepts/call-interface/fixtures/with-body-complex-argument.json +223 -214
  229. package/test/concepts/call-interface/fixtures/with-body-no-argument.json +85 -76
  230. package/test/concepts/call-interface/fixtures/with-body-simple-argument.json +100 -91
  231. package/test/concepts/call-interface/fixtures/with-headers-no-argument.json +88 -79
  232. package/test/concepts/call-interface/fixtures/with-headers.json +90 -81
  233. package/test/concepts/call-interface/fixtures/with-query-no-argument.json +88 -79
  234. package/test/concepts/call-interface/fixtures/with-query.json +90 -81
  235. package/test/concepts/call-interface/getQuickInfoOffset.spec.ts +19 -0
  236. package/test/concepts/call-logic/__snapshots__/getQuickInfoOffset.spec.ts.snap +4 -2
  237. package/test/concepts/call-logic/fixtures/entries-get-with-arguments.json +104 -95
  238. package/test/concepts/call-logic/fixtures/entries-update-with-arguments.json +209 -200
  239. package/test/concepts/call-logic/fixtures/global-logic-argument-no-expression.json +97 -88
  240. package/test/concepts/call-logic/fixtures/global-logic-argument-some-expression.json +124 -115
  241. package/test/concepts/call-logic/fixtures/json-deserialize.json +120 -111
  242. package/test/concepts/call-logic/fixtures/json-serialize-with-string.json +124 -115
  243. package/test/concepts/call-logic/fixtures/json-serialize.json +124 -115
  244. package/test/concepts/call-logic/fixtures/view-buildin-logic-with-argument.json +91 -82
  245. package/test/concepts/call-logic/fixtures/view-component-logic-no-argument.json +88 -79
  246. package/test/concepts/call-logic/fixtures/view-component-with-validation.json +144 -135
  247. package/test/concepts/call-logic/getQuickInfoOffset.spec.ts +2 -7
  248. package/test/concepts/identifier/fixtures/view-variable.json +145 -136
  249. package/test/concepts/new-composite/__snapshots__/getQuickInfoOffset.spec.ts.snap +104 -0
  250. package/test/concepts/new-composite/__snapshots__/toEmbeddedTS.spec.ts.snap +97 -0
  251. package/test/concepts/new-composite/__snapshots__/toJS.spec.ts.snap +43 -0
  252. package/test/concepts/new-composite/constant.ts +5 -0
  253. package/test/concepts/new-composite/fixtures/nested-transform.json +241 -0
  254. package/test/concepts/new-composite/fixtures/nested.json +146 -0
  255. package/test/concepts/new-composite/fixtures/normal.json +63 -0
  256. package/test/concepts/new-composite/getQuickInfoOffset.spec.ts +19 -0
  257. package/test/concepts/new-composite/toEmbeddedTS.spec.ts +15 -0
  258. package/test/concepts/new-composite/toJS.spec.ts +14 -0
  259. package/test/concepts/new-list/__snapshots__/getQuickInfoOffset.spec.ts.snap +165 -0
  260. package/test/concepts/new-list/__snapshots__/toEmbeddedTS.spec.ts.snap +207 -0
  261. package/test/concepts/new-list/__snapshots__/toJS.spec.ts.snap +63 -0
  262. package/test/concepts/new-list/constant.ts +5 -0
  263. package/test/concepts/new-list/fixtures/nested-map.json +117 -0
  264. package/test/concepts/new-list/fixtures/nested-tranform.json +140 -0
  265. package/test/concepts/new-list/fixtures/nested.json +107 -0
  266. package/test/concepts/new-list/fixtures/normal.json +95 -0
  267. package/test/concepts/new-list/getQuickInfoOffset.spec.ts +19 -0
  268. package/test/concepts/new-list/toEmbeddedTS.spec.ts +15 -0
  269. package/test/concepts/new-list/toJS.spec.ts +14 -0
  270. package/test/concepts/new-map/__snapshots__/getQuickInfoOffset.spec.ts.snap +115 -0
  271. package/test/concepts/new-map/__snapshots__/toEmbeddedTS.spec.ts.snap +192 -0
  272. package/test/concepts/new-map/__snapshots__/toJS.spec.ts.snap +54 -0
  273. package/test/concepts/new-map/constant.ts +5 -0
  274. package/test/concepts/new-map/fixtures/nested-transform.json +169 -0
  275. package/test/concepts/new-map/fixtures/nested.json +141 -0
  276. package/test/concepts/new-map/fixtures/normal.json +101 -0
  277. package/test/concepts/new-map/getQuickInfoOffset.spec.ts +19 -0
  278. package/test/concepts/new-map/toEmbeddedTS.spec.ts +15 -0
  279. package/test/concepts/new-map/toJS.spec.ts +14 -0
  280. package/test/concepts/utils.ts +17 -0
  281. package/test/concepts/view-element/__snapshots__/toVue.spec.ts.snap +1 -1
  282. package/test/concepts/view-element/fixtures/default-login.json +221 -212
  283. package/test/concepts/view-element/fixtures/default-not-found.json +183 -174
  284. package/test/concepts/view-element/fixtures/with-role-auth.json +91 -82
  285. package/test/concepts/view-element/fixtures/with-table.json +1894 -1885
  286. package/test/concepts/view-element/toVue.spec.ts +1 -0
  287. package/.nyc_output/b920244d-8d01-4e76-be5a-95132217c5a1.json +0 -1
  288. package/.nyc_output/processinfo/b920244d-8d01-4e76-be5a-95132217c5a1.json +0 -1
  289. package/.nyc_output/processinfo/index.json +0 -1
  290. package/coverage/base.css +0 -224
  291. package/coverage/block-navigation.js +0 -87
  292. package/coverage/favicon.png +0 -0
  293. package/coverage/index.html +0 -461
  294. package/coverage/prettify.css +0 -1
  295. package/coverage/prettify.js +0 -2
  296. package/coverage/sort-arrow-sprite.png +0 -0
  297. package/coverage/sorter.js +0 -196
  298. package/coverage/src/automate/engine/index.html +0 -116
  299. package/coverage/src/automate/engine/utils.js.html +0 -1414
  300. package/coverage/src/bak/index.html +0 -116
  301. package/coverage/src/bak/translator.js.html +0 -631
  302. package/coverage/src/breakpoint/generator/AfterStartNode.ts.html +0 -175
  303. package/coverage/src/breakpoint/generator/BeforeEndNode.ts.html +0 -169
  304. package/coverage/src/breakpoint/generator/BreakpointNode.ts.html +0 -1246
  305. package/coverage/src/breakpoint/generator/CallbackNode.ts.html +0 -145
  306. package/coverage/src/breakpoint/generator/index.html +0 -176
  307. package/coverage/src/breakpoint/generator/index.ts.html +0 -508
  308. package/coverage/src/breakpoint/index.html +0 -116
  309. package/coverage/src/breakpoint/index.ts.html +0 -94
  310. package/coverage/src/breakpoint/shared/constants.ts.html +0 -436
  311. package/coverage/src/breakpoint/shared/index.html +0 -176
  312. package/coverage/src/breakpoint/shared/index.ts.html +0 -94
  313. package/coverage/src/breakpoint/shared/operations.ts.html +0 -160
  314. package/coverage/src/breakpoint/shared/socket.ts.html +0 -1297
  315. package/coverage/src/breakpoint/shared/utils.ts.html +0 -1087
  316. package/coverage/src/breakpoint/store/core.ts.html +0 -1600
  317. package/coverage/src/breakpoint/store/dock.ts.html +0 -733
  318. package/coverage/src/breakpoint/store/index.html +0 -146
  319. package/coverage/src/breakpoint/store/index.ts.html +0 -91
  320. package/coverage/src/common/BaseNode.ts.html +0 -4081
  321. package/coverage/src/common/Command.ts.html +0 -310
  322. package/coverage/src/common/EventEmitter.ts.html +0 -373
  323. package/coverage/src/common/Messager.ts.html +0 -820
  324. package/coverage/src/common/asyncFuncMap.ts.html +0 -127
  325. package/coverage/src/common/index.html +0 -191
  326. package/coverage/src/common/index.ts.html +0 -94
  327. package/coverage/src/concepts/Abort__.ts.html +0 -331
  328. package/coverage/src/concepts/Anchor__.ts.html +0 -667
  329. package/coverage/src/concepts/AnonymousFunction__.ts.html +0 -2092
  330. package/coverage/src/concepts/App__.ts.html +0 -13651
  331. package/coverage/src/concepts/Argument__.ts.html +0 -907
  332. package/coverage/src/concepts/Assignee__.ts.html +0 -2317
  333. package/coverage/src/concepts/AssignmentLine__.ts.html +0 -430
  334. package/coverage/src/concepts/Assignment__.ts.html +0 -1174
  335. package/coverage/src/concepts/Attribute__.ts.html +0 -919
  336. package/coverage/src/concepts/AuthInterface__.ts.html +0 -370
  337. package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +0 -2011
  338. package/coverage/src/concepts/AuthLogic__.ts.html +0 -793
  339. package/coverage/src/concepts/BackendVariable__.ts.html +0 -1690
  340. package/coverage/src/concepts/Backend__.ts.html +0 -1192
  341. package/coverage/src/concepts/BatchAssignment__.ts.html +0 -3376
  342. package/coverage/src/concepts/BinaryExpression__.ts.html +0 -1468
  343. package/coverage/src/concepts/BindAttribute__.ts.html +0 -3931
  344. package/coverage/src/concepts/BindDirective__.ts.html +0 -2002
  345. package/coverage/src/concepts/BindEvent__.ts.html +0 -3487
  346. package/coverage/src/concepts/BindStyle__.ts.html +0 -1645
  347. package/coverage/src/concepts/BooleanLiteral__.ts.html +0 -421
  348. package/coverage/src/concepts/CallAuthInterface__.ts.html +0 -1642
  349. package/coverage/src/concepts/CallConnector__.ts.html +0 -925
  350. package/coverage/src/concepts/CallFunction__.ts.html +0 -2164
  351. package/coverage/src/concepts/CallInterface__.ts.html +0 -2776
  352. package/coverage/src/concepts/CallLogic__.ts.html +0 -4693
  353. package/coverage/src/concepts/CallQueryComponent__.ts.html +0 -5419
  354. package/coverage/src/concepts/Comment__.ts.html +0 -397
  355. package/coverage/src/concepts/CompletionProperty__.ts.html +0 -946
  356. package/coverage/src/concepts/ConfigGroup__.ts.html +0 -1132
  357. package/coverage/src/concepts/ConfigPropertyValue__.ts.html +0 -427
  358. package/coverage/src/concepts/ConfigProperty__.ts.html +0 -1375
  359. package/coverage/src/concepts/Configuration__.ts.html +0 -1054
  360. package/coverage/src/concepts/Connection__.ts.html +0 -1387
  361. package/coverage/src/concepts/ConnectorTrigger__.ts.html +0 -598
  362. package/coverage/src/concepts/Connector__.ts.html +0 -4390
  363. package/coverage/src/concepts/Constant__.ts.html +0 -1123
  364. package/coverage/src/concepts/DataSource__.ts.html +0 -1798
  365. package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +0 -334
  366. package/coverage/src/concepts/DefaultValue__.ts.html +0 -946
  367. package/coverage/src/concepts/Destination__.ts.html +0 -2761
  368. package/coverage/src/concepts/End__.ts.html +0 -436
  369. package/coverage/src/concepts/EntityIndex__.ts.html +0 -799
  370. package/coverage/src/concepts/EntityProperty__.ts.html +0 -2866
  371. package/coverage/src/concepts/Entity__.ts.html +0 -3070
  372. package/coverage/src/concepts/EnumItem__.ts.html +0 -553
  373. package/coverage/src/concepts/Enum__.ts.html +0 -1258
  374. package/coverage/src/concepts/Event__.ts.html +0 -1111
  375. package/coverage/src/concepts/ExternalDestination__.ts.html +0 -1060
  376. package/coverage/src/concepts/ForEachStatement__.ts.html +0 -2023
  377. package/coverage/src/concepts/FrontendLibrary__.ts.html +0 -1762
  378. package/coverage/src/concepts/FrontendVariable__.ts.html +0 -292
  379. package/coverage/src/concepts/Frontend__.ts.html +0 -4078
  380. package/coverage/src/concepts/Function__.ts.html +0 -3718
  381. package/coverage/src/concepts/Identifier__.ts.html +0 -1060
  382. package/coverage/src/concepts/IfStatement__.ts.html +0 -1636
  383. package/coverage/src/concepts/Integration__.ts.html +0 -1273
  384. package/coverage/src/concepts/InterfaceParam__.ts.html +0 -1258
  385. package/coverage/src/concepts/Interface__.ts.html +0 -3463
  386. package/coverage/src/concepts/JSBlock__.ts.html +0 -424
  387. package/coverage/src/concepts/JavaLogic__.ts.html +0 -463
  388. package/coverage/src/concepts/LogicItem__.ts.html +0 -1174
  389. package/coverage/src/concepts/Logic__.ts.html +0 -7732
  390. package/coverage/src/concepts/MatchCase__.ts.html +0 -2974
  391. package/coverage/src/concepts/Match__.ts.html +0 -2494
  392. package/coverage/src/concepts/MemberExpression__.ts.html +0 -1744
  393. package/coverage/src/concepts/MicroApp__.ts.html +0 -439
  394. package/coverage/src/concepts/Module__.ts.html +0 -9385
  395. package/coverage/src/concepts/MsgTriggerEvent__.ts.html +0 -1072
  396. package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +0 -1045
  397. package/coverage/src/concepts/Namespace__.ts.html +0 -8221
  398. package/coverage/src/concepts/NewComposite__.ts.html +0 -4765
  399. package/coverage/src/concepts/NewList__.ts.html +0 -1702
  400. package/coverage/src/concepts/NewMap__.ts.html +0 -2470
  401. package/coverage/src/concepts/New__.ts.html +0 -289
  402. package/coverage/src/concepts/NullLiteral__.ts.html +0 -352
  403. package/coverage/src/concepts/NumericLiteral__.ts.html +0 -697
  404. package/coverage/src/concepts/OqlQueryComponent__.ts.html +0 -1237
  405. package/coverage/src/concepts/OverriddenLogic__.ts.html +0 -6970
  406. package/coverage/src/concepts/Param__.ts.html +0 -1798
  407. package/coverage/src/concepts/Point__.ts.html +0 -334
  408. package/coverage/src/concepts/ProcessComponent__.ts.html +0 -1717
  409. package/coverage/src/concepts/ProcessElement__.ts.html +0 -6187
  410. package/coverage/src/concepts/ProcessOutcome__.ts.html +0 -355
  411. package/coverage/src/concepts/ProcessOutcomes__.ts.html +0 -355
  412. package/coverage/src/concepts/Process__.ts.html +0 -5071
  413. package/coverage/src/concepts/QueryAggregateExpression__.ts.html +0 -589
  414. package/coverage/src/concepts/QueryFieldExpression__.ts.html +0 -586
  415. package/coverage/src/concepts/QueryFromExpression__.ts.html +0 -937
  416. package/coverage/src/concepts/QueryGroupByExpression__.ts.html +0 -580
  417. package/coverage/src/concepts/QueryJoinExpression__.ts.html +0 -1606
  418. package/coverage/src/concepts/QueryLimitExpression__.ts.html +0 -664
  419. package/coverage/src/concepts/QueryOrderByExpression__.ts.html +0 -706
  420. package/coverage/src/concepts/QuerySelectExpression__.ts.html +0 -1741
  421. package/coverage/src/concepts/Rect__.ts.html +0 -376
  422. package/coverage/src/concepts/Return__.ts.html +0 -1471
  423. package/coverage/src/concepts/Role__.ts.html +0 -604
  424. package/coverage/src/concepts/SelectMembers__.ts.html +0 -1279
  425. package/coverage/src/concepts/Slot__.ts.html +0 -649
  426. package/coverage/src/concepts/SqlQueryComponent__.ts.html +0 -1003
  427. package/coverage/src/concepts/Start__.ts.html +0 -307
  428. package/coverage/src/concepts/StringInterpolation__.ts.html +0 -1156
  429. package/coverage/src/concepts/StringLiteral__.ts.html +0 -508
  430. package/coverage/src/concepts/StructureProperty__.ts.html +0 -1300
  431. package/coverage/src/concepts/Structure__.ts.html +0 -2182
  432. package/coverage/src/concepts/SwitchCase__.ts.html +0 -1204
  433. package/coverage/src/concepts/SwitchStatement__.ts.html +0 -904
  434. package/coverage/src/concepts/Theme__.ts.html +0 -361
  435. package/coverage/src/concepts/Transactional__.ts.html +0 -631
  436. package/coverage/src/concepts/TriggerEvent__.ts.html +0 -1039
  437. package/coverage/src/concepts/TriggerLauncher__.ts.html +0 -778
  438. package/coverage/src/concepts/TypeAnnotation__.ts.html +0 -3832
  439. package/coverage/src/concepts/TypeParam__.ts.html +0 -322
  440. package/coverage/src/concepts/UnaryExpression__.ts.html +0 -730
  441. package/coverage/src/concepts/Unparsed__.ts.html +0 -397
  442. package/coverage/src/concepts/UseComponent__.ts.html +0 -334
  443. package/coverage/src/concepts/ValidationRule__.ts.html +0 -1876
  444. package/coverage/src/concepts/Variable__.ts.html +0 -1705
  445. package/coverage/src/concepts/ViewBlock__.ts.html +0 -355
  446. package/coverage/src/concepts/ViewComponent__.ts.html +0 -4327
  447. package/coverage/src/concepts/ViewElement__.ts.html +0 -8992
  448. package/coverage/src/concepts/View__.ts.html +0 -9019
  449. package/coverage/src/concepts/WhileStatement__.ts.html +0 -1105
  450. package/coverage/src/concepts/basics/stdlib/index.html +0 -356
  451. package/coverage/src/concepts/basics/stdlib/index.ts.html +0 -208
  452. package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +0 -565
  453. package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +0 -517
  454. package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +0 -226
  455. package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +0 -172
  456. package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +0 -214
  457. package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +0 -145
  458. package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +0 -589
  459. package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +0 -214
  460. package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +0 -229
  461. package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +0 -268
  462. package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +0 -1999
  463. package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +0 -3259
  464. package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +0 -6955
  465. package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +0 -1768
  466. package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +0 -163
  467. package/coverage/src/concepts/basics/stdlib/timeZone.ts.html +0 -664
  468. package/coverage/src/concepts/basics/types/coreTypeList.ts.html +0 -121
  469. package/coverage/src/concepts/basics/types/index.html +0 -131
  470. package/coverage/src/concepts/basics/types/index.ts.html +0 -160
  471. package/coverage/src/concepts/index.html +0 -1976
  472. package/coverage/src/concepts/index.ts.html +0 -103
  473. package/coverage/src/concepts/index__.ts.html +0 -454
  474. package/coverage/src/config.ts.html +0 -325
  475. package/coverage/src/decorators/index.html +0 -131
  476. package/coverage/src/decorators/index.ts.html +0 -583
  477. package/coverage/src/decorators/promise.ts.html +0 -169
  478. package/coverage/src/eventBus.ts.html +0 -100
  479. package/coverage/src/generator/compileComponent.ts.html +0 -142
  480. package/coverage/src/generator/genBundleFiles.ts.html +0 -1828
  481. package/coverage/src/generator/genHash.ts.html +0 -124
  482. package/coverage/src/generator/genMetaData.ts.html +0 -1084
  483. package/coverage/src/generator/genReleaseBody.ts.html +0 -1282
  484. package/coverage/src/generator/icestark.ts.html +0 -220
  485. package/coverage/src/generator/index.html +0 -266
  486. package/coverage/src/generator/index.ts.html +0 -106
  487. package/coverage/src/generator/microApp.ts.html +0 -172
  488. package/coverage/src/generator/permission.ts.html +0 -1036
  489. package/coverage/src/generator/qiankun.ts.html +0 -232
  490. package/coverage/src/generator/styleReplacer.ts.html +0 -199
  491. package/coverage/src/index.html +0 -146
  492. package/coverage/src/index.ts.html +0 -124
  493. package/coverage/src/manager/diagnostic.ts.html +0 -442
  494. package/coverage/src/manager/index.html +0 -131
  495. package/coverage/src/manager/stepRecorder.ts.html +0 -457
  496. package/coverage/src/natural/genNaturalTS.ts.html +0 -355
  497. package/coverage/src/natural/index.html +0 -161
  498. package/coverage/src/natural/index.ts.html +0 -91
  499. package/coverage/src/natural/naslStdlibMap.ts.html +0 -157
  500. package/coverage/src/natural/transformTSCode.ts.html +0 -2707
  501. package/coverage/src/sentry/index.html +0 -116
  502. package/coverage/src/sentry/index.ts.html +0 -676
  503. package/coverage/src/server/createUiTs.ts.html +0 -919
  504. package/coverage/src/server/entity2LogicNamespace.ts.html +0 -1294
  505. package/coverage/src/server/event.js.html +0 -526
  506. package/coverage/src/server/extendBaseNode.ts.html +0 -1762
  507. package/coverage/src/server/formatTsUtils.ts.html +0 -2689
  508. package/coverage/src/server/getConnector.ts.html +0 -316
  509. package/coverage/src/server/getExtensionModules.ts.html +0 -178
  510. package/coverage/src/server/getFunctions.ts.html +0 -133
  511. package/coverage/src/server/getInterfaces.ts.html +0 -229
  512. package/coverage/src/server/getLogging.ts.html +0 -100
  513. package/coverage/src/server/getLogics.ts.html +0 -1363
  514. package/coverage/src/server/getMemberIdentifier.ts.html +0 -1606
  515. package/coverage/src/server/getProcessComponents.ts.html +0 -112
  516. package/coverage/src/server/getProcesses.ts.html +0 -2023
  517. package/coverage/src/server/getValidates.ts.html +0 -115
  518. package/coverage/src/server/index.html +0 -401
  519. package/coverage/src/server/index.ts.html +0 -229
  520. package/coverage/src/server/naslServer.ts.html +0 -14356
  521. package/coverage/src/server/naslStdlibMap.ts.html +0 -241
  522. package/coverage/src/server/process2LogicNamespace.ts.html +0 -454
  523. package/coverage/src/server/translator.ts.html +0 -2566
  524. package/coverage/src/service/creator/add.configs.js.html +0 -397
  525. package/coverage/src/service/creator/errHandles.js.html +0 -304
  526. package/coverage/src/service/creator/index.html +0 -146
  527. package/coverage/src/service/creator/index.js.html +0 -352
  528. package/coverage/src/service/datasource/api.js.html +0 -118
  529. package/coverage/src/service/datasource/index.html +0 -131
  530. package/coverage/src/service/datasource/index.js.html +0 -103
  531. package/coverage/src/service/logic/api.js.html +0 -109
  532. package/coverage/src/service/logic/index.html +0 -131
  533. package/coverage/src/service/logic/index.js.html +0 -103
  534. package/coverage/src/service/storage/api.js.html +0 -202
  535. package/coverage/src/service/storage/index.html +0 -206
  536. package/coverage/src/service/storage/index.ts.html +0 -103
  537. package/coverage/src/service/storage/init.ts.html +0 -3721
  538. package/coverage/src/service/storage/jsoner.ts.html +0 -502
  539. package/coverage/src/service/storage/map.ts.html +0 -256
  540. package/coverage/src/service/storage/service.ts.html +0 -331
  541. package/coverage/src/service/storage/storagePoint.ts.html +0 -304
  542. package/coverage/src/templator/genCallComponentLogic.ts.html +0 -163
  543. package/coverage/src/templator/genCreateBlock.ts.html +0 -1093
  544. package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +0 -1609
  545. package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +0 -2254
  546. package/coverage/src/templator/genEditTableBlock.ts.html +0 -1021
  547. package/coverage/src/templator/genEnumSelectBlock.ts.html +0 -178
  548. package/coverage/src/templator/genGetBlock.ts.html +0 -451
  549. package/coverage/src/templator/genGridViewBlock.ts.html +0 -1114
  550. package/coverage/src/templator/genListViewBlock.ts.html +0 -475
  551. package/coverage/src/templator/genQueryComponent.ts.html +0 -1207
  552. package/coverage/src/templator/genSelectBlock.ts.html +0 -1243
  553. package/coverage/src/templator/genTableBlock.ts.html +0 -973
  554. package/coverage/src/templator/genUpdateBlock.ts.html +0 -1192
  555. package/coverage/src/templator/index.html +0 -326
  556. package/coverage/src/templator/index.ts.html +0 -154
  557. package/coverage/src/templator/utils.ts.html +0 -1861
  558. package/coverage/src/translator/constant.ts.html +0 -106
  559. package/coverage/src/translator/index.html +0 -146
  560. package/coverage/src/translator/index.ts.html +0 -94
  561. package/coverage/src/translator/utils.ts.html +0 -436
  562. package/coverage/src/utils/cookie.ts.html +0 -265
  563. package/coverage/src/utils/env.ts.html +0 -91
  564. package/coverage/src/utils/index.html +0 -236
  565. package/coverage/src/utils/index.ts.html +0 -694
  566. package/coverage/src/utils/logger.ts.html +0 -145
  567. package/coverage/src/utils/sortTsString.ts.html +0 -187
  568. package/coverage/src/utils/string.ts.html +0 -400
  569. package/coverage/src/utils/time-slicing.ts.html +0 -418
  570. package/coverage/src/utils/traverse.ts.html +0 -568
  571. package/coverage/src/utils/window.ts.html +0 -112
@@ -1,3721 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/service/storage/init.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../index.html">All files</a> / <a href="index.html">src/service/storage</a> init.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">5.38% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>35/650</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0.52% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>2/382</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">1.03% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>1/97</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">5.56% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>35/629</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 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>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a>
782
- <a name='L717'></a><a href='#L717'>717</a>
783
- <a name='L718'></a><a href='#L718'>718</a>
784
- <a name='L719'></a><a href='#L719'>719</a>
785
- <a name='L720'></a><a href='#L720'>720</a>
786
- <a name='L721'></a><a href='#L721'>721</a>
787
- <a name='L722'></a><a href='#L722'>722</a>
788
- <a name='L723'></a><a href='#L723'>723</a>
789
- <a name='L724'></a><a href='#L724'>724</a>
790
- <a name='L725'></a><a href='#L725'>725</a>
791
- <a name='L726'></a><a href='#L726'>726</a>
792
- <a name='L727'></a><a href='#L727'>727</a>
793
- <a name='L728'></a><a href='#L728'>728</a>
794
- <a name='L729'></a><a href='#L729'>729</a>
795
- <a name='L730'></a><a href='#L730'>730</a>
796
- <a name='L731'></a><a href='#L731'>731</a>
797
- <a name='L732'></a><a href='#L732'>732</a>
798
- <a name='L733'></a><a href='#L733'>733</a>
799
- <a name='L734'></a><a href='#L734'>734</a>
800
- <a name='L735'></a><a href='#L735'>735</a>
801
- <a name='L736'></a><a href='#L736'>736</a>
802
- <a name='L737'></a><a href='#L737'>737</a>
803
- <a name='L738'></a><a href='#L738'>738</a>
804
- <a name='L739'></a><a href='#L739'>739</a>
805
- <a name='L740'></a><a href='#L740'>740</a>
806
- <a name='L741'></a><a href='#L741'>741</a>
807
- <a name='L742'></a><a href='#L742'>742</a>
808
- <a name='L743'></a><a href='#L743'>743</a>
809
- <a name='L744'></a><a href='#L744'>744</a>
810
- <a name='L745'></a><a href='#L745'>745</a>
811
- <a name='L746'></a><a href='#L746'>746</a>
812
- <a name='L747'></a><a href='#L747'>747</a>
813
- <a name='L748'></a><a href='#L748'>748</a>
814
- <a name='L749'></a><a href='#L749'>749</a>
815
- <a name='L750'></a><a href='#L750'>750</a>
816
- <a name='L751'></a><a href='#L751'>751</a>
817
- <a name='L752'></a><a href='#L752'>752</a>
818
- <a name='L753'></a><a href='#L753'>753</a>
819
- <a name='L754'></a><a href='#L754'>754</a>
820
- <a name='L755'></a><a href='#L755'>755</a>
821
- <a name='L756'></a><a href='#L756'>756</a>
822
- <a name='L757'></a><a href='#L757'>757</a>
823
- <a name='L758'></a><a href='#L758'>758</a>
824
- <a name='L759'></a><a href='#L759'>759</a>
825
- <a name='L760'></a><a href='#L760'>760</a>
826
- <a name='L761'></a><a href='#L761'>761</a>
827
- <a name='L762'></a><a href='#L762'>762</a>
828
- <a name='L763'></a><a href='#L763'>763</a>
829
- <a name='L764'></a><a href='#L764'>764</a>
830
- <a name='L765'></a><a href='#L765'>765</a>
831
- <a name='L766'></a><a href='#L766'>766</a>
832
- <a name='L767'></a><a href='#L767'>767</a>
833
- <a name='L768'></a><a href='#L768'>768</a>
834
- <a name='L769'></a><a href='#L769'>769</a>
835
- <a name='L770'></a><a href='#L770'>770</a>
836
- <a name='L771'></a><a href='#L771'>771</a>
837
- <a name='L772'></a><a href='#L772'>772</a>
838
- <a name='L773'></a><a href='#L773'>773</a>
839
- <a name='L774'></a><a href='#L774'>774</a>
840
- <a name='L775'></a><a href='#L775'>775</a>
841
- <a name='L776'></a><a href='#L776'>776</a>
842
- <a name='L777'></a><a href='#L777'>777</a>
843
- <a name='L778'></a><a href='#L778'>778</a>
844
- <a name='L779'></a><a href='#L779'>779</a>
845
- <a name='L780'></a><a href='#L780'>780</a>
846
- <a name='L781'></a><a href='#L781'>781</a>
847
- <a name='L782'></a><a href='#L782'>782</a>
848
- <a name='L783'></a><a href='#L783'>783</a>
849
- <a name='L784'></a><a href='#L784'>784</a>
850
- <a name='L785'></a><a href='#L785'>785</a>
851
- <a name='L786'></a><a href='#L786'>786</a>
852
- <a name='L787'></a><a href='#L787'>787</a>
853
- <a name='L788'></a><a href='#L788'>788</a>
854
- <a name='L789'></a><a href='#L789'>789</a>
855
- <a name='L790'></a><a href='#L790'>790</a>
856
- <a name='L791'></a><a href='#L791'>791</a>
857
- <a name='L792'></a><a href='#L792'>792</a>
858
- <a name='L793'></a><a href='#L793'>793</a>
859
- <a name='L794'></a><a href='#L794'>794</a>
860
- <a name='L795'></a><a href='#L795'>795</a>
861
- <a name='L796'></a><a href='#L796'>796</a>
862
- <a name='L797'></a><a href='#L797'>797</a>
863
- <a name='L798'></a><a href='#L798'>798</a>
864
- <a name='L799'></a><a href='#L799'>799</a>
865
- <a name='L800'></a><a href='#L800'>800</a>
866
- <a name='L801'></a><a href='#L801'>801</a>
867
- <a name='L802'></a><a href='#L802'>802</a>
868
- <a name='L803'></a><a href='#L803'>803</a>
869
- <a name='L804'></a><a href='#L804'>804</a>
870
- <a name='L805'></a><a href='#L805'>805</a>
871
- <a name='L806'></a><a href='#L806'>806</a>
872
- <a name='L807'></a><a href='#L807'>807</a>
873
- <a name='L808'></a><a href='#L808'>808</a>
874
- <a name='L809'></a><a href='#L809'>809</a>
875
- <a name='L810'></a><a href='#L810'>810</a>
876
- <a name='L811'></a><a href='#L811'>811</a>
877
- <a name='L812'></a><a href='#L812'>812</a>
878
- <a name='L813'></a><a href='#L813'>813</a>
879
- <a name='L814'></a><a href='#L814'>814</a>
880
- <a name='L815'></a><a href='#L815'>815</a>
881
- <a name='L816'></a><a href='#L816'>816</a>
882
- <a name='L817'></a><a href='#L817'>817</a>
883
- <a name='L818'></a><a href='#L818'>818</a>
884
- <a name='L819'></a><a href='#L819'>819</a>
885
- <a name='L820'></a><a href='#L820'>820</a>
886
- <a name='L821'></a><a href='#L821'>821</a>
887
- <a name='L822'></a><a href='#L822'>822</a>
888
- <a name='L823'></a><a href='#L823'>823</a>
889
- <a name='L824'></a><a href='#L824'>824</a>
890
- <a name='L825'></a><a href='#L825'>825</a>
891
- <a name='L826'></a><a href='#L826'>826</a>
892
- <a name='L827'></a><a href='#L827'>827</a>
893
- <a name='L828'></a><a href='#L828'>828</a>
894
- <a name='L829'></a><a href='#L829'>829</a>
895
- <a name='L830'></a><a href='#L830'>830</a>
896
- <a name='L831'></a><a href='#L831'>831</a>
897
- <a name='L832'></a><a href='#L832'>832</a>
898
- <a name='L833'></a><a href='#L833'>833</a>
899
- <a name='L834'></a><a href='#L834'>834</a>
900
- <a name='L835'></a><a href='#L835'>835</a>
901
- <a name='L836'></a><a href='#L836'>836</a>
902
- <a name='L837'></a><a href='#L837'>837</a>
903
- <a name='L838'></a><a href='#L838'>838</a>
904
- <a name='L839'></a><a href='#L839'>839</a>
905
- <a name='L840'></a><a href='#L840'>840</a>
906
- <a name='L841'></a><a href='#L841'>841</a>
907
- <a name='L842'></a><a href='#L842'>842</a>
908
- <a name='L843'></a><a href='#L843'>843</a>
909
- <a name='L844'></a><a href='#L844'>844</a>
910
- <a name='L845'></a><a href='#L845'>845</a>
911
- <a name='L846'></a><a href='#L846'>846</a>
912
- <a name='L847'></a><a href='#L847'>847</a>
913
- <a name='L848'></a><a href='#L848'>848</a>
914
- <a name='L849'></a><a href='#L849'>849</a>
915
- <a name='L850'></a><a href='#L850'>850</a>
916
- <a name='L851'></a><a href='#L851'>851</a>
917
- <a name='L852'></a><a href='#L852'>852</a>
918
- <a name='L853'></a><a href='#L853'>853</a>
919
- <a name='L854'></a><a href='#L854'>854</a>
920
- <a name='L855'></a><a href='#L855'>855</a>
921
- <a name='L856'></a><a href='#L856'>856</a>
922
- <a name='L857'></a><a href='#L857'>857</a>
923
- <a name='L858'></a><a href='#L858'>858</a>
924
- <a name='L859'></a><a href='#L859'>859</a>
925
- <a name='L860'></a><a href='#L860'>860</a>
926
- <a name='L861'></a><a href='#L861'>861</a>
927
- <a name='L862'></a><a href='#L862'>862</a>
928
- <a name='L863'></a><a href='#L863'>863</a>
929
- <a name='L864'></a><a href='#L864'>864</a>
930
- <a name='L865'></a><a href='#L865'>865</a>
931
- <a name='L866'></a><a href='#L866'>866</a>
932
- <a name='L867'></a><a href='#L867'>867</a>
933
- <a name='L868'></a><a href='#L868'>868</a>
934
- <a name='L869'></a><a href='#L869'>869</a>
935
- <a name='L870'></a><a href='#L870'>870</a>
936
- <a name='L871'></a><a href='#L871'>871</a>
937
- <a name='L872'></a><a href='#L872'>872</a>
938
- <a name='L873'></a><a href='#L873'>873</a>
939
- <a name='L874'></a><a href='#L874'>874</a>
940
- <a name='L875'></a><a href='#L875'>875</a>
941
- <a name='L876'></a><a href='#L876'>876</a>
942
- <a name='L877'></a><a href='#L877'>877</a>
943
- <a name='L878'></a><a href='#L878'>878</a>
944
- <a name='L879'></a><a href='#L879'>879</a>
945
- <a name='L880'></a><a href='#L880'>880</a>
946
- <a name='L881'></a><a href='#L881'>881</a>
947
- <a name='L882'></a><a href='#L882'>882</a>
948
- <a name='L883'></a><a href='#L883'>883</a>
949
- <a name='L884'></a><a href='#L884'>884</a>
950
- <a name='L885'></a><a href='#L885'>885</a>
951
- <a name='L886'></a><a href='#L886'>886</a>
952
- <a name='L887'></a><a href='#L887'>887</a>
953
- <a name='L888'></a><a href='#L888'>888</a>
954
- <a name='L889'></a><a href='#L889'>889</a>
955
- <a name='L890'></a><a href='#L890'>890</a>
956
- <a name='L891'></a><a href='#L891'>891</a>
957
- <a name='L892'></a><a href='#L892'>892</a>
958
- <a name='L893'></a><a href='#L893'>893</a>
959
- <a name='L894'></a><a href='#L894'>894</a>
960
- <a name='L895'></a><a href='#L895'>895</a>
961
- <a name='L896'></a><a href='#L896'>896</a>
962
- <a name='L897'></a><a href='#L897'>897</a>
963
- <a name='L898'></a><a href='#L898'>898</a>
964
- <a name='L899'></a><a href='#L899'>899</a>
965
- <a name='L900'></a><a href='#L900'>900</a>
966
- <a name='L901'></a><a href='#L901'>901</a>
967
- <a name='L902'></a><a href='#L902'>902</a>
968
- <a name='L903'></a><a href='#L903'>903</a>
969
- <a name='L904'></a><a href='#L904'>904</a>
970
- <a name='L905'></a><a href='#L905'>905</a>
971
- <a name='L906'></a><a href='#L906'>906</a>
972
- <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a>
974
- <a name='L909'></a><a href='#L909'>909</a>
975
- <a name='L910'></a><a href='#L910'>910</a>
976
- <a name='L911'></a><a href='#L911'>911</a>
977
- <a name='L912'></a><a href='#L912'>912</a>
978
- <a name='L913'></a><a href='#L913'>913</a>
979
- <a name='L914'></a><a href='#L914'>914</a>
980
- <a name='L915'></a><a href='#L915'>915</a>
981
- <a name='L916'></a><a href='#L916'>916</a>
982
- <a name='L917'></a><a href='#L917'>917</a>
983
- <a name='L918'></a><a href='#L918'>918</a>
984
- <a name='L919'></a><a href='#L919'>919</a>
985
- <a name='L920'></a><a href='#L920'>920</a>
986
- <a name='L921'></a><a href='#L921'>921</a>
987
- <a name='L922'></a><a href='#L922'>922</a>
988
- <a name='L923'></a><a href='#L923'>923</a>
989
- <a name='L924'></a><a href='#L924'>924</a>
990
- <a name='L925'></a><a href='#L925'>925</a>
991
- <a name='L926'></a><a href='#L926'>926</a>
992
- <a name='L927'></a><a href='#L927'>927</a>
993
- <a name='L928'></a><a href='#L928'>928</a>
994
- <a name='L929'></a><a href='#L929'>929</a>
995
- <a name='L930'></a><a href='#L930'>930</a>
996
- <a name='L931'></a><a href='#L931'>931</a>
997
- <a name='L932'></a><a href='#L932'>932</a>
998
- <a name='L933'></a><a href='#L933'>933</a>
999
- <a name='L934'></a><a href='#L934'>934</a>
1000
- <a name='L935'></a><a href='#L935'>935</a>
1001
- <a name='L936'></a><a href='#L936'>936</a>
1002
- <a name='L937'></a><a href='#L937'>937</a>
1003
- <a name='L938'></a><a href='#L938'>938</a>
1004
- <a name='L939'></a><a href='#L939'>939</a>
1005
- <a name='L940'></a><a href='#L940'>940</a>
1006
- <a name='L941'></a><a href='#L941'>941</a>
1007
- <a name='L942'></a><a href='#L942'>942</a>
1008
- <a name='L943'></a><a href='#L943'>943</a>
1009
- <a name='L944'></a><a href='#L944'>944</a>
1010
- <a name='L945'></a><a href='#L945'>945</a>
1011
- <a name='L946'></a><a href='#L946'>946</a>
1012
- <a name='L947'></a><a href='#L947'>947</a>
1013
- <a name='L948'></a><a href='#L948'>948</a>
1014
- <a name='L949'></a><a href='#L949'>949</a>
1015
- <a name='L950'></a><a href='#L950'>950</a>
1016
- <a name='L951'></a><a href='#L951'>951</a>
1017
- <a name='L952'></a><a href='#L952'>952</a>
1018
- <a name='L953'></a><a href='#L953'>953</a>
1019
- <a name='L954'></a><a href='#L954'>954</a>
1020
- <a name='L955'></a><a href='#L955'>955</a>
1021
- <a name='L956'></a><a href='#L956'>956</a>
1022
- <a name='L957'></a><a href='#L957'>957</a>
1023
- <a name='L958'></a><a href='#L958'>958</a>
1024
- <a name='L959'></a><a href='#L959'>959</a>
1025
- <a name='L960'></a><a href='#L960'>960</a>
1026
- <a name='L961'></a><a href='#L961'>961</a>
1027
- <a name='L962'></a><a href='#L962'>962</a>
1028
- <a name='L963'></a><a href='#L963'>963</a>
1029
- <a name='L964'></a><a href='#L964'>964</a>
1030
- <a name='L965'></a><a href='#L965'>965</a>
1031
- <a name='L966'></a><a href='#L966'>966</a>
1032
- <a name='L967'></a><a href='#L967'>967</a>
1033
- <a name='L968'></a><a href='#L968'>968</a>
1034
- <a name='L969'></a><a href='#L969'>969</a>
1035
- <a name='L970'></a><a href='#L970'>970</a>
1036
- <a name='L971'></a><a href='#L971'>971</a>
1037
- <a name='L972'></a><a href='#L972'>972</a>
1038
- <a name='L973'></a><a href='#L973'>973</a>
1039
- <a name='L974'></a><a href='#L974'>974</a>
1040
- <a name='L975'></a><a href='#L975'>975</a>
1041
- <a name='L976'></a><a href='#L976'>976</a>
1042
- <a name='L977'></a><a href='#L977'>977</a>
1043
- <a name='L978'></a><a href='#L978'>978</a>
1044
- <a name='L979'></a><a href='#L979'>979</a>
1045
- <a name='L980'></a><a href='#L980'>980</a>
1046
- <a name='L981'></a><a href='#L981'>981</a>
1047
- <a name='L982'></a><a href='#L982'>982</a>
1048
- <a name='L983'></a><a href='#L983'>983</a>
1049
- <a name='L984'></a><a href='#L984'>984</a>
1050
- <a name='L985'></a><a href='#L985'>985</a>
1051
- <a name='L986'></a><a href='#L986'>986</a>
1052
- <a name='L987'></a><a href='#L987'>987</a>
1053
- <a name='L988'></a><a href='#L988'>988</a>
1054
- <a name='L989'></a><a href='#L989'>989</a>
1055
- <a name='L990'></a><a href='#L990'>990</a>
1056
- <a name='L991'></a><a href='#L991'>991</a>
1057
- <a name='L992'></a><a href='#L992'>992</a>
1058
- <a name='L993'></a><a href='#L993'>993</a>
1059
- <a name='L994'></a><a href='#L994'>994</a>
1060
- <a name='L995'></a><a href='#L995'>995</a>
1061
- <a name='L996'></a><a href='#L996'>996</a>
1062
- <a name='L997'></a><a href='#L997'>997</a>
1063
- <a name='L998'></a><a href='#L998'>998</a>
1064
- <a name='L999'></a><a href='#L999'>999</a>
1065
- <a name='L1000'></a><a href='#L1000'>1000</a>
1066
- <a name='L1001'></a><a href='#L1001'>1001</a>
1067
- <a name='L1002'></a><a href='#L1002'>1002</a>
1068
- <a name='L1003'></a><a href='#L1003'>1003</a>
1069
- <a name='L1004'></a><a href='#L1004'>1004</a>
1070
- <a name='L1005'></a><a href='#L1005'>1005</a>
1071
- <a name='L1006'></a><a href='#L1006'>1006</a>
1072
- <a name='L1007'></a><a href='#L1007'>1007</a>
1073
- <a name='L1008'></a><a href='#L1008'>1008</a>
1074
- <a name='L1009'></a><a href='#L1009'>1009</a>
1075
- <a name='L1010'></a><a href='#L1010'>1010</a>
1076
- <a name='L1011'></a><a href='#L1011'>1011</a>
1077
- <a name='L1012'></a><a href='#L1012'>1012</a>
1078
- <a name='L1013'></a><a href='#L1013'>1013</a>
1079
- <a name='L1014'></a><a href='#L1014'>1014</a>
1080
- <a name='L1015'></a><a href='#L1015'>1015</a>
1081
- <a name='L1016'></a><a href='#L1016'>1016</a>
1082
- <a name='L1017'></a><a href='#L1017'>1017</a>
1083
- <a name='L1018'></a><a href='#L1018'>1018</a>
1084
- <a name='L1019'></a><a href='#L1019'>1019</a>
1085
- <a name='L1020'></a><a href='#L1020'>1020</a>
1086
- <a name='L1021'></a><a href='#L1021'>1021</a>
1087
- <a name='L1022'></a><a href='#L1022'>1022</a>
1088
- <a name='L1023'></a><a href='#L1023'>1023</a>
1089
- <a name='L1024'></a><a href='#L1024'>1024</a>
1090
- <a name='L1025'></a><a href='#L1025'>1025</a>
1091
- <a name='L1026'></a><a href='#L1026'>1026</a>
1092
- <a name='L1027'></a><a href='#L1027'>1027</a>
1093
- <a name='L1028'></a><a href='#L1028'>1028</a>
1094
- <a name='L1029'></a><a href='#L1029'>1029</a>
1095
- <a name='L1030'></a><a href='#L1030'>1030</a>
1096
- <a name='L1031'></a><a href='#L1031'>1031</a>
1097
- <a name='L1032'></a><a href='#L1032'>1032</a>
1098
- <a name='L1033'></a><a href='#L1033'>1033</a>
1099
- <a name='L1034'></a><a href='#L1034'>1034</a>
1100
- <a name='L1035'></a><a href='#L1035'>1035</a>
1101
- <a name='L1036'></a><a href='#L1036'>1036</a>
1102
- <a name='L1037'></a><a href='#L1037'>1037</a>
1103
- <a name='L1038'></a><a href='#L1038'>1038</a>
1104
- <a name='L1039'></a><a href='#L1039'>1039</a>
1105
- <a name='L1040'></a><a href='#L1040'>1040</a>
1106
- <a name='L1041'></a><a href='#L1041'>1041</a>
1107
- <a name='L1042'></a><a href='#L1042'>1042</a>
1108
- <a name='L1043'></a><a href='#L1043'>1043</a>
1109
- <a name='L1044'></a><a href='#L1044'>1044</a>
1110
- <a name='L1045'></a><a href='#L1045'>1045</a>
1111
- <a name='L1046'></a><a href='#L1046'>1046</a>
1112
- <a name='L1047'></a><a href='#L1047'>1047</a>
1113
- <a name='L1048'></a><a href='#L1048'>1048</a>
1114
- <a name='L1049'></a><a href='#L1049'>1049</a>
1115
- <a name='L1050'></a><a href='#L1050'>1050</a>
1116
- <a name='L1051'></a><a href='#L1051'>1051</a>
1117
- <a name='L1052'></a><a href='#L1052'>1052</a>
1118
- <a name='L1053'></a><a href='#L1053'>1053</a>
1119
- <a name='L1054'></a><a href='#L1054'>1054</a>
1120
- <a name='L1055'></a><a href='#L1055'>1055</a>
1121
- <a name='L1056'></a><a href='#L1056'>1056</a>
1122
- <a name='L1057'></a><a href='#L1057'>1057</a>
1123
- <a name='L1058'></a><a href='#L1058'>1058</a>
1124
- <a name='L1059'></a><a href='#L1059'>1059</a>
1125
- <a name='L1060'></a><a href='#L1060'>1060</a>
1126
- <a name='L1061'></a><a href='#L1061'>1061</a>
1127
- <a name='L1062'></a><a href='#L1062'>1062</a>
1128
- <a name='L1063'></a><a href='#L1063'>1063</a>
1129
- <a name='L1064'></a><a href='#L1064'>1064</a>
1130
- <a name='L1065'></a><a href='#L1065'>1065</a>
1131
- <a name='L1066'></a><a href='#L1066'>1066</a>
1132
- <a name='L1067'></a><a href='#L1067'>1067</a>
1133
- <a name='L1068'></a><a href='#L1068'>1068</a>
1134
- <a name='L1069'></a><a href='#L1069'>1069</a>
1135
- <a name='L1070'></a><a href='#L1070'>1070</a>
1136
- <a name='L1071'></a><a href='#L1071'>1071</a>
1137
- <a name='L1072'></a><a href='#L1072'>1072</a>
1138
- <a name='L1073'></a><a href='#L1073'>1073</a>
1139
- <a name='L1074'></a><a href='#L1074'>1074</a>
1140
- <a name='L1075'></a><a href='#L1075'>1075</a>
1141
- <a name='L1076'></a><a href='#L1076'>1076</a>
1142
- <a name='L1077'></a><a href='#L1077'>1077</a>
1143
- <a name='L1078'></a><a href='#L1078'>1078</a>
1144
- <a name='L1079'></a><a href='#L1079'>1079</a>
1145
- <a name='L1080'></a><a href='#L1080'>1080</a>
1146
- <a name='L1081'></a><a href='#L1081'>1081</a>
1147
- <a name='L1082'></a><a href='#L1082'>1082</a>
1148
- <a name='L1083'></a><a href='#L1083'>1083</a>
1149
- <a name='L1084'></a><a href='#L1084'>1084</a>
1150
- <a name='L1085'></a><a href='#L1085'>1085</a>
1151
- <a name='L1086'></a><a href='#L1086'>1086</a>
1152
- <a name='L1087'></a><a href='#L1087'>1087</a>
1153
- <a name='L1088'></a><a href='#L1088'>1088</a>
1154
- <a name='L1089'></a><a href='#L1089'>1089</a>
1155
- <a name='L1090'></a><a href='#L1090'>1090</a>
1156
- <a name='L1091'></a><a href='#L1091'>1091</a>
1157
- <a name='L1092'></a><a href='#L1092'>1092</a>
1158
- <a name='L1093'></a><a href='#L1093'>1093</a>
1159
- <a name='L1094'></a><a href='#L1094'>1094</a>
1160
- <a name='L1095'></a><a href='#L1095'>1095</a>
1161
- <a name='L1096'></a><a href='#L1096'>1096</a>
1162
- <a name='L1097'></a><a href='#L1097'>1097</a>
1163
- <a name='L1098'></a><a href='#L1098'>1098</a>
1164
- <a name='L1099'></a><a href='#L1099'>1099</a>
1165
- <a name='L1100'></a><a href='#L1100'>1100</a>
1166
- <a name='L1101'></a><a href='#L1101'>1101</a>
1167
- <a name='L1102'></a><a href='#L1102'>1102</a>
1168
- <a name='L1103'></a><a href='#L1103'>1103</a>
1169
- <a name='L1104'></a><a href='#L1104'>1104</a>
1170
- <a name='L1105'></a><a href='#L1105'>1105</a>
1171
- <a name='L1106'></a><a href='#L1106'>1106</a>
1172
- <a name='L1107'></a><a href='#L1107'>1107</a>
1173
- <a name='L1108'></a><a href='#L1108'>1108</a>
1174
- <a name='L1109'></a><a href='#L1109'>1109</a>
1175
- <a name='L1110'></a><a href='#L1110'>1110</a>
1176
- <a name='L1111'></a><a href='#L1111'>1111</a>
1177
- <a name='L1112'></a><a href='#L1112'>1112</a>
1178
- <a name='L1113'></a><a href='#L1113'>1113</a>
1179
- <a name='L1114'></a><a href='#L1114'>1114</a>
1180
- <a name='L1115'></a><a href='#L1115'>1115</a>
1181
- <a name='L1116'></a><a href='#L1116'>1116</a>
1182
- <a name='L1117'></a><a href='#L1117'>1117</a>
1183
- <a name='L1118'></a><a href='#L1118'>1118</a>
1184
- <a name='L1119'></a><a href='#L1119'>1119</a>
1185
- <a name='L1120'></a><a href='#L1120'>1120</a>
1186
- <a name='L1121'></a><a href='#L1121'>1121</a>
1187
- <a name='L1122'></a><a href='#L1122'>1122</a>
1188
- <a name='L1123'></a><a href='#L1123'>1123</a>
1189
- <a name='L1124'></a><a href='#L1124'>1124</a>
1190
- <a name='L1125'></a><a href='#L1125'>1125</a>
1191
- <a name='L1126'></a><a href='#L1126'>1126</a>
1192
- <a name='L1127'></a><a href='#L1127'>1127</a>
1193
- <a name='L1128'></a><a href='#L1128'>1128</a>
1194
- <a name='L1129'></a><a href='#L1129'>1129</a>
1195
- <a name='L1130'></a><a href='#L1130'>1130</a>
1196
- <a name='L1131'></a><a href='#L1131'>1131</a>
1197
- <a name='L1132'></a><a href='#L1132'>1132</a>
1198
- <a name='L1133'></a><a href='#L1133'>1133</a>
1199
- <a name='L1134'></a><a href='#L1134'>1134</a>
1200
- <a name='L1135'></a><a href='#L1135'>1135</a>
1201
- <a name='L1136'></a><a href='#L1136'>1136</a>
1202
- <a name='L1137'></a><a href='#L1137'>1137</a>
1203
- <a name='L1138'></a><a href='#L1138'>1138</a>
1204
- <a name='L1139'></a><a href='#L1139'>1139</a>
1205
- <a name='L1140'></a><a href='#L1140'>1140</a>
1206
- <a name='L1141'></a><a href='#L1141'>1141</a>
1207
- <a name='L1142'></a><a href='#L1142'>1142</a>
1208
- <a name='L1143'></a><a href='#L1143'>1143</a>
1209
- <a name='L1144'></a><a href='#L1144'>1144</a>
1210
- <a name='L1145'></a><a href='#L1145'>1145</a>
1211
- <a name='L1146'></a><a href='#L1146'>1146</a>
1212
- <a name='L1147'></a><a href='#L1147'>1147</a>
1213
- <a name='L1148'></a><a href='#L1148'>1148</a>
1214
- <a name='L1149'></a><a href='#L1149'>1149</a>
1215
- <a name='L1150'></a><a href='#L1150'>1150</a>
1216
- <a name='L1151'></a><a href='#L1151'>1151</a>
1217
- <a name='L1152'></a><a href='#L1152'>1152</a>
1218
- <a name='L1153'></a><a href='#L1153'>1153</a>
1219
- <a name='L1154'></a><a href='#L1154'>1154</a>
1220
- <a name='L1155'></a><a href='#L1155'>1155</a>
1221
- <a name='L1156'></a><a href='#L1156'>1156</a>
1222
- <a name='L1157'></a><a href='#L1157'>1157</a>
1223
- <a name='L1158'></a><a href='#L1158'>1158</a>
1224
- <a name='L1159'></a><a href='#L1159'>1159</a>
1225
- <a name='L1160'></a><a href='#L1160'>1160</a>
1226
- <a name='L1161'></a><a href='#L1161'>1161</a>
1227
- <a name='L1162'></a><a href='#L1162'>1162</a>
1228
- <a name='L1163'></a><a href='#L1163'>1163</a>
1229
- <a name='L1164'></a><a href='#L1164'>1164</a>
1230
- <a name='L1165'></a><a href='#L1165'>1165</a>
1231
- <a name='L1166'></a><a href='#L1166'>1166</a>
1232
- <a name='L1167'></a><a href='#L1167'>1167</a>
1233
- <a name='L1168'></a><a href='#L1168'>1168</a>
1234
- <a name='L1169'></a><a href='#L1169'>1169</a>
1235
- <a name='L1170'></a><a href='#L1170'>1170</a>
1236
- <a name='L1171'></a><a href='#L1171'>1171</a>
1237
- <a name='L1172'></a><a href='#L1172'>1172</a>
1238
- <a name='L1173'></a><a href='#L1173'>1173</a>
1239
- <a name='L1174'></a><a href='#L1174'>1174</a>
1240
- <a name='L1175'></a><a href='#L1175'>1175</a>
1241
- <a name='L1176'></a><a href='#L1176'>1176</a>
1242
- <a name='L1177'></a><a href='#L1177'>1177</a>
1243
- <a name='L1178'></a><a href='#L1178'>1178</a>
1244
- <a name='L1179'></a><a href='#L1179'>1179</a>
1245
- <a name='L1180'></a><a href='#L1180'>1180</a>
1246
- <a name='L1181'></a><a href='#L1181'>1181</a>
1247
- <a name='L1182'></a><a href='#L1182'>1182</a>
1248
- <a name='L1183'></a><a href='#L1183'>1183</a>
1249
- <a name='L1184'></a><a href='#L1184'>1184</a>
1250
- <a name='L1185'></a><a href='#L1185'>1185</a>
1251
- <a name='L1186'></a><a href='#L1186'>1186</a>
1252
- <a name='L1187'></a><a href='#L1187'>1187</a>
1253
- <a name='L1188'></a><a href='#L1188'>1188</a>
1254
- <a name='L1189'></a><a href='#L1189'>1189</a>
1255
- <a name='L1190'></a><a href='#L1190'>1190</a>
1256
- <a name='L1191'></a><a href='#L1191'>1191</a>
1257
- <a name='L1192'></a><a href='#L1192'>1192</a>
1258
- <a name='L1193'></a><a href='#L1193'>1193</a>
1259
- <a name='L1194'></a><a href='#L1194'>1194</a>
1260
- <a name='L1195'></a><a href='#L1195'>1195</a>
1261
- <a name='L1196'></a><a href='#L1196'>1196</a>
1262
- <a name='L1197'></a><a href='#L1197'>1197</a>
1263
- <a name='L1198'></a><a href='#L1198'>1198</a>
1264
- <a name='L1199'></a><a href='#L1199'>1199</a>
1265
- <a name='L1200'></a><a href='#L1200'>1200</a>
1266
- <a name='L1201'></a><a href='#L1201'>1201</a>
1267
- <a name='L1202'></a><a href='#L1202'>1202</a>
1268
- <a name='L1203'></a><a href='#L1203'>1203</a>
1269
- <a name='L1204'></a><a href='#L1204'>1204</a>
1270
- <a name='L1205'></a><a href='#L1205'>1205</a>
1271
- <a name='L1206'></a><a href='#L1206'>1206</a>
1272
- <a name='L1207'></a><a href='#L1207'>1207</a>
1273
- <a name='L1208'></a><a href='#L1208'>1208</a>
1274
- <a name='L1209'></a><a href='#L1209'>1209</a>
1275
- <a name='L1210'></a><a href='#L1210'>1210</a>
1276
- <a name='L1211'></a><a href='#L1211'>1211</a>
1277
- <a name='L1212'></a><a href='#L1212'>1212</a>
1278
- <a name='L1213'></a><a href='#L1213'>1213</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
1279
- <span class="cline-any cline-yes">1x</span>
1280
- <span class="cline-any cline-yes">1x</span>
1281
- <span class="cline-any cline-yes">1x</span>
1282
- <span class="cline-any cline-yes">1x</span>
1283
- <span class="cline-any cline-yes">1x</span>
1284
- <span class="cline-any cline-yes">1x</span>
1285
- <span class="cline-any cline-yes">1x</span>
1286
- <span class="cline-any cline-yes">1x</span>
1287
- <span class="cline-any cline-neutral">&nbsp;</span>
1288
- <span class="cline-any cline-yes">1x</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-neutral">&nbsp;</span>
1291
- <span class="cline-any cline-neutral">&nbsp;</span>
1292
- <span class="cline-any cline-yes">1x</span>
1293
- <span class="cline-any cline-yes">1x</span>
1294
- <span class="cline-any cline-yes">1x</span>
1295
- <span class="cline-any cline-yes">1x</span>
1296
- <span class="cline-any cline-neutral">&nbsp;</span>
1297
- <span class="cline-any cline-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-yes">1x</span>
1299
- <span class="cline-any cline-neutral">&nbsp;</span>
1300
- <span class="cline-any cline-yes">1x</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-yes">1x</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-neutral">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-no">&nbsp;</span>
1309
- <span class="cline-any cline-no">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-neutral">&nbsp;</span>
1312
- <span class="cline-any cline-neutral">&nbsp;</span>
1313
- <span class="cline-any cline-no">&nbsp;</span>
1314
- <span class="cline-any cline-no">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-no">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-no">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-no">&nbsp;</span>
1321
- <span class="cline-any cline-no">&nbsp;</span>
1322
- <span class="cline-any cline-neutral">&nbsp;</span>
1323
- <span class="cline-any cline-no">&nbsp;</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-no">&nbsp;</span>
1326
- <span class="cline-any cline-no">&nbsp;</span>
1327
- <span class="cline-any cline-no">&nbsp;</span>
1328
- <span class="cline-any cline-neutral">&nbsp;</span>
1329
- <span class="cline-any cline-neutral">&nbsp;</span>
1330
- <span class="cline-any cline-neutral">&nbsp;</span>
1331
- <span class="cline-any cline-no">&nbsp;</span>
1332
- <span class="cline-any cline-no">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-neutral">&nbsp;</span>
1335
- <span class="cline-any cline-neutral">&nbsp;</span>
1336
- <span class="cline-any cline-neutral">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-neutral">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-no">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-no">&nbsp;</span>
1345
- <span class="cline-any cline-no">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-no">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-no">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-neutral">&nbsp;</span>
1354
- <span class="cline-any cline-no">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-neutral">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-no">&nbsp;</span>
1361
- <span class="cline-any cline-no">&nbsp;</span>
1362
- <span class="cline-any cline-no">&nbsp;</span>
1363
- <span class="cline-any cline-no">&nbsp;</span>
1364
- <span class="cline-any cline-no">&nbsp;</span>
1365
- <span class="cline-any cline-neutral">&nbsp;</span>
1366
- <span class="cline-any cline-no">&nbsp;</span>
1367
- <span class="cline-any cline-neutral">&nbsp;</span>
1368
- <span class="cline-any cline-neutral">&nbsp;</span>
1369
- <span class="cline-any cline-neutral">&nbsp;</span>
1370
- <span class="cline-any cline-no">&nbsp;</span>
1371
- <span class="cline-any cline-no">&nbsp;</span>
1372
- <span class="cline-any cline-neutral">&nbsp;</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-neutral">&nbsp;</span>
1375
- <span class="cline-any cline-no">&nbsp;</span>
1376
- <span class="cline-any cline-no">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-neutral">&nbsp;</span>
1380
- <span class="cline-any cline-neutral">&nbsp;</span>
1381
- <span class="cline-any cline-neutral">&nbsp;</span>
1382
- <span class="cline-any cline-yes">1x</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-no">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-no">&nbsp;</span>
1389
- <span class="cline-any cline-no">&nbsp;</span>
1390
- <span class="cline-any cline-no">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-neutral">&nbsp;</span>
1395
- <span class="cline-any cline-no">&nbsp;</span>
1396
- <span class="cline-any cline-no">&nbsp;</span>
1397
- <span class="cline-any cline-no">&nbsp;</span>
1398
- <span class="cline-any cline-no">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-no">&nbsp;</span>
1401
- <span class="cline-any cline-no">&nbsp;</span>
1402
- <span class="cline-any cline-no">&nbsp;</span>
1403
- <span class="cline-any cline-neutral">&nbsp;</span>
1404
- <span class="cline-any cline-no">&nbsp;</span>
1405
- <span class="cline-any cline-neutral">&nbsp;</span>
1406
- <span class="cline-any cline-no">&nbsp;</span>
1407
- <span class="cline-any cline-no">&nbsp;</span>
1408
- <span class="cline-any cline-neutral">&nbsp;</span>
1409
- <span class="cline-any cline-neutral">&nbsp;</span>
1410
- <span class="cline-any cline-neutral">&nbsp;</span>
1411
- <span class="cline-any cline-no">&nbsp;</span>
1412
- <span class="cline-any cline-no">&nbsp;</span>
1413
- <span class="cline-any cline-neutral">&nbsp;</span>
1414
- <span class="cline-any cline-neutral">&nbsp;</span>
1415
- <span class="cline-any cline-neutral">&nbsp;</span>
1416
- <span class="cline-any cline-no">&nbsp;</span>
1417
- <span class="cline-any cline-no">&nbsp;</span>
1418
- <span class="cline-any cline-neutral">&nbsp;</span>
1419
- <span class="cline-any cline-neutral">&nbsp;</span>
1420
- <span class="cline-any cline-neutral">&nbsp;</span>
1421
- <span class="cline-any cline-neutral">&nbsp;</span>
1422
- <span class="cline-any cline-neutral">&nbsp;</span>
1423
- <span class="cline-any cline-neutral">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-no">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-no">&nbsp;</span>
1430
- <span class="cline-any cline-neutral">&nbsp;</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1432
- <span class="cline-any cline-neutral">&nbsp;</span>
1433
- <span class="cline-any cline-neutral">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-no">&nbsp;</span>
1440
- <span class="cline-any cline-neutral">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-no">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-neutral">&nbsp;</span>
1448
- <span class="cline-any cline-neutral">&nbsp;</span>
1449
- <span class="cline-any cline-neutral">&nbsp;</span>
1450
- <span class="cline-any cline-neutral">&nbsp;</span>
1451
- <span class="cline-any cline-neutral">&nbsp;</span>
1452
- <span class="cline-any cline-yes">1x</span>
1453
- <span class="cline-any cline-no">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-neutral">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-no">&nbsp;</span>
1460
- <span class="cline-any cline-no">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-no">&nbsp;</span>
1463
- <span class="cline-any cline-neutral">&nbsp;</span>
1464
- <span class="cline-any cline-no">&nbsp;</span>
1465
- <span class="cline-any cline-no">&nbsp;</span>
1466
- <span class="cline-any cline-no">&nbsp;</span>
1467
- <span class="cline-any cline-neutral">&nbsp;</span>
1468
- <span class="cline-any cline-no">&nbsp;</span>
1469
- <span class="cline-any cline-neutral">&nbsp;</span>
1470
- <span class="cline-any cline-no">&nbsp;</span>
1471
- <span class="cline-any cline-no">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-neutral">&nbsp;</span>
1474
- <span class="cline-any cline-neutral">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-neutral">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-neutral">&nbsp;</span>
1482
- <span class="cline-any cline-neutral">&nbsp;</span>
1483
- <span class="cline-any cline-no">&nbsp;</span>
1484
- <span class="cline-any cline-no">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-no">&nbsp;</span>
1489
- <span class="cline-any cline-no">&nbsp;</span>
1490
- <span class="cline-any cline-no">&nbsp;</span>
1491
- <span class="cline-any cline-no">&nbsp;</span>
1492
- <span class="cline-any cline-no">&nbsp;</span>
1493
- <span class="cline-any cline-neutral">&nbsp;</span>
1494
- <span class="cline-any cline-no">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-no">&nbsp;</span>
1497
- <span class="cline-any cline-no">&nbsp;</span>
1498
- <span class="cline-any cline-neutral">&nbsp;</span>
1499
- <span class="cline-any cline-neutral">&nbsp;</span>
1500
- <span class="cline-any cline-no">&nbsp;</span>
1501
- <span class="cline-any cline-neutral">&nbsp;</span>
1502
- <span class="cline-any cline-no">&nbsp;</span>
1503
- <span class="cline-any cline-neutral">&nbsp;</span>
1504
- <span class="cline-any cline-no">&nbsp;</span>
1505
- <span class="cline-any cline-no">&nbsp;</span>
1506
- <span class="cline-any cline-neutral">&nbsp;</span>
1507
- <span class="cline-any cline-no">&nbsp;</span>
1508
- <span class="cline-any cline-neutral">&nbsp;</span>
1509
- <span class="cline-any cline-no">&nbsp;</span>
1510
- <span class="cline-any cline-neutral">&nbsp;</span>
1511
- <span class="cline-any cline-no">&nbsp;</span>
1512
- <span class="cline-any cline-no">&nbsp;</span>
1513
- <span class="cline-any cline-neutral">&nbsp;</span>
1514
- <span class="cline-any cline-no">&nbsp;</span>
1515
- <span class="cline-any cline-neutral">&nbsp;</span>
1516
- <span class="cline-any cline-neutral">&nbsp;</span>
1517
- <span class="cline-any cline-neutral">&nbsp;</span>
1518
- <span class="cline-any cline-no">&nbsp;</span>
1519
- <span class="cline-any cline-no">&nbsp;</span>
1520
- <span class="cline-any cline-no">&nbsp;</span>
1521
- <span class="cline-any cline-neutral">&nbsp;</span>
1522
- <span class="cline-any cline-neutral">&nbsp;</span>
1523
- <span class="cline-any cline-neutral">&nbsp;</span>
1524
- <span class="cline-any cline-no">&nbsp;</span>
1525
- <span class="cline-any cline-no">&nbsp;</span>
1526
- <span class="cline-any cline-no">&nbsp;</span>
1527
- <span class="cline-any cline-no">&nbsp;</span>
1528
- <span class="cline-any cline-no">&nbsp;</span>
1529
- <span class="cline-any cline-no">&nbsp;</span>
1530
- <span class="cline-any cline-no">&nbsp;</span>
1531
- <span class="cline-any cline-no">&nbsp;</span>
1532
- <span class="cline-any cline-neutral">&nbsp;</span>
1533
- <span class="cline-any cline-no">&nbsp;</span>
1534
- <span class="cline-any cline-no">&nbsp;</span>
1535
- <span class="cline-any cline-no">&nbsp;</span>
1536
- <span class="cline-any cline-no">&nbsp;</span>
1537
- <span class="cline-any cline-no">&nbsp;</span>
1538
- <span class="cline-any cline-no">&nbsp;</span>
1539
- <span class="cline-any cline-no">&nbsp;</span>
1540
- <span class="cline-any cline-no">&nbsp;</span>
1541
- <span class="cline-any cline-neutral">&nbsp;</span>
1542
- <span class="cline-any cline-no">&nbsp;</span>
1543
- <span class="cline-any cline-no">&nbsp;</span>
1544
- <span class="cline-any cline-no">&nbsp;</span>
1545
- <span class="cline-any cline-neutral">&nbsp;</span>
1546
- <span class="cline-any cline-neutral">&nbsp;</span>
1547
- <span class="cline-any cline-neutral">&nbsp;</span>
1548
- <span class="cline-any cline-neutral">&nbsp;</span>
1549
- <span class="cline-any cline-neutral">&nbsp;</span>
1550
- <span class="cline-any cline-neutral">&nbsp;</span>
1551
- <span class="cline-any cline-no">&nbsp;</span>
1552
- <span class="cline-any cline-no">&nbsp;</span>
1553
- <span class="cline-any cline-neutral">&nbsp;</span>
1554
- <span class="cline-any cline-no">&nbsp;</span>
1555
- <span class="cline-any cline-no">&nbsp;</span>
1556
- <span class="cline-any cline-neutral">&nbsp;</span>
1557
- <span class="cline-any cline-no">&nbsp;</span>
1558
- <span class="cline-any cline-no">&nbsp;</span>
1559
- <span class="cline-any cline-neutral">&nbsp;</span>
1560
- <span class="cline-any cline-no">&nbsp;</span>
1561
- <span class="cline-any cline-no">&nbsp;</span>
1562
- <span class="cline-any cline-neutral">&nbsp;</span>
1563
- <span class="cline-any cline-no">&nbsp;</span>
1564
- <span class="cline-any cline-no">&nbsp;</span>
1565
- <span class="cline-any cline-neutral">&nbsp;</span>
1566
- <span class="cline-any cline-no">&nbsp;</span>
1567
- <span class="cline-any cline-no">&nbsp;</span>
1568
- <span class="cline-any cline-neutral">&nbsp;</span>
1569
- <span class="cline-any cline-no">&nbsp;</span>
1570
- <span class="cline-any cline-no">&nbsp;</span>
1571
- <span class="cline-any cline-neutral">&nbsp;</span>
1572
- <span class="cline-any cline-no">&nbsp;</span>
1573
- <span class="cline-any cline-no">&nbsp;</span>
1574
- <span class="cline-any cline-neutral">&nbsp;</span>
1575
- <span class="cline-any cline-no">&nbsp;</span>
1576
- <span class="cline-any cline-no">&nbsp;</span>
1577
- <span class="cline-any cline-neutral">&nbsp;</span>
1578
- <span class="cline-any cline-no">&nbsp;</span>
1579
- <span class="cline-any cline-no">&nbsp;</span>
1580
- <span class="cline-any cline-no">&nbsp;</span>
1581
- <span class="cline-any cline-neutral">&nbsp;</span>
1582
- <span class="cline-any cline-no">&nbsp;</span>
1583
- <span class="cline-any cline-no">&nbsp;</span>
1584
- <span class="cline-any cline-neutral">&nbsp;</span>
1585
- <span class="cline-any cline-no">&nbsp;</span>
1586
- <span class="cline-any cline-no">&nbsp;</span>
1587
- <span class="cline-any cline-neutral">&nbsp;</span>
1588
- <span class="cline-any cline-no">&nbsp;</span>
1589
- <span class="cline-any cline-no">&nbsp;</span>
1590
- <span class="cline-any cline-neutral">&nbsp;</span>
1591
- <span class="cline-any cline-no">&nbsp;</span>
1592
- <span class="cline-any cline-no">&nbsp;</span>
1593
- <span class="cline-any cline-neutral">&nbsp;</span>
1594
- <span class="cline-any cline-no">&nbsp;</span>
1595
- <span class="cline-any cline-no">&nbsp;</span>
1596
- <span class="cline-any cline-neutral">&nbsp;</span>
1597
- <span class="cline-any cline-no">&nbsp;</span>
1598
- <span class="cline-any cline-no">&nbsp;</span>
1599
- <span class="cline-any cline-neutral">&nbsp;</span>
1600
- <span class="cline-any cline-no">&nbsp;</span>
1601
- <span class="cline-any cline-no">&nbsp;</span>
1602
- <span class="cline-any cline-neutral">&nbsp;</span>
1603
- <span class="cline-any cline-no">&nbsp;</span>
1604
- <span class="cline-any cline-no">&nbsp;</span>
1605
- <span class="cline-any cline-neutral">&nbsp;</span>
1606
- <span class="cline-any cline-no">&nbsp;</span>
1607
- <span class="cline-any cline-neutral">&nbsp;</span>
1608
- <span class="cline-any cline-neutral">&nbsp;</span>
1609
- <span class="cline-any cline-no">&nbsp;</span>
1610
- <span class="cline-any cline-neutral">&nbsp;</span>
1611
- <span class="cline-any cline-neutral">&nbsp;</span>
1612
- <span class="cline-any cline-neutral">&nbsp;</span>
1613
- <span class="cline-any cline-neutral">&nbsp;</span>
1614
- <span class="cline-any cline-no">&nbsp;</span>
1615
- <span class="cline-any cline-no">&nbsp;</span>
1616
- <span class="cline-any cline-neutral">&nbsp;</span>
1617
- <span class="cline-any cline-neutral">&nbsp;</span>
1618
- <span class="cline-any cline-no">&nbsp;</span>
1619
- <span class="cline-any cline-no">&nbsp;</span>
1620
- <span class="cline-any cline-no">&nbsp;</span>
1621
- <span class="cline-any cline-neutral">&nbsp;</span>
1622
- <span class="cline-any cline-no">&nbsp;</span>
1623
- <span class="cline-any cline-no">&nbsp;</span>
1624
- <span class="cline-any cline-neutral">&nbsp;</span>
1625
- <span class="cline-any cline-no">&nbsp;</span>
1626
- <span class="cline-any cline-no">&nbsp;</span>
1627
- <span class="cline-any cline-neutral">&nbsp;</span>
1628
- <span class="cline-any cline-neutral">&nbsp;</span>
1629
- <span class="cline-any cline-neutral">&nbsp;</span>
1630
- <span class="cline-any cline-neutral">&nbsp;</span>
1631
- <span class="cline-any cline-yes">1x</span>
1632
- <span class="cline-any cline-yes">1x</span>
1633
- <span class="cline-any cline-neutral">&nbsp;</span>
1634
- <span class="cline-any cline-yes">1x</span>
1635
- <span class="cline-any cline-no">&nbsp;</span>
1636
- <span class="cline-any cline-no">&nbsp;</span>
1637
- <span class="cline-any cline-no">&nbsp;</span>
1638
- <span class="cline-any cline-no">&nbsp;</span>
1639
- <span class="cline-any cline-neutral">&nbsp;</span>
1640
- <span class="cline-any cline-no">&nbsp;</span>
1641
- <span class="cline-any cline-no">&nbsp;</span>
1642
- <span class="cline-any cline-neutral">&nbsp;</span>
1643
- <span class="cline-any cline-no">&nbsp;</span>
1644
- <span class="cline-any cline-neutral">&nbsp;</span>
1645
- <span class="cline-any cline-neutral">&nbsp;</span>
1646
- <span class="cline-any cline-neutral">&nbsp;</span>
1647
- <span class="cline-any cline-neutral">&nbsp;</span>
1648
- <span class="cline-any cline-neutral">&nbsp;</span>
1649
- <span class="cline-any cline-neutral">&nbsp;</span>
1650
- <span class="cline-any cline-neutral">&nbsp;</span>
1651
- <span class="cline-any cline-no">&nbsp;</span>
1652
- <span class="cline-any cline-no">&nbsp;</span>
1653
- <span class="cline-any cline-no">&nbsp;</span>
1654
- <span class="cline-any cline-no">&nbsp;</span>
1655
- <span class="cline-any cline-neutral">&nbsp;</span>
1656
- <span class="cline-any cline-no">&nbsp;</span>
1657
- <span class="cline-any cline-no">&nbsp;</span>
1658
- <span class="cline-any cline-no">&nbsp;</span>
1659
- <span class="cline-any cline-no">&nbsp;</span>
1660
- <span class="cline-any cline-no">&nbsp;</span>
1661
- <span class="cline-any cline-no">&nbsp;</span>
1662
- <span class="cline-any cline-no">&nbsp;</span>
1663
- <span class="cline-any cline-no">&nbsp;</span>
1664
- <span class="cline-any cline-no">&nbsp;</span>
1665
- <span class="cline-any cline-no">&nbsp;</span>
1666
- <span class="cline-any cline-neutral">&nbsp;</span>
1667
- <span class="cline-any cline-neutral">&nbsp;</span>
1668
- <span class="cline-any cline-no">&nbsp;</span>
1669
- <span class="cline-any cline-no">&nbsp;</span>
1670
- <span class="cline-any cline-no">&nbsp;</span>
1671
- <span class="cline-any cline-neutral">&nbsp;</span>
1672
- <span class="cline-any cline-no">&nbsp;</span>
1673
- <span class="cline-any cline-no">&nbsp;</span>
1674
- <span class="cline-any cline-no">&nbsp;</span>
1675
- <span class="cline-any cline-no">&nbsp;</span>
1676
- <span class="cline-any cline-no">&nbsp;</span>
1677
- <span class="cline-any cline-no">&nbsp;</span>
1678
- <span class="cline-any cline-no">&nbsp;</span>
1679
- <span class="cline-any cline-neutral">&nbsp;</span>
1680
- <span class="cline-any cline-neutral">&nbsp;</span>
1681
- <span class="cline-any cline-no">&nbsp;</span>
1682
- <span class="cline-any cline-no">&nbsp;</span>
1683
- <span class="cline-any cline-no">&nbsp;</span>
1684
- <span class="cline-any cline-neutral">&nbsp;</span>
1685
- <span class="cline-any cline-neutral">&nbsp;</span>
1686
- <span class="cline-any cline-no">&nbsp;</span>
1687
- <span class="cline-any cline-no">&nbsp;</span>
1688
- <span class="cline-any cline-no">&nbsp;</span>
1689
- <span class="cline-any cline-no">&nbsp;</span>
1690
- <span class="cline-any cline-no">&nbsp;</span>
1691
- <span class="cline-any cline-no">&nbsp;</span>
1692
- <span class="cline-any cline-neutral">&nbsp;</span>
1693
- <span class="cline-any cline-neutral">&nbsp;</span>
1694
- <span class="cline-any cline-no">&nbsp;</span>
1695
- <span class="cline-any cline-no">&nbsp;</span>
1696
- <span class="cline-any cline-neutral">&nbsp;</span>
1697
- <span class="cline-any cline-neutral">&nbsp;</span>
1698
- <span class="cline-any cline-neutral">&nbsp;</span>
1699
- <span class="cline-any cline-neutral">&nbsp;</span>
1700
- <span class="cline-any cline-neutral">&nbsp;</span>
1701
- <span class="cline-any cline-neutral">&nbsp;</span>
1702
- <span class="cline-any cline-no">&nbsp;</span>
1703
- <span class="cline-any cline-no">&nbsp;</span>
1704
- <span class="cline-any cline-no">&nbsp;</span>
1705
- <span class="cline-any cline-no">&nbsp;</span>
1706
- <span class="cline-any cline-neutral">&nbsp;</span>
1707
- <span class="cline-any cline-no">&nbsp;</span>
1708
- <span class="cline-any cline-no">&nbsp;</span>
1709
- <span class="cline-any cline-neutral">&nbsp;</span>
1710
- <span class="cline-any cline-no">&nbsp;</span>
1711
- <span class="cline-any cline-neutral">&nbsp;</span>
1712
- <span class="cline-any cline-neutral">&nbsp;</span>
1713
- <span class="cline-any cline-no">&nbsp;</span>
1714
- <span class="cline-any cline-no">&nbsp;</span>
1715
- <span class="cline-any cline-no">&nbsp;</span>
1716
- <span class="cline-any cline-no">&nbsp;</span>
1717
- <span class="cline-any cline-no">&nbsp;</span>
1718
- <span class="cline-any cline-no">&nbsp;</span>
1719
- <span class="cline-any cline-no">&nbsp;</span>
1720
- <span class="cline-any cline-no">&nbsp;</span>
1721
- <span class="cline-any cline-neutral">&nbsp;</span>
1722
- <span class="cline-any cline-no">&nbsp;</span>
1723
- <span class="cline-any cline-no">&nbsp;</span>
1724
- <span class="cline-any cline-no">&nbsp;</span>
1725
- <span class="cline-any cline-no">&nbsp;</span>
1726
- <span class="cline-any cline-no">&nbsp;</span>
1727
- <span class="cline-any cline-neutral">&nbsp;</span>
1728
- <span class="cline-any cline-neutral">&nbsp;</span>
1729
- <span class="cline-any cline-no">&nbsp;</span>
1730
- <span class="cline-any cline-no">&nbsp;</span>
1731
- <span class="cline-any cline-neutral">&nbsp;</span>
1732
- <span class="cline-any cline-neutral">&nbsp;</span>
1733
- <span class="cline-any cline-neutral">&nbsp;</span>
1734
- <span class="cline-any cline-no">&nbsp;</span>
1735
- <span class="cline-any cline-no">&nbsp;</span>
1736
- <span class="cline-any cline-neutral">&nbsp;</span>
1737
- <span class="cline-any cline-neutral">&nbsp;</span>
1738
- <span class="cline-any cline-no">&nbsp;</span>
1739
- <span class="cline-any cline-no">&nbsp;</span>
1740
- <span class="cline-any cline-no">&nbsp;</span>
1741
- <span class="cline-any cline-no">&nbsp;</span>
1742
- <span class="cline-any cline-no">&nbsp;</span>
1743
- <span class="cline-any cline-neutral">&nbsp;</span>
1744
- <span class="cline-any cline-neutral">&nbsp;</span>
1745
- <span class="cline-any cline-no">&nbsp;</span>
1746
- <span class="cline-any cline-no">&nbsp;</span>
1747
- <span class="cline-any cline-no">&nbsp;</span>
1748
- <span class="cline-any cline-neutral">&nbsp;</span>
1749
- <span class="cline-any cline-neutral">&nbsp;</span>
1750
- <span class="cline-any cline-no">&nbsp;</span>
1751
- <span class="cline-any cline-no">&nbsp;</span>
1752
- <span class="cline-any cline-neutral">&nbsp;</span>
1753
- <span class="cline-any cline-no">&nbsp;</span>
1754
- <span class="cline-any cline-no">&nbsp;</span>
1755
- <span class="cline-any cline-no">&nbsp;</span>
1756
- <span class="cline-any cline-no">&nbsp;</span>
1757
- <span class="cline-any cline-no">&nbsp;</span>
1758
- <span class="cline-any cline-no">&nbsp;</span>
1759
- <span class="cline-any cline-neutral">&nbsp;</span>
1760
- <span class="cline-any cline-neutral">&nbsp;</span>
1761
- <span class="cline-any cline-no">&nbsp;</span>
1762
- <span class="cline-any cline-no">&nbsp;</span>
1763
- <span class="cline-any cline-neutral">&nbsp;</span>
1764
- <span class="cline-any cline-neutral">&nbsp;</span>
1765
- <span class="cline-any cline-no">&nbsp;</span>
1766
- <span class="cline-any cline-no">&nbsp;</span>
1767
- <span class="cline-any cline-no">&nbsp;</span>
1768
- <span class="cline-any cline-neutral">&nbsp;</span>
1769
- <span class="cline-any cline-no">&nbsp;</span>
1770
- <span class="cline-any cline-no">&nbsp;</span>
1771
- <span class="cline-any cline-no">&nbsp;</span>
1772
- <span class="cline-any cline-no">&nbsp;</span>
1773
- <span class="cline-any cline-no">&nbsp;</span>
1774
- <span class="cline-any cline-no">&nbsp;</span>
1775
- <span class="cline-any cline-neutral">&nbsp;</span>
1776
- <span class="cline-any cline-neutral">&nbsp;</span>
1777
- <span class="cline-any cline-neutral">&nbsp;</span>
1778
- <span class="cline-any cline-neutral">&nbsp;</span>
1779
- <span class="cline-any cline-neutral">&nbsp;</span>
1780
- <span class="cline-any cline-neutral">&nbsp;</span>
1781
- <span class="cline-any cline-neutral">&nbsp;</span>
1782
- <span class="cline-any cline-neutral">&nbsp;</span>
1783
- <span class="cline-any cline-neutral">&nbsp;</span>
1784
- <span class="cline-any cline-neutral">&nbsp;</span>
1785
- <span class="cline-any cline-neutral">&nbsp;</span>
1786
- <span class="cline-any cline-neutral">&nbsp;</span>
1787
- <span class="cline-any cline-neutral">&nbsp;</span>
1788
- <span class="cline-any cline-neutral">&nbsp;</span>
1789
- <span class="cline-any cline-neutral">&nbsp;</span>
1790
- <span class="cline-any cline-neutral">&nbsp;</span>
1791
- <span class="cline-any cline-no">&nbsp;</span>
1792
- <span class="cline-any cline-neutral">&nbsp;</span>
1793
- <span class="cline-any cline-no">&nbsp;</span>
1794
- <span class="cline-any cline-no">&nbsp;</span>
1795
- <span class="cline-any cline-no">&nbsp;</span>
1796
- <span class="cline-any cline-no">&nbsp;</span>
1797
- <span class="cline-any cline-neutral">&nbsp;</span>
1798
- <span class="cline-any cline-no">&nbsp;</span>
1799
- <span class="cline-any cline-no">&nbsp;</span>
1800
- <span class="cline-any cline-neutral">&nbsp;</span>
1801
- <span class="cline-any cline-neutral">&nbsp;</span>
1802
- <span class="cline-any cline-no">&nbsp;</span>
1803
- <span class="cline-any cline-no">&nbsp;</span>
1804
- <span class="cline-any cline-no">&nbsp;</span>
1805
- <span class="cline-any cline-neutral">&nbsp;</span>
1806
- <span class="cline-any cline-no">&nbsp;</span>
1807
- <span class="cline-any cline-no">&nbsp;</span>
1808
- <span class="cline-any cline-neutral">&nbsp;</span>
1809
- <span class="cline-any cline-no">&nbsp;</span>
1810
- <span class="cline-any cline-neutral">&nbsp;</span>
1811
- <span class="cline-any cline-no">&nbsp;</span>
1812
- <span class="cline-any cline-no">&nbsp;</span>
1813
- <span class="cline-any cline-no">&nbsp;</span>
1814
- <span class="cline-any cline-neutral">&nbsp;</span>
1815
- <span class="cline-any cline-neutral">&nbsp;</span>
1816
- <span class="cline-any cline-no">&nbsp;</span>
1817
- <span class="cline-any cline-neutral">&nbsp;</span>
1818
- <span class="cline-any cline-no">&nbsp;</span>
1819
- <span class="cline-any cline-neutral">&nbsp;</span>
1820
- <span class="cline-any cline-no">&nbsp;</span>
1821
- <span class="cline-any cline-no">&nbsp;</span>
1822
- <span class="cline-any cline-no">&nbsp;</span>
1823
- <span class="cline-any cline-neutral">&nbsp;</span>
1824
- <span class="cline-any cline-neutral">&nbsp;</span>
1825
- <span class="cline-any cline-no">&nbsp;</span>
1826
- <span class="cline-any cline-no">&nbsp;</span>
1827
- <span class="cline-any cline-no">&nbsp;</span>
1828
- <span class="cline-any cline-no">&nbsp;</span>
1829
- <span class="cline-any cline-neutral">&nbsp;</span>
1830
- <span class="cline-any cline-no">&nbsp;</span>
1831
- <span class="cline-any cline-no">&nbsp;</span>
1832
- <span class="cline-any cline-neutral">&nbsp;</span>
1833
- <span class="cline-any cline-neutral">&nbsp;</span>
1834
- <span class="cline-any cline-neutral">&nbsp;</span>
1835
- <span class="cline-any cline-no">&nbsp;</span>
1836
- <span class="cline-any cline-no">&nbsp;</span>
1837
- <span class="cline-any cline-neutral">&nbsp;</span>
1838
- <span class="cline-any cline-neutral">&nbsp;</span>
1839
- <span class="cline-any cline-no">&nbsp;</span>
1840
- <span class="cline-any cline-no">&nbsp;</span>
1841
- <span class="cline-any cline-no">&nbsp;</span>
1842
- <span class="cline-any cline-neutral">&nbsp;</span>
1843
- <span class="cline-any cline-no">&nbsp;</span>
1844
- <span class="cline-any cline-no">&nbsp;</span>
1845
- <span class="cline-any cline-no">&nbsp;</span>
1846
- <span class="cline-any cline-neutral">&nbsp;</span>
1847
- <span class="cline-any cline-neutral">&nbsp;</span>
1848
- <span class="cline-any cline-neutral">&nbsp;</span>
1849
- <span class="cline-any cline-neutral">&nbsp;</span>
1850
- <span class="cline-any cline-neutral">&nbsp;</span>
1851
- <span class="cline-any cline-no">&nbsp;</span>
1852
- <span class="cline-any cline-no">&nbsp;</span>
1853
- <span class="cline-any cline-neutral">&nbsp;</span>
1854
- <span class="cline-any cline-neutral">&nbsp;</span>
1855
- <span class="cline-any cline-neutral">&nbsp;</span>
1856
- <span class="cline-any cline-neutral">&nbsp;</span>
1857
- <span class="cline-any cline-neutral">&nbsp;</span>
1858
- <span class="cline-any cline-neutral">&nbsp;</span>
1859
- <span class="cline-any cline-neutral">&nbsp;</span>
1860
- <span class="cline-any cline-no">&nbsp;</span>
1861
- <span class="cline-any cline-neutral">&nbsp;</span>
1862
- <span class="cline-any cline-neutral">&nbsp;</span>
1863
- <span class="cline-any cline-neutral">&nbsp;</span>
1864
- <span class="cline-any cline-neutral">&nbsp;</span>
1865
- <span class="cline-any cline-neutral">&nbsp;</span>
1866
- <span class="cline-any cline-neutral">&nbsp;</span>
1867
- <span class="cline-any cline-neutral">&nbsp;</span>
1868
- <span class="cline-any cline-neutral">&nbsp;</span>
1869
- <span class="cline-any cline-neutral">&nbsp;</span>
1870
- <span class="cline-any cline-no">&nbsp;</span>
1871
- <span class="cline-any cline-no">&nbsp;</span>
1872
- <span class="cline-any cline-neutral">&nbsp;</span>
1873
- <span class="cline-any cline-neutral">&nbsp;</span>
1874
- <span class="cline-any cline-neutral">&nbsp;</span>
1875
- <span class="cline-any cline-neutral">&nbsp;</span>
1876
- <span class="cline-any cline-neutral">&nbsp;</span>
1877
- <span class="cline-any cline-no">&nbsp;</span>
1878
- <span class="cline-any cline-neutral">&nbsp;</span>
1879
- <span class="cline-any cline-neutral">&nbsp;</span>
1880
- <span class="cline-any cline-no">&nbsp;</span>
1881
- <span class="cline-any cline-no">&nbsp;</span>
1882
- <span class="cline-any cline-neutral">&nbsp;</span>
1883
- <span class="cline-any cline-neutral">&nbsp;</span>
1884
- <span class="cline-any cline-neutral">&nbsp;</span>
1885
- <span class="cline-any cline-neutral">&nbsp;</span>
1886
- <span class="cline-any cline-no">&nbsp;</span>
1887
- <span class="cline-any cline-neutral">&nbsp;</span>
1888
- <span class="cline-any cline-neutral">&nbsp;</span>
1889
- <span class="cline-any cline-neutral">&nbsp;</span>
1890
- <span class="cline-any cline-neutral">&nbsp;</span>
1891
- <span class="cline-any cline-neutral">&nbsp;</span>
1892
- <span class="cline-any cline-no">&nbsp;</span>
1893
- <span class="cline-any cline-no">&nbsp;</span>
1894
- <span class="cline-any cline-neutral">&nbsp;</span>
1895
- <span class="cline-any cline-neutral">&nbsp;</span>
1896
- <span class="cline-any cline-neutral">&nbsp;</span>
1897
- <span class="cline-any cline-neutral">&nbsp;</span>
1898
- <span class="cline-any cline-neutral">&nbsp;</span>
1899
- <span class="cline-any cline-neutral">&nbsp;</span>
1900
- <span class="cline-any cline-neutral">&nbsp;</span>
1901
- <span class="cline-any cline-neutral">&nbsp;</span>
1902
- <span class="cline-any cline-neutral">&nbsp;</span>
1903
- <span class="cline-any cline-neutral">&nbsp;</span>
1904
- <span class="cline-any cline-no">&nbsp;</span>
1905
- <span class="cline-any cline-neutral">&nbsp;</span>
1906
- <span class="cline-any cline-no">&nbsp;</span>
1907
- <span class="cline-any cline-no">&nbsp;</span>
1908
- <span class="cline-any cline-no">&nbsp;</span>
1909
- <span class="cline-any cline-no">&nbsp;</span>
1910
- <span class="cline-any cline-neutral">&nbsp;</span>
1911
- <span class="cline-any cline-no">&nbsp;</span>
1912
- <span class="cline-any cline-neutral">&nbsp;</span>
1913
- <span class="cline-any cline-no">&nbsp;</span>
1914
- <span class="cline-any cline-neutral">&nbsp;</span>
1915
- <span class="cline-any cline-no">&nbsp;</span>
1916
- <span class="cline-any cline-neutral">&nbsp;</span>
1917
- <span class="cline-any cline-no">&nbsp;</span>
1918
- <span class="cline-any cline-neutral">&nbsp;</span>
1919
- <span class="cline-any cline-neutral">&nbsp;</span>
1920
- <span class="cline-any cline-neutral">&nbsp;</span>
1921
- <span class="cline-any cline-no">&nbsp;</span>
1922
- <span class="cline-any cline-no">&nbsp;</span>
1923
- <span class="cline-any cline-no">&nbsp;</span>
1924
- <span class="cline-any cline-no">&nbsp;</span>
1925
- <span class="cline-any cline-neutral">&nbsp;</span>
1926
- <span class="cline-any cline-no">&nbsp;</span>
1927
- <span class="cline-any cline-neutral">&nbsp;</span>
1928
- <span class="cline-any cline-no">&nbsp;</span>
1929
- <span class="cline-any cline-neutral">&nbsp;</span>
1930
- <span class="cline-any cline-neutral">&nbsp;</span>
1931
- <span class="cline-any cline-neutral">&nbsp;</span>
1932
- <span class="cline-any cline-neutral">&nbsp;</span>
1933
- <span class="cline-any cline-neutral">&nbsp;</span>
1934
- <span class="cline-any cline-neutral">&nbsp;</span>
1935
- <span class="cline-any cline-neutral">&nbsp;</span>
1936
- <span class="cline-any cline-neutral">&nbsp;</span>
1937
- <span class="cline-any cline-neutral">&nbsp;</span>
1938
- <span class="cline-any cline-neutral">&nbsp;</span>
1939
- <span class="cline-any cline-neutral">&nbsp;</span>
1940
- <span class="cline-any cline-neutral">&nbsp;</span>
1941
- <span class="cline-any cline-neutral">&nbsp;</span>
1942
- <span class="cline-any cline-yes">1x</span>
1943
- <span class="cline-any cline-yes">1x</span>
1944
- <span class="cline-any cline-yes">1x</span>
1945
- <span class="cline-any cline-neutral">&nbsp;</span>
1946
- <span class="cline-any cline-neutral">&nbsp;</span>
1947
- <span class="cline-any cline-neutral">&nbsp;</span>
1948
- <span class="cline-any cline-neutral">&nbsp;</span>
1949
- <span class="cline-any cline-neutral">&nbsp;</span>
1950
- <span class="cline-any cline-neutral">&nbsp;</span>
1951
- <span class="cline-any cline-neutral">&nbsp;</span>
1952
- <span class="cline-any cline-neutral">&nbsp;</span>
1953
- <span class="cline-any cline-neutral">&nbsp;</span>
1954
- <span class="cline-any cline-yes">1x</span>
1955
- <span class="cline-any cline-yes">1x</span>
1956
- <span class="cline-any cline-yes">1x</span>
1957
- <span class="cline-any cline-yes">1x</span>
1958
- <span class="cline-any cline-yes">1x</span>
1959
- <span class="cline-any cline-neutral">&nbsp;</span>
1960
- <span class="cline-any cline-neutral">&nbsp;</span>
1961
- <span class="cline-any cline-no">&nbsp;</span>
1962
- <span class="cline-any cline-neutral">&nbsp;</span>
1963
- <span class="cline-any cline-no">&nbsp;</span>
1964
- <span class="cline-any cline-no">&nbsp;</span>
1965
- <span class="cline-any cline-no">&nbsp;</span>
1966
- <span class="cline-any cline-neutral">&nbsp;</span>
1967
- <span class="cline-any cline-neutral">&nbsp;</span>
1968
- <span class="cline-any cline-no">&nbsp;</span>
1969
- <span class="cline-any cline-neutral">&nbsp;</span>
1970
- <span class="cline-any cline-neutral">&nbsp;</span>
1971
- <span class="cline-any cline-neutral">&nbsp;</span>
1972
- <span class="cline-any cline-no">&nbsp;</span>
1973
- <span class="cline-any cline-no">&nbsp;</span>
1974
- <span class="cline-any cline-no">&nbsp;</span>
1975
- <span class="cline-any cline-no">&nbsp;</span>
1976
- <span class="cline-any cline-neutral">&nbsp;</span>
1977
- <span class="cline-any cline-neutral">&nbsp;</span>
1978
- <span class="cline-any cline-neutral">&nbsp;</span>
1979
- <span class="cline-any cline-no">&nbsp;</span>
1980
- <span class="cline-any cline-no">&nbsp;</span>
1981
- <span class="cline-any cline-no">&nbsp;</span>
1982
- <span class="cline-any cline-no">&nbsp;</span>
1983
- <span class="cline-any cline-neutral">&nbsp;</span>
1984
- <span class="cline-any cline-no">&nbsp;</span>
1985
- <span class="cline-any cline-no">&nbsp;</span>
1986
- <span class="cline-any cline-no">&nbsp;</span>
1987
- <span class="cline-any cline-no">&nbsp;</span>
1988
- <span class="cline-any cline-no">&nbsp;</span>
1989
- <span class="cline-any cline-neutral">&nbsp;</span>
1990
- <span class="cline-any cline-no">&nbsp;</span>
1991
- <span class="cline-any cline-no">&nbsp;</span>
1992
- <span class="cline-any cline-no">&nbsp;</span>
1993
- <span class="cline-any cline-no">&nbsp;</span>
1994
- <span class="cline-any cline-no">&nbsp;</span>
1995
- <span class="cline-any cline-no">&nbsp;</span>
1996
- <span class="cline-any cline-no">&nbsp;</span>
1997
- <span class="cline-any cline-neutral">&nbsp;</span>
1998
- <span class="cline-any cline-neutral">&nbsp;</span>
1999
- <span class="cline-any cline-no">&nbsp;</span>
2000
- <span class="cline-any cline-no">&nbsp;</span>
2001
- <span class="cline-any cline-no">&nbsp;</span>
2002
- <span class="cline-any cline-neutral">&nbsp;</span>
2003
- <span class="cline-any cline-neutral">&nbsp;</span>
2004
- <span class="cline-any cline-no">&nbsp;</span>
2005
- <span class="cline-any cline-no">&nbsp;</span>
2006
- <span class="cline-any cline-neutral">&nbsp;</span>
2007
- <span class="cline-any cline-neutral">&nbsp;</span>
2008
- <span class="cline-any cline-neutral">&nbsp;</span>
2009
- <span class="cline-any cline-neutral">&nbsp;</span>
2010
- <span class="cline-any cline-neutral">&nbsp;</span>
2011
- <span class="cline-any cline-no">&nbsp;</span>
2012
- <span class="cline-any cline-no">&nbsp;</span>
2013
- <span class="cline-any cline-no">&nbsp;</span>
2014
- <span class="cline-any cline-neutral">&nbsp;</span>
2015
- <span class="cline-any cline-no">&nbsp;</span>
2016
- <span class="cline-any cline-neutral">&nbsp;</span>
2017
- <span class="cline-any cline-no">&nbsp;</span>
2018
- <span class="cline-any cline-no">&nbsp;</span>
2019
- <span class="cline-any cline-neutral">&nbsp;</span>
2020
- <span class="cline-any cline-no">&nbsp;</span>
2021
- <span class="cline-any cline-neutral">&nbsp;</span>
2022
- <span class="cline-any cline-no">&nbsp;</span>
2023
- <span class="cline-any cline-neutral">&nbsp;</span>
2024
- <span class="cline-any cline-neutral">&nbsp;</span>
2025
- <span class="cline-any cline-no">&nbsp;</span>
2026
- <span class="cline-any cline-neutral">&nbsp;</span>
2027
- <span class="cline-any cline-no">&nbsp;</span>
2028
- <span class="cline-any cline-neutral">&nbsp;</span>
2029
- <span class="cline-any cline-neutral">&nbsp;</span>
2030
- <span class="cline-any cline-neutral">&nbsp;</span>
2031
- <span class="cline-any cline-no">&nbsp;</span>
2032
- <span class="cline-any cline-no">&nbsp;</span>
2033
- <span class="cline-any cline-neutral">&nbsp;</span>
2034
- <span class="cline-any cline-no">&nbsp;</span>
2035
- <span class="cline-any cline-no">&nbsp;</span>
2036
- <span class="cline-any cline-no">&nbsp;</span>
2037
- <span class="cline-any cline-no">&nbsp;</span>
2038
- <span class="cline-any cline-neutral">&nbsp;</span>
2039
- <span class="cline-any cline-neutral">&nbsp;</span>
2040
- <span class="cline-any cline-neutral">&nbsp;</span>
2041
- <span class="cline-any cline-no">&nbsp;</span>
2042
- <span class="cline-any cline-neutral">&nbsp;</span>
2043
- <span class="cline-any cline-neutral">&nbsp;</span>
2044
- <span class="cline-any cline-no">&nbsp;</span>
2045
- <span class="cline-any cline-neutral">&nbsp;</span>
2046
- <span class="cline-any cline-neutral">&nbsp;</span>
2047
- <span class="cline-any cline-no">&nbsp;</span>
2048
- <span class="cline-any cline-neutral">&nbsp;</span>
2049
- <span class="cline-any cline-neutral">&nbsp;</span>
2050
- <span class="cline-any cline-neutral">&nbsp;</span>
2051
- <span class="cline-any cline-neutral">&nbsp;</span>
2052
- <span class="cline-any cline-neutral">&nbsp;</span>
2053
- <span class="cline-any cline-neutral">&nbsp;</span>
2054
- <span class="cline-any cline-neutral">&nbsp;</span>
2055
- <span class="cline-any cline-no">&nbsp;</span>
2056
- <span class="cline-any cline-neutral">&nbsp;</span>
2057
- <span class="cline-any cline-no">&nbsp;</span>
2058
- <span class="cline-any cline-no">&nbsp;</span>
2059
- <span class="cline-any cline-neutral">&nbsp;</span>
2060
- <span class="cline-any cline-neutral">&nbsp;</span>
2061
- <span class="cline-any cline-neutral">&nbsp;</span>
2062
- <span class="cline-any cline-no">&nbsp;</span>
2063
- <span class="cline-any cline-neutral">&nbsp;</span>
2064
- <span class="cline-any cline-no">&nbsp;</span>
2065
- <span class="cline-any cline-no">&nbsp;</span>
2066
- <span class="cline-any cline-no">&nbsp;</span>
2067
- <span class="cline-any cline-neutral">&nbsp;</span>
2068
- <span class="cline-any cline-no">&nbsp;</span>
2069
- <span class="cline-any cline-no">&nbsp;</span>
2070
- <span class="cline-any cline-no">&nbsp;</span>
2071
- <span class="cline-any cline-neutral">&nbsp;</span>
2072
- <span class="cline-any cline-neutral">&nbsp;</span>
2073
- <span class="cline-any cline-neutral">&nbsp;</span>
2074
- <span class="cline-any cline-neutral">&nbsp;</span>
2075
- <span class="cline-any cline-yes">1x</span>
2076
- <span class="cline-any cline-neutral">&nbsp;</span>
2077
- <span class="cline-any cline-no">&nbsp;</span>
2078
- <span class="cline-any cline-neutral">&nbsp;</span>
2079
- <span class="cline-any cline-neutral">&nbsp;</span>
2080
- <span class="cline-any cline-neutral">&nbsp;</span>
2081
- <span class="cline-any cline-neutral">&nbsp;</span>
2082
- <span class="cline-any cline-neutral">&nbsp;</span>
2083
- <span class="cline-any cline-neutral">&nbsp;</span>
2084
- <span class="cline-any cline-neutral">&nbsp;</span>
2085
- <span class="cline-any cline-neutral">&nbsp;</span>
2086
- <span class="cline-any cline-neutral">&nbsp;</span>
2087
- <span class="cline-any cline-neutral">&nbsp;</span>
2088
- <span class="cline-any cline-neutral">&nbsp;</span>
2089
- <span class="cline-any cline-neutral">&nbsp;</span>
2090
- <span class="cline-any cline-neutral">&nbsp;</span>
2091
- <span class="cline-any cline-neutral">&nbsp;</span>
2092
- <span class="cline-any cline-neutral">&nbsp;</span>
2093
- <span class="cline-any cline-neutral">&nbsp;</span>
2094
- <span class="cline-any cline-neutral">&nbsp;</span>
2095
- <span class="cline-any cline-neutral">&nbsp;</span>
2096
- <span class="cline-any cline-neutral">&nbsp;</span>
2097
- <span class="cline-any cline-neutral">&nbsp;</span>
2098
- <span class="cline-any cline-no">&nbsp;</span>
2099
- <span class="cline-any cline-no">&nbsp;</span>
2100
- <span class="cline-any cline-no">&nbsp;</span>
2101
- <span class="cline-any cline-no">&nbsp;</span>
2102
- <span class="cline-any cline-neutral">&nbsp;</span>
2103
- <span class="cline-any cline-no">&nbsp;</span>
2104
- <span class="cline-any cline-no">&nbsp;</span>
2105
- <span class="cline-any cline-no">&nbsp;</span>
2106
- <span class="cline-any cline-no">&nbsp;</span>
2107
- <span class="cline-any cline-neutral">&nbsp;</span>
2108
- <span class="cline-any cline-no">&nbsp;</span>
2109
- <span class="cline-any cline-no">&nbsp;</span>
2110
- <span class="cline-any cline-neutral">&nbsp;</span>
2111
- <span class="cline-any cline-no">&nbsp;</span>
2112
- <span class="cline-any cline-no">&nbsp;</span>
2113
- <span class="cline-any cline-neutral">&nbsp;</span>
2114
- <span class="cline-any cline-no">&nbsp;</span>
2115
- <span class="cline-any cline-no">&nbsp;</span>
2116
- <span class="cline-any cline-neutral">&nbsp;</span>
2117
- <span class="cline-any cline-no">&nbsp;</span>
2118
- <span class="cline-any cline-neutral">&nbsp;</span>
2119
- <span class="cline-any cline-neutral">&nbsp;</span>
2120
- <span class="cline-any cline-neutral">&nbsp;</span>
2121
- <span class="cline-any cline-neutral">&nbsp;</span>
2122
- <span class="cline-any cline-no">&nbsp;</span>
2123
- <span class="cline-any cline-neutral">&nbsp;</span>
2124
- <span class="cline-any cline-neutral">&nbsp;</span>
2125
- <span class="cline-any cline-neutral">&nbsp;</span>
2126
- <span class="cline-any cline-no">&nbsp;</span>
2127
- <span class="cline-any cline-no">&nbsp;</span>
2128
- <span class="cline-any cline-no">&nbsp;</span>
2129
- <span class="cline-any cline-no">&nbsp;</span>
2130
- <span class="cline-any cline-no">&nbsp;</span>
2131
- <span class="cline-any cline-no">&nbsp;</span>
2132
- <span class="cline-any cline-no">&nbsp;</span>
2133
- <span class="cline-any cline-no">&nbsp;</span>
2134
- <span class="cline-any cline-no">&nbsp;</span>
2135
- <span class="cline-any cline-neutral">&nbsp;</span>
2136
- <span class="cline-any cline-neutral">&nbsp;</span>
2137
- <span class="cline-any cline-neutral">&nbsp;</span>
2138
- <span class="cline-any cline-neutral">&nbsp;</span>
2139
- <span class="cline-any cline-no">&nbsp;</span>
2140
- <span class="cline-any cline-no">&nbsp;</span>
2141
- <span class="cline-any cline-no">&nbsp;</span>
2142
- <span class="cline-any cline-no">&nbsp;</span>
2143
- <span class="cline-any cline-no">&nbsp;</span>
2144
- <span class="cline-any cline-no">&nbsp;</span>
2145
- <span class="cline-any cline-neutral">&nbsp;</span>
2146
- <span class="cline-any cline-neutral">&nbsp;</span>
2147
- <span class="cline-any cline-neutral">&nbsp;</span>
2148
- <span class="cline-any cline-no">&nbsp;</span>
2149
- <span class="cline-any cline-neutral">&nbsp;</span>
2150
- <span class="cline-any cline-neutral">&nbsp;</span>
2151
- <span class="cline-any cline-neutral">&nbsp;</span>
2152
- <span class="cline-any cline-neutral">&nbsp;</span>
2153
- <span class="cline-any cline-neutral">&nbsp;</span>
2154
- <span class="cline-any cline-neutral">&nbsp;</span>
2155
- <span class="cline-any cline-neutral">&nbsp;</span>
2156
- <span class="cline-any cline-neutral">&nbsp;</span>
2157
- <span class="cline-any cline-neutral">&nbsp;</span>
2158
- <span class="cline-any cline-no">&nbsp;</span>
2159
- <span class="cline-any cline-no">&nbsp;</span>
2160
- <span class="cline-any cline-neutral">&nbsp;</span>
2161
- <span class="cline-any cline-no">&nbsp;</span>
2162
- <span class="cline-any cline-no">&nbsp;</span>
2163
- <span class="cline-any cline-neutral">&nbsp;</span>
2164
- <span class="cline-any cline-neutral">&nbsp;</span>
2165
- <span class="cline-any cline-neutral">&nbsp;</span>
2166
- <span class="cline-any cline-neutral">&nbsp;</span>
2167
- <span class="cline-any cline-neutral">&nbsp;</span>
2168
- <span class="cline-any cline-no">&nbsp;</span>
2169
- <span class="cline-any cline-neutral">&nbsp;</span>
2170
- <span class="cline-any cline-neutral">&nbsp;</span>
2171
- <span class="cline-any cline-no">&nbsp;</span>
2172
- <span class="cline-any cline-neutral">&nbsp;</span>
2173
- <span class="cline-any cline-no">&nbsp;</span>
2174
- <span class="cline-any cline-no">&nbsp;</span>
2175
- <span class="cline-any cline-no">&nbsp;</span>
2176
- <span class="cline-any cline-neutral">&nbsp;</span>
2177
- <span class="cline-any cline-neutral">&nbsp;</span>
2178
- <span class="cline-any cline-no">&nbsp;</span>
2179
- <span class="cline-any cline-no">&nbsp;</span>
2180
- <span class="cline-any cline-neutral">&nbsp;</span>
2181
- <span class="cline-any cline-neutral">&nbsp;</span>
2182
- <span class="cline-any cline-neutral">&nbsp;</span>
2183
- <span class="cline-any cline-no">&nbsp;</span>
2184
- <span class="cline-any cline-no">&nbsp;</span>
2185
- <span class="cline-any cline-neutral">&nbsp;</span>
2186
- <span class="cline-any cline-neutral">&nbsp;</span>
2187
- <span class="cline-any cline-neutral">&nbsp;</span>
2188
- <span class="cline-any cline-neutral">&nbsp;</span>
2189
- <span class="cline-any cline-neutral">&nbsp;</span>
2190
- <span class="cline-any cline-neutral">&nbsp;</span>
2191
- <span class="cline-any cline-neutral">&nbsp;</span>
2192
- <span class="cline-any cline-neutral">&nbsp;</span>
2193
- <span class="cline-any cline-neutral">&nbsp;</span>
2194
- <span class="cline-any cline-neutral">&nbsp;</span>
2195
- <span class="cline-any cline-neutral">&nbsp;</span>
2196
- <span class="cline-any cline-neutral">&nbsp;</span>
2197
- <span class="cline-any cline-neutral">&nbsp;</span>
2198
- <span class="cline-any cline-neutral">&nbsp;</span>
2199
- <span class="cline-any cline-neutral">&nbsp;</span>
2200
- <span class="cline-any cline-yes">1x</span>
2201
- <span class="cline-any cline-no">&nbsp;</span>
2202
- <span class="cline-any cline-no">&nbsp;</span>
2203
- <span class="cline-any cline-no">&nbsp;</span>
2204
- <span class="cline-any cline-no">&nbsp;</span>
2205
- <span class="cline-any cline-no">&nbsp;</span>
2206
- <span class="cline-any cline-no">&nbsp;</span>
2207
- <span class="cline-any cline-neutral">&nbsp;</span>
2208
- <span class="cline-any cline-no">&nbsp;</span>
2209
- <span class="cline-any cline-no">&nbsp;</span>
2210
- <span class="cline-any cline-no">&nbsp;</span>
2211
- <span class="cline-any cline-neutral">&nbsp;</span>
2212
- <span class="cline-any cline-neutral">&nbsp;</span>
2213
- <span class="cline-any cline-no">&nbsp;</span>
2214
- <span class="cline-any cline-no">&nbsp;</span>
2215
- <span class="cline-any cline-no">&nbsp;</span>
2216
- <span class="cline-any cline-neutral">&nbsp;</span>
2217
- <span class="cline-any cline-neutral">&nbsp;</span>
2218
- <span class="cline-any cline-neutral">&nbsp;</span>
2219
- <span class="cline-any cline-neutral">&nbsp;</span>
2220
- <span class="cline-any cline-neutral">&nbsp;</span>
2221
- <span class="cline-any cline-no">&nbsp;</span>
2222
- <span class="cline-any cline-no">&nbsp;</span>
2223
- <span class="cline-any cline-no">&nbsp;</span>
2224
- <span class="cline-any cline-no">&nbsp;</span>
2225
- <span class="cline-any cline-neutral">&nbsp;</span>
2226
- <span class="cline-any cline-no">&nbsp;</span>
2227
- <span class="cline-any cline-no">&nbsp;</span>
2228
- <span class="cline-any cline-neutral">&nbsp;</span>
2229
- <span class="cline-any cline-no">&nbsp;</span>
2230
- <span class="cline-any cline-no">&nbsp;</span>
2231
- <span class="cline-any cline-no">&nbsp;</span>
2232
- <span class="cline-any cline-no">&nbsp;</span>
2233
- <span class="cline-any cline-neutral">&nbsp;</span>
2234
- <span class="cline-any cline-neutral">&nbsp;</span>
2235
- <span class="cline-any cline-neutral">&nbsp;</span>
2236
- <span class="cline-any cline-neutral">&nbsp;</span>
2237
- <span class="cline-any cline-neutral">&nbsp;</span>
2238
- <span class="cline-any cline-neutral">&nbsp;</span>
2239
- <span class="cline-any cline-no">&nbsp;</span>
2240
- <span class="cline-any cline-no">&nbsp;</span>
2241
- <span class="cline-any cline-no">&nbsp;</span>
2242
- <span class="cline-any cline-neutral">&nbsp;</span>
2243
- <span class="cline-any cline-no">&nbsp;</span>
2244
- <span class="cline-any cline-neutral">&nbsp;</span>
2245
- <span class="cline-any cline-neutral">&nbsp;</span>
2246
- <span class="cline-any cline-neutral">&nbsp;</span>
2247
- <span class="cline-any cline-neutral">&nbsp;</span>
2248
- <span class="cline-any cline-neutral">&nbsp;</span>
2249
- <span class="cline-any cline-no">&nbsp;</span>
2250
- <span class="cline-any cline-no">&nbsp;</span>
2251
- <span class="cline-any cline-no">&nbsp;</span>
2252
- <span class="cline-any cline-no">&nbsp;</span>
2253
- <span class="cline-any cline-no">&nbsp;</span>
2254
- <span class="cline-any cline-no">&nbsp;</span>
2255
- <span class="cline-any cline-neutral">&nbsp;</span>
2256
- <span class="cline-any cline-neutral">&nbsp;</span>
2257
- <span class="cline-any cline-no">&nbsp;</span>
2258
- <span class="cline-any cline-no">&nbsp;</span>
2259
- <span class="cline-any cline-no">&nbsp;</span>
2260
- <span class="cline-any cline-no">&nbsp;</span>
2261
- <span class="cline-any cline-no">&nbsp;</span>
2262
- <span class="cline-any cline-no">&nbsp;</span>
2263
- <span class="cline-any cline-no">&nbsp;</span>
2264
- <span class="cline-any cline-no">&nbsp;</span>
2265
- <span class="cline-any cline-no">&nbsp;</span>
2266
- <span class="cline-any cline-no">&nbsp;</span>
2267
- <span class="cline-any cline-neutral">&nbsp;</span>
2268
- <span class="cline-any cline-neutral">&nbsp;</span>
2269
- <span class="cline-any cline-no">&nbsp;</span>
2270
- <span class="cline-any cline-neutral">&nbsp;</span>
2271
- <span class="cline-any cline-neutral">&nbsp;</span>
2272
- <span class="cline-any cline-neutral">&nbsp;</span>
2273
- <span class="cline-any cline-neutral">&nbsp;</span>
2274
- <span class="cline-any cline-neutral">&nbsp;</span>
2275
- <span class="cline-any cline-no">&nbsp;</span>
2276
- <span class="cline-any cline-no">&nbsp;</span>
2277
- <span class="cline-any cline-no">&nbsp;</span>
2278
- <span class="cline-any cline-neutral">&nbsp;</span>
2279
- <span class="cline-any cline-neutral">&nbsp;</span>
2280
- <span class="cline-any cline-neutral">&nbsp;</span>
2281
- <span class="cline-any cline-neutral">&nbsp;</span>
2282
- <span class="cline-any cline-neutral">&nbsp;</span>
2283
- <span class="cline-any cline-neutral">&nbsp;</span>
2284
- <span class="cline-any cline-no">&nbsp;</span>
2285
- <span class="cline-any cline-no">&nbsp;</span>
2286
- <span class="cline-any cline-neutral">&nbsp;</span>
2287
- <span class="cline-any cline-no">&nbsp;</span>
2288
- <span class="cline-any cline-no">&nbsp;</span>
2289
- <span class="cline-any cline-neutral">&nbsp;</span>
2290
- <span class="cline-any cline-neutral">&nbsp;</span>
2291
- <span class="cline-any cline-no">&nbsp;</span>
2292
- <span class="cline-any cline-no">&nbsp;</span>
2293
- <span class="cline-any cline-no">&nbsp;</span>
2294
- <span class="cline-any cline-no">&nbsp;</span>
2295
- <span class="cline-any cline-neutral">&nbsp;</span>
2296
- <span class="cline-any cline-no">&nbsp;</span>
2297
- <span class="cline-any cline-no">&nbsp;</span>
2298
- <span class="cline-any cline-neutral">&nbsp;</span>
2299
- <span class="cline-any cline-no">&nbsp;</span>
2300
- <span class="cline-any cline-no">&nbsp;</span>
2301
- <span class="cline-any cline-neutral">&nbsp;</span>
2302
- <span class="cline-any cline-no">&nbsp;</span>
2303
- <span class="cline-any cline-no">&nbsp;</span>
2304
- <span class="cline-any cline-neutral">&nbsp;</span>
2305
- <span class="cline-any cline-no">&nbsp;</span>
2306
- <span class="cline-any cline-no">&nbsp;</span>
2307
- <span class="cline-any cline-no">&nbsp;</span>
2308
- <span class="cline-any cline-neutral">&nbsp;</span>
2309
- <span class="cline-any cline-no">&nbsp;</span>
2310
- <span class="cline-any cline-neutral">&nbsp;</span>
2311
- <span class="cline-any cline-neutral">&nbsp;</span>
2312
- <span class="cline-any cline-neutral">&nbsp;</span>
2313
- <span class="cline-any cline-neutral">&nbsp;</span>
2314
- <span class="cline-any cline-no">&nbsp;</span>
2315
- <span class="cline-any cline-neutral">&nbsp;</span>
2316
- <span class="cline-any cline-neutral">&nbsp;</span>
2317
- <span class="cline-any cline-neutral">&nbsp;</span>
2318
- <span class="cline-any cline-neutral">&nbsp;</span>
2319
- <span class="cline-any cline-neutral">&nbsp;</span>
2320
- <span class="cline-any cline-neutral">&nbsp;</span>
2321
- <span class="cline-any cline-neutral">&nbsp;</span>
2322
- <span class="cline-any cline-neutral">&nbsp;</span>
2323
- <span class="cline-any cline-neutral">&nbsp;</span>
2324
- <span class="cline-any cline-neutral">&nbsp;</span>
2325
- <span class="cline-any cline-neutral">&nbsp;</span>
2326
- <span class="cline-any cline-neutral">&nbsp;</span>
2327
- <span class="cline-any cline-neutral">&nbsp;</span>
2328
- <span class="cline-any cline-neutral">&nbsp;</span>
2329
- <span class="cline-any cline-neutral">&nbsp;</span>
2330
- <span class="cline-any cline-neutral">&nbsp;</span>
2331
- <span class="cline-any cline-yes">1x</span>
2332
- <span class="cline-any cline-no">&nbsp;</span>
2333
- <span class="cline-any cline-neutral">&nbsp;</span>
2334
- <span class="cline-any cline-no">&nbsp;</span>
2335
- <span class="cline-any cline-neutral">&nbsp;</span>
2336
- <span class="cline-any cline-neutral">&nbsp;</span>
2337
- <span class="cline-any cline-no">&nbsp;</span>
2338
- <span class="cline-any cline-no">&nbsp;</span>
2339
- <span class="cline-any cline-no">&nbsp;</span>
2340
- <span class="cline-any cline-neutral">&nbsp;</span>
2341
- <span class="cline-any cline-neutral">&nbsp;</span>
2342
- <span class="cline-any cline-neutral">&nbsp;</span>
2343
- <span class="cline-any cline-neutral">&nbsp;</span>
2344
- <span class="cline-any cline-neutral">&nbsp;</span>
2345
- <span class="cline-any cline-neutral">&nbsp;</span>
2346
- <span class="cline-any cline-neutral">&nbsp;</span>
2347
- <span class="cline-any cline-neutral">&nbsp;</span>
2348
- <span class="cline-any cline-neutral">&nbsp;</span>
2349
- <span class="cline-any cline-neutral">&nbsp;</span>
2350
- <span class="cline-any cline-neutral">&nbsp;</span>
2351
- <span class="cline-any cline-neutral">&nbsp;</span>
2352
- <span class="cline-any cline-neutral">&nbsp;</span>
2353
- <span class="cline-any cline-neutral">&nbsp;</span>
2354
- <span class="cline-any cline-neutral">&nbsp;</span>
2355
- <span class="cline-any cline-neutral">&nbsp;</span>
2356
- <span class="cline-any cline-neutral">&nbsp;</span>
2357
- <span class="cline-any cline-neutral">&nbsp;</span>
2358
- <span class="cline-any cline-neutral">&nbsp;</span>
2359
- <span class="cline-any cline-neutral">&nbsp;</span>
2360
- <span class="cline-any cline-neutral">&nbsp;</span>
2361
- <span class="cline-any cline-no">&nbsp;</span>
2362
- <span class="cline-any cline-neutral">&nbsp;</span>
2363
- <span class="cline-any cline-neutral">&nbsp;</span>
2364
- <span class="cline-any cline-no">&nbsp;</span>
2365
- <span class="cline-any cline-neutral">&nbsp;</span>
2366
- <span class="cline-any cline-no">&nbsp;</span>
2367
- <span class="cline-any cline-no">&nbsp;</span>
2368
- <span class="cline-any cline-neutral">&nbsp;</span>
2369
- <span class="cline-any cline-no">&nbsp;</span>
2370
- <span class="cline-any cline-no">&nbsp;</span>
2371
- <span class="cline-any cline-neutral">&nbsp;</span>
2372
- <span class="cline-any cline-no">&nbsp;</span>
2373
- <span class="cline-any cline-no">&nbsp;</span>
2374
- <span class="cline-any cline-neutral">&nbsp;</span>
2375
- <span class="cline-any cline-no">&nbsp;</span>
2376
- <span class="cline-any cline-no">&nbsp;</span>
2377
- <span class="cline-any cline-neutral">&nbsp;</span>
2378
- <span class="cline-any cline-no">&nbsp;</span>
2379
- <span class="cline-any cline-no">&nbsp;</span>
2380
- <span class="cline-any cline-neutral">&nbsp;</span>
2381
- <span class="cline-any cline-neutral">&nbsp;</span>
2382
- <span class="cline-any cline-neutral">&nbsp;</span>
2383
- <span class="cline-any cline-no">&nbsp;</span>
2384
- <span class="cline-any cline-no">&nbsp;</span>
2385
- <span class="cline-any cline-no">&nbsp;</span>
2386
- <span class="cline-any cline-neutral">&nbsp;</span>
2387
- <span class="cline-any cline-no">&nbsp;</span>
2388
- <span class="cline-any cline-no">&nbsp;</span>
2389
- <span class="cline-any cline-no">&nbsp;</span>
2390
- <span class="cline-any cline-neutral">&nbsp;</span>
2391
- <span class="cline-any cline-neutral">&nbsp;</span>
2392
- <span class="cline-any cline-neutral">&nbsp;</span>
2393
- <span class="cline-any cline-neutral">&nbsp;</span>
2394
- <span class="cline-any cline-neutral">&nbsp;</span>
2395
- <span class="cline-any cline-neutral">&nbsp;</span>
2396
- <span class="cline-any cline-neutral">&nbsp;</span>
2397
- <span class="cline-any cline-neutral">&nbsp;</span>
2398
- <span class="cline-any cline-neutral">&nbsp;</span>
2399
- <span class="cline-any cline-neutral">&nbsp;</span>
2400
- <span class="cline-any cline-neutral">&nbsp;</span>
2401
- <span class="cline-any cline-neutral">&nbsp;</span>
2402
- <span class="cline-any cline-neutral">&nbsp;</span>
2403
- <span class="cline-any cline-neutral">&nbsp;</span>
2404
- <span class="cline-any cline-neutral">&nbsp;</span>
2405
- <span class="cline-any cline-neutral">&nbsp;</span>
2406
- <span class="cline-any cline-neutral">&nbsp;</span>
2407
- <span class="cline-any cline-neutral">&nbsp;</span>
2408
- <span class="cline-any cline-neutral">&nbsp;</span>
2409
- <span class="cline-any cline-no">&nbsp;</span>
2410
- <span class="cline-any cline-no">&nbsp;</span>
2411
- <span class="cline-any cline-neutral">&nbsp;</span>
2412
- <span class="cline-any cline-neutral">&nbsp;</span>
2413
- <span class="cline-any cline-no">&nbsp;</span>
2414
- <span class="cline-any cline-no">&nbsp;</span>
2415
- <span class="cline-any cline-no">&nbsp;</span>
2416
- <span class="cline-any cline-no">&nbsp;</span>
2417
- <span class="cline-any cline-neutral">&nbsp;</span>
2418
- <span class="cline-any cline-neutral">&nbsp;</span>
2419
- <span class="cline-any cline-neutral">&nbsp;</span>
2420
- <span class="cline-any cline-yes">1x</span>
2421
- <span class="cline-any cline-no">&nbsp;</span>
2422
- <span class="cline-any cline-no">&nbsp;</span>
2423
- <span class="cline-any cline-neutral">&nbsp;</span>
2424
- <span class="cline-any cline-no">&nbsp;</span>
2425
- <span class="cline-any cline-no">&nbsp;</span>
2426
- <span class="cline-any cline-no">&nbsp;</span>
2427
- <span class="cline-any cline-no">&nbsp;</span>
2428
- <span class="cline-any cline-no">&nbsp;</span>
2429
- <span class="cline-any cline-no">&nbsp;</span>
2430
- <span class="cline-any cline-no">&nbsp;</span>
2431
- <span class="cline-any cline-neutral">&nbsp;</span>
2432
- <span class="cline-any cline-neutral">&nbsp;</span>
2433
- <span class="cline-any cline-neutral">&nbsp;</span>
2434
- <span class="cline-any cline-no">&nbsp;</span>
2435
- <span class="cline-any cline-no">&nbsp;</span>
2436
- <span class="cline-any cline-no">&nbsp;</span>
2437
- <span class="cline-any cline-neutral">&nbsp;</span>
2438
- <span class="cline-any cline-neutral">&nbsp;</span>
2439
- <span class="cline-any cline-neutral">&nbsp;</span>
2440
- <span class="cline-any cline-neutral">&nbsp;</span>
2441
- <span class="cline-any cline-no">&nbsp;</span>
2442
- <span class="cline-any cline-no">&nbsp;</span>
2443
- <span class="cline-any cline-no">&nbsp;</span>
2444
- <span class="cline-any cline-no">&nbsp;</span>
2445
- <span class="cline-any cline-no">&nbsp;</span>
2446
- <span class="cline-any cline-no">&nbsp;</span>
2447
- <span class="cline-any cline-no">&nbsp;</span>
2448
- <span class="cline-any cline-no">&nbsp;</span>
2449
- <span class="cline-any cline-neutral">&nbsp;</span>
2450
- <span class="cline-any cline-no">&nbsp;</span>
2451
- <span class="cline-any cline-no">&nbsp;</span>
2452
- <span class="cline-any cline-no">&nbsp;</span>
2453
- <span class="cline-any cline-no">&nbsp;</span>
2454
- <span class="cline-any cline-no">&nbsp;</span>
2455
- <span class="cline-any cline-no">&nbsp;</span>
2456
- <span class="cline-any cline-no">&nbsp;</span>
2457
- <span class="cline-any cline-no">&nbsp;</span>
2458
- <span class="cline-any cline-neutral">&nbsp;</span>
2459
- <span class="cline-any cline-neutral">&nbsp;</span>
2460
- <span class="cline-any cline-neutral">&nbsp;</span>
2461
- <span class="cline-any cline-neutral">&nbsp;</span>
2462
- <span class="cline-any cline-no">&nbsp;</span>
2463
- <span class="cline-any cline-neutral">&nbsp;</span>
2464
- <span class="cline-any cline-neutral">&nbsp;</span>
2465
- <span class="cline-any cline-neutral">&nbsp;</span>
2466
- <span class="cline-any cline-neutral">&nbsp;</span>
2467
- <span class="cline-any cline-neutral">&nbsp;</span>
2468
- <span class="cline-any cline-neutral">&nbsp;</span>
2469
- <span class="cline-any cline-no">&nbsp;</span>
2470
- <span class="cline-any cline-neutral">&nbsp;</span>
2471
- <span class="cline-any cline-neutral">&nbsp;</span>
2472
- <span class="cline-any cline-neutral">&nbsp;</span>
2473
- <span class="cline-any cline-no">&nbsp;</span>
2474
- <span class="cline-any cline-no">&nbsp;</span>
2475
- <span class="cline-any cline-no">&nbsp;</span>
2476
- <span class="cline-any cline-neutral">&nbsp;</span>
2477
- <span class="cline-any cline-neutral">&nbsp;</span>
2478
- <span class="cline-any cline-neutral">&nbsp;</span>
2479
- <span class="cline-any cline-neutral">&nbsp;</span>
2480
- <span class="cline-any cline-neutral">&nbsp;</span>
2481
- <span class="cline-any cline-neutral">&nbsp;</span>
2482
- <span class="cline-any cline-neutral">&nbsp;</span>
2483
- <span class="cline-any cline-neutral">&nbsp;</span>
2484
- <span class="cline-any cline-yes">1x</span>
2485
- <span class="cline-any cline-no">&nbsp;</span>
2486
- <span class="cline-any cline-no">&nbsp;</span>
2487
- <span class="cline-any cline-no">&nbsp;</span>
2488
- <span class="cline-any cline-no">&nbsp;</span>
2489
- <span class="cline-any cline-neutral">&nbsp;</span>
2490
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { cloneDeep } from 'lodash';
2491
- import { App, LogicItem, Logic, Module, View, ViewElement, Argument, SelectMembers, SyntaxNode, BindDirective, CallLogic, BindAttribute } from '../../concepts';
2492
- import { addBreakpointNodesFromApp } from '../../breakpoint';
2493
- import { getConceptConstructor } from '../../decorators';
2494
- import { config } from '../../config';
2495
- import storageService from './service';
2496
- import { v4 as uuidv4 } from 'uuid';
2497
- import stepRecorder from '../../manager/stepRecorder';
2498
- import * as jsoner from './jsoner';
2499
- /// #if !process.env.NODE_ENV || process.env.BUILD_TARGET === 'node'
2500
- import * as fs from 'fs-extra';
2501
- import type { NaslServer } from 'src/server/naslServer';
2502
- /// #endif
2503
- &nbsp;
2504
- export const batchQuery = storageService.batchQuery;
2505
- export const batchAction = storageService.batchAction;
2506
- export const batchInstruct = storageService.batchInstruct;
2507
- export const breakpoint = storageService.breakpoint;
2508
- &nbsp;
2509
- let tabTimestamp: string;
2510
- export const databaseTypes = storageService.databaseTypes;
2511
- &nbsp;
2512
- export const operationRecordInfoMap: Map&lt;string, any&gt; = new Map();
2513
- &nbsp;
2514
- // 操作栈记录
2515
- export function <span class="fstat-no" title="function not covered" >doOperationRecord(</span>operation: Operation) {
2516
- const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
2517
- &nbsp;
2518
- <span class="cstat-no" title="statement not covered" > request.onupgradeneeded = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2519
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2520
- const objectStore = <span class="cstat-no" title="statement not covered" >db.createObjectStore('operationRecord', { autoIncrement: true });</span>
2521
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('appId', 'appId');</span>
2522
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('timestamp', 'timestamp');</span>
2523
- };
2524
- &nbsp;
2525
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2526
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2527
- const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
2528
- const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
2529
- <span class="cstat-no" title="statement not covered" > operation.appId = operationRecordInfoMap.get('appId');</span>
2530
- <span class="cstat-no" title="statement not covered" > operation.branchId = operationRecordInfoMap.get('branchId');</span>
2531
- <span class="cstat-no" title="statement not covered" > operation.accountId = operationRecordInfoMap.get('accountId');</span>
2532
- <span class="cstat-no" title="statement not covered" > operation.userId = operationRecordInfoMap.get('userId');</span>
2533
- <span class="cstat-no" title="statement not covered" > operation.phone = operationRecordInfoMap.get('phone');</span>
2534
- // 将时间戳添加到记录中
2535
- <span class="cstat-no" title="statement not covered" > operation.timestamp = Date.now();</span>
2536
- // 这份数据不存在向上的引用,因此用cloneDeep没有关系
2537
- <span class="cstat-no" title="statement not covered" > objectStore.put(cloneDeep(operation));</span>
2538
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2539
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2540
- };
2541
- };
2542
- &nbsp;
2543
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >function(e</span>vent) {</span>
2544
- <span class="cstat-no" title="statement not covered" > console.log('Failed to open database');</span>
2545
- };
2546
- }
2547
- &nbsp;
2548
- // 删除失效数据
2549
- async function <span class="fstat-no" title="function not covered" >deleteExpiredRecords(</span>) {
2550
- <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>
2551
- const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
2552
- &nbsp;
2553
- <span class="cstat-no" title="statement not covered" > request.onupgradeneeded = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2554
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2555
- const objectStore = <span class="cstat-no" title="statement not covered" >db.createObjectStore('operationRecord', { autoIncrement: true });</span>
2556
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('appId', 'appId');</span>
2557
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('timestamp', 'timestamp');</span>
2558
- };
2559
- &nbsp;
2560
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2561
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2562
- const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
2563
- const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
2564
- const index = <span class="cstat-no" title="statement not covered" >objectStore.index('timestamp');</span>
2565
- // 设置有效期,默认7天
2566
- const localStorageExpiresAt = <span class="cstat-no" title="statement not covered" >window.localStorage.getItem('expiresAt');</span>
2567
- const expiresAt = <span class="cstat-no" title="statement not covered" >Date.now() - (localStorageExpiresAt ? +localStorageExpiresAt : 7 * 24 * 60 * 60 * 1000);</span>
2568
- const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.upperBound(expiresAt);</span>
2569
- const expiredRecordsRequest = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
2570
- &nbsp;
2571
- <span class="cstat-no" title="statement not covered" > expiredRecordsRequest.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2572
- const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2573
- <span class="cstat-no" title="statement not covered" > if (cursor) {</span>
2574
- <span class="cstat-no" title="statement not covered" > console.log(cursor);</span>
2575
- <span class="cstat-no" title="statement not covered" > objectStore.delete(cursor.primaryKey);</span>
2576
- <span class="cstat-no" title="statement not covered" > cursor.continue();</span>
2577
- } else {
2578
- <span class="cstat-no" title="statement not covered" > resolve(void 0);</span>
2579
- }
2580
- };
2581
- &nbsp;
2582
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2583
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2584
- };
2585
- };
2586
- &nbsp;
2587
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2588
- <span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
2589
- };
2590
- });
2591
- }
2592
- &nbsp;
2593
- // 操作栈查询
2594
- export function <span class="fstat-no" title="function not covered" >operationRecordQuery(</span>app: any) {
2595
- <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>
2596
- const appId = <span class="cstat-no" title="statement not covered" >app?.id;</span>
2597
- const branchId = <span class="cstat-no" title="statement not covered" >app?.__branchId;</span>
2598
- const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
2599
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2600
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2601
- const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readonly');</span>
2602
- const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
2603
- const index = <span class="cstat-no" title="statement not covered" >objectStore.index('appId');</span> // 查询 'appId' 索引
2604
- const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.only(appId);</span>
2605
- const result: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2606
- &nbsp;
2607
- const request = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
2608
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2609
- const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2610
- <span class="cstat-no" title="statement not covered" > if (cursor) {</span>
2611
- const record = <span class="cstat-no" title="statement not covered" >cursor.value;</span>
2612
- const branchId = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('branchId');</span>
2613
- <span class="cstat-no" title="statement not covered" > if (record.branchId === branchId) {</span>
2614
- <span class="cstat-no" title="statement not covered" > result.push(record);</span>
2615
- }
2616
- <span class="cstat-no" title="statement not covered" > cursor.continue();</span>
2617
- } else {
2618
- <span class="cstat-no" title="statement not covered" > console.log('操作记录栈:', result);</span>
2619
- <span class="cstat-no" title="statement not covered" > resolve(result);</span>
2620
- }
2621
- };
2622
- &nbsp;
2623
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2624
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2625
- };
2626
- };
2627
- &nbsp;
2628
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2629
- <span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
2630
- };
2631
- });
2632
- }
2633
- &nbsp;
2634
- // 获取父对象
2635
- function <span class="fstat-no" title="function not covered" >getParentInfo(</span>appJson: any, path: string) {
2636
- const pathArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2637
- <span class="cstat-no" title="statement not covered" > (path?.split('.') || []).forEach(<span class="fstat-no" title="function not covered" >(p</span>athItem: string) =&gt; {</span>
2638
- const arrayPropertyKey = <span class="cstat-no" title="statement not covered" >pathItem.split('[')[0];</span>
2639
- const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
2640
- <span class="cstat-no" title="statement not covered" > if (matchArr) {</span>
2641
- <span class="cstat-no" title="statement not covered" > pathArr.push(arrayPropertyKey, matchArr[0]);</span>
2642
- } else {
2643
- <span class="cstat-no" title="statement not covered" > pathArr.push(pathItem);</span>
2644
- }
2645
- });
2646
- <span class="cstat-no" title="statement not covered" > pathArr.pop();</span>
2647
- let parentPath = <span class="cstat-no" title="statement not covered" >'';</span>
2648
- <span class="cstat-no" title="statement not covered" > pathArr.forEach(<span class="fstat-no" title="function not covered" >(p</span>athItem: string, index: number) =&gt; {</span>
2649
- const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
2650
- <span class="cstat-no" title="statement not covered" > if (matchArr || index === 0) {</span>
2651
- <span class="cstat-no" title="statement not covered" > parentPath += pathItem;</span>
2652
- } else {
2653
- <span class="cstat-no" title="statement not covered" > parentPath += `.${pathItem}`</span>
2654
- }
2655
- });
2656
- const parentNode = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, parentPath);</span>
2657
- <span class="cstat-no" title="statement not covered" > return {</span>
2658
- parentPath,
2659
- parentNode,
2660
- };
2661
- }
2662
- &nbsp;
2663
- // 操作记录回放
2664
- export async function <span class="fstat-no" title="function not covered" >operationRecordPlayback(</span>app: any, action: 'undo' | 'redo') {
2665
- const operationRecord: any = <span class="cstat-no" title="statement not covered" >await operationRecordQuery(app);</span>
2666
- let operationRecordIndex = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('operationRecordIndex');</span>
2667
- <span class="cstat-no" title="statement not covered" > if ([null, undefined].includes(operationRecordIndex)) {</span>
2668
- <span class="cstat-no" title="statement not covered" > operationRecordIndex = operationRecord?.length;</span>
2669
- }
2670
- const appJson = <span class="cstat-no" title="statement not covered" >app.toJSON();</span>
2671
- <span class="cstat-no" title="statement not covered" > if (action === 'undo') {</span>
2672
- <span class="cstat-no" title="statement not covered" > if (operationRecordIndex &gt; 0) {</span>
2673
- const currentRecordItem = <span class="cstat-no" title="statement not covered" >operationRecord?.[operationRecordIndex];</span>
2674
- const { type, action: recordItemAction } = <span class="cstat-no" title="statement not covered" >currentRecordItem || {};</span>
2675
- // 多人协作
2676
- <span class="cstat-no" title="statement not covered" > if (type === 'cooperation' &amp;&amp; recordItemAction === 'confirmPull') {</span>
2677
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},已经进行了多人协作“合并”操作,无法继续对操作栈进行回放!`);</span>
2678
- <span class="cstat-no" title="statement not covered" > return;</span>
2679
- }
2680
- <span class="cstat-no" title="statement not covered" > operationRecordIndex--;</span>
2681
- } else {
2682
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续回放`);</span>
2683
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2684
- <span class="cstat-no" title="statement not covered" > return;</span>
2685
- }
2686
- } else {
2687
- <span class="cstat-no" title="statement not covered" > if (operationRecordIndex &lt; operationRecord?.length) {</span>
2688
- <span class="cstat-no" title="statement not covered" > operationRecordIndex++;</span>
2689
- } else {
2690
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续前进`);</span>
2691
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2692
- <span class="cstat-no" title="statement not covered" > return;</span>
2693
- }
2694
- }
2695
- <span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', operationRecordIndex);</span>
2696
- const currentIndex = <span class="cstat-no" title="statement not covered" >operationRecordIndex;</span>
2697
- <span class="cstat-no" title="statement not covered" > ([...operationRecord].splice(currentIndex, operationRecord?.length) || []).reverse()?.forEach(<span class="fstat-no" title="function not covered" >(r</span>ecordItem: any) =&gt; {</span>
2698
- const { actionItem } = <span class="cstat-no" title="statement not covered" >recordItem || {};</span>
2699
- const { list } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2700
- <span class="cstat-no" title="statement not covered" > [...(list || [])].reverse().forEach(<span class="fstat-no" title="function not covered" >(a</span>ctionItem: any) =&gt; {</span>
2701
- const { path, action, oldObject, parentKey, index: oldIndex } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2702
- const { parentNode } = <span class="cstat-no" title="statement not covered" >getParentInfo(appJson, path);</span>
2703
- const node = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, path);</span>
2704
- <span class="cstat-no" title="statement not covered" > switch (action) {</span>
2705
- case 'create':
2706
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode)) {</span>
2707
- const index = <span class="cstat-no" title="statement not covered" >parentNode.indexOf(node);</span>
2708
- <span class="cstat-no" title="statement not covered" > if (index !== -1) {</span>
2709
- <span class="cstat-no" title="statement not covered" > parentNode.splice(index, 1);</span>
2710
- }
2711
- } else {
2712
- <span class="cstat-no" title="statement not covered" > parentNode[parentKey] = null;</span>
2713
- }
2714
- <span class="cstat-no" title="statement not covered" > break;</span>
2715
- case 'delete':
2716
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode) &amp;&amp; oldIndex !== -1) {</span>
2717
- <span class="cstat-no" title="statement not covered" > parentNode.splice(oldIndex, 0, oldObject);</span>
2718
- } else {
2719
- <span class="cstat-no" title="statement not covered" > parentNode[parentKey] = oldObject;</span>
2720
- }
2721
- <span class="cstat-no" title="statement not covered" > break;</span>
2722
- case 'update':
2723
- <span class="cstat-no" title="statement not covered" > for (const key in oldObject) {</span>
2724
- (<span class="cstat-no" title="statement not covered" >node as any)[key] = oldObject[key] ?? null;</span>
2725
- }
2726
- <span class="cstat-no" title="statement not covered" > break;</span>
2727
- }
2728
- });
2729
- });
2730
- <span class="cstat-no" title="statement not covered" > console.log('当前所处栈位置:', currentIndex);</span>
2731
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2732
- <span class="cstat-no" title="statement not covered" > return appJson;</span>
2733
- }
2734
- &nbsp;
2735
- function <span class="fstat-no" title="function not covered" >getLogic(</span>key: string, app: any, diffLogicList: string[]) {
2736
- <span class="cstat-no" title="statement not covered" > if (!diffLogicList.includes(key)) {</span>
2737
- <span class="cstat-no" title="statement not covered" > diffLogicList.push(key);</span>
2738
- <span class="cstat-no" title="statement not covered" > if (key.startsWith('app')) {</span>
2739
- const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf('.');</span>
2740
- const name = <span class="cstat-no" title="statement not covered" >key.slice(index + 1);</span>
2741
- const logic = <span class="cstat-no" title="statement not covered" >app.logics.find(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >item.name === name)</span>;</span>
2742
- <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
2743
- <span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
2744
- }
2745
- } else <span class="cstat-no" title="statement not covered" >if (key.startsWith('extensions')) {</span>
2746
- const _pathArr = <span class="cstat-no" title="statement not covered" >key.split('.');</span>
2747
- const _name = <span class="cstat-no" title="statement not covered" >_pathArr[1];</span>
2748
- const _path = <span class="cstat-no" title="statement not covered" >_pathArr[3];</span>
2749
- const _list = <span class="cstat-no" title="statement not covered" >app.dependencies;</span>
2750
- const _module = <span class="cstat-no" title="statement not covered" >_list.find(<span class="fstat-no" title="function not covered" >(i</span>t: Module) =&gt; {</span>
2751
- const name = <span class="cstat-no" title="statement not covered" >it.name.replaceAll('-', '_');</span>
2752
- <span class="cstat-no" title="statement not covered" > return name === _name;</span>
2753
- });
2754
- const logic = <span class="cstat-no" title="statement not covered" >_module?.logics?.find(<span class="fstat-no" title="function not covered" >(i</span>tem: Logic) =&gt; <span class="cstat-no" title="statement not covered" >item.name === _path)</span>;</span>
2755
- <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
2756
- <span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
2757
- }
2758
- }
2759
- }
2760
- }
2761
- /* 获取LogicITEM */
2762
- function <span class="fstat-no" title="function not covered" >getStatement(</span>state: any, app: any, diffLogicList: string[]) {
2763
- let logicItems = <span class="cstat-no" title="statement not covered" >[];</span>
2764
- <span class="cstat-no" title="statement not covered" > switch (state.concept) {</span>
2765
- case 'Assignment':
2766
- <span class="cstat-no" title="statement not covered" > logicItems = [state.left, state.right];</span>
2767
- <span class="cstat-no" title="statement not covered" > break;</span>
2768
- case 'IfStatement':
2769
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.consequent, ...state.alternate];</span>
2770
- <span class="cstat-no" title="statement not covered" > break;</span>
2771
- case 'ForEachStatement':
2772
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.body, state.each, state.start, state.end];</span>
2773
- <span class="cstat-no" title="statement not covered" > break;</span>
2774
- case 'Match':
2775
- <span class="cstat-no" title="statement not covered" > logicItems = [state.expression, ...state.cases.map(getStatement).flat(1)];</span>
2776
- <span class="cstat-no" title="statement not covered" > break;</span>
2777
- case 'MatchCase':
2778
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.patterns, ...state.body];</span>
2779
- <span class="cstat-no" title="statement not covered" > break;</span>
2780
- case 'SwitchStatement':
2781
- <span class="cstat-no" title="statement not covered" > logicItems = state.cases.map(getStatement).flat(1);</span>
2782
- <span class="cstat-no" title="statement not covered" > break;</span>
2783
- case 'SwitchCase':
2784
- <span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.consequent];</span>
2785
- <span class="cstat-no" title="statement not covered" > break;</span>
2786
- case 'WhileStatement':
2787
- <span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.body];</span>
2788
- <span class="cstat-no" title="statement not covered" > break;</span>
2789
- case 'CallLogic':
2790
- <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
2791
- <span class="cstat-no" title="statement not covered" > getLogic(state.calleewholeKey, app, diffLogicList);</span>
2792
- <span class="cstat-no" title="statement not covered" > break;</span>
2793
- case 'CallFunction':
2794
- <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
2795
- <span class="cstat-no" title="statement not covered" > break;</span>
2796
- case 'CallInterface':
2797
- <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
2798
- <span class="cstat-no" title="statement not covered" > break;</span>
2799
- case 'ExternalDestination':
2800
- <span class="cstat-no" title="statement not covered" > logicItems = [state.anchor, state.link];</span>
2801
- <span class="cstat-no" title="statement not covered" > break;</span>
2802
- case 'BatchAssignment':
2803
- <span class="cstat-no" title="statement not covered" > logicItems = [state.left?.expression, ...state.left?.members, ...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) =&gt; <span class="cstat-no" title="statement not covered" >[item?.expression, ...item?.members])</span>.flat(1)];</span>
2804
- <span class="cstat-no" title="statement not covered" > break;</span>
2805
- case 'MemberExpression':
2806
- <span class="cstat-no" title="statement not covered" > logicItems = [state.object, state.property];</span>
2807
- <span class="cstat-no" title="statement not covered" > break;</span>
2808
- case 'StringInterpolation':
2809
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.expressions];</span>
2810
- <span class="cstat-no" title="statement not covered" > break;</span>
2811
- case 'NewComposite':
2812
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>];</span>
2813
- <span class="cstat-no" title="statement not covered" > break;</span>
2814
- case 'NewList':
2815
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.items];</span>
2816
- <span class="cstat-no" title="statement not covered" > break;</span>
2817
- default:
2818
- <span class="cstat-no" title="statement not covered" > break;</span>
2819
- }
2820
- &nbsp;
2821
- <span class="cstat-no" title="statement not covered" > return logicItems.filter(<span class="fstat-no" title="function not covered" >(i</span>tem: LogicItem) =&gt; <span class="cstat-no" title="statement not covered" >!!item)</span>;</span>
2822
- }
2823
- &nbsp;
2824
- /* 小程序影响的服务端发布 */
2825
- function <span class="fstat-no" title="function not covered" >getMiniAppChange(</span>target: any, obj: any, action: string) {
2826
- <span class="cstat-no" title="statement not covered" > if (!target.app.miniEnable) {</span>
2827
- <span class="cstat-no" title="statement not covered" > return false;</span>
2828
- }
2829
- /* 分端以后需要改 */
2830
- const len = <span class="cstat-no" title="statement not covered" >target.nodePath?.split('.').length;</span>
2831
- <span class="cstat-no" title="statement not covered" > if (len &gt; 2) {</span>
2832
- <span class="cstat-no" title="statement not covered" > return false;</span>
2833
- }
2834
- <span class="cstat-no" title="statement not covered" > if (action === 'delete') {</span>
2835
- <span class="cstat-no" title="statement not covered" > return true;</span>
2836
- } else {
2837
- <span class="cstat-no" title="statement not covered" > if ('name' in obj || 'title' in obj) {</span>
2838
- <span class="cstat-no" title="statement not covered" > return true;</span>
2839
- }
2840
- }
2841
- }
2842
- &nbsp;
2843
- let aiExecuted = 0;
2844
- let sessionPath = '';
2845
- // AI 生成内容是否被采纳
2846
- const handleAIPoint = <span class="fstat-no" title="function not covered" >(a</span>pp: any, actionItem: any) =&gt; {
2847
- const { actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2848
- <span class="cstat-no" title="statement not covered" > if (aiExecuted &gt; 0) {</span>
2849
- <span class="cstat-no" title="statement not covered" > app.emit('logic:accepted', { ...actionItem, sessionPath });</span>
2850
- <span class="cstat-no" title="statement not covered" > aiExecuted -= 1;</span>
2851
- }
2852
- <span class="cstat-no" title="statement not covered" > if (actionMsg.includes('自然语言生成代码') &amp;&amp; !action) {</span>
2853
- <span class="cstat-no" title="statement not covered" > aiExecuted += 1;</span>
2854
- // eslint-disable-next-line prefer-destructuring
2855
- <span class="cstat-no" title="statement not covered" > sessionPath = actionMsg.match(/:(.*)/)[1];</span>
2856
- }
2857
- }
2858
- &nbsp;
2859
- /**
2860
- * 执行更新
2861
- */
2862
- async function <span class="fstat-no" title="function not covered" >doAction(</span>app: any, actionItem: any) {
2863
- const isOperationRecord = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('isOperationRecord');</span>
2864
- <span class="cstat-no" title="statement not covered" > if (isOperationRecord) {</span>
2865
- <span class="cstat-no" title="statement not covered" > console.log('正在进行操作栈回放操作,如需行任何Nasl操作请刷新页面');</span>
2866
- <span class="cstat-no" title="statement not covered" > return;</span>
2867
- }
2868
- let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2869
- let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2870
- const actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2871
- const allRiskList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2872
- const { list, actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2873
- <span class="cstat-no" title="statement not covered" > handleAIPoint(app, actionItem);</span>
2874
- const itemloop = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(_</span>i: LogicItem, app: any, diffArr: string[]) =&gt; {</span>
2875
- const _l = <span class="cstat-no" title="statement not covered" >getStatement(_i, app, diffArr);</span>
2876
- <span class="cstat-no" title="statement not covered" > if (_l.length) {</span>
2877
- <span class="cstat-no" title="statement not covered" > _l.map(<span class="fstat-no" title="function not covered" >(_</span>ii: LogicItem) =&gt; <span class="cstat-no" title="statement not covered" >itemloop(_ii, app, diffArr))</span>;</span>
2878
- }
2879
- };
2880
- const loopEle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iew: View | ViewElement, checkAuth: boolean) =&gt; {</span>
2881
- <span class="cstat-no" title="statement not covered" > if (view instanceof View) {</span>
2882
- <span class="cstat-no" title="statement not covered" > view?.elements?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
2883
- }
2884
- <span class="cstat-no" title="statement not covered" > view?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
2885
- <span class="cstat-no" title="statement not covered" > if (view instanceof ViewElement) {</span>
2886
- <span class="cstat-no" title="statement not covered" > if (view.bindEvents.length) {</span>
2887
- const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2888
- <span class="cstat-no" title="statement not covered" > view.bindEvents.forEach(<span class="fstat-no" title="function not covered" >(b</span>indEvent) =&gt; {</span>
2889
- <span class="cstat-no" title="statement not covered" > bindEvent.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
2890
- <span class="cstat-no" title="statement not covered" > logic.body.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogicItem) =&gt; <span class="cstat-no" title="statement not covered" >itemloop(logicItem, app, diffArr))</span>;</span>
2891
- });
2892
- });
2893
- const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
2894
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2895
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2896
- }
2897
- }
2898
- <span class="cstat-no" title="statement not covered" > if (view.tag === 'u-uploader' || view.tag === 'van-uploader') {</span>
2899
- const bute = <span class="cstat-no" title="statement not covered" >view?.bindAttrs.find(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'url')</span>;</span>
2900
- const needUpdateBackEnd = <span class="cstat-no" title="statement not covered" >bute?.value?.endsWith('/import') || bute?.value?.includes('/upload/');</span>
2901
- <span class="cstat-no" title="statement not covered" > if (checkAuth) {</span>
2902
- <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd &amp;&amp; !view.view.parentAuth) {</span>
2903
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2904
- }
2905
- } else {
2906
- <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd) {</span>
2907
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2908
- }
2909
- }
2910
- }
2911
- }
2912
- };
2913
- &nbsp;
2914
- const loopEleAuth = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iewElement: ViewElement) =&gt; {</span>
2915
- <span class="cstat-no" title="statement not covered" > viewElement?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: ViewElement) =&gt; {</span>
2916
- const bindDirective = <span class="cstat-no" title="statement not covered" >item?.bindDirectives?.find(</span>
2917
- <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
2918
- )
2919
- <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
2920
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2921
- }
2922
- <span class="cstat-no" title="statement not covered" > loopEleAuth(item)</span>
2923
- })
2924
- }
2925
- <span class="cstat-no" title="statement not covered" > try {</span>
2926
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(list)) {</span>
2927
- <span class="cstat-no" title="statement not covered" > list.forEach(<span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2928
- const emitTarget = <span class="cstat-no" title="statement not covered" >event?.originEvent?.target as SyntaxNode;</span>
2929
- const _path: string = <span class="cstat-no" title="statement not covered" >event.originEvent.path;</span>
2930
- const _root = <span class="cstat-no" title="statement not covered" >_path.split('.')?.[1] || '';</span>
2931
- <span class="cstat-no" title="statement not covered" > if (['backend', 'overriddenLogics', 'dataSources', 'processes', 'roles', 'logics', 'enums', 'structures', 'interfaces', 'interfaceDependencies', 'configuration', 'dependencies', 'authLogics', 'authLogicsForCallInterface', 'triggerLaunchers', 'connections'].some(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >_root.startsWith(item))</span>) {</span>
2932
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2933
- }
2934
- <span class="cstat-no" title="statement not covered" > if (emitTarget) {</span>
2935
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'App') {</span>
2936
- <span class="cstat-no" title="statement not covered" > if (event?.object?.preferenceMap || event?.originEvent?.object?.preferenceMap) {</span>
2937
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2938
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2939
- }
2940
- }
2941
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ValidationRule') {</span>
2942
- <span class="cstat-no" title="statement not covered" > if (</span>
2943
- event?.object?.enableServerValidation ||
2944
- event?.originEvent?.object?.enableServerValidation
2945
- ) {
2946
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2947
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2948
- }
2949
- }
2950
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Logic') {</span>
2951
- const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2952
- <span class="cstat-no" title="statement not covered" > if ((emitTarget as Logic).body.length &gt; 2) {</span>
2953
- (<span class="cstat-no" title="statement not covered" >emitTarget as Logic).body.forEach(<span class="fstat-no" title="function not covered" >(i</span>t: LogicItem) =&gt; {</span>
2954
- <span class="cstat-no" title="statement not covered" > itemloop(it, app, diffArr);</span>
2955
- });
2956
- }
2957
- const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
2958
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2959
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2960
- }
2961
- }
2962
- <span class="cstat-no" title="statement not covered" > if ('view' in emitTarget &amp;&amp; emitTarget.view) {</span>
2963
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2964
- }
2965
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindDirective') {</span>
2966
- const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete'</span>
2967
- <span class="cstat-no" title="statement not covered" > if (isDelete) {</span>
2968
- const isAuto = <span class="cstat-no" title="statement not covered" >~event?.originEvent?.path?.indexOf('name=auth')</span>
2969
- <span class="cstat-no" title="statement not covered" > if (isAuto) {</span>
2970
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2971
- }
2972
- }
2973
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name === 'auth') {</span>
2974
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2975
- }
2976
- }
2977
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'View') {</span>
2978
- <span class="cstat-no" title="statement not covered" > if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {</span>
2979
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2980
- }
2981
- const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete';</span>
2982
- const isAuthView = (<span class="cstat-no" title="statement not covered" >emitTarget as View).auth &amp;&amp; event?.originEvent?.object?.name;</span>
2983
- const isUpdateAuth = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.auth</span>
2984
- const isUpdateBindRoles = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles;</span>
2985
- <span class="cstat-no" title="statement not covered" > if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView) {</span>
2986
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2987
- // const app = emitTarget.app;
2988
- // const diffArr: string[] = [];
2989
- // emitTarget.logics.forEach((logic: Logic) =&gt; {
2990
- // if (logic.body.length &gt; 2) {
2991
- // logic.body.forEach((it: LogicItem) =&gt; {
2992
- // itemloop(it, app, diffArr);
2993
- // });
2994
- // }
2995
- // });
2996
- // const result = diffArr.filter((item) =&gt; item.startsWith('app') || item.startsWith('extensions'));
2997
- // if (result.length) {
2998
- // hasBackEnd = true;
2999
- // }
3000
- // emitTarget.children.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
3001
- // emitTarget.elements.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
3002
- }
3003
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
3004
- }
3005
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ViewElement') {</span>
3006
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name) {</span>
3007
- const bindDirective = (<span class="cstat-no" title="statement not covered" >emitTarget as ViewElement).bindDirectives.find(</span>
3008
- <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
3009
- )
3010
- <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
3011
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3012
- }
3013
- }
3014
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action === 'delete') {</span>
3015
- const bindDirective = (<span class="cstat-no" title="statement not covered" >emitTarget as ViewElement)?.bindDirectives?.find(</span>
3016
- <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
3017
- )
3018
- <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
3019
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3020
- }
3021
- <span class="cstat-no" title="statement not covered" > loopEleAuth((emitTarget as ViewElement))</span>
3022
- }
3023
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action !== 'create') {</span>
3024
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles) {</span>
3025
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3026
- }
3027
- }
3028
- <span class="cstat-no" title="statement not covered" > loopEle((emitTarget as ViewElement), true)</span>
3029
- }
3030
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindAttribute' &amp;&amp; emitTarget.name === 'url') {</span>
3031
- const needUpdateBackEnd =
3032
- (<span class="cstat-no" title="statement not covered" >emitTarget as BindAttribute)?.value?.endsWith('/import') || (emitTarget as BindAttribute)?.value?.includes('/upload/')</span>
3033
- <span class="cstat-no" title="statement not covered" > if (!(emitTarget as BindAttribute).view.parentAuth &amp;&amp; needUpdateBackEnd) {</span>
3034
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3035
- }
3036
- }
3037
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'CallLogic') {</span>
3038
- const arrlist: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
3039
- <span class="cstat-no" title="statement not covered" > getLogic((emitTarget as CallLogic).calleeKey, (emitTarget as CallLogic).app, arrlist);</span>
3040
- const result = <span class="cstat-no" title="statement not covered" >arrlist.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
3041
- // console.log(result, 'CallLogic');
3042
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
3043
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3044
- }
3045
- }
3046
- // 更新端时需要出发后端更新
3047
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Frontend') {</span>
3048
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3049
- }
3050
- }
3051
- <span class="cstat-no" title="statement not covered" > event.eventList.forEach(<span class="fstat-no" title="function not covered" >({</span> action, riskList, path, object: objItem }: { action: string; riskList: string; path: string; object: any }) =&gt; {</span>
3052
- <span class="cstat-no" title="statement not covered" > if (riskList) {</span>
3053
- <span class="cstat-no" title="statement not covered" > allRiskList.push(...(riskList || []));</span>
3054
- }
3055
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(objItem)) {</span>
3056
- <span class="cstat-no" title="statement not covered" > if (action === 'update') {</span>
3057
- <span class="cstat-no" title="statement not covered" > actionList.push({</span>
3058
- action,
3059
- path,
3060
- node: objItem[0],
3061
- });
3062
- } else {
3063
- <span class="cstat-no" title="statement not covered" > objItem.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, index) =&gt; {</span>
3064
- <span class="cstat-no" title="statement not covered" > actionList.push({</span>
3065
- action,
3066
- path,
3067
- node: item,
3068
- });
3069
- });
3070
- }
3071
- } else {
3072
- <span class="cstat-no" title="statement not covered" > actionList.push({</span>
3073
- action,
3074
- path,
3075
- object: objItem,
3076
- });
3077
- }
3078
- });
3079
- });
3080
- }
3081
- } catch (error) {
3082
- <span class="cstat-no" title="statement not covered" > console.log(error);</span>
3083
- <span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(app, {</span>
3084
- errorInfo: {
3085
- message: error?.message,
3086
- stack: error?.stack,
3087
- },
3088
- });
3089
- <span class="cstat-no" title="statement not covered" > return;</span>
3090
- }
3091
- &nbsp;
3092
- const uuid = <span class="cstat-no" title="statement not covered" >uuidv4().replace(/-/g, '');</span>
3093
- const instructList = <span class="cstat-no" title="statement not covered" >[{</span>
3094
- uuid,
3095
- actions: actionList,
3096
- riskList: allRiskList
3097
- }];
3098
- const operation: Operation = <span class="cstat-no" title="statement not covered" >{</span>
3099
- type: 'doAction',
3100
- uuid,
3101
- actionItem: {
3102
- actionMsg,
3103
- list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; {
3104
- const { path, action, object, oldObject, parentKey, index } = <span class="cstat-no" title="statement not covered" >item?.originEvent || {};</span>
3105
- <span class="cstat-no" title="statement not covered" > return {</span>
3106
- path,
3107
- action,
3108
- parentKey,
3109
- index,
3110
- object: object?.toJSON?.() || object,
3111
- oldObject: oldObject?.toJSON?.() || oldObject,
3112
- }
3113
- }),
3114
- },
3115
- };
3116
- <span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList, operationList: [operation] });</span>
3117
- // 进行nasl操作后需要将Index重置
3118
- <span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', null);</span>
3119
- <span class="cstat-no" title="statement not covered" > if (!app._historying) {</span>
3120
- <span class="cstat-no" title="statement not covered" > if (app._historyIndex !== app._historyList.length) {</span>
3121
- <span class="cstat-no" title="statement not covered" > app._historyList = app._historyList.splice(0, app._historyIndex);</span>
3122
- }
3123
- <span class="cstat-no" title="statement not covered" > app._historyList.push({</span>
3124
- actionMsg,
3125
- list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >item?.originEvent)</span>,
3126
- });
3127
- <span class="cstat-no" title="statement not covered" > app._historyIndex = app._historyList.length;</span>
3128
- } else {
3129
- const actionMap = <span class="cstat-no" title="statement not covered" >{</span>
3130
- undo: '已撤销操作:',
3131
- redo: '已重做操作:',
3132
- };
3133
- let msg = <span class="cstat-no" title="statement not covered" >actionMap[action as 'undo' | 'redo'];</span>
3134
- <span class="cstat-no" title="statement not covered" > msg += actionMsg;</span>
3135
- <span class="cstat-no" title="statement not covered" > if (process.env.BUILD_TARGET !== 'node') {</span>
3136
- <span class="cstat-no" title="statement not covered" > require('element-plus').ElMessage.info(msg);</span>
3137
- }
3138
- <span class="cstat-no" title="statement not covered" > app._historying = false;</span>
3139
- }
3140
- <span class="cstat-no" title="statement not covered" > stepRecorder.initialized &amp;&amp; stepRecorder.record(actionMsg, actionItem, actionList);</span>
3141
- }
3142
- &nbsp;
3143
- type Instruct = {
3144
- uuid: string,
3145
- actions: any[],
3146
- };
3147
- type TaskOption = {
3148
- app: any,
3149
- hasFrontEnd: boolean,
3150
- hasBackEnd: boolean,
3151
- instructList: Instruct[],
3152
- operationList: Operation[],
3153
- };
3154
- enum TaskQueueStatus {
3155
- ExceedMaxTaskCount,
3156
- Retrying,
3157
- }
3158
- type RefreshNaslOptions = {
3159
- errorInfo: {
3160
- message?: string,
3161
- stack?: string,
3162
- }
3163
- };
3164
- &nbsp;
3165
- class TaskQueue {
3166
- queue: TaskOption[] = []
3167
- lastQueue: TaskOption[] = []
3168
- running: Boolean = false
3169
- maxTaskCount: number = 10
3170
- status?: TaskQueueStatus = undefined
3171
- &nbsp;
3172
- <span class="fstat-no" title="function not covered" > addTask(</span>task: TaskOption) {
3173
- <span class="cstat-no" title="statement not covered" > this.queue.push(task);</span>
3174
- &nbsp;
3175
- <span class="cstat-no" title="statement not covered" > if (this.queue.length &gt;= this.maxTaskCount) {</span>
3176
- <span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.ExceedMaxTaskCount;</span>
3177
- <span class="cstat-no" title="statement not covered" > task.app.emit('ExceedMaxTaskCount');</span>
3178
- }
3179
- &nbsp;
3180
- <span class="cstat-no" title="statement not covered" > this.run();</span>
3181
- }
3182
- &nbsp;
3183
- <span class="fstat-no" title="function not covered" > clear(</span>) {
3184
- <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
3185
- <span class="cstat-no" title="statement not covered" > this.lastQueue = [];</span>
3186
- <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
3187
- <span class="cstat-no" title="statement not covered" > this.running = false;</span>
3188
- }
3189
- &nbsp;
3190
- <span class="fstat-no" title="function not covered" > async </span>run(queue = <span class="branch-0 cbranch-no" title="branch not covered" >this.queue)</span> {
3191
- <span class="cstat-no" title="statement not covered" > if (this.running)</span>
3192
- <span class="cstat-no" title="statement not covered" > return;</span>
3193
- <span class="cstat-no" title="statement not covered" > if (queue.length === 0)</span>
3194
- <span class="cstat-no" title="statement not covered" > return;</span>
3195
- &nbsp;
3196
- const app = <span class="cstat-no" title="statement not covered" >queue[0].app;</span>
3197
- let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
3198
- let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
3199
- let instructList: Instruct[] = <span class="cstat-no" title="statement not covered" >[];</span>
3200
- let operationList: Operation[] = <span class="cstat-no" title="statement not covered" >[];</span>
3201
- &nbsp;
3202
- <span class="cstat-no" title="statement not covered" > for (const task of queue) {</span>
3203
- <span class="cstat-no" title="statement not covered" > if (task.hasFrontEnd)</span>
3204
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
3205
- <span class="cstat-no" title="statement not covered" > if (task.hasBackEnd)</span>
3206
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3207
- <span class="cstat-no" title="statement not covered" > instructList = instructList.concat(task.instructList);</span>
3208
- <span class="cstat-no" title="statement not covered" > operationList = operationList.concat(task.operationList);</span>
3209
- }
3210
- &nbsp;
3211
- <span class="cstat-no" title="statement not covered" > if (queue === this.queue) {</span>
3212
- <span class="cstat-no" title="statement not covered" > this.lastQueue = [...queue];</span>
3213
- <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
3214
- }
3215
- &nbsp;
3216
- <span class="cstat-no" title="statement not covered" > this.running = true;</span>
3217
- const error = <span class="cstat-no" title="statement not covered" >await _saveNasl({</span>
3218
- app, hasFrontEnd, hasBackEnd, instructList, operationList
3219
- });
3220
- &nbsp;
3221
- // code: 401650, 检测到当前应用拉取操作已被强制结束, 用户确认后再刷新
3222
- // code: 500502 msg: "该应用已在新tab 页打开,请刷新!" 不重试或刷新
3223
- <span class="cstat-no" title="statement not covered" > if (!error)</span>
3224
- <span class="cstat-no" title="statement not covered" > this.recover(app);</span>
3225
- else <span class="cstat-no" title="statement not covered" >if (![401650, 500502].includes(error.code)) {</span>
3226
- // 连接失败,或超时,或后端持久化异常
3227
- <span class="cstat-no" title="statement not covered" > if ((error.message === 'Network Error' || error.message?.includes('timeout') || error.code === 500500)</span>
3228
- &amp;&amp; this.status !== TaskQueueStatus.Retrying) {
3229
- <span class="cstat-no" title="statement not covered" > this.running = false;</span>
3230
- <span class="cstat-no" title="statement not covered" > this.retry();</span>
3231
- } else
3232
- <span class="cstat-no" title="statement not covered" > this.refreshNasl(app);</span>
3233
- &nbsp;
3234
- <span class="cstat-no" title="statement not covered" > return;</span>
3235
- }
3236
- &nbsp;
3237
- <span class="cstat-no" title="statement not covered" > this.running = false;</span>
3238
- &nbsp;
3239
- <span class="cstat-no" title="statement not covered" > this.run();</span>
3240
- }
3241
- &nbsp;
3242
- <span class="fstat-no" title="function not covered" > retry(</span>) {
3243
- <span class="cstat-no" title="statement not covered" > if (this.lastQueue.length === 0)</span>
3244
- <span class="cstat-no" title="statement not covered" > return;</span>
3245
- &nbsp;
3246
- const app = <span class="cstat-no" title="statement not covered" >this.lastQueue[0].app;</span>
3247
- <span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.Retrying;</span>
3248
- <span class="cstat-no" title="statement not covered" > app.emit('Retrying');</span>
3249
- <span class="cstat-no" title="statement not covered" > this.run(this.lastQueue);</span>
3250
- }
3251
- &nbsp;
3252
- <span class="fstat-no" title="function not covered" > async </span>refreshNasl(app: App, options: RefreshNaslOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{ errorInfo: {} })</span> {
3253
- const failedQueue = <span class="cstat-no" title="statement not covered" >this.lastQueue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3254
- hasFrontEnd, hasBackEnd, instructList,
3255
- }));
3256
- const queue = <span class="cstat-no" title="statement not covered" >this.queue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3257
- hasFrontEnd, hasBackEnd, instructList,
3258
- }));
3259
- <span class="cstat-no" title="statement not covered" > await storageService.saveFrontendNasl({</span>
3260
- body: {
3261
- nasl: app?.toJSON(),
3262
- failedQueue,
3263
- queue,
3264
- errorInfo: options.errorInfo,
3265
- },
3266
- }).catch(<span class="fstat-no" title="function not covered" >(e</span>rr: any) =&gt; {
3267
- <span class="cstat-no" title="statement not covered" > console.log('备份 nasl 失败:', err);</span>
3268
- });
3269
- <span class="cstat-no" title="statement not covered" > this.clear();</span>
3270
- <span class="cstat-no" title="statement not covered" > app.emit('refresh');</span>
3271
- }
3272
- &nbsp;
3273
- <span class="fstat-no" title="function not covered" > recover(</span>app: App) {
3274
- <span class="cstat-no" title="statement not covered" > switch (this.status) {</span>
3275
- case TaskQueueStatus.ExceedMaxTaskCount:
3276
- <span class="cstat-no" title="statement not covered" > app.emit('BelowMaxTaskCount');</span>
3277
- <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
3278
- <span class="cstat-no" title="statement not covered" > break;</span>
3279
- case TaskQueueStatus.Retrying:
3280
- <span class="cstat-no" title="statement not covered" > app.emit('SuccessRetry');</span>
3281
- <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
3282
- <span class="cstat-no" title="statement not covered" > break;</span>
3283
- }
3284
- }
3285
- }
3286
- &nbsp;
3287
- export const taskQueue = new TaskQueue();
3288
- async function <span class="fstat-no" title="function not covered" >saveNasl(</span>options: TaskOption) {
3289
- <span class="cstat-no" title="statement not covered" > taskQueue.addTask(options);</span>
3290
- }
3291
- &nbsp;
3292
- class Operation {
3293
- appId?: string;
3294
- branchId?: string;
3295
- accountId?: string;
3296
- userId?: string;
3297
- phone?: string;
3298
- actionItem: any;
3299
- res?: any;
3300
- err?: any;
3301
- parentKey?: string;
3302
- timestamp?: any;
3303
- type?: string;
3304
- uuid?: string;
3305
- action?: string;
3306
- }
3307
- &nbsp;
3308
- // 确保操作非高危
3309
- function <span class="fstat-no" title="function not covered" >ensureSafe(</span>instructList: any[]) {
3310
- const riskList: any[] = <span class="cstat-no" title="statement not covered" >[]</span>
3311
- <span class="cstat-no" title="statement not covered" > instructList?.forEach(<span class="fstat-no" title="function not covered" >(i</span>nstruct) =&gt; {</span>
3312
- <span class="cstat-no" title="statement not covered" > if (instruct?.riskList) {</span>
3313
- <span class="cstat-no" title="statement not covered" > riskList.push(...(instruct.riskList || []));</span>
3314
- }
3315
- <span class="cstat-no" title="statement not covered" > instruct?.actions?.forEach(<span class="fstat-no" title="function not covered" >(a</span>ctionItem: any) =&gt; {</span>
3316
- const { path, action, object } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
3317
- <span class="cstat-no" title="statement not covered" > if (path === 'app') {</span>
3318
- <span class="cstat-no" title="statement not covered" > switch(action) {</span>
3319
- case 'create':
3320
- <span class="cstat-no" title="statement not covered" > riskList.push('重复创建App');</span>
3321
- <span class="cstat-no" title="statement not covered" > break;</span>
3322
- case 'delete':
3323
- <span class="cstat-no" title="statement not covered" > riskList.push('删除App');</span>
3324
- <span class="cstat-no" title="statement not covered" > break;</span>
3325
- case 'update':
3326
- <span class="cstat-no" title="statement not covered" > if (object?.hasOwnProperty('id')) {</span>
3327
- <span class="cstat-no" title="statement not covered" > riskList.push('修改AppId');</span>
3328
- }
3329
- <span class="cstat-no" title="statement not covered" > break;</span>
3330
- }
3331
- }
3332
- });
3333
- });
3334
- <span class="cstat-no" title="statement not covered" > return riskList;</span>
3335
- }
3336
- &nbsp;
3337
- async function <span class="fstat-no" title="function not covered" >_saveNasl(</span>options: TaskOption) {
3338
- const { app, hasFrontEnd, hasBackEnd, instructList, operationList } = <span class="cstat-no" title="statement not covered" >options;</span>
3339
- <span class="cstat-no" title="statement not covered" > app.emit('saving');</span>
3340
- let ChangedNASLType = <span class="cstat-no" title="statement not covered" >'';</span>
3341
- <span class="cstat-no" title="statement not covered" > if (hasFrontEnd &amp;&amp; hasBackEnd) {</span>
3342
- <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'both';</span>
3343
- } else <span class="cstat-no" title="statement not covered" >if (hasFrontEnd) {</span>
3344
- <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'web';</span>
3345
- } else <span class="cstat-no" title="statement not covered" >if (hasBackEnd) {</span>
3346
- <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'backend';</span>
3347
- }
3348
- let res: any;
3349
- let err: any;
3350
- &nbsp;
3351
- <span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
3352
- <span class="cstat-no" title="statement not covered" > try {</span>
3353
- const riskList = <span class="cstat-no" title="statement not covered" >ensureSafe(instructList);</span>
3354
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(riskList) &amp;&amp; riskList.length) {</span>
3355
- <span class="cstat-no" title="statement not covered" > throw Error(`存在以下高危操作:\n${riskList.map(<span class="fstat-no" title="function not covered" >(r</span>isk, index) =&gt; {</span>
3356
- <span class="cstat-no" title="statement not covered" > return `${index + 1}.${risk};`;</span>
3357
- }).join('\n')}\n请及时排查原因`);
3358
- }
3359
- // 接口请求
3360
- <span class="cstat-no" title="statement not covered" > res = await storageService.batchInstruct({</span>
3361
- body: instructList,
3362
- headers: {
3363
- appId: app.id,
3364
- ChangedNASLType,
3365
- tabTimestamp,
3366
- // 其他封装在 storageService 里了
3367
- },
3368
- });
3369
- } catch (error) {
3370
- <span class="cstat-no" title="statement not covered" > err = error;</span>
3371
- <span class="cstat-no" title="statement not covered" > console.error(err);</span>
3372
- }
3373
- <span class="cstat-no" title="statement not covered" > operationList.forEach(<span class="fstat-no" title="function not covered" >(o</span>peration) =&gt; {</span>
3374
- <span class="cstat-no" title="statement not covered" > doOperationRecord({</span>
3375
- ...operation,
3376
- res,
3377
- err,
3378
- });
3379
- });
3380
- } else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
3381
- // Do nothing
3382
- } else {
3383
- const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
3384
- &nbsp;
3385
- let actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
3386
- <span class="cstat-no" title="statement not covered" > for (const { actions } of instructList) {</span>
3387
- <span class="cstat-no" title="statement not covered" > actionList = actionList.concat(actions);</span>
3388
- }
3389
- &nbsp;
3390
- <span class="cstat-no" title="statement not covered" > jsoner.batchAction(json, actionList);</span>
3391
- <span class="cstat-no" title="statement not covered" > await fs.writeJSON(config.storage.basePath, json, {</span>
3392
- spaces: 4,
3393
- });
3394
- }
3395
- <span class="cstat-no" title="statement not covered" > app.emit('saved', err);</span>
3396
- <span class="cstat-no" title="statement not covered" > return err;</span>
3397
- }
3398
- &nbsp;
3399
- export interface ProxyApp extends App {
3400
- _isCollectingCount: number;
3401
- _collectingList: number[];
3402
- _historyList: number[];
3403
- _historyIndex: number;
3404
- _historying: boolean;
3405
- _timer: NodeJS.Timeout;
3406
- _noTimer: NodeJS.Timeout;
3407
- _actionMsg: string;
3408
- _action: string;
3409
- naslServer: NaslServer;
3410
- }
3411
- &nbsp;
3412
- export function <span class="fstat-no" title="function not covered" >handleApp(</span>app: ProxyApp) {
3413
- <span class="cstat-no" title="statement not covered" > app._isCollectingCount = 0;</span>
3414
- <span class="cstat-no" title="statement not covered" > app._collectingList = [];</span>
3415
- <span class="cstat-no" title="statement not covered" > app._historyList = [];</span>
3416
- <span class="cstat-no" title="statement not covered" > app._historyIndex = 0;</span>
3417
- <span class="cstat-no" title="statement not covered" > app._historying = false;</span>
3418
- <span class="cstat-no" title="statement not covered" > app._timer = null;</span>
3419
- &nbsp;
3420
- <span class="cstat-no" title="statement not covered" > app.on('undo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
3421
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3422
- <span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
3423
- });
3424
- &nbsp;
3425
- <span class="cstat-no" title="statement not covered" > app.on('redo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
3426
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3427
- <span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
3428
- });
3429
- &nbsp;
3430
- /**
3431
- * 开启收集
3432
- */
3433
- <span class="cstat-no" title="statement not covered" > app.on('collect:start', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
3434
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3435
- <span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
3436
- <span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
3437
- }
3438
- <span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
3439
- <span class="cstat-no" title="statement not covered" > proxyApp._noTimer = event.noTimer;</span>
3440
- }
3441
- <span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
3442
- <span class="cstat-no" title="statement not covered" > proxyApp._timer = setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3443
- <span class="cstat-no" title="statement not covered" > console.error('收集超时,请及时排查原因', event);</span>
3444
- <span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(proxyApp, {</span>
3445
- errorInfo: {
3446
- message: '收集超时,请及时排查原因',
3447
- },
3448
- });
3449
- }, 2500);
3450
- }
3451
- <span class="cstat-no" title="statement not covered" > if (!proxyApp._isCollectingCount) {</span>
3452
- <span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = event?.actionMsg;</span>
3453
- <span class="cstat-no" title="statement not covered" > proxyApp._action = event?.action;</span>
3454
- }
3455
- <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount++;</span>
3456
- });
3457
- &nbsp;
3458
- /**
3459
- * 结束收集
3460
- */
3461
- <span class="cstat-no" title="statement not covered" > app.on('collect:end', <span class="fstat-no" title="function not covered" >async </span>function (this: ProxyApp) {</span>
3462
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3463
- <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount--;</span>
3464
- <span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
3465
- <span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
3466
- <span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
3467
- }
3468
- // 结束收集时,立即将全局收集变量状态重置,防止下次收集数据混乱
3469
- const collectingList = <span class="cstat-no" title="statement not covered" >proxyApp._collectingList;</span>
3470
- const actionMsg = <span class="cstat-no" title="statement not covered" >proxyApp._actionMsg;</span>
3471
- const action = <span class="cstat-no" title="statement not covered" >proxyApp._action;</span>
3472
- <span class="cstat-no" title="statement not covered" > proxyApp._collectingList = [];</span>
3473
- <span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = '';</span>
3474
- <span class="cstat-no" title="statement not covered" > proxyApp._action = '';</span>
3475
- <span class="cstat-no" title="statement not covered" > proxyApp._noTimer = undefined;</span>
3476
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(collectingList) &amp;&amp; collectingList.length) {</span>
3477
- <span class="cstat-no" title="statement not covered" > mountDatabaseTypes(proxyApp);</span>
3478
- <span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
3479
- value: collectingList,
3480
- });
3481
- <span class="cstat-no" title="statement not covered" > await doAction(proxyApp, {</span>
3482
- list: collectingList,
3483
- actionMsg,
3484
- action,
3485
- });
3486
- }
3487
- } else <span class="cstat-no" title="statement not covered" >if (proxyApp._isCollectingCount &lt; 0) {</span>
3488
- <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount = 0;</span>
3489
- <span class="cstat-no" title="statement not covered" > throw Error('关闭收集有问题,请排查');</span>
3490
- }
3491
- });
3492
- &nbsp;
3493
- /**
3494
- * 有变更
3495
- */
3496
- <span class="cstat-no" title="statement not covered" > app.on('storage', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
3497
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3498
- // 是否正在收集
3499
- <span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
3500
- <span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
3501
- value: [event],
3502
- });
3503
- let actionMsg = <span class="cstat-no" title="statement not covered" >'';</span>
3504
- const { action, target } = <span class="cstat-no" title="statement not covered" >event.originEvent || {};</span>
3505
- const { concept, name } = <span class="cstat-no" title="statement not covered" >target || {};</span>
3506
- <span class="cstat-no" title="statement not covered" > switch (action) {</span>
3507
- case 'create':
3508
- <span class="cstat-no" title="statement not covered" > actionMsg = '添加';</span>
3509
- <span class="cstat-no" title="statement not covered" > break;</span>
3510
- case 'delete':
3511
- <span class="cstat-no" title="statement not covered" > actionMsg = '删除';</span>
3512
- <span class="cstat-no" title="statement not covered" > break;</span>
3513
- case 'update':
3514
- <span class="cstat-no" title="statement not covered" > actionMsg = '修改';</span>
3515
- <span class="cstat-no" title="statement not covered" > break;</span>
3516
- }
3517
- <span class="cstat-no" title="statement not covered" > actionMsg += getConceptConstructor(concept).nodeTitle;</span>
3518
- <span class="cstat-no" title="statement not covered" > if (name) {</span>
3519
- <span class="cstat-no" title="statement not covered" > actionMsg += `“${name}”`;</span>
3520
- }
3521
- <span class="cstat-no" title="statement not covered" > doAction(proxyApp, {</span>
3522
- list: [event],
3523
- actionMsg,
3524
- });
3525
- } else {
3526
- <span class="cstat-no" title="statement not covered" > proxyApp._collectingList.push(event);</span>
3527
- }
3528
- });
3529
- }
3530
- &nbsp;
3531
- type BreakpointItem =
3532
- | any
3533
- | {
3534
- path: string
3535
- breakpointStatus: null | 'ENABLED' | 'DISABLED'
3536
- }
3537
- &nbsp;
3538
- /**
3539
- * 加载 app
3540
- * @param appId 如果是从文件读,就不需要传
3541
- * @returns app 对象
3542
- */
3543
- export async function <span class="fstat-no" title="function not covered" >loadApp(</span>appId?: string) {
3544
- <span class="cstat-no" title="statement not covered" > try {</span>
3545
- // 删除失效数据
3546
- <span class="cstat-no" title="statement not covered" > deleteExpiredRecords();</span>
3547
- } catch(err) { }
3548
- let app: App;
3549
- <span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
3550
- <span class="cstat-no" title="statement not covered" > console.time('batchQuery');</span>
3551
- const promises = <span class="cstat-no" title="statement not covered" >[</span>
3552
- storageService.batchQuery({
3553
- body: [
3554
- {
3555
- path: 'app'
3556
- // excludes: ['views'],
3557
- }
3558
- ],
3559
- headers: {
3560
- appId,
3561
- checkTabOpenTime: 'true'
3562
- // 其他封装在 storageService 里了
3563
- },
3564
- config: {
3565
- shortResponse: false
3566
- }
3567
- }),
3568
- storageService.breakpoint({
3569
- body: { appId }
3570
- })
3571
- ]
3572
- &nbsp;
3573
- const [batchQueryRes, breakpointRes] = <span class="cstat-no" title="statement not covered" >await Promise.all(promises)</span>
3574
- &nbsp;
3575
- // 请求
3576
- <span class="cstat-no" title="statement not covered" > console.timeEnd('batchQuery');</span>
3577
- &nbsp;
3578
- <span class="cstat-no" title="statement not covered" > tabTimestamp = batchQueryRes?.headers?.tabtimestamp;</span>
3579
- const data = <span class="cstat-no" title="statement not covered" >batchQueryRes?.data?.result;</span>
3580
- &nbsp;
3581
- <span class="cstat-no" title="statement not covered" > console.time('new App');</span>
3582
- <span class="cstat-no" title="statement not covered" > app = new App(Object.assign(data?.[0], { id: appId }));</span>
3583
- &nbsp;
3584
- <span class="cstat-no" title="statement not covered" > breakpointRes?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: BreakpointItem = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> =&gt; {</span>
3585
- const { path, breakpointStatus } = <span class="cstat-no" title="statement not covered" >item</span>
3586
- &nbsp;
3587
- <span class="cstat-no" title="statement not covered" > if (breakpointStatus) {</span>
3588
- const node = <span class="cstat-no" title="statement not covered" >app.findNodeByPath(path)</span>
3589
- &nbsp;
3590
- <span class="cstat-no" title="statement not covered" > if (node) {</span>
3591
- <span class="cstat-no" title="statement not covered" > node.breakpoint = breakpointStatus</span>
3592
- }
3593
- }
3594
- })
3595
- <span class="cstat-no" title="statement not covered" > console.timeEnd('new App');</span>
3596
- <span class="cstat-no" title="statement not covered" > if (!app.id) {</span>
3597
- <span class="cstat-no" title="statement not covered" > app.id = appId;</span>
3598
- }
3599
- <span class="cstat-no" title="statement not covered" > addBreakpointNodesFromApp(app)</span>
3600
- } else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
3601
- <span class="cstat-no" title="statement not covered" > app = new App({</span>
3602
- id: appId,
3603
- concept: 'App',
3604
- name: 'devapp',
3605
- title: '开发应用',
3606
- envs: 'dev,online',
3607
- hasAuth: true,
3608
- hasUserCenter: true,
3609
- dataSources: [],
3610
- structures: [],
3611
- enums: [],
3612
- logics: [],
3613
- interfaces: [],
3614
- processes: [],
3615
- roles: [],
3616
- dependencies: [],
3617
- interfaceDependencies: [],
3618
- frontends: [],
3619
- });
3620
- } else {
3621
- const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
3622
- <span class="cstat-no" title="statement not covered" > app = new App(appId ? Object.assign(json, { id: appId }) : json);</span>
3623
- }
3624
- // config.scope = app.scope;
3625
- <span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
3626
- (<span class="cstat-no" title="statement not covered" >app as any)._isCollectingCount = 0;</span>
3627
- <span class="cstat-no" title="statement not covered" > mountDatabaseTypes(app);</span>
3628
- <span class="cstat-no" title="statement not covered" > return app as App;</span>
3629
- }
3630
- &nbsp;
3631
- // 在app上挂载所有的数据库类型
3632
- export async function <span class="fstat-no" title="function not covered" >mountDatabaseTypes(</span>app: App) {
3633
- <span class="cstat-no" title="statement not covered" > if (!app.__databaseTypeMap) {</span>
3634
- <span class="cstat-no" title="statement not covered" > app.__databaseTypeMap = {};</span>
3635
- }
3636
- const dataSources = <span class="cstat-no" title="statement not covered" >app?.dataSources;</span>
3637
- const dbTypeSet = <span class="cstat-no" title="statement not covered" >new Set();</span>
3638
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
3639
- <span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) =&gt; {</span>
3640
- const dataSourceSqlType = <span class="cstat-no" title="statement not covered" >JSON.parse(dataSource.dataSourceConfig?.devProperty?.value || '{}')?.type;</span>
3641
- <span class="cstat-no" title="statement not covered" > if (dataSourceSqlType &amp;&amp; !app.__databaseTypeMap[dataSourceSqlType]) {</span>
3642
- <span class="cstat-no" title="statement not covered" > dbTypeSet.add(dataSourceSqlType);</span>
3643
- }
3644
- });
3645
- }
3646
- const dbTypes = <span class="cstat-no" title="statement not covered" >[...dbTypeSet];</span>
3647
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dbTypes) &amp;&amp; dbTypes.length) {</span>
3648
- const res: any = <span class="cstat-no" title="statement not covered" >await databaseTypes({</span>
3649
- query: {
3650
- dbTypes: dbTypes.join(','),
3651
- },
3652
- });
3653
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(res)) {</span>
3654
- <span class="cstat-no" title="statement not covered" > res.forEach(<span class="fstat-no" title="function not covered" >(d</span>atabaseType: any) =&gt; {</span>
3655
- const { dbType, columnTypes } = <span class="cstat-no" title="statement not covered" >databaseType || {};</span>
3656
- const columnTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
3657
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(columnTypes)) {</span>
3658
- <span class="cstat-no" title="statement not covered" > columnTypes.forEach(<span class="fstat-no" title="function not covered" >(c</span>olumnType) =&gt; {</span>
3659
- const { naslType, dataBaseTypes } = <span class="cstat-no" title="statement not covered" >columnType;</span>
3660
- const dataBaseTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
3661
- let defaultDataBaseType;
3662
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataBaseTypes)) {</span>
3663
- <span class="cstat-no" title="statement not covered" > dataBaseTypes.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataBaseType) =&gt; {</span>
3664
- const { type } = <span class="cstat-no" title="statement not covered" >dataBaseType || {};</span>
3665
- <span class="cstat-no" title="statement not covered" > if (type) {</span>
3666
- <span class="cstat-no" title="statement not covered" > dataBaseTypeMap[type] = dataBaseType;</span>
3667
- const { defaultType } = <span class="cstat-no" title="statement not covered" >dataBaseType;</span>
3668
- <span class="cstat-no" title="statement not covered" > if (defaultType) {</span>
3669
- <span class="cstat-no" title="statement not covered" > defaultDataBaseType = dataBaseType;</span>
3670
- }
3671
- }
3672
- });
3673
- }
3674
- <span class="cstat-no" title="statement not covered" > columnTypeMap[naslType] = {</span>
3675
- dataBaseTypes,
3676
- dataBaseTypeMap,
3677
- defaultDataBaseType,
3678
- };
3679
- });
3680
- }
3681
- <span class="cstat-no" title="statement not covered" > app.__databaseTypeMap[dbType] = columnTypeMap;</span>
3682
- });
3683
- }
3684
- }
3685
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
3686
- <span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) =&gt; {</span>
3687
- <span class="cstat-no" title="statement not covered" > dataSource.__hasDatabaseConfig = !!(app.__databaseTypeMap?.[dataSource.dataSourceSqlType]);</span>
3688
- });
3689
- }
3690
- }
3691
- &nbsp;
3692
- /**
3693
- * 加载 app
3694
- * @returns app 对象
3695
- */
3696
- export function <span class="fstat-no" title="function not covered" >loadAppSync(</span>) {
3697
- const json = <span class="cstat-no" title="statement not covered" >fs.readJSONSync(config.storage.basePath);</span>
3698
- const app = <span class="cstat-no" title="statement not covered" >new App(json);</span>
3699
- <span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
3700
- <span class="cstat-no" title="statement not covered" > return app;</span>
3701
- }
3702
- &nbsp;</pre></td></tr></table></pre>
3703
-
3704
- <div class='push'></div><!-- for sticky footer -->
3705
- </div><!-- /wrapper -->
3706
- <div class='footer quiet pad2 space-top1 center small'>
3707
- Code coverage generated by
3708
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3709
- at 2023-10-27T11:50:55.546Z
3710
- </div>
3711
- <script src="../../../prettify.js"></script>
3712
- <script>
3713
- window.onload = function () {
3714
- prettyPrint();
3715
- };
3716
- </script>
3717
- <script src="../../../sorter.js"></script>
3718
- <script src="../../../block-navigation.js"></script>
3719
- </body>
3720
- </html>
3721
-