breeze-client 2.2.0 → 2.2.1-cjs

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 (377) hide show
  1. package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
  2. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
  3. package/adapter-ajax-angularjs/package.json +13 -0
  4. package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
  5. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
  6. package/adapter-ajax-fetch/package.json +13 -0
  7. package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
  8. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
  9. package/adapter-ajax-httpclient/package.json +13 -0
  10. package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
  11. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
  12. package/adapter-ajax-jquery/package.json +13 -0
  13. package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
  14. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
  15. package/adapter-ajax-post/package.json +13 -0
  16. package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
  17. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
  18. package/adapter-data-service-odata/package.json +13 -0
  19. package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
  20. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
  21. package/adapter-data-service-webapi/package.json +13 -0
  22. package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
  23. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
  24. package/adapter-model-library-backing-store/package.json +13 -0
  25. package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
  26. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
  27. package/adapter-model-library-ko/package.json +13 -0
  28. package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
  29. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
  30. package/adapter-uri-builder-json/package.json +13 -0
  31. package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
  32. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
  33. package/adapter-uri-builder-odata/package.json +13 -0
  34. package/breeze-client.d.ts +8 -0
  35. package/breeze-client.metadata.json +1 -0
  36. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
  37. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
  38. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
  39. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
  40. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
  41. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
  42. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
  43. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
  44. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
  45. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
  46. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
  47. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
  48. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
  49. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
  50. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
  51. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
  52. package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
  53. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
  54. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
  55. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
  56. package/bundles/breeze-client-adapter-data-service-odata.umd.js +747 -0
  57. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
  58. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
  59. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
  60. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +333 -0
  61. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
  62. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
  63. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
  64. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
  65. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
  66. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
  67. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
  68. package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
  69. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
  70. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
  71. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
  72. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
  73. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
  74. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
  75. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
  76. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
  77. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
  78. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
  79. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
  80. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
  81. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
  82. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
  83. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
  84. package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
  85. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
  86. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
  87. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
  88. package/bundles/breeze-client.umd.js +14234 -0
  89. package/bundles/breeze-client.umd.js.map +1 -0
  90. package/bundles/breeze-client.umd.min.js +16 -0
  91. package/bundles/breeze-client.umd.min.js.map +1 -0
  92. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
  93. package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
  94. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  95. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
  96. package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
  97. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  98. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
  99. package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
  100. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  101. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
  102. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  103. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
  104. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  105. package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
  106. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +463 -0
  107. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  108. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +100 -0
  109. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  110. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
  111. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  112. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
  113. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  114. package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
  115. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
  116. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  117. package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
  118. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
  119. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  120. package/esm2015/breeze-client.js +9 -0
  121. package/esm2015/index.js +2 -0
  122. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  123. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  124. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  125. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
  126. package/esm2015/src/abstract-data-service-adapter.js +327 -0
  127. package/esm2015/src/array.js +4 -0
  128. package/esm2015/src/assert-param.js +312 -0
  129. package/esm2015/src/breeze.js +85 -0
  130. package/esm2015/src/complex-array.js +119 -0
  131. package/esm2015/src/config.js +223 -0
  132. package/esm2015/src/core.js +714 -0
  133. package/esm2015/src/csdl-metadata-parser.js +385 -0
  134. package/esm2015/src/data-service.js +203 -0
  135. package/esm2015/src/data-type.js +506 -0
  136. package/esm2015/src/default-property-interceptor.js +460 -0
  137. package/{esm2022/src/entity-action.mjs → esm2015/src/entity-action.js} +25 -25
  138. package/esm2015/src/entity-aspect.js +804 -0
  139. package/esm2015/src/entity-group.js +187 -0
  140. package/esm2015/src/entity-key.js +116 -0
  141. package/esm2015/src/entity-manager.js +2094 -0
  142. package/esm2015/src/entity-metadata.js +2109 -0
  143. package/esm2015/src/entity-query.js +1015 -0
  144. package/esm2015/src/entity-state.js +107 -0
  145. package/esm2015/src/enum.js +141 -0
  146. package/esm2015/src/event.js +256 -0
  147. package/esm2015/src/interface-registry.js +41 -0
  148. package/esm2015/src/key-generator.js +108 -0
  149. package/esm2015/src/local-query-comparison-options.js +65 -0
  150. package/esm2015/src/mapping-context.js +411 -0
  151. package/esm2015/src/naming-convention.js +88 -0
  152. package/esm2015/src/observable-array.js +185 -0
  153. package/esm2015/src/predicate.js +1242 -0
  154. package/esm2015/src/primitive-array.js +87 -0
  155. package/esm2015/src/query-options.js +152 -0
  156. package/esm2015/src/relation-array.js +175 -0
  157. package/esm2015/src/save-options.js +41 -0
  158. package/esm2015/src/unattached-children-map.js +58 -0
  159. package/esm2015/src/validate.js +991 -0
  160. package/esm2015/src/validation-options.js +64 -0
  161. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
  162. package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
  163. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  164. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
  165. package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
  166. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  167. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
  168. package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
  169. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  170. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
  171. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  172. package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
  173. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  174. package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
  175. package/{esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs → esm5/adapter-data-service-odata/adapter-data-service-odata.js} +147 -138
  176. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  177. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +105 -0
  178. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  179. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
  180. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  181. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
  182. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  183. package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
  184. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
  185. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  186. package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
  187. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
  188. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  189. package/esm5/breeze-client.js +9 -0
  190. package/esm5/index.js +2 -0
  191. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  192. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  193. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  194. package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
  195. package/esm5/src/abstract-data-service-adapter.js +333 -0
  196. package/esm5/src/array.js +4 -0
  197. package/esm5/src/assert-param.js +317 -0
  198. package/esm5/src/breeze.js +85 -0
  199. package/esm5/src/complex-array.js +119 -0
  200. package/esm5/src/config.js +228 -0
  201. package/esm5/src/core.js +722 -0
  202. package/esm5/src/csdl-metadata-parser.js +385 -0
  203. package/esm5/src/data-service.js +207 -0
  204. package/esm5/src/data-type.js +513 -0
  205. package/esm5/src/default-property-interceptor.js +460 -0
  206. package/esm5/src/entity-action.js +52 -0
  207. package/esm5/src/entity-aspect.js +810 -0
  208. package/esm5/src/entity-group.js +189 -0
  209. package/esm5/src/entity-key.js +118 -0
  210. package/esm5/src/entity-manager.js +2112 -0
  211. package/esm5/src/entity-metadata.js +2144 -0
  212. package/esm5/src/entity-query.js +1042 -0
  213. package/esm5/src/entity-state.js +114 -0
  214. package/esm5/src/enum.js +144 -0
  215. package/esm5/src/event.js +259 -0
  216. package/esm5/src/interface-registry.js +43 -0
  217. package/esm5/src/key-generator.js +111 -0
  218. package/esm5/src/local-query-comparison-options.js +67 -0
  219. package/esm5/src/mapping-context.js +413 -0
  220. package/esm5/src/naming-convention.js +90 -0
  221. package/esm5/src/observable-array.js +201 -0
  222. package/esm5/src/predicate.js +1307 -0
  223. package/esm5/src/primitive-array.js +87 -0
  224. package/esm5/src/query-options.js +167 -0
  225. package/esm5/src/relation-array.js +175 -0
  226. package/esm5/src/save-options.js +43 -0
  227. package/esm5/src/unattached-children-map.js +60 -0
  228. package/{esm2022/src/validate.mjs → esm5/src/validate.js} +110 -116
  229. package/esm5/src/validation-options.js +66 -0
  230. package/{fesm2022/breeze-client-adapter-ajax-angularjs.mjs → fesm2015/breeze-client-adapter-ajax-angularjs.js} +1 -6
  231. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  232. package/{fesm2022/breeze-client-adapter-ajax-fetch.mjs → fesm2015/breeze-client-adapter-ajax-fetch.js} +4 -9
  233. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
  234. package/{fesm2022/breeze-client-adapter-ajax-httpclient.mjs → fesm2015/breeze-client-adapter-ajax-httpclient.js} +4 -6
  235. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  236. package/{fesm2022/breeze-client-adapter-ajax-jquery.mjs → fesm2015/breeze-client-adapter-ajax-jquery.js} +2 -6
  237. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
  238. package/{fesm2022/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
  239. package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
  240. package/{fesm2022/breeze-client-adapter-data-service-odata.mjs → fesm2015/breeze-client-adapter-data-service-odata.js} +69 -68
  241. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
  242. package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → fesm2015/breeze-client-adapter-data-service-webapi.js} +30 -30
  243. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
  244. package/{fesm2022/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -14
  245. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  246. package/{fesm2022/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -14
  247. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
  248. package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -9
  249. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
  250. package/{fesm2022/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -86
  251. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  252. package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → fesm2015/breeze-client-mixin-get-entity-graph.js} +1 -1
  253. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
  254. package/{fesm2022/breeze-client-mixin-save-queuing.mjs → fesm2015/breeze-client-mixin-save-queuing.js} +2 -23
  255. package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
  256. package/{fesm2022/breeze-client.mjs → fesm2015/breeze-client.js} +1543 -2042
  257. package/fesm2015/breeze-client.js.map +1 -0
  258. package/fesm5/breeze-client-adapter-ajax-angularjs.js +186 -0
  259. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  260. package/fesm5/breeze-client-adapter-ajax-fetch.js +186 -0
  261. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
  262. package/fesm5/breeze-client-adapter-ajax-httpclient.js +193 -0
  263. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  264. package/fesm5/breeze-client-adapter-ajax-jquery.js +111 -0
  265. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
  266. package/fesm5/breeze-client-adapter-ajax-post.js +86 -0
  267. package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
  268. package/fesm5/breeze-client-adapter-data-service-odata.js +523 -0
  269. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
  270. package/fesm5/breeze-client-adapter-data-service-webapi.js +111 -0
  271. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
  272. package/fesm5/breeze-client-adapter-model-library-backing-store.js +276 -0
  273. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  274. package/fesm5/breeze-client-adapter-model-library-ko.js +248 -0
  275. package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
  276. package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
  277. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
  278. package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
  279. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  280. package/fesm5/breeze-client-mixin-get-entity-graph.js +254 -0
  281. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
  282. package/fesm5/breeze-client-mixin-save-queuing.js +356 -0
  283. package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
  284. package/fesm5/breeze-client.js +13956 -0
  285. package/fesm5/breeze-client.js.map +1 -0
  286. package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
  287. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
  288. package/mixin-get-entity-graph/package.json +13 -0
  289. package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
  290. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
  291. package/mixin-save-queuing/package.json +13 -0
  292. package/package.json +12 -94
  293. package/src/config.d.ts +1 -1
  294. package/src/core.d.ts +1 -1
  295. package/src/entity-aspect.d.ts +1 -1
  296. package/src/entity-metadata.d.ts +6 -8
  297. package/src/entity-query.d.ts +1 -1
  298. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
  299. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  300. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  301. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
  302. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
  303. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  304. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
  305. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  306. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  307. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
  308. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  309. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  310. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  311. package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
  312. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  313. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
  314. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  315. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
  316. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  317. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
  318. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  319. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
  320. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
  321. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  322. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  323. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
  324. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  325. package/esm2022/breeze-client.mjs +0 -5
  326. package/esm2022/index.mjs +0 -2
  327. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  328. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  329. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  330. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
  331. package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
  332. package/esm2022/src/array.mjs +0 -4
  333. package/esm2022/src/assert-param.mjs +0 -330
  334. package/esm2022/src/breeze.mjs +0 -85
  335. package/esm2022/src/complex-array.mjs +0 -117
  336. package/esm2022/src/config.mjs +0 -232
  337. package/esm2022/src/core.mjs +0 -712
  338. package/esm2022/src/csdl-metadata-parser.mjs +0 -385
  339. package/esm2022/src/data-service.mjs +0 -239
  340. package/esm2022/src/data-type.mjs +0 -510
  341. package/esm2022/src/default-property-interceptor.mjs +0 -460
  342. package/esm2022/src/entity-aspect.mjs +0 -897
  343. package/esm2022/src/entity-group.mjs +0 -192
  344. package/esm2022/src/entity-key.mjs +0 -127
  345. package/esm2022/src/entity-manager.mjs +0 -2183
  346. package/esm2022/src/entity-metadata.mjs +0 -2242
  347. package/esm2022/src/entity-query.mjs +0 -1024
  348. package/esm2022/src/entity-state.mjs +0 -107
  349. package/esm2022/src/enum.mjs +0 -143
  350. package/esm2022/src/event.mjs +0 -264
  351. package/esm2022/src/interface-registry.mjs +0 -39
  352. package/esm2022/src/key-generator.mjs +0 -110
  353. package/esm2022/src/local-query-comparison-options.mjs +0 -75
  354. package/esm2022/src/mapping-context.mjs +0 -422
  355. package/esm2022/src/naming-convention.mjs +0 -96
  356. package/esm2022/src/observable-array.mjs +0 -183
  357. package/esm2022/src/predicate.mjs +0 -1259
  358. package/esm2022/src/primitive-array.mjs +0 -85
  359. package/esm2022/src/query-options.mjs +0 -160
  360. package/esm2022/src/relation-array.mjs +0 -173
  361. package/esm2022/src/save-options.mjs +0 -51
  362. package/esm2022/src/unattached-children-map.mjs +0 -56
  363. package/esm2022/src/validation-options.mjs +0 -78
  364. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  365. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  366. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  367. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  368. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
  369. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  370. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  371. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  372. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  373. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  374. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  375. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  376. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
  377. package/fesm2022/breeze-client.mjs.map +0 -1
@@ -0,0 +1,460 @@
1
+ import { core } from './core';
2
+ import { EntityKey } from './entity-key';
3
+ import { EntityAspect } from './entity-aspect';
4
+ import { EntityState } from './entity-state';
5
+ import { EntityAction } from './entity-action';
6
+ import { EntityQuery } from './entity-query';
7
+ /** @hidden @internal */
8
+ export function defaultPropertyInterceptor(property, newValue, rawAccessorFn) {
9
+ // 'this' is the entity itself in this context.
10
+ if (newValue === undefined)
11
+ newValue = null; // remove? to allow assignment to undefined in Babel constructors?
12
+ let oldValue = rawAccessorFn();
13
+ let dataType = property.dataType;
14
+ if (dataType && dataType.parse) {
15
+ // attempts to coerce a value to the correct type - if this fails return the value unchanged
16
+ if (Array.isArray(newValue) && !property.isScalar) {
17
+ newValue = newValue.map(function (nv) {
18
+ return dataType.parse(nv, typeof nv);
19
+ });
20
+ }
21
+ else {
22
+ newValue = dataType.parse(newValue, typeof newValue);
23
+ }
24
+ }
25
+ // exit if no change - extra cruft is because dateTimes don't compare cleanly.
26
+ if (newValue === oldValue || (newValue === null && oldValue === undefined) ||
27
+ (dataType && dataType.normalize && newValue && oldValue && dataType.normalize(newValue) === dataType.normalize(oldValue))) {
28
+ return;
29
+ }
30
+ // CANNOT DO NEXT LINE because it has the possibility of creating a new property
31
+ // 'entityAspect' on 'this'. - Not permitted by IE inside of a defined property on a prototype.
32
+ // let entityAspect = new EntityAspect(this);
33
+ let propertyName;
34
+ let entityAspect = this.entityAspect;
35
+ if (entityAspect) {
36
+ propertyName = property.name;
37
+ }
38
+ else {
39
+ let localAspect = this.complexAspect;
40
+ if (localAspect) {
41
+ entityAspect = localAspect.getEntityAspect();
42
+ propertyName = localAspect.getPropertyPath(property.name);
43
+ }
44
+ else {
45
+ // does not yet have an EntityAspect so just set the prop
46
+ rawAccessorFn(newValue);
47
+ return;
48
+ }
49
+ }
50
+ // Note that we need to handle multiple properties in process, not just one in order to avoid recursion.
51
+ // ( except in the case of null propagation with fks where null -> 0 in some cases.)
52
+ // (this may not be needed because of the newValue === oldValue test above)
53
+ let inProcess = entityAspect._inProcess = entityAspect._inProcess || [];
54
+ // check for recursion
55
+ if (inProcess.indexOf(property) >= 0)
56
+ return;
57
+ inProcess.push(property);
58
+ try {
59
+ let context = {
60
+ parent: this,
61
+ property: property,
62
+ newValue: newValue,
63
+ oldValue: oldValue,
64
+ propertyName: propertyName,
65
+ entityAspect: entityAspect
66
+ };
67
+ if (property.isComplexProperty) {
68
+ setDpValueComplex(context, rawAccessorFn);
69
+ }
70
+ else if (property.isDataProperty) {
71
+ setDpValueSimple(context, rawAccessorFn);
72
+ }
73
+ else {
74
+ setNpValue(context, rawAccessorFn);
75
+ }
76
+ postChangeEvents(context);
77
+ }
78
+ finally {
79
+ inProcess.pop();
80
+ }
81
+ }
82
+ function setDpValueSimple(context, rawAccessorFn) {
83
+ let parent = context.parent;
84
+ let property = context.property;
85
+ let entityAspect = context.entityAspect;
86
+ let oldValue = context.oldValue;
87
+ let newValue = context.newValue;
88
+ let entityManager = entityAspect.entityManager;
89
+ if (!property.isScalar) {
90
+ throw new Error("Nonscalar data properties are readonly - items may be added or removed but the collection may not be changed.");
91
+ }
92
+ // store an original value for this property if not already set
93
+ if (entityAspect.entityState.isUnchangedOrModified()) {
94
+ let propName = property.name;
95
+ // localAspect is not the same as entityAspect for complex props
96
+ let localAspect = EntityAspect.isEntity(parent) ? parent.entityAspect : parent.complexAspect;
97
+ if (localAspect.originalValues[propName] === undefined) {
98
+ // otherwise this entry will be skipped during serialization
99
+ localAspect.originalValues[propName] = oldValue !== undefined ? oldValue : property.defaultValue;
100
+ }
101
+ }
102
+ // if we are changing the key update our internal entityGroup indexes.
103
+ if (property.isPartOfKey && entityManager && !entityManager.isLoading) {
104
+ // 'entityType' on the next line be null for complex properties but it will only be ref'd within this
105
+ // fn when the property is part of the key
106
+ let entityType = parent.entityType;
107
+ let keyProps = entityType.keyProperties;
108
+ let values = keyProps.map(function (p) {
109
+ if (p === property) {
110
+ return newValue;
111
+ }
112
+ else {
113
+ return parent.getProperty(p.name);
114
+ }
115
+ });
116
+ let newKey = new EntityKey(entityType, values);
117
+ if (entityManager.getEntityByKey(newKey)) {
118
+ throw new Error("An entity with this key is already in the cache: " + newKey.toString());
119
+ }
120
+ let oldKey = parent.entityAspect.getKey();
121
+ let eg = entityManager._findEntityGroup(entityType);
122
+ eg._replaceKey(oldKey, newKey);
123
+ }
124
+ // process related updates ( the inverse relationship) first so that collection dups check works properly.
125
+ // update inverse relationship
126
+ let relatedNavProp = property.relatedNavigationProperty;
127
+ if (relatedNavProp && entityManager) {
128
+ // Example: bidirectional fkDataProperty: 1->n: order -> orderDetails
129
+ // orderDetail.orderId <- newOrderId || null
130
+ // ==> orderDetail.order = lookupOrder(newOrderId)
131
+ // ==> (see set navProp above)
132
+ // and
133
+ // Example: bidirectional fkDataProperty: 1->1: order -> internationalOrder
134
+ // internationalOrder.orderId <- newOrderId || null
135
+ // ==> internationalOrder.order = lookupOrder(newOrderId)
136
+ // ==> (see set navProp above)
137
+ if (newValue != null) {
138
+ let relatedEntity;
139
+ let key;
140
+ if (relatedNavProp.invForeignKeyNames.length) {
141
+ // property is related by field which is not the PK
142
+ const query = new EntityQuery(relatedNavProp.entityType.defaultResourceName).where(relatedNavProp.invForeignKeyNames[0], 'eq', newValue);
143
+ const qresult = entityManager.executeQueryLocally(query);
144
+ if (qresult.length === 1) {
145
+ relatedEntity = qresult[0];
146
+ }
147
+ }
148
+ else {
149
+ // property is related by the PK
150
+ key = new EntityKey(relatedNavProp.entityType, [newValue]);
151
+ relatedEntity = entityManager.getEntityByKey(key);
152
+ }
153
+ if (relatedEntity) {
154
+ parent.setProperty(relatedNavProp.name, relatedEntity);
155
+ }
156
+ else {
157
+ // it may not have been fetched yet in which case we want to add it as an unattachedChild.
158
+ if (key) {
159
+ // TODO currently _linkRelatedentities only works with PK relations, so we only add those.
160
+ entityManager._unattachedChildrenMap.addChild(key, relatedNavProp, parent);
161
+ }
162
+ parent.setProperty(relatedNavProp.name, null);
163
+ }
164
+ }
165
+ else {
166
+ parent.setProperty(relatedNavProp.name, null);
167
+ }
168
+ }
169
+ else if (property.inverseNavigationProperty && entityManager && !entityManager._inKeyFixup) {
170
+ // Example: unidirectional fkDataProperty: 1->n: region -> territories
171
+ // territory.regionId <- newRegionId
172
+ // ==> lookupRegion(newRegionId).territories.push(territory)
173
+ // and
174
+ // Example: unidirectional fkDataProperty: 1->1: order -> internationalOrder
175
+ // internationalOrder.orderId <- newOrderId
176
+ // ==> lookupOrder(newOrderId).internationalOrder = internationalOrder
177
+ // and
178
+ // Example: unidirectional fkDataProperty: 1->n: region -> territories
179
+ // territory.regionId <- null
180
+ // ==> lookupRegion(territory.oldRegionId).territories.remove(oldTerritory);
181
+ // and
182
+ // Example: unidirectional fkDataProperty: 1->1: order -> internationalOrder
183
+ // internationalOrder.orderId <- null
184
+ // ==> lookupOrder(internationalOrder.oldOrderId).internationalOrder = null;
185
+ let invNavProp = property.inverseNavigationProperty;
186
+ if (oldValue != null) {
187
+ let key = new EntityKey(invNavProp.parentType, [oldValue]);
188
+ let relatedEntity = entityManager.getEntityByKey(key);
189
+ if (relatedEntity) {
190
+ if (invNavProp.isScalar) {
191
+ relatedEntity.setProperty(invNavProp.name, null);
192
+ }
193
+ else {
194
+ // remove 'this' from old related nav prop
195
+ let relatedArray = relatedEntity.getProperty(invNavProp.name);
196
+ // arr.splice(arr.indexOf(value_to_remove), 1);
197
+ relatedArray.splice(relatedArray.indexOf(parent), 1);
198
+ }
199
+ }
200
+ }
201
+ if (newValue != null) {
202
+ let key = new EntityKey(invNavProp.parentType, [newValue]);
203
+ let relatedEntity = entityManager.getEntityByKey(key);
204
+ if (relatedEntity) {
205
+ if (invNavProp.isScalar) {
206
+ relatedEntity.setProperty(invNavProp.name, parent);
207
+ }
208
+ else {
209
+ relatedEntity.getProperty(invNavProp.name).push(parent);
210
+ }
211
+ }
212
+ else {
213
+ // it may not have been fetched yet in which case we want to add it as an unattachedChild.
214
+ entityManager._unattachedChildrenMap.addChild(key, invNavProp, parent);
215
+ }
216
+ }
217
+ }
218
+ rawAccessorFn(newValue);
219
+ updateStateAndValidate(context);
220
+ // if (property.isPartOfKey && (!this.complexAspect)) {
221
+ if (property.isPartOfKey) {
222
+ // propogate pk change to all related entities;
223
+ let entityType = parent.entityType;
224
+ let propertyIx = entityType.keyProperties.indexOf(property);
225
+ // this part handles order.orderId => orderDetail.orderId
226
+ // but won't handle product.productId => orderDetail.productId because product
227
+ // doesn't have an orderDetails property.
228
+ entityType.navigationProperties.forEach(function (np) {
229
+ let inverseNp = np.inverse;
230
+ let fkNames = inverseNp ? inverseNp.foreignKeyNames : np.invForeignKeyNames;
231
+ if (fkNames.length === 0)
232
+ return;
233
+ let npValue = parent.getProperty(np.name);
234
+ if (!npValue)
235
+ return;
236
+ let fkName = fkNames[propertyIx];
237
+ if (np.isScalar) {
238
+ npValue.setProperty(fkName, newValue);
239
+ }
240
+ else {
241
+ npValue.slice(0).forEach(function (iv) {
242
+ iv.setProperty(fkName, newValue);
243
+ });
244
+ }
245
+ });
246
+ // this handles unidirectional problems not covered above.
247
+ if (entityManager) {
248
+ let inverseForeignKeyProperties = entityType.inverseForeignKeyProperties;
249
+ let baseEntityType = entityType.baseEntityType;
250
+ while (baseEntityType) {
251
+ inverseForeignKeyProperties = inverseForeignKeyProperties.concat(baseEntityType.inverseForeignKeyProperties);
252
+ baseEntityType = baseEntityType.baseEntityType;
253
+ }
254
+ inverseForeignKeyProperties.forEach((invFkProp) => {
255
+ if (invFkProp.relatedNavigationProperty.inverse == null) {
256
+ // this next step may be slow - it iterates over all of the entities in a group;
257
+ // hopefully it doesn't happen often.
258
+ entityManager._updateFkVal(invFkProp, oldValue, newValue);
259
+ }
260
+ });
261
+ }
262
+ // insure that cached key is updated.
263
+ entityAspect.getKey(true);
264
+ }
265
+ }
266
+ function setDpValueComplex(context, rawAccessorFn) {
267
+ let property = context.property;
268
+ let oldValue = context.oldValue;
269
+ let newValue = context.newValue;
270
+ // To get here it must be a ComplexProperty
271
+ // 'dataType' will be a complexType
272
+ let dataType = property.dataType;
273
+ if (property.isScalar) {
274
+ if (!newValue) {
275
+ throw new Error(core.formatString("You cannot set the '%1' property to null because its datatype is the ComplexType: '%2'", property.name, property.dataType.name));
276
+ }
277
+ if (!oldValue) {
278
+ let ctor = dataType.getCtor();
279
+ oldValue = new ctor();
280
+ rawAccessorFn(oldValue);
281
+ }
282
+ dataType.dataProperties.forEach(function (dp) {
283
+ let pn = dp.name;
284
+ let nv = newValue.getProperty(pn);
285
+ oldValue.setProperty(pn, nv);
286
+ });
287
+ }
288
+ else {
289
+ throw new Error(core.formatString("You cannot set the non-scalar complex property: '%1' on the type: '%2'." +
290
+ "Instead get the property and use array functions like 'push' or 'splice' to change its contents.", property.name, property.parentType.name));
291
+ }
292
+ }
293
+ function setNpValue(context, rawAccessorFn) {
294
+ let parent = context.parent;
295
+ let property = context.property;
296
+ let entityAspect = context.entityAspect;
297
+ let oldValue = context.oldValue;
298
+ let newValue = context.newValue;
299
+ if (!property.isScalar) {
300
+ throw new Error("Nonscalar navigation properties are readonly - entities can be added or removed but the collection may not be changed.");
301
+ }
302
+ let entityManager = entityAspect.entityManager;
303
+ let inverseProp = property.inverse;
304
+ // manage attachment -
305
+ if (newValue != null) {
306
+ if (!newValue.entityAspect) {
307
+ return;
308
+ }
309
+ let newAspect = newValue.entityAspect;
310
+ if (entityManager) {
311
+ if (newAspect.entityState.isDetached()) {
312
+ if (!entityManager.isLoading) {
313
+ entityManager.attachEntity(newValue, EntityState.Added);
314
+ }
315
+ }
316
+ else {
317
+ if (newAspect.entityManager !== entityManager) {
318
+ throw new Error("An Entity cannot be attached to an entity in another EntityManager. One of the two entities must be detached first.");
319
+ }
320
+ }
321
+ }
322
+ else {
323
+ if (newAspect && newAspect.entityManager) {
324
+ entityManager = newAspect.entityManager;
325
+ if (!entityManager.isLoading) {
326
+ entityManager.attachEntity(entityAspect.entity, EntityState.Added);
327
+ }
328
+ }
329
+ }
330
+ }
331
+ // process related updates ( the inverse relationship) first so that collection dups check works properly.
332
+ // update inverse relationship
333
+ if (inverseProp) {
334
+ ///
335
+ if (inverseProp.isScalar) {
336
+ // Example: bidirectional navProperty: 1->1: order -> internationalOrder
337
+ // order.internationalOrder <- internationalOrder || null
338
+ // ==> (oldInternationalOrder.order = null)
339
+ // ==> internationalOrder.order = order
340
+ if (oldValue != null) {
341
+ // TODO: null -> NullEntity later
342
+ oldValue.setProperty(inverseProp.name, null);
343
+ }
344
+ if (newValue != null) {
345
+ newValue.setProperty(inverseProp.name, parent);
346
+ }
347
+ }
348
+ else {
349
+ // Example: bidirectional navProperty: 1->n: order -> orderDetails
350
+ // orderDetail.order <- newOrder || null
351
+ // ==> (oldOrder).orderDetails.remove(orderDetail)
352
+ // ==> order.orderDetails.push(newOrder)
353
+ if (oldValue != null) {
354
+ let oldSiblings = oldValue.getProperty(inverseProp.name);
355
+ let ix = oldSiblings.indexOf(parent);
356
+ if (ix !== -1) {
357
+ oldSiblings.splice(ix, 1);
358
+ }
359
+ }
360
+ if (newValue != null) {
361
+ let siblings = newValue.getProperty(inverseProp.name);
362
+ // recursion check if already in the collection is performed by the relationArray
363
+ siblings.push(parent);
364
+ }
365
+ }
366
+ }
367
+ else if (property.invForeignKeyNames && entityManager && !entityManager._inKeyFixup) {
368
+ let invForeignKeyNames = property.invForeignKeyNames;
369
+ if (newValue != null) {
370
+ // Example: unidirectional navProperty: 1->1: order -> internationalOrder
371
+ // order.InternationalOrder <- internationalOrder
372
+ // ==> internationalOrder.orderId = orderId
373
+ // and
374
+ // Example: unidirectional navProperty: 1->n: order -> orderDetails
375
+ // orderDetail.order <-xxx newOrder
376
+ // ==> CAN'T HAPPEN because if unidirectional because orderDetail will not have an order prop
377
+ let pkValues = parent.entityAspect.getKey().values;
378
+ invForeignKeyNames.forEach((fkName, i) => {
379
+ newValue.setProperty(fkName, pkValues[i]);
380
+ });
381
+ }
382
+ else {
383
+ // Example: unidirectional navProperty: 1->1: order -> internationalOrder
384
+ // order.internationalOrder <- null
385
+ // ==> (old internationalOrder).orderId = null
386
+ // and
387
+ // Example: unidirectional navProperty: 1->n: order -> orderDetails
388
+ // orderDetail.order <-xxx newOrder
389
+ // ==> CAN'T HAPPEN because if unidirectional because orderDetail will not have an order prop
390
+ if (oldValue != null) {
391
+ invForeignKeyNames.forEach((fkName) => {
392
+ let fkProp = oldValue.entityType.getProperty(fkName);
393
+ if (!fkProp.isPartOfKey) {
394
+ // don't update with null if fk is part of the key
395
+ oldValue.setProperty(fkName, null);
396
+ }
397
+ });
398
+ }
399
+ }
400
+ }
401
+ rawAccessorFn(newValue);
402
+ updateStateAndValidate(context);
403
+ // update fk data property - this can only occur if this navProperty has
404
+ // a corresponding fk on this entity.
405
+ if (property.relatedDataProperties) {
406
+ let entityState = entityAspect.entityState;
407
+ // if either side of nav prop is detached don't clear fks. Note: oldValue in next line cannot be null so no check is needed.
408
+ if (newValue == null && (entityState.isDetached() || oldValue.entityAspect.entityState.isDetached()))
409
+ return;
410
+ if (entityState.isDeleted())
411
+ return;
412
+ // we may have inverse props indicating the related prop on the other entity, if it is not the other entity's PK
413
+ let inverseKeyProps = property.invForeignKeyNames;
414
+ if (!(inverseKeyProps && inverseKeyProps.length)) {
415
+ // otherwise, this prop is related to the other entity's PK
416
+ inverseKeyProps = property.entityType.keyProperties.map(k => k.name);
417
+ }
418
+ inverseKeyProps.forEach(function (keyProp, i) {
419
+ let relatedDataProp = property.relatedDataProperties[i];
420
+ // Do not trash related property if it is part of that entity's key
421
+ if (newValue || !relatedDataProp.isPartOfKey) {
422
+ let relatedValue = newValue ? newValue.getProperty(keyProp) : relatedDataProp.defaultValue;
423
+ parent.setProperty(relatedDataProp.name, relatedValue);
424
+ }
425
+ });
426
+ }
427
+ }
428
+ function postChangeEvents(context) {
429
+ let entityAspect = context.entityAspect;
430
+ let entityManager = entityAspect.entityManager;
431
+ let entity = entityAspect.entity;
432
+ let propChangedArgs = { entity: entity, parent: context.parent, property: context.property, propertyName: context.propertyName, oldValue: context.oldValue, newValue: context.newValue };
433
+ if (entityManager) {
434
+ // propertyChanged will be fired during loading but we only want to fire it once per entity, not once per property.
435
+ // so propertyChanged is fired in the entityManager mergeEntity method if not fired here.
436
+ if ((!entityManager.isLoading) && (!entityManager.isRejectingChanges)) {
437
+ entityAspect.propertyChanged.publish(propChangedArgs);
438
+ // don't fire entityChanged event if propertyChanged is suppressed.
439
+ entityManager.entityChanged.publish({ entityAction: EntityAction.PropertyChange, entity: entity, args: propChangedArgs });
440
+ }
441
+ }
442
+ else {
443
+ entityAspect.propertyChanged.publish(propChangedArgs);
444
+ }
445
+ }
446
+ function updateStateAndValidate(context) {
447
+ let entityAspect = context.entityAspect;
448
+ let entityManager = entityAspect.entityManager;
449
+ if (entityManager == null || entityManager.isLoading)
450
+ return;
451
+ let property = context.property;
452
+ if (entityAspect.entityState.isUnchanged() && !property.isUnmapped) {
453
+ entityAspect.setModified();
454
+ }
455
+ if (entityManager.validationOptions.validateOnPropertyChange) {
456
+ // entityAspect.entity is NOT the same as parent in the code below. It's use is deliberate.
457
+ entityAspect._validateProperty(context.newValue, { entity: entityAspect.entity, property: property, propertyName: context.propertyName, oldValue: context.oldValue });
458
+ }
459
+ }
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBMkMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3Qyx3QkFBd0I7QUFDeEIsTUFBTSxVQUFVLDBCQUEwQixDQUF5QixRQUF3QixFQUFFLFFBQWEsRUFBRSxhQUF1QjtJQUNqSSwrQ0FBK0M7SUFFL0MsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxrRUFBa0U7SUFDL0csSUFBSSxRQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFL0IsSUFBSSxRQUFRLEdBQUksUUFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDMUMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtRQUM5Qiw0RkFBNEY7UUFDNUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNqRCxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQztTQUN0RDtLQUNGO0lBRUQsOEVBQThFO0lBQzlFLElBQUksUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLFNBQVMsQ0FBQztRQUN4RSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDM0gsT0FBTztLQUNSO0lBRUQsZ0ZBQWdGO0lBQ2hGLGdHQUFnRztJQUNoRyw2Q0FBNkM7SUFFN0MsSUFBSSxZQUFvQixDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFJLElBQVksQ0FBQyxZQUE0QixDQUFDO0lBQzlELElBQUksWUFBWSxFQUFFO1FBQ2hCLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0tBQzlCO1NBQU07UUFDTCxJQUFJLFdBQVcsR0FBSSxJQUFZLENBQUMsYUFBOEIsQ0FBQztRQUMvRCxJQUFJLFdBQVcsRUFBRTtZQUNmLFlBQVksR0FBRyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0MsWUFBWSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNEO2FBQU07WUFDTCx5REFBeUQ7WUFDekQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hCLE9BQU87U0FDUjtLQUNGO0lBRUQsd0dBQXdHO0lBQ3hHLG9GQUFvRjtJQUNwRiwyRUFBMkU7SUFDM0UsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUN4RSxzQkFBc0I7SUFDdEIsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPO0lBQzdDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFekIsSUFBSTtRQUVGLElBQUksT0FBTyxHQUFhO1lBQ3RCLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsWUFBWSxFQUFFLFlBQVk7WUFDMUIsWUFBWSxFQUFFLFlBQVk7U0FDM0IsQ0FBQztRQUVGLElBQUssUUFBZ0IsQ0FBQyxpQkFBaUIsRUFBRTtZQUN2QyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLFFBQVEsQ0FBQyxjQUFjLEVBQUU7WUFDbEMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxVQUFVLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7S0FFM0I7WUFBUztRQUNSLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUNqQjtBQUNILENBQUM7QUFXRCxTQUFTLGdCQUFnQixDQUFDLE9BQWlCLEVBQUUsYUFBa0I7SUFDN0QsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM1QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBd0IsQ0FBQztJQUNoRCxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3hDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDaEMsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUVoQyxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0dBQStHLENBQUMsQ0FBQztLQUNsSTtJQUVELCtEQUErRDtJQUMvRCxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsRUFBRTtRQUNwRCxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzdCLGdFQUFnRTtRQUNoRSxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzdGLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDdEQsNERBQTREO1lBQzVELFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1NBQ2xHO0tBQ0Y7SUFFRCxzRUFBc0U7SUFDdEUsSUFBSSxRQUFRLENBQUMsV0FBVyxJQUFJLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUU7UUFDckUscUdBQXFHO1FBQ3JHLDBDQUEwQztRQUMxQyxJQUFJLFVBQVUsR0FBSSxNQUFpQixDQUFDLFVBQVUsQ0FBQztRQUMvQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3hDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDbEIsT0FBTyxRQUFRLENBQUM7YUFDakI7aUJBQU07Z0JBQ0wsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzFGO1FBQ0QsSUFBSSxNQUFNLEdBQUksTUFBaUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEQsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2hDO0lBRUQsMEdBQTBHO0lBQzFHLDhCQUE4QjtJQUU5QixJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMseUJBQXlCLENBQUM7SUFDeEQsSUFBSSxjQUFjLElBQUksYUFBYSxFQUFFO1FBQ25DLHFFQUFxRTtRQUNyRSw0Q0FBNEM7UUFDNUMscURBQXFEO1FBQ3JELGlDQUFpQztRQUNqQyxZQUFZO1FBQ1osMkVBQTJFO1FBQzNFLG1EQUFtRDtRQUNuRCw0REFBNEQ7UUFDNUQsaUNBQWlDO1FBRWpDLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLGFBQXFCLENBQUM7WUFDMUIsSUFBSSxHQUFjLENBQUM7WUFDbkIsSUFBSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO2dCQUM1QyxtREFBbUQ7Z0JBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDekksTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUN4QixhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1QjthQUNGO2lCQUFNO2dCQUNMLGdDQUFnQztnQkFDaEMsR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxhQUFhLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNuRDtZQUVELElBQUksYUFBYSxFQUFFO2dCQUNqQixNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0wsMEZBQTBGO2dCQUMxRixJQUFJLEdBQUcsRUFBRTtvQkFDUCwwRkFBMEY7b0JBQzFGLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFnQixDQUFDLENBQUM7aUJBQ3RGO2dCQUNELE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQztTQUNGO2FBQU07WUFDTCxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDL0M7S0FDRjtTQUFNLElBQUksUUFBUSxDQUFDLHlCQUF5QixJQUFJLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7UUFDNUYsc0VBQXNFO1FBQ3RFLG9DQUFvQztRQUNwQywrREFBK0Q7UUFDL0QscUJBQXFCO1FBQ3JCLDRFQUE0RTtRQUM1RSwyQ0FBMkM7UUFDM0MseUVBQXlFO1FBQ3pFLHFCQUFxQjtRQUNyQixzRUFBc0U7UUFDdEUsNkJBQTZCO1FBQzdCLCtFQUErRTtRQUMvRSxxQkFBcUI7UUFDckIsNEVBQTRFO1FBQzVFLHFDQUFxQztRQUNyQywrRUFBK0U7UUFFL0UsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLHlCQUF5QixDQUFDO1FBRXBELElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELElBQUksYUFBYSxFQUFFO2dCQUNqQixJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbEQ7cUJBQU07b0JBQ0wsMENBQTBDO29CQUMxQyxJQUFJLFlBQVksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUQsK0NBQStDO29CQUMvQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3REO2FBQ0Y7U0FDRjtRQUVELElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXRELElBQUksYUFBYSxFQUFFO2dCQUNqQixJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDcEQ7cUJBQU07b0JBQ0wsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN6RDthQUNGO2lCQUFNO2dCQUNMLDBGQUEwRjtnQkFDMUYsYUFBYSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQWdCLENBQUMsQ0FBQzthQUNsRjtTQUNGO0tBRUY7SUFFRCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEIsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEMsdURBQXVEO0lBQ3ZELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtRQUN4QiwrQ0FBK0M7UUFDL0MsSUFBSSxVQUFVLEdBQUksTUFBaUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQseURBQXlEO1FBQ3pELDhFQUE4RTtRQUM5RSx5Q0FBeUM7UUFDekMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDbEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUMzQixJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUU1RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBQ2pDLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFDckIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtnQkFDZixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN2QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQU87b0JBQ3hDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCwwREFBMEQ7UUFDMUQsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSwyQkFBMkIsR0FBRyxVQUFVLENBQUMsMkJBQTJCLENBQUM7WUFDekUsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUMvQyxPQUFPLGNBQWMsRUFBRTtnQkFDckIsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUM3RyxjQUFjLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQzthQUNoRDtZQUNELDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNoRCxJQUFJLFNBQVMsQ0FBQyx5QkFBMEIsQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO29CQUN4RCxnRkFBZ0Y7b0JBQ2hGLHFDQUFxQztvQkFDckMsYUFBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUM1RDtZQUVILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxxQ0FBcUM7UUFDckMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQjtBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLE9BQWlCLEVBQUUsYUFBdUI7SUFDbkUsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQXdCLENBQUM7SUFDaEQsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNoQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBRWhDLDJDQUEyQztJQUMzQyxtQ0FBbUM7SUFDbkMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQXVCLENBQUM7SUFDaEQsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsd0ZBQXdGLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDcks7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlCLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QjtRQUNELFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUMxQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7S0FDSjtTQUFNO1FBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLHlFQUF5RTtZQUNuRyxrR0FBa0csRUFDdEcsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDL0M7QUFDSCxDQUFDO0FBR0QsU0FBUyxVQUFVLENBQUMsT0FBaUIsRUFBRSxhQUF1QjtJQUU1RCxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBZ0IsQ0FBQztJQUN0QyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBOEIsQ0FBQztJQUN0RCxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3hDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDaEMsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUVoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHdIQUF3SCxDQUFDLENBQUM7S0FDM0k7SUFFRCxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQy9DLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFFbkMsc0JBQXNCO0lBQ3RCLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtZQUMxQixPQUFPO1NBQ1I7UUFDRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUU7b0JBQzVCLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDekQ7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLFNBQVMsQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUFFO29CQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHFIQUFxSCxDQUFDLENBQUM7aUJBQ3hJO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRTtnQkFDeEMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxhQUFjLENBQUMsU0FBUyxFQUFFO29CQUM3QixhQUFjLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFPLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN0RTthQUNGO1NBQ0Y7S0FDRjtJQUVELDBHQUEwRztJQUMxRyw4QkFBOEI7SUFDOUIsSUFBSSxXQUFXLEVBQUU7UUFDZixHQUFHO1FBQ0gsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3hCLHdFQUF3RTtZQUN4RSx5REFBeUQ7WUFDekQsOENBQThDO1lBQzlDLDBDQUEwQztZQUMxQyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLGlDQUFpQztnQkFDakMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzlDO1lBQ0QsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNwQixRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDaEQ7U0FDRjthQUFNO1lBQ0wsa0VBQWtFO1lBQ2xFLHdDQUF3QztZQUN4QyxxREFBcUQ7WUFDckQsMkNBQTJDO1lBQzNDLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtnQkFDcEIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNiLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMzQjthQUNGO1lBQ0QsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNwQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsaUZBQWlGO2dCQUNqRixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7S0FDRjtTQUFNLElBQUksUUFBUSxDQUFDLGtCQUFrQixJQUFJLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7UUFDckYsSUFBSSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7UUFDckQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3BCLHlFQUF5RTtZQUN6RSxpREFBaUQ7WUFDakQsOENBQThDO1lBQzlDLFdBQVc7WUFDWCxtRUFBbUU7WUFDbkUsbUNBQW1DO1lBQ25DLGdHQUFnRztZQUNoRyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNuRCxrQkFBa0IsQ0FBQyxPQUFPLENBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLFFBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLHlFQUF5RTtZQUN6RSxtQ0FBbUM7WUFDbkMsaURBQWlEO1lBQ2pELGFBQWE7WUFDYixtRUFBbUU7WUFDbkUsbUNBQW1DO1lBQ25DLGdHQUFnRztZQUNoRyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLGtCQUFrQixDQUFDLE9BQU8sQ0FBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNyQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7d0JBQ3ZCLGtEQUFrRDt3QkFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtLQUNGO0lBRUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXhCLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWhDLHdFQUF3RTtJQUN4RSxxQ0FBcUM7SUFDckMsSUFBSSxRQUFRLENBQUMscUJBQXFCLEVBQUU7UUFDbEMsSUFBSSxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUMzQyw0SEFBNEg7UUFDNUgsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQUUsT0FBTztRQUM3RyxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUU7WUFBRSxPQUFPO1FBRXBDLGdIQUFnSDtRQUNoSCxJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7UUFDbEQsSUFBSSxDQUFDLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRCwyREFBMkQ7WUFDM0QsZUFBZSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0RTtRQUNELGVBQWUsQ0FBQyxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsQ0FBQztZQUMxQyxJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsbUVBQW1FO1lBQ25FLElBQUksUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRTtnQkFDNUMsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO2dCQUMzRixNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDeEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsT0FBaUI7SUFDekMsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUV4QyxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQy9DLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFFakMsSUFBSSxlQUFlLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUwsSUFBSSxhQUFhLEVBQUU7UUFDakIsbUhBQW1IO1FBQ25ILHlGQUF5RjtRQUN6RixJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3JFLFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3RELG1FQUFtRTtZQUNuRSxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7U0FDM0g7S0FDRjtTQUFNO1FBQ0wsWUFBWSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDdkQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxPQUFpQjtJQUMvQyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3hDLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDL0MsSUFBSSxhQUFhLElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxTQUFTO1FBQUUsT0FBTztJQUM3RCxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBRWhDLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7UUFDbEUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzVCO0lBRUQsSUFBSSxhQUFhLENBQUMsaUJBQWlCLENBQUMsd0JBQXdCLEVBQUU7UUFDNUQsMkZBQTJGO1FBQzNGLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUMzQyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQzFIO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wbGV4VHlwZSwgRGF0YVByb3BlcnR5LCBOYXZpZ2F0aW9uUHJvcGVydHksIEVudGl0eVByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuL2VudGl0eS1rZXknO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgU3RydWN0dXJhbE9iamVjdCB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdFByb3BlcnR5SW50ZXJjZXB0b3IodGhpczogU3RydWN0dXJhbE9iamVjdCwgcHJvcGVydHk6IEVudGl0eVByb3BlcnR5LCBuZXdWYWx1ZTogYW55LCByYXdBY2Nlc3NvckZuOiBGdW5jdGlvbikge1xyXG4gIC8vICd0aGlzJyBpcyB0aGUgZW50aXR5IGl0c2VsZiBpbiB0aGlzIGNvbnRleHQuXHJcblxyXG4gIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSBuZXdWYWx1ZSA9IG51bGw7IC8vIHJlbW92ZT8gdG8gYWxsb3cgYXNzaWdubWVudCB0byB1bmRlZmluZWQgaW4gQmFiZWwgY29uc3RydWN0b3JzP1xyXG4gIGxldCBvbGRWYWx1ZSA9IHJhd0FjY2Vzc29yRm4oKTtcclxuXHJcbiAgbGV0IGRhdGFUeXBlID0gKHByb3BlcnR5IGFzIGFueSkuZGF0YVR5cGU7XHJcbiAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLnBhcnNlKSB7XHJcbiAgICAvLyBhdHRlbXB0cyB0byBjb2VyY2UgYSB2YWx1ZSB0byB0aGUgY29ycmVjdCB0eXBlIC0gaWYgdGhpcyBmYWlscyByZXR1cm4gdGhlIHZhbHVlIHVuY2hhbmdlZFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmICFwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlLm1hcChmdW5jdGlvbiAobnYpIHtcclxuICAgICAgICByZXR1cm4gZGF0YVR5cGUucGFyc2UobnYsIHR5cGVvZiBudik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3VmFsdWUgPSBkYXRhVHlwZS5wYXJzZShuZXdWYWx1ZSwgdHlwZW9mIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGV4aXQgaWYgbm8gY2hhbmdlIC0gZXh0cmEgY3J1ZnQgaXMgYmVjYXVzZSBkYXRlVGltZXMgZG9uJ3QgY29tcGFyZSBjbGVhbmx5LlxyXG4gIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUgfHwgKG5ld1ZhbHVlID09PSBudWxsICYmIG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHx8IFxyXG4gICAgKGRhdGFUeXBlICYmIGRhdGFUeXBlLm5vcm1hbGl6ZSAmJiBuZXdWYWx1ZSAmJiBvbGRWYWx1ZSAmJiBkYXRhVHlwZS5ub3JtYWxpemUobmV3VmFsdWUpID09PSBkYXRhVHlwZS5ub3JtYWxpemUob2xkVmFsdWUpKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8gQ0FOTk9UIERPIE5FWFQgTElORSBiZWNhdXNlIGl0IGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgY3JlYXRpbmcgYSBuZXcgcHJvcGVydHlcclxuICAvLyAnZW50aXR5QXNwZWN0JyBvbiAndGhpcycuICAtIE5vdCBwZXJtaXR0ZWQgYnkgSUUgaW5zaWRlIG9mIGEgZGVmaW5lZCBwcm9wZXJ0eSBvbiBhIHByb3RvdHlwZS5cclxuICAvLyBsZXQgZW50aXR5QXNwZWN0ID0gbmV3IEVudGl0eUFzcGVjdCh0aGlzKTtcclxuXHJcbiAgbGV0IHByb3BlcnR5TmFtZTogc3RyaW5nO1xyXG4gIGxldCBlbnRpdHlBc3BlY3QgPSAodGhpcyBhcyBhbnkpLmVudGl0eUFzcGVjdCBhcyBFbnRpdHlBc3BlY3Q7XHJcbiAgaWYgKGVudGl0eUFzcGVjdCkge1xyXG4gICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHkubmFtZTtcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IGxvY2FsQXNwZWN0ID0gKHRoaXMgYXMgYW55KS5jb21wbGV4QXNwZWN0IGFzIENvbXBsZXhBc3BlY3Q7XHJcbiAgICBpZiAobG9jYWxBc3BlY3QpIHtcclxuICAgICAgZW50aXR5QXNwZWN0ID0gbG9jYWxBc3BlY3QuZ2V0RW50aXR5QXNwZWN0KCk7XHJcbiAgICAgIHByb3BlcnR5TmFtZSA9IGxvY2FsQXNwZWN0LmdldFByb3BlcnR5UGF0aChwcm9wZXJ0eS5uYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGRvZXMgbm90IHlldCBoYXZlIGFuIEVudGl0eUFzcGVjdCBzbyBqdXN0IHNldCB0aGUgcHJvcFxyXG4gICAgICByYXdBY2Nlc3NvckZuKG5ld1ZhbHVlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gaGFuZGxlIG11bHRpcGxlIHByb3BlcnRpZXMgaW4gcHJvY2Vzcywgbm90IGp1c3Qgb25lIGluIG9yZGVyIHRvIGF2b2lkIHJlY3Vyc2lvbi5cclxuICAvLyAoIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBudWxsIHByb3BhZ2F0aW9uIHdpdGggZmtzIHdoZXJlIG51bGwgLT4gMCBpbiBzb21lIGNhc2VzLilcclxuICAvLyAodGhpcyBtYXkgbm90IGJlIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBuZXdWYWx1ZSA9PT0gb2xkVmFsdWUgdGVzdCBhYm92ZSlcclxuICBsZXQgaW5Qcm9jZXNzID0gZW50aXR5QXNwZWN0Ll9pblByb2Nlc3MgPSBlbnRpdHlBc3BlY3QuX2luUHJvY2VzcyB8fCBbXTtcclxuICAvLyBjaGVjayBmb3IgcmVjdXJzaW9uXHJcbiAgaWYgKGluUHJvY2Vzcy5pbmRleE9mKHByb3BlcnR5KSA+PSAwKSByZXR1cm47XHJcbiAgaW5Qcm9jZXNzLnB1c2gocHJvcGVydHkpO1xyXG5cclxuICB0cnkge1xyXG5cclxuICAgIGxldCBjb250ZXh0OiBJQ29udGV4dCA9IHtcclxuICAgICAgcGFyZW50OiB0aGlzLFxyXG4gICAgICBwcm9wZXJ0eTogcHJvcGVydHksXHJcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcclxuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxyXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcclxuICAgICAgZW50aXR5QXNwZWN0OiBlbnRpdHlBc3BlY3RcclxuICAgIH07XHJcblxyXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBhbnkpLmlzQ29tcGxleFByb3BlcnR5KSB7XHJcbiAgICAgIHNldERwVmFsdWVDb21wbGV4KGNvbnRleHQsIHJhd0FjY2Vzc29yRm4pO1xyXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pc0RhdGFQcm9wZXJ0eSkge1xyXG4gICAgICBzZXREcFZhbHVlU2ltcGxlKGNvbnRleHQsIHJhd0FjY2Vzc29yRm4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0TnBWYWx1ZShjb250ZXh0LCByYXdBY2Nlc3NvckZuKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0Q2hhbmdlRXZlbnRzKGNvbnRleHQpO1xyXG5cclxuICB9IGZpbmFsbHkge1xyXG4gICAgaW5Qcm9jZXNzLnBvcCgpO1xyXG4gIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIElDb250ZXh0IHtcclxuICBwYXJlbnQ6IFN0cnVjdHVyYWxPYmplY3Q7XHJcbiAgcHJvcGVydHk6IEVudGl0eVByb3BlcnR5O1xyXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xyXG4gIGVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0O1xyXG4gIG9sZFZhbHVlOiBhbnk7XHJcbiAgbmV3VmFsdWU6IGFueTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0RHBWYWx1ZVNpbXBsZShjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogYW55KSB7XHJcbiAgbGV0IHBhcmVudCA9IGNvbnRleHQucGFyZW50O1xyXG4gIGxldCBwcm9wZXJ0eSA9IGNvbnRleHQucHJvcGVydHkgYXMgRGF0YVByb3BlcnR5O1xyXG4gIGxldCBlbnRpdHlBc3BlY3QgPSBjb250ZXh0LmVudGl0eUFzcGVjdDtcclxuICBsZXQgb2xkVmFsdWUgPSBjb250ZXh0Lm9sZFZhbHVlO1xyXG4gIGxldCBuZXdWYWx1ZSA9IGNvbnRleHQubmV3VmFsdWU7XHJcblxyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcblxyXG4gIGlmICghcHJvcGVydHkuaXNTY2FsYXIpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vbnNjYWxhciBkYXRhIHByb3BlcnRpZXMgYXJlIHJlYWRvbmx5IC0gaXRlbXMgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgYnV0IHRoZSBjb2xsZWN0aW9uIG1heSBub3QgYmUgY2hhbmdlZC5cIik7XHJcbiAgfVxyXG5cclxuICAvLyBzdG9yZSBhbiBvcmlnaW5hbCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eSBpZiBub3QgYWxyZWFkeSBzZXRcclxuICBpZiAoZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzVW5jaGFuZ2VkT3JNb2RpZmllZCgpKSB7XHJcbiAgICBsZXQgcHJvcE5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xyXG4gICAgLy8gbG9jYWxBc3BlY3QgaXMgbm90IHRoZSBzYW1lIGFzIGVudGl0eUFzcGVjdCBmb3IgY29tcGxleCBwcm9wc1xyXG4gICAgbGV0IGxvY2FsQXNwZWN0ID0gRW50aXR5QXNwZWN0LmlzRW50aXR5KHBhcmVudCkgPyBwYXJlbnQuZW50aXR5QXNwZWN0IDogcGFyZW50LmNvbXBsZXhBc3BlY3Q7XHJcbiAgICBpZiAobG9jYWxBc3BlY3Qub3JpZ2luYWxWYWx1ZXNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgZW50cnkgd2lsbCBiZSBza2lwcGVkIGR1cmluZyBzZXJpYWxpemF0aW9uXHJcbiAgICAgIGxvY2FsQXNwZWN0Lm9yaWdpbmFsVmFsdWVzW3Byb3BOYW1lXSA9IG9sZFZhbHVlICE9PSB1bmRlZmluZWQgPyBvbGRWYWx1ZSA6IHByb3BlcnR5LmRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGlmIHdlIGFyZSBjaGFuZ2luZyB0aGUga2V5IHVwZGF0ZSBvdXIgaW50ZXJuYWwgZW50aXR5R3JvdXAgaW5kZXhlcy5cclxuICBpZiAocHJvcGVydHkuaXNQYXJ0T2ZLZXkgJiYgZW50aXR5TWFuYWdlciAmJiAhZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHtcclxuICAgIC8vICdlbnRpdHlUeXBlJyBvbiB0aGUgbmV4dCBsaW5lIGJlIG51bGwgZm9yIGNvbXBsZXggcHJvcGVydGllcyBidXQgaXQgd2lsbCBvbmx5IGJlIHJlZidkIHdpdGhpbiB0aGlzXHJcbiAgICAvLyBmbiB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBwYXJ0IG9mIHRoZSBrZXlcclxuICAgIGxldCBlbnRpdHlUeXBlID0gKHBhcmVudCBhcyBFbnRpdHkpLmVudGl0eVR5cGU7XHJcbiAgICBsZXQga2V5UHJvcHMgPSBlbnRpdHlUeXBlLmtleVByb3BlcnRpZXM7XHJcbiAgICBsZXQgdmFsdWVzID0ga2V5UHJvcHMubWFwKGZ1bmN0aW9uIChwKSB7XHJcbiAgICAgIGlmIChwID09PSBwcm9wZXJ0eSkge1xyXG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcGFyZW50LmdldFByb3BlcnR5KHAubmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbGV0IG5ld0tleSA9IG5ldyBFbnRpdHlLZXkoZW50aXR5VHlwZSwgdmFsdWVzKTtcclxuICAgIGlmIChlbnRpdHlNYW5hZ2VyLmdldEVudGl0eUJ5S2V5KG5ld0tleSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IHdpdGggdGhpcyBrZXkgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGU6IFwiICsgbmV3S2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IG9sZEtleSA9IChwYXJlbnQgYXMgRW50aXR5KS5lbnRpdHlBc3BlY3QuZ2V0S2V5KCk7XHJcbiAgICBsZXQgZWcgPSBlbnRpdHlNYW5hZ2VyLl9maW5kRW50aXR5R3JvdXAoZW50aXR5VHlwZSk7XHJcbiAgICBlZy5fcmVwbGFjZUtleShvbGRLZXksIG5ld0tleSk7XHJcbiAgfVxyXG5cclxuICAvLyBwcm9jZXNzIHJlbGF0ZWQgdXBkYXRlcyAoIHRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCkgZmlyc3Qgc28gdGhhdCBjb2xsZWN0aW9uIGR1cHMgY2hlY2sgd29ya3MgcHJvcGVybHkuXHJcbiAgLy8gdXBkYXRlIGludmVyc2UgcmVsYXRpb25zaGlwXHJcblxyXG4gIGxldCByZWxhdGVkTmF2UHJvcCA9IHByb3BlcnR5LnJlbGF0ZWROYXZpZ2F0aW9uUHJvcGVydHk7XHJcbiAgaWYgKHJlbGF0ZWROYXZQcm9wICYmIGVudGl0eU1hbmFnZXIpIHtcclxuICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgLy8gb3JkZXJEZXRhaWwub3JkZXJJZCA8LSBuZXdPcmRlcklkIHx8IG51bGxcclxuICAgIC8vICAgID09PiBvcmRlckRldGFpbC5vcmRlciA9IGxvb2t1cE9yZGVyKG5ld09yZGVySWQpXHJcbiAgICAvLyAgICA9PT4gKHNlZSBzZXQgbmF2UHJvcCBhYm92ZSlcclxuICAgIC8vICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAvLyBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXJJZCA8LSBuZXdPcmRlcklkIHx8IG51bGxcclxuICAgIC8vICAgID09PiBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXIgPSBsb29rdXBPcmRlcihuZXdPcmRlcklkKVxyXG4gICAgLy8gICAgPT0+IChzZWUgc2V0IG5hdlByb3AgYWJvdmUpXHJcblxyXG4gICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgbGV0IHJlbGF0ZWRFbnRpdHk6IEVudGl0eTtcclxuICAgICAgbGV0IGtleTogRW50aXR5S2V5O1xyXG4gICAgICBpZiAocmVsYXRlZE5hdlByb3AuaW52Rm9yZWlnbktleU5hbWVzLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIHByb3BlcnR5IGlzIHJlbGF0ZWQgYnkgZmllbGQgd2hpY2ggaXMgbm90IHRoZSBQS1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IEVudGl0eVF1ZXJ5KHJlbGF0ZWROYXZQcm9wLmVudGl0eVR5cGUuZGVmYXVsdFJlc291cmNlTmFtZSkud2hlcmUocmVsYXRlZE5hdlByb3AuaW52Rm9yZWlnbktleU5hbWVzWzBdLCAnZXEnLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgcXJlc3VsdCA9IGVudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSk7XHJcbiAgICAgICAgaWYgKHFyZXN1bHQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICByZWxhdGVkRW50aXR5ID0gcXJlc3VsdFswXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcHJvcGVydHkgaXMgcmVsYXRlZCBieSB0aGUgUEtcclxuICAgICAgICBrZXkgPSBuZXcgRW50aXR5S2V5KHJlbGF0ZWROYXZQcm9wLmVudGl0eVR5cGUsIFtuZXdWYWx1ZV0pO1xyXG4gICAgICAgIHJlbGF0ZWRFbnRpdHkgPSBlbnRpdHlNYW5hZ2VyLmdldEVudGl0eUJ5S2V5KGtleSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZWxhdGVkRW50aXR5KSB7XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWROYXZQcm9wLm5hbWUsIHJlbGF0ZWRFbnRpdHkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGl0IG1heSBub3QgaGF2ZSBiZWVuIGZldGNoZWQgeWV0IGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBhZGQgaXQgYXMgYW4gdW5hdHRhY2hlZENoaWxkLlxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgIC8vIFRPRE8gY3VycmVudGx5IF9saW5rUmVsYXRlZGVudGl0aWVzIG9ubHkgd29ya3Mgd2l0aCBQSyByZWxhdGlvbnMsIHNvIHdlIG9ubHkgYWRkIHRob3NlLlxyXG4gICAgICAgICAgZW50aXR5TWFuYWdlci5fdW5hdHRhY2hlZENoaWxkcmVuTWFwLmFkZENoaWxkKGtleSwgcmVsYXRlZE5hdlByb3AsIHBhcmVudCBhcyBFbnRpdHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnQuc2V0UHJvcGVydHkocmVsYXRlZE5hdlByb3AubmFtZSwgbnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkTmF2UHJvcC5uYW1lLCBudWxsKTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHByb3BlcnR5LmludmVyc2VOYXZpZ2F0aW9uUHJvcGVydHkgJiYgZW50aXR5TWFuYWdlciAmJiAhZW50aXR5TWFuYWdlci5faW5LZXlGaXh1cCkge1xyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPm46IHJlZ2lvbiAtPiB0ZXJyaXRvcmllc1xyXG4gICAgLy8gdGVycml0b3J5LnJlZ2lvbklkIDwtIG5ld1JlZ2lvbklkXHJcbiAgICAvLyAgICA9PT4gbG9va3VwUmVnaW9uKG5ld1JlZ2lvbklkKS50ZXJyaXRvcmllcy5wdXNoKHRlcnJpdG9yeSlcclxuICAgIC8vICAgICAgICAgICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVySWQgPC0gbmV3T3JkZXJJZFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cE9yZGVyKG5ld09yZGVySWQpLmludGVybmF0aW9uYWxPcmRlciA9IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gICAgICAgICAgICAgICAgYW5kXHJcbiAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+bjogcmVnaW9uIC0+IHRlcnJpdG9yaWVzXHJcbiAgICAvLyB0ZXJyaXRvcnkucmVnaW9uSWQgPC0gbnVsbFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cFJlZ2lvbih0ZXJyaXRvcnkub2xkUmVnaW9uSWQpLnRlcnJpdG9yaWVzLnJlbW92ZShvbGRUZXJyaXRvcnkpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgYW5kXHJcbiAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAvLyBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXJJZCA8LSBudWxsXHJcbiAgICAvLyAgICA9PT4gbG9va3VwT3JkZXIoaW50ZXJuYXRpb25hbE9yZGVyLm9sZE9yZGVySWQpLmludGVybmF0aW9uYWxPcmRlciA9IG51bGw7XHJcblxyXG4gICAgbGV0IGludk5hdlByb3AgPSBwcm9wZXJ0eS5pbnZlcnNlTmF2aWdhdGlvblByb3BlcnR5O1xyXG5cclxuICAgIGlmIChvbGRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBrZXkgPSBuZXcgRW50aXR5S2V5KGludk5hdlByb3AucGFyZW50VHlwZSwgW29sZFZhbHVlXSk7XHJcbiAgICAgIGxldCByZWxhdGVkRW50aXR5ID0gZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShrZXkpO1xyXG4gICAgICBpZiAocmVsYXRlZEVudGl0eSkge1xyXG4gICAgICAgIGlmIChpbnZOYXZQcm9wLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgICByZWxhdGVkRW50aXR5LnNldFByb3BlcnR5KGludk5hdlByb3AubmFtZSwgbnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHJlbW92ZSAndGhpcycgZnJvbSBvbGQgcmVsYXRlZCBuYXYgcHJvcFxyXG4gICAgICAgICAgbGV0IHJlbGF0ZWRBcnJheSA9IHJlbGF0ZWRFbnRpdHkuZ2V0UHJvcGVydHkoaW52TmF2UHJvcC5uYW1lKTtcclxuICAgICAgICAgIC8vIGFyci5zcGxpY2UoYXJyLmluZGV4T2YodmFsdWVfdG9fcmVtb3ZlKSwgMSk7XHJcbiAgICAgICAgICByZWxhdGVkQXJyYXkuc3BsaWNlKHJlbGF0ZWRBcnJheS5pbmRleE9mKHBhcmVudCksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBrZXkgPSBuZXcgRW50aXR5S2V5KGludk5hdlByb3AucGFyZW50VHlwZSwgW25ld1ZhbHVlXSk7XHJcbiAgICAgIGxldCByZWxhdGVkRW50aXR5ID0gZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShrZXkpO1xyXG5cclxuICAgICAgaWYgKHJlbGF0ZWRFbnRpdHkpIHtcclxuICAgICAgICBpZiAoaW52TmF2UHJvcC5pc1NjYWxhcikge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eS5zZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUsIHBhcmVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkuZ2V0UHJvcGVydHkoaW52TmF2UHJvcC5uYW1lKS5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGl0IG1heSBub3QgaGF2ZSBiZWVuIGZldGNoZWQgeWV0IGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBhZGQgaXQgYXMgYW4gdW5hdHRhY2hlZENoaWxkLlxyXG4gICAgICAgIGVudGl0eU1hbmFnZXIuX3VuYXR0YWNoZWRDaGlsZHJlbk1hcC5hZGRDaGlsZChrZXksIGludk5hdlByb3AsIHBhcmVudCBhcyBFbnRpdHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmF3QWNjZXNzb3JGbihuZXdWYWx1ZSk7XHJcblxyXG4gIHVwZGF0ZVN0YXRlQW5kVmFsaWRhdGUoY29udGV4dCk7XHJcblxyXG4gIC8vIGlmIChwcm9wZXJ0eS5pc1BhcnRPZktleSAmJiAoIXRoaXMuY29tcGxleEFzcGVjdCkpIHtcclxuICBpZiAocHJvcGVydHkuaXNQYXJ0T2ZLZXkpIHtcclxuICAgIC8vIHByb3BvZ2F0ZSBwayBjaGFuZ2UgdG8gYWxsIHJlbGF0ZWQgZW50aXRpZXM7XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IChwYXJlbnQgYXMgRW50aXR5KS5lbnRpdHlUeXBlO1xyXG4gICAgbGV0IHByb3BlcnR5SXggPSBlbnRpdHlUeXBlLmtleVByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eSk7XHJcbiAgICAvLyB0aGlzIHBhcnQgaGFuZGxlcyBvcmRlci5vcmRlcklkID0+IG9yZGVyRGV0YWlsLm9yZGVySWRcclxuICAgIC8vIGJ1dCB3b24ndCBoYW5kbGUgcHJvZHVjdC5wcm9kdWN0SWQgPT4gb3JkZXJEZXRhaWwucHJvZHVjdElkIGJlY2F1c2UgcHJvZHVjdFxyXG4gICAgLy8gZG9lc24ndCBoYXZlIGFuIG9yZGVyRGV0YWlscyBwcm9wZXJ0eS5cclxuICAgIGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAobnApIHtcclxuICAgICAgbGV0IGludmVyc2VOcCA9IG5wLmludmVyc2U7XHJcbiAgICAgIGxldCBma05hbWVzID0gaW52ZXJzZU5wID8gaW52ZXJzZU5wLmZvcmVpZ25LZXlOYW1lcyA6IG5wLmludkZvcmVpZ25LZXlOYW1lcztcclxuXHJcbiAgICAgIGlmIChma05hbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICBsZXQgbnBWYWx1ZSA9IHBhcmVudC5nZXRQcm9wZXJ0eShucC5uYW1lKTtcclxuICAgICAgaWYgKCFucFZhbHVlKSByZXR1cm47XHJcbiAgICAgIGxldCBma05hbWUgPSBma05hbWVzW3Byb3BlcnR5SXhdO1xyXG4gICAgICBpZiAobnAuaXNTY2FsYXIpIHtcclxuICAgICAgICBucFZhbHVlLnNldFByb3BlcnR5KGZrTmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5wVmFsdWUuc2xpY2UoMCkuZm9yRWFjaChmdW5jdGlvbiAoaXY6IGFueSkge1xyXG4gICAgICAgICAgaXYuc2V0UHJvcGVydHkoZmtOYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcyBoYW5kbGVzIHVuaWRpcmVjdGlvbmFsIHByb2JsZW1zIG5vdCBjb3ZlcmVkIGFib3ZlLlxyXG4gICAgaWYgKGVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgbGV0IGludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcyA9IGVudGl0eVR5cGUuaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzO1xyXG4gICAgICBsZXQgYmFzZUVudGl0eVR5cGUgPSBlbnRpdHlUeXBlLmJhc2VFbnRpdHlUeXBlO1xyXG4gICAgICB3aGlsZSAoYmFzZUVudGl0eVR5cGUpIHtcclxuICAgICAgICBpbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMgPSBpbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMuY29uY2F0KGJhc2VFbnRpdHlUeXBlLmludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcyk7XHJcbiAgICAgICAgYmFzZUVudGl0eVR5cGUgPSBiYXNlRW50aXR5VHlwZS5iYXNlRW50aXR5VHlwZTtcclxuICAgICAgfVxyXG4gICAgICBpbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMuZm9yRWFjaCgoaW52RmtQcm9wKSA9PiB7XHJcbiAgICAgICAgaWYgKGludkZrUHJvcC5yZWxhdGVkTmF2aWdhdGlvblByb3BlcnR5IS5pbnZlcnNlID09IG51bGwpIHtcclxuICAgICAgICAgIC8vIHRoaXMgbmV4dCBzdGVwIG1heSBiZSBzbG93IC0gaXQgaXRlcmF0ZXMgb3ZlciBhbGwgb2YgdGhlIGVudGl0aWVzIGluIGEgZ3JvdXA7XHJcbiAgICAgICAgICAvLyBob3BlZnVsbHkgaXQgZG9lc24ndCBoYXBwZW4gb2Z0ZW4uXHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyIS5fdXBkYXRlRmtWYWwoaW52RmtQcm9wLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW5zdXJlIHRoYXQgY2FjaGVkIGtleSBpcyB1cGRhdGVkLlxyXG4gICAgZW50aXR5QXNwZWN0LmdldEtleSh0cnVlKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldERwVmFsdWVDb21wbGV4KGNvbnRleHQ6IElDb250ZXh0LCByYXdBY2Nlc3NvckZuOiBGdW5jdGlvbikge1xyXG4gIGxldCBwcm9wZXJ0eSA9IGNvbnRleHQucHJvcGVydHkgYXMgRGF0YVByb3BlcnR5O1xyXG4gIGxldCBvbGRWYWx1ZSA9IGNvbnRleHQub2xkVmFsdWU7XHJcbiAgbGV0IG5ld1ZhbHVlID0gY29udGV4dC5uZXdWYWx1ZTtcclxuXHJcbiAgLy8gVG8gZ2V0IGhlcmUgaXQgbXVzdCBiZSBhIENvbXBsZXhQcm9wZXJ0eVxyXG4gIC8vICdkYXRhVHlwZScgd2lsbCBiZSBhIGNvbXBsZXhUeXBlXHJcbiAgbGV0IGRhdGFUeXBlID0gcHJvcGVydHkuZGF0YVR5cGUgYXMgQ29tcGxleFR5cGU7XHJcbiAgaWYgKHByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb3JlLmZvcm1hdFN0cmluZyhcIllvdSBjYW5ub3Qgc2V0IHRoZSAnJTEnIHByb3BlcnR5IHRvIG51bGwgYmVjYXVzZSBpdHMgZGF0YXR5cGUgaXMgdGhlIENvbXBsZXhUeXBlOiAnJTInXCIsIHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LmRhdGFUeXBlLm5hbWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW9sZFZhbHVlKSB7XHJcbiAgICAgIGxldCBjdG9yID0gZGF0YVR5cGUuZ2V0Q3RvcigpO1xyXG4gICAgICBvbGRWYWx1ZSA9IG5ldyBjdG9yKCk7XHJcbiAgICAgIHJhd0FjY2Vzc29yRm4ob2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZGF0YVR5cGUuZGF0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZHApIHtcclxuICAgICAgbGV0IHBuID0gZHAubmFtZTtcclxuICAgICAgbGV0IG52ID0gbmV3VmFsdWUuZ2V0UHJvcGVydHkocG4pO1xyXG4gICAgICBvbGRWYWx1ZS5zZXRQcm9wZXJ0eShwbiwgbnYpO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihjb3JlLmZvcm1hdFN0cmluZyhcIllvdSBjYW5ub3Qgc2V0IHRoZSBub24tc2NhbGFyIGNvbXBsZXggcHJvcGVydHk6ICclMScgb24gdGhlIHR5cGU6ICclMicuXCIgK1xyXG4gICAgICAgICAgICBcIkluc3RlYWQgZ2V0IHRoZSBwcm9wZXJ0eSBhbmQgdXNlIGFycmF5IGZ1bmN0aW9ucyBsaWtlICdwdXNoJyBvciAnc3BsaWNlJyB0byBjaGFuZ2UgaXRzIGNvbnRlbnRzLlwiLFxyXG4gICAgICAgIHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LnBhcmVudFR5cGUubmFtZSkpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIHNldE5wVmFsdWUoY29udGV4dDogSUNvbnRleHQsIHJhd0FjY2Vzc29yRm46IEZ1bmN0aW9uKSB7XHJcblxyXG4gIGxldCBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCBhcyBFbnRpdHk7XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHk7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9IGNvbnRleHQuZW50aXR5QXNwZWN0O1xyXG4gIGxldCBvbGRWYWx1ZSA9IGNvbnRleHQub2xkVmFsdWU7XHJcbiAgbGV0IG5ld1ZhbHVlID0gY29udGV4dC5uZXdWYWx1ZTtcclxuXHJcbiAgaWYgKCFwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm9uc2NhbGFyIG5hdmlnYXRpb24gcHJvcGVydGllcyBhcmUgcmVhZG9ubHkgLSBlbnRpdGllcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBidXQgdGhlIGNvbGxlY3Rpb24gbWF5IG5vdCBiZSBjaGFuZ2VkLlwiKTtcclxuICB9XHJcblxyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGludmVyc2VQcm9wID0gcHJvcGVydHkuaW52ZXJzZTtcclxuXHJcbiAgLy8gbWFuYWdlIGF0dGFjaG1lbnQgLVxyXG4gIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICBpZiAoIW5ld1ZhbHVlLmVudGl0eUFzcGVjdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3QXNwZWN0ID0gbmV3VmFsdWUuZW50aXR5QXNwZWN0O1xyXG4gICAgaWYgKGVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgaWYgKG5ld0FzcGVjdC5lbnRpdHlTdGF0ZS5pc0RldGFjaGVkKCkpIHtcclxuICAgICAgICBpZiAoIWVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyLmF0dGFjaEVudGl0eShuZXdWYWx1ZSwgRW50aXR5U3RhdGUuQWRkZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAobmV3QXNwZWN0LmVudGl0eU1hbmFnZXIgIT09IGVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIEVudGl0eSBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYW4gZW50aXR5IGluIGFub3RoZXIgRW50aXR5TWFuYWdlci4gT25lIG9mIHRoZSB0d28gZW50aXRpZXMgbXVzdCBiZSBkZXRhY2hlZCBmaXJzdC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobmV3QXNwZWN0ICYmIG5ld0FzcGVjdC5lbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAgICAgZW50aXR5TWFuYWdlciA9IG5ld0FzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gICAgICAgIGlmICghZW50aXR5TWFuYWdlciEuaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyIS5hdHRhY2hFbnRpdHkoZW50aXR5QXNwZWN0LmVudGl0eSEsIEVudGl0eVN0YXRlLkFkZGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHByb2Nlc3MgcmVsYXRlZCB1cGRhdGVzICggdGhlIGludmVyc2UgcmVsYXRpb25zaGlwKSBmaXJzdCBzbyB0aGF0IGNvbGxlY3Rpb24gZHVwcyBjaGVjayB3b3JrcyBwcm9wZXJseS5cclxuICAvLyB1cGRhdGUgaW52ZXJzZSByZWxhdGlvbnNoaXBcclxuICBpZiAoaW52ZXJzZVByb3ApIHtcclxuICAgIC8vL1xyXG4gICAgaWYgKGludmVyc2VQcm9wLmlzU2NhbGFyKSB7XHJcbiAgICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5pbnRlcm5hdGlvbmFsT3JkZXIgPC0gaW50ZXJuYXRpb25hbE9yZGVyIHx8IG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGRJbnRlcm5hdGlvbmFsT3JkZXIub3JkZXIgPSBudWxsKVxyXG4gICAgICAvLyAgICA9PT4gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVyID0gb3JkZXJcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAvLyBUT0RPOiBudWxsIC0+IE51bGxFbnRpdHkgbGF0ZXJcclxuICAgICAgICBvbGRWYWx1ZS5zZXRQcm9wZXJ0eShpbnZlcnNlUHJvcC5uYW1lLCBudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIG5ld1ZhbHVlLnNldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUsIHBhcmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LSBuZXdPcmRlciB8fCBudWxsXHJcbiAgICAgIC8vICAgID09PiAob2xkT3JkZXIpLm9yZGVyRGV0YWlscy5yZW1vdmUob3JkZXJEZXRhaWwpXHJcbiAgICAgIC8vICAgID09PiBvcmRlci5vcmRlckRldGFpbHMucHVzaChuZXdPcmRlcilcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgb2xkU2libGluZ3MgPSBvbGRWYWx1ZS5nZXRQcm9wZXJ0eShpbnZlcnNlUHJvcC5uYW1lKTtcclxuICAgICAgICBsZXQgaXggPSBvbGRTaWJsaW5ncy5pbmRleE9mKHBhcmVudCk7XHJcbiAgICAgICAgaWYgKGl4ICE9PSAtMSkge1xyXG4gICAgICAgICAgb2xkU2libGluZ3Muc3BsaWNlKGl4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgc2libGluZ3MgPSBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShpbnZlcnNlUHJvcC5uYW1lKTtcclxuICAgICAgICAvLyByZWN1cnNpb24gY2hlY2sgaWYgYWxyZWFkeSBpbiB0aGUgY29sbGVjdGlvbiBpcyBwZXJmb3JtZWQgYnkgdGhlIHJlbGF0aW9uQXJyYXlcclxuICAgICAgICBzaWJsaW5ncy5wdXNoKHBhcmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHByb3BlcnR5LmludkZvcmVpZ25LZXlOYW1lcyAmJiBlbnRpdHlNYW5hZ2VyICYmICFlbnRpdHlNYW5hZ2VyLl9pbktleUZpeHVwKSB7XHJcbiAgICBsZXQgaW52Rm9yZWlnbktleU5hbWVzID0gcHJvcGVydHkuaW52Rm9yZWlnbktleU5hbWVzO1xyXG4gICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5JbnRlcm5hdGlvbmFsT3JkZXIgPC0gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vICAgID09PiBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXJJZCA9IG9yZGVySWRcclxuICAgICAgLy8gICAgICBhbmRcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LXh4eCBuZXdPcmRlclxyXG4gICAgICAvLyAgICA9PT4gQ0FOJ1QgSEFQUEVOIGJlY2F1c2UgaWYgdW5pZGlyZWN0aW9uYWwgYmVjYXVzZSBvcmRlckRldGFpbCB3aWxsIG5vdCBoYXZlIGFuIG9yZGVyIHByb3BcclxuICAgICAgbGV0IHBrVmFsdWVzID0gcGFyZW50LmVudGl0eUFzcGVjdC5nZXRLZXkoKS52YWx1ZXM7XHJcbiAgICAgIGludkZvcmVpZ25LZXlOYW1lcy5mb3JFYWNoKCAoZmtOYW1lLCBpKSA9PiB7XHJcbiAgICAgICAgbmV3VmFsdWUhLnNldFByb3BlcnR5KGZrTmFtZSwgcGtWYWx1ZXNbaV0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIG5hdlByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgICAgLy8gb3JkZXIuaW50ZXJuYXRpb25hbE9yZGVyIDwtIG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGQgaW50ZXJuYXRpb25hbE9yZGVyKS5vcmRlcklkID0gbnVsbFxyXG4gICAgICAvLyAgICAgICAgYW5kXHJcbiAgICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIG5hdlByb3BlcnR5OiAxLT5uOiBvcmRlciAtPiBvcmRlckRldGFpbHNcclxuICAgICAgLy8gb3JkZXJEZXRhaWwub3JkZXIgPC14eHggbmV3T3JkZXJcclxuICAgICAgLy8gICAgPT0+IENBTidUIEhBUFBFTiBiZWNhdXNlIGlmIHVuaWRpcmVjdGlvbmFsIGJlY2F1c2Ugb3JkZXJEZXRhaWwgd2lsbCBub3QgaGF2ZSBhbiBvcmRlciBwcm9wXHJcbiAgICAgIGlmIChvbGRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaW52Rm9yZWlnbktleU5hbWVzLmZvckVhY2goIChma05hbWUpID0+IHtcclxuICAgICAgICAgIGxldCBma1Byb3AgPSBvbGRWYWx1ZS5lbnRpdHlUeXBlLmdldFByb3BlcnR5KGZrTmFtZSk7XHJcbiAgICAgICAgICBpZiAoIWZrUHJvcC5pc1BhcnRPZktleSkge1xyXG4gICAgICAgICAgICAvLyBkb24ndCB1cGRhdGUgd2l0aCBudWxsIGlmIGZrIGlzIHBhcnQgb2YgdGhlIGtleVxyXG4gICAgICAgICAgICBvbGRWYWx1ZS5zZXRQcm9wZXJ0eShma05hbWUsIG51bGwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYXdBY2Nlc3NvckZuKG5ld1ZhbHVlKTtcclxuXHJcbiAgdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0KTtcclxuXHJcbiAgLy8gdXBkYXRlIGZrIGRhdGEgcHJvcGVydHkgLSB0aGlzIGNhbiBvbmx5IG9jY3VyIGlmIHRoaXMgbmF2UHJvcGVydHkgaGFzXHJcbiAgLy8gYSBjb3JyZXNwb25kaW5nIGZrIG9uIHRoaXMgZW50aXR5LlxyXG4gIGlmIChwcm9wZXJ0eS5yZWxhdGVkRGF0YVByb3BlcnRpZXMpIHtcclxuICAgIGxldCBlbnRpdHlTdGF0ZSA9IGVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICAgIC8vIGlmIGVpdGhlciBzaWRlIG9mIG5hdiBwcm9wIGlzIGRldGFjaGVkIGRvbid0IGNsZWFyIGZrcy4gTm90ZTogb2xkVmFsdWUgaW4gbmV4dCBsaW5lIGNhbm5vdCBiZSBudWxsIHNvIG5vIGNoZWNrIGlzIG5lZWRlZC5cclxuICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsICYmIChlbnRpdHlTdGF0ZS5pc0RldGFjaGVkKCkgfHwgb2xkVmFsdWUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkpIHJldHVybjtcclxuICAgIGlmIChlbnRpdHlTdGF0ZS5pc0RlbGV0ZWQoKSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIHdlIG1heSBoYXZlIGludmVyc2UgcHJvcHMgaW5kaWNhdGluZyB0aGUgcmVsYXRlZCBwcm9wIG9uIHRoZSBvdGhlciBlbnRpdHksIGlmIGl0IGlzIG5vdCB0aGUgb3RoZXIgZW50aXR5J3MgUEtcclxuICAgIGxldCBpbnZlcnNlS2V5UHJvcHMgPSBwcm9wZXJ0eS5pbnZGb3JlaWduS2V5TmFtZXM7XHJcbiAgICBpZiAoIShpbnZlcnNlS2V5UHJvcHMgJiYgaW52ZXJzZUtleVByb3BzLmxlbmd0aCkpIHtcclxuICAgICAgLy8gb3RoZXJ3aXNlLCB0aGlzIHByb3AgaXMgcmVsYXRlZCB0byB0aGUgb3RoZXIgZW50aXR5J3MgUEtcclxuICAgICAgaW52ZXJzZUtleVByb3BzID0gcHJvcGVydHkuZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzLm1hcChrID0+IGsubmFtZSk7XHJcbiAgICB9XHJcbiAgICBpbnZlcnNlS2V5UHJvcHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5UHJvcCwgaSkge1xyXG4gICAgICBsZXQgcmVsYXRlZERhdGFQcm9wID0gcHJvcGVydHkucmVsYXRlZERhdGFQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAvLyBEbyBub3QgdHJhc2ggcmVsYXRlZCBwcm9wZXJ0eSBpZiBpdCBpcyBwYXJ0IG9mIHRoYXQgZW50aXR5J3Mga2V5XHJcbiAgICAgIGlmIChuZXdWYWx1ZSB8fCAhcmVsYXRlZERhdGFQcm9wLmlzUGFydE9mS2V5KSB7XHJcbiAgICAgICAgbGV0IHJlbGF0ZWRWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuZ2V0UHJvcGVydHkoa2V5UHJvcCkgOiByZWxhdGVkRGF0YVByb3AuZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkRGF0YVByb3AubmFtZSwgcmVsYXRlZFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwb3N0Q2hhbmdlRXZlbnRzKGNvbnRleHQ6IElDb250ZXh0KSB7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9IGNvbnRleHQuZW50aXR5QXNwZWN0O1xyXG5cclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGxldCBlbnRpdHkgPSBlbnRpdHlBc3BlY3QuZW50aXR5O1xyXG5cclxuICBsZXQgcHJvcENoYW5nZWRBcmdzID0geyBlbnRpdHk6IGVudGl0eSEsIHBhcmVudDogY29udGV4dC5wYXJlbnQsIHByb3BlcnR5OiBjb250ZXh0LnByb3BlcnR5LCBwcm9wZXJ0eU5hbWU6IGNvbnRleHQucHJvcGVydHlOYW1lLCBvbGRWYWx1ZTogY29udGV4dC5vbGRWYWx1ZSwgbmV3VmFsdWU6IGNvbnRleHQubmV3VmFsdWUgfTtcclxuICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgLy8gcHJvcGVydHlDaGFuZ2VkIHdpbGwgYmUgZmlyZWQgZHVyaW5nIGxvYWRpbmcgYnV0IHdlIG9ubHkgd2FudCB0byBmaXJlIGl0IG9uY2UgcGVyIGVudGl0eSwgbm90IG9uY2UgcGVyIHByb3BlcnR5LlxyXG4gICAgLy8gc28gcHJvcGVydHlDaGFuZ2VkIGlzIGZpcmVkIGluIHRoZSBlbnRpdHlNYW5hZ2VyIG1lcmdlRW50aXR5IG1ldGhvZCBpZiBub3QgZmlyZWQgaGVyZS5cclxuICAgIGlmICgoIWVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSAmJiAoIWVudGl0eU1hbmFnZXIuaXNSZWplY3RpbmdDaGFuZ2VzKSkge1xyXG4gICAgICBlbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnB1Ymxpc2gocHJvcENoYW5nZWRBcmdzKTtcclxuICAgICAgLy8gZG9uJ3QgZmlyZSBlbnRpdHlDaGFuZ2VkIGV2ZW50IGlmIHByb3BlcnR5Q2hhbmdlZCBpcyBzdXBwcmVzc2VkLlxyXG4gICAgICBlbnRpdHlNYW5hZ2VyLmVudGl0eUNoYW5nZWQucHVibGlzaCh7IGVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLlByb3BlcnR5Q2hhbmdlLCBlbnRpdHk6IGVudGl0eSwgYXJnczogcHJvcENoYW5nZWRBcmdzIH0pO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBlbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnB1Ymxpc2gocHJvcENoYW5nZWRBcmdzKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlQW5kVmFsaWRhdGUoY29udGV4dDogSUNvbnRleHQpIHtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuICBpZiAoZW50aXR5TWFuYWdlciA9PSBudWxsIHx8IGVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSByZXR1cm47XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5pc1VuY2hhbmdlZCgpICYmICFwcm9wZXJ0eS5pc1VubWFwcGVkKSB7XHJcbiAgICBlbnRpdHlBc3BlY3Quc2V0TW9kaWZpZWQoKTtcclxuICB9XHJcblxyXG4gIGlmIChlbnRpdHlNYW5hZ2VyLnZhbGlkYXRpb25PcHRpb25zLnZhbGlkYXRlT25Qcm9wZXJ0eUNoYW5nZSkge1xyXG4gICAgLy8gZW50aXR5QXNwZWN0LmVudGl0eSBpcyBOT1QgdGhlIHNhbWUgYXMgcGFyZW50IGluIHRoZSBjb2RlIGJlbG93LiBJdCdzIHVzZSBpcyBkZWxpYmVyYXRlLlxyXG4gICAgZW50aXR5QXNwZWN0Ll92YWxpZGF0ZVByb3BlcnR5KGNvbnRleHQubmV3VmFsdWUsXHJcbiAgICAgICAgeyBlbnRpdHk6IGVudGl0eUFzcGVjdC5lbnRpdHksIHByb3BlcnR5OiBwcm9wZXJ0eSwgcHJvcGVydHlOYW1lOiBjb250ZXh0LnByb3BlcnR5TmFtZSwgb2xkVmFsdWU6IGNvbnRleHQub2xkVmFsdWUgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -3,30 +3,6 @@ import { BreezeEnum } from './enum';
3
3
 
4
4
  */
5
5
  export class EntityAction extends BreezeEnum {
6
- /** Entity was attached via an AttachEntity call. */
7
- static Attach = new EntityAction({ _isAttach: true });
8
- /** Entity was attached as a result of a query. */
9
- static AttachOnQuery = new EntityAction({ _isAttach: true });
10
- /** Entity was attached as a result of an import. */
11
- static AttachOnImport = new EntityAction({ _isAttach: true });
12
- /** Entity was detached */
13
- static Detach = new EntityAction({ _isDetach: true });
14
- /** Properties on the entity were merged as a result of a query. */
15
- static MergeOnQuery = new EntityAction({ _isModification: true });
16
- /** Properties on the entity were merged as a result of an import. */
17
- static MergeOnImport = new EntityAction({ _isModification: true });
18
- /** Properties on the entity were merged as a result of a save */
19
- static MergeOnSave = new EntityAction({ _isModification: true });
20
- /** A property on the entity was changed. */
21
- static PropertyChange = new EntityAction({ _isModification: true });
22
- /** The EntityState of the entity was changed. */
23
- static EntityStateChange = new EntityAction();
24
- /** AcceptChanges was called on the entity, or its entityState was set to Unmodified. */
25
- static AcceptChanges = new EntityAction();
26
- /** RejectChanges was called on the entity. */
27
- static RejectChanges = new EntityAction({ _isModification: true });
28
- /** The EntityManager was cleared. All entities detached. */
29
- static Clear = new EntityAction({ _isDetach: true });
30
6
  /** Is this an 'attach' operation? ( Attach, AttachOnQuery or AttachOnImport) */
31
7
  isAttach() {
32
8
  return !!this._isAttach;
@@ -40,6 +16,30 @@ export class EntityAction extends BreezeEnum {
40
16
  return !!this._isModification;
41
17
  }
42
18
  }
19
+ /** Entity was attached via an AttachEntity call. */
20
+ EntityAction.Attach = new EntityAction({ _isAttach: true });
21
+ /** Entity was attached as a result of a query. */
22
+ EntityAction.AttachOnQuery = new EntityAction({ _isAttach: true });
23
+ /** Entity was attached as a result of an import. */
24
+ EntityAction.AttachOnImport = new EntityAction({ _isAttach: true });
25
+ /** Entity was detached */
26
+ EntityAction.Detach = new EntityAction({ _isDetach: true });
27
+ /** Properties on the entity were merged as a result of a query. */
28
+ EntityAction.MergeOnQuery = new EntityAction({ _isModification: true });
29
+ /** Properties on the entity were merged as a result of an import. */
30
+ EntityAction.MergeOnImport = new EntityAction({ _isModification: true });
31
+ /** Properties on the entity were merged as a result of a save */
32
+ EntityAction.MergeOnSave = new EntityAction({ _isModification: true });
33
+ /** A property on the entity was changed. */
34
+ EntityAction.PropertyChange = new EntityAction({ _isModification: true });
35
+ /** The EntityState of the entity was changed. */
36
+ EntityAction.EntityStateChange = new EntityAction();
37
+ /** AcceptChanges was called on the entity, or its entityState was set to Unmodified. */
38
+ EntityAction.AcceptChanges = new EntityAction();
39
+ /** RejectChanges was called on the entity. */
40
+ EntityAction.RejectChanges = new EntityAction({ _isModification: true });
41
+ /** The EntityManager was cleared. All entities detached. */
42
+ EntityAction.Clear = new EntityAction({ _isDetach: true });
43
43
  EntityAction.prototype._$typeName = "EntityAction";
44
44
  Error['x'] = EntityAction.resolveSymbols();
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHktYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFbkM7O0VBRUU7QUFFRixNQUFNLE9BQU8sWUFBYSxTQUFRLFVBQVU7SUFFMUMsb0RBQW9EO0lBQ3BELE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RCxtREFBbUQ7SUFDbkQsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQzVELHFEQUFxRDtJQUNyRCxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFN0QsMEJBQTBCO0lBQzFCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV2RCxtRUFBbUU7SUFDbkUsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLHFFQUFxRTtJQUNyRSxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkUsaUVBQWlFO0lBQ2pFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVqRSw0Q0FBNEM7SUFDNUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRW5FLGlEQUFpRDtJQUNqRCxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUU5Qyx3RkFBd0Y7SUFDeEYsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzFDLDhDQUE4QztJQUM5QyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFbEUsNkRBQTZEO0lBQzdELE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQVFwRCxnRkFBZ0Y7SUFDaEYsUUFBUTtRQUNOLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELHFEQUFxRDtJQUNyRCxRQUFRO1FBQ04sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBQ0QscUhBQXFIO0lBQ3JILGNBQWM7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7O0FBRUgsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDO0FBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVlemVFbnVtfSBmcm9tICcuL2VudW0nO1xyXG5cclxuLyoqIEVudGl0eUFjdGlvbiBpcyBhbiAnRW51bScgY29udGFpbmluZyBhbGwgb2YgdGhlIHZhbGlkIGFjdGlvbnMgdGhhdCBjYW4gb2NjdXIgdG8gYW4gJ0VudGl0eScuIFxyXG4gXHJcbiovXHJcblxyXG5leHBvcnQgY2xhc3MgRW50aXR5QWN0aW9uIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcblxyXG4gIC8qKiBFbnRpdHkgd2FzIGF0dGFjaGVkIHZpYSBhbiBBdHRhY2hFbnRpdHkgY2FsbC4gKi9cclxuICBzdGF0aWMgQXR0YWNoID0gbmV3IEVudGl0eUFjdGlvbiggeyBfaXNBdHRhY2g6IHRydWUgfSk7XHJcbiAgLyoqICBFbnRpdHkgd2FzIGF0dGFjaGVkIGFzIGEgcmVzdWx0IG9mIGEgcXVlcnkuICovXHJcbiAgc3RhdGljIEF0dGFjaE9uUXVlcnkgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzQXR0YWNoOiB0cnVlfSk7XHJcbiAgLyoqICBFbnRpdHkgd2FzIGF0dGFjaGVkIGFzIGEgcmVzdWx0IG9mIGFuIGltcG9ydC4gKi9cclxuICBzdGF0aWMgQXR0YWNoT25JbXBvcnQgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzQXR0YWNoOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBFbnRpdHkgd2FzIGRldGFjaGVkICovXHJcbiAgc3RhdGljIERldGFjaCA9IG5ldyBFbnRpdHlBY3Rpb24oIHsgX2lzRGV0YWNoOiB0cnVlIH0pO1xyXG5cclxuICAvKiogUHJvcGVydGllcyBvbiB0aGUgZW50aXR5IHdlcmUgbWVyZ2VkIGFzIGEgcmVzdWx0IG9mIGEgcXVlcnkuICovXHJcbiAgc3RhdGljIE1lcmdlT25RdWVyeSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWUgfSk7XHJcbiAgLyoqIFByb3BlcnRpZXMgb24gdGhlIGVudGl0eSB3ZXJlIG1lcmdlZCBhcyBhIHJlc3VsdCBvZiBhbiBpbXBvcnQuICovXHJcbiAgc3RhdGljIE1lcmdlT25JbXBvcnQgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlIH0pO1xyXG4gIC8qKiBQcm9wZXJ0aWVzIG9uIHRoZSBlbnRpdHkgd2VyZSBtZXJnZWQgYXMgYSByZXN1bHQgb2YgYSBzYXZlICovXHJcbiAgc3RhdGljIE1lcmdlT25TYXZlID0gbmV3IEVudGl0eUFjdGlvbih7IF9pc01vZGlmaWNhdGlvbjogdHJ1ZSB9KTtcclxuXHJcbiAgLyoqIEEgcHJvcGVydHkgb24gdGhlIGVudGl0eSB3YXMgY2hhbmdlZC4gKi9cclxuICBzdGF0aWMgUHJvcGVydHlDaGFuZ2UgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBUaGUgRW50aXR5U3RhdGUgb2YgdGhlIGVudGl0eSB3YXMgY2hhbmdlZC4gKi9cclxuICBzdGF0aWMgRW50aXR5U3RhdGVDaGFuZ2UgPSBuZXcgRW50aXR5QWN0aW9uKCk7XHJcblxyXG4gIC8qKiBBY2NlcHRDaGFuZ2VzIHdhcyBjYWxsZWQgb24gdGhlIGVudGl0eSwgb3IgaXRzIGVudGl0eVN0YXRlIHdhcyBzZXQgdG8gVW5tb2RpZmllZC4gKi9cclxuICBzdGF0aWMgQWNjZXB0Q2hhbmdlcyA9IG5ldyBFbnRpdHlBY3Rpb24oKTtcclxuICAvKiogUmVqZWN0Q2hhbmdlcyB3YXMgY2FsbGVkIG9uIHRoZSBlbnRpdHkuICovXHJcbiAgc3RhdGljIFJlamVjdENoYW5nZXMgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBUaGUgRW50aXR5TWFuYWdlciB3YXMgY2xlYXJlZC4gIEFsbCBlbnRpdGllcyBkZXRhY2hlZC4gKi9cclxuICBzdGF0aWMgQ2xlYXIgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzRGV0YWNoOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIGRlY2xhcmUgX2lzQXR0YWNoPzogYm9vbGVhbjtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBkZWNsYXJlIF9pc0RldGFjaD86IGJvb2xlYW47XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgZGVjbGFyZSBfaXNNb2RpZmljYXRpb246IGJvb2xlYW47XHJcbiAgLyoqIElzIHRoaXMgYW4gJ2F0dGFjaCcgb3BlcmF0aW9uPyAoIEF0dGFjaCwgQXR0YWNoT25RdWVyeSBvciBBdHRhY2hPbkltcG9ydCkgKi9cclxuICBpc0F0dGFjaCgpIHtcclxuICAgIHJldHVybiAhIXRoaXMuX2lzQXR0YWNoO1xyXG4gIH1cclxuICAvKiogSXMgdGhpcyBhICdkZXRhY2gnIG9wZXJhdGlvbj8gKCBEZXRhY2gsIENsZWFyKSAqL1xyXG4gIGlzRGV0YWNoKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5faXNEZXRhY2g7XHJcbiAgfVxyXG4gIC8qKiBJcyB0aGlzIGEgJ21vZGlmaWNhdGlvbicgb3BlcmF0aW9uPyAoIFByb3BlcnR5Q2hhbmdlLCBNZXJnZU9uUXVlcnksIE1lcmdlT25TYXZlLCBNZXJnZU9uSW1wb3J0LCBSZWplY3RDaGFuZ2VzKSAqL1xyXG4gIGlzTW9kaWZpY2F0aW9uKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5faXNNb2RpZmljYXRpb247XHJcbiAgfVxyXG59XHJcbkVudGl0eUFjdGlvbi5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRW50aXR5QWN0aW9uXCI7XHJcbkVycm9yWyd4J10gPSBFbnRpdHlBY3Rpb24ucmVzb2x2ZVN5bWJvbHMoKTtcclxuXHJcblxyXG5cclxuIl19
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRW5DOztFQUVFO0FBRUYsTUFBTSxPQUFPLFlBQWEsU0FBUSxVQUFVO0lBdUMxQyxnRkFBZ0Y7SUFDaEYsUUFBUTtRQUNOLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELHFEQUFxRDtJQUNyRCxRQUFRO1FBQ04sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBQ0QscUhBQXFIO0lBQ3JILGNBQWM7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7O0FBaERELG9EQUFvRDtBQUM3QyxtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdkQsbURBQW1EO0FBQzVDLDBCQUFhLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUM1RCxxREFBcUQ7QUFDOUMsMkJBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBRTdELDBCQUEwQjtBQUNuQixtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFFdkQsbUVBQW1FO0FBQzVELHlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsRSxxRUFBcUU7QUFDOUQsMEJBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGlFQUFpRTtBQUMxRCx3QkFBVyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFFakUsNENBQTRDO0FBQ3JDLDJCQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUVuRSxpREFBaUQ7QUFDMUMsOEJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUU5Qyx3RkFBd0Y7QUFDakYsMEJBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0FBQzFDLDhDQUE4QztBQUN2QywwQkFBYSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFFbEUsNkRBQTZEO0FBQ3RELGtCQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztBQXFCdEQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDO0FBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVlemVFbnVtfSBmcm9tICcuL2VudW0nO1xyXG5cclxuLyoqIEVudGl0eUFjdGlvbiBpcyBhbiAnRW51bScgY29udGFpbmluZyBhbGwgb2YgdGhlIHZhbGlkIGFjdGlvbnMgdGhhdCBjYW4gb2NjdXIgdG8gYW4gJ0VudGl0eScuIFxyXG4gXHJcbiovXHJcblxyXG5leHBvcnQgY2xhc3MgRW50aXR5QWN0aW9uIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcblxyXG4gIC8qKiBFbnRpdHkgd2FzIGF0dGFjaGVkIHZpYSBhbiBBdHRhY2hFbnRpdHkgY2FsbC4gKi9cclxuICBzdGF0aWMgQXR0YWNoID0gbmV3IEVudGl0eUFjdGlvbiggeyBfaXNBdHRhY2g6IHRydWUgfSk7XHJcbiAgLyoqICBFbnRpdHkgd2FzIGF0dGFjaGVkIGFzIGEgcmVzdWx0IG9mIGEgcXVlcnkuICovXHJcbiAgc3RhdGljIEF0dGFjaE9uUXVlcnkgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzQXR0YWNoOiB0cnVlfSk7XHJcbiAgLyoqICBFbnRpdHkgd2FzIGF0dGFjaGVkIGFzIGEgcmVzdWx0IG9mIGFuIGltcG9ydC4gKi9cclxuICBzdGF0aWMgQXR0YWNoT25JbXBvcnQgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzQXR0YWNoOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBFbnRpdHkgd2FzIGRldGFjaGVkICovXHJcbiAgc3RhdGljIERldGFjaCA9IG5ldyBFbnRpdHlBY3Rpb24oIHsgX2lzRGV0YWNoOiB0cnVlIH0pO1xyXG5cclxuICAvKiogUHJvcGVydGllcyBvbiB0aGUgZW50aXR5IHdlcmUgbWVyZ2VkIGFzIGEgcmVzdWx0IG9mIGEgcXVlcnkuICovXHJcbiAgc3RhdGljIE1lcmdlT25RdWVyeSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWUgfSk7XHJcbiAgLyoqIFByb3BlcnRpZXMgb24gdGhlIGVudGl0eSB3ZXJlIG1lcmdlZCBhcyBhIHJlc3VsdCBvZiBhbiBpbXBvcnQuICovXHJcbiAgc3RhdGljIE1lcmdlT25JbXBvcnQgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlIH0pO1xyXG4gIC8qKiBQcm9wZXJ0aWVzIG9uIHRoZSBlbnRpdHkgd2VyZSBtZXJnZWQgYXMgYSByZXN1bHQgb2YgYSBzYXZlICovXHJcbiAgc3RhdGljIE1lcmdlT25TYXZlID0gbmV3IEVudGl0eUFjdGlvbih7IF9pc01vZGlmaWNhdGlvbjogdHJ1ZSB9KTtcclxuXHJcbiAgLyoqIEEgcHJvcGVydHkgb24gdGhlIGVudGl0eSB3YXMgY2hhbmdlZC4gKi9cclxuICBzdGF0aWMgUHJvcGVydHlDaGFuZ2UgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBUaGUgRW50aXR5U3RhdGUgb2YgdGhlIGVudGl0eSB3YXMgY2hhbmdlZC4gKi9cclxuICBzdGF0aWMgRW50aXR5U3RhdGVDaGFuZ2UgPSBuZXcgRW50aXR5QWN0aW9uKCk7XHJcblxyXG4gIC8qKiBBY2NlcHRDaGFuZ2VzIHdhcyBjYWxsZWQgb24gdGhlIGVudGl0eSwgb3IgaXRzIGVudGl0eVN0YXRlIHdhcyBzZXQgdG8gVW5tb2RpZmllZC4gKi9cclxuICBzdGF0aWMgQWNjZXB0Q2hhbmdlcyA9IG5ldyBFbnRpdHlBY3Rpb24oKTtcclxuICAvKiogUmVqZWN0Q2hhbmdlcyB3YXMgY2FsbGVkIG9uIHRoZSBlbnRpdHkuICovXHJcbiAgc3RhdGljIFJlamVjdENoYW5nZXMgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBUaGUgRW50aXR5TWFuYWdlciB3YXMgY2xlYXJlZC4gIEFsbCBlbnRpdGllcyBkZXRhY2hlZC4gKi9cclxuICBzdGF0aWMgQ2xlYXIgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzRGV0YWNoOiB0cnVlfSk7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIGRlY2xhcmUgX2lzQXR0YWNoPzogYm9vbGVhbjtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBkZWNsYXJlIF9pc0RldGFjaD86IGJvb2xlYW47XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgZGVjbGFyZSBfaXNNb2RpZmljYXRpb246IGJvb2xlYW47XHJcbiAgLyoqIElzIHRoaXMgYW4gJ2F0dGFjaCcgb3BlcmF0aW9uPyAoIEF0dGFjaCwgQXR0YWNoT25RdWVyeSBvciBBdHRhY2hPbkltcG9ydCkgKi9cclxuICBpc0F0dGFjaCgpIHtcclxuICAgIHJldHVybiAhIXRoaXMuX2lzQXR0YWNoO1xyXG4gIH1cclxuICAvKiogSXMgdGhpcyBhICdkZXRhY2gnIG9wZXJhdGlvbj8gKCBEZXRhY2gsIENsZWFyKSAqL1xyXG4gIGlzRGV0YWNoKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5faXNEZXRhY2g7XHJcbiAgfVxyXG4gIC8qKiBJcyB0aGlzIGEgJ21vZGlmaWNhdGlvbicgb3BlcmF0aW9uPyAoIFByb3BlcnR5Q2hhbmdlLCBNZXJnZU9uUXVlcnksIE1lcmdlT25TYXZlLCBNZXJnZU9uSW1wb3J0LCBSZWplY3RDaGFuZ2VzKSAqL1xyXG4gIGlzTW9kaWZpY2F0aW9uKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5faXNNb2RpZmljYXRpb247XHJcbiAgfVxyXG59XHJcbkVudGl0eUFjdGlvbi5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRW50aXR5QWN0aW9uXCI7XHJcbkVycm9yWyd4J10gPSBFbnRpdHlBY3Rpb24ucmVzb2x2ZVN5bWJvbHMoKTtcclxuXHJcblxyXG5cclxuIl19