breeze-client 2.2.1 → 3.0.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 (299) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +83 -63
  3. package/adapters/abstract-data-service-adapter.d.ts +120 -0
  4. package/adapters/abstract-data-service-adapter.js +395 -0
  5. package/adapters/abstract-data-service-adapter.js.map +1 -0
  6. package/adapters/adapter-ajax-fetch.d.ts +12 -0
  7. package/adapters/adapter-ajax-fetch.js +13 -0
  8. package/adapters/adapter-ajax-fetch.js.map +1 -0
  9. package/{adapter-ajax-post → adapters}/adapter-ajax-post.d.ts +40 -36
  10. package/{fesm2022/breeze-client-adapter-ajax-post.mjs → adapters/adapter-ajax-post.js} +80 -82
  11. package/adapters/adapter-ajax-post.js.map +1 -0
  12. package/{adapter-ajax-fetch → adapters}/adapter-core.d.ts +4 -4
  13. package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → adapters/adapter-core.js} +48 -91
  14. package/adapters/adapter-core.js.map +1 -0
  15. package/adapters/adapter-data-service-webapi.d.ts +9 -0
  16. package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → adapters/adapter-data-service-webapi.js} +105 -107
  17. package/adapters/adapter-data-service-webapi.js.map +1 -0
  18. package/adapters/adapter-model-library-backing-store.d.ts +32 -0
  19. package/adapters/adapter-model-library-backing-store.js +321 -0
  20. package/adapters/adapter-model-library-backing-store.js.map +1 -0
  21. package/adapters/adapter-uri-builder-json.d.ts +11 -0
  22. package/adapters/adapter-uri-builder-json.js +40 -0
  23. package/adapters/adapter-uri-builder-json.js.map +1 -0
  24. package/adapters/http.d.ts +52 -0
  25. package/adapters/http.js +202 -0
  26. package/adapters/http.js.map +1 -0
  27. package/angular/adapter-angular-httpclient.d.ts +21 -0
  28. package/angular/adapter-angular-httpclient.js +70 -0
  29. package/angular/adapter-angular-httpclient.js.map +1 -0
  30. package/breeze.d.ts +215 -0
  31. package/breeze.js +141 -0
  32. package/breeze.js.map +1 -0
  33. package/config/config.d.ts +212 -0
  34. package/config/config.js +392 -0
  35. package/config/config.js.map +1 -0
  36. package/config/configure.d.ts +66 -0
  37. package/config/configure.js +46 -0
  38. package/config/configure.js.map +1 -0
  39. package/config/default-adapters.d.ts +1 -0
  40. package/config/default-adapters.js +40 -0
  41. package/config/default-adapters.js.map +1 -0
  42. package/config/interface-registry.d.ts +191 -0
  43. package/config/interface-registry.js +5 -0
  44. package/config/interface-registry.js.map +1 -0
  45. package/{src → core}/assert-param.d.ts +52 -60
  46. package/core/assert-param.js +390 -0
  47. package/core/assert-param.js.map +1 -0
  48. package/core/core.d.ts +285 -0
  49. package/core/core.js +772 -0
  50. package/core/core.js.map +1 -0
  51. package/core/enum.d.ts +116 -0
  52. package/core/enum.js +167 -0
  53. package/core/enum.js.map +1 -0
  54. package/core/event.d.ts +169 -0
  55. package/core/event.js +338 -0
  56. package/core/event.js.map +1 -0
  57. package/entity/array.d.ts +3 -0
  58. package/entity/array.js +4 -0
  59. package/entity/array.js.map +1 -0
  60. package/entity/complex-array.d.ts +17 -0
  61. package/entity/complex-array.js +104 -0
  62. package/entity/complex-array.js.map +1 -0
  63. package/entity/default-property-interceptor.d.ts +1 -0
  64. package/entity/default-property-interceptor.js +496 -0
  65. package/entity/default-property-interceptor.js.map +1 -0
  66. package/{src → entity}/entity-action.d.ts +36 -42
  67. package/entity/entity-action.js +45 -0
  68. package/entity/entity-action.js.map +1 -0
  69. package/entity/entity-aspect.d.ts +457 -0
  70. package/entity/entity-aspect.js +1262 -0
  71. package/entity/entity-aspect.js.map +1 -0
  72. package/entity/entity-base.d.ts +55 -0
  73. package/entity/entity-base.js +41 -0
  74. package/entity/entity-base.js.map +1 -0
  75. package/entity/entity-group.d.ts +1 -0
  76. package/entity/entity-group.js +224 -0
  77. package/entity/entity-group.js.map +1 -0
  78. package/entity/entity-key.d.ts +95 -0
  79. package/entity/entity-key.js +189 -0
  80. package/entity/entity-key.js.map +1 -0
  81. package/{src → entity}/entity-state.d.ts +112 -84
  82. package/entity/entity-state.js +135 -0
  83. package/entity/entity-state.js.map +1 -0
  84. package/entity/key-generator.d.ts +57 -0
  85. package/entity/key-generator.js +155 -0
  86. package/entity/key-generator.js.map +1 -0
  87. package/entity/observable-array.d.ts +25 -0
  88. package/entity/observable-array.js +230 -0
  89. package/entity/observable-array.js.map +1 -0
  90. package/entity/primitive-array.d.ts +12 -0
  91. package/entity/primitive-array.js +71 -0
  92. package/entity/primitive-array.js.map +1 -0
  93. package/entity/relation-array.d.ts +24 -0
  94. package/entity/relation-array.js +176 -0
  95. package/entity/relation-array.js.map +1 -0
  96. package/entity/unattached-children-map.d.ts +1 -0
  97. package/entity/unattached-children-map.js +105 -0
  98. package/entity/unattached-children-map.js.map +1 -0
  99. package/generate-entity-classes.js +1176 -0
  100. package/manager/entity-manager.d.ts +801 -0
  101. package/manager/entity-manager.js +2395 -0
  102. package/manager/entity-manager.js.map +1 -0
  103. package/{src → manager}/save-options.d.ts +48 -42
  104. package/manager/save-options.js +51 -0
  105. package/manager/save-options.js.map +1 -0
  106. package/{src → metadata}/data-service.d.ts +229 -184
  107. package/metadata/data-service.js +246 -0
  108. package/metadata/data-service.js.map +1 -0
  109. package/metadata/data-type.d.ts +122 -0
  110. package/metadata/data-type.js +465 -0
  111. package/metadata/data-type.js.map +1 -0
  112. package/metadata/entity-metadata.d.ts +1193 -0
  113. package/metadata/entity-metadata.js +2502 -0
  114. package/metadata/entity-metadata.js.map +1 -0
  115. package/{src → metadata}/local-query-comparison-options.d.ts +65 -59
  116. package/metadata/local-query-comparison-options.js +69 -0
  117. package/metadata/local-query-comparison-options.js.map +1 -0
  118. package/{src → metadata}/naming-convention.d.ts +75 -72
  119. package/metadata/naming-convention.js +97 -0
  120. package/metadata/naming-convention.js.map +1 -0
  121. package/mixins/mixin-get-entity-graph.d.ts +63 -0
  122. package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → mixins/mixin-get-entity-graph.js} +331 -253
  123. package/mixins/mixin-get-entity-graph.js.map +1 -0
  124. package/mixins/mixin-save-queuing.d.ts +98 -0
  125. package/{fesm2022/breeze-client-mixin-save-queuing.mjs → mixins/mixin-save-queuing.js} +493 -365
  126. package/mixins/mixin-save-queuing.js.map +1 -0
  127. package/package.json +62 -93
  128. package/query/entity-query.d.ts +521 -0
  129. package/query/entity-query.js +1149 -0
  130. package/query/entity-query.js.map +1 -0
  131. package/{src → query}/mapping-context.d.ts +44 -46
  132. package/query/mapping-context.js +412 -0
  133. package/query/mapping-context.js.map +1 -0
  134. package/query/predicate.d.ts +394 -0
  135. package/query/predicate.js +1294 -0
  136. package/query/predicate.js.map +1 -0
  137. package/query/property-path.d.ts +252 -0
  138. package/query/property-path.js +2 -0
  139. package/query/property-path.js.map +1 -0
  140. package/{src → query}/query-options.d.ts +143 -119
  141. package/query/query-options.js +180 -0
  142. package/query/query-options.js.map +1 -0
  143. package/rxjs/breeze-rxjs.d.ts +72 -0
  144. package/rxjs/breeze-rxjs.js +117 -0
  145. package/rxjs/breeze-rxjs.js.map +1 -0
  146. package/validation/validate.d.ts +583 -0
  147. package/validation/validate.js +961 -0
  148. package/validation/validate.js.map +1 -0
  149. package/{src → validation}/validation-options.d.ts +67 -63
  150. package/validation/validation-options.js +70 -0
  151. package/validation/validation-options.js.map +1 -0
  152. package/adapter-ajax-angularjs/adapter-ajax-angularjs.d.ts +0 -17
  153. package/adapter-ajax-angularjs/adapter-core.d.ts +0 -4
  154. package/adapter-ajax-angularjs/index.d.ts +0 -5
  155. package/adapter-ajax-fetch/adapter-ajax-fetch.d.ts +0 -18
  156. package/adapter-ajax-fetch/index.d.ts +0 -5
  157. package/adapter-ajax-httpclient/adapter-ajax-httpclient.d.ts +0 -13
  158. package/adapter-ajax-httpclient/adapter-core.d.ts +0 -4
  159. package/adapter-ajax-httpclient/index.d.ts +0 -5
  160. package/adapter-ajax-jquery/adapter-ajax-jquery.d.ts +0 -15
  161. package/adapter-ajax-jquery/index.d.ts +0 -5
  162. package/adapter-ajax-post/index.d.ts +0 -5
  163. package/adapter-data-service-odata/adapter-core.d.ts +0 -4
  164. package/adapter-data-service-odata/adapter-data-service-odata.d.ts +0 -17
  165. package/adapter-data-service-odata/index.d.ts +0 -5
  166. package/adapter-data-service-webapi/adapter-data-service-webapi.d.ts +0 -15
  167. package/adapter-data-service-webapi/index.d.ts +0 -5
  168. package/adapter-model-library-backing-store/adapter-model-library-backing-store.d.ts +0 -10
  169. package/adapter-model-library-backing-store/index.d.ts +0 -5
  170. package/adapter-model-library-ko/adapter-model-library-ko.d.ts +0 -10
  171. package/adapter-model-library-ko/index.d.ts +0 -5
  172. package/adapter-uri-builder-json/adapter-core.d.ts +0 -4
  173. package/adapter-uri-builder-json/adapter-uri-builder-json.d.ts +0 -8
  174. package/adapter-uri-builder-json/index.d.ts +0 -5
  175. package/adapter-uri-builder-odata/adapter-core.d.ts +0 -4
  176. package/adapter-uri-builder-odata/adapter-uri-builder-odata.d.ts +0 -8
  177. package/adapter-uri-builder-odata/index.d.ts +0 -5
  178. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
  179. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  180. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  181. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
  182. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
  183. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  184. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
  185. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  186. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  187. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
  188. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  189. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  190. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  191. package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
  192. package/esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs +0 -461
  193. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  194. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
  195. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  196. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
  197. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  198. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
  199. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  200. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
  201. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
  202. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  203. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  204. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
  205. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  206. package/esm2022/breeze-client.mjs +0 -5
  207. package/esm2022/index.mjs +0 -2
  208. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  209. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  210. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  211. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
  212. package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
  213. package/esm2022/src/array.mjs +0 -4
  214. package/esm2022/src/assert-param.mjs +0 -330
  215. package/esm2022/src/breeze.mjs +0 -85
  216. package/esm2022/src/complex-array.mjs +0 -117
  217. package/esm2022/src/config.mjs +0 -232
  218. package/esm2022/src/core.mjs +0 -712
  219. package/esm2022/src/csdl-metadata-parser.mjs +0 -385
  220. package/esm2022/src/data-service.mjs +0 -221
  221. package/esm2022/src/data-type.mjs +0 -510
  222. package/esm2022/src/default-property-interceptor.mjs +0 -460
  223. package/esm2022/src/entity-action.mjs +0 -45
  224. package/esm2022/src/entity-aspect.mjs +0 -897
  225. package/esm2022/src/entity-group.mjs +0 -192
  226. package/esm2022/src/entity-key.mjs +0 -125
  227. package/esm2022/src/entity-manager.mjs +0 -2163
  228. package/esm2022/src/entity-metadata.mjs +0 -2242
  229. package/esm2022/src/entity-query.mjs +0 -1024
  230. package/esm2022/src/entity-state.mjs +0 -107
  231. package/esm2022/src/enum.mjs +0 -143
  232. package/esm2022/src/event.mjs +0 -264
  233. package/esm2022/src/interface-registry.mjs +0 -39
  234. package/esm2022/src/key-generator.mjs +0 -110
  235. package/esm2022/src/local-query-comparison-options.mjs +0 -65
  236. package/esm2022/src/mapping-context.mjs +0 -411
  237. package/esm2022/src/naming-convention.mjs +0 -92
  238. package/esm2022/src/observable-array.mjs +0 -183
  239. package/esm2022/src/predicate.mjs +0 -1259
  240. package/esm2022/src/primitive-array.mjs +0 -85
  241. package/esm2022/src/query-options.mjs +0 -152
  242. package/esm2022/src/relation-array.mjs +0 -173
  243. package/esm2022/src/save-options.mjs +0 -41
  244. package/esm2022/src/unattached-children-map.mjs +0 -56
  245. package/esm2022/src/validate.mjs +0 -995
  246. package/esm2022/src/validation-options.mjs +0 -64
  247. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs +0 -190
  248. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  249. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs +0 -190
  250. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  251. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs +0 -194
  252. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  253. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs +0 -114
  254. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  255. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
  256. package/fesm2022/breeze-client-adapter-data-service-odata.mjs +0 -516
  257. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  258. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  259. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs +0 -276
  260. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  261. package/fesm2022/breeze-client-adapter-model-library-ko.mjs +0 -248
  262. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  263. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  264. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs +0 -246
  265. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  266. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  267. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
  268. package/fesm2022/breeze-client.mjs +0 -14144
  269. package/fesm2022/breeze-client.mjs.map +0 -1
  270. package/index.d.ts +0 -1
  271. package/mixin-get-entity-graph/index.d.ts +0 -5
  272. package/mixin-get-entity-graph/mixin-get-entity-graph.d.ts +0 -31
  273. package/mixin-save-queuing/index.d.ts +0 -5
  274. package/mixin-save-queuing/mixin-save-queuing.d.ts +0 -32
  275. package/src/abstract-data-service-adapter.d.ts +0 -84
  276. package/src/array.d.ts +0 -3
  277. package/src/breeze.d.ts +0 -139
  278. package/src/complex-array.d.ts +0 -13
  279. package/src/config.d.ts +0 -104
  280. package/src/core.d.ts +0 -164
  281. package/src/csdl-metadata-parser.d.ts +0 -7
  282. package/src/data-type.d.ts +0 -89
  283. package/src/default-property-interceptor.d.ts +0 -4
  284. package/src/entity-aspect.d.ts +0 -332
  285. package/src/entity-group.d.ts +0 -28
  286. package/src/entity-key.d.ts +0 -77
  287. package/src/entity-manager.d.ts +0 -680
  288. package/src/entity-metadata.d.ts +0 -988
  289. package/src/entity-query.d.ts +0 -444
  290. package/src/enum.d.ts +0 -100
  291. package/src/event.d.ts +0 -142
  292. package/src/interface-registry.d.ts +0 -150
  293. package/src/key-generator.d.ts +0 -12
  294. package/src/observable-array.d.ts +0 -52
  295. package/src/predicate.d.ts +0 -376
  296. package/src/primitive-array.d.ts +0 -7
  297. package/src/relation-array.d.ts +0 -18
  298. package/src/unattached-children-map.d.ts +0 -19
  299. package/src/validate.d.ts +0 -650
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-manager.js","sourceRoot":"","sources":["../../src/manager/entity-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA2B,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAqE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE3I,OAAO,EAAE,aAAa,EAAE,UAAU,EAAe,YAAY,EAAsB,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnK,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAG,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAa,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAmFtE;;;;sBAIsB;AACtB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,8EAA8E;IAC9E,mBAAmB,EAAE,wDAAwD;IAC7E,+DAA+D;IAC/D,YAAY,EAAE,iDAAiD;IAC/D,4CAA4C;IAC5C,WAAW,EAAE,gDAAgD;CACrD,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yEA8ByE;AACzE,MAAM,UAAU,kBAAkB,CAAC,KAAU;IAC3C,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,YAAY,CAAC,mBAAmB,CAAC;AAC3E,CAAC;AAoQD;;EAEE;AACF,MAAM,OAAO,aAAa;IA8BxB,SAAS;IACT;;;;;;;;;;;;;;;;;;;MAmBE;IACF,aAAa,CAAsC;IAEnD;;;;;;;;;;;;;;;;;;;MAmBE;IACF,uBAAuB,CAAgD;IAEvE;;;;;;;;;;;;;;MAcE;IACF,iBAAiB,CAA0C;IAG3D,wBAAwB;IACxB,YAAY,CAAS,CAAC,qBAAqB;IAC3C,wBAAwB;IACxB,4FAA4F;IAC5F,yEAAyE;IACzE,iBAAiB,CAAgB;IACjC,wBAAwB;IACxB,WAAW,CAAU;IACrB,4DAA4D;IAC5D,eAAe,CAA2B;IAC1C,wBAAwB;IACxB,sBAAsB,CAAwB;IAC9C,wBAAwB;IACxB,WAAW,CAAU;IAErB;;;qFAGiF;IACjF,MAAM,GAAG;QACP,4FAA4F;QAC5F,cAAc,EAAE,cAAc;QAC9B,2EAA2E;QAC3E,oBAAoB,EAAE,oBAAoB;QAC1C,0EAA0E;QAC1E,mBAAmB,EAAE,mBAAmB;KACzC,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwCE;IACF,YAAY,QAAuC;QAEjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iHAAiH,CAAC,CAAC;QACrI,CAAC;QACD,IAAI,MAA2B,CAAC;QAChC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,QAAQ,IAAI,EAAE,CAAC;QAC1B,CAAC;QAED,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAEpD,sFAAsF;QACtF,0FAA0F;QAC1F,0FAA0F;QAC1F,sFAAsF;QACtF,+EAA+E;QAC/E,qFAAqF;QACrF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAEhC,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,uBAAuB,GAAG,IAAI,WAAW,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,KAAK,EAAE,CAAC;IAEf,CAAC;IAED;;;;;;;;;;;MAWE;IACF,aAAa,CAAC,MAA2B;QACvC,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,wBAAwB;IACxB,MAAM,CAAC,iBAAiB,CAAC,EAAiB,EAAE,MAA2B,EAAE,MAAe;QACtF,IAAI,mBAAmB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC;QAClF,IAAI,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;QAC/E,IAAI,wBAAwB,GAAG,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC;QAEjG,IAAI,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;aACnC,UAAU,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;aACjD,UAAU,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC;aAChE,UAAU,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,mBAAmB,CAAC;aACnG,UAAU,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC;aAChG,UAAU,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,wBAAwB,CAAC;aAClH,UAAU,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC;QAC5D,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,GAAG,WAAW;iBACtB,UAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEzB,wEAAwE;QACxE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;QAExE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,+GAA+G;YAC/G,wGAAwG;YACxG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC;gBAClF,WAAW,EAAE,EAAE,CAAC,WAAW;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;QAE9D,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,IAAI,YAAY,CAAC;QAC1D,IAAI,MAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACtC,EAAE,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkCE;IACF,YAAY,CAAC,UAAoD,EAAE,aAAqB,EAAE,WAAwB,EAAE,aAA4B;QAC9I,0FAA0F;QAC1F,4FAA4F;QAC5F,0FAA0F;QAC1F,4FAA4F;QAC5F,+BAA+B;QAC/B,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;QACD,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QACvF,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QACnF,WAAW,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QAEzF,IAAI,EAAE,GAAG,CAAC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,UAAU,CAAe,CAAC,CAAC,CAAC,UAAU,CAAC;QACzH,WAAW,GAAG,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC;QAC/C,IAAI,MAAM,GAAG,EAAY,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;YAClC,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,IAAI,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzC,kFAAkF;YAClF,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAID;;;;;;;;;;;;;;;;;;;;;;;;MAwBE;IACF,MAAM,CAAC,cAAc,CAAC,QAAyB,EAAE,MAAqB;QACpE,IAAI,EAAE,GAAG,IAAI,aAAa,EAAE,CAAC;QAC7B,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mBAAmB;IAEnB;;MAEE;IACF,aAAa;QACX,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,MAAM;YACpC,OAAO,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,MAAM;YACzB,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEE;IACF,cAAc,CAAC,QAA4B,EAAE,YAA0E;QACrH,2EAA2E;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YACjE,QAAQ,GAAI,QAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1F,CAAC;QACD,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;aACnD,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;aAC/C,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE;aACjC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QAE7B,uDAAuD;QACvD,sBAAsB;QACtB,gCAAgC;QAEhC,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,YAAY,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3D,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE,CAAC,CAAC,aAAa;YAC3D,YAAY,GAAG,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnE,CAAC;QAED,YAAY,CAAC,YAAY,CAAC;aACvB,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;aACjE,UAAU,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;aACxE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAE1B,IAAI,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAA0D,CAAC,CAAC,CAAG,uCAAuC;QAClJ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAEzE,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;YACnG,IAAY,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QACpE,CAAC;aAAM,CAAC;YACL,IAAY,CAAC,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;YAC7D,IAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAC5D,CAAC;QAED,IAAI,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,OAAO,MAAM,CAAC;IAChB,CAAC;IAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCE;IACF,cAAc,CAAC,QAAyB,EAAE,YAA2B;QACnE,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;QAClC,YAAY,CAAC,YAAY,CAAC;aACvB,UAAU,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;aAC7G,UAAU,CAAC,mBAAmB,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE;aACzD,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE;aAChD,QAAQ,CAAC,YAAY,CAAC,CAAC;QAE1B,IAAI,IAAI,GAAG,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5E,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACtD,8EAA8E;YAC9E,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAEtI,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,iBAAiB,IAAI,YAAY,CAAC,iBAAiB,CAAC;gBAC/D,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,GAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;YAC/B,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACvD,8DAA8D;YAC9D,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChJ,CAAC,CAAC,CAAC;QAEH,IAAI,cAAc,GAAa,EAAE,CAAC;QAClC,IAAI,SAAS,GAAG,YAA+B,CAAC;QAEhD,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;YACX,IAAI,CAAC,YAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrD,CAAC,EAAE,GAAG,EAAE;YACN,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE;gBACpE,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,cAAc,EAAE,KAAK,CAAe,CAAC;gBAC5F,IAAI,iBAAiB,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAClE,IAAI,QAAQ,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC1E,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAChC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAChC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;oBACjD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,cAAc;YACxB,cAAc,EAAE,UAAU;SAC3B,CAAC;IACJ,CAAC;IAED;;;;;;;;;MASE;IACF,KAAK;QACH,iFAAiF;QACjF,qFAAqF;QACrF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAC7C,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;aACxD,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1D,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;;;;MASE;IACF,eAAe;QACb,IAAI,IAAI,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAC/C,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;;;MAiBE;IACF,SAAS,CAAmB,MAAS;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;;;;;;MAWE;IACF,YAAY,CAAmB,MAAS,EAAE,WAAyB,EAAE,aAA6B;QAChG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QACnD,0FAA0F;QAC1F,6FAA6F;QAC7F,2FAA2F;QAC3F,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAgB,CAAC;QACtI,IAAI,QAAQ,GAAG,WAAW,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAkB,CAAC;QACjJ,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;;;;;OAWG;IACH,aAAa,CAAmB,MAAS,EAAE,QAAqB,EAAE,QAAuB;QACvF,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,oDAAoD,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI;gBAC3F,oGAAoG,CAAC,CAAC;QAC1G,CAAC;QACD,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,6CAA6C;YAC7C,IAAI,MAAM,CAAC,gBAAgB;gBAAE,OAAO,MAAM,CAAC,gBAAqB,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,qFAAqF;YACrF,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,MAAM,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,IAAI,cAAc,GAAG,EAAY,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;YACvC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBACvB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,2DAA2D;YAC3D,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpE,MAAM,CAAC,gBAAgB,GAAG,cAAc,CAAC;YACzC,IAAI,CAAC;gBACH,mDAAmD;gBACnD,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC1D,CAAC;oBAAS,CAAC;gBACT,2CAA2C;gBAC3C,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;YAC5C,cAAc,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QAE1F,OAAO,cAAmB,CAAC;IAC7B,CAAC;IAGD;;;;;;;;;;;MAWE;IACF,YAAY,CAAC,MAAc;QACzB,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,kDAAkD;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAKD;;;;;;;;;;;;;;;;;;;MAmBE;IACF,aAAa,CAAC,WAAyB,EAAE,QAAmB,EAAE,aAA6B;QACzF,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE,CAAC;YACxC,kFAAkF;YAClF,aAAa,GAAG,QAAQ,CAAC;YACzB,QAAQ,GAAG,WAAW,CAAC;YACvB,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;YACvF,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;YACpE,WAAW,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QAChF,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;QAChF,OAAO,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAChE,CAAC;IASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+BE;IACF,YAAY,CAAC,KAA2B,EAAE,QAA+B,EAAE,aAAkC;QAC3G,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QAC9E,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QACpE,WAAW,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QAC9E,IAAI,OAAqB,CAAC;QAC1B,mHAAmH;QACnH,4EAA4E;QAC5E,gKAAgK;QAChK,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAE,KAAa,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;QACxH,IAAI,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAE,KAAa,CAAC,WAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAEvF,IAAI,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YACnG,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAClD,OAAO,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAA8B,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;;;;;;;;;;;;;;;MAoBE;IACF,mBAAmB,CAAI,KAAqB;QAC1C,OAAO,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC;IACtD,CAAC;IAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoCE;IACF,WAAW,CAAC,QAA0B,EAAE,WAAyB,EAAE,QAAmB,EAAE,aAAwB;QAC9G,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QAC5E,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QACvF,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QACpE,WAAW,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QAE9E,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,eAAe,CAAC;QAE7E,IAAI,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE9E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,MAAM,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAgB,CAAC;YAC7D,IAAI,QAAQ;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;YACtC,IAAI,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,MAAM;gBACxD,OAAO,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;gBAChG,IAAI,aAAa;oBAAE,aAAa,CAAC,GAAG,CAAC,CAAC;gBACtC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAElC,MAAM,aAAa,GAAG,CAAC,QAAa,EAAE,EAAE;YACtC,IAAI,aAAa;gBAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,+FAA+F;QAC/F,6FAA6F;QAC7F,sDAAsD;QACtD,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,IAAI,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC;YAChF,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,gCAAgC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC3E,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBACxC,OAAO,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,WAAY,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YACpH,CAAC,EAAE,GAAG,CAAC,EAAE;gBACP,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBACxC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,QAAQ;YAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9E,CAAC;IAED;wBACoB;IACpB,SAAS,CAAC,cAAwB,EAAE,WAAwB,EAAE,QAAmB,EAAE,aAAwB;QACzG,IAAI,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACnF,IAAI,WAAW,GAAgB;YAC7B,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,WAAW;YACxB,oBAAoB,EAAE,oBAAoB;YAC1C,YAAY,EAAE,WAAW,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,aAAa;SACzF,CAAC;QAEF,4FAA4F;QAC5F,oDAAoD;QAEpD,IAAI,UAAU,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAGxE,IAAI,CAAC,CAAC,6EAA6E;YACjF,2BAA2B,CAAC,cAAc,CAAC,CAAC;YAC5C,OAAO,WAAW,CAAC,eAAgB,CAAC,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC;iBACrE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kDAAkD;YAClD,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,aAAa;gBAAE,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,SAAS,WAAW,CAAC,UAAsB;YACzC,IAAI,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC;YACnC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,aAAa,GAAG,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YACjE,UAAU,CAAC,QAAQ,GAAG,aAAa,CAAC;YAEpC,iCAAiC;YACjC,EAAE,CAAC,cAAc,EAAE,CAAC;YAEpB,mGAAmG;YACnG,wGAAwG;YACxG,sCAAsC;YAEtC,IAAI,QAAQ;gBAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QAED,SAAS,oBAAoB,CAAC,UAAsB;YAClD,IAAI,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC;YACxC,IAAI,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;YAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;YACzC,IAAI,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC;YAEnC,wCAAwC;YACxC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAE3B,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;gBAErC,IAAI,cAAc,GAAG,IAAI,cAAc,CAAC;oBACtC,KAAK,EAAE,SAAS,EAAE,wDAAwD;oBAC1E,aAAa,EAAE,EAAE;oBACjB,YAAY,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,gBAAgB,EAAE;oBAC/D,WAAW,EAAE,WAAW;iBACzB,CAAC,CAAC;gBAEH,mGAAmG;gBACnG,gGAAgG;gBAChG,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC;YAEH,4EAA4E;YAC5E,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACxB,IAAI,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAe,CAAC;gBACvF,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpD,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,SAAS,QAAQ,CAAC,WAAgC;YAChD,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,WAAW,GAAG,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAChE,IAAI,aAAa;gBAAE,aAAa,CAAC,WAAW,CAAC,CAAC;YAC9C,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;MAYE;IACF,2BAA2B,CAAC,cAAwB;QAElD,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;YAC1C,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,MAAM;gBACzD,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;gBACjC,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBACxE,OAAO,CAAC,OAAO,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;gBACtI,QAAgB,CAAC,YAAY,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;gBACpE,OAAO,QAAQ,CAAC,CAAC,mBAAmB;YACtC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;MAME;IACF,KAAK,CAAC,gCAAgC,CAAC,cAAwB;QAC7D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAC1D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;QACxI,QAAgB,CAAC,YAAY,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wBAAwB;IACxB,gBAAgB,CAAC,UAAsB;QACrC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAsDD;;;;;;;MAOE;IACF,cAAc,CAAC,GAAG,IAAW;QAC3B,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;QACtD,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAqB,CAAC;QAC1B,+CAA+C;QAC/C,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;YACtB,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACtC,iEAAiE;YACjE,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,IAAI,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,IAAI,CAAC;IACnB,CAAC;IAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6BE;IACF,gBAAgB,CAAC,GAAG,IAAW;QAC7B,IAAI,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YACnG,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC/C,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;MAYE;IACF,eAAe,CAAC,SAAoB;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;MAqBE;IACF,oBAAoB,CAAC,MAAc;QACjC,iEAAiE;QACjE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACnC,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;QACtC,OAAO,YAAY,CAAC;IACtB,CAAC;IAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA8BE;IACF,UAAU,CAAC,WAA6C;QACtD,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QACvD,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAGD,wBAAwB;IACxB,0CAA0C;IAC1C,eAAe,CAAC,WAA6C;QAC3D,IAAI,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9C,IAAI,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE;YACnC,OAAO,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAOD;;;;;;;;;;;;;;;;;;;;;;;;MAwBE;IACF,UAAU,CAAC,WAA6C;QACtD,IAAI,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9C,OAAO,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;;;;MASE;IACF,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QACjC,IAAI,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACnC,8EAA8E;QAC9E,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YACnC,OAAO,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,OAAO,CAAC,OAAO,CAAC,UAAU,MAAM;YAC9B,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,OAAO,OAAO,CAAC;IACjB,CAAC;IAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmCE;IACF,WAAW,CAAC,WAA6C,EAAE,YAA0C;QACnG,IAAI,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAElI,IAAI,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACtD,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAGD,oBAAoB;IACpB,wBAAwB;IACxB,kBAAkB,CAAC,MAAc,EAAE,SAAkB;QACnD,IAAI,MAAM,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAE9E,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,2FAA2F;YAC3F,yFAAyF;YACzF,2FAA2F;YAC3F,iBAAiB;YACjB,EAAE;YACF,sFAAsF;YACtF,0FAA0F;YAC1F,0FAA0F;YAC1F,wFAAwF;YACxF,4DAA4D;YAC5D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvF,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,UAA2B;QACxC,IAAI,UAAU,IAAI,IAAI;YAAE,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5D,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAED,wBAAwB;IACxB,oBAAoB,CAAC,MAAc;QACjC,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACvC,+DAA+D;QAC/D,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAEhC,IAAI,aAAa,GAAG,EAAE,CAAC,sBAAsB,CAAC;YAC9C,IAAI,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YAEtC,OAAO,UAAU,EAAE,CAAC;gBAClB,IAAI,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAE/C,gCAAgC;gBAChC,IAAI,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACxD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG;wBAEnC,IAAI,kBAAkB,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;4BACtD,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,CAAC;wBAC7D,CAAC,CAAC,CAAC;wBAEH,IAAI,eAAmC,CAAC;wBACxC,IAAI,eAAmC,CAAC;wBAExC,gCAAgC;wBAChC,8DAA8D;wBAC9D,IAAI,EAAE,GAAG,GAAG,CAAC,kBAAkB,CAAC;wBAEhC,IAAI,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;wBAC3B,IAAI,SAAS,EAAE,CAAC;4BACd,gBAAgB;4BAChB,eAAe,GAAG,EAAE,CAAC;4BACrB,eAAe,GAAG,SAAS,CAAC;4BAE5B,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;gCAC7B,IAAI,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;gCACtC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gCACpD,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;4BACtD,CAAC;iCAAM,CAAC;gCACN,IAAI,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gCAC/D,kBAAkB,CAAC,OAAO,CAAC,UAAU,KAAK;oCACxC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oCAC5B,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gCAClD,CAAC,CAAC,CAAC;4BACL,CAAC;4BACD,aAAa,CAAC,cAAc,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;wBAC3D,CAAC;6BAAM,CAAC;4BACN,iBAAiB;4BACjB,4DAA4D;4BAC5D,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;gCAChB,iDAAiD;gCACjD,wFAAwF;gCACxF,eAAe,GAAG,EAAE,CAAC;gCACrB,kBAAkB,CAAC,OAAO,CAAC,UAAU,KAAK;oCACxC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gCAClD,CAAC,CAAC,CAAC;gCACH,aAAa,CAAC,cAAc,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;4BAC3D,CAAC;iCAAM,CAAC;gCACN,yCAAyC;gCACzC,eAAe,GAAG,EAAE,CAAC;gCACrB,IAAI,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gCAC/D,kBAAkB,CAAC,OAAO,CAAC,UAAU,KAAK;oCACxC,qCAAqC;oCACrC,eAAe,CAAC,aAAa,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;gCACxD,CAAC,CAAC,CAAC;gCACH,8EAA8E;gCAC9E,6EAA6E;gCAC7E,+EAA+E;gCAC/E,+EAA+E;gCAC/E,gFAAgF;gCAChF,gFAAgF;gCAChF,0DAA0D;4BAC5D,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,0CAA0C;YACpF,CAAC;YAGD,sCAAsC;YACtC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,EAAE;gBACzD,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAChB,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBACxC,gCAAgC;oBAChC,IAAI,KAAK;wBAAE,OAAO;gBACpB,CAAC;gBAED,mDAAmD;gBACnD,gDAAgD;gBAChD,6EAA6E;gBAC7E,IAAI,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC9C,IAAI,SAAS,EAAE,CAAC;oBACd,mEAAmE;oBACnE,IAAI,SAAS,CAAC,QAAQ,EAAE;wBAAE,OAAO;oBACjC,+CAA+C;oBAC/C,IAAI,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;wBACjC,iDAAiD;wBACjD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnI,MAAM,OAAO,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;wBAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACzB,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;4BACxB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,oCAAoC;wBACpC,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,MAAM,EAAE,CAAC;4BACX,sBAAsB;4BACtB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;wBACtC,CAAC;6BAAM,CAAC;4BACN,0CAA0C;4BAC1C,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;wBAChD,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;oBAC9D,uEAAuE;oBACvE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrE,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBAChH,MAAM,OAAO,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;oBAC9C,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE;wBAChC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,OAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC9C,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,8CAA8C;YAC9C,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,MAAM;gBAC7D,IAAI,KAAK,GAAG,MAAM,CAAC,yBAAyB,CAAC;gBAC7C,IAAI,CAAC,KAAK;oBAAE,OAAO;gBACnB,+BAA+B;gBAC/B,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC3D,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAE1C,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACnB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACzC,CAAC;yBAAM,CAAC;wBACN,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;4BACjB,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;wBACxE,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,0CAA0C;oBAC1C,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IAEL,CAAC;IAED,wBAAwB;IACxB,iBAAiB,CAAC,MAAc,EAAE,WAAwB,EAAE,aAA4B;QACtF,IAAI,KAAK,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,cAAc,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAC5E,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC1C,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,wBAAwB;IACxB,YAAY,CAAC,MAAoB,EAAE,QAAa,EAAE,QAAa;QAC7D,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;CACF;AAED,aAAa,CAAC,SAAS,CAAC,UAAU,GAAG,eAAe,CAAC;AAErD,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAEjD,iGAAiG;AACjG,+FAA+F;AAC/F,uFAAuF;AACvF,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;AAE1C;+FAC+F;AAC/F,SAAS,kBAAkB,CAAC,QAAkB;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAW,EAAE;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/D,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAC3C,CAAC,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACtD,CAAC,CAAC,CAAC,iBAAiB,IAAI,YAAY,CAAC,CAAC,CAAC,QAA0B,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB;IAC3C,QAAQ,CAAC,OAAO,CAAC,UAAU,MAAM;QAC/B,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,GAAG,EAAE,EAAE;YAC5D,IAAI,EAAE,CAAC,aAAa;gBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,MAAM,CAAC,8BAA8B,CAAC;YACpC,UAAU,CAAC,OAAO,CAAC,UAAU,GAAG;gBAC9B,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAkB;IAC5C,IAAI,YAAY,GAAkB,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,UAAU,GAAG,EAAE,EAAE;YACzE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpB,MAAM,EAAE,MAAM;gBACd,0FAA0F;gBAC1F,uFAAuF;gBACvF,+DAA+D;gBAC/D,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;aACrD,EAAE,EAAE,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAgB,CAAC;YACnF,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC;AAGD,SAAS,mBAAmB,CAAC,WAAwB,EAAE,SAA8B;IACnF,gDAAgD;IAChD,IAAI,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;IAC1C,IAAI,CAAC,YAAY;QAAE,OAAyB,SAAS,CAAC;IACtD,IAAI,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;IAC9C,IAAI,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC;IAChD,IAAI,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3C,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,UAAkC,CAAC;QACvC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAe,CAAC;YACjF,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC/B;oBACE,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS;iBACjE,CAAC,CAAC,CAAC,EACH,CAAC;YACJ,IAAI,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAEzF,IAAI,EAAE,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACpE,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC;YACxB,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,IAAI;SACpB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAgB,CAAC;QACjF,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,iDAAiD;IACjD,SAAS,CAAC,YAAY,GAAG,YAAmB,CAAC;IAC7C,OAAyB,SAAS,CAAC;AACrC,CAAC;AA0BD,SAAS,oBAAoB,CAAC,EAAiB,EAAE,IAAW;IAC1D,IAAI,GAAG,GAAG,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAE9B,IAAI,oBAAoB,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3F,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC;QACzB,IAAI,MAAM,IAAI,IAAI;YAChB,0EAA0E;YAC1E,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;YACjF,MAAM,GAAG,IAAI,CAAC;YACd,2EAA2E;YAC3E,wDAAwD;YACxD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,KAAK,aAAa,CAAC,gBAAgB,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,IAAS;YACtF,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9D,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAGD,cAAc;AAEd,4EAA4E;AAC5E,iFAAiF;AACjF,SAAS,gBAAgB,CAAC,EAAiB,EAAE,WAA6C;IACxF,8FAA8F;IAC9F,6FAA6F;IAC7F,qDAAqD;IACrD,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;QACtC,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC;QACxF,WAAW,GAAI,WAA+B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAa,CAAC;IAC/H,CAAC;IACD,WAAW,CAAC,WAAkB,EAAE,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE;SACrG,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IACzF,IAAI,WAAkD,CAAC;IACvD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAgC,CAAC;IACvG,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5E,WAAW,GAAI,WAAwB,CAAC,GAAG,CAAC,UAAU,MAAM;YAC1D,OAAO,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAe,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,WAAsD,CAAC;IACvE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,EAAiB,EAAE,WAAuC;IAChF,IAAI,YAAY,GAAG,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEpD,2EAA2E;IAC3E,IAAI,QAAQ,GAAa,EAAE,CAAC;IAC5B,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;QAC/B,8BAA8B;QAC9B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAChC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,EAAiB,EAAE,WAAkD,EAAE,YAA2B;IACzH,IAAI,YAAY,GAAG,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEpD,2EAA2E;IAC3E,IAAI,QAAQ,GAAa,EAAE,CAAC;IAC5B,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;QAC/B,8BAA8B;QAC9B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAChC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAGD,SAAS,eAAe,CAAC,EAAiB,EAAE,IAAW;IACrD,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC;QACjC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAc,EAAE,aAAa,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,UAAe,CAAC;QACpB,IAAI,CAAC;YACH,UAAU,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBAC9F,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9H,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAC,uDAAuD,CAAC,CAAC;QACvE,IAAI,UAAU,YAAY,UAAU,EAAE,CAAC;YACrC,6FAA6F;YAC7F,yDAAyD;YACzD,OAAO,EAAE,SAAS,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iHAAiH,CAAC,CAAC;AACrI,CAAC;AAKD,SAAS,gBAAgB,CAAC,QAAkB,EAAE,IAAa;IACzD,QAAQ,CAAC,OAAO,CAAC,UAAU,MAAM;QAC/B,MAAM,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAiB,EAAE,qBAA0D;IACvG,IAAI,cAAwC,CAAC;IAC7C,IAAI,KAAK,GAAG,qBAAqB,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9D,iBAAiB;IACjB,IAAI,KAAK,EAAE,CAAC;QACV,mCAAmC;QACnC,+CAA+C;QAC/C,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAK,KAAa,CAAC,UAAU,EAAE,CAAC;YAC9B,IAAI,QAAQ,GAAG,qBAAiC,CAAC;YACjD,6CAA6C;YAC7C,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC1B,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;oBACxD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBAClF,CAAC;gBACD,IAAI,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,GAAG,EAAiB,CAAC;oBAC1B,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;oBAChC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;oBACrB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/C,CAAC;gBACD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,IAAI,WAAW,GAAG,gBAAgB,CAAC,EAAE,EAAE,qBAAgD,CAAiB,CAAC;YACzG,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACxB,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACzB,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;wBACpC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvE,+BAA+B;QAC/B,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,EAAE,CAAC,eAAe,CAAC;IACtC,CAAC;IAED,IAAI,QAAQ,GAAe,EAAE,CAAC;IAC9B,4EAA4E;IAC5E,oDAAoD;IACpD,IAAI,WAAW,GAAwB,EAAE,CAAC;IAC1C,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE;QACrD,WAAW,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB,EAAE,QAAoB;IACvE,IAAI,WAAW,GAAG,EAAyB,CAAC;IAC5C,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;IACxC,IAAI,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC;IACpC,IAAI,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,WAAW,GAAU,EAAE,CAAC;IAC5B,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,SAAS,GAAG,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC5E,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC;IACnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAAC,EAAoB,EAAE,GAAmB,EAAE,YAAoD,EAAE,QAAqB;IAEpJ,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE;QACtB,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,IAAI,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,YAAY,IAAI,IAAI;YAAE,OAAO;QAErD,IAAI,KAAK,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAClC,IAAI,KAAK,GAAI,EAAE,CAAC,QAAwB,CAAC,cAAc,CAAC;YACxD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAgB;gBAChD,OAAO,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACvD,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAClB,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAC/B,MAA8B,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9B,IAAI,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC;QAC7B,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACrC,IAAI,SAAS,GAAG;YACd,gBAAgB,EAAE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;YAC3D,WAAW,EAAE,WAAW,CAAC,IAAI;SACvB,CAAC;QACT,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QACjD,CAAC;QACD,IAAI,WAAW,CAAC,UAAU,EAAE,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;YACxD,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC;QACtD,CAAC;QACA,MAAc,CAAC,YAAY,GAAG,SAAS,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC;QAC9B,IAAI,SAAS,GAAG,EAAS,CAAC;QAC1B,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YAClE,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC;QACtD,CAAC;QAEA,MAAc,CAAC,aAAa,GAAG,SAAS,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,SAAS,iBAAiB,CAAC,YAA0B,EAAE,QAAoB;IACzE,IAAI,MAAM,GAAG,YAAY,CAAC,MAAgB,CAAC;IAC3C,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,mEAAmE;IACnE,yCAAyC;IACzC,IAAI,gBAAgB,GAAa,EAAE,CAAC;IACpC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,EAAE;QACzD,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBACzD,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB,EAAE,SAA8B,EAAE,YAA6B;IAEhH,IAAI,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IACzC,IAAI,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;IAEzC,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;IACxC,IAAI,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;IAE/C,IAAI,YAAgC,CAAC;IAErC,IAAI,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC;IACnC,IAAI,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;IACrC,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,UAAU,GAAG,YAAY,CAAC,qBAAqB,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,SAAc;QACjD,IAAI,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;QAEvC,IAAI,SAAS,GAAG,UAAU,CAAC,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC5E,IAAI,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAgB,CAAC;QAC7E,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,4EAA4E;QAC5E,wFAAwF;QACxF,oFAAoF;QACpF,IAAI,UAAU,GAAG,CAAC,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,UAAW,EAAE,SAAS,CAAC,CAAC;QAC7F,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE/E,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC9C,uBAAuB;YACzB,CAAC;iBAAM,IAAI,aAAa,KAAK,aAAa,CAAC,UAAU,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,oBAAoB,CAAC,CAAC;YAC7G,CAAC;iBAAM,CAAC;gBACN,IAAI,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9D,IAAI,YAAY,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;gBACnD,IAAI,aAAa,KAAK,aAAa,CAAC,gBAAgB,IAAI,YAAY,EAAE,CAAC;oBACrE,UAAU,CAAC,oBAAoB,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;oBACrE,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACtD,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC5F,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,UAAU,CAAC,mBAAmB,EAAY,CAAC;YAC1D,UAAU,CAAC,oBAAoB,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YACrE,IAAI,UAAU,EAAE,CAAC;gBACf,YAAY,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;gBAC5C,WAAW;gBACX,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEjF,qBAAqB;gBACrB,qGAAqG;gBACrG,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;oBAC/B,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,MAAc;wBACzD,IAAI,EAAE,GAAG,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;wBAClD,IAAI,UAAU,GAAG,EAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACnD,IAAI,UAAU,GAAG,YAAa,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBACvD,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,EAAG,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;wBACrD,IAAI,KAAK,GAAG,YAAY,CAAC,UAAW,EAAE,EAAE,CAAC,CAAC;wBAC1C,YAAa,CAAC,WAAW,CAAC,UAAU,EAAE,KAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,gCAAgC;YAChC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACnE,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3F,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,EAAE,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,YAAY,CAAC,UAAuB,EAAE,SAAoB;IACjE,IAAI,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;IACnC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAI,OAAmB,EAAE,QAAmB,EAAE,aAA6B;IACtG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI;QACnC,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,EAAE,UAAU,KAAK;QAChB,IAAI,aAAa;YAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAiB,EAAE,QAAmB;IAC/D,IAAI,cAAwB,CAAC;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;YAC1C,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,SAAS,CAAC,EAAiB,EAAE,WAAyB;IAC7D,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE;QAC9B,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kEAAkE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;QAC1G,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,EAAiB,EAAE,WAAuC;IACjF,IAAI,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC;IAClC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,UAAU,EAAc;YAC3D,IAAI,EAAE,YAAY,UAAU,EAAE,CAAC;gBAC7B,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAgB,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,wHAAwH,CAAC,CAAC;YAC5I,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,EAAiB,EAAE,MAAc;IACvD,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;IACtC,gDAAgD;IAChD,IAAI,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QACxG,OAAO,CAAC,EAAE,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;QACpB,OAAO,EAAE,KAAK,IAAI,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,IAAI,yBAAyB,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACzE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,IAAI,yBAAyB,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,8IAA8I,CAAC,CAAC;YAClO,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAiB,EAAE,YAA0C;IACzF,IAAI,CAAC,YAAY;QAAE,OAAO,EAAmB,CAAC;IAC9C,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAkB,CAAC;IAC5D,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,EAAE,YAAY,WAAW,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yHAAyH,CAAC,CAAC;QAC7I,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,EAAiB,EAAE,MAAc,EAAE,WAAwB,EAAE,aAA4B;IACtH,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC;IACtD,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE;QAC3B,2FAA2F;QAC3F,2DAA2D;QAC3D,IAAI,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAS;gBACjC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AACpB,SAAS,gBAAgB,CAAC,EAAiB,EAAE,KAA2B,EAAE,YAA0B,EAAE,WAAwB;IAC5H,IAAI,CAAC;QACH,IAAI,OAAc,CAAC;QACnB,IAAI,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;QAErC,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,YAAY,CAAC,aAAa,KAAK,aAAa,CAAC,cAAc,EAAE,CAAC;YAChE,IAAI,CAAC;gBACH,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAClE,CAAC;gBACD,IAAI,EAAE,GAAG,uBAAuB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAChH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,cAAc,GAA+B,IAAI,cAAc,CAAC;YAClE,KAAK,EAAE,KAAK;YACZ,aAAa,EAAE,EAAE;YACjB,WAAW,EAAE,WAAW;YACxB,YAAY,EAAE;gBACZ,aAAa,EAAE,YAAY,CAAC,aAAa;gBACzC,UAAU,EAAE,CAAC,CAAE,KAAa,CAAC,iBAAiB;gBAC9C,cAAc,EAAE,YAAY,CAAC,cAAc;aAC5C;SACF,CAAC,CAAC;QAEH,IAAI,eAAe,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC;QAE3D,OAAO,WAAW,CAAC,eAAgB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,IAAS;YACvF,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC9B,IAAI,KAAK,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;gBACxC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;gBACpB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC;YACf,CAAC,EAAE,UAAU,KAAK;gBAChB,UAAU;gBACV,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC/B,EAAE,CAAC,YAAa,CAAC,OAAO,CAAC,UAAU,EAAE;oBACnC,EAAE,EAAE,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,YAAY,GAAG,SAAS,CAAC;gBAC5B,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;gBAC/C,cAAc,GAAG,SAAS,CAAC;gBAC3B,sFAAsF;gBACtF,sFAAsF;gBACtF,mFAAmF;YACrF,CAAC,EAAE;gBACD,IAAI,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAE5B,OAAO,GAAG,cAAe,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrE,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAM;wBAC9B,6DAA6D;wBAC7D,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;oBACpD,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,cAAe,CAAC,eAAe,EAAE,CAAC;gBAClC,gGAAgG;gBAChG,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;oBACjC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAe,CAAC,MAAM,CAAC,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;YACrK,CAAC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,EAAE,UAAU,CAAM;YACjB,IAAI,CAAC,EAAE,CAAC;gBACN,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;gBAChB,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC;YACvB,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAkB,EAAE,KAAkB;IAChE,IAAI,KAAK,CAAC,iBAAiB;QAAE,OAAO;IACpC,IAAI,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACtC,IAAI,YAAY,IAAI,IAAI;QAAE,OAAO;IACjC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,YAAY;QACvD,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB,EAAE,SAAmB;IAChE,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC1B,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,iEAAiE;QAClF,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACnC,IAAI,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,0BAA0B;QAC7C,mEAAmE;QACnE,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAkB;IACrD,IAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,CAAC,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;QACnC,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE;eACzC,CAAC,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;IAErD,CAAC,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACpC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;QAC5B,CAAC,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE;YACrD,yBAAyB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc,EAAE,QAAsB;IACvE,6CAA6C;IAC7C,IAAI,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9D,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAoB,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC1C,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACxC,sCAAsC;QACtC,IAAI,SAAS,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxC,yFAAyF;QACzF,+BAA+B;QAC/B,OAAO;IACT,CAAC;SAAM,CAAC;QACN,uFAAuF;QACvF,iCAAiC;QACjC,4EAA4E;QAC5E,MAAM,IAAI,KAAK,CAAC,oEAAoE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxG,CAAC;AACH,CAAC;AAGD,SAAS,uBAAuB,CAAC,EAAiB,EAAE,UAAsB;IACxE,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACxC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,EAAiB,EAAE,UAAsB;IACzE,IAAI,WAAW,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAClD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAC5B,OAAO,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,SAA2B,EAAE,WAAiD;IAEpG,IAAI,SAAS,GAAQ,EAAE,CAAC;IACxB,IAAI,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;IAC5F,IAAI,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE;QACvC,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;YACzB,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE;gBAChF,OAAO,cAAc,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACzC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/C,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO;YAC9B,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;oBACjB,QAAgC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACrG,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,qBAAqB;QACpB,SAAiB,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC3C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAwB,EAAE,aAA4B,EAAE,WAAiD;IACrI,IAAI,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IACnF,IAAI,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;IACxF,IAAI,EAAE,GAAG,aAAa,CAAC,gBAAgB,CAAC,0BAA0B,CAAC;IACnE,IAAI,MAAM,GAAG,EAAyB,CAAC;IACvC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,QAAQ,EAAE,GAAG;QAC/D,IAAI,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAiB,CAAC;QACvD,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE;QAC1C,IAAI,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,WAAW,GAAG,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;YAC/E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC9C,OAAO,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,aAA4B,EAAE,WAAgD;IACzH,IAAI,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAC9B,IAAI,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,EAAE,GAAG,aAAa,CAAC,gBAAgB,CAAC,0BAA0B,CAAC;IACnE,IAAI,MAAM,GAAG,EAAyB,CAAC;IACvC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,QAAQ,EAAE,KAAK;QAC9E,IAAI,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAiB,CAAC;QACvD,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAC9B,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,kFAAkF;IAClF,sFAAsF;IACtF,cAAc;IACd,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACrC,IAAI,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE;gBACtD,OAAO,cAAc,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,gBAAkC,EAAE,EAAgB;IAC/E,IAAI,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,sEAAsE;QACtE,IAAI,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,EAAiB;YAC7C,OAAO,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,EAAiB,EAAE,KAAkB;IACpE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IAE9D,IAAI,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;IACrC,IAAI,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC/D,8DAA8D;IAC9D,IAAI,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,UAAW,CAAC,CAAC;IACvD,wCAAwC;IACxC,IAAI,UAAU,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAErG,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7G,IAAI,cAAc,GAAG,YAAY,CAAC,cAAc,KAAK,IAAI,CAAC;IAE1D,IAAI,aAAa,GAAG,UAAU,MAAc;QAC1C,OAAO,MAAM,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChI,CAAC,CAAC;IAEF,IAAI,MAAM,GAAU,EAAE,CAAC;IACvB,gBAAgB;IAChB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAa,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,eAAe,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,UAAW,CAAC,CAAC;IAC1F,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAChC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAChC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACtC,IAAI,YAAY,EAAE,CAAC;QACjB,8CAA8C;QAC9C,IAAI,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QACnE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAiB;IAC5C,yDAAyD;IACzD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,gDAAgD;IAChD,OAAO,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE;QACvD,OAAO,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAA+B;IACtD,OAAO,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACzF,CAAC","sourcesContent":["import { DataServiceAdapter } from '../config/interface-registry.js';\r\nimport { core, Callback, ErrorCallback, arraySlice } from '../core/core.js';\r\nimport { assertParam, assertConfig } from '../core/assert-param.js';\r\nimport { config, setDefaultAdapters } from '../config/config.js';\r\nimport { BreezeEvent } from '../core/event.js';\r\nimport { EntityAspect, Entity, ComplexObject, StructuralObject, PropertyChangedEventArgs, peekProperty } from '../entity/entity-aspect.js';\r\nimport type { RelationArray } from '../entity/relation-array.js';\r\nimport { MetadataStore, EntityType, ComplexType, DataProperty, NavigationProperty, AutoGeneratedKeyType, entityTypeForCtor } from '../metadata/entity-metadata.js';\r\nimport { EntityKey } from '../entity/entity-key.js';\r\nimport { observableArray } from '../entity/observable-array.js';\r\nimport { EntityAction } from '../entity/entity-action.js';\r\nimport { EntityState } from '../entity/entity-state.js';\r\nimport { DataService } from '../metadata/data-service.js';\r\nimport { DataType } from '../metadata/data-type.js';\r\nimport { ValidationError, Validator } from '../validation/validate.js';\r\nimport type { StructuralType } from '../metadata/entity-metadata.js';\r\nimport { ValidationOptions } from '../validation/validation-options.js';\r\nimport { QueryOptions, MergeStrategy, FetchStrategy } from '../query/query-options.js';\r\nimport { SaveOptions } from './save-options.js';\r\nimport { KeyGenerator } from '../entity/key-generator.js';\r\nimport { EntityGroup } from '../entity/entity-group.js';\r\nimport { MappingContext } from '../query/mapping-context.js';\r\nimport { EntityQuery } from '../query/entity-query.js';\r\nimport type { KeyValues } from '../query/property-path.js';\r\nimport { UnattachedChildrenMap } from '../entity/unattached-children-map.js';\r\nimport { serverDefaultAdapters } from '../config/default-adapters.js';\r\n\r\n/** The response to one HTTP request Breeze made, as its data service adapter received it. Found on\r\n{@link ServerError.httpResponse}, {@link QueryResult.httpResponse} and {@link SaveResult.httpResponse}. */\r\nexport interface HttpResponse {\r\n /** The request that was sent: its {@link AjaxConfig} without the callbacks - `url`, `type` (the\r\n HTTP method), `params`, `data`, `headers` and so on. */\r\n config: any;\r\n /** The response body: the parsed JSON of a successful response, or the text of a failed one.\r\n Null when the request failed before any response arrived, or its body could not be read. */\r\n data: any;\r\n /** Set only when the request failed: the error the transport threw if the request could not be\r\n completed or its body could not be read, otherwise the status text. */\r\n error?: any;\r\n /** Set by Breeze on the response to a save request, where it is used to turn the server's\r\n per-entity errors into {@link EntityError}s. Undefined for queries and metadata requests.\r\n Applications do not normally need it. */\r\n saveContext?: any;\r\n /** The HTTP status code. `0` when the request failed before any response arrived: offline, DNS,\r\n CORS, a server that is down, or an aborted request. */\r\n status: number;\r\n /** The HTTP status text, such as \"Not Found\". Empty when the server sent none (HTTP/2 never does), and set to\r\n the transport's error message when the request failed before any response arrived. May be absent with a custom ajax adapter. */\r\n statusText?: string;\r\n /** Returns the value of the named response header, or `null` if the response did not include it.\r\n Called with an empty name, returns an object holding every header, keyed by lower-case name.\r\n When no response arrived, returns `\"\"` for a name and `{}` without one. */\r\n getHeaders(headerName: string): string;\r\n}\r\n\r\n/** What {@link EntityManager.importEntities} returns. */\r\nexport interface ImportResult {\r\n /** The entities in the bundle as they now are in this manager: the ones newly attached, and the\r\n cached ones they were merged into - including any the {@link ImportConfig.mergeStrategy} left\r\n unchanged. */\r\n entities: Entity[];\r\n /** The temporary keys in the bundle, each mapped to the temporary key its entity has in this\r\n manager. See {@link ITempKeyMap}. */\r\n tempKeyMapping: ITempKeyMap;\r\n}\r\n\r\n// subclasses of Error\r\n\r\n/** Base shape of any errors returned from the server. */\r\nexport interface ServerError extends Error {\r\n /** The failed response, for anything the other members do not cover. */\r\n httpResponse: HttpResponse;\r\n /** The HTTP status code - see {@link HttpResponse.status}. `0` when the request failed before any\r\n response arrived. */\r\n status: number;\r\n /** The best description Breeze could find: the message in the response body (a .NET exception's\r\n message, or the `message`, `detail` or `title` of a JSON error), otherwise the transport's error\r\n text. When the status is `0`, it also says the server was probably not reached. */\r\n message: string;\r\n /** The status text of the failed response - see {@link HttpResponse.statusText}. */\r\n statusText?: string;\r\n /** The body of the failed response, as the adapter received it (`httpResponse.data`); null if there was none. */\r\n body?: any;\r\n /** The URL the request was sent to (`httpResponse.config.url`). Query parameters added with\r\n `EntityQuery.withParameters` are not included. */\r\n url?: string;\r\n /** The RFC 9457 `type` member of the problem document, when the server sent one: a URI naming\r\n what kind of problem this is.\r\n\r\n Read it rather than the message when the recovery depends on the kind of failure. The status\r\n code is often not enough on its own - an optimistic concurrency conflict and a duplicate key are\r\n both `409`, and they are recovered from differently - and message text is not something to match\r\n on, since it varies by ORM, database and server version.\r\n\r\n Undefined when the server sent no `type`, which is every pre-3.0 Breeze server and most\r\n non-Breeze ones. See {@link ProblemTypes} and {@link isConcurrencyError}. */\r\n problemType?: string;\r\n}\r\n\r\n/** Shape of a save error returned from the server. \r\nFor use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation. \r\n@adapter (see {@link DataServiceAdapter}) \r\n@hidden @internal \r\n*/\r\nexport interface SaveErrorFromServer extends ServerError {\r\n entityErrors: EntityErrorFromServer[];\r\n}\r\n\r\n/** The RFC 9457 `type` URIs a Breeze server sends on {@link ServerError.problemType}.\r\n\r\nA problem type is a stable identifier for a *kind* of failure, which is what a status code often\r\nis not: `409` covers both a concurrency conflict and a duplicate key, and the two call for\r\ndifferent recovery. */\r\nexport const ProblemTypes = {\r\n /** A row was changed or deleted by someone else after this client read it. */\r\n concurrencyConflict: \"https://breeze.github.io/problems/concurrency-conflict\",\r\n /** The save was rejected by validation; see `entityErrors`. */\r\n entityErrors: \"https://breeze.github.io/problems/entity-errors\",\r\n /** An unhandled exception on the server. */\r\n serverError: \"https://breeze.github.io/problems/server-error\",\r\n} as const;\r\n\r\n/** Whether an error is an optimistic concurrency conflict - a row changed or deleted by someone\r\nelse after this client read it.\r\n\r\n```ts\r\ntry {\r\n await em.saveChanges();\r\n} catch (e) {\r\n if (isConcurrencyError(e)) {\r\n // re-read and let the user decide; retrying the same save would fail the same way\r\n }\r\n}\r\n```\r\n\r\nThis is exact rather than approximate: it is true only when the server said so with\r\n{@link ProblemTypes.concurrencyConflict}, never inferred from the status code or the message. A\r\n`409` from a duplicate key is not a concurrency conflict, and matching on message text breaks\r\nwhen the ORM, database or server version changes.\r\n\r\nA Breeze .NET server sends this for EF Core's `DbUpdateConcurrencyException` and NHibernate's\r\n`StaleObjectStateException`. A server that does not send a `type` - any pre-3.0 Breeze server, and\r\nmost non-Breeze ones - returns false here, and there is nothing reliable to use instead.\r\n\r\nWhen the conflict names the rows involved, they are on `entityErrors` with the entities attached:\r\n\r\n```ts\r\nconst stale = (e.entityErrors ?? [])\r\n .filter(ee => ee.errorName === \"ConcurrencyError\")\r\n .map(ee => ee.entity);\r\n```\r\n@param error The rejection value from a Breeze call - typically a {@link SaveError}.\r\n@returns true if the server identified this as a concurrency conflict. */\r\nexport function isConcurrencyError(error: any): boolean {\r\n return !!error && error.problemType === ProblemTypes.concurrencyConflict;\r\n}\r\n\r\n/** Shape of a save error when returned to the client. */\r\nexport interface SaveError extends ServerError {\r\n /** The errors the server reported on particular entities. Undefined when it named none - after a\r\n network failure or a server exception, say - which is how to tell a rejected save from those.\r\n Breeze also adds each one to its entity's validation errors.\r\n\r\n When client-side validation stops a save before it is sent, the rejection is a plain `Error` with\r\n `entityErrors` built from the entities' validation errors, and no HTTP members. */\r\n entityErrors?: EntityError[];\r\n}\r\n\r\n// not subclasses of Error\r\n/** \r\nFor use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation. \r\n@adapter (see {@link DataServiceAdapter}) \r\n@hidden @internal \r\n*/\r\nexport interface EntityErrorFromServer {\r\n entityTypeName: string;\r\n keyValues: any[];\r\n\r\n errorName: string;\r\n errorMessage: string;\r\n propertyName: string;\r\n custom?: any;\r\n}\r\n\r\n/** Shape of an error on a specific entity. Part of a {@link SaveError} */\r\nexport interface EntityError {\r\n /** The entity the error is about. `null` when the server named an entity that is not in this\r\n manager's cache. */\r\n entity: Entity | null;\r\n /** What kind of error this is. From the server, the name it gave the error, such as\r\n `\"ConcurrencyError\"`; from client-side validation, the validator's name, or the error's key if it\r\n was added without a validator. */\r\n errorName: string;\r\n /** The error message. */\r\n errorMessage: string;\r\n /** The client-side name of the property the error is about; empty or null when it is about the\r\n whole entity. */\r\n propertyName: string;\r\n /** `true` for an error the server reported, `false` for one from client-side validation. */\r\n isServerError: boolean;\r\n /** Whatever extra information the server attached to the error. Undefined for client-side\r\n errors. */\r\n custom?: any;\r\n}\r\n\r\n/**\r\n * Anything the type-taking APIs accept in place of an {@link EntityType}: the type itself, its\r\n * name, or a constructor registered for it with {@link MetadataStore.registerEntityTypeCtor}.\r\n */\r\nexport type EntityTypeArg = EntityType | string | (new () => Entity);\r\n\r\n/** What {@link EntityManager.exportEntities} exports: particular entities, or every entity of the\r\ngiven types - as registered classes, {@link EntityType}s or type names. */\r\nexport type ExportEntitiesArg = Entity[] | (new () => Entity)[] | EntityType[] | string[];\r\n\r\n/**\r\nThe values {@link EntityManager.createEntity} can be given for an entity of class `T`: any of its\r\ndata and navigation properties, each optional.\r\n\r\n- A collection navigation property takes a plain array of entities, and a complex property a plain\r\n object of its own values - both are what `createEntity` accepts at runtime.\r\n- The members every entity has - `entityAspect`, `entityType`, `getProperty`, `setProperty` - are\r\n not initial values, and passing one fails inside Breeze. Methods are left out too.\r\n\r\nA property the class does not declare is a compile error, which is the point: at runtime\r\n`createEntity` ignores it without a word, so a misspelt or server-cased name (`ShipName` for\r\n`shipName`) would otherwise create the entity without it.\r\n\r\nOnly the constructor overload is checked. Pass the type's name or its `EntityType` to create one\r\nfrom values the compiler cannot see.\r\n*/\r\nexport type InitialValues<T> = {\r\n [K in keyof T as K extends keyof Entity | keyof ComplexObject ? never\r\n : T[K] extends Function ? never\r\n : K]?:\r\n T[K] extends RelationArray<infer U> ? U[] | T[K]\r\n : T[K] extends ReadonlyArray<infer U> ? (U extends ComplexObject ? InitialValues<U> | U : U)[] | T[K]\r\n : T[K] extends ComplexObject ? InitialValues<T[K]> | T[K]\r\n : T[K];\r\n};\r\n\r\n/** What an {@link EntityManager.executeQuery} call resolves with - as do `EntityQuery.execute` and\r\n`RelationArray.load`. `T` is what the query was built for: `EntityQuery.from(Customer)` gives a\r\n`QueryResult<Customer>`, whose `results` is `Customer[]`. It defaults to `any`. */\r\nexport interface QueryResult<T = any> {\r\n /** Top level entities returned. Excludes entities that are Deleted. */\r\n results: T[];\r\n /** Query that was executed */\r\n query: EntityQuery | string;\r\n /** EntityManager that executed the query */\r\n entityManager?: EntityManager;\r\n /** Total number of results available on the server */\r\n inlineCount?: number;\r\n /** All entities returned by the query. Differs from `results` when an expand is used. Includes entities that are Deleted. */\r\n retrievedEntities?: Entity[];\r\n /** Raw response from the server */\r\n httpResponse?: HttpResponse;\r\n}\r\n\r\n/** The success callback accepted by the deprecated callback form of {@link EntityManager.executeQuery}.\r\n@deprecated Await the returned promise instead of passing callbacks. */\r\nexport interface QuerySuccessCallback {\r\n (data: QueryResult): void;\r\n}\r\n\r\n/** The failure callback accepted by the deprecated callback form of {@link EntityManager.executeQuery}.\r\n@deprecated Await the returned promise instead of passing callbacks. */\r\nexport interface QueryErrorCallback {\r\n (error: { query: EntityQuery; httpResponse: HttpResponse; entityManager: EntityManager; message?: string; stack?: string }): void;\r\n}\r\n\r\n/** Key mapping information returned as part of an {@link SaveResult}. */\r\nexport interface KeyMapping {\r\n /** The qualified name of the entity's type, such as `\"Order:#Northwind.Models\"`. */\r\n entityTypeName: string;\r\n /** The temporary key value the entity had on the client. */\r\n tempValue: any;\r\n /** The permanent key value the server assigned. */\r\n realValue: any;\r\n}\r\n\r\n/** Maps each temporary key in a bundle imported by {@link EntityManager.importEntities} to the\r\ntemporary key its entity was given in the importing manager. Returned as\r\n{@link ImportResult.tempKeyMapping}.\r\n\r\nEach property name is an old key in its {@link EntityKey.toString} form - the entity type's\r\nqualified name, a hyphen and the key value, such as `\"Order:#Northwind.Models--1\"` for the key\r\n`-1` - and its value is the new {@link EntityKey}. Both are temporary: the entity is still unsaved,\r\nand gets its permanent key when it is saved. The new key keeps the old value unless this manager's\r\n{@link KeyGenerator} has already handed that value out.\r\n\r\nWith {@link ImportConfig.mergeAdds} set, imported entities keep their old keys and this map does not\r\ndescribe them. */\r\nexport interface ITempKeyMap {\r\n [index: string]: EntityKey;\r\n}\r\n\r\n/** Configuration info to be passed to the {@link EntityManager.importEntities} method */\r\nexport interface ImportConfig {\r\n /** If true, merge Added entities (with temp keys) as well. This can be dangerous. */\r\n mergeAdds?: boolean;\r\n /** How to merge an imported entity into one with the same key already in this manager. Defaults\r\n to the manager's `queryOptions.mergeStrategy`. With {@link MergeStrategy.Disallowed} the import\r\n throws on such an entity. Added entities with temporary keys are never merged unless `mergeAdds`\r\n is set. */\r\n mergeStrategy?: MergeStrategy; \r\n /** Called before anything is imported when the bundle was exported without metadata, with the\r\n `MetadataStore.metadataVersion` of the Breeze that exported it and the name of the exporting\r\n manager's `MetadataStore`. Throw from it to stop the import if the bundle does not match this\r\n manager's metadata. Not called when the bundle includes metadata. */\r\n metadataVersionFn?: (arg: { metadataVersion: any, metadataStoreName: any }) => void;\r\n}\r\n\r\ninterface ImportConfigExt extends ImportConfig {\r\n tempKeyMap?: ITempKeyMap;\r\n}\r\n\r\n/** The shape of the Promise returned by an {@link EntityManager.saveChanges} call. */\r\nexport interface SaveResult {\r\n /** The entities the server returned for the save, as merged into this manager's cache. Empty\r\n when there was nothing to save. */\r\n entities: Entity[];\r\n /** For each entity saved with a temporary key, the permanent key the server assigned. Breeze has\r\n already applied them - to the entities and to the foreign keys that pointed at them - by the time\r\n the save resolves. */\r\n keyMappings: KeyMapping[];\r\n /** The entities the server reports it deleted during the save, by type name and key values. This\r\n can include entities the client did not send, such as ones deleted by server-side logic. Breeze\r\n detaches any of them that are in the cache. */\r\n deletedKeys?: {\r\n /** The name of the deleted entity's type, as the server sent it. */\r\n entityTypeName: string,\r\n /** The deleted entity's key values, one per key property. */\r\n keyValues: any[]\r\n }[];\r\n /** The raw response to the save request. Undefined when there was nothing to save, and so no\r\n request. */\r\n httpResponse?: HttpResponse;\r\n}\r\n\r\n/** For use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation. \r\n@adapter (see {@link DataServiceAdapter}) \r\n@hidden \r\n*/\r\nexport interface SaveContext {\r\n entityManager: EntityManager;\r\n dataService: DataService;\r\n processSavedEntities: (saveResult: SaveResult) => Entity[];\r\n resourceName: string;\r\n adapter?: DataServiceAdapter;\r\n routePrefix?: string;\r\n}\r\n\r\n/** For use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation. \r\n@adapter (see {@link DataServiceAdapter}) \r\n@hidden \r\n*/\r\nexport interface SaveBundle {\r\n entities: Entity[];\r\n saveOptions: SaveOptions;\r\n}\r\n\r\n/** Configuration info to be passed to the {@link EntityManager} constructor */\r\nexport interface EntityManagerConfig {\r\n /** The service name associated with this EntityManager. */\r\n serviceName?: string;\r\n /** The DataService associated with this EntityManager. */\r\n dataService?: DataService;\r\n /** The {@link QueryOptions} associated with this EntityManager. */\r\n queryOptions?: QueryOptions;\r\n /** The {@link SaveOptions} associated with this EntityManager. */\r\n saveOptions?: SaveOptions;\r\n /** The {@link ValidationOptions} associated with this EntityManager. */\r\n validationOptions?: ValidationOptions;\r\n /** The {@link KeyGenerator} constructor associated with this EntityManager. The manager creates its own\r\n instance, and a new one whenever it is cleared, so a generator cannot be passed in as an instance. */\r\n keyGeneratorCtor?: { new (): KeyGenerator }; // TODO: review this\r\n /** The {@link MetadataStore} associated with this EntityManager. */\r\n metadataStore?: MetadataStore;\r\n}\r\n\r\n/** The shape returned by callbacks registered with {@link EntityManager.entityChanged} event */\r\nexport interface EntityChangedEventArgs {\r\n /** What happened - see {@link EntityAction}. */\r\n entityAction: EntityAction;\r\n /** The entity the action happened to. Undefined for {@link EntityAction.Clear}, which affects every\r\n entity in the manager. */\r\n entity?: Entity;\r\n /** Set only for {@link EntityAction.PropertyChange}: the same {@link PropertyChangedEventArgs} the\r\n entity's `propertyChanged` event receives. Undefined for every other action. */\r\n args?: PropertyChangedEventArgs;\r\n}\r\n\r\n/** The argument to the `validationErrorsChanged` event of an {@link EntityManager} and of an\r\n{@link EntityAspect}. Raised once per operation - a validation, or a call that adds, removes or\r\nclears errors - that added or removed at least one error. */\r\nexport interface ValidationErrorsChangedEventArgs {\r\n /** The entity whose validation errors changed. */\r\n entity: Entity; \r\n /** The errors the operation added. An error found again when the entity is re-validated appears\r\n here again, replacing the one with the same key. */\r\n added: ValidationError[]; \r\n /** The errors the operation removed: ones that no longer fail validation, and ones removed with\r\n {@link EntityAspect.removeValidationError} or {@link EntityAspect.clearValidationErrors}. */\r\n removed: ValidationError[];\r\n}\r\n\r\n/** The argument to the {@link EntityManager.hasChangesChanged} event. */\r\nexport interface HasChangesChangedEventArgs {\r\n /** The manager whose `hasChanges` state changed. */\r\n entityManager: EntityManager; \r\n /** Whether the manager now has changes - see {@link EntityManager.hasChanges}. */\r\n hasChanges: boolean;\r\n}\r\n\r\n/**\r\nInstances of the EntityManager contain and manage collections of entities, either retrieved from a backend datastore or created on the client.\r\n*/\r\nexport class EntityManager {\r\n /** @hidden @internal */\r\n declare _$typeName: string; // actually defined on prototype\r\n\r\n /** The service name associated with this EntityManager. __Read Only__ */\r\n declare serviceName: string;\r\n /** The DataService associated with this EntityManager. __Read Only__ */\r\n declare dataService: DataService;\r\n /** The {@link QueryOptions} associated with this EntityManager. __Read Only__ */\r\n declare queryOptions: QueryOptions;\r\n /** The {@link SaveOptions} associated with this EntityManager. __Read Only__ */\r\n declare saveOptions: SaveOptions;\r\n /** The {@link ValidationOptions} associated with this EntityManager. __Read Only__ */\r\n declare validationOptions: ValidationOptions;\r\n /** The {@link KeyGenerator} associated with this EntityManager. __Read Only__ */\r\n declare keyGenerator: KeyGenerator;\r\n /** The {@link KeyGenerator} constructor associated with this EntityManager. __Read Only__ */\r\n declare keyGeneratorCtor: { new (): KeyGenerator }; // TODO: review this\r\n /** The {@link MetadataStore} associated with this EntityManager. __Read Only__ */\r\n declare metadataStore: MetadataStore;\r\n /** True while Breeze is loading entities into this manager - merging query or save results, or\r\n attaching or creating entities. While it is set, property changes do not mark entities Modified,\r\n are not validated, and raise no property-change events. Used by Breeze; applications do not\r\n normally need it. */\r\n declare isLoading: boolean;\r\n /** True while {@link EntityAspect.rejectChanges} restores an entity's original values, so that\r\n restoring them raises no property-change events. Used by Breeze; applications do not normally need\r\n it. */\r\n declare isRejectingChanges: boolean;\r\n\r\n // events\r\n /**\r\n A {@link BreezeEvent} that fires whenever a change to any entity in this EntityManager occurs. __Read Only__\r\n\r\n @eventArgs - \r\n - entityAction - The {@link EntityAction} that occured.\r\n - entity - The entity that changed. Undefined for {@link EntityAction.Clear}, which affects every entity in the manager.\r\n - args - Additional information about this event. This will differ based on the entityAction.\r\n\r\n ```ts\r\n const em = new EntityManager({ serviceName: \"breeze/NorthwindIBModel\" });\r\n em.entityChanged.subscribe(changeArgs => {\r\n // This code will be executed any time any entity within the entityManager\r\n // is added, modified, deleted or detached for any reason.\r\n const action = changeArgs.entityAction;\r\n const entity = changeArgs.entity;\r\n // .. do something to this entity when it is changed.\r\n });\r\n ```\r\n @event\r\n */\r\n entityChanged: BreezeEvent<EntityChangedEventArgs>;\r\n\r\n /**\r\n An {@link BreezeEvent} that fires whenever validationErrors change for any entity in this EntityManager. __Read Only__\r\n @eventArgs -\r\n - entity - The entity on which the validation errors have been added or removed.\r\n - added - An array containing any newly added {@link ValidationError}s\r\n - removed - An array containing any newly removed {@link ValidationError}s. This is those errors that have been 'fixed' \r\n\r\n ```ts\r\n const em = new EntityManager({ serviceName: \"breeze/NorthwindIBModel\" });\r\n em.validationErrorsChanged.subscribe(changeArgs => {\r\n // This code will be executed any time any entity within the entityManager\r\n // experiences a change to its validationErrors collection.\r\n const entity = changeArgs.entity;\r\n const errorsAdded = changeArgs.added;\r\n const errorsCleared = changeArgs.removed;\r\n // ... do something interesting with the entity.\r\n });\r\n ```\r\n @event\r\n */\r\n validationErrorsChanged: BreezeEvent<ValidationErrorsChangedEventArgs>;\r\n\r\n /**\r\n A {@link BreezeEvent} that fires whenever an EntityManager transitions to or from having changes. __Read Only__\r\n @eventArgs -\r\n - entityManager - The EntityManager whose 'hasChanges' status has changed.\r\n - hasChanges - Whether or not this EntityManager has changes.\r\n\r\n ```ts\r\n const em = new EntityManager({ serviceName: \"breeze/NorthwindIBModel\" });\r\n em.hasChangesChanged.subscribe(args => {\r\n const hasChanges = args.hasChanges;\r\n const entityManager = args.entityManager;\r\n });\r\n ```\r\n @event\r\n */\r\n hasChangesChanged: BreezeEvent<HasChangesChangedEventArgs>;\r\n\r\n\r\n /** @hidden @internal */\r\n _pendingPubs?: any[]; // TODO: refine later\r\n /** @hidden @internal */\r\n // Deferred to the end of a load: recomputing hasChanges scans the cache, so it is done once\r\n // when the load finishes rather than per entity. See _notifyStateChange.\r\n _hasChangesAction?: (() => void);\r\n /** @hidden @internal */\r\n _hasChanges: boolean;\r\n /** @hidden @internal Keyed by qualified entityType name. */\r\n _entityGroupMap: Map<string, EntityGroup>;\r\n /** @hidden @internal */\r\n _unattachedChildrenMap: UnattachedChildrenMap;\r\n /** @hidden @internal */\r\n _inKeyFixup: boolean;\r\n\r\n /** Functions a {@link DataServiceAdapter} uses to build the save request: `unwrapInstance` turns an\r\n entity or complex object into a plain object with server property names, `unwrapOriginalValues`\r\n does the same for its original values, and `unwrapChangedValues` for the current values of its\r\n changed properties. For adapter authors; applications do not normally need it. */\r\n helper = {\r\n /** Turns an entity or complex object into a plain object keyed by server property names. */\r\n unwrapInstance: unwrapInstance,\r\n /** The same, for the original values of an entity's changed properties. */\r\n unwrapOriginalValues: unwrapOriginalValues,\r\n /** The same, for the current values of an entity's changed properties. */\r\n unwrapChangedValues: unwrapChangedValues\r\n };\r\n\r\n /**\r\n EntityManager constructor.\r\n\r\n At its most basic an EntityManager can be constructed with just a service name\r\n ```ts\r\n const entityManager = new EntityManager(\"breeze/NorthwindIBModel\");\r\n ```\r\n\r\n This is the same as calling it with the following configuration object\r\n ```ts\r\n const entityManager = new EntityManager({ serviceName: \"breeze/NorthwindIBModel\" });\r\n ```\r\n\r\n Usually however, configuration objects will contain more than just the 'serviceName';\r\n ```ts\r\n const metadataStore = new MetadataStore();\r\n const entityManager = new EntityManager({\r\n serviceName: \"breeze/NorthwindIBModel\",\r\n metadataStore: metadataStore\r\n });\r\n ```\r\n\r\n or\r\n ```ts\r\n const queryOptions = new QueryOptions({\r\n mergeStrategy: MergeStrategy.OverwriteChanges,\r\n fetchStrategy: FetchStrategy.FromServer\r\n });\r\n const validationOptions = new ValidationOptions({\r\n validateOnAttach: true,\r\n validateOnSave: true,\r\n validateOnQuery: false\r\n });\r\n const entityManager = new EntityManager({\r\n serviceName: \"breeze/NorthwindIBModel\",\r\n queryOptions: queryOptions,\r\n validationOptions: validationOptions\r\n });\r\n ```\r\n @param emConfig - Configuration settings or a service name. \r\n */\r\n constructor(emConfig?: EntityManagerConfig | string) {\r\n\r\n if (arguments.length > 1) {\r\n throw new Error(\"The EntityManager ctor has a single optional argument that is either a 'serviceName' or a configuration object.\");\r\n }\r\n let config: EntityManagerConfig;\r\n if (arguments.length === 0) {\r\n config = { serviceName: \"\" };\r\n } else if (typeof emConfig === 'string') {\r\n config = { serviceName: emConfig };\r\n } else {\r\n config = emConfig || {};\r\n }\r\n\r\n EntityManager._updateWithConfig(this, config, true);\r\n\r\n // Given a real value here rather than left undefined, because `core.using` restores a\r\n // property it found undefined by *deleting* it. These two are scoped with `core.using` on\r\n // every createEntity, query merge and rejectChanges, so the manager was having a property\r\n // added and removed several times per entity - which is what puts an object into V8's\r\n // dictionary-properties mode, permanently, for every property it has. Reads of\r\n // `metadataStore`, `queryOptions` and the rest then cost about 20x what they should.\r\n this.isLoading = false;\r\n this.isRejectingChanges = false;\r\n\r\n this.entityChanged = new BreezeEvent(\"entityChanged\", this);\r\n this.validationErrorsChanged = new BreezeEvent(\"validationErrorsChanged\", this);\r\n this.hasChangesChanged = new BreezeEvent(\"hasChangesChanged\", this);\r\n\r\n this.clear();\r\n\r\n }\r\n\r\n /**\r\n General purpose property set method. Any of the properties in the {@link EntityManagerConfig}\r\n may be set.\r\n ```ts\r\n // assume em1 is a previously created EntityManager\r\n // where we want to change some of its settings.\r\n em1.setProperties( {\r\n serviceName: \"breeze/foo\"\r\n });\r\n ```\r\n @param config - An object containing the selected properties and values to set.\r\n */\r\n setProperties(config: EntityManagerConfig) {\r\n EntityManager._updateWithConfig(this, config, false);\r\n }\r\n\r\n /** @hidden @internal */\r\n static _updateWithConfig(em: EntityManager, config: EntityManagerConfig, isCtor: boolean) {\r\n let defaultQueryOptions = isCtor ? QueryOptions.defaultInstance : em.queryOptions;\r\n let defaultSaveOptions = isCtor ? SaveOptions.defaultInstance : em.saveOptions;\r\n let defaultValidationOptions = isCtor ? ValidationOptions.defaultInstance : em.validationOptions;\r\n\r\n let configParam = assertConfig(config)\r\n .whereParam(\"serviceName\").isOptional().isString()\r\n .whereParam(\"dataService\").isOptional().isInstanceOf(DataService)\r\n .whereParam(\"queryOptions\").isInstanceOf(QueryOptions).isOptional().withDefault(defaultQueryOptions)\r\n .whereParam(\"saveOptions\").isInstanceOf(SaveOptions).isOptional().withDefault(defaultSaveOptions)\r\n .whereParam(\"validationOptions\").isInstanceOf(ValidationOptions).isOptional().withDefault(defaultValidationOptions)\r\n .whereParam(\"keyGeneratorCtor\").isFunction().isOptional();\r\n if (isCtor) {\r\n configParam = configParam\r\n .whereParam(\"metadataStore\").isInstanceOf(MetadataStore).isOptional().withDefault(new MetadataStore());\r\n }\r\n configParam.applyAll(em);\r\n\r\n // insure that entityManager's options versions are completely populated\r\n core.updateWithDefaults(em.queryOptions, defaultQueryOptions);\r\n core.updateWithDefaults(em.saveOptions, defaultSaveOptions);\r\n core.updateWithDefaults(em.validationOptions, defaultValidationOptions);\r\n\r\n if (config.serviceName) {\r\n // Use the store's DataService for this service when it has one (added with addDataService, by fetchMetadata or\r\n // from imported metadata), so that its settings - hasServerMetadata among them - apply to this manager.\r\n em.dataService = em.metadataStore.getDataService(em.serviceName) || new DataService({\r\n serviceName: em.serviceName\r\n });\r\n }\r\n em.serviceName = em.dataService && em.dataService.serviceName;\r\n\r\n em.keyGeneratorCtor = em.keyGeneratorCtor || KeyGenerator;\r\n if (isCtor || config.keyGeneratorCtor) {\r\n em.keyGenerator = new em.keyGeneratorCtor();\r\n }\r\n }\r\n\r\n createEntity<T extends Entity>(entityCtor: new () => T, initialValues?: InitialValues<T>, entityState?: EntityState, mergeStrategy?: MergeStrategy): T;\r\n createEntity(typeName: string, initialValues?: Object, entityState?: EntityState, mergeStrategy?: MergeStrategy): Entity;\r\n createEntity(entityType: EntityType, initialValues?: Object, entityState?: EntityState, mergeStrategy?: MergeStrategy): Entity;\r\n /**\r\n Creates a new entity of a specified type and optionally initializes it. By default the new entity is created with an EntityState of Added\r\n but you can also optionally specify an EntityState. An EntityState of 'Detached' will insure that the entity is created but not yet added\r\n to the EntityManager. \r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n // create and add an entity. Passing the registered class types the result:\r\n const emp1 = em1.createEntity(Employee); // Employee\r\n // create and add an initialized entity;\r\n const emp2 = em1.createEntity(Employee, { lastName: \"Smith\", firstName: \"John\" });\r\n // create and attach (not add) an initialized entity\r\n const emp3 = em1.createEntity(Employee, { employeeID: 435, lastName: \"Smith\", firstName: \"John\" }, EntityState.Unchanged);\r\n // create but don't attach an entity;\r\n const emp4 = em1.createEntity(Employee, { employeeID: 435, lastName: \"Smith\", firstName: \"John\" }, EntityState.Detached);\r\n // with the constructor, initialValues is checked: a property Employee does not declare,\r\n // such as a misspelling, is a compile error rather than a value silently ignored\r\n em1.createEntity(Employee, { lastNmae: \"Smith\" }); // error\r\n\r\n // the type name and the EntityType both still work, and return Entity:\r\n const emp5 = em1.createEntity(\"Employee\", { lastName: \"Smith\" });\r\n ```\r\n\r\n The constructor overload needs the class to have been registered with\r\n {@link MetadataStore.registerEntityTypeCtor}; that is what tells Breeze which type it stands\r\n for. An unregistered class throws. See the Typed entities guide.\r\n @param entityCtor - A constructor registered for the EntityType to create.\r\n @param typeName - The name of the EntityType for which an instance should be created.\r\n @param entityType - The EntityType of the type for which an instance should be created.\r\n @param initialValues - (default=null) Configuration object of the properties to set immediately after creation.\r\n With the constructor overload it is typed as {@link InitialValues}, so a property the class does\r\n not declare is a compile error.\r\n @param entityState - (default = {@link EntityState.Added}) The EntityState of the entity after being created and added to this EntityManager.\r\n @param mergeStrategy - (default = {@link MergeStrategy.Disallowed}) - How to handle conflicts if an entity with the same key already exists within this EntityManager.\r\n @returns {Entity} A new Entity of the specified type. \r\n */\r\n createEntity(entityType: EntityType | string | (new () => Entity), initialValues: Object, entityState: EntityState, mergeStrategy: MergeStrategy) {\r\n // A constructor stands for its type *name*, which is then looked up in this manager's own\r\n // MetadataStore. Using the EntityType hanging off the constructor's prototype would tie the\r\n // call to whichever store the class was registered with, and a manager with an equivalent\r\n // store - a copy, or one built from the same metadata - would fail deep inside attachEntity\r\n // with a store-mismatch error.\r\n if (typeof entityType === \"function\") {\r\n entityType = entityTypeForCtor(entityType).name;\r\n }\r\n assertParam(entityType, \"entityType\").isString().or().isInstanceOf(EntityType).check();\r\n assertParam(entityState, \"entityState\").isEnumOf(EntityState).isOptional().check();\r\n assertParam(mergeStrategy, \"mergeStrategy\").isEnumOf(MergeStrategy).isOptional().check();\r\n\r\n let et = (typeof entityType === \"string\") ? this.metadataStore._getStructuralType(entityType) as EntityType : entityType;\r\n entityState = entityState || EntityState.Added;\r\n let entity = {} as Entity;\r\n core.using(this, \"isLoading\", true, function () {\r\n entity = et.createEntity(initialValues);\r\n });\r\n if (entityState !== EntityState.Detached) {\r\n // The two enums were checked above; no need for attachEntity to check them again.\r\n entity = this._attachEntity(entity, entityState, mergeStrategy || MergeStrategy.Disallowed);\r\n }\r\n return entity;\r\n }\r\n\r\n static importEntities(exportedString: string, config?: ImportConfig): EntityManager;\r\n static importEntities(exportedData: Object, config?: ImportConfig): EntityManager;\r\n /**\r\n Creates a new EntityManager and imports a previously exported result into it.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const bundle = em1.exportEntities() as string;\r\n // can be stored via the web storage api\r\n window.localStorage.setItem(\"myEntityManager\", bundle);\r\n // assume the code below occurs in a different session.\r\n const bundleFromStorage = window.localStorage.getItem(\"myEntityManager\");\r\n // and imported\r\n const em2 = EntityManager.importEntities(bundleFromStorage);\r\n // em2 will now have a complete copy of what was in em1\r\n ```\r\n @param exportedString - The result of a previous 'exportEntities' call as a string\r\n @param exportedData - The result of a previous 'exportEntities' call as an Object.\r\n @param config - A configuration object.\r\n @param config.mergeStrategy - A {@link MergeStrategy} to use when \r\n merging into an existing EntityManager.\r\n @param config.metadataVersionFn - A function called with `{ metadataVersion, metadataStoreName }` from the\r\n import bundle, for version checking; throw from it to reject the import. Only called when the bundle was\r\n exported without its metadata.\r\n @returns A new EntityManager. Note that the return value of this method call is different from that\r\n provided by the same named method on an EntityManager instance. Use that method if you need additional information\r\n regarding the imported entities.\r\n */\r\n static importEntities(exported: string | Object, config?: ImportConfig) {\r\n let em = new EntityManager();\r\n em.importEntities(exported, config);\r\n return em;\r\n }\r\n\r\n // instance methods\r\n\r\n /**\r\n Calls {@link EntityAspect.acceptChanges} on every changed entity in this EntityManager.\r\n */\r\n acceptChanges() {\r\n this.getChanges().map(function (entity) {\r\n return entity.entityAspect._checkOperation(\"acceptChanges\");\r\n }).forEach(function (aspect) {\r\n aspect.acceptChanges();\r\n });\r\n }\r\n\r\n // The bundle is a string unless `asString: false` is passed; with a boolean only known at run\r\n // time, the last signature applies.\r\n exportEntities(entities?: ExportEntitiesArg, exportConfig?: { asString?: true, includeMetadata?: boolean } | boolean): string;\r\n exportEntities(entities: ExportEntitiesArg | undefined, exportConfig: { asString: false, includeMetadata?: boolean }): Object;\r\n exportEntities(entities?: ExportEntitiesArg, exportConfig?: { asString?: boolean, includeMetadata?: boolean } | boolean): string | Object;\r\n /**\r\n Exports selected entities, all entities of selected types, or an entire EntityManager cache.\r\n\r\n This method takes a snapshot of an EntityManager that can be stored offline or held in memory.\r\n Use the {@link EntityManager.importEntities} method to restore or merge the snapshot\r\n into another EntityManager at some later time.\r\n ```ts\r\n // let em1 be an EntityManager containing a number of existing entities.\r\n // export every entity in em1.\r\n const bundle = em1.exportEntities() as string;\r\n // save to the browser's local storage\r\n window.localStorage.setItem(\"myEntityManager\", bundle);\r\n // later retrieve the export\r\n const bundleFromStorage = window.localStorage.getItem(\"myEntityManager\");\r\n // import the retrieved export bundle into another manager\r\n const em2 = em1.createEmptyCopy();\r\n em2.importEntities(bundleFromStorage);\r\n // em2 now has a complete, faithful copy of the entities that were in em1\r\n ```\r\n\r\n You can also control exactly which entities are exported.\r\n ```ts\r\n // get em1's unsaved changes (an array) and export them.\r\n const changes = em1.getChanges();\r\n const bundle = em1.exportEntities(changes);\r\n // merge these entities into em2 which may contains some of the same entities.\r\n // do NOT overwrite the entities in em2 if they themselves have unsaved changes.\r\n em2.importEntities(bundle, { mergeStrategy: MergeStrategy.PreserveChanges });\r\n ```\r\n\r\n Metadata are included in an export by default. You may want to exclude the metadata\r\n especially if you're exporting just a few entities for local storage.\r\n ```ts\r\n const bundle = em1.exportEntities(arrayOfSelectedEntities, { includeMetadata: false }) as string;\r\n window.localStorage.setItem(\"goodStuff\", bundle);\r\n ```\r\n\r\n You may still express this option as a boolean value although this older syntax is deprecated.\r\n ```ts\r\n // Exclude the metadata (deprecated syntax)\r\n const bundle = em1.exportEntities(arrayOfSelectedEntities, false);\r\n ```\r\n\r\n You can export all entities of one or more specified EntityTypes, by name.\r\n ```ts\r\n // Export all Customer and Employee entities (and also exclude metadata)\r\n const bundle = em1.exportEntities(['Customer', 'Employee'], { includeMetadata: false });\r\n ```\r\n\r\n All of the above examples return an export bundle as a string which is the default format.\r\n You can export the bundle as JSON if you prefer by setting the `asString` option to false.\r\n ```ts\r\n // Export all Customer and Employee entities as JSON and exclude the metadata\r\n const bundle = em1.exportEntities(['Customer', 'Employee'],\r\n { asString: false, includeMetadata: false });\r\n // store JSON bundle somewhere ... perhaps indexDb ... and later import as we do here.\r\n em2.importEntities(bundle);\r\n ```\r\n @param entities - The entities to export, or the types of the entities to export - as registered\r\n classes, {@link EntityType}s or type names. All entities are exported if this parameter is\r\n omitted or null.\r\n @param exportConfig - Export configuration options or a boolean\r\n - asString - (boolean) - If true (default), return export bundle as a string.\r\n - includeMetadata - (boolean) - If true (default), include metadata in the export bundle.\r\n @returns The export bundle either serialized as a string (default) or as a JSON object.\r\n The bundle contains the metadata (unless excluded) and the entity data grouped by type.\r\n The entity data include property values, change-state, and temporary key mappings (if any).\r\n\r\n The export bundle internals are deliberately undocumented. This Breeze-internal representation of entity data is\r\n suitable for export, storage, and import. The schema and contents of the bundle may change in future versions of Breeze.\r\n Manipulate it at your own risk with appropriate caution.\r\n */\r\n exportEntities(entities?: ExportEntitiesArg, exportConfig?: { asString?: boolean, includeMetadata?: boolean } | boolean): string | Object {\r\n // A registered class stands for its type name, as it does for getEntities.\r\n if (Array.isArray(entities) && typeof entities[0] === \"function\") {\r\n entities = (entities as (new () => Entity)[]).map(ctor => entityTypeForCtor(ctor).name);\r\n }\r\n assertParam(entities, \"entities\").isArray().isEntity()\r\n .or().isNonEmptyArray().isInstanceOf(EntityType)\r\n .or().isNonEmptyArray().isString()\r\n .or().isOptional().check();\r\n\r\n // assertParam(exportConfig, \"exportConfig\").isObject()\r\n // .or().isBoolean()\r\n // .or().isOptional().check();\r\n\r\n if (exportConfig == null) {\r\n exportConfig = { includeMetadata: true, asString: true };\r\n } else if (typeof exportConfig === 'boolean') { // deprecated\r\n exportConfig = { includeMetadata: exportConfig, asString: true };\r\n }\r\n\r\n assertConfig(exportConfig)\r\n .whereParam(\"asString\").isBoolean().isOptional().withDefault(true)\r\n .whereParam(\"includeMetadata\").isBoolean().isOptional().withDefault(true)\r\n .applyAll(exportConfig);\r\n\r\n let exportBundle = exportEntityGroups(this, entities as Entity[] | EntityType[] | string[] | undefined); // classes were resolved to names above\r\n let json = core.extend({}, exportBundle, [\"tempKeys\", \"entityGroupMap\"]);\r\n\r\n if (exportConfig.includeMetadata) {\r\n json = core.extend(json, this, [\"dataService\", \"saveOptions\", \"queryOptions\", \"validationOptions\"]);\r\n (json as any).metadataStore = this.metadataStore.exportMetadata();\r\n } else {\r\n (json as any).metadataVersion = MetadataStore.metadataVersion;\r\n (json as any).metadataStoreName = this.metadataStore.name;\r\n }\r\n\r\n let result = exportConfig.asString ? JSON.stringify(json, null, config.stringifyPad) : json;\r\n return result;\r\n }\r\n\r\n // TODO: type the return value { entities: entitiesToLink, tempKeyMapping: tempKeyMap }\r\n importEntities(exportedString: string, config?: ImportConfig): ImportResult;\r\n importEntities(exportedData: Object, config?: ImportConfig): ImportResult;\r\n /**\r\n Imports a previously exported result into this EntityManager.\r\n\r\n This method can be used to make a complete copy of any previously created entityManager, even if created\r\n in a previous session and stored in localStorage. The static version of this method performs a\r\n very similar process.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of existing entities.\r\n const bundle = em1.exportEntities();\r\n // bundle can be stored in window.localStorage or just held in memory.\r\n const em2 = new EntityManager({\r\n serviceName: em1.serviceName,\r\n metadataStore: em1.metadataStore\r\n });\r\n em2.importEntities(bundle);\r\n // em2 will now have a complete copy of what was in em1\r\n ```\r\n\r\n It can also be used to merge the contents of a previously created EntityManager with an\r\n existing EntityManager with control over how the two are merged.\r\n ```ts\r\n const bundle = em1.exportEntities();\r\n // assume em2 is another entityManager containing some of the same entities possibly with modifications.\r\n em2.importEntities(bundle, { mergeStrategy: MergeStrategy.PreserveChanges });\r\n // em2 will now contain all of the entities from both em1 and em2. Any em2 entities with previously\r\n // made modifications will not have been touched, but all other entities from em1 will have been imported.\r\n ```\r\n @param exportedString - The result of a previous 'export' call.\r\n @param importConfig - A configuration object.\r\n @param importConfig.mergeStrategy - A {@link MergeStrategy} to use when\r\n merging into an existing EntityManager.\r\n @param importConfig.metadataVersionFn - A function called with `{ metadataVersion, metadataStoreName }` from the\r\n import bundle, for version checking; throw from it to reject the import. Only called when the bundle was\r\n exported without its metadata.\r\n @returns result \r\n - result.entities {Array of Entities} The entities that were imported.\r\n - result.tempKeyMapping {Object} For each temporary key in the bundle, the temporary {@link EntityKey} the entity has in this manager - see {@link ITempKeyMap}.\r\n */\r\n importEntities(exported: string | Object, importConfig?: ImportConfig) {\r\n importConfig = importConfig || {};\r\n assertConfig(importConfig)\r\n .whereParam(\"mergeStrategy\").isEnumOf(MergeStrategy).isOptional().withDefault(this.queryOptions.mergeStrategy)\r\n .whereParam(\"metadataVersionFn\").isFunction().isOptional()\r\n .whereParam(\"mergeAdds\").isBoolean().isOptional()\r\n .applyAll(importConfig);\r\n\r\n let json = (typeof exported === \"string\") ? JSON.parse(exported) : exported;\r\n if (json.metadataStore) {\r\n this.metadataStore.importMetadata(json.metadataStore);\r\n // the || clause is for backwards compat with an earlier serialization format.\r\n this.dataService = (json.dataService && DataService.fromJSON(json.dataService)) || new DataService({ serviceName: json.serviceName });\r\n\r\n this.saveOptions = new SaveOptions(json.saveOptions);\r\n this.queryOptions = QueryOptions.fromJSON(json.queryOptions);\r\n this.validationOptions = new ValidationOptions(json.validationOptions);\r\n } else {\r\n importConfig.metadataVersionFn && importConfig.metadataVersionFn({\r\n metadataVersion: json.metadataVersion,\r\n metadataStoreName: json.metadataStoreName\r\n });\r\n }\r\n\r\n let tempKeyMap: ITempKeyMap = {};\r\n json.tempKeys.forEach((k: any) => {\r\n let oldKey = EntityKey.fromJSON(k, this.metadataStore);\r\n // try to use oldKey if not already used in this keyGenerator.\r\n tempKeyMap[oldKey.toString()] = new EntityKey(oldKey.entityType, this.keyGenerator.generateTempKeyValue(oldKey.entityType, oldKey.values[0]));\r\n });\r\n\r\n let entitiesToLink: Entity[] = [];\r\n let impConfig = importConfig as ImportConfigExt;\r\n\r\n impConfig.tempKeyMap = tempKeyMap;\r\n core.wrapExecution(() => {\r\n this._pendingPubs = [];\r\n }, (state) => {\r\n this._pendingPubs!.forEach((fn) => fn());\r\n this._pendingPubs = undefined;\r\n this._hasChangesAction && this._hasChangesAction();\r\n }, () => {\r\n core.objectForEach(json.entityGroupMap, (entityTypeName, jsonGroup) => {\r\n let entityType = this.metadataStore._getStructuralType(entityTypeName, false) as EntityType;\r\n let targetEntityGroup = findOrCreateEntityGroup(this, entityType);\r\n let entities = importEntityGroup(targetEntityGroup, jsonGroup, impConfig);\r\n if (entities && entities.length) {\r\n entitiesToLink = entitiesToLink.concat(entities);\r\n }\r\n });\r\n entitiesToLink.forEach((entity) => {\r\n if (!entity.entityAspect.entityState.isDeleted()) {\r\n this._linkRelatedEntities(entity);\r\n }\r\n });\r\n });\r\n return {\r\n entities: entitiesToLink,\r\n tempKeyMapping: tempKeyMap\r\n };\r\n }\r\n\r\n /**\r\n Clears this EntityManager's cache but keeps all other settings. Note that this\r\n method is not as fast as creating a new EntityManager via 'new EntityManager'.\r\n This is because clear actually detaches all of the entities from the EntityManager.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of existing entities.\r\n em1.clear();\r\n // em1 is will now contain no entities, but all other setting will be maintained.\r\n ```\r\n */\r\n clear() {\r\n // The constructor calls clear() before _entityGroupMap is assigned, so this runs\r\n // once with it undefined. core.objectMap used to absorb that; Map.values() does not.\r\n Array.from(this._entityGroupMap?.values() ?? [])\r\n .map(entityGroup => entityGroup._checkOperation('clear'))\r\n .forEach(entityGroup => entityGroup._clear());\r\n\r\n this._entityGroupMap = new Map();\r\n this._unattachedChildrenMap = new UnattachedChildrenMap();\r\n this.keyGenerator = new this.keyGeneratorCtor();\r\n this.entityChanged.publish({ entityAction: EntityAction.Clear });\r\n this._setHasChanges(false);\r\n }\r\n\r\n /**\r\n Creates an empty copy of this EntityManager but with the same DataService, MetadataStore, QueryOptions, SaveOptions, ValidationOptions, etc. \r\n ```ts\r\n // assume em1 is an EntityManager containing a number of existing entities.\r\n const em2 = em1.createEmptyCopy();\r\n // em2 is a new EntityManager with all of em1's settings\r\n // but no entities.\r\n ```\r\n @returns A new EntityManager.\r\n */\r\n createEmptyCopy() {\r\n let copy = new EntityManager(core.extend({}, this,\r\n [\"dataService\", \"metadataStore\", \"queryOptions\", \"saveOptions\", \"validationOptions\", \"keyGeneratorCtor\"]));\r\n return copy;\r\n }\r\n\r\n /**\r\n Attaches an entity to this EntityManager with an {@link EntityState} of 'Added'.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of existing entities.\r\n const cust1 = em1.createEntity(Customer, { companyName: \"Acme\" }, EntityState.Detached);\r\n em1.addEntity(cust1); // returns cust1, a Customer\r\n ```\r\n\r\n Note that this is the same as using 'attachEntity' with an {@link EntityState} of 'Added'.\r\n\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of existing entities.\r\n const cust1 = em1.createEntity(Customer, { companyName: \"Acme\" }, EntityState.Detached);\r\n em1.attachEntity(cust1, EntityState.Added);\r\n ```\r\n @param entity - The entity to add.\r\n @returns The added entity.\r\n */\r\n addEntity<T extends Entity>(entity: T): T {\r\n return this.attachEntity(entity, EntityState.Added);\r\n }\r\n\r\n /**\r\n Attaches an entity to this EntityManager with a specified {@link EntityState}.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of existing entities.\r\n const cust1 = em1.createEntity(Customer, { companyName: \"Acme\" }, EntityState.Detached);\r\n em1.attachEntity(cust1, EntityState.Added); // returns cust1, a Customer\r\n ```\r\n @param entity - The entity to add.\r\n @param entityState - (default=EntityState.Unchanged) The EntityState of the newly attached entity. If omitted this defaults to EntityState.Unchanged.\r\n @param mergeStrategy - (default = MergeStrategy.Disallowed) How the specified entity should be merged into the EntityManager if this EntityManager already contains an entity with the same key.\r\n @returns The attached entity.\r\n */\r\n attachEntity<T extends Entity>(entity: T, entityState?: EntityState, mergeStrategy?: MergeStrategy): T {\r\n assertParam(entity, \"entity\").isRequired().check();\r\n // Before the enum checks, so that an unregistered entity is still reported ahead of a bad\r\n // entityState, as it was when this was one method. _attachEntity repeats it for its internal\r\n // callers and it early-exits on anything that has an entityType, which is everything here.\r\n this.metadataStore._checkEntityType(entity);\r\n let esSymbol = assertParam(entityState, \"entityState\").isEnumOf(EntityState).isOptional().check(EntityState.Unchanged) as EntityState;\r\n let msSymbol = assertParam(mergeStrategy, \"mergeStrategy\").isEnumOf(MergeStrategy).isOptional().check(MergeStrategy.Disallowed) as MergeStrategy;\r\n return this._attachEntity(entity, esSymbol, msSymbol);\r\n }\r\n\r\n /**\r\n * What `attachEntity` does once its arguments have been checked.\r\n *\r\n * `createEntity` checks the same `entityState` and `mergeStrategy` a moment earlier and then\r\n * called the public method, so every created entity paid for the three `assertParam` chains\r\n * twice. Callers inside Breeze already hold a real entity and resolved enum values, so they\r\n * come in here instead. Everything the *entity* is checked for - a known type, a matching\r\n * metadata store, not already attached elsewhere - still happens below, because those depend\r\n * on this manager rather than on the caller getting its arguments right.\r\n *\r\n * @hidden @internal\r\n */\r\n _attachEntity<T extends Entity>(entity: T, esSymbol: EntityState, msSymbol: MergeStrategy): T {\r\n this.metadataStore._checkEntityType(entity);\r\n\r\n if (entity.entityType.metadataStore !== this.metadataStore) {\r\n throw new Error(\"Cannot attach this entity because the EntityType (\" + entity.entityType.name +\r\n \") and MetadataStore associated with this entity does not match this EntityManager's MetadataStore.\");\r\n }\r\n let aspect = entity.entityAspect;\r\n if (aspect) {\r\n // to avoid reattaching an entity in progress\r\n if (aspect._inProcessEntity) return aspect._inProcessEntity as T;\r\n } else {\r\n // this occur's when attaching an entity created via new instead of via createEntity.\r\n aspect = new EntityAspect(entity);\r\n }\r\n let manager = aspect.entityManager;\r\n if (manager) {\r\n if (manager === this) {\r\n return entity;\r\n } else {\r\n throw new Error(\"This entity already belongs to another EntityManager\");\r\n }\r\n }\r\n\r\n let attachedEntity = {} as Entity;\r\n core.using(this, \"isLoading\", true, () => {\r\n if (esSymbol.isAdded()) {\r\n checkEntityKey(this, entity);\r\n }\r\n // attachedEntity === entity EXCEPT in the case of a merge.\r\n attachedEntity = this._attachEntityCore(entity, esSymbol, msSymbol);\r\n aspect._inProcessEntity = attachedEntity;\r\n try {\r\n // entity ( not attachedEntity) is deliberate here.\r\n attachRelatedEntities(this, entity, esSymbol, msSymbol);\r\n } finally {\r\n // insure that _inProcessEntity is cleared.\r\n aspect._inProcessEntity = undefined;\r\n }\r\n });\r\n if (this.validationOptions.validateOnAttach) {\r\n attachedEntity.entityAspect.validateEntity();\r\n }\r\n if (!esSymbol.isUnchanged()) {\r\n this._notifyStateChange(attachedEntity, true);\r\n }\r\n this.entityChanged.publish({ entityAction: EntityAction.Attach, entity: attachedEntity });\r\n\r\n return attachedEntity as T;\r\n }\r\n\r\n\r\n /**\r\n Detaches an entity from this EntityManager.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of existing entities.\r\n // assume cust1 is a customer Entity previously attached to em1\r\n em1.detachEntity(cust1);\r\n // em1 will now no longer contain cust1 and cust1 will have an\r\n // entityAspect.entityState of EntityState.Detached\r\n ```\r\n @param entity - The entity to detach.\r\n @returns Whether the entity could be detached. This will return false if the entity is already detached or was never attached.\r\n */\r\n detachEntity(entity: Entity) {\r\n assertParam(entity, \"entity\").isEntity().check();\r\n let aspect = entity.entityAspect;\r\n if (!aspect) {\r\n // no aspect means in couldn't appear in any group\r\n return false;\r\n }\r\n\r\n if (aspect.entityManager !== this) {\r\n throw new Error(\"This entity does not belong to this EntityManager.\");\r\n }\r\n return aspect.setDetached();\r\n }\r\n\r\n fetchMetadata(dataService?: DataService): Promise<any>;\r\n /** @deprecated Await the returned promise instead of passing callbacks. */\r\n fetchMetadata(dataService: DataService | undefined, callback?: Callback, errorCallback?: ErrorCallback): Promise<any>;\r\n /**\r\n Fetches the metadata associated with the EntityManager's current 'serviceName'. This call\r\n occurs internally before the first query to any service if the metadata hasn't already been\r\n loaded. __Async__\r\n\r\n Usually you will not actually process the results of a fetchMetadata call directly, but will instead\r\n ask for the metadata from the EntityManager after the fetchMetadata call returns.\r\n ```ts\r\n const em1 = new EntityManager(\"breeze/NorthwindIBModel\");\r\n await em1.fetchMetadata();\r\n const metadataStore = em1.metadataStore;\r\n // do something with the metadata\r\n ```\r\n \r\n @param callback - Deprecated. Function called on success.\r\n @param errorCallback - Deprecated. Function called on failure.\r\n @returns {Promise}\r\n - schema {Object} The raw Schema object from metadata provider - Because this schema will differ depending on the metadata provider\r\n it is usually better to access metadata via the 'metadataStore' property of the EntityManager instead of using this 'raw' data.\r\n */\r\n fetchMetadata(dataService?: DataService, callback?: Callback, errorCallback?: ErrorCallback): Promise<any> {\r\n if (typeof (dataService) === \"function\") {\r\n // legacy support for when dataService was not an arg. i.e. first arg was callback\r\n errorCallback = callback;\r\n callback = dataService;\r\n dataService = undefined;\r\n } else {\r\n assertParam(dataService, \"dataService\").isInstanceOf(DataService).isOptional().check();\r\n assertParam(callback, \"callback\").isFunction().isOptional().check();\r\n assertParam(errorCallback, \"errorCallback\").isFunction().isOptional().check();\r\n }\r\n\r\n let promise = this.metadataStore.fetchMetadata(dataService || this.dataService);\r\n return promiseWithCallbacks(promise, callback, errorCallback);\r\n }\r\n\r\n\r\n executeQuery<T>(query: EntityQuery<T>): Promise<QueryResult<T>>;\r\n executeQuery(query: string): Promise<QueryResult>;\r\n /** @deprecated Await the returned promise instead of passing callbacks. */\r\n executeQuery<T>(query: EntityQuery<T>, callback?: QuerySuccessCallback, errorCallback?: QueryErrorCallback): Promise<QueryResult<T>>;\r\n /** @deprecated Await the returned promise instead of passing callbacks. */\r\n executeQuery(query: string, callback?: QuerySuccessCallback, errorCallback?: QueryErrorCallback): Promise<QueryResult>;\r\n /**\r\n Executes the specified query. __Async__ \r\n \r\n ```ts\r\n const em = new EntityManager(serviceName);\r\n const query = EntityQuery.from(Order);\r\n const data = await em.executeQuery(query);\r\n const orders = data.results; // Order[], because the query was built from the class\r\n ```\r\n\r\n The `callback` and `errorCallback` arguments are deprecated. They still work, but the\r\n promise is the supported form and the callbacks will be removed in a future major version.\r\n\r\n This method is the same as calling the {@link EntityQuery} 'execute' method.\r\n ```ts\r\n const em = new EntityManager(serviceName);\r\n const data = await EntityQuery.from(Order).using(em).execute();\r\n const orders = data.results; // Order[]\r\n ```\r\n @param query - The {@link EntityQuery} or query string to execute.\r\n @param callback - Deprecated. Function called on success.\r\n @param errorCallback - Deprecated. Function called on failure.\r\n @returns Promise of\r\n - results - An array of entities\r\n - retrievedEntities - A array of all of the entities returned by the query. Differs from results (above) when .expand() is used.\r\n - query - The original {@link EntityQuery} or query string\r\n - entityManager - The EntityManager.\r\n - httpResponse - The {@link HttpResponse} returned from the server.\r\n - inlineCount - Only available if 'inlineCount(true)' was applied to the query. Returns the count of\r\n items that would have been returned by the query before applying any skip or take operators, but after any filter/where predicates\r\n would have been applied.\r\n */\r\n executeQuery(query: EntityQuery | string, callback?: QuerySuccessCallback, errorCallback?: QueryErrorCallback) {\r\n assertParam(query, \"query\").isInstanceOf(EntityQuery).or().isString().check();\r\n assertParam(callback, \"callback\").isFunction().isOptional().check();\r\n assertParam(errorCallback, \"errorCallback\").isFunction().isOptional().check();\r\n let promise: Promise<any>;\r\n // 'resolve' methods create a new typed object with all of its properties fully resolved against a list of sources.\r\n // Thought about creating a 'normalized' query with these 'resolved' objects\r\n // but decided not to because the 'query' may not be an EntityQuery (it can be a string) and hence might not have a queryOptions or dataServices property on it.\r\n let queryOptions = QueryOptions.resolve([(query as any).queryOptions, this.queryOptions, QueryOptions.defaultInstance]);\r\n let dataService = DataService.resolve([(query as any).dataService!, this.dataService]);\r\n\r\n if ((!dataService.hasServerMetadata) || this.metadataStore.hasMetadataFor(dataService.serviceName)) {\r\n promise = executeQueryCore(this, query, queryOptions, dataService);\r\n } else {\r\n promise = this.fetchMetadata(dataService).then(() => {\r\n return executeQueryCore(this, query, queryOptions, dataService);\r\n });\r\n }\r\n\r\n return promiseWithCallbacks(promise, callback, errorCallback as ErrorCallback);\r\n }\r\n\r\n /**\r\n Executes the specified query against this EntityManager's local cache.\r\n\r\n Because this method is executed immediately there is no need for a promise or a callback\r\n ```ts\r\n const em = new EntityManager(serviceName);\r\n const query = EntityQuery.from(Order);\r\n const orders = em.executeQueryLocally(query); // Order[]\r\n ```\r\n\r\n Note that this can also be accomplished using the 'executeQuery' method with\r\n a FetchStrategy of FromLocalCache and making use of the Promise or callback\r\n ```ts\r\n const em = new EntityManager(serviceName);\r\n const query = EntityQuery.from(Order).using(FetchStrategy.FromLocalCache);\r\n const data = await em.executeQuery(query);\r\n const orders = data.results; // Order[]\r\n ```\r\n @param query - The {@link EntityQuery} to execute.\r\n @returns {Array of Entity} Array of entities from cache that satisfy the query\r\n */\r\n executeQueryLocally<T>(query: EntityQuery<T>): T[] {\r\n return executeQueryLocallyCore(this, query).results;\r\n }\r\n\r\n saveChanges(entities?: Entity[] | null, saveOptions?: SaveOptions): Promise<SaveResult>;\r\n /** @deprecated Await the returned promise instead of passing callbacks. */\r\n saveChanges(entities: Entity[] | null | undefined, saveOptions: SaveOptions | undefined, callback?: Function, errorCallback?: Function): Promise<SaveResult>;\r\n /**\r\n Saves either a list of specified entities or all changed entities within this EntityManager. If there are no changes to any of the entities\r\n specified then there will be no server side call made but a valid 'empty' saveResult will still be returned. __Async__\r\n\r\n Often we will be saving all of the entities within an EntityManager that are either added, modified or deleted\r\n and we will let the 'saveChanges' call determine which entities these are.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n // This could include added, modified and deleted entities.\r\n // A failed save rejects, so the await throws.\r\n const saveResult = await em1.saveChanges();\r\n const savedEntities = saveResult.entities;\r\n const keyMappings = saveResult.keyMappings;\r\n ```\r\n\r\n But we can also control exactly which entities to save and can specify specific SaveOptions\r\n\r\n ```ts\r\n // save only the changed customers\r\n const saveOptions = new SaveOptions({ allowConcurrentSaves: true });\r\n const saveResult = await em1.saveChanges(em1.getChanges(Customer), saveOptions);\r\n ```\r\n\r\n The `callback` and `errorCallback` arguments are deprecated. They still work, but the\r\n promise is the supported form and the callbacks will be removed in a future major version.\r\n\r\n @param entities - The list of entities to save.\r\n Every entity in that list will be sent to the server, whether changed or unchanged,\r\n as long as it is attached to this EntityManager.\r\n If this parameter is omitted, null or empty (the usual case),\r\n every entity with pending changes in this EntityManager will be saved.\r\n @param saveOptions - {@link SaveOptions} for the save - will default to\r\n {@link EntityManager.saveOptions} if null.\r\n @param callback - Deprecated. Function called on success.\r\n @param errorCallback - Deprecated. Function called on failure.\r\n @returns {Promise} Promise\r\n */\r\n saveChanges(entities?: Entity[] | null, saveOptions?: SaveOptions, callback?: Function, errorCallback?: Function): Promise<SaveResult> {\r\n assertParam(entities, \"entities\").isOptional().isArray().isEntity().check();\r\n assertParam(saveOptions, \"saveOptions\").isInstanceOf(SaveOptions).isOptional().check();\r\n assertParam(callback, \"callback\").isFunction().isOptional().check();\r\n assertParam(errorCallback, \"errorCallback\").isFunction().isOptional().check();\r\n\r\n saveOptions = saveOptions || this.saveOptions || SaveOptions.defaultInstance;\r\n\r\n let entitiesToSave = getEntitiesToSave(this, entities ? entities : undefined);\r\n\r\n if (entitiesToSave.length === 0) {\r\n let result = { entities: [], keyMappings: [] } as SaveResult;\r\n if (callback) callback(result);\r\n return Promise.resolve(result);\r\n }\r\n\r\n if (!saveOptions.allowConcurrentSaves) {\r\n let anyPendingSaves = entitiesToSave.some(function (entity) {\r\n return entity.entityAspect.isBeingSaved;\r\n });\r\n if (anyPendingSaves) {\r\n let err = new Error(\"Concurrent saves not allowed - SaveOptions.allowConcurrentSaves is false\");\r\n if (errorCallback) errorCallback(err);\r\n return Promise.reject(err);\r\n }\r\n }\r\n\r\n clearServerErrors(entitiesToSave);\r\n\r\n const rejectInvalid = (valError: any) => {\r\n if (errorCallback) errorCallback(valError);\r\n return Promise.reject(valError);\r\n };\r\n\r\n // With an async validator, the save waits for it. The entities count as being saved from here,\r\n // so a second saveChanges while this one waits is refused, as it would be once this is sent.\r\n // Without one, nothing here waits, exactly as before.\r\n if (this.validationOptions.validateOnSave && hasAsyncValidators(entitiesToSave)) {\r\n markIsBeingSaved(entitiesToSave, true);\r\n return this.saveChangesValidateOnClientAsync(entitiesToSave).then(valError => {\r\n markIsBeingSaved(entitiesToSave, false);\r\n return valError ? rejectInvalid(valError) : this._sendSave(entitiesToSave, saveOptions!, callback, errorCallback);\r\n }, err => {\r\n markIsBeingSaved(entitiesToSave, false);\r\n return rejectInvalid(err);\r\n });\r\n }\r\n\r\n let valError = this.saveChangesValidateOnClient(entitiesToSave);\r\n if (valError) return rejectInvalid(valError);\r\n return this._sendSave(entitiesToSave, saveOptions, callback, errorCallback);\r\n }\r\n\r\n /** The part of saveChanges after validation: send the entities, and merge what comes back.\r\n @hidden @internal */\r\n _sendSave(entitiesToSave: Entity[], saveOptions: SaveOptions, callback?: Function, errorCallback?: Function): Promise<SaveResult> {\r\n let dataService = DataService.resolve([saveOptions.dataService, this.dataService]);\r\n let saveContext: SaveContext = {\r\n entityManager: this,\r\n dataService: dataService,\r\n processSavedEntities: processSavedEntities,\r\n resourceName: saveOptions.resourceName || this.saveOptions.resourceName || \"SaveChanges\"\r\n };\r\n\r\n // TODO: need to check that if we are doing a partial save that all entities whose temp keys\r\n // are referenced are also in the partial save group\r\n\r\n let saveBundle = { entities: entitiesToSave, saveOptions: saveOptions };\r\n\r\n\r\n try { // Guard against exception thrown in dataservice adapter before it goes async\r\n updateConcurrencyProperties(entitiesToSave);\r\n return dataService.adapterInstance!.saveChanges(saveContext, saveBundle)\r\n .then(saveSuccess).then((r) => r, saveFail);\r\n } catch (err) {\r\n // undo the marking by updateConcurrencyProperties\r\n markIsBeingSaved(entitiesToSave, false);\r\n if (errorCallback) errorCallback(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n function saveSuccess(saveResult: SaveResult) {\r\n let em = saveContext.entityManager;\r\n markIsBeingSaved(entitiesToSave, false);\r\n let savedEntities = saveContext.processSavedEntities(saveResult);\r\n saveResult.entities = savedEntities;\r\n\r\n // update _hasChanges after save.\r\n em._setHasChanges();\r\n\r\n // can't do this anymore because other changes might have been made while saved entities in flight.\r\n // let hasChanges = (isFullSave && haveSameContents(entitiesToSave, savedEntities)) ? false : null;\r\n // em._setHasChanges(hasChanges);\r\n\r\n if (callback) callback(saveResult);\r\n return Promise.resolve(saveResult);\r\n }\r\n\r\n function processSavedEntities(saveResult: SaveResult) {\r\n let savedEntities = saveResult.entities;\r\n let deletedKeys = saveResult.deletedKeys || [];\r\n if (savedEntities.length === 0 && deletedKeys.length === 0) {\r\n return [];\r\n }\r\n let keyMappings = saveResult.keyMappings;\r\n let em = saveContext.entityManager;\r\n\r\n // must occur outside of isLoading block\r\n fixupKeys(em, keyMappings);\r\n\r\n core.using(em, \"isLoading\", true, () => {\r\n\r\n let mappingContext = new MappingContext({\r\n query: undefined, // tells visitAndMerge this is a save instead of a query\r\n entityManager: em,\r\n mergeOptions: { mergeStrategy: MergeStrategy.OverwriteChanges },\r\n dataService: dataService\r\n });\r\n\r\n // The visitAndMerge operation has been optimized so that we do not actually perform a merge if the\r\n // the save operation did not actually return the entity - i.e. during some updates and deletes.\r\n savedEntities = mappingContext.visitAndMerge(savedEntities, { nodeType: \"root\" });\r\n });\r\n\r\n // detach any entities found in the em that appear in the deletedKeys list. \r\n deletedKeys.forEach(key => {\r\n let entityType = em.metadataStore._getStructuralType(key.entityTypeName) as EntityType;\r\n let ekey = new EntityKey(entityType, key.keyValues);\r\n let entity = em.getEntityByKey(ekey);\r\n if (entity) {\r\n entity.entityAspect.setDetached();\r\n }\r\n });\r\n\r\n return savedEntities;\r\n }\r\n\r\n function saveFail(serverError: SaveErrorFromServer) {\r\n markIsBeingSaved(entitiesToSave, false);\r\n let clientError = processServerErrors(saveContext, serverError);\r\n if (errorCallback) errorCallback(clientError);\r\n return Promise.reject(clientError);\r\n }\r\n }\r\n\r\n /**\r\n Run the \"saveChanges\" pre-save client validation logic.\r\n \r\n This is NOT a general purpose validation method.\r\n It is intended for utilities that must know if saveChanges\r\n would reject the save due to client validation errors.\r\n \r\n It only validates entities if the EntityManager's\r\n {@link ValidationOptions}.validateOnSave is true.\r\n \r\n @param entitiesToSave {Array of Entity} The list of entities to save (to validate).\r\n @returns {Error} Validation error or null if no error\r\n */\r\n saveChangesValidateOnClient(entitiesToSave: Entity[]) {\r\n\r\n if (this.validationOptions.validateOnSave) {\r\n let failedEntities = entitiesToSave.filter(function (entity) {\r\n let aspect = entity.entityAspect;\r\n let isValid = aspect.entityState.isDeleted() || aspect.validateEntity();\r\n return !isValid;\r\n });\r\n if (failedEntities.length > 0) {\r\n let valError = new Error(\"Client side validation errors encountered - see the entityErrors collection on this object for more detail\");\r\n (valError as any).entityErrors = createEntityErrors(failedEntities);\r\n return valError; // TODO: type this.\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n The check {@link EntityManager.saveChangesValidateOnClient} makes, with async validators run too:\r\n each entity is validated with {@link EntityAspect.validateEntityAsync}. `saveChanges` uses this\r\n in its place when any of the entities it saves has an async validator.\r\n @param entitiesToSave - The entities to validate.\r\n @returns A promise of the error `saveChanges` would reject with, or null.\r\n */\r\n async saveChangesValidateOnClientAsync(entitiesToSave: Entity[]): Promise<Error | null> {\r\n if (!this.validationOptions.validateOnSave) return null;\r\n const valid = await Promise.all(entitiesToSave.map(entity =>\r\n entity.entityAspect.entityState.isDeleted() || entity.entityAspect.validateEntityAsync()));\r\n const failedEntities = entitiesToSave.filter((entity, ix) => !valid[ix]);\r\n if (failedEntities.length === 0) return null;\r\n const valError = new Error(\"Client side validation errors encountered - see the entityErrors collection on this object for more detail\");\r\n (valError as any).entityErrors = createEntityErrors(failedEntities);\r\n return valError;\r\n }\r\n\r\n /** @hidden @internal */\r\n _findEntityGroup(entityType: EntityType) {\r\n return this._entityGroupMap.get(entityType.name);\r\n }\r\n\r\n /**\r\n Returns the entity in this manager's cache with this key, or `null` if there is none. It does\r\n not query the server; see {@link EntityManager.fetchEntityByKey} for that. Given the constructor of a class registered with the\r\n {@link MetadataStore}, the result has that class's type.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities,\r\n // and that Employee is registered with its MetadataStore.\r\n const employee = em1.getEntityByKey(Employee, 1); // Employee | null\r\n ```\r\n A key of more than one property is clearest given by name - see {@link KeyValues}:\r\n ```ts\r\n const detail = em1.getEntityByKey(OrderDetail, { orderID: 10248, productID: 11 });\r\n ```\r\n */\r\n getEntityByKey<T extends Entity>(entityCtor: new () => T, keyValues: KeyValues<T> | KeyValue | any[]): T | null;\r\n\r\n /**\r\n Returns the entity in this manager's cache with this key, or `null` if there is none. It does\r\n not query the server; see {@link EntityManager.fetchEntityByKey} for that.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const employeeType = em1.metadataStore.getAsEntityType(\"Employee\");\r\n const employeeKey = new EntityKey(employeeType, 1);\r\n const employee = em1.getEntityByKey(employeeKey);\r\n // employee will either be an entity or null.\r\n ```\r\n */\r\n getEntityByKey(entityKey: EntityKey): Entity | null;\r\n\r\n /**\r\n Returns the entity in this manager's cache with this key, or `null` if there is none. It does\r\n not query the server; see {@link EntityManager.fetchEntityByKey} for that.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const employee = em1.getEntityByKey(\"Employee\", 1);\r\n // employee will either be an entity or null.\r\n ```\r\n */\r\n getEntityByKey(typeName: string, keyValues: any | any[]): Entity | null;\r\n\r\n /**\r\n Returns the entity in this manager's cache with this key, or `null` if there is none. It does\r\n not query the server; see {@link EntityManager.fetchEntityByKey} for that.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const employeeType = em1.metadataStore.getAsEntityType(\"Employee\");\r\n const employee = em1.getEntityByKey(employeeType, 1);\r\n // employee will either be an entity or null.\r\n ```\r\n */\r\n getEntityByKey(type: EntityType, keyValues: any | any[]): Entity | null;\r\n\r\n /** \r\n Attempts to locate an entity within this EntityManager by its [EntityKey].\r\n @param entityKey - The {@link EntityKey} of the Entity to be located.\r\n @param type - The {@link EntityType} for this key.\r\n @param typeName - The EntityType name for this key.\r\n @param keyValues - The values for this key - will usually just be a single value; an array is only needed for multipart keys. \r\n @returns An Entity or null;\r\n */\r\n getEntityByKey(...args: any[]) {\r\n let entityKey = createEntityKey(this, args).entityKey;\r\n let entityTypes = entityKey._subtypes || [entityKey.entityType];\r\n let e: Entity | undefined;\r\n // hack use of some to simulate mapFirst logic.\r\n entityTypes.some((et) => {\r\n let group = this._findEntityGroup(et);\r\n // group version of findEntityByKey doesn't care about entityType\r\n e = group && group.findEntityByKey(entityKey);\r\n return e != null;\r\n });\r\n return e || null;\r\n }\r\n\r\n fetchEntityByKey<T extends Entity>(entityCtor: new () => T, keyValues: KeyValues<T> | KeyValue | any[], checkLocalCacheFirst?: boolean): Promise<EntityByKeyResult<T>>;\r\n fetchEntityByKey(typeName: string, keyValues: any | any[], checkLocalCacheFirst?: boolean): Promise<IEntityByKeyResult>;\r\n fetchEntityByKey(entityType: EntityType, keyValues: any | any[], checkLocalCacheFirst?: boolean): Promise<IEntityByKeyResult>;\r\n fetchEntityByKey(entityKey: EntityKey, checkLocalCacheFirst?: boolean): Promise<IEntityByKeyResult>;\r\n /**\r\n Attempts to fetch an entity from the server by its {@link EntityKey} with\r\n an option to check the local cache first. Note the this EntityManager's queryOptions.mergeStrategy\r\n will be used to merge any server side entity returned by this method.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities,\r\n // and that Employee is registered with its MetadataStore.\r\n const result = await em1.fetchEntityByKey(Employee, 1);\r\n const employee = result.entity; // Employee | null\r\n const entityKey = result.entityKey;\r\n const fromCache = result.fromCache;\r\n // look in the cache first, and query the server only if it is not there\r\n const { entity } = await em1.fetchEntityByKey(Employee, 1, true);\r\n ```\r\n\r\n A type name, an EntityType or an {@link EntityKey} also works; the result's `entity` is then a plain Entity.\r\n ```ts\r\n const result = await em1.fetchEntityByKey(\"Employee\", 1);\r\n ```\r\n @param typeName - The EntityType name for this key.\r\n @param entityType - The EntityType for this key.\r\n @param keyValues - The values for this key - will usually just be a single value; an array is only needed for multipart keys.\r\n @param entityKey - The {@link EntityKey} of the Entity to be located.\r\n @param checkLocalCacheFirst - (default = false) - Whether to check this EntityManager first before going to the server. By default, the query will NOT do this.\r\n @returns {Promise}\r\n - Properties on the promise success result\r\n - entity {Object} The entity found, or null if there is none. (Before 3.0 this was undefined; see UPGRADE.md.)\r\n - entityKey {EntityKey} The entityKey of the entity to fetch.\r\n - fromCache {Boolean} Whether this entity was fetched from the server or was found in the local cache.\r\n */\r\n fetchEntityByKey(...args: any[]) {\r\n let dataService = DataService.resolve([this.dataService]);\r\n if ((!dataService.hasServerMetadata) || this.metadataStore.hasMetadataFor(dataService.serviceName)) {\r\n return fetchEntityByKeyCore(this, args);\r\n } else {\r\n return this.fetchMetadata(dataService).then(() => {\r\n return fetchEntityByKeyCore(this, args);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n [Deprecated] - Attempts to locate an entity within this EntityManager by its {@link EntityKey}.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const employeeType = em1.metadataStore.getAsEntityType(\"Employee\");\r\n const employeeKey = new EntityKey(employeeType, 1);\r\n const employee = em1.findEntityByKey(employeeKey);\r\n // employee will either be an entity or null.\r\n ```\r\n @deprecated Use getEntityByKey instead\r\n @param entityKey - The {@link EntityKey} of the Entity to be located.\r\n @returns An Entity or null;\r\n */\r\n findEntityByKey(entityKey: EntityKey) {\r\n return this.getEntityByKey(entityKey);\r\n }\r\n\r\n /**\r\n Generates a temporary key for the specified entity. This is used to insure that newly\r\n created entities have unique keys and to register that these keys are temporary and\r\n need to be automatically replaced with 'real' key values once these entities are saved.\r\n \r\n The {@link EntityManager.keyGeneratorCtor} property is used internally by this method to actually generate\r\n the keys - See the KeyGenerator interface interface description to see\r\n how a custom key generator can be plugged in.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const customer = em1.createEntity(Customer, { companyName: \"Acme\" }, EntityState.Detached);\r\n const customerId = em1.generateTempKeyValue(customer);\r\n // customer.customerID is now set to a newly generated unique id value.\r\n // This property will change again after a successful save of the customer.\r\n em1.addEntity(customer);\r\n await em1.saveChanges();\r\n // customer.customerID !== customerId, because the server will have generated\r\n // a new id and the client will have been updated with this new id.\r\n ```\r\n @param entity - The Entity to generate a key for.\r\n @returns The new key value\r\n */\r\n generateTempKeyValue(entity: Entity) {\r\n // TODO - check if this entity is attached to this EntityManager.\r\n assertParam(entity, \"entity\").isEntity().check();\r\n let entityType = entity.entityType;\r\n let nextKeyValue = this.keyGenerator.generateTempKeyValue(entityType);\r\n let keyProp = entityType.keyProperties[0];\r\n entity.setProperty(keyProp.name, nextKeyValue);\r\n entity.entityAspect.hasTempKey = true;\r\n return nextKeyValue;\r\n }\r\n\r\n hasChanges<T extends Entity>(entityCtor: new () => T): boolean;\r\n hasChanges(entityCtors: (new () => Entity)[]): boolean;\r\n hasChanges(): boolean;\r\n hasChanges(entityTypeNames: string | string[]): boolean;\r\n hasChanges(entityTypes: EntityType | EntityType[]): boolean;\r\n /**\r\n Returns whether there are any changed entities of the specified {@link EntityType}s. A 'changed' Entity has\r\n has an {@link EntityState} of either Added, Modified or Deleted.\r\n\r\n This method can be used to determine if an EntityManager has any changes\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n if (em1.hasChanges()) {\r\n // do something interesting\r\n }\r\n ```\r\n\r\n or if it has any changes on to a specific {@link EntityType}.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n if (em1.hasChanges(Customer)) {\r\n // do something interesting\r\n }\r\n ```\r\n\r\n or to a collection of {@link EntityType}s, named or given as EntityTypes\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n if (em1.hasChanges([\"Customer\", \"Order\"])) {\r\n // do something interesting\r\n }\r\n ```\r\n @param entityTypes - The {@link EntityType} or EntityTypes for which 'changed' entities will be found.\r\n @param entityTypeNames - The {@link EntityType} name or names for which 'changed' entities will be found.\r\n @returns Whether there are any changed entities that match the types specified..\r\n */\r\n hasChanges(entityTypes?: EntityTypeArg | EntityTypeArg[]) {\r\n if (!this._hasChanges) return false;\r\n if (entityTypes === undefined) return this._hasChanges;\r\n return this._hasChangesCore(entityTypes);\r\n }\r\n\r\n\r\n /** @hidden @internal */\r\n // backdoor to \"really\" check for changes.\r\n _hasChangesCore(entityTypes?: EntityTypeArg | EntityTypeArg[]) {\r\n let ets = checkEntityTypes(this, entityTypes);\r\n let entityGroups = getEntityGroups(this, ets);\r\n return entityGroups.some(function (eg) {\r\n return eg && eg.hasChanges();\r\n });\r\n }\r\n getChanges<T extends Entity>(entityCtor: new () => T): T[];\r\n /** Several types at once: `getChanges([Customer, Order])` is `(Customer | Order)[]`. */\r\n getChanges<C extends (new () => Entity)[]>(entityCtors: [...C]): InstanceType<C[number]>[];\r\n getChanges(): Entity[];\r\n getChanges(entityTypeNames: string | string[]): Entity[];\r\n getChanges(entityTypes: EntityType | EntityType[]): Entity[];\r\n /**\r\n Returns a array of all changed entities of the specified {@link EntityType}s. A 'changed' Entity has\r\n has an {@link EntityState} of either Added, Modified or Deleted.\r\n \r\n This method can be used to get all of the changed entities within an EntityManager\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const changedEntities = em1.getChanges();\r\n ```\r\n\r\n or you can specify that you only want the changes on a specific {@link EntityType}\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const changedCustomers = em1.getChanges(Customer); // Customer[], from the registered class\r\n ```\r\n\r\n or to a collection of {@link EntityType}s, named or given as EntityTypes\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const changedCustomersAndOrders = em1.getChanges([\"Customer\", \"Order\"]); // Entity[]\r\n ```\r\n @param entityTypes - The {@link EntityType} or EntityTypes for which 'changed' entities will be found.\r\n @param entityTypeNames - The {@link EntityType} name or names for which 'changed' entities will be found.\r\n @returns An array of Entities\r\n */\r\n getChanges(entityTypes?: EntityTypeArg | EntityTypeArg[]) {\r\n let ets = checkEntityTypes(this, entityTypes);\r\n return getChangesCore(this, ets);\r\n }\r\n\r\n /**\r\n Rejects (reverses the effects) all of the additions, modifications and deletes from this EntityManager.\r\n Calls {@link EntityAspect.rejectChanges} on every changed entity in this EntityManager.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const entities = em1.rejectChanges();\r\n ```\r\n @returns The entities whose changes were rejected. These entities will all have EntityStates of\r\n either 'Unchanged' or 'Detached'\r\n */\r\n rejectChanges() {\r\n if (!this._hasChanges) return [];\r\n let changes = getChangesCore(this);\r\n // next line stops individual reject changes from each calling _hasChangesCore\r\n let aspects = changes.map(function (e) {\r\n return e.entityAspect._checkOperation(\"rejectChanges\");\r\n });\r\n this._hasChanges = false;\r\n aspects.forEach(function (aspect) {\r\n aspect.rejectChanges();\r\n });\r\n this.hasChangesChanged.publish({ entityManager: this, hasChanges: false });\r\n return changes;\r\n }\r\n\r\n getEntities<T extends Entity>(entityCtor: new () => T, entityStates?: EntityState | EntityState[]): T[];\r\n /** Several types at once: `getEntities([Customer, Order])` is `(Customer | Order)[]`. */\r\n getEntities<C extends (new () => Entity)[]>(entityCtors: [...C], entityStates?: EntityState | EntityState[]): InstanceType<C[number]>[];\r\n getEntities(entityTypeNames?: string | string[], entityStates?: EntityState | EntityState[]): Entity[];\r\n getEntities(entityTypes?: EntityType | EntityType[], entityStates?: EntityState | EntityState[]): Entity[];\r\n /**\r\n Returns a array of all entities of the specified {@link EntityType}s with the specified {@link EntityState}s.\r\n\r\n This method can be used to get all of the entities within an EntityManager\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const entities = em1.getEntities();\r\n ```\r\n\r\n or you can specify that you only want the entities of a specific {@link EntityType}\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const customers = em1.getEntities(Customer); // Customer[]\r\n ```\r\n\r\n or of a collection of {@link EntityType}s, named or given as EntityTypes\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const customersAndOrders = em1.getEntities([\"Customer\", \"Order\"]); // Entity[]\r\n ```\r\n\r\n You can also ask for entities with a particular {@link EntityState} or EntityStates.\r\n ```ts\r\n // assume em1 is an EntityManager containing a number of preexisting entities.\r\n const addedCustomers = em1.getEntities(Customer, EntityState.Added); // Customer[]\r\n const addedOrModifiedOrders = em1.getEntities(Order, [EntityState.Added, EntityState.Modified]);\r\n ```\r\n \r\n @param entityTypeName - The {@link EntityType} name or names for which entities will be found.\r\n If this parameter is omitted, all EntityTypes are searched. \r\n @param entityTypes - The {@link EntityType} or EntityTypes for which entities will be found.\r\n If this parameter is omitted, all EntityTypes are searched. \r\n @param entityStates - The {@link EntityState}s for which entities will be found.\r\n If this parameter is omitted, entities of all EntityStates are returned.\r\n @returns An array of Entities\r\n */\r\n getEntities(entityTypes?: EntityTypeArg | EntityTypeArg[], entityStates?: EntityState | EntityState[]) {\r\n let entTypes = checkEntityTypes(this, entityTypes);\r\n assertParam(entityStates, \"entityStates\").isOptional().isEnumOf(EntityState).or().isNonEmptyArray().isEnumOf(EntityState).check();\r\n\r\n let states = validateEntityStates(this, entityStates);\r\n return getEntitiesCore(this, entTypes, states);\r\n }\r\n\r\n\r\n // protected methods\r\n /** @hidden @internal */\r\n _notifyStateChange(entity: Entity, needsSave: boolean) {\r\n let ecArgs = { entityAction: EntityAction.EntityStateChange, entity: entity };\r\n\r\n if (needsSave) {\r\n if (!this._hasChanges) this._setHasChanges(true);\r\n } else {\r\n // Called when rejecting a change or merging an unchanged record: the manager may have just\r\n // become clean, and finding out means _hasChangesCore scanning the whole cache. During a\r\n // query or import that would run once per entity, so it is deferred to the end of the load\r\n // and done once.\r\n //\r\n // Only that is deferred. The event below belongs to THIS entity and is published now:\r\n // deferring it dropped it, because the deferred closure is built once (note the `||`) and\r\n // so captured the first entity's arguments and published for that one alone. Every entity\r\n // after the first reported nothing - and only when the manager happened to already have\r\n // changes, since otherwise this branch is skipped entirely.\r\n if (this._hasChanges) {\r\n if (this.isLoading) {\r\n this._hasChangesAction = this._hasChangesAction || (() => this._setHasChanges(null));\r\n } else {\r\n this._setHasChanges();\r\n }\r\n }\r\n }\r\n this.entityChanged.publish(ecArgs);\r\n }\r\n\r\n /**\r\n * `null` means recompute it from the cache, which is the expensive case.\r\n * @hidden @internal\r\n */\r\n _setHasChanges(hasChanges?: boolean | null) {\r\n if (hasChanges == null) hasChanges = this._hasChangesCore();\r\n let hadChanges = this._hasChanges;\r\n this._hasChanges = hasChanges;\r\n if (hasChanges !== hadChanges) {\r\n this.hasChangesChanged.publish({ entityManager: this, hasChanges: hasChanges });\r\n }\r\n this._hasChangesAction = undefined;\r\n }\r\n\r\n /** @hidden @internal */\r\n _linkRelatedEntities(entity: Entity) {\r\n let em = this;\r\n let entityAspect = entity.entityAspect;\r\n // we do not want entityState to change as a result of linkage.\r\n core.using(em, \"isLoading\", true, function () {\r\n\r\n let unattachedMap = em._unattachedChildrenMap;\r\n let entityKey = entityAspect.getKey();\r\n let entityType = entityKey.entityType;\r\n\r\n while (entityType) {\r\n let keystring = entityKey.toString(entityType);\r\n\r\n // attach any unattachedChildren\r\n let tuples = unattachedMap.getTuplesByString(keystring);\r\n if (tuples) {\r\n tuples.slice(0).forEach(function (tpl) {\r\n\r\n let unattachedChildren = tpl.children.filter(function (e) {\r\n return e.entityAspect.entityState !== EntityState.Detached;\r\n });\r\n\r\n let childToParentNp: NavigationProperty;\r\n let parentToChildNp: NavigationProperty;\r\n\r\n // np is usually childToParentNp\r\n // except with unidirectional 1-n where it is parentToChildNp;\r\n let np = tpl.navigationProperty;\r\n\r\n let inverseNp = np.inverse;\r\n if (inverseNp) {\r\n // bidirectional\r\n childToParentNp = np;\r\n parentToChildNp = inverseNp;\r\n\r\n if (parentToChildNp.isScalar) {\r\n let onlyChild = unattachedChildren[0];\r\n entity.setProperty(parentToChildNp.name, onlyChild);\r\n onlyChild.setProperty(childToParentNp.name, entity);\r\n } else {\r\n let currentChildren = entity.getProperty(parentToChildNp.name);\r\n unattachedChildren.forEach(function (child) {\r\n currentChildren.push(child);\r\n child.setProperty(childToParentNp.name, entity);\r\n });\r\n }\r\n unattachedMap.removeChildren(keystring, childToParentNp);\r\n } else {\r\n // unidirectional\r\n // if (np.isScalar || np.parentType !== entity.entityType) {\r\n if (np.isScalar) {\r\n // n -> 1 eg: child: OrderDetail parent: Product\r\n // 1 -> 1 eg child: Employee parent: Employee ( only Manager, no DirectReports property)\r\n childToParentNp = np;\r\n unattachedChildren.forEach(function (child) {\r\n child.setProperty(childToParentNp.name, entity);\r\n });\r\n unattachedMap.removeChildren(keystring, childToParentNp);\r\n } else {\r\n // 1 -> n eg: parent: Region child: Terr\r\n parentToChildNp = np;\r\n let currentChildren = entity.getProperty(parentToChildNp.name);\r\n unattachedChildren.forEach(function (child) {\r\n // we know if can't already be there.\r\n observableArray.pushUnchecked(currentChildren, child);\r\n });\r\n // Deliberately NOT removeChildren, unlike the three branches above. The tuple\r\n // stays in the map for the life of the manager, which does hold its children\r\n // against collection - but it is what re-links them if this parent is detached\r\n // and a new one with the same key attached, because a unidirectional child has\r\n // no navigation property of its own to rebuild the collection from. Removing it\r\n // leaves the re-attached parent with an empty collection. Measured: it produces\r\n // no duplicates, since a given parent key is linked once.\r\n }\r\n }\r\n });\r\n }\r\n entityType = entityType.baseEntityType; // look for relationships up the hierarchy\r\n }\r\n\r\n\r\n // now add to unattachedMap if needed.\r\n entity.entityType.navigationProperties.forEach(function (np) {\r\n if (np.isScalar) {\r\n let value = entity.getProperty(np.name);\r\n // property is already linked up\r\n if (value) return;\r\n }\r\n\r\n // first determine if np contains a parent or child\r\n // having a parentKey means that this is a child\r\n // if a parent then no need for more work because children will attach to it.\r\n let parentKey = entityAspect.getParentKey(np);\r\n if (parentKey) {\r\n // check for empty keys - meaning that parent id's are not yet set.\r\n if (parentKey._isEmpty()) return;\r\n // if a child - look for parent in the em cache\r\n if (np.invForeignKeyNames.length) {\r\n // np relates to non-PK property of parent entity\r\n const query = new EntityQuery(parentKey.entityType.defaultResourceName).where(np.invForeignKeyNames[0], 'eq', parentKey.values[0]);\r\n const qresult = em.executeQueryLocally(query);\r\n if (qresult.length === 1) {\r\n let parent = qresult[0];\r\n entity.setProperty(np.name, parent);\r\n }\r\n } else {\r\n // np relates to PK of parent entity\r\n let parent = em.getEntityByKey(parentKey);\r\n if (parent) {\r\n // if found hook it up\r\n entity.setProperty(np.name, parent);\r\n } else {\r\n // else add parent to unresolvedParentMap;\r\n unattachedMap.addChild(parentKey, np, entity);\r\n }\r\n }\r\n } else if (np.inverse && np.inverse.invForeignKeyNames.length) {\r\n // np relates to non-PK property of parent entity; query entities by FK\r\n const akValue = entity.getProperty(np.inverse.invForeignKeyNames[0]);\r\n const query = new EntityQuery(np.entityType.defaultResourceName).where(np.invForeignKeyNames[0], 'eq', akValue);\r\n const qresult = em.executeQueryLocally(query);\r\n qresult.forEach((child: Entity) => {\r\n child.setProperty(np.inverse!.name, entity);\r\n });\r\n }\r\n });\r\n\r\n // handle unidirectional 1-x where we set x.fk\r\n entity.entityType.foreignKeyProperties.forEach(function (fkProp) {\r\n let invNp = fkProp.inverseNavigationProperty;\r\n if (!invNp) return;\r\n // unidirectional fk props only\r\n let fkValue = entity.getProperty(fkProp.name);\r\n let parentKey = new EntityKey(invNp.parentType, [fkValue]);\r\n let parent = em.getEntityByKey(parentKey);\r\n\r\n if (parent) {\r\n if (invNp.isScalar) {\r\n parent.setProperty(invNp.name, entity);\r\n } else {\r\n if (em.isLoading) {\r\n observableArray.pushUnchecked(parent.getProperty(invNp.name), entity);\r\n } else {\r\n parent.getProperty(invNp.name).push(entity);\r\n }\r\n }\r\n } else {\r\n // else add parent to unresolvedParentMap;\r\n unattachedMap.addChild(parentKey, invNp, entity);\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n /** @hidden @internal */\r\n _attachEntityCore(entity: Entity, entityState: EntityState, mergeStrategy: MergeStrategy) {\r\n let group = findOrCreateEntityGroup(this, entity.entityType);\r\n let attachedEntity = group.attachEntity(entity, entityState, mergeStrategy);\r\n this._linkRelatedEntities(attachedEntity);\r\n return attachedEntity;\r\n }\r\n\r\n /** @hidden @internal */\r\n _updateFkVal(fkProp: DataProperty, oldValue: any, newValue: any) {\r\n let group = this._entityGroupMap.get(fkProp.parentType.name);\r\n if (!group) return;\r\n group._updateFkVal(fkProp, oldValue, newValue);\r\n }\r\n}\r\n\r\nEntityManager.prototype._$typeName = \"EntityManager\";\r\n\r\nBreezeEvent.bubbleEvent(EntityManager.prototype);\r\n\r\n// The adapters an EntityManager falls back to when none is registered (see default-adapters.ts).\r\n// Installed by this module, which every bundle that talks to a server contains, rather than by\r\n// an import for effect, which a bundler may drop. See \"sideEffects\" in CHANGES-DEV.md.\r\nsetDefaultAdapters(serverDefaultAdapters);\r\n\r\n/** Whether any of these entities has an async validator, on its type, a property, or a complex type\r\nit holds. Looked up once per type: validators can be added at any time, so it is not cached. */\r\nfunction hasAsyncValidators(entities: Entity[]) {\r\n const seen = new Set<StructuralType>();\r\n const typeHasAsync = (stype: StructuralType): boolean => {\r\n if (seen.has(stype)) return false;\r\n seen.add(stype);\r\n if (stype.getAllValidators().some(v => v.isAsync)) return true;\r\n return stype.getProperties().some((p: any) =>\r\n p.getAllValidators().some((v: Validator) => v.isAsync) ||\r\n (p.isComplexProperty && typeHasAsync(p.dataType as StructuralType)));\r\n };\r\n return entities.some(e => !e.entityAspect.entityState.isDeleted() && typeHasAsync(e.entityType));\r\n}\r\n\r\nfunction clearServerErrors(entities: Entity[]) {\r\n entities.forEach(function (entity) {\r\n let serverKeys: string[] = [];\r\n let aspect = entity.entityAspect;\r\n core.objectForEach(aspect._validationErrors, function (key, ve) {\r\n if (ve.isServerError) serverKeys.push(key);\r\n });\r\n if (serverKeys.length === 0) return;\r\n aspect._processValidationOpAndPublish(function () {\r\n serverKeys.forEach(function (key) {\r\n aspect._removeValidationError(key);\r\n });\r\n });\r\n });\r\n}\r\n\r\nfunction createEntityErrors(entities: Entity[]) {\r\n let entityErrors: EntityError[] = [];\r\n entities.forEach((entity) => {\r\n core.objectForEach(entity.entityAspect._validationErrors, function (key, ve) {\r\n let cfg = core.extend({\r\n entity: entity,\r\n // An error added with addValidationError has no validator. Reading one threw a TypeError,\r\n // which replaced the whole validation error - and its entityErrors - with \"Cannot read\r\n // properties of undefined\". Such an error is named by its key.\r\n errorName: ve.validator ? ve.validator.name : ve.key\r\n }, ve, [\"errorMessage\", \"propertyName\", \"isServerError\", \"custom\"]) as EntityError;\r\n entityErrors.push(cfg);\r\n });\r\n });\r\n return entityErrors;\r\n}\r\n\r\n\r\nfunction processServerErrors(saveContext: SaveContext, saveError: SaveErrorFromServer) {\r\n // converting ISaveErrorFromServer -> ISaveError\r\n let serverErrors = saveError.entityErrors;\r\n if (!serverErrors) return <SaveError> <any> saveError;\r\n let entityManager = saveContext.entityManager;\r\n let metadataStore = entityManager.metadataStore;\r\n let entityErrors = serverErrors.map((serr) => {\r\n let entity: Entity | null = null;\r\n let entityType: EntityType | undefined;\r\n if (serr.keyValues) {\r\n entityType = metadataStore._getStructuralType(serr.entityTypeName) as EntityType;\r\n let ekey = new EntityKey(entityType, serr.keyValues);\r\n entity = entityManager.getEntityByKey(ekey);\r\n }\r\n\r\n if (entityType && entity) {\r\n let context = serr.propertyName ?\r\n {\r\n propertyName: serr.propertyName,\r\n property: entityType.getProperty(serr.propertyName) || undefined\r\n } : {\r\n };\r\n let key = ValidationError.getKey(serr.errorName || serr.errorMessage, serr.propertyName);\r\n\r\n let ve = new ValidationError(null, context, serr.errorMessage, key);\r\n ve.isServerError = true;\r\n entity.entityAspect.addValidationError(ve);\r\n }\r\n\r\n let entityError = core.extend({\r\n entity: entity,\r\n isServerError: true\r\n }, serr, [\"errorName\", \"errorMessage\", \"propertyName\", \"custom\"]) as EntityError;\r\n return entityError;\r\n });\r\n // converting ISaveErrorFromServer -> ISaveError \r\n saveError.entityErrors = entityErrors as any;\r\n return <SaveError> <any> saveError;\r\n}\r\n\r\n/** What an {@link EntityManager.fetchEntityByKey} call resolves with. */\r\nexport interface IEntityByKeyResult {\r\n /** The entity, or `null` if there is none.\r\n\r\n `null` rather than `undefined`, because that is what absence means everywhere else in Breeze:\r\n a scalar navigation property with nothing cached is `null`, a nullable data property is `null`,\r\n and {@link EntityManager.getEntityByKey} returns `null`. Before 3.0 this one property was the\r\n exception. See UPGRADE.md. */\r\n entity: Entity | null;\r\n /** The key that was looked up. */\r\n entityKey: EntityKey;\r\n /** True if the answer came from the local cache, which is only checked when `checkLocalCacheFirst`\r\n is true; false if the server was queried. It can be true with a null `entity`: the cached entity is\r\n Deleted, and the manager's `queryOptions` exclude deleted entities and do not use\r\n {@link MergeStrategy.OverwriteChanges}. */\r\n fromCache: boolean;\r\n}\r\n\r\n/** {@link IEntityByKeyResult} for a known entity type - what the constructor overload of\r\n{@link EntityManager.fetchEntityByKey} returns. */\r\nexport interface EntityByKeyResult<T extends Entity> extends IEntityByKeyResult {\r\n entity: T | null;\r\n}\r\n\r\nfunction fetchEntityByKeyCore(em: EntityManager, args: any[]): Promise<IEntityByKeyResult> {\r\n let tpl = createEntityKey(em, args);\r\n let entityKey = tpl.entityKey;\r\n\r\n let checkLocalCacheFirst = tpl.remainingArgs.length === 0 ? false : !!tpl.remainingArgs[0];\r\n let entity: Entity | null = null;\r\n let foundIt = false;\r\n if (checkLocalCacheFirst) {\r\n entity = em.getEntityByKey(entityKey);\r\n foundIt = entity != null;\r\n if (entity != null &&\r\n // null the entity if it is deleted and we should exclude deleted entities\r\n !em.queryOptions.includeDeleted && entity.entityAspect.entityState.isDeleted()) {\r\n entity = null;\r\n // but resume looking if we'd overwrite deleted entity with a remote entity\r\n // note: em.queryOptions is always fully resolved by now\r\n foundIt = em.queryOptions.mergeStrategy !== MergeStrategy.OverwriteChanges;\r\n }\r\n }\r\n if (foundIt) {\r\n return Promise.resolve({ entity: entity, entityKey: entityKey, fromCache: true });\r\n } else {\r\n return EntityQuery.fromEntityKey(entityKey).using(em).execute().then(function (data: any) {\r\n entity = (data.results.length === 0) ? null : data.results[0];\r\n return Promise.resolve({ entity: entity, entityKey: entityKey, fromCache: false });\r\n });\r\n }\r\n}\r\n\r\n\r\n// private fns\r\n\r\n// takes in entityTypes as either strings or entityTypes or arrays of either\r\n// and returns either an entityType or an array of entityTypes or throws an error\r\nfunction checkEntityTypes(em: EntityManager, entityTypes?: EntityTypeArg | EntityTypeArg[]) {\r\n // A registered constructor stands for its type name, which is resolved against this manager's\r\n // own store - see the note in createEntity. Normalized before the assertions, so the rest of\r\n // this, and every caller, is the 2.x path unchanged.\r\n if (typeof entityTypes === \"function\") {\r\n entityTypes = entityTypeForCtor(entityTypes).name;\r\n } else if (Array.isArray(entityTypes) && entityTypes.some(t => typeof t === \"function\")) {\r\n entityTypes = (entityTypes as EntityTypeArg[]).map(t => typeof t === \"function\" ? entityTypeForCtor(t).name : t) as string[];\r\n }\r\n assertParam(entityTypes as any, \"entityTypes\").isString().isOptional().or().isNonEmptyArray().isString()\r\n .or().isInstanceOf(EntityType).or().isNonEmptyArray().isInstanceOf(EntityType).check();\r\n let resultTypes: EntityType | EntityType[] | undefined;\r\n if (typeof entityTypes === \"string\") {\r\n resultTypes = em.metadataStore._getStructuralType(entityTypes, false) as (EntityType | EntityType[]);\r\n } else if (Array.isArray(entityTypes) && typeof entityTypes[0] === \"string\") {\r\n resultTypes = (entityTypes as string[]).map(function (etName) {\r\n return em.metadataStore._getStructuralType(etName, false) as EntityType;\r\n });\r\n } else {\r\n resultTypes = entityTypes as (EntityType | EntityType[] | undefined);\r\n }\r\n\r\n return resultTypes;\r\n}\r\n\r\nfunction getChangesCore(em: EntityManager, entityTypes?: EntityType | EntityType[]) {\r\n let entityGroups = getEntityGroups(em, entityTypes);\r\n\r\n // TODO: think about writing a core.mapMany method if we see more of these.\r\n let selected: Entity[] = [];\r\n entityGroups.forEach(function (eg) {\r\n // eg may be undefined or null\r\n if (!eg) return;\r\n let entities = eg.getChanges();\r\n if (selected && selected.length) {\r\n selected = selected.concat(entities);\r\n } else {\r\n selected = entities;\r\n }\r\n });\r\n return selected;\r\n}\r\n\r\nfunction getEntitiesCore(em: EntityManager, entityTypes: EntityType | EntityType[] | undefined, entityStates: EntityState[]) {\r\n let entityGroups = getEntityGroups(em, entityTypes);\r\n\r\n // TODO: think about writing a core.mapMany method if we see more of these.\r\n let selected: Entity[] = [];\r\n entityGroups.forEach(function (eg) {\r\n // eg may be undefined or null\r\n if (!eg) return;\r\n let entities = eg.getEntities(entityStates);\r\n if (selected && selected.length) {\r\n selected = selected.concat(entities);\r\n } else {\r\n selected = entities;\r\n }\r\n });\r\n return selected;\r\n}\r\n\r\n\r\nfunction createEntityKey(em: EntityManager, args: any[]) {\r\n if (args[0] instanceof EntityKey) {\r\n return { entityKey: args[0] as EntityKey, remainingArgs: arraySlice(args, 1) };\r\n }\r\n if (args.length >= 2) {\r\n let entityType: any;\r\n try {\r\n entityType = (typeof args[0] === 'string') ? em.metadataStore._getStructuralType(args[0], false)\r\n : (typeof args[0] === 'function') ? em.metadataStore._getStructuralType(entityTypeForCtor(args[0]).name, false) : args[0];\r\n } catch (e) { /* not a type: the error below says what is expected */ }\r\n if (entityType instanceof EntityType) {\r\n // Outside the try: an error about the key values - a name that is not part of the key, a key\r\n // property with no value - says more than the one below.\r\n return { entityKey: new EntityKey(entityType, args[1]), remainingArgs: arraySlice(args, 2) };\r\n }\r\n }\r\n throw new Error(\"Must supply an EntityKey OR an EntityType name or EntityType followed by a key value or an array of key values.\");\r\n}\r\n\r\n/** A single key value: what a one-property key's value can be. */\r\ntype KeyValue = string | number | boolean | Date;\r\n\r\nfunction markIsBeingSaved(entities: Entity[], flag: boolean) {\r\n entities.forEach(function (entity) {\r\n entity.entityAspect.isBeingSaved = flag;\r\n });\r\n}\r\n\r\nfunction exportEntityGroups(em: EntityManager, entitiesOrEntityTypes?: Entity[] | EntityType[] | string[]) {\r\n let entityGroupMap: Map<string, EntityGroup>;\r\n let first = entitiesOrEntityTypes && entitiesOrEntityTypes[0];\r\n // check if array\r\n if (first) {\r\n // group entities by entityType and\r\n // create 'groups' that look like entityGroups.\r\n entityGroupMap = new Map();\r\n if ((first as any).entityType) {\r\n let entities = entitiesOrEntityTypes as Entity[];\r\n // assume \"entities\" is an array of entities;\r\n entities.forEach(function (e) {\r\n if (e.entityAspect.entityState === EntityState.Detached) {\r\n throw new Error(\"Unable to export an entity with an EntityState of 'Detached'\");\r\n }\r\n let group = entityGroupMap.get(e.entityType.name);\r\n if (!group) {\r\n group = {} as EntityGroup;\r\n group.entityType = e.entityType;\r\n group._entities = [];\r\n entityGroupMap.set(e.entityType.name, group);\r\n }\r\n group._entities.push(e);\r\n });\r\n } else {\r\n // assume \"entities\" is an array of EntityTypes (or names)\r\n let entityTypes = checkEntityTypes(em, entitiesOrEntityTypes as EntityType[] | string[]) as EntityType[];\r\n if (entityTypes != null) {\r\n entityTypes.forEach((et) => {\r\n let group = em._entityGroupMap.get(et.name);\r\n if (group && group._entities.length) {\r\n entityGroupMap.set(et.name, group);\r\n }\r\n });\r\n }\r\n }\r\n } else if (entitiesOrEntityTypes && entitiesOrEntityTypes.length === 0) {\r\n // empty array = export nothing\r\n entityGroupMap = new Map();\r\n } else {\r\n entityGroupMap = em._entityGroupMap;\r\n }\r\n\r\n let tempKeys: ITempKey[] = [];\r\n // the exported shape is a plain object: this is the serialized wire format,\r\n // and JSON.stringify(new Map()) would produce '{}'.\r\n let newGroupMap: Record<string, any> = {};\r\n entityGroupMap.forEach((entityGroup, entityTypeName) => {\r\n newGroupMap[entityTypeName] = exportEntityGroup(entityGroup, tempKeys);\r\n });\r\n\r\n return { entityGroupMap: newGroupMap, tempKeys: tempKeys };\r\n}\r\n\r\nfunction exportEntityGroup(entityGroup: EntityGroup, tempKeys: ITempKey[]) {\r\n let resultGroup = {} as { entities: any[] };\r\n let entityType = entityGroup.entityType;\r\n let dps = entityType.dataProperties;\r\n let serializerFn = getSerializerFn(entityType);\r\n let rawEntities: any[] = [];\r\n entityGroup._entities.forEach((entity) => {\r\n if (entity) {\r\n let rawEntity = structuralObjectToJson(entity, dps, serializerFn, tempKeys);\r\n rawEntities.push(rawEntity);\r\n }\r\n });\r\n resultGroup.entities = rawEntities;\r\n return resultGroup;\r\n}\r\n\r\nfunction structuralObjectToJson(so: StructuralObject, dps: DataProperty[], serializerFn?: (dp: DataProperty, value: any) => any, tempKeys?: ITempKey[]) {\r\n\r\n let result = {};\r\n dps.forEach(function (dp) {\r\n let dpName = dp.name;\r\n let value = so.getProperty(dpName);\r\n if (value == null && dp.defaultValue == null) return;\r\n\r\n if (value && dp.isComplexProperty) {\r\n let coDps = (dp.dataType as ComplexType).dataProperties;\r\n value = core.map(value, function (v: ComplexObject) {\r\n return structuralObjectToJson(v, coDps, serializerFn);\r\n });\r\n } else {\r\n value = serializerFn ? serializerFn(dp, value) : value;\r\n if (dp.isUnmapped) {\r\n value = core.toJSONSafe(value, core.toJSONSafeReplacer);\r\n }\r\n }\r\n if (value === undefined) return;\r\n (result as Record<string, any>)[dpName] = value;\r\n });\r\n\r\n // if (so.entityAspect) {\r\n if (EntityAspect.isEntity(so)) {\r\n let aspect = so.entityAspect;\r\n let entityState = aspect.entityState;\r\n let newAspect = {\r\n tempNavPropNames: exportTempKeyInfo(aspect, tempKeys || []),\r\n entityState: entityState.name\r\n } as any;\r\n if (aspect.extraMetadata) {\r\n newAspect.extraMetadata = aspect.extraMetadata;\r\n }\r\n if (entityState.isModified() || entityState.isDeleted()) {\r\n newAspect.originalValuesMap = aspect.originalValues;\r\n }\r\n (result as any).entityAspect = newAspect;\r\n } else {\r\n let aspect = so.complexAspect;\r\n let newAspect = {} as any;\r\n if (aspect.originalValues && !core.isEmpty(aspect.originalValues)) {\r\n newAspect.originalValuesMap = aspect.originalValues;\r\n }\r\n\r\n (result as any).complexAspect = newAspect;\r\n }\r\n\r\n return result;\r\n}\r\n\r\ninterface ITempKey {\r\n entityType: string;\r\n values: any[];\r\n}\r\n\r\nfunction exportTempKeyInfo(entityAspect: EntityAspect, tempKeys: ITempKey[]) {\r\n let entity = entityAspect.entity as Entity;\r\n if (entityAspect.hasTempKey) {\r\n tempKeys.push(entityAspect.getKey().toJSON());\r\n }\r\n // create map for this entity with foreignKeys that are 'temporary'\r\n // map -> key: tempKey, value: fkPropName\r\n let tempNavPropNames: string[] = [];\r\n entity.entityType.navigationProperties.forEach(function (np) {\r\n if (np.relatedDataProperties) {\r\n let relatedValue = entity.getProperty(np.name);\r\n if (relatedValue && relatedValue.entityAspect.hasTempKey) {\r\n tempNavPropNames.push(np.name);\r\n }\r\n }\r\n });\r\n return tempNavPropNames;\r\n}\r\n\r\nfunction importEntityGroup(entityGroup: EntityGroup, jsonGroup: { entities: any[] }, importConfig: ImportConfigExt) {\r\n\r\n let tempKeyMap = importConfig.tempKeyMap;\r\n let mergeAdds = !!importConfig.mergeAdds;\r\n\r\n let entityType = entityGroup.entityType;\r\n let mergeStrategy = importConfig.mergeStrategy;\r\n\r\n let targetEntity: Entity | undefined;\r\n\r\n let em = entityGroup.entityManager;\r\n let entityChanged = em.entityChanged;\r\n let entitiesToLink: Entity[] = [];\r\n let rawValueFn = DataProperty.getRawValueFromClient;\r\n jsonGroup.entities.forEach(function (rawEntity: any) {\r\n let newAspect = rawEntity.entityAspect;\r\n\r\n let entityKey = entityType.getEntityKeyFromRawEntity(rawEntity, rawValueFn);\r\n let entityState = EntityState.fromName(newAspect.entityState) as EntityState;\r\n if (!entityState || entityState === EntityState.Detached) {\r\n throw new Error(\"Only entities with a non detached entity state may be imported.\");\r\n }\r\n\r\n // Merge if raw entity is in cache UNLESS this is a new entity w/ a temp key\r\n // Cannot safely merge such entities even if could match temp key to an entity in cache.\r\n // Can enable merge of entities w/temp key using \"mergeAdds\" - use at your own risk!\r\n let newTempKey = !mergeAdds && entityState.isAdded() && getMappedKey(tempKeyMap!, entityKey);\r\n targetEntity = newTempKey ? undefined : entityGroup.findEntityByKey(entityKey);\r\n\r\n if (targetEntity) {\r\n if (mergeStrategy === MergeStrategy.SkipMerge) {\r\n // deliberate fall thru\r\n } else if (mergeStrategy === MergeStrategy.Disallowed) {\r\n throw new Error(\"A MergeStrategy of 'Disallowed' prevents \" + entityKey.toString() + \" from being merged\");\r\n } else {\r\n let targetEntityState = targetEntity.entityAspect.entityState;\r\n let wasUnchanged = targetEntityState.isUnchanged();\r\n if (mergeStrategy === MergeStrategy.OverwriteChanges || wasUnchanged) {\r\n entityType._updateTargetFromRaw(targetEntity, rawEntity, rawValueFn);\r\n targetEntity.entityAspect.setEntityState(entityState);\r\n entityChanged.publish({ entityAction: EntityAction.MergeOnImport, entity: targetEntity });\r\n }\r\n }\r\n } else {\r\n targetEntity = entityType._createInstanceCore() as Entity;\r\n entityType._updateTargetFromRaw(targetEntity, rawEntity, rawValueFn);\r\n if (newTempKey) {\r\n targetEntity.entityAspect.hasTempKey = true;\r\n // fixup pk\r\n targetEntity.setProperty(entityType.keyProperties[0].name, newTempKey.values[0]);\r\n\r\n // fixup foreign keys\r\n // This is safe because the entity is detached here and therefore originalValues will not be updated.\r\n if (newAspect.tempNavPropNames) {\r\n newAspect.tempNavPropNames.forEach(function (npName: string) {\r\n let np = entityType.getNavigationProperty(npName);\r\n let fkPropName = np!.relatedDataProperties[0].name;\r\n let oldFkValue = targetEntity!.getProperty(fkPropName);\r\n let fk = new EntityKey(np!.entityType, [oldFkValue]);\r\n let newFk = getMappedKey(tempKeyMap!, fk);\r\n targetEntity!.setProperty(fkPropName, newFk!.values[0]);\r\n });\r\n }\r\n }\r\n // Now performed in attachEntity\r\n targetEntity = entityGroup.attachEntity(targetEntity, entityState);\r\n entityChanged.publish({ entityAction: EntityAction.AttachOnImport, entity: targetEntity });\r\n if (!entityState.isUnchanged()) {\r\n em._notifyStateChange(targetEntity, true);\r\n }\r\n }\r\n\r\n entitiesToLink.push(targetEntity);\r\n });\r\n return entitiesToLink;\r\n}\r\n\r\nfunction getMappedKey(tempKeyMap: ITempKeyMap, entityKey: EntityKey) {\r\n let newKey = tempKeyMap[entityKey.toString()];\r\n if (newKey) return newKey;\r\n let subtypes = entityKey._subtypes;\r\n if (!subtypes) return null;\r\n for (let i = 0, j = subtypes.length; i < j; i++) {\r\n newKey = tempKeyMap[entityKey.toString(subtypes[i])];\r\n if (newKey) return newKey;\r\n }\r\n return null;\r\n}\r\n\r\nfunction promiseWithCallbacks<T>(promise: Promise<T>, callback?: Callback, errorCallback?: ErrorCallback) {\r\n promise = promise.then(function (data) {\r\n if (callback) callback(data);\r\n return Promise.resolve(data);\r\n }, function (error) {\r\n if (errorCallback) errorCallback(error);\r\n return Promise.reject(error);\r\n });\r\n return promise;\r\n}\r\n\r\nfunction getEntitiesToSave(em: EntityManager, entities?: Entity[]) {\r\n let entitiesToSave: Entity[];\r\n if (entities) {\r\n entitiesToSave = entities.filter(function (e) {\r\n if (e.entityAspect.entityManager !== em) {\r\n throw new Error(\"Only entities in this entityManager may be saved\");\r\n }\r\n return !e.entityAspect.entityState.isDetached();\r\n });\r\n } else {\r\n entitiesToSave = em.getChanges();\r\n }\r\n return entitiesToSave;\r\n}\r\n\r\nfunction fixupKeys(em: EntityManager, keyMappings: KeyMapping[]) {\r\n em._inKeyFixup = true;\r\n keyMappings.forEach(function (km) {\r\n let group = em._entityGroupMap.get(km.entityTypeName);\r\n if (!group) {\r\n throw new Error(\"Unable to locate the following fully qualified EntityType name: \" + km.entityTypeName);\r\n }\r\n group._fixupKey(km.tempValue, km.realValue);\r\n });\r\n em._inKeyFixup = false;\r\n}\r\n\r\nfunction getEntityGroups(em: EntityManager, entityTypes?: EntityType | EntityType[]) {\r\n let groupMap = em._entityGroupMap;\r\n if (entityTypes) {\r\n return core.toArray(entityTypes).map(function (et: EntityType) {\r\n if (et instanceof EntityType) {\r\n return groupMap.get(et.name) as EntityGroup;\r\n } else {\r\n throw new Error(\"The EntityManager.getChanges() 'entityTypes' parameter must be either an entityType or an array of entityTypes or null\");\r\n }\r\n });\r\n } else {\r\n return Array.from(groupMap.values());\r\n }\r\n}\r\n\r\nfunction checkEntityKey(em: EntityManager, entity: Entity) {\r\n let ek = entity.entityAspect.getKey();\r\n // return properties that are = to defaultValues\r\n let keyPropsWithDefaultValues = core.arrayZip(entity.entityType.keyProperties, ek.values, function (kp, kv) {\r\n return (kp.defaultValue === kv) ? kp : null;\r\n }).filter(function (kp) {\r\n return kp !== null;\r\n });\r\n if (keyPropsWithDefaultValues.length) {\r\n if (entity.entityType.autoGeneratedKeyType !== AutoGeneratedKeyType.None) {\r\n em.generateTempKeyValue(entity);\r\n } else {\r\n // we will allow attaches of entities where only part of the key is set.\r\n if (keyPropsWithDefaultValues.length === ek.values.length) {\r\n throw new Error(\"Cannot attach an object of type (\" + entity.entityType.name + \") to an EntityManager without first setting its key or setting its entityType 'AutoGeneratedKeyType' property to something other than 'None'\");\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction validateEntityStates(em: EntityManager, entityStates?: EntityState | EntityState[]) {\r\n if (!entityStates) return [] as EntityState[];\r\n let entStates = core.toArray(entityStates) as EntityState[];\r\n entStates.forEach((es) => {\r\n if (!(es instanceof EntityState)) {\r\n throw new Error(\"The EntityManager.getChanges() 'entityStates' parameter must either be null, an entityState or an array of entityStates\");\r\n }\r\n });\r\n return entStates;\r\n}\r\n\r\nfunction attachRelatedEntities(em: EntityManager, entity: Entity, entityState: EntityState, mergeStrategy: MergeStrategy) {\r\n let navProps = entity.entityType.navigationProperties;\r\n navProps.forEach(function (np) {\r\n // A collection that has never been read has nothing to cascade to. Reading it would create\r\n // the array for every collection of every entity attached.\r\n let related = np.isScalar ? entity.getProperty(np.name) : peekProperty(entity, np.name);\r\n if (np.isScalar) {\r\n if (!related) return;\r\n em.attachEntity(related, entityState, mergeStrategy);\r\n } else {\r\n if (!related) return;\r\n related.forEach(function (e: Entity) {\r\n em.attachEntity(e, entityState, mergeStrategy);\r\n });\r\n }\r\n });\r\n}\r\n\r\n// returns a promise\r\nfunction executeQueryCore(em: EntityManager, query: EntityQuery | string, queryOptions: QueryOptions, dataService: DataService): Promise<QueryResult> {\r\n try {\r\n let results: any[];\r\n let metadataStore = em.metadataStore;\r\n\r\n if (metadataStore.isEmpty() && dataService.hasServerMetadata) {\r\n throw new Error(\"cannot execute _executeQueryCore until metadataStore is populated.\");\r\n }\r\n\r\n if (queryOptions.fetchStrategy === FetchStrategy.FromLocalCache) {\r\n try {\r\n if (typeof query === 'string') {\r\n throw new Error(\"cannot execute 'string' EntityQuery locally.\");\r\n }\r\n let qr = executeQueryLocallyCore(em, query);\r\n return Promise.resolve({ results: qr.results, entityManager: em, inlineCount: qr.inlineCount, query: query });\r\n } catch (e) {\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n let mappingContext: MappingContext | undefined = new MappingContext({\r\n query: query,\r\n entityManager: em,\r\n dataService: dataService,\r\n mergeOptions: {\r\n mergeStrategy: queryOptions.mergeStrategy,\r\n noTracking: !!(query as any).noTrackingEnabled,\r\n includeDeleted: queryOptions.includeDeleted\r\n }\r\n });\r\n\r\n let validateOnQuery = em.validationOptions.validateOnQuery;\r\n\r\n return dataService.adapterInstance!.executeQuery(mappingContext).then(function (data: any) {\r\n let result = core.wrapExecution(function () {\r\n let state = { isLoading: em.isLoading };\r\n em.isLoading = true;\r\n em._pendingPubs = [];\r\n return state;\r\n }, function (state) {\r\n // cleanup\r\n em.isLoading = state.isLoading;\r\n em._pendingPubs!.forEach(function (fn) {\r\n fn();\r\n });\r\n em._pendingPubs = undefined;\r\n em._hasChangesAction && em._hasChangesAction();\r\n mappingContext = undefined;\r\n // A materialization error thrown below needs no help here: wrapExecution rethrows it,\r\n // which rejects this promise. This cleanup used to return Promise.reject(state.error)\r\n // as well; nothing received that second promise, so it was an unhandled rejection.\r\n }, function () {\r\n let nodes = dataService.jsonResultsAdapter.extractResults(data);\r\n nodes = core.toArray(nodes);\r\n\r\n results = mappingContext!.visitAndMerge(nodes, { nodeType: \"root\" });\r\n if (validateOnQuery) {\r\n results.forEach(function (r: any) {\r\n // anon types and simple types will not have an entityAspect.\r\n r.entityAspect && r.entityAspect.validateEntity();\r\n });\r\n }\r\n mappingContext!.processDeferred();\r\n // if query has expand clauses walk each of the 'results' and mark the expanded props as loaded.\r\n if (query instanceof EntityQuery) {\r\n markLoadedNavProps(results, query);\r\n }\r\n let retrievedEntities = core.objectMap(mappingContext!.refMap);\r\n return { results: results, query: query, entityManager: em, httpResponse: data.httpResponse, inlineCount: data.inlineCount, retrievedEntities: retrievedEntities };\r\n });\r\n return Promise.resolve(result);\r\n }, function (e: any) {\r\n if (e) {\r\n e.query = query;\r\n e.entityManager = em;\r\n }\r\n return Promise.reject(e);\r\n });\r\n\r\n } catch (e) {\r\n if (e) {\r\n e.query = query;\r\n }\r\n return Promise.reject(e);\r\n }\r\n}\r\n\r\nfunction markLoadedNavProps(entities: Entity[], query: EntityQuery) {\r\n if (query.noTrackingEnabled) return;\r\n let expandClause = query.expandClause;\r\n if (expandClause == null) return;\r\n expandClause.propertyPaths.forEach(function (propertyPath) {\r\n let propNames = propertyPath.split('.');\r\n markLoadedNavPath(entities, propNames);\r\n });\r\n}\r\n\r\nfunction markLoadedNavPath(entities: Entity[], propNames: string[]) {\r\n let propName = propNames[0];\r\n entities.forEach((entity) => {\r\n let ea = entity.entityAspect;\r\n if (!ea) return; // entity may not be a 'real' entity in the case of a projection.\r\n ea._markAsLoaded(propName);\r\n if (propNames.length === 1) return;\r\n let next = entity.getProperty(propName);\r\n if (!next) return; // no children to process.\r\n // strange logic because nonscalar nav values are NOT really arrays\r\n // otherwise we could use Array.isArray\r\n if (!next.arrayChanged) next = [next];\r\n markLoadedNavPath(next, propNames.slice(1));\r\n });\r\n}\r\n\r\nfunction updateConcurrencyProperties(entities: Entity[]) {\r\n let candidates = entities.filter((e) => {\r\n e.entityAspect.isBeingSaved = true;\r\n return e.entityAspect.entityState.isModified()\r\n && e.entityType.concurrencyProperties.length > 0;\r\n\r\n });\r\n if (candidates.length === 0) return;\r\n candidates.forEach(function (c) {\r\n c.entityType.concurrencyProperties.forEach(function (cp) {\r\n updateConcurrencyProperty(c, cp);\r\n });\r\n });\r\n}\r\n\r\nfunction updateConcurrencyProperty(entity: Entity, property: DataProperty) {\r\n // check if property has already been updated\r\n if (entity.entityAspect.originalValues[property.name]) return;\r\n let value = entity.getProperty(property.name);\r\n let dataType = property.dataType as DataType;\r\n if (!value) value = dataType.defaultValue;\r\n if (dataType.isNumeric) {\r\n entity.setProperty(property.name, value + 1);\r\n } else if (dataType.getConcurrencyValue) {\r\n // DataType has its own implementation\r\n let nextValue = dataType.getConcurrencyValue(value);\r\n entity.setProperty(property.name, nextValue);\r\n } else if (dataType === DataType.Binary) {\r\n // best guess - that this is a timestamp column and is computed on the server during save\r\n // - so no need to set it here.\r\n return;\r\n } else {\r\n // this just leaves DataTypes of Boolean, String and Byte - none of which should be the\r\n // type for a concurrency column.\r\n // NOTE: thought about just returning here but would rather be safe for now.\r\n throw new Error(\"Unable to update the value of concurrency property before saving: \" + property.name);\r\n }\r\n}\r\n\r\n\r\nfunction findOrCreateEntityGroup(em: EntityManager, entityType: EntityType) {\r\n let group = em._entityGroupMap.get(entityType.name);\r\n if (!group) {\r\n group = new EntityGroup(em, entityType);\r\n em._entityGroupMap.set(entityType.name, group);\r\n }\r\n return group;\r\n}\r\n\r\nfunction findOrCreateEntityGroups(em: EntityManager, entityType: EntityType) {\r\n let entityTypes = entityType.getSelfAndSubtypes();\r\n return entityTypes.map((et) => {\r\n return findOrCreateEntityGroup(em, et);\r\n });\r\n}\r\n\r\nfunction unwrapInstance(structObj: StructuralObject, transformFn?: (dp: DataProperty, val: any) => any) {\r\n\r\n let rawObject: any = {};\r\n let stype = EntityAspect.isEntity(structObj) ? structObj.entityType : structObj.complexType;\r\n let serializerFn = getSerializerFn(stype);\r\n let unmapped = {};\r\n stype.dataProperties.forEach(function (dp) {\r\n if (dp.isComplexProperty) {\r\n rawObject[dp.nameOnServer] = core.map(structObj.getProperty(dp.name), function (co) {\r\n return unwrapInstance(co, transformFn);\r\n });\r\n } else {\r\n let val = structObj.getProperty(dp.name);\r\n val = transformFn ? transformFn(dp, val) : val;\r\n if (val === undefined) return;\r\n val = serializerFn ? serializerFn(dp, val) : val;\r\n if (val !== undefined) {\r\n if (dp.isUnmapped) {\r\n (unmapped as Record<string, any>)[dp.nameOnServer] = core.toJSONSafe(val, core.toJSONSafeReplacer);\r\n } else {\r\n rawObject[dp.nameOnServer] = val;\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (!core.isEmpty(unmapped)) {\r\n // TODO: review this.\r\n (rawObject as any).__unmapped = unmapped;\r\n }\r\n return rawObject;\r\n}\r\n\r\nfunction unwrapOriginalValues(target: StructuralObject, metadataStore: MetadataStore, transformFn?: (dp: DataProperty, val: any) => any) {\r\n let stype = EntityAspect.isEntity(target) ? target.entityType : target.complexType;\r\n let aspect = EntityAspect.isEntity(target) ? target.entityAspect : target.complexAspect;\r\n let fn = metadataStore.namingConvention.clientPropertyNameToServer;\r\n let result = {} as Record<string, any>;\r\n core.objectForEach(aspect.originalValues, function (propName, val) {\r\n let prop = stype.getProperty(propName) as DataProperty;\r\n val = transformFn ? transformFn(prop, val) : val;\r\n if (val !== undefined) {\r\n result[fn(propName, prop)] = val;\r\n }\r\n });\r\n stype.complexProperties.forEach(function (cp) {\r\n let nextTarget = target.getProperty(cp.name);\r\n if (cp.isScalar) {\r\n let unwrappedCo = unwrapOriginalValues(nextTarget, metadataStore, transformFn);\r\n if (!core.isEmpty(unwrappedCo)) {\r\n result[fn(cp.name, cp)] = unwrappedCo;\r\n }\r\n } else {\r\n let unwrappedCos = nextTarget.map((item: any) => {\r\n return unwrapOriginalValues(item, metadataStore, transformFn);\r\n });\r\n result[fn(cp.name, cp)] = unwrappedCos;\r\n }\r\n });\r\n return result;\r\n}\r\n\r\nfunction unwrapChangedValues(entity: Entity, metadataStore: MetadataStore, transformFn: (dp: DataProperty, val: any) => any) {\r\n let stype = entity.entityType;\r\n let serializerFn = getSerializerFn(stype);\r\n let fn = metadataStore.namingConvention.clientPropertyNameToServer;\r\n let result = {} as Record<string, any>;\r\n core.objectForEach(entity.entityAspect.originalValues, function (propName, value) {\r\n let prop = stype.getProperty(propName) as DataProperty;\r\n let val = entity.getProperty(propName);\r\n val = transformFn ? transformFn(prop, val) : val;\r\n if (val === undefined) return;\r\n val = serializerFn ? serializerFn(prop, val) : val;\r\n if (val !== undefined) {\r\n result[fn(propName, prop)] = val;\r\n }\r\n });\r\n // any change to any complex object or array of complex objects returns the ENTIRE\r\n // current complex object or complex object array. This is by design. Complex Objects\r\n // are atomic.\r\n stype.complexProperties.forEach((cp) => {\r\n if (cpHasOriginalValues(entity, cp)) {\r\n let coOrCos = entity.getProperty(cp.name);\r\n result[fn(cp.name, cp)] = core.map(coOrCos, function (co) {\r\n return unwrapInstance(co, transformFn);\r\n });\r\n }\r\n });\r\n return result;\r\n}\r\n\r\nfunction cpHasOriginalValues(structuralObject: StructuralObject, cp: DataProperty): boolean {\r\n let coOrCos = structuralObject.getProperty(cp.name);\r\n if (cp.isScalar) {\r\n return coHasOriginalValues(coOrCos);\r\n } else {\r\n // this occurs when a nonscalar co array has had cos added or removed.\r\n if (observableArray.hasOriginalValues(coOrCos)) return true;\r\n return coOrCos.some(function (co: ComplexObject) {\r\n return coHasOriginalValues(co);\r\n });\r\n }\r\n}\r\n\r\nfunction executeQueryLocallyCore(em: EntityManager, query: EntityQuery) {\r\n assertParam(query, \"query\").isInstanceOf(EntityQuery).check();\r\n\r\n let metadataStore = em.metadataStore;\r\n let entityType = query._getFromEntityType(metadataStore, true);\r\n // there may be multiple groups is this is a base entity type.\r\n let groups = findOrCreateEntityGroups(em, entityType!);\r\n // filter then order then skip then take\r\n let filterFunc = query.wherePredicate && query.wherePredicate.toFunction({ entityType: entityType });\r\n\r\n let queryOptions = QueryOptions.resolve([query.queryOptions, em.queryOptions, QueryOptions.defaultInstance]);\r\n let includeDeleted = queryOptions.includeDeleted === true;\r\n\r\n let newFilterFunc = function (entity: Entity) {\r\n return entity && (includeDeleted || !entity.entityAspect.entityState.isDeleted()) && (filterFunc ? filterFunc(entity) : true);\r\n };\r\n\r\n let result: any[] = [];\r\n // TODO: mapMany\r\n groups.forEach((group) => {\r\n let entities = group._entities.filter(newFilterFunc) as Entity[];\r\n if (entities.length) {\r\n result = result.length ? result.concat(entities) : entities;\r\n }\r\n });\r\n\r\n let orderByComparer = query.orderByClause && query.orderByClause.getComparer(entityType!);\r\n if (orderByComparer) {\r\n result.sort(orderByComparer);\r\n }\r\n\r\n let inlineCount = query.inlineCountEnabled ? result.length : undefined;\r\n\r\n let skipCount = query.skipCount;\r\n if (skipCount) {\r\n result = result.slice(skipCount);\r\n }\r\n let takeCount = query.takeCount;\r\n if (takeCount) {\r\n result = result.slice(0, takeCount);\r\n }\r\n\r\n let selectClause = query.selectClause;\r\n if (selectClause) {\r\n // named as a remote query's results are named\r\n let selectFn = selectClause.toFunction({ entityType: entityType });\r\n result = result.map(selectFn);\r\n }\r\n return { results: result, inlineCount: inlineCount };\r\n}\r\n\r\nfunction coHasOriginalValues(co: ComplexObject) {\r\n // next line checks all non complex properties of the co.\r\n if (!core.isEmpty(co.complexAspect.originalValues)) return true;\r\n // now need to recursively check each of the cps\r\n return co.complexType.complexProperties.some(function (cp) {\r\n return cpHasOriginalValues(co, cp);\r\n });\r\n}\r\n\r\nfunction getSerializerFn(stype: EntityType | ComplexType) {\r\n return stype.serializerFn || (stype.metadataStore && stype.metadataStore.serializerFn);\r\n}\r\n\r\n"]}
@@ -1,42 +1,48 @@
1
- import { DataService } from './data-service';
2
- /** Configuration info to be passed to the [[SaveOptions]] constructor */
3
- export interface SaveOptionsConfig {
4
- /** Resource name to be used during the save - this defaults to "SaveChanges" */
5
- resourceName?: string;
6
- /** The DataService to be used for this save. */
7
- dataService?: DataService;
8
- /** Whether multiple saves can be in-flight at the same time. The default is false. */
9
- allowConcurrentSaves?: boolean;
10
- /** Free form value that will be sent to the server during the save. */
11
- tag?: any;
12
- }
13
- /**
14
- A SaveOptions instance is used to specify the 'options' under which a save will occur.
15
- **/
16
- export declare class SaveOptions {
17
- /** @hidden @internal */
18
- _$typeName: string;
19
- /** Resource name to be used during the save - this defaults to "SaveChanges". __Read Only__ */
20
- resourceName: string;
21
- /** The DataService to be used for this save. __Read Only__ */
22
- dataService: DataService;
23
- /** Whether multiple saves can be in-flight at the same time. The default is false. __Read Only__ */
24
- allowConcurrentSaves: boolean;
25
- /** Free form value that will be sent to the server during the save. __Read Only__ */
26
- tag: any;
27
- /** The default value whenever SaveOptions are not specified. */
28
- static defaultInstance: SaveOptions;
29
- constructor(config?: SaveOptionsConfig);
30
- /**
31
- Sets the 'defaultInstance' by creating a copy of the current 'defaultInstance' and then applying all of the properties of the current instance.
32
- The current instance is returned unchanged.
33
- **/
34
- setAsDefault(): any;
35
- /**
36
- Returns a copy of this SaveOptions with the specified config options applied.
37
- > var saveOptions = em1.saveOptions.using( {resourceName: "anotherResource" });
38
- **/
39
- using(config: SaveOptionsConfig): SaveOptions;
40
- /** @hidden @internal */
41
- private static _updateWithConfig;
42
- }
1
+ import { DataService } from '../metadata/data-service.js';
2
+ /** Configuration info to be passed to the {@link SaveOptions} constructor */
3
+ export interface SaveOptionsConfig {
4
+ /** Resource name to be used during the save - this defaults to "SaveChanges" */
5
+ resourceName?: string;
6
+ /** The DataService to be used for this save. */
7
+ dataService?: DataService;
8
+ /** Whether multiple saves can be in-flight at the same time. The default is false. */
9
+ allowConcurrentSaves?: boolean;
10
+ /** Free form value that will be sent to the server during the save. */
11
+ tag?: any;
12
+ }
13
+ /**
14
+ A SaveOptions instance is used to specify the 'options' under which a save will occur.
15
+ */
16
+ export declare class SaveOptions {
17
+ /** Resource name to be used during the save - this defaults to "SaveChanges". __Read Only__ */
18
+ resourceName: string;
19
+ /** The DataService to be used for this save. __Read Only__ */
20
+ dataService: DataService;
21
+ /** Whether multiple saves can be in-flight at the same time. The default is false. __Read Only__ */
22
+ allowConcurrentSaves: boolean;
23
+ /** Free form value that will be sent to the server during the save. __Read Only__ */
24
+ tag: any;
25
+ /** The default value whenever SaveOptions are not specified. */
26
+ static defaultInstance: SaveOptions;
27
+ /** Creates save options from a {@link SaveOptionsConfig}. Passed to {@link EntityManager.saveChanges},
28
+ they are used for that save in place of the manager's {@link EntityManager.saveOptions} - as a
29
+ whole, not merged with them setting by setting.
30
+ ```ts
31
+ const so = new SaveOptions({ allowConcurrentSaves: true });
32
+ em.saveChanges(null, so);
33
+ ```
34
+ */
35
+ constructor(config?: SaveOptionsConfig);
36
+ /**
37
+ Sets the 'defaultInstance' by creating a copy of the current 'defaultInstance' and then applying all of the properties of the current instance.
38
+ The current instance is returned unchanged.
39
+ */
40
+ setAsDefault(): any;
41
+ /**
42
+ Returns a copy of this SaveOptions with the specified config options applied.
43
+ ```ts
44
+ var saveOptions = em1.saveOptions.using( {resourceName: "anotherResource" });
45
+ ```
46
+ */
47
+ using(config: SaveOptionsConfig): SaveOptions;
48
+ }