@serve.zone/dcrouter 13.16.1 → 13.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/dist_serve/bundle.js +729 -721
  2. package/package.json +2 -2
  3. package/ts/00_commitinfo_data.ts +1 -1
  4. package/ts/monitoring/classes.metricsmanager.ts +43 -34
  5. package/ts_web/00_commitinfo_data.ts +1 -1
  6. package/ts_web/elements/network/ops-view-network-activity.ts +2 -1
  7. package/ts_web/elements/network/ops-view-routes.ts +24 -8
  8. package/dist_ts/00_commitinfo_data.d.ts +0 -8
  9. package/dist_ts/00_commitinfo_data.js +0 -9
  10. package/dist_ts/acme/index.d.ts +0 -1
  11. package/dist_ts/acme/index.js +0 -2
  12. package/dist_ts/acme/manager.acme-config.d.ts +0 -48
  13. package/dist_ts/acme/manager.acme-config.js +0 -156
  14. package/dist_ts/classes.cert-provision-scheduler.d.ts +0 -52
  15. package/dist_ts/classes.cert-provision-scheduler.js +0 -138
  16. package/dist_ts/classes.dcrouter.d.ts +0 -401
  17. package/dist_ts/classes.dcrouter.js +0 -1852
  18. package/dist_ts/classes.storage-cert-manager.d.ts +0 -15
  19. package/dist_ts/classes.storage-cert-manager.js +0 -53
  20. package/dist_ts/config/classes.api-token-manager.d.ts +0 -44
  21. package/dist_ts/config/classes.api-token-manager.js +0 -180
  22. package/dist_ts/config/classes.db-seeder.d.ts +0 -25
  23. package/dist_ts/config/classes.db-seeder.js +0 -69
  24. package/dist_ts/config/classes.reference-resolver.d.ts +0 -80
  25. package/dist_ts/config/classes.reference-resolver.js +0 -483
  26. package/dist_ts/config/classes.route-config-manager.d.ts +0 -54
  27. package/dist_ts/config/classes.route-config-manager.js +0 -370
  28. package/dist_ts/config/classes.target-profile-manager.d.ts +0 -82
  29. package/dist_ts/config/classes.target-profile-manager.js +0 -349
  30. package/dist_ts/config/index.d.ts +0 -6
  31. package/dist_ts/config/index.js +0 -8
  32. package/dist_ts/config/validator.d.ts +0 -104
  33. package/dist_ts/config/validator.js +0 -152
  34. package/dist_ts/db/classes.cache.cleaner.d.ts +0 -47
  35. package/dist_ts/db/classes.cache.cleaner.js +0 -130
  36. package/dist_ts/db/classes.cached.document.d.ts +0 -76
  37. package/dist_ts/db/classes.cached.document.js +0 -100
  38. package/dist_ts/db/classes.dcrouter-db.d.ts +0 -70
  39. package/dist_ts/db/classes.dcrouter-db.js +0 -146
  40. package/dist_ts/db/documents/classes.accounting-session.doc.d.ts +0 -32
  41. package/dist_ts/db/documents/classes.accounting-session.doc.js +0 -214
  42. package/dist_ts/db/documents/classes.acme-cert.doc.d.ts +0 -13
  43. package/dist_ts/db/documents/classes.acme-cert.doc.js +0 -109
  44. package/dist_ts/db/documents/classes.acme-config.doc.d.ts +0 -22
  45. package/dist_ts/db/documents/classes.acme-config.doc.js +0 -121
  46. package/dist_ts/db/documents/classes.api-token.doc.d.ts +0 -18
  47. package/dist_ts/db/documents/classes.api-token.doc.js +0 -127
  48. package/dist_ts/db/documents/classes.cached.email.d.ts +0 -125
  49. package/dist_ts/db/documents/classes.cached.email.js +0 -337
  50. package/dist_ts/db/documents/classes.cached.ip.reputation.d.ts +0 -119
  51. package/dist_ts/db/documents/classes.cached.ip.reputation.js +0 -323
  52. package/dist_ts/db/documents/classes.cert-backoff.doc.d.ts +0 -11
  53. package/dist_ts/db/documents/classes.cert-backoff.doc.js +0 -97
  54. package/dist_ts/db/documents/classes.dns-provider.doc.d.ts +0 -22
  55. package/dist_ts/db/documents/classes.dns-provider.doc.js +0 -134
  56. package/dist_ts/db/documents/classes.dns-record.doc.d.ts +0 -21
  57. package/dist_ts/db/documents/classes.dns-record.doc.js +0 -143
  58. package/dist_ts/db/documents/classes.domain.doc.d.ts +0 -22
  59. package/dist_ts/db/documents/classes.domain.doc.js +0 -146
  60. package/dist_ts/db/documents/classes.email-domain.doc.d.ts +0 -17
  61. package/dist_ts/db/documents/classes.email-domain.doc.js +0 -124
  62. package/dist_ts/db/documents/classes.network-target.doc.d.ts +0 -15
  63. package/dist_ts/db/documents/classes.network-target.doc.js +0 -118
  64. package/dist_ts/db/documents/classes.proxy-cert.doc.d.ts +0 -12
  65. package/dist_ts/db/documents/classes.proxy-cert.doc.js +0 -103
  66. package/dist_ts/db/documents/classes.remote-ingress-edge.doc.d.ts +0 -17
  67. package/dist_ts/db/documents/classes.remote-ingress-edge.doc.js +0 -130
  68. package/dist_ts/db/documents/classes.route.doc.d.ts +0 -18
  69. package/dist_ts/db/documents/classes.route.doc.js +0 -121
  70. package/dist_ts/db/documents/classes.source-profile.doc.d.ts +0 -15
  71. package/dist_ts/db/documents/classes.source-profile.doc.js +0 -115
  72. package/dist_ts/db/documents/classes.target-profile.doc.d.ts +0 -16
  73. package/dist_ts/db/documents/classes.target-profile.doc.js +0 -121
  74. package/dist_ts/db/documents/classes.vlan-mappings.doc.d.ts +0 -15
  75. package/dist_ts/db/documents/classes.vlan-mappings.doc.js +0 -77
  76. package/dist_ts/db/documents/classes.vpn-client.doc.d.ts +0 -23
  77. package/dist_ts/db/documents/classes.vpn-client.doc.js +0 -172
  78. package/dist_ts/db/documents/classes.vpn-server-keys.doc.d.ts +0 -10
  79. package/dist_ts/db/documents/classes.vpn-server-keys.doc.js +0 -94
  80. package/dist_ts/db/documents/index.d.ts +0 -20
  81. package/dist_ts/db/documents/index.js +0 -30
  82. package/dist_ts/db/index.d.ts +0 -4
  83. package/dist_ts/db/index.js +0 -9
  84. package/dist_ts/dns/index.d.ts +0 -2
  85. package/dist_ts/dns/index.js +0 -3
  86. package/dist_ts/dns/manager.dns.d.ts +0 -267
  87. package/dist_ts/dns/manager.dns.js +0 -906
  88. package/dist_ts/dns/providers/cloudflare.provider.d.ts +0 -21
  89. package/dist_ts/dns/providers/cloudflare.provider.js +0 -106
  90. package/dist_ts/dns/providers/factory.d.ts +0 -23
  91. package/dist_ts/dns/providers/factory.js +0 -47
  92. package/dist_ts/dns/providers/index.d.ts +0 -3
  93. package/dist_ts/dns/providers/index.js +0 -4
  94. package/dist_ts/dns/providers/interfaces.d.ts +0 -54
  95. package/dist_ts/dns/providers/interfaces.js +0 -2
  96. package/dist_ts/email/classes.email-domain.manager.d.ts +0 -46
  97. package/dist_ts/email/classes.email-domain.manager.js +0 -276
  98. package/dist_ts/email/index.d.ts +0 -1
  99. package/dist_ts/email/index.js +0 -2
  100. package/dist_ts/errors/base.errors.d.ts +0 -224
  101. package/dist_ts/errors/base.errors.js +0 -320
  102. package/dist_ts/errors/error-handler.d.ts +0 -98
  103. package/dist_ts/errors/error-handler.js +0 -282
  104. package/dist_ts/errors/error.codes.d.ts +0 -115
  105. package/dist_ts/errors/error.codes.js +0 -136
  106. package/dist_ts/errors/index.d.ts +0 -54
  107. package/dist_ts/errors/index.js +0 -136
  108. package/dist_ts/errors/reputation.errors.d.ts +0 -183
  109. package/dist_ts/errors/reputation.errors.js +0 -292
  110. package/dist_ts/http3/http3-route-augmentation.d.ts +0 -50
  111. package/dist_ts/http3/http3-route-augmentation.js +0 -98
  112. package/dist_ts/http3/index.d.ts +0 -1
  113. package/dist_ts/http3/index.js +0 -2
  114. package/dist_ts/index.d.ts +0 -8
  115. package/dist_ts/index.js +0 -29
  116. package/dist_ts/logger.d.ts +0 -21
  117. package/dist_ts/logger.js +0 -81
  118. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  119. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  120. package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -233
  121. package/dist_ts/monitoring/classes.metricsmanager.js +0 -897
  122. package/dist_ts/monitoring/index.d.ts +0 -1
  123. package/dist_ts/monitoring/index.js +0 -2
  124. package/dist_ts/opsserver/classes.opsserver.d.ts +0 -47
  125. package/dist_ts/opsserver/classes.opsserver.js +0 -105
  126. package/dist_ts/opsserver/handlers/acme-config.handler.d.ts +0 -16
  127. package/dist_ts/opsserver/handlers/acme-config.handler.js +0 -77
  128. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -40
  129. package/dist_ts/opsserver/handlers/admin.handler.js +0 -191
  130. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
  131. package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
  132. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -77
  133. package/dist_ts/opsserver/handlers/certificate.handler.js +0 -574
  134. package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
  135. package/dist_ts/opsserver/handlers/config.handler.js +0 -200
  136. package/dist_ts/opsserver/handlers/dns-provider.handler.d.ts +0 -16
  137. package/dist_ts/opsserver/handlers/dns-provider.handler.js +0 -156
  138. package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +0 -13
  139. package/dist_ts/opsserver/handlers/dns-record.handler.js +0 -98
  140. package/dist_ts/opsserver/handlers/domain.handler.d.ts +0 -13
  141. package/dist_ts/opsserver/handlers/domain.handler.js +0 -137
  142. package/dist_ts/opsserver/handlers/email-domain.handler.d.ts +0 -16
  143. package/dist_ts/opsserver/handlers/email-domain.handler.js +0 -150
  144. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
  145. package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
  146. package/dist_ts/opsserver/handlers/index.d.ts +0 -21
  147. package/dist_ts/opsserver/handlers/index.js +0 -22
  148. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
  149. package/dist_ts/opsserver/handlers/logs.handler.js +0 -264
  150. package/dist_ts/opsserver/handlers/network-target.handler.d.ts +0 -10
  151. package/dist_ts/opsserver/handlers/network-target.handler.js +0 -117
  152. package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
  153. package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
  154. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
  155. package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
  156. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
  157. package/dist_ts/opsserver/handlers/route-management.handler.js +0 -98
  158. package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
  159. package/dist_ts/opsserver/handlers/security.handler.js +0 -237
  160. package/dist_ts/opsserver/handlers/source-profile.handler.d.ts +0 -10
  161. package/dist_ts/opsserver/handlers/source-profile.handler.js +0 -119
  162. package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
  163. package/dist_ts/opsserver/handlers/stats.handler.js +0 -461
  164. package/dist_ts/opsserver/handlers/target-profile.handler.d.ts +0 -10
  165. package/dist_ts/opsserver/handlers/target-profile.handler.js +0 -117
  166. package/dist_ts/opsserver/handlers/users.handler.d.ts +0 -12
  167. package/dist_ts/opsserver/handlers/users.handler.js +0 -24
  168. package/dist_ts/opsserver/handlers/vpn.handler.d.ts +0 -6
  169. package/dist_ts/opsserver/handlers/vpn.handler.js +0 -262
  170. package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
  171. package/dist_ts/opsserver/helpers/guards.js +0 -43
  172. package/dist_ts/opsserver/index.d.ts +0 -1
  173. package/dist_ts/opsserver/index.js +0 -2
  174. package/dist_ts/paths.d.ts +0 -25
  175. package/dist_ts/paths.js +0 -44
  176. package/dist_ts/plugins.d.ts +0 -81
  177. package/dist_ts/plugins.js +0 -115
  178. package/dist_ts/radius/classes.accounting.manager.d.ts +0 -223
  179. package/dist_ts/radius/classes.accounting.manager.js +0 -449
  180. package/dist_ts/radius/classes.radius.server.d.ts +0 -169
  181. package/dist_ts/radius/classes.radius.server.js +0 -384
  182. package/dist_ts/radius/classes.vlan.manager.d.ts +0 -124
  183. package/dist_ts/radius/classes.vlan.manager.js +0 -272
  184. package/dist_ts/radius/index.d.ts +0 -13
  185. package/dist_ts/radius/index.js +0 -14
  186. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -92
  187. package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -291
  188. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
  189. package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
  190. package/dist_ts/remoteingress/index.d.ts +0 -2
  191. package/dist_ts/remoteingress/index.js +0 -3
  192. package/dist_ts/security/classes.contentscanner.d.ts +0 -164
  193. package/dist_ts/security/classes.contentscanner.js +0 -642
  194. package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -145
  195. package/dist_ts/security/classes.ipreputationchecker.js +0 -458
  196. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  197. package/dist_ts/security/classes.securitylogger.js +0 -235
  198. package/dist_ts/security/index.d.ts +0 -3
  199. package/dist_ts/security/index.js +0 -4
  200. package/dist_ts/sms/classes.smsservice.d.ts +0 -15
  201. package/dist_ts/sms/classes.smsservice.js +0 -72
  202. package/dist_ts/sms/config/sms.config.d.ts +0 -93
  203. package/dist_ts/sms/config/sms.config.js +0 -2
  204. package/dist_ts/sms/config/sms.schema.d.ts +0 -5
  205. package/dist_ts/sms/config/sms.schema.js +0 -121
  206. package/dist_ts/sms/index.d.ts +0 -1
  207. package/dist_ts/sms/index.js +0 -2
  208. package/dist_ts/vpn/classes.vpn-manager.d.ts +0 -159
  209. package/dist_ts/vpn/classes.vpn-manager.js +0 -459
  210. package/dist_ts/vpn/index.d.ts +0 -1
  211. package/dist_ts/vpn/index.js +0 -2
  212. package/dist_ts_apiclient/classes.apitoken.d.ts +0 -41
  213. package/dist_ts_apiclient/classes.apitoken.js +0 -115
  214. package/dist_ts_apiclient/classes.certificate.d.ts +0 -57
  215. package/dist_ts_apiclient/classes.certificate.js +0 -69
  216. package/dist_ts_apiclient/classes.config.d.ts +0 -7
  217. package/dist_ts_apiclient/classes.config.js +0 -11
  218. package/dist_ts_apiclient/classes.dcrouterapiclient.d.ts +0 -41
  219. package/dist_ts_apiclient/classes.dcrouterapiclient.js +0 -81
  220. package/dist_ts_apiclient/classes.email.d.ts +0 -30
  221. package/dist_ts_apiclient/classes.email.js +0 -52
  222. package/dist_ts_apiclient/classes.logs.d.ts +0 -21
  223. package/dist_ts_apiclient/classes.logs.js +0 -14
  224. package/dist_ts_apiclient/classes.radius.d.ts +0 -59
  225. package/dist_ts_apiclient/classes.radius.js +0 -95
  226. package/dist_ts_apiclient/classes.remoteingress.d.ts +0 -54
  227. package/dist_ts_apiclient/classes.remoteingress.js +0 -136
  228. package/dist_ts_apiclient/classes.route.d.ts +0 -39
  229. package/dist_ts_apiclient/classes.route.js +0 -125
  230. package/dist_ts_apiclient/classes.stats.d.ts +0 -47
  231. package/dist_ts_apiclient/classes.stats.js +0 -38
  232. package/dist_ts_apiclient/index.d.ts +0 -10
  233. package/dist_ts_apiclient/index.js +0 -14
  234. package/dist_ts_apiclient/plugins.d.ts +0 -3
  235. package/dist_ts_apiclient/plugins.js +0 -5
  236. package/dist_ts_interfaces/data/acme-config.d.ts +0 -25
  237. package/dist_ts_interfaces/data/acme-config.js +0 -2
  238. package/dist_ts_interfaces/data/auth.d.ts +0 -8
  239. package/dist_ts_interfaces/data/auth.js +0 -2
  240. package/dist_ts_interfaces/data/dns-provider.d.ts +0 -136
  241. package/dist_ts_interfaces/data/dns-provider.js +0 -41
  242. package/dist_ts_interfaces/data/dns-record.d.ts +0 -42
  243. package/dist_ts_interfaces/data/dns-record.js +0 -2
  244. package/dist_ts_interfaces/data/domain.d.ts +0 -35
  245. package/dist_ts_interfaces/data/domain.js +0 -2
  246. package/dist_ts_interfaces/data/email-domain.d.ts +0 -70
  247. package/dist_ts_interfaces/data/email-domain.js +0 -2
  248. package/dist_ts_interfaces/data/index.d.ts +0 -11
  249. package/dist_ts_interfaces/data/index.js +0 -12
  250. package/dist_ts_interfaces/data/remoteingress.d.ts +0 -60
  251. package/dist_ts_interfaces/data/remoteingress.js +0 -2
  252. package/dist_ts_interfaces/data/route-management.d.ts +0 -110
  253. package/dist_ts_interfaces/data/route-management.js +0 -2
  254. package/dist_ts_interfaces/data/stats.d.ts +0 -238
  255. package/dist_ts_interfaces/data/stats.js +0 -2
  256. package/dist_ts_interfaces/data/target-profile.d.ts +0 -28
  257. package/dist_ts_interfaces/data/target-profile.js +0 -2
  258. package/dist_ts_interfaces/data/vpn.d.ts +0 -61
  259. package/dist_ts_interfaces/data/vpn.js +0 -2
  260. package/dist_ts_interfaces/index.d.ts +0 -5
  261. package/dist_ts_interfaces/index.js +0 -8
  262. package/dist_ts_interfaces/plugins.d.ts +0 -2
  263. package/dist_ts_interfaces/plugins.js +0 -4
  264. package/dist_ts_interfaces/requests/acme-config.d.ts +0 -42
  265. package/dist_ts_interfaces/requests/acme-config.js +0 -2
  266. package/dist_ts_interfaces/requests/admin.d.ts +0 -31
  267. package/dist_ts_interfaces/requests/admin.js +0 -3
  268. package/dist_ts_interfaces/requests/api-tokens.d.ts +0 -79
  269. package/dist_ts_interfaces/requests/api-tokens.js +0 -2
  270. package/dist_ts_interfaces/requests/certificate.d.ts +0 -111
  271. package/dist_ts_interfaces/requests/certificate.js +0 -3
  272. package/dist_ts_interfaces/requests/combined.stats.d.ts +0 -28
  273. package/dist_ts_interfaces/requests/combined.stats.js +0 -2
  274. package/dist_ts_interfaces/requests/config.d.ts +0 -90
  275. package/dist_ts_interfaces/requests/config.js +0 -3
  276. package/dist_ts_interfaces/requests/dns-providers.d.ts +0 -117
  277. package/dist_ts_interfaces/requests/dns-providers.js +0 -2
  278. package/dist_ts_interfaces/requests/dns-records.d.ts +0 -89
  279. package/dist_ts_interfaces/requests/dns-records.js +0 -2
  280. package/dist_ts_interfaces/requests/domains.d.ts +0 -142
  281. package/dist_ts_interfaces/requests/domains.js +0 -2
  282. package/dist_ts_interfaces/requests/email-domains.d.ts +0 -142
  283. package/dist_ts_interfaces/requests/email-domains.js +0 -2
  284. package/dist_ts_interfaces/requests/email-ops.d.ts +0 -82
  285. package/dist_ts_interfaces/requests/email-ops.js +0 -3
  286. package/dist_ts_interfaces/requests/index.d.ts +0 -21
  287. package/dist_ts_interfaces/requests/index.js +0 -22
  288. package/dist_ts_interfaces/requests/logs.d.ts +0 -41
  289. package/dist_ts_interfaces/requests/logs.js +0 -4
  290. package/dist_ts_interfaces/requests/network-targets.d.ts +0 -102
  291. package/dist_ts_interfaces/requests/network-targets.js +0 -2
  292. package/dist_ts_interfaces/requests/radius.d.ts +0 -268
  293. package/dist_ts_interfaces/requests/radius.js +0 -3
  294. package/dist_ts_interfaces/requests/remoteingress.d.ts +0 -108
  295. package/dist_ts_interfaces/requests/remoteingress.js +0 -3
  296. package/dist_ts_interfaces/requests/route-management.d.ts +0 -85
  297. package/dist_ts_interfaces/requests/route-management.js +0 -2
  298. package/dist_ts_interfaces/requests/source-profiles.d.ts +0 -102
  299. package/dist_ts_interfaces/requests/source-profiles.js +0 -2
  300. package/dist_ts_interfaces/requests/stats.d.ts +0 -177
  301. package/dist_ts_interfaces/requests/stats.js +0 -4
  302. package/dist_ts_interfaces/requests/target-profiles.d.ts +0 -103
  303. package/dist_ts_interfaces/requests/target-profiles.js +0 -2
  304. package/dist_ts_interfaces/requests/users.d.ts +0 -19
  305. package/dist_ts_interfaces/requests/users.js +0 -3
  306. package/dist_ts_interfaces/requests/vpn.d.ts +0 -177
  307. package/dist_ts_interfaces/requests/vpn.js +0 -3
  308. package/dist_ts_migrations/index.d.ts +0 -28
  309. package/dist_ts_migrations/index.js +0 -82
  310. package/dist_ts_oci_container/index.d.ts +0 -8
  311. package/dist_ts_oci_container/index.js +0 -110
  312. package/dist_ts_oci_container/plugins.d.ts +0 -3
  313. package/dist_ts_oci_container/plugins.js +0 -4
  314. package/dist_ts_web/00_commitinfo_data.d.ts +0 -8
  315. package/dist_ts_web/00_commitinfo_data.js +0 -9
  316. package/dist_ts_web/appstate.d.ts +0 -478
  317. package/dist_ts_web/appstate.js +0 -1968
  318. package/dist_ts_web/elements/access/index.d.ts +0 -2
  319. package/dist_ts_web/elements/access/index.js +0 -3
  320. package/dist_ts_web/elements/access/ops-view-apitokens.d.ts +0 -13
  321. package/dist_ts_web/elements/access/ops-view-apitokens.js +0 -372
  322. package/dist_ts_web/elements/access/ops-view-users.d.ts +0 -11
  323. package/dist_ts_web/elements/access/ops-view-users.js +0 -190
  324. package/dist_ts_web/elements/domains/dns-provider-form.d.ts +0 -60
  325. package/dist_ts_web/elements/domains/dns-provider-form.js +0 -259
  326. package/dist_ts_web/elements/domains/index.d.ts +0 -5
  327. package/dist_ts_web/elements/domains/index.js +0 -6
  328. package/dist_ts_web/elements/domains/ops-view-certificates.d.ts +0 -25
  329. package/dist_ts_web/elements/domains/ops-view-certificates.js +0 -669
  330. package/dist_ts_web/elements/domains/ops-view-dns.d.ts +0 -17
  331. package/dist_ts_web/elements/domains/ops-view-dns.js +0 -305
  332. package/dist_ts_web/elements/domains/ops-view-domains.d.ts +0 -19
  333. package/dist_ts_web/elements/domains/ops-view-domains.js +0 -456
  334. package/dist_ts_web/elements/domains/ops-view-providers.d.ts +0 -21
  335. package/dist_ts_web/elements/domains/ops-view-providers.js +0 -330
  336. package/dist_ts_web/elements/email/index.d.ts +0 -3
  337. package/dist_ts_web/elements/email/index.js +0 -4
  338. package/dist_ts_web/elements/email/ops-view-email-domains.d.ts +0 -19
  339. package/dist_ts_web/elements/email/ops-view-email-domains.js +0 -410
  340. package/dist_ts_web/elements/email/ops-view-email-security.d.ts +0 -14
  341. package/dist_ts_web/elements/email/ops-view-email-security.js +0 -178
  342. package/dist_ts_web/elements/email/ops-view-emails.d.ts +0 -21
  343. package/dist_ts_web/elements/email/ops-view-emails.js +0 -165
  344. package/dist_ts_web/elements/index.d.ts +0 -9
  345. package/dist_ts_web/elements/index.js +0 -10
  346. package/dist_ts_web/elements/network/index.d.ts +0 -7
  347. package/dist_ts_web/elements/network/index.js +0 -8
  348. package/dist_ts_web/elements/network/ops-view-network-activity.d.ts +0 -60
  349. package/dist_ts_web/elements/network/ops-view-network-activity.js +0 -753
  350. package/dist_ts_web/elements/network/ops-view-networktargets.d.ts +0 -17
  351. package/dist_ts_web/elements/network/ops-view-networktargets.js +0 -255
  352. package/dist_ts_web/elements/network/ops-view-remoteingress.d.ts +0 -20
  353. package/dist_ts_web/elements/network/ops-view-remoteingress.js +0 -497
  354. package/dist_ts_web/elements/network/ops-view-routes.d.ts +0 -16
  355. package/dist_ts_web/elements/network/ops-view-routes.js +0 -674
  356. package/dist_ts_web/elements/network/ops-view-sourceprofiles.d.ts +0 -17
  357. package/dist_ts_web/elements/network/ops-view-sourceprofiles.js +0 -278
  358. package/dist_ts_web/elements/network/ops-view-targetprofiles.d.ts +0 -21
  359. package/dist_ts_web/elements/network/ops-view-targetprofiles.js +0 -420
  360. package/dist_ts_web/elements/network/ops-view-vpn.d.ts +0 -31
  361. package/dist_ts_web/elements/network/ops-view-vpn.js +0 -873
  362. package/dist_ts_web/elements/ops-dashboard.d.ts +0 -31
  363. package/dist_ts_web/elements/ops-dashboard.js +0 -405
  364. package/dist_ts_web/elements/ops-view-logs.d.ts +0 -13
  365. package/dist_ts_web/elements/ops-view-logs.js +0 -159
  366. package/dist_ts_web/elements/overview/index.d.ts +0 -2
  367. package/dist_ts_web/elements/overview/index.js +0 -3
  368. package/dist_ts_web/elements/overview/ops-view-config.d.ts +0 -19
  369. package/dist_ts_web/elements/overview/ops-view-config.js +0 -339
  370. package/dist_ts_web/elements/overview/ops-view-overview.d.ts +0 -24
  371. package/dist_ts_web/elements/overview/ops-view-overview.js +0 -545
  372. package/dist_ts_web/elements/security/index.d.ts +0 -3
  373. package/dist_ts_web/elements/security/index.js +0 -4
  374. package/dist_ts_web/elements/security/ops-view-security-authentication.d.ts +0 -13
  375. package/dist_ts_web/elements/security/ops-view-security-authentication.js +0 -157
  376. package/dist_ts_web/elements/security/ops-view-security-blocked.d.ts +0 -15
  377. package/dist_ts_web/elements/security/ops-view-security-blocked.js +0 -153
  378. package/dist_ts_web/elements/security/ops-view-security-overview.d.ts +0 -16
  379. package/dist_ts_web/elements/security/ops-view-security-overview.js +0 -205
  380. package/dist_ts_web/elements/shared/css.d.ts +0 -1
  381. package/dist_ts_web/elements/shared/css.js +0 -10
  382. package/dist_ts_web/elements/shared/index.d.ts +0 -1
  383. package/dist_ts_web/elements/shared/index.js +0 -2
  384. package/dist_ts_web/index.d.ts +0 -1
  385. package/dist_ts_web/index.js +0 -10
  386. package/dist_ts_web/plugins.d.ts +0 -7
  387. package/dist_ts_web/plugins.js +0 -13
  388. package/dist_ts_web/router.d.ts +0 -21
  389. package/dist_ts_web/router.js +0 -151
@@ -1,483 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import { logger } from '../logger.js';
3
- import { SourceProfileDoc, NetworkTargetDoc, RouteDoc } from '../db/index.js';
4
- const MAX_INHERITANCE_DEPTH = 5;
5
- export class ReferenceResolver {
6
- profiles = new Map();
7
- targets = new Map();
8
- // =========================================================================
9
- // Lifecycle
10
- // =========================================================================
11
- async initialize() {
12
- await this.loadProfiles();
13
- await this.loadTargets();
14
- }
15
- // =========================================================================
16
- // Profile CRUD
17
- // =========================================================================
18
- async createProfile(data) {
19
- const id = plugins.uuid.v4();
20
- const now = Date.now();
21
- const profile = {
22
- id,
23
- name: data.name,
24
- description: data.description,
25
- security: data.security,
26
- extendsProfiles: data.extendsProfiles,
27
- createdAt: now,
28
- updatedAt: now,
29
- createdBy: data.createdBy,
30
- };
31
- this.profiles.set(id, profile);
32
- await this.persistProfile(profile);
33
- logger.log('info', `Created source profile '${profile.name}' (${id})`);
34
- return id;
35
- }
36
- async updateProfile(id, patch) {
37
- const profile = this.profiles.get(id);
38
- if (!profile) {
39
- throw new Error(`Source profile '${id}' not found`);
40
- }
41
- if (patch.name !== undefined)
42
- profile.name = patch.name;
43
- if (patch.description !== undefined)
44
- profile.description = patch.description;
45
- if (patch.security !== undefined)
46
- profile.security = patch.security;
47
- if (patch.extendsProfiles !== undefined)
48
- profile.extendsProfiles = patch.extendsProfiles;
49
- profile.updatedAt = Date.now();
50
- await this.persistProfile(profile);
51
- logger.log('info', `Updated source profile '${profile.name}' (${id})`);
52
- // Find routes referencing this profile
53
- const affectedRouteIds = await this.findRoutesByProfileRef(id);
54
- return { affectedRouteIds };
55
- }
56
- async deleteProfile(id, force, storedRoutes) {
57
- const profile = this.profiles.get(id);
58
- if (!profile) {
59
- return { success: false, message: `Source profile '${id}' not found` };
60
- }
61
- // Check usage
62
- const affectedIds = storedRoutes
63
- ? this.findRoutesByProfileRefSync(id, storedRoutes)
64
- : await this.findRoutesByProfileRef(id);
65
- if (affectedIds.length > 0 && !force) {
66
- return {
67
- success: false,
68
- message: `Profile '${profile.name}' is in use by ${affectedIds.length} route(s). Use force=true to delete.`,
69
- };
70
- }
71
- // Delete from DB
72
- const doc = await SourceProfileDoc.findById(id);
73
- if (doc)
74
- await doc.delete();
75
- this.profiles.delete(id);
76
- // If force-deleting with referencing routes, clear refs but keep resolved values
77
- if (affectedIds.length > 0) {
78
- await this.clearProfileRefsOnRoutes(affectedIds);
79
- logger.log('warn', `Force-deleted profile '${profile.name}'; cleared refs on ${affectedIds.length} route(s)`);
80
- }
81
- else {
82
- logger.log('info', `Deleted source profile '${profile.name}' (${id})`);
83
- }
84
- return { success: true };
85
- }
86
- getProfile(id) {
87
- return this.profiles.get(id);
88
- }
89
- getProfileByName(name) {
90
- for (const profile of this.profiles.values()) {
91
- if (profile.name === name)
92
- return profile;
93
- }
94
- return undefined;
95
- }
96
- listProfiles() {
97
- return [...this.profiles.values()];
98
- }
99
- getProfileUsage(storedRoutes) {
100
- const usage = new Map();
101
- for (const profile of this.profiles.values()) {
102
- usage.set(profile.id, []);
103
- }
104
- for (const [routeId, stored] of storedRoutes) {
105
- const ref = stored.metadata?.sourceProfileRef;
106
- if (ref && usage.has(ref)) {
107
- usage.get(ref).push({ id: routeId, routeName: stored.route.name || routeId });
108
- }
109
- }
110
- return usage;
111
- }
112
- getProfileUsageForId(profileId, storedRoutes) {
113
- const routes = [];
114
- for (const [routeId, stored] of storedRoutes) {
115
- if (stored.metadata?.sourceProfileRef === profileId) {
116
- routes.push({ id: routeId, routeName: stored.route.name || routeId });
117
- }
118
- }
119
- return routes;
120
- }
121
- // =========================================================================
122
- // Target CRUD
123
- // =========================================================================
124
- async createTarget(data) {
125
- const id = plugins.uuid.v4();
126
- const now = Date.now();
127
- const target = {
128
- id,
129
- name: data.name,
130
- description: data.description,
131
- host: data.host,
132
- port: data.port,
133
- createdAt: now,
134
- updatedAt: now,
135
- createdBy: data.createdBy,
136
- };
137
- this.targets.set(id, target);
138
- await this.persistTarget(target);
139
- logger.log('info', `Created network target '${target.name}' (${id})`);
140
- return id;
141
- }
142
- async updateTarget(id, patch) {
143
- const target = this.targets.get(id);
144
- if (!target) {
145
- throw new Error(`Network target '${id}' not found`);
146
- }
147
- if (patch.name !== undefined)
148
- target.name = patch.name;
149
- if (patch.description !== undefined)
150
- target.description = patch.description;
151
- if (patch.host !== undefined)
152
- target.host = patch.host;
153
- if (patch.port !== undefined)
154
- target.port = patch.port;
155
- target.updatedAt = Date.now();
156
- await this.persistTarget(target);
157
- logger.log('info', `Updated network target '${target.name}' (${id})`);
158
- const affectedRouteIds = await this.findRoutesByTargetRef(id);
159
- return { affectedRouteIds };
160
- }
161
- async deleteTarget(id, force, storedRoutes) {
162
- const target = this.targets.get(id);
163
- if (!target) {
164
- return { success: false, message: `Network target '${id}' not found` };
165
- }
166
- const affectedIds = storedRoutes
167
- ? this.findRoutesByTargetRefSync(id, storedRoutes)
168
- : await this.findRoutesByTargetRef(id);
169
- if (affectedIds.length > 0 && !force) {
170
- return {
171
- success: false,
172
- message: `Target '${target.name}' is in use by ${affectedIds.length} route(s). Use force=true to delete.`,
173
- };
174
- }
175
- const doc = await NetworkTargetDoc.findById(id);
176
- if (doc)
177
- await doc.delete();
178
- this.targets.delete(id);
179
- if (affectedIds.length > 0) {
180
- await this.clearTargetRefsOnRoutes(affectedIds);
181
- logger.log('warn', `Force-deleted target '${target.name}'; cleared refs on ${affectedIds.length} route(s)`);
182
- }
183
- else {
184
- logger.log('info', `Deleted network target '${target.name}' (${id})`);
185
- }
186
- return { success: true };
187
- }
188
- getTarget(id) {
189
- return this.targets.get(id);
190
- }
191
- getTargetByName(name) {
192
- for (const target of this.targets.values()) {
193
- if (target.name === name)
194
- return target;
195
- }
196
- return undefined;
197
- }
198
- listTargets() {
199
- return [...this.targets.values()];
200
- }
201
- getTargetUsageForId(targetId, storedRoutes) {
202
- const routes = [];
203
- for (const [routeId, stored] of storedRoutes) {
204
- if (stored.metadata?.networkTargetRef === targetId) {
205
- routes.push({ id: routeId, routeName: stored.route.name || routeId });
206
- }
207
- }
208
- return routes;
209
- }
210
- // =========================================================================
211
- // Resolution
212
- // =========================================================================
213
- /**
214
- * Resolve references for a single route.
215
- * Materializes source profile and/or network target into the route's fields.
216
- * Returns the resolved route and updated metadata.
217
- */
218
- resolveRoute(route, metadata) {
219
- const resolvedMetadata = { ...metadata };
220
- if (resolvedMetadata.sourceProfileRef) {
221
- const resolvedSecurity = this.resolveSourceProfile(resolvedMetadata.sourceProfileRef);
222
- if (resolvedSecurity) {
223
- const profile = this.profiles.get(resolvedMetadata.sourceProfileRef);
224
- // Merge: profile provides base, route's inline values override
225
- route = {
226
- ...route,
227
- security: this.mergeSecurityFields(resolvedSecurity, route.security),
228
- };
229
- resolvedMetadata.sourceProfileName = profile?.name;
230
- resolvedMetadata.lastResolvedAt = Date.now();
231
- }
232
- else {
233
- logger.log('warn', `Source profile '${resolvedMetadata.sourceProfileRef}' not found during resolution`);
234
- }
235
- }
236
- if (resolvedMetadata.networkTargetRef) {
237
- const target = this.targets.get(resolvedMetadata.networkTargetRef);
238
- if (target) {
239
- const hosts = Array.isArray(target.host) ? target.host : [target.host];
240
- route = {
241
- ...route,
242
- action: {
243
- ...route.action,
244
- targets: hosts.map((h) => ({
245
- host: h,
246
- port: target.port,
247
- })),
248
- },
249
- };
250
- resolvedMetadata.networkTargetName = target.name;
251
- resolvedMetadata.lastResolvedAt = Date.now();
252
- }
253
- else {
254
- logger.log('warn', `Network target '${resolvedMetadata.networkTargetRef}' not found during resolution`);
255
- }
256
- }
257
- return { route, metadata: resolvedMetadata };
258
- }
259
- // =========================================================================
260
- // Reference lookup helpers
261
- // =========================================================================
262
- async findRoutesByProfileRef(profileId) {
263
- const docs = await RouteDoc.findAll();
264
- return docs
265
- .filter((doc) => doc.metadata?.sourceProfileRef === profileId)
266
- .map((doc) => doc.id);
267
- }
268
- async findRoutesByTargetRef(targetId) {
269
- const docs = await RouteDoc.findAll();
270
- return docs
271
- .filter((doc) => doc.metadata?.networkTargetRef === targetId)
272
- .map((doc) => doc.id);
273
- }
274
- findRoutesByProfileRefSync(profileId, storedRoutes) {
275
- const ids = [];
276
- for (const [routeId, stored] of storedRoutes) {
277
- if (stored.metadata?.sourceProfileRef === profileId) {
278
- ids.push(routeId);
279
- }
280
- }
281
- return ids;
282
- }
283
- findRoutesByTargetRefSync(targetId, storedRoutes) {
284
- const ids = [];
285
- for (const [routeId, stored] of storedRoutes) {
286
- if (stored.metadata?.networkTargetRef === targetId) {
287
- ids.push(routeId);
288
- }
289
- }
290
- return ids;
291
- }
292
- // =========================================================================
293
- // Private: source profile resolution with inheritance
294
- // =========================================================================
295
- resolveSourceProfile(profileId, visited = new Set(), depth = 0) {
296
- if (depth > MAX_INHERITANCE_DEPTH) {
297
- logger.log('warn', `Max inheritance depth (${MAX_INHERITANCE_DEPTH}) exceeded resolving profile '${profileId}'`);
298
- return null;
299
- }
300
- if (visited.has(profileId)) {
301
- logger.log('warn', `Circular inheritance detected for profile '${profileId}'`);
302
- return null;
303
- }
304
- const profile = this.profiles.get(profileId);
305
- if (!profile)
306
- return null;
307
- visited.add(profileId);
308
- // Start with an empty base
309
- let baseSecurity = {};
310
- // Resolve parent profiles first (top-down, later overrides earlier)
311
- if (profile.extendsProfiles?.length) {
312
- for (const parentId of profile.extendsProfiles) {
313
- const parentSecurity = this.resolveSourceProfile(parentId, new Set(visited), depth + 1);
314
- if (parentSecurity) {
315
- baseSecurity = this.mergeSecurityFields(baseSecurity, parentSecurity);
316
- }
317
- }
318
- }
319
- // Apply this profile's security on top
320
- return this.mergeSecurityFields(baseSecurity, profile.security);
321
- }
322
- /**
323
- * Merge two IRouteSecurity objects.
324
- * `override` values take precedence over `base` values.
325
- * For ipAllowList/ipBlockList: union arrays and deduplicate.
326
- * For scalar/object fields: override wins if present.
327
- */
328
- mergeSecurityFields(base, override) {
329
- if (!base && !override)
330
- return {};
331
- if (!base)
332
- return { ...override };
333
- if (!override)
334
- return { ...base };
335
- const merged = { ...base };
336
- // IP lists: union
337
- if (override.ipAllowList || base.ipAllowList) {
338
- merged.ipAllowList = [...new Set([
339
- ...(base.ipAllowList || []),
340
- ...(override.ipAllowList || []),
341
- ])];
342
- }
343
- if (override.ipBlockList || base.ipBlockList) {
344
- merged.ipBlockList = [...new Set([
345
- ...(base.ipBlockList || []),
346
- ...(override.ipBlockList || []),
347
- ])];
348
- }
349
- // Scalar/object fields: override wins
350
- if (override.maxConnections !== undefined)
351
- merged.maxConnections = override.maxConnections;
352
- if (override.rateLimit !== undefined)
353
- merged.rateLimit = override.rateLimit;
354
- if (override.authentication !== undefined)
355
- merged.authentication = override.authentication;
356
- if (override.basicAuth !== undefined)
357
- merged.basicAuth = override.basicAuth;
358
- if (override.jwtAuth !== undefined)
359
- merged.jwtAuth = override.jwtAuth;
360
- return merged;
361
- }
362
- // =========================================================================
363
- // Private: persistence
364
- // =========================================================================
365
- async loadProfiles() {
366
- const docs = await SourceProfileDoc.findAll();
367
- for (const doc of docs) {
368
- if (doc.id) {
369
- this.profiles.set(doc.id, {
370
- id: doc.id,
371
- name: doc.name,
372
- description: doc.description,
373
- security: doc.security,
374
- extendsProfiles: doc.extendsProfiles,
375
- createdAt: doc.createdAt,
376
- updatedAt: doc.updatedAt,
377
- createdBy: doc.createdBy,
378
- });
379
- }
380
- }
381
- if (this.profiles.size > 0) {
382
- logger.log('info', `Loaded ${this.profiles.size} source profile(s) from storage`);
383
- }
384
- }
385
- async loadTargets() {
386
- const docs = await NetworkTargetDoc.findAll();
387
- for (const doc of docs) {
388
- if (doc.id) {
389
- this.targets.set(doc.id, {
390
- id: doc.id,
391
- name: doc.name,
392
- description: doc.description,
393
- host: doc.host,
394
- port: doc.port,
395
- createdAt: doc.createdAt,
396
- updatedAt: doc.updatedAt,
397
- createdBy: doc.createdBy,
398
- });
399
- }
400
- }
401
- if (this.targets.size > 0) {
402
- logger.log('info', `Loaded ${this.targets.size} network target(s) from storage`);
403
- }
404
- }
405
- async persistProfile(profile) {
406
- const existingDoc = await SourceProfileDoc.findById(profile.id);
407
- if (existingDoc) {
408
- existingDoc.name = profile.name;
409
- existingDoc.description = profile.description;
410
- existingDoc.security = profile.security;
411
- existingDoc.extendsProfiles = profile.extendsProfiles;
412
- existingDoc.updatedAt = profile.updatedAt;
413
- await existingDoc.save();
414
- }
415
- else {
416
- const doc = new SourceProfileDoc();
417
- doc.id = profile.id;
418
- doc.name = profile.name;
419
- doc.description = profile.description;
420
- doc.security = profile.security;
421
- doc.extendsProfiles = profile.extendsProfiles;
422
- doc.createdAt = profile.createdAt;
423
- doc.updatedAt = profile.updatedAt;
424
- doc.createdBy = profile.createdBy;
425
- await doc.save();
426
- }
427
- }
428
- async persistTarget(target) {
429
- const existingDoc = await NetworkTargetDoc.findById(target.id);
430
- if (existingDoc) {
431
- existingDoc.name = target.name;
432
- existingDoc.description = target.description;
433
- existingDoc.host = target.host;
434
- existingDoc.port = target.port;
435
- existingDoc.updatedAt = target.updatedAt;
436
- await existingDoc.save();
437
- }
438
- else {
439
- const doc = new NetworkTargetDoc();
440
- doc.id = target.id;
441
- doc.name = target.name;
442
- doc.description = target.description;
443
- doc.host = target.host;
444
- doc.port = target.port;
445
- doc.createdAt = target.createdAt;
446
- doc.updatedAt = target.updatedAt;
447
- doc.createdBy = target.createdBy;
448
- await doc.save();
449
- }
450
- }
451
- // =========================================================================
452
- // Private: ref cleanup on force-delete
453
- // =========================================================================
454
- async clearProfileRefsOnRoutes(routeIds) {
455
- for (const routeId of routeIds) {
456
- const doc = await RouteDoc.findById(routeId);
457
- if (doc?.metadata) {
458
- doc.metadata = {
459
- ...doc.metadata,
460
- sourceProfileRef: undefined,
461
- sourceProfileName: undefined,
462
- };
463
- doc.updatedAt = Date.now();
464
- await doc.save();
465
- }
466
- }
467
- }
468
- async clearTargetRefsOnRoutes(routeIds) {
469
- for (const routeId of routeIds) {
470
- const doc = await RouteDoc.findById(routeId);
471
- if (doc?.metadata) {
472
- doc.metadata = {
473
- ...doc.metadata,
474
- networkTargetRef: undefined,
475
- networkTargetName: undefined,
476
- };
477
- doc.updatedAt = Date.now();
478
- await doc.save();
479
- }
480
- }
481
- }
482
- }
483
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZWZlcmVuY2UtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb25maWcvY2xhc3Nlcy5yZWZlcmVuY2UtcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFTOUUsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFaEMsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFDN0MsT0FBTyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBRXBELDRFQUE0RTtJQUM1RSxZQUFZO0lBQ1osNEVBQTRFO0lBRXJFLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsZUFBZTtJQUNmLDRFQUE0RTtJQUVyRSxLQUFLLENBQUMsYUFBYSxDQUFDLElBTTFCO1FBQ0MsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkIsTUFBTSxPQUFPLEdBQW1CO1lBQzlCLEVBQUU7WUFDRixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxTQUFTLEVBQUUsR0FBRztZQUNkLFNBQVMsRUFBRSxHQUFHO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0IsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDJCQUEyQixPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FDeEIsRUFBVSxFQUNWLEtBQXNFO1FBRXRFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3hELElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzdFLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3BFLElBQUksS0FBSyxDQUFDLGVBQWUsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQ3pGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRS9CLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSwyQkFBMkIsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXZFLHVDQUF1QztRQUN2QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUN4QixFQUFVLEVBQ1YsS0FBYyxFQUNkLFlBQWtDO1FBRWxDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUN6RSxDQUFDO1FBRUQsY0FBYztRQUNkLE1BQU0sV0FBVyxHQUFHLFlBQVk7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDO1lBQ25ELENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsWUFBWSxPQUFPLENBQUMsSUFBSSxrQkFBa0IsV0FBVyxDQUFDLE1BQU0sc0NBQXNDO2FBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksR0FBRztZQUFFLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpCLGlGQUFpRjtRQUNqRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLE9BQU8sQ0FBQyxJQUFJLHNCQUFzQixXQUFXLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUNoSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDJCQUEyQixPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLFVBQVUsQ0FBQyxFQUFVO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLGdCQUFnQixDQUFDLElBQVk7UUFDbEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUk7Z0JBQUUsT0FBTyxPQUFPLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sZUFBZSxDQUFDLFlBQWlDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFvRCxDQUFDO1FBQzFFLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQzdDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUM7WUFDOUMsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDakYsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxvQkFBb0IsQ0FDekIsU0FBaUIsRUFDakIsWUFBaUM7UUFFakMsTUFBTSxNQUFNLEdBQTZDLEVBQUUsQ0FBQztRQUM1RCxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDN0MsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsY0FBYztJQUNkLDRFQUE0RTtJQUVyRSxLQUFLLENBQUMsWUFBWSxDQUFDLElBTXpCO1FBQ0MsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkIsTUFBTSxNQUFNLEdBQW1CO1lBQzdCLEVBQUU7WUFDRixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLEdBQUc7WUFDZCxTQUFTLEVBQUUsR0FBRztZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMxQixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSwyQkFBMkIsTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQ3ZCLEVBQVUsRUFDVixLQUFzRTtRQUV0RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUztZQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssU0FBUztZQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUM1RSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUztZQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2RCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUztZQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2RCxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU5QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0RSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUN2QixFQUFVLEVBQ1YsS0FBYyxFQUNkLFlBQWtDO1FBRWxDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUN6RSxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsWUFBWTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUM7WUFDbEQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxXQUFXLE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixXQUFXLENBQUMsTUFBTSxzQ0FBc0M7YUFDMUcsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLEdBQUc7WUFBRSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUseUJBQXlCLE1BQU0sQ0FBQyxJQUFJLHNCQUFzQixXQUFXLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUM5RyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDJCQUEyQixNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLFNBQVMsQ0FBQyxFQUFVO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzNDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLG1CQUFtQixDQUN4QixRQUFnQixFQUNoQixZQUFpQztRQUVqQyxNQUFNLE1BQU0sR0FBNkMsRUFBRSxDQUFDO1FBQzVELEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUM3QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxhQUFhO0lBQ2IsNEVBQTRFO0lBRTVFOzs7O09BSUc7SUFDSSxZQUFZLENBQ2pCLEtBQXNDLEVBQ3RDLFFBQXlCO1FBRXpCLE1BQU0sZ0JBQWdCLEdBQW1CLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUV6RCxJQUFJLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RixJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3JFLCtEQUErRDtnQkFDL0QsS0FBSyxHQUFHO29CQUNOLEdBQUcsS0FBSztvQkFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7aUJBQ3JFLENBQUM7Z0JBQ0YsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztnQkFDbkQsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLGdCQUFnQixDQUFDLGdCQUFnQiwrQkFBK0IsQ0FBQyxDQUFDO1lBQzFHLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbkUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZFLEtBQUssR0FBRztvQkFDTixHQUFHLEtBQUs7b0JBQ1IsTUFBTSxFQUFFO3dCQUNOLEdBQUcsS0FBSyxDQUFDLE1BQU07d0JBQ2YsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQ3pCLElBQUksRUFBRSxDQUFDOzRCQUNQLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTt5QkFDbEIsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGLENBQUM7Z0JBQ0YsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDakQsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLGdCQUFnQixDQUFDLGdCQUFnQiwrQkFBK0IsQ0FBQyxDQUFDO1lBQzFHLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLDJCQUEyQjtJQUMzQiw0RUFBNEU7SUFFckUsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWlCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSTthQUNSLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsS0FBSyxTQUFTLENBQUM7YUFDN0QsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFnQjtRQUNqRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUk7YUFDUixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEtBQUssUUFBUSxDQUFDO2FBQzVELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSwwQkFBMEIsQ0FBQyxTQUFpQixFQUFFLFlBQWlDO1FBQ3BGLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN6QixLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDN0MsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0seUJBQXlCLENBQUMsUUFBZ0IsRUFBRSxZQUFpQztRQUNsRixNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQzdDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkQsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxzREFBc0Q7SUFDdEQsNEVBQTRFO0lBRXBFLG9CQUFvQixDQUMxQixTQUFpQixFQUNqQixVQUF1QixJQUFJLEdBQUcsRUFBRSxFQUNoQyxRQUFnQixDQUFDO1FBRWpCLElBQUksS0FBSyxHQUFHLHFCQUFxQixFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLHFCQUFxQixpQ0FBaUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqSCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSw4Q0FBOEMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUMvRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkIsMkJBQTJCO1FBQzNCLElBQUksWUFBWSxHQUFtQixFQUFFLENBQUM7UUFFdEMsb0VBQW9FO1FBQ3BFLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNwQyxLQUFLLE1BQU0sUUFBUSxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hGLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN4RSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxtQkFBbUIsQ0FDekIsSUFBZ0MsRUFDaEMsUUFBb0M7UUFFcEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFFbEMsTUFBTSxNQUFNLEdBQW1CLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUUzQyxrQkFBa0I7UUFDbEIsSUFBSSxRQUFRLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztvQkFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO29CQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7aUJBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7b0JBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2lCQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxRQUFRLENBQUMsY0FBYyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDM0YsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDNUUsSUFBSSxRQUFRLENBQUMsY0FBYyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDM0YsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDNUUsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFFdEUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSx1QkFBdUI7SUFDdkIsNEVBQTRFO0lBRXBFLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO29CQUN4QixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNkLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztvQkFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO29CQUN0QixlQUFlLEVBQUUsR0FBRyxDQUFDLGVBQWU7b0JBQ3BDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztvQkFDeEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO29CQUN4QixTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7aUJBQ3pCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVc7UUFDdkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDVixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO29CQUM1QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNkLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztvQkFDeEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO29CQUN4QixTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7aUJBQ3pCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUF1QjtRQUNsRCxNQUFNLFdBQVcsR0FBRyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixXQUFXLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEMsV0FBVyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUN4QyxXQUFXLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDdEQsV0FBVyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQzFDLE1BQU0sV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25DLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDeEIsR0FBRyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNoQyxHQUFHLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDOUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ2xDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNsQyxHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDbEMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQXNCO1FBQ2hELE1BQU0sV0FBVyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUMvQixXQUFXLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDN0MsV0FBVyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQy9CLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUMvQixXQUFXLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDekMsTUFBTSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDbkMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN2QixHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDckMsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN2QixHQUFHLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDakMsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNqQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSx1Q0FBdUM7SUFDdkMsNEVBQTRFO0lBRXBFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxRQUFrQjtRQUN2RCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsR0FBRyxDQUFDLFFBQVEsR0FBRztvQkFDYixHQUFHLEdBQUcsQ0FBQyxRQUFRO29CQUNmLGdCQUFnQixFQUFFLFNBQVM7b0JBQzNCLGlCQUFpQixFQUFFLFNBQVM7aUJBQzdCLENBQUM7Z0JBQ0YsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxRQUFrQjtRQUN0RCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsR0FBRyxDQUFDLFFBQVEsR0FBRztvQkFDYixHQUFHLEdBQUcsQ0FBQyxRQUFRO29CQUNmLGdCQUFnQixFQUFFLFNBQVM7b0JBQzNCLGlCQUFpQixFQUFFLFNBQVM7aUJBQzdCLENBQUM7Z0JBQ0YsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -1,54 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import type { IRoute, IMergedRoute, IRouteWarning, IRouteMetadata } from '../../dist_ts_interfaces/data/route-management.js';
3
- import type { IDcRouterRouteConfig } from '../../dist_ts_interfaces/data/remoteingress.js';
4
- import { type IHttp3Config } from '../http3/index.js';
5
- import type { ReferenceResolver } from './classes.reference-resolver.js';
6
- /** An IP allow entry: plain IP/CIDR or domain-scoped. */
7
- export type TIpAllowEntry = string | {
8
- ip: string;
9
- domains: string[];
10
- };
11
- export declare class RouteConfigManager {
12
- private getSmartProxy;
13
- private getHttp3Config?;
14
- private getVpnClientIpsForRoute?;
15
- private referenceResolver?;
16
- private onRoutesApplied?;
17
- private routes;
18
- private warnings;
19
- private routeUpdateMutex;
20
- constructor(getSmartProxy: () => plugins.smartproxy.SmartProxy | undefined, getHttp3Config?: (() => IHttp3Config | undefined) | undefined, getVpnClientIpsForRoute?: ((route: IDcRouterRouteConfig, routeId?: string) => TIpAllowEntry[]) | undefined, referenceResolver?: ReferenceResolver | undefined, onRoutesApplied?: ((routes: plugins.smartproxy.IRouteConfig[]) => void) | undefined);
21
- /** Expose routes map for reference resolution lookups. */
22
- getRoutes(): Map<string, IRoute>;
23
- /**
24
- * Load persisted routes, seed config/email/dns routes, compute warnings, apply to SmartProxy.
25
- */
26
- initialize(configRoutes?: IDcRouterRouteConfig[], emailRoutes?: IDcRouterRouteConfig[], dnsRoutes?: IDcRouterRouteConfig[]): Promise<void>;
27
- getMergedRoutes(): {
28
- routes: IMergedRoute[];
29
- warnings: IRouteWarning[];
30
- };
31
- createRoute(route: IDcRouterRouteConfig, createdBy: string, enabled?: boolean, metadata?: IRouteMetadata): Promise<string>;
32
- updateRoute(id: string, patch: {
33
- route?: Partial<IDcRouterRouteConfig>;
34
- enabled?: boolean;
35
- metadata?: Partial<IRouteMetadata>;
36
- }): Promise<boolean>;
37
- deleteRoute(id: string): Promise<boolean>;
38
- toggleRoute(id: string, enabled: boolean): Promise<boolean>;
39
- /**
40
- * Upsert seed routes by name+origin. Preserves user's `enabled` state.
41
- * Deletes stale DB routes whose origin matches but name is not in the seed set.
42
- */
43
- private seedRoutes;
44
- private loadRoutes;
45
- private persistRoute;
46
- private computeWarnings;
47
- private logWarnings;
48
- /**
49
- * Re-resolve specific routes by ID (after a profile or target is updated).
50
- * Persists each route and calls applyRoutes() once at the end.
51
- */
52
- reResolveRoutes(routeIds: string[]): Promise<void>;
53
- applyRoutes(): Promise<void>;
54
- }