@itwin/ecschema-metadata 5.12.0-dev.9 → 5.12.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 (196) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/lib/cjs/Constants.js.map +1 -1
  3. package/lib/cjs/DelayedPromise.js.map +1 -1
  4. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  5. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  6. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  7. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  8. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  9. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  10. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  11. package/lib/cjs/ECName.js.map +1 -1
  12. package/lib/cjs/ECObjects.js.map +1 -1
  13. package/lib/cjs/Exception.js.map +1 -1
  14. package/lib/cjs/Formatting/FormatSetFormatsProvider.js.map +1 -1
  15. package/lib/cjs/Formatting/SchemaFormatsProvider.js.map +1 -1
  16. package/lib/cjs/IncrementalLoading/ClassParsers.js.map +1 -1
  17. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  18. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js +466 -466
  19. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js.map +1 -1
  20. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  21. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  22. package/lib/cjs/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  23. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js +235 -235
  24. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  25. package/lib/cjs/IncrementalLoading/SchemaParser.js.map +1 -1
  26. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js +309 -309
  27. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js.map +1 -1
  28. package/lib/cjs/Interfaces.js.map +1 -1
  29. package/lib/cjs/Localization/LocalizationProvider.js.map +1 -1
  30. package/lib/cjs/Localization/LocalizationTypes.js.map +1 -1
  31. package/lib/cjs/Localization/SchemaLocalization.d.ts +1 -1
  32. package/lib/cjs/Localization/SchemaLocalization.d.ts.map +1 -1
  33. package/lib/cjs/Localization/SchemaLocalization.js.map +1 -1
  34. package/lib/cjs/Metadata/Class.js.map +1 -1
  35. package/lib/cjs/Metadata/Constant.js.map +1 -1
  36. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  37. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  38. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  39. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  40. package/lib/cjs/Metadata/Format.js.map +1 -1
  41. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  42. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  43. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  44. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  45. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  46. package/lib/cjs/Metadata/Property.js.map +1 -1
  47. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  48. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  49. package/lib/cjs/Metadata/Schema.js.map +1 -1
  50. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  51. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  52. package/lib/cjs/PropertyTypes.js.map +1 -1
  53. package/lib/cjs/SchemaJsonLocater.js.map +1 -1
  54. package/lib/cjs/SchemaKey.js.map +1 -1
  55. package/lib/cjs/SchemaLoader.js.map +1 -1
  56. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  57. package/lib/cjs/SchemaView/SchemaManifest.d.ts +81 -0
  58. package/lib/cjs/SchemaView/SchemaManifest.d.ts.map +1 -0
  59. package/lib/cjs/SchemaView/SchemaManifest.js +131 -0
  60. package/lib/cjs/SchemaView/SchemaManifest.js.map +1 -0
  61. package/lib/cjs/{SchemaView.d.ts → SchemaView/SchemaView.d.ts} +23 -90
  62. package/lib/cjs/SchemaView/SchemaView.d.ts.map +1 -0
  63. package/lib/cjs/{SchemaView.js → SchemaView/SchemaView.js} +32 -198
  64. package/lib/cjs/SchemaView/SchemaView.js.map +1 -0
  65. package/lib/cjs/SchemaView/SchemaViewBinaryReader.d.ts +37 -0
  66. package/lib/cjs/SchemaView/SchemaViewBinaryReader.d.ts.map +1 -0
  67. package/lib/cjs/{SchemaViewBinaryReader.js → SchemaView/SchemaViewBinaryReader.js} +84 -43
  68. package/lib/cjs/SchemaView/SchemaViewBinaryReader.js.map +1 -0
  69. package/lib/cjs/SchemaView/SchemaViewBuilder.d.ts +116 -0
  70. package/lib/cjs/SchemaView/SchemaViewBuilder.d.ts.map +1 -0
  71. package/lib/cjs/SchemaView/SchemaViewBuilder.js +230 -0
  72. package/lib/cjs/SchemaView/SchemaViewBuilder.js.map +1 -0
  73. package/lib/cjs/{SchemaViewInterfaces.d.ts → SchemaView/SchemaViewInterfaces.d.ts} +1 -1
  74. package/lib/cjs/SchemaView/SchemaViewInterfaces.d.ts.map +1 -0
  75. package/lib/cjs/SchemaView/SchemaViewInterfaces.js.map +1 -0
  76. package/lib/cjs/SchemaView/SchemaViewManager.d.ts +114 -0
  77. package/lib/cjs/SchemaView/SchemaViewManager.d.ts.map +1 -0
  78. package/lib/cjs/SchemaView/SchemaViewManager.js +184 -0
  79. package/lib/cjs/SchemaView/SchemaViewManager.js.map +1 -0
  80. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  81. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  82. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  83. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  84. package/lib/cjs/ecschema-metadata.d.ts +6 -3
  85. package/lib/cjs/ecschema-metadata.d.ts.map +1 -1
  86. package/lib/cjs/ecschema-metadata.js +6 -3
  87. package/lib/cjs/ecschema-metadata.js.map +1 -1
  88. package/lib/cjs/utils/ECClassHierarchy.js.map +1 -1
  89. package/lib/cjs/utils/SchemaGraph.js.map +1 -1
  90. package/lib/cjs/utils/SchemaLoadingController.js.map +1 -1
  91. package/lib/esm/Constants.js.map +1 -1
  92. package/lib/esm/DelayedPromise.js.map +1 -1
  93. package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
  94. package/lib/esm/Deserialization/Helper.js.map +1 -1
  95. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  96. package/lib/esm/Deserialization/JsonProps.js.map +1 -1
  97. package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
  98. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  99. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  100. package/lib/esm/ECName.js.map +1 -1
  101. package/lib/esm/ECObjects.js.map +1 -1
  102. package/lib/esm/Exception.js.map +1 -1
  103. package/lib/esm/Formatting/FormatSetFormatsProvider.js.map +1 -1
  104. package/lib/esm/Formatting/SchemaFormatsProvider.js.map +1 -1
  105. package/lib/esm/IncrementalLoading/ClassParsers.js.map +1 -1
  106. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  107. package/lib/esm/IncrementalLoading/FullSchemaQueries.js +466 -466
  108. package/lib/esm/IncrementalLoading/FullSchemaQueries.js.map +1 -1
  109. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  110. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  111. package/lib/esm/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  112. package/lib/esm/IncrementalLoading/SchemaItemQueries.js +235 -235
  113. package/lib/esm/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  114. package/lib/esm/IncrementalLoading/SchemaParser.js.map +1 -1
  115. package/lib/esm/IncrementalLoading/SchemaStubQueries.js +309 -309
  116. package/lib/esm/IncrementalLoading/SchemaStubQueries.js.map +1 -1
  117. package/lib/esm/Interfaces.js.map +1 -1
  118. package/lib/esm/Localization/LocalizationProvider.js.map +1 -1
  119. package/lib/esm/Localization/LocalizationTypes.js.map +1 -1
  120. package/lib/esm/Localization/SchemaLocalization.d.ts +1 -1
  121. package/lib/esm/Localization/SchemaLocalization.d.ts.map +1 -1
  122. package/lib/esm/Localization/SchemaLocalization.js.map +1 -1
  123. package/lib/esm/Metadata/Class.js.map +1 -1
  124. package/lib/esm/Metadata/Constant.js.map +1 -1
  125. package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
  126. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  127. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  128. package/lib/esm/Metadata/Enumeration.js.map +1 -1
  129. package/lib/esm/Metadata/Format.js.map +1 -1
  130. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  131. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  132. package/lib/esm/Metadata/Mixin.js.map +1 -1
  133. package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
  134. package/lib/esm/Metadata/Phenomenon.js.map +1 -1
  135. package/lib/esm/Metadata/Property.js.map +1 -1
  136. package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
  137. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  138. package/lib/esm/Metadata/Schema.js.map +1 -1
  139. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  140. package/lib/esm/Metadata/UnitSystem.js.map +1 -1
  141. package/lib/esm/PropertyTypes.js.map +1 -1
  142. package/lib/esm/SchemaJsonLocater.js.map +1 -1
  143. package/lib/esm/SchemaKey.js.map +1 -1
  144. package/lib/esm/SchemaLoader.js.map +1 -1
  145. package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
  146. package/lib/esm/SchemaView/SchemaManifest.d.ts +81 -0
  147. package/lib/esm/SchemaView/SchemaManifest.d.ts.map +1 -0
  148. package/lib/esm/SchemaView/SchemaManifest.js +127 -0
  149. package/lib/esm/SchemaView/SchemaManifest.js.map +1 -0
  150. package/lib/esm/{SchemaView.d.ts → SchemaView/SchemaView.d.ts} +23 -90
  151. package/lib/esm/SchemaView/SchemaView.d.ts.map +1 -0
  152. package/lib/esm/{SchemaView.js → SchemaView/SchemaView.js} +32 -197
  153. package/lib/esm/SchemaView/SchemaView.js.map +1 -0
  154. package/lib/esm/SchemaView/SchemaViewBinaryReader.d.ts +37 -0
  155. package/lib/esm/SchemaView/SchemaViewBinaryReader.d.ts.map +1 -0
  156. package/lib/esm/{SchemaViewBinaryReader.js → SchemaView/SchemaViewBinaryReader.js} +82 -43
  157. package/lib/esm/SchemaView/SchemaViewBinaryReader.js.map +1 -0
  158. package/lib/esm/SchemaView/SchemaViewBuilder.d.ts +116 -0
  159. package/lib/esm/SchemaView/SchemaViewBuilder.d.ts.map +1 -0
  160. package/lib/esm/SchemaView/SchemaViewBuilder.js +226 -0
  161. package/lib/esm/SchemaView/SchemaViewBuilder.js.map +1 -0
  162. package/lib/esm/{SchemaViewInterfaces.d.ts → SchemaView/SchemaViewInterfaces.d.ts} +1 -1
  163. package/lib/esm/SchemaView/SchemaViewInterfaces.d.ts.map +1 -0
  164. package/lib/esm/SchemaView/SchemaViewInterfaces.js.map +1 -0
  165. package/lib/esm/SchemaView/SchemaViewManager.d.ts +114 -0
  166. package/lib/esm/SchemaView/SchemaViewManager.d.ts.map +1 -0
  167. package/lib/esm/SchemaView/SchemaViewManager.js +180 -0
  168. package/lib/esm/SchemaView/SchemaViewManager.js.map +1 -0
  169. package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
  170. package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
  171. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  172. package/lib/esm/Validation/SchemaWalker.js.map +1 -1
  173. package/lib/esm/ecschema-metadata.d.ts +6 -3
  174. package/lib/esm/ecschema-metadata.d.ts.map +1 -1
  175. package/lib/esm/ecschema-metadata.js +6 -3
  176. package/lib/esm/ecschema-metadata.js.map +1 -1
  177. package/lib/esm/utils/ECClassHierarchy.js.map +1 -1
  178. package/lib/esm/utils/SchemaGraph.js.map +1 -1
  179. package/lib/esm/utils/SchemaLoadingController.js.map +1 -1
  180. package/package.json +8 -8
  181. package/lib/cjs/SchemaView.d.ts.map +0 -1
  182. package/lib/cjs/SchemaView.js.map +0 -1
  183. package/lib/cjs/SchemaViewBinaryReader.d.ts +0 -16
  184. package/lib/cjs/SchemaViewBinaryReader.d.ts.map +0 -1
  185. package/lib/cjs/SchemaViewBinaryReader.js.map +0 -1
  186. package/lib/cjs/SchemaViewInterfaces.d.ts.map +0 -1
  187. package/lib/cjs/SchemaViewInterfaces.js.map +0 -1
  188. package/lib/esm/SchemaView.d.ts.map +0 -1
  189. package/lib/esm/SchemaView.js.map +0 -1
  190. package/lib/esm/SchemaViewBinaryReader.d.ts +0 -16
  191. package/lib/esm/SchemaViewBinaryReader.d.ts.map +0 -1
  192. package/lib/esm/SchemaViewBinaryReader.js.map +0 -1
  193. package/lib/esm/SchemaViewInterfaces.d.ts.map +0 -1
  194. package/lib/esm/SchemaViewInterfaces.js.map +0 -1
  195. /package/lib/cjs/{SchemaViewInterfaces.js → SchemaView/SchemaViewInterfaces.js} +0 -0
  196. /package/lib/esm/{SchemaViewInterfaces.js → SchemaView/SchemaViewInterfaces.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaView.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaView.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,iEAAsR;AACtR,qEAAuF;AAGvF,8FAA8F;AAC9F,6FAA6F;AAC7F,6FAA6F;AAC7F,+FAA+F;AAC/F,8CAA8C;AAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AA8C9C;;;;;;;;;GASG;AACH,MAAa,UAAU;IACrB,gBAAgB;IACA,CAAC,QAAQ,CAAC,CAAoB;IAE7B,YAAY,CAAS;IAC9B,SAAS,GAAG,KAAK,CAAC;IAE1B;4GACwG;IACvF,aAAa,CAA0B;IAExD,gBAAgB;IAChB,YAAY,IAAoB,EAAE,WAAoB,EAAE,YAAqC;QAC3F,IAAI,CAAC,QAAQ,CAAC,GAAG;YACf,GAAG,IAAI;YACP,mBAAmB,EAAE,IAAI,GAAG,EAA+B;YAC3D,eAAe,EAAE,SAAS;SAC3B,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,IAAW,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3D;;OAEG;IACI,YAAY,KAAW,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;IAEtD,qCAAqC;IACrC,IAAW,WAAW,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1E,4CAA4C;IAC5C,IAAW,UAAU,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzE,+CAA+C;IACxC,SAAS,CAAC,IAAY;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,KAAa;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAClE,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IAED,2BAA2B;IACpB,CAAC,UAAU;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;YACpD,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,aAAqB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,aAAqB;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;QACjF,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,aAAqB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,aAAqB;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,UAAU,CAAC,IAAgB,EAAE,WAAoB;QAC7D,OAAO,IAAA,4CAAmB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,eAAe,CAAC,WAAoB;QAChD,MAAM,GAAG,GAAG,IAAI,+CAAsB,EAAE,CAAC;QACzC,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAC,IAAgB;QACnC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAClC,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;QAC/G,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,+FAA+F;QAC/F,0FAA0F;QAC1F,gGAAgG;QAChG,IAAI,CAAC,QAAQ,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC;IAC7C,CAAC;IAED,gDAAgD;IAEhD;wEACoE;IAC5D,qBAAqB,CAAC,aAAqB,EAAE,UAA4D;QAC/G,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAErC,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpE,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,SAAS;YACzB,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAE9C,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,gBAAgB;IACT,eAAe,CAAC,aAAqB;QAC1C,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QAE9B,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9D,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,SAAS;YACzB,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,kBAAkB,CAAC,QAAgB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB,CAAC,QAAgB,EAAE,MAAmB;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,8CAA8C;QAE7E,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,SAAS;gBAAE,SAAS,CAAC,6BAA6B;YACtF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACrB,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;IACT,oBAAoB,CAAC,QAAgB;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,GAAG,CAAC,IAAI,KAAK,gCAAS,CAAC,IAAI,EAAE,CAAC;YAChC,wEAAwE;YACxE,MAAM,MAAM,GAA0B,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;QACtD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAEO,kBAAkB,CACxB,QAAgB,EAChB,MAAwC;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,8CAA8C;QAE7E,yCAAyC;QACzC,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAEpD,iCAAiC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,SAAS;gBAAE,SAAS,CAAC,6BAA6B;YACtF,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,sCAAsC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;YAC/F,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,uBAAuB,CAC7B,QAAgB,EAChB,MAAwC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,8CAA8C;QAE/E,+DAA+D;QAC/D,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE3D,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACxE,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,WAAW,KAAK,SAAS;gBAAE,SAAS,CAAC,6BAA6B;YAC5F,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,8EAA8E;QAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;YAC/F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBACtB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,gBAAgB;IACT,oBAAoB;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,eAAe,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC;QAExF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YACvD,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,GAAG,GAAG,EAAE,CAAC;oBACT,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAxSD,gCAwSC;AAED,wFAAwF;AACxF,8CAA8C;AAC9C,wFAAwF;AAGxF,YAAY;AACZ,WAAiB,UAAU;IAEzB;;;OAGG;IACH,MAAa,MAAM;QAGE;QACgB;QAHnC,gBAAgB;QAChB,YACmB,IAAgB;QACjC,gBAAgB,CAAiB,GAAW;YAD3B,SAAI,GAAJ,IAAI,CAAY;YACA,QAAG,GAAH,GAAG,CAAQ;QAC1C,CAAC;QAEL,IAAY,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAErE;;;;;;WAMG;QACH,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrE,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC7F,IAAW,KAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAC5C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,IAAW,WAAW,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACnE,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrE,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAErE;kHAC0G;QAC1G,IAAW,QAAQ,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE9D,2FAA2F;QAC3F,IAAW,QAAQ;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3L,CAAC;QAED,kEAAkE;QAC3D,QAAQ,CAAC,IAAY;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,CAAC;QAED;;;WAGG;QACI,CAAC,UAAU,CAAC,MAAkB;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1E,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM;oBACpD,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,yEAAyE;QAClE,cAAc,CAAC,IAAY;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACzC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,CAAC;QAED,2EAA2E;QACpE,iBAAiB,CAAC,IAAY;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACzC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,CAAC;QAED,6EAA6E;QACtE,mBAAmB,CAAC,IAAY;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACzC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,CAAC;QAED,+CAA+C;QACxC,CAAC,eAAe;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE;gBACpE,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,uDAAuD;QAChD,CAAC,mBAAmB;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACjE,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,yDAAyD;QAClD,CAAC,qBAAqB;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACjE,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;KACF;IAtGY,iBAAM,SAsGlB,CAAA;IAED;;;;OAIG;IACH,MAAa,KAAK;QAGK;QACc;QAHnC,gBAAgB;QAChB,YACqB,IAAgB;QACnC,gBAAgB,CAAiB,GAAW;YADzB,SAAI,GAAJ,IAAI,CAAY;YACF,QAAG,GAAH,GAAG,CAAQ;QAC1C,CAAC;QAEL,gBAAgB;QAChB,IAAc,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvE;;WAEG;QACH,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrE,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAW,KAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAC5C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD;+EACuE;QACvE,IAAW,QAAQ;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QAClJ,CAAC;QACD,IAAW,MAAM,KAAa,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnF,IAAW,IAAI,KAAgB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAW,QAAQ,KAAoB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEpE,qBAAqB;QAErB,8IAA8I;QAC9I,6CAA6C;QACtC,QAAQ,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gCAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E;mDAC2C;QACpC,cAAc,KAAgC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gCAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QACzG,6CAA6C;QACtC,QAAQ,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gCAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E,6CAA6C;QACtC,OAAO,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gCAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,6CAA6C;QACtC,iBAAiB,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gCAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAC7F,6CAA6C;QACtC,MAAM,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gCAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvE,0BAA0B;QACnB,kBAAkB;YACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnG,CAAC;QAED,kBAAkB;QAClB,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,oCAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3F,IAAW,QAAQ,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,oCAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvF;;;;;;;qGAO6F;QAC7F,IAAW,QAAQ,KAA0B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1E;;;;;;;oCAO4B;QAC5B,IAAW,mBAAmB;YAC5B,IAAI,IAAI,GAA0B,IAAI,CAAC,KAAK,CAAC;YAC7C,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;oBAAE,OAAO,KAAK,CAAC,CAAC,sCAAsC;gBACjF,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACxC,qFAAqF;gBACrF,IAAI,GAAG,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/F,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,YAAY;QAEZ,qDAAqD;QACrD,IAAW,SAAS;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YACpC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,CAAC;QAED,+EAA+E;QAC/E,IAAW,MAAM;YACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAY,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;gBACtE,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,SAAS;oBAAE,SAAS,CAAC,kDAAkD;gBAC3G,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED;;WAEG;QACI,EAAE,CAAC,WAA2B;YACnC,IAAI,SAAiB,CAAC;YACtB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1C,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,4EAA4E;gBAC5E,+CAA+C;gBAC/C,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,SAAS,KAAK,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YACnC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC;QAED,+FAA+F;QAC/F,IAAW,cAAc;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,aAAa;QAEb;;;;;yBAKiB;QACV,WAAW,CAAC,IAAY;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,KAAK,SAAS;oBAC3G,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,oGAAoG;QAC7F,aAAa;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,6DAA6D;QACtD,gBAAgB;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF;IA3KY,gBAAK,QA2KjB,CAAA;IAED;;;;OAIG;IACH,MAAa,iBAAkB,SAAQ,KAAK;QAC1C,IAAW,QAAQ,KAAmB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnE,IAAW,iBAAiB,KAAwB,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAE1F,IAAW,MAAM;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAC3C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,CAAC;QAED,IAAW,MAAM;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAC3C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,CAAC;KACF;IAbY,4BAAiB,oBAa7B,CAAA;IAED,gBAAgB;IAChB,SAAgB,WAAW,CAAC,GAAe,EAAE,GAAW;QACtD,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,gCAAS,CAAC,YAAY;YAC5D,OAAO,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC;IAJe,sBAAW,cAI1B,CAAA;IAED;;;;OAIG;IACH,MAAsB,QAAQ;QAGP;QACF;QAIA;QAPnB,gBAAgB;QAChB,YACqB,IAAgB,EAClB,IAAiB;QAClC;;6EAEqE;QACpD,SAAiB;YALf,SAAI,GAAJ,IAAI,CAAY;YAClB,SAAI,GAAJ,IAAI,CAAa;YAIjB,cAAS,GAAT,SAAS,CAAQ;QAChC,CAAC;QAEL,gBAAgB;QAChB,IAAc,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE/E;;;;;WAKG;QACH,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACpE,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1F;qGAC6F;QAC7F,IAAW,KAAK;YACd,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAChD,OAAO,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACxF,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;YAC3C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,IAAW,IAAI,KAAmB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACjE;qHAC6G;QAC7G,IAAW,QAAQ,KAAc,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7D,6FAA6F;QAC7F,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE5D;;;;;WAKG;QACH,IAAW,cAAc;YACvB,OAAO,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,CAAC;QAED,yFAAyF;QACzF,IAAW,QAAQ;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YAClC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,CAAC;QAED,wDAAwD;QAExD;iGACyF;QAClF,WAAW;YAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,cAAc,CAAC;QACrG,CAAC;QACD,iFAAiF;QAC1E,QAAQ;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,WAAW,CAAC;QAC/F,CAAC;QACD,yFAAyF;QAClF,OAAO;YACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,WAAW,CAAC;QACvG,CAAC;QACD,gDAAgD;QACzC,YAAY;YACjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,UAAU,CAAC;QACpD,CAAC;QACD;;2FAEmF;QAC5E,aAAa;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC;QAED,oDAAoD;QAEpD,uBAAuB;QAChB,eAAe;YACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,mCAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,oBAAoB;QACb,YAAY;YACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,mCAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,mBAAmB;QACZ,WAAW;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,mCAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,wBAAwB;QACjB,gBAAgB;YACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,mCAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;KACF;IAxGqB,mBAAQ,WAwG7B,CAAA;IAED;;;OAGG;IACH,MAAa,iBAAkB,SAAQ,QAAQ;QAC7C,IAAW,aAAa,KAA8B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvF,IAAW,gBAAgB;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACvC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAC9B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QACD,IAAW,cAAc;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,CAAC;KACF;IAdY,4BAAiB,oBAc7B,CAAA;IAED;;;OAGG;IACH,MAAa,sBAAuB,SAAQ,QAAQ;QAClD,IAAW,aAAa,KAA8B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvF,IAAW,gBAAgB;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACvC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAC9B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QACD,IAAW,cAAc;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,CAAC;QACD,IAAW,cAAc,KAAyB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACpF,IAAW,cAAc,KAAyB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;KACrF;IAhBY,iCAAsB,yBAgBlC,CAAA;IAED;;;OAGG;IACH,MAAa,cAAe,SAAQ,QAAQ;QAC1C,IAAW,WAAW;YACpB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1D,CAAC;KACF;IAJY,yBAAc,iBAI1B,CAAA;IAED;;OAEG;IACH,MAAa,mBAAoB,SAAQ,QAAQ;QAC/C,IAAW,WAAW;YACpB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1D,CAAC;QACD,IAAW,cAAc,KAAyB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACpF,IAAW,cAAc,KAAyB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;KACrF;IANY,8BAAmB,sBAM/B,CAAA;IAED;;;OAGG;IACH,MAAa,kBAAmB,SAAQ,QAAQ;QAC9C,IAAW,SAAS,KAAwB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5E,IAAW,iBAAiB;YAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAsB,CAAC;QAC/E,CAAC;KACF;IALY,6BAAkB,qBAK9B,CAAA;IAyBD,gBAAgB;IAChB,SAAgB,cAAc,CAAC,GAAe,EAAE,GAAgB,EAAE,QAAgB;QAChF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACrD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,mCAAY,CAAC,SAAS,CAAC,CAAC,OAAO,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC9E,KAAK,mCAAY,CAAC,cAAc,CAAC,CAAC,OAAO,IAAI,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACxF,KAAK,mCAAY,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACxE,KAAK,mCAAY,CAAC,WAAW,CAAC,CAAC,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAClF,KAAK,mCAAY,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAChF,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAc,kBAAkB,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/J,CAAC;IACH,CAAC;IAVe,yBAAc,iBAU7B,CAAA;IAED;;OAEG;IACH,MAAa,WAAW;QAGH;QACgB;QAHnC,gBAAgB;QAChB,YACmB,IAAgB;QACjC,gBAAgB,CAAiB,GAAW;YAD3B,SAAI,GAAJ,IAAI,CAAY;YACA,QAAG,GAAH,GAAG,CAAQ;QAC1C,CAAC;QAEL,IAAY,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1E;;WAEG;QACH,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrE,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAW,KAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAC5C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,+CAA+C;QAC/C,IAAW,QAAQ;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QAClJ,CAAC;QACD,IAAW,MAAM,KAAa,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnF,IAAW,aAAa,KAA8B,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACxF,IAAW,QAAQ,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE9D,gDAAgD;QACzC,CAAC,cAAc;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE;gBAC5E,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,kDAAkD;QAC3C,mBAAmB,CAAC,IAAY;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/E,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,KAAK;oBAC9F,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,gCAAgC;QACzB,aAAa,CAAC,KAAsB;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/E,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK;oBACpD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF;IA1DY,sBAAW,cA0DvB,CAAA;IAED;;OAEG;IACH,MAAa,UAAU;QAGF;QACgB;QAHnC,gBAAgB;QAChB,YACmB,IAAgB;QACjC,gBAAgB,CAAiB,GAAW;YAD3B,SAAI,GAAJ,IAAI,CAAY;YACA,QAAG,GAAH,GAAG,CAAQ;QAC1C,CAAC;QAEL,IAAY,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEzE,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAW,KAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAC5C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,IAAW,KAAK,KAAsB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;KACjE;IAnBY,qBAAU,aAmBtB,CAAA;IAqBD;;OAEG;IACH,SAAgB,iBAAiB,CAAC,YAAoB;QACpD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAEhC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAErE,MAAM,UAAU,GAAG,eAAe,CAAC;QACnC,MAAM,KAAK,GAAiD,EAAE,CAAC;QAC/D,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAClF,CAAC;IAlBe,4BAAiB,oBAkBhC,CAAA;IAED;;OAEG;IACH,MAAa,cAAc;QAGN;QACgB;QAHnC,gBAAgB;QAChB,YACmB,IAAgB;QACjC,gBAAgB,CAAiB,GAAW;YAD3B,SAAI,GAAJ,IAAI,CAAY;YACA,QAAG,GAAH,GAAG,CAAQ;QAC1C,CAAC;QAEL,IAAY,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAElE;;WAEG;QACH,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrE,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAW,KAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAC5C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,8CAA8C;QAC9C,IAAW,QAAQ;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QAClJ,CAAC;QACD,IAAW,MAAM,KAAa,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnF,IAAW,aAAa,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACvE;;;;;WAKG;QACH,IAAW,eAAe;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC;YAChD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,qJAAqJ;QACrJ;;;;;;;WAOG;QACH,IAAW,sBAAsB;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC;YACpD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QAED;;;;;;;;;;;WAWG;QACH,IAAW,mBAAmB;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACxC,IAAI,GAAG,KAAK,EAAE;gBACZ,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;KACF;IAxEY,yBAAc,iBAwE1B,CAAA;IAED;;OAEG;IACH,MAAa,gBAAgB;QAGR;QACgB;QAHnC,gBAAgB;QAChB,YACmB,IAAgB;QACjC,gBAAgB,CAAiB,GAAW;YAD3B,SAAI,GAAJ,IAAI,CAAY;YACA,QAAG,GAAH,GAAG,CAAQ;QAC1C,CAAC;QAEL,IAAY,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE5E;;WAEG;QACH,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrE,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAW,KAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAW,WAAW;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAC5C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,mDAAmD;QACnD,IAAW,QAAQ;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QAClJ,CAAC;QACD,IAAW,MAAM,KAAa,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnF,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC9D;IA7BY,2BAAgB,mBA6B5B,CAAA;IAED;;OAEG;IACH,MAAa,aAAa;QAGL;QACA;QAHnB,gBAAgB;QAChB,YACmB,IAAgB,EAChB,IAAY;YADZ,SAAI,GAAJ,IAAI,CAAY;YAChB,SAAI,GAAJ,IAAI,CAAQ;QAC3B,CAAC;QAEL,IAAY,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7E,IAAW,kBAAkB;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;YAC7C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,CAAC;QACD,IAAW,WAAW,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACpE,gDAAgD;QAChD,IAAW,iBAAiB,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/E,gDAAgD;QAChD,IAAW,iBAAiB,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/E,8CAA8C;QAC9C,IAAW,SAAS;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YAC1C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,IAAW,iBAAiB;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,MAAM,MAAM,GAAY,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE;gBACtC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpG,OAAO,MAAM,CAAC;QAChB,CAAC;KACF;IA9BY,wBAAa,gBA8BzB,CAAA;AACH,CAAC,EA1yBgB,UAAU,0BAAV,UAAU,QA0yB1B","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Schema\n */\n\nimport { type ClassData, ClassModifier, ClassType, type EnumerationData, type EnumeratorData, type KoqData, type PropCategoryData, type PropertyDef, PropertyKind, type PropertyRef, type RelConstraintData, type SchemaData, SchemaViewPrimitiveType } from \"./SchemaViewInterfaces\";\nimport { parseSchemaViewBlob, SchemaViewMergeContext } from \"./SchemaViewBinaryReader\";\nimport { StrengthDirection, StrengthType } from \"../ECObjects\";\n\n// Module-local symbol used as the storage key on SchemaView instances. Mirrors the pattern in\n// core-backend/src/internal/Symbols.ts (e.g. `_nativeDb` on IModelDb): the data is reachable\n// only by code in this module, since the symbol is not exported and not registered globally.\n// The flyweight view classes (SchemaView.Schema, SchemaView.Class, etc.) live in the same file\n// and access the storage through this symbol.\nconst _storage = Symbol(\"SchemaView.storage\");\n\n/** Internal runtime storage attached to a SchemaView instance. Carries the immutable data\n * tables built by SchemaViewBuilder plus two mutable caches populated lazily at runtime.\n * @internal\n */\ninterface SchemaViewStorage extends SchemaViewData {\n readonly transitiveBaseCache: Map<number, ReadonlySet<number>>;\n derivedClassMap: ReadonlyMap<number, readonly number[]> | undefined;\n}\n\n/** A property reference paired with the index of the class that declared it. Used for\n * property inheritance resolution - the classIdx tracks where each property originates\n * (base class, mixin, or own) so consumers can discover the declaring class.\n * @internal\n */\nexport interface ResolvedPropertyRef {\n readonly ref: PropertyRef;\n readonly classIdx: number;\n}\n\n/** Internal data bag passed from the builder to the context constructor.\n * @internal\n */\nexport interface SchemaViewData {\n readonly strings: readonly string[];\n readonly lowerStrings: readonly string[];\n readonly schemas: readonly SchemaData[];\n readonly classes: readonly ClassData[];\n readonly classMixins: readonly number[];\n readonly propDefs: readonly PropertyDef[];\n readonly propertyRefs: readonly PropertyRef[];\n readonly relConstraints: readonly RelConstraintData[];\n readonly constraintClassRefs: readonly number[];\n readonly enumerations: readonly EnumerationData[];\n readonly enumerators: readonly EnumeratorData[];\n readonly koqs: readonly KoqData[];\n readonly propCategories: readonly PropCategoryData[];\n readonly schemaByName: ReadonlyMap<string, number>;\n readonly schemaByAlias: ReadonlyMap<string, number>;\n readonly classByName: ReadonlyMap<number, ReadonlyMap<string, number>>;\n readonly enumByName: ReadonlyMap<number, ReadonlyMap<string, number>>;\n readonly koqByName: ReadonlyMap<number, ReadonlyMap<string, number>>;\n readonly catByName: ReadonlyMap<number, ReadonlyMap<string, number>>;\n}\n\n/** Read-only schema metadata view. Optimized for fast lookup and low memory usage.\n *\n * All data is stored in flat arrays. View objects (`SchemaView.Schema`, `SchemaView.Class`, etc.) are\n * stateless wrappers that hold a reference to this view plus an index. They allocate nothing\n * and cache nothing.\n *\n * The view is immutable after construction. Build it via `SchemaViewBuilder` or parse\n * from a binary blob via `fromBinary`.\n * @beta\n */\nexport class SchemaView {\n /** @internal */\n public readonly [_storage]: SchemaViewStorage;\n\n private readonly _schemaToken: string;\n private _outdated = false;\n\n /** When present, this view is a *husk*: it retains the live builder and cross-reference maps, so\n * `mergeFragment` can append further fragment blobs. Undefined for one-shot views from `fromBinary`. */\n private readonly _mergeContext?: SchemaViewMergeContext;\n\n /** @internal */\n constructor(data: SchemaViewData, schemaToken?: string, mergeContext?: SchemaViewMergeContext) {\n this[_storage] = {\n ...data,\n transitiveBaseCache: new Map<number, ReadonlySet<number>>(),\n derivedClassMap: undefined,\n };\n this._schemaToken = schemaToken ?? \"\";\n this._mergeContext = mergeContext;\n }\n\n /** Cache-invalidation token identifying the schemas this view was built from: a hash of every\n * schema's name and version (see `PRAGMA checksum(schema_token)`), not of their full contents.\n * Empty string if not set (e.g., when built from a builder without a token).\n * @beta\n */\n public get schemaToken(): string { return this._schemaToken; }\n\n /** True if the host (`IModelDb` / `IModelConnection`) has replaced this view with a newer one.\n * The view remains fully functional - it returns stale data rather than throwing.\n * Consumers who stored a reference can check this flag for diagnostics.\n * @beta\n */\n public get isOutdated(): boolean { return this._outdated; }\n\n /** Mark this view as outdated. Called by the host when a newer view replaces it.\n * @internal\n */\n public markOutdated(): void { this._outdated = true; }\n\n /** Number of schemas in the view. */\n public get schemaCount(): number { return this[_storage].schemas.length; }\n\n /** Number of classes across all schemas. */\n public get classCount(): number { return this[_storage].classes.length; }\n\n /** Get a schema by name (case-insensitive). */\n public getSchema(name: string): SchemaView.Schema | undefined {\n const idx = this[_storage].schemaByName.get(name.toLowerCase());\n return idx !== undefined ? new SchemaView.Schema(this, idx) : undefined;\n }\n\n /** Get a schema by alias (case-insensitive). */\n public getSchemaByAlias(alias: string): SchemaView.Schema | undefined {\n const idx = this[_storage].schemaByAlias.get(alias.toLowerCase());\n return idx !== undefined ? new SchemaView.Schema(this, idx) : undefined;\n }\n\n /** Iterate all schemas. */\n public *getSchemas(): IterableIterator<SchemaView.Schema> {\n for (let i = 0; i < this[_storage].schemas.length; i++)\n yield new SchemaView.Schema(this, i);\n }\n\n /** Find a class by qualified name (\"SchemaName:ClassName\" or \"SchemaName.ClassName\").\n * The namespace part matches schema name first, then alias. Case-insensitive.\n */\n public findClass(qualifiedName: string): SchemaView.Class | undefined {\n const idx = this.resolveClassIdx(qualifiedName);\n return idx !== -1 ? SchemaView.createClass(this, idx) : undefined;\n }\n\n /** Find an enumeration by qualified name (\"SchemaName:EnumName\" or \"SchemaName.EnumName\").\n * The namespace part matches schema name first, then alias. Case-insensitive.\n */\n public findEnumeration(qualifiedName: string): SchemaView.Enumeration | undefined {\n const idx = this._resolveSchemaItemIdx(qualifiedName, this[_storage].enumByName);\n return idx !== undefined ? new SchemaView.Enumeration(this, idx) : undefined;\n }\n\n /** Find a KindOfQuantity by qualified name (\"SchemaName:KoqName\" or \"SchemaName.KoqName\").\n * The namespace part matches schema name first, then alias. Case-insensitive.\n */\n public findKindOfQuantity(qualifiedName: string): SchemaView.KindOfQuantity | undefined {\n const idx = this._resolveSchemaItemIdx(qualifiedName, this[_storage].koqByName);\n return idx !== undefined ? new SchemaView.KindOfQuantity(this, idx) : undefined;\n }\n\n /** Find a PropertyCategory by qualified name (\"SchemaName:CategoryName\" or \"SchemaName.CategoryName\").\n * The namespace part matches schema name first, then alias. Case-insensitive.\n */\n public findPropertyCategory(qualifiedName: string): SchemaView.PropertyCategory | undefined {\n const idx = this._resolveSchemaItemIdx(qualifiedName, this[_storage].catByName);\n return idx !== undefined ? new SchemaView.PropertyCategory(this, idx) : undefined;\n }\n\n /** Parse a binary blob into a SchemaView. Synchronous.\n * @param blob - The binary blob from `PRAGMA schema_view`.\n * @param schemaToken - Optional cache-invalidation token (schema name+version hash; see `PRAGMA checksum(schema_token)`).\n * @beta\n */\n public static fromBinary(blob: Uint8Array, schemaToken?: string): SchemaView {\n return parseSchemaViewBlob(blob, schemaToken);\n }\n\n /** Create an empty, *mergeable* view (a \"husk\"). It contains no schemas until `mergeFragment` is\n * called. Each merged fragment is appended into the same instance, so flyweights and cached\n * cross-references obtained earlier stay valid - indices are append-only and never reordered.\n * @note Fragments must be merged in dependency order: a fragment may only reference schemas from\n * fragments already merged.\n * @internal\n */\n public static createMergeable(schemaToken?: string): SchemaView {\n const ctx = new SchemaViewMergeContext();\n return new SchemaView(ctx.builder.assembleData(), schemaToken, ctx);\n }\n\n /** Merge one fragment blob into this view. Only valid on a view created via `createMergeable`.\n * Synchronous. Any flyweight or cached index obtained before the call remains valid.\n * @note If the merge throws (e.g. on a malformed blob), the view may be left partially extended\n * and must be discarded by the host.\n * @internal\n */\n public mergeFragment(blob: Uint8Array): void {\n if (this._mergeContext === undefined)\n throw new Error(\"SchemaView is not mergeable: create it via SchemaView.createMergeable to merge fragments.\");\n this._mergeContext.mergeBlob(blob);\n // A new fragment can add subclasses to an already-present base class, so the derived-class map\n // must be rebuilt. transitiveBaseCache stays valid: a class's ancestors are always merged\n // before it (dependency order), so an append never adds an ancestor to an already-cached class.\n this[_storage].derivedClassMap = undefined;\n }\n\n // --- Internal helpers used by view objects ---\n\n /** Resolve a qualified \"SchemaName:ItemName\" (or dot-separated) to an index using the given\n * per-schema name map. Returns undefined if not found. @internal */\n private _resolveSchemaItemIdx(qualifiedName: string, itemByName: ReadonlyMap<number, ReadonlyMap<string, number>>): number | undefined {\n const sep = qualifiedName.indexOf(\":\");\n const dotSep = sep === -1 ? qualifiedName.indexOf(\".\") : -1;\n const splitAt = sep !== -1 ? sep : dotSep;\n if (splitAt === -1) return undefined;\n\n const ns = qualifiedName.substring(0, splitAt).toLowerCase();\n const itemName = qualifiedName.substring(splitAt + 1).toLowerCase();\n\n let schemaIdx = this[_storage].schemaByName.get(ns);\n if (schemaIdx === undefined)\n schemaIdx = this[_storage].schemaByAlias.get(ns);\n if (schemaIdx === undefined) return undefined;\n\n return itemByName.get(schemaIdx)?.get(itemName);\n }\n\n /** @internal */\n public resolveClassIdx(qualifiedName: string): number {\n const sep = qualifiedName.indexOf(\":\");\n const dotSep = sep === -1 ? qualifiedName.indexOf(\".\") : -1;\n const splitAt = sep !== -1 ? sep : dotSep;\n if (splitAt === -1) return -1;\n\n const ns = qualifiedName.substring(0, splitAt).toLowerCase();\n const cn = qualifiedName.substring(splitAt + 1).toLowerCase();\n\n let schemaIdx = this[_storage].schemaByName.get(ns);\n if (schemaIdx === undefined)\n schemaIdx = this[_storage].schemaByAlias.get(ns);\n if (schemaIdx === undefined) return -1;\n\n const classMap = this[_storage].classByName.get(schemaIdx);\n const classIdx = classMap?.get(cn);\n return classIdx ?? -1;\n }\n\n /** @internal */\n public getTransitiveBases(classIdx: number): ReadonlySet<number> {\n const cached = this[_storage].transitiveBaseCache.get(classIdx);\n if (cached !== undefined) return cached;\n\n const result = new Set<number>();\n this._buildTransitiveBases(classIdx, result);\n this[_storage].transitiveBaseCache.set(classIdx, result);\n return result;\n }\n\n private _buildTransitiveBases(classIdx: number, result: Set<number>): void {\n const cls = this[_storage].classes[classIdx];\n if (cls === undefined) return; // safety: dangling index from excluded schema\n\n if (cls.baseClassIdx !== -1 && !result.has(cls.baseClassIdx)) {\n result.add(cls.baseClassIdx);\n this._buildTransitiveBases(cls.baseClassIdx, result);\n }\n\n for (let i = 0; i < cls.mixinCount; i++) {\n const mixinIdx = this[_storage].classMixins[cls.mixinStartIdx + i];\n if (mixinIdx === -1 || mixinIdx === undefined) continue; // safety: dangling mixin ref\n if (!result.has(mixinIdx)) {\n result.add(mixinIdx);\n this._buildTransitiveBases(mixinIdx, result);\n }\n }\n }\n\n /** @internal */\n public resolveAllProperties(classIdx: number): readonly ResolvedPropertyRef[] {\n const cls = this[_storage].classes[classIdx];\n\n if (cls.type === ClassType.View) {\n // Views don't participate in property inheritance - own properties only\n const result: ResolvedPropertyRef[] = [];\n for (let i = 0; i < cls.ownPropCount; i++) {\n const ref = this[_storage].propertyRefs[cls.ownPropStart + i];\n result.push({ ref, classIdx: -1 });\n }\n return result;\n }\n\n const merged = new Map<string, ResolvedPropertyRef>();\n this._collectProperties(classIdx, merged);\n return Array.from(merged.values());\n }\n\n private _collectProperties(\n classIdx: number,\n merged: Map<string, ResolvedPropertyRef>,\n ): void {\n const cls = this[_storage].classes[classIdx];\n if (cls === undefined) return; // safety: dangling index from excluded schema\n\n // 1. Base class (recursive, depth-first)\n if (cls.baseClassIdx !== -1)\n this._collectProperties(cls.baseClassIdx, merged);\n\n // 2. Mixins in declaration order\n for (let i = 0; i < cls.mixinCount; i++) {\n const mixinIdx = this[_storage].classMixins[cls.mixinStartIdx + i];\n if (mixinIdx === -1 || mixinIdx === undefined) continue; // safety: dangling mixin ref\n this._collectMixinProperties(mixinIdx, merged);\n }\n\n // 3. Own properties - always override\n for (let i = 0; i < cls.ownPropCount; i++) {\n const ref = this[_storage].propertyRefs[cls.ownPropStart + i];\n const nameKey = this[_storage].lowerStrings[this[_storage].propDefs[ref.defIdx].nameStringIdx];\n merged.set(nameKey, { ref, classIdx });\n }\n }\n\n private _collectMixinProperties(\n mixinIdx: number,\n merged: Map<string, ResolvedPropertyRef>,\n ): void {\n const mixin = this[_storage].classes[mixinIdx];\n if (mixin === undefined) return; // safety: dangling index from excluded schema\n\n // Walk mixin's own base chain (mixins can extend other mixins)\n if (mixin.baseClassIdx !== -1)\n this._collectMixinProperties(mixin.baseClassIdx, merged);\n\n // Mixin's own mixins\n for (let i = 0; i < mixin.mixinCount; i++) {\n const subMixinIdx = this[_storage].classMixins[mixin.mixinStartIdx + i];\n if (subMixinIdx === -1 || subMixinIdx === undefined) continue; // safety: dangling mixin ref\n this._collectMixinProperties(subMixinIdx, merged);\n }\n\n // Mixin's own properties - only set if not already present (first mixin wins)\n for (let i = 0; i < mixin.ownPropCount; i++) {\n const ref = this[_storage].propertyRefs[mixin.ownPropStart + i];\n const nameKey = this[_storage].lowerStrings[this[_storage].propDefs[ref.defIdx].nameStringIdx];\n if (!merged.has(nameKey))\n merged.set(nameKey, { ref, classIdx: mixinIdx });\n }\n }\n\n /** @internal */\n public buildDerivedClassMap(): ReadonlyMap<number, readonly number[]> {\n if (this[_storage].derivedClassMap !== undefined) return this[_storage].derivedClassMap;\n\n const map = new Map<number, number[]>();\n for (let i = 0; i < this[_storage].classes.length; i++) {\n const baseIdx = this[_storage].classes[i].baseClassIdx;\n if (baseIdx !== -1) {\n let arr = map.get(baseIdx);\n if (arr === undefined) {\n arr = [];\n map.set(baseIdx, arr);\n }\n arr.push(i);\n }\n }\n this[_storage].derivedClassMap = map;\n return map;\n }\n}\n\n// =====================================================================================\n// SchemaView namespace - flyweight view types\n// =====================================================================================\n\n\n/** @beta */\nexport namespace SchemaView {\n\n /** Lightweight view over a schema in a `SchemaView`. Holds only a view reference and\n * an index - no data duplication, no mutable state.\n * @beta\n */\n export class Schema {\n /** @internal */\n constructor(\n private readonly _ctx: SchemaView,\n /** @internal */ public readonly idx: number,\n ) { }\n\n private get _data() { return this._ctx[_storage].schemas[this.idx]; }\n\n /** Row ID from ec_Schema. Matches `ECInstanceId` in ECDbMeta views, e.g.\n * `SELECT * FROM meta.ECSchemaDef WHERE ECInstanceId = ?`.\n *\n * This is not an array index or internal handle - it is the database row ID from the ec_Schema\n * table, carried through the binary blob so consumers can fall back to ECSQL meta-queries for\n * data not included in the schema view (custom attributes, schema references, etc.).\n */\n public get ecInstanceId(): number { return this._data.ecInstanceId; }\n public get name(): string { return this._ctx[_storage].strings[this._data.nameStringIdx]; }\n public get alias(): string { return this._ctx[_storage].strings[this._data.aliasStringIdx]; }\n public get label(): string {\n const sid = this._data.labelStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;\n }\n public get description(): string {\n const sid = this._data.descriptionStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n public get readVersion(): number { return this._data.versionRead; }\n public get writeVersion(): number { return this._data.versionWrite; }\n public get minorVersion(): number { return this._data.versionMinor; }\n\n /** Reflects the `HiddenSchema` custom attribute from `CoreCustomAttributes`.\n * Schemas marked hidden are typically excluded from UI display but remain accessible programmatically. */\n public get isHidden(): boolean { return this._data.isHidden; }\n\n /** \"SchemaName.RR.WW.mm\" - dot-separated, matching the EC schema versioning convention. */\n public get fullName(): string {\n const d = this._data;\n return `${this._ctx[_storage].strings[d.nameStringIdx]}.${String(d.versionRead).padStart(2, \"0\")}.${String(d.versionWrite).padStart(2, \"0\")}.${String(d.versionMinor).padStart(2, \"0\")}`;\n }\n\n /** Find a class by name within this schema (case-insensitive). */\n public getClass(name: string): Class | undefined {\n const classMap = this._ctx[_storage].classByName.get(this.idx);\n const classIdx = classMap?.get(name.toLowerCase());\n return classIdx !== undefined ? createClass(this._ctx, classIdx) : undefined;\n }\n\n /** Iterate classes in this schema. Pass a `ClassType` to filter to a single kind\n * (e.g. `getClasses(ClassType.View)`). Omit the argument to iterate every class\n * regardless of type.\n */\n public *getClasses(filter?: ClassType): IterableIterator<Class> {\n const d = this._data;\n const classes = this._ctx[_storage].classes;\n for (let i = d.classRangeStart; i < d.classRangeStart + d.classCount; i++) {\n if (filter === undefined || classes[i].type === filter)\n yield createClass(this._ctx, i);\n }\n }\n\n /** Find an enumeration by name within this schema (case-insensitive). */\n public getEnumeration(name: string): Enumeration | undefined {\n const map = this._ctx[_storage].enumByName.get(this.idx);\n const idx = map?.get(name.toLowerCase());\n return idx !== undefined ? new Enumeration(this._ctx, idx) : undefined;\n }\n\n /** Find a KindOfQuantity by name within this schema (case-insensitive). */\n public getKindOfQuantity(name: string): KindOfQuantity | undefined {\n const map = this._ctx[_storage].koqByName.get(this.idx);\n const idx = map?.get(name.toLowerCase());\n return idx !== undefined ? new KindOfQuantity(this._ctx, idx) : undefined;\n }\n\n /** Find a PropertyCategory by name within this schema (case-insensitive). */\n public getPropertyCategory(name: string): PropertyCategory | undefined {\n const map = this._ctx[_storage].catByName.get(this.idx);\n const idx = map?.get(name.toLowerCase());\n return idx !== undefined ? new PropertyCategory(this._ctx, idx) : undefined;\n }\n\n /** Iterate all enumerations in this schema. */\n public *getEnumerations(): IterableIterator<Enumeration> {\n const d = this._data;\n for (let i = d.enumRangeStart; i < d.enumRangeStart + d.enumCount; i++)\n yield new Enumeration(this._ctx, i);\n }\n\n /** Iterate all KindOfQuantity items in this schema. */\n public *getKindOfQuantities(): IterableIterator<KindOfQuantity> {\n const d = this._data;\n for (let i = d.koqRangeStart; i < d.koqRangeStart + d.koqCount; i++)\n yield new KindOfQuantity(this._ctx, i);\n }\n\n /** Iterate all PropertyCategory items in this schema. */\n public *getPropertyCategories(): IterableIterator<PropertyCategory> {\n const d = this._data;\n for (let i = d.catRangeStart; i < d.catRangeStart + d.catCount; i++)\n yield new PropertyCategory(this._ctx, i);\n }\n }\n\n /** Lightweight view over a class in a `SchemaView`. For relationship-specific\n * fields (strength, direction, source/target constraints), narrow via `isRelationship()`\n * or `assertRelationship()` to get a `SchemaView.RelationshipClass`.\n * @beta\n */\n export class Class {\n /** @internal */\n constructor(\n protected readonly _ctx: SchemaView,\n /** @internal */ public readonly idx: number,\n ) { }\n\n /** @internal */\n protected get _data() { return this._ctx[_storage].classes[this.idx]; }\n\n /** Row ID from ec_Class. Matches `ECInstanceId` in ECDbMeta views, e.g.\n * `SELECT * FROM meta.ECClassDef WHERE ECInstanceId = ?`.\n */\n public get ecInstanceId(): number { return this._data.ecInstanceId; }\n public get name(): string { return this._ctx[_storage].strings[this._data.nameStringIdx]; }\n public get label(): string {\n const sid = this._data.labelStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;\n }\n public get description(): string {\n const sid = this._data.descriptionStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n /** \"SchemaName:ClassName\" - colon-separated, matching the EC class full name convention.\n * Use either \":\" or \".\" as separator when passing to `findClass()`. */\n public get fullName(): string {\n const d = this._data;\n return `${this._ctx[_storage].strings[this._ctx[_storage].schemas[d.schemaIdx].nameStringIdx]}:${this._ctx[_storage].strings[d.nameStringIdx]}`;\n }\n public get schema(): Schema { return new Schema(this._ctx, this._data.schemaIdx); }\n public get type(): ClassType { return this._data.type; }\n public get modifier(): ClassModifier { return this._data.modifier; }\n\n // Type check methods\n\n // disabling lint rule for these because we explicitly want them to mirror same methods in ecschema-metadata, to make the APIs more compatible\n // eslint-disable-next-line @itwin/prefer-get\n public isEntity(): boolean { return this._data.type === ClassType.Entity; }\n /** Type predicate - narrows to `SchemaView.RelationshipClass` for access to strength, direction,\n * source, and target constraint fields. */\n public isRelationship(): this is RelationshipClass { return this._data.type === ClassType.Relationship; }\n // eslint-disable-next-line @itwin/prefer-get\n public isStruct(): boolean { return this._data.type === ClassType.Struct; }\n // eslint-disable-next-line @itwin/prefer-get\n public isMixin(): boolean { return this._data.type === ClassType.Mixin; }\n // eslint-disable-next-line @itwin/prefer-get\n public isCustomAttribute(): boolean { return this._data.type === ClassType.CustomAttribute; }\n // eslint-disable-next-line @itwin/prefer-get\n public isView(): boolean { return this._data.type === ClassType.View; }\n\n /** @see isRelationship */\n public assertRelationship(): asserts this is RelationshipClass {\n if (!this.isRelationship())\n throw new Error(`Expected a relationship class, got type ${this.type} for \"${this.fullName}\"`);\n }\n\n // Modifier checks\n public get isAbstract(): boolean { return this._data.modifier === ClassModifier.Abstract; }\n public get isSealed(): boolean { return this._data.modifier === ClassModifier.Sealed; }\n\n /** Reflects the `HiddenClass` custom attribute from `CoreCustomAttributes`.\n * Returns `true` when this class is directly hidden (via `HiddenClass(Show!=true)` or\n * schema-level `HiddenSchema(ShowClasses!=true)`). Does NOT consider base class inheritance -\n * use `isEffectivelyHidden` for that.\n *\n * Note: `false` means explicitly shown via `HiddenClass(Show=true)`. `undefined` means\n * no `HiddenClass` CA and the schema does not hide its classes. Both are \"not hidden\" for\n * this property, but `isEffectivelyHidden` distinguishes them when walking the hierarchy. */\n public get isHidden(): boolean | undefined { return this._data.isHidden; }\n\n /** Computed hidden status that walks the base class chain (not mixins).\n *\n * Returns `true` if this class is hidden or any ancestor in the base class chain is hidden,\n * unless this class or an intermediate class explicitly breaks the chain with\n * `HiddenClass(Show=true)` (i.e. `isHidden === false`).\n *\n * Mixins are intentionally excluded - a hidden mixin represents a hidden capability,\n * not a hidden identity. */\n public get isEffectivelyHidden(): boolean {\n let data: ClassData | undefined = this._data;\n while (data !== undefined) {\n if (data.isHidden === false) return false; // explicit Show=true breaks the chain\n if (data.isHidden === true) return true;\n // undefined: walk to base class via internal array (avoids allocating Class objects)\n data = data.baseClassIdx !== -1 ? this._ctx[_storage].classes[data.baseClassIdx] : undefined;\n }\n return false;\n }\n\n // Hierarchy\n\n /** Single base class. undefined for root classes. */\n public get baseClass(): Class | undefined {\n const idx = this._data.baseClassIdx;\n return idx !== -1 ? createClass(this._ctx, idx) : undefined;\n }\n\n /** Applied mixins in declaration order. Only meaningful for entity classes. */\n public get mixins(): readonly Class[] {\n const d = this._data;\n if (d.mixinCount === 0) return [];\n const result: Class[] = [];\n for (let i = 0; i < d.mixinCount; i++) {\n const mixinIdx = this._ctx[_storage].classMixins[d.mixinStartIdx + i];\n if (mixinIdx === -1 || mixinIdx === undefined) continue; // safety: dangling mixin ref from excluded schema\n result.push(createClass(this._ctx, mixinIdx));\n }\n return result;\n }\n\n /** IS-A check. Returns true if this class is, or derives from, `other` (transitively, including mixins).\n * Accepts a `SchemaView.Class` or a qualified name string (\"SchemaName:ClassName\").\n */\n public is(classOrName: Class | string): boolean {\n let targetIdx: number;\n if (typeof classOrName === \"string\") {\n targetIdx = this._ctx.resolveClassIdx(classOrName);\n } else if (classOrName._ctx === this._ctx) {\n targetIdx = classOrName.idx;\n } else {\n // Cross-view input: indices are not comparable across SchemaView instances.\n // Resolve by qualified name against this view.\n targetIdx = this._ctx.resolveClassIdx(classOrName.fullName);\n }\n if (targetIdx === -1) return false;\n if (this.idx === targetIdx) return true;\n return this._ctx.getTransitiveBases(this.idx).has(targetIdx);\n }\n\n /** Direct derived classes. Expensive on first call (builds reverse map across all classes). */\n public get derivedClasses(): readonly Class[] {\n const map = this._ctx.buildDerivedClassMap();\n const indices = map.get(this.idx);\n if (indices === undefined) return [];\n return indices.map((i) => createClass(this._ctx, i));\n }\n\n // Properties\n\n /** Find a property by name (case-insensitive). Searches own + inherited.\n *\n * Note: this resolves the full property list and linear-scans it on every call. For workloads\n * that hit `getProperty` repeatedly on the same class with different names, a per-class\n * resolved-property map cache could be added on the view. Not done now - measure before\n * optimizing. */\n public getProperty(name: string): Property | undefined {\n const allProps = this._ctx.resolveAllProperties(this.idx);\n const lowerName = name.toLowerCase();\n for (const rp of allProps) {\n if (this._ctx[_storage].lowerStrings[this._ctx[_storage].propDefs[rp.ref.defIdx].nameStringIdx] === lowerName)\n return createProperty(this._ctx, rp.ref, rp.classIdx);\n }\n return undefined;\n }\n\n /** All properties including inherited, in inheritance order (base first, then mixins, then own). */\n public getProperties(): readonly Property[] {\n const allRefs = this._ctx.resolveAllProperties(this.idx);\n return allRefs.map((rp) => createProperty(this._ctx, rp.ref, rp.classIdx));\n }\n\n /** Own properties only (not inherited), in ordinal order. */\n public getOwnProperties(): readonly Property[] {\n const d = this._data;\n const result: Property[] = [];\n for (let i = 0; i < d.ownPropCount; i++) {\n const ref = this._ctx[_storage].propertyRefs[d.ownPropStart + i];\n result.push(createProperty(this._ctx, ref, this.idx));\n }\n return result;\n }\n }\n\n /** A relationship class with constraint and strength metadata. Created by `createClass()`\n * when the underlying `ClassType` is `Relationship`. Use `cls.isRelationship()` to narrow a\n * `SchemaView.Class` to this type.\n * @beta\n */\n export class RelationshipClass extends Class {\n public get strength(): StrengthType { return this._data.strength; }\n public get strengthDirection(): StrengthDirection { return this._data.strengthDirection; }\n\n public get source(): RelConstraint | undefined {\n const idx = this._data.sourceConstraintIdx;\n return idx !== -1 ? new RelConstraint(this._ctx, idx) : undefined;\n }\n\n public get target(): RelConstraint | undefined {\n const idx = this._data.targetConstraintIdx;\n return idx !== -1 ? new RelConstraint(this._ctx, idx) : undefined;\n }\n }\n\n /** @internal */\n export function createClass(ctx: SchemaView, idx: number): Class {\n if (ctx[_storage].classes[idx].type === ClassType.Relationship)\n return new RelationshipClass(ctx, idx);\n return new Class(ctx, idx);\n }\n\n /** Lightweight view over a property in a `SchemaView`. Subclasses provide\n * type-safe access to kind-specific fields. Use `isPrimitive()`, `isStruct()`,\n * `isArray()`, or `isNavigation()` to narrow, or the corresponding `assert*()` methods.\n * @beta\n */\n export abstract class Property {\n /** @internal */\n constructor(\n protected readonly _ctx: SchemaView,\n private readonly _ref: PropertyRef,\n /** Index of the class that declared or contributed this property through inheritance.\n * For own properties, this is the class itself. For inherited properties, this is the\n * base class or mixin that introduced it. -1 for view properties. */\n private readonly _classIdx: number,\n ) { }\n\n /** @internal */\n protected get _def() { return this._ctx[_storage].propDefs[this._ref.defIdx]; }\n\n /** Row ID from ec_Property. Matches `ECInstanceId` in ECDbMeta views, e.g.\n * `SELECT * FROM meta.ECPropertyDef WHERE ECInstanceId = ?`.\n *\n * Stored per-reference (not per-definition) because each class-property pair has a unique\n * ec_Property row even when the structural definition is deduplicated.\n */\n public get ecInstanceId(): number { return this._ref.ecInstanceId; }\n public get name(): string { return this._ctx[_storage].strings[this._def.nameStringIdx]; }\n /** Display label. Falls back to the property name if no explicit label is set.\n * Labels are stored per-reference (not per-definition) because EC allows class overrides. */\n public get label(): string {\n const labelStringIdx = this._ref.labelStringIdx;\n return labelStringIdx !== 0 ? this._ctx[_storage].strings[labelStringIdx] : this.name;\n }\n public get description(): string {\n const sid = this._def.descriptionStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n public get kind(): PropertyKind { return this._def.kind; }\n public get isReadOnly(): boolean { return this._def.isReadOnly; }\n /** Reflects the `HiddenProperty` custom attribute from `CoreCustomAttributes`.\n * Properties marked hidden are typically excluded from UI display but remain accessible programmatically. */\n public get isHidden(): boolean { return this._def.isHidden; }\n /** Display priority. Higher values should be displayed more prominently. 0 means default. */\n public get priority(): number { return this._ref.priority; }\n\n /** The class that declared or contributed this property through inheritance.\n * For own properties, returns the class itself. For inherited properties, returns the\n * base class or mixin that introduced it. Returns `undefined` for view properties.\n * This is the class array index, not the ec_Class.Id from the database.\n * @beta\n */\n public get declaringClass(): Class | undefined {\n return this._classIdx !== -1 ? createClass(this._ctx, this._classIdx) : undefined;\n }\n\n /** Property category, or undefined if none assigned. Available on all property kinds. */\n public get category(): PropertyCategory | undefined {\n const idx = this._def.categoryIdx;\n return idx !== -1 ? new PropertyCategory(this._ctx, idx) : undefined;\n }\n\n // Type guards - real type predicates that narrow `this`\n\n /** True for `SchemaView.PrimitiveProperty` and `SchemaView.PrimitiveArrayProperty`.\n * Matches ecschema-metadata behavior where `isPrimitive()` includes primitive arrays. */\n public isPrimitive(): this is AnyPrimitiveProperty {\n return this._def.kind === PropertyKind.Primitive || this._def.kind === PropertyKind.PrimitiveArray;\n }\n /** True for `SchemaView.StructProperty` and `SchemaView.StructArrayProperty`. */\n public isStruct(): this is AnyStructProperty {\n return this._def.kind === PropertyKind.Struct || this._def.kind === PropertyKind.StructArray;\n }\n /** True for `SchemaView.PrimitiveArrayProperty` and `SchemaView.StructArrayProperty`. */\n public isArray(): this is AnyArrayProperty {\n return this._def.kind === PropertyKind.PrimitiveArray || this._def.kind === PropertyKind.StructArray;\n }\n /** True for `SchemaView.NavigationProperty`. */\n public isNavigation(): this is NavigationProperty {\n return this._def.kind === PropertyKind.Navigation;\n }\n /** True if this property is backed by an enumeration. Enumerations are a facet of primitive\n * properties - an enum property IS a primitive property with an enum binding. Narrows to\n * `AnyPrimitiveProperty` so you can access `enumeration`, `primitiveType`, etc. */\n public isEnumeration(): this is AnyPrimitiveProperty {\n return this._def.enumIdx !== -1;\n }\n\n // Assert methods - throw on mismatch, narrow `this`\n\n /** @see isPrimitive */\n public assertPrimitive(): asserts this is AnyPrimitiveProperty {\n if (!this.isPrimitive())\n throw new Error(`Expected a primitive property, got ${PropertyKind[this.kind]}`);\n }\n /** @see isStruct */\n public assertStruct(): asserts this is AnyStructProperty {\n if (!this.isStruct())\n throw new Error(`Expected a struct property, got ${PropertyKind[this.kind]}`);\n }\n /** @see isArray */\n public assertArray(): asserts this is AnyArrayProperty {\n if (!this.isArray())\n throw new Error(`Expected an array property, got ${PropertyKind[this.kind]}`);\n }\n /** @see isNavigation */\n public assertNavigation(): asserts this is NavigationProperty {\n if (!this.isNavigation())\n throw new Error(`Expected a navigation property, got ${PropertyKind[this.kind]}`);\n }\n }\n\n /** A scalar primitive property. May optionally be backed by an enumeration -\n * check `isEnumeration()` or `enumeration`.\n * @beta\n */\n export class PrimitiveProperty extends Property {\n public get primitiveType(): SchemaViewPrimitiveType { return this._def.primitiveType; }\n public get extendedTypeName(): string | undefined {\n const sid = this._def.extTypeStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : undefined;\n }\n public get enumeration(): Enumeration | undefined {\n const idx = this._def.enumIdx;\n return idx !== -1 ? new Enumeration(this._ctx, idx) : undefined;\n }\n public get kindOfQuantity(): KindOfQuantity | undefined {\n const idx = this._def.koqIdx;\n return idx !== -1 ? new KindOfQuantity(this._ctx, idx) : undefined;\n }\n }\n\n /** An array of primitive values. Same primitive/enum fields as `PrimitiveProperty`,\n * plus array bounds.\n * @beta\n */\n export class PrimitiveArrayProperty extends Property {\n public get primitiveType(): SchemaViewPrimitiveType { return this._def.primitiveType; }\n public get extendedTypeName(): string | undefined {\n const sid = this._def.extTypeStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : undefined;\n }\n public get enumeration(): Enumeration | undefined {\n const idx = this._def.enumIdx;\n return idx !== -1 ? new Enumeration(this._ctx, idx) : undefined;\n }\n public get kindOfQuantity(): KindOfQuantity | undefined {\n const idx = this._def.koqIdx;\n return idx !== -1 ? new KindOfQuantity(this._ctx, idx) : undefined;\n }\n public get arrayMinOccurs(): number | undefined { return this._def.arrayMinOccurs; }\n public get arrayMaxOccurs(): number | undefined { return this._def.arrayMaxOccurs; }\n }\n\n /** A scalar struct property. `structClass` is non-nullable - the binary parser drops\n * properties whose struct class can't be resolved (e.g. from excluded schemas).\n * @beta\n */\n export class StructProperty extends Property {\n public get structClass(): Class {\n return createClass(this._ctx, this._def.structClassIdx);\n }\n }\n\n /** An array of struct values. Same struct field as `StructProperty`, plus array bounds.\n * @beta\n */\n export class StructArrayProperty extends Property {\n public get structClass(): Class {\n return createClass(this._ctx, this._def.structClassIdx);\n }\n public get arrayMinOccurs(): number | undefined { return this._def.arrayMinOccurs; }\n public get arrayMaxOccurs(): number | undefined { return this._def.arrayMaxOccurs; }\n }\n\n /** A navigation property. `relationshipClass` is non-nullable - the binary parser drops\n * properties whose relationship class can't be resolved.\n * @beta\n */\n export class NavigationProperty extends Property {\n public get direction(): StrengthDirection { return this._def.navDirection; }\n public get relationshipClass(): RelationshipClass {\n return createClass(this._ctx, this._def.navRelClassIdx) as RelationshipClass;\n }\n }\n\n /** Any primitive property (scalar or array). Useful for accessing `primitiveType`,\n * `extendedTypeName`, `enumeration`, `kindOfQuantity` after an `isPrimitive()` check.\n * @beta\n */\n export type AnyPrimitiveProperty = PrimitiveProperty | PrimitiveArrayProperty;\n\n /** Any struct property (scalar or array). Useful for accessing `structClass` after an `isStruct()` check.\n * @beta\n */\n export type AnyStructProperty = StructProperty | StructArrayProperty;\n\n /** Any array property (primitive or struct). Useful for accessing `arrayMinOccurs`/`arrayMaxOccurs`\n * after an `isArray()` check.\n * @beta\n */\n export type AnyArrayProperty = PrimitiveArrayProperty | StructArrayProperty;\n\n /** Union of all concrete property types.\n * @beta\n */\n export type AnyProperty = PrimitiveProperty | PrimitiveArrayProperty\n | StructProperty | StructArrayProperty | NavigationProperty;\n\n /** @internal */\n export function createProperty(ctx: SchemaView, ref: PropertyRef, classIdx: number): Property {\n const kind = ctx[_storage].propDefs[ref.defIdx].kind;\n switch (kind) {\n case PropertyKind.Primitive: return new PrimitiveProperty(ctx, ref, classIdx);\n case PropertyKind.PrimitiveArray: return new PrimitiveArrayProperty(ctx, ref, classIdx);\n case PropertyKind.Struct: return new StructProperty(ctx, ref, classIdx);\n case PropertyKind.StructArray: return new StructArrayProperty(ctx, ref, classIdx);\n case PropertyKind.Navigation: return new NavigationProperty(ctx, ref, classIdx);\n default: throw new Error(`Unknown PropertyKind ${kind as number} for property \"${ctx[_storage].strings[ctx[_storage].propDefs[ref.defIdx].nameStringIdx]}\"`);\n }\n }\n\n /** Lightweight view over an enumeration in a `SchemaView`.\n * @beta\n */\n export class Enumeration {\n /** @internal */\n constructor(\n private readonly _ctx: SchemaView,\n /** @internal */ public readonly idx: number,\n ) { }\n\n private get _data() { return this._ctx[_storage].enumerations[this.idx]; }\n\n /** Row ID from ec_Enumeration. Matches `ECInstanceId` in ECDbMeta views, e.g.\n * `SELECT * FROM meta.ECEnumerationDef WHERE ECInstanceId = ?`.\n */\n public get ecInstanceId(): number { return this._data.ecInstanceId; }\n public get name(): string { return this._ctx[_storage].strings[this._data.nameStringIdx]; }\n public get label(): string {\n const sid = this._data.labelStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;\n }\n public get description(): string {\n const sid = this._data.descriptionStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n /** \"SchemaName:EnumName\" - colon-separated. */\n public get fullName(): string {\n const d = this._data;\n return `${this._ctx[_storage].strings[this._ctx[_storage].schemas[d.schemaIdx].nameStringIdx]}:${this._ctx[_storage].strings[d.nameStringIdx]}`;\n }\n public get schema(): Schema { return new Schema(this._ctx, this._data.schemaIdx); }\n public get primitiveType(): SchemaViewPrimitiveType { return this._data.primitiveType; }\n public get isStrict(): boolean { return this._data.isStrict; }\n\n /** Iterate enumerators in declaration order. */\n public *getEnumerators(): IterableIterator<Enumerator> {\n const d = this._data;\n for (let i = d.enumeratorStart; i < d.enumeratorStart + d.enumeratorCount; i++)\n yield new Enumerator(this._ctx, i);\n }\n\n /** Find enumerator by name (case-insensitive). */\n public getEnumeratorByName(name: string): Enumerator | undefined {\n const lower = name.toLowerCase();\n const d = this._data;\n for (let i = d.enumeratorStart; i < d.enumeratorStart + d.enumeratorCount; i++) {\n if (this._ctx[_storage].lowerStrings[this._ctx[_storage].enumerators[i].nameStringIdx] === lower)\n return new Enumerator(this._ctx, i);\n }\n return undefined;\n }\n\n /** Find enumerator by value. */\n public getEnumerator(value: number | string): Enumerator | undefined {\n const d = this._data;\n for (let i = d.enumeratorStart; i < d.enumeratorStart + d.enumeratorCount; i++) {\n if (this._ctx[_storage].enumerators[i].value === value)\n return new Enumerator(this._ctx, i);\n }\n return undefined;\n }\n }\n\n /** Thin view over an enumerator.\n * @beta\n */\n export class Enumerator {\n /** @internal */\n constructor(\n private readonly _ctx: SchemaView,\n /** @internal */ public readonly idx: number,\n ) { }\n\n private get _data() { return this._ctx[_storage].enumerators[this.idx]; }\n\n public get name(): string { return this._ctx[_storage].strings[this._data.nameStringIdx]; }\n public get label(): string {\n const sid = this._data.labelStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;\n }\n public get description(): string {\n const sid = this._data.descriptionStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n public get value(): number | string { return this._data.value; }\n }\n\n /** A parsed presentation format override from a KindOfQuantity. Names are alias-qualified\n * as stored in ECDb (e.g. `\"f:DefaultRealU\"`, `\"u:M\"`). The alias can be resolved to a\n * full schema name via the schema's alias if needed.\n *\n * Format string syntax: `formatName(precision)[unitName|label][unitName|label]...`\n * @beta\n */\n export interface PresentationFormat {\n /** Format name (alias-qualified), e.g. `\"f:DefaultRealU\"`. */\n readonly name: string;\n /** Precision override. `undefined` if the format string does not override precision. */\n readonly precision?: number;\n /** Unit overrides as `[unitName, labelOverride]` tuples. `unitName` is alias-qualified\n * (e.g. `\"u:M\"`). `labelOverride` is `undefined` when no label was specified, or a\n * string (possibly empty) when a `|` separator was present.\n */\n readonly unitAndLabels?: ReadonlyArray<readonly [string, string | undefined]>;\n }\n\n /** Parse a single format override string into a `PresentationFormat`.\n * @internal\n */\n export function parseFormatString(formatString: string): PresentationFormat {\n const nameMatch = /^([\\w.:]+)/.exec(formatString);\n if (!nameMatch)\n return { name: formatString };\n\n const name = nameMatch[1];\n const precMatch = /\\((\\d+)\\)/.exec(formatString);\n const precision = precMatch ? parseInt(precMatch[1], 10) : undefined;\n\n const bracketRgx = /\\[([^\\]]+)\\]/g;\n const units: Array<readonly [string, string | undefined]> = [];\n let m;\n while ((m = bracketRgx.exec(formatString)) !== null) {\n const pipeIdx = m[1].indexOf(\"|\");\n units.push(pipeIdx < 0 ? [m[1], undefined] : [m[1].substring(0, pipeIdx), m[1].substring(pipeIdx + 1)]);\n }\n\n return { name, precision, unitAndLabels: units.length > 0 ? units : undefined };\n }\n\n /** Lightweight view over a KindOfQuantity in a `SchemaView`.\n * @beta\n */\n export class KindOfQuantity {\n /** @internal */\n constructor(\n private readonly _ctx: SchemaView,\n /** @internal */ public readonly idx: number,\n ) { }\n\n private get _data() { return this._ctx[_storage].koqs[this.idx]; }\n\n /** Row ID from ec_KindOfQuantity. Matches `ECInstanceId` in ECDbMeta views, e.g.\n * `SELECT * FROM meta.ECKindOfQuantityDef WHERE ECInstanceId = ?`.\n */\n public get ecInstanceId(): number { return this._data.ecInstanceId; }\n public get name(): string { return this._ctx[_storage].strings[this._data.nameStringIdx]; }\n public get label(): string {\n const sid = this._data.labelStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;\n }\n public get description(): string {\n const sid = this._data.descriptionStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n /** \"SchemaName:KoqName\" - colon-separated. */\n public get fullName(): string {\n const d = this._data;\n return `${this._ctx[_storage].strings[this._ctx[_storage].schemas[d.schemaIdx].nameStringIdx]}:${this._ctx[_storage].strings[d.nameStringIdx]}`;\n }\n public get schema(): Schema { return new Schema(this._ctx, this._data.schemaIdx); }\n public get relativeError(): number { return this._data.relativeError; }\n /** Persistence unit as a full name string, e.g. \"Units:M\".\n *\n * On iModels still on ECDb profile `4.0.0.1` (predates the 2018 EC3.2 Units/Formats migration)\n * this string is in legacy FUS format rather than the EC3.2 alias-qualified form.\n * Upgrade the iModel's ECDb profile to get EC3.2 strings.\n */\n public get persistenceUnit(): string {\n const sid = this._data.persistenceUnitStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n // EC XML serializes this as \"presentationUnits\"; we use \"presentationFormats\" to align with KindOfQuantity.presentationFormats in ecschema-metadata.\n /** Raw presentation format string as stored in ECDb (`ec_KindOfQuantity.PresentationUnits`).\n * This is a JSON array of format override strings. Empty string if none are defined.\n * Prefer `presentationFormats` for structured access.\n *\n * On iModels still on ECDb profile `4.0.0.1` (predates the 2018 EC3.2 Units/Formats migration)\n * the strings are in legacy FUS format and will not parse via `presentationFormats`.\n * Upgrade the iModel's ECDb profile to get EC3.2 strings.\n */\n public get presentationFormatsRaw(): string {\n const sid = this._data.presentationFormatsStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n\n /** Presentation formats parsed into structured overrides. Each entry has the format name\n * (alias-qualified, e.g. `\"f:DefaultRealU\"`), optional precision override, and optional\n * unit-and-label overrides. Returns an empty array if no presentation formats are defined.\n *\n * Example - given a raw string of `[\"f:DefaultRealU(4)[u:M_PER_SEC_SQ]\",\"f:DefaultRealU(4)[u:CM_PER_SEC_SQ]\"]`:\n * ```ts\n * // [\n * // { name: \"f:DefaultRealU\", precision: 4, unitAndLabels: [[\"u:M_PER_SEC_SQ\", undefined]] },\n * // { name: \"f:DefaultRealU\", precision: 4, unitAndLabels: [[\"u:CM_PER_SEC_SQ\", undefined]] },\n * // ]\n * ```\n */\n public get presentationFormats(): readonly PresentationFormat[] {\n const raw = this.presentationFormatsRaw;\n if (raw === \"\")\n return [];\n const formats: string[] = JSON.parse(raw);\n return formats.map((f) => parseFormatString(f));\n }\n }\n\n /** Lightweight view over a PropertyCategory in a `SchemaView`.\n * @beta\n */\n export class PropertyCategory {\n /** @internal */\n constructor(\n private readonly _ctx: SchemaView,\n /** @internal */ public readonly idx: number,\n ) { }\n\n private get _data() { return this._ctx[_storage].propCategories[this.idx]; }\n\n /** Row ID from ec_PropertyCategory. Matches `ECInstanceId` in ECDbMeta views, e.g.\n * `SELECT * FROM meta.ECPropertyCategoryDef WHERE ECInstanceId = ?`.\n */\n public get ecInstanceId(): number { return this._data.ecInstanceId; }\n public get name(): string { return this._ctx[_storage].strings[this._data.nameStringIdx]; }\n public get label(): string {\n const sid = this._data.labelStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;\n }\n public get description(): string {\n const sid = this._data.descriptionStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n /** \"SchemaName:CategoryName\" - colon-separated. */\n public get fullName(): string {\n const d = this._data;\n return `${this._ctx[_storage].strings[this._ctx[_storage].schemas[d.schemaIdx].nameStringIdx]}:${this._ctx[_storage].strings[d.nameStringIdx]}`;\n }\n public get schema(): Schema { return new Schema(this._ctx, this._data.schemaIdx); }\n public get priority(): number { return this._data.priority; }\n }\n\n /** Lightweight view over a relationship constraint in a `SchemaView`.\n * @beta\n */\n export class RelConstraint {\n /** @internal */\n constructor(\n private readonly _ctx: SchemaView,\n private readonly _idx: number,\n ) { }\n\n private get _data() { return this._ctx[_storage].relConstraints[this._idx]; }\n\n public get abstractConstraint(): Class | undefined {\n const idx = this._data.abstractConstraintIdx;\n return idx !== -1 ? createClass(this._ctx, idx) : undefined;\n }\n public get polymorphic(): boolean { return this._data.polymorphic; }\n /** Multiplicity lower bound (0 = unbounded). */\n public get multiplicityLower(): number { return this._data.multiplicityLower; }\n /** Multiplicity upper bound (0 = unbounded). */\n public get multiplicityUpper(): number { return this._data.multiplicityUpper; }\n /** Role label string, or empty if not set. */\n public get roleLabel(): string {\n const sid = this._data.roleLabelStringIdx;\n return sid !== 0 ? this._ctx[_storage].strings[sid] : \"\";\n }\n public get constraintClasses(): readonly Class[] {\n const d = this._data;\n const result: Class[] = [];\n for (let i = 0; i < d.classRefCount; i++)\n result.push(createClass(this._ctx, this._ctx[_storage].constraintClassRefs[d.classRefStart + i]));\n return result;\n }\n }\n}\n"]}
@@ -0,0 +1,37 @@
1
+ /** @packageDocumentation
2
+ * @module Schema
3
+ */
4
+ import { type SchemaView } from "./SchemaView";
5
+ import { SchemaViewBuilder } from "./SchemaViewBuilder";
6
+ /** Reusable parse/merge context for SchemaView blobs. Holds the live `SchemaViewBuilder` plus the
7
+ * cross-reference maps that must persist across fragment merges. Each `mergeBlob` appends one blob's
8
+ * schemas into the shared builder and resolves cross-references - including cross-fragment ones -
9
+ * against the accumulated maps. A whole-iModel blob is the degenerate case of a single fragment.
10
+ * @note Fragments must be merged in dependency order, so a fragment only references schemas already
11
+ * merged by an earlier one (or excluded schemas, which resolve to "not present").
12
+ * @internal
13
+ */
14
+ export declare class SchemaViewMergeContext {
15
+ readonly builder: SchemaViewBuilder;
16
+ readonly schemaECIdToIdx: Map<number, number>;
17
+ readonly enumRowIdToIdx: Map<number, number>;
18
+ readonly koqRowIdToIdx: Map<number, number>;
19
+ readonly catRowIdToIdx: Map<number, number>;
20
+ readonly classRowIdToIdx: Map<number, number>;
21
+ readonly classResolver: Map<string, number>;
22
+ readonly schemaNames: string[];
23
+ /** Parse one fragment blob and append its schemas into the shared builder. Synchronous. */
24
+ mergeBlob(data: Uint8Array): void;
25
+ }
26
+ /** Parse a schema view blob (binary format) into a fresh `SchemaView`.
27
+ *
28
+ * Layout: Header, PropertyDefTable, SchemaTable, EnumTable, KoQTable, PropCatTable, ClassTable, StringTable.
29
+ * Each table is count-prefixed. Schema items carry their schema's ecInstanceId for ownership resolution.
30
+ * Classes have count-prefixed inline sub-items (base classes, property refs, constraints).
31
+ *
32
+ * Consumers should call `SchemaView.fromBinary` instead - this function is the low-level
33
+ * implementation behind it.
34
+ * @internal
35
+ */
36
+ export declare function parseSchemaViewBlob(data: Uint8Array, schemaToken?: string): SchemaView;
37
+ //# sourceMappingURL=SchemaViewBinaryReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaViewBinaryReader.d.ts","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewBinaryReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA+JxD;;;;;;;GAOG;AACH,qBAAa,sBAAsB;IACjC,SAAgB,OAAO,oBAA2B;IAIlD,SAAgB,eAAe,sBAA6B;IAC5D,SAAgB,cAAc,sBAA6B;IAC3D,SAAgB,aAAa,sBAA6B;IAC1D,SAAgB,aAAa,sBAA6B;IAC1D,SAAgB,eAAe,sBAA6B;IAG5D,SAAgB,aAAa,sBAA6B;IAE1D,SAAgB,WAAW,EAAE,MAAM,EAAE,CAAM;IAE3C,2FAA2F;IACpF,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;CAGzC;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAItF"}
@@ -7,10 +7,11 @@
7
7
  * @module Schema
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SchemaViewMergeContext = void 0;
10
11
  exports.parseSchemaViewBlob = parseSchemaViewBlob;
11
12
  const core_bentley_1 = require("@itwin/core-bentley");
12
- const SchemaView_1 = require("./SchemaView");
13
- const ECObjects_1 = require("./ECObjects");
13
+ const SchemaViewBuilder_1 = require("./SchemaViewBuilder");
14
+ const ECObjects_1 = require("../ECObjects");
14
15
  const SchemaViewInterfaces_1 = require("./SchemaViewInterfaces");
15
16
  /** Binary record tags for the SchemaView blob format.
16
17
  * Each tag marks a flat, count-prefixed table. Must stay in sync with the C++ writer. */
@@ -101,7 +102,35 @@ function expectTag(reader, expected) {
101
102
  if (tag !== expected)
102
103
  throw new Error(`Expected tag 0x${expected.toString(16)} but found 0x${tag.toString(16)} at offset ${reader.pos - 1}`);
103
104
  }
104
- /** Parse a schema view blob (binary format) into a `SchemaView`.
105
+ /** Reusable parse/merge context for SchemaView blobs. Holds the live `SchemaViewBuilder` plus the
106
+ * cross-reference maps that must persist across fragment merges. Each `mergeBlob` appends one blob's
107
+ * schemas into the shared builder and resolves cross-references - including cross-fragment ones -
108
+ * against the accumulated maps. A whole-iModel blob is the degenerate case of a single fragment.
109
+ * @note Fragments must be merged in dependency order, so a fragment only references schemas already
110
+ * merged by an earlier one (or excluded schemas, which resolve to "not present").
111
+ * @internal
112
+ */
113
+ class SchemaViewMergeContext {
114
+ builder = new SchemaViewBuilder_1.SchemaViewBuilder();
115
+ // Cross-reference maps. Persist across fragments: a row id / name from a later fragment resolves
116
+ // against a class, enum, koq, or category merged by an earlier fragment.
117
+ schemaECIdToIdx = new Map();
118
+ enumRowIdToIdx = new Map();
119
+ koqRowIdToIdx = new Map();
120
+ catRowIdToIdx = new Map();
121
+ classRowIdToIdx = new Map();
122
+ // "schemaname:classname" (both lowercased) -> global class index. Resolves base/mixin/constraint
123
+ // refs, which the blob encodes as schema+class name pairs, across fragment boundaries.
124
+ classResolver = new Map();
125
+ // global schemaIdx -> schema name, for building resolver keys and dangling-ref diagnostics.
126
+ schemaNames = [];
127
+ /** Parse one fragment blob and append its schemas into the shared builder. Synchronous. */
128
+ mergeBlob(data) {
129
+ mergeFragmentBlob(this, data);
130
+ }
131
+ }
132
+ exports.SchemaViewMergeContext = SchemaViewMergeContext;
133
+ /** Parse a schema view blob (binary format) into a fresh `SchemaView`.
105
134
  *
106
135
  * Layout: Header, PropertyDefTable, SchemaTable, EnumTable, KoQTable, PropCatTable, ClassTable, StringTable.
107
136
  * Each table is count-prefixed. Schema items carry their schema's ecInstanceId for ownership resolution.
@@ -112,6 +141,16 @@ function expectTag(reader, expected) {
112
141
  * @internal
113
142
  */
114
143
  function parseSchemaViewBlob(data, schemaToken) {
144
+ const ctx = new SchemaViewMergeContext();
145
+ ctx.mergeBlob(data);
146
+ return ctx.builder.build(schemaToken);
147
+ }
148
+ /** Parse one fragment blob and append it into the context's builder, resolving cross-references
149
+ * against the context's accumulated global maps. Per-fragment scratch state stays local; everything
150
+ * that must outlive the fragment lives on `ctx`.
151
+ */
152
+ function mergeFragmentBlob(ctx, data) {
153
+ const builder = ctx.builder;
115
154
  const reader = new BinaryReader(data);
116
155
  // Header: magic(4) + version(1) + stringTableOffset(4)
117
156
  const magic = reader.readU32();
@@ -122,16 +161,10 @@ function parseSchemaViewBlob(data, schemaToken) {
122
161
  throw new Error(`Unsupported schema view format version: ${version}, expected ${SchemaViewInterfaces_1.schemaViewFormatVersion}`);
123
162
  const stOffset = reader.readU32();
124
163
  reader.parseStringTable(stOffset);
125
- const builder = new SchemaView_1.SchemaViewBuilder();
126
- // Cross-reference maps (ecInstanceId -> builder array index)
127
- const schemaEcIdToIdx = new Map();
128
- const enumRowIdToIdx = new Map();
129
- const koqRowIdToIdx = new Map();
130
- const catRowIdToIdx = new Map();
131
- const classRowIdToIdx = new Map();
132
- // Per-schema metadata for name-based class resolution
133
- const schemaInfos = [];
134
- // Per-schema item range tracking (indexed by schemaIdx)
164
+ // Global index of the first schema this fragment adds. Local schema index = global - base.
165
+ const schemaBaseIdx = builder.schemaCount;
166
+ const { schemaECIdToIdx: schemaEcIdToIdx, enumRowIdToIdx, koqRowIdToIdx, catRowIdToIdx, classRowIdToIdx, classResolver } = ctx;
167
+ // Per-schema item range tracking, indexed by LOCAL schema index (0-based within this fragment).
135
168
  const schemaEnumStarts = [];
136
169
  const schemaEnumCounts = [];
137
170
  const schemaKoqStarts = [];
@@ -140,14 +173,14 @@ function parseSchemaViewBlob(data, schemaToken) {
140
173
  const schemaCatCounts = [];
141
174
  const schemaClassStarts = [];
142
175
  const schemaClassCounts = [];
143
- // Deferred class data for cross-reference resolution
176
+ // Deferred class data for cross-reference resolution (local to this fragment).
144
177
  const pendingClasses = [];
145
178
  // ---- PropertyDefTable ----
146
179
  expectTag(reader, Tag.PropertyDefTable);
147
180
  const defCount = reader.readU32();
148
- // Each PreParsedDef consumes at least ~30 bytes (mix of u8/u16/u32 fields + string refs).
149
- // Use a conservative lower bound of 8 bytes to catch wildly oversized counts on malformed blobs.
150
- reader.validateCount(defCount, 8, "PropertyDefTable");
181
+ // Each PreParsedDef is a fixed 46 bytes (10x u32 + 1x u16 + 4x u8). The bound is deliberately
182
+ // about half that, so a valid blob never trips the check.
183
+ reader.validateCount(defCount, 23, "PropertyDefTable");
151
184
  const preParsedDefs = new Array(defCount);
152
185
  for (let i = 0; i < defCount; i++) {
153
186
  preParsedDefs[i] = {
@@ -171,7 +204,8 @@ function parseSchemaViewBlob(data, schemaToken) {
171
204
  // ---- SchemaTable ----
172
205
  expectTag(reader, Tag.SchemaTable);
173
206
  const schemaCount = reader.readU32();
174
- reader.validateCount(schemaCount, 8, "SchemaTable");
207
+ // Fixed 27 bytes per record (4x SRef + 3x u16 + u32 + u8).
208
+ reader.validateCount(schemaCount, 13, "SchemaTable");
175
209
  for (let i = 0; i < schemaCount; i++) {
176
210
  const name = reader.readSRef();
177
211
  const vRead = reader.readU16();
@@ -198,7 +232,7 @@ function parseSchemaViewBlob(data, schemaToken) {
198
232
  isHidden,
199
233
  });
200
234
  schemaEcIdToIdx.set(ecInstanceId, schemaIdx);
201
- schemaInfos.push({ name, schemaIdx, classNameToIdx: new Map() });
235
+ ctx.schemaNames[schemaIdx] = name;
202
236
  schemaEnumStarts.push(0);
203
237
  schemaEnumCounts.push(0);
204
238
  schemaKoqStarts.push(0);
@@ -208,25 +242,31 @@ function parseSchemaViewBlob(data, schemaToken) {
208
242
  schemaClassStarts.push(0);
209
243
  schemaClassCounts.push(0);
210
244
  }
211
- /** Track an item's schema ownership and update range counters. */
245
+ /** Track an item's schema ownership and update its owning schema's range counters. `globalIdx`
246
+ * is the item's global index in the builder; `starts`/`counts` are indexed by LOCAL schema index.
247
+ * An item must be owned by a schema in its own fragment, so a foreign owner is a malformed blob. */
212
248
  function trackItem(schemaEcId, globalIdx, starts, counts) {
213
249
  const schemaIdx = schemaEcIdToIdx.get(schemaEcId);
214
250
  if (schemaIdx === undefined)
215
251
  throw new Error(`SchemaView blob: unknown schema ecInstanceId ${schemaEcId}`);
216
- if (counts[schemaIdx] === 0)
217
- starts[schemaIdx] = globalIdx;
218
- counts[schemaIdx]++;
252
+ const localIdx = schemaIdx - schemaBaseIdx;
253
+ if (localIdx < 0 || localIdx >= schemaCount)
254
+ throw new Error(`SchemaView fragment: item references schema ecInstanceId ${schemaEcId} not present in this fragment`);
255
+ if (counts[localIdx] === 0)
256
+ starts[localIdx] = globalIdx;
257
+ counts[localIdx]++;
219
258
  return schemaIdx;
220
259
  }
221
260
  // ---- EnumTable ----
222
261
  expectTag(reader, Tag.EnumTable);
223
262
  const enumTotalCount = reader.readU32();
224
- reader.validateCount(enumTotalCount, 8, "EnumTable");
263
+ // Fixed 27 bytes per record (4x SRef + 2x u32 + u16 + u8); enumerators live inside a JSON SRef.
264
+ reader.validateCount(enumTotalCount, 13, "EnumTable");
225
265
  for (let i = 0; i < enumTotalCount; i++) {
226
266
  const schemaEcId = reader.readU32();
227
- const schemaIdx = trackItem(schemaEcId, i, schemaEnumStarts, schemaEnumCounts);
267
+ const schemaIdx = trackItem(schemaEcId, builder.enumerationCount, schemaEnumStarts, schemaEnumCounts);
228
268
  const eName = reader.readSRef();
229
- const ePrimType = reader.readU8();
269
+ const ePrimType = reader.readU16();
230
270
  const eIsStrict = reader.readU8() !== 0;
231
271
  const eLabel = reader.readSRef();
232
272
  const eDesc = reader.readSRef();
@@ -270,10 +310,11 @@ function parseSchemaViewBlob(data, schemaToken) {
270
310
  // ---- KoQTable ----
271
311
  expectTag(reader, Tag.KoQTable);
272
312
  const koqTotalCount = reader.readU32();
273
- reader.validateCount(koqTotalCount, 8, "KoQTable");
313
+ // Fixed 36 bytes per record (6x SRef + f64 + u32).
314
+ reader.validateCount(koqTotalCount, 18, "KoQTable");
274
315
  for (let i = 0; i < koqTotalCount; i++) {
275
316
  const schemaEcId = reader.readU32();
276
- const schemaIdx = trackItem(schemaEcId, i, schemaKoqStarts, schemaKoqCounts);
317
+ const schemaIdx = trackItem(schemaEcId, builder.koqCount, schemaKoqStarts, schemaKoqCounts);
277
318
  const kName = reader.readSRef();
278
319
  const kLabel = reader.readSRef();
279
320
  const kDesc = reader.readSRef();
@@ -296,10 +337,11 @@ function parseSchemaViewBlob(data, schemaToken) {
296
337
  // ---- PropCatTable ----
297
338
  expectTag(reader, Tag.PropCatTable);
298
339
  const catTotalCount = reader.readU32();
299
- reader.validateCount(catTotalCount, 8, "PropCatTable");
340
+ // Fixed 24 bytes per record (4x SRef + i32 + u32).
341
+ reader.validateCount(catTotalCount, 12, "PropCatTable");
300
342
  for (let i = 0; i < catTotalCount; i++) {
301
343
  const schemaEcId = reader.readU32();
302
- const schemaIdx = trackItem(schemaEcId, i, schemaCatStarts, schemaCatCounts);
344
+ const schemaIdx = trackItem(schemaEcId, builder.propCategoryCount, schemaCatStarts, schemaCatCounts);
303
345
  const pcName = reader.readSRef();
304
346
  const pcLabel = reader.readSRef();
305
347
  const pcDesc = reader.readSRef();
@@ -318,11 +360,13 @@ function parseSchemaViewBlob(data, schemaToken) {
318
360
  // ---- ClassTable ----
319
361
  expectTag(reader, Tag.ClassTable);
320
362
  const classTotalCount = reader.readU32();
321
- reader.validateCount(classTotalCount, 8, "ClassTable");
363
+ // Minimum 27 bytes per record (3x SRef + 3x u8 + u32 + 2x u16 count prefixes); records grow with
364
+ // relationship strength/direction and the base-class, prop-ref, and constraint sub-lists.
365
+ reader.validateCount(classTotalCount, 13, "ClassTable");
322
366
  for (let i = 0; i < classTotalCount; i++) {
323
367
  const schemaEcId = reader.readU32();
324
- const schemaIdx = trackItem(schemaEcId, i, schemaClassStarts, schemaClassCounts);
325
- const schemaInfo = schemaInfos[schemaIdx];
368
+ const schemaIdx = trackItem(schemaEcId, builder.classCount, schemaClassStarts, schemaClassCounts);
369
+ const schemaName = ctx.schemaNames[schemaIdx];
326
370
  const cName = reader.readSRef();
327
371
  const cType = reader.readU8();
328
372
  const cModifier = reader.readU8();
@@ -412,7 +456,7 @@ function parseSchemaViewBlob(data, schemaToken) {
412
456
  targetConstraintIdx: -1,
413
457
  isHidden: cIsHidden,
414
458
  });
415
- schemaInfo.classNameToIdx.set(cName.toLowerCase(), classIdx);
459
+ classResolver.set(`${schemaName.toLowerCase()}:${cName.toLowerCase()}`, classIdx);
416
460
  classRowIdToIdx.set(cEcInstanceId, classIdx);
417
461
  pendingClasses.push({
418
462
  schemaIdx,
@@ -428,13 +472,14 @@ function parseSchemaViewBlob(data, schemaToken) {
428
472
  baseClasses,
429
473
  propRefs,
430
474
  constraints,
431
- schemaName: schemaInfo.name,
475
+ schemaName,
432
476
  isHidden: cIsHidden,
433
477
  });
434
478
  }
435
479
  // ---- Finalize per-schema item ranges ----
480
+ // Local index i maps to global schema index schemaBaseIdx + i; range starts are already global.
436
481
  for (let i = 0; i < schemaCount; i++) {
437
- builder.updateSchemaRanges(i, {
482
+ builder.updateSchemaRanges(schemaBaseIdx + i, {
438
483
  classRangeStart: schemaClassStarts[i] ?? 0,
439
484
  classCount: schemaClassCounts[i] ?? 0,
440
485
  enumRangeStart: schemaEnumStarts[i] ?? 0,
@@ -445,12 +490,6 @@ function parseSchemaViewBlob(data, schemaToken) {
445
490
  catCount: schemaCatCounts[i] ?? 0,
446
491
  });
447
492
  }
448
- // Build a global name resolver: "SchemaName:ClassName" -> classIdx
449
- const classResolver = new Map();
450
- for (const s of schemaInfos) {
451
- for (const [lowerName, idx] of s.classNameToIdx)
452
- classResolver.set(`${s.name.toLowerCase()}:${lowerName}`, idx);
453
- }
454
493
  // Resolve pre-parsed defs to PropertyDef objects. Maps preParsedDef index -> builder defIdx.
455
494
  const danglingRefs = [];
456
495
  const resolvedDefMap = new Map();
@@ -605,6 +644,8 @@ function parseSchemaViewBlob(data, schemaToken) {
605
644
  const lines = danglingRefs.length <= cap ? danglingRefs : [...danglingRefs.slice(0, cap), `... and ${danglingRefs.length - cap} more`];
606
645
  core_bentley_1.Logger.logWarning("ecschema-metadata.SchemaView", `${danglingRefs.length} unresolved cross-reference(s) in schema view blob (likely from excluded schemas):\n ${lines.join("\n ")}`);
607
646
  }
608
- return builder.build(schemaToken);
647
+ // Bring the builder's lookup maps up to date for the schemas this fragment added. Their item
648
+ // ranges were finalized above, so the per-schema name maps build correctly.
649
+ builder.extendLookupMaps();
609
650
  }
610
651
  //# sourceMappingURL=SchemaViewBinaryReader.js.map