@angular/core 7.2.0-beta.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/bundles/core-testing.umd.js +194 -128
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +10 -10
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +5582 -4512
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +122 -129
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.d.ts +12 -12
  10. package/core.metadata.json +1 -1
  11. package/esm2015/core.externs.js +45 -35
  12. package/esm2015/core.js +12 -13
  13. package/esm2015/index.js +3 -4
  14. package/esm2015/public_api.js +3 -5
  15. package/esm2015/src/application_init.js +22 -10
  16. package/esm2015/src/application_module.js +6 -5
  17. package/esm2015/src/application_ref.js +94 -37
  18. package/esm2015/src/application_tokens.js +21 -16
  19. package/esm2015/src/change_detection/change_detection.js +8 -7
  20. package/esm2015/src/change_detection/change_detection_util.js +2 -4
  21. package/esm2015/src/change_detection/change_detector_ref.js +2 -3
  22. package/esm2015/src/change_detection/constants.js +30 -32
  23. package/esm2015/src/change_detection/differs/default_iterable_differ.js +108 -29
  24. package/esm2015/src/change_detection/differs/default_keyvalue_differ.js +53 -16
  25. package/esm2015/src/change_detection/differs/iterable_differs.js +100 -90
  26. package/esm2015/src/change_detection/differs/keyvalue_differs.js +85 -73
  27. package/esm2015/src/change_detection/pipe_transform.js +10 -5
  28. package/esm2015/src/change_detection.js +7 -3
  29. package/esm2015/src/codegen_private_exports.js +2 -3
  30. package/esm2015/src/console.js +3 -3
  31. package/esm2015/src/core.js +3 -4
  32. package/esm2015/src/core_private_export.js +2 -3
  33. package/esm2015/src/core_render3_private_export.js +13 -7
  34. package/esm2015/src/debug/debug_node.js +132 -90
  35. package/esm2015/src/di/defs.js +59 -50
  36. package/esm2015/src/di/forward_ref.js +5 -6
  37. package/esm2015/src/di/injectable.js +11 -11
  38. package/esm2015/src/di/injection_token.js +10 -6
  39. package/esm2015/src/di/injector.js +53 -43
  40. package/esm2015/src/di/injector_compatibility.js +13 -12
  41. package/esm2015/src/di/metadata.js +22 -13
  42. package/esm2015/src/di/provider.js +137 -120
  43. package/esm2015/src/di/r3_injector.js +127 -57
  44. package/esm2015/src/di/reflective_errors.js +19 -13
  45. package/esm2015/src/di/reflective_injector.js +20 -16
  46. package/esm2015/src/di/reflective_key.js +7 -5
  47. package/esm2015/src/di/reflective_provider.js +21 -20
  48. package/esm2015/src/di/scope.js +5 -5
  49. package/esm2015/src/di/util.js +13 -14
  50. package/esm2015/src/di.js +2 -3
  51. package/esm2015/src/error_handler.js +5 -4
  52. package/esm2015/src/errors.js +7 -8
  53. package/esm2015/src/event_emitter.js +3 -3
  54. package/esm2015/src/i18n/tokens.js +12 -10
  55. package/esm2015/src/is_dev_mode.js +2 -3
  56. package/esm2015/src/ivy_switch.js +2 -3
  57. package/esm2015/src/linker/compiler.js +9 -12
  58. package/esm2015/src/linker/component_factory.js +2 -3
  59. package/esm2015/src/linker/component_factory_resolver.js +24 -10
  60. package/esm2015/src/linker/element_ref.js +5 -3
  61. package/esm2015/src/linker/ng_module_factory.js +6 -5
  62. package/esm2015/src/linker/ng_module_factory_loader.js +63 -16
  63. package/esm2015/src/linker/query_list.js +16 -14
  64. package/esm2015/src/linker/system_js_ng_module_factory_loader.js +12 -5
  65. package/esm2015/src/linker/template_ref.js +2 -3
  66. package/esm2015/src/linker/view_container_ref.js +2 -3
  67. package/esm2015/src/linker/view_ref.js +13 -7
  68. package/esm2015/src/linker.js +3 -3
  69. package/esm2015/src/metadata/di.js +22 -15
  70. package/esm2015/src/metadata/directives.js +33 -19
  71. package/esm2015/src/metadata/lifecycle_hooks.js +81 -66
  72. package/esm2015/src/metadata/ng_module.js +82 -68
  73. package/esm2015/src/metadata/resource_loading.js +4 -3
  74. package/esm2015/src/metadata/view.js +25 -26
  75. package/esm2015/src/metadata.js +6 -3
  76. package/esm2015/src/platform_core_providers.js +5 -5
  77. package/esm2015/src/profile/profile.js +17 -13
  78. package/esm2015/src/profile/wtf_impl.js +36 -16
  79. package/esm2015/src/r3_symbols.js +18 -5
  80. package/esm2015/src/reflection/platform_reflection_capabilities.js +81 -40
  81. package/esm2015/src/reflection/reflection.js +5 -5
  82. package/esm2015/src/reflection/reflection_capabilities.js +38 -27
  83. package/esm2015/src/reflection/reflector.js +2 -3
  84. package/esm2015/src/reflection/types.js +2 -12
  85. package/esm2015/src/render/api.js +67 -47
  86. package/esm2015/src/render.js +3 -3
  87. package/esm2015/src/render3/assert.js +38 -3
  88. package/esm2015/src/render3/bindings.js +111 -0
  89. package/esm2015/src/render3/component.js +88 -77
  90. package/esm2015/src/render3/component_ref.js +86 -56
  91. package/esm2015/src/render3/context_discovery.js +94 -92
  92. package/esm2015/src/render3/definition.js +58 -51
  93. package/esm2015/src/render3/di.js +206 -166
  94. package/esm2015/src/render3/di_setup.js +51 -31
  95. package/esm2015/src/render3/discovery_utils.js +225 -39
  96. package/esm2015/src/render3/empty.js +28 -0
  97. package/esm2015/src/render3/errors.js +11 -15
  98. package/esm2015/src/render3/features/inherit_definition_feature.js +13 -10
  99. package/esm2015/src/render3/features/ng_onchanges_feature.js +15 -12
  100. package/esm2015/src/render3/features/providers_feature.js +2 -3
  101. package/esm2015/src/render3/fields.js +5 -5
  102. package/esm2015/src/render3/global_utils.js +22 -7
  103. package/esm2015/src/render3/global_utils_api.js +13 -7
  104. package/esm2015/src/render3/hooks.js +21 -26
  105. package/esm2015/src/render3/i18n.js +134 -115
  106. package/esm2015/src/render3/index.js +15 -7
  107. package/esm2015/src/render3/instructions.js +938 -813
  108. package/esm2015/src/render3/interfaces/container.js +37 -6
  109. package/esm2015/src/render3/interfaces/context.js +39 -37
  110. package/esm2015/src/render3/interfaces/definition.js +225 -265
  111. package/esm2015/src/render3/interfaces/i18n.js +179 -151
  112. package/esm2015/src/render3/interfaces/injector.js +95 -13
  113. package/esm2015/src/render3/interfaces/node.js +413 -382
  114. package/esm2015/src/render3/interfaces/player.js +78 -37
  115. package/esm2015/src/render3/interfaces/projection.js +5 -10
  116. package/esm2015/src/render3/interfaces/query.js +66 -60
  117. package/esm2015/src/render3/interfaces/renderer.js +292 -117
  118. package/esm2015/src/render3/interfaces/sanitization.js +2 -6
  119. package/esm2015/src/render3/interfaces/styling.js +322 -111
  120. package/esm2015/src/render3/interfaces/view.js +356 -298
  121. package/esm2015/src/render3/jit/compiler_facade.js +10 -4
  122. package/esm2015/src/render3/jit/compiler_facade_interface.js +195 -152
  123. package/esm2015/src/render3/jit/directive.js +26 -16
  124. package/esm2015/src/render3/jit/environment.js +8 -5
  125. package/esm2015/src/render3/jit/injectable.js +7 -10
  126. package/esm2015/src/render3/jit/module.js +309 -25
  127. package/esm2015/src/render3/jit/pipe.js +2 -3
  128. package/esm2015/src/render3/jit/util.js +2 -3
  129. package/esm2015/src/render3/metadata.js +11 -10
  130. package/esm2015/src/render3/ng_dev_mode.js +5 -6
  131. package/esm2015/src/render3/ng_module_ref.js +48 -22
  132. package/esm2015/src/render3/node_assert.js +2 -3
  133. package/esm2015/src/render3/node_manipulation.js +137 -117
  134. package/esm2015/src/render3/node_selector_matcher.js +46 -19
  135. package/esm2015/src/render3/pipe.js +36 -21
  136. package/esm2015/src/render3/players.js +17 -12
  137. package/esm2015/src/render3/pure_function.js +86 -39
  138. package/esm2015/src/render3/query.js +93 -80
  139. package/esm2015/src/render3/state.js +88 -203
  140. package/esm2015/src/render3/styling/class_and_style_bindings.js +963 -249
  141. package/esm2015/src/render3/styling/core_player_handler.js +6 -4
  142. package/esm2015/src/render3/styling/player_factory.js +3 -4
  143. package/esm2015/src/render3/styling/util.js +69 -31
  144. package/esm2015/src/render3/tokens.js +7 -6
  145. package/esm2015/src/render3/util.js +65 -55
  146. package/esm2015/src/render3/view_engine_compatibility.js +36 -59
  147. package/esm2015/src/render3/view_engine_compatibility_prebound.js +2 -3
  148. package/esm2015/src/render3/view_ref.js +58 -44
  149. package/esm2015/src/sanitization/bypass.js +29 -6
  150. package/esm2015/src/sanitization/html_sanitizer.js +48 -16
  151. package/esm2015/src/sanitization/inert_body.js +33 -18
  152. package/esm2015/src/sanitization/sanitization.js +35 -25
  153. package/esm2015/src/sanitization/security.js +3 -4
  154. package/esm2015/src/sanitization/style_sanitizer.js +10 -7
  155. package/esm2015/src/sanitization/url_sanitizer.js +9 -7
  156. package/esm2015/src/testability/testability.js +72 -42
  157. package/esm2015/src/type.js +6 -8
  158. package/esm2015/src/util/decorators.js +19 -14
  159. package/esm2015/src/util/lang.js +2 -3
  160. package/esm2015/src/util/ng_reflect.js +2 -3
  161. package/esm2015/src/util/noop.js +2 -3
  162. package/esm2015/src/util/property.js +3 -4
  163. package/esm2015/src/util.js +12 -4
  164. package/esm2015/src/version.js +6 -6
  165. package/esm2015/src/view/element.js +17 -17
  166. package/esm2015/src/view/entrypoint.js +15 -5
  167. package/esm2015/src/view/errors.js +4 -5
  168. package/esm2015/src/view/index.js +2 -3
  169. package/esm2015/src/view/ng_content.js +3 -4
  170. package/esm2015/src/view/ng_module.js +2 -3
  171. package/esm2015/src/view/provider.js +89 -24
  172. package/esm2015/src/view/pure_expression.js +14 -15
  173. package/esm2015/src/view/query.js +14 -14
  174. package/esm2015/src/view/refs.js +96 -38
  175. package/esm2015/src/view/services.js +64 -37
  176. package/esm2015/src/view/text.js +5 -6
  177. package/esm2015/src/view/types.js +390 -325
  178. package/esm2015/src/view/util.js +29 -24
  179. package/esm2015/src/view/view.js +43 -36
  180. package/esm2015/src/view/view_attach.js +9 -10
  181. package/esm2015/src/zone/ng_zone.js +29 -28
  182. package/esm2015/src/zone.js +3 -3
  183. package/esm2015/testing/index.js +2 -3
  184. package/esm2015/testing/public_api.js +4 -4
  185. package/esm2015/testing/src/async.js +2 -3
  186. package/esm2015/testing/src/async_fallback.js +8 -7
  187. package/esm2015/testing/src/async_test_completer.js +14 -6
  188. package/esm2015/testing/src/before_each.js +10 -4
  189. package/esm2015/testing/src/component_fixture.js +48 -17
  190. package/esm2015/testing/src/fake_async.js +9 -3
  191. package/esm2015/testing/src/fake_async_fallback.js +5 -5
  192. package/esm2015/testing/src/lang_utils.js +3 -4
  193. package/esm2015/testing/src/logger.js +2 -3
  194. package/esm2015/testing/src/metadata_override.js +2 -6
  195. package/esm2015/testing/src/metadata_overrider.js +9 -8
  196. package/esm2015/testing/src/ng_zone_mock.js +2 -3
  197. package/esm2015/testing/src/private_export_testing.js +2 -3
  198. package/esm2015/testing/src/r3_test_bed.js +324 -174
  199. package/esm2015/testing/src/resolvers.js +28 -11
  200. package/esm2015/testing/src/test_bed.js +123 -54
  201. package/esm2015/testing/src/test_bed_common.js +142 -85
  202. package/esm2015/testing/src/test_compiler.js +2 -3
  203. package/esm2015/testing/src/testing.js +3 -3
  204. package/esm2015/testing/src/testing_internal.js +17 -12
  205. package/esm2015/testing/testing.js +1 -2
  206. package/esm5/core.js +12 -13
  207. package/esm5/index.js +1 -2
  208. package/esm5/public_api.js +1 -2
  209. package/esm5/src/application_init.js +1 -2
  210. package/esm5/src/application_module.js +1 -2
  211. package/esm5/src/application_ref.js +1 -2
  212. package/esm5/src/application_tokens.js +1 -2
  213. package/esm5/src/change_detection/change_detection.js +1 -2
  214. package/esm5/src/change_detection/change_detection_util.js +1 -2
  215. package/esm5/src/change_detection/change_detector_ref.js +1 -2
  216. package/esm5/src/change_detection/constants.js +3 -4
  217. package/esm5/src/change_detection/differs/default_iterable_differ.js +1 -2
  218. package/esm5/src/change_detection/differs/default_keyvalue_differ.js +1 -2
  219. package/esm5/src/change_detection/differs/iterable_differs.js +1 -2
  220. package/esm5/src/change_detection/differs/keyvalue_differs.js +1 -2
  221. package/esm5/src/change_detection/pipe_transform.js +1 -2
  222. package/esm5/src/change_detection.js +1 -2
  223. package/esm5/src/codegen_private_exports.js +1 -2
  224. package/esm5/src/console.js +1 -2
  225. package/esm5/src/core.js +1 -2
  226. package/esm5/src/core_private_export.js +1 -2
  227. package/esm5/src/core_render3_private_export.js +7 -5
  228. package/esm5/src/debug/debug_node.js +79 -58
  229. package/esm5/src/di/defs.js +3 -4
  230. package/esm5/src/di/forward_ref.js +1 -2
  231. package/esm5/src/di/injectable.js +1 -2
  232. package/esm5/src/di/injection_token.js +1 -2
  233. package/esm5/src/di/injector.js +1 -2
  234. package/esm5/src/di/injector_compatibility.js +1 -2
  235. package/esm5/src/di/metadata.js +1 -2
  236. package/esm5/src/di/provider.js +1 -2
  237. package/esm5/src/di/r3_injector.js +48 -28
  238. package/esm5/src/di/reflective_errors.js +1 -2
  239. package/esm5/src/di/reflective_injector.js +1 -2
  240. package/esm5/src/di/reflective_key.js +1 -2
  241. package/esm5/src/di/reflective_provider.js +1 -2
  242. package/esm5/src/di/scope.js +1 -2
  243. package/esm5/src/di/util.js +1 -2
  244. package/esm5/src/di.js +1 -2
  245. package/esm5/src/error_handler.js +1 -2
  246. package/esm5/src/errors.js +1 -2
  247. package/esm5/src/event_emitter.js +1 -2
  248. package/esm5/src/i18n/tokens.js +1 -2
  249. package/esm5/src/is_dev_mode.js +1 -2
  250. package/esm5/src/ivy_switch.js +1 -2
  251. package/esm5/src/linker/compiler.js +1 -2
  252. package/esm5/src/linker/component_factory.js +1 -2
  253. package/esm5/src/linker/component_factory_resolver.js +1 -2
  254. package/esm5/src/linker/element_ref.js +1 -2
  255. package/esm5/src/linker/ng_module_factory.js +1 -2
  256. package/esm5/src/linker/ng_module_factory_loader.js +37 -13
  257. package/esm5/src/linker/query_list.js +1 -2
  258. package/esm5/src/linker/system_js_ng_module_factory_loader.js +1 -2
  259. package/esm5/src/linker/template_ref.js +1 -2
  260. package/esm5/src/linker/view_container_ref.js +1 -2
  261. package/esm5/src/linker/view_ref.js +1 -2
  262. package/esm5/src/linker.js +1 -2
  263. package/esm5/src/metadata/di.js +1 -2
  264. package/esm5/src/metadata/directives.js +1 -2
  265. package/esm5/src/metadata/lifecycle_hooks.js +1 -2
  266. package/esm5/src/metadata/ng_module.js +1 -2
  267. package/esm5/src/metadata/resource_loading.js +1 -2
  268. package/esm5/src/metadata/view.js +1 -2
  269. package/esm5/src/metadata.js +1 -2
  270. package/esm5/src/platform_core_providers.js +1 -2
  271. package/esm5/src/profile/profile.js +1 -2
  272. package/esm5/src/profile/wtf_impl.js +1 -2
  273. package/esm5/src/r3_symbols.js +1 -2
  274. package/esm5/src/reflection/platform_reflection_capabilities.js +1 -2
  275. package/esm5/src/reflection/reflection.js +1 -2
  276. package/esm5/src/reflection/reflection_capabilities.js +1 -2
  277. package/esm5/src/reflection/reflector.js +1 -2
  278. package/esm5/src/reflection/types.js +1 -2
  279. package/esm5/src/render/api.js +1 -2
  280. package/esm5/src/render.js +1 -2
  281. package/esm5/src/render3/assert.js +15 -2
  282. package/esm5/src/render3/bindings.js +63 -0
  283. package/esm5/src/render3/component.js +23 -16
  284. package/esm5/src/render3/component_ref.js +43 -36
  285. package/esm5/src/render3/context_discovery.js +68 -77
  286. package/esm5/src/render3/definition.js +30 -24
  287. package/esm5/src/render3/di.js +142 -135
  288. package/esm5/src/render3/di_setup.js +20 -21
  289. package/esm5/src/render3/discovery_utils.js +167 -36
  290. package/esm5/src/render3/empty.js +22 -0
  291. package/esm5/src/render3/errors.js +9 -12
  292. package/esm5/src/render3/features/inherit_definition_feature.js +3 -5
  293. package/esm5/src/render3/features/ng_onchanges_feature.js +11 -10
  294. package/esm5/src/render3/features/providers_feature.js +1 -2
  295. package/esm5/src/render3/fields.js +1 -2
  296. package/esm5/src/render3/global_utils.js +4 -3
  297. package/esm5/src/render3/global_utils_api.js +2 -3
  298. package/esm5/src/render3/hooks.js +14 -16
  299. package/esm5/src/render3/i18n.js +22 -27
  300. package/esm5/src/render3/index.js +5 -6
  301. package/esm5/src/render3/instructions.js +698 -593
  302. package/esm5/src/render3/interfaces/container.js +10 -3
  303. package/esm5/src/render3/interfaces/context.js +1 -2
  304. package/esm5/src/render3/interfaces/definition.js +1 -2
  305. package/esm5/src/render3/interfaces/i18n.js +1 -2
  306. package/esm5/src/render3/interfaces/injector.js +5 -6
  307. package/esm5/src/render3/interfaces/node.js +1 -2
  308. package/esm5/src/render3/interfaces/player.js +1 -2
  309. package/esm5/src/render3/interfaces/projection.js +1 -2
  310. package/esm5/src/render3/interfaces/query.js +1 -2
  311. package/esm5/src/render3/interfaces/renderer.js +1 -2
  312. package/esm5/src/render3/interfaces/sanitization.js +1 -2
  313. package/esm5/src/render3/interfaces/styling.js +1 -2
  314. package/esm5/src/render3/interfaces/view.js +3 -4
  315. package/esm5/src/render3/jit/compiler_facade.js +1 -2
  316. package/esm5/src/render3/jit/compiler_facade_interface.js +1 -2
  317. package/esm5/src/render3/jit/directive.js +19 -10
  318. package/esm5/src/render3/jit/environment.js +4 -2
  319. package/esm5/src/render3/jit/injectable.js +17 -18
  320. package/esm5/src/render3/jit/module.js +207 -13
  321. package/esm5/src/render3/jit/pipe.js +1 -2
  322. package/esm5/src/render3/jit/util.js +1 -2
  323. package/esm5/src/render3/metadata.js +1 -2
  324. package/esm5/src/render3/ng_dev_mode.js +1 -2
  325. package/esm5/src/render3/ng_module_ref.js +29 -11
  326. package/esm5/src/render3/node_assert.js +1 -2
  327. package/esm5/src/render3/node_manipulation.js +54 -50
  328. package/esm5/src/render3/node_selector_matcher.js +28 -9
  329. package/esm5/src/render3/pipe.js +33 -19
  330. package/esm5/src/render3/players.js +7 -9
  331. package/esm5/src/render3/pure_function.js +48 -38
  332. package/esm5/src/render3/query.js +8 -9
  333. package/esm5/src/render3/state.js +50 -135
  334. package/esm5/src/render3/styling/class_and_style_bindings.js +684 -214
  335. package/esm5/src/render3/styling/core_player_handler.js +1 -2
  336. package/esm5/src/render3/styling/player_factory.js +1 -2
  337. package/esm5/src/render3/styling/util.js +39 -22
  338. package/esm5/src/render3/tokens.js +1 -2
  339. package/esm5/src/render3/util.js +49 -37
  340. package/esm5/src/render3/view_engine_compatibility.js +20 -33
  341. package/esm5/src/render3/view_engine_compatibility_prebound.js +1 -2
  342. package/esm5/src/render3/view_ref.js +33 -30
  343. package/esm5/src/sanitization/bypass.js +1 -2
  344. package/esm5/src/sanitization/html_sanitizer.js +1 -2
  345. package/esm5/src/sanitization/inert_body.js +4 -5
  346. package/esm5/src/sanitization/sanitization.js +25 -20
  347. package/esm5/src/sanitization/security.js +1 -2
  348. package/esm5/src/sanitization/style_sanitizer.js +1 -2
  349. package/esm5/src/sanitization/url_sanitizer.js +1 -2
  350. package/esm5/src/testability/testability.js +1 -2
  351. package/esm5/src/type.js +1 -2
  352. package/esm5/src/util/decorators.js +1 -2
  353. package/esm5/src/util/lang.js +1 -2
  354. package/esm5/src/util/ng_reflect.js +1 -2
  355. package/esm5/src/util/noop.js +1 -2
  356. package/esm5/src/util/property.js +1 -2
  357. package/esm5/src/util.js +1 -2
  358. package/esm5/src/version.js +2 -3
  359. package/esm5/src/view/element.js +1 -2
  360. package/esm5/src/view/entrypoint.js +1 -2
  361. package/esm5/src/view/errors.js +1 -2
  362. package/esm5/src/view/index.js +1 -2
  363. package/esm5/src/view/ng_content.js +1 -2
  364. package/esm5/src/view/ng_module.js +1 -2
  365. package/esm5/src/view/provider.js +1 -2
  366. package/esm5/src/view/pure_expression.js +1 -2
  367. package/esm5/src/view/query.js +1 -2
  368. package/esm5/src/view/refs.js +1 -2
  369. package/esm5/src/view/services.js +1 -2
  370. package/esm5/src/view/text.js +1 -2
  371. package/esm5/src/view/types.js +1 -2
  372. package/esm5/src/view/util.js +1 -2
  373. package/esm5/src/view/view.js +1 -2
  374. package/esm5/src/view/view_attach.js +1 -2
  375. package/esm5/src/zone/ng_zone.js +1 -2
  376. package/esm5/src/zone.js +1 -2
  377. package/esm5/testing/index.js +1 -2
  378. package/esm5/testing/public_api.js +1 -2
  379. package/esm5/testing/src/async.js +1 -2
  380. package/esm5/testing/src/async_fallback.js +1 -2
  381. package/esm5/testing/src/async_test_completer.js +1 -2
  382. package/esm5/testing/src/before_each.js +1 -2
  383. package/esm5/testing/src/component_fixture.js +1 -2
  384. package/esm5/testing/src/fake_async.js +1 -2
  385. package/esm5/testing/src/fake_async_fallback.js +1 -2
  386. package/esm5/testing/src/lang_utils.js +1 -2
  387. package/esm5/testing/src/logger.js +1 -2
  388. package/esm5/testing/src/metadata_override.js +1 -2
  389. package/esm5/testing/src/metadata_overrider.js +1 -2
  390. package/esm5/testing/src/ng_zone_mock.js +1 -2
  391. package/esm5/testing/src/private_export_testing.js +1 -2
  392. package/esm5/testing/src/r3_test_bed.js +182 -121
  393. package/esm5/testing/src/resolvers.js +11 -7
  394. package/esm5/testing/src/test_bed.js +1 -2
  395. package/esm5/testing/src/test_bed_common.js +1 -2
  396. package/esm5/testing/src/test_compiler.js +1 -2
  397. package/esm5/testing/src/testing.js +1 -2
  398. package/esm5/testing/src/testing_internal.js +2 -3
  399. package/esm5/testing/testing.js +1 -2
  400. package/fesm2015/core.js +8560 -6153
  401. package/fesm2015/core.js.map +1 -1
  402. package/fesm2015/testing.js +351 -229
  403. package/fesm2015/testing.js.map +1 -1
  404. package/fesm5/core.js +5541 -4482
  405. package/fesm5/core.js.map +1 -1
  406. package/fesm5/testing.js +185 -130
  407. package/fesm5/testing.js.map +1 -1
  408. package/package.json +1 -1
  409. package/src/change_detection/constants.d.ts +2 -2
  410. package/src/core_render3_private_export.d.ts +6 -3
  411. package/src/di/injectable.d.ts +3 -2
  412. package/src/di/r3_injector.d.ts +1 -1
  413. package/src/linker/ng_module_factory_loader.d.ts +5 -1
  414. package/src/render3/assert.d.ts +6 -0
  415. package/src/render3/bindings.d.ts +20 -0
  416. package/src/render3/component.d.ts +3 -3
  417. package/src/render3/component_ref.d.ts +14 -4
  418. package/src/render3/context_discovery.d.ts +9 -9
  419. package/src/render3/definition.d.ts +8 -23
  420. package/src/render3/di.d.ts +19 -17
  421. package/src/render3/discovery_utils.d.ts +66 -8
  422. package/src/render3/empty.d.ts +16 -0
  423. package/src/render3/errors.d.ts +1 -1
  424. package/src/render3/global_utils_api.d.ts +1 -1
  425. package/src/render3/hooks.d.ts +7 -6
  426. package/src/render3/index.d.ts +4 -4
  427. package/src/render3/instructions.d.ts +163 -118
  428. package/src/render3/interfaces/container.d.ts +9 -8
  429. package/src/render3/interfaces/context.d.ts +3 -3
  430. package/src/render3/interfaces/definition.d.ts +2 -12
  431. package/src/render3/interfaces/i18n.d.ts +25 -25
  432. package/src/render3/interfaces/injector.d.ts +8 -9
  433. package/src/render3/interfaces/node.d.ts +56 -23
  434. package/src/render3/interfaces/renderer.d.ts +2 -1
  435. package/src/render3/interfaces/styling.d.ts +392 -117
  436. package/src/render3/interfaces/view.d.ts +49 -35
  437. package/src/render3/jit/compiler_facade_interface.d.ts +10 -3
  438. package/src/render3/jit/module.d.ts +9 -1
  439. package/src/render3/metadata.d.ts +1 -1
  440. package/src/render3/ng_module_ref.d.ts +8 -6
  441. package/src/render3/node_manipulation.d.ts +21 -27
  442. package/src/render3/node_selector_matcher.d.ts +2 -2
  443. package/src/render3/state.d.ts +11 -38
  444. package/src/render3/styling/class_and_style_bindings.d.ts +130 -43
  445. package/src/render3/styling/util.d.ts +9 -4
  446. package/src/render3/util.d.ts +31 -25
  447. package/src/render3/view_engine_compatibility.d.ts +5 -12
  448. package/src/render3/view_engine_compatibility_prebound.d.ts +2 -2
  449. package/src/render3/view_ref.d.ts +2 -2
  450. package/src/sanitization/sanitization.d.ts +3 -2
  451. package/testing/src/r3_test_bed.d.ts +15 -0
  452. package/testing/src/resolvers.d.ts +2 -2
  453. package/testing/testing.metadata.json +1 -1
  454. package/testing.d.ts +5 -0
@@ -1,126 +1,331 @@
1
1
  /**
2
2
  * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
3
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
5
  /**
6
6
  * The styling context acts as a styling manifest (shaped as an array) for determining which
7
7
  * styling properties have been assigned via the provided `updateStylingMap`, `updateStyleProp`
8
- * and `updateClassProp` functions. There are also two initialization functions
9
- * `allocStylingContext` and `createStylingContextTemplate` which are used to initialize
10
- * and/or clone the context.
8
+ * and `updateClassProp` functions. It also stores the static style/class values that were
9
+ * extracted from the template by the compiler.
11
10
  *
12
- * The context is an array where the first two cells are used for static data (initial styling)
13
- * and dirty flags / index offsets). The remaining set of cells is used for multi (map) and single
14
- * (prop) style values.
11
+ * A context is created by Angular when:
12
+ * 1. An element contains static styling values (like style="..." or class="...")
13
+ * 2. An element contains single property binding values (like [style.prop]="x" or
14
+ * [class.prop]="y")
15
+ * 3. An element contains multi property binding values (like [style]="x" or [class]="y")
16
+ * 4. A directive contains host bindings for static, single or multi styling properties/bindings.
17
+ * 5. An animation player is added to an element via `addPlayer`
15
18
  *
16
- * each value from here onwards is mapped as so:
17
- * [i] = mutation/type flag for the style/class value
18
- * [i + 1] = prop string (or null incase it has been removed)
19
- * [i + 2] = value string (or null incase it has been removed)
19
+ * Note that even if an element contains static styling then this context will be created and
20
+ * attached to it. The reason why this happens (instead of treating styles/classes as regular
21
+ * HTML attributes) is because the style/class bindings must be able to default themselves back
22
+ * to their respective static values when they are set to null.
20
23
  *
21
- * There are three types of styling types stored in this context:
22
- * initial: any styles that are passed in once the context is created
23
- * (these are stored in the first cell of the array and the first
24
- * value of this array is always `null` even if no initial styling exists.
25
- * the `null` value is there so that any new styles have a parent to point
26
- * to. This way we can always assume that there is a parent.)
24
+ * Say for example we have this:
25
+ * ```
26
+ * <!-- when myWidthExp=null then a width of "100px"
27
+ * will be used a default value for width -->
28
+ * <div style="width:100px" [style.width]="myWidthExp"></div>
29
+ * ```
30
+ *
31
+ * Even in the situation where there are no bindings, the static styling is still placed into the
32
+ * context because there may be another directive on the same element that has styling.
27
33
  *
28
- * single: any styles that are updated using `updateStyleProp` or `updateClassProp` (fixed set)
34
+ * When Angular initializes styling data for an element then it will first register the static
35
+ * styling values on the element using one of these two instructions:
29
36
  *
30
- * multi: any styles that are updated using `updateStylingMap` (dynamic set)
37
+ * 1. elementStart or element (within the template function of a component)
38
+ * 2. elementHostAttrs (for directive host bindings)
31
39
  *
32
- * Note that context is only used to collect style information. Only when `renderStyling`
33
- * is called is when the styling payload will be rendered (or built as a key/value map).
40
+ * In either case, a styling context will be created and stored within an element's LViewData. Once
41
+ * the styling context is created then single and multi properties can stored within it. For this to
42
+ * happen, the following function needs to be called:
34
43
  *
35
- * When the context is created, depending on what initial styling values are passed in, the
36
- * context itself will be pre-filled with slots based on the initial style properties. Say
37
- * for example we have a series of initial styles that look like so:
44
+ * `elementStyling` (called with style properties, class properties and a sanitizer + a directive
45
+ * instance).
38
46
  *
39
- * style="width:100px; height:200px;"
40
- * class="foo"
47
+ * When this instruction is called it will populate the styling context with the provided style
48
+ * and class names into the context.
41
49
  *
42
- * Then the initial state of the context (once initialized) will look like so:
50
+ * The context itself looks like this:
51
+ *
52
+ * context = [
53
+ * // 0-8: header values (about 8 entries of configuration data)
54
+ * // 9+: this is where each entry is stored:
55
+ * ]
56
+ *
57
+ * Let's say we have the following template code:
43
58
  *
44
59
  * ```
60
+ * <div class="foo bar"
61
+ * style="width:200px; color:red"
62
+ * [style.width]="myWidthExp"
63
+ * [style.height]="myHeightExp"
64
+ * [class.baz]="myBazExp">
65
+ * ```
66
+ *
67
+ * The context generated from these values will look like this (note that
68
+ * for each binding name (the class and style bindings) the values will
69
+ * be inserted twice into the array (once for single property entries) and
70
+ * another for multi property entries).
71
+ *
45
72
  * context = [
46
- * element,
47
- * playerContext | null,
48
- * styleSanitizer | null,
49
- * [null, '100px', '200px', true], // property names are not needed since they have already been
50
- * written to DOM.
51
- *
52
- * configMasterVal,
53
- * 1, // this instructs how many `style` values there are so that class index values can be
54
- * offsetted
55
- * { classOne: true, classTwo: false } | 'classOne classTwo' | null // last class value provided
56
- * into updateStylingMap
57
- * { styleOne: '100px', styleTwo: 0 } | null // last style value provided into updateStylingMap
58
- *
59
- * // 8
60
- * 'width',
61
- * pointers(1, 15); // Point to static `width`: `100px` and multi `width`.
62
- * null,
63
- *
64
- * // 11
65
- * 'height',
66
- * pointers(2, 18); // Point to static `height`: `200px` and multi `height`.
67
- * null,
68
- *
69
- * // 14
70
- * 'foo',
71
- * pointers(1, 21); // Point to static `foo`: `true` and multi `foo`.
72
- * null,
73
- *
74
- * // 17
75
- * 'width',
76
- * pointers(1, 6); // Point to static `width`: `100px` and single `width`.
77
- * null,
78
- *
79
- * // 21
80
- * 'height',
81
- * pointers(2, 9); // Point to static `height`: `200px` and single `height`.
82
- * null,
83
- *
84
- * // 24
85
- * 'foo',
86
- * pointers(3, 12); // Point to static `foo`: `true` and single `foo`.
87
- * null,
73
+ * // 0-8: header values (about 8 entries of configuration data)
74
+ * // 9+: this is where each entry is stored:
75
+ *
76
+ * // SINGLE PROPERTIES
77
+ * configForWidth,
78
+ * 'width'
79
+ * myWidthExp, // the binding value not the binding itself
80
+ * 0, // the directive owner
81
+ *
82
+ * configForHeight,
83
+ * 'height'
84
+ * myHeightExp, // the binding value not the binding itself
85
+ * 0, // the directive owner
86
+ *
87
+ * configForBazClass,
88
+ * 'baz
89
+ * myBazClassExp, // the binding value not the binding itself
90
+ * 0, // the directive owner
91
+ *
92
+ * // MULTI PROPERTIES
93
+ * configForWidth,
94
+ * 'width'
95
+ * myWidthExp, // the binding value not the binding itself
96
+ * 0, // the directive owner
97
+ *
98
+ * configForHeight,
99
+ * 'height'
100
+ * myHeightExp, // the binding value not the binding itself
101
+ * 0, // the directive owner
102
+ *
103
+ * configForBazClass,
104
+ * 'baz
105
+ * myBazClassExp, // the binding value not the binding itself
106
+ * 0, // the directive owner
88
107
  * ]
89
108
  *
90
- * function pointers(staticIndex: number, dynamicIndex: number) {
91
- * // combine the two indices into a single word.
92
- * return (staticIndex << StylingFlags.BitCountSize) |
93
- * (dynamicIndex << (StylingIndex.BitCountSize + StylingFlags.BitCountSize));
109
+ * The configuration values are left out of the example above because
110
+ * the ordering of them could change between code patches. Please read the
111
+ * documentation below to get a better understand of what the configuration
112
+ * values are and how they work.
113
+ *
114
+ * Each time a binding property is updated (whether it be through a single
115
+ * property instruction like `elementStyleProp`, `elementClassProp` or
116
+ * `elementStylingMap`) then the values in the context will be updated as
117
+ * well.
118
+ *
119
+ * If for example `[style.width]` updates to `555px` then its value will be reflected
120
+ * in the context as so:
121
+ *
122
+ * context = [
123
+ * // ...
124
+ * configForWidth, // this will be marked DIRTY
125
+ * 'width'
126
+ * '555px',
127
+ * 0,
128
+ * //..
129
+ * ]
130
+ *
131
+ * The context and directive data will also be marked dirty.
132
+ *
133
+ * Despite the context being updated, nothing has been rendered on screen (not styles or
134
+ * classes have been set on the element). To kick off rendering for an element the following
135
+ * function needs to be run `elementStylingApply`.
136
+ *
137
+ * `elementStylingApply` will run through the context and find each dirty value and render them onto
138
+ * the element. Once complete, all styles/classes will be set to clean. Because of this, the render
139
+ * function will now know not to rerun itself again if called again unless new style/class values
140
+ * have changed.
141
+ *
142
+ * ## Directives
143
+ * Directives style values (which are provided through host bindings) are also supported and
144
+ * housed within the same styling context as are template-level style/class properties/bindings.
145
+ * Both directive-level and template-level styling bindings share the same context.
146
+ *
147
+ * Each of the following instructions supports accepting a directive instance as an input parameter:
148
+ *
149
+ * - `elementHostAttrs`
150
+ * - `elementStyling`
151
+ * - `elementStyleProp`
152
+ * - `elementClassProp`
153
+ * - `elementStylingMap`
154
+ * - `elementStylingApply`
155
+ *
156
+ * Each time a directiveRef is passed in, it will be converted into an index by examining the
157
+ * directive registry (which lives in the context configuration area). The index is then used
158
+ * to help single style properties figure out where a value is located in the context.
159
+ *
160
+ * If two directives or a directive + a template binding both write to the same style/class
161
+ * binding then the styling context code will decide which one wins based on the following
162
+ * rule:
163
+ *
164
+ * 1. If the template binding has a value then it always wins
165
+ * 2. If not then whichever first-registered directive that has that value first will win
166
+ *
167
+ * The code example helps make this clear:
168
+ *
169
+ * ```
170
+ * <div [style.width]="myWidth" [my-width-directive]="'600px">
171
+ * \@Directive({ selector: '[my-width-directive' ]})
172
+ * class MyWidthDirective {
173
+ * \@Input('my-width-directive')
174
+ * \@HostBinding('style.width')
175
+ * public width = null;
94
176
  * }
95
177
  * ```
96
178
  *
97
- * The values are duplicated so that space is set aside for both multi ([style] and [class])
98
- * and single ([style.prop] or [class.named]) values. The respective config values
99
- * (configValA, configValB, etc...) are a combination of the StylingFlags with two index
100
- * values: the `initialIndex` (which points to the index location of the style value in
101
- * the initial styles array in slot 0) and the `dynamicIndex` (which points to the
102
- * matching single/multi index position in the context array for the same prop).
103
- *
104
- * This means that every time `updateStyleProp` or `updateClassProp` are called then they
105
- * must be called using an index value (not a property string) which references the index
106
- * value of the initial style prop/class when the context was created. This also means that
107
- * `updateStyleProp` or `updateClassProp` cannot be called with a new property (only
108
- * `updateStylingMap` can include new CSS properties that will be added to the context).
179
+ * Since there is a style binding for width present on the element (`[style.width]`) then
180
+ * it will always win over the width binding that is present as a host binding within
181
+ * the `MyWidthDirective`. However, if `[style.width]` renders as `null` (so `myWidth=null`)
182
+ * then the `MyWidthDirective` will be able to write to the `width` style within the context.
183
+ * Simply put, whichever directive writes to a value ends up having ownership of it.
184
+ *
185
+ * The way in which the ownership is facilitated is through index value. The earliest directives
186
+ * get the smallest index values (with 0 being reserved for the template element bindings). Each
187
+ * time a value is written from a directive or the template bindings, the value itself gets
188
+ * assigned the directive index value in its data. If another directive writes a value again then
189
+ * its directive index gets compared against the directive index that exists on the element. Only
190
+ * when the new value's directive index is less than the existing directive index then the new
191
+ * value will be written to the context.
192
+ *
193
+ * Each directive also has its own sanitizer and dirty flags. These values are consumed within the
194
+ * rendering function.
109
195
  * @record
110
196
  */
111
197
  export function StylingContext() { }
198
+ if (false) {
199
+ /* Skipping unnamed member:
200
+ [StylingIndex.MasterFlagPosition]: number;*/
201
+ /* Skipping unnamed member:
202
+ [StylingIndex.DirectiveRegistryPosition]: DirectiveRegistryValues;*/
203
+ /* Skipping unnamed member:
204
+ [StylingIndex.InitialStyleValuesPosition]: InitialStylingValues;*/
205
+ /* Skipping unnamed member:
206
+ [StylingIndex.InitialClassValuesPosition]: InitialStylingValues;*/
207
+ /* Skipping unnamed member:
208
+ [StylingIndex.SinglePropOffsetPositions]: SinglePropOffsetValues;*/
209
+ /* Skipping unnamed member:
210
+ [StylingIndex.ElementPosition]: RElement|null;*/
211
+ /* Skipping unnamed member:
212
+ [StylingIndex.CachedClassValueOrInitialClassString]: {[key: string]: any}|string|(string)[]|null;*/
213
+ /* Skipping unnamed member:
214
+ [StylingIndex.CachedStyleValue]: {[key: string]: any}|(string)[]|null;*/
215
+ /* Skipping unnamed member:
216
+ [StylingIndex.PlayerContext]: PlayerContext|null;*/
217
+ }
218
+ /**
219
+ * Used as a styling array to house static class and style values that were extracted
220
+ * by the compiler and placed in the animation context via `elementStart` and
221
+ * `elementHostAttrs`.
222
+ *
223
+ * See [InitialStylingValuesIndex] for a breakdown of how all this works.
224
+ * @record
225
+ */
226
+ export function InitialStylingValues() { }
227
+ if (false) {
228
+ /* Skipping unnamed member:
229
+ [0]: null;*/
230
+ }
231
+ /** @enum {number} */
232
+ const InitialStylingValuesIndex = {
233
+ KeyValueStartPosition: 1,
234
+ PropOffset: 0,
235
+ ValueOffset: 1,
236
+ Size: 2,
237
+ };
238
+ export { InitialStylingValuesIndex };
239
+ /**
240
+ * An array located in the StylingContext that houses all directive instances and additional
241
+ * data about them.
242
+ *
243
+ * Each entry in this array represents a source of where style/class binding values could
244
+ * come from. By default, there is always at least one directive here with a null value and
245
+ * that represents bindings that live directly on an element (not host bindings).
246
+ *
247
+ * Each successive entry in the array is an actual instance of an array as well as some
248
+ * additional info.
249
+ *
250
+ * An entry within this array has the following values:
251
+ * [0] = The instance of the directive (or null when it is not a directive, but a template binding
252
+ * source)
253
+ * [1] = The pointer that tells where the single styling (stuff like [class.foo] and [style.prop])
254
+ * offset values are located. This value will allow for a binding instruction to find exactly
255
+ * where a style is located.
256
+ * [2] = Whether or not the directive has any styling values that are dirty. This is used as
257
+ * reference within the renderClassAndStyleBindings function to decide whether to skip
258
+ * iterating through the context when rendering is executed.
259
+ * [3] = The styleSanitizer instance that is assigned to the directive. Although it's unlikely,
260
+ * a directive could introduce its own special style sanitizer and for this reach each
261
+ * directive will get its own space for it (if null then the very first sanitizer is used).
262
+ *
263
+ * Each time a new directive is added it will insert these four values at the end of the array.
264
+ * When this array is examined (using indexOf) then the resulting directiveIndex will be resolved
265
+ * by dividing the index value by the size of the array entries (so if DirA is at spot 8 then its
266
+ * index will be 2).
267
+ * @record
268
+ */
269
+ export function DirectiveRegistryValues() { }
270
+ if (false) {
271
+ /* Skipping unnamed member:
272
+ [DirectiveRegistryValuesIndex.DirectiveValueOffset]: null;*/
273
+ /* Skipping unnamed member:
274
+ [DirectiveRegistryValuesIndex.SinglePropValuesIndexOffset]: number;*/
275
+ /* Skipping unnamed member:
276
+ [DirectiveRegistryValuesIndex.DirtyFlagOffset]: boolean;*/
277
+ /* Skipping unnamed member:
278
+ [DirectiveRegistryValuesIndex.StyleSanitizerOffset]: StyleSanitizeFn|null;*/
279
+ }
280
+ /** @enum {number} */
281
+ const DirectiveRegistryValuesIndex = {
282
+ DirectiveValueOffset: 0,
283
+ SinglePropValuesIndexOffset: 1,
284
+ DirtyFlagOffset: 2,
285
+ StyleSanitizerOffset: 3,
286
+ Size: 4,
287
+ };
288
+ export { DirectiveRegistryValuesIndex };
112
289
  /**
113
- * The initial styles is populated whether or not there are any initial styles passed into
114
- * the context during allocation. The 0th value must be null so that index values of `0` within
115
- * the context flags can always point to a null value safely when nothing is set.
290
+ * An array that contains the index pointer values for every single styling property
291
+ * that exists in the context and for every directive. It also contains the total
292
+ * single styles and single classes that exists in the context as the first two values.
293
+ *
294
+ * Let's say we have the following template code:
295
+ *
296
+ * <div [style.width]="myWidth"
297
+ * [style.height]="myHeight"
298
+ * [class.flipped]="flipClass"
299
+ * directive-with-opacity>
300
+ * directive-with-foo-bar-classes>
116
301
  *
117
- * All other entries in this array are of `string` value and correspond to the values that
118
- * were extracted from the `style=""` attribute in the HTML code for the provided template.
302
+ * We have two directive and template-binding sources,
303
+ * 2 + 1 styles and 1 + 1 classes. When the bindings are
304
+ * registered the SinglePropOffsets array will look like so:
305
+ *
306
+ * s_0/c_0 = template directive value
307
+ * s_1/c_1 = directive one (directive-with-opacity)
308
+ * s_2/c_2 = directive two (directive-with-foo-bar-classes)
309
+ *
310
+ * [3, 2, 2, 1, s_00, s01, c_01, 1, 0, s_10, 0, 1, c_20
119
311
  * @record
120
312
  */
121
- export function InitialStyles() { }
313
+ export function SinglePropOffsetValues() { }
314
+ if (false) {
315
+ /* Skipping unnamed member:
316
+ [SinglePropOffsetValuesIndex.StylesCountPosition]: number;*/
317
+ /* Skipping unnamed member:
318
+ [SinglePropOffsetValuesIndex.ClassesCountPosition]: number;*/
319
+ }
320
+ /** @enum {number} */
321
+ const SinglePropOffsetValuesIndex = {
322
+ StylesCountPosition: 0,
323
+ ClassesCountPosition: 1,
324
+ ValueStartPosition: 2,
325
+ };
326
+ export { SinglePropOffsetValuesIndex };
122
327
  /** @enum {number} */
123
- var StylingFlags = {
328
+ const StylingFlags = {
124
329
  // Implies no configurations
125
330
  None: 0,
126
331
  // Whether or not the entry or context itself is dirty
@@ -135,34 +340,36 @@ var StylingFlags = {
135
340
  // initial classes
136
341
  OnlyProcessSingleClasses: 16,
137
342
  // The max amount of bits used to represent these configuration values
138
- BitCountSize: 5,
139
- // There are only five bits here
140
- BitMask: 31,
343
+ BindingAllocationLocked: 32,
344
+ BitCountSize: 6,
345
+ // There are only six bits here
346
+ BitMask: 63,
141
347
  };
142
348
  export { StylingFlags };
143
349
  /** @enum {number} */
144
- var StylingIndex = {
145
- // Position of where the initial styles are stored in the styling context
146
- PlayerContext: 0,
147
- // Position of where the style sanitizer is stored within the styling context
148
- StyleSanitizerPosition: 1,
149
- // Position of where the initial styles are stored in the styling context
150
- InitialStylesPosition: 2,
350
+ const StylingIndex = {
151
351
  // Index of location where the start of single properties are stored. (`updateStyleProp`)
152
- MasterFlagPosition: 3,
352
+ MasterFlagPosition: 0,
353
+ // Position of where the registered directives exist for this styling context
354
+ DirectiveRegistryPosition: 1,
355
+ // Position of where the initial styles are stored in the styling context
356
+ InitialStyleValuesPosition: 2,
357
+ InitialClassValuesPosition: 3,
153
358
  // Index of location where the class index offset value is located
154
- ClassOffsetPosition: 4,
359
+ SinglePropOffsetPositions: 4,
155
360
  // Position of where the initial styles are stored in the styling context
156
361
  // This index must align with HOST, see interfaces/view.ts
157
362
  ElementPosition: 5,
158
363
  // Position of where the last string-based CSS class value was stored (or a cached version of the
159
364
  // initial styles when a [class] directive is present)
160
- PreviousOrCachedMultiClassValue: 6,
365
+ CachedClassValueOrInitialClassString: 6,
161
366
  // Position of where the last string-based CSS class value was stored
162
- PreviousMultiStyleValue: 7,
163
- // Location of single (prop) value entries are stored within the context
164
- SingleStylesStartPosition: 8,
367
+ CachedStyleValue: 7,
165
368
  // Multi and single entries are stored in `StylingContext` as: Flag; PropertyName; PropertyValue
369
+ // Position of where the initial styles are stored in the styling context
370
+ PlayerContext: 8,
371
+ // Location of single (prop) value entries are stored within the context
372
+ SingleStylesStartPosition: 9,
166
373
  FlagsOffset: 0,
167
374
  PropertyOffset: 1,
168
375
  ValueOffset: 2,
@@ -171,10 +378,14 @@ var StylingIndex = {
171
378
  Size: 4,
172
379
  // Each flag has a binary digit length of this value
173
380
  BitCountSize: 14,
174
- // (32 - 4) / 2 = ~14
175
381
  // The binary digit value as a mask
176
382
  BitMask: 16383,
177
383
  };
178
384
  export { StylingIndex };
179
-
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9zdHlsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF1TEUsT0FBYzs7SUFFZCxRQUFlOztJQUVmLFFBQWU7O0lBRWYsV0FBa0I7O0lBRWxCLHNCQUE2Qjs7O0lBRzdCLDRCQUFrQzs7SUFFbEMsZUFBZ0I7O0lBRWhCLFdBQWlCOzs7Ozs7SUFNakIsZ0JBQWlCOztJQUVqQix5QkFBMEI7O0lBRTFCLHdCQUF5Qjs7SUFFekIscUJBQXNCOztJQUV0QixzQkFBdUI7OztJQUd2QixrQkFBbUI7OztJQUduQixrQ0FBbUM7O0lBRW5DLDBCQUEyQjs7SUFFM0IsNEJBQTZCOztJQUU3QixjQUFlO0lBQ2YsaUJBQWtCO0lBQ2xCLGNBQWU7SUFDZiwyQkFBNEI7O0lBRTVCLE9BQVE7O0lBRVIsZ0JBQWlCOzs7SUFFakIsY0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1N0eWxlU2FuaXRpemVGbn0gZnJvbSAnLi4vLi4vc2FuaXRpemF0aW9uL3N0eWxlX3Nhbml0aXplcic7XG5pbXBvcnQge1JFbGVtZW50fSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlbmRlcmVyJztcbmltcG9ydCB7UGxheWVyQ29udGV4dH0gZnJvbSAnLi9wbGF5ZXInO1xuXG5cbi8qKlxuICogVGhlIHN0eWxpbmcgY29udGV4dCBhY3RzIGFzIGEgc3R5bGluZyBtYW5pZmVzdCAoc2hhcGVkIGFzIGFuIGFycmF5KSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2hcbiAqIHN0eWxpbmcgcHJvcGVydGllcyBoYXZlIGJlZW4gYXNzaWduZWQgdmlhIHRoZSBwcm92aWRlZCBgdXBkYXRlU3R5bGluZ01hcGAsIGB1cGRhdGVTdHlsZVByb3BgXG4gKiBhbmQgYHVwZGF0ZUNsYXNzUHJvcGAgZnVuY3Rpb25zLiBUaGVyZSBhcmUgYWxzbyB0d28gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zXG4gKiBgYWxsb2NTdHlsaW5nQ29udGV4dGAgYW5kIGBjcmVhdGVTdHlsaW5nQ29udGV4dFRlbXBsYXRlYCB3aGljaCBhcmUgdXNlZCB0byBpbml0aWFsaXplXG4gKiBhbmQvb3IgY2xvbmUgdGhlIGNvbnRleHQuXG4gKlxuICogVGhlIGNvbnRleHQgaXMgYW4gYXJyYXkgd2hlcmUgdGhlIGZpcnN0IHR3byBjZWxscyBhcmUgdXNlZCBmb3Igc3RhdGljIGRhdGEgKGluaXRpYWwgc3R5bGluZylcbiAqIGFuZCBkaXJ0eSBmbGFncyAvIGluZGV4IG9mZnNldHMpLiBUaGUgcmVtYWluaW5nIHNldCBvZiBjZWxscyBpcyB1c2VkIGZvciBtdWx0aSAobWFwKSBhbmQgc2luZ2xlXG4gKiAocHJvcCkgc3R5bGUgdmFsdWVzLlxuICpcbiAqIGVhY2ggdmFsdWUgZnJvbSBoZXJlIG9ud2FyZHMgaXMgbWFwcGVkIGFzIHNvOlxuICogW2ldID0gbXV0YXRpb24vdHlwZSBmbGFnIGZvciB0aGUgc3R5bGUvY2xhc3MgdmFsdWVcbiAqIFtpICsgMV0gPSBwcm9wIHN0cmluZyAob3IgbnVsbCBpbmNhc2UgaXQgaGFzIGJlZW4gcmVtb3ZlZClcbiAqIFtpICsgMl0gPSB2YWx1ZSBzdHJpbmcgKG9yIG51bGwgaW5jYXNlIGl0IGhhcyBiZWVuIHJlbW92ZWQpXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIHN0eWxpbmcgdHlwZXMgc3RvcmVkIGluIHRoaXMgY29udGV4dDpcbiAqICAgaW5pdGlhbDogYW55IHN0eWxlcyB0aGF0IGFyZSBwYXNzZWQgaW4gb25jZSB0aGUgY29udGV4dCBpcyBjcmVhdGVkXG4gKiAgICAgICAgICAgICh0aGVzZSBhcmUgc3RvcmVkIGluIHRoZSBmaXJzdCBjZWxsIG9mIHRoZSBhcnJheSBhbmQgdGhlIGZpcnN0XG4gKiAgICAgICAgICAgICB2YWx1ZSBvZiB0aGlzIGFycmF5IGlzIGFsd2F5cyBgbnVsbGAgZXZlbiBpZiBubyBpbml0aWFsIHN0eWxpbmcgZXhpc3RzLlxuICogICAgICAgICAgICAgdGhlIGBudWxsYCB2YWx1ZSBpcyB0aGVyZSBzbyB0aGF0IGFueSBuZXcgc3R5bGVzIGhhdmUgYSBwYXJlbnQgdG8gcG9pbnRcbiAqICAgICAgICAgICAgIHRvLiBUaGlzIHdheSB3ZSBjYW4gYWx3YXlzIGFzc3VtZSB0aGF0IHRoZXJlIGlzIGEgcGFyZW50LilcbiAqXG4gKiAgIHNpbmdsZTogYW55IHN0eWxlcyB0aGF0IGFyZSB1cGRhdGVkIHVzaW5nIGB1cGRhdGVTdHlsZVByb3BgIG9yIGB1cGRhdGVDbGFzc1Byb3BgIChmaXhlZCBzZXQpXG4gKlxuICogICBtdWx0aTogYW55IHN0eWxlcyB0aGF0IGFyZSB1cGRhdGVkIHVzaW5nIGB1cGRhdGVTdHlsaW5nTWFwYCAoZHluYW1pYyBzZXQpXG4gKlxuICogTm90ZSB0aGF0IGNvbnRleHQgaXMgb25seSB1c2VkIHRvIGNvbGxlY3Qgc3R5bGUgaW5mb3JtYXRpb24uIE9ubHkgd2hlbiBgcmVuZGVyU3R5bGluZ2BcbiAqIGlzIGNhbGxlZCBpcyB3aGVuIHRoZSBzdHlsaW5nIHBheWxvYWQgd2lsbCBiZSByZW5kZXJlZCAob3IgYnVpbHQgYXMgYSBrZXkvdmFsdWUgbWFwKS5cbiAqXG4gKiBXaGVuIHRoZSBjb250ZXh0IGlzIGNyZWF0ZWQsIGRlcGVuZGluZyBvbiB3aGF0IGluaXRpYWwgc3R5bGluZyB2YWx1ZXMgYXJlIHBhc3NlZCBpbiwgdGhlXG4gKiBjb250ZXh0IGl0c2VsZiB3aWxsIGJlIHByZS1maWxsZWQgd2l0aCBzbG90cyBiYXNlZCBvbiB0aGUgaW5pdGlhbCBzdHlsZSBwcm9wZXJ0aWVzLiBTYXlcbiAqIGZvciBleGFtcGxlIHdlIGhhdmUgYSBzZXJpZXMgb2YgaW5pdGlhbCBzdHlsZXMgdGhhdCBsb29rIGxpa2Ugc286XG4gKlxuICogICBzdHlsZT1cIndpZHRoOjEwMHB4OyBoZWlnaHQ6MjAwcHg7XCJcbiAqICAgY2xhc3M9XCJmb29cIlxuICpcbiAqIFRoZW4gdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvbnRleHQgKG9uY2UgaW5pdGlhbGl6ZWQpIHdpbGwgbG9vayBsaWtlIHNvOlxuICpcbiAqIGBgYFxuICogY29udGV4dCA9IFtcbiAqICAgZWxlbWVudCxcbiAqICAgcGxheWVyQ29udGV4dCB8IG51bGwsXG4gKiAgIHN0eWxlU2FuaXRpemVyIHwgbnVsbCxcbiAqICAgW251bGwsICcxMDBweCcsICcyMDBweCcsIHRydWVdLCAgLy8gcHJvcGVydHkgbmFtZXMgYXJlIG5vdCBuZWVkZWQgc2luY2UgdGhleSBoYXZlIGFscmVhZHkgYmVlblxuICogd3JpdHRlbiB0byBET00uXG4gKlxuICogICBjb25maWdNYXN0ZXJWYWwsXG4gKiAgIDEsIC8vIHRoaXMgaW5zdHJ1Y3RzIGhvdyBtYW55IGBzdHlsZWAgdmFsdWVzIHRoZXJlIGFyZSBzbyB0aGF0IGNsYXNzIGluZGV4IHZhbHVlcyBjYW4gYmVcbiAqIG9mZnNldHRlZFxuICogICB7IGNsYXNzT25lOiB0cnVlLCBjbGFzc1R3bzogZmFsc2UgfSB8ICdjbGFzc09uZSBjbGFzc1R3bycgfCBudWxsIC8vIGxhc3QgY2xhc3MgdmFsdWUgcHJvdmlkZWRcbiAqIGludG8gdXBkYXRlU3R5bGluZ01hcFxuICogICB7IHN0eWxlT25lOiAnMTAwcHgnLCBzdHlsZVR3bzogMCB9IHwgbnVsbCAvLyBsYXN0IHN0eWxlIHZhbHVlIHByb3ZpZGVkIGludG8gdXBkYXRlU3R5bGluZ01hcFxuICpcbiAqICAgLy8gOFxuICogICAnd2lkdGgnLFxuICogICBwb2ludGVycygxLCAxNSk7ICAvLyBQb2ludCB0byBzdGF0aWMgYHdpZHRoYDogYDEwMHB4YCBhbmQgbXVsdGkgYHdpZHRoYC5cbiAqICAgbnVsbCxcbiAqXG4gKiAgIC8vIDExXG4gKiAgICdoZWlnaHQnLFxuICogICBwb2ludGVycygyLCAxOCk7IC8vIFBvaW50IHRvIHN0YXRpYyBgaGVpZ2h0YDogYDIwMHB4YCBhbmQgbXVsdGkgYGhlaWdodGAuXG4gKiAgIG51bGwsXG4gKlxuICogICAvLyAxNFxuICogICAnZm9vJyxcbiAqICAgcG9pbnRlcnMoMSwgMjEpOyAgLy8gUG9pbnQgdG8gc3RhdGljIGBmb29gOiBgdHJ1ZWAgYW5kIG11bHRpIGBmb29gLlxuICogICBudWxsLFxuICpcbiAqICAgLy8gMTdcbiAqICAgJ3dpZHRoJyxcbiAqICAgcG9pbnRlcnMoMSwgNik7ICAvLyBQb2ludCB0byBzdGF0aWMgYHdpZHRoYDogYDEwMHB4YCBhbmQgc2luZ2xlIGB3aWR0aGAuXG4gKiAgIG51bGwsXG4gKlxuICogICAvLyAyMVxuICogICAnaGVpZ2h0JyxcbiAqICAgcG9pbnRlcnMoMiwgOSk7ICAvLyBQb2ludCB0byBzdGF0aWMgYGhlaWdodGA6IGAyMDBweGAgYW5kIHNpbmdsZSBgaGVpZ2h0YC5cbiAqICAgbnVsbCxcbiAqXG4gKiAgIC8vIDI0XG4gKiAgICdmb28nLFxuICogICBwb2ludGVycygzLCAxMik7ICAvLyBQb2ludCB0byBzdGF0aWMgYGZvb2A6IGB0cnVlYCBhbmQgc2luZ2xlIGBmb29gLlxuICogICBudWxsLFxuICogXVxuICpcbiAqIGZ1bmN0aW9uIHBvaW50ZXJzKHN0YXRpY0luZGV4OiBudW1iZXIsIGR5bmFtaWNJbmRleDogbnVtYmVyKSB7XG4gKiAgIC8vIGNvbWJpbmUgdGhlIHR3byBpbmRpY2VzIGludG8gYSBzaW5nbGUgd29yZC5cbiAqICAgcmV0dXJuIChzdGF0aWNJbmRleCA8PCBTdHlsaW5nRmxhZ3MuQml0Q291bnRTaXplKSB8XG4gKiAgICAgKGR5bmFtaWNJbmRleCA8PCAoU3R5bGluZ0luZGV4LkJpdENvdW50U2l6ZSArIFN0eWxpbmdGbGFncy5CaXRDb3VudFNpemUpKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSB2YWx1ZXMgYXJlIGR1cGxpY2F0ZWQgc28gdGhhdCBzcGFjZSBpcyBzZXQgYXNpZGUgZm9yIGJvdGggbXVsdGkgKFtzdHlsZV0gYW5kIFtjbGFzc10pXG4gKiBhbmQgc2luZ2xlIChbc3R5bGUucHJvcF0gb3IgW2NsYXNzLm5hbWVkXSkgdmFsdWVzLiBUaGUgcmVzcGVjdGl2ZSBjb25maWcgdmFsdWVzXG4gKiAoY29uZmlnVmFsQSwgY29uZmlnVmFsQiwgZXRjLi4uKSBhcmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgU3R5bGluZ0ZsYWdzIHdpdGggdHdvIGluZGV4XG4gKiB2YWx1ZXM6IHRoZSBgaW5pdGlhbEluZGV4YCAod2hpY2ggcG9pbnRzIHRvIHRoZSBpbmRleCBsb2NhdGlvbiBvZiB0aGUgc3R5bGUgdmFsdWUgaW5cbiAqIHRoZSBpbml0aWFsIHN0eWxlcyBhcnJheSBpbiBzbG90IDApIGFuZCB0aGUgYGR5bmFtaWNJbmRleGAgKHdoaWNoIHBvaW50cyB0byB0aGVcbiAqIG1hdGNoaW5nIHNpbmdsZS9tdWx0aSBpbmRleCBwb3NpdGlvbiBpbiB0aGUgY29udGV4dCBhcnJheSBmb3IgdGhlIHNhbWUgcHJvcCkuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IGV2ZXJ5IHRpbWUgYHVwZGF0ZVN0eWxlUHJvcGAgb3IgYHVwZGF0ZUNsYXNzUHJvcGAgYXJlIGNhbGxlZCB0aGVuIHRoZXlcbiAqIG11c3QgYmUgY2FsbGVkIHVzaW5nIGFuIGluZGV4IHZhbHVlIChub3QgYSBwcm9wZXJ0eSBzdHJpbmcpIHdoaWNoIHJlZmVyZW5jZXMgdGhlIGluZGV4XG4gKiB2YWx1ZSBvZiB0aGUgaW5pdGlhbCBzdHlsZSBwcm9wL2NsYXNzIHdoZW4gdGhlIGNvbnRleHQgd2FzIGNyZWF0ZWQuIFRoaXMgYWxzbyBtZWFucyB0aGF0XG4gKiBgdXBkYXRlU3R5bGVQcm9wYCBvciBgdXBkYXRlQ2xhc3NQcm9wYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYSBuZXcgcHJvcGVydHkgKG9ubHlcbiAqIGB1cGRhdGVTdHlsaW5nTWFwYCBjYW4gaW5jbHVkZSBuZXcgQ1NTIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb250ZXh0KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHlsaW5nQ29udGV4dCBleHRlbmRzIEFycmF5PEluaXRpYWxTdHlsZXN8e1trZXk6IHN0cmluZ106IGFueX18bnVtYmVyfHN0cmluZ3xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFufFJFbGVtZW50fFN0eWxlU2FuaXRpemVGbnxQbGF5ZXJDb250ZXh0fG51bGw+IHtcbiAgLyoqXG4gICAqIExvY2F0aW9uIG9mIGFuaW1hdGlvbiBjb250ZXh0ICh3aGljaCBjb250YWlucyB0aGUgYWN0aXZlIHBsYXllcnMpIGZvciB0aGlzIGVsZW1lbnQgc3R5bGluZ1xuICAgKiBjb250ZXh0LlxuICAgKi9cbiAgW1N0eWxpbmdJbmRleC5QbGF5ZXJDb250ZXh0XTogUGxheWVyQ29udGV4dHxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGUgc2FuaXRpemVyIHRoYXQgaXMgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0XG4gICAqL1xuICBbU3R5bGluZ0luZGV4LlN0eWxlU2FuaXRpemVyUG9zaXRpb25dOiBTdHlsZVNhbml0aXplRm58bnVsbDtcblxuICAvKipcbiAgICogTG9jYXRpb24gb2YgaW5pdGlhbCBkYXRhIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzIG9mIHRoaXMgc3R5bGUuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkluaXRpYWxTdHlsZXNQb3NpdGlvbl06IEluaXRpYWxTdHlsZXM7XG5cbiAgLyoqXG4gICAqIEEgbnVtZXJpYyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdHVzICh3aGV0aGVyIHRoZSBjb250ZXh0IGlzIGRpcnR5IG9yIG5vdClcbiAgICogbWl4ZWQgdG9nZXRoZXIgKHVzaW5nIGJpdCBzaGlmdGluZykgd2l0aCBhIGluZGV4IHZhbHVlIHdoaWNoIHRlbGxzIHRoZSBzdGFydGluZyBpbmRleCB2YWx1ZVxuICAgKiBvZiB3aGVyZSB0aGUgbXVsdGkgc3R5bGUgZW50cmllcyBiZWdpbi5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguTWFzdGVyRmxhZ1Bvc2l0aW9uXTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIG51bWVyaWMgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBpbmRleCBvZmZzZXQgdmFsdWUuIFdoZW5ldmVyIGEgc2luZ2xlIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQgKHVzaW5nIGBlbGVtZW50Q2xhc3NQcm9wYCkgaXQgc2hvdWxkIGhhdmUgYW4gc3R5bGluZyBpbmRleCB2YWx1ZSB0aGF0IGRvZXNuJ3RcbiAgICogbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBhbnkgc3R5bGUgdmFsdWVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbnRleHQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkNsYXNzT2Zmc2V0UG9zaXRpb25dOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9mIGVsZW1lbnQgdGhhdCBpcyB1c2VkIGFzIGEgdGFyZ2V0IGZvciB0aGlzIGNvbnRleHQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkVsZW1lbnRQb3NpdGlvbl06IFJFbGVtZW50fG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IGNsYXNzIHZhbHVlIHRoYXQgd2FzIGludGVycHJldGVkIGJ5IGVsZW1lbnRTdHlsaW5nTWFwLiBUaGlzIGlzIGNhY2hlZFxuICAgKiBTbyB0aGF0IHRoZSBhbGdvcml0aG0gY2FuIGV4aXQgZWFybHkgaW5jYXNlIHRoZSB2YWx1ZSBoYXMgbm90IGNoYW5nZWQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LlByZXZpb3VzT3JDYWNoZWRNdWx0aUNsYXNzVmFsdWVdOiB7W2tleTogc3RyaW5nXTogYW55fXxzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogVGhlIGxhc3Qgc3R5bGUgdmFsdWUgdGhhdCB3YXMgaW50ZXJwcmV0ZWQgYnkgZWxlbWVudFN0eWxpbmdNYXAuIFRoaXMgaXMgY2FjaGVkXG4gICAqIFNvIHRoYXQgdGhlIGFsZ29yaXRobSBjYW4gZXhpdCBlYXJseSBpbmNhc2UgdGhlIHZhbHVlIGhhcyBub3QgY2hhbmdlZC5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguUHJldmlvdXNNdWx0aVN0eWxlVmFsdWVdOiB7W2tleTogc3RyaW5nXTogYW55fXxudWxsO1xufVxuXG4vKipcbiAqIFRoZSBpbml0aWFsIHN0eWxlcyBpcyBwb3B1bGF0ZWQgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueSBpbml0aWFsIHN0eWxlcyBwYXNzZWQgaW50b1xuICogdGhlIGNvbnRleHQgZHVyaW5nIGFsbG9jYXRpb24uIFRoZSAwdGggdmFsdWUgbXVzdCBiZSBudWxsIHNvIHRoYXQgaW5kZXggdmFsdWVzIG9mIGAwYCB3aXRoaW5cbiAqIHRoZSBjb250ZXh0IGZsYWdzIGNhbiBhbHdheXMgcG9pbnQgdG8gYSBudWxsIHZhbHVlIHNhZmVseSB3aGVuIG5vdGhpbmcgaXMgc2V0LlxuICpcbiAqIEFsbCBvdGhlciBlbnRyaWVzIGluIHRoaXMgYXJyYXkgYXJlIG9mIGBzdHJpbmdgIHZhbHVlIGFuZCBjb3JyZXNwb25kIHRvIHRoZSB2YWx1ZXMgdGhhdFxuICogd2VyZSBleHRyYWN0ZWQgZnJvbSB0aGUgYHN0eWxlPVwiXCJgIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCBjb2RlIGZvciB0aGUgcHJvdmlkZWQgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbFN0eWxlcyBleHRlbmRzIEFycmF5PHN0cmluZ3xudWxsfGJvb2xlYW4+IHsgWzBdOiBudWxsOyB9XG5cbi8qKlxuICogVXNlZCB0byBzZXQgdGhlIGNvbnRleHQgdG8gYmUgZGlydHkgb3Igbm90IGJvdGggb24gdGhlIG1hc3RlciBmbGFnIChwb3NpdGlvbiAxKVxuICogb3IgZm9yIGVhY2ggc2luZ2xlL211bHRpIHByb3BlcnR5IHRoYXQgZXhpc3RzIGluIHRoZSBjb250ZXh0LlxuICovXG5leHBvcnQgY29uc3QgZW51bSBTdHlsaW5nRmxhZ3Mge1xuICAvLyBJbXBsaWVzIG5vIGNvbmZpZ3VyYXRpb25zXG4gIE5vbmUgPSAwYjAwMDAwLFxuICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZW50cnkgb3IgY29udGV4dCBpdHNlbGYgaXMgZGlydHlcbiAgRGlydHkgPSAwYjAwMDAxLFxuICAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgY2xhc3MtYmFzZWQgYXNzaWdubWVudFxuICBDbGFzcyA9IDBiMDAwMTAsXG4gIC8vIFdoZXRoZXIgb3Igbm90IGEgc2FuaXRpemVyIHdhcyBhcHBsaWVkIHRvIHRoaXMgcHJvcGVydHlcbiAgU2FuaXRpemUgPSAwYjAwMTAwLFxuICAvLyBXaGV0aGVyIG9yIG5vdCBhbnkgcGxheWVyIGJ1aWxkZXJzIHdpdGhpbiBuZWVkIHRvIHByb2R1Y2UgbmV3IHBsYXllcnNcbiAgUGxheWVyQnVpbGRlcnNEaXJ0eSA9IDBiMDEwMDAsXG4gIC8vIElmIE5nQ2xhc3MgaXMgcHJlc2VudCAob3Igc29tZSBvdGhlciBjbGFzcyBoYW5kbGVyKSB0aGVuIGl0IHdpbGwgaGFuZGxlIHRoZSBtYXAgZXhwcmVzc2lvbnMgYW5kXG4gIC8vIGluaXRpYWwgY2xhc3Nlc1xuICBPbmx5UHJvY2Vzc1NpbmdsZUNsYXNzZXMgPSAwYjEwMDAwLFxuICAvLyBUaGUgbWF4IGFtb3VudCBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFsdWVzXG4gIEJpdENvdW50U2l6ZSA9IDUsXG4gIC8vIFRoZXJlIGFyZSBvbmx5IGZpdmUgYml0cyBoZXJlXG4gIEJpdE1hc2sgPSAwYjExMTExXG59XG5cbi8qKiBVc2VkIGFzIG51bWVyaWMgcG9pbnRlciB2YWx1ZXMgdG8gZGV0ZXJtaW5lIHdoYXQgY2VsbHMgdG8gdXBkYXRlIGluIHRoZSBgU3R5bGluZ0NvbnRleHRgICovXG5leHBvcnQgY29uc3QgZW51bSBTdHlsaW5nSW5kZXgge1xuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgaW5pdGlhbCBzdHlsZXMgYXJlIHN0b3JlZCBpbiB0aGUgc3R5bGluZyBjb250ZXh0XG4gIFBsYXllckNvbnRleHQgPSAwLFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgc3R5bGUgc2FuaXRpemVyIGlzIHN0b3JlZCB3aXRoaW4gdGhlIHN0eWxpbmcgY29udGV4dFxuICBTdHlsZVNhbml0aXplclBvc2l0aW9uID0gMSxcbiAgLy8gUG9zaXRpb24gb2Ygd2hlcmUgdGhlIGluaXRpYWwgc3R5bGVzIGFyZSBzdG9yZWQgaW4gdGhlIHN0eWxpbmcgY29udGV4dFxuICBJbml0aWFsU3R5bGVzUG9zaXRpb24gPSAyLFxuICAvLyBJbmRleCBvZiBsb2NhdGlvbiB3aGVyZSB0aGUgc3RhcnQgb2Ygc2luZ2xlIHByb3BlcnRpZXMgYXJlIHN0b3JlZC4gKGB1cGRhdGVTdHlsZVByb3BgKVxuICBNYXN0ZXJGbGFnUG9zaXRpb24gPSAzLFxuICAvLyBJbmRleCBvZiBsb2NhdGlvbiB3aGVyZSB0aGUgY2xhc3MgaW5kZXggb2Zmc2V0IHZhbHVlIGlzIGxvY2F0ZWRcbiAgQ2xhc3NPZmZzZXRQb3NpdGlvbiA9IDQsXG4gIC8vIFBvc2l0aW9uIG9mIHdoZXJlIHRoZSBpbml0aWFsIHN0eWxlcyBhcmUgc3RvcmVkIGluIHRoZSBzdHlsaW5nIGNvbnRleHRcbiAgLy8gVGhpcyBpbmRleCBtdXN0IGFsaWduIHdpdGggSE9TVCwgc2VlIGludGVyZmFjZXMvdmlldy50c1xuICBFbGVtZW50UG9zaXRpb24gPSA1LFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgbGFzdCBzdHJpbmctYmFzZWQgQ1NTIGNsYXNzIHZhbHVlIHdhcyBzdG9yZWQgKG9yIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlXG4gIC8vIGluaXRpYWwgc3R5bGVzIHdoZW4gYSBbY2xhc3NdIGRpcmVjdGl2ZSBpcyBwcmVzZW50KVxuICBQcmV2aW91c09yQ2FjaGVkTXVsdGlDbGFzc1ZhbHVlID0gNixcbiAgLy8gUG9zaXRpb24gb2Ygd2hlcmUgdGhlIGxhc3Qgc3RyaW5nLWJhc2VkIENTUyBjbGFzcyB2YWx1ZSB3YXMgc3RvcmVkXG4gIFByZXZpb3VzTXVsdGlTdHlsZVZhbHVlID0gNyxcbiAgLy8gTG9jYXRpb24gb2Ygc2luZ2xlIChwcm9wKSB2YWx1ZSBlbnRyaWVzIGFyZSBzdG9yZWQgd2l0aGluIHRoZSBjb250ZXh0XG4gIFNpbmdsZVN0eWxlc1N0YXJ0UG9zaXRpb24gPSA4LFxuICAvLyBNdWx0aSBhbmQgc2luZ2xlIGVudHJpZXMgYXJlIHN0b3JlZCBpbiBgU3R5bGluZ0NvbnRleHRgIGFzOiBGbGFnOyBQcm9wZXJ0eU5hbWU7ICBQcm9wZXJ0eVZhbHVlXG4gIEZsYWdzT2Zmc2V0ID0gMCxcbiAgUHJvcGVydHlPZmZzZXQgPSAxLFxuICBWYWx1ZU9mZnNldCA9IDIsXG4gIFBsYXllckJ1aWxkZXJJbmRleE9mZnNldCA9IDMsXG4gIC8vIFNpemUgb2YgZWFjaCBtdWx0aSBvciBzaW5nbGUgZW50cnkgKGZsYWcgKyBwcm9wICsgdmFsdWUgKyBwbGF5ZXJCdWlsZGVySW5kZXgpXG4gIFNpemUgPSA0LFxuICAvLyBFYWNoIGZsYWcgaGFzIGEgYmluYXJ5IGRpZ2l0IGxlbmd0aCBvZiB0aGlzIHZhbHVlXG4gIEJpdENvdW50U2l6ZSA9IDE0LCAgLy8gKDMyIC0gNCkgLyAyID0gfjE0XG4gIC8vIFRoZSBiaW5hcnkgZGlnaXQgdmFsdWUgYXMgYSBtYXNrXG4gIEJpdE1hc2sgPSAwYjExMTExMTExMTExMTExLCAgLy8gMTQgYml0c1xufVxuIl19
385
+ /** @enum {number} */
386
+ const DirectiveOwnerAndPlayerBuilderIndex = {
387
+ BitCountSize: 16,
388
+ BitMask: 65535,
389
+ };
390
+ export { DirectiveOwnerAndPlayerBuilderIndex };
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9zdHlsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwTUEsb0NBcURDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNELDBDQUF1Rjs7Ozs7OztJQXVGckYsd0JBQXlCO0lBQ3pCLGFBQWM7SUFDZCxjQUFlO0lBQ2YsT0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NWLDZDQUtDOzs7Ozs7Ozs7Ozs7O0lBT0MsdUJBQXdCO0lBQ3hCLDhCQUErQjtJQUMvQixrQkFBbUI7SUFDbkIsdUJBQXdCO0lBQ3hCLE9BQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCViw0Q0FHQzs7Ozs7Ozs7O0lBT0Msc0JBQXVCO0lBQ3ZCLHVCQUF3QjtJQUN4QixxQkFBc0I7Ozs7O0lBUXRCLDRCQUE0QjtJQUM1QixPQUFlO0lBQ2Ysc0RBQXNEO0lBQ3RELFFBQWdCO0lBQ2hCLGtEQUFrRDtJQUNsRCxRQUFnQjtJQUNoQiwwREFBMEQ7SUFDMUQsV0FBbUI7SUFDbkIsd0VBQXdFO0lBQ3hFLHNCQUE4QjtJQUM5QixrR0FBa0c7SUFDbEcsa0JBQWtCO0lBQ2xCLDRCQUFtQztJQUNuQyxzRUFBc0U7SUFDdEUsMkJBQWtDO0lBQ2xDLGVBQWdCO0lBQ2hCLCtCQUErQjtJQUMvQixXQUFrQjs7Ozs7SUFLbEIseUZBQXlGO0lBQ3pGLHFCQUFzQjtJQUN0Qiw2RUFBNkU7SUFDN0UsNEJBQTZCO0lBQzdCLHlFQUF5RTtJQUN6RSw2QkFBOEI7SUFDOUIsNkJBQThCO0lBQzlCLGtFQUFrRTtJQUNsRSw0QkFBNkI7SUFDN0IseUVBQXlFO0lBQ3pFLDBEQUEwRDtJQUMxRCxrQkFBbUI7SUFDbkIsaUdBQWlHO0lBQ2pHLHNEQUFzRDtJQUN0RCx1Q0FBd0M7SUFDeEMscUVBQXFFO0lBQ3JFLG1CQUFvQjtJQUNwQixpR0FBaUc7SUFDakcseUVBQXlFO0lBQ3pFLGdCQUFpQjtJQUNqQix3RUFBd0U7SUFDeEUsNEJBQTZCO0lBQzdCLGNBQWU7SUFDZixpQkFBa0I7SUFDbEIsY0FBZTtJQUNmLDJCQUE0QjtJQUM1QixnRkFBZ0Y7SUFDaEYsT0FBUTtJQUNSLG9EQUFvRDtJQUNwRCxnQkFBaUI7SUFDakIsbUNBQW1DO0lBQ25DLGNBQTBCOzs7OztJQVkxQixnQkFBaUI7SUFDakIsY0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1N0eWxlU2FuaXRpemVGbn0gZnJvbSAnLi4vLi4vc2FuaXRpemF0aW9uL3N0eWxlX3Nhbml0aXplcic7XG5pbXBvcnQge1JFbGVtZW50fSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlbmRlcmVyJztcbmltcG9ydCB7UGxheWVyQ29udGV4dH0gZnJvbSAnLi9wbGF5ZXInO1xuXG4vKipcbiAqIFRoZSBzdHlsaW5nIGNvbnRleHQgYWN0cyBhcyBhIHN0eWxpbmcgbWFuaWZlc3QgKHNoYXBlZCBhcyBhbiBhcnJheSkgZm9yIGRldGVybWluaW5nIHdoaWNoXG4gKiBzdHlsaW5nIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGFzc2lnbmVkIHZpYSB0aGUgcHJvdmlkZWQgYHVwZGF0ZVN0eWxpbmdNYXBgLCBgdXBkYXRlU3R5bGVQcm9wYFxuICogYW5kIGB1cGRhdGVDbGFzc1Byb3BgIGZ1bmN0aW9ucy4gSXQgYWxzbyBzdG9yZXMgdGhlIHN0YXRpYyBzdHlsZS9jbGFzcyB2YWx1ZXMgdGhhdCB3ZXJlXG4gKiBleHRyYWN0ZWQgZnJvbSB0aGUgdGVtcGxhdGUgYnkgdGhlIGNvbXBpbGVyLlxuICpcbiAqIEEgY29udGV4dCBpcyBjcmVhdGVkIGJ5IEFuZ3VsYXIgd2hlbjpcbiAqIDEuIEFuIGVsZW1lbnQgY29udGFpbnMgc3RhdGljIHN0eWxpbmcgdmFsdWVzIChsaWtlIHN0eWxlPVwiLi4uXCIgb3IgY2xhc3M9XCIuLi5cIilcbiAqIDIuIEFuIGVsZW1lbnQgY29udGFpbnMgc2luZ2xlIHByb3BlcnR5IGJpbmRpbmcgdmFsdWVzIChsaWtlIFtzdHlsZS5wcm9wXT1cInhcIiBvclxuICogW2NsYXNzLnByb3BdPVwieVwiKVxuICogMy4gQW4gZWxlbWVudCBjb250YWlucyBtdWx0aSBwcm9wZXJ0eSBiaW5kaW5nIHZhbHVlcyAobGlrZSBbc3R5bGVdPVwieFwiIG9yIFtjbGFzc109XCJ5XCIpXG4gKiA0LiBBIGRpcmVjdGl2ZSBjb250YWlucyBob3N0IGJpbmRpbmdzIGZvciBzdGF0aWMsIHNpbmdsZSBvciBtdWx0aSBzdHlsaW5nIHByb3BlcnRpZXMvYmluZGluZ3MuXG4gKiA1LiBBbiBhbmltYXRpb24gcGxheWVyIGlzIGFkZGVkIHRvIGFuIGVsZW1lbnQgdmlhIGBhZGRQbGF5ZXJgXG4gKlxuICogTm90ZSB0aGF0IGV2ZW4gaWYgYW4gZWxlbWVudCBjb250YWlucyBzdGF0aWMgc3R5bGluZyB0aGVuIHRoaXMgY29udGV4dCB3aWxsIGJlIGNyZWF0ZWQgYW5kXG4gKiBhdHRhY2hlZCB0byBpdC4gVGhlIHJlYXNvbiB3aHkgdGhpcyBoYXBwZW5zIChpbnN0ZWFkIG9mIHRyZWF0aW5nIHN0eWxlcy9jbGFzc2VzIGFzIHJlZ3VsYXJcbiAqIEhUTUwgYXR0cmlidXRlcykgaXMgYmVjYXVzZSB0aGUgc3R5bGUvY2xhc3MgYmluZGluZ3MgbXVzdCBiZSBhYmxlIHRvIGRlZmF1bHQgdGhlbXNlbHZlcyBiYWNrXG4gKiB0byB0aGVpciByZXNwZWN0aXZlIHN0YXRpYyB2YWx1ZXMgd2hlbiB0aGV5IGFyZSBzZXQgdG8gbnVsbC5cbiAqXG4gKiBTYXkgZm9yIGV4YW1wbGUgd2UgaGF2ZSB0aGlzOlxuICogYGBgXG4gKiA8IS0tIHdoZW4gbXlXaWR0aEV4cD1udWxsIHRoZW4gYSB3aWR0aCBvZiBcIjEwMHB4XCJcbiAqICAgICAgd2lsbCBiZSB1c2VkIGEgZGVmYXVsdCB2YWx1ZSBmb3Igd2lkdGggLS0+XG4gKiA8ZGl2IHN0eWxlPVwid2lkdGg6MTAwcHhcIiBbc3R5bGUud2lkdGhdPVwibXlXaWR0aEV4cFwiPjwvZGl2PlxuICogYGBgXG4gKlxuICogRXZlbiBpbiB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZXJlIGFyZSBubyBiaW5kaW5ncywgdGhlIHN0YXRpYyBzdHlsaW5nIGlzIHN0aWxsIHBsYWNlZCBpbnRvIHRoZVxuICogY29udGV4dCBiZWNhdXNlIHRoZXJlIG1heSBiZSBhbm90aGVyIGRpcmVjdGl2ZSBvbiB0aGUgc2FtZSBlbGVtZW50IHRoYXQgaGFzIHN0eWxpbmcuXG4gKlxuICogV2hlbiBBbmd1bGFyIGluaXRpYWxpemVzIHN0eWxpbmcgZGF0YSBmb3IgYW4gZWxlbWVudCB0aGVuIGl0IHdpbGwgZmlyc3QgcmVnaXN0ZXIgdGhlIHN0YXRpY1xuICogc3R5bGluZyB2YWx1ZXMgb24gdGhlIGVsZW1lbnQgdXNpbmcgb25lIG9mIHRoZXNlIHR3byBpbnN0cnVjdGlvbnM6XG4gKlxuICogMS4gZWxlbWVudFN0YXJ0IG9yIGVsZW1lbnQgKHdpdGhpbiB0aGUgdGVtcGxhdGUgZnVuY3Rpb24gb2YgYSBjb21wb25lbnQpXG4gKiAyLiBlbGVtZW50SG9zdEF0dHJzIChmb3IgZGlyZWN0aXZlIGhvc3QgYmluZGluZ3MpXG4gKlxuICogSW4gZWl0aGVyIGNhc2UsIGEgc3R5bGluZyBjb250ZXh0IHdpbGwgYmUgY3JlYXRlZCBhbmQgc3RvcmVkIHdpdGhpbiBhbiBlbGVtZW50J3MgTFZpZXdEYXRhLiBPbmNlXG4gKiB0aGUgc3R5bGluZyBjb250ZXh0IGlzIGNyZWF0ZWQgdGhlbiBzaW5nbGUgYW5kIG11bHRpIHByb3BlcnRpZXMgY2FuIHN0b3JlZCB3aXRoaW4gaXQuIEZvciB0aGlzIHRvXG4gKiBoYXBwZW4sIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkOlxuICpcbiAqIGBlbGVtZW50U3R5bGluZ2AgKGNhbGxlZCB3aXRoIHN0eWxlIHByb3BlcnRpZXMsIGNsYXNzIHByb3BlcnRpZXMgYW5kIGEgc2FuaXRpemVyICsgYSBkaXJlY3RpdmVcbiAqIGluc3RhbmNlKS5cbiAqXG4gKiBXaGVuIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgY2FsbGVkIGl0IHdpbGwgcG9wdWxhdGUgdGhlIHN0eWxpbmcgY29udGV4dCB3aXRoIHRoZSBwcm92aWRlZCBzdHlsZVxuICogYW5kIGNsYXNzIG5hbWVzIGludG8gdGhlIGNvbnRleHQuXG4gKlxuICogVGhlIGNvbnRleHQgaXRzZWxmIGxvb2tzIGxpa2UgdGhpczpcbiAqXG4gKiBjb250ZXh0ID0gW1xuICogICAvLyAwLTg6IGhlYWRlciB2YWx1ZXMgKGFib3V0IDggZW50cmllcyBvZiBjb25maWd1cmF0aW9uIGRhdGEpXG4gKiAgIC8vIDkrOiB0aGlzIGlzIHdoZXJlIGVhY2ggZW50cnkgaXMgc3RvcmVkOlxuICogXVxuICpcbiAqIExldCdzIHNheSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGUgY29kZTpcbiAqXG4gKiBgYGBcbiAqIDxkaXYgY2xhc3M9XCJmb28gYmFyXCJcbiAqICAgICAgc3R5bGU9XCJ3aWR0aDoyMDBweDsgY29sb3I6cmVkXCJcbiAqICAgICAgW3N0eWxlLndpZHRoXT1cIm15V2lkdGhFeHBcIlxuICogICAgICBbc3R5bGUuaGVpZ2h0XT1cIm15SGVpZ2h0RXhwXCJcbiAqICAgICAgW2NsYXNzLmJhel09XCJteUJhekV4cFwiPlxuICogYGBgXG4gKlxuICogVGhlIGNvbnRleHQgZ2VuZXJhdGVkIGZyb20gdGhlc2UgdmFsdWVzIHdpbGwgbG9vayBsaWtlIHRoaXMgKG5vdGUgdGhhdFxuICogZm9yIGVhY2ggYmluZGluZyBuYW1lICh0aGUgY2xhc3MgYW5kIHN0eWxlIGJpbmRpbmdzKSB0aGUgdmFsdWVzIHdpbGxcbiAqIGJlIGluc2VydGVkIHR3aWNlIGludG8gdGhlIGFycmF5IChvbmNlIGZvciBzaW5nbGUgcHJvcGVydHkgZW50cmllcykgYW5kXG4gKiBhbm90aGVyIGZvciBtdWx0aSBwcm9wZXJ0eSBlbnRyaWVzKS5cbiAqXG4gKiBjb250ZXh0ID0gW1xuICogICAvLyAwLTg6IGhlYWRlciB2YWx1ZXMgKGFib3V0IDggZW50cmllcyBvZiBjb25maWd1cmF0aW9uIGRhdGEpXG4gKiAgIC8vIDkrOiB0aGlzIGlzIHdoZXJlIGVhY2ggZW50cnkgaXMgc3RvcmVkOlxuICpcbiAqICAgLy8gU0lOR0xFIFBST1BFUlRJRVNcbiAqICAgY29uZmlnRm9yV2lkdGgsXG4gKiAgICd3aWR0aCdcbiAqICAgbXlXaWR0aEV4cCwgLy8gdGhlIGJpbmRpbmcgdmFsdWUgbm90IHRoZSBiaW5kaW5nIGl0c2VsZlxuICogICAwLCAvLyB0aGUgZGlyZWN0aXZlIG93bmVyXG4gKlxuICogICBjb25maWdGb3JIZWlnaHQsXG4gKiAgICdoZWlnaHQnXG4gKiAgIG15SGVpZ2h0RXhwLCAvLyB0aGUgYmluZGluZyB2YWx1ZSBub3QgdGhlIGJpbmRpbmcgaXRzZWxmXG4gKiAgIDAsIC8vIHRoZSBkaXJlY3RpdmUgb3duZXJcbiAqXG4gKiAgIGNvbmZpZ0ZvckJhekNsYXNzLFxuICogICAnYmF6XG4gKiAgIG15QmF6Q2xhc3NFeHAsIC8vIHRoZSBiaW5kaW5nIHZhbHVlIG5vdCB0aGUgYmluZGluZyBpdHNlbGZcbiAqICAgMCwgLy8gdGhlIGRpcmVjdGl2ZSBvd25lclxuICpcbiAqICAgLy8gTVVMVEkgUFJPUEVSVElFU1xuICogICBjb25maWdGb3JXaWR0aCxcbiAqICAgJ3dpZHRoJ1xuICogICBteVdpZHRoRXhwLCAvLyB0aGUgYmluZGluZyB2YWx1ZSBub3QgdGhlIGJpbmRpbmcgaXRzZWxmXG4gKiAgIDAsIC8vIHRoZSBkaXJlY3RpdmUgb3duZXJcbiAqXG4gKiAgIGNvbmZpZ0ZvckhlaWdodCxcbiAqICAgJ2hlaWdodCdcbiAqICAgbXlIZWlnaHRFeHAsIC8vIHRoZSBiaW5kaW5nIHZhbHVlIG5vdCB0aGUgYmluZGluZyBpdHNlbGZcbiAqICAgMCwgLy8gdGhlIGRpcmVjdGl2ZSBvd25lclxuICpcbiAqICAgY29uZmlnRm9yQmF6Q2xhc3MsXG4gKiAgICdiYXpcbiAqICAgbXlCYXpDbGFzc0V4cCwgLy8gdGhlIGJpbmRpbmcgdmFsdWUgbm90IHRoZSBiaW5kaW5nIGl0c2VsZlxuICogICAwLCAvLyB0aGUgZGlyZWN0aXZlIG93bmVyXG4gKiBdXG4gKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBsZWZ0IG91dCBvZiB0aGUgZXhhbXBsZSBhYm92ZSBiZWNhdXNlXG4gKiB0aGUgb3JkZXJpbmcgb2YgdGhlbSBjb3VsZCBjaGFuZ2UgYmV0d2VlbiBjb2RlIHBhdGNoZXMuIFBsZWFzZSByZWFkIHRoZVxuICogZG9jdW1lbnRhdGlvbiBiZWxvdyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZCBvZiB3aGF0IHRoZSBjb25maWd1cmF0aW9uXG4gKiB2YWx1ZXMgYXJlIGFuZCBob3cgdGhleSB3b3JrLlxuICpcbiAqIEVhY2ggdGltZSBhIGJpbmRpbmcgcHJvcGVydHkgaXMgdXBkYXRlZCAod2hldGhlciBpdCBiZSB0aHJvdWdoIGEgc2luZ2xlXG4gKiBwcm9wZXJ0eSBpbnN0cnVjdGlvbiBsaWtlIGBlbGVtZW50U3R5bGVQcm9wYCwgYGVsZW1lbnRDbGFzc1Byb3BgIG9yXG4gKiBgZWxlbWVudFN0eWxpbmdNYXBgKSB0aGVuIHRoZSB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgd2lsbCBiZSB1cGRhdGVkIGFzXG4gKiB3ZWxsLlxuICpcbiAqIElmIGZvciBleGFtcGxlIGBbc3R5bGUud2lkdGhdYCB1cGRhdGVzIHRvIGA1NTVweGAgdGhlbiBpdHMgdmFsdWUgd2lsbCBiZSByZWZsZWN0ZWRcbiAqIGluIHRoZSBjb250ZXh0IGFzIHNvOlxuICpcbiAqIGNvbnRleHQgPSBbXG4gKiAgIC8vIC4uLlxuICogICBjb25maWdGb3JXaWR0aCwgLy8gdGhpcyB3aWxsIGJlIG1hcmtlZCBESVJUWVxuICogICAnd2lkdGgnXG4gKiAgICc1NTVweCcsXG4gKiAgIDAsXG4gKiAgIC8vLi5cbiAqIF1cbiAqXG4gKiBUaGUgY29udGV4dCBhbmQgZGlyZWN0aXZlIGRhdGEgd2lsbCBhbHNvIGJlIG1hcmtlZCBkaXJ0eS5cbiAqXG4gKiBEZXNwaXRlIHRoZSBjb250ZXh0IGJlaW5nIHVwZGF0ZWQsIG5vdGhpbmcgaGFzIGJlZW4gcmVuZGVyZWQgb24gc2NyZWVuIChub3Qgc3R5bGVzIG9yXG4gKiBjbGFzc2VzIGhhdmUgYmVlbiBzZXQgb24gdGhlIGVsZW1lbnQpLiBUbyBraWNrIG9mZiByZW5kZXJpbmcgZm9yIGFuIGVsZW1lbnQgdGhlIGZvbGxvd2luZ1xuICogZnVuY3Rpb24gbmVlZHMgdG8gYmUgcnVuIGBlbGVtZW50U3R5bGluZ0FwcGx5YC5cbiAqXG4gKiBgZWxlbWVudFN0eWxpbmdBcHBseWAgd2lsbCBydW4gdGhyb3VnaCB0aGUgY29udGV4dCBhbmQgZmluZCBlYWNoIGRpcnR5IHZhbHVlIGFuZCByZW5kZXIgdGhlbSBvbnRvXG4gKiB0aGUgZWxlbWVudC4gT25jZSBjb21wbGV0ZSwgYWxsIHN0eWxlcy9jbGFzc2VzIHdpbGwgYmUgc2V0IHRvIGNsZWFuLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSByZW5kZXJcbiAqIGZ1bmN0aW9uIHdpbGwgbm93IGtub3cgbm90IHRvIHJlcnVuIGl0c2VsZiBhZ2FpbiBpZiBjYWxsZWQgYWdhaW4gdW5sZXNzIG5ldyBzdHlsZS9jbGFzcyB2YWx1ZXNcbiAqIGhhdmUgY2hhbmdlZC5cbiAqXG4gKiAjIyBEaXJlY3RpdmVzXG4gKiBEaXJlY3RpdmVzIHN0eWxlIHZhbHVlcyAod2hpY2ggYXJlIHByb3ZpZGVkIHRocm91Z2ggaG9zdCBiaW5kaW5ncykgYXJlIGFsc28gc3VwcG9ydGVkIGFuZFxuICogaG91c2VkIHdpdGhpbiB0aGUgc2FtZSBzdHlsaW5nIGNvbnRleHQgYXMgYXJlIHRlbXBsYXRlLWxldmVsIHN0eWxlL2NsYXNzIHByb3BlcnRpZXMvYmluZGluZ3MuXG4gKiBCb3RoIGRpcmVjdGl2ZS1sZXZlbCBhbmQgdGVtcGxhdGUtbGV2ZWwgc3R5bGluZyBiaW5kaW5ncyBzaGFyZSB0aGUgc2FtZSBjb250ZXh0LlxuICpcbiAqIEVhY2ggb2YgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgc3VwcG9ydHMgYWNjZXB0aW5nIGEgZGlyZWN0aXZlIGluc3RhbmNlIGFzIGFuIGlucHV0IHBhcmFtZXRlcjpcbiAqXG4gKiAtIGBlbGVtZW50SG9zdEF0dHJzYFxuICogLSBgZWxlbWVudFN0eWxpbmdgXG4gKiAtIGBlbGVtZW50U3R5bGVQcm9wYFxuICogLSBgZWxlbWVudENsYXNzUHJvcGBcbiAqIC0gYGVsZW1lbnRTdHlsaW5nTWFwYFxuICogLSBgZWxlbWVudFN0eWxpbmdBcHBseWBcbiAqXG4gKiBFYWNoIHRpbWUgYSBkaXJlY3RpdmVSZWYgaXMgcGFzc2VkIGluLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGluZGV4IGJ5IGV4YW1pbmluZyB0aGVcbiAqIGRpcmVjdGl2ZSByZWdpc3RyeSAod2hpY2ggbGl2ZXMgaW4gdGhlIGNvbnRleHQgY29uZmlndXJhdGlvbiBhcmVhKS4gVGhlIGluZGV4IGlzIHRoZW4gdXNlZFxuICogdG8gaGVscCBzaW5nbGUgc3R5bGUgcHJvcGVydGllcyBmaWd1cmUgb3V0IHdoZXJlIGEgdmFsdWUgaXMgbG9jYXRlZCBpbiB0aGUgY29udGV4dC5cbiAqXG4gKiBJZiB0d28gZGlyZWN0aXZlcyBvciBhIGRpcmVjdGl2ZSArIGEgdGVtcGxhdGUgYmluZGluZyBib3RoIHdyaXRlIHRvIHRoZSBzYW1lIHN0eWxlL2NsYXNzXG4gKiBiaW5kaW5nIHRoZW4gdGhlIHN0eWxpbmcgY29udGV4dCBjb2RlIHdpbGwgZGVjaWRlIHdoaWNoIG9uZSB3aW5zIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmdcbiAqIHJ1bGU6XG4gKlxuICogMS4gSWYgdGhlIHRlbXBsYXRlIGJpbmRpbmcgaGFzIGEgdmFsdWUgdGhlbiBpdCBhbHdheXMgd2luc1xuICogMi4gSWYgbm90IHRoZW4gd2hpY2hldmVyIGZpcnN0LXJlZ2lzdGVyZWQgZGlyZWN0aXZlIHRoYXQgaGFzIHRoYXQgdmFsdWUgZmlyc3Qgd2lsbCB3aW5cbiAqXG4gKiBUaGUgY29kZSBleGFtcGxlIGhlbHBzIG1ha2UgdGhpcyBjbGVhcjpcbiAqXG4gKiBgYGBcbiAqIDxkaXYgW3N0eWxlLndpZHRoXT1cIm15V2lkdGhcIiBbbXktd2lkdGgtZGlyZWN0aXZlXT1cIic2MDBweFwiPlxuICogQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW215LXdpZHRoLWRpcmVjdGl2ZScgXX0pXG4gKiBjbGFzcyBNeVdpZHRoRGlyZWN0aXZlIHtcbiAqICAgQElucHV0KCdteS13aWR0aC1kaXJlY3RpdmUnKVxuICogICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAqICAgcHVibGljIHdpZHRoID0gbnVsbDtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFNpbmNlIHRoZXJlIGlzIGEgc3R5bGUgYmluZGluZyBmb3Igd2lkdGggcHJlc2VudCBvbiB0aGUgZWxlbWVudCAoYFtzdHlsZS53aWR0aF1gKSB0aGVuXG4gKiBpdCB3aWxsIGFsd2F5cyB3aW4gb3ZlciB0aGUgd2lkdGggYmluZGluZyB0aGF0IGlzIHByZXNlbnQgYXMgYSBob3N0IGJpbmRpbmcgd2l0aGluXG4gKiB0aGUgYE15V2lkdGhEaXJlY3RpdmVgLiBIb3dldmVyLCBpZiBgW3N0eWxlLndpZHRoXWAgcmVuZGVycyBhcyBgbnVsbGAgKHNvIGBteVdpZHRoPW51bGxgKVxuICogdGhlbiB0aGUgYE15V2lkdGhEaXJlY3RpdmVgIHdpbGwgYmUgYWJsZSB0byB3cml0ZSB0byB0aGUgYHdpZHRoYCBzdHlsZSB3aXRoaW4gdGhlIGNvbnRleHQuXG4gKiBTaW1wbHkgcHV0LCB3aGljaGV2ZXIgZGlyZWN0aXZlIHdyaXRlcyB0byBhIHZhbHVlIGVuZHMgdXAgaGF2aW5nIG93bmVyc2hpcCBvZiBpdC5cbiAqXG4gKiBUaGUgd2F5IGluIHdoaWNoIHRoZSBvd25lcnNoaXAgaXMgZmFjaWxpdGF0ZWQgaXMgdGhyb3VnaCBpbmRleCB2YWx1ZS4gVGhlIGVhcmxpZXN0IGRpcmVjdGl2ZXNcbiAqIGdldCB0aGUgc21hbGxlc3QgaW5kZXggdmFsdWVzICh3aXRoIDAgYmVpbmcgcmVzZXJ2ZWQgZm9yIHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGJpbmRpbmdzKS4gRWFjaFxuICogdGltZSBhIHZhbHVlIGlzIHdyaXR0ZW4gZnJvbSBhIGRpcmVjdGl2ZSBvciB0aGUgdGVtcGxhdGUgYmluZGluZ3MsIHRoZSB2YWx1ZSBpdHNlbGYgZ2V0c1xuICogYXNzaWduZWQgdGhlIGRpcmVjdGl2ZSBpbmRleCB2YWx1ZSBpbiBpdHMgZGF0YS4gSWYgYW5vdGhlciBkaXJlY3RpdmUgd3JpdGVzIGEgdmFsdWUgYWdhaW4gdGhlblxuICogaXRzIGRpcmVjdGl2ZSBpbmRleCBnZXRzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGRpcmVjdGl2ZSBpbmRleCB0aGF0IGV4aXN0cyBvbiB0aGUgZWxlbWVudC4gT25seVxuICogd2hlbiB0aGUgbmV3IHZhbHVlJ3MgZGlyZWN0aXZlIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZXhpc3RpbmcgZGlyZWN0aXZlIGluZGV4IHRoZW4gdGhlIG5ld1xuICogdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBjb250ZXh0LlxuICpcbiAqIEVhY2ggZGlyZWN0aXZlIGFsc28gaGFzIGl0cyBvd24gc2FuaXRpemVyIGFuZCBkaXJ0eSBmbGFncy4gVGhlc2UgdmFsdWVzIGFyZSBjb25zdW1lZCB3aXRoaW4gdGhlXG4gKiByZW5kZXJpbmcgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3R5bGluZ0NvbnRleHQgZXh0ZW5kc1xuICAgIEFycmF5PHtba2V5OiBzdHJpbmddOiBhbnl9fG51bWJlcnxzdHJpbmd8Ym9vbGVhbnxSRWxlbWVudHxTdHlsZVNhbml0aXplRm58UGxheWVyQ29udGV4dHxudWxsPiB7XG4gIC8qKlxuICAgKiBBIG51bWVyaWMgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIHN0YXR1cyAod2hldGhlciB0aGUgY29udGV4dCBpcyBkaXJ0eSBvciBub3QpXG4gICAqIG1peGVkIHRvZ2V0aGVyICh1c2luZyBiaXQgc2hpZnRpbmcpIHdpdGggYSBpbmRleCB2YWx1ZSB3aGljaCB0ZWxscyB0aGUgc3RhcnRpbmcgaW5kZXggdmFsdWVcbiAgICogb2Ygd2hlcmUgdGhlIG11bHRpIHN0eWxlIGVudHJpZXMgYmVnaW4uXG4gICAqL1xuICBbU3R5bGluZ0luZGV4Lk1hc3RlckZsYWdQb3NpdGlvbl06IG51bWJlcjtcblxuICAvKipcbiAgICogTG9jYXRpb24gb2YgdGhlIGNvbGxlY3Rpb24gb2YgZGlyZWN0aXZlcyBmb3IgdGhpcyBjb250ZXh0XG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkRpcmVjdGl2ZVJlZ2lzdHJ5UG9zaXRpb25dOiBEaXJlY3RpdmVSZWdpc3RyeVZhbHVlcztcblxuICAvKipcbiAgICogTG9jYXRpb24gb2YgYWxsIHN0YXRpYyBzdHlsZXMgdmFsdWVzXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkluaXRpYWxTdHlsZVZhbHVlc1Bvc2l0aW9uXTogSW5pdGlhbFN0eWxpbmdWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9mIGFsbCBzdGF0aWMgY2xhc3MgdmFsdWVzXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkluaXRpYWxDbGFzc1ZhbHVlc1Bvc2l0aW9uXTogSW5pdGlhbFN0eWxpbmdWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIEEgbnVtZXJpYyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGluZGV4IG9mZnNldCB2YWx1ZS4gV2hlbmV2ZXIgYSBzaW5nbGUgY2xhc3MgaXNcbiAgICogYXBwbGllZCAodXNpbmcgYGVsZW1lbnRDbGFzc1Byb3BgKSBpdCBzaG91bGQgaGF2ZSBhbiBzdHlsaW5nIGluZGV4IHZhbHVlIHRoYXQgZG9lc24ndFxuICAgKiBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGFueSBzdHlsZSB2YWx1ZXMgdGhhdCBleGlzdCBpbiB0aGUgY29udGV4dC5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguU2luZ2xlUHJvcE9mZnNldFBvc2l0aW9uc106IFNpbmdsZVByb3BPZmZzZXRWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9mIGVsZW1lbnQgdGhhdCBpcyB1c2VkIGFzIGEgdGFyZ2V0IGZvciB0aGlzIGNvbnRleHQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkVsZW1lbnRQb3NpdGlvbl06IFJFbGVtZW50fG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IGNsYXNzIHZhbHVlIHRoYXQgd2FzIGludGVycHJldGVkIGJ5IGVsZW1lbnRTdHlsaW5nTWFwLiBUaGlzIGlzIGNhY2hlZFxuICAgKiBTbyB0aGF0IHRoZSBhbGdvcml0aG0gY2FuIGV4aXQgZWFybHkgaW5jYXNlIHRoZSB2YWx1ZSBoYXMgbm90IGNoYW5nZWQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkNhY2hlZENsYXNzVmFsdWVPckluaXRpYWxDbGFzc1N0cmluZ106IHtba2V5OiBzdHJpbmddOiBhbnl9fHN0cmluZ3woc3RyaW5nKVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IHN0eWxlIHZhbHVlIHRoYXQgd2FzIGludGVycHJldGVkIGJ5IGVsZW1lbnRTdHlsaW5nTWFwLiBUaGlzIGlzIGNhY2hlZFxuICAgKiBTbyB0aGF0IHRoZSBhbGdvcml0aG0gY2FuIGV4aXQgZWFybHkgaW5jYXNlIHRoZSB2YWx1ZSBoYXMgbm90IGNoYW5nZWQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkNhY2hlZFN0eWxlVmFsdWVdOiB7W2tleTogc3RyaW5nXTogYW55fXwoc3RyaW5nKVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9mIGFuaW1hdGlvbiBjb250ZXh0ICh3aGljaCBjb250YWlucyB0aGUgYWN0aXZlIHBsYXllcnMpIGZvciB0aGlzIGVsZW1lbnQgc3R5bGluZ1xuICAgKiBjb250ZXh0LlxuICAgKi9cbiAgW1N0eWxpbmdJbmRleC5QbGF5ZXJDb250ZXh0XTogUGxheWVyQ29udGV4dHxudWxsO1xufVxuXG4vKipcbiAqIFVzZWQgYXMgYSBzdHlsaW5nIGFycmF5IHRvIGhvdXNlIHN0YXRpYyBjbGFzcyBhbmQgc3R5bGUgdmFsdWVzIHRoYXQgd2VyZSBleHRyYWN0ZWRcbiAqIGJ5IHRoZSBjb21waWxlciBhbmQgcGxhY2VkIGluIHRoZSBhbmltYXRpb24gY29udGV4dCB2aWEgYGVsZW1lbnRTdGFydGAgYW5kXG4gKiBgZWxlbWVudEhvc3RBdHRyc2AuXG4gKlxuICogU2VlIFtJbml0aWFsU3R5bGluZ1ZhbHVlc0luZGV4XSBmb3IgYSBicmVha2Rvd24gb2YgaG93IGFsbCB0aGlzIHdvcmtzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxTdHlsaW5nVmFsdWVzIGV4dGVuZHMgQXJyYXk8c3RyaW5nfGJvb2xlYW58bnVsbD4geyBbMF06IG51bGw7IH1cblxuLyoqXG4gKiBVc2VkIGFzIGFuIG9mZnNldC9wb3NpdGlvbiBpbmRleCB0byBmaWd1cmUgb3V0IHdoZXJlIGluaXRpYWwgc3R5bGluZ1xuICogdmFsdWVzIGFyZSBsb2NhdGVkLlxuICpcbiAqIFVzZWQgYXMgYSByZWZlcmVuY2UgcG9pbnQgdG8gcHJvdmlkZSBtYXJrZXJzIHRvIGFsbCBzdGF0aWMgc3R5bGluZ1xuICogdmFsdWVzICh0aGUgaW5pdGlhbCBzdHlsZSBhbmQgY2xhc3MgdmFsdWVzIG9uIGFuIGVsZW1lbnQpIHdpdGhpbiBhblxuICogYXJyYXkgd2l0aGluIHRoZSBTdHlsaW5nQ29udGV4dC4gVGhpcyBhcnJheSBjb250YWlucyBrZXkvdmFsdWUgcGFpcnNcbiAqIHdoZXJlIHRoZSBrZXkgaXMgdGhlIHN0eWxlIHByb3BlcnR5IG5hbWUgb3IgY2xhc3NOYW1lIGFuZCB0aGUgdmFsdWUgaXNcbiAqIHRoZSBzdHlsZSB2YWx1ZSBvciB3aGV0aGVyIG9yIG5vdCBhIGNsYXNzIGlzIHByZXNlbnQgb24gdGhlIGVsbWVudC5cbiAqXG4gKiBUaGUgZmlyc3QgdmFsdWUgaXMgYWxzbyBhbHdheXMgbnVsbCBzbyB0aGF0IGEgaW5pdGlhbCBpbmRleCB2YWx1ZSBvZlxuICogYDBgIHdpbGwgYWx3YXlzIHBvaW50IHRvIGEgbnVsbCB2YWx1ZS5cbiAqXG4gKiBJZiBhIDxkaXY+IGVsZW1lbnRzIGNvbnRhaW5zIGEgbGlzdCBvZiBzdGF0aWMgc3R5bGluZyB2YWx1ZXMgbGlrZSBzbzpcbiAqXG4gKiA8ZGl2IGNsYXNzPVwiZm9vIGJhciBiYXpcIiBzdHlsZT1cIndpZHRoOjEwMHB4OyBoZWlnaHQ6MjAwcHg7XCI+XG4gKlxuICogVGhlbiB0aGUgaW5pdGlhbCBzdHlsZXMgZm9yIHRoYXQgd2lsbCBsb29rIGxpa2Ugc286XG4gKlxuICogU3R5bGVzOlxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbFN0eWxlc0luZGV4XSA9IFtcbiAqICAgbnVsbCwgJ3dpZHRoJywgJzEwMHB4JywgaGVpZ2h0LCAnMjAwcHgnXG4gKiBdXG4gKlxuICogQ2xhc3NlczpcbiAqIFN0eWxpbmdDb250ZXh0W0luaXRpYWxTdHlsZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsICdmb28nLCB0cnVlLCAnYmFyJywgdHJ1ZSwgJ2JheicsIHRydWVcbiAqIF1cbiAqXG4gKiBJbml0aWFsIHN0eWxlIGFuZCBjbGFzcyBlbnRyaWVzIGhhdmUgdGhlaXIgb3duIGFycmF5cy4gVGhpcyBpcyBiZWNhdXNlXG4gKiBpdCdzIGVhc2llciB0byBhZGQgdG8gdGhlIGVuZCBvZiBvbmUgYXJyYXkgYW5kIG5vdCB0aGVuIGhhdmUgdG8gdXBkYXRlXG4gKiBldmVyeSBjb250ZXh0IGVudHJpZXMnIHBvaW50ZXIgaW5kZXggdG8gdGhlIG5ld2x5IG9mZnNldGVkIHZhbHVlcy5cbiAqXG4gKiBXaGVuIHByb3BlcnR5IGJpbmRpbmRzIGFyZSBhZGRlZCB0byBhIGNvbnRleHQgdGhlbiBpbml0aWFsIHN0eWxlL2NsYXNzXG4gKiB2YWx1ZXMgd2lsbCBhbHNvIGJlIGluc2VydGVkIGludG8gdGhlIGFycmF5LiBUaGlzIGlzIHRvIGNyZWF0ZSBhIHNwYWNlXG4gKiBpbiB0aGUgc2l0dWF0aW9uIHdoZW4gYSBmb2xsb3ctdXAgZGlyZWN0aXZlIGluc2VydHMgc3RhdGljIHN0eWxpbmcgaW50b1xuICogdGhlIGFycmF5LiBCeSBkZWZhdWx0IHN0eWxlIHZhbHVlcyBhcmUgYG51bGxgIGFuZCBjbGFzcyB2YWx1ZXMgYXJlXG4gKiBgZmFsc2VgIHdoZW4gaW5zZXJ0ZWQgYnkgcHJvcGVydHkgYmluZGluZ3MuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiA8ZGl2IGNsYXNzPVwiZm9vIGJhciBiYXpcIlxuICogICAgICBbY2xhc3MuY2FyXT1cIm15Q2FyRXhwXCJcbiAqICAgICAgc3R5bGU9XCJ3aWR0aDoxMDBweDsgaGVpZ2h0OjIwMHB4O1wiXG4gKiAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIm15T3BhY2l0eUV4cFwiPlxuICpcbiAqIFdpbGwgY29uc3RydWN0IGluaXRpYWwgc3R5bGluZyB2YWx1ZXMgdGhhdCBsb29rIGxpa2U6XG4gKlxuICogU3R5bGVzOlxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbFN0eWxlc0luZGV4XSA9IFtcbiAqICAgbnVsbCwgJ3dpZHRoJywgJzEwMHB4JywgaGVpZ2h0LCAnMjAwcHgnLCAnb3BhY2l0eScsIG51bGxcbiAqIF1cbiAqXG4gKiBDbGFzc2VzOlxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbFN0eWxlc0luZGV4XSA9IFtcbiAqICAgbnVsbCwgJ2ZvbycsIHRydWUsICdiYXInLCB0cnVlLCAnYmF6JywgdHJ1ZSwgJ2NhcicsIGZhbHNlXG4gKiBdXG4gKlxuICogTm93IGlmIGEgZGlyZWN0aXZlIGNvbWVzIGFsb25nIGFuZCBpbnRyb2R1Y2VzIGBjYXJgIGFzIGEgc3RhdGljXG4gKiBjbGFzcyB2YWx1ZSBvciBgb3BhY2l0eWAgdGhlbiB0aG9zZSB2YWx1ZXMgd2lsbCBiZSBmaWxsZWQgaW50b1xuICogdGhlIGluaXRpYWwgc3R5bGVzIGFycmF5LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqIEBEaXJlY3RpdmUoe1xuICogICBzZWxlY3RvcjogJ29wYWNpdHktY2FyLWRpcmVjdGl2ZScsXG4gKiAgIGhvc3Q6IHtcbiAqICAgICAnc3R5bGUnOiAnb3BhY2l0eTowLjUnLFxuICogICAgICdjbGFzcyc6ICdjYXInXG4gKiAgIH1cbiAqIH0pXG4gKiBjbGFzcyBPcGFjaXR5Q2FyRGlyZWN0aXZlIHt9XG4gKlxuICogVGhpcyB3aWxsIHJlbmRlciBpdHNlbGYgYXM6XG4gKlxuICogU3R5bGVzOlxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbFN0eWxlc0luZGV4XSA9IFtcbiAqICAgbnVsbCwgJ3dpZHRoJywgJzEwMHB4JywgaGVpZ2h0LCAnMjAwcHgnLCAnb3BhY2l0eScsIG51bGxcbiAqIF1cbiAqXG4gKiBDbGFzc2VzOlxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbFN0eWxlc0luZGV4XSA9IFtcbiAqICAgbnVsbCwgJ2ZvbycsIHRydWUsICdiYXInLCB0cnVlLCAnYmF6JywgdHJ1ZSwgJ2NhcicsIGZhbHNlXG4gKiBdXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEluaXRpYWxTdHlsaW5nVmFsdWVzSW5kZXgge1xuICBLZXlWYWx1ZVN0YXJ0UG9zaXRpb24gPSAxLFxuICBQcm9wT2Zmc2V0ID0gMCxcbiAgVmFsdWVPZmZzZXQgPSAxLFxuICBTaXplID0gMlxufVxuXG4vKipcbiAqIEFuIGFycmF5IGxvY2F0ZWQgaW4gdGhlIFN0eWxpbmdDb250ZXh0IHRoYXQgaG91c2VzIGFsbCBkaXJlY3RpdmUgaW5zdGFuY2VzIGFuZCBhZGRpdGlvbmFsXG4gKiBkYXRhIGFib3V0IHRoZW0uXG4gKlxuICogRWFjaCBlbnRyeSBpbiB0aGlzIGFycmF5IHJlcHJlc2VudHMgYSBzb3VyY2Ugb2Ygd2hlcmUgc3R5bGUvY2xhc3MgYmluZGluZyB2YWx1ZXMgY291bGRcbiAqIGNvbWUgZnJvbS4gQnkgZGVmYXVsdCwgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBkaXJlY3RpdmUgaGVyZSB3aXRoIGEgbnVsbCB2YWx1ZSBhbmRcbiAqIHRoYXQgcmVwcmVzZW50cyBiaW5kaW5ncyB0aGF0IGxpdmUgZGlyZWN0bHkgb24gYW4gZWxlbWVudCAobm90IGhvc3QgYmluZGluZ3MpLlxuICpcbiAqIEVhY2ggc3VjY2Vzc2l2ZSBlbnRyeSBpbiB0aGUgYXJyYXkgaXMgYW4gYWN0dWFsIGluc3RhbmNlIG9mIGFuIGFycmF5IGFzIHdlbGwgYXMgc29tZVxuICogYWRkaXRpb25hbCBpbmZvLlxuICpcbiAqIEFuIGVudHJ5IHdpdGhpbiB0aGlzIGFycmF5IGhhcyB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAqIFswXSA9IFRoZSBpbnN0YW5jZSBvZiB0aGUgZGlyZWN0aXZlIChvciBudWxsIHdoZW4gaXQgaXMgbm90IGEgZGlyZWN0aXZlLCBidXQgYSB0ZW1wbGF0ZSBiaW5kaW5nXG4gKiBzb3VyY2UpXG4gKiBbMV0gPSBUaGUgcG9pbnRlciB0aGF0IHRlbGxzIHdoZXJlIHRoZSBzaW5nbGUgc3R5bGluZyAoc3R1ZmYgbGlrZSBbY2xhc3MuZm9vXSBhbmQgW3N0eWxlLnByb3BdKVxuICogICAgICAgb2Zmc2V0IHZhbHVlcyBhcmUgbG9jYXRlZC4gVGhpcyB2YWx1ZSB3aWxsIGFsbG93IGZvciBhIGJpbmRpbmcgaW5zdHJ1Y3Rpb24gdG8gZmluZCBleGFjdGx5XG4gKiAgICAgICB3aGVyZSBhIHN0eWxlIGlzIGxvY2F0ZWQuXG4gKiBbMl0gPSBXaGV0aGVyIG9yIG5vdCB0aGUgZGlyZWN0aXZlIGhhcyBhbnkgc3R5bGluZyB2YWx1ZXMgdGhhdCBhcmUgZGlydHkuIFRoaXMgaXMgdXNlZCBhc1xuICogICAgICAgcmVmZXJlbmNlIHdpdGhpbiB0aGUgcmVuZGVyQ2xhc3NBbmRTdHlsZUJpbmRpbmdzIGZ1bmN0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNraXBcbiAqICAgICAgIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBjb250ZXh0IHdoZW4gcmVuZGVyaW5nIGlzIGV4ZWN1dGVkLlxuICogWzNdID0gVGhlIHN0eWxlU2FuaXRpemVyIGluc3RhbmNlIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGRpcmVjdGl2ZS4gQWx0aG91Z2ggaXQncyB1bmxpa2VseSxcbiAqICAgICAgIGEgZGlyZWN0aXZlIGNvdWxkIGludHJvZHVjZSBpdHMgb3duIHNwZWNpYWwgc3R5bGUgc2FuaXRpemVyIGFuZCBmb3IgdGhpcyByZWFjaCBlYWNoXG4gKiAgICAgICBkaXJlY3RpdmUgd2lsbCBnZXQgaXRzIG93biBzcGFjZSBmb3IgaXQgKGlmIG51bGwgdGhlbiB0aGUgdmVyeSBmaXJzdCBzYW5pdGl6ZXIgaXMgdXNlZCkuXG4gKlxuICogRWFjaCB0aW1lIGEgbmV3IGRpcmVjdGl2ZSBpcyBhZGRlZCBpdCB3aWxsIGluc2VydCB0aGVzZSBmb3VyIHZhbHVlcyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS5cbiAqIFdoZW4gdGhpcyBhcnJheSBpcyBleGFtaW5lZCAodXNpbmcgaW5kZXhPZikgdGhlbiB0aGUgcmVzdWx0aW5nIGRpcmVjdGl2ZUluZGV4IHdpbGwgYmUgcmVzb2x2ZWRcbiAqIGJ5IGRpdmlkaW5nIHRoZSBpbmRleCB2YWx1ZSBieSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgZW50cmllcyAoc28gaWYgRGlyQSBpcyBhdCBzcG90IDggdGhlbiBpdHNcbiAqIGluZGV4IHdpbGwgYmUgMikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXMgZXh0ZW5kcyBBcnJheTxudWxsfHt9fGJvb2xlYW58bnVtYmVyfFN0eWxlU2FuaXRpemVGbj4ge1xuICBbRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXNJbmRleC5EaXJlY3RpdmVWYWx1ZU9mZnNldF06IG51bGw7XG4gIFtEaXJlY3RpdmVSZWdpc3RyeVZhbHVlc0luZGV4LlNpbmdsZVByb3BWYWx1ZXNJbmRleE9mZnNldF06IG51bWJlcjtcbiAgW0RpcmVjdGl2ZVJlZ2lzdHJ5VmFsdWVzSW5kZXguRGlydHlGbGFnT2Zmc2V0XTogYm9vbGVhbjtcbiAgW0RpcmVjdGl2ZVJlZ2lzdHJ5VmFsdWVzSW5kZXguU3R5bGVTYW5pdGl6ZXJPZmZzZXRdOiBTdHlsZVNhbml0aXplRm58bnVsbDtcbn1cblxuLyoqXG4gKiBBbiBlbnVtIHRoYXQgb3V0bGluZXMgdGhlIG9mZnNldC9wb3NpdGlvbiB2YWx1ZXMgZm9yIGVhY2ggZGlyZWN0aXZlIGVudHJ5IGFuZCBpdHMgZGF0YVxuICogdGhhdCBhcmUgaG91c2VkIGluc2lkZSBvZiBbRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXNdLlxuICovXG5leHBvcnQgY29uc3QgZW51bSBEaXJlY3RpdmVSZWdpc3RyeVZhbHVlc0luZGV4IHtcbiAgRGlyZWN0aXZlVmFsdWVPZmZzZXQgPSAwLFxuICBTaW5nbGVQcm9wVmFsdWVzSW5kZXhPZmZzZXQgPSAxLFxuICBEaXJ0eUZsYWdPZmZzZXQgPSAyLFxuICBTdHlsZVNhbml0aXplck9mZnNldCA9IDMsXG4gIFNpemUgPSA0XG59XG5cbi8qKlxuICogQW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgaW5kZXggcG9pbnRlciB2YWx1ZXMgZm9yIGV2ZXJ5IHNpbmdsZSBzdHlsaW5nIHByb3BlcnR5XG4gKiB0aGF0IGV4aXN0cyBpbiB0aGUgY29udGV4dCBhbmQgZm9yIGV2ZXJ5IGRpcmVjdGl2ZS4gSXQgYWxzbyBjb250YWlucyB0aGUgdG90YWxcbiAqIHNpbmdsZSBzdHlsZXMgYW5kIHNpbmdsZSBjbGFzc2VzIHRoYXQgZXhpc3RzIGluIHRoZSBjb250ZXh0IGFzIHRoZSBmaXJzdCB0d28gdmFsdWVzLlxuICpcbiAqIExldCdzIHNheSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGUgY29kZTpcbiAqXG4gKiA8ZGl2IFtzdHlsZS53aWR0aF09XCJteVdpZHRoXCJcbiAqICAgICAgW3N0eWxlLmhlaWdodF09XCJteUhlaWdodFwiXG4gKiAgICAgIFtjbGFzcy5mbGlwcGVkXT1cImZsaXBDbGFzc1wiXG4gKiAgICAgIGRpcmVjdGl2ZS13aXRoLW9wYWNpdHk+XG4gKiAgICAgIGRpcmVjdGl2ZS13aXRoLWZvby1iYXItY2xhc3Nlcz5cbiAqXG4gKiBXZSBoYXZlIHR3byBkaXJlY3RpdmUgYW5kIHRlbXBsYXRlLWJpbmRpbmcgc291cmNlcyxcbiAqIDIgKyAxIHN0eWxlcyBhbmQgMSArIDEgY2xhc3Nlcy4gV2hlbiB0aGUgYmluZGluZ3MgYXJlXG4gKiByZWdpc3RlcmVkIHRoZSBTaW5nbGVQcm9wT2Zmc2V0cyBhcnJheSB3aWxsIGxvb2sgbGlrZSBzbzpcbiAqXG4gKiBzXzAvY18wID0gdGVtcGxhdGUgZGlyZWN0aXZlIHZhbHVlXG4gKiBzXzEvY18xID0gZGlyZWN0aXZlIG9uZSAoZGlyZWN0aXZlLXdpdGgtb3BhY2l0eSlcbiAqIHNfMi9jXzIgPSBkaXJlY3RpdmUgdHdvIChkaXJlY3RpdmUtd2l0aC1mb28tYmFyLWNsYXNzZXMpXG4gKlxuICogWzMsIDIsIDIsIDEsIHNfMDAsIHMwMSwgY18wMSwgMSwgMCwgc18xMCwgMCwgMSwgY18yMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZVByb3BPZmZzZXRWYWx1ZXMgZXh0ZW5kcyBBcnJheTxudW1iZXI+IHtcbiAgW1NpbmdsZVByb3BPZmZzZXRWYWx1ZXNJbmRleC5TdHlsZXNDb3VudFBvc2l0aW9uXTogbnVtYmVyO1xuICBbU2luZ2xlUHJvcE9mZnNldFZhbHVlc0luZGV4LkNsYXNzZXNDb3VudFBvc2l0aW9uXTogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFuIGVudW0gdGhhdCBvdXRsaW5lcyB0aGUgb2Zmc2V0L3Bvc2l0aW9uIHZhbHVlcyBmb3IgZWFjaCBzaW5nbGUgcHJvcC9jbGFzcyBlbnRyeVxuICogdGhhdCBhcmUgaG91c2VkIGluc2lkZSBvZiBbU2luZ2xlUHJvcE9mZnNldFZhbHVlc10uXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFNpbmdsZVByb3BPZmZzZXRWYWx1ZXNJbmRleCB7XG4gIFN0eWxlc0NvdW50UG9zaXRpb24gPSAwLFxuICBDbGFzc2VzQ291bnRQb3NpdGlvbiA9IDEsXG4gIFZhbHVlU3RhcnRQb3NpdGlvbiA9IDJcbn1cblxuLyoqXG4gKiBVc2VkIHRvIHNldCB0aGUgY29udGV4dCB0byBiZSBkaXJ0eSBvciBub3QgYm90aCBvbiB0aGUgbWFzdGVyIGZsYWcgKHBvc2l0aW9uIDEpXG4gKiBvciBmb3IgZWFjaCBzaW5nbGUvbXVsdGkgcHJvcGVydHkgdGhhdCBleGlzdHMgaW4gdGhlIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFN0eWxpbmdGbGFncyB7XG4gIC8vIEltcGxpZXMgbm8gY29uZmlndXJhdGlvbnNcbiAgTm9uZSA9IDBiMDAwMDAwLFxuICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZW50cnkgb3IgY29udGV4dCBpdHNlbGYgaXMgZGlydHlcbiAgRGlydHkgPSAwYjAwMDAwMSxcbiAgLy8gV2hldGhlciBvciBub3QgdGhpcyBpcyBhIGNsYXNzLWJhc2VkIGFzc2lnbm1lbnRcbiAgQ2xhc3MgPSAwYjAwMDAxMCxcbiAgLy8gV2hldGhlciBvciBub3QgYSBzYW5pdGl6ZXIgd2FzIGFwcGxpZWQgdG8gdGhpcyBwcm9wZXJ0eVxuICBTYW5pdGl6ZSA9IDBiMDAwMTAwLFxuICAvLyBXaGV0aGVyIG9yIG5vdCBhbnkgcGxheWVyIGJ1aWxkZXJzIHdpdGhpbiBuZWVkIHRvIHByb2R1Y2UgbmV3IHBsYXllcnNcbiAgUGxheWVyQnVpbGRlcnNEaXJ0eSA9IDBiMDAxMDAwLFxuICAvLyBJZiBOZ0NsYXNzIGlzIHByZXNlbnQgKG9yIHNvbWUgb3RoZXIgY2xhc3MgaGFuZGxlcikgdGhlbiBpdCB3aWxsIGhhbmRsZSB0aGUgbWFwIGV4cHJlc3Npb25zIGFuZFxuICAvLyBpbml0aWFsIGNsYXNzZXNcbiAgT25seVByb2Nlc3NTaW5nbGVDbGFzc2VzID0gMGIwMTAwMDAsXG4gIC8vIFRoZSBtYXggYW1vdW50IG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlc2UgY29uZmlndXJhdGlvbiB2YWx1ZXNcbiAgQmluZGluZ0FsbG9jYXRpb25Mb2NrZWQgPSAwYjEwMDAwMCxcbiAgQml0Q291bnRTaXplID0gNixcbiAgLy8gVGhlcmUgYXJlIG9ubHkgc2l4IGJpdHMgaGVyZVxuICBCaXRNYXNrID0gMGIxMTExMTFcbn1cblxuLyoqIFVzZWQgYXMgbnVtZXJpYyBwb2ludGVyIHZhbHVlcyB0byBkZXRlcm1pbmUgd2hhdCBjZWxscyB0byB1cGRhdGUgaW4gdGhlIGBTdHlsaW5nQ29udGV4dGAgKi9cbmV4cG9ydCBjb25zdCBlbnVtIFN0eWxpbmdJbmRleCB7XG4gIC8vIEluZGV4IG9mIGxvY2F0aW9uIHdoZXJlIHRoZSBzdGFydCBvZiBzaW5nbGUgcHJvcGVydGllcyBhcmUgc3RvcmVkLiAoYHVwZGF0ZVN0eWxlUHJvcGApXG4gIE1hc3RlckZsYWdQb3NpdGlvbiA9IDAsXG4gIC8vIFBvc2l0aW9uIG9mIHdoZXJlIHRoZSByZWdpc3RlcmVkIGRpcmVjdGl2ZXMgZXhpc3QgZm9yIHRoaXMgc3R5bGluZyBjb250ZXh0XG4gIERpcmVjdGl2ZVJlZ2lzdHJ5UG9zaXRpb24gPSAxLFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgaW5pdGlhbCBzdHlsZXMgYXJlIHN0b3JlZCBpbiB0aGUgc3R5bGluZyBjb250ZXh0XG4gIEluaXRpYWxTdHlsZVZhbHVlc1Bvc2l0aW9uID0gMixcbiAgSW5pdGlhbENsYXNzVmFsdWVzUG9zaXRpb24gPSAzLFxuICAvLyBJbmRleCBvZiBsb2NhdGlvbiB3aGVyZSB0aGUgY2xhc3MgaW5kZXggb2Zmc2V0IHZhbHVlIGlzIGxvY2F0ZWRcbiAgU2luZ2xlUHJvcE9mZnNldFBvc2l0aW9ucyA9IDQsXG4gIC8vIFBvc2l0aW9uIG9mIHdoZXJlIHRoZSBpbml0aWFsIHN0eWxlcyBhcmUgc3RvcmVkIGluIHRoZSBzdHlsaW5nIGNvbnRleHRcbiAgLy8gVGhpcyBpbmRleCBtdXN0IGFsaWduIHdpdGggSE9TVCwgc2VlIGludGVyZmFjZXMvdmlldy50c1xuICBFbGVtZW50UG9zaXRpb24gPSA1LFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgbGFzdCBzdHJpbmctYmFzZWQgQ1NTIGNsYXNzIHZhbHVlIHdhcyBzdG9yZWQgKG9yIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlXG4gIC8vIGluaXRpYWwgc3R5bGVzIHdoZW4gYSBbY2xhc3NdIGRpcmVjdGl2ZSBpcyBwcmVzZW50KVxuICBDYWNoZWRDbGFzc1ZhbHVlT3JJbml0aWFsQ2xhc3NTdHJpbmcgPSA2LFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgbGFzdCBzdHJpbmctYmFzZWQgQ1NTIGNsYXNzIHZhbHVlIHdhcyBzdG9yZWRcbiAgQ2FjaGVkU3R5bGVWYWx1ZSA9IDcsXG4gIC8vIE11bHRpIGFuZCBzaW5nbGUgZW50cmllcyBhcmUgc3RvcmVkIGluIGBTdHlsaW5nQ29udGV4dGAgYXM6IEZsYWc7IFByb3BlcnR5TmFtZTsgIFByb3BlcnR5VmFsdWVcbiAgLy8gUG9zaXRpb24gb2Ygd2hlcmUgdGhlIGluaXRpYWwgc3R5bGVzIGFyZSBzdG9yZWQgaW4gdGhlIHN0eWxpbmcgY29udGV4dFxuICBQbGF5ZXJDb250ZXh0ID0gOCxcbiAgLy8gTG9jYXRpb24gb2Ygc2luZ2xlIChwcm9wKSB2YWx1ZSBlbnRyaWVzIGFyZSBzdG9yZWQgd2l0aGluIHRoZSBjb250ZXh0XG4gIFNpbmdsZVN0eWxlc1N0YXJ0UG9zaXRpb24gPSA5LFxuICBGbGFnc09mZnNldCA9IDAsXG4gIFByb3BlcnR5T2Zmc2V0ID0gMSxcbiAgVmFsdWVPZmZzZXQgPSAyLFxuICBQbGF5ZXJCdWlsZGVySW5kZXhPZmZzZXQgPSAzLFxuICAvLyBTaXplIG9mIGVhY2ggbXVsdGkgb3Igc2luZ2xlIGVudHJ5IChmbGFnICsgcHJvcCArIHZhbHVlICsgcGxheWVyQnVpbGRlckluZGV4KVxuICBTaXplID0gNCxcbiAgLy8gRWFjaCBmbGFnIGhhcyBhIGJpbmFyeSBkaWdpdCBsZW5ndGggb2YgdGhpcyB2YWx1ZVxuICBCaXRDb3VudFNpemUgPSAxNCwgIC8vICgzMiAtIDQpIC8gMiA9IH4xNFxuICAvLyBUaGUgYmluYXJ5IGRpZ2l0IHZhbHVlIGFzIGEgbWFza1xuICBCaXRNYXNrID0gMGIxMTExMTExMTExMTExMSwgIC8vIDE0IGJpdHNcbn1cblxuLyoqXG4gKiBBbiBlbnVtIHRoYXQgb3V0bGluZXMgdGhlIGJpdCBmbGFnIGRhdGEgZm9yIGRpcmVjdGl2ZSBvd25lciBhbmQgcGxheWVyIGluZGV4XG4gKiB2YWx1ZXMgdGhhdCBleGlzdCB3aXRoaW4gZW4gZW50cnkgdGhhdCBsaXZlcyBpbiB0aGUgU3R5bGluZ0NvbnRleHQuXG4gKlxuICogVGhlIHZhbHVlcyBoZXJlIHNwbGl0IGEgbnVtYmVyIHZhbHVlIGludG8gdHdvIHNldHMgb2YgYml0czpcbiAqICAtIFRoZSBmaXJzdCAxNiBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIHRoZSBkaXJlY3RpdmVJbmRleCB0aGF0IG93bnMgdGhpcyBzdHlsZSB2YWx1ZVxuICogIC0gVGhlIG90aGVyIDE2IGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgdGhlIHBsYXllckJ1aWxkZXJJbmRleCB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgc3R5bGVcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gRGlyZWN0aXZlT3duZXJBbmRQbGF5ZXJCdWlsZGVySW5kZXgge1xuICBCaXRDb3VudFNpemUgPSAxNixcbiAgQml0TWFzayA9IDBiMTExMTExMTExMTExMTExMVxufVxuIl19